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">"Hello World"</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
- C# で Pygments を使ってシンタックスハイライト - Qiita
- GitHub - akatakritos/PygmentSharp: C# Port of Pygments syntax highlighter
- GitHub - fearthecowboy/pygments: Pygments for .NET
次に、PygmentsのAPIをlexer,formatter,style,filtersの4つのコンポーネント(クラス)ごとにみていくことにする。