PageRenderTime 27ms CodeModel.GetById 37ms RepoModel.GetById 1ms app.codeStats 0ms

/lib/creole/__init__.py

https://gitlab.com/ThyberZee/cleandrathe
Python | 186 lines | 152 code | 13 blank | 21 comment | 2 complexity | ed5189a265c3f04c30322cd9a2d5c395 MD5 | raw file
  1. # coding: utf-8
  2. """
  3. python-creole
  4. ~~~~~~~~~~~~~
  5. :homepage:
  6. http://code.google.com/p/python-creole/
  7. :sourcecode:
  8. http://github.com/jedie/python-creole
  9. :PyPi:
  10. http://pypi.python.org/pypi/python-creole/
  11. :copyleft: 2008-2013 by python-creole team, see AUTHORS for more details.
  12. :license: GNU GPL v3 or above, see LICENSE for more details.
  13. """
  14. from __future__ import division, absolute_import, print_function, unicode_literals
  15. __version__ = (1, 1, 1)
  16. __api__ = (1, 0) # Creole 1.0 spec - http://wikicreole.org/
  17. import os
  18. import sys
  19. import warnings
  20. from creole.creole2html.emitter import HtmlEmitter
  21. from creole.creole2html.parser import BlockRules, CreoleParser
  22. from creole.html2creole.emitter import CreoleEmitter
  23. from creole.html2rest.emitter import ReStructuredTextEmitter
  24. from creole.html2textile.emitter import TextileEmitter
  25. from creole.html_parser.parser import HtmlParser
  26. from creole.py3compat import TEXT_TYPE
  27. # TODO: Add git date to __version__
  28. VERSION_STRING = '.'.join(str(part) for part in __version__)
  29. API_STRING = '.'.join(str(integer) for integer in __api__)
  30. def creole2html(markup_string, debug=False,
  31. parser_kwargs={}, emitter_kwargs={},
  32. block_rules=None, blog_line_breaks=True,
  33. macros=None, verbose=None, stderr=None,
  34. ):
  35. """
  36. convert creole markup into html code
  37. >>> creole2html('This is **creole //markup//**!')
  38. '<p>This is <strong>creole <i>markup</i></strong>!</p>'
  39. Info: parser_kwargs and emitter_kwargs are deprecated
  40. """
  41. assert isinstance(markup_string, TEXT_TYPE), "given markup_string must be unicode!"
  42. parser_kwargs2 = {
  43. "block_rules": block_rules,
  44. "blog_line_breaks": blog_line_breaks,
  45. }
  46. if parser_kwargs:
  47. warnings.warn("parser_kwargs argument in creole2html would be removed in the future!", PendingDeprecationWarning)
  48. parser_kwargs2.update(parser_kwargs)
  49. # Create document tree from creole markup
  50. document = CreoleParser(markup_string, **parser_kwargs2).parse()
  51. if debug:
  52. document.debug()
  53. emitter_kwargs2 = {
  54. "macros": macros,
  55. "verbose": verbose,
  56. "stderr": stderr,
  57. }
  58. if emitter_kwargs:
  59. warnings.warn("emitter_kwargs argument in creole2html would be removed in the future!", PendingDeprecationWarning)
  60. emitter_kwargs2.update(emitter_kwargs)
  61. # Build html code from document tree
  62. return HtmlEmitter(document, **emitter_kwargs2).emit()
  63. def parse_html(html_string, debug=False):
  64. """ create the document tree from html code """
  65. assert isinstance(html_string, TEXT_TYPE), "given html_string must be unicode!"
  66. h2c = HtmlParser(debug=debug)
  67. document_tree = h2c.feed(html_string)
  68. if debug:
  69. h2c.debug()
  70. return document_tree
  71. def html2creole(html_string, debug=False,
  72. parser_kwargs={}, emitter_kwargs={},
  73. unknown_emit=None
  74. ):
  75. """
  76. convert html code into creole markup
  77. >>> html2creole('<p>This is <strong>creole <i>markup</i></strong>!</p>')
  78. 'This is **creole //markup//**!'
  79. """
  80. if parser_kwargs:
  81. warnings.warn("parser_kwargs argument in html2creole would be removed in the future!", PendingDeprecationWarning)
  82. document_tree = parse_html(html_string, debug=debug)
  83. emitter_kwargs2 = {
  84. "unknown_emit": unknown_emit,
  85. }
  86. if emitter_kwargs:
  87. warnings.warn("emitter_kwargs argument in html2creole would be removed in the future!", PendingDeprecationWarning)
  88. emitter_kwargs2.update(emitter_kwargs)
  89. # create creole markup from the document tree
  90. emitter = CreoleEmitter(document_tree, debug=debug, **emitter_kwargs2)
  91. return emitter.emit()
  92. def html2textile(html_string, debug=False,
  93. parser_kwargs={}, emitter_kwargs={},
  94. unknown_emit=None
  95. ):
  96. """
  97. convert html code into textile markup
  98. >>> html2textile('<p>This is <strong>textile <i>markup</i></strong>!</p>')
  99. 'This is *textile __markup__*!'
  100. """
  101. if parser_kwargs:
  102. warnings.warn("parser_kwargs argument in html2textile would be removed in the future!", PendingDeprecationWarning)
  103. document_tree = parse_html(html_string, debug=debug)
  104. emitter_kwargs2 = {
  105. "unknown_emit": unknown_emit,
  106. }
  107. if emitter_kwargs:
  108. warnings.warn("emitter_kwargs argument in html2textile would be removed in the future!", PendingDeprecationWarning)
  109. emitter_kwargs2.update(emitter_kwargs)
  110. # create textile markup from the document tree
  111. emitter = TextileEmitter(document_tree, debug=debug, **emitter_kwargs2)
  112. return emitter.emit()
  113. def html2rest(html_string, debug=False,
  114. parser_kwargs={}, emitter_kwargs={},
  115. unknown_emit=None
  116. ):
  117. """
  118. convert html code into ReStructuredText markup
  119. >>> html2rest('<p>This is <strong>ReStructuredText</strong> <em>markup</em>!</p>')
  120. 'This is **ReStructuredText** *markup*!'
  121. """
  122. if parser_kwargs:
  123. warnings.warn("parser_kwargs argument in html2rest would be removed in the future!", PendingDeprecationWarning)
  124. document_tree = parse_html(html_string, debug=debug)
  125. emitter_kwargs2 = {
  126. "unknown_emit": unknown_emit,
  127. }
  128. if emitter_kwargs:
  129. warnings.warn("emitter_kwargs argument in html2rest would be removed in the future!", PendingDeprecationWarning)
  130. emitter_kwargs2.update(emitter_kwargs)
  131. # create ReStructuredText markup from the document tree
  132. emitter = ReStructuredTextEmitter(document_tree, debug=debug, **emitter_kwargs2)
  133. return emitter.emit()
  134. if __name__ == '__main__':
  135. print("runing local doctest...")
  136. import doctest
  137. print(doctest.testmod(
  138. # verbose=True
  139. ))