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 22 3 4 13 2 4 1

セパレータ付き

先頭の < > で統一セパレータを指定:

[<, > 1|2|3|4]

出力例:2, 1, 4, 34, 3, 2, 1

重要:[<セパレータ> の間にスペースを入れないでください。

要素ごとのセパレータ

各オプションは、前の | の前に <sep> で独自のセパレータを定義できます。セパレータはシャッフル時に要素と一緒に移動します。

[<, > 1|2|3 < and >|4]

出力例:1, 3, 2 and 43, 1, 2 and 4

自動スペース:<and><or> のような単語セパレータは自動的にスペースが追加され、<and> and  になります。句読点セパレータ(<,>)は追加されません。

組み合わせ付き順列

最小/最大要素数とセパレータの設定が可能:

[<minsize=1;maxsize=3;sep=", ";lastsep=" and "> apple|plum|orange|apricot]

出力例:apple, plum and orangeapple and apricotorange

設定パラメータ

パラメータデフォルト説明
minsize全件数選択する最小要素数
maxsize全件数選択する最大要素数
sep" "(スペース)最後以外の要素間のセパレータ
lastsepsepと同じ最後の要素の前のセパレータ

順列のルール

  • 区切り文字:[]
  • 設定ブロック <...>[ の直後に続く必要があります
  • 設定パラメータはセミコロンで区切ります
  • 設定内の文字列値は引用符で囲みます: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つの変数スコープをサポートしています。同じ名前が複数のスコープに存在する場合、最も強いスコープが優先されます:

  1. ランタイム変数(最強)— ショートコード経由で渡す:[spintax slug="greeting" name="Alice"]
  2. ローカル変数 — テンプレート内で #set または #def で定義
  3. グローバル変数(最弱)— 設定ページで定義

条件 {?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(非空)
その他のテキストや HTMLtruthy

条件のルール

  • 変数名は %var% と同じ regex(大文字小文字非区別)
  • ! プレフィックスはチェックを反転:{?!VAR?なし}
  • 深さ 0 の最初の |thenelse を分け、それ以降は 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-RUru は同じ挙動になります。

ロケール語形数選択基準
ruukbesrhrbs31 · 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]}

後処理

エンジンは生成後に自動テキスト補正を適用します:

  1. URL、メール、ドメイン、小数、略語を大文字化から保護
  2. 重複するスペースとタブを除去
  3. 句読点の前のスペースを除去(, . ! ?
  4. 句読点の後にスペースがない場合追加
  5. 出力の最初の文字を大文字に(HTMLタグをスキップ)
  6. 文末の句読点の後を大文字に
  7. ブロックレベルHTMLタグの後を大文字に
  8. 改行の後を大文字に
  9. 保護されたプレースホルダーを復元

構文サマリー

機能構文動作
列挙{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) 標準と互換性があります。