diff --git a/README.markdown b/README.markdown index 91f1ad9..23281d8 100644 --- a/README.markdown +++ b/README.markdown @@ -11,7 +11,7 @@ also take a look at the [cloudpanic source][cp] for a reference implementation. [Here](http://groups.google.com/group/hyde-dev/browse_thread/thread/2a143bd2081b3322) is the initial announcement of the project. -# Installation +## Installation Hyde supports both python 2.7 and 2.6. @@ -28,7 +28,7 @@ You can choose to install hyde by running python setup.py install -# Creating a new hyde site +## Creating a new hyde site The new version of Hyde uses the `argparse` module and hence support subcommands. @@ -38,12 +38,12 @@ The new version of Hyde uses the `argparse` module and hence support subcommands will create a new hyde site using the test layout. -# Generating the hyde site +## Generating the hyde site cd ~/test_site hyde gen -# Serving the website +## Serving the website cd ~/test_site hyde serve @@ -54,7 +54,7 @@ The server also regenerates on demand. As long as the server is running, you can make changes to your source and refresh the browser to view the changes. -# A brief list of features +## A brief list of features 1. Support for multiple templates (although only `Jinja2` is currently implemented) @@ -69,7 +69,7 @@ you can make changes to your source and refresh the browser to view the changes. now provide additional syntactic sugar to make the content more readable. See `blockdown` and `autoextend` plugin for examples. -# Next Steps +## Next Steps 1. Documentation 2. Default Layouts diff --git a/hyde/ext/templates/jinja.py b/hyde/ext/templates/jinja.py index 2822a7f..f514092 100644 --- a/hyde/ext/templates/jinja.py +++ b/hyde/ext/templates/jinja.py @@ -63,6 +63,28 @@ class Markdown(Extension): output = caller().strip() return markdown(self.environment, output) +class IncludeText(Extension): + + tags = set(['includetext']) + + def parse(self, parser): + node = parser.parse_include() + return nodes.CallBlock( + self.call_method('_render_include_text', [], [], None, None), + [], [], [node] + ).set_lineno(node.lineno) + + def _render_include_text(self, caller=None): + if not caller: + return '' + output = caller().strip() + output = markdown(self.environment, output) + if 'typogrify' in self.environment.filters: + typo = self.environment.filters['typogrify'] + output = typo(output) + return output + + class HydeLoader(FileSystemLoader): def __init__(self, sitepath, site, preprocessor=None): @@ -108,7 +130,8 @@ class Jinja2Template(Template): self.env = Environment(loader=self.loader, undefined=SilentUndefined, trim_blocks=True, - extensions=[Markdown, + extensions=[IncludeText, + Markdown, 'jinja2.ext.do', 'jinja2.ext.loopcontrols', 'jinja2.ext.with_']) diff --git a/hyde/tests/test_jinja2template.py b/hyde/tests/test_jinja2template.py index 34fb7a5..8985acd 100644 --- a/hyde/tests/test_jinja2template.py +++ b/hyde/tests/test_jinja2template.py @@ -151,6 +151,25 @@ def create_test_site(): def delete_test_site(): TEST_SITE.delete() +@nottest +def assert_markdown_typogrify_processed_well(include_text, includer_text): + site = Site(TEST_SITE) + site.config.plugins = ['hyde.ext.plugins.meta.MetaPlugin'] + inc = File(TEST_SITE.child('content/inc.md')) + inc.write(include_text) + site.load() + gen = Generator(site) + gen.load_template_if_needed() + template = gen.template + html = template.render(includer_text, {}).strip() + assert html + q = PyQuery(html) + assert "is_processable" not in html + assert "This is a" in q("h1").text() + assert "heading" in q("h1").text() + assert q(".amp").length == 1 + + @with_setup(create_test_site, delete_test_site) def test_can_include_templates_with_processing(): text = """ @@ -172,25 +191,10 @@ Hyde & Jinja. {% include "inc.md" %} """ - site = Site(TEST_SITE) - site.config.plugins = ['hyde.ext.plugins.meta.MetaPlugin'] - inc = File(TEST_SITE.child('content/inc.md')) - inc.write(text) - site.load() - gen = Generator(site) - gen.load_template_if_needed() - template = gen.template - html = template.render(text2, {}).strip() - assert html - q = PyQuery(html) - assert "is_processable" not in html - assert "This is a" in q("h1").text() - assert "heading" in q("h1").text() - assert q(".amp").length == 1 + assert_markdown_typogrify_processed_well(text, text2) -#@with_setup(create_test_site, delete_test_site) -@nottest +@with_setup(create_test_site, delete_test_site) def test_includetext(): text = """ === @@ -200,24 +204,12 @@ is_processable: False This is a heading ================= -An "&". +Hyde & Jinja. """ text2 = """ -{% includetext inc.md %} +{% includetext "inc.md" %} """ - site = Site(TEST_SITE) - inc = File(TEST_SITE.child('content/inc.md')) - inc.write(text) - - site.load() - gen = Generator(site) - gen.load_template_if_needed() - template = gen.template - html = template.render(text2, {}).strip() - assert html - q = PyQuery(html) - assert q("h1").length == 1 - assert q(".amp").length == 1 + assert_markdown_typogrify_processed_well(text, text2)