Spintax на примере

Быстрее всего понять spintax — увидеть, как готовый текст становится шаблоном. Поэтому мы взяли настоящий абзац — блок О Spintax с нашей же главной — и разметили его по шагам, ровно как описано в гайде по обратному факторингу. Каждая конструкция ниже покрашена так же, как её красят наши расширения для редакторов; каждый шаг ведёт в свой гайд.

Готовый текст

Обратный факторинг начинается с текста, которым вы уже довольны, — разметку добавляем последней. Вот одно предложение источника — те же слова, что в блоке О Spintax:

Spintax — это наш собственный язык шаблонов для создания множества по-настоящему уникальных вариаций текста из одного источника, который вы контролируете.

Ниже мы не придумываем новых слов — только размечаем выборы, которые у автора уже были в голове.

1. Словарь выборов

Прежде чем трогать предложение, объявите переиспользуемые слова один раз. #set перекатывается при каждом употреблении; #def катится один раз и запоминается (чтобы число и его существительное были согласованы). Поправите строку здесь — изменится каждое предложение, где она используется.

#set %UniqueGen% = {по-настоящему уникальных|неповторимых|по-настоящему разных}
#set %Engine% = {движок|spintax-движок|рендерер}
#def %pages% = {1|3|48}

Полный гайд: Переменные →

2. Меняем слова и целые клаузы

Базовый оператор — {a|b|c}. Разрезайте наименьший отличающийся фрагмент — одно слово — либо целую вводную клаузу, всегда оставляя общий хвост за пределами разреза, чтобы грамматика не рассинхронилась.

Spintax {(spin syntax)|, «spin syntax»,} — это %OwnLang% для создания множества %UniqueGen% вариаций текста.

Различается только вставка в скобках — её и разрезаем; общее Spintax…это остаётся снаружи. Разрезать целиком {Spintax…это|Spintax…это} значило бы дублировать неизменное и провоцировать рассинхрон.

Полный гайд: Грамматически безопасная синонимизация →

3. Выбираем и переставляем

Перестановка [<…> a|b|c] берёт случайное подмножество и тасует порядок — вариативности куда больше, чем от стопки синонимов. Здесь список фич берёт по 3–6 пунктов за рендер; список движков сохраняет все четыре, но переставляет (minsize=maxsize=4).

Он добавляет [<minsize=3;maxsize=6;sep=", ";lastsep=" и "> перестановки|переменные|условия|согласование с числом|include|постобработку].

… для [<minsize=4;maxsize=4;sep=", ";lastsep=" и "> JavaScript|PHP|Python|Object Pascal]

Полный гайд: Перестановки →

4. Ветвимся по значению

Условие {?VAR?тогда|иначе} выбирает по значению переменной, а не случайно. Переключите один #def — и целая клауза меняется целиком.

#def %ai% = {да|}{?ai?Пусть ИИ соберёт шаблон один раз|Напишите шаблон вручную}; дальше %Engine% рендерит сколько угодно вариантов.

Полный гайд: Условия →

5. Согласуемся с числом

{plural %n%: одна|две|пять} подбирает нужную форму существительного под число. Русский — трёхформный: 1 страницу, 3 страницы, 48 страниц. Так как %pages% — это #def, число и форма всегда совпадают, и плюрал спокойно вкладывается в перестановку.

на [<minsize=1;maxsize=3;sep=", ";lastsep=" или "> %pages% {plural %pages%: страницу|страницы|страниц}|десятки сайтов|разные локали]

Даёт 1 страницу, 3 страницы, 48 страниц — никогда «1 страниц». Полный гайд: Плюралы →

6. Склоняем по падежам

Английскому хватает одной формы существительного, русскому — нет. Существительное, которое встречается в нескольких падежах, становится падежной семьёй — по одному #def на форму, по одному слову (никаких списков синонимов, иначе формы перекатятся вразнобой):

#def %BrandGen% = магазина
#def %BrandDat% = магазину
#def %BrandPrep% = магазине

Дальше каждый предлог связывает свой падеж в одной ветке: об этом %BrandPrep%, для %BrandGen%, к %BrandDat% — и на выходе «…об этом магазине… для магазина… к магазину». Полный гайд: Русские падежи →

Шаблон целиком

