Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
a5cf4a58
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a5cf4a58
编写于
7月 08, 2016
作者:
A
Alex Dima
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Clean up linkComputer
上级
be27fd61
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
40 addition
and
50 deletion
+40
-50
src/vs/editor/common/modes/linkComputer.ts
src/vs/editor/common/modes/linkComputer.ts
+40
-50
未找到文件。
src/vs/editor/common/modes/linkComputer.ts
浏览文件 @
a5cf4a58
...
...
@@ -11,19 +11,23 @@ export interface ILinkComputerTarget {
getLineContent
(
lineNumber
:
number
):
string
;
}
// State machine for http:// or https://
var
STATE_MAP
:{[
ch
:
string
]:
number
}[]
=
[],
START_STATE
=
1
,
END_STATE
=
9
,
ACCEPT_STATE
=
10
;
STATE_MAP
[
1
]
=
{
'
h
'
:
2
,
'
H
'
:
2
,
'
f
'
:
11
,
'
F
'
:
11
};
// State machine for http:// or https:// or file://
const
STATE_MAP
:{[
ch
:
string
]:
number
}[]
=
[];
const
START_STATE
=
1
;
const
END_STATE
=
12
;
const
ACCEPT_STATE
=
13
;
STATE_MAP
[
1
]
=
{
'
h
'
:
2
,
'
H
'
:
2
,
'
f
'
:
6
,
'
F
'
:
6
};
STATE_MAP
[
2
]
=
{
'
t
'
:
3
,
'
T
'
:
3
};
STATE_MAP
[
3
]
=
{
'
t
'
:
4
,
'
T
'
:
4
};
STATE_MAP
[
4
]
=
{
'
p
'
:
5
,
'
P
'
:
5
};
STATE_MAP
[
5
]
=
{
'
s
'
:
6
,
'
S
'
:
6
,
'
:
'
:
7
};
STATE_MAP
[
6
]
=
{
'
:
'
:
7
};
STATE_MAP
[
7
]
=
{
'
/
'
:
8
};
STATE_MAP
[
8
]
=
{
'
/
'
:
9
};
STATE_MAP
[
11
]
=
{
'
i
'
:
12
,
'
I
'
:
12
};
STATE_MAP
[
1
2
]
=
{
'
l
'
:
13
,
'
L
'
:
13
};
STATE_MAP
[
1
3
]
=
{
'
e
'
:
6
,
'
E
'
:
6
};
STATE_MAP
[
5
]
=
{
'
s
'
:
9
,
'
S
'
:
9
,
'
:
'
:
10
};
STATE_MAP
[
6
]
=
{
'
i
'
:
7
,
'
I
'
:
7
};
STATE_MAP
[
7
]
=
{
'
l
'
:
8
,
'
L
'
:
8
};
STATE_MAP
[
8
]
=
{
'
e
'
:
9
,
'
E
'
:
9
};
STATE_MAP
[
9
]
=
{
'
:
'
:
10
};
STATE_MAP
[
1
0
]
=
{
'
/
'
:
11
};
STATE_MAP
[
1
1
]
=
{
'
/
'
:
END_STATE
};
enum
CharacterClass
{
None
=
0
,
...
...
@@ -31,12 +35,12 @@ enum CharacterClass {
CannotEndIn
=
2
}
le
t
_openParens
=
'
(
'
.
charCodeAt
(
0
);
le
t
_closeParens
=
'
)
'
.
charCodeAt
(
0
);
le
t
_openSquareBracket
=
'
[
'
.
charCodeAt
(
0
);
le
t
_closeSquareBracket
=
'
]
'
.
charCodeAt
(
0
);
le
t
_openCurlyBracket
=
'
{
'
.
charCodeAt
(
0
);
le
t
_closeCurlyBracket
=
'
}
'
.
charCodeAt
(
0
);
cons
t
_openParens
=
'
(
'
.
charCodeAt
(
0
);
cons
t
_closeParens
=
'
)
'
.
charCodeAt
(
0
);
cons
t
_openSquareBracket
=
'
[
'
.
charCodeAt
(
0
);
cons
t
_closeSquareBracket
=
'
]
'
.
charCodeAt
(
0
);
cons
t
_openCurlyBracket
=
'
{
'
.
charCodeAt
(
0
);
cons
t
_closeCurlyBracket
=
'
}
'
.
charCodeAt
(
0
);
class
CharacterClassifier
{
...
...
@@ -108,43 +112,27 @@ class LinkComputer {
}
public
static
computeLinks
(
model
:
ILinkComputerTarget
):
ILink
[]
{
const
characterClassifier
=
LinkComputer
.
_characterClassifier
;
let
result
:
ILink
[]
=
[];
for
(
let
i
=
1
,
lineCount
=
model
.
getLineCount
();
i
<=
lineCount
;
i
++
)
{
const
line
=
model
.
getLineContent
(
i
);
const
len
=
line
.
length
;
var
i
:
number
,
lineCount
:
number
,
result
:
ILink
[]
=
[];
var
line
:
string
,
j
:
number
,
lastIncludedCharIndex
:
number
,
len
:
number
,
linkBeginIndex
:
number
,
state
:
number
,
ch
:
string
,
chCode
:
number
,
chClass
:
CharacterClass
,
resetStateMachine
:
boolean
,
hasOpenParens
:
boolean
,
hasOpenSquareBracket
:
boolean
,
hasOpenCurlyBracket
:
boolean
,
characterClassifier
=
LinkComputer
.
_characterClassifier
;
for
(
i
=
1
,
lineCount
=
model
.
getLineCount
();
i
<=
lineCount
;
i
++
)
{
line
=
model
.
getLineContent
(
i
);
j
=
0
;
len
=
line
.
length
;
linkBeginIndex
=
0
;
state
=
START_STATE
;
hasOpenParens
=
false
;
hasOpenSquareBracket
=
false
;
hasOpenCurlyBracket
=
false
;
let
j
=
0
;
let
linkBeginIndex
=
0
;
let
state
=
START_STATE
;
let
hasOpenParens
=
false
;
let
hasOpenSquareBracket
=
false
;
let
hasOpenCurlyBracket
=
false
;
while
(
j
<
len
)
{
ch
=
line
.
charAt
(
j
);
chCode
=
line
.
charCodeAt
(
j
);
resetStateMachine
=
false
;
if
(
state
===
ACCEPT_STATE
)
{
let
resetStateMachine
=
false
;
if
(
state
===
ACCEPT_STATE
)
{
let
chCode
=
line
.
charCodeAt
(
j
);
let
chClass
:
CharacterClass
;
switch
(
chCode
)
{
case
_openParens
:
hasOpenParens
=
true
;
...
...
@@ -175,7 +163,7 @@ class LinkComputer {
if
(
chClass
===
CharacterClass
.
ForceTermination
)
{
// Do not allow to end link in certain characters...
lastIncludedCharIndex
=
j
-
1
;
l
et
l
astIncludedCharIndex
=
j
-
1
;
do
{
chCode
=
line
.
charCodeAt
(
lastIncludedCharIndex
);
chClass
=
characterClassifier
.
classify
(
chCode
);
...
...
@@ -189,7 +177,8 @@ class LinkComputer {
resetStateMachine
=
true
;
}
}
else
if
(
state
===
END_STATE
)
{
chClass
=
characterClassifier
.
classify
(
chCode
);
let
chCode
=
line
.
charCodeAt
(
j
);
let
chClass
=
characterClassifier
.
classify
(
chCode
);
// Check if character terminates link
if
(
chClass
===
CharacterClass
.
ForceTermination
)
{
...
...
@@ -198,6 +187,7 @@ class LinkComputer {
state
=
ACCEPT_STATE
;
}
}
else
{
let
ch
=
line
.
charAt
(
j
);
if
(
STATE_MAP
[
state
].
hasOwnProperty
(
ch
))
{
state
=
STATE_MAP
[
state
][
ch
];
}
else
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录