from django import template
from django.conf import settings
from django.utils.encoding import smart_bytes, force_text
from django.utils.safestring import mark_safe
from generic import docutils_xhtml11

register = template.Library()

def restructuredtext(value):
    try:
        from docutils.core import publish_parts
    except ImportError:
        if settings.DEBUG:
            raise template.TemplateSyntaxError("Error in {% restructuredtext %} filter: The Python docutils library isn't installed.")
        return force_text(value)
    else:
        docutils_settings = getattr(settings, "RESTRUCTUREDTEXT_FILTER_SETTINGS", {})
        parts = publish_parts(source=smart_bytes(value), writer=docutils_xhtml11.Writer(), settings_overrides=docutils_settings)
        return mark_safe(force_text(parts["fragment"]))
restructuredtext.is_safe = True

register.filter(restructuredtext)
