新年明けましておめでとうございます。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
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
有用なオプションは他にもある。行番号を出力するなら「--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
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) |