Stratim: Как одна книга заставила меня переизобрести формат

Всё началось с того, что я закончил писать книгу. Сюжет был отточен, герои живыми, текст вылизан до запятой. Я чувствовал себя творцом Счастье длилось ровно до тех пор, пока не встал вопрос публикации. Нужно сделать FB2. Я открыл спецификацию FB2 и... ужаснулся. Тонны XML-тегов, атрибуты, вложенные структуры, требования к валидации. Я хотел просто поделиться историей, а оказался вынужден работать программистом-верстальщиком. Одно неверно закрытый тег <section> или забытый атрибут xmlns:l — и ваша любимая читалка выдаёт «Файл повреждён». Я проклял всё на свете. Часы, потраченные на правку тегов вместо творчества, бесили. Почему в эпоху простоты мы вынуждены копаться в «XML-спагетти», чтобы просто выложить книгу? Я решил, что так продолжаться не может. Нужно решение, которое позволит автору писать текст, а не код. Так родился Stratim. Философия: Предсказуемость и свобода автора Stratim (от англ. Structure + Atom) создан для того, чтобы убрать барьер между вашим текстом и его структурой. Это детерминированный текстовый формат, который объединяет простоту Markdown с мощью строгой разметки. Три кита, на которых стоит проект: 1. Никакой магии. Парсер не угадывает намерения. Вы управляете структурой явно, через простые команды ~. 2. Метаданные — часть текста. Автор, название, серия и язык живут прямо в начале файла. Никаких отдельных конфигов. 3. Один вход — один выход. Один и тот же .stratim файл всегда даст идентичный результат конвертации. Никаких сюрпризов. Как это работает? Забудьте про закрывающие теги. Синтаксис Stratim чистый и читаемый. Пример файла book.stratim ~ t [Мастер и Маргарита] ~ a [Булгаков] first="Михаил" ~ l ru ~ s [Роман] ~ * (title) [Титульный лист] @a,t,s type="fulllist" ~ # (ch1) [Никогда не разговаривайте с неизвестными] В белом плаще с кровавым подбоем... ::: E текст ::: с форматированием. См. примечание #ниже[fn1]. 1\. Первый пункт списка 2\. Второй пункт 2\.1. Вложенный пункт ~ f (fn1) [Ссылка на исторический комментарий.] Что происходит под капотом? 1. Вы запускаете официальный парсер (написан на языке D, собирается через dub). 2. Лексер разбивает текст на токены. 3. Парсер строит AST (дерево структуры) с учетом ваших команд. 4. Генератор сериализует это в валидный FictionBook 2.1 XML. 5. Вы получаете идеальный .fb2, который открывается везде. Почему это важно? Проблемы и решения Stratim: 1. XML-многословие и сложность • Чистый текст. Структура читается глазами. 2. Ручная правка метаданных в куче тегов • Команды ~ t, ~ a в самом верху файла. 3. Страх сломать вёрстку при правке • Детерминированный парсинг. Правь текст, структура сама подстроится. 4. Сложные сноски и перекрёстные ссылки • Нативная поддержка #текст[id] и ~ f (id) [...]. Текущий статус: v0.1-alpha Проект, рожденный из боли автора, уже превратился в рабочий инструмент: - Парсер на D (стабильный и быстрый) - Экспорт в FB2 2.1 - Метаданные, сборка титульных листов, списки, сноски - Инлайн-форматирование (курсив, жирный, цитаты, код) - Сложная вложенность и списки дорабатываются в v0.1-beta Код открыт под GPL v3, документация — под GNU FDL 1.3. Для коммерческого использования доступна отдельная лицензия. Попробовать прямо сейчас Больше не нужно ругаться на редакторы. Возьмите контроль над своей книгой: git clone https://github.com/nobrazov/stratim-standard.git cd stratim-standard/reference-parser dub build --build=release ./stratim ../test-suite/t01_basic.stratim test.fb2 Официальный сайт и документация: nobrazov.github.io/stratim-standard Исходный код: github.com/nobrazov/stratim-standard Stratim — это не просто конвертер. Это попытка вернуть авторам время для творчества, убрав технический ад из процесса подготовки книги. Присоединяйтесь к тестированию, предлагайте идеи и помогайте делать формат лучше.

Stratim: Как одна книга заставила меня переизобрести формат | Сетка — социальная сеть от hh.ru