buildframework/helium/external/python/lib/2.5/Sphinx-0.5.1-py2.5.egg/sphinx/_jinja.py
changeset 1 be27ed110b50
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/external/python/lib/2.5/Sphinx-0.5.1-py2.5.egg/sphinx/_jinja.py	Wed Oct 28 14:39:48 2009 +0000
@@ -0,0 +1,113 @@
+# -*- coding: utf-8 -*-
+"""
+    sphinx._jinja
+    ~~~~~~~~~~~~~
+
+    Jinja glue.
+
+    :copyright: 2007-2008 by Georg Brandl, Horst Gutmann.
+    :license: BSD.
+"""
+
+import codecs
+from os import path
+
+from sphinx.util import mtimes_of_files
+from sphinx.application import TemplateBridge
+
+from jinja import Environment
+from jinja.loaders import BaseLoader
+from jinja.exceptions import TemplateNotFound
+
+
+def babel_extract(fileobj, keywords, comment_tags, options):
+    """
+    Simple extractor to get some basic Babel support.
+    """
+    env = Environment()
+    for lineno, sg, pl in env.get_translations_for_string(fileobj.read()):
+        yield lineno, None, (sg, pl), ''
+
+
+class SphinxFileSystemLoader(BaseLoader):
+    """
+    A loader that loads templates either relative to one of a list of given
+    paths, or from an absolute path.
+    """
+
+    def __init__(self, basepath, extpaths):
+        self.basepath = path.abspath(basepath)
+        self.extpaths = map(path.abspath, extpaths)
+        self.searchpaths = self.extpaths + [self.basepath]
+
+    def get_source(self, environment, name, parent):
+        name = name.replace('/', path.sep)
+        if name.startswith('!'):
+            name = name[1:]
+            if not path.exists(path.join(self.basepath, name)):
+                raise TemplateNotFound(name)
+            filename = path.join(self.basepath, name)
+        elif path.isabs(name):
+            if not path.exists(name):
+                raise TemplateNotFound(name)
+            filename = name
+        else:
+            for searchpath in self.searchpaths:
+                if path.exists(path.join(searchpath, name)):
+                    filename = path.join(searchpath, name)
+                    break
+            else:
+                raise TemplateNotFound(name)
+        f = codecs.open(filename, 'r', environment.template_charset)
+        try:
+            return f.read()
+        finally:
+            f.close()
+
+
+class TranslatorEnvironment(Environment):
+    class _Translator(object):
+        def __init__(self, translator):
+            self.trans = translator
+
+        def gettext(self, string):
+            return self.trans.ugettext(string)
+
+        def ngettext(self, singular, plural, n):
+            return self.trans.ungettext(singular, plural, n)
+
+    def __init__(self, *args, **kwargs):
+        self.translator = kwargs['translator']
+        del kwargs['translator']
+        super(TranslatorEnvironment, self).__init__(*args, **kwargs)
+
+    def get_translator(self, context):
+        return TranslatorEnvironment._Translator(self.translator)
+
+
+class BuiltinTemplates(TemplateBridge):
+    def init(self, builder):
+        self.templates = {}
+        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 = SphinxFileSystemLoader(base_templates_path, ext_templates_path)
+        if builder.translator is not None:
+            self.jinja_env = TranslatorEnvironment(loader=loader,
+                    friendly_traceback=False, translator=builder.translator)
+        else:
+            self.jinja_env = Environment(loader=loader,
+                    # disable traceback, more likely that something
+                    # in the application is broken than in the templates
+                    friendly_traceback=False)
+
+    def newest_template_mtime(self):
+        return max(mtimes_of_files(self.templates_path, '.html'))
+
+    def render(self, template, context):
+        if template in self.templates:
+            return self.templates[template].render(context)
+        templateobj = self.templates[template] = \
+                      self.jinja_env.get_template(template)
+        return templateobj.render(context)