view piecrust/formatting/markdownformatter.py @ 190:430ee5b80962

serve: Make the server find assets generated by external tools. When a processor is bypassing PieCrust's pipeline, we don't know what output files they have produced, so if we don't find an asset in the record for a given path, we quickly check the output folder for any matching file there. If there is, just return it.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 11 Jan 2015 22:58:38 -0800
parents fdb08d986384
children cd049786c008
line wrap: on
line source

from markdown import markdown
from piecrust.formatting.base import Formatter


class MarkdownFormatter(Formatter):
    FORMAT_NAMES = ['markdown', 'mdown', 'md']
    OUTPUT_FORMAT = 'html'

    def __init__(self):
        super(MarkdownFormatter, self).__init__()
        self._extensions = None

    def render(self, format_name, txt):
        assert format_name in self.FORMAT_NAMES
        self._ensureInitialized()
        return markdown(txt, extensions=self._extensions)

    def _ensureInitialized(self):
        if self._extensions is not None:
            return

        config = self.app.config.get('markdown')
        if config is None:
            config = {}
        elif not isinstance(config, dict):
            raise Exception("The `markdown` configuration setting must be "
                            "a dictionary.")

        extensions = config.get('extensions')
        if extensions is None:
            extensions = []
        # Compatibility with PieCrust 1.x
        if config.get('use_markdown_extra'):
            extensions.append('extra')
        self._extensions = extensions