===============================================================
django-rstify - A restructured text filter for django templates
===============================================================

django-rstify is a set of template filters to provide easy conversion from
`restructured text`_ to HTML. Besides this basic functionality this application
allows you to highlight sourcecode snippets inside your text using the `pygments`_
library.

.. hint:: Django already provides a simple `restructured text filter`_. If you
    don't need the extras in this application, I recommend to use the *core version*.

Installation
============

There are several ways to install this application:

1. Checkout the latest version from my git repository::

    git clone git://github.com/bartTC/django-rstify.git

  Then either put the directory ``rstify`` into your pythonpath or
  switch to ``django-rstify`` and do ``python setup.py install``.

2. Install this application using easy_install::

    easy_install django-rstify

Finally, put ``rstify`` into your ``INSTALLED_APPS`` setting in your django project.

How to use it in templates
==========================

To convert a restructured text from an object to HTML simply apply the ``rstify``
filter on it::

    {% load rstify_tags %}

    {{ entry.content|rstify }}

If you want to convert inline content, use the ``filter`` templatetag around::

    {% load rstify_tags %}

    {% filter rstify %}
    This is some *restructured text*.
    {% endfilter %}

How to use it in sourcecode
===========================

Applying this filter inside your code is easy::

    >>> from rstify import rstify
    >>>
    >>> print rstify('This is *restructured text*.')
    <p>This is <em>restructured text</em>.</p>

Initial Header Level
====================

By default the initial heading in your restructured text becomes a ``<h1>`` in
HTML::

    >>> header = '''
    ... ================
    ... This is a Header
    ... ================
    ... '''
    >>> print rstify(header)
    <div class="section">
    <h1><a id="this-is-a-header" name="this-is-a-header">This is a Header</a></h1>
    </div>

You can override this by setting the ``initial_header_level`` to an integer from
1 to 6::

    >>> print rstify(header, initial_header_level=3)
    <div class="section">
    <h3><a id="this-is-a-header" name="this-is-a-header">This is a Header</a></h3>
    </div>

In your template just set this as the first option of the ``rstify`` filter::

    {{ entry.content|rstify:"3" }}

Syntax Highlighting
===================

django-rstify provides syntax highlighting using the pygments_ library. To highlight
parts of your restructured text, simply put it in a ``sourcecode`` directive::

    Here is some text. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
    Integer porttitor nulla sed dui. Aenean lorem mi, tincidunt et, porttitor
    nec, condimentum venenatis, felis. Maecenas ornare blandit leo.

    .. sourcecode:: python

        def foo(bar):
            return bar*2

    Continue with text. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
    Integer porttitor nulla sed dui. Aenean lorem mi, tincidunt et, porttitor nec,
    condimentum venenatis, felis. Maecenas ornare blandit leo.

Pygments provides a bunch of highlighters (also called *lexer*), just replace
``python`` with a lexer of your choice. Here is a complete set of `available lexers`_.
Read `pygments styles`_ how to colorize the output using css.

License
=======

This application is licensed under the ``New BSD License``. See ``LICENSE`` for details.
django-rstify comes bundled with a pygments directive which is released under ``BSD License``.
See ``rstify/pygments_directive.py`` for details.

.. _`restructured text`: http://docutils.sourceforge.net/rst.html
.. _`restructured text filter`: http://docs.djangoproject.com/en/dev/ref/contrib/#markup
.. _`pygments`: http://pygments.org/
.. _`pygments styles`: http://pygments.org/docs/styles/
.. _`available lexers`: http://pygments.org/docs/lexers/
