2017年6月5日月曜日

e2psのpatchを作ってみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
日本語を含むテキストファイルを PostScript形式に変換するプログラムの一つに、 e2ps があります。LinuxのディストリビューションやFreeBSDなどにもパッケージがあったりしますね。

オリジナル: http://wtpage.info/wtseries/unix.html#e2ps
Debian: https://packages.debian.org/ja/stretch/e2ps
FreeBSD: http://www.freshports.org/japanese/e2ps/

で、色々あってこれを使ってみたのですが、どうにも動きがおかしい。
というわけで patch を作ってみたわけです。
https://gist.github.com/taraijpn/ea10ff9e908befafab7cff719f26dd20

どれくらい需要があるのか分かりませんが、とりあえず公開しておきます。

何がおかしかったかは以下の通り。

1)出力ページ枚数のカウントがおかしい。
2ページ以上になっても「One page was outputed」になる。1ページのときは「 1 pages were outputed.」って何故に複数形??

2)複数ページを出力するPostScriptなのに、何故かEPSだと言い張る。
おかげで psset に出来上がったファイルを渡すと、(pssetが内部で呼んでいる) fixpsから「fixps: DSC broken.  gs will be asked a full rewrite of the file.」と言われ、正しいPostScriptと認識されず、きちんと動かない。

3)内部で持っている用紙のサイズ(ポイント数)がおかしい。
なんでこんな数値にしたんだろう。複数面付けするときの計算の事情?

4)オリジナルのソースコードで何故かコンパイルが通らない(うちでだけ?)
ps-font.c に、gsFonts という静的配列の宣言があるのですが、さすがにこれはコンパイル通らないんじゃあ……でもFreeBSD portsmonでは何故かビルド出来てる……何故だ……
http://portsmon.freebsd.org/portoverview.py?category=japanese&portname=e2ps
※FreeBSDの ports では、ps-font.c の内容を修正するための sed コマンドが Makefile 側に書かれていました。どおりで files/ の中を見ても分からないわけだよ!
buildしたログで気づきました orz

===>  Patching for ja-e2ps-4.34
===>  Applying FreeBSD patches for ja-e2ps-4.34
/usr/bin/sed -i.bak -e '/Times-Roman$/,/^Gothic-Medium.Katakana$/{s,$,\\,;}' /usr/ports/japanese/e2ps/work/e2ps-4.34/ps-font.c