13 marca, po czterech miesiącach prac, wydano 2.7.0 wysoce wydajnej biblioteki lexbor, przeznaczonej do przetwarzania formatów HTML 5 oraz CSS.
Główne cechy projektu:
- pełne wsparcie dla specyfikacji WHATWG, W3C i Unicode: HTML5, CSS Syntax 3, Kodowanie, URL, Standard Unicode załącznik #15, Techniczny standard Unicode #46, Punycode, Standard Unicode załącznik #15, Techniczny standard Unicode #46;
- manipulacja elementami i atrybutami DOM: dodawanie, zmiana, usuwanie i inne;
- wsparcie dla analizy fragmentów HTML;
- przechodzenie przez wszystkie testy budowy drzew DOM;
- przetestowane na ponad 200 milionach stron HTML z wykorzystaniem ASAN;
- wsparcie dla określania kodowania na podstawie strumienia bajtów;
- analiza stylów CSS w atrybutach tagów oraz w tagu ;
- wyszukiwanie elementów HTML za pomocą selektorów CSS;
- wsparcie dla 40 kodowań podczas kodowania i dekodowania;
- wsparcie dla niebuforowanego i buforowanego kodowania oraz dekodowania;
- napisany w języku C (standard C99) bez zewnętrznych zależności i dystrybuowany na licencji Apache 2.0;
- biblioteka podzielona na moduły (Core, CSS, DOM, Encoding, Engine, HTML, NS, Punycode, Selectors, Tag, Unicode, URL, Utils), które mogą być kompilowane i używane jako oddzielne biblioteki (z opcją CMake LEXBOR_BUILD_SEPARATELY=ON);
- wiązania i wrappery dla języków Crystal, D, Elixir, Julia, PHP, Python i Ruby.
Główne zmiany:
- Dodano wsparcie dla amagamacji (łączenia plików źródłowych w jeden plik). Ułatwia to integrację biblioteki w projektach – wystarczy dołączyć jeden plik zamiast korzystać z całego systemu budowy. Szczegóły znajdują się w dokumentacji.
- Przeprowadzono szeroką przebudowę kodu odpowiedzialnego za analizę CSS, aby przygotować się do realizacji układu.
- Dodano sprawdzenie przychodzącego strumienia w parserze HTML (jest to konieczne wyłącznie do wyświetlania błędów analizy zgodnie ze specyfikacją). Domyślnie wyłączone, więcej informacji w html/#tokenizer-options.
- Przygotowanie kodu do wydania silnika układu.
- Ogólne ulepszenia i poprawki błędów.
Źródło: linux.org.ru
