diff options
-rw-r--r-- | CHANGES | 24 | ||||
-rw-r--r-- | external/rst-directive-old.py | 77 | ||||
-rw-r--r-- | external/rst-directive.py | 44 |
3 files changed, 115 insertions, 30 deletions
@@ -28,10 +28,10 @@ Version 1.1 * Vala * Newspeak -- Fix the LaTeX formatter's output so that output generated for one style +- Fixed the LaTeX formatter's output so that output generated for one style can be used with the style definitions of another (#384). -- Add "anchorlinenos" and "noclobber_cssfile" (#396) options to HTML +- Added "anchorlinenos" and "noclobber_cssfile" (#396) options to HTML formatter. - Support multiline strings in Lua lexer. @@ -43,27 +43,29 @@ Version 1.1 match the filename, use the analyse_text guessing engine to determine the winner (#355). -- Fix minor bugs in the JavaScript lexer (#383), the Matlab lexer (#378), +- Fixed minor bugs in the JavaScript lexer (#383), the Matlab lexer (#378), the Scala lexer (#392), the INI lexer (#391), the Clojure lexer (#387) and the AS3 lexer (#389). -- Fix three Perl heredoc lexing bugs (#379, #400, #422). +- Fixed three Perl heredoc lexing bugs (#379, #400, #422). -- Fix a bug in the image formatter which misdetected lines (#380). +- Fixed a bug in the image formatter which misdetected lines (#380). -- Fix bugs lexing extended Ruby strings and regexes. +- Fixed bugs lexing extended Ruby strings and regexes. -- Fix a bug when lexing git diffs. +- Fixed a bug when lexing git diffs. -- Fix a bug lexing the empty commit in the PHP lexer (#405). +- Fixed a bug lexing the empty commit in the PHP lexer (#405). -- Fix a bug causing Python numbers to be mishighlighted as floats (#397). +- Fixed a bug causing Python numbers to be mishighlighted as floats (#397). -- Fix a bug when backslashes are used in odd locations in Python (#395) +- Fixed a bug when backslashes are used in odd locations in Python (#395). -- Fix various bugs in Matlab and S-Plus lexers, thanks to Winston Chang (#410, +- Fixed various bugs in Matlab and S-Plus lexers, thanks to Winston Chang (#410, #411, #413, #414) and fmarc (#419). +- Added new-style reStructuredText directive for docutils 0.5+ (#428). + Version 1.0 ----------- diff --git a/external/rst-directive-old.py b/external/rst-directive-old.py new file mode 100644 index 00000000..4cd0d501 --- /dev/null +++ b/external/rst-directive-old.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- +""" + The Pygments reStructuredText directive + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + This fragment is a Docutils_ 0.4 directive that renders source code + (to HTML only, currently) via Pygments. + + To use it, adjust the options below and copy the code into a module + that you import on initialization. The code then automatically + registers a ``sourcecode`` directive that you can use instead of + normal code blocks like this:: + + .. sourcecode:: python + + My code goes here. + + If you want to have different code styles, e.g. one with line numbers + and one without, add formatters with their names in the VARIANTS dict + below. You can invoke them instead of the DEFAULT one by using a + directive option:: + + .. sourcecode:: python + :linenos: + + My code goes here. + + Look at the `directive documentation`_ to get all the gory details. + + .. _Docutils: http://docutils.sf.net/ + .. _directive documentation: + http://docutils.sourceforge.net/docs/howto/rst-directives.html + + :copyright: Copyright 2006-2009 by the Pygments team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +# Options +# ~~~~~~~ + +# Set to True if you want inline CSS styles instead of classes +INLINESTYLES = False + +from pygments.formatters import HtmlFormatter + +# The default formatter +DEFAULT = HtmlFormatter(noclasses=INLINESTYLES) + +# Add name -> formatter pairs for every variant you want to use +VARIANTS = { + # 'linenos': HtmlFormatter(noclasses=INLINESTYLES, linenos=True), +} + + +from docutils import nodes +from docutils.parsers.rst import directives + +from pygments import highlight +from pygments.lexers import get_lexer_by_name, TextLexer + +def pygments_directive(name, arguments, options, content, lineno, + content_offset, block_text, state, state_machine): + try: + lexer = get_lexer_by_name(arguments[0]) + except ValueError: + # no lexer found - use the text one instead of an exception + lexer = TextLexer() + # take an arbitrary option if more than one is given + formatter = options and VARIANTS[options.keys()[0]] or DEFAULT + parsed = highlight(u'\n'.join(content), lexer, formatter) + return [nodes.raw('', parsed, format='html')] + +pygments_directive.arguments = (1, 0, 1) +pygments_directive.content = 1 +pygments_directive.options = dict([(key, directives.flag) for key in VARIANTS]) + +directives.register_directive('sourcecode', pygments_directive) diff --git a/external/rst-directive.py b/external/rst-directive.py index 4cd0d501..998e8d61 100644 --- a/external/rst-directive.py +++ b/external/rst-directive.py @@ -3,7 +3,7 @@ The Pygments reStructuredText directive ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - This fragment is a Docutils_ 0.4 directive that renders source code + This fragment is a Docutils_ 0.5 directive that renders source code (to HTML only, currently) via Pygments. To use it, adjust the options below and copy the code into a module @@ -53,25 +53,31 @@ VARIANTS = { from docutils import nodes -from docutils.parsers.rst import directives +from docutils.parsers.rst import directives, Directive from pygments import highlight from pygments.lexers import get_lexer_by_name, TextLexer -def pygments_directive(name, arguments, options, content, lineno, - content_offset, block_text, state, state_machine): - try: - lexer = get_lexer_by_name(arguments[0]) - except ValueError: - # no lexer found - use the text one instead of an exception - lexer = TextLexer() - # take an arbitrary option if more than one is given - formatter = options and VARIANTS[options.keys()[0]] or DEFAULT - parsed = highlight(u'\n'.join(content), lexer, formatter) - return [nodes.raw('', parsed, format='html')] - -pygments_directive.arguments = (1, 0, 1) -pygments_directive.content = 1 -pygments_directive.options = dict([(key, directives.flag) for key in VARIANTS]) - -directives.register_directive('sourcecode', pygments_directive) +class Pygments(Directive): + """ Source code syntax hightlighting. + """ + required_arguments = 1 + optional_arguments = 0 + final_argument_whitespace = True + option_spec = dict([(key, directives.flag) for key in VARIANTS]) + has_content = True + + def run(self): + self.assert_has_content() + try: + lexer = get_lexer_by_name(self.arguments[0]) + except ValueError: + # no lexer found - use the text one instead of an exception + lexer = TextLexer() + # take an arbitrary option if more than one is given + formatter = self.options and VARIANTS[self.options.keys()[0]] or DEFAULT + parsed = highlight(u'\n'.join(self.content), lexer, formatter) + return [nodes.raw('', parsed, format='html')] + +directives.register_directive('sourcecode', Pygments) + |