Nested Spintax

Come l'annidamento trasforma lo spinning piatto in un potente motore di template — e perché l'approccio Spintax.Net è lo standard.

Cos'è il Nested Spintax?

Lo spintax normale sceglie un'opzione casuale da un elenco: {red|blue|green} produce uno di tre colori. Il Nested Spintax inserisce spintax dentro altro spintax — come una matrioska, dove ogni strato rivela più variazione all'interno.

Quando il motore incontra strutture annidate, risolve dall'espressione più interna verso l'esterno. Le parentesi graffe interne vengono valutate per prime e il loro risultato diventa parte dell'espressione esterna.

{red|{dark|light} blue} car

Qui {dark|light} si risolve per primo (ad es. dark), producendo {red|dark blue}. Poi l'enumerazione esterna sceglie un'opzione: red o dark blue.

Perché l'annidamento è importante

Senza annidamento, le opzioni sono piatte. Tre enumerazioni con tre opzioni ciascuna danno 3 + 3 + 3 = 9 frammenti. Con l'annidamento, gli stessi elementi si combinano in modo moltiplicativo: 3 × 3 × 3 = 27 varianti uniche da un singolo template compatto.

Questa crescita esponenziale è la chiave per generare contenuti davvero unici. Un template moderatamente complesso con enumerazioni e permutazioni annidate può produrre migliaia o milioni di output distinti — il tutto da un'unica fonte accuratamente elaborata.

Limitazioni comuni di altri strumenti

La maggior parte degli strumenti spintax gestisce solo le basi. Ecco cosa va tipicamente storto:

  • Solo enum-in-enum — supportano {a|{b|c}} ma nient'altro. Nessuna permutazione, nessuna variabile, nessun include all'interno di altri elementi.
  • Limiti di profondità — molti parser si bloccano dopo 2–3 livelli di annidamento, producendo silenziosamente output corrotto.
  • Nessuna pulizia — dopo la risoluzione delle strutture annidate, gli spazi collassano, la punteggiatura si raddoppia, le maiuscole si rompono. Il risultato richiede modifica manuale.
  • Nessuna componibilità — senza variabili e include, ogni template è un'isola. Riutilizzare blocchi comuni significa copia-incolla.

L'approccio Spintax.Net

Spintax.Net implementa l'annidamento come funzionalità di prima classe, non come un ripensamento. Cinque decisioni di design lo rendono possibile:

  1. Profondità arbitraria — non c'è limite di annidamento. Dieci livelli di profondità funzionano come due.
  2. Annidamento tra elementi diversi — enumerazioni dentro permutazioni, permutazioni dentro enumerazioni, variabili contenenti strutture annidate, include che incorporano interi template annidati. Qualsiasi elemento dentro qualsiasi altro.
  3. Risoluzione dall'interno verso l'esterno — il motore risolve sempre dal livello più profondo verso l'esterno. Questo rende la valutazione prevedibile e facilmente debuggabile.
  4. Post-elaborazione intelligente — dopo che tutti gli annidamenti sono risolti, il motore corregge automaticamente le maiuscole, elimina gli spazi doppi, corregge la spaziatura della punteggiatura e gestisce i confini delle frasi. L'output è testo pulito, non concatenazione grezza.
  5. Sicurezza — il rilevamento dei riferimenti circolari per #include previene i cicli infiniti. Le regole di scope delle variabili (runtime > locale > globale) prevengono sovrascritture accidentali.

Dal semplice all'avanzato

1. Enumerazione dentro enumerazione

{{premium|luxury} sedan|{compact|mid-size} SUV}

Le enumerazioni interne si risolvono per prime, poi quella esterna sceglie il risultato. Output possibili: premium sedan, luxury sedan, compact SUV, mid-size SUV.

2. Enumerazione dentro permutazione

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

Ogni elemento della permutazione contiene la propria enumerazione. Il motore risolve prima le enumerazioni interne, poi mescola e unisce. Esempio di output: blue apples, bananas and small oranges.

3. Variabili #set con spintax annidato

#set %product% = {{premium|budget} {laptop|tablet}|{smart|classic} phone}
#set %action% = {Buy|Get|Order}

%action% your new %product% today!

#set è una macro: conserva lo spintax annidato non risolto e lo ritira a sorte a ogni riferimento, quindi due menzioni di %product% possono produrre due prodotti diversi. Combinato con più variabili, il numero di varianti si moltiplica rapidamente.

4. #def — estratto una volta, vale ovunque

#def %brand% = {{Nord|Prime} Tools|Acme {Labs|Works}}

%brand% ships today. Order %brand% now!

#def risolve il suo spintax annidato una volta per render e mantiene quel risultato in ogni riferimento: qui entrambe le menzioni nominano lo stesso brand. Usa #def quando i riferimenti ripetuti devono coincidere (brand, contatori); #set quando ogni riferimento deve variare per conto suo.

5. Condizionali attorno a blocchi annidati

{?PLAN?{Upgrade to|Unlock} {Pro|Premium} features|{Try|Start with} the free tier}

Il pre-pass {?VAR?then|else} sceglie il ramo in base al fatto che %PLAN% abbia un valore — prima di qualsiasi scelta casuale. Il ramo scartato viene eliminato per intero: nulla al suo interno viene valutato o estratto.

6. Plurali con contatore annidato

#def %n% = {2|5|21}

Renders %n% {plural %n%: variant|variants} per click.

Il contatore è a sua volta spintax — e la sua variabile deve essere #def, non #set: la forma si sceglie dopo la risoluzione del contatore, e una macro in quel momento sarebbe ancora spintax non risolto. Quante forme indicare lo decide il locale del render: due in italiano o inglese, tre in russo o ucraino.

7. Include con annidamento

/#  main template  #/
#include "hero-text"

{Check out|Discover|Explore} our [<, > features|plans|pricing].

Il template incluso può a sua volta contenere enumerazioni, permutazioni, variabili e persino altri include. Il rilevamento dei riferimenti circolari mantiene tutto al sicuro.

IA + Nested Spintax

I grandi modelli linguistici sono eccellenti nella scrittura di template annidati complessi. Un singolo prompt può produrre un template con più livelli di annidamento, blocchi condizionali guidati dal valore ({?VAR?…}), plurali consapevoli del locale e sezioni riutilizzabili tramite include.

Il flusso di lavoro è semplice: usa l'IA per creare il template una volta, poi usa Spintax per generare varianti uniche a basso costo per sempre. Una chiamata API per creare il template. Zero chiamate API per generare ogni variante. Il Nested Spintax è ciò che rende tutto questo economicamente sostenibile — più profondo è l'annidamento, più output unici per template.

Per iniziare

Pronto a usare il Nested Spintax nei tuoi progetti? Provalo dal vivo nel playground — incolla un esempio qui sopra e guardalo risolversi. Il riferimento alla sintassi contiene la specifica completa, e per la produzione scegli uno dei quattro motori open source — oppure il plugin WordPress se il tuo runtime è quello.