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:
- Profundidade arbitrária — não há limite de aninhamento. Dez níveis de profundidade funcionam da mesma forma que dois.
- 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.
- 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.
- 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.
- Segurança — detecção de referências circulares para
#includeprevine 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.