Genest Spintax

Hoe nesting vlakke spinning transformeert in een krachtige sjabloonengine — en waarom de Spintax.Net-aanpak de standaard is.

Wat is genest Spintax?

Gewone spintax kiest een willekeurige optie uit een lijst: {rood|blauw|groen} levert een van drie kleuren op. Genest spintax plaatst spintax binnen spintax — als een matroesjka-pop, waarbij elke laag meer variatie binnenin onthult.

Wanneer de engine geneste structuren tegenkomt, lost hij van de binnenste expressie naar buiten op. De binnenste accolades worden eerst geëvalueerd en hun resultaat wordt onderdeel van de buitenste expressie.

{red|{dark|light} blue} car

Hier wordt {dark|light} eerst opgelost (bijv. dark), wat {red|dark blue} oplevert. Daarna kiest de buitenste enumeratie één optie: red of dark blue.

Waarom nesting ertoe doet

Zonder nesting zijn je opties vlak. Drie enumeraties met elk drie opties geven je 3 + 3 + 3 = 9 fragmenten. Met nesting combineren dezelfde elementen multiplicatief: 3 × 3 × 3 = 27 unieke varianten uit één compact sjabloon.

Deze exponentiële groei is de sleutel tot het genereren van werkelijk unieke content. Een matig complex sjabloon met geneste enumeraties en permutaties kan duizenden of miljoenen verschillende outputs produceren — allemaal uit één zorgvuldig opgestelde bron.

Veelvoorkomende beperkingen van andere tools

De meeste spintax-tools verwerken alleen de basis. Dit gaat er doorgaans mis:

  • Alleen enum-in-enum — ze ondersteunen {a|{b|c}} maar verder niets. Geen permutaties, geen variabelen, geen includes binnen andere elementen.
  • Dieptebeperkingen — veel parsers falen na 2–3 nestingniveaus en produceren stilzwijgend beschadigde output.
  • Geen opschoning — na het oplossen van geneste structuren klappen spaties in, verdubbelt interpunctie en breekt hoofdlettergebruik. Het resultaat vereist handmatige bewerking.
  • Geen composabiliteit — zonder variabelen en includes is elk sjabloon een eiland. Hergebruik van veelgebruikte blokken betekent kopiëren en plakken.

De Spintax.Net-aanpak

Spintax.Net implementeert nesting als eersteklas functie, niet als bijzaak. Vijf ontwerpbeslissingen maken het mogelijk:

  1. Willekeurige diepte — er is geen nestinglimiet. Tien niveaus diep werkt hetzelfde als twee.
  2. Kruiselement-nesting — enumeraties binnen permutaties, permutaties binnen enumeraties, variabelen met geneste structuren, includes die volledige geneste sjablonen insluiten. Elk element binnen elk ander.
  3. Van-binnen-naar-buiten-resolutie — de engine lost altijd van het diepste niveau naar buiten op. Dit maakt evaluatie voorspelbaar en debugbaar.
  4. Slimme nabewerking — nadat alle nesting is opgelost, corrigeert de engine automatisch hoofdlettergebruik, verwijdert dubbele spaties, herstelt interpunctiespatiëring en verwerkt zinsovergangen. De output is schone tekst, geen ruwe aaneenschakeling.
  5. Veiligheid — detectie van circulaire verwijzingen voor #include voorkomt oneindige lussen. Variabelescopegebruik (runtime > lokaal > globaal) voorkomt onbedoelde overschrijvingen.

Van eenvoudig tot geavanceerd

1. Enumeratie in enumeratie

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

Binnenste enumeraties worden eerst opgelost, daarna kiest de buitenste het resultaat. Mogelijke uitvoer: premium sedan, luxury sedan, compact SUV, mid-size SUV.

2. Enumeratie in permutatie

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

Elk permutatie-element bevat zijn eigen enumeratie. De engine lost eerst de binnenste enumeraties op, husselt daarna en voegt samen. Voorbeelduitvoer: blue apples, bananas and small oranges.

3. #set-variabelen met genest spintax

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

%action% your new %product% today!

#set is een macro: het bewaart het geneste spintax onopgelost en trekt het bij elke referentie opnieuw — twee vermeldingen van %product% kunnen dus twee verschillende producten opleveren. Gecombineerd met meerdere variabelen vermenigvuldigt het aantal varianten zich snel.

4. #def — één keer trekken, overal geldig

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

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

#def lost zijn geneste spintax één keer per render op en houdt dat resultaat bij elke referentie vast — hier noemen beide vermeldingen hetzelfde merk. Gebruik #def wanneer herhaalde referenties moeten overeenkomen (merknamen, tellers); #set wanneer elke referentie zelfstandig moet variëren.

5. Conditionals rond geneste blokken

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

De {?VAR?then|else}-pre-pass kiest de tak op basis van of %PLAN% een waarde heeft — vóór enige willekeurige keuze. De afgevallen tak wordt in zijn geheel verworpen: niets erin wordt geëvalueerd of getrokken.

6. Meervouden met geneste teller

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

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

De teller is zelf spintax — en zijn variabele moet #def zijn, niet #set: de vorm wordt gekozen nadat de teller is opgelost, en een macro zou op dat moment nog onopgelost spintax zijn. Hoeveel vormen je aanlevert, bepaalt de render-locale: twee in het Nederlands of Engels, drie in het Russisch of Oekraïens.

7. Includes met nesting

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

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

De ingesloten sjabloon kan zelf enumeraties, permutaties, variabelen en zelfs verdere includes bevatten. Detectie van circulaire verwijzingen houdt alles veilig.

AI + genest Spintax

Grote taalmodellen zijn uitstekend in het schrijven van complexe geneste sjablonen. Een enkele prompt kan een sjabloon produceren met meerdere nestingniveaus, waardegedreven conditionele blokken ({?VAR?…}), locale-bewuste meervouden en herbruikbare secties via includes.

De workflow is eenvoudig: gebruik AI om het sjabloon eenmalig te maken en gebruik vervolgens Spintax om voor altijd goedkoop unieke varianten te genereren. Eén API-aanroep om het sjabloon te maken. Nul API-aanroepen om elke variant te genereren. Genest spintax is wat dit economisch haalbaar maakt — hoe dieper de nesting, hoe meer unieke outputs per sjabloon.

Aan de slag

Klaar om genest spintax in je projecten te gebruiken? Probeer het live in de playground — plak een voorbeeld van hierboven en zie het zich oplossen. De syntaxreferentie bevat de volledige specificatie, en kies voor productie een van de vier open-source engines — of de WordPress-plugin als dat je runtime is.