Switched templating to jinja2

This commit is contained in:
Sebastian Wiesner 2008-11-20 20:05:45 +01:00
parent d02008f99d
commit eeb494cf87
6 changed files with 99 additions and 11 deletions

View File

@ -1,6 +1,4 @@
[extractors]
jinja = sphinx._jinja.babel_extract
[python: **.py]
[jinja: **/templates/**.html]
[jinja: **/templates/**.xml]
[jinja2: **/templates/**.html]
[jinja2: **/templates/**.xml]
[javascript: **.js]

View File

@ -1,4 +1,4 @@
# -*- coding: utf-8 -*-
0;115;0c# -*- coding: utf-8 -*-
import ez_setup
ez_setup.use_setuptools()
@ -36,7 +36,7 @@ are already present, work fine and can be seen "in action" in the Python docs:
and inclusion of appropriately formatted docstrings.
'''
requires = ['Pygments>=0.8', 'Jinja>=1.1', 'docutils>=0.4']
requires = ['Pygments>=0.8', 'Jinja2>=2.0', 'docutils>=0.4']
if sys.version_info < (2, 4):
print 'ERROR: Sphinx requires at least Python 2.4 to run.'

90
sphinx/_jinja2.py Normal file
View File

@ -0,0 +1,90 @@
# -*- coding: utf-8 -*-
"""
sphinx._jinja2
==============
Glue code for jinja2.
:author: Sebastian Wiesner
:contact: basti.wiesner@gmx.net
:copyright: 2008 by Sebastian Wiesner
:license: MIT
"""
import codecs
from os import path
import jinja2
from sphinx.util import mtimes_of_files
from sphinx.application import TemplateBridge
class SphinxLoader(jinja2.BaseLoader):
"""
A jinja2 reimplementation of `sphinx._jinja.SphinxFileSystemLoader`.
"""
def __init__(self, basepath, extpaths, encoding='utf-8'):
"""
Creates a new loader for sphinx.
``extpaths`` is a list of directories, which provide additional
templates to sphinx.
``encoding`` is used to decode the templates into unicode strings.
Defaults to utf-8.
If ``basepath`` is set, this path is used to load sphinx core
templates. If False, these templates are loaded from the sphinx
package.
"""
self.core_loader = jinja2.FileSystemLoader(basepath)
self.all_loaders = jinja2.ChoiceLoader(
[jinja2.FileSystemLoader(extpath) for extpath in extpaths] +
[self.core_loader])
def get_source(self, environment, template):
# exclamation mark forces loading from core
if template.startswith('!'):
return self.core_loader.get_source(environment, template[1:])
# check if the template is probably an absolute path
fs_path = template.replace('/', path.sep)
if path.isabs(fs_path):
if not path.exists(fs_path):
raise jinja2.TemplateNotFound(template)
f = codecs.open(fs_path, 'r', self.encoding)
try:
mtime = path.getmtime(path)
return (f.read(), fs_path,
lambda: mtime == path.getmtime(path))
finally:
f.close()
# finally try to load from custom templates
return self.all_loaders.get_source(environment, template)
class BuiltinTemplates(TemplateBridge):
"""
Interfaces the rendering environment of jinja2 for use in sphinx.
"""
def init(self, builder):
base_templates_path = path.join(path.dirname(__file__), 'templates')
ext_templates_path = [path.join(builder.confdir, dir)
for dir in builder.config.templates_path]
self.templates_path = [base_templates_path] + ext_templates_path
loader = SphinxLoader(base_templates_path, ext_templates_path)
use_i18n = builder.translator is not None
extensions = use_i18n and ['jinja2.ext.i18n'] or []
self.environment = jinja2.Environment(loader=loader,
extensions=extensions)
if use_i18n:
self.environment.install_gettext_translations(builder.translator)
def render(self, template, context):
return self.environment.get_template(template).render(context)
def newest_template_mtime(self):
return max(mtimes_of_files(self.templates_path, '.html'))

View File

@ -98,7 +98,7 @@ class Builder(object):
self.templates = self.app.import_object(
self.config.template_bridge, 'template_bridge setting')()
else:
from sphinx._jinja import BuiltinTemplates
from sphinx._jinja2 import BuiltinTemplates
self.templates = BuiltinTemplates()
self.templates.init(self)

View File

@ -4,7 +4,7 @@
{%- endblock %}
{%- set reldelim1 = reldelim1 is not defined and ' &raquo;' or reldelim1 %}
{%- set reldelim2 = reldelim2 is not defined and ' |' or reldelim2 %}
{%- macro relbar %}
{%- macro relbar() %}
<div class="related">
<h3>{{ _('Navigation') }}</h3>
<ul>
@ -24,7 +24,7 @@
</ul>
</div>
{%- endmacro %}
{%- macro sidebar %}
{%- macro sidebar() %}
{%- if builder != 'htmlhelp' %}
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
@ -64,7 +64,7 @@
</ul>
{%- endif %}
{%- if customsidebar %}
{{ rendertemplate(customsidebar) }}
{% include customsidebar %}
{%- endif %}
{%- block sidebarsearch %}
{%- if pagename != "search" %}

View File

@ -52,7 +52,7 @@
{% if fname %}<a href="{{ fname }}">{% endif -%}
<tt class="xref">{{ modname|e }}</tt>
{%- if fname %}</a>{% endif %}
{%- if pform[0] %} <em>({{ pform|join(', ') }})</em>{% endif -%}
{%- if pform and pform[0] %} <em>({{ pform|join(', ') }})</em>{% endif -%}
</td><td>{% if dep %}<strong>{{ _('Deprecated')}}:</strong>{% endif %}
<em>{{ synops|e }}</em></td></tr>
{%- endif -%}