Blame doc/rest2latex.py

Packit Service b74dd5
#!/usr/bin/python
Packit Service b74dd5
Packit Service b74dd5
# Testing:
Packit Service b74dd5
#    python rest2latex.py objectify.txt > latex/objectify.tex
Packit Service b74dd5
Packit Service b74dd5
"""
Packit Service b74dd5
A minimal front end to the Docutils Publisher, producing LaTeX with
Packit Service b74dd5
some syntax highlighting.
Packit Service b74dd5
"""
Packit Service b74dd5
Packit Service b74dd5
# Set to True if you want inline CSS styles instead of classes
Packit Service b74dd5
INLINESTYLES = False
Packit Service b74dd5
Packit Service b74dd5
Packit Service b74dd5
try:
Packit Service b74dd5
    import locale
Packit Service b74dd5
    locale.setlocale(locale.LC_ALL, '')
Packit Service b74dd5
except:
Packit Service b74dd5
    pass
Packit Service b74dd5
Packit Service b74dd5
# set up Pygments
Packit Service b74dd5
Packit Service b74dd5
from pygments.formatters import LatexFormatter
Packit Service b74dd5
Packit Service b74dd5
# The default formatter
Packit Service b74dd5
DEFAULT = LatexFormatter()
Packit Service b74dd5
Packit Service b74dd5
# Add name -> formatter pairs for every variant you want to use
Packit Service b74dd5
VARIANTS = {
Packit Service b74dd5
    # 'linenos': HtmlFormatter(noclasses=INLINESTYLES, linenos=True),
Packit Service b74dd5
}
Packit Service b74dd5
Packit Service b74dd5
Packit Service b74dd5
from docutils import nodes
Packit Service b74dd5
from docutils.parsers.rst import directives
Packit Service b74dd5
Packit Service b74dd5
from pygments import highlight
Packit Service b74dd5
from pygments.lexers import get_lexer_by_name, TextLexer
Packit Service b74dd5
Packit Service b74dd5
def pygments_directive(name, arguments, options, content, lineno,
Packit Service b74dd5
                       content_offset, block_text, state, state_machine):
Packit Service b74dd5
    try:
Packit Service b74dd5
        lexer = get_lexer_by_name(arguments[0])
Packit Service b74dd5
    except ValueError, e:
Packit Service b74dd5
        # no lexer found - use the text one instead of an exception
Packit Service b74dd5
        lexer = TextLexer()
Packit Service b74dd5
    # take an arbitrary option if more than one is given
Packit Service b74dd5
    formatter = options and VARIANTS[options.keys()[0]] or DEFAULT
Packit Service b74dd5
    parsed = highlight(u'\n'.join(content), lexer, formatter)
Packit Service b74dd5
    return [nodes.raw('', parsed, format='latex')]
Packit Service b74dd5
Packit Service b74dd5
pygments_directive.arguments = (1, 0, 1)
Packit Service b74dd5
pygments_directive.content = 1
Packit Service b74dd5
pygments_directive.options = dict([(key, directives.flag) for key in VARIANTS])
Packit Service b74dd5
Packit Service b74dd5
directives.register_directive('sourcecode', pygments_directive)
Packit Service b74dd5
Packit Service b74dd5
Packit Service b74dd5
# run the generation
Packit Service b74dd5
Packit Service b74dd5
from docutils.core import publish_cmdline, default_description
Packit Service b74dd5
Packit Service b74dd5
description = ('Generates LaTeX documents from standalone reStructuredText '
Packit Service b74dd5
               'sources.  ' + default_description)
Packit Service b74dd5
Packit Service b74dd5
publish_cmdline(writer_name='latex2e', description=description)