pygmentize - Pygmentsをコマンドラインで使う

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

Pygmentsにはpygmentizeというコマンドラインツールが用意されている。

【 目次 】

-hでhelp

以下のコマンドを実行するとコマンドの使い方を表示してくれる。

pygmentize -h

pygmentizeのコマンドの使い方が詳しく記述されているので参考にすると良いと思う。
これをみるとpygmentizeのコマンド形式は以下のようになるようだ。

pygmentize [-l <lexer> | -g] [-F <filter>[:<options>]] [-f <formatter>]
          [-O <options>] [-P <option=value>] [-s] [-v] [-x] [-o <outfile>] [<infile>]

       pygmentize -S <style> -f <formatter> [-a <arg>] [-O <options>] [-P <option=value>]
       pygmentize -L [<which> ...]
       pygmentize -N <filename>
       pygmentize -H <type> <name>
       pygmentize -h | -V

-lでlexer,-Fでfilterを,fでformatterを,-oで出力ファイル名を

-lでlexer,
-Fでfilterを,
fでformatterを指定。

-oで出力ファイルを指定、-oを指定しない場合は標準出力に出力される。

例えば、pythonのソースコードファイルtest.pyをHTMLドキュメントとしてファイルtest.htmlには出力するには

pygmentize -f html -l python -o test.html test.py

ここでは、フォーマッターにhtmlを,
レキサーにpython言語を,
出力ファイルにtest.htmlに,
そして入力ファイルにtest.pyを指定している。

filterを使ってキーワードを大文字で出力させるには

pygmentize -F keywordcase:case=upper -o test.html test.py

拡張子によるformatterとlexerの推定

-oで指定された拡張子によってformatterが、また入力ファイルの拡張子によってlexerが推定できる場合には-lや-Fは省略できる。
例えば、上記の-oで指定された拡張子が.htmlで、入力ファイルの拡張子が.pyの場合であれば

pygmentize -o test.html test.py

とする事で、フォーマッターにhtml,レキサーにpythonを勝手に推測してくれる。

-Nでlexerの推定の確認

-Nオプションでpygmentizeコマンドがどのlexerを推定するかを確認する事ができる。

c:\work>pygmentize -N test.py
python

-Oでオプションを指定

-Oでさまざまなオプションを指定できる。 例えば、行番号やスタイルシートを含む完全なhtmlドキュメントを生成するにはfullを,さらにPygmentsにあらかじめ用意されているemacsという形式のスタイルで出力するには

pygmentize -O full,style=emacs -o test.html test.py

-Sでcssスタイルコードを生成

-Sを指定してpygmentizeを実行するとcssスタイルコードの生成をしてくれる。
以下のようにpygmentizeをコマンドラインより実行するとdefaultのスタイルのcssコードを吐き出してくれる。

pygmentize -S default -f html -a .codehilite > styles.css

生成されたファイルstyles.cssの内容

.codehilite .hll { background-color: #ffffcc }
.codehilite  { background: #f8f8f8; }
.codehilite .c { color: #408080; font-style: italic } /* Comment */
/* 途中を省略*/
.codehilite .il { color: #666666 } /* Literal.Number.Integer.Long */

-aでcssのクラス属性を

-aオプションにはcssのクラス属性を指定するが、単純なcssクラスを指定するのではなくCSSセレクタを指定してみても面白いかも?

上記のコマンドではdefaultのスタイルのcssコードを吐き出してくれるが、他にもいろいろなスタイルが定義されている。

-Lオプションでリストを出力

スタイルのリスト

どのような、スタイルが定義されているかは-Lオプションを使って確認する事ができる。

pygmentize -L styles

また、以下のpythonのコードを実行する事でもPygmentsに定義されているスタイルのリストを得ることができる。

listup_pygments_styles.py

from pygments.styles import STYLE_MAP
print STYLE_MAP.keys()

私の環境では以下のように表示された。

実行結果

['manni', 'igor', 'lovelace', 'xcode', 'vim', 'autumn', 'abap', 'vs', 'rrt', 'native', 'perldoc', 'borland', 'arduino', 'tango', 'emacs', 'friendly', 'monokai', 'paraiso-dark', 'colorful', 'murphy', 'bw', 'pastie', 'rainbow_dash', 'algol_nu', 'paraiso-light', 'trac', 'default', 'algol', 'fruity']

他にも、-Lオプションを使ってPygmentsにあらかじめ定義されているfilterやlexerのリストを出力させる事もできる。

filterのリスト

filterのリストを出力させるには。

pygmentize -L filters

実行結果

Pygments version 2.2.0, (c) 2006-2017 by Georg Brandl.

Filters:
~~~~~~~~
* raiseonerror:
    Raise an exception when the lexer generates an error token.
* whitespace:
    Convert tabs, newlines and/or spaces to visible characters.
* tokenmerge:
    Merges consecutive tokens with the same token type in the output stream of a lexer.
* gobble:
    Gobbles source code lines (eats initial characters).
* highlight:
    Highlight a normal Name (and Name.*) token with a different token type.
* codetagify:
    Highlight special code tags in comments and docstrings.
* keywordcase:
    Convert keywords to lowercase or uppercase or capitalize them, which means first letter uppercase, rest lowercase.

lexer言語のリスト

Pygmentsがどのような言語をサポートしているかを知りたい場合には
同様に、-Lオプションを使ってlexerのリストを出力させれば良い。

pygmentize -L lexers
ページのトップへ戻る