Yo dawg, can embed quoted single quotes inside quotes.

pull/87/head
Jussi Pakkanen 10 years ago
parent d2a648bb93
commit d53c00db13
  1. 8
      mparser.py
  2. 16
      test cases/common/32 multiline string/meson.build

@ -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"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
@ -13,7 +13,6 @@
# limitations under the License. # limitations under the License.
import re import re
import sys
from coredata import MesonException from coredata import MesonException
class ParseException(MesonException): class ParseException(MesonException):
@ -51,7 +50,7 @@ class Lexer:
('rparen', re.compile(r'\)')), ('rparen', re.compile(r'\)')),
('lbracket', re.compile(r'\[')), ('lbracket', re.compile(r'\[')),
('rbracket', re.compile(r'\]')), ('rbracket', re.compile(r'\]')),
('string', re.compile("'[^']*?'")), ('string', re.compile(r"'([^'\\]|(\\.))*'")),
('comma', re.compile(r',')), ('comma', re.compile(r',')),
('dot', re.compile(r'\.')), ('dot', re.compile(r'\.')),
('plus', re.compile(r'\+')), ('plus', re.compile(r'\+')),
@ -93,7 +92,8 @@ class Lexer:
elif tid == 'rbracket': elif tid == 'rbracket':
bracket_count -= 1 bracket_count -= 1
elif tid == 'string': 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': elif tid == 'multiline_string':
tid = 'string' tid = 'string'
value = match_text[3:-3] value = match_text[3:-3]

@ -7,3 +7,19 @@ again'''
if x == y if x == y
error('Things are wrong.') error('Things are wrong.')
endif 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

Loading…
Cancel
Save