Новая версия библиотеки — и снова множество нововведений. Конечно же, главным изменением стала поддержка новой версии спецификации CommonMark за номером 0.21. В ней поменялась обработка символа ’, из-за чего пришлось не только переписать значительную часть кода, но и поправить библиотеку комбинаторов парcеров (parsers), на которой базируется md_proc. Второе значительно изменение спецификации — новые правила разбора встроенных html-блоков. На мой взгляд, всё стало проще и логичнее.
Я уже рассказывал про ускорение загрузки страницы с помощью оптимизации картинок. Пришла пора двигаться дальше и заняться оптимизацией всех остальных файлов. Я расскажу, что такое zopfli, и поделюсь программкой, которая поможет легче оптимизировать статические данные. Честно говоря, я внедрил всё это в блог несколько месяцев назад, но всё как-то не доходили руки поделиться.
Я давно ничего не писал об этом моём проекте. Но это совершенно не значит, что он забыт и заброшен. Конечно, он не в самой активной фазе разработки, тем не менее обновления я публикую с некоторой периодичностью. В первую очередь период связан с обновлениями спецификации CommonMark. Нынешняя версия библиотеки (0.5.0) реализует спецификацию 0.20.
Кроме того, с момента предыдущего поста были добавлены следующие нововведения:
Поддержка умной пунктуации, т.е. автоматическая замена
...
,---
,--
,"
и'
на соответствующий типографический символ.Поддержка автоматический генерации ссылок по имени. Это может быть полезно, например, для разбора markdown из DartDoc-комментариев. Таким образом можно передать парсеру функцию, которая будет заниматься всеми теми ссылками, для которых известно только имя.
Continuous Integration с помощью Travis и покрытие кода на Coveralls. По крайней мере, подключение этих систем к проекту было интересным опытом.
Как обычно, библиотеку можно взять на GitHub или pub.dartlang.
Продолжаю работать над библиотекой для работы с CommonMark. Следующий этап — генерация Markdown из AST — готов. Теперь можно использовать библиотеку для автоматического преобразования Markdown. Собственно, это то, к чему я стремлюсь. Но до завершения, к сожалению, ещё далеко. Во-первых, сама спецификация CommonMark ещё не готова, а во-вторых, для использования библиотеки с теми файлами, что у меня уже есть, неплохо было бы реализовать некоторое количество расширений, выходящих за рамки официальной спецификации.
План на ближайшее будущее:
- Продолжать следовать изменениям в спецификации.
- Реализовать некоторые расширения Markdown из pandoc (формулы, сноски и прочее). Затем преобразовать их в расширения CommonMark по мере их принятия в стандарт.
- Код для преобразования абстрактного синтаксического дерева. Я пока не слишком много думал об этом, поэтому всякие советы только приветствуются.
Как обычно, библиотеку можно взять на GitHub или pub.dartlang.
Обновил парсер CommonMark, написанный на Dart. Теперь он соответствует версии 0.12 спецификации. Правда один из тестов не проходит, но исключительно из-за ошибки в самом тесте. Ошибку уже поправили, так что следующая версия спецификации выйдет без неё.
Сама спецификация несколько поменялась со времени публикации предыдущей версии парсера. Самое крупное изменение: теперь можно использовать вложенные emphasis и strong. Например:
*Это *вложенный* emphasis*
**Это **вложенный** strong**
Не знаю, насколько это применимо на практике, но, видимо, изменению спецификации предшествовало продолжительное обсуждение.
В общем, милости прошу за библиотекой на GitHub или pub.dartlang.