diff --git a/xbc/__init__.py b/xbc/__init__.py index d46cea1..9859c57 100644 --- a/xbc/__init__.py +++ b/xbc/__init__.py @@ -111,9 +111,9 @@ class Block(Node): key_fragment = Word(alphas + nums + '_-') key = DelimitedList(key_fragment, delim='.', combine=True) -bareval = CharsNotIn(' {}#=+:;,\n\'"') -strvals = QuotedString("'", multiline=True, unquote_results=True) -strvald = QuotedString('"', multiline=True, unquote_results=True) +bareval = CharsNotIn('{}#=+:;,\n\'"') +strvals = QuotedString("'", multiline=True, unquote_results=False) +strvald = QuotedString('"', multiline=True, unquote_results=False) value = bareval | strvald | strvals assign = Literal('=') @@ -159,6 +159,11 @@ def lex(data): tree = XBCParser.parseString(data).asList() return tree +def unquote(val): + if val[0] in '\'"' and val[0] == val[-1]: + return val[1:-1] + return val.strip() + def parse_block(key, seq): if isinstance(seq, list) and len(seq) == 1 and isinstance(seq[0], list): seq = seq[0] @@ -200,6 +205,12 @@ def parse_block(key, seq): else: assign = value + if isinstance(assign, list): + for i in range(len(assign)): + assign[i] = unquote(assign[i]) + else: + assign = unquote(assign) + if isinstance(assign, list) and len(assign) == 1: assign = assign[0]