diff --git a/latex/jinja2.py b/latex/jinja2.py index 27f7a35..4c5c0f2 100644 --- a/latex/jinja2.py +++ b/latex/jinja2.py @@ -14,11 +14,11 @@ def stripstags(self): raise NotImplementedError @classmethod - def escape(cls, s): + def escape(cls, s, *args, **kwargs): if hasattr(s, '__html__'): return s.__html__() - rv = escape(s) + rv = escape(s, *args, **kwargs) if rv.__class__ is not cls: return cls(rv) return rv diff --git a/tests/test_jinja2.py b/tests/test_jinja2.py new file mode 100644 index 0000000..72f4126 --- /dev/null +++ b/tests/test_jinja2.py @@ -0,0 +1,35 @@ +from latex.jinja2 import make_env +from jinja2.loaders import DictLoader + + +def test_jinja2_var(): + in_template = r'Hello \VAR{name}!' + out = r'Hello Eric!' + + env = make_env(loader=DictLoader({"template.tex": in_template})) + template = env.get_template("template.tex") + assert out == template.render(name="Eric") + + +def test_jinja2_escape(): + in_template = r'Hello \VAR{name | e}!' + out = r'Hello Jo\%h\%n\textasciitilde{} \textbackslash{}emph\{Cle\%ese\}\$!' + env = make_env(loader=DictLoader({'template.tex': in_template})) + template = env.get_template('template.tex') + assert out == template.render(name=r'Jo%h%n~ \emph{Cle%ese}$') + + +def test_jinja2_newline_escape(): + in_template = r'Hello \VAR{name | e}!' + out = r'Hello Michael \\Palin!' + env = make_env(loader=DictLoader({'template.tex': in_template})) + template = env.get_template('template.tex') + assert out == template.render(name='Michael \n\n\nPalin') + + +def test_jinja2_newline_escape_no_folding(): + in_template = r'Hello \VAR{name | e(fold_newlines=false)}!' + out = r'Hello Michael \\[3\baselineskip]Palin!' + env = make_env(loader=DictLoader({'template.tex': in_template})) + template = env.get_template('template.tex') + assert out == template.render(name='Michael \n\n\nPalin')