Pygments - pythonでプログラミング

pythonにPygmentsのライブラリーをimportする事で...

初回公開:2018/10/14
最終更新:未

【 目次 】

Pygmentsの簡単なサンプルコード

上記の公式ドキュメントよりPygmentsの基本コードを抜粋しておく。

リスト1:Pygmentsの簡単なサンプルコード

from pygments import highlight
from pygments.lexers import Python3Lexer
from pygments.formatters import HtmlFormatter

code = 'print("Hello World")'
print(highlight(code, Python3Lexer(), HtmlFormatter()))

実行結果

<div class="highlight">
<pre><span class="k">print</span> <span class="s">&quot;Hello World&quot;</span></pre>
</div>

出力結果をみると、文字の強調(ハイライト)表示はcssのクラス名highlightにて指定されている。
デフォルトではcssのクラス名としてhighlightが指定されるようだ。
cssとしてクラス名highlightに対する色指定(style)を記述しなけらばならない。

cssの出力

Pygmentsにはあらかじめ何種類かstyleが用意されていてpygmentizeコマンドに-Sを指定する事でcssのコードを得る事ができる事は以前にも述べた。

このcssのコードは以下のようなpythonのコードを使って出力させる事もできる。

from pygments.formatters import HtmlFormatter
print HtmlFormatter().get_style_defs('.highlight')

PygmentsのAPI

High-level API

pygmentsモジュールの関数

pygments.lex(code, lexer)
lexer(Lexerインスタンスでなければならない)によりcodeを字句解析して、トークンのiterableを返します。
現在のところ、これはただlexerのget_tokens()呼び出すだけです 。
pygments.format(tokens, formatter, outfile=None)
formatter(Formatterのインスタンスでなければならない) によりトークンをフォーマットしてトークン ストリーム (トークンの iterable)を返します。
結果がoutfileに書き込まれるかまたはoutfileがNoneの場合は、文字列として返されます。
pygments.highlight(code, lexer, formatter, outfile=None)
これは最もハイレベルなハイライト関数です。
1つの関数でlexとformatの両方の関数を組み合わせて提供します。

リスト1のコードのhighlight関数を、lex関数とformat関数を使って実現すると以下のコードになる。

from pygments import lex,format
from pygments.lexers import Python3Lexer
from pygments.formatters import HtmlFormatter

code = 'print("Hello World")'
tokens=lex(code, Python3Lexer())
print(format(tokens, HtmlFormatter(), outfile=None))

lex関数はgeneratorクラスのインスタンスを返す。

print(type(tokens))

実行結果

<class 'generator'>

python以外の言語でのPygments

以下の記事が参考になりそう。

JavaでPygmentsを使う

C# で Pygments


次に、PygmentsのAPIをlexer,formatter,style,filtersの4つのコンポーネント(クラス)ごとにみていくことにする。

ページのトップへ戻る