From d53c00db13d144ee8c5430c11c490c1ec87f9fc7 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Thu, 26 Mar 2015 00:04:38 +0200 Subject: Yo dawg, can embed quoted single quotes inside quotes. --- mparser.py | 8 ++++---- test cases/common/32 multiline string/meson.build | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/mparser.py b/mparser.py index 29208bb..b7fb519 100644 --- a/mparser.py +++ b/mparser.py @@ -1,4 +1,4 @@ -# Copyright 2014 The Meson development team +# Copyright 2014-2015 The Meson development team # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,7 +13,6 @@ # limitations under the License. import re -import sys from coredata import MesonException class ParseException(MesonException): @@ -51,7 +50,7 @@ class Lexer: ('rparen', re.compile(r'\)')), ('lbracket', re.compile(r'\[')), ('rbracket', re.compile(r'\]')), - ('string', re.compile("'[^']*?'")), + ('string', re.compile(r"'([^'\\]|(\\.))*'")), ('comma', re.compile(r',')), ('dot', re.compile(r'\.')), ('plus', re.compile(r'\+')), @@ -93,7 +92,8 @@ class Lexer: elif tid == 'rbracket': bracket_count -= 1 elif tid == 'string': - value = match_text[1:-1] + value = match_text[1:-1].replace(r"\'", "'").replace(r" \\ ".strip(), r" \ ".strip())\ + .replace("\\n", "\n") elif tid == 'multiline_string': tid = 'string' value = match_text[3:-3] diff --git a/test cases/common/32 multiline string/meson.build b/test cases/common/32 multiline string/meson.build index d4a0278..1f952f1 100644 --- a/test cases/common/32 multiline string/meson.build +++ b/test cases/common/32 multiline string/meson.build @@ -7,3 +7,19 @@ again''' if x == y error('Things are wrong.') endif + +multieol = ''' +''' +singleeol = '\n' + +if multieol != singleeol + error('Newline quoting is broken.') +endif + +# And one more for good measure. +quote1 = ''' ' '''.strip() +quote2 = '\'' + +if quote1 != quote2 + error('Single quote quoting is broken.') +endif -- cgit v1.1