|
Java アプリケーションの 'aete' リソースの生成
AppleScript など OSA
スクリプト言語でスクリプト可能なアプリケーションは用語説明リソース
(リソースフォークの 'aete' リソースの 0 に保存されます)
を提供しなければなりません。用語説明リソースは、アプリケーションのソースコードで使われる
4
文字のイベントコードやクラスコードと、スクリプト作成者が用いる英語表現の用語説明とを対応付けるものです。デベロッパは通常、用語説明リソースは
Rez ツールで .r ファイルからコンパイルするか、'aete'
テンプレートを使ってリソースエディタ (Resorcerer や ResEdit
など) で編集します。MRJ
スクリプト機構では、スクリプティングで使用する 4
文字コードが自動生成され、デベロッパが変更する必要はありませんが、読みやすくするため用語説明を変更してもかまいません。
自動生成された用語説明は、静的な基本用語説明と、個々のスクリプト可能な
Java
アプリケーションごとに生成される動的用語説明との組み合わせになります。「MRJ
Scripting aete」ファイルには基本用語説明と AWT
コンポーネント用語説明が含まれています。MRJ
スクリプト機構は、Java
アプリケーションの開かれたウィンドウにある全コンポーネントについて、追加の用語説明を自動生成します。こうして、MRJ
は MRJ
アプリケーションをスクリプト可能にするために必要なすべての基本用語説明を生成するのです。Java
アプリケーションに基本リソースを含めるには、JBindery または
ResEdit を使用してください。
Java アプリケーションに基本 'aete'
リソースを含めた後は、動的用語説明を生成してもらうため、アプリケーションを実行して、スクリプトで制御したい部分を実際に「触れて」ください。制御対象コンポーネントを含むウィンドウをすべて開いてください。すると、それらのコンポーネントに対応する
AppleScript クラスが用語説明に取り込まれます。
ウィンドウを手動で全部開くことが実践的でない場合や、AWT
コンポーネントではないクラスをスクリプト対象にしたい場合、スクリプトを使ってそれらのクラスの用語説明が必ず生成されるようにすることもできます。基本辞書には「Developer
Suite」と呼ばれる用語集があります。これには、エンドユーザではなく、デベロッパを支援するコマンドやクラスが含まれています。この用語集にある
add terminologies for class イベントを使うと、特定の Java
クラスを動的用語説明に入れるよう指定できます。
公開したい全クラスに触れた後は
(手動またはスクリプトで)、動的用語説明を取得してください。これには、スクリプト編集プログラムがアプリケーションから動的用語説明を取得するのと同じ
'gdte'
イベントを使用します。通常このイベントはスクリプト作成者からは隠されており、用語説明はありません。Developer
Suite にはイベント名、get terminologies
を用意しましたので、スクリプトを書いてこれをアプリケーションに送ってください。
用語の説明には、get terminologies
イベントにオプションの真偽値パラメータ、object parameters
を追加しました。通常、Java
オブジェクトをパラメータに持つイベントはすべて用語説明の生成から除外されます。このようなイベントも含めたければ、get
terminologies イベントに「with object
parameters」を追加して呼び出してください。
get terminologies
イベントの結果は、静的および動的両方の用語説明を含む巨大なデータオブジェクトです。使いやすさを考えてこの動的用語説明を編集するのであれば、まずファイルに保存しなければなりません。この作業を行うためのシェアウェアのスクリプティング追加機能がたくさんあります。次の例は、GTQ
Scripting Library (http://www.scriptweb.com/osaxen/gtq_scripting_library.html
を参照) の add resource コマンドを使う例です。
tell
application "test.app"
add terminology for class "com.acme.test.SpecialButton"
add terminology for class "com.acme.test.SpecialClass"
set aeteRes to get terminologies --set aeteRes to get
terminologies with object parameters
-- NOTE: There is currently an issue with using "get terminologies
-- with object parameters"
-- Use "get terminologies with <<class objt>>"
-- instead
add resource aeteRes to file "HD:TestRes" of
type "aete" id 0 ツ
with replacing allowed
end tell
|
|
重要:
上記 AppleScript
中の「<<」と「>>」はそれぞれ 1 文字の
Option-\ と Option-Shift-\
と置換してください。置換しないとスクリプトは正常に動作しません。
|
「Add
Resource」スクリプティング追加機能をインストールするには、スクリプト編集プログラムのパーティションサイズをおよそ
1500K
に増やしてから、このスクリプトを入力し、実行してください。すると生成されるリソースは「HD:TestRes」というファイルにできますので、それを
'aete' エディタで編集してください。このリソースを .r
ファイルに直してから編集するか、Resorcerer を使うか、'aete'
テンプレートを使って ResEdit で編集してください。
スクリプト作成者のために用語説明の整理を行う際、関係のないイベントやプロパティはすべて削除してください。関係のないクラスも削除したほうがよいでしょう。しかし、動的用語説明がオンだと、削除したクラスの用語説明が再び動的に現われてしまいます。現在のところこの問題を回避するには、イベントとプロパティはすべて削除し、クラスだけを残しておきます。用語説明の動的生成では、'aete'
にすでに存在するクラスの上書きは行いませんから、空のクラスがそのまま残るのです。
aete 内の 4
文字コードは決して変更しないでください。しかし、イベント、パラメータ、クラス、プロパティの名前は、表示名からではなく、プログラミング名から生成されている場合は変更したほうがいいでしょう。スクリプト作成者のために、各クラスがどんなもので、どのように使用するかコメントを付けておくべきです。
'aete' リソースの編集が最終形式まで済んだら、Developer
Suite
は削除したほうがよいでしょう。これはスクリプト作成者のためのものではないからです。
動的用語説明は 'scsz'
リソースによって制御されます。'scsz'
リソースを編集して、動的用語説明の生成を禁止することもできます。すると用語説明は
'aete'
の変更後のまま固定されます。(こうすれば、不要な用語説明の自動生成にわずらわされることはありません。)
しかしこれにも問題があります。Java
アプリケーションが拡張可能な場合 (たとえば start tool
イベントを使うなどして)、実行時に新しいクラスが導入されます。このようなクラスをスクリプト可能にする唯一の方法は
'scsz' リソースで動的用語説明を有効にすることです。
'aete'
リソースを編集して、必ずサイズは小さくしてください。スクリプト作成者が辞書の項目の多さに圧倒されてしまいます。また、ユーザにスクリプト作成作業ではどこに注力すべきかを示唆すべきです。そうすれば、スクリプト作成者があなたのアプリケーションを大いに活用できるチャンスが増えます。アプリケーションとともにサンプルスクリプトを添付することもおすすめします。スクリプト作成者が用語説明の癖を理解することにもつながり、効果的なスクリプトの利用方法を示すことができます。
|