Heart では、プラグイン機構を使って新たなタグを追加したり、本体の動きに合わせて何らかの反応を付加することができます。
Heart Plug-in の実体は、IDispatch インターフェースを継承した ActiveX DLL です。VisualBasic や Delphi 、C++Builder、Visual C++ など、COM/ActiveX をサポートしている開発環境で作成可能です。
aaa という識別名の Heart Plug-in が追加できるタグの書式を正規表現で表すと、{aaa\..*} となります。Heart Plug-in によって追加されたタグのうち、基本タグと同じ扱いを受けるものを Plug-in 基本タグ、拡張タグと同じ扱いを受けるものを Plug-in 拡張タグ、と呼ぶことにします(現時点では、 Plug-in 拡張タグは実装されていません)。
Heart Plug-in の実体は、IDispatch インターフェースを継承した ActiveX DLL です。Heart 実行環境は、既定のファイル(Windows 版 Heart であれば、Heart.exe と同じフォルダにある Plugins.txt)の各行に記述された ProgID のオブジェクトのインスタンスを作成します。また、その ProgID で表されるオブジェクトは、以下の public なメソッド及び、プロパティを実装する必要があります。
定義 | |
---|---|
IDL | HRESULT _stdcall ConfigurationDialog( void ); |
VisualBasic | Sub ConfigurationDialog() |
Delphi | procedure ConfigurationDialog; |
ConfigurationDialog メソッドは、各 Plug-in が保持する設定用ダイアログを開きます。
設定用ダイアログを保持しない、または必要ない場合は何も行わずにそのまま処理を返します。
定義 | |
---|---|
IDL | HRESULT _stdcall ExpandPluginTag([in] BSTR Tag, [out, retval] BSTR * Value ); |
VisualBasic | Function ExpandPluginTag(Tag As String) As String |
Delphi | function ExpandPluginTag(Tag: WideString): WideString; |
ExpandPluginTag メソッドは、Plug-in 拡張タグの展開に用いられ、返り値がそのまま、その Tag の返り値になります。引数 Tag は 'hogehogeAA|BB' というような形式の文字列で、{aaa.hogehogeAA|BB} を展開する際に、識別名 aaa として登録されている Plug-in の ExpandPluginTag メソッドが呼びだされます。各 Plug-in は、引数 Tag に応じて適切な値を返すようにします。
引数 Tag が無効な値であれば空文字列を返すようにし、Plug-in 拡張タグを使用しない場合は常に空文字列を返すようにします。
定義 | |
---|---|
IDL | HRESULT _stdcall GetPluginInfo([in] long InfoNo, [out, retval] BSTR * Value ); |
VisualBasic | Function GetPluginInfo(InfoNo As Long) As String |
Delphi | function GetPluginInfo(InfoNo: Integer): WideString; |
Heart 実行環境は、GetPluginInfo メソッドを通じて各 Plug-in の情報を取得します。各 Plug-in は、引数 InfoNo の値に応じて適切な値を返すようにします。現在の Heart において、InfoNo の値と期待される返り値の対応は以下の通りですが、今後要求する InfoNo の値が増える可能性もあります。また、他の環境で同じ対応が期待されているか否かは定かではありません。
InfoNo | 期待される返り値 |
---|---|
0 | Plug-in 識別名 {aaa.hogehoge} の aaa |
1 | タグ種別 「S」が含まれれば基本 Plug-in、「E」が含まれれば拡張 Plug-in を表す |
2 | バージョン識別文字列 |
3 | プラグインの機能説明文字列 |
定義 | |
---|---|
IDL | HRESULT _stdcall OnHeartEvent([in] BSTR EventName, [in, out] BSTR * Param ); |
VisualBasic | Sub OnHeartEvent(EventName As String, ByRef Param As String) |
Delphi | procedure OnHeartEvent(EventName: WideString; var Param: WideString); |
Heart 実行環境は、OnHeartEvent メソッドを通じて各 Plug-in に各種イベントの発生を通知します。イベントの種類は引数 EventName で識別され、引数 Param にはイベントに応じて様々な値がセットされます。各 Plug-in は、引数 Param を必要に応じて変更することが出来ます。Param が複数の値の場合は、'識別名=値' という文字列が '&' で区切られてセットされます。ただし、'識別名=値' という文字列がどのような順で区切られて並んでいるのかは、不定とします。また、この際、値に '&' または '%' が含まれる場合は、それぞれ '%26', '%25' に置換されています。Plug-in 側で必要に応じて復号してください。
現在の Heart において、EventName の値と Param の対応は以下の通りですが、今後追加されることもあります。また、この対応は Heart 実行環境それぞれに依存します。
EventName | Param | 状態 |
---|---|---|
HE_Initiaize | アプリケーションフルパス(apppath: 文字列) バージョン(version: 文字列) メインフォームのウィンドウハンドル(hwndmain: 整数値) |
Plug-in の初期化の際に、Heart 実行環境の情報を渡します。 |
HE_InitCharacter | 人格ファイルフルパス(charpath: 文字列) 人格名(charname: 文字列) |
新たな人格が生成されるたびに、その人格に関する情報を渡します。 |
HE_BeginThink | ユーザーの入力 | Think, ExpandTags 両メソッドを実行する前にユーザーの入力を Param に渡す。 |
HE_EndThink | 決定した返答 | Think, ExpandTags 両メソッドを実行して得られた返答を Param に渡す。 |
HE_BeginRespond | 出力する返答 | 返答の表示(文字送り)を開始する際に、各拡張タグを展開する前の返答を Param に渡す。 |
HE_EndRespond | 出力した返答 | 返答の表示(文字送り)が終了した際に、表示し終わった返答文字列を Param に渡す。 |
定義 | |
---|---|
IDL | HRESULT _stdcall SendData([out, retval] BSTR * Value ); |
VisualBasic | Property Get SendData As String |
Delphi | property SendData: WideString; |
SendData プロパティは、Plug-in 側から要求があった際に Heart 実行環境が参照する読み込み専用プロパティです。
将来の拡張のために用意されていますが、現在は使用されていないので、常に空文字列を返すように実装してください。
サンプルダウンロード (ソースのみ/LHa圧縮: 2KB) @2000/08/22
サンプルダウンロード (ソース、ActiveX DLL/LHa圧縮:191KB) @2000/08/22
猫語(?)変換プラグイン原型 (ソース、ActiveX DLL/LHa: 191KB) @2000/08/22