Created
November 16, 2015 14:36
-
-
Save wichert/ffb919358111090c9560 to your computer and use it in GitHub Desktop.
Markdown rendering in Chameleon
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This module allows you to use markdown in Chameleon templates from pyramid. | |
# | |
# Markdown rendering is only down for text that is translatable, and has its | |
# message context set to ``markdown``. This is a complete abuse of the translation | |
# system, but currently provides the simplest way to get markdown running in | |
# Chameleon. | |
import CommonMark | |
from chameleon.utils import Markup | |
from translationstring import ChameleonTranslate | |
from pyramid_chameleon.localization import translator | |
from pyramid_chameleon.interfaces import IChameleonTranslate | |
def render_markdown(source): | |
parser = CommonMark.DocParser() | |
renderer = CommonMark.HTMLRenderer() | |
ast = parser.parse(source) | |
return Markup(renderer.render(ast)) | |
def MarkdownTranslator(translator): | |
org_translate = ChameleonTranslate(translator) | |
def translate(msgid, domain=None, mapping=None, context=None, | |
target_language=None, default=None): | |
tr = org_translate(msgid, domain, mapping, context, target_language, default) | |
if context == 'markdown': | |
tr = render_markdown(tr) | |
return tr | |
return translate | |
def setup_markdown_translations(registry): | |
mdtranslate = MarkdownTranslator(translator) | |
registry.registerUtility(mdtranslate, IChameleonTranslate) | |
def includeme(config): # pragma: no cover | |
config.action(None, | |
callable=setup_markdown_translations, args=(config.registry,), | |
order=1200) # Order after pyramid_chameleon.localization |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Why not implement an expression type instead?