aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2025-01-21 21:33:46 +0700
committerShulhan <ms@kilabit.info>2025-01-21 21:40:16 +0700
commitf0de1106fa27a1e3e6ccd3fff8cbbc7f578aaad6 (patch)
tree716420368b62cdfbae487ce66c9c992fe7668f4f
parented20fc1c23e8dd0096d32159df32a81d4e2cbb6a (diff)
downloadasciidoctor-go-f0de1106fa27a1e3e6ccd3fff8cbbc7f578aaad6.tar.xz
all: fix section detected as paragraph after list and comment
Previously, given the following markup, ---- * Sub list + Sub list content. //}}} //{{{ == Sub 2 //}} ---- The section "Sub 2" will be parsed as paragraph instead of new section.
-rw-r--r--document_parser.go24
-rw-r--r--testdata/comment_test.txt158
2 files changed, 176 insertions, 6 deletions
diff --git a/document_parser.go b/document_parser.go
index 3a0a2f8..74c14b6 100644
--- a/document_parser.go
+++ b/document_parser.go
@@ -62,8 +62,8 @@ func parseSub(parentDoc *Document, content []byte) (subdoc *Document) {
return subdoc
}
-// consumeLinesUntil given an element el, consume all lines until we found
-// a line with kind match with term or match with one in terms.
+// consumeLinesUntil given an element el, consume lines until we found a line
+// with kind match with term OR match with one of kind in the terms.
func (docp *documentParser) consumeLinesUntil(el *element, term int, terms []int) (line []byte) {
var (
logp = `consumeLinesUntil`
@@ -1283,8 +1283,14 @@ func (docp *documentParser) parseListOrdered(parent *element, title string, line
docp.kind == lineKindAttributeElement ||
docp.kind == lineKindBlockTitle ||
docp.kind == lineKindID ||
- docp.kind == lineKindIDShort ||
- docp.kind == lineKindText {
+ docp.kind == lineKindIDShort {
+ if docp.prevKind == lineKindEmpty ||
+ docp.prevKind == lineKindComment ||
+ docp.prevKind == lineKindBlockComment {
+ break
+ }
+ }
+ if docp.kind == lineKindText {
if docp.prevKind == lineKindEmpty {
break
}
@@ -1531,8 +1537,14 @@ func (docp *documentParser) parseListUnordered(parent, el *element, line []byte,
docp.kind == lineKindAdmonition ||
docp.kind == lineKindBlockTitle ||
docp.kind == lineKindID ||
- docp.kind == lineKindIDShort ||
- docp.kind == lineKindText {
+ docp.kind == lineKindIDShort {
+ if docp.prevKind == lineKindEmpty ||
+ docp.prevKind == lineKindComment ||
+ docp.prevKind == lineKindBlockComment {
+ break
+ }
+ }
+ if docp.kind == lineKindText {
if docp.prevKind == lineKindEmpty {
break
}
diff --git a/testdata/comment_test.txt b/testdata/comment_test.txt
new file mode 100644
index 0000000..05eec37
--- /dev/null
+++ b/testdata/comment_test.txt
@@ -0,0 +1,158 @@
+Test comments.
+
+>>> section after comment
+= Title
+
+//{{{
+== Sub 1
+
+* List
+** Sub list
++
+Sub list content.
+
+//}}}
+//{{{
+== Sub 2
+
+. Ordered
+.. Sub ordered
++
+Sub 2 content.
+
+//}}}
+//{{{
+== Sub 3
+
+//}}}
+
+<<< section after comment
+
+<div class="sect1">
+<h2 id="sub_1">Sub 1</h2>
+<div class="sectionbody">
+<div class="ulist">
+<ul>
+<li>
+<p>List</p>
+<div class="ulist">
+<ul>
+<li>
+<p>Sub list</p>
+<div class="paragraph">
+<p>Sub list content.</p>
+</div>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="sub_2">Sub 2</h2>
+<div class="sectionbody">
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>Ordered</p>
+<div class="olist loweralpha">
+<ol class="loweralpha" type="a">
+<li>
+<p>Sub ordered</p>
+<div class="paragraph">
+<p>Sub 2 content.</p>
+</div>
+</li>
+</ol>
+</div>
+</li>
+</ol>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="sub_3">Sub 3</h2>
+<div class="sectionbody">
+</div>
+</div>
+
+>>> section after block comment
+= Title
+
+//{{{
+== Sub 1
+
+* List
+** Sub list
++
+Sub list content.
+
+//}}}
+////
+Block comment
+////
+== Sub 2
+
+. Ordered
+.. Sub ordered
++
+Sub 2 content.
+
+////
+Block comment
+////
+== Sub 3
+
+<<< section after block comment
+
+<div class="sect1">
+<h2 id="sub_1">Sub 1</h2>
+<div class="sectionbody">
+<div class="ulist">
+<ul>
+<li>
+<p>List</p>
+<div class="ulist">
+<ul>
+<li>
+<p>Sub list</p>
+<div class="paragraph">
+<p>Sub list content.</p>
+</div>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="sub_2">Sub 2</h2>
+<div class="sectionbody">
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>Ordered</p>
+<div class="olist loweralpha">
+<ol class="loweralpha" type="a">
+<li>
+<p>Sub ordered</p>
+<div class="paragraph">
+<p>Sub 2 content.</p>
+</div>
+</li>
+</ol>
+</div>
+</li>
+</ol>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="sub_3">Sub 3</h2>
+<div class="sectionbody">
+</div>
+</div>