Записки о неопределенностях в textile (недописано)

Textile — человекоориентированный язык разметки. Очень удачный. Беда в том, что он был придуман с потолка PHP'шниками и не имеет четких правил по поводу того, как обрабатывать те или иные символы.

К примеру, чтобы подчеркнуть слово как вставленное, нужно обрамить его знаками +. А как мы будем интерпретировать текст 1+2+3=6 — как 123=6, или все-таки как 1+2+3=6? Официальное руководство часто дает только общие понятия о том, как пользоваться текстайлом. А вот как быть тем, кто пишет парсеры?

Вот кое-какие правила, которые я сумел вывести, базируя их на основе здравого смысла и поведения реализаций на PHP и RedCloth. На основе их работает мой парсер текстайла.

Модификаторы для фраз среди текста

Символ считается модификатором, а не частью текста, если он «прилипает» к выделяемому тексту с одной стороны и окружен пробелом, табуляцией, началом или концом строки с другой. К примеру, + word + уже не будет считаться вставленным словом из-за пробелов между знаками + и выделяемым словом. Также не будет выделяться 1+2+3=6

Если фраза между модификаторами пуста, модификаторы считаются текстом. ++ нельзя интерпретировать как вставленный пустой текст.

Если же нам нужно выделить фразу внутри, «впритык» к другому тексту, то в соответствии с руководством мы дополнительно обрамляем модификаторы с помощью квадратных скобок — [++].

Пунктуация

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

Так, например, после двоеточия ставится пробел. Поэтому "языки для академиков": haskell, ocaml — это просто текст без разметки, а вот "язык для академиков":http://haskell.org — это ссылка. Но никак не потому, что там стоит http:// — ведь ссылка может быть и с неизвестным науке протоколом, да и просто относительная, а не абсолютная.

Точно так же 2+2+2 мы пишем либо слитно, либо с пробелом с обеих сторон вокруг знака — 2 + 2 + 2. А вот 2 +2+ 2 — это что-то некрасивое и не по типографике, так что можно оставить возможность интепретировать плюсы как модификаторы.

Правила хорошей пунктуации с точки зрения текстайла такие:

*

Юникодная пунктуация

А вот «*привет*» превратится в «*привет*», потому что юникод пунктуацией не считается.

FIXME: что делать?

Расширенные блоки (extended blocks)

Это те блоки, которые могут включать пустые строки и выделяются двумя точками в модификаторе — «bc..». Интересно то, что после такого блока никак нельзя поставить список, так как особых модификаторов для списка в текстайле нет.

Замена символов на более приятные для глаз ("" → “”, - → —, -- → —, ... → …, x → ×, (TM) → ™, (R) → ®, (C) → ©)

Вот оно нафиг не нужно.

Списки

Списки не могут быть внутри других блоков! Они сами блоки. Официальная реализация с ее <p><ul>... не соответствует спецификации XHTML 1.0.

Парсер должен ожидать пробела после *, иначе начинающиеся с жирного текста строки будут интепретированны как элементы списка.

...

"the pattern (has fucked up ":http://google.com)":http://ya.ru
<a title="has fucked up &quot;:http://google.com" href="http://ya.ru">the pattern </a>