#set %OwnLang% = {наш собственный язык шаблонов|разметка, которую мы сделали|наш язык шаблонов}
#set %UniqueGen% = {по-настоящему уникальных|по-настоящему разных|неповторимых}
#set %UniqueAcc% = {уникальный|по-настоящему разный|неповторимый}
#set %Engine% = {движок|spintax-движок|рендерер}
#set %N% = {сотни|тысячи|миллионы}
#def %ai% = {да|}
#def %pages% = {1|3|48}
#def %BrandGen% = магазина
#def %BrandDat% = магазину
#def %BrandPrep% = магазине

<p>Spintax {(spin syntax)|, «spin syntax»,} — это %OwnLang% для создания множества %UniqueGen% вариаций текста из одного источника, который вы контролируете. Вы пишете один шаблон, который кодирует [<minsize=4;maxsize=4;sep=", ";lastsep=" и "> альтернативы|порядок|условия|переменные], а %Engine% разворачивает его в %N% вариантов.</p>
<p>{Расскажите ИИ об этом %BrandPrep%|Опишите преимущества %BrandGen%} — и %Engine% соберёт сотни описаний {для %BrandGen%|под витрину %BrandGen%}, ведя посетителя к %BrandDat%.</p>
<p>Так вы раскатываете %UniqueAcc% контент на [<minsize=1;maxsize=3;sep=", ";lastsep=" или "> %pages% {plural %pages%: страницу|страницы|страниц}|десятки сайтов|разные локали] — уникальный по построению.</p>
<p>{И он работает везде|Он запускается где угодно}: четыре независимых реализации с открытым кодом — для [<minsize=4;maxsize=4;sep=", ";lastsep=" и "> JavaScript|PHP|Python|Object Pascal].</p>

Как покрашено (те же scope-категории, что в наших расширениях для редакторов):

  • #set директива (#set / #def)
  • {a|b} альтернатива {a|b}
  • [<…>] перестановка [<…> a|b]
  • %VAR% переменная %VAR%
  • {?…} условие {?…}
  • {plural} плюрал {plural …}

Откроет песочницу с этим шаблоном — жмите Generate для бесконечных вариантов вживую или правьте.

Три настоящих рендера

Один шаблон — три разных текста, реальный вывод @spintax/core на фиксированных сидах. Видно, как переключается условие, согласуется число и переставляются списки.

Рендер 1 seed 4

Spintax (spin syntax) — это наш собственный язык шаблонов для создания множества по-настоящему уникальных вариаций текста из одного источника, который вы контролируете. Вы пишете один шаблон, который кодирует переменные, порядок, альтернативы и условия, а spintax-движок разворачивает его в миллионы вариантов.

Опишите преимущества магазина — и spintax-движок соберёт сотни описаний под витрину магазина, ведя посетителя к магазину.

Так вы раскатываете неповторимый контент на десятки сайтов или 1 страницу — уникальный по построению.

И он работает везде: четыре независимых реализации с открытым кодом — для JavaScript, PHP, Object Pascal и Python.

Рендер 2 seed 11

Spintax, «spin syntax», — это разметка, которую мы сделали для создания множества неповторимых вариаций текста из одного источника, который вы контролируете. Вы пишете один шаблон, который кодирует переменные, порядок, альтернативы и условия, а spintax-движок разворачивает его в тысячи вариантов.

Расскажите ИИ об этом магазине — и рендерер соберёт сотни описаний для магазина, ведя посетителя к магазину.

Так вы раскатываете неповторимый контент на десятки сайтов, разные локали или 3 страницы — уникальный по построению.

И он работает везде: четыре независимых реализации с открытым кодом — для JavaScript, Python, Object Pascal и PHP.

Рендер 3 seed 9

Spintax (spin syntax) — это наш язык шаблонов для создания множества неповторимых вариаций текста из одного источника, который вы контролируете. Вы пишете один шаблон, который кодирует переменные, порядок, альтернативы и условия, а движок разворачивает его в тысячи вариантов.

Опишите преимущества магазина — и spintax-движок соберёт сотни описаний для магазина, ведя посетителя к магазину.

Так вы раскатываете неповторимый контент на 48 страниц — уникальный по построению.

И он работает везде: четыре независимых реализации с открытым кодом — для JavaScript, PHP, Object Pascal и Python.

Такая же подсветка в твоём редакторе

Цвета выше — это грамматика, которую мы поставляем как расширения для редакторов; поставь её, и твои шаблоны подсветятся так же: VS Code (301st.spintax) или Sublime Text (Package Control: Spintax).

Куда дальше