diff --git a/mparser.py b/mparser.py index 29208bbdd..b7fb5195b 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 d4a0278e6..1f952f183 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