summaryrefslogtreecommitdiff
path: root/creole/__init__.py
blob: 5d394f7b9a6ea0b1f21d86db1d0fee309513dfd7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
"""
    python-creole
    ~~~~~~~~~~~~~

    :sourcecode:
      https://github.com/jedie/python-creole

    :PyPi:
      https://pypi.org/project/python-creole/

    :copyleft: 2008-2022 by python-creole team, see AUTHORS for more details.
    :license: GNU GPL v3 or above, see LICENSE for more details.
"""


import warnings

from creole.emitter.creol2html_emitter import HtmlEmitter
from creole.emitter.html2creole_emitter import CreoleEmitter
from creole.emitter.html2markdown_emitter import MarkdownEmitter
from creole.emitter.html2rest_emitter import ReStructuredTextEmitter
from creole.emitter.html2textile_emitter import TextileEmitter
from creole.parser.creol2html_parser import CreoleParser
from creole.parser.html_parser import HtmlParser


__version__ = "1.5.0.rc3"
__api__ = "1.0"  # Creole 1.0 spec - http://wikicreole.org/

VERSION_STRING = __version__  # remove in future
API_STRING = __api__  # remove in future


def creole2html(markup_string, debug=False,
                block_rules=None, blog_line_breaks=True,
                macros=None, verbose=None, stderr=None,
                strict=False,
                ):
    """
    convert creole markup into html code

    >>> creole2html('This is **creole //markup//**!')
    '<p>This is <strong>creole <i>markup</i></strong>!</p>'

    Info: parser_kwargs and emitter_kwargs are deprecated
    """
    assert isinstance(markup_string, str), "given markup_string must be unicode!"

    # Create document tree from creole markup
    document = CreoleParser(
        markup_string,
        block_rules=block_rules,
        blog_line_breaks=blog_line_breaks,
        debug=debug
    ).parse()
    if debug:
        document.debug()

    # Build html code from document tree
    return HtmlEmitter(
        document,
        macros=macros,
        verbose=verbose,
        stderr=stderr,
        strict=strict
    ).emit()


def parse_html(html_string, debug=False):
    """ create the document tree from html code """
    assert isinstance(html_string, str), "given html_string must be unicode!"

    h2c = HtmlParser(debug=debug)
    document_tree = h2c.feed(html_string)
    if debug:
        h2c.debug()
    return document_tree


def html2creole(
    html_string,
    debug=False,
    unknown_emit=None,
    strict=False,
):
    """
    convert html code into creole markup

    >>> html2creole('<p>This is <strong>creole <i>markup</i></strong>!</p>')
    'This is **creole //markup//**!'
    """
    document_tree = parse_html(html_string, debug=debug)

    # create creole markup from the document tree
    emitter = CreoleEmitter(document_tree, debug=debug, unknown_emit=unknown_emit, strict=strict)
    return emitter.emit()


def html2textile(html_string, debug=False,
                 unknown_emit=None
                 ):
    """
    convert html code into textile markup

    >>> html2textile('<p>This is <strong>textile <i>markup</i></strong>!</p>')
    'This is *textile __markup__*!'
    """
    document_tree = parse_html(html_string, debug=debug)

    # create textile markup from the document tree
    emitter = TextileEmitter(document_tree, debug=debug, unknown_emit=unknown_emit)
    return emitter.emit()


def html2markdown(html_string, debug=False, unknown_emit=None):
    """
    convert html code into markdown markup

    >>> html2markdown('<p>This is <strong>markdown <i>markup</i></strong>!</p>')
    'This is **markdown _markup_**!'
    """
    document_tree = parse_html(html_string, debug=debug)

    # create markdown markup from the document tree
    emitter = MarkdownEmitter(document_tree, debug=debug, unknown_emit=unknown_emit)
    return emitter.emit()


def html2rest(html_string, debug=False,
              unknown_emit=None
              ):
    """
    convert html code into ReStructuredText markup

    >>> html2rest('<p>This is <strong>ReStructuredText</strong> <em>markup</em>!</p>')
    'This is **ReStructuredText** *markup*!'
    """
    document_tree = parse_html(html_string, debug=debug)

    # create ReStructuredText markup from the document tree
    emitter = ReStructuredTextEmitter(document_tree, debug=debug, unknown_emit=unknown_emit)
    return emitter.emit()