pygmentizeのフォーマッタは html 一択な件

WP Pygments Syntax Highlighterみたいに使う Pygmentsでない、素のPygmentsの話。

隠していたわけではないけれど、Pygments は html 以外の出力形式がある。また、ライブラリとして使うPygments以外に、単独で動く pygmentize という CUI が付属している。

私なら emacs であまり困っていないし、多くは Eclipse や Visual Studio のような統合開発環境を日常にしているのだろうから、一体誰が使うんだろう、と思わないでもないけど、ANSI escape codeな標準出力もある(というかこれがデフォルト):
pygmentize_terminal

で、想像通り、かもしれないが、Windows ではこれはあんましよろしくない。上の動画(これはlinux)で、less のオプションを付けないのと付けたのとで違ってるのがわかると思うけど、Windows の場合、linux での--raw オプションなしの less と同じことが、どこにもパイプしない出力か、DOS に組み込みの more で起こる。MSYSとか Cygwin みたいな Unix もどき環境を使ってれば less を使えるし、less でなく cat にパイプするだけでハイライトした出力が得られるけれど、「Microsoft が提供するもの以外許さん」という素敵な環境では、もうどうしようもない。どうしようもないからといって誰か困るのか、って話であって、世界中で誰一人困らないわけだから、これは未来永劫このまんまだろうし、まぁそれでいいんじゃないかね。

動画で見せている通り、フォーマッタは -f オプションで切り替える。利用可能なフォーマッタはhttp://pygments.org/docs/formatters/に書かれてる。少ない。

画像系で唯一多少なりとも実用になりそうなのは svg だけ。けど、出力結果の使いみちはやっぱないのよね。のであんまし実用になるとは思えない。png, gif, jpg, bmp いずれも、Windows では壊れた画像になってしまった。Pillowとの相性が悪いのかな? (Pillowの元のPILはもっとダメだった。)linux で出力出来たけれど、きっと貴方の欲しいものとは違うと思うよ。全体を一枚画像にしてしまうので、少しでも行数があるソースコードでは、ブラウザも画像ビューワも開けないものになってしまう。

rtf はまぁ使えないことはないけれど、フォントとかかなり厳密にコントロールしないと、プロポーショナルフォントとの闘いになると思う。こんなことするくらいなら、html 出力を選択してクリップボードにコピーして、Word/excel に貼り付ける方が多分満足するものになると思う。

そういうわけで、基本的にはPygmentsのフォーマッタとしては html だけが唯一実用。


さて。実はこの投稿、これは本題ではなくて。

Pygmentsでは一択、な出力形式は、Pygmentsをバックエンドにしている Sphinxでは一気に豊富になって。つまり、両者の作者である Georg Brandl (birkenfeld) は、出力の柔軟性については Sphinx 層でやってるってこと。Windows ではちょっとハードル高いところもあったりするけれど、それでも頑張ればすぐに PDF 出力出来る。EPUB 出力も出来るわけで、つまり電子書籍を自作出来るわけだ。

Pygmentsで画像形式で出力したい、と思うとすれば、「コピー&ペーストを禁止したい」というプロプライエタリな発想をお持ちか(*)もしくは印刷が目的なんだろうと思う。となれば、やはり PDF にしてしまえばいいんであって。

Sphinxが依存しているもの:
1. Pygments
2. Docutils
3. Jinja
これらはいずれも単独としてもとても使いやすい、良いもの、です。(PDF出力したいなら TeX 環境、とかやりたいことによってはもっと色々必要ですよ、念のため。)のでね、Sphinxをインストールするだけで、既に色々お得です…って話でした。
(*)

あたしゃ「読みにくい情報サイト」が大嫌いなので、世の中全て PygmentsSphinxになればいいのに、と思っておるのです。流行れ、流行ってくれ、頼む、流行らせてください :-P