view core/markup.py @ 848:32ebe22f0cad

For issue #79 update to Markdown 2.5.1. This commit follows new Markdown conventions for extensions.
author Brian Neal <bgneal@gmail.com>
date Tue, 28 Oct 2014 19:33:14 -0500
parents 7429c98c8ece
children ff645a692791
line wrap: on
line source
"""
Markup related utitlities useful for the entire project.

"""
import markdown as _markdown
from django.utils.encoding import force_unicode

from smiley import SmilifyMarkdown
from core.mdexts.urlize import UrlizeExtension
from core.mdexts.deleted import DelExtension

class Markdown(object):
    """
    This is a thin wrapper around the Markdown class.

    """
    def __init__(self, safe_mode='escape'):
        self.md = _markdown.Markdown(safe_mode=safe_mode,
                                     extensions=[
                                         UrlizeExtension(),
                                         'markdown.extensions.nl2br',
                                         DelExtension(),
                                     ])

    def convert(self, s):
        return self.md.convert(force_unicode(s))


def markdown(s):
    """
    A convenience function for one-off markdown jobs.
    """
    md = Markdown()
    return md.convert(s)


class SiteMarkup(object):
    """
    This class provides site markup by combining markdown and
    our own smiley markup.

    The relative_urls parameter controls whether the smileys are generated with
    relative or absolute URLs.

    """
    def __init__(self, relative_urls=True):
        self.md = Markdown()
        self.smiley = SmilifyMarkdown(relative_urls=relative_urls)

    def convert(self, s):
        return self.md.convert(self.smiley.convert(s))


def site_markup(s, relative_urls=True):
    """
    Convenience function for one-off site markup jobs.
    """
    sm = SiteMarkup(relative_urls=relative_urls)
    return sm.convert(s)