提交 841ef459 编写于 作者: A Alex Dima

More CharCode adoption

上级 34a85725
......@@ -11,7 +11,7 @@
* Please leave the const keyword such that it gets inlined when compiled to JavaScript!
*/
export const enum CharCode {
Null = 0,
Tab = 9,
LineFeed = 10,
CarriageReturn = 13,
......@@ -212,4 +212,17 @@ export const enum CharCode {
* The `~` character.
*/
Tilde = 126,
/**
* Unicode Character 'LINE SEPARATOR' (U+2028)
* http://www.fileformat.info/info/unicode/char/2028/index.htm
*/
LINE_SEPARATOR_2028 = 8232,
/**
* UTF-8 BOM
* Unicode Character 'ZERO WIDTH NO-BREAK SPACE' (U+FEFF)
* http://www.fileformat.info/info/unicode/char/feff/index.htm
*/
UTF8_BOM = 65279
}
\ No newline at end of file
......@@ -550,12 +550,10 @@ export function removeAnsiEscapeCodes(str: string): string {
// -- UTF-8 BOM
const __utf8_bom = 65279;
export const UTF8_BOM_CHARACTER = String.fromCharCode(__utf8_bom);
export const UTF8_BOM_CHARACTER = String.fromCharCode(CharCode.UTF8_BOM);
export function startsWithUTF8BOM(str: string): boolean {
return (str && str.length > 0 && str.charCodeAt(0) === __utf8_bom);
return (str && str.length > 0 && str.charCodeAt(0) === CharCode.UTF8_BOM);
}
/**
......
......@@ -9,6 +9,7 @@ import {Arrays} from 'vs/editor/common/core/arrays';
import {Range} from 'vs/editor/common/core/range';
import {ViewLineToken, ViewLineTokens} from 'vs/editor/common/core/viewLineToken';
import {InlineDecoration} from 'vs/editor/common/viewModel/viewModel';
import {CharCode} from 'vs/base/common/charCode';
function cmpLineDecorations(a:InlineDecoration, b:InlineDecoration): number {
return Range.compareRangesUsingStarts(a.range, b.range);
......@@ -93,9 +94,6 @@ function trimEmptyTrailingPart(parts: ViewLineToken[], lineContent: string): Vie
return parts.slice(0, parts.length - 1);
}
const _tab = '\t'.charCodeAt(0);
const _space = ' '.charCodeAt(0);
function insertOneCustomLineDecoration(dest:InlineDecoration[], lineNumber:number, startColumn:number, endColumn:number, className:string): void {
dest.push(new InlineDecoration(new Range(lineNumber, startColumn, lineNumber, endColumn), className));
}
......@@ -135,8 +133,8 @@ function insertWhitespaceLineDecorations(lineNumber:number, lineContent: string,
let hasTab = false;
for (let i = Math.max(firstNonWhitespaceIndex, fauxIndentLength); i <= lastNonWhitespaceIndex; ++i) {
let currentCharIsTab = lineContent.charCodeAt(i) === _tab;
if (currentCharIsTab || lineContent.charCodeAt(i) === _space) {
let currentCharIsTab = lineContent.charCodeAt(i) === CharCode.Tab;
if (currentCharIsTab || lineContent.charCodeAt(i) === CharCode.Space) {
if (currentCharIsTab) {
hasTab = true;
}
......@@ -185,7 +183,7 @@ function insertCustomLineDecorationsWithStateMachine(lineNumber:number, lineCont
for (let index = 0; index < lineLength; index++) {
let chCode = lineContent.charCodeAt(index);
if (chCode === _tab) {
if (chCode === CharCode.Tab) {
tmpIndent = tabSize;
} else {
tmpIndent++;
......
......@@ -5,6 +5,7 @@
'use strict';
import {ViewLineToken} from 'vs/editor/common/core/viewLineToken';
import {CharCode} from 'vs/base/common/charCode';
export class RenderLineInput {
_renderLineInputBrand: void;
......@@ -49,16 +50,6 @@ export class RenderLineOutput {
}
}
const _space = ' '.charCodeAt(0);
const _tab = '\t'.charCodeAt(0);
const _lowerThan = '<'.charCodeAt(0);
const _greaterThan = '>'.charCodeAt(0);
const _ampersand = '&'.charCodeAt(0);
const _carriageReturn = '\r'.charCodeAt(0);
const _controlCharacterSequenceConversionStart = 9216;
const _lineSeparator = '\u2028'.charCodeAt(0); //http://www.fileformat.info/info/unicode/char/2028/index.htm
const _bom = 65279;
export function renderLine(input:RenderLineInput): RenderLineOutput {
const lineText = input.lineContent;
const lineTextLength = lineText.length;
......@@ -92,6 +83,8 @@ function isWhitespace(type:string): boolean {
function isControlCharacter(characterCode: number): boolean {
return characterCode < 32;
}
const _controlCharacterSequenceConversionStart = 9216;
function controlCharacterToPrintable(characterCode: number): string {
return String.fromCharCode(_controlCharacterSequenceConversionStart + characterCode);
}
......@@ -128,7 +121,7 @@ function renderLineActual(lineText: string, lineTextLength: number, tabSize: num
charOffsetInPartArr[charIndex] = charOffsetInPart;
let charCode = lineText.charCodeAt(charIndex);
if (charCode === _tab) {
if (charCode === CharCode.Tab) {
let insertSpacesCount = tabSize - (charIndex + tabsCharDelta) % tabSize;
tabsCharDelta += insertSpacesCount - 1;
charOffsetInPart += insertSpacesCount - 1;
......@@ -143,7 +136,7 @@ function renderLineActual(lineText: string, lineTextLength: number, tabSize: num
insertSpacesCount--;
}
} else {
// must be _space
// must be CharCode.Space
partContent += '&middot;';
partContentCnt++;
}
......@@ -175,7 +168,7 @@ function renderLineActual(lineText: string, lineTextLength: number, tabSize: num
let charCode = lineText.charCodeAt(charIndex);
switch (charCode) {
case _tab:
case CharCode.Tab:
let insertSpacesCount = tabSize - (charIndex + tabsCharDelta) % tabSize;
tabsCharDelta += insertSpacesCount - 1;
charOffsetInPart += insertSpacesCount - 1;
......@@ -185,32 +178,32 @@ function renderLineActual(lineText: string, lineTextLength: number, tabSize: num
}
break;
case _space:
case CharCode.Space:
out += '&nbsp;';
break;
case _lowerThan:
case CharCode.LessThan:
out += '&lt;';
break;
case _greaterThan:
case CharCode.GreaterThan:
out += '&gt;';
break;
case _ampersand:
case CharCode.Ampersand:
out += '&amp;';
break;
case 0:
case CharCode.Null:
out += '&#00;';
break;
case _bom:
case _lineSeparator:
case CharCode.UTF8_BOM:
case CharCode.LINE_SEPARATOR_2028:
out += '\ufffd';
break;
case _carriageReturn:
case CharCode.CarriageReturn:
// zero width space, because carriage return would introduce a line break
out += '&#8203';
break;
......
......@@ -7,6 +7,7 @@
import * as assert from 'assert';
import {renderLine, RenderLineInput} from 'vs/editor/common/viewLayout/viewLineRenderer';
import {ViewLineToken} from 'vs/editor/common/core/viewLineToken';
import {CharCode} from 'vs/base/common/charCode';
suite('viewLineRenderer.renderLine', () => {
......@@ -43,7 +44,7 @@ suite('viewLineRenderer.renderLine', () => {
test('replaces some bad characters', () => {
assertCharacterReplacement('a\0b', 4, 'a&#00;b', [0, 1, 2, 3]);
assertCharacterReplacement('a' + String.fromCharCode(65279) + 'b', 4, 'a\ufffdb', [0, 1, 2, 3]);
assertCharacterReplacement('a' + String.fromCharCode(CharCode.UTF8_BOM) + 'b', 4, 'a\ufffdb', [0, 1, 2, 3]);
assertCharacterReplacement('a\u2028b', 4, 'a\ufffdb', [0, 1, 2, 3]);
assertCharacterReplacement('a\rb', 4, 'a&#8203b', [0, 1, 2, 3]);
});
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册