misima RESTful Web Service 秀丸マクロ

misima 旧字・旧仮名遣い変換 RESTful Web Service クライアントシリーズ。Microsoft Office クライアントを書いたからには,Windows の人気テキストエディタでもできるようにしたい。で,本日の課題は,秀丸テキストエディタ用のクライアントを書くこと。つまり,秀丸で編集作業をするなかで,旧字・旧仮名遣いにしたいテキストを選択し,エディタから直接 misima RESTful Web Service に接続してその変換結果テキストで選択テキストを置き換える -- これを実現する秀丸マクロを書くこと。そのメモを残しておく。試験した秀丸のバージョンは現時点での最新 8.34 (32bit 版) である。Windows 7 Ultimate 環境である。なお,サーバ側の実装については,弊サイト記事『JAX-RS - misima RESTful Web Service の実装』を参照。

秀丸エディタ

秀丸エディタ(公式サイト)は Windows の定番テキストエディタである。秀丸はその使い勝手,強力なマクロ機能ゆえに優れたソフトウェアである。これまでに多くのユーザによって公開されたマクロ資産も膨大なものである。Windows 3.1 の時代から長期間にわたって定番ソフトたる地位を保っているだけのことはある。私自身 Windows 3.1 のころ秀丸エディタの最初のバージョンが出たときから,きちんと代金を支払って,使い続けていた。ただ,日本人の開発したソフトウェアの常として,Unicode 対応が遅れ,サポートされてもその扱いがヘボだったため(たいていの日本語エディタはそうだった。秀丸はまだ進んでいたくらいである),いつしか私は Windows 上でも Emacs (Meadow) にほぼ完全に乗り換えてしまった。でも,秀丸もここ数年でようやく UTF-8 がまともに取り扱えるようになった。内部文字コードの Unicode 化が行われたものと推察する。

misima RESTful Web Service 秀丸クライアントの設計

misima RESTful Web Service クライアントを秀丸で実現するには,やはりマクロを書くことになる。Microsoft Office と同様に,秀丸マクロにおいても Microsoft XML HTTP オブジェクトがサポートされており,これによって比較的簡単に Web サービスと連携することが出来る。かつて SOAP Web Service 用に秀丸マクロを書いたときと比べると雲泥の差でスマートかつ簡単になった。

設計内容は次のとおり。

  • 秀丸エディタ編集の選択テキストを取得する。
  • misima 変換オプション,選択テキスト,ユーザ認証コードをもとに XML データを組立てる。
  • XMLHTTP オブジェクトを生成し,これにサーバ URI,Content-Type ヘッダをバインドし,XML データをサーバに同期 POST する。
  • サーバのレスポンスを確認し,正常の場合,変換結果テキストを取り出して,秀丸エディタの選択テキストを変換結果テキストで置換する。

秀丸マクロコード

上記設計内容に基づく秀丸マクロコード misimaConvert を以下に示す。これを misimaConvert.mac ファイル名で格納する(ファイル名は適当でよい)。ファイルのエンコードを Unicode (UTF-16) としておく。

ハイライト表示を行った部分が,XMLHTTP オブジェクト操作,すなわち misima RESTful Web Service サーバとの通信に関連するコードである。

//
//  misimaConvert - misima RESTful Web Service 秀丸クライアント マクロ
//  Copyright 2014(c) isao yasuda, All Rights Reserved.
//
 
// misima オプション: 旧字(UTF-8),旧仮名,用字・用語,単純変換指定,quiet mode
$misimaOpts = "-s c -k -y -i -t -q";
 
// 選択文字列の取得
$misimaTarget = "";
if (selecting) { // 選択されていればテキストをコピー
    $misimaTarget = gettext(seltopx, seltopy, selendx, selendy, 1);
} else {
    message "misimaConvert: 文字列を選択してください";
    endmacro;
}
 
// XML組立て
$misimaXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + 
    "<misimaRESTful>" +
        "<misimaParam>" + $misimaOpts + "</misimaParam>" +
        "<misimaTarget>" + $misimaTarget + "</misimaTarget>" +
        "<misimaUsercode>noxinsomniae201402</misimaUsercode>" +
    "</misimaRESTful>";
 
