Новая версия библиотеки — и снова множество нововведений. Конечно же, главным изменением стала поддержка новой версии спецификации CommonMark за номером 0.21. В ней поменялась обработка символа ’, из-за чего пришлось не только переписать значительную часть кода, но и поправить библиотеку комбинаторов парcеров (parsers), на которой базируется md_proc. Второе значительно изменение спецификации — новые правила разбора встроенных html-блоков. На мой взгляд, всё стало проще и логичнее.
Важным дополнением стала поддержка нескольких расширений языка, отсутствующих в спецификации. Теперь можно использовать верхний индекс (*e*^*x*^
— ex), нижний индекс (C~2~H~5~OH
— C2H5OH) и зачёркивание (~~пример~~
— пример).
Также был причесан код в соответствии с рекомендациями Google. Правда, ради этого пришлось слегка переименовать различные объекты библиотеки: команда разработки Dart утверждает, что константы лучше называть так же, как и остальные переменные в формате camelCase. Поэтому теперь сценарии использования библиотеки выглядят приблизительно так:
import "package:md_proc/md_proc.dart";
void main() {
Document doc = CommonMarkParser.defaults.parse('Hello world!\n===');
String res = HtmlWriter.defaults.write(doc);
print(res); // <h1>Hello world!</h1>
}
В предыдущей версии библиотеки нужно было писать DEFAULT
вместо defaults
.
Не менее интересно было поковыряться с кодогенерацией. Теперь тесты из спецификации читаются не напрямую из файла спецификации, а конвертируются в Dart с помощью команды dart tool/build.dart
и затем используются. А так как больше не нужно читать файлы из файловой системы, то можно прогонять тесты не только на сервере, но и в браузерах. В последних версиях стандартной библиотеки для тестирования это сделать очень просто. Например, такая команда прогонит все тесты на виртуальной машине Dart, в Chrome, в Firefox, а так же в PhantomJs:
pub run test -p 'vm,chrome,firefox,phantomjs'
Как обычно, библиотеку можно взять на GitHub или pub.dartlang.
Хочется что-то добавить или сказать? Я всегда рад обсудить. Пишите на me@dikmax.name.