SAORI/YAYA
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[YAYA>https://emily.shillest.net/ayaya/]]を[[SAORI]]とし...
YAYA as SAORIを使うと、YAYAの持つ正規表現などの多数の関数...
里々の関数機能を大幅に拡張できると言えば分かりやすい。~
里々では作る事が難しい処理をYAYA側で処理させるといった事...
----
#contents
----
*使い方 [#d8554eb3]
+ここ([[文屋>https://emily.shillest.net/ayaya/index.php?...
+解凍した yaya_saori フォルダから、ayasaori.aym, builtins...
なお aymファイルはテキストファイルなのでテキストエディタ...
+自ゴーストの [[satori_conf.txt>ファイル構成#j3e3ee70]] ...
aya,saori/yaya.dll
よく使う関数は関数別に登録すると良いかもです、以下は定義例~
strstr,saori/yaya.dll,STRSTR
参考→postic [[AYA as SAORI向け簡易解説>http://navy.nm.lan...
*YAYA最新版へ入れ換え [#ya9cfc29]
YAYA as SAORI に入っている YAYA 本体が古い場合は、必要に...
*里々で使うにあたっての注意 [#b79efa2a]
里々の文法との相性などが理由で、予期せぬ動作の原因となる...
**FREAD関数 [#y05c89f9]
バグ、と言う訳ではありませんが里々では全角丸括弧など特殊...
これを防ぐために関数の帰り値としてではなく、配列戻り値[[...
改造前
if GETTYPE(_result) == 1
RES.VALUE0 = "EOF"
else
RES.RESULT = _result
改造後、里々側のファイルエンド検出の処理とか変える必要が...
if GETTYPE(_result) == 1
RES.RESULT = 0
else {
RES.RESULT = 1
RES.VALUE0 = _result
}
参考→[[文wiki「文屋」 FREAD関数>https://emily.shillest.ne...
**FENUM関数 [#xf845465]
ファイル名にはカンマ類はすべて使用可能なため区切り文字は...
※ファイル名に(1)のような全角丸括弧数字入りとか入ってい...
参考→[[文wiki「文屋」 FENUM関数>https://emily.shillest.ne...
*ユーザー関数 [#k6679904]
**ユーザー関数の作り方 [#adf1615a]
-ユーザー関数は関数を builtins.aym に追記するか、任意の a...
aym ファイルはテキストファイルですのでメモ帳等で編集でき...
-里々から saori の呼び出し時に渡した引数は、ユーザ関数内...
-関数戻り値は RES.RESULT に値を代入します、配列戻り値(※...
参考~
[[文wiki「文屋」 YAYA as SAORI>https://emily.shillest.net...
[[文wiki「文屋」 里々からYAYAへ移行する>https://emily.shi...
**文字列比較関数 [#bd4c0810]
文字列比較するだけの関数、[[compare>関数一覧#compare]]が...
追記:問題回避には[[equal>関数一覧#equal]]が追加されたの...
compare
{
if ARRAYSIZE(REQ.ARGS) < 2 {
LOGGING("compare: 引数が不足しています")
-1
return
}
RES.RESULT = REQ.ARGS[0] == REQ.ARGS[1]
}
里々側使用例
*
:(aya,compare,==,==)
**里々変数名列挙関数 [#pd38cb7b]
里々で使用している変数名を列挙する関数
// 里々のsatori_savedata.txtから変数名リストを取得、
// この関数を実行する前に里々側で$手動セーブ【タブ】実...
// 返り値は変数の数、S0以降に変数名を格納
GetSatoriVarList
{
_FileName = '..\satori_savedata.txt'
_i = 0
_charset = 'Shift_JIS'
FCHARSET(_charset)
if !FOPEN(_FileName, 'r') {
RES.RESULT = -1
return
}
while 1 {
if (_s = FREAD(_FileName)) == -1; break
// 先頭行は"*セーブデータ"なので飛ばす($が見つから...
// 2行目以降は先頭1文字($)を削る
_n = STRSTR(_s,'$',0)
if _n == -1 { continue }
else { _s = SUBSTR(_s,1,STRLEN(_s) -1) }
// 変数の値(TAB以降)を削る
_n = STRSTR(_s,CHR(0x09),0)
if _n > 0 { _s = SUBSTR(_s,0,_n) }
// 格納
LETTONAME("RES.VALUE%(_i)", _s)
_i++
}
FCLOSE(_FileName)
RES.RESULT = _i -1
}
里々側のOnDestroyイベントで下記の様にするとゴースト終了時...
例では頭文字がアンダーバーの変数を削除しています。(YAYA...
*OnDestroy
$手動セーブ【タブ】実行
$,【タブ】(バイト値,1)
\0(nop,(aya,GetSatoriVarList))(for、0、(Sの数)-1...
$,【タブ】
#変数名の頭文字が_アンダーバーなら削除
*fncVarClear
>fncVarClear.exit【タブ】(compare_head(,)(S(A0...
$(S(A0))【タブ】
*fncVarClear.exit
**ソート関数 [#d975740e]
バイト値1区切りの文字列をソートして返します、クイックソ...
追記:yayaにASORT関数が追加されたのでそちらを使ったほうが...
~
YAYA as SAORI 側に追加するユーザー関数
sort
{
if ARRAYSIZE(REQ.ARGS) < 1 {
LOGGING("Sort: 引数が不足しています")
-1
return
}
arX = SPLIT(REQ.ARGS[0],CHR(0x01))
_x = quicksort(0,ARRAYSIZE(arX)-1)
_s = ""
for _i = 0; _i < ARRAYSIZE(arX); _i++ {
if (_i > 0) { _s = _s + CHR(0x01) }
_s = _s + arX[_i]
}
RES.RESULT =_s
ERASEVAR("arX")
}
quicksort
{
_first = _argv[0]
_last = _argv[1]
if (_first == _last) { return }
_p = pivot(_first,_last)
if (_p != -1) {
_k = partition(_first,_last,arX[_p])
quicksort(_first,_k-1)
quicksort(_k,_last)
}
}
pivot
{
_i = _argv[0]
_j = _argv[1]
_k = _i + 1
while (_k <= _j && arX[_i] == arX[_k]) { _k++ }
if (_k > _j) {
-1
return
}
if (arX[_i] >= arX[_k]) { _i } else { _k }
}
partition
{
_i = _argv[0]
_j = _argv[1]
_x = _argv[2]
_l = _i
_r = _j
while (_l <= _r) {
while (_l <= _j && arX[_l] < _x) { _l++ }
while (_r >= _i && arX[_r] >= _x) { _r-- }
if (_l > _r) { break }
_t = arX[_l]
arX[_l] = arX[_r]
arX[_r] = _t
_l++
_r--
}
_l
return
}
里々側で使う時の書式~
(aya,sort,[バイト値1区切りの文字列])
使用例
*
$s【タブ】C(バイト値,1)Z(バイト値,1)E2(バイト値,1...
:\_qデータ:(s)
結 果:(aya,sort,(s))\_q\x
使い所はOnFileDrop2で複数ファイルドロップ時のファイルのソ...
**里々文字列変換 [#n744a43a]
里々でユーザー入力やファイル読み込み等で外部から文字列を...
[[()>特殊記号一覧#na7d3d63]]は文字列処理するために関数...
[[#>特殊記号一覧#h0533f16]]は変数に入れてセーブデータと...
参考→[[困ったときの対処法>困ったときの対処法#i30d21bd]]~
~
上記問題を次の二つの関数を使用する事で回避します。
-satoristrenc関数:"(", ")", "#"をバイト値3+半角文字...
-satoristrdec関数:バイト値3+半角文字を全角文字に戻しま...
// 文字列中の全角丸括弧及び全角#がある場合バイト値3+...
satoristrenc
{
if ARRAYSIZE(REQ.ARGS) < 1 {
LOGGING("satoristrenc: 引数が不足しています")
-1
return
}
RES.RESULT = REPLACE(REPLACE(REPLACE(REQ.ARGS[0],"(",C...
}
// 文字列中のバイト値3+"(" or ")" or "#"を全角文字に変...
// そのまま関数返り値で返すと里々が括弧展開するので配列...
satoristrdec
{
if ARRAYSIZE(REQ.ARGS) < 1 {
LOGGING("satoristrdec: 引数が不足しています")
-1
return
}
RES.RESULT = ""
RES.VALUE0 = REPLACE(REPLACE(REPLACE(REQ.ARGS[0],CHR(0x...
}
''使用例''~
ファイル名に(1)などを含むファイルをドラッグ&ドロップ...
satoristrenc関数で変換してからreplace関数を通せば全角丸括...
全角丸括弧に戻す時はsatoristrdec関数を実行、関数返り値は...
*OnFileDrop2
$,【タブ】(バイト値,2)
$引数区切り追加【タブ】(,)
$FileName1【タブ】(aya(,)satoristrenc(,)(R0))
$FileName2【タブ】(replace(,)(FileName1)(,)\(,...
:\_q\_!(R0)\_!
\_!(FileName1)\_!
\_!(aya(,)satoristrdec(,)(FileName1))(S0)\_!
\_!(aya(,)satoristrdec(,)(FileName2))(S0)\_!
\_q
*関連外部リンク [#wa07845e]
-文屋 [[YAYA>https://emily.shillest.net/ayaya/index.php?Y...
-postic [[yaya as saori>http://navy.nm.land.to/post/]]
終了行:
[[YAYA>https://emily.shillest.net/ayaya/]]を[[SAORI]]とし...
YAYA as SAORIを使うと、YAYAの持つ正規表現などの多数の関数...
里々の関数機能を大幅に拡張できると言えば分かりやすい。~
里々では作る事が難しい処理をYAYA側で処理させるといった事...
----
#contents
----
*使い方 [#d8554eb3]
+ここ([[文屋>https://emily.shillest.net/ayaya/index.php?...
+解凍した yaya_saori フォルダから、ayasaori.aym, builtins...
なお aymファイルはテキストファイルなのでテキストエディタ...
+自ゴーストの [[satori_conf.txt>ファイル構成#j3e3ee70]] ...
aya,saori/yaya.dll
よく使う関数は関数別に登録すると良いかもです、以下は定義例~
strstr,saori/yaya.dll,STRSTR
参考→postic [[AYA as SAORI向け簡易解説>http://navy.nm.lan...
*YAYA最新版へ入れ換え [#ya9cfc29]
YAYA as SAORI に入っている YAYA 本体が古い場合は、必要に...
*里々で使うにあたっての注意 [#b79efa2a]
里々の文法との相性などが理由で、予期せぬ動作の原因となる...
**FREAD関数 [#y05c89f9]
バグ、と言う訳ではありませんが里々では全角丸括弧など特殊...
これを防ぐために関数の帰り値としてではなく、配列戻り値[[...
改造前
if GETTYPE(_result) == 1
RES.VALUE0 = "EOF"
else
RES.RESULT = _result
改造後、里々側のファイルエンド検出の処理とか変える必要が...
if GETTYPE(_result) == 1
RES.RESULT = 0
else {
RES.RESULT = 1
RES.VALUE0 = _result
}
参考→[[文wiki「文屋」 FREAD関数>https://emily.shillest.ne...
**FENUM関数 [#xf845465]
ファイル名にはカンマ類はすべて使用可能なため区切り文字は...
※ファイル名に(1)のような全角丸括弧数字入りとか入ってい...
参考→[[文wiki「文屋」 FENUM関数>https://emily.shillest.ne...
*ユーザー関数 [#k6679904]
**ユーザー関数の作り方 [#adf1615a]
-ユーザー関数は関数を builtins.aym に追記するか、任意の a...
aym ファイルはテキストファイルですのでメモ帳等で編集でき...
-里々から saori の呼び出し時に渡した引数は、ユーザ関数内...
-関数戻り値は RES.RESULT に値を代入します、配列戻り値(※...
参考~
[[文wiki「文屋」 YAYA as SAORI>https://emily.shillest.net...
[[文wiki「文屋」 里々からYAYAへ移行する>https://emily.shi...
**文字列比較関数 [#bd4c0810]
文字列比較するだけの関数、[[compare>関数一覧#compare]]が...
追記:問題回避には[[equal>関数一覧#equal]]が追加されたの...
compare
{
if ARRAYSIZE(REQ.ARGS) < 2 {
LOGGING("compare: 引数が不足しています")
-1
return
}
RES.RESULT = REQ.ARGS[0] == REQ.ARGS[1]
}
里々側使用例
*
:(aya,compare,==,==)
**里々変数名列挙関数 [#pd38cb7b]
里々で使用している変数名を列挙する関数
// 里々のsatori_savedata.txtから変数名リストを取得、
// この関数を実行する前に里々側で$手動セーブ【タブ】実...
// 返り値は変数の数、S0以降に変数名を格納
GetSatoriVarList
{
_FileName = '..\satori_savedata.txt'
_i = 0
_charset = 'Shift_JIS'
FCHARSET(_charset)
if !FOPEN(_FileName, 'r') {
RES.RESULT = -1
return
}
while 1 {
if (_s = FREAD(_FileName)) == -1; break
// 先頭行は"*セーブデータ"なので飛ばす($が見つから...
// 2行目以降は先頭1文字($)を削る
_n = STRSTR(_s,'$',0)
if _n == -1 { continue }
else { _s = SUBSTR(_s,1,STRLEN(_s) -1) }
// 変数の値(TAB以降)を削る
_n = STRSTR(_s,CHR(0x09),0)
if _n > 0 { _s = SUBSTR(_s,0,_n) }
// 格納
LETTONAME("RES.VALUE%(_i)", _s)
_i++
}
FCLOSE(_FileName)
RES.RESULT = _i -1
}
里々側のOnDestroyイベントで下記の様にするとゴースト終了時...
例では頭文字がアンダーバーの変数を削除しています。(YAYA...
*OnDestroy
$手動セーブ【タブ】実行
$,【タブ】(バイト値,1)
\0(nop,(aya,GetSatoriVarList))(for、0、(Sの数)-1...
$,【タブ】
#変数名の頭文字が_アンダーバーなら削除
*fncVarClear
>fncVarClear.exit【タブ】(compare_head(,)(S(A0...
$(S(A0))【タブ】
*fncVarClear.exit
**ソート関数 [#d975740e]
バイト値1区切りの文字列をソートして返します、クイックソ...
追記:yayaにASORT関数が追加されたのでそちらを使ったほうが...
~
YAYA as SAORI 側に追加するユーザー関数
sort
{
if ARRAYSIZE(REQ.ARGS) < 1 {
LOGGING("Sort: 引数が不足しています")
-1
return
}
arX = SPLIT(REQ.ARGS[0],CHR(0x01))
_x = quicksort(0,ARRAYSIZE(arX)-1)
_s = ""
for _i = 0; _i < ARRAYSIZE(arX); _i++ {
if (_i > 0) { _s = _s + CHR(0x01) }
_s = _s + arX[_i]
}
RES.RESULT =_s
ERASEVAR("arX")
}
quicksort
{
_first = _argv[0]
_last = _argv[1]
if (_first == _last) { return }
_p = pivot(_first,_last)
if (_p != -1) {
_k = partition(_first,_last,arX[_p])
quicksort(_first,_k-1)
quicksort(_k,_last)
}
}
pivot
{
_i = _argv[0]
_j = _argv[1]
_k = _i + 1
while (_k <= _j && arX[_i] == arX[_k]) { _k++ }
if (_k > _j) {
-1
return
}
if (arX[_i] >= arX[_k]) { _i } else { _k }
}
partition
{
_i = _argv[0]
_j = _argv[1]
_x = _argv[2]
_l = _i
_r = _j
while (_l <= _r) {
while (_l <= _j && arX[_l] < _x) { _l++ }
while (_r >= _i && arX[_r] >= _x) { _r-- }
if (_l > _r) { break }
_t = arX[_l]
arX[_l] = arX[_r]
arX[_r] = _t
_l++
_r--
}
_l
return
}
里々側で使う時の書式~
(aya,sort,[バイト値1区切りの文字列])
使用例
*
$s【タブ】C(バイト値,1)Z(バイト値,1)E2(バイト値,1...
:\_qデータ:(s)
結 果:(aya,sort,(s))\_q\x
使い所はOnFileDrop2で複数ファイルドロップ時のファイルのソ...
**里々文字列変換 [#n744a43a]
里々でユーザー入力やファイル読み込み等で外部から文字列を...
[[()>特殊記号一覧#na7d3d63]]は文字列処理するために関数...
[[#>特殊記号一覧#h0533f16]]は変数に入れてセーブデータと...
参考→[[困ったときの対処法>困ったときの対処法#i30d21bd]]~
~
上記問題を次の二つの関数を使用する事で回避します。
-satoristrenc関数:"(", ")", "#"をバイト値3+半角文字...
-satoristrdec関数:バイト値3+半角文字を全角文字に戻しま...
// 文字列中の全角丸括弧及び全角#がある場合バイト値3+...
satoristrenc
{
if ARRAYSIZE(REQ.ARGS) < 1 {
LOGGING("satoristrenc: 引数が不足しています")
-1
return
}
RES.RESULT = REPLACE(REPLACE(REPLACE(REQ.ARGS[0],"(",C...
}
// 文字列中のバイト値3+"(" or ")" or "#"を全角文字に変...
// そのまま関数返り値で返すと里々が括弧展開するので配列...
satoristrdec
{
if ARRAYSIZE(REQ.ARGS) < 1 {
LOGGING("satoristrdec: 引数が不足しています")
-1
return
}
RES.RESULT = ""
RES.VALUE0 = REPLACE(REPLACE(REPLACE(REQ.ARGS[0],CHR(0x...
}
''使用例''~
ファイル名に(1)などを含むファイルをドラッグ&ドロップ...
satoristrenc関数で変換してからreplace関数を通せば全角丸括...
全角丸括弧に戻す時はsatoristrdec関数を実行、関数返り値は...
*OnFileDrop2
$,【タブ】(バイト値,2)
$引数区切り追加【タブ】(,)
$FileName1【タブ】(aya(,)satoristrenc(,)(R0))
$FileName2【タブ】(replace(,)(FileName1)(,)\(,...
:\_q\_!(R0)\_!
\_!(FileName1)\_!
\_!(aya(,)satoristrdec(,)(FileName1))(S0)\_!
\_!(aya(,)satoristrdec(,)(FileName2))(S0)\_!
\_q
*関連外部リンク [#wa07845e]
-文屋 [[YAYA>https://emily.shillest.net/ayaya/index.php?Y...
-postic [[yaya as saori>http://navy.nm.land.to/post/]]
ページ名: