slav0nic's blog

Заметки о python, linux и других занимательных вещах

MoinMoin pygments парсер

В общем стало раздражать отсутсвие в MoinMoin (wiki движок на python) подсветки SQL и всего остального добра, решил написать. Для генерации html кода была выбрана либа http://pygments.poc oo.com, тк лучше неё ничего и нет :]
Для установки кидаем парсер в :
/var/www/wiki/data/plugin/parser/pygment.py
После чего в wiki досточно написать что-то вроде:



{{{#!pygment python
print "hello world!"
}}}


Если кому-то не нравится ключевое слово pygment, то pygment.py можно переименовать во что-то другое...
Писалось быстро, поэтому ничего особого в коде нет=) галвное что работает, хотя дефолтовый стиль не супер.




1 #moinmoin 1.5 plugin
2 #pygment based parser
3 #coded by slav0nic (slav0nic.xss.ru)
4
5 from pygments import highlight
6 from pygments.lexers import get_lexer_by_name
7 from pygments.formatters import HtmlFormatter
8
9 class Parser:
10 def __init__(self, raw, request, **kw):
11 self.raw = raw
12 self.request = request
13 self.kw= kw
14
15 def format(self, formatter):
16 html_formatter = HtmlFormatter()
17 try:
18 lexer = get_lexer_by_name(self.kw["format_args"].strip())
19 except ValueError:
20 lexer = get_lexer_by_name('text')
21 self.request.write("".join(('\n<style type="text/css">', html_formatter.get_style_defs(), '</style>\n', highlight(self.raw, lexer, html_formatter)))

лексеры можно посмотреть командой:
python -c 'import pygments.lexers, pprint;pprint.pprint(pygments.lexers.LEXERS)'
недостаток - это css, который фигарится в страницу. Код простой, думаю исправить/добавить, что надо, не вызовет проблем.

слить можно здесь: http://slav0nic.xss.ru/projects/pygment.py

web.py