@@ -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) |