diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2016-01-17 20:31:08 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2016-01-17 20:31:08 +0100 |
commit | 484e285cfd096e49ebf19dc9d66ddb303411caf4 (patch) | |
tree | c9518db992fd09279ff28d42f7fe8db575fc0606 /lib | |
parent | dda01cb726eb990232647e7155e6159512bc1408 (diff) | |
parent | a4aeb6fbecaabed2ae14c2405d9caa6699aec43e (diff) | |
download | Nim-484e285cfd096e49ebf19dc9d66ddb303411caf4.tar.gz |
Merge branch 'multi-line-comments' into devel
Diffstat (limited to 'lib')
-rw-r--r-- | lib/packages/docutils/highlite.nim | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/lib/packages/docutils/highlite.nim b/lib/packages/docutils/highlite.nim index 640b8cd5a..1bc0af1b6 100644 --- a/lib/packages/docutils/highlite.nim +++ b/lib/packages/docutils/highlite.nim @@ -173,7 +173,41 @@ proc nimNextToken(g: var GeneralTokenizer) = while g.buf[pos] in {' ', '\x09'..'\x0D'}: inc(pos) of '#': g.kind = gtComment - while not (g.buf[pos] in {'\0', '\x0A', '\x0D'}): inc(pos) + inc(pos) + var isDoc = false + if g.buf[pos] == '#': + inc(pos) + isDoc = true + if g.buf[pos] == '[': + g.kind = gtLongComment + 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': var id = "" while g.buf[pos] in SymChars + {'_'}: |