mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-10 10:12:34 -05:00
Merge from vscode f5d3ffa6a0d655c87e1eb0e1e90773df58f7ff25 (#7929)
* Merge from vscode f5d3ffa6a0d655c87e1eb0e1e90773df58f7ff25 * fix launch script * add missing files
This commit is contained in:
@@ -895,11 +895,9 @@ export class TextModel extends Disposable implements model.ITextModel {
|
||||
}
|
||||
|
||||
if (strict) {
|
||||
if (column > 1) {
|
||||
const charCodeBefore = this._buffer.getLineCharCode(lineNumber, column - 2);
|
||||
if (strings.isHighSurrogate(charCodeBefore)) {
|
||||
return false;
|
||||
}
|
||||
const [charStartOffset,] = strings.getCharContainingOffset(this._buffer.getLineContent(lineNumber), column - 1);
|
||||
if (column !== charStartOffset + 1) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -932,12 +930,9 @@ export class TextModel extends Disposable implements model.ITextModel {
|
||||
}
|
||||
|
||||
if (strict) {
|
||||
// If the position would end up in the middle of a high-low surrogate pair,
|
||||
// we move it to before the pair
|
||||
// !!At this point, column > 1
|
||||
const charCodeBefore = this._buffer.getLineCharCode(lineNumber, column - 2);
|
||||
if (strings.isHighSurrogate(charCodeBefore)) {
|
||||
return new Position(lineNumber, column - 1);
|
||||
const [charStartOffset,] = strings.getCharContainingOffset(this._buffer.getLineContent(lineNumber), column - 1);
|
||||
if (column !== charStartOffset + 1) {
|
||||
return new Position(lineNumber, charStartOffset + 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -974,17 +969,23 @@ export class TextModel extends Disposable implements model.ITextModel {
|
||||
}
|
||||
|
||||
if (strict) {
|
||||
const charCodeBeforeStart = (startColumn > 1 ? this._buffer.getLineCharCode(startLineNumber, startColumn - 2) : 0);
|
||||
const charCodeBeforeEnd = (endColumn > 1 && endColumn <= this._buffer.getLineLength(endLineNumber) ? this._buffer.getLineCharCode(endLineNumber, endColumn - 2) : 0);
|
||||
|
||||
const startInsideSurrogatePair = strings.isHighSurrogate(charCodeBeforeStart);
|
||||
const endInsideSurrogatePair = strings.isHighSurrogate(charCodeBeforeEnd);
|
||||
|
||||
if (!startInsideSurrogatePair && !endInsideSurrogatePair) {
|
||||
return true;
|
||||
const startLineContent = this._buffer.getLineContent(startLineNumber);
|
||||
if (startColumn < startLineContent.length + 1) {
|
||||
const [charStartOffset,] = strings.getCharContainingOffset(startLineContent, startColumn - 1);
|
||||
if (startColumn !== charStartOffset + 1) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
if (endColumn >= 2) {
|
||||
const endLineContent = (endLineNumber === startLineNumber ? startLineContent : this._buffer.getLineContent(endLineNumber));
|
||||
const [, charEndOffset] = strings.getCharContainingOffset(endLineContent, endColumn - 2);
|
||||
if (endColumn !== charEndOffset + 1) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -1004,37 +1005,32 @@ export class TextModel extends Disposable implements model.ITextModel {
|
||||
const end = this._validatePosition(_range.endLineNumber, _range.endColumn, false);
|
||||
|
||||
const startLineNumber = start.lineNumber;
|
||||
const startColumn = start.column;
|
||||
let startColumn = start.column;
|
||||
const endLineNumber = end.lineNumber;
|
||||
const endColumn = end.column;
|
||||
let endColumn = end.column;
|
||||
const isEmpty = (startLineNumber === endLineNumber && startColumn === endColumn);
|
||||
|
||||
const charCodeBeforeStart = (startColumn > 1 ? this._buffer.getLineCharCode(startLineNumber, startColumn - 2) : 0);
|
||||
const charCodeBeforeEnd = (endColumn > 1 && endColumn <= this._buffer.getLineLength(endLineNumber) ? this._buffer.getLineCharCode(endLineNumber, endColumn - 2) : 0);
|
||||
|
||||
const startInsideSurrogatePair = strings.isHighSurrogate(charCodeBeforeStart);
|
||||
const endInsideSurrogatePair = strings.isHighSurrogate(charCodeBeforeEnd);
|
||||
|
||||
if (!startInsideSurrogatePair && !endInsideSurrogatePair) {
|
||||
return new Range(startLineNumber, startColumn, endLineNumber, endColumn);
|
||||
const startLineContent = this._buffer.getLineContent(startLineNumber);
|
||||
if (startColumn < startLineContent.length + 1) {
|
||||
const [charStartOffset,] = strings.getCharContainingOffset(startLineContent, startColumn - 1);
|
||||
if (startColumn !== charStartOffset + 1) {
|
||||
if (isEmpty) {
|
||||
// do not expand a collapsed range, simply move it to a valid location
|
||||
return new Range(startLineNumber, charStartOffset + 1, startLineNumber, charStartOffset + 1);
|
||||
}
|
||||
startColumn = charStartOffset + 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (startLineNumber === endLineNumber && startColumn === endColumn) {
|
||||
// do not expand a collapsed range, simply move it to a valid location
|
||||
return new Range(startLineNumber, startColumn - 1, endLineNumber, endColumn - 1);
|
||||
if (endColumn >= 2) {
|
||||
const endLineContent = (endLineNumber === startLineNumber ? startLineContent : this._buffer.getLineContent(endLineNumber));
|
||||
const [, charEndOffset] = strings.getCharContainingOffset(endLineContent, endColumn - 2);
|
||||
if (endColumn !== charEndOffset + 1) {
|
||||
endColumn = charEndOffset + 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (startInsideSurrogatePair && endInsideSurrogatePair) {
|
||||
// expand range at both ends
|
||||
return new Range(startLineNumber, startColumn - 1, endLineNumber, endColumn + 1);
|
||||
}
|
||||
|
||||
if (startInsideSurrogatePair) {
|
||||
// only expand range at the start
|
||||
return new Range(startLineNumber, startColumn - 1, endLineNumber, endColumn);
|
||||
}
|
||||
|
||||
// only expand range at the end
|
||||
return new Range(startLineNumber, startColumn, endLineNumber, endColumn + 1);
|
||||
return new Range(startLineNumber, startColumn, endLineNumber, endColumn);
|
||||
}
|
||||
|
||||
public modifyPosition(rawPosition: IPosition, offset: number): Position {
|
||||
|
||||
Reference in New Issue
Block a user