Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

さくらスクリプト

表情を変え、間(ま)を作り、演出を添える――それがさくらスクリプトですわ。 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 も参照。