Jedit X misima クライアント

|

Mac OS X で人気のエディタ Jedit X 用の misima SOAP クライアントを書いている.Mac OS X では AppleScript でさまざまなアプリケーションを制御できる.強力.また AppleScript は XML-RPC や SOAP で Web サービスを利用する仕組みがビルトインされている.先進的.

とはいえ,AppleScript は英語のような文法構造を特色としており,Mac ファンに言わせれば解りやすいとのことであるが,私には中途半端なだけである.そもそもプログラミング言語は自然言語とは違う.予約語に類するものは英数字だけで記述するのが普通だと思われるのに,AppleScript では MacRoman (Latin-1 の Mac 方言) 8 ビット文字 (例えば "as «class utf8»" の "« »") で属性を記述するようなところもあり,信じられない書記仕様なのである.

さて,Mac ADC (Apple Developer Connection) サイトの技術文書などをたよりに,Jedit X から AppleScript call soap インタフェースを用いて,misima SOAP 接続を行うスクリプトを書いてみた.これは Jedit X で作成中の文書において,misima で旧字・旧仮名変換したいテキストを選択して実行すると,私のサイトのサーバの変換結果で選択テキストを置換する手続きである.行の折り返しを "¬" で示している.

property misimasoap : ¬
    "http://yasuda.homeip.net/axis/services/misimaSoapConnector"
 
--- Jedit X 選択文字列の取得.空なら終了.
tell application "Jedit X"
    tell front document
        copy selected text to tString
    end tell
    if (count characters of tString) = 0 then
        display dialog "文字列を選択してください." buttons {"OK"}
        return
    end if
end tell
 
--- call misimaConv handler
set the resultText to misimaConv("-kyitq -s c ", tString)
 
--- 変換結果で選択テキストを置換
tell application "Jedit X"
    tell front document
        set selected text to resultText
    end tell
end tell
 
--- misimaConv SOAP misima 変換ハンドラ定義
on misimaConv(misimaParm, targetString)
    tell application misimasoap
        return call soap {method name:"misimaConvert", ¬
        parameters:{Params1:misimaParm as string, ¬
                        Params2:targetString as Unicode text}}
    end tell
end misimaConv

ところが,このコードを Jedit X の スクリプトウィンドウから登録して実行してみると,call soap のリターン文字列 (変換結果) の日本語が "<<Unknown Escape>>" になってしまい.期待した結果が得られない.サーバにはきちんとクエリが届いていて結果を返却していることが確認でき,SOAP 接続は問題なさそうである.TeX 変換指定でタイ語やロシア語,韓国語を送信してみると,変換結果が ASCII 文字だけからなるものはきちんと返されるので,送信文字がすでに異常になっている訳でもない.

soap リターン値の class を検査してみると "Unicode text" となるので問題ないはずである.Apple Event Manager の XML パーサがへぼいのか.ちなみに Unicode 漢字を selected text に貼付けると,JIS X 0208 にない文字が化ける.Microsoft Word,VBA Office Web Services Toolkit の場合は Unicode をしかるべく処理できたのにつけ,Mac AppleScript は文字コードについて Windows に遅れをとっている印象を受ける.これ,Apple のどこに言えばよいのだろうか.インターネットを検索しても,どうも私のような課題で悩んでいるひとはいないらしい.

call soap ではなく do shell script (AppleScript 外部シェル起動インタフェース) で,Mac OS X のローカルにインストールした misima をコールするときちんと変換結果が Jedit X に貼付く.call soap のリターンはきちんと UTF-8 を扱えないと言えそうである.よって,Jedit X 用の SOAP クライアントも do shell script で Java SOAP クライアントを呼び出して行うやり方としたほうがよさそうである.

(10.29 付記: 上記問題点は,サーバの返却値を Unicode 十六進数形式にすることによって,call soap を掻い潜り,Perl の print pack("U*", Unicode 十六進数形式); で通常の Unicode 文字列に復元することで解決した.こちらを参照)

Moon Calendar

Profile

ISAO。システムエンジニア。昭和 30 年代を懐かしむオヤジ。ロシアに興味があります。
[more], [About our site]

Notice

この文書はフィクションであり,実在する個人,団体等とは一切関係ありません。

文書の記述内容は無保証です。不適切な表現があればコメントにてご指摘ください。

コメント,トラックバックは,管理者承認を経て公開となります。公序良俗に反すると判断されると,断りなく削除される場合があります。

Links

About this entry

Written by isao at 2007年10月20日 19:00.

Previous: misima 秀丸マクロ for SOAP

Next: iPod がお亡くなりに

Recent Entries in Main Index.
All Entries in Archive Index.

Web Pages

Powered by Movable Type 4.1