13 августа, после девяти месяцев разработки, состоялся выпуск 2.5.0 высокопроизводительной библиотеки lexbor, предназначенной для парсинга HTML 5 и CSS, с полной поддержкой современных спецификаций.
Проект написан на языке C (стандарт C99) без сторонних зависимостей и распространяется по лицензии Apache 2.0.
Библиотека разделена на модули (Core, CSS, DOM, Encoding, Engine, HTML, NS, Punycode, Selectors, Tag, Unicode, URL, Utils), которые могут быть скомпилированы и использованы как раздельные библиотеки (с опцией CMake LEXBOR_BUILD_SEPARATELY=ON
).
Для библиотеки есть сторонние биндинги и врапперы для языков Crystal, D, Elixir, Julia, Python, PHP и Ruby.
Список изменений:
- Добавлен модуль Engine.
- Добавлены бенчмарки.
- Добавлена опция CMake
LEXBOR_BUILD_WITH_MSAN
для компиляции с MSAN. - В парсер CSS добавлена поддержка токена
UNICODE-RANGE
. - Добавлена ссылка на сторонние биндинги для языка Julia.
- Исправлено неопределённое поведение в функции
lexbor_str_append()
. - Исправлено неопределённое поведение в функции
lexbor_in_node_make()
. - Исправлено медленное перераспределение памяти для длинных строк.
- В парсере HTML исправлено сообщение об ошибке в ссылке на пробельные символы.
- В парсере HTML исправлено сообщение об ошибке при разборе самозакрывающихся тегов.
- В парсере HTML исправлено клонирование атрибутов при некорректном HTML.
- В парсере HTML исправлено дублирование атрибутов в пространстве имен svg.
- В парсере CSS исправлен разбор числового токена.
- Исправлена ошибка двойного освобождения памяти стилей элемента при его удалении.
- При передаче хоста с портом (например, «example.com:8080») в функцию
lxb_url_api_hostname_set()
, теперь возвращается ошибка, как указано в спецификации URL. - Исправлен разбор селектора
:has()
. - Разрешено использование тега
<hr>
внутри тега<select>
. - Изменена сериализации атрибутов, символы < и > теперь экранируются.
- Значительное сокращение размера таблиц Unicode.
- Уменьшен размер многобайтовых кодировок и увеличена производительность их декодирования.
- Рефакторинг кода модуля CSS.
- Переписан поиск узлов по селекторам.