View All Posts. MiCHiLU.com powered by Django ;-)

[Django]: Pygments を使って reStructuredText でも見栄えよく Highlight 表示する

Pygments をインストールする

sudo easy_install Pygments

see: http://pygments.pocoo.org/download/

Django で Pygments を import する

Using Pygments in ReST documents のコピペ。 myproject/__init__.py に書くのがベストなのかどうかワカランですけど、動いたのでよしと。

myproject/__init__.py

from docutils import nodes
from docutils.parsers.rst import directives
from pygments import highlight
from pygments.lexers import get_lexer_by_name
from pygments.formatters import HtmlFormatter

PYGMENTS_FORMATTER = HtmlFormatter()

def pygments_directive(name, arguments, options, content, lineno,
                      content_offset, block_text, state, state_machine):
    try:
        lexer = get_lexer_by_name(arguments[0])
    except ValueError:
        # no lexer found
        lexer = get_lexer_by_name('text')
    parsed = highlight(u'\n'.join(content), lexer, PYGMENTS_FORMATTER)
    return [nodes.raw('', parsed, format='html')]
pygments_directive.arguments = (1, 0, 1)
pygments_directive.content = 1
directives.register_directive('sourcecode', pygments_directive)

CSS を配置する

これもコピペ。

mkdir myproject/static
cd static
curl -O http://pygments.pocoo.org/media/pygments_style.css

※ DownloadしたCSSファイル内の "syntax" をすべて "highlight" に書き換えるっす。

myproject/static を静的に。 (DEBUG=True のみ)

myproject.urls.py

import myproject.settings

urlpatterns = patterns("",
    ...
)

if myproject.settings.DEBUG:
    urlpatterns += patterns("",
        (r'^static/(.*)$', 'django.views.static.serve',{'document_root': 'static'}),
    )

see: 静的なファイルの提供方法

templates を書き換える

myproject/templates/base.html

<html>
<head>
    ...
    {% block css %}{% endblock %}
    ...
</head>
<body>
    ...
</body>
</html>

myproject/templates/blog/base.html

{% extends "base.html" %}
{% block css %}
    <link rel="stylesheet" type="text/css" href="/static/pygments_style.css" />
{% endblock %}

reStructuredText を書く

.. sourcecode:: <language>

    #### your code here

<language> に何を書くと、どういうフォーマーットになるかは your-python-lib/site-packages/Pygments-0.6-py2.4.egg/pygments/lexers/_mapping.py に書いてあります。 django のテンプレもサポートされてます。

TextMatePygments を使うにはどうやればいいんだろ?

Sat, 13 Jan 2007 01:07:47 +0900 source edit
Creative Commons License
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 2.1 Japan License.
View All Posts. MiCHiLU.com powered by Django ;-)