- Bump version to 0.6.0 and enhance project description in pyproject.toml. - Introduce runtime state management with RuntimeCandidateState and RuntimeCandidateStateStore classes to handle candidate updates and state retrieval. - Implement server routes for updating and reading runtime candidate states, handling various request scenarios and errors. - Add tests for runtime layout and prompt random choice functionality, ensuring robust validation and state management. - Enhance frontend with runtime candidate editor, including UI updates and synchronization with server state.
3.2 KiB
3.2 KiB
Candidate language specification
対象ノード
| ノード | # |
! |
入れ子 |
|---|---|---|---|
| Prompt Random Choice | コメント | 通常文字 | なし |
| Prompt Random Choice Ex | 各階層でコメント | 通常文字 | あり |
| Runtime Prompt Random Choice | コメント | 強制選択 | なし |
| Runtime Prompt Random Choice Ex | 各階層でコメント | 各階層で強制選択 | あり |
共通候補分割
- 候補区切りは実改行または
|。 - CRLFとCRはLFへ正規化する。
- 候補前後の空白、タブ、改行、カンマを除去する。
- 空候補は無視する。
()は明示的な空文字候補。- 制御記号はtrim後の先頭1文字だけを判定する。
# コメント
- 先頭が
#の候補全体を除外する。 #自体を除去して通常候補へ戻す処理ではない。#!candidateはコメント。- Exでは各階層に同じ規則を再帰適用する。
Runtime限定の ! 強制選択
- 同じ階層に
!候補があれば、上から最初の1件だけを残す。 - 通常候補と2件目以降の
!候補は、その階層では選択しない。 - 出力から制御用の先頭
!を1文字だけ除去する。 !()は空文字を強制選択する。- 単独の
!はHard Error。 !!candidateは!candidateを強制出力する。- 従来版2ノードでは
!を通常文字として出力する。
! は現在のchange_every保持期間へ割り込まず、次回再選択時に評価する。
Exの階層と確率
- 1候補は直接の子グループを最大1個持てる。
- 子候補はさらに子グループを持てるため、縦方向の入れ子は許可する。
- 子を持つ親候補を同じ階層へ複数並べることも許可する。
- 各階層で
#と、Runtimeの場合は最初の!を適用する。 - 絞り込み後の最終葉候補は、すべて等しい確率で選択する。
- 実装は各枝の葉数を重みとして1経路だけを選び、完成文字列を全列挙しない。
- 同じ文字列へ至る経路が複数あれば、それぞれ独立した葉として重みになる。
例:
A{x|y|z}
B{!p|q}
Runtime Exでの最終葉は A, x、A, y、A, z、B, p の4件で、
各確率は 1/4。
禁止する直積構文
同じ候補へ直接子グループを複数並べる構文は禁止する。
A{B|C}{D|E}
- 2個目の直接子グループを構文解析中に検出する。
- 候補展開や葉選択を開始する前にHard Errorとする。
- 自動的な
|補完や式の書き換えはしない。 - エラーには対象候補、位置、理由、String Joinを使う代替方法を含める。
許可例:
black hair{straight long hair|short cut}
blonde hair{long hair{side braid|black ribbon}|wavy long hair}
出力
- 親子の非空文字列を
,で結合する。 - 独立したランダム軸は別ノードへ分け、String Joinで結合する。
- 空の
selected_textに対するselected_text_safeはempty。 selected_text_safeはファイル名禁止記号、Windows予約名、過大な長さを回避する。