新年明けましておめでとうございます。OS Xはさておき、Appleの好調さは続くでしょうから、いちユーザとしては楽しみな1年になりそうです。コラムのネタに困ることもなさそう、ということで本年も引き続きご愛顧のほどよろしくお願いします。

さて、今回は「GNU enscript」について。昨日今日の存在ではなく、Adobe Enscriptというプログラムの代替として、10年以上前にオープンソースで実装されたコマンドだ。OS Xにも標準装備されているが、機能のわりには存在が知られていないらしい……ということで、その基本的な使い方を解説してみよう。

enscriptのキホン

GNU enscriptは、テキストファイルをPostScriptなどのページ記述言語に変換することが主な役割だ。主要なプログラミング言語を解析/加工する機能を備えているため、予約語を強調表示したり、行頭にナンバリングしたりといった処理がかんたんに行える。

Objective-Cのソースファイル(*.m)を例に、その使い方を説明してみよう。基本的な用法は以下のコマンド実行例のとおりで、オプション(-o main.m.ps)、ソースファイル(*.m)の順に指定すればいい。enscriptは入力したソースファイルをPostScriptに変換し、標準出力へアウトプットすることがデフォルトの動作なので、「-o」オプションを使いPostScriptファイル(output.ps)へ出力すれば完成だ。

PostScriptファイルの閲覧には、PostScriptをPDFに変換するコマンド「pstopdf」を利用してPDFビューアで表示すればいいが、Preview.appでPostScriptファイルを開くと自動的にpstopdfによる変換処理が行われるため、敢えてpstopdfコマンドを使う必要はないだろう。

$ enscript -o output.ps main.m 
[ 1 pages * 1 copy ] left output.ps

出力したPostScriptファイルを「プレビュー」で開くと、このように自動的にPDFへと変換される

enscriptは基本的にASCII→PostScriptコンバータであり、マルチバイト文字の利用は想定されていない。シフトJISやUTF-8といった文字コードはサポートされないうえ、フォントに関する問題もあるため、日本語には非対応と考えていい。

一方、予約語などプログラミング言語ごとに異なるキーワードを抽出する処理は得意で、対応する言語の種類も多い。OS X Lionに収録のenscriptがどのような言語に対応しているかを確認するには、以下のコマンドを実行すればいい。なお、言語別の定義ファイル(*.st)は、/usr/share/enscript/st/hlディレクトリに格納されている。

$ enscript --help-highlight | grep Name

対応する言語がわかれば、「--higlight」オプションで指定できる。使い方はかんたん、表示されたとおりObjective-Cなら「objc」、JavaScriptなら「javascript」という要領で指定すればいい。キーワードは色分けしたほうが見やすいので、「--color」オプションも付けておこう。たとえば、Objective-Cのソースファイル「Document.m」を対象にする場合、以下のとおりコマンドを実行する。

$ enscript --highlight=objc --color -o output.ps Document.m

このように、Objective-Cのソースコードが色で強調されたPDF文書となった

有用なオプションは他にもある。行番号を出力するなら「--line-numbers」、見栄えのするヘッダーをくわえるなら「--fancy-header」も追加しておこう。タブのキャラクタ数を調整したいときには、「--tabsize」を指定する必要があるかもしれない。

オプションを指定すれば、行番号を表示したりヘッダーのデザインを変更したりできる

ソースコードの場合、フォントサイズは小さめのほうが好まれることも多く、できるだけ詰めて出力したいというニーズもあるはず。そのような場合には、「--landscape」オプションでページを水平方向にしたうえで、「--columns=2」として2段組で出力してみよう。こうすれば、紙に印刷したときの枚数を節約できる。PDFはフォントを拡大しても滑らかなままなので、見にくいということはないはずだ。

$ enscript --highlight=objc --color --line-numbers --fancy-header --landscape --columns=2 -o outpus.ps Document.m

横2段組で出力すれば、紙に印刷したときの枚数を節約できる。PDFビューアで閲覧するときには、拡大処理すれば見づらいこともない

enscriptの主要なオプション
--color カラー表示を有効にする
--columns=num カラム数を指定する。「-2」のように直接指定も可
--fancy-header 凝ったデザインのヘッダーを設ける
--font=name PostScriptフォント名を指定する(デフォルトはCourier)
--help-highlight ハイライト表示可能な言語を表示する
--highlight=lang 指定した言語(ex. objc)をハイライト表示する
--indent=num インデントするキャラクタ数を指定する
--language=lang 指定したページ記述言語(ex. html)で出力する
--landscape ページを水平方向に使用する
--line-numbers=num 行頭に行番号を出力する(数値は省略可)
--no-header ヘッダーを出力しない
--tabsize=num タブのキャラクタ数を指定する(デフォルトは8)
関連記事
第28回 年末特別企画:ホームフォルダを大掃除(2011年12月26日)
第27回 アスキーアートで描く「賀正」(2011年12月16日)
第26回 手軽にOS Xを「AirPlayサーバ」として使う(2011年12月9日)
第25回 高圧縮率画像フォーマット「WebP」をLionで使う(2011年12月2日)
第24回 OS XのSafariから直接「AirPlay」する(2011年11月25日)