mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-28 12:33:35 +01:00
Adds support for injected text to domLineBreaksComputer
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user