Skip to content

Commit

Permalink
rst: allow comment to continue on second line (#18338)
Browse files Browse the repository at this point in the history
  • Loading branch information
a-mr authored Jun 24, 2021
1 parent 55c1953 commit 0c8d3ae
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 18 deletions.
28 changes: 10 additions & 18 deletions lib/packages/docutils/rst.nim
Original file line number Diff line number Diff line change
Expand Up @@ -1615,24 +1615,16 @@ proc getDirective(p: var RstParser): string =
"too many colons for a directive (should be ::)",
p.tok[afterIdx].line, p.tok[afterIdx].col)

proc parseComment(p: var RstParser): PRstNode =
case currentTok(p).kind
of tkIndent, tkEof:
if currentTok(p).kind != tkEof and nextTok(p).kind == tkIndent:
inc p.idx # empty comment
else:
var indent = currentTok(p).ival
while true:
case currentTok(p).kind
of tkEof:
break
of tkIndent:
if currentTok(p).ival < indent: break
else:
discard
inc p.idx
proc parseComment(p: var RstParser, col: int): PRstNode =
if currentTok(p).kind != tkEof and nextTok(p).kind == tkIndent:
inc p.idx # empty comment
else:
while currentTok(p).kind notin {tkIndent, tkEof}: inc p.idx
while currentTok(p).kind != tkEof:
if currentTok(p).kind == tkIndent and currentTok(p).ival > col or
currentTok(p).kind != tkIndent and currentTok(p).col > col:
inc p.idx
else:
break
result = nil

proc parseLine(p: var RstParser, father: PRstNode) =
Expand Down Expand Up @@ -2841,7 +2833,7 @@ proc parseDotDot(p: var RstParser): PRstNode =
(n = parseFootnote(p); n != nil):
result = n
else:
result = parseComment(p)
result = parseComment(p, col)

proc rstParsePass1*(fragment, filename: string,
line, column: int,
Expand Down
66 changes: 66 additions & 0 deletions tests/stdlib/trst.nim
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,72 @@ suite "RST parsing":
rnLeaf 'set'
""")

test "RST comment":
check(dedent"""
.. comment1
comment2
someParagraph""".toAst ==
dedent"""
rnLeaf 'someParagraph'
""")

check(dedent"""
..
comment1
comment2
someParagraph""".toAst ==
dedent"""
rnLeaf 'someParagraph'
""")

test "check that additional line right after .. ends comment":
check(dedent"""
..
notAcomment1
notAcomment2
someParagraph""".toAst ==
dedent"""
rnInner
rnBlockQuote
rnInner
rnLeaf 'notAcomment1'
rnLeaf ' '
rnLeaf 'notAcomment2'
rnParagraph
rnLeaf 'someParagraph'
""")

test "but blank lines after 2nd non-empty line don't end the comment":
check(dedent"""
..
comment1
comment2
someParagraph""".toAst ==
dedent"""
rnLeaf 'someParagraph'
""")

test "using .. as separator b/w directives and block quotes":
check(dedent"""
.. note:: someNote
..
someBlockQuote""".toAst ==
dedent"""
rnInner
rnAdmonition adType=note
[nil]
[nil]
rnLeaf 'someNote'
rnBlockQuote
rnInner
rnLeaf 'someBlockQuote'
""")

suite "RST indentation":
test "nested bullet lists":
let input = dedent """
Expand Down

0 comments on commit 0c8d3ae

Please sign in to comment.