qapi: qapi.py: allow the "'" character to be escaped
Support escaping the escape character, and make more robust (don't die for '', handle ' without matching '. Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
This commit is contained in:
parent
02d2bd5d57
commit
e0d45df7a5
@ -13,18 +13,29 @@ from ordereddict import OrderedDict
|
||||
|
||||
def tokenize(data):
|
||||
while len(data):
|
||||
if data[0] in ['{', '}', ':', ',', '[', ']']:
|
||||
yield data[0]
|
||||
data = data[1:]
|
||||
elif data[0] in ' \n':
|
||||
data = data[1:]
|
||||
elif data[0] == "'":
|
||||
data = data[1:]
|
||||
ch = data[0]
|
||||
data = data[1:]
|
||||
if ch in ['{', '}', ':', ',', '[', ']']:
|
||||
yield ch
|
||||
elif ch in ' \n':
|
||||
None
|
||||
elif ch == "'":
|
||||
string = ''
|
||||
while data[0] != "'":
|
||||
string += data[0]
|
||||
esc = False
|
||||
while True:
|
||||
if (data == ''):
|
||||
raise Exception("Mismatched quotes")
|
||||
ch = data[0]
|
||||
data = data[1:]
|
||||
data = data[1:]
|
||||
if esc:
|
||||
string += ch
|
||||
esc = False
|
||||
elif ch == "\\":
|
||||
esc = True
|
||||
elif ch == "'":
|
||||
break
|
||||
else:
|
||||
string += ch
|
||||
yield string
|
||||
|
||||
def parse(tokens):
|
||||
|
Loading…
Reference in New Issue
Block a user