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

Reduce requirements for ILineContext

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