diff --git a/src/vs/editor/browser/view/domLineBreaksComputer.ts b/src/vs/editor/browser/view/domLineBreaksComputer.ts index d6fdf8f5997..d15e7ce7dbf 100644 --- a/src/vs/editor/browser/view/domLineBreaksComputer.ts +++ b/src/vs/editor/browser/view/domLineBreaksComputer.ts @@ -29,19 +29,20 @@ export class DOMLineBreaksComputerFactory implements ILineBreaksComputerFactory wrappingColumn = +wrappingColumn; //@perf let requests: string[] = []; + let injectedTexts: (LineInjectedText[] | null)[] = []; return { addRequest: (lineText: string, injectedText: LineInjectedText[] | null, previousLineBreakData: LineBreakData | null) => { - // TODO: handle injectedText requests.push(lineText); + injectedTexts.push(injectedText); }, finalize: () => { - return createLineBreaks(requests, fontInfo, tabSize, wrappingColumn, wrappingIndent); + return createLineBreaks(requests, fontInfo, tabSize, wrappingColumn, wrappingIndent, injectedTexts); } }; } } -function createLineBreaks(requests: string[], fontInfo: FontInfo, tabSize: number, firstLineBreakColumn: number, wrappingIndent: WrappingIndent): (LineBreakData | null)[] { +function createLineBreaks(requests: string[], fontInfo: FontInfo, tabSize: number, firstLineBreakColumn: number, wrappingIndent: WrappingIndent, injectedTexts: (LineInjectedText[] | null)[]): (LineBreakData | null)[] { if (firstLineBreakColumn === -1) { const result: null[] = []; for (let i = 0, len = requests.length; i < len; i++) { @@ -68,7 +69,7 @@ function createLineBreaks(requests: string[], fontInfo: FontInfo, tabSize: numbe const allCharOffsets: number[][] = []; const allVisibleColumns: number[][] = []; for (let i = 0; i < requests.length; i++) { - const lineContent = requests[i]; + const lineContent = LineInjectedText.applyInjectedText(requests[i], injectedTexts[i]); let firstNonWhitespaceIndex = 0; let wrappedTextIndentLength = 0; @@ -149,7 +150,18 @@ function createLineBreaks(requests: string[], fontInfo: FontInfo, tabSize: numbe } } - result[i] = new LineBreakData(breakOffsets, breakOffsetsVisibleColumn, wrappedTextIndentLength, null, null); + let injectionTexts: string[] | null; + let injectionOffsets: number[] | null; + const curInjectedTexts = injectedTexts[i]; + if (curInjectedTexts) { + injectionTexts = curInjectedTexts.map(t => t.text); + injectionOffsets = curInjectedTexts.map(text => text.column - 1); + } else { + injectionTexts = null; + injectionOffsets = null; + } + + result[i] = new LineBreakData(breakOffsets, breakOffsetsVisibleColumn, wrappedTextIndentLength, injectionTexts, injectionOffsets); } document.body.removeChild(containerDomNode);