diff --git a/progit/doc_utils.py b/progit/doc_utils.py new file mode 100644 index 0000000..74dcfa2 --- /dev/null +++ b/progit/doc_utils.py @@ -0,0 +1,70 @@ +#-*- coding: utf-8 -*- + +""" + (c) 2014 - Copyright Red Hat Inc + + Authors: + Ralph Bean + Pierre-Yves Chibon + +""" + +import docutils +import docutils.examples +import markupsafe + + +def modify_rst(rst): + """ Downgrade some of our rst directives if docutils is too old. """ + + ## We catch Exception if we want :-p + # pylint: disable=W0703 + try: + # The rst features we need were introduced in this version + minimum = [0, 9] + version = [int(cpt) for cpt in docutils.__version__.split('.')] + + # If we're at or later than that version, no need to downgrade + if version >= minimum: + return rst + except Exception: # pragma: no cover + # If there was some error parsing or comparing versions, run the + # substitutions just to be safe. + pass + + # On Fedora this will never work as the docutils version is to recent + # Otherwise, make code-blocks into just literal blocks. + substitutions = { # pragma: no cover + '.. code-block:: javascript': '::', + } + for old, new in substitutions.items(): # pragma: no cover + rst = rst.replace(old, new) + + return rst # pragma: no cover + + +def modify_html(html): + """ Perform style substitutions where docutils doesn't do what we want. + """ + + substitutions = { + '': '', + '': '', + } + for old, new in substitutions.items(): + html = html.replace(old, new) + + return html + + +def convert_doc(rst_string): + """ Utility to load an RST file and turn it into fancy HTML. """ + + rst = modify_rst(rst_string) + + html_string = docutils.examples.html_body(rst) + + html_string = modify_html(html_string) + + html_string = markupsafe.Markup(html_string) + return html_string