Spintax構文リファレンス
spintaxテンプレートマークアップの完全なリファレンス。
列挙 { }
リストからランダムに1つのオプションを選択します。
{option1|option2|option3}
例
{blue|grey|clear}
{|free|paid} plan ← empty option = sometimes nothing
{Acme {Pro|Lite}} ← nested enumerations
{order {|#42-A} confirmed} ← nesting with empty option
ルール
- 区切り文字:
{と} - セパレータ:
| - 任意の深さまでネストをサポート
- 空のオプションは有効(空文字列を生成)
- 最も内側の式から外側に向かって解決
順列 [ ]
N個の要素を選択し、シャッフルし、セパレータで結合します。
シンプルな順列
すべての要素を含み、スペースで区切り:
[1|2|3|4]
出力例:1 4 3 2、2 3 4 1、3 2 4 1
セパレータ付き
先頭の < > で統一セパレータを指定:
[<, > 1|2|3|4]
出力例:2, 1, 4, 3、4, 3, 2, 1
重要:[ と <セパレータ> の間にスペースを入れないでください。
要素ごとのセパレータ
各オプションは、前の | の前に <sep> で独自のセパレータを定義できます。セパレータはシャッフル時に要素と一緒に移動します。
[<, > 1|2|3 < and >|4]
出力例:1, 3, 2 and 4、3, 1, 2 and 4
自動スペース:<and> や <or> のような単語セパレータは自動的にスペースが追加され、<and> は and になります。句読点セパレータ(<,>)は追加されません。
組み合わせ付き順列
最小/最大要素数とセパレータの設定が可能:
[<minsize=1;maxsize=3;sep=", ";lastsep=" and "> apple|plum|orange|apricot]
出力例:apple, plum and orange、apple and apricot、orange
設定パラメータ
| パラメータ | デフォルト | 説明 |
|---|---|---|
minsize | 全件数 | 選択する最小要素数 |
maxsize | 全件数 | 選択する最大要素数 |
sep | " "(スペース) | 最後以外の要素間のセパレータ |
lastsep | sepと同じ | 最後の要素の前のセパレータ |
順列のルール
- 区切り文字:
[と] - 設定ブロック
<...>は[の直後に続く必要があります - 設定パラメータはセミコロンで区切ります
- 設定内の文字列値は引用符で囲みます:
sep=", " - 列挙と順列はオプション内にネストできます
- HTML要素をオプションにできます
変数 %var%
出現する場所で置換される再利用可能な変数を定義します。
#set %VARIABLE_NAME% = value or spintax structure
#def %VARIABLE_NAME% = value or spintax structure
例
#set %name% = John
#set %greeting% = {Hello|Hi|Hey}
#set %items% = [<minsize=2;maxsize=3;sep=", ";lastsep=" and "> apples|oranges|bananas]
Some text with %name% and %greeting%, also %items%.
/# %greeting% above may differ between the two references — #set re-rolls.
#def picks once and keeps it: #/
#def %tone% = {friendly|warm|upbeat}
A %tone% intro, and a %tone% outro — always the same word.
変数のルール
#setと#defは行頭から始める必要があります- 変数名は
%で囲みます:%name% - 変数名は英数字とアンダースコア
- 値には任意のspintax構文を含めることができます(列挙、順列、他の変数)
#set変数は定義時ではなく参照時に展開されます(遅延評価)#setはマクロです。参照のたびに値が再展開され、その中の spintax も引き直されます。#defはレンダリングごとに一度だけ値を解決し、その結果をすべての参照で保持します#setと#defの行は出力から除去されます
WordPressプラグインの変数スコープ
プラグインは3つの変数スコープをサポートしています。同じ名前が複数のスコープに存在する場合、最も強いスコープが優先されます:
- ランタイム変数(最強)— ショートコード経由で渡す:
[spintax slug="greeting" name="Alice"] - ローカル変数 — テンプレート内で
#setまたは#defで定義 - グローバル変数(最弱)— 設定ページで定義
条件 {?VAR?then|else}
条件は GTW ファミリーに対する spintax.net 独自の拡張 です。{a|b} が変数を見ない一様ランダム選択であるのに対し、{?VAR?then|else} は %VAR% に値があるかどうかで選択します。
値駆動の選択に使います:無料プランがあるときだけ無料プラン行を表示する、ユーザーが有料プランの場合だけプロ機能ブロックをレンダリングする、適用されない CTA を隠す。
プリパスは %var% 展開とランダム分岐選択器より前に走るので、falsy 分岐は完全に破棄されます — その中身は評価されません。
形式
{?VAR?then} ← truthy ⇒ then; falsy ⇒ empty
{?VAR?then|else} ← truthy ⇒ then; falsy ⇒ else
{?!VAR?then|else} ← inverted
{?HasFreeTier? — free tier available since %founded%|, trusted since %founded%}
Truthy と falsy
ルールは JavaScript より意図的にシンプル — truthy = 少なくとも 1 つの非空白文字:
%VAR% の値 | Truthy? |
|---|---|
| 未宣言 | falsy |
| 空文字列 | falsy |
| 空白のみ | falsy |
"0"、"false" | truthy(非空) |
| その他のテキストや HTML | truthy |
条件のルール
- 変数名は
%var%と同じ regex(大文字小文字非区別) !プレフィックスはチェックを反転:{?!VAR?なし}- 深さ 0 の最初の
|がthenとelseを分け、それ以降はelse内でリテラル - ネストされた条件は外側から評価 — falsy 分岐はショートサーキット
- 複合論理(
&&、||、比較)は非対応 — アセンブラでガード変数を事前計算 - 不正な形式(
{??yes}、{?VAR})は決してスローしない — プレイグラウンドで警告として表示 - 詳細: 条件 spintax ガイド に例とアンチパターン
複数形 {plural %n%: language|languages}
数値に応じて文法的に正しい語形を選びます。カウントはコロンの前、語形はコロンの後に | 区切りで置きます。
語形を決めるのはテンプレートではなくレンダリング時のロケールです。したがって必要な語形の数はロケール次第で、英語は2つ、ロシア語は3つを要求します。
{plural %n%: form1|form2} ← 2-form locale (en, de, es…)
{plural %n%: form1|form2|form3} ← 3-form locale (ru, uk, sr…)
#def %LangCount% = 5
supports %LangCount% {plural %LangCount%: language|languages}
← supports 5 languages
ロケール別の語形数
ロケールは言語サブタグで判定されるため、ru-RU と ru は同じ挙動になります。
| ロケール | 語形数 | 選択基準 |
|---|---|---|
ru、uk、be、sr、hr、bs | 3 | 1 · 2–4 · 5 以上 |
その他すべて(en を含む) | 2 | ちょうど 1 · それ以外 |
語形の数が合わない場合、エンジンは plural.arity を報告し、全角波括弧でブロックを可視化したまま残します。誤った複数形が黙って公開されることはありません。
複数形のルール
- 開始部分はスペースを含めてリテラルです:
{plural。{plural: x}や{pluralN: x}は複数形ブロックではありません - コロンは必須で、カウントと語形を分けます
- カウントは
%Var%参照か整数リテラル。カウント内の変数は語形選択より前に置換されます - 負の数は絶対値で扱い、
0は「それ以外」の語形になります - カウント変数は
#setではなく#defにしてください —#setはマクロなので、{1|4|9}のような値は複数形を決める時点でまだ未解決の spintax であり、ブロックは空になります。プレイグラウンドはplural.count-macroとして表示します - 数値でない、または未定義のカウントは、推測せずブロックを消去します
- 詳細: 複数形 spintax ガイド にロシア語の3語形ルールと実例
インクルード #include
ディレクティブの位置に別のテンプレートを埋め込みます。
#include "hero-text"
インクルードのルール
- テンプレート参照はダブルクォートで囲みます
- テンプレートスラグまたは数値IDで解決
- インクルードされたテンプレートは独自の変数とspintaxを含むことができます
- 再帰的インクルードをサポート
- 循環参照は検出されブロックされます
- 子テンプレートはグローバルおよびランタイム変数を継承しますが、親の
#set/#defローカル変数は継承しません
コメント /#...#/
コメントマーカー間のテキストは、他の処理の前に出力から除去されます。
/#
This is a comment section.
It can span multiple lines.
It won't appear in output.
#/
コメントのルール
- 開始区切り文字:
/# - 終了区切り文字:
#/ - 複数行にまたがることができます
- ネストはできません
- 他の処理の前に除去されます
ネスト
すべての構文要素は任意の深さで相互にネストできます:
{option1|[<, > sub1|sub2|sub3]|option3}
[<minsize=2;maxsize=3;sep=", ";lastsep=" and "> {red|blue} apples|{big|small} oranges|bananas]
#set %var% = {a|[b|c]}
後処理
エンジンは生成後に自動テキスト補正を適用します:
- URL、メール、ドメイン、小数、略語を大文字化から保護
- 重複するスペースとタブを除去
- 句読点の前のスペースを除去(
,.!?) - 句読点の後にスペースがない場合追加
- 出力の最初の文字を大文字に(HTMLタグをスキップ)
- 文末の句読点の後を大文字に
- ブロックレベルHTMLタグの後を大文字に
- 改行の後を大文字に
- 保護されたプレースホルダーを復元
構文サマリー
| 機能 | 構文 | 動作 |
|---|---|---|
| 列挙 | {a|b|c} | ランダムに1つ選択 |
| 順列 | [a|b|c] | N個選択、シャッフル、結合 |
| セパレータ | [<sep> a|b|c] | 統一セパレータ付き順列 |
| 要素別セパレータ | [<,> a|b <x>|c] | カスタムセパレータ付き順列 |
| 組み合わせ | [<config> a|b|c] | 最小/最大数付き順列 |
| 変数 | #set %var% = val | 再利用可能な置換 |
| 変数(1回のみ) | #def %var% = val | レンダリングごとに一度だけ解決 |
| 条件 | {?VAR?then|else} | truthy なら then、falsy なら else |
| 複数形 | {plural %n%: language|languages} | ロケールに従って語形を数値に一致させる |
| インクルード | #include "slug" | 別のテンプレートを埋め込み |
| コメント | /#...#/ | 出力から除去 |
構文は Generating The Web (GTW) 標準と互換性があります。