#author("2023-01-10T22:32:36+09:00;2023-01-09T12:52:55+09:00","default:post","post")
#author("2023-01-26T17:14:31+09:00","default:post","post")
SAORIについて。
簡単にいうとゴーストに機能を追加するプラグイン。dllやexe形式で提供されます。~
難しく言うとSHIORIから利用するプラグイン。見た目は関数っぽい何か。~
[[さおこれ:http://umeici.onjn.jp/etcetera/saoricollect.html]]、[[さおりん:http://priest.so.land.to/nisesakura/saorin.html]]など外部サイトも参照。

wiki内関連ページ:[[SAORI/YAYA]]、[[SAORI/YAYA/統合関数一覧]]

#br

----
#contents
----
~

*SAORIの使うには [#e97e5d17]
+ghost\master\saoriフォルダに、使いたいSAORIの本体を置く。
+satori_conf.txtの「@SAORI」以降の行に次のように書いて登録する。
 登録名,saori/SAORI本体のファイル名
+呼び出すには次のように書く。~
 (登録名[,引数n…])

登録名には好きな名前を付けられます。~
特に決まりはなく、そのSAORIの名前をそのまま使ったり、短縮したものなど、自分が把握しやすいものがいいでしょう。~
呼び出す方法は、関数のそれと全く同じです。~
引数が必要ないSAORIなら、(登録名)だけでOK。~


**使用例 [#q0b35880]
MIYさんのmciaudio.dllを組み込む例。

-satori_conf.txtの「@SAORI」以降の行に、次のように書いて登録する
 mciaudio,saori/mciaudio.dll

-辞書内の使いたい箇所で、次のように書く
 (mciaudio,load,鳥の詩.mp3)(mciaudio,play)


**tips [#s355e1f8]
-SAORI本体はsaoriフォルダ以外に置く事もできます。~
登録時の「saori/」はsaoriフォルダを指しているので、これを削除するとghost\masterになる他、自分で好きなフォルダを作って指定するのもありです。

-登録名に区切り文字をそのまま使う事はできませんが、[[特殊変数]]の[[引数区切り追加・削除>特殊変数#f7ace755]]を行使すれば一応は可能。

-「@SAORI」であらかじめ引数付きで設定しておくことも可能で、
 曲読み込み,saori/mciaudio.dll,load
 演奏,saori/mciaudio.dll,play
上のように宣言した場合は下記のように呼び出しできるようになります。
 (曲読み込み,鳥の詩.mp3)(演奏)


**SAORI使用説明書の補足 [#v8804428]
配布されているさおり同梱の説明は里々以外の栞に向けて書かれている事が多いので、ちょっと補足。

:Argument|これはSAORIの引数です。~
「第○パラメータ」と書かれてる事もあります。~
里々では引数1,引数2...と指定します。~
 (登録名,Argument0,Argument1,…)

:Value|SAORIからの返り値です。~
里々ではValue0なら(S0)、Value1なら(S1)…と書いて取得します。~

:ウィンドウハンドル(HWND)|引数にウィンドウハンドルを要求するSAORIもあります。後述しますが、大抵は(本体ハンドル0)を使えばOK。 


//**SAORI-basicのタイムアウト [#i42ff11c]
//里々ではSAORI-basicも標準でuniversalと区別無く使用できる様になっていますが、タイムアウトが設定されている為スグに値を返さない物はタイムアウトエラーになります。回避する方法としては[[ClearBrain Systemsさん>http://homepage3.nifty.com/khsoft/cbs/software/]]の、SAORI "Basic" Proxy DLLを使用して下さい。 


*使用テクニック [#yfe6af59]

**同期呼び出し [#va25c823]
関数はもちろん、SAORIの呼び出しも例外なく、&color(red){そのトークが呼ばれた時点で実行されます};。~
なので、トークを再生中のあるタイミングでSAORIを実行させたい場合、文中にただ書いただけではダメ。~
これを実現するには二つの方法があります。~
どちらも@SAORIに
>fill_desktop,saori/fill_desktop.dll~
fill_red,saori/fill_desktop.dll,255,0,0

が設定されているとします。

:[[sync関数>関数一覧#sync]]|里々で用意されたsync関数を使う方法。~
 :3・2・1・(sync,fill_red)はい!\w9\w9
 (sync,fill_desktop)びっくりした?\w9\w9

:\![raise,]|さくらスクリプトの\![raise,~]を使い、任意のタイミングで別のセクションを呼ぶ方法。~
 *
 :3・2・1・\![raise,塗りつぶし]はい!\w9\w9
 \![raise,塗りつぶし解除]びっくりした?\w9\w9
 
 *塗りつぶし
 (fill_red)
 
 *塗りつぶし解除
 (fill_desktop)

これで想定したタイミングで発生します。~
戻り値は捨てられます。挿入されたりはしません。~


*ウィンドウハンドル [#y04ba362]
ウィンドウハンドルの通知時に *hwnd が呼ばれます。~
ここで変数に保存するか、SAORIに直接渡しましょう。~
(R0)には本体ウィンドウ、(R1)にはバルーンウィンドウのハンドルが入ります。~
それぞれ、\0,\1,\2...(\2以降はCROW/SSP限定)のハンドルがバイト値1で区切られたもの。~
これをsplitで分割して、目的のウィンドウハンドルを得る事になります。~

例
 *hwnd
 (split,(R0),(sprintf,%c,1))
 $本体ハンドル0=(S0)
 $本体ハンドル1=(S1)
 (split,(R1),(sprintf,%c,1))
 $バルーンハンドル0=(S0)
 $バルーンハンドル1=(S1)
 
 #\0・\1の本体・バルーンのハンドルを変数に保存する。~
 #この変数をハンドルを必要とするさおり呼び出しに使用する。~
 #(S2)以降を参照することで\2以降のハンドルも取得できるが、~
 #ウィンドウが初期化されていない場合無効なハンドルが~
 #渡されてくるかもしれない。(未検証)~



*引数がSAORIで処理する前に計算されてしまうのを防ぐ [#t7c441c9]
例えばこう記述して「1+1+1」内の「+」を消そうとすると 

 (erase、1+1+1、+)

「1+1+1」がerase処理前に計算され、「111」ではなく「3」という結果が出てしまう。~
計算されなくても全角数字にが勝手に半角になってしまい困る場合もある。~
これを防ぐには、[[特殊変数]]の[[$SAORI引数の計算>特殊変数#hedbd483]]を使おう。~

 $SAORI引数の計算【タブ】無効

ただし、これを無効にしたままだと他のSAORIが正常に動かなくなる可能性があるので、用が済んだら「$SAORI引数の計算【タブ】自動」に戻すようにしよう。

 $SAORI引数の計算【タブ】有効
 計算する。
 $SAORI引数の計算【タブ】無効
 計算しない。
 $SAORI引数の計算【タブ】自動
 各引数の先頭文字が数値または+、-記号のいずれかであれば計算する。
 何も指定しなければこれ。今までと同じ動作。


*SHIORIをSAORIとして使う [#u7dc7b4e]
栞(SHIORI)の中には、SAORIとしても使えるようになっているものもあります。~
特に文/YAYAや華和梨を使ってその関数を借りれば、里々の簡単さを損なわないままに、できる事を大幅に拡張する事ができます。~

**文/YAYA [#ne1f08da]
詳しくは[[SAORI/YAYA]]へ。YAYAの持つ正規表現などの多数の関数やファイル・フォルダ操作を利用できます。

**灯 [#tee642d7]
YAYA as SAORI と同じノリで作られています。ダウンロード→[[AKARI as SAORI>https://github.com/nikolat/akari-as-saori/releases]]~
マウスカーソルを自在に操る等、YAYAとは明らかに違う灯独自の関数を堪能できて楽しいと思います。

**華和梨 [#m16a41ab]
[[華和梨>https://kawari.github.io/]]の多数の関数(KIS)を利用できます。配列変数の処理に強いのが特徴。~
システムについては[[華和梨ユーザーズマニュアル>https://kawari.github.io/8.2.5/users.html]]を参照のこと。~
詳しくは[[SAORI/華和梨]]へ。

-必要なファイル~
以下の二つをセットにし、satori_conf.txtにて他のSAORIと同じように登録します。~
ファイル名がshiori.dllなので、分かり難いとか被りやすいとか思ったらファイル名だけkawari.dllのように変えてしまうのも手です。
||BGCOLOR(white):|c
|shiori.dll|華和梨本体。|
|kawarirc.kis|華和梨の初期辞書。本体と同じフォルダに置くこと。|

#br
-SAORIとして使う時のエントリ
||BGCOLOR(white):|c
|System.Callback.OnSaoriExecute|saoriとして呼び出された時に評価される。|
|System.Request.Argument0|引数が格納されている(末尾数値で1,2,3...と対応)。|
|System.Response.Result|返したい結果及びスクリプトをセットするエントリ。|
|System.Response.Value0|追加情報をセットするエントリ(末尾数値で1,2,3...と対応)。&br;里々側は[[(S○)>情報取得変数#udf5ebeb]]で受け取る。|
|System.Response|ステータスコードをセットするエントリ。|

#br
-kawarirc.kisの書き方
 System.Callback.OnSaoriExecute : $(
 	entry ${System.Request.Argument0};
 	setstr System.Response.Result ${返したい結果及びスクリプト};
 	setstr System.Response ${ステータスコード};
 )

この例では第一引数のイベントを呼び出す。~
返すべきステータスコードは200(正常+戻り値あり)、204(正常+戻り値なし)、400(おかしい)から選ぶ。上記ユーザーズマニュアル参照。

#br

***KAWARI as SAORI セット一例 [#v2358e2f]

-kawarirc.kis
 =kis
 	# おまじない
 	clear System.Callback.OnSaoriExecute;
 	cleartree Kawari;
 =end
 
 System.Callback.OnSaoriExecute : $(
 	entry Kawari.${System.Request.Argument0};
 )
 
 Kawari.元旦からの通算日 : $(
 	setstr System.Response.Result $(date %J);
 	setstr System.Response 200;
 )

-satori_conf.txt (saoriフォルダに本体とkawarirc.kisを置いた場合)
 @SAORI
 kawari,saori/shiori.dll

-里々からの呼び出し方
 (kawari,元旦からの通算日)

**里々 [#zc3779b1]
里々自体もさおりとして使うことができます。詳しくは[[SAORI/里々]]へ。~
satoriで登録したならば、(satori,起動)のようにして使えます。この時、引数の間にスペースが入ってはいけません。~
最初から使える関数以外の定義(例えば上記の"起動")は自分で里々形式のスクリプトを書き、さおりと同じフォルダに配置しなければなりません。~

**忍 [#pd91eb94]
忍をさおりとして使用する際には特別必要なものはありません。~
shinoで登録したならば、(shino, get, OnBoot)のようにgetというコマンドを使います。~
OnBoot等の定義は自分で忍形式のスクリプトを書き、さおりと同じフォルダに配置しなければなりませんが、サンプルとなるゴーストが既にダウンロードできない状態のようですので利用は難しいと思います。~

**里珠 [#t5677c61]
里珠をさおりとして使うためには、別途さおりとして扱うためのスクリプトが必要ですが、現在のところ公開されているものはないようです。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS