diff options
Diffstat (limited to 'lib/packages/docutils/highlite.nim')
-rw-r--r-- | lib/packages/docutils/highlite.nim | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/lib/packages/docutils/highlite.nim b/lib/packages/docutils/highlite.nim index 570465e14..1bc0af1b6 100644 --- a/lib/packages/docutils/highlite.nim +++ b/lib/packages/docutils/highlite.nim @@ -174,19 +174,38 @@ proc nimNextToken(g: var GeneralTokenizer) = of '#': g.kind = gtComment inc(pos) - if g.buf[pos] == '#': inc(pos) + var isDoc = false + if g.buf[pos] == '#': + inc(pos) + isDoc = true if g.buf[pos] == '[': g.kind = gtLongComment - var brackets = 0 - while g.buf[pos] == '[': - inc(pos) - inc(brackets) - while g.buf[pos] != '\0': - if g.buf[pos] == ']': - var q = pos - while g.buf[pos] == ']': inc(pos) - if pos-q == brackets: break - inc(pos) + var nesting = 0 + while true: + case g.buf[pos] + of '\0': break + of '#': + if isDoc: + if g.buf[pos+1] == '#' and g.buf[pos+2] == '[': + inc nesting + elif g.buf[pos+1] == '[': + inc nesting + inc pos + of ']': + if isDoc: + if g.buf[pos+1] == '#' and g.buf[pos+2] == '#': + if nesting == 0: + inc(pos, 3) + break + dec nesting + elif g.buf[pos+1] == '#': + if nesting == 0: + inc(pos, 2) + break + dec nesting + inc pos + else: + inc pos else: while g.buf[pos] notin {'\0', '\x0A', '\x0D'}: inc(pos) of 'a'..'z', 'A'..'Z', '_', '\x80'..'\xFF': |