Riferimento sintassi Spintax

Riferimento completo per il markup dei template spintax.

Enumerazioni { }

Seleziona casualmente una opzione dalla lista.

{option1|option2|option3}

Esempi

{blue|grey|clear}
{|free|paid} plan                 ← empty option = sometimes nothing
{Acme {Pro|Lite}}                ← nested enumerations
{order {|#42-A} confirmed}       ← nesting with empty option

Regole

  • Delimitatori: { e }
  • Separatore: |
  • Supporta l'annidamento a profondità arbitraria
  • Le opzioni vuote sono valide (producono stringa vuota)
  • La risoluzione avviene dall'espressione più interna verso l'esterno

Permutazioni [ ]

Seleziona N elementi, li mescola e li unisce con separatori.

Permutazioni semplici

Tutti gli elementi inclusi, separati da spazi:

[1|2|3|4]

Esempi di output: 1 4 3 2, 2 3 4 1, 3 2 4 1

Con separatore

Separatore uniforme specificato in < > all'inizio:

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

Esempi di output: 2, 1, 4, 3, 4, 3, 2, 1

Importante: Nessuno spazio tra [ e <separatore>.

Separatori per elemento

Ogni opzione può avere il proprio separatore definito con <sep> prima del | precedente. Il separatore viaggia con il suo elemento durante la mescolanza.

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

Esempi di output: 1, 3, 2 and 4, 3, 1, 2 and 4

Spaziatura automatica: I separatori testuali come <and> o <or> vengono automaticamente circondati da spazi: <and> produce  and . I separatori di punteggiatura (<,>) non vengono completati.

Permutazioni con combinazioni

Numero minimo/massimo di elementi e separatori configurabili:

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

Esempi di output: apple, plum and orange, apple and apricot, orange

Parametri di configurazione

ParametroPredefinitoDescrizione
minsizetotale di tuttiNumero minimo di elementi da selezionare
maxsizetotale di tuttiNumero massimo di elementi da selezionare
sep" " (spazio)Separatore tra elementi non finali
lastsepuguale a sepSeparatore prima dell'ultimo elemento

Regole delle permutazioni

  • Delimitatori: [ e ]
  • Il blocco di configurazione <...> deve seguire immediatamente [
  • I parametri di configurazione sono separati da punto e virgola
  • I valori stringa nella configurazione sono tra virgolette: sep=", "
  • Le enumerazioni e le permutazioni possono essere annidate nelle opzioni
  • Gli elementi HTML possono essere opzioni

Variabili %var%

Definisce una variabile riutilizzabile che viene sostituita ovunque appaia.

#set %VARIABLE_NAME% = value or spintax structure
#def %VARIABLE_NAME% = value or spintax structure

Esempi

#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.

Regole delle variabili

  • #set e #def devono iniziare all'inizio di una riga
  • I nomi delle variabili sono racchiusi in %: %nome%
  • I nomi delle variabili sono alfanumerici + underscore
  • I valori possono contenere qualsiasi sintassi spintax (enumerazioni, permutazioni, altre variabili)
  • Le variabili #set vengono espanse quando referenziate, non quando definite (valutazione lazy)
  • #set è una macro: il suo valore viene risostituito — e lo spintax al suo interno riestratto — a ogni riferimento. #def risolve il suo valore una volta per rendering e mantiene quel risultato ovunque
  • Le righe #set e #def vengono rimosse dall'output

Ambiti delle variabili nel plugin WordPress

Il plugin supporta tre ambiti di variabili. Quando lo stesso nome esiste in più ambiti, l'ambito più forte prevale:

  1. Variabili di runtime (più forte) — passate tramite shortcode: [spintax slug="greeting" name="Alice"]
  2. Variabili locali — definite con #set o #def all'interno del template
  3. Variabili globali (più debole) — definite nella pagina Impostazioni

Condizionali {?VAR?then|else}

I condizionali sono l'estensione distintiva di spintax.net alla famiglia GTW. Mentre {a|b} è una scelta casuale uniforme che ignora le variabili, {?VAR?then|else} sceglie in base al fatto che %VAR% abbia un valore.

Usalo per scelte guidate dai valori: mostrare una riga sul piano gratuito solo se esiste, renderizzare un blocco funzionalità pro solo se l'utente è su un piano a pagamento, nascondere un CTA non applicabile.

Il pre-pass gira prima dell'espansione di %var% e prima del selettore casuale di rami, così un ramo falsy viene scartato completamente — nulla al suo interno viene valutato.

Forme

{?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 e falsy

La regola è volutamente più semplice di JavaScript — truthy = almeno un carattere non-spazio:

Valore di %VAR%Truthy?
non dichiaratafalsy
stringa vuotafalsy
solo spazi bianchifalsy
"0", "false"truthy (non vuote)
qualsiasi altro testo o HTMLtruthy

Regole dei condizionali

  • I nomi delle variabili seguono la stessa regex di %var% (case-insensitive)
  • Il prefisso ! inverte il controllo: {?!VAR?assente}
  • Il primo | a profondità 0 separa then da else; quelli successivi restano letterali in else
  • I condizionali annidati si valutano dall'esterno — i rami falsy fanno short-circuit
  • La logica composita (&&, ||, confronti) non è supportata — pre-calcola una variabile guardia nell'assemblatore
  • Forme malformate ({??yes}, {?VAR}) non lanciano mai — il playground le segnala come avvisi
  • Approfondire: vedi la guida allo spintax condizionale con esempi e anti-pattern

Plurali {plural %n%: lingua|lingue}

Sceglie la forma grammaticalmente corretta di una parola in base a un numero. Il contatore precede i due punti, le forme seguono, separate da |.

La forma è scelta dalla locale di render, non dal template: quante forme devi fornire dipende quindi da quella locale. L'inglese ne richiede due, il russo tre.

{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

Forme per locale

La locale viene confrontata sul suo subtag di lingua, quindi ru-RU e ru si comportano allo stesso modo:

LocaleFormeScelta in base a
ru, uk, be, sr, hr, bs31 · 2–4 · da 5 in su
tutte le altre, incl. en2esattamente 1 · tutto il resto

Se il numero di forme non corrisponde, il motore segnala plural.arity e lascia il blocco visibile con parentesi a tutta larghezza: un plurale sbagliato non va mai in produzione in silenzio.

Regole dei plurali

  • L'apertura è letterale, spazio incluso: {plural . {plural: x} e {pluralN: x} non sono blocchi plurali
  • I due punti sono obbligatori: separano il contatore dalle forme
  • Il contatore è un riferimento %Var% o un intero letterale; le variabili nel contatore vengono sostituite prima della scelta della forma
  • I numeri negativi si prendono in valore assoluto; lo 0 riceve la forma «tutto il resto»
  • Una variabile contatore deve essere #def, non #set: #set è una macro, quindi un valore come {1|4|9} è ancora spintax non risolto quando si decide il plurale e il blocco viene reso vuoto. Il playground lo segnala come plural.count-macro
  • Un contatore non numerico o indefinito cancella il blocco invece di indovinare
  • Approfondire: vedi la guida ai plurali con le regole russe a tre forme ed esempi svolti

Include #include

Incorpora un altro template nella posizione della direttiva.

#include "hero-text"

Regole degli include

  • Il riferimento al template è tra virgolette doppie
  • Risolve per slug del template o ID numerico
  • I template inclusi possono contenere le proprie variabili e spintax
  • Gli include ricorsivi sono supportati
  • I riferimenti circolari vengono rilevati e bloccati
  • I template figli ereditano le variabili globali e di runtime ma non le locali #set / #def del genitore

Commenti /#...#/

Il testo tra i marcatori di commento viene rimosso dall'output prima di qualsiasi altra elaborazione.

/#
  This is a comment section.
  It can span multiple lines.
  It won't appear in output.
#/

Regole dei commenti

  • Delimitatore di inizio: /#
  • Delimitatore di fine: #/
  • Possono estendersi su più righe
  • Non possono essere annidati
  • Rimossi prima di qualsiasi altra elaborazione

Annidamento

Tutti gli elementi di sintassi possono essere annidati l'uno nell'altro a profondità arbitraria:

{option1|[<, > sub1|sub2|sub3]|option3}

[<minsize=2;maxsize=3;sep=", ";lastsep=" and "> {red|blue} apples|{big|small} oranges|bananas]

#set %var% = {a|[b|c]}

Post-elaborazione

Il motore applica la correzione automatica del testo dopo la generazione:

  1. Protegge URL, email, domini, decimali e abbreviazioni dalla capitalizzazione
  2. Elimina spazi e tabulazioni duplicati
  3. Rimuove gli spazi prima della punteggiatura (, . ! ?)
  4. Aggiunge uno spazio dopo la punteggiatura dove manca
  5. Capitalizza la prima lettera dell'output (saltando i tag HTML)
  6. Capitalizza dopo la punteggiatura di fine frase
  7. Capitalizza dopo i tag HTML a livello di blocco
  8. Capitalizza dopo le interruzioni di riga
  9. Ripristina i segnaposto protetti

Riepilogo della sintassi

FunzionalitàSintassiComportamento
Enumerazione{a|b|c}Sceglie un'opzione casuale
Permutazione[a|b|c]Sceglie N, mescola, unisce
Separatore[<sep> a|b|c]Permutazione con separatore uniforme
Sep per elemento[<,> a|b <x>|c]Permutazione con separatori personalizzati
Combinazioni[<config> a|b|c]Permutazione con conteggio min/max
Variabile#set %var% = valSostituzione riutilizzabile
Variabile (una volta)#def %var% = valRisolta una volta per rendering
Condizionale{?VAR?then|else}then se truthy; else se falsy
Plurale{plural %n%: lingua|lingue}Accorda la forma della parola al numero, per locale
Include#include "slug"Incorpora un altro template
Commento/#...#/Rimosso dall'output

La sintassi è compatibile con lo standard Generating The Web (GTW).