diff options
author | Takeshi KOMIYA <i.tkomiya@gmail.com> | 2016-07-06 21:00:49 +0900 |
---|---|---|
committer | Takeshi KOMIYA <i.tkomiya@gmail.com> | 2016-07-07 21:50:03 +0900 |
commit | cc3e4fba75c20196bfb687190eb1f784b09222e0 (patch) | |
tree | 871bec3f842680c4a28faa8c842f56ee9d4e4cca /sphinx/util/template.py | |
parent | fb7e6a22acc20bbd8c0824e22f6a89cac85281ec (diff) | |
download | sphinx-git-cc3e4fba75c20196bfb687190eb1f784b09222e0.tar.gz |
Jinja2-ize latex writer
Diffstat (limited to 'sphinx/util/template.py')
-rw-r--r-- | sphinx/util/template.py | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/sphinx/util/template.py b/sphinx/util/template.py new file mode 100644 index 000000000..b89a4c960 --- /dev/null +++ b/sphinx/util/template.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +""" + sphinx.util.template + ~~~~~~~~~~~~~~~~~~~~ + + Templates utility functions for Sphinx. + + :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import os +from jinja2.sandbox import SandboxedEnvironment + +from sphinx import package_dir +from sphinx.jinja2glue import SphinxFileSystemLoader + + +class BaseRenderer(object): + def __init__(self, loader=None): + self.env = SandboxedEnvironment(loader=loader) + self.env.filters['repr'] = repr + + def render(self, template_name, context): + return self.env.get_template(template_name).render(context) + + def render_string(self, source, context): + return self.env.from_string(source).render(context) + + +class FileRenderer(BaseRenderer): + def __init__(self, search_path): + loader = SphinxFileSystemLoader(search_path) + super(FileRenderer, self).__init__(loader) + + @classmethod + def render_from_file(cls, filename, context): + dirname = os.path.dirname(filename) + basename = os.path.basename(filename) + return cls(dirname).render(basename, context) + + +class SphinxRenderer(FileRenderer): + def __init__(self): + super(SphinxRenderer, self).__init__(os.path.join(package_dir, 'templates')) + + +class LaTeXRenderer(SphinxRenderer): + def __init__(self): + super(LaTeXRenderer, self).__init__() + + # use JSP/eRuby like tagging instead because curly bracket; the default + # tagging of jinja2 is not good for LaTeX sources. + self.env.variable_start_string = '<%=' + self.env.variable_end_string = '%>' + self.env.block_start_string = '<%' + self.env.block_end_string = '%>' |