mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-10 10:12:34 -05:00
Merge VS Code 1.23.1 (#1520)
This commit is contained in:
@@ -36,7 +36,8 @@ export class RenderLineInput {
|
||||
|
||||
public readonly useMonospaceOptimizations: boolean;
|
||||
public readonly lineContent: string;
|
||||
public readonly mightContainRTL: boolean;
|
||||
public readonly isBasicASCII: boolean;
|
||||
public readonly containsRTL: boolean;
|
||||
public readonly fauxIndentLength: number;
|
||||
public readonly lineTokens: IViewLineTokens;
|
||||
public readonly lineDecorations: LineDecoration[];
|
||||
@@ -50,7 +51,8 @@ export class RenderLineInput {
|
||||
constructor(
|
||||
useMonospaceOptimizations: boolean,
|
||||
lineContent: string,
|
||||
mightContainRTL: boolean,
|
||||
isBasicASCII: boolean,
|
||||
containsRTL: boolean,
|
||||
fauxIndentLength: number,
|
||||
lineTokens: IViewLineTokens,
|
||||
lineDecorations: LineDecoration[],
|
||||
@@ -63,7 +65,8 @@ export class RenderLineInput {
|
||||
) {
|
||||
this.useMonospaceOptimizations = useMonospaceOptimizations;
|
||||
this.lineContent = lineContent;
|
||||
this.mightContainRTL = mightContainRTL;
|
||||
this.isBasicASCII = isBasicASCII;
|
||||
this.containsRTL = containsRTL;
|
||||
this.fauxIndentLength = fauxIndentLength;
|
||||
this.lineTokens = lineTokens;
|
||||
this.lineDecorations = lineDecorations;
|
||||
@@ -85,7 +88,8 @@ export class RenderLineInput {
|
||||
return (
|
||||
this.useMonospaceOptimizations === other.useMonospaceOptimizations
|
||||
&& this.lineContent === other.lineContent
|
||||
&& this.mightContainRTL === other.mightContainRTL
|
||||
&& this.isBasicASCII === other.isBasicASCII
|
||||
&& this.containsRTL === other.containsRTL
|
||||
&& this.fauxIndentLength === other.fauxIndentLength
|
||||
&& this.tabSize === other.tabSize
|
||||
&& this.spaceWidth === other.spaceWidth
|
||||
@@ -217,14 +221,20 @@ export class CharacterMapping {
|
||||
}
|
||||
}
|
||||
|
||||
export const enum ForeignElementType {
|
||||
None = 0,
|
||||
Before = 1,
|
||||
After = 2
|
||||
}
|
||||
|
||||
export class RenderLineOutput {
|
||||
_renderLineOutputBrand: void;
|
||||
|
||||
readonly characterMapping: CharacterMapping;
|
||||
readonly containsRTL: boolean;
|
||||
readonly containsForeignElements: boolean;
|
||||
readonly containsForeignElements: ForeignElementType;
|
||||
|
||||
constructor(characterMapping: CharacterMapping, containsRTL: boolean, containsForeignElements: boolean) {
|
||||
constructor(characterMapping: CharacterMapping, containsRTL: boolean, containsForeignElements: ForeignElementType) {
|
||||
this.characterMapping = characterMapping;
|
||||
this.containsRTL = containsRTL;
|
||||
this.containsForeignElements = containsForeignElements;
|
||||
@@ -234,7 +244,7 @@ export class RenderLineOutput {
|
||||
export function renderViewLine(input: RenderLineInput, sb: IStringBuilder): RenderLineOutput {
|
||||
if (input.lineContent.length === 0) {
|
||||
|
||||
let containsForeignElements = false;
|
||||
let containsForeignElements = ForeignElementType.None;
|
||||
|
||||
// This is basically for IE's hit test to work
|
||||
let content: string = '<span><span>\u00a0</span></span>';
|
||||
@@ -244,13 +254,17 @@ export function renderViewLine(input: RenderLineInput, sb: IStringBuilder): Rend
|
||||
let classNames: string[] = [];
|
||||
for (let i = 0, len = input.lineDecorations.length; i < len; i++) {
|
||||
const lineDecoration = input.lineDecorations[i];
|
||||
if (lineDecoration.type !== InlineDecorationType.Regular) {
|
||||
if (lineDecoration.type === InlineDecorationType.Before) {
|
||||
classNames.push(input.lineDecorations[i].className);
|
||||
containsForeignElements = true;
|
||||
containsForeignElements |= ForeignElementType.Before;
|
||||
}
|
||||
if (lineDecoration.type === InlineDecorationType.After) {
|
||||
classNames.push(input.lineDecorations[i].className);
|
||||
containsForeignElements |= ForeignElementType.After;
|
||||
}
|
||||
}
|
||||
|
||||
if (containsForeignElements) {
|
||||
if (containsForeignElements !== ForeignElementType.None) {
|
||||
content = `<span><span class="${classNames.join(' ')}"></span></span>`;
|
||||
}
|
||||
}
|
||||
@@ -271,7 +285,7 @@ export class RenderLineOutput2 {
|
||||
public readonly characterMapping: CharacterMapping,
|
||||
public readonly html: string,
|
||||
public readonly containsRTL: boolean,
|
||||
public readonly containsForeignElements: boolean
|
||||
public readonly containsForeignElements: ForeignElementType
|
||||
) {
|
||||
}
|
||||
}
|
||||
@@ -289,7 +303,7 @@ class ResolvedRenderLineInput {
|
||||
public readonly len: number,
|
||||
public readonly isOverflowing: boolean,
|
||||
public readonly parts: LinePart[],
|
||||
public readonly containsForeignElements: boolean,
|
||||
public readonly containsForeignElements: ForeignElementType,
|
||||
public readonly tabSize: number,
|
||||
public readonly containsRTL: boolean,
|
||||
public readonly spaceWidth: number,
|
||||
@@ -319,22 +333,22 @@ function resolveRenderLineInput(input: RenderLineInput): ResolvedRenderLineInput
|
||||
if (input.renderWhitespace === RenderWhitespace.All || input.renderWhitespace === RenderWhitespace.Boundary) {
|
||||
tokens = _applyRenderWhitespace(lineContent, len, tokens, input.fauxIndentLength, input.tabSize, useMonospaceOptimizations, input.renderWhitespace === RenderWhitespace.Boundary);
|
||||
}
|
||||
let containsForeignElements = false;
|
||||
let containsForeignElements = ForeignElementType.None;
|
||||
if (input.lineDecorations.length > 0) {
|
||||
for (let i = 0, len = input.lineDecorations.length; i < len; i++) {
|
||||
const lineDecoration = input.lineDecorations[i];
|
||||
if (lineDecoration.type !== InlineDecorationType.Regular) {
|
||||
containsForeignElements = true;
|
||||
break;
|
||||
if (lineDecoration.type === InlineDecorationType.RegularAffectingLetterSpacing) {
|
||||
// Pretend there are foreign elements... although not 100% accurate.
|
||||
containsForeignElements |= ForeignElementType.Before;
|
||||
} else if (lineDecoration.type === InlineDecorationType.Before) {
|
||||
containsForeignElements |= ForeignElementType.Before;
|
||||
} else if (lineDecoration.type === InlineDecorationType.After) {
|
||||
containsForeignElements |= ForeignElementType.After;
|
||||
}
|
||||
}
|
||||
tokens = _applyInlineDecorations(lineContent, len, tokens, input.lineDecorations);
|
||||
}
|
||||
let containsRTL = false;
|
||||
if (input.mightContainRTL) {
|
||||
containsRTL = strings.containsRTL(lineContent);
|
||||
}
|
||||
if (!containsRTL && !input.fontLigatures) {
|
||||
if (input.isBasicASCII && !input.fontLigatures) {
|
||||
tokens = splitLargeTokens(lineContent, tokens);
|
||||
}
|
||||
|
||||
@@ -346,7 +360,7 @@ function resolveRenderLineInput(input: RenderLineInput): ResolvedRenderLineInput
|
||||
tokens,
|
||||
containsForeignElements,
|
||||
input.tabSize,
|
||||
containsRTL,
|
||||
input.containsRTL,
|
||||
input.spaceWidth,
|
||||
input.renderWhitespace,
|
||||
input.renderControlCharacters
|
||||
@@ -406,11 +420,6 @@ function splitLargeTokens(lineContent: string, tokens: LinePart[]): LinePart[] {
|
||||
const piecesCount = Math.ceil(diff / Constants.LongToken);
|
||||
for (let j = 1; j < piecesCount; j++) {
|
||||
let pieceEndIndex = lastTokenEndIndex + (j * Constants.LongToken);
|
||||
let lastCharInPiece = lineContent.charCodeAt(pieceEndIndex - 1);
|
||||
if (strings.isHighSurrogate(lastCharInPiece)) {
|
||||
// Don't cut in the middle of a surrogate pair
|
||||
pieceEndIndex--;
|
||||
}
|
||||
result[resultLen++] = new LinePart(pieceEndIndex, tokenType);
|
||||
}
|
||||
result[resultLen++] = new LinePart(tokenEndIndex, tokenType);
|
||||
|
||||
Reference in New Issue
Block a user