From 893ca6ca0d379c0fbf6a6b4d70b551a3005b9de8 Mon Sep 17 00:00:00 2001 From: SoniEx2 Date: Mon, 8 Apr 2019 14:54:07 -0300 Subject: [PATCH] Fix issues with newline handling in long strings --- luatokens.lua | 3 ++- test.lua | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/luatokens.lua b/luatokens.lua index d50f6c1..af53d45 100644 --- a/luatokens.lua +++ b/luatokens.lua @@ -386,7 +386,8 @@ end do local tlongstring = {} defs.longstring = tlongstring do local tllongstring_proper = selfify({[""] = "self", ["]"] = function(state, token) state.longstring_close = 0 return "maybe_end" end}) - tllongstring_proper[1] = collect_fallback + tllongstring_proper[1] = false -- placeholder for newline handling + tllongstring_proper[2] = collect_fallback do local tllmaybe_end = selfify({defs = defs}, "maybe_end") tllongstring_proper.maybe_end = tllmaybe_end diff --git a/test.lua b/test.lua index 4e9b132..b0b7082 100644 --- a/test.lua +++ b/test.lua @@ -260,7 +260,7 @@ end -- long string do -- long string edge cases local luatokens = require "luatokens" local tokens = luatokens.defs - local state, err, etoken, estate = parser.parse(tokens, "[==[]=]==][==[]]==][=[] ]=]") + local state, err, etoken, estate = parser.parse(tokens, "[==[]=]==][==[]]==][=[] ]=][[\n]][[\n ]]") local case = case() if not state then print(case, "---- IN TOKENS ----") @@ -276,8 +276,12 @@ do -- long string edge cases assert(table.remove(state, 1) == "]") assert(table.remove(state, 1) == luatokens.tokens.TK_STRING) assert(table.remove(state, 1) == "] ") + assert(table.remove(state, 1) == luatokens.tokens.TK_STRING) + assert(table.remove(state, 1) == "") + assert(table.remove(state, 1) == luatokens.tokens.TK_STRING) + assert(table.remove(state, 1) == " ") assert(table.remove(state, 1) == nil) - assert(state.line == 1 or not state.line) + assert(state.line == 3 or not state.line) end end -- long string