Utf82TeX バージョンアップ

この休日,Utf82TeX の改造をした。Windows で使用するとタイ語の処理結果に不正な文字が混入するとの話が以前 O 氏よりあった。FreeBSD,Mac OS X では再現しない。この問題については放置してしまっていた。最近業務情報の持ち出しが厳しく,自宅で Microsoft Office を使って仕事をすることがほとんどなくなったため,いまの私は,自宅ではめったに Windows を起動しないようになってしまったのである。今回 OldSlav 教会スラヴ語パッケージを公開したのに併せ,Utf82TeX 機能もこれに追随させたのを契機に,Windows でもきちんと動くよう取り組むことにしたのである。

私の PC は FreeBSD と Linux との共存のおかげで Windows 2000 にはディスク容量が 10GB 程度しか割り当てられていないため,まずディスクの空きの確保から作業をしなければならなかった。ActivePerl,角藤先生の W32TeX,iconv,swath を取り寄せインストールするのがひと苦労であった。

Utf82TeX でタイ語を処理すると確かにところどころ E という文字が不正に混入してしまうことが確認できた。私の Perl コーディングなのか,コード変換ユーティリティ iconv,タイ語単語境界マーキングプログラム swath,さらに Windows OS なのか,問題の在処の切り分けからはじめなければならなかった。

タイ語の変換で以下のように逆クォート引用文でシェルプログラムを起動しているが,Windows echo コマンドを通すと問題が発現することがわかった。タイ語以外は Windows でもまったく問題なく変換処理が行われる。

my $thais = shift; # $thais タイ語テキスト
$ICONV = "iconv -f UTF-8 -t TIS620"; # TIS-620にコード変換
$SWATH = "swath -f latex"; # swath
$thais = `echo $thais | $ICONV | $SWATH`; # 変換

echo を自前で書いて @ARGV を UTF-8 として明示的に扱っても問題の解消には至らなかった。要するに,コマンドライン引数を Windows のシェルが食った段階でテキストが壊れるらしいのである。インターネットで検索してこのような問題の事例を漁ったが適当な記事を見い出せず,結局根本原因をつきとめることはできなかった。Windows もしくは ActivePerl のバグなのか,プログラム作法がまずいのかよくわからない。

回避策として,Windows の場合は一時的ファイルにタイ語テキストのみ書き出したあと,echo ではなく cat でそのファイルを読み出して iconv 以降のパイプラインを処理するとうまくいった。余分な入出力を行うのは処理速度などの観点でいただけないが,しようがない。

Windows ユーザが少しでも手軽にインストールできるようバッチ・ファイルも添付し,im-textools-0606a としてアーカイブし,公開した。タイ語のためにこのプログラムを使う人がどれだけいるか非常に疑問だが,とりあえずは落ち穂拾いができたといえるだろうか。