提交 94ccb584 编写于 作者: A Alex Dima

Use concrete types

上级 ba6f665c
......@@ -5,8 +5,8 @@
'use strict';
import * as strings from 'vs/base/common/strings';
import {ILineTokens, IReadOnlyLineMarker, ITokensInflatorMap} from 'vs/editor/common/editorCommon';
import {IMode, IModeTransition, IState, IToken} from 'vs/editor/common/modes';
import {ILineTokens, IReadOnlyLineMarker, ITokensInflatorMap, LineToken} from 'vs/editor/common/editorCommon';
import {IMode, IState} from 'vs/editor/common/modes';
import * as TokensBinaryEncoding from 'vs/editor/common/model/tokensBinaryEncoding';
import {ModeTransition} from 'vs/editor/common/core/modeTransition';
......@@ -104,13 +104,6 @@ export class ModelLine {
// --- BEGIN MODE TRANSITIONS
private _setModeTransitions(topLevelMode:IMode, modeTransitions:IModeTransition[]): void {
let desired = toModeTransitions(topLevelMode, modeTransitions);
this._modeTransitions = desired;
}
public getModeTransitions(topLevelMode:IMode): ModeTransition[] {
if (this._modeTransitions) {
return this._modeTransitions;
......@@ -123,23 +116,13 @@ export class ModelLine {
// --- BEGIN TOKENS
public setTokens(map: ITokensInflatorMap, tokens: IToken[], topLevelMode:IMode, modeTransitions:IModeTransition[]): void {
this._setLineTokensFromInflated(map, tokens);
this._setModeTransitions(topLevelMode, modeTransitions);
}
private _setLineTokensFromInflated(map:ITokensInflatorMap, tokens:IToken[]): void {
let desired = toLineTokensFromInflated(map, tokens, this._text.length);
this._lineTokens = desired;
public setTokens(map: ITokensInflatorMap, tokens: LineToken[], topLevelMode:IMode, modeTransitions:ModeTransition[]): void {
this._lineTokens = toLineTokensFromInflated(map, tokens, this._text.length);
this._modeTransitions = toModeTransitions(topLevelMode, modeTransitions);
}
private _setLineTokensFromDeflated(map:ITokensInflatorMap, tokens:number[]): void {
let desired = toLineTokensFromDeflated(map, tokens, this._text.length);
this._lineTokens = desired;
this._lineTokens = toLineTokensFromDeflated(map, tokens, this._text.length);
}
public getTokens(): ILineTokens {
......@@ -642,7 +625,7 @@ export class ModelLine {
}
}
function toLineTokensFromInflated(map:ITokensInflatorMap, tokens:IToken[], textLength:number): ILineTokens {
function toLineTokensFromInflated(map:ITokensInflatorMap, tokens:LineToken[], textLength:number): ILineTokens {
if (textLength === 0) {
return null;
}
......@@ -683,7 +666,7 @@ export class LineTokens implements ILineTokens {
private map:ITokensInflatorMap;
private _tokens:number[];
constructor(map:ITokensInflatorMap, tokens:/*IToken[]|*/number[]) {
constructor(map:ITokensInflatorMap, tokens:number[]) {
this.map = map;
this._tokens = tokens;
}
......@@ -805,7 +788,7 @@ export class DefaultLineTokens implements ILineTokens {
}
function toModeTransitions(topLevelMode:IMode, modeTransitions:IModeTransition[]): ModeTransition[] {
function toModeTransitions(topLevelMode:IMode, modeTransitions:ModeTransition[]): ModeTransition[] {
if (!modeTransitions || modeTransitions.length === 0) {
return null;
......@@ -813,5 +796,5 @@ function toModeTransitions(topLevelMode:IMode, modeTransitions:IModeTransition[]
return null;
}
return ModeTransition.create(modeTransitions);
return modeTransitions;
}
......@@ -18,7 +18,7 @@ import {ModelLine} from 'vs/editor/common/model/modelLine';
import {TextModel} from 'vs/editor/common/model/textModel';
import {WordHelper} from 'vs/editor/common/model/textModelWithTokensHelpers';
import {TokenIterator} from 'vs/editor/common/model/tokenIterator';
import {ILineContext, ILineTokens, IMode, IState} from 'vs/editor/common/modes';
import {ILineContext, ILineTokens, IToken, IModeTransition, IMode, IState} from 'vs/editor/common/modes';
import {NullMode, NullState, nullTokenize} from 'vs/editor/common/modes/nullMode';
import {ignoreBracketsInToken} from 'vs/editor/common/modes/supports';
import {BracketsUtils} from 'vs/editor/common/modes/supports/richEditBrackets';
......@@ -535,8 +535,36 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke
}
}
_updateLineTokens(lineIndex:number, map:editorCommon.ITokensInflatorMap, topLevelMode:IMode, r:ILineTokens): void {
this._lines[lineIndex].setTokens(map, r.tokens, topLevelMode, r.modeTransitions);
private static _toLineTokens(tokens:IToken[]): editorCommon.LineToken[] {
if (!tokens || tokens.length === 0) {
return [];
}
if (tokens[0] instanceof editorCommon.LineToken) {
return <editorCommon.LineToken[]>tokens;
}
let result:editorCommon.LineToken[] = [];
for (let i = 0, len = tokens.length; i < len; i++) {
result[i] = new editorCommon.LineToken(tokens[i].startIndex, tokens[i].type);
}
return result;
}
private static _toModeTransitions(modeTransitions:IModeTransition[]): ModeTransition[] {
if (!modeTransitions || modeTransitions.length === 0) {
return [];
}
if (modeTransitions[0] instanceof ModeTransition) {
return <ModeTransition[]>modeTransitions;
}
let result:ModeTransition[] = [];
for (let i = 0, len = modeTransitions.length; i < len; i++) {
result[i] = new ModeTransition(modeTransitions[i].startIndex, modeTransitions[i].mode);
}
return result;
}
private _updateLineTokens(lineIndex:number, map:editorCommon.ITokensInflatorMap, topLevelMode:IMode, r:ILineTokens): void {
this._lines[lineIndex].setTokens(map, TextModelWithTokens._toLineTokens(r.tokens), topLevelMode, TextModelWithTokens._toModeTransitions(r.modeTransitions));
}
private _beginBackgroundTokenization(): void {
......
......@@ -7,7 +7,6 @@
import {onUnexpectedError} from 'vs/base/common/errors';
import * as strings from 'vs/base/common/strings';
import {ITokensInflatorMap, LineToken} from 'vs/editor/common/editorCommon';
import {IToken} from 'vs/editor/common/modes';
export var START_INDEX_MASK = 0xffffffff;
export var TYPE_MASK = 0xffff;
......@@ -20,7 +19,7 @@ var DEFLATED_TOKENS_EMPTY_TEXT:number[] = [];
var INFLATED_TOKENS_NON_EMPTY_TEXT:LineToken[] = [DEFAULT_TOKEN];
var DEFLATED_TOKENS_NON_EMPTY_TEXT:number[] = [0];
export function deflateArr(map:ITokensInflatorMap, tokens:IToken[]): number[] {
export function deflateArr(map:ITokensInflatorMap, tokens:LineToken[]): number[] {
if (tokens.length === 0) {
return DEFLATED_TOKENS_EMPTY_TEXT;
}
......@@ -32,7 +31,7 @@ export function deflateArr(map:ITokensInflatorMap, tokens:IToken[]): number[] {
len:number,
deflatedToken:number,
deflated:number,
token:IToken,
token:LineToken,
inflateMap = map._inflate,
deflateMap = map._deflate,
prevStartIndex:number = -1,
......@@ -80,7 +79,7 @@ export function deflateArr(map:ITokensInflatorMap, tokens:IToken[]): number[] {
return result;
}
export function inflate(map:ITokensInflatorMap, binaryEncodedToken:number): IToken {
export function inflate(map:ITokensInflatorMap, binaryEncodedToken:number): LineToken {
if (binaryEncodedToken === 0) {
return DEFAULT_TOKEN;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册