Nested Spintax

Como o aninhamento transforma o spinning simples em um poderoso motor de templates — e por que a abordagem Spintax.Net é o padrão.

O que é Nested Spintax?

O spintax comum escolhe uma opção aleatória de uma lista: {red|blue|green} produz uma de três cores. O Nested Spintax coloca spintax dentro de spintax — como uma matrioska, onde cada camada revela mais variação por dentro.

Quando o motor encontra estruturas aninhadas, resolve da expressão mais interna para fora. As chaves internas são avaliadas primeiro e seu resultado se torna parte da expressão externa.

{red|{dark|light} blue} car

Aqui {dark|light} é resolvido primeiro (p. ex., dark), produzindo {red|dark blue}. Depois a enumeração externa escolhe uma opção: red ou dark blue.

Por que o aninhamento importa

Sem aninhamento, suas opções são planas. Três enumerações com três opções cada dão 3 + 3 + 3 = 9 fragmentos. Com aninhamento, os mesmos elementos se combinam multiplicativamente: 3 × 3 × 3 = 27 variantes únicas de um único template compacto.

Esse crescimento exponencial é a chave para gerar conteúdo verdadeiramente único. Um template moderadamente complexo com enumerações e permutações aninhadas pode produzir milhares ou milhões de saídas distintas — tudo a partir de uma única fonte cuidadosamente elaborada.

Limitações comuns de outras ferramentas

A maioria das ferramentas de spintax lida apenas com o básico. Veja o que normalmente dá errado:

  • Apenas enum-in-enum — suportam {a|{b|c}}, mas nada mais. Sem permutações, sem variáveis, sem includes dentro de outros elementos.
  • Limites de profundidade — muitos parsers quebram após 2–3 níveis de aninhamento, produzindo silenciosamente saída corrompida.
  • Sem limpeza — após resolver estruturas aninhadas, espaços colapsam, pontuação se duplica, capitalização se quebra. O resultado precisa de edição manual.
  • Sem composabilidade — sem variáveis e includes, cada template é uma ilha. Reutilizar blocos comuns significa copiar e colar.

A abordagem Spintax.Net

O Spintax.Net implementa o aninhamento como recurso de primeira classe, não como um adendo. Cinco decisões de design fazem funcionar:

  1. Profundidade arbitrária — não há limite de aninhamento. Dez níveis de profundidade funcionam da mesma forma que dois.
  2. Aninhamento entre elementos — enumerações dentro de permutações, permutações dentro de enumerações, variáveis contendo estruturas aninhadas, includes incorporando templates aninhados inteiros. Qualquer elemento dentro de qualquer outro.
  3. Resolução de dentro para fora — o motor sempre resolve do nível mais profundo para fora. Isso torna a avaliação previsível e fácil de depurar.
  4. Pós-processamento inteligente — após todos os aninhamentos serem resolvidos, o motor corrige automaticamente a capitalização, colapsa espaços duplicados, corrige espaçamento de pontuação e trata limites de frase. A saída é texto limpo, não concatenação bruta.
  5. Segurança — detecção de referências circulares para #include previne loops infinitos. Regras de escopo de variáveis (runtime > local > global) previnem sobrescrita acidental.

Do simples ao avançado

1. Enumeração dentro de enumeração

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

As enumerações internas são resolvidas primeiro; depois a externa escolhe o resultado. Saídas possíveis: premium sedan, luxury sedan, compact SUV, mid-size SUV.

2. Enumeração dentro de permutação

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

Cada elemento da permutação contém a sua própria enumeração. O motor resolve primeiro as enumerações internas, depois embaralha e junta. Exemplo de saída: blue apples, bananas and small oranges.

3. Variáveis #set com spintax aninhado

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

%action% your new %product% today!

#set é uma macro: guarda o spintax aninhado sem resolver e o sorteia novamente a cada referência, então duas menções de %product% podem render dois produtos diferentes. Combinado com várias variáveis, o número de variantes se multiplica rapidamente.

4. #def — sorteado uma vez, vale em todo lugar

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

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

#def resolve seu spintax aninhado uma vez por render e mantém esse resultado em todas as referências: aqui as duas menções nomeiam a mesma marca. Use #def quando referências repetidas precisam coincidir (marcas, contadores); #set quando cada referência deve variar por conta própria.

5. Condicionais em volta de blocos aninhados

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

O pre-pass {?VAR?then|else} escolhe o ramo conforme %PLAN% tem valor — antes de qualquer sorteio aleatório. O ramo descartado é eliminado por inteiro: nada dentro dele é avaliado ou sorteado.

6. Plurais com contador aninhado

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

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

O contador é ele próprio spintax — e sua variável precisa ser #def, não #set: a forma é escolhida depois que o contador é resolvido, e uma macro nesse momento ainda seria spintax não resolvido. Quantas formas fornecer é decisão do locale do render: duas em português ou inglês, três em russo ou ucraniano.

7. Includes com aninhamento

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

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

O template incluído pode conter, ele próprio, enumerações, permutações, variáveis e até outros includes. A detecção de referências circulares mantém tudo seguro.

IA + Nested Spintax

Grandes modelos de linguagem são excelentes para escrever templates aninhados complexos. Um único prompt pode produzir um template com múltiplos níveis de aninhamento, blocos condicionais guiados por valor ({?VAR?…}), plurais sensíveis ao locale e seções reutilizáveis via includes.

O fluxo de trabalho é simples: use a IA para criar o template uma vez, depois use o Spintax para gerar variantes únicas de forma econômica para sempre. Uma chamada de API para criar o template. Zero chamadas de API para gerar cada variante. O Nested Spintax é o que torna isso economicamente viável — quanto mais profundo o aninhamento, mais saídas únicas por template.

Primeiros passos

Pronto para usar o Nested Spintax em seus projetos? Experimente ao vivo no playground — cole qualquer exemplo acima e veja-o se resolver. A referência de sintaxe tem a especificação completa e, para produção, escolha um dos quatro motores open source — ou o plugin do WordPress se esse for o seu runtime.