Skip to content

Commit

Permalink
fix handleString
Browse files Browse the repository at this point in the history
Signed-off-by: George Lemon <[email protected]>
  • Loading branch information
georgelemon committed Mar 15, 2024
1 parent add1c51 commit 24ae930
Showing 1 changed file with 34 additions and 7 deletions.
41 changes: 34 additions & 7 deletions src/toktok/lexer.nim
Original file line number Diff line number Diff line change
Expand Up @@ -672,7 +672,7 @@ macro registerTokens*(settings: static Settings, tokens: untyped) =
add lex.token, "\\\\"
inc lex.bufpos
of '"':
add lex.token, "\\\""
add lex.token, "\""
inc lex.bufpos
else:
lex.setError("Unknown escape sequence: '\\" & lex.buf[lex.bufpos] & "'")
Expand Down Expand Up @@ -765,16 +765,45 @@ macro registerTokens*(settings: static Settings, tokens: untyped) =
lex.startPos = lex.getColNumber(lex.bufpos)
setLen(lex.token, 0)
let lineno = lex.lineNumber
inc lex.bufpos
let bufpos = lex.bufpos
var blockString: bool
if lex.next("\"\""):
inc lex.bufpos, 3
blockString = true
else:
inc lex.bufpos
while true:
case lex.buf[lex.bufpos]
of '\\':
lex.handleSpecial()
if lex.hasError(): return
of '"':
lex.kind = getDefaultToken("string")
inc lex.bufpos
break
if lex.next("\"\"") and blockString:
lex.kind = getDefaultToken("string")
inc lex.bufpos, 3
break
elif blockString:
while true:
case lex.buf[lex.bufpos]
of '"':
if lex.next("\"\""):
lex.kind = getDefaultToken("string")
inc lex.bufpos, 3
break
else:
add lex.token, lex.buf[lex.bufpos]
inc lex.bufpos
of NewLines:
inc lex.lineNumber
inc lex.bufpos
else:
add lex.token, lex.buf[lex.bufpos]
inc lex.bufpos
break
else:
lex.kind = getDefaultToken("string")
inc lex.bufpos
break
of NewLines:
if lex.multiLineStr:
inc lex.lineNumber
Expand All @@ -788,8 +817,6 @@ macro registerTokens*(settings: static Settings, tokens: untyped) =
else:
add lex.token, lex.buf[lex.bufpos]
inc lex.bufpos
# if lex.multiLineStr:
# lex.lineNumber = lineno

if customHandlers.len > 0:
result.add customHandlers
Expand Down

0 comments on commit 24ae930

Please sign in to comment.