Commit 254e209e authored by binji@chromium.org's avatar binji@chromium.org

[NaCl SDK] easy_template: fix bug when using % in an expression template.

BUG=none
R=bradnelson@google.com, bradnelson@chromium.org

Review URL: https://codereview.chromium.org/250773010

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@266627 0039d316-1c4b-4281-b951-d872f2087c98
parent c2321966
......@@ -32,9 +32,18 @@ def TemplateToPython(template, statement_re, expr_re):
line_ending = line[-1] + line_ending
line = line[:-1]
m = expr_re.search(line)
if m:
line = line.replace('%', '%%')
ms = list(expr_re.finditer(line))
if ms:
# Only replace % with %% outside of the expr matches.
new_line = ''
start = 0
for m in ms:
new_line += line[start:m.start()].replace('%', '%%')
new_line += line[m.start():m.end()]
start = m.end()
new_line += line[start:].replace('%', '%%')
line = new_line
subst_line = r'r"""%s""" %% (%s,)' % (
re.sub(expr_re, '%s', line),
', '.join(re.findall(expr_re, line)))
......
......@@ -109,6 +109,13 @@ struct Foo {
{'name': 'name', 'type': 'std::string'},
{'name': 'problems', 'type': 'array', 'basetype': 'int', 'size': 99}]})
def testModulo(self):
self._RunTest('No expression %', 'No expression %', {})
self._RunTest('% before {{3 + 4}}', '% before 7', {})
self._RunTest('{{2**8}} % after', '256 % after', {})
self._RunTest('inside {{8 % 3}}', 'inside 2', {})
self._RunTest('Everywhere % {{8 % 3}} %', 'Everywhere % 2 %', {})
if __name__ == '__main__':
unittest.main()
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment