Permalink
Browse files

Allow using rst directives for code-block

  • Loading branch information...
1 parent b411ab8 commit 9f5d64273abd005193eed7dcf237ad9c9226f822 @kylef kylef committed Apr 8, 2012
Showing with 39 additions and 0 deletions.
  1. +1 −0 darkweb/__init__.py
  2. +38 −0 darkweb/rstdirectives.py
View
@@ -0,0 +1 @@
+import rstdirectives
View
@@ -0,0 +1,38 @@
+# -*- coding: utf-8 -*-
+from docutils import nodes
+from docutils.parsers.rst import directives, Directive
+from pygments.formatters import HtmlFormatter
+from pygments import highlight
+from pygments.lexers import get_lexer_by_name, TextLexer
+
+INLINESTYLES = False
+DEFAULT = HtmlFormatter(noclasses=INLINESTYLES)
+VARIANTS = {
+ 'linenos': HtmlFormatter(noclasses=INLINESTYLES, linenos=True),
+}
+
+
+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('code-block', Pygments)
+directives.register_directive('sourcecode', Pygments)

0 comments on commit 9f5d642

Please sign in to comment.