// XMLHTTP オブジェクト
#xmlHttp = createobject("Msxml2.XMLHTTP");
if (#xmlHttp == 0) { // 生成失敗
    message "misimaConvert: XMLHTTP生成に失敗しました";
    endmacro;
}
 
// misima RESTful Web Service サーバに POST (同期 POST)
$URI = "http://yasuda.homeip.net:8080/misimaRest/misima/convert";
callmethod #xmlHttp, "open", "POST", $URI, false;
callmethod #xmlHttp, "setRequestHeader",
    "Content-Type", "text/xml;charset=utf-8";
callmethod #xmlHttp, "send", $misimaXml;
#status = callmethod_returnnum(#xmlHttp, "Status");
$convertedText = getpropstr(#xmlHttp, "responseText");
releaseobject #xmlHttp;
 
// 通信成功時,サーバ変換結果文字列で選択テキストを置換
if (#status == 0) {
    insert $convertedText;
} else {
    message "misimaConvert: 実行に失敗しました";
}

上記のコード中の変換オプションの指定:

$misimaOpts = "-s c -k -y -i -t -q";

これは,旧字変換,旧仮名遣い変換,用字用語変換,変換補正,繰返し符号変換を指定するものである。これを

$misimaOpts = "-s a -k -y -i -t -x farT -q";

とすると,旧字・旧仮名遣い変換とともに,LaTeX 変換(OTF シーケンス変換,タイ語ワードブレーク挿入,漢文訓点・和文くノ字点変換)を施す。LaTeX ユーザ向けである。

マクロのインストール

メニューバー マクロ(M) - マクロ登録(E)... をクリックしてマクロ登録画面に行く。ここで空きのマクロ番号の「...」ボタンをクリックして,misimaConvert.mac ファイルを選択すると,図 1. のようになる。OK ボタン押下でマクロが秀丸エディタに登録される。

20140322-hide-1.png
図 1. マクロ登録

これで マクロ(M) - マクロ実行(X)... から misimaConvert を選択すれば,マクロを起動できるようになる。さらに,ツールバーに misimaConvert マクロ実行用のボタンを追加しておくと,すぐに変換操作が出来て便利である。そのためには次のようにする。

  1. メニューバー その他(O) - 動作環境 をクリックして 動作環境 画面を表示させる。
  2. 設定の対象(L): のなかの ウィンドウ を選択し,さらに 詳細(D)... ボタンをクリックして ツールバー詳細 を表示させる。
  3. ここで,右の コマンド(C): プルダウンから メニュー/マクロ系 を選択して,一覧にある misimaConvert を選択し,<< 追加(A) をクリック,OK ボタンを押下げる(図 2.)。すると,ツールバー右端にマクロアイコンが追加されているはずである。
20140322-hide-2.png
図 2. ツールバーへの misimaConvert 追加

misimaConvert の実行

秀丸でテキストを編集し,変換したい部分をマウスでドラッグして反転させる。その状態で先ほど登録したマクロボタン(図 3. 中のツールバー右端にある「M1」アイコン)を押すと,選択テキストが旧字・旧仮名遣いに変換されたテキストに置換される。

misima RESTful Web Service との通信に失敗した場合はエラーメッセージが表示される。変換が首尾よく完了したけれども,元のテキストに戻したいという場合は,コントール + Z を二回入力すればよい。

misimaConvert 変換の前後を,それぞれ,図 3. 及び図 4. に示す。

20140322-hide-3.png
図 3. 変換前
20140322-hide-4.png
図 4. 変換後

付記

秀丸のバージョンは最新版(現時点では 8.34)にしておくことを強く勧める。私が Windows 7 と同時にインストールした秀丸バージョン 8.03 では XMLHTTP オブジェクト getpropstr メソッドのくだらないバグ(リターンテキストにメモリ上のゴミが混入してしまう)にけっこう悩まされたからである。

参考文献

[ 2015/02/02 付記 ]
misima RESTful Web Service は 2014/12 より友人のためだけの限定公開といたしました。上記ユーザ認証コードでは動作しません。