提交 47e2a847 编写于 作者: A Alex Dima

Fixes #12839: use width when reading position of last column in whitespace only line

上级 18cac377
......@@ -34,6 +34,7 @@ export class ViewLine implements IVisibleLineData {
protected _charOffsetInPart: number[];
private _lastRenderedPartIndex: number;
private _isWhitespaceOnly: boolean;
private _cachedWidth: number;
constructor(context: ViewContext) {
......@@ -50,6 +51,7 @@ export class ViewLine implements IVisibleLineData {
this._lineParts = null;
this._charOffsetInPart = [];
this._lastRenderedPartIndex = 0;
this._isWhitespaceOnly = false;
}
// --- begin IVisibleLineData
......@@ -177,6 +179,7 @@ export class ViewLine implements IVisibleLineData {
this._charOffsetInPart = r.charOffsetInPart;
this._lastRenderedPartIndex = r.lastRenderedPartIndex;
this._isWhitespaceOnly = r.isWhitespaceOnly;
return r.output;
}
......@@ -237,6 +240,11 @@ export class ViewLine implements IVisibleLineData {
return [new HorizontalRange(0, 0)];
}
if (column === this._charOffsetInPart.length && this._isWhitespaceOnly) {
// This branch helps in the case of whitespace only lines which have a width set
return [new HorizontalRange(this.getWidth(), 0)];
}
let partIndex = findIndexInArrayWithMax(this._lineParts, column - 1, this._lastRenderedPartIndex);
let charOffsetInPart = this._charOffsetInPart[column - 1];
......
......@@ -42,11 +42,13 @@ export class RenderLineOutput {
charOffsetInPart: number[];
lastRenderedPartIndex: number;
output: string;
isWhitespaceOnly: boolean;
constructor(charOffsetInPart: number[], lastRenderedPartIndex: number, output: string) {
constructor(charOffsetInPart: number[], lastRenderedPartIndex: number, output: string, isWhitespaceOnly: boolean) {
this.charOffsetInPart = charOffsetInPart;
this.lastRenderedPartIndex = lastRenderedPartIndex;
this.output = output;
this.isWhitespaceOnly = isWhitespaceOnly;
}
}
......@@ -65,7 +67,8 @@ export function renderLine(input: RenderLineInput): RenderLineOutput {
[],
0,
// This is basically for IE's hit test to work
'<span><span>&nbsp;</span></span>'
'<span><span>&nbsp;</span></span>',
true
);
}
......@@ -99,6 +102,7 @@ function renderLineActual(lineText: string, lineTextLength: number, tabSize: num
let charOffsetInPartArr: number[] = [];
let charOffsetInPart = 0;
let tabsCharDelta = 0;
let isWhitespaceOnly = /^\s*$/.test(lineText);
out += '<span>';
for (let partIndex = 0, partIndexLen = actualLineParts.length; partIndex < partIndexLen; partIndex++) {
......@@ -151,7 +155,8 @@ function renderLineActual(lineText: string, lineTextLength: number, tabSize: num
return new RenderLineOutput(
charOffsetInPartArr,
partIndex,
out
out,
isWhitespaceOnly
);
}
}
......@@ -224,7 +229,8 @@ function renderLineActual(lineText: string, lineTextLength: number, tabSize: num
return new RenderLineOutput(
charOffsetInPartArr,
partIndex,
out
out,
isWhitespaceOnly
);
}
}
......@@ -242,6 +248,7 @@ function renderLineActual(lineText: string, lineTextLength: number, tabSize: num
return new RenderLineOutput(
charOffsetInPartArr,
actualLineParts.length - 1,
out
out,
isWhitespaceOnly
);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册