Browse Source

Added include text extension

main
Lakshmi Vyasarajan 14 years ago
parent
commit
364fdeeec8
3 changed files with 54 additions and 39 deletions
  1. +6
    -6
      README.markdown
  2. +24
    -1
      hyde/ext/templates/jinja.py
  3. +24
    -32
      hyde/tests/test_jinja2template.py

+ 6
- 6
README.markdown View File

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


+ 24
- 1
hyde/ext/templates/jinja.py View File

@@ -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_'])


+ 24
- 32
hyde/tests/test_jinja2template.py View File

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

Loading…
Cancel
Save