Adds support for injected text to domLineBreaksComputer

This commit is contained in:
Henning Dieterichs
2021-06-21 18:06:57 +02:00
parent 0993b859d6
commit 9c45a3026d

View File

@@ -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);