さくらスクリプト
表情を変え、間(ま)を作り、演出を添える――それがさくらスクリプトですわ。 Pasta はこの記法を「解釈せず、そのまま通す」のが流儀。だからこそ自由が利きますの。 おほほ、賢いやり方でしょう?
さくらスクリプトは、アクション行内にインラインで埋め込む「\」から始まるコマンドトークンである。Pasta はコマンドの意味を解釈しない。必要なのは字句構造(記述ルール)のみで、検出したコマンドはそのまま透過し、解釈は areka 層が担う。
エスケープ文字
エスケープ文字は厳密に半角バックスラッシュ \ のみ。全角は使えない。
コマンドの字句構造
sakura_command ::= "\" ~ sakura_token ~ bracket_content?
sakura_token ::= [!\-+*?&_a-zA-Z0-9]+
bracket_content ::= "[" ~ bracket_chars ~ "]"
bracket_chars ::= ( "\]" | [^\]] )*
sakura_tokenは ASCII 英数字 +_!-+*?&の連続。先頭が数字でもよい。- 角括弧内容は非ネスト前提で、最初の「非エスケープな
]」で閉じる。\]は内容文字としての]を表す。 - 角括弧は半角の
[]のみが対象(全角括弧はコマンド括弧として扱わない)。 - 未知のトークンも受理される(Pasta は中身を構文解析しない)。
使用例
*表情変更
ぱすた:\s[0]こんにちは!
ぱすた:\s[4]元気だよ
ぱすた:\s[1]\w8それで\w8ね...
*改行とウェイト
ぱすた:最初の行\n次の行\n\w9最後の行
*ブラケットエスケープ
ぱすた:配列参照\s[a\]b]
*コマンドのみ
Bob:\![happy]了解しました。
角括弧内のエスケープと引用
角括弧内で値に特殊文字を含めたいときは、ukadoc の引用規則がそのまま透過する。
\]で]を文字として含める。- カンマを含む値はダブルクォートで囲む:
\![raise,OnTest,"100,2"] - ダブルクォートを含める場合は二重にする:
\![call,ghost,"the ""Name"""]
複雑なケースの方針
Pasta はさくらスクリプトの複雑な構文(入れ子、特殊な引数構成、高度なエスケープの相互作用)を検出・解釈しない。複雑さが必要な場合は、Lua 関数でトークン列(さくらスクリプトを含む文字列)を生成し、アクション行へ挿入する運用が推奨される。
*複雑な演出
ぱすた:@emit_complex_sakura() どうぞ
@emit_complex_sakura() が "\![embed,OnTalk]" のような文字列を返し、それがアクションに連結される。
解釈を areka 層に任せる潔さ、お分かりいただけまして? 表情も間も思いのまま。次は会話を動かす「変数・スコープ」へ参りますわよ!
権威的仕様: さくらスクリプトの字句構造の厳密な定義は doc/spec/07-sakura-script.md を参照。アクション行内での位置づけは doc/spec/06-action-line.md も参照。