StrictDoc Documentation
strictdoc/export/markdown/markdown_to_html_fragment_writer.py
Source file coverage
Path:
strictdoc/export/markdown/markdown_to_html_fragment_writer.py
Lines:
42
Non-empty lines:
35
Non-empty lines covered with requirements:
35 / 35 (100.0%)
Functions:
4
Functions covered by requirements:
4 / 4 (100.0%)
1
"""
2
@relation(SDOC-SRS-24, scope=file)
3
"""
4
 
5
from html import escape
6
from typing import Optional, Tuple
7
 
8
from markdown_it import MarkdownIt
9
from markupsafe import Markup
10
 
11
 
12
class MarkdownToHtmlFragmentWriter:
13
    # Use the default preset to support common Markdown extensions such as
14
    # pipe tables when rendering HTML fragments.
15
    markdown_parser = MarkdownIt("default")
16
 
17
    @staticmethod
18
    def write(markdown_fragment: str) -> Markup:
19
        assert isinstance(markdown_fragment, str), markdown_fragment
20
        return Markup(
21
            MarkdownToHtmlFragmentWriter.markdown_parser.render(
22
                markdown_fragment
23
            )
24
        )
25
 
26
    @staticmethod
27
    def write_with_validation(
28
        markdown_fragment: str,
29
    ) -> Tuple[Optional[str], Optional[str]]:
30
        assert isinstance(markdown_fragment, str), markdown_fragment
31
        return (
32
            MarkdownToHtmlFragmentWriter.markdown_parser.render(
33
                markdown_fragment
34
            ),
35
            None,
36
        )
37
 
38
    @staticmethod
39
    def write_anchor_link(title: str, href: str) -> str:
40
        return (
41
            f'<a href="{escape(href, quote=True)}">🔗&nbsp;{escape(title)}</a>'
42
        )