13 августа, после девяти месяцев разработки, состоялся выпуск 2.5.0 высокопроизводительной библиотеки lexbor, предназначенной для парсинга HTML 5 и CSS.
Основные особенности проекта:
- Полная поддержка спецификаций:
- Манипулирование элементами и атрибутами DOM: добавление, изменение, удаление и прочее.
- Поддержка разбора фрагментов HTML.
- Прохождение всех тестов построения деревьев DOM.
- Протестирована на более чем 200 миллионах HTML-страниц с помощью ASAN.
- Поддержка определения кодировки по потоку байтов.
- Анализ стилей CSS в атрибутах тегов и в теге
<style>
. - Поиск HTML-элементов с помощью CSS-селекторов.
- Поддержка 40 кодировок при кодировании и декодировании.
- Поддержка небуферизованного и буферизованного кодирования и декодирования.
- Написан на языке 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, PHP, Python и 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.
- Переписан поиск узлов по селекторам.
>>> Сайт проекта
>>> Исходный код
>>> Документация