From 8036dae07fc4b14061c17e5709e0eb9b80bab455 Mon Sep 17 00:00:00 2001 From: Lakshmi Vyasarajan Date: Tue, 15 Mar 2011 13:27:30 +0530 Subject: [PATCH] Made line statement prefix configurable. Made 41805$ default line statement prefix --- hyde/ext/templates/jinja.py | 66 ++++++++++++++++++++++++------- hyde/tests/test_jinja2template.py | 30 ++++++++++++-- 2 files changed, 77 insertions(+), 19 deletions(-) diff --git a/hyde/ext/templates/jinja.py b/hyde/ext/templates/jinja.py index f5028c8..29a21eb 100644 --- a/hyde/ext/templates/jinja.py +++ b/hyde/ext/templates/jinja.py @@ -10,6 +10,7 @@ from hyde.fs import File, Folder from hyde.model import Expando from hyde.template import HtmlWrap, Template from hyde.util import getLoggerWithNullHandler +from operator import attrgetter from jinja2 import contextfunction, Environment from jinja2 import FileSystemLoader, FileSystemBytecodeCache @@ -499,21 +500,56 @@ class Jinja2Template(Template): if hasattr(engine, 'preprocessor') else None) self.loader = HydeLoader(self.sitepath, site, self.preprocessor) - self.env = Environment(loader=self.loader, - undefined=SilentUndefined, - line_statement_prefix='---', - trim_blocks=True, - bytecode_cache=FileSystemBytecodeCache(), - extensions=[IncludeText, - Spaceless, - Markdown, - Syntax, - Reference, - Refer, - YamlVar, - 'jinja2.ext.do', - 'jinja2.ext.loopcontrols', - 'jinja2.ext.with_']) + + default_extensions = [ + IncludeText, + Spaceless, + Markdown, + Syntax, + Reference, + Refer, + YamlVar, + 'jinja2.ext.do', + 'jinja2.ext.loopcontrols', + 'jinja2.ext.with_' + ] + + defaults = { + 'line_statement_prefix': '$$$', + 'trim_blocks': True, + } + + settings = dict() + settings.update(defaults) + settings['extensions'] = list() + settings['extensions'].extend(default_extensions) + + conf = {} + + try: + conf = attrgetter('config.jinja2')(site).to_dict() + print conf + except AttributeError: + pass + + settings.update( + dict([(key, conf[key]) for key in defaults if key in conf])) + + extensions = conf.get('extensions', []) + if isinstance(extensions, list): + settings['extensions'].extend(extensions) + else: + settings['extensions'].append(extensions) + + print settings + + self.env = Environment( + loader=self.loader, + undefined=SilentUndefined, + line_statement_prefix=settings['line_statement_prefix'], + trim_blocks=True, + bytecode_cache=FileSystemBytecodeCache(), + extensions=settings['extensions']) self.env.globals['media_url'] = media_url self.env.globals['content_url'] = content_url self.env.globals['engine'] = engine diff --git a/hyde/tests/test_jinja2template.py b/hyde/tests/test_jinja2template.py index 1bb2e84..822aab5 100644 --- a/hyde/tests/test_jinja2template.py +++ b/hyde/tests/test_jinja2template.py @@ -152,10 +152,10 @@ def test_markdown_with_extensions(): def test_line_statements(): source = """ - ---markdown + $$$ markdown ### Heading 3 - --- endmarkdown + $$$ endmarkdown """ t = Jinja2Template(JINJA2.path) s = Site(JINJA2.path) @@ -165,6 +165,28 @@ def test_line_statements(): html = t.render(source, {}).strip() assert html == u'

Heading 3

' +def test_line_statements_with_config(): + source = """ + %% markdown + ### Heading 3 + + %% endmarkdown + """ + config = """ + markdown: + extensions: + - headerid + jinja2: + line_statement_prefix: '%%' + + """ + t = Jinja2Template(JINJA2.path) + s = Site(JINJA2.path) + s.config = Config(JINJA2.path, config_dict=yaml.load(config)) + t.configure(s) + html = t.render(source, {}).strip() + assert html == u'

Heading 3

' + TEST_SITE = File(__file__).parent.child_folder('_test') @@ -228,9 +250,9 @@ class TestJinjaTemplate(object): inc = File(TEST_SITE.child('content/inc.md')) text = """ {% extends 'index.html' %} - --- block body + $$$ block body
Heya
- --- endblock + $$$ endblock """ site.load() gen = Generator(site)