예제 #1
0
class MarkdownUtils(object):
    encoder = mistune.Markdown(renderer=HTMLRenderer(escape=False))

    @classmethod
    def extract_metadata(cls, value):
        regex = r"^<!--\n(.*?)-->"
        # extract the metadata for processing and convert it to yaml
        match = re.match(regex, value, re.S)
        if not match:
            return {}, value
        raw_metadata = match.group(1)
        metadata = Yaml.load(raw_metadata)
        # now remove the metadata from the original value
        cregex = re.compile(regex, re.S)
        res = cregex.sub('', value)
        return metadata, res

    @classmethod
    def to_html(cls, value):
        if value is None:
            return
        metadata, value = cls.extract_metadata(value)
        return cls.encoder(value), metadata
예제 #2
0
 class TestPlugin(BaseTestCase):
     md = Markdown(renderer=HTMLRenderer(escape=False), plugins=[_plugin])
예제 #3
0
import os
import json
from mistune import Markdown, AstRenderer, HTMLRenderer
from mistune.plugins import PluginDirective
from tests import fixtures
from tests.fixtures import ROOT
from unittest import TestCase

md = Markdown(renderer=HTMLRenderer(escape=False))
md.use(PluginDirective())


class TestPluginDirective(TestCase):
    def test_include(self):
        html = md.read(os.path.join(ROOT, 'include/text.md'))
        self.assertIn('Could not include self', html)
        self.assertIn('Could not find file', html)
        self.assertIn('<div>include html</div>', html)
        self.assertIn('<blockquote>', html)
        self.assertIn('# Table of Contents', html)

    def test_warn_admonition(self):
        s = '.. warn:: Warnning\n\n   message'
        html = md(s)
        self.assertIn('class="admonition warn"', html)
        self.assertIn('<h1>Warnning</h1>', html)

    def test_ast_directive(self):
        data = fixtures.load_json('directive.json')
        md = Markdown(renderer=AstRenderer())
        md.use(PluginDirective())