from django.utils.html import escape, mark_safe __all__ = ['highlight_code'] def _make_pre_code(code): return mark_safe('
' + escape(code) + '
') def _wrap_code(inner): yield 0, "" for tup in inner: yield tup yield 0, "" try: import pygments import pygments.lexers import pygments.formatters.html import pygments.util except ImportError: def highlight_code(code, language, cssclass=None): return _make_pre_code(code) else: class HtmlCodeFormatter(pygments.formatters.HtmlFormatter): def wrap(self, source, outfile): return self._wrap_div(self._wrap_pre(_wrap_code(source))) def highlight_code(code, language, cssclass='codehilite', linenos=True): try: lexer = pygments.lexers.get_lexer_by_name(language) except pygments.util.ClassNotFound: return _make_pre_code(code) if linenos: return mark_safe(pygments.highlight(code, lexer, HtmlCodeFormatter(cssclass=cssclass, linenos='table'))) return mark_safe(pygments.highlight(code, lexer, HtmlCodeFormatter(cssclass=cssclass)))