| @@ -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 | [Here](http://groups.google.com/group/hyde-dev/browse_thread/thread/2a143bd2081b3322) is | ||||
| the initial announcement of the project. | the initial announcement of the project. | ||||
| # Installation | |||||
| ## Installation | |||||
| Hyde supports both python 2.7 and 2.6. | 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 | 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. | 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. | will create a new hyde site using the test layout. | ||||
| # Generating the hyde site | |||||
| ## Generating the hyde site | |||||
| cd ~/test_site | cd ~/test_site | ||||
| hyde gen | hyde gen | ||||
| # Serving the website | |||||
| ## Serving the website | |||||
| cd ~/test_site | cd ~/test_site | ||||
| hyde serve | 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. | 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) | 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 | now provide additional syntactic sugar to make the content more readable. See | ||||
| `blockdown` and `autoextend` plugin for examples. | `blockdown` and `autoextend` plugin for examples. | ||||
| # Next Steps | |||||
| ## Next Steps | |||||
| 1. Documentation | 1. Documentation | ||||
| 2. Default Layouts | 2. Default Layouts | ||||
| @@ -63,6 +63,28 @@ class Markdown(Extension): | |||||
| output = caller().strip() | output = caller().strip() | ||||
| return markdown(self.environment, output) | 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): | class HydeLoader(FileSystemLoader): | ||||
| def __init__(self, sitepath, site, preprocessor=None): | def __init__(self, sitepath, site, preprocessor=None): | ||||
| @@ -108,7 +130,8 @@ class Jinja2Template(Template): | |||||
| self.env = Environment(loader=self.loader, | self.env = Environment(loader=self.loader, | ||||
| undefined=SilentUndefined, | undefined=SilentUndefined, | ||||
| trim_blocks=True, | trim_blocks=True, | ||||
| extensions=[Markdown, | |||||
| extensions=[IncludeText, | |||||
| Markdown, | |||||
| 'jinja2.ext.do', | 'jinja2.ext.do', | ||||
| 'jinja2.ext.loopcontrols', | 'jinja2.ext.loopcontrols', | ||||
| 'jinja2.ext.with_']) | 'jinja2.ext.with_']) | ||||
| @@ -151,6 +151,25 @@ def create_test_site(): | |||||
| def delete_test_site(): | def delete_test_site(): | ||||
| TEST_SITE.delete() | 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) | @with_setup(create_test_site, delete_test_site) | ||||
| def test_can_include_templates_with_processing(): | def test_can_include_templates_with_processing(): | ||||
| text = """ | text = """ | ||||
| @@ -172,25 +191,10 @@ Hyde & Jinja. | |||||
| {% include "inc.md" %} | {% 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(): | def test_includetext(): | ||||
| text = """ | text = """ | ||||
| === | === | ||||
| @@ -200,24 +204,12 @@ is_processable: False | |||||
| This is a heading | This is a heading | ||||
| ================= | ================= | ||||
| An "&". | |||||
| Hyde & Jinja. | |||||
| """ | """ | ||||
| text2 = """ | 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) | |||||