aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mparser.py8
-rw-r--r--test cases/common/32 multiline string/meson.build16
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