From ce165cf80b70a6cb6e8a3146c3fb506f4624d186 Mon Sep 17 00:00:00 2001 From: theludovyc Date: Sat, 21 Oct 2023 13:24:19 +0200 Subject: [PATCH] fix #257 use quotes in strings --- Test/TestExecuter/TestSay/TestSay.rk | 2 +- Test/TestParser/TestAsk/TestAsk.gd | 25 +++++++++++++++++++ Test/TestParser/TestSay/TestSay.gd | 37 ++++++++++++++++++++++++++++ addons/Rakugo/lib/systems/Parser.gd | 2 +- 4 files changed, 64 insertions(+), 2 deletions(-) diff --git a/Test/TestExecuter/TestSay/TestSay.rk b/Test/TestExecuter/TestSay/TestSay.rk index 5f22f6b..f8096be 100644 --- a/Test/TestExecuter/TestSay/TestSay.rk +++ b/Test/TestExecuter/TestSay/TestSay.rk @@ -3,4 +3,4 @@ character sy "Sylvie" sy "Hello !" "My name is " years = 18 -"I am " \ No newline at end of file +"I am " diff --git a/Test/TestParser/TestAsk/TestAsk.gd b/Test/TestParser/TestAsk/TestAsk.gd index 173957c..8b1d648 100644 --- a/Test/TestParser/TestAsk/TestAsk.gd +++ b/Test/TestParser/TestAsk/TestAsk.gd @@ -99,3 +99,28 @@ func test_ask_all(params=use_parameters(test_ask_all_params)): assert_eq(result["question"], "Hello ?") assert_eq(result["default_answer"], "Bob") + +func test_ask_quotes(): + var rk_script = [ + "answer=?gd \"Hello: \"quote\"?\" \"Bob: \"quote\"\"" + ] + + var parsed_script = parser.parse_script(rk_script) + + assert_false(parsed_script.is_empty()) + + var parsed_array = parsed_script["parse_array"] + + assert_false(parsed_array.is_empty()) + + assert_true(parsed_array[0][0] == "ASK") + + var result = parsed_array[0][1] + + assert_eq(result["variable"], "answer") + + assert_eq(result["character_tag"], "gd") + + assert_eq(result["question"], "Hello: \"quote\"?") + + assert_eq(result["default_answer"], "Bob: \"quote\"") diff --git a/Test/TestParser/TestSay/TestSay.gd b/Test/TestParser/TestSay/TestSay.gd index 4d45f18..3619f4b 100644 --- a/Test/TestParser/TestSay/TestSay.gd +++ b/Test/TestParser/TestSay/TestSay.gd @@ -94,6 +94,43 @@ func test_say_escape_characters(): assert_eq(result["text"], "first\nsecond\n\nthird") + assert_true(parsed_array[1][0] == "SAY") + result = parsed_array[1][1] assert_eq(result["text"], "\ttabulation\t\ttabulations") + +func test_say_quote(): + var rk_script = [ + "\"hello: \"quote\"\"", + "\"\"quote\" hello \"quote\"\"", + "\"hel\"quote\"lo\"" + ] + + var parsed_script = parser.parse_script(rk_script) + + assert_false(parsed_script.is_empty()) + + var parsed_array = parsed_script["parse_array"] + + assert_false(parsed_array.is_empty()) + + assert_true(parsed_script.get("labels", [""]).is_empty()) + + assert_true(parsed_array[0][0] == "SAY") + + var result = parsed_array[0][1] + + assert_eq(result["text"], "hello: \"quote\"") + + assert_true(parsed_array[1][0] == "SAY") + + result = parsed_array[1][1] + + assert_eq(result["text"], "\"quote\" hello \"quote\"") + + assert_true(parsed_array[2][0] == "SAY") + + result = parsed_array[2][1] + + assert_eq(result["text"], "hel\"quote\"lo") diff --git a/addons/Rakugo/lib/systems/Parser.gd b/addons/Rakugo/lib/systems/Parser.gd index 3125d37..2ea4467 100644 --- a/addons/Rakugo/lib/systems/Parser.gd +++ b/addons/Rakugo/lib/systems/Parser.gd @@ -39,7 +39,7 @@ var Tokens := { var Regex := { NAME = "[a-zA-Z][a-zA-Z_0-9]*", NUMERIC = "-?[0-9]\\.?[0-9]*", - STRING = "\"[^\"]*\"", + STRING = "\".+?\"", VARIABLE = "((?{NAME})\\.)?(?{NAME})", # MULTILINE_STRING = "\"\"\"(?.*)\"\"\"", }