Exemplo n.º 1
0
    def setUp(self):
        from marko import Markdown, HTMLRenderer
        from marko.ext.pangu import PanguRendererMixin

        class MyRenderer(PanguRendererMixin, HTMLRenderer):
            pass

        self.markdown = Markdown(renderer=MyRenderer)
Exemplo n.º 2
0
    def setUp(self):
        from marko import HTMLRenderer, Markdown
        from marko.ext.toc import TocRendererMixin

        class MyRenderer(TocRendererMixin, HTMLRenderer):
            pass

        self.markdown = Markdown(renderer=MyRenderer)
Exemplo n.º 3
0
def compile_markdown(markdown_source: str) -> MarkdownRecipe:
    """
    Compile a recipe grid flavoured markdown document, producing a
    :py:class:`MarkdownRecipe` which may be rescaled and rendered into the
    final HTML form as required.

    Internally calls :py:func:`recipe_grid.compiler.compile` and so may throw
    the same kinds of exceptions when syntax errors in the recipe sources are
    encountered.
    """
    return cast(MarkdownRecipe, Markdown(extensions=[RecipeGrid])(markdown_source))
Exemplo n.º 4
0
    def setUp(self):
        from marko import Parser, HTMLRenderer, Markdown
        from marko.ext.footnote import FootnoteParserMixin, FootnoteRendererMixin

        class MyParser(FootnoteParserMixin, Parser):
            pass

        class MyRenderer(FootnoteRendererMixin, HTMLRenderer):
            pass

        self.markdown = Markdown(MyParser, MyRenderer)
Exemplo n.º 5
0
def test_gemini_renderer_links() -> None:
    """
    Test rendering links.
    """
    gemini = Markdown(renderer=GeminiRenderer)
    assert (gemini.convert(
        """
This is a paragraph with [a link](https://example.com/). It is a good paragraph.

This one [also has a link](https://example.net/). It also has some *emphasis* and **bold**.

And this one is a special paragraph because it has not just [one](https://example.com/one),
but [two](https://example.com/two) links. That is quite a lot.

This other paragraph also has [a link][ref], using a reference. It's very fancy.

[ref]: https://example.org/foo "This is foo"

This one has an auto link <https://example.com/autolink>.

That is it.
            """, ) == """
This is a paragraph with a link. It is a good paragraph.

=> https://example.com/ a link

This one also has a link. It also has some emphasis and bold.

=> https://example.net/ also has a link

And this one is a special paragraph because it has not just one,
but two links. That is quite a lot.

=> https://example.com/one one
=> https://example.com/two two

This other paragraph also has a link, using a reference. It's very fancy.

=> https://example.org/foo This is foo


This one has an auto link https://example.com/autolink.

=> https://example.com/autolink https://example.com/autolink

That is it.

""")
Exemplo n.º 6
0
def test_gemini_renderer_link_ref_def() -> None:
    """
    Test rendering a link definition reference.
    """
    gemini = Markdown(renderer=GeminiRenderer)

    assert (gemini.convert(
        """
Hi, here's my [thing that I just casually mention][tt] sometimes.

[tt]: gemini://my.boring/url "I like this link"
            """, ) == """
Hi, here's my thing that I just casually mention sometimes.

=> gemini://my.boring/url I like this link


""")
Exemplo n.º 7
0
def test_gemini_renderer() -> None:
    """
    Test ``GeminiRenderer``.
    """
    double_space = "  "

    gemini = Markdown(renderer=GeminiRenderer)

    assert (gemini.convert(
        f"""
# Header 1

## Header 2

### Header 3

#### Header 4

- Mercury
- Gemini
  - Apollo

> This is{double_space}
> A multiline{double_space}
> blockquote{double_space}

*This* is a **paragraph**. With `code`.

This is an [inline link](https://example.com/). This is [another](https://example.org/).

```
This is some code.
```

End.
""", ) == f"""
# Header 1

## Header 2

### Header 3

### Header 4

* Mercury
* Gemini
* Apollo

> This is
> A multiline
> blockquote{double_space}

This is a paragraph. With code.

This is an inline link. This is another.

=> https://example.com/ inline link
=> https://example.org/ another

```
This is some code.
```

End.
""")
Exemplo n.º 8
0
            align = ' align="{}"'.format(element.align)
        return "<{tag}{align}>{children}</{tag}>\n".format(
            tag=tag, children=self.render_children(element), align=align
        )

    def render_url(self, element):
        return self.render_link(element)


class GFM(object):
    elements = [
        elements.Paragraph,
        elements.ListItem,
        elements.Strikethrough,
        elements.Url,
        elements.Table,
        elements.TableRow,
        elements.TableCell,
    ]
    renderer_mixins = [GFMRendererMixin]


GFMExtension = helpers._Deprecated(GFM)

gfm = Markdown()
gfm.use(GFM)


def make_extension():
    return GFM()
Exemplo n.º 9
0
"""
Markdown class
"""
from marko import Markdown

from .extensions import FlogParser, FlogRenderer

markdown = Markdown(FlogParser, FlogRenderer)
Exemplo n.º 10
0
    def render_plain_text(self, element):
        if isinstance(element.children, str):
            return aguideEscape(element.children)
        return self.render_children(element)

    def render_raw_text(self, element):
        return aguideEscape(element.children)


class AmigaGuide:
    elements = [HeadingTOC, ExternalLinkRef, Document, TableOfContents]
    renderer_mixins = [AmigaGuideMixin]


markdown = Markdown(extensions=[AmigaGuide])

if len(sys.argv) != 2:
    print("usage: %s <foo.md>" % sys.argv[0])
    sys.exit(1)

infn = sys.argv[1]

with open(infn, "r") as mdf:
    md = mdf.read()

aguide = markdown.convert(md)

#with open (OUTPUT_FN, "w", encoding="latin1") as outf:
#    outf.write(aguide)
Exemplo n.º 11
0
    def render_paragraph(self, element):
        children = self.render_children(element)
        return """<TextBlock Text="{}"/>\n""".format(children)

    def render_raw_text(self, element):
        return self.xml_escape(element.children)

    def render_line_break(self, element):
        return "&#10;"

    def render_literal(self, element):
        return self.xml_escape(element.children)

    @staticmethod
    def xml_escape(str):
        return _xml_escape(str, entities={"'": "&apos;", "\"": "&quot;"})


if __name__ == "__main__":
    __location__ = os.path.realpath(
        os.path.join(os.getcwd(), os.path.dirname(__file__)))

    # Load help markdown
    with open(os.path.join(__location__, "help.md"), "r",
              encoding="utf8") as f:
        text = f.read()

    markdown = Markdown(renderer=XamlRenderer)
    print(markdown(text))
Exemplo n.º 12
0
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from __future__ import print_function
import re
import sys
import codecs
import json
from marko import Markdown
from marko.ext.gfm import GFMarkdown
from traceback import print_tb
from argparse import ArgumentParser
from .normalize import normalize_html

SPECS = {
    'commonmark': ('tests/spec/commonmark.json', Markdown()),
    'gfm': ('tests/spec/gfm.json', GFMarkdown())
}


def run_tests(test_entries,
              markdown,
              start=None,
              end=None,
              quiet=False,
              verbose=False):
    start = start or 0
    end = end or sys.maxsize
    results = [
        run_test(test_entry, markdown, quiet) for test_entry in test_entries
        if test_entry['example'] >= start and test_entry['example'] <= end
    ]