Login

Pygmentation

Author:
alcides
Posted:
June 24, 2008
Language:
Python
Version:
.96
Score:
1 (after 1 ratings)

Usage: (if you save it as pigmentation.py as I did)

{% load pigmentation %} {% autoescape off %} {{ somevariable|pygmentize }} {% endautoescape %}

There already a few of this code around, but this one is pretty clean, and includes css. It also works in both the development server and Dreamhost (python2.4 in my django config) without any unicode problems.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from django import template
import re
import pygments
import pygments.lexers as lexers
import pygments.formatters as formatters

register = template.Library()

regex = re.compile(r'<code>(.*?)</code>', re.DOTALL)

@register.filter(name='pygmentize')
def pygmentize(value):
    try:
        last_end = 0
        to_return = ''
        found = 0
        for match_obj in regex.finditer(value):
            code_string = match_obj.group(1)
            try:
                lexer = lexers.guess_lexer(code_string)
            except ValueError:
                lexer = lexers.PythonLexer()
            pygmented_string = pygments.highlight(code_string, lexer, formatters.HtmlFormatter())
            to_return = to_return + value[last_end:match_obj.start(1)] + pygmented_string
            last_end = match_obj.end(1)
            found = found + 1
        to_return = to_return + value[last_end:]
        to_return += u"<style>%s</style>" % formatters.HtmlFormatter().get_style_defs('.highlight')
        return to_return
    except:
        return value

More like this

  1. Template tag - list punctuation for a list of items by shapiromatron 2 months, 2 weeks ago
  2. JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 2 months, 3 weeks ago
  3. Serializer factory with Django Rest Framework by julio 9 months, 2 weeks ago
  4. Image compression before saving the new model / work with JPG, PNG by Schleidens 10 months, 1 week ago
  5. Help text hyperlinks by sa2812 11 months ago

Comments

hobbes006 (on June 26, 2008):

Hi,

I am getting some strange HTML characters like

<br />
’ 

etc showing up in between my pre tags.

Any idea why that could be?

#

alcides (on July 27, 2008):

No idea, maybe you're using an old version of django that doesn't autoescape?

#

Please login first before commenting.