Recognize sibling ordered list items when rewriting asset links
This commit is contained in:
1 parent
f188f0fc32
commit
fcd0fdd7a4
2 files changed
+15
-1
No files matched your search
+10
-1
@@ -44,6 +44,14 @@ func RewriteAssetLinks(content []byte, oldBase, newBase string) []byte {
|
|||||||
matched++
|
matched++
|
||||||
}
|
}
|
||||||
if matched < len(containers) {
|
if matched < len(containers) {
|
||||||
|
rest := bytes.TrimLeft(body, " ")
|
||||||
|
if marker := listMarker.Find(rest); len(body)-len(rest) <= 3 && marker != nil {
|
||||||
|
mark := bytes.TrimRight(marker, " ")
|
||||||
|
// 同级列表的新条目结束上一项段落,不受“只能以 1 打断段落”的限制。
|
||||||
|
if mark[len(mark)-1] == containers[matched].marker {
|
||||||
|
paragraph = false
|
||||||
|
}
|
||||||
|
}
|
||||||
containers = containers[:matched]
|
containers = containers[:matched]
|
||||||
fence = nil // 容器结束时,其内部未闭合的代码块也结束。
|
fence = nil // 容器结束时,其内部未闭合的代码块也结束。
|
||||||
// 段落允许省略引用或列表前缀的续行,不能把其缩进误认成代码。
|
// 段落允许省略引用或列表前缀的续行,不能把其缩进误认成代码。
|
||||||
@@ -81,7 +89,7 @@ func RewriteAssetLinks(content []byte, oldBase, newBase string) []byte {
|
|||||||
padding = 1
|
padding = 1
|
||||||
}
|
}
|
||||||
width := indent + len(mark) + padding
|
width := indent + len(mark) + padding
|
||||||
containers = append(containers, linkContainer{indent: width})
|
containers = append(containers, linkContainer{indent: width, marker: mark[len(mark)-1]})
|
||||||
body = body[min(width, len(body)):]
|
body = body[min(width, len(body)):]
|
||||||
} else {
|
} else {
|
||||||
break
|
break
|
||||||
@@ -112,6 +120,7 @@ func RewriteAssetLinks(content []byte, oldBase, newBase string) []byte {
|
|||||||
type linkContainer struct {
|
type linkContainer struct {
|
||||||
quote bool
|
quote bool
|
||||||
indent int
|
indent int
|
||||||
|
marker byte
|
||||||
}
|
}
|
||||||
|
|
||||||
var listMarker = regexp.MustCompile(`^(?:[-+*]|[0-9]{1,9}[.)])(?: +|$)`)
|
var listMarker = regexp.MustCompile(`^(?:[-+*]|[0-9]{1,9}[.)])(?: +|$)`)
|
||||||
|
|||||||
@@ -15,6 +15,10 @@ func TestRewriteAssetLinksPreservesCodeBlocks(t *testing.T) {
|
|||||||
{"引用围栏", "> ```markdown\n> \n> ```\n"},
|
{"引用围栏", "> ```markdown\n> \n> ```\n"},
|
||||||
{"引用缩进", "> \n"},
|
{"引用缩进", "> \n"},
|
||||||
{"列表围栏", "- ```markdown\n \n ```\n"},
|
{"列表围栏", "- ```markdown\n \n ```\n"},
|
||||||
|
{"有序列表第二项围栏", "1. 项目\n2. ```markdown\n \n ```\n"},
|
||||||
|
{"右括号列表第二项围栏", "1) 项目\n2) ```markdown\n \n ```\n"},
|
||||||
|
{"引用内有序列表第二项围栏", "> 1. 项目\n> 2. ```markdown\n> \n> ```\n"},
|
||||||
|
{"嵌套有序列表第二项围栏", "- 1. 项目\n 2. ```markdown\n \n ```\n"},
|
||||||
{"列表缩进", "- 项目\n\n \n"},
|
{"列表缩进", "- 项目\n\n \n"},
|
||||||
{"有序列表缩进", "10. 项目\n\n \n"},
|
{"有序列表缩进", "10. 项目\n\n \n"},
|
||||||
{"引用内嵌列表", "> - ```markdown\n> \n> ```\n"},
|
{"引用内嵌列表", "> - ```markdown\n> \n> ```\n"},
|
||||||
@@ -39,6 +43,7 @@ func TestRewriteAssetLinksInContainersAndParagraphs(t *testing.T) {
|
|||||||
"- 项目\n\n \n",
|
"- 项目\n\n \n",
|
||||||
"- 项目\n - 子项\n \n",
|
"- 项目\n - 子项\n \n",
|
||||||
"段落\n \n",
|
"段落\n \n",
|
||||||
|
"段落\n2. 项目\n \n",
|
||||||
"> 段落\n \n",
|
"> 段落\n \n",
|
||||||
"- 段落\n\n \n",
|
"- 段落\n\n \n",
|
||||||
"10. 项目\n\n \n",
|
"10. 项目\n\n \n",
|
||||||
|
|||||||
Reference in new issue
Block a user