I would expect that the behavior wrt to multiline strings mimics what Python allows, even when such string is actually passed as an argument to an extension function.
This is a 'test'!
Traceback (most recent call last):
File "p.py", line 9, in <module>
template = env.from_string('''{{ _("""This is another "test"!""") }}''')
File "/tmp/e/lib/python3.6/site-packages/jinja2/environment.py", line 880, in from_string
return cls.from_code(self, self.compile(source), globals, None)
File "/tmp/e/lib/python3.6/site-packages/jinja2/environment.py", line 591, in compile
self.handle_exception(exc_info, source_hint=source_hint)
File "/tmp/e/lib/python3.6/site-packages/jinja2/environment.py", line 780, in handle_exception
reraise(exc_type, exc_value, tb)
File "/tmp/e/lib/python3.6/site-packages/jinja2/_compat.py", line 37, in reraise
raise value.with_traceback(tb)
File "<unknown>", line 1, in template
File "/tmp/e/lib/python3.6/site-packages/jinja2/environment.py", line 497, in _parse
return Parser(self, source, name, encode_filename(filename)).parse()
File "/tmp/e/lib/python3.6/site-packages/jinja2/parser.py", line 901, in parse
result = nodes.Template(self.subparse(), lineno=1)
File "/tmp/e/lib/python3.6/site-packages/jinja2/parser.py", line 875, in subparse
add_data(self.parse_tuple(with_condexpr=True))
File "/tmp/e/lib/python3.6/site-packages/jinja2/parser.py", line 620, in parse_tuple
args.append(parse())
File "/tmp/e/lib/python3.6/site-packages/jinja2/parser.py", line 432, in parse_expression
return self.parse_condexpr()
File "/tmp/e/lib/python3.6/site-packages/jinja2/parser.py", line 437, in parse_condexpr
expr1 = self.parse_or()
File "/tmp/e/lib/python3.6/site-packages/jinja2/parser.py", line 450, in parse_or
left = self.parse_and()
File "/tmp/e/lib/python3.6/site-packages/jinja2/parser.py", line 459, in parse_and
left = self.parse_not()
File "/tmp/e/lib/python3.6/site-packages/jinja2/parser.py", line 470, in parse_not
return self.parse_compare()
File "/tmp/e/lib/python3.6/site-packages/jinja2/parser.py", line 474, in parse_compare
expr = self.parse_math1()
File "/tmp/e/lib/python3.6/site-packages/jinja2/parser.py", line 496, in parse_math1
left = self.parse_concat()
File "/tmp/e/lib/python3.6/site-packages/jinja2/parser.py", line 507, in parse_concat
args = [self.parse_math2()]
File "/tmp/e/lib/python3.6/site-packages/jinja2/parser.py", line 517, in parse_math2
left = self.parse_pow()
File "/tmp/e/lib/python3.6/site-packages/jinja2/parser.py", line 528, in parse_pow
left = self.parse_unary()
File "/tmp/e/lib/python3.6/site-packages/jinja2/parser.py", line 547, in parse_unary
node = self.parse_postfix(node)
File "/tmp/e/lib/python3.6/site-packages/jinja2/parser.py", line 676, in parse_postfix
node = self.parse_call(node)
File "/tmp/e/lib/python3.6/site-packages/jinja2/parser.py", line 767, in parse_call
self.stream.expect('comma')
File "/tmp/e/lib/python3.6/site-packages/jinja2/lexer.py", line 384, in expect
self.name, self.filename)
jinja2.exceptions.TemplateSyntaxError: expected token ',', got 'test'
Expected Behavior
I would expect that the behavior wrt to multiline strings mimics what Python allows, even when such string is actually passed as an argument to an extension function.
Actual Behavior
Executing
gettext("""This is a "test"!""")raises an exception.Template Code
Full Traceback
Your Environment