diff options
Diffstat (limited to 'src/lib/Bcfg2/Server/Reports/reports/templatetags/syntax_coloring.py')
-rw-r--r-- | src/lib/Bcfg2/Server/Reports/reports/templatetags/syntax_coloring.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/lib/Bcfg2/Server/Reports/reports/templatetags/syntax_coloring.py b/src/lib/Bcfg2/Server/Reports/reports/templatetags/syntax_coloring.py new file mode 100644 index 000000000..0d4c6501d --- /dev/null +++ b/src/lib/Bcfg2/Server/Reports/reports/templatetags/syntax_coloring.py @@ -0,0 +1,46 @@ +import sys +from django import template +from django.utils.encoding import smart_unicode +from django.utils.html import conditional_escape +from django.utils.safestring import mark_safe + +from Bcfg2.Bcfg2Py3k import u_str + +register = template.Library() + +try: + from pygments import highlight + from pygments.lexers import get_lexer_by_name + from pygments.formatters import HtmlFormatter + colorize = True + +except: + colorize = False + + +@register.filter +def syntaxhilight(value, arg="diff", autoescape=None): + """ + Returns a syntax-hilighted version of Code; + requires code/language arguments + """ + + if autoescape: + value = conditional_escape(value) + arg = conditional_escape(arg) + + if colorize: + try: + output = u_str('<style type="text/css">') \ + + smart_unicode(HtmlFormatter().get_style_defs('.highlight')) \ + + u_str('</style>') + + lexer = get_lexer_by_name(arg) + output += highlight(value, lexer, HtmlFormatter()) + return mark_safe(output) + except: + return value + else: + return mark_safe(u_str('<div class="note-box">Tip: Install pygments ' + 'for highlighting</div><pre>%s</pre>') % value) +syntaxhilight.needs_autoescape = True |