日本オリンピック代表カタール戦を観ながら,misima 秀丸対応に取り組んだ.秀丸でテキストの選択範囲を,ネットワーク越しに私の misima SOAP サーバに転送し,旧字・旧仮名変換して,帰ってきた結果で書き換えるもの.ホームのカタールが勝負強さを発揮して,見事後半残すところ 13 分で追いつき,逆転,日本が信じられない負け方をした.信じられない勝ち方は見たことがないが.ロスタイムでなんとハンドで PK を献上するなんて,まあ優しい日本人らしいかわいいところか.こんなのでオリンピックに出場できたとしても,よいものだろうか.それはよいとして,秀丸用のマクロができた.
秀丸はマクロ実装において,テキスト選択範囲を外部プログラムの標準入力に渡すことができる.賢明な仕様だと感心した.でも,その文字コードがどうも SJIS のようで,せっかく misima Java SOAP クライアントに食わせることができるのに,UTF-8 を前提としている misima の出力が化けてしまい目的に適わない.秀丸は定評ある優れたエディタではあるが,マクロレベルでのエンコーディングに対する配慮は,Emacs に比べるといまひとつという印象を受ける.
しようがないので,クリップボード経由で外部プログラムとテキストを連絡する方式にした.秀丸も UTF-8 を含むいくつかの文字コードをサポートしている.エンコードの異なる複数の秀丸文書間でコピー&ペーストができないとなるとさすがに使い物にならないので,クリップボードのエンコーディングは Unicode で管理可能な作りになっているようである.
クリップボードからデータを読み取り,misima SOAP 変換をコールし,変換結果をクリップボードにストアする Java プログラムを 1 本書いた.Microsoft Word 用にもともと書きかけていたのですぐできた.これをドライブする簡単な秀丸マクロを書いたら,文字化けせずに変換が成功した.Word 用マクロは結局 Microsoft Office XP Web Services Toolkit により始末したが,クリップボード方式は無駄にならなかった訳である.
ここでもうひとつ障碍が発生.マクロから java プログラムを起動するとどうしても「コマンドプロンプト」の画面が変換中に立ち現れてちょっとみっともない.秀丸のマクロ Tips を検索したら "> nul" でこれを抑止できるような記事を見つけてこれを試してみたが,ダメであった.これまたしようがないので,引数に指定したプログラム (ここでは Java) を,コンソールプログラムとしてでなく,バックグラウンドプロセスとして起動する短いランチャプログラムを C で書いた (下記コード中の misimalaunch).Borland C++ 5.5 の無償お試しコンパイラが役立った.全部 C で書けばよいのだけど,クリップボード,SOAP を操作する Windows アプリを C/C++ で書く気力はいまの私にはない.
以下にできあがった秀丸マクロコードを示す."→" は行の折り返しを示す.
// misima パラメータ: 旧字(UTF-8),旧仮名,用字・用語,単純変換指定
$param = "-kyit -s c ";
// 文字列が選択されていないならエラー終了
if (!selecting) {
message "文字列を選択してください";
endmacro;
}
// クリップボードに切り出し
cut;
// misima SOAP サーバコール
// - misimalaunch: コマンドプロンプト画面抑止ランチャ
// - misimaSoapCbClient: Java クリップボード SOAP クライアント
runsync2 "misimalaunch javaw misima.misimaSoapCbClient →
-u http://yasuda.homeip.net/axis/services/misimaSoapConnector " →
+ $param;
// 異常終了の場合,対象テキストを戻して終了
if (!result) {
message "実行に失敗しました";
paste;
endmacro;
}
// クリップボードの misima 変換結果をペースト
paste;
まだ Java プログラムも C プログラムもプロトタイプなので,misima オプション指定などもう少しチューニングしてから公開するつもりでいる.Windows のエディタとして大きなシェアを持っている秀丸エディタでも,これで misima 変換がサポートできそうである.
次は Mac OS X で人気のある Jedit X 向けに misima SOAP 変換マクロ (AppleScript) に取り組む予定である.AppleScript は Apple Event Manager で SOAP や XML-RPC をサポートしているので,秀丸よりもっと簡単にサポートできると思う.

Comments