提交 0d133e05 编写于 作者: A Alex Dima

Reduce requirements for ILineContext

上级 be4eb525
...@@ -7,17 +7,30 @@ ...@@ -7,17 +7,30 @@
import {IMode, IModeTransition} from 'vs/editor/common/modes'; import {IMode, IModeTransition} from 'vs/editor/common/modes';
import {Arrays} from 'vs/editor/common/core/arrays'; import {Arrays} from 'vs/editor/common/core/arrays';
export class ModeTransition { export class ReducedModeTransition {
_modeTransitionBrand: void; _reducedModeTransitionBrand: void;
public startIndex:number; public startIndex:number;
public mode:IMode;
public modeId: string; public modeId: string;
constructor(startIndex:number, mode:IMode) { constructor(startIndex:number, modeId:string) {
this.startIndex = startIndex|0; this.startIndex = startIndex|0;
this.modeId = modeId;
}
public static findIndexInSegmentsArray(arr:ReducedModeTransition[], desiredIndex: number): number {
return Arrays.findIndexInSegmentsArray(arr, desiredIndex);
}
}
export class ModeTransition extends ReducedModeTransition {
_modeTransitionBrand: void;
public mode:IMode;
constructor(startIndex:number, mode:IMode) {
super(startIndex, mode.getId());
this.mode = mode; this.mode = mode;
this.modeId = mode.getId();
} }
public static findIndexInSegmentsArray(arr:ModeTransition[], desiredIndex: number): number { public static findIndexInSegmentsArray(arr:ModeTransition[], desiredIndex: number): number {
......
...@@ -10,7 +10,7 @@ import URI from 'vs/base/common/uri'; ...@@ -10,7 +10,7 @@ import URI from 'vs/base/common/uri';
import {TPromise} from 'vs/base/common/winjs.base'; import {TPromise} from 'vs/base/common/winjs.base';
import {IFilter} from 'vs/base/common/filters'; import {IFilter} from 'vs/base/common/filters';
import * as editorCommon from 'vs/editor/common/editorCommon'; import * as editorCommon from 'vs/editor/common/editorCommon';
import {ModeTransition} from 'vs/editor/common/core/modeTransition'; import {ReducedModeTransition} from 'vs/editor/common/core/modeTransition';
import LanguageFeatureRegistry from 'vs/editor/common/modes/languageFeatureRegistry'; import LanguageFeatureRegistry from 'vs/editor/common/modes/languageFeatureRegistry';
import {CancellationToken} from 'vs/base/common/cancellation'; import {CancellationToken} from 'vs/base/common/cancellation';
import {Position} from 'vs/editor/common/core/position'; import {Position} from 'vs/editor/common/core/position';
...@@ -170,7 +170,7 @@ export interface IModeDescriptor { ...@@ -170,7 +170,7 @@ export interface IModeDescriptor {
export interface ILineContext { export interface ILineContext {
getLineContent(): string; getLineContent(): string;
modeTransitions: ModeTransition[]; modeTransitions: ReducedModeTransition[];
getTokenCount(): number; getTokenCount(): number;
getTokenStartIndex(tokenIndex:number): number; getTokenStartIndex(tokenIndex:number): number;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
import {TPromise} from 'vs/base/common/winjs.base'; import {TPromise} from 'vs/base/common/winjs.base';
import * as modes from 'vs/editor/common/modes'; import * as modes from 'vs/editor/common/modes';
import {ModeTransition} from 'vs/editor/common/core/modeTransition'; import {ModeTransition, ReducedModeTransition} from 'vs/editor/common/core/modeTransition';
export class Token implements modes.IToken { export class Token implements modes.IToken {
_tokenBrand: void; _tokenBrand: void;
...@@ -43,18 +43,18 @@ export class LineTokens implements modes.ILineTokens { ...@@ -43,18 +43,18 @@ export class LineTokens implements modes.ILineTokens {
} }
export function handleEvent<T>(context:modes.ILineContext, offset:number, runner:(modeId:string, newContext:modes.ILineContext, offset:number)=>T):T { export function handleEvent<T>(context:modes.ILineContext, offset:number, runner:(modeId:string, newContext:modes.ILineContext, offset:number)=>T):T {
var modeTransitions = context.modeTransitions; let modeTransitions = context.modeTransitions;
if (modeTransitions.length === 1) { if (modeTransitions.length === 1) {
return runner(modeTransitions[0].modeId, context, offset); return runner(modeTransitions[0].modeId, context, offset);
} }
var modeIndex = ModeTransition.findIndexInSegmentsArray(modeTransitions, offset); let modeIndex = ReducedModeTransition.findIndexInSegmentsArray(modeTransitions, offset);
var nestedMode = modeTransitions[modeIndex].mode; let nestedModeId = modeTransitions[modeIndex].modeId;
var modeStartIndex = modeTransitions[modeIndex].startIndex; let modeStartIndex = modeTransitions[modeIndex].startIndex;
var firstTokenInModeIndex = context.findIndexOfOffset(modeStartIndex); let firstTokenInModeIndex = context.findIndexOfOffset(modeStartIndex);
var nextCharacterAfterModeIndex = -1; let nextCharacterAfterModeIndex = -1;
var nextTokenAfterMode = -1; let nextTokenAfterMode = -1;
if (modeIndex + 1 < modeTransitions.length) { if (modeIndex + 1 < modeTransitions.length) {
nextTokenAfterMode = context.findIndexOfOffset(modeTransitions[modeIndex + 1].startIndex); nextTokenAfterMode = context.findIndexOfOffset(modeTransitions[modeIndex + 1].startIndex);
nextCharacterAfterModeIndex = context.getTokenStartIndex(nextTokenAfterMode); nextCharacterAfterModeIndex = context.getTokenStartIndex(nextTokenAfterMode);
...@@ -63,14 +63,14 @@ export function handleEvent<T>(context:modes.ILineContext, offset:number, runner ...@@ -63,14 +63,14 @@ export function handleEvent<T>(context:modes.ILineContext, offset:number, runner
nextCharacterAfterModeIndex = context.getLineContent().length; nextCharacterAfterModeIndex = context.getLineContent().length;
} }
var firstTokenCharacterOffset = context.getTokenStartIndex(firstTokenInModeIndex); let firstTokenCharacterOffset = context.getTokenStartIndex(firstTokenInModeIndex);
var newCtx = new FilteredLineContext(context, nestedMode, firstTokenInModeIndex, nextTokenAfterMode, firstTokenCharacterOffset, nextCharacterAfterModeIndex); let newCtx = new FilteredLineContext(context, nestedModeId, firstTokenInModeIndex, nextTokenAfterMode, firstTokenCharacterOffset, nextCharacterAfterModeIndex);
return runner(nestedMode.getId(), newCtx, offset - firstTokenCharacterOffset); return runner(nestedModeId, newCtx, offset - firstTokenCharacterOffset);
} }
export class FilteredLineContext implements modes.ILineContext { export class FilteredLineContext implements modes.ILineContext {
public modeTransitions: ModeTransition[]; public modeTransitions: ReducedModeTransition[];
private _actual:modes.ILineContext; private _actual:modes.ILineContext;
private _firstTokenInModeIndex:number; private _firstTokenInModeIndex:number;
...@@ -78,11 +78,11 @@ export class FilteredLineContext implements modes.ILineContext { ...@@ -78,11 +78,11 @@ export class FilteredLineContext implements modes.ILineContext {
private _firstTokenCharacterOffset:number; private _firstTokenCharacterOffset:number;
private _nextCharacterAfterModeIndex:number; private _nextCharacterAfterModeIndex:number;
constructor(actual:modes.ILineContext, mode:modes.IMode, constructor(actual:modes.ILineContext, modeId:string,
firstTokenInModeIndex:number, nextTokenAfterMode:number, firstTokenInModeIndex:number, nextTokenAfterMode:number,
firstTokenCharacterOffset:number, nextCharacterAfterModeIndex:number) { firstTokenCharacterOffset:number, nextCharacterAfterModeIndex:number) {
this.modeTransitions = [new ModeTransition(0, mode)]; this.modeTransitions = [new ReducedModeTransition(0, modeId)];
this._actual = actual; this._actual = actual;
this._firstTokenInModeIndex = firstTokenInModeIndex; this._firstTokenInModeIndex = firstTokenInModeIndex;
this._nextTokenAfterMode = nextTokenAfterMode; this._nextTokenAfterMode = nextTokenAfterMode;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册