1""" 2 python-creole 3 ~~~~~~~~~~~~~ 4 5 :sourcecode: 6 https://github.com/jedie/python-creole 7 8 :PyPi: 9 https://pypi.org/project/python-creole/ 10 11 :copyleft: 2008-2020 by python-creole team, see AUTHORS for more details. 12 :license: GNU GPL v3 or above, see LICENSE for more details. 13""" 14 15 16import warnings 17 18from creole.emitter.creol2html_emitter import HtmlEmitter 19from creole.emitter.html2creole_emitter import CreoleEmitter 20from creole.emitter.html2rest_emitter import ReStructuredTextEmitter 21from creole.emitter.html2textile_emitter import TextileEmitter 22from creole.parser.creol2html_parser import CreoleParser 23from creole.parser.html_parser import HtmlParser 24 25 26__version__ = "1.4.9" 27__api__ = "1.0" # Creole 1.0 spec - http://wikicreole.org/ 28 29VERSION_STRING = __version__ # remove in future 30API_STRING = __api__ # remove in future 31 32 33def creole2html(markup_string, debug=False, 34 parser_kwargs=None, emitter_kwargs=None, 35 block_rules=None, blog_line_breaks=True, 36 macros=None, verbose=None, stderr=None, 37 strict=False, 38 ): 39 """ 40 convert creole markup into html code 41 42 >>> creole2html('This is **creole //markup//**!') 43 '<p>This is <strong>creole <i>markup</i></strong>!</p>' 44 45 Info: parser_kwargs and emitter_kwargs are deprecated 46 """ 47 assert isinstance(markup_string, str), "given markup_string must be unicode!" 48 49 parser_kwargs2 = { 50 "block_rules": block_rules, 51 "blog_line_breaks": blog_line_breaks, 52 "debug": debug, 53 } 54 if parser_kwargs is not None: 55 warnings.warn( 56 "parser_kwargs argument in creole2html would be removed in the future!", 57 PendingDeprecationWarning) 58 parser_kwargs2.update(parser_kwargs) 59 60 # Create document tree from creole markup 61 document = CreoleParser(markup_string, **parser_kwargs2).parse() 62 if debug: 63 document.debug() 64 65 emitter_kwargs2 = { 66 "macros": macros, 67 "verbose": verbose, 68 "stderr": stderr, 69 "strict": strict, 70 } 71 if emitter_kwargs is not None: 72 warnings.warn( 73 "emitter_kwargs argument in creole2html would be removed in the future!", 74 PendingDeprecationWarning) 75 emitter_kwargs2.update(emitter_kwargs) 76 77 # Build html code from document tree 78 return HtmlEmitter(document, **emitter_kwargs2).emit() 79 80 81def parse_html(html_string, debug=False): 82 """ create the document tree from html code """ 83 assert isinstance(html_string, str), "given html_string must be unicode!" 84 85 h2c = HtmlParser(debug=debug) 86 document_tree = h2c.feed(html_string) 87 if debug: 88 h2c.debug() 89 return document_tree 90 91 92def html2creole( 93 html_string, 94 debug=False, 95 parser_kwargs=None, 96 emitter_kwargs=None, 97 unknown_emit=None, 98 strict=False, 99): 100 """ 101 convert html code into creole markup 102 103 >>> html2creole('<p>This is <strong>creole <i>markup</i></strong>!</p>') 104 'This is **creole //markup//**!' 105 """ 106 if parser_kwargs is not None: 107 warnings.warn( 108 "parser_kwargs argument in html2creole would be removed in the future!", 109 PendingDeprecationWarning) 110 111 document_tree = parse_html(html_string, debug=debug) 112 113 emitter_kwargs2 = { 114 "unknown_emit": unknown_emit, 115 "strict": strict, 116 } 117 if emitter_kwargs is not None: 118 warnings.warn( 119 "emitter_kwargs argument in html2creole would be removed in the future!", 120 PendingDeprecationWarning) 121 emitter_kwargs2.update(emitter_kwargs) 122 123 # create creole markup from the document tree 124 emitter = CreoleEmitter(document_tree, debug=debug, **emitter_kwargs2) 125 return emitter.emit() 126 127 128def html2textile(html_string, debug=False, 129 parser_kwargs=None, emitter_kwargs=None, 130 unknown_emit=None 131 ): 132 """ 133 convert html code into textile markup 134 135 >>> html2textile('<p>This is <strong>textile <i>markup</i></strong>!</p>') 136 'This is *textile __markup__*!' 137 """ 138 if parser_kwargs is not None: 139 warnings.warn( 140 "parser_kwargs argument in html2textile would be removed in the future!", 141 PendingDeprecationWarning) 142 143 document_tree = parse_html(html_string, debug=debug) 144 145 emitter_kwargs2 = { 146 "unknown_emit": unknown_emit, 147 } 148 if emitter_kwargs is not None: 149 warnings.warn( 150 "emitter_kwargs argument in html2textile would be removed in the future!", 151 PendingDeprecationWarning) 152 emitter_kwargs2.update(emitter_kwargs) 153 154 # create textile markup from the document tree 155 emitter = TextileEmitter(document_tree, debug=debug, **emitter_kwargs2) 156 return emitter.emit() 157 158 159def html2rest(html_string, debug=False, 160 parser_kwargs=None, emitter_kwargs=None, 161 unknown_emit=None 162 ): 163 """ 164 convert html code into ReStructuredText markup 165 166 >>> html2rest('<p>This is <strong>ReStructuredText</strong> <em>markup</em>!</p>') 167 'This is **ReStructuredText** *markup*!' 168 """ 169 if parser_kwargs is not None: 170 warnings.warn("parser_kwargs argument in html2rest would be removed in the future!", PendingDeprecationWarning) 171 172 document_tree = parse_html(html_string, debug=debug) 173 174 emitter_kwargs2 = { 175 "unknown_emit": unknown_emit, 176 } 177 if emitter_kwargs is not None: 178 warnings.warn( 179 "emitter_kwargs argument in html2rest would be removed in the future!", 180 PendingDeprecationWarning) 181 emitter_kwargs2.update(emitter_kwargs) 182 183 # create ReStructuredText markup from the document tree 184 emitter = ReStructuredTextEmitter(document_tree, debug=debug, **emitter_kwargs2) 185 return emitter.emit() 186