wmltools.py: fix macro call parsing to prevent wmlscope stringliteral mismatch
I am responsible for wmlscope suddenly giving macro mismatch errors, as was pointed out on IRC. The tell is that in each of these errors, the last field is interpreted as a stringliteral. An argument that starts and ends with a quote is interpreted as a stringliteral. But under previous code, that couldn't happen: quote characters toggled the instring status on and off, but weren't added to arg, so no arg contained any quotes. I didn't like the fact that this stripped the quotes out of translatable strings, so I changed the code to include quotes in arg and strip them out if they began and ended the arg. Unfortunately, while I stripped out quotes when arg was terminated by a space, I didn't think it was necessary when the right bracket terminated the arg. It was.
This commit is contained in:
parent
20bc51302e
commit
d580b2b476
1 changed files with 6 additions and 2 deletions
|
@ -160,6 +160,9 @@ def parse_macroref(start, line):
|
|||
brackdepth -= 1
|
||||
if brackdepth == 0:
|
||||
if not line[i-1].isspace():
|
||||
arg = arg.strip()
|
||||
if arg.startswith('"') and arg.endswith('"'):
|
||||
arg = arg[1:-1].strip()
|
||||
args.append(arg)
|
||||
arg = ""
|
||||
break
|
||||
|
@ -173,9 +176,10 @@ def parse_macroref(start, line):
|
|||
line[i].isspace() and \
|
||||
brackdepth == 1 and \
|
||||
parendepth == 0:
|
||||
arg = arg.strip()
|
||||
if arg.startswith('"') and arg.endswith('"'):
|
||||
arg = arg[1:-1]
|
||||
args.append(arg.strip())
|
||||
arg = arg[1:-1].strip()
|
||||
args.append(arg)
|
||||
arg = ""
|
||||
elif not line[i].isspace() or parendepth > 0:
|
||||
arg += line[i]
|
||||
|
|
Loading…
Add table
Reference in a new issue