PageRenderTime 49ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/python_creole/__init__.py

https://bitbucket.org/andersem/python-creole
Python | 186 lines | 152 code | 13 blank | 21 comment | 2 complexity | 955069781b415578b309da27335a4b3b 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-2012 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, 0, 6)
  16. __api__ = (1, 0) # Creole 1.0 spec - http://wikicreole.org/
  17. import os
  18. import sys
  19. import warnings
  20. from python_creole.creole2html.emitter import HtmlEmitter
  21. from python_creole.creole2html.parser import BlockRules, CreoleParser
  22. from python_creole.html2creole.emitter import CreoleEmitter
  23. from python_creole.html2rest.emitter import ReStructuredTextEmitter
  24. from python_creole.html2textile.emitter import TextileEmitter
  25. from python_creole.html_parser.parser import HtmlParser
  26. from python_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. ))