diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2015-03-26 00:04:38 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2015-03-26 00:04:38 +0200 |
commit | d53c00db13d144ee8c5430c11c490c1ec87f9fc7 (patch) | |
tree | 3d9ab65a240b05d21b38574c5ea4b52440138667 | |
parent | d2a648bb93c792efc81070ed6b619785349e6cba (diff) | |
download | meson-d53c00db13d144ee8c5430c11c490c1ec87f9fc7.zip meson-d53c00db13d144ee8c5430c11c490c1ec87f9fc7.tar.gz meson-d53c00db13d144ee8c5430c11c490c1ec87f9fc7.tar.bz2 |
Yo dawg, can embed quoted single quotes inside quotes.
-rw-r--r-- | mparser.py | 8 | ||||
-rw-r--r-- | test cases/common/32 multiline string/meson.build | 16 |
2 files changed, 20 insertions, 4 deletions
@@ -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 |