Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xxadev
vscode
提交
4fe1cdc4
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,发现更多精彩内容 >>
未验证
提交
4fe1cdc4
编写于
1月 25, 2019
作者:
M
Matt Bierner
提交者:
GitHub
1月 25, 2019
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #66958 from flurmbo/detect-md-image-link
Detect md image link
上级
a94b94ff
4c2d3355
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
55 addition
and
14 deletion
+55
-14
extensions/markdown-language-features/src/features/documentLinkProvider.ts
...wn-language-features/src/features/documentLinkProvider.ts
+28
-14
extensions/markdown-language-features/src/test/documentLinkProvider.test.ts
...n-language-features/src/test/documentLinkProvider.test.ts
+27
-0
未找到文件。
extensions/markdown-language-features/src/features/documentLinkProvider.ts
浏览文件 @
4fe1cdc4
...
...
@@ -50,8 +50,27 @@ function matchAll(
return
out
;
}
function
extractDocumentLink
(
document
:
vscode
.
TextDocument
,
base
:
string
,
pre
:
number
,
link
:
string
,
matchIndex
:
number
|
undefined
):
vscode
.
DocumentLink
|
undefined
{
const
offset
=
(
matchIndex
||
0
)
+
pre
;
const
linkStart
=
document
.
positionAt
(
offset
);
const
linkEnd
=
document
.
positionAt
(
offset
+
link
.
length
);
try
{
return
new
vscode
.
DocumentLink
(
new
vscode
.
Range
(
linkStart
,
linkEnd
),
normalizeLink
(
document
,
link
,
base
));
}
catch
(
e
)
{
return
undefined
;
}
}
export
default
class
LinkProvider
implements
vscode
.
DocumentLinkProvider
{
private
readonly
linkPattern
=
/
(\[
[^\]]
*
\]\(\s
*
)((([^\s\(\)]
|
\(\S
*
?\))
+
)
)\s
*
(
".*
?
"
)?\)
/g
;
private
readonly
linkPattern
=
/
(\[
((
!
\[[^\]]
*
?\]\(\s
*
)([^\s\(\)]
+
?)\s
*
\)\]
|
[^\]]
*
\])\(\s
*
)(([^\s\(\)]
|
\(\S
*
?\))
+
)\s
*
(
".*
?
"
)?\)
/g
;
private
readonly
referenceLinkPattern
=
/
(\[([^\]]
+
)\]\[\s
*
?)([^\s\]]
*
?)\]
/g
;
private
readonly
definitionPattern
=
/^
([\t
]
*
\[([^\]]
+
)\]
:
\s
*
)(\S
+
)
/gm
;
...
...
@@ -73,20 +92,15 @@ export default class LinkProvider implements vscode.DocumentLinkProvider {
):
vscode
.
DocumentLink
[]
{
const
results
:
vscode
.
DocumentLink
[]
=
[];
for
(
const
match
of
matchAll
(
this
.
linkPattern
,
text
))
{
const
pre
=
match
[
1
];
const
link
=
match
[
2
];
const
offset
=
(
match
.
index
||
0
)
+
pre
.
length
;
const
linkStart
=
document
.
positionAt
(
offset
);
const
linkEnd
=
document
.
positionAt
(
offset
+
link
.
length
);
try
{
results
.
push
(
new
vscode
.
DocumentLink
(
new
vscode
.
Range
(
linkStart
,
linkEnd
),
normalizeLink
(
document
,
link
,
base
)));
}
catch
(
e
)
{
// noop
const
matchImage
=
match
[
4
]
&&
extractDocumentLink
(
document
,
base
,
match
[
3
].
length
+
1
,
match
[
4
],
match
.
index
);
if
(
matchImage
)
{
results
.
push
(
matchImage
);
}
const
matchLink
=
extractDocumentLink
(
document
,
base
,
match
[
1
].
length
,
match
[
5
],
match
.
index
);
if
(
matchLink
)
{
results
.
push
(
matchLink
);
}
}
return
results
;
}
...
...
@@ -159,4 +173,4 @@ export default class LinkProvider implements vscode.DocumentLinkProvider {
}
return
out
;
}
}
}
\ No newline at end of file
extensions/markdown-language-features/src/test/documentLinkProvider.test.ts
浏览文件 @
4fe1cdc4
...
...
@@ -103,6 +103,33 @@ suite('markdown.DocumentLinkProvider', () => {
assertRangeEqual
(
link1
.
range
,
new
vscode
.
Range
(
0
,
10
,
0
,
14
));
assertRangeEqual
(
link2
.
range
,
new
vscode
.
Range
(
0
,
23
,
0
,
28
));
});
// #49238
test
(
'
should handle hyperlinked images
'
,
()
=>
{
{
const
links
=
getLinksForFile
(
'
[![alt text](image.jpg)](https://example.com)
'
);
assert
.
strictEqual
(
links
.
length
,
2
);
const
[
link1
,
link2
]
=
links
;
assertRangeEqual
(
link1
.
range
,
new
vscode
.
Range
(
0
,
13
,
0
,
22
));
assertRangeEqual
(
link2
.
range
,
new
vscode
.
Range
(
0
,
25
,
0
,
44
));
}
{
const
links
=
getLinksForFile
(
'
[![a]( whitespace.jpg )]( https://whitespace.com )
'
);
assert
.
strictEqual
(
links
.
length
,
2
);
const
[
link1
,
link2
]
=
links
;
assertRangeEqual
(
link1
.
range
,
new
vscode
.
Range
(
0
,
7
,
0
,
21
));
assertRangeEqual
(
link2
.
range
,
new
vscode
.
Range
(
0
,
26
,
0
,
48
));
}
{
const
links
=
getLinksForFile
(
'
[![a](img1.jpg)](file1.txt) text [![a](img2.jpg)](file2.txt)
'
);
assert
.
strictEqual
(
links
.
length
,
4
);
const
[
link1
,
link2
,
link3
,
link4
]
=
links
;
assertRangeEqual
(
link1
.
range
,
new
vscode
.
Range
(
0
,
6
,
0
,
14
));
assertRangeEqual
(
link2
.
range
,
new
vscode
.
Range
(
0
,
17
,
0
,
26
));
assertRangeEqual
(
link3
.
range
,
new
vscode
.
Range
(
0
,
39
,
0
,
47
));
assertRangeEqual
(
link4
.
range
,
new
vscode
.
Range
(
0
,
50
,
0
,
59
));
}
});
});
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录