コンテンツにスキップ

ssu(同梱 SAORI)

ssu は里々に同梱されている文字列・計算・条件分岐用のユーティリティです。(calc、1+2) のように、里々の () の中から関数として呼び出します。

関数をまとめて見渡したいときは、チートシートの早見表も使えます。

呼び出し方

里々(satori.dll)は ssu を内蔵しており、SAORI を経由せずに直接呼び出します。satori_conf.txt に SAORI の登録を書く必要はありません。

*自己紹介
(sprintf、%05d、42)→(substr、あいうえお、1、2)
  • 呼び出し名は下の一覧の名前です。里々起動時に、一覧にある名前がすべて 名前,saori/ssu.dll,名前 として自動登録されます。
  • 同じ名前を @SAORI で自分で登録していた場合は、そちらが優先されます。
  • 引数の区切りは , 、 、 , とバイト値 1 のどれでも構いません。詳しくは引数区切りを参照してください。

ssu.dll を単体の SAORI として呼び出すこともできます(ssu.dll を SSU_SAORI_CALL_INTERFACE を定義してビルドしたもの)。その場合は最初の引数(Argument0)が関数名になり、以降が引数になります。応答の Charset は常に UTF-8 です。

引数の計算

() から SAORI(ssu を含む)を呼び出すときは、里々が引数を先に計算することがあります。$SAORI引数の計算で切り替えられます。

設定 動作
自動(既定) 先頭が数字・+・- の引数だけ、整数の式として計算する
有効 空でないすべての引数を計算する
無効 計算しない

計算は「厳密モード」で行われます。数値の式(1+2 など)だけが対象で、文字列の連結や削除などが必要な式は計算されず、そのまま渡されます。計算結果は半角数字です。

そのため、(calc_float、5/3) は 5/3 が先に整数で計算されて 1 になり、1.666667 にはなりません。小数を計算するときは $SAORI引数の計算=無効 にしてください。

戻り値とエラー

  • 正常に処理できた場合は、結果の文字列が () の展開結果になります。
  • 結果がない場合(204 No Content)は空文字列になります。
  • 引数の数が合わないなどのエラー(400 Bad Request)の場合は、エラーメッセージがそのまま展開結果になり、エラーログにも出力されます(内蔵の ssu を使っているとき、ログの DLL のパスは Mc201-6以降 (internal ssu) と表示されます)。
  • 結果に () が含まれていると、もう一度展開されます。
  • 複数の値を返す関数(split など)の値は、システム変数 (S0) (S1)…、個数は (Sの数) で参照します。(S0) などを上書きせずに分割したいときは、内蔵関数の split_to を使います。

文字の数え方

ssu は文字数を「文字」単位で数えます。サロゲートペアの文字(絵文字や「𠮷」など)は 1 文字です(Unicode 版)。

関数一覧

計算

関数 説明
calc 整数・文字列の式を計算する
calc_float 小数の式を計算する

条件分岐

関数 説明
if 式が真なら 2 番目、偽なら 3 番目を返す
unless 式が偽なら 2 番目、真なら 3 番目を返す
nswitch 番号で選ぶ
switch 値が等しいものを選ぶ
iflist 比較式が真のものを選ぶ

文字列の切り出し・分割・結合

関数 説明
substr 部分文字列を取り出す
at n 文字目を取り出す
split 区切り文字で分割する(区切りは 1 文字ずつ)
split_string 区切り文字列で分割する
join 区切りを挟んで結合する
reverse 文字列を逆順にする

置換・削除・数え上げ

関数 説明
replace すべて置換する(複数の組を一度に置換できる)
replace_first 最初の 1 か所だけ置換する
erase すべて削除する(複数の文字列を一度に削除できる)
erase_first 最初の 1 か所だけ削除する
count 出現回数を数える

正規表現(Mc203-1以降)

書き方は 正規表現の書き方 を参照してください。

関数 説明
regex_match 一致するか調べる(一致部分・グループを (S0)… に入れる)
regex_find 最初に一致した位置を返す
regex_findall 一致した部分をすべて取り出す
regex_count 一致の個数を数える
regex_replace 一致した部分をすべて置換する
regex_replace_first 最初の 1 か所だけ置換する
regex_erase 一致した部分をすべて削除する
regex_erase_first 最初の 1 か所だけ削除する
regex_split 一致した部分で分割する
regex_escape 正規表現の特殊文字をエスケープする

比較・判定

関数 説明
compare 等しいか(大文字小文字を区別しない)
compare_case 等しいか(区別する)
compare_head 先頭が一致するか(区別しない)
compare_head_case 先頭が一致するか(区別する)
compare_tail 末尾が一致するか(区別しない)
compare_tail_case 末尾が一致するか(区別する)
length 文字数を返す
is_empty 空文字列か
is_digit 数字だけか
is_alpha 英字だけか

変換・整形

関数 説明
zen2han 全角を半角にする
han2zen 半角を全角にする
hira2kata ひらがなをカタカナにする
kata2hira カタカナをひらがなにする
sprintf 書式に従って文字列を作る

その他

関数 説明
choice 引数からランダムに 1 つ選ぶ
lsimg フォルダの画像ファイルを列挙する
mkdir フォルダを作る