Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
dabbf52a
V
vscode
项目概览
xxadev
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
dabbf52a
编写于
9月 12, 2016
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Adopt CharacterClassifier in CharacterHardWrappingLineMapping
上级
841ef459
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
16 addition
and
48 deletion
+16
-48
src/vs/editor/common/viewLayout/viewLineRenderer.ts
src/vs/editor/common/viewLayout/viewLineRenderer.ts
+2
-3
src/vs/editor/common/viewModel/characterHardWrappingLineMapper.ts
...ditor/common/viewModel/characterHardWrappingLineMapper.ts
+14
-45
未找到文件。
src/vs/editor/common/viewLayout/viewLineRenderer.ts
浏览文件 @
dabbf52a
...
...
@@ -209,9 +209,8 @@ function renderLineActual(lineText: string, lineTextLength: number, tabSize: num
break
;
default
:
let
characterCode
=
lineText
.
charCodeAt
(
charIndex
);
if
(
renderControlCharacters
&&
isControlCharacter
(
characterCode
))
{
out
+=
controlCharacterToPrintable
(
characterCode
);
if
(
renderControlCharacters
&&
isControlCharacter
(
charCode
))
{
out
+=
controlCharacterToPrintable
(
charCode
);
}
else
{
out
+=
lineText
.
charAt
(
charIndex
);
}
...
...
src/vs/editor/common/viewModel/characterHardWrappingLineMapper.ts
浏览文件 @
dabbf52a
...
...
@@ -8,8 +8,9 @@ import * as strings from 'vs/base/common/strings';
import
{
WrappingIndent
}
from
'
vs/editor/common/editorCommon
'
;
import
{
PrefixSumComputer
}
from
'
vs/editor/common/viewModel/prefixSumComputer
'
;
import
{
ILineMapperFactory
,
ILineMapping
,
OutputPosition
}
from
'
vs/editor/common/viewModel/splitLinesCollection
'
;
import
{
CharacterClassifier
}
from
'
vs/editor/common/core/characterClassifier
'
;
enum
CharacterClass
{
const
enum
CharacterClass
{
NONE
=
0
,
BREAK_BEFORE
=
1
,
BREAK_AFTER
=
2
,
...
...
@@ -17,57 +18,25 @@ enum CharacterClass {
BREAK_IDEOGRAPHIC
=
4
// for Han and Kana.
}
class
CharacterClassifier
{
/**
* Maintain a compact (fully initialized ASCII map for quickly classifying ASCII characters - used more often in code).
*/
private
_asciiMap
:
CharacterClass
[];
/**
* The entire map (sparse array).
*/
private
_map
:
CharacterClass
[];
class
WrappingCharacterClassifier
extends
CharacterClassifier
<
CharacterClass
>
{
constructor
(
BREAK_BEFORE
:
string
,
BREAK_AFTER
:
string
,
BREAK_OBTRUSIVE
:
string
)
{
this
.
_asciiMap
=
[];
for
(
let
i
=
0
;
i
<
256
;
i
++
)
{
this
.
_asciiMap
[
i
]
=
CharacterClass
.
NONE
;
}
this
.
_map
=
[];
super
(
CharacterClass
.
NONE
);
for
(
let
i
=
0
;
i
<
BREAK_BEFORE
.
length
;
i
++
)
{
this
.
_
set
(
BREAK_BEFORE
.
charCodeAt
(
i
),
CharacterClass
.
BREAK_BEFORE
);
this
.
set
(
BREAK_BEFORE
.
charCodeAt
(
i
),
CharacterClass
.
BREAK_BEFORE
);
}
for
(
let
i
=
0
;
i
<
BREAK_AFTER
.
length
;
i
++
)
{
this
.
_
set
(
BREAK_AFTER
.
charCodeAt
(
i
),
CharacterClass
.
BREAK_AFTER
);
this
.
set
(
BREAK_AFTER
.
charCodeAt
(
i
),
CharacterClass
.
BREAK_AFTER
);
}
for
(
let
i
=
0
;
i
<
BREAK_OBTRUSIVE
.
length
;
i
++
)
{
this
.
_set
(
BREAK_OBTRUSIVE
.
charCodeAt
(
i
),
CharacterClass
.
BREAK_OBTRUSIVE
);
}
}
private
_set
(
charCode
:
number
,
charClass
:
CharacterClass
):
void
{
if
(
charCode
<
256
)
{
this
.
_asciiMap
[
charCode
]
=
charClass
;
this
.
set
(
BREAK_OBTRUSIVE
.
charCodeAt
(
i
),
CharacterClass
.
BREAK_OBTRUSIVE
);
}
this
.
_map
[
charCode
]
=
charClass
;
}
public
classify
(
charCode
:
number
):
CharacterClass
{
if
(
charCode
<
256
)
{
return
this
.
_asciiMap
[
charCode
];
}
let
charClass
=
this
.
_map
[
charCode
];
if
(
charClass
)
{
return
charClass
;
}
public
get
(
charCode
:
number
):
CharacterClass
{
// Initialize CharacterClass.BREAK_IDEOGRAPHIC for these Unicode ranges:
// 1. CJK Unified Ideographs (0x4E00 -- 0x9FFF)
// 2. CJK Unified Ideographs Extension A (0x3400 -- 0x4DBF)
...
...
@@ -80,16 +49,16 @@ class CharacterClassifier {
return
CharacterClass
.
BREAK_IDEOGRAPHIC
;
}
return
CharacterClass
.
NONE
;
return
super
.
get
(
charCode
)
;
}
}
export
class
CharacterHardWrappingLineMapperFactory
implements
ILineMapperFactory
{
private
classifier
:
CharacterClassifier
;
private
classifier
:
Wrapping
CharacterClassifier
;
constructor
(
breakBeforeChars
:
string
,
breakAfterChars
:
string
,
breakObtrusiveChars
:
string
)
{
this
.
classifier
=
new
CharacterClassifier
(
breakBeforeChars
,
breakAfterChars
,
breakObtrusiveChars
);
this
.
classifier
=
new
Wrapping
CharacterClassifier
(
breakBeforeChars
,
breakAfterChars
,
breakObtrusiveChars
);
}
// TODO@Alex -> duplicated in lineCommentCommand
...
...
@@ -157,7 +126,7 @@ export class CharacterHardWrappingLineMapperFactory implements ILineMapperFactor
let
charCode
=
lineText
.
charCodeAt
(
i
);
let
charCodeIsTab
=
(
charCode
===
TAB_CHAR_CODE
);
let
charCodeClass
=
classifier
.
classify
(
charCode
);
let
charCodeClass
=
classifier
.
get
(
charCode
);
if
(
charCodeClass
===
CharacterClass
.
BREAK_BEFORE
)
{
// This is a character that indicates that a break should happen before it
...
...
@@ -170,7 +139,7 @@ export class CharacterHardWrappingLineMapperFactory implements ILineMapperFactor
// CJK breaking : before break
if
(
charCodeClass
===
CharacterClass
.
BREAK_IDEOGRAPHIC
&&
i
>
0
)
{
let
prevCode
=
lineText
.
charCodeAt
(
i
-
1
);
let
prevClass
=
classifier
.
classify
(
prevCode
);
let
prevClass
=
classifier
.
get
(
prevCode
);
if
(
prevClass
!==
CharacterClass
.
BREAK_BEFORE
)
{
// Kinsoku Shori: Don't break after a leading character, like an open bracket
niceBreakOffset
=
i
;
niceBreakVisibleColumn
=
0
;
...
...
@@ -245,7 +214,7 @@ export class CharacterHardWrappingLineMapperFactory implements ILineMapperFactor
// CJK breaking : after break
if
(
charCodeClass
===
CharacterClass
.
BREAK_IDEOGRAPHIC
&&
i
<
len
-
1
)
{
let
nextCode
=
lineText
.
charCodeAt
(
i
+
1
);
let
nextClass
=
classifier
.
classify
(
nextCode
);
let
nextClass
=
classifier
.
get
(
nextCode
);
if
(
nextClass
!==
CharacterClass
.
BREAK_AFTER
)
{
// Kinsoku Shori: Don't break before a trailing character, like a period
niceBreakOffset
=
i
+
1
;
niceBreakVisibleColumn
=
wrappedTextIndentVisibleColumn
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录