レゴキチ/里々自作関数まとめ
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
*始めに [#e1bffa94]
-&color(#ff0000){''※注意!ここの情報は古いです!「SATORI ...
-自分で書いたスクリプトを貼っておくところです。
-整備班の最新版の里々+ssu.dllの使用が前提です。偽林檎等に...
-基本メモなのでバグ率高いです。
-何かの参考になったら幸いです。
*暫定まとめサイト [#n9c6c162]
里々を120%使い倒すかも知れない場所。(書きかけで力尽...
http://www5.pf-x.net/~legokichi/nar/satori.html
*もくじ [#o0b81ab9]
#contents
*里々での関数製作の基本 [#x30f926e]
-里々では内側の括弧の中身から実行される。これは重要。~
-括弧内の行頭タブと末尾の改行は無視される。行頭半角スペー...
**括弧で呼び出せるもの。 [#tdc3040a]
-[[レゴキチ/里々まとめ]]参照。
**システム変数について [#v075125c]
***(R0) [#k7f7807c]
-※ローカル変数
SSTPのリクエストに含まれる(Reference0)を簡易的に取得で...
-真偽判定
-(変数「R0」の存在):存在した場合真
-(is_empty,(R0)):存在しない場合真
-(Rの数):リファレンスの総数。1オリジン。
***(A0) [#me53f4b1]
call関数で呼び出されたあらゆる対象に対して付く引数。~
-※プライベート変数
-(call,hoge)だと(A0)はNull。~
-(is_empty,(A0))で真偽を確かめられる。
-(hoge)だと(A0)はNotFound。文字列になる。~
***(S0) [#b75a1559]
-※トーク処理まで保持されるグローバル変数。
SAORIからの返り値。~
(変数「S0」の存在)で真偽を確かめられる。
***(H0) [#l68b0e99]
単語の再呼び出し。
(変数「H0」の存在)で真偽を確かめられる?←要検証
**関数呼び出し(call)について [#p68059aa]
replace.txtに
(関数名【タブ】(call,関数名
と書けば関数名だけで呼び出しが可能になる。~
だが、callの引数区切りがreplace.txtに書いたモノに固定され...
あとは関数内で(replace)を使って括弧展開したときとか。
***単語群「SAORI」に書き込んだら? [#a65c04f0]
未検証。~
おそらくSAORI呼び出しエラーが出ると思われる。
***反則。 [#o3fec0e9]
replace.txt内
(【タブ】(call,
そんなことをすれば海が汚染されるぞ!
**引数区切りについて [#p844c7ba]
里々はデフォルトで「、」「、」「,」「,」「バイト値1」が...
しかし、全半角文字では文字列処理のときに誤爆するので通常...
「バイト値1」「バイト値2」はSSTPのヘッダに含まれて...
ということで「バイト値4」「バイト値5」に引数区切り。~
「バイト値1」「バイト値2」「バイト値3」を簡易配列区切...
と考えている。
*if [#k31ee03d]
基本
(
if
,条件式
,真の場合表示する文字列
,偽の場合表示する文字列
)
これを他の一般的なプログラミング言語と混同してはならない。
(
if
,(i)==1
,(set,i,0)
,(set,i,1)
)
上記のような場合、~
まず条件式の変数「i」が展開されて、~
次に変数「i」の値が0になり、~
さらにに変数「i」の値が1になった上で、~
最後にif関数が実行される。~
結果、変数「i」は真偽に関わらず必ず1が代入され、~
set関数は返り値を持たないためif関数は何も返さない。~
if文の評価の後でset関数を使用したい場合下記のように書く必...
(
(
if
,(i)==1
,set、i、0
,set、i、1
)
)
このとき、if関数の引数区切りとset関数の引数区切りを違うも...
なぜなら、if関数とset関数の引数区切りが混同してしまうから...
しかしこの方法ではif関数の中で実行できる関数は常に1つとな...
if文のなかで複数の処理をしたい場合は下記のようなことも可...
(
replace
、(
replace
、(
if
,(i)==1
,[set、i、1][set、j、0]
,[set、i、0][set、j、1]
)
、[
、(han2zen,()
)
、]
、(han2zen,))
)
仮の括弧を後から置換して実行する方法。~
複雑なことも出来るが置換処理が割と重いのでお勧めできない。
それよりもこっちを推奨。ばらばらになるけど。~
(
(
if
,(i)==1
,処理1
,処理2
)
)
@処理1
(set,i,1)(set,j,0)
@処理2
(set,i,0)(set,j,1)
*ループ [#r1769ed4]
**for [#me457fca]
割と便利。~
(ループしたい単語群名カウンタ)で現在のループ回数も分か...
しかし偽林檎とかだと使えないらしい。~
(loop,括弧で呼び出すもの,初期値,終了値,増加量)
@括弧で呼び出すもの
(ループしたい処理)
***forの一般形 [#e954a6a0]
偽林檎対応?の代用loop関数
(call,for,括弧で呼び出すもの,初期値,終了値,増加量)
@for
(
(
unless
,(変数「(A0)カウンタ」の存在)
,set
,nop
)
,(A0)カウンタ
,(A1)
)(
(A0)
)(
set
,(A0)カウンタ
,(
calc
,((A0)カウンタ)+(A3)
)
)(
(
if
,((A0)カウンタ)<=(A2)
,call
,nop
)
,for
,(A0)
,(A1)
,(A2)
,(A3)
)(set,(A0)カウンタ,)
**while [#p8d4abc5]
条件が成り立つ間、再帰する。
***whileの一般形 [#od7ff921]
@while
(
hoge
)(
(
if
,条件式
,call
,nop
)
,while
,付加情報
)
*自作関数ライブラリ [#z78e2a2f]
動作は保証しかねます。
**FizzBuzz [#ra6bde86]
流行ったときに書いてみたやつ。
***変数でカウントするタイプ [#q23dccfb]
基本形。
@FizzBuzz
(set,n,
(if,(変数「n」の存在),(n)+1,1)
)(iflist
,0==
,(n)%3+(n)%5
,FizzBuzz
,(n)%3
,Fizz
,(n)%5
,Buzz
,(n)
)\n((if、(n)<100、FizzBuzz、set,n,))
***変数を使わないタイプ [#d30f24fd]
制限を大きめにしないと無限ループに陥る。
*OnKeyPress
$呼び出し回数制限 1000
:\_q(call,FizzBuzz,1,100)\_q
@FizzBuzz
(iflist
,0==
,(A0)%3+(A0)%5
,FizzBuzz
,(A0)%3
,Fizz
,(A0)%5
,Buzz
,(A0)
)\n(
(
if
,(A0)<(A1)
,call
,nop
)
,FizzBuzz
,(calc,(A0)+1)
,(A1)
)
***loop関数を使うタイプ [#g2863bb7]
一番楽。
*OnKeyPress
:\_q(loop,FizzBuzz,1,100)\_q
@FizzBuzz
(iflist
,0==
,(FizzBuzzカウンタ)%3+(FizzBuzzカウンタ)%5
,FizzBuzz
,(FizzBuzzカウンタ)%3
,Fizz
,(FizzBuzzカウンタ)%5
,Buzz
,(FizzBuzzカウンタ)
)\n
**単語群の内容を簡易配列にして返す[#b4900659]
(call,単語配列化,区切り文字列,単語群名)
(call,単語配列化,@,ドラえもん)→ドラえもん@のび太@し...
@単語配列化
(
set,単語群「(A1)」の重複回避,降順、トーク中
)(
loop,単語配列化2,(単語群「(A1)」の数)
)
@単語配列化2
((A1))(A0)
@ドラえもん
ドラえもん
のび太
しずか
ジャイアン
スネ夫
**リファレンス0から続く限りをバイト値1区切りで返す [#gfb...
(リファレンス全表示)
(リファレンス全表示)→1t8410
@リファレンス全表示
(
set,引数区切り追加,(sprintf,%c,5)
)(
call,リファレンス全表示2,0
) (
set,引数区切り削除,(sprintf,%c,5)
)
@リファレンス全表示2
(
(if
、(is_empty(sprintf,%c,5)(R(han2zen,(A0))))
、A1
、call
(sprintf,%c,5)リファレンス全表示2
(sprintf,%c,5)(calc,(A0)+1)
(sprintf,%c,5)(A1)(R(han2zen,(A0)))(s...
)
)
**現在の季節を表示する [#i0c4d445]
(季節)
(季節)→冬
@季節
(iflist
,1
,(現在月)<2,冬
,(現在月)<4,春
,(現在月)<7,夏
,(現在月)<10,秋
,冬
)
**callの引数の数を(強引に)調べる [#y6a3adeb]
(call,引数の数,引数1[,引数2[…,引数n]])
(call,引数の数,1,2,3,,,,,8)→8
@引数の数
(set,counter
,(calc
,(if
,(変数「counter」の存在)
,(counter)
,-1
)+1
)
)(set,result,
(calc,
(if
、(is_empty,(A(counter)))
、(if,(変数「result」の存在),(result),1)
、(counter)+1
)
)
)(
(if
,(counter)<(calc,(result)+5)
,引数の数
,result
)
)(set,counter,)(set,result,)
**大根2(OnGetValues)への対応 [#y48125a2]
##
#
# ゴーストの記憶しているキー(ラベル)名付きの変数や定...
# SHIORIイベントOnGetValuesで、R1以降に連想配列っぽく...
#
# R0:送信元
# R1以降:キー名
#
# 呼び出しの例
# \![raiseother,(FMO1name),OnRequestValues,(0name),...
#
*OnRequestValues
\![raiseother,(R0),OnGetValues,(FMO0name)(GetResp...
@GetResponseString
(loop,GetResponseString2,(calc,(Rの数)-1))
@GetResponseString2
(
if
(バイト値、1)(単語群「(R(GetResponseString2カウン...
(バイト値、1),(R(GetResponseString2カウンタ))=(...
)
**大根2(OnRequestValues)への対応。 [#ef4154f3]
このように格納する
$key[n]【タブ】key[n]の値~
$value[n]【タブ】value[n]の値~
※普通のゴーストさんには必要のないものです。
##
#
# OnRequestValuesで要求した連想配列の受け取り
# キー名と値を&で繋いだものをReferenceの1以降に格納す...
#
# R0:送信元
# R1以降:キー名と値を&で繋いだもの。key=value
#
*OnGetValues
:\b[2](R0)さんのスキャン結果。
(ResetGetValues)
(SetGetValues)
\_q(ShowGetValues)\_q
(ResetGetValues)
@SetGetValues
(loop,SetGetValues2,(calc,(Rの数)-1))
@SetGetValues2
(
nop
,(
split
(sprintf,%c,1)(R(SetGetValues2カウンタ))
(sprintf,%c,1)=
(sprintf,%c,1)2
)
)(
set
(sprintf,%c,1)key(SetGetValues2カウンタ)
(sprintf,%c,1)(if(sprintf,%c,1)(変数「S0」の存...
)(
set
(sprintf,%c,1)value(SetGetValues2カウンタ)
(sprintf,%c,1)(if(sprintf,%c,1)(変数「S1」の存...
)
@ShowGetValues
(set,n,1)(ShowGetValues2)(set,n,)
@ShowGetValues2
(
(
if
,(変数「key(n)」の存在)
,key(n)
,nop、
)
)\_l[40,](
(
if
,(変数「value(n)」の存在)
,value(n)
,nop、
)
)\n(
set
,n
,(calc,(n)+1)
)(
(
if
,(変数「key(n)」の存在)||(変数「value(n)」の存...
,ShowGetValues2
,nop、
)
)
@ResetGetValues
(set,n,1)(ResetGetValues2)(set,n,)
@ResetGetValues2
(
set
,key(n)
,
)(
set
,value(n)
,
)(
set
,n
,(calc,(n)+1)
)(
(
if
,(変数「key(n)」の存在)||(変数「value(n)」の存...
,ResetGetValues2
,nop、
)
)
**里々でソート [#s30e0f7a]
-作りかけ。
-最後の数列ソートをどうしていいのか分からない。
-とりあえず概念だけ書いておく。
replace.txt
【タブ】
<ー< (
>ー> )
*wを押した
$i
$sortう
$sortあ
$sortい
$sortえ
$sortお
(call,sort,う,あ,い,お,え)
@sort
\![raise,OnSatoriSort,(loop,sort2,0,(calc,(引数の数)...
@sort2
(A(han2zen,(sort2カウンタ)))(sprintf,%c,1)
@sort3
+(han2zen,<-<)変数「sort(A(han2zen,(sort3カウンタ...
@引数の数
(set,counter
,(calc
,(if
,(変数「counter」の存在)
,(counter)
,-1
)+1
)
)(set,result,
(calc,
(if
、(is_empty,(A(counter)))
、(if,(変数「result」の存在),(result),1)
、(counter)+1
)
)
)(
(if
,(counter)<(calc,(result)+5)
,引数の数
,result
)
)(set,counter,)(set,result,)
*OnSatoriSort
$i【タブ】(calc,(split,(R0),(sprintf,%c,1))-1)
>OnSatoriSort2
*OnSatoriSort2
$sort(S(han2zen,(i)))【タブ】(R1)
>OnSatoriSort3【タブ】(i)==0
$i【タブ】(calc,(i)-1)
>OnSatoriSort2
*OnSatoriSort3
$辞書リロード【タブ】実行
\![raise,OnSatoriSort4,(R0)]
この時点でのセーブデータ
$sortあ <ー<calc<ー<変数「sortう」の存在>ー>+<...
$sortい <ー<calc<ー<変数「sortう」の存在>ー>+<...
$sortう <ー<calc<ー<変数「sortう」の存在>ー>+<...
$sortえ <ー<calc<ー<変数「sortう」の存在>ー>+<...
$sortお <ー<calc<ー<変数「sortう」の存在>ー>+<...
「辞書リロード」時のれしばのログ
■SATORI::Load on G:\Program\SSP\ghost\scallion2\ghost\ma...
本体の所在: G:\Program\SSP\
OS種別: Windows 2000
モニタ: \\.\DISPLAY1 / (0,0,1280,600) / primary
プライマリデスクトップ: (0,0,1280,600)
仮想デスクトップ: (0,0,1280,600)
モニタは一つだけと判断、見切れ判定を呼び出し元に任せます。
loading satori_conf.txt... ok.
*初期化
return: \1
loading satori_savedata.txt... ok.
*セーブデータ
(変数「sortう」の存在)→0
(変数「sortあ」の存在)→0
(変数「sortい」の存在)→0
(変数「sortお」の存在)→0
(変数「sortえ」の存在)→0
(calc0+0+0+0+0)→0
$sortあ=0/written.
(変数「sortう」の存在)→0
(変数「sortあ」の存在)→1
(変数「sortい」の存在)→0
(変数「sortお」の存在)→0
(変数「sortえ」の存在)→0
(calc0+1+0+0+0)→1
$sortい=1/written.
(変数「sortう」の存在)→0
(変数「sortあ」の存在)→1
(変数「sortい」の存在)→1
(変数「sortお」の存在)→0
(変数「sortえ」の存在)→0
(calc0+1+1+0+0)→2
$sortう=2/written.
(変数「sortう」の存在)→1
(変数「sortあ」の存在)→1
(変数「sortい」の存在)→1
(変数「sortお」の存在)→0
(変数「sortえ」の存在)→0
(calc1+1+1+0+0)→3
$sortえ=3/written.
(変数「sortう」の存在)→1
(変数「sortあ」の存在)→1
(変数「sortい」の存在)→1
(変数「sortお」の存在)→0
(変数「sortえ」の存在)→1
(calc1+1+1+0+1)→4
$sortお=4/written.
*OnSatoriSort4
ここで(sortあ)~(sortお)の数の順にならべればソートが...
だがそこをどうすべきかわからない。
**里々で配列 [#e7beadb6]
***保存方法 [#sd95c181]
添え字=対応する値がバイト値3区切りで一つの変数に入ってい...
$array○○【タブ】value0(sprintf,%c,3)value1(sprintf,%...
-array_set
-array_get
-array_dell
これらの関数はこの変数の中身を切った貼ったする。
***代入 [#u5780435]
-添え字に対応する値を代入する
--$hoge[0] = "value0";
(call,array_set,配列名,添え字,対応する値)
#代入
@array_set
(
call
,(
if
,(変数「array(A0)」の存在)&&(A1)>=0
,array_set1
,array_set99
)
,(A0)
,(A1)
,(A2)
)
@array_set1
(
call
,(
if
,(count,(array(A0)),(sprintf,%c,3))>(A1)
,array_set2
,array_set3
)
,(A0)
,(A1)
,(A2)
,0
,
,(array(A0))
)
@array_set2
(
nop
,(
split
,_(A5)_
,(sprintf,%c,3)
,2
)
)(
call
,(
if
,(A1)==(A3)
,array_set4
,array_set2
)
,(A0)
,(A1)
,(A2)
,(calc,(A3)+1)
,(A4)(
if
,(A1)==(A3)
,(A2)
,(erase_first,(S0),_)
)(sprintf,%c,3)
,(reverse,(erase_first,(reverse,(S1)),_))
)
@array_set3
(
set
,array(A0)
,(array(A0))(
loop
,sprintf、%c、3
,(calc,(A1)-(count,(array(A0)),(sprintf,%...
)(A2)(sprintf,%c,3)
)
@array_set4
(
set
,array(A0)
,(A4)(reverse,(erase_first,(reverse,(S1)),_...
)
@array_set99
(
set
,array(A0)
,(
loop
,sprintf、%c、3
,(A1)
)(A2)(sprintf,%c,3)
)
***取得 [#p584b2b8]
-添え字に対応する値を取得する
--print $hoge[0];
(call,array_get,配列名,添え字)
#取得
@array_get
(
(
if
,(変数「array(A0)」の存在)
,call
,nop
)
,array_get1
,(A0)
,(A1)
,0
,(array(A0))
)
@array_get1
(
nop
,(
split
,_(A3)_
,(sprintf,%c,3)
,2
)
)(
call
,(
if
,(A1)==(A2)
,array_get2
,array_get1
)
,(A0)
,(A1)
,(calc,(A2)+1)
,(reverse,(erase_first,(reverse,(S1)),_))
)
@array_get2
(erase_first,(S0),_)
***削除 [#o97fa9fe]
-添え字とその値を削除
--undef $hoge[0];
(call,array_del,配列名,添え字)
-配列全てを削除
--undef @hoge;
(call,array_del,配列名)
#削除
@array_del
(
call
,(
if
,(is_empty,(A1))
,array_del99
,array_del1
)
,(A0)
,(A1)
)
@array_del1
(call,array_set,Value,(A1),)
@array_del99
(set,array(A0),)
**里々で連想配列 [#c81e3494]
***保存方法 [#sd95c181]
key=valueがバイト値3区切りで一つの変数に入っている。
$hash○○【タブ】key0=value0(sprintf,%c,3)key1=value1(...
-hash_set
-hash_get
-hash_dell
これらの関数はこの変数の中身を切った貼ったする。
***代入 [#u5780435]
-キーに対応する値を代入する
--$hoge{'key'} = "value";
(call,hash_set,連想配列名,キー,対応する値)
#代入
@hash_set
(
call
,hash_set(
if
,(変数「hash(A0)」の存在)
,1
,99
)
,(A0)
,(A1)
,(A2)
)
@hash_set1
(
nop
,(
split
,(hash(A0))
,(sprintf,%c,3)
)
)(
call
,hash_set2
,(A0)
,(A1)
,(A2)
,0
)
@hash_set2
(
call
,hash_set(
if
,(変数「S(han2zen,(A3))」の存在)
,(
if
,(
compare_head
,(S(han2zen,(A3)))
,(A1)
)
,3
,2
)
,98
)
,(A0)
,(A1)
,(A2)
,(calc,(A3)+1)
)
@hash_set3
(
set
,hash(A0)
,(
replace
,(hash(A0))
,(
if
,(
split
,(S(han2zen,(calc,(A3)-1)))
,=
,2
)==2
,(S0)=(S1)
,(S0)=
)
,(S0)=(A2)
)
)
@hash_set98
(
set
,hash(A0)
,(hash(A0))(A1)=(A2)(sprintf,%c,3)
)
@hash_set99
(
set
,hash(A0)
,(A1)=(A2)(sprintf,%c,3)
)
***取得 [#y9b04a3c]
-キーに対応する値を取得する
--print $hoge{'key'};
(call,hash_get,連想配列名,キー)
#取得
@hash_get
(
(
if
,(変数「hash(A0)」の存在)
,call
,nop
)
,hash_get1
,(A0)
,(A1)
)
@hash_get1
(
nop
,(split,(hash(A0))
,(sprintf,%c,3)
)
)(
call
,hash_get2
,(A0)
,(A1)
,0
)
@hash_get2
(
(
if
,(変数「S(han2zen,(A2))」の存在)
,call
,nop
)
,hash_get(
if
,(
compare_head
,(S(han2zen,(A2)))
,(A1)
)
,3
,2
)
,(A0)
,(A1)
,(calc,(A2)+1)
)
@hash_get3
(
if
,(
split
,(S(han2zen,(calc,(A2)-1)))
,=
,2
)==2
,(S1)
)
***削除 [#wd4af027]
-キーとその値を削除
--undef $hoge{'key'};
(call,hash_del,連想配列名,キー2)
-連想配列全てを削除
--undef %hoge;
(call,hash_del,連想配列名)
#削除
@hash_del
(
call
,hash_del(
if
,(is_empty,(A1))
,99
,1
)
,(A0)
,(A1)
)
@hash_del1
(
nop
,(
split
,(hash(A0))
,(sprintf,%c,3)
)
)(
call
,hash_del2
,(A0)
,(A1)
,(A2)
,0
)
@hash_del2
(
(
if
,(変数「S(han2zen,(A3))」の存在)
,call
,nop
)
,hash_del(
if
,(compare_head,(S(han2zen,(A3))),(A1))
,3
,2
)
,(A0)
,(A1)
,(A2)
,(calc,(A3)+1)
)
@hash_del3
(
set
,hash(A0)
,(
erase
,(hash(A0))
,(S(han2zen,(calc,(A3)-1)))
)
)
@hash_del99
(set,hash(A0),)
**replace_end [#r4f3e2fb]
replaceの一番最後の該当文字だけ置き換える版を自作してみた。
(call,replace_end,文字列,検索語,置換する語)
@replace_end
(
reverse
,(
replace_first
,(reverse,(A0))
,(reverse,(A1))
,(reverse,(A2))
)
)
**erase_end [#h731bbe7]
eraseの一番最後の該当文字だけ削除する版を自作してみた。
(call,erase_end,文字列,削除する語)
@erase_end
(
reverse
,(
erase_first
,(reverse,(A0))
,(reverse,(A1))
)
)
**split_end [#u151cf74]
splitのうしろから切っていく版を自作してみた。
(call,split_end,文字列,[分割文字列,[最大分割数]])
@split_end
(
split
,(reverse,(A0))
,(reverse,(A1))
,(A2)
)
(reverse,(S0))
仕様上、返り値が反転してしまうので元に戻すこと。
***ファイル名取得 [#i82d657b]
(call,ファイル名取得,ファイルパス)
@ファイル名取得
(
nop
,(
split
,(reverse,(A0))
,\
,2
)(
split
,(S0)
,/
,2
)
)(reverse,(S0))
***拡張子取得 [#ie5dd103]
(call,拡張子取得,ファイルパスorファイル名)
@拡張子取得
(
nop
,(
split
(バイト値,1)(reverse,(A0))
(バイト値,1).
(バイト値,1)2
)
)(reverse(バイト値,1)(S0))
**タグ消し [#n7571b2d]
(call,タグ消し,文字列,初めの部分,終わりの部分)
*htmlのタグ消去
(call(バイト値、1)タグ消し(バイト値、1)(HTML)(...
@タグ消し
(
call
(バイト値、1)(
if
,(count(バイト値、1)(A0)(バイト値、1)(A1))>1
,タグ消し
,タグ消し1
)(バイト値、1)(
nop
,(
split
(バイト値、1)(バイト値、3)(A0)
(バイト値、1)(A1)
(バイト値、1)2
)
)(S0)(
nop
,(
split
(バイト値、1)(S1)(バイト値、3)
(バイト値、1)(A2)
(バイト値、1)2
)
)(S1)
(バイト値、1)(A1)
(バイト値、1)(A2)
)
@タグ消し1
(
erase
(バイト値、1)(A0)
(バイト値、1)(バイト値、3)
)
**里々で人工無脳みたいなことをする [#ef5fe86b]
-駄でべろぱの小ネタWikiへようこそ。要するに駄ネタ大歓迎、...
--生成文例1:人をネタをそれとなく駄ネタ大歓迎、仕込んで...
--生成文例2:アホな気軽な駄ネタ大歓迎、気軽な仕込んで人...
--生成文例3:見た仕込んでネタWiki……ということで、ネ...
--生成文例4:仕込んで見た駄ネタ大歓迎、ネタをそれとなく...
-しくみ
--[ひらがな以外][ひらがな]
--[文字]、
--[文字]。
---この三つのパターンを並び替えているだけです。
---文節の入れ替えが容易な日本語の特徴を利用している。
*
$文章 駄でべろぱの小ネタWikiへようこそ。要するに駄ネタ...
$カタカナ アイウエオカキクケコサシスセソタチツテトナニ...
$ひらがな あいうえおかきくけこさしすせそたちつてとなに...
$句読点 。。
$句点 、、
$単語群「文のエレメント」の重複回避 トーク中
(追加単語の全削除、文のエレメント)(追加単語の全削除、...
(loop,何か,(length,(文章)))
(文のエレメント)(文のエレメント)(文のネクストエレメ...
(文のエレメント)(文のエレメント)(文のエレメント)(...
@何か
(
set
,文字
,(han2zen,(substr,(文章),(何かカウンタ)-1,1))
)(
(
iflist
,0!=
,(count,(句読点),(文字))
,文のラストエレメント確定
,(count,(句点),(文字))
,文のネクストエレメント確定
,(is_digit,(文字))
,ファーストフラグエレメント判定
,(is_alpha,(文字))
,ファーストフラグエレメント判定
,(count,(カタカナ),(文字))
,ファーストフラグエレメント判定
,(count,(ひらがな),(文字))
,エレメント
,ファーストフラグエレメント判定
)
)(
set
,一つ前の文字
,(文字)
)
@ファーストフラグエレメント判定
(
(
if
,0!=(count,(ひらがな),(一つ前の文字))
,文のエレメント確定
,フラグエレメント
)
)
@フラグエレメント
(
set
,文節
,(if,(変数「文節」の存在),(文節))(文字)
)
@エレメント
(
set
,文節
,(if,(変数「文節」の存在),(文節))(文字)
)
@文のエレメント確定
(
単語の追加
,文のエレメント
,(if,(変数「文節」の存在),(文節))
)(
set
,文節
,(文字)
)
@文のラストエレメント確定
(
単語の追加
,文のラストエレメント
,(if,(変数「文節」の存在),(文節))(文字)
)(
set
,文節
,
)
@文のネクストエレメント確定
(
単語の追加
,文のネクストエレメント
,(if,(変数「文節」の存在),(文節))(文字)
)(
set
,文節
,
)
**(合成単語群) [#tca229dd]
(call,合成単語群,[単語群名],...)
:野菜と言えば(野菜)。
肉と言えば(肉)。
でも、私の一番の好物は(食べ物)!
@野菜
たまねぎ
ながねぎ
しらがねぎ
万能ねぎ
青ねぎ
しろねぎ
@肉
鶏肉
鴨肉
家鴨肉
@食べ物
(call,合成単語群,野菜,肉)
@合成単語群
(
S(
乱数1~
(
split
,(
loop
,call、合成単語群3(loop,合成単語群2,(Aの数))
,(Aの数)
)
,(バイト値、1)
)
)
)
@合成単語群2
、(A(合成単語群2カウンタ))
@合成単語群3
(call,単語配列化,(バイト値,1),(A(合成単語群3カウ...
@単語配列化
(
set,単語群「(A1)」の重複回避,降順、トーク中
)(
loop,単語配列化2,(単語群「(A1)」の数)
)
@単語配列化2
((A1))(A0)
**文字を2分割する [#a8f44364]
$文字列【タブ】あいうえおかきくけこ
前半φ:(substr,(文字列),0,(length,(文字列))/2)
後半φ:(substr,(文字列),(length,(文字列))/2,(len...
**危険なSakuraScriptタグを無効化する。 [#gfab8e83]
(call(バイト値、1)KillDangerousTag(バイト値、1)[S...
@KillDangerousTag
(
set
,単語群「DangerousTag」の重複回避
,降順、トーク中
)(
set
,n
,(単語群「DangerousTag」の数)
)(
set
,引数区切り追加
,(バイト値、2)
)(
call
(バイト値、1)KillDangerousTag2
(バイト値、1)(A0)
)(
set
,SaveDangerousTag
,
)(
set
,n
,
)(
set
,引数区切り削除
,(バイト値、2)
)
@KillDangerousTag2
(
set
,n
,(calc,(n)-1)
)(
set
(バイト値、1)SaveDangerousTag
(バイト値、1)(DangerousTag)
)(
(
unless
(バイト値、1)(n)==-1
(バイト値、1)
call
(バイト値、2)KillDangerousTag2
(バイト値、2)(
replace
(バイト値、1)(A0)
(バイト値、1)(SaveDangerousTag)
(バイト値、1)\(SaveDangerousTag)
)
(バイト値、1)A0
)
)
@DangerousTag# 危険なタグリスト
\![updatebymyself]
\![vanishbymyself]
\![raise
\![open,browser
\![open,mailer
\![execute,http
\![enter,passive
\![enter,induction
\![enter,passivemode]
\![leave,passivemode]
\![lock,repaint]
\![unlock,repaint]
\![biff]
\j[
#以下自由に追加可能
**物理エンジンみたいな何か [#k61091df]
-机上の空論です。動かしたことありません。
-放物線を描いたりとかするかもしれません。
*
(設定)
*OnDisplayChange
$xMax【タブ】(R1)
$yMax【タブ】(R2)
*設定
$θ【タブ】45
$F【タブ】10
$m【タブ】1
$g【タブ】-9.8
$dt【タブ】1
$e【タブ】0.8
$dv→【タブ】(aya,sqrt,(aya,eval,2*(F)/(m)))
$dvx【タブ】(aya,eval,(dv→)*(aya,cos,(θ)))
$dvy【タブ】(aya,eval,(dv→)*(aya,sin,(θ)))
>落下
*落下
$dx【タブ】(aya,eval,(dvx)*(dt))
$dvy【タブ】(aya,eval,(dvy)+((g)/2)*(dt))
$dy【タブ】(aya,eval,(dvy)*(dt))
$x【タブ】(aya,eval,(dx)+(x))
$y【タブ】(aya,eval,(dy)+(y)*-1)
>衝突x【タブ】(x)<0||(xMax)<(x)
>衝突y【タブ】(y)<0||(yMax)<(y)
\![move,(x),(y),(dt),screen,left.top,center.center]
\![rasie,落下]
*衝突x
$dvx【タブ】(aya,eval,(e)*(dvx)*-1)
>落下
*衝突y
$dvx【タブ】(aya,eval,(e)*(dvy)*-1)
>落下
**SakuraScript除去 [#w50b163e]
$引数区切り追加【タブ】(バイト値、5)
(call(バイト値、5)サクラスクリプト除去(バイト値、5...
$引数区切り削除【タブ】(バイト値、5)
@サクラスクリプト除去
(
set,引数区切り追加,(バイト値、5)
)(
set(バイト値、5)サクラスクリプト除去変数(バイト値、...
)(
set,単語群「SakuraScriptList」の重複回避,正順、トーク中
)(
set,単語群「SakuraScriptList2」の重複回避,正順、トーク中
)(
サクラスクリプト除去1
)(
set,サクラスクリプト除去変数,
)(
set,サクラスクリプト除去済変数,
)(
set,消すべきSakuraScript,
)(
set,引数区切り削除,(バイト値、5)
)
@サクラスクリプト除去1#一文字目調べる
(
(
iflist
,1==
,(
compare_head
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)\\
)
,サクラスクリプト除去6
,(
compare_head
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)\
)
,サクラスクリプト除去3
,nop、
)
)(
サクラスクリプト除去2
)(
(
if
,(変数「サクラスクリプト除去変数」の存在)
,サクラスクリプト除去1
,(
if
,(変数「サクラスクリプト除去済変数」の存在)
,サクラスクリプト除去済変数
,nop、
)
)
)
@サクラスクリプト除去2#一文字削除
(
set
(バイト値、5)サクラスクリプト除去済変数
(バイト値、5)(
(
if
,(変数「サクラスクリプト除去済変数」の存在)
,サクラスクリプト除去済変数
,nop、
)
)(
substr
(バイト値、5)(
(
if
,(変数「サクラスクリプト除去変数」の存在)
,サクラスクリプト除去変数
,nop、
)
)
(バイト値、5)0
(バイト値、5)1
)
)(
set
(バイト値、5)サクラスクリプト除去変数
(バイト値、5)(
erase_first
(バイト値、5)(
(
if
,(変数「サクラスクリプト除去変数」の存在)
,サクラスクリプト除去変数
,nop、
)
)
(バイト値、5)(
substr
(バイト値、5)(
(
if
,(変数「サクラスクリプト除去変数」の存在)
,サクラスクリプト除去変数
,nop、
)
)
(バイト値、5)0
(バイト値、5)1
)
)
)
@サクラスクリプト除去3#一番初めが\だった
(
loop
,サクラスクリプト除去4
,(単語群「SakuraScriptList」の数)
)(
loop
,サクラスクリプト除去5
,(単語群「SakuraScriptList2」の数)
)
@サクラスクリプト除去4#サクラスクリプト削除
(
set
(バイト値、5)サクラスクリプト除去変数
(バイト値、5)(
erase_first
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)(SakuraScriptList)
)
)
@サクラスクリプト除去5#\*[の探索
(
set
,削除すべきSakuraScript
,(SakuraScriptList2)
)(
(
if
,(
compare_head
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)(削除すべきSakuraScript)
)
,サクラスクリプト除去7
,nop、
)
)
@サクラスクリプト除去6#一番初めが\\だった
(
set
(バイト値、5)サクラスクリプト除去済変数
(バイト値、5)(
(
if
,(変数「サクラスクリプト除去済変数」の存在)
,サクラスクリプト除去済変数
,nop、
)
)(
substr
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)0
(バイト値、5)2
)
)(
set
(バイト値、5)サクラスクリプト除去変数
(バイト値、5)(
erase_first
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)(
substr
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)0
(バイト値、5)2
)
)
)
@サクラスクリプト除去7#\*[の削除
(
set
(バイト値、5)サクラスクリプト除去変数
(バイト値、5)(
erase_first
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)(削除すべきSakuraScript)
)
)(サクラスクリプト除去8)
@サクラスクリプト除去8#]までの削除
(
(
if
,(
compare_head
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)]
)(サクラスクリプト除去9)
,nop、
,サクラスクリプト除去8
)
)
@サクラスクリプト除去9#]の削除
(
set
(バイト値、5)サクラスクリプト除去変数
(バイト値、5)(
erase_first
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)(
substr
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)0
(バイト値、5)1
)
)
)
@SakuraScriptList
\0
\1
\h
\u
\s0
\s1
\s2
\s3
\s4
\s5
\s6
\s7
\s8
\s9
\n
\_n
\c
\C
\_!
\_?
\w1
\w2
\w3
\w4
\w5
\w6
\w7
\w8
\w9
\x
\t
\_q
\_s
\z
\*
\e
\-
\4
\5
\6
\7
\+
\_+
\v
\_V
\__t
@SakuraScriptList2
\p[
\s[
\i[
\![
\__w[
\b[
\_b[
\n[
\c[
\_l[
\f[
\_w[
\__w[
\x[
\_s[
\q[
\__q[
\_a[
\8[
\_v[
\j[
\_u[
\_m[
\&[
\m[
*その他小技 [#xdefa46b]
Tipsともいう
**OnUserInputの空打ちとOnUserInputCancelの実装 [#vd311209]
*OnUserInput
>(R0)をタイムアウト【タブ】(compare,(R1),timeo...
>(R0)を空打ちされた【タブ】(is_empty,(R1))
$(R0)【タブ】(R1)
>(R0)を教えてもらった
*OnUserInputCancel
>(R0)を空打ちされた【タブ】(compare,(R1),close)
**ユーザ情報の取得 [#fbf79049]
*OnNotifyUserInfo
$ユーザ名【タブ】(R0)
$フルネーム【タブ】(R1)
$誕生日【タブ】(nop,(split(R2),))(S0)年(...
**ランダムトークを音で知らせる [#g4b26b45]
*OnTalk
>(R1)【タブ】(R0)
\_v[hoge.wav] ()
**里々で改行を扱う [#q77766fb]
|LF|(sprintf,%c,10)|
|CR|(sprintf,%c,13)|
|CRLF|(sprintf,%c,13)(sprintf,%c,10)|
**別人格 [#j9d3e525]
+-master\
+-template\
+-another\
+-dic*.txt
+-satori.dll
+-satori_conf.txt
$辞書フォルダ【タブ】template\another
実は深い階層のフォルダの辞書も読み込める。
**dsaudio.dllの使い方 [#x32362fd]
***マウスホイールによる音量調節 [#w1247276]
*OnMouseWheel
(
(
if
,(変数「ボリューム」の存在)
,nop
,set
)
,ボリューム
,5000
)(
set
,ボリューム
,(
iflist
,1==
,(calc,(ボリューム)+((R2)))>10000
,10000
,0>(calc,(ボリューム)+((R2)))
,0
,(calc,(ボリューム)+((R2)))
)
)(
volume
,(ボリューム)
):音量φ:(ボリューム)
**httpc.dllでLingrのログを取得 [#g358ecbc]
$URL http://c-kom.homeip.net/lingrtext/url/http://www.l...
$番号 5
$HTML (httpc(バイト値、1)(URL)(バイト値、1)</a...
$HTML (replace(バイト値、1)(HTML)(バイト値、1)...
$引数区切り追加 (バイト値、3)
(nswitch(バイト値、3)(番号)(バイト値、3)(HTML...
$引数区切り削除 (バイト値、3)
***LingrAPIを使う版 [#me51c105]
-誰かUTF-8デコーダ作ってorz
$api_key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
$id jyW4aiX5YOC
$session (call,Fsession,(api_key))
$ticket (call,Fticket,(session),(id))
$counter (call,Fcounter,(session),(id))
$message (call,Fmessage,(session),(id),(ticket),...
$destroy (call,Fdestroy,(session))
(S(calc,(Sの数)-1))#最新のレス
@Fsession
(
httpc
,http://www.lingr.com/api/session/create
?api_key=(A0)
,<session>
,</session>
)
@Fticket
(
httpc
,http://www.lingr.com/api/room/enter
?session=(A0)
&id=(A1)
,<ticket>
,</ticket>
)
@Fcounter
(
httpc
,http://www.lingr.com/api/room/enter
?session=(A0)
&id=(A1)
,<counter>
,</counter>
)
@Fmessage
(
httpc
,http://www.lingr.com/api/room/observe
?session=(A0)
&id=(A1)
&ticket=(A2)
&counter=(A3)
,<message>
,</message>
)
@Fdestroy
(
httpc,
http://www.lingr.com/api/session/destroy
?session=(A0)
,<status>
,</status>
)
*urlencode.dllを使ってCGIにSHIORIリクエストを投げる。 [#l...
(送信)
@送信
\![execute,http-get,(CGI)?(SSTP)]#←スクリプト版。
#\![open,browser,(CGI)?(SSTP)]#←ブラウザオープン版。
@CGI
http://www5.pf-x.net/~legokichi/cgi-bin/kokage/kokage.cgi
@SSTP
(
replace
,(
urlencode
,
NOTIFY SSTP/1.1
Sender: (Sender)
Event: (ID)
(Reference*)
Charset: (Charset)
)
,%09
,&
)
@Reference*
(loop,Reference**,0,(calc,(Rの数)-1))
@Reference**
(unless,(is_empty,(R(Reference**カウンタ))),Refer...
*こめんと [#b3d9361d]
- 関数まとめというよりも里々まとめに近くなってきた。分離...
- 警告文つけといたけどでけぇw -- [[レゴキチ]] &new{2009-...
#comment
終了行:
*始めに [#e1bffa94]
-&color(#ff0000){''※注意!ここの情報は古いです!「SATORI ...
-自分で書いたスクリプトを貼っておくところです。
-整備班の最新版の里々+ssu.dllの使用が前提です。偽林檎等に...
-基本メモなのでバグ率高いです。
-何かの参考になったら幸いです。
*暫定まとめサイト [#n9c6c162]
里々を120%使い倒すかも知れない場所。(書きかけで力尽...
http://www5.pf-x.net/~legokichi/nar/satori.html
*もくじ [#o0b81ab9]
#contents
*里々での関数製作の基本 [#x30f926e]
-里々では内側の括弧の中身から実行される。これは重要。~
-括弧内の行頭タブと末尾の改行は無視される。行頭半角スペー...
**括弧で呼び出せるもの。 [#tdc3040a]
-[[レゴキチ/里々まとめ]]参照。
**システム変数について [#v075125c]
***(R0) [#k7f7807c]
-※ローカル変数
SSTPのリクエストに含まれる(Reference0)を簡易的に取得で...
-真偽判定
-(変数「R0」の存在):存在した場合真
-(is_empty,(R0)):存在しない場合真
-(Rの数):リファレンスの総数。1オリジン。
***(A0) [#me53f4b1]
call関数で呼び出されたあらゆる対象に対して付く引数。~
-※プライベート変数
-(call,hoge)だと(A0)はNull。~
-(is_empty,(A0))で真偽を確かめられる。
-(hoge)だと(A0)はNotFound。文字列になる。~
***(S0) [#b75a1559]
-※トーク処理まで保持されるグローバル変数。
SAORIからの返り値。~
(変数「S0」の存在)で真偽を確かめられる。
***(H0) [#l68b0e99]
単語の再呼び出し。
(変数「H0」の存在)で真偽を確かめられる?←要検証
**関数呼び出し(call)について [#p68059aa]
replace.txtに
(関数名【タブ】(call,関数名
と書けば関数名だけで呼び出しが可能になる。~
だが、callの引数区切りがreplace.txtに書いたモノに固定され...
あとは関数内で(replace)を使って括弧展開したときとか。
***単語群「SAORI」に書き込んだら? [#a65c04f0]
未検証。~
おそらくSAORI呼び出しエラーが出ると思われる。
***反則。 [#o3fec0e9]
replace.txt内
(【タブ】(call,
そんなことをすれば海が汚染されるぞ!
**引数区切りについて [#p844c7ba]
里々はデフォルトで「、」「、」「,」「,」「バイト値1」が...
しかし、全半角文字では文字列処理のときに誤爆するので通常...
「バイト値1」「バイト値2」はSSTPのヘッダに含まれて...
ということで「バイト値4」「バイト値5」に引数区切り。~
「バイト値1」「バイト値2」「バイト値3」を簡易配列区切...
と考えている。
*if [#k31ee03d]
基本
(
if
,条件式
,真の場合表示する文字列
,偽の場合表示する文字列
)
これを他の一般的なプログラミング言語と混同してはならない。
(
if
,(i)==1
,(set,i,0)
,(set,i,1)
)
上記のような場合、~
まず条件式の変数「i」が展開されて、~
次に変数「i」の値が0になり、~
さらにに変数「i」の値が1になった上で、~
最後にif関数が実行される。~
結果、変数「i」は真偽に関わらず必ず1が代入され、~
set関数は返り値を持たないためif関数は何も返さない。~
if文の評価の後でset関数を使用したい場合下記のように書く必...
(
(
if
,(i)==1
,set、i、0
,set、i、1
)
)
このとき、if関数の引数区切りとset関数の引数区切りを違うも...
なぜなら、if関数とset関数の引数区切りが混同してしまうから...
しかしこの方法ではif関数の中で実行できる関数は常に1つとな...
if文のなかで複数の処理をしたい場合は下記のようなことも可...
(
replace
、(
replace
、(
if
,(i)==1
,[set、i、1][set、j、0]
,[set、i、0][set、j、1]
)
、[
、(han2zen,()
)
、]
、(han2zen,))
)
仮の括弧を後から置換して実行する方法。~
複雑なことも出来るが置換処理が割と重いのでお勧めできない。
それよりもこっちを推奨。ばらばらになるけど。~
(
(
if
,(i)==1
,処理1
,処理2
)
)
@処理1
(set,i,1)(set,j,0)
@処理2
(set,i,0)(set,j,1)
*ループ [#r1769ed4]
**for [#me457fca]
割と便利。~
(ループしたい単語群名カウンタ)で現在のループ回数も分か...
しかし偽林檎とかだと使えないらしい。~
(loop,括弧で呼び出すもの,初期値,終了値,増加量)
@括弧で呼び出すもの
(ループしたい処理)
***forの一般形 [#e954a6a0]
偽林檎対応?の代用loop関数
(call,for,括弧で呼び出すもの,初期値,終了値,増加量)
@for
(
(
unless
,(変数「(A0)カウンタ」の存在)
,set
,nop
)
,(A0)カウンタ
,(A1)
)(
(A0)
)(
set
,(A0)カウンタ
,(
calc
,((A0)カウンタ)+(A3)
)
)(
(
if
,((A0)カウンタ)<=(A2)
,call
,nop
)
,for
,(A0)
,(A1)
,(A2)
,(A3)
)(set,(A0)カウンタ,)
**while [#p8d4abc5]
条件が成り立つ間、再帰する。
***whileの一般形 [#od7ff921]
@while
(
hoge
)(
(
if
,条件式
,call
,nop
)
,while
,付加情報
)
*自作関数ライブラリ [#z78e2a2f]
動作は保証しかねます。
**FizzBuzz [#ra6bde86]
流行ったときに書いてみたやつ。
***変数でカウントするタイプ [#q23dccfb]
基本形。
@FizzBuzz
(set,n,
(if,(変数「n」の存在),(n)+1,1)
)(iflist
,0==
,(n)%3+(n)%5
,FizzBuzz
,(n)%3
,Fizz
,(n)%5
,Buzz
,(n)
)\n((if、(n)<100、FizzBuzz、set,n,))
***変数を使わないタイプ [#d30f24fd]
制限を大きめにしないと無限ループに陥る。
*OnKeyPress
$呼び出し回数制限 1000
:\_q(call,FizzBuzz,1,100)\_q
@FizzBuzz
(iflist
,0==
,(A0)%3+(A0)%5
,FizzBuzz
,(A0)%3
,Fizz
,(A0)%5
,Buzz
,(A0)
)\n(
(
if
,(A0)<(A1)
,call
,nop
)
,FizzBuzz
,(calc,(A0)+1)
,(A1)
)
***loop関数を使うタイプ [#g2863bb7]
一番楽。
*OnKeyPress
:\_q(loop,FizzBuzz,1,100)\_q
@FizzBuzz
(iflist
,0==
,(FizzBuzzカウンタ)%3+(FizzBuzzカウンタ)%5
,FizzBuzz
,(FizzBuzzカウンタ)%3
,Fizz
,(FizzBuzzカウンタ)%5
,Buzz
,(FizzBuzzカウンタ)
)\n
**単語群の内容を簡易配列にして返す[#b4900659]
(call,単語配列化,区切り文字列,単語群名)
(call,単語配列化,@,ドラえもん)→ドラえもん@のび太@し...
@単語配列化
(
set,単語群「(A1)」の重複回避,降順、トーク中
)(
loop,単語配列化2,(単語群「(A1)」の数)
)
@単語配列化2
((A1))(A0)
@ドラえもん
ドラえもん
のび太
しずか
ジャイアン
スネ夫
**リファレンス0から続く限りをバイト値1区切りで返す [#gfb...
(リファレンス全表示)
(リファレンス全表示)→1t8410
@リファレンス全表示
(
set,引数区切り追加,(sprintf,%c,5)
)(
call,リファレンス全表示2,0
) (
set,引数区切り削除,(sprintf,%c,5)
)
@リファレンス全表示2
(
(if
、(is_empty(sprintf,%c,5)(R(han2zen,(A0))))
、A1
、call
(sprintf,%c,5)リファレンス全表示2
(sprintf,%c,5)(calc,(A0)+1)
(sprintf,%c,5)(A1)(R(han2zen,(A0)))(s...
)
)
**現在の季節を表示する [#i0c4d445]
(季節)
(季節)→冬
@季節
(iflist
,1
,(現在月)<2,冬
,(現在月)<4,春
,(現在月)<7,夏
,(現在月)<10,秋
,冬
)
**callの引数の数を(強引に)調べる [#y6a3adeb]
(call,引数の数,引数1[,引数2[…,引数n]])
(call,引数の数,1,2,3,,,,,8)→8
@引数の数
(set,counter
,(calc
,(if
,(変数「counter」の存在)
,(counter)
,-1
)+1
)
)(set,result,
(calc,
(if
、(is_empty,(A(counter)))
、(if,(変数「result」の存在),(result),1)
、(counter)+1
)
)
)(
(if
,(counter)<(calc,(result)+5)
,引数の数
,result
)
)(set,counter,)(set,result,)
**大根2(OnGetValues)への対応 [#y48125a2]
##
#
# ゴーストの記憶しているキー(ラベル)名付きの変数や定...
# SHIORIイベントOnGetValuesで、R1以降に連想配列っぽく...
#
# R0:送信元
# R1以降:キー名
#
# 呼び出しの例
# \![raiseother,(FMO1name),OnRequestValues,(0name),...
#
*OnRequestValues
\![raiseother,(R0),OnGetValues,(FMO0name)(GetResp...
@GetResponseString
(loop,GetResponseString2,(calc,(Rの数)-1))
@GetResponseString2
(
if
(バイト値、1)(単語群「(R(GetResponseString2カウン...
(バイト値、1),(R(GetResponseString2カウンタ))=(...
)
**大根2(OnRequestValues)への対応。 [#ef4154f3]
このように格納する
$key[n]【タブ】key[n]の値~
$value[n]【タブ】value[n]の値~
※普通のゴーストさんには必要のないものです。
##
#
# OnRequestValuesで要求した連想配列の受け取り
# キー名と値を&で繋いだものをReferenceの1以降に格納す...
#
# R0:送信元
# R1以降:キー名と値を&で繋いだもの。key=value
#
*OnGetValues
:\b[2](R0)さんのスキャン結果。
(ResetGetValues)
(SetGetValues)
\_q(ShowGetValues)\_q
(ResetGetValues)
@SetGetValues
(loop,SetGetValues2,(calc,(Rの数)-1))
@SetGetValues2
(
nop
,(
split
(sprintf,%c,1)(R(SetGetValues2カウンタ))
(sprintf,%c,1)=
(sprintf,%c,1)2
)
)(
set
(sprintf,%c,1)key(SetGetValues2カウンタ)
(sprintf,%c,1)(if(sprintf,%c,1)(変数「S0」の存...
)(
set
(sprintf,%c,1)value(SetGetValues2カウンタ)
(sprintf,%c,1)(if(sprintf,%c,1)(変数「S1」の存...
)
@ShowGetValues
(set,n,1)(ShowGetValues2)(set,n,)
@ShowGetValues2
(
(
if
,(変数「key(n)」の存在)
,key(n)
,nop、
)
)\_l[40,](
(
if
,(変数「value(n)」の存在)
,value(n)
,nop、
)
)\n(
set
,n
,(calc,(n)+1)
)(
(
if
,(変数「key(n)」の存在)||(変数「value(n)」の存...
,ShowGetValues2
,nop、
)
)
@ResetGetValues
(set,n,1)(ResetGetValues2)(set,n,)
@ResetGetValues2
(
set
,key(n)
,
)(
set
,value(n)
,
)(
set
,n
,(calc,(n)+1)
)(
(
if
,(変数「key(n)」の存在)||(変数「value(n)」の存...
,ResetGetValues2
,nop、
)
)
**里々でソート [#s30e0f7a]
-作りかけ。
-最後の数列ソートをどうしていいのか分からない。
-とりあえず概念だけ書いておく。
replace.txt
【タブ】
<ー< (
>ー> )
*wを押した
$i
$sortう
$sortあ
$sortい
$sortえ
$sortお
(call,sort,う,あ,い,お,え)
@sort
\![raise,OnSatoriSort,(loop,sort2,0,(calc,(引数の数)...
@sort2
(A(han2zen,(sort2カウンタ)))(sprintf,%c,1)
@sort3
+(han2zen,<-<)変数「sort(A(han2zen,(sort3カウンタ...
@引数の数
(set,counter
,(calc
,(if
,(変数「counter」の存在)
,(counter)
,-1
)+1
)
)(set,result,
(calc,
(if
、(is_empty,(A(counter)))
、(if,(変数「result」の存在),(result),1)
、(counter)+1
)
)
)(
(if
,(counter)<(calc,(result)+5)
,引数の数
,result
)
)(set,counter,)(set,result,)
*OnSatoriSort
$i【タブ】(calc,(split,(R0),(sprintf,%c,1))-1)
>OnSatoriSort2
*OnSatoriSort2
$sort(S(han2zen,(i)))【タブ】(R1)
>OnSatoriSort3【タブ】(i)==0
$i【タブ】(calc,(i)-1)
>OnSatoriSort2
*OnSatoriSort3
$辞書リロード【タブ】実行
\![raise,OnSatoriSort4,(R0)]
この時点でのセーブデータ
$sortあ <ー<calc<ー<変数「sortう」の存在>ー>+<...
$sortい <ー<calc<ー<変数「sortう」の存在>ー>+<...
$sortう <ー<calc<ー<変数「sortう」の存在>ー>+<...
$sortえ <ー<calc<ー<変数「sortう」の存在>ー>+<...
$sortお <ー<calc<ー<変数「sortう」の存在>ー>+<...
「辞書リロード」時のれしばのログ
■SATORI::Load on G:\Program\SSP\ghost\scallion2\ghost\ma...
本体の所在: G:\Program\SSP\
OS種別: Windows 2000
モニタ: \\.\DISPLAY1 / (0,0,1280,600) / primary
プライマリデスクトップ: (0,0,1280,600)
仮想デスクトップ: (0,0,1280,600)
モニタは一つだけと判断、見切れ判定を呼び出し元に任せます。
loading satori_conf.txt... ok.
*初期化
return: \1
loading satori_savedata.txt... ok.
*セーブデータ
(変数「sortう」の存在)→0
(変数「sortあ」の存在)→0
(変数「sortい」の存在)→0
(変数「sortお」の存在)→0
(変数「sortえ」の存在)→0
(calc0+0+0+0+0)→0
$sortあ=0/written.
(変数「sortう」の存在)→0
(変数「sortあ」の存在)→1
(変数「sortい」の存在)→0
(変数「sortお」の存在)→0
(変数「sortえ」の存在)→0
(calc0+1+0+0+0)→1
$sortい=1/written.
(変数「sortう」の存在)→0
(変数「sortあ」の存在)→1
(変数「sortい」の存在)→1
(変数「sortお」の存在)→0
(変数「sortえ」の存在)→0
(calc0+1+1+0+0)→2
$sortう=2/written.
(変数「sortう」の存在)→1
(変数「sortあ」の存在)→1
(変数「sortい」の存在)→1
(変数「sortお」の存在)→0
(変数「sortえ」の存在)→0
(calc1+1+1+0+0)→3
$sortえ=3/written.
(変数「sortう」の存在)→1
(変数「sortあ」の存在)→1
(変数「sortい」の存在)→1
(変数「sortお」の存在)→0
(変数「sortえ」の存在)→1
(calc1+1+1+0+1)→4
$sortお=4/written.
*OnSatoriSort4
ここで(sortあ)~(sortお)の数の順にならべればソートが...
だがそこをどうすべきかわからない。
**里々で配列 [#e7beadb6]
***保存方法 [#sd95c181]
添え字=対応する値がバイト値3区切りで一つの変数に入ってい...
$array○○【タブ】value0(sprintf,%c,3)value1(sprintf,%...
-array_set
-array_get
-array_dell
これらの関数はこの変数の中身を切った貼ったする。
***代入 [#u5780435]
-添え字に対応する値を代入する
--$hoge[0] = "value0";
(call,array_set,配列名,添え字,対応する値)
#代入
@array_set
(
call
,(
if
,(変数「array(A0)」の存在)&&(A1)>=0
,array_set1
,array_set99
)
,(A0)
,(A1)
,(A2)
)
@array_set1
(
call
,(
if
,(count,(array(A0)),(sprintf,%c,3))>(A1)
,array_set2
,array_set3
)
,(A0)
,(A1)
,(A2)
,0
,
,(array(A0))
)
@array_set2
(
nop
,(
split
,_(A5)_
,(sprintf,%c,3)
,2
)
)(
call
,(
if
,(A1)==(A3)
,array_set4
,array_set2
)
,(A0)
,(A1)
,(A2)
,(calc,(A3)+1)
,(A4)(
if
,(A1)==(A3)
,(A2)
,(erase_first,(S0),_)
)(sprintf,%c,3)
,(reverse,(erase_first,(reverse,(S1)),_))
)
@array_set3
(
set
,array(A0)
,(array(A0))(
loop
,sprintf、%c、3
,(calc,(A1)-(count,(array(A0)),(sprintf,%...
)(A2)(sprintf,%c,3)
)
@array_set4
(
set
,array(A0)
,(A4)(reverse,(erase_first,(reverse,(S1)),_...
)
@array_set99
(
set
,array(A0)
,(
loop
,sprintf、%c、3
,(A1)
)(A2)(sprintf,%c,3)
)
***取得 [#p584b2b8]
-添え字に対応する値を取得する
--print $hoge[0];
(call,array_get,配列名,添え字)
#取得
@array_get
(
(
if
,(変数「array(A0)」の存在)
,call
,nop
)
,array_get1
,(A0)
,(A1)
,0
,(array(A0))
)
@array_get1
(
nop
,(
split
,_(A3)_
,(sprintf,%c,3)
,2
)
)(
call
,(
if
,(A1)==(A2)
,array_get2
,array_get1
)
,(A0)
,(A1)
,(calc,(A2)+1)
,(reverse,(erase_first,(reverse,(S1)),_))
)
@array_get2
(erase_first,(S0),_)
***削除 [#o97fa9fe]
-添え字とその値を削除
--undef $hoge[0];
(call,array_del,配列名,添え字)
-配列全てを削除
--undef @hoge;
(call,array_del,配列名)
#削除
@array_del
(
call
,(
if
,(is_empty,(A1))
,array_del99
,array_del1
)
,(A0)
,(A1)
)
@array_del1
(call,array_set,Value,(A1),)
@array_del99
(set,array(A0),)
**里々で連想配列 [#c81e3494]
***保存方法 [#sd95c181]
key=valueがバイト値3区切りで一つの変数に入っている。
$hash○○【タブ】key0=value0(sprintf,%c,3)key1=value1(...
-hash_set
-hash_get
-hash_dell
これらの関数はこの変数の中身を切った貼ったする。
***代入 [#u5780435]
-キーに対応する値を代入する
--$hoge{'key'} = "value";
(call,hash_set,連想配列名,キー,対応する値)
#代入
@hash_set
(
call
,hash_set(
if
,(変数「hash(A0)」の存在)
,1
,99
)
,(A0)
,(A1)
,(A2)
)
@hash_set1
(
nop
,(
split
,(hash(A0))
,(sprintf,%c,3)
)
)(
call
,hash_set2
,(A0)
,(A1)
,(A2)
,0
)
@hash_set2
(
call
,hash_set(
if
,(変数「S(han2zen,(A3))」の存在)
,(
if
,(
compare_head
,(S(han2zen,(A3)))
,(A1)
)
,3
,2
)
,98
)
,(A0)
,(A1)
,(A2)
,(calc,(A3)+1)
)
@hash_set3
(
set
,hash(A0)
,(
replace
,(hash(A0))
,(
if
,(
split
,(S(han2zen,(calc,(A3)-1)))
,=
,2
)==2
,(S0)=(S1)
,(S0)=
)
,(S0)=(A2)
)
)
@hash_set98
(
set
,hash(A0)
,(hash(A0))(A1)=(A2)(sprintf,%c,3)
)
@hash_set99
(
set
,hash(A0)
,(A1)=(A2)(sprintf,%c,3)
)
***取得 [#y9b04a3c]
-キーに対応する値を取得する
--print $hoge{'key'};
(call,hash_get,連想配列名,キー)
#取得
@hash_get
(
(
if
,(変数「hash(A0)」の存在)
,call
,nop
)
,hash_get1
,(A0)
,(A1)
)
@hash_get1
(
nop
,(split,(hash(A0))
,(sprintf,%c,3)
)
)(
call
,hash_get2
,(A0)
,(A1)
,0
)
@hash_get2
(
(
if
,(変数「S(han2zen,(A2))」の存在)
,call
,nop
)
,hash_get(
if
,(
compare_head
,(S(han2zen,(A2)))
,(A1)
)
,3
,2
)
,(A0)
,(A1)
,(calc,(A2)+1)
)
@hash_get3
(
if
,(
split
,(S(han2zen,(calc,(A2)-1)))
,=
,2
)==2
,(S1)
)
***削除 [#wd4af027]
-キーとその値を削除
--undef $hoge{'key'};
(call,hash_del,連想配列名,キー2)
-連想配列全てを削除
--undef %hoge;
(call,hash_del,連想配列名)
#削除
@hash_del
(
call
,hash_del(
if
,(is_empty,(A1))
,99
,1
)
,(A0)
,(A1)
)
@hash_del1
(
nop
,(
split
,(hash(A0))
,(sprintf,%c,3)
)
)(
call
,hash_del2
,(A0)
,(A1)
,(A2)
,0
)
@hash_del2
(
(
if
,(変数「S(han2zen,(A3))」の存在)
,call
,nop
)
,hash_del(
if
,(compare_head,(S(han2zen,(A3))),(A1))
,3
,2
)
,(A0)
,(A1)
,(A2)
,(calc,(A3)+1)
)
@hash_del3
(
set
,hash(A0)
,(
erase
,(hash(A0))
,(S(han2zen,(calc,(A3)-1)))
)
)
@hash_del99
(set,hash(A0),)
**replace_end [#r4f3e2fb]
replaceの一番最後の該当文字だけ置き換える版を自作してみた。
(call,replace_end,文字列,検索語,置換する語)
@replace_end
(
reverse
,(
replace_first
,(reverse,(A0))
,(reverse,(A1))
,(reverse,(A2))
)
)
**erase_end [#h731bbe7]
eraseの一番最後の該当文字だけ削除する版を自作してみた。
(call,erase_end,文字列,削除する語)
@erase_end
(
reverse
,(
erase_first
,(reverse,(A0))
,(reverse,(A1))
)
)
**split_end [#u151cf74]
splitのうしろから切っていく版を自作してみた。
(call,split_end,文字列,[分割文字列,[最大分割数]])
@split_end
(
split
,(reverse,(A0))
,(reverse,(A1))
,(A2)
)
(reverse,(S0))
仕様上、返り値が反転してしまうので元に戻すこと。
***ファイル名取得 [#i82d657b]
(call,ファイル名取得,ファイルパス)
@ファイル名取得
(
nop
,(
split
,(reverse,(A0))
,\
,2
)(
split
,(S0)
,/
,2
)
)(reverse,(S0))
***拡張子取得 [#ie5dd103]
(call,拡張子取得,ファイルパスorファイル名)
@拡張子取得
(
nop
,(
split
(バイト値,1)(reverse,(A0))
(バイト値,1).
(バイト値,1)2
)
)(reverse(バイト値,1)(S0))
**タグ消し [#n7571b2d]
(call,タグ消し,文字列,初めの部分,終わりの部分)
*htmlのタグ消去
(call(バイト値、1)タグ消し(バイト値、1)(HTML)(...
@タグ消し
(
call
(バイト値、1)(
if
,(count(バイト値、1)(A0)(バイト値、1)(A1))>1
,タグ消し
,タグ消し1
)(バイト値、1)(
nop
,(
split
(バイト値、1)(バイト値、3)(A0)
(バイト値、1)(A1)
(バイト値、1)2
)
)(S0)(
nop
,(
split
(バイト値、1)(S1)(バイト値、3)
(バイト値、1)(A2)
(バイト値、1)2
)
)(S1)
(バイト値、1)(A1)
(バイト値、1)(A2)
)
@タグ消し1
(
erase
(バイト値、1)(A0)
(バイト値、1)(バイト値、3)
)
**里々で人工無脳みたいなことをする [#ef5fe86b]
-駄でべろぱの小ネタWikiへようこそ。要するに駄ネタ大歓迎、...
--生成文例1:人をネタをそれとなく駄ネタ大歓迎、仕込んで...
--生成文例2:アホな気軽な駄ネタ大歓迎、気軽な仕込んで人...
--生成文例3:見た仕込んでネタWiki……ということで、ネ...
--生成文例4:仕込んで見た駄ネタ大歓迎、ネタをそれとなく...
-しくみ
--[ひらがな以外][ひらがな]
--[文字]、
--[文字]。
---この三つのパターンを並び替えているだけです。
---文節の入れ替えが容易な日本語の特徴を利用している。
*
$文章 駄でべろぱの小ネタWikiへようこそ。要するに駄ネタ...
$カタカナ アイウエオカキクケコサシスセソタチツテトナニ...
$ひらがな あいうえおかきくけこさしすせそたちつてとなに...
$句読点 。。
$句点 、、
$単語群「文のエレメント」の重複回避 トーク中
(追加単語の全削除、文のエレメント)(追加単語の全削除、...
(loop,何か,(length,(文章)))
(文のエレメント)(文のエレメント)(文のネクストエレメ...
(文のエレメント)(文のエレメント)(文のエレメント)(...
@何か
(
set
,文字
,(han2zen,(substr,(文章),(何かカウンタ)-1,1))
)(
(
iflist
,0!=
,(count,(句読点),(文字))
,文のラストエレメント確定
,(count,(句点),(文字))
,文のネクストエレメント確定
,(is_digit,(文字))
,ファーストフラグエレメント判定
,(is_alpha,(文字))
,ファーストフラグエレメント判定
,(count,(カタカナ),(文字))
,ファーストフラグエレメント判定
,(count,(ひらがな),(文字))
,エレメント
,ファーストフラグエレメント判定
)
)(
set
,一つ前の文字
,(文字)
)
@ファーストフラグエレメント判定
(
(
if
,0!=(count,(ひらがな),(一つ前の文字))
,文のエレメント確定
,フラグエレメント
)
)
@フラグエレメント
(
set
,文節
,(if,(変数「文節」の存在),(文節))(文字)
)
@エレメント
(
set
,文節
,(if,(変数「文節」の存在),(文節))(文字)
)
@文のエレメント確定
(
単語の追加
,文のエレメント
,(if,(変数「文節」の存在),(文節))
)(
set
,文節
,(文字)
)
@文のラストエレメント確定
(
単語の追加
,文のラストエレメント
,(if,(変数「文節」の存在),(文節))(文字)
)(
set
,文節
,
)
@文のネクストエレメント確定
(
単語の追加
,文のネクストエレメント
,(if,(変数「文節」の存在),(文節))(文字)
)(
set
,文節
,
)
**(合成単語群) [#tca229dd]
(call,合成単語群,[単語群名],...)
:野菜と言えば(野菜)。
肉と言えば(肉)。
でも、私の一番の好物は(食べ物)!
@野菜
たまねぎ
ながねぎ
しらがねぎ
万能ねぎ
青ねぎ
しろねぎ
@肉
鶏肉
鴨肉
家鴨肉
@食べ物
(call,合成単語群,野菜,肉)
@合成単語群
(
S(
乱数1~
(
split
,(
loop
,call、合成単語群3(loop,合成単語群2,(Aの数))
,(Aの数)
)
,(バイト値、1)
)
)
)
@合成単語群2
、(A(合成単語群2カウンタ))
@合成単語群3
(call,単語配列化,(バイト値,1),(A(合成単語群3カウ...
@単語配列化
(
set,単語群「(A1)」の重複回避,降順、トーク中
)(
loop,単語配列化2,(単語群「(A1)」の数)
)
@単語配列化2
((A1))(A0)
**文字を2分割する [#a8f44364]
$文字列【タブ】あいうえおかきくけこ
前半φ:(substr,(文字列),0,(length,(文字列))/2)
後半φ:(substr,(文字列),(length,(文字列))/2,(len...
**危険なSakuraScriptタグを無効化する。 [#gfab8e83]
(call(バイト値、1)KillDangerousTag(バイト値、1)[S...
@KillDangerousTag
(
set
,単語群「DangerousTag」の重複回避
,降順、トーク中
)(
set
,n
,(単語群「DangerousTag」の数)
)(
set
,引数区切り追加
,(バイト値、2)
)(
call
(バイト値、1)KillDangerousTag2
(バイト値、1)(A0)
)(
set
,SaveDangerousTag
,
)(
set
,n
,
)(
set
,引数区切り削除
,(バイト値、2)
)
@KillDangerousTag2
(
set
,n
,(calc,(n)-1)
)(
set
(バイト値、1)SaveDangerousTag
(バイト値、1)(DangerousTag)
)(
(
unless
(バイト値、1)(n)==-1
(バイト値、1)
call
(バイト値、2)KillDangerousTag2
(バイト値、2)(
replace
(バイト値、1)(A0)
(バイト値、1)(SaveDangerousTag)
(バイト値、1)\(SaveDangerousTag)
)
(バイト値、1)A0
)
)
@DangerousTag# 危険なタグリスト
\![updatebymyself]
\![vanishbymyself]
\![raise
\![open,browser
\![open,mailer
\![execute,http
\![enter,passive
\![enter,induction
\![enter,passivemode]
\![leave,passivemode]
\![lock,repaint]
\![unlock,repaint]
\![biff]
\j[
#以下自由に追加可能
**物理エンジンみたいな何か [#k61091df]
-机上の空論です。動かしたことありません。
-放物線を描いたりとかするかもしれません。
*
(設定)
*OnDisplayChange
$xMax【タブ】(R1)
$yMax【タブ】(R2)
*設定
$θ【タブ】45
$F【タブ】10
$m【タブ】1
$g【タブ】-9.8
$dt【タブ】1
$e【タブ】0.8
$dv→【タブ】(aya,sqrt,(aya,eval,2*(F)/(m)))
$dvx【タブ】(aya,eval,(dv→)*(aya,cos,(θ)))
$dvy【タブ】(aya,eval,(dv→)*(aya,sin,(θ)))
>落下
*落下
$dx【タブ】(aya,eval,(dvx)*(dt))
$dvy【タブ】(aya,eval,(dvy)+((g)/2)*(dt))
$dy【タブ】(aya,eval,(dvy)*(dt))
$x【タブ】(aya,eval,(dx)+(x))
$y【タブ】(aya,eval,(dy)+(y)*-1)
>衝突x【タブ】(x)<0||(xMax)<(x)
>衝突y【タブ】(y)<0||(yMax)<(y)
\![move,(x),(y),(dt),screen,left.top,center.center]
\![rasie,落下]
*衝突x
$dvx【タブ】(aya,eval,(e)*(dvx)*-1)
>落下
*衝突y
$dvx【タブ】(aya,eval,(e)*(dvy)*-1)
>落下
**SakuraScript除去 [#w50b163e]
$引数区切り追加【タブ】(バイト値、5)
(call(バイト値、5)サクラスクリプト除去(バイト値、5...
$引数区切り削除【タブ】(バイト値、5)
@サクラスクリプト除去
(
set,引数区切り追加,(バイト値、5)
)(
set(バイト値、5)サクラスクリプト除去変数(バイト値、...
)(
set,単語群「SakuraScriptList」の重複回避,正順、トーク中
)(
set,単語群「SakuraScriptList2」の重複回避,正順、トーク中
)(
サクラスクリプト除去1
)(
set,サクラスクリプト除去変数,
)(
set,サクラスクリプト除去済変数,
)(
set,消すべきSakuraScript,
)(
set,引数区切り削除,(バイト値、5)
)
@サクラスクリプト除去1#一文字目調べる
(
(
iflist
,1==
,(
compare_head
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)\\
)
,サクラスクリプト除去6
,(
compare_head
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)\
)
,サクラスクリプト除去3
,nop、
)
)(
サクラスクリプト除去2
)(
(
if
,(変数「サクラスクリプト除去変数」の存在)
,サクラスクリプト除去1
,(
if
,(変数「サクラスクリプト除去済変数」の存在)
,サクラスクリプト除去済変数
,nop、
)
)
)
@サクラスクリプト除去2#一文字削除
(
set
(バイト値、5)サクラスクリプト除去済変数
(バイト値、5)(
(
if
,(変数「サクラスクリプト除去済変数」の存在)
,サクラスクリプト除去済変数
,nop、
)
)(
substr
(バイト値、5)(
(
if
,(変数「サクラスクリプト除去変数」の存在)
,サクラスクリプト除去変数
,nop、
)
)
(バイト値、5)0
(バイト値、5)1
)
)(
set
(バイト値、5)サクラスクリプト除去変数
(バイト値、5)(
erase_first
(バイト値、5)(
(
if
,(変数「サクラスクリプト除去変数」の存在)
,サクラスクリプト除去変数
,nop、
)
)
(バイト値、5)(
substr
(バイト値、5)(
(
if
,(変数「サクラスクリプト除去変数」の存在)
,サクラスクリプト除去変数
,nop、
)
)
(バイト値、5)0
(バイト値、5)1
)
)
)
@サクラスクリプト除去3#一番初めが\だった
(
loop
,サクラスクリプト除去4
,(単語群「SakuraScriptList」の数)
)(
loop
,サクラスクリプト除去5
,(単語群「SakuraScriptList2」の数)
)
@サクラスクリプト除去4#サクラスクリプト削除
(
set
(バイト値、5)サクラスクリプト除去変数
(バイト値、5)(
erase_first
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)(SakuraScriptList)
)
)
@サクラスクリプト除去5#\*[の探索
(
set
,削除すべきSakuraScript
,(SakuraScriptList2)
)(
(
if
,(
compare_head
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)(削除すべきSakuraScript)
)
,サクラスクリプト除去7
,nop、
)
)
@サクラスクリプト除去6#一番初めが\\だった
(
set
(バイト値、5)サクラスクリプト除去済変数
(バイト値、5)(
(
if
,(変数「サクラスクリプト除去済変数」の存在)
,サクラスクリプト除去済変数
,nop、
)
)(
substr
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)0
(バイト値、5)2
)
)(
set
(バイト値、5)サクラスクリプト除去変数
(バイト値、5)(
erase_first
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)(
substr
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)0
(バイト値、5)2
)
)
)
@サクラスクリプト除去7#\*[の削除
(
set
(バイト値、5)サクラスクリプト除去変数
(バイト値、5)(
erase_first
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)(削除すべきSakuraScript)
)
)(サクラスクリプト除去8)
@サクラスクリプト除去8#]までの削除
(
(
if
,(
compare_head
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)]
)(サクラスクリプト除去9)
,nop、
,サクラスクリプト除去8
)
)
@サクラスクリプト除去9#]の削除
(
set
(バイト値、5)サクラスクリプト除去変数
(バイト値、5)(
erase_first
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)(
substr
(バイト値、5)(サクラスクリプト除去変数)
(バイト値、5)0
(バイト値、5)1
)
)
)
@SakuraScriptList
\0
\1
\h
\u
\s0
\s1
\s2
\s3
\s4
\s5
\s6
\s7
\s8
\s9
\n
\_n
\c
\C
\_!
\_?
\w1
\w2
\w3
\w4
\w5
\w6
\w7
\w8
\w9
\x
\t
\_q
\_s
\z
\*
\e
\-
\4
\5
\6
\7
\+
\_+
\v
\_V
\__t
@SakuraScriptList2
\p[
\s[
\i[
\![
\__w[
\b[
\_b[
\n[
\c[
\_l[
\f[
\_w[
\__w[
\x[
\_s[
\q[
\__q[
\_a[
\8[
\_v[
\j[
\_u[
\_m[
\&[
\m[
*その他小技 [#xdefa46b]
Tipsともいう
**OnUserInputの空打ちとOnUserInputCancelの実装 [#vd311209]
*OnUserInput
>(R0)をタイムアウト【タブ】(compare,(R1),timeo...
>(R0)を空打ちされた【タブ】(is_empty,(R1))
$(R0)【タブ】(R1)
>(R0)を教えてもらった
*OnUserInputCancel
>(R0)を空打ちされた【タブ】(compare,(R1),close)
**ユーザ情報の取得 [#fbf79049]
*OnNotifyUserInfo
$ユーザ名【タブ】(R0)
$フルネーム【タブ】(R1)
$誕生日【タブ】(nop,(split(R2),))(S0)年(...
**ランダムトークを音で知らせる [#g4b26b45]
*OnTalk
>(R1)【タブ】(R0)
\_v[hoge.wav] ()
**里々で改行を扱う [#q77766fb]
|LF|(sprintf,%c,10)|
|CR|(sprintf,%c,13)|
|CRLF|(sprintf,%c,13)(sprintf,%c,10)|
**別人格 [#j9d3e525]
+-master\
+-template\
+-another\
+-dic*.txt
+-satori.dll
+-satori_conf.txt
$辞書フォルダ【タブ】template\another
実は深い階層のフォルダの辞書も読み込める。
**dsaudio.dllの使い方 [#x32362fd]
***マウスホイールによる音量調節 [#w1247276]
*OnMouseWheel
(
(
if
,(変数「ボリューム」の存在)
,nop
,set
)
,ボリューム
,5000
)(
set
,ボリューム
,(
iflist
,1==
,(calc,(ボリューム)+((R2)))>10000
,10000
,0>(calc,(ボリューム)+((R2)))
,0
,(calc,(ボリューム)+((R2)))
)
)(
volume
,(ボリューム)
):音量φ:(ボリューム)
**httpc.dllでLingrのログを取得 [#g358ecbc]
$URL http://c-kom.homeip.net/lingrtext/url/http://www.l...
$番号 5
$HTML (httpc(バイト値、1)(URL)(バイト値、1)</a...
$HTML (replace(バイト値、1)(HTML)(バイト値、1)...
$引数区切り追加 (バイト値、3)
(nswitch(バイト値、3)(番号)(バイト値、3)(HTML...
$引数区切り削除 (バイト値、3)
***LingrAPIを使う版 [#me51c105]
-誰かUTF-8デコーダ作ってorz
$api_key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
$id jyW4aiX5YOC
$session (call,Fsession,(api_key))
$ticket (call,Fticket,(session),(id))
$counter (call,Fcounter,(session),(id))
$message (call,Fmessage,(session),(id),(ticket),...
$destroy (call,Fdestroy,(session))
(S(calc,(Sの数)-1))#最新のレス
@Fsession
(
httpc
,http://www.lingr.com/api/session/create
?api_key=(A0)
,<session>
,</session>
)
@Fticket
(
httpc
,http://www.lingr.com/api/room/enter
?session=(A0)
&id=(A1)
,<ticket>
,</ticket>
)
@Fcounter
(
httpc
,http://www.lingr.com/api/room/enter
?session=(A0)
&id=(A1)
,<counter>
,</counter>
)
@Fmessage
(
httpc
,http://www.lingr.com/api/room/observe
?session=(A0)
&id=(A1)
&ticket=(A2)
&counter=(A3)
,<message>
,</message>
)
@Fdestroy
(
httpc,
http://www.lingr.com/api/session/destroy
?session=(A0)
,<status>
,</status>
)
*urlencode.dllを使ってCGIにSHIORIリクエストを投げる。 [#l...
(送信)
@送信
\![execute,http-get,(CGI)?(SSTP)]#←スクリプト版。
#\![open,browser,(CGI)?(SSTP)]#←ブラウザオープン版。
@CGI
http://www5.pf-x.net/~legokichi/cgi-bin/kokage/kokage.cgi
@SSTP
(
replace
,(
urlencode
,
NOTIFY SSTP/1.1
Sender: (Sender)
Event: (ID)
(Reference*)
Charset: (Charset)
)
,%09
,&
)
@Reference*
(loop,Reference**,0,(calc,(Rの数)-1))
@Reference**
(unless,(is_empty,(R(Reference**カウンタ))),Refer...
*こめんと [#b3d9361d]
- 関数まとめというよりも里々まとめに近くなってきた。分離...
- 警告文つけといたけどでけぇw -- [[レゴキチ]] &new{2009-...
#comment
ページ名: