1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00

Create separate lexbor extension (#18538)

An always enabled lexbor extension is added, containing the lexbor library that was separated from ext/dom extension in preparation of https://wiki.php.net/rfc/url_parsing_api. While at it, the lexbor library is upgraded to 2.5.0.

Co-authored-by: Niels Dossche <7771979+nielsdos@users.noreply.github.com>
Co-authored-by: Gina Peter Banyard <girgias@php.net>
This commit is contained in:
Máté Kocsis
2025-05-25 14:12:44 +02:00
committed by GitHub
parent 4076324c6f
commit 7f59fccd52
437 changed files with 302972 additions and 190539 deletions

2
.gitattributes vendored
View File

@@ -30,4 +30,4 @@
/ext/date/tests/ossfuzz*.txt binary
# Vendored libraries
/ext/dom/lexbor/lexbor linguist-vendored
/ext/lexbor/lexbor linguist-vendored

2
.gitignore vendored
View File

@@ -306,6 +306,6 @@ tmp-php.ini
!/ext/fileinfo/libmagic/config.h
!/ext/fileinfo/libmagic.patch
!/ext/fileinfo/magicdata.patch
!/ext/dom/lexbor/patches/*.patch
!/ext/lexbor/patches/*.patch
!/ext/pcre/pcre2lib/config.h
!/win32/build/Makefile

View File

@@ -195,6 +195,13 @@ PRIMARY MAINTAINER: Thies C. Arntzen <thies@thieso.net> (1999 - 2002)
MAINTENANCE: Maintained
STATUS: Working
-------------------------------------------------------------------------------
EXTENSION: lexbor
PRIMARY MAINTAINER: Niels Dossche <nielsdos@php.net> (2023 - 2025)
Mate Kocsis <kocsismate@php.net> (2025 - 2025)
MAINTENANCE: Maintained
STATUS: Working
SINCE: 8.5
-------------------------------------------------------------------------------
EXTENSION: libxml
PRIMARY MAINTAINER: Rob Richards <rrichards@php.net> (2003 - 2009)
Christian Stocker <chregu@php.net> (2004 - 2011)

View File

@@ -17,7 +17,7 @@
17. ext/mbstring/ucgendat portions based on the ucgendat.c from the OpenLDAP
18. avifinfo (ext/standard/libavifinfo) see ext/standard/libavifinfo/LICENSE
19. xxHash (ext/hash/xxhash)
20. Lexbor (ext/dom/lexbor/lexbor) see ext/dom/lexbor/LICENSE
20. Lexbor (ext/lexbor/lexbor) see ext/lexbor/LICENSE
21. Portions of libcperciva (ext/hash/hash_sha_{ni,sse2}.c) see the header in the source file
3. pcre2lib (ext/pcre)

View File

@@ -400,6 +400,10 @@ PHP 8.5 UPGRADE NOTES
. The return type of finfo_close() has been changed to true, rather
than bool.
- Lexbor:
. An always enabled lexbor extension is added. It contains the lexbor
library that was separated from ext/dom for being reused among other
extensions. The new extension is not directly exposed to userland.
- PCRE:
. Upgraded to pcre2lib from 10.44 to 10.45.

View File

@@ -1,11 +1,11 @@
ignore:
# bundled libraries
- "ext/dom/lexbor/lexbor/core"
- "ext/dom/lexbor/lexbor/css"
- "ext/dom/lexbor/lexbor/dom"
- "ext/dom/lexbor/lexbor/encoding"
- "ext/dom/lexbor/lexbor/html"
- "ext/dom/lexbor/lexbor/ns"
- "ext/dom/lexbor/lexbor/ports"
- "ext/dom/lexbor/lexbor/tag"
- "ext/lexbor/lexbor/core"
- "ext/lexbor/lexbor/css"
- "ext/lexbor/lexbor/dom"
- "ext/lexbor/lexbor/encoding"
- "ext/lexbor/lexbor/html"
- "ext/lexbor/lexbor/ns"
- "ext/lexbor/lexbor/ports"
- "ext/lexbor/lexbor/tag"
- "ext/pcre/pcre2lib"

View File

@@ -8,185 +8,6 @@ if test "$PHP_DOM" != "no"; then
PHP_SETUP_LIBXML([DOM_SHARED_LIBADD], [
AC_DEFINE([HAVE_DOM], [1],
[Define to 1 if the PHP extension 'dom' is available.])
PHP_LEXBOR_CFLAGS="-I@ext_srcdir@/lexbor -DLEXBOR_STATIC"
LEXBOR_DIR="lexbor/lexbor"
LEXBOR_SOURCES=m4_normalize(["
$LEXBOR_DIR/core/array_obj.c
$LEXBOR_DIR/core/array.c
$LEXBOR_DIR/core/avl.c
$LEXBOR_DIR/core/bst.c
$LEXBOR_DIR/core/conv.c
$LEXBOR_DIR/core/diyfp.c
$LEXBOR_DIR/core/dobject.c
$LEXBOR_DIR/core/dtoa.c
$LEXBOR_DIR/core/hash.c
$LEXBOR_DIR/core/mem.c
$LEXBOR_DIR/core/mraw.c
$LEXBOR_DIR/core/print.c
$LEXBOR_DIR/core/serialize.c
$LEXBOR_DIR/core/shs.c
$LEXBOR_DIR/core/str.c
$LEXBOR_DIR/core/strtod.c
$LEXBOR_DIR/css/css.c
$LEXBOR_DIR/css/log.c
$LEXBOR_DIR/css/parser.c
$LEXBOR_DIR/css/selectors/pseudo_state.c
$LEXBOR_DIR/css/selectors/pseudo.c
$LEXBOR_DIR/css/selectors/selector.c
$LEXBOR_DIR/css/selectors/selectors.c
$LEXBOR_DIR/css/selectors/state.c
$LEXBOR_DIR/css/state.c
$LEXBOR_DIR/css/syntax/anb.c
$LEXBOR_DIR/css/syntax/parser.c
$LEXBOR_DIR/css/syntax/state.c
$LEXBOR_DIR/css/syntax/syntax.c
$LEXBOR_DIR/css/syntax/token.c
$LEXBOR_DIR/css/syntax/tokenizer.c
$LEXBOR_DIR/css/syntax/tokenizer/error.c
$LEXBOR_DIR/dom/interface.c
$LEXBOR_DIR/dom/interfaces/attr.c
$LEXBOR_DIR/dom/interfaces/cdata_section.c
$LEXBOR_DIR/dom/interfaces/character_data.c
$LEXBOR_DIR/dom/interfaces/comment.c
$LEXBOR_DIR/dom/interfaces/document_fragment.c
$LEXBOR_DIR/dom/interfaces/document_type.c
$LEXBOR_DIR/dom/interfaces/document.c
$LEXBOR_DIR/dom/interfaces/element.c
$LEXBOR_DIR/dom/interfaces/node.c
$LEXBOR_DIR/dom/interfaces/processing_instruction.c
$LEXBOR_DIR/dom/interfaces/shadow_root.c
$LEXBOR_DIR/dom/interfaces/text.c
$LEXBOR_DIR/encoding/big5.c
$LEXBOR_DIR/encoding/decode.c
$LEXBOR_DIR/encoding/encode.c
$LEXBOR_DIR/encoding/encoding.c
$LEXBOR_DIR/encoding/euc_kr.c
$LEXBOR_DIR/encoding/gb18030.c
$LEXBOR_DIR/encoding/iso_2022_jp_katakana.c
$LEXBOR_DIR/encoding/jis0208.c
$LEXBOR_DIR/encoding/jis0212.c
$LEXBOR_DIR/encoding/range.c
$LEXBOR_DIR/encoding/res.c
$LEXBOR_DIR/encoding/single.c
$LEXBOR_DIR/html/encoding.c
$LEXBOR_DIR/html/interface.c
$LEXBOR_DIR/html/interfaces/anchor_element.c
$LEXBOR_DIR/html/interfaces/area_element.c
$LEXBOR_DIR/html/interfaces/audio_element.c
$LEXBOR_DIR/html/interfaces/base_element.c
$LEXBOR_DIR/html/interfaces/body_element.c
$LEXBOR_DIR/html/interfaces/br_element.c
$LEXBOR_DIR/html/interfaces/button_element.c
$LEXBOR_DIR/html/interfaces/canvas_element.c
$LEXBOR_DIR/html/interfaces/d_list_element.c
$LEXBOR_DIR/html/interfaces/data_element.c
$LEXBOR_DIR/html/interfaces/data_list_element.c
$LEXBOR_DIR/html/interfaces/details_element.c
$LEXBOR_DIR/html/interfaces/dialog_element.c
$LEXBOR_DIR/html/interfaces/directory_element.c
$LEXBOR_DIR/html/interfaces/div_element.c
$LEXBOR_DIR/html/interfaces/document.c
$LEXBOR_DIR/html/interfaces/element.c
$LEXBOR_DIR/html/interfaces/embed_element.c
$LEXBOR_DIR/html/interfaces/field_set_element.c
$LEXBOR_DIR/html/interfaces/font_element.c
$LEXBOR_DIR/html/interfaces/form_element.c
$LEXBOR_DIR/html/interfaces/frame_element.c
$LEXBOR_DIR/html/interfaces/frame_set_element.c
$LEXBOR_DIR/html/interfaces/head_element.c
$LEXBOR_DIR/html/interfaces/heading_element.c
$LEXBOR_DIR/html/interfaces/hr_element.c
$LEXBOR_DIR/html/interfaces/html_element.c
$LEXBOR_DIR/html/interfaces/iframe_element.c
$LEXBOR_DIR/html/interfaces/image_element.c
$LEXBOR_DIR/html/interfaces/input_element.c
$LEXBOR_DIR/html/interfaces/label_element.c
$LEXBOR_DIR/html/interfaces/legend_element.c
$LEXBOR_DIR/html/interfaces/li_element.c
$LEXBOR_DIR/html/interfaces/link_element.c
$LEXBOR_DIR/html/interfaces/map_element.c
$LEXBOR_DIR/html/interfaces/marquee_element.c
$LEXBOR_DIR/html/interfaces/media_element.c
$LEXBOR_DIR/html/interfaces/menu_element.c
$LEXBOR_DIR/html/interfaces/meta_element.c
$LEXBOR_DIR/html/interfaces/meter_element.c
$LEXBOR_DIR/html/interfaces/mod_element.c
$LEXBOR_DIR/html/interfaces/o_list_element.c
$LEXBOR_DIR/html/interfaces/object_element.c
$LEXBOR_DIR/html/interfaces/opt_group_element.c
$LEXBOR_DIR/html/interfaces/option_element.c
$LEXBOR_DIR/html/interfaces/output_element.c
$LEXBOR_DIR/html/interfaces/paragraph_element.c
$LEXBOR_DIR/html/interfaces/param_element.c
$LEXBOR_DIR/html/interfaces/picture_element.c
$LEXBOR_DIR/html/interfaces/pre_element.c
$LEXBOR_DIR/html/interfaces/progress_element.c
$LEXBOR_DIR/html/interfaces/quote_element.c
$LEXBOR_DIR/html/interfaces/script_element.c
$LEXBOR_DIR/html/interfaces/select_element.c
$LEXBOR_DIR/html/interfaces/slot_element.c
$LEXBOR_DIR/html/interfaces/source_element.c
$LEXBOR_DIR/html/interfaces/span_element.c
$LEXBOR_DIR/html/interfaces/style_element.c
$LEXBOR_DIR/html/interfaces/table_caption_element.c
$LEXBOR_DIR/html/interfaces/table_cell_element.c
$LEXBOR_DIR/html/interfaces/table_col_element.c
$LEXBOR_DIR/html/interfaces/table_element.c
$LEXBOR_DIR/html/interfaces/table_row_element.c
$LEXBOR_DIR/html/interfaces/table_section_element.c
$LEXBOR_DIR/html/interfaces/template_element.c
$LEXBOR_DIR/html/interfaces/text_area_element.c
$LEXBOR_DIR/html/interfaces/time_element.c
$LEXBOR_DIR/html/interfaces/title_element.c
$LEXBOR_DIR/html/interfaces/track_element.c
$LEXBOR_DIR/html/interfaces/u_list_element.c
$LEXBOR_DIR/html/interfaces/unknown_element.c
$LEXBOR_DIR/html/interfaces/video_element.c
$LEXBOR_DIR/html/interfaces/window.c
$LEXBOR_DIR/html/parser.c
$LEXBOR_DIR/html/token_attr.c
$LEXBOR_DIR/html/token.c
$LEXBOR_DIR/html/tokenizer.c
$LEXBOR_DIR/html/tokenizer/error.c
$LEXBOR_DIR/html/tokenizer/state_comment.c
$LEXBOR_DIR/html/tokenizer/state_doctype.c
$LEXBOR_DIR/html/tokenizer/state_rawtext.c
$LEXBOR_DIR/html/tokenizer/state_rcdata.c
$LEXBOR_DIR/html/tokenizer/state_script.c
$LEXBOR_DIR/html/tokenizer/state.c
$LEXBOR_DIR/html/tree.c
$LEXBOR_DIR/html/tree/active_formatting.c
$LEXBOR_DIR/html/tree/error.c
$LEXBOR_DIR/html/tree/insertion_mode/after_after_body.c
$LEXBOR_DIR/html/tree/insertion_mode/after_after_frameset.c
$LEXBOR_DIR/html/tree/insertion_mode/after_body.c
$LEXBOR_DIR/html/tree/insertion_mode/after_frameset.c
$LEXBOR_DIR/html/tree/insertion_mode/after_head.c
$LEXBOR_DIR/html/tree/insertion_mode/before_head.c
$LEXBOR_DIR/html/tree/insertion_mode/before_html.c
$LEXBOR_DIR/html/tree/insertion_mode/foreign_content.c
$LEXBOR_DIR/html/tree/insertion_mode/in_body.c
$LEXBOR_DIR/html/tree/insertion_mode/in_caption.c
$LEXBOR_DIR/html/tree/insertion_mode/in_cell.c
$LEXBOR_DIR/html/tree/insertion_mode/in_column_group.c
$LEXBOR_DIR/html/tree/insertion_mode/in_frameset.c
$LEXBOR_DIR/html/tree/insertion_mode/in_head_noscript.c
$LEXBOR_DIR/html/tree/insertion_mode/in_head.c
$LEXBOR_DIR/html/tree/insertion_mode/in_row.c
$LEXBOR_DIR/html/tree/insertion_mode/in_select_in_table.c
$LEXBOR_DIR/html/tree/insertion_mode/in_select.c
$LEXBOR_DIR/html/tree/insertion_mode/in_table_body.c
$LEXBOR_DIR/html/tree/insertion_mode/in_table_text.c
$LEXBOR_DIR/html/tree/insertion_mode/in_table.c
$LEXBOR_DIR/html/tree/insertion_mode/in_template.c
$LEXBOR_DIR/html/tree/insertion_mode/initial.c
$LEXBOR_DIR/html/tree/insertion_mode/text.c
$LEXBOR_DIR/html/tree/open_elements.c
$LEXBOR_DIR/ns/ns.c
$LEXBOR_DIR/ports/posix/lexbor/core/memory.c
$LEXBOR_DIR/selectors-adapted/selectors.c
$LEXBOR_DIR/tag/tag.c
"])
PHP_NEW_EXTENSION([dom], m4_normalize([
attr.c
cdatasection.c
@@ -223,25 +44,13 @@ if test "$PHP_DOM" != "no"; then
xml_serializer.c
xpath_callbacks.c
xpath.c
$LEXBOR_SOURCES
lexbor/selectors-adapted/selectors.c
]),
[$ext_shared],,
[$PHP_LEXBOR_CFLAGS])
[])
PHP_ADD_BUILD_DIR([
$ext_builddir/parentnode
$ext_builddir/$LEXBOR_DIR/core
$ext_builddir/$LEXBOR_DIR/css/selectors
$ext_builddir/$LEXBOR_DIR/css/syntax/tokenizer
$ext_builddir/$LEXBOR_DIR/css/tokenizer
$ext_builddir/$LEXBOR_DIR/dom/interfaces
$ext_builddir/$LEXBOR_DIR/encoding
$ext_builddir/$LEXBOR_DIR/html/interfaces
$ext_builddir/$LEXBOR_DIR/html/tokenizer
$ext_builddir/$LEXBOR_DIR/html/tree/insertion_mode
$ext_builddir/$LEXBOR_DIR/ns
$ext_builddir/$LEXBOR_DIR/ports/posix/lexbor/core
$ext_builddir/$LEXBOR_DIR/selectors-adapted
$ext_builddir/$LEXBOR_DIR/tag
$ext_builddir/lexbor/selectors-adapted
])
PHP_SUBST([DOM_SHARED_LIBADD])
PHP_INSTALL_HEADERS([ext/dom], m4_normalize([
@@ -251,5 +60,6 @@ if test "$PHP_DOM" != "no"; then
xpath_callbacks.h
]))
PHP_ADD_EXTENSION_DEP(dom, libxml)
PHP_ADD_EXTENSION_DEP(dom, lexbor)
])
fi

View File

@@ -16,32 +16,17 @@ if (PHP_DOM == "yes") {
entityreference.c \
token_list.c \
notation.c xpath.c dom_iterators.c \
namednodemap.c xpath_callbacks.c", null, "-Iext/dom/lexbor");
namednodemap.c xpath_callbacks.c", null, "/I ext/lexbor");
ADD_EXTENSION_DEP('dom', 'lexbor');
ADD_SOURCES("ext/dom/parentnode", "tree.c css_selectors.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/ports/windows_nt/lexbor/core", "memory.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/core", "array_obj.c array.c avl.c bst.c diyfp.c conv.c dobject.c dtoa.c hash.c mem.c mraw.c print.c serialize.c shs.c str.c strtod.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/dom", "interface.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/dom/interfaces", "attr.c cdata_section.c character_data.c comment.c document.c document_fragment.c document_type.c element.c node.c processing_instruction.c shadow_root.c text.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/html/tokenizer", "error.c state_comment.c state_doctype.c state_rawtext.c state_rcdata.c state_script.c state.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/html/tree", "active_formatting.c open_elements.c error.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/html/tree/insertion_mode", "after_after_body.c after_after_frameset.c after_body.c after_frameset.c after_head.c before_head.c before_html.c foreign_content.c in_body.c in_caption.c in_cell.c in_column_group.c in_frameset.c in_head.c in_head_noscript.c initial.c in_row.c in_select.c in_select_in_table.c in_table_body.c in_table.c in_table_text.c in_template.c text.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/html", "encoding.c interface.c parser.c token.c token_attr.c tokenizer.c tree.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/encoding", "big5.c decode.c encode.c encoding.c euc_kr.c gb18030.c iso_2022_jp_katakana.c jis0208.c jis0212.c range.c res.c single.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/html/interfaces", "anchor_element.c area_element.c audio_element.c base_element.c body_element.c br_element.c button_element.c canvas_element.c data_element.c data_list_element.c details_element.c dialog_element.c directory_element.c div_element.c d_list_element.c document.c element.c embed_element.c field_set_element.c font_element.c form_element.c frame_element.c frame_set_element.c head_element.c heading_element.c hr_element.c html_element.c iframe_element.c image_element.c input_element.c label_element.c legend_element.c li_element.c link_element.c map_element.c marquee_element.c media_element.c menu_element.c meta_element.c meter_element.c mod_element.c object_element.c o_list_element.c opt_group_element.c option_element.c output_element.c paragraph_element.c param_element.c picture_element.c pre_element.c progress_element.c quote_element.c script_element.c select_element.c slot_element.c source_element.c span_element.c style_element.c table_caption_element.c table_cell_element.c table_col_element.c table_element.c table_row_element.c table_section_element.c template_element.c text_area_element.c time_element.c title_element.c track_element.c u_list_element.c unknown_element.c video_element.c window.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/selectors-adapted", "selectors.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/css", "state.c log.c parser.c css.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/css/selectors", "state.c selectors.c selector.c pseudo_state.c pseudo.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/css/syntax", "state.c parser.c syntax.c anb.c tokenizer.c token.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/css/syntax/tokenizer", "error.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/ns", "ns.c", "dom");
ADD_SOURCES("ext/dom/lexbor/lexbor/tag", "tag.c", "dom");
ADD_FLAG("CFLAGS_DOM", "/D LEXBOR_STATIC ");
ADD_SOURCES("ext/dom/lexbor/selectors-adapted", "selectors.c", "dom");
AC_DEFINE("HAVE_DOM", 1, "Define to 1 if the PHP extension 'dom' is available.");
if (!PHP_DOM_SHARED) {
ADD_FLAG("CFLAGS_DOM", "/D LIBXML_STATIC ");
ADD_FLAG("CFLAGS_DOM", "/D LIBXML_STATIC /D LEXBOR_STATIC ");
} else {
if (!CHECK_LIB("libxml2.lib", "dom")) {
WARNING("dom support can't be enabled, libxml is not found")
@@ -51,7 +36,8 @@ if (PHP_DOM == "yes") {
"dom_ce.h " +
"namespace_compat.h " +
"xml_common.h " +
"xpath_callbacks.h "
"xpath_callbacks.h " +
"lexbor/selectors-adapted/selectors.h "
);
} else {
WARNING("dom support can't be enabled, libxml is not enabled")

File diff suppressed because it is too large Load Diff

View File

@@ -1,273 +0,0 @@
/*
* Copyright (C) 2018-2020 Alexander Borisov
*
* Author: Alexander Borisov <borisov@lexbor.com>
*/
#ifndef LEXBOR_CSS_SYNTAX_STATE_RES_H
#define LEXBOR_CSS_SYNTAX_STATE_RES_H
static const lxb_css_syntax_tokenizer_state_f
lxb_css_syntax_state_res_map[256] =
{
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x00; 'NUL'; NULL */
lxb_css_syntax_state_delim, /* 0x01; 'SOH'; Start of Heading */
lxb_css_syntax_state_delim, /* 0x02; 'STX'; Start of text */
lxb_css_syntax_state_delim, /* 0x03; 'ETX'; End of text */
lxb_css_syntax_state_delim, /* 0x04; 'EOT'; End of Transmission */
lxb_css_syntax_state_delim, /* 0x05; 'ENQ'; Enquiry */
lxb_css_syntax_state_delim, /* 0x06; 'ACK'; Acknowledge */
lxb_css_syntax_state_delim, /* 0x07; 'BEL'; Bell */
lxb_css_syntax_state_delim, /* 0x08; 'BS'; Backspace */
lxb_css_syntax_state_whitespace, /* 0x09; 'TAB'; Horizontal Tab */
lxb_css_syntax_state_whitespace, /* 0x0A; 'LF'; Line Feed ('\n') */
lxb_css_syntax_state_delim, /* 0x0B; 'VT'; Vertical Tab */
lxb_css_syntax_state_whitespace, /* 0x0C; 'FF'; Form Feed */
lxb_css_syntax_state_whitespace, /* 0x0D; 'CR'; Carriage Return ('\r') */
lxb_css_syntax_state_delim, /* 0x0E; 'SO'; Shift Out */
lxb_css_syntax_state_delim, /* 0x0F; 'SI'; Shift In */
lxb_css_syntax_state_delim, /* 0x10; 'DLE'; Data Link Escape */
lxb_css_syntax_state_delim, /* 0x11; 'DC1'; Device Control #1 */
lxb_css_syntax_state_delim, /* 0x12; 'DC2'; Device Control #2 */
lxb_css_syntax_state_delim, /* 0x13; 'DC3'; Device Control #3 */
lxb_css_syntax_state_delim, /* 0x14; 'DC4'; Device Control #4 */
lxb_css_syntax_state_delim, /* 0x15; 'NAK'; Negative Acknowledge */
lxb_css_syntax_state_delim, /* 0x16; 'SYN'; Synchronous Idle */
lxb_css_syntax_state_delim, /* 0x17; 'ETB'; End of Transmission Block */
lxb_css_syntax_state_delim, /* 0x18; 'CAN'; Cancel */
lxb_css_syntax_state_delim, /* 0x19; 'EM'; End of Medium */
lxb_css_syntax_state_delim, /* 0x1A; 'SUB'; Substitute */
lxb_css_syntax_state_delim, /* 0x1B; 'ESC'; Escape */
lxb_css_syntax_state_delim, /* 0x1C; 'FS'; File Separator */
lxb_css_syntax_state_delim, /* 0x1D; 'GS'; Group Separator */
lxb_css_syntax_state_delim, /* 0x1E; 'RS'; Record Separator */
lxb_css_syntax_state_delim, /* 0x1F; 'US'; Unit Separator */
lxb_css_syntax_state_whitespace, /* 0x20; 'SP'; Space */
lxb_css_syntax_state_delim, /* 0x21; '!'; Exclamation mark */
lxb_css_syntax_state_string, /* 0x22; '"'; Only quotes above */
lxb_css_syntax_state_hash, /* 0x23; '#'; Pound sign */
lxb_css_syntax_state_delim, /* 0x24; '$'; Dollar sign */
lxb_css_syntax_state_delim, /* 0x25; '%'; Percentage sign */
lxb_css_syntax_state_delim, /* 0x26; '&'; Commericial and */
lxb_css_syntax_state_string, /* 0x27; '''; Apostrophe */
lxb_css_syntax_state_lparenthesis, /* 0x28; '('; Left bracket */
lxb_css_syntax_state_rparenthesis, /* 0x29; ')'; Right bracket */
lxb_css_syntax_state_delim, /* 0x2A; '*'; Asterisk */
lxb_css_syntax_state_plus, /* 0x2B; '+'; Plus symbol */
lxb_css_syntax_state_comma, /* 0x2C; ','; Comma */
lxb_css_syntax_state_minus, /* 0x2D; '-'; Dash */
lxb_css_syntax_state_full_stop, /* 0x2E; '.'; Full stop */
lxb_css_syntax_state_comment, /* 0x2F; '/'; Forward slash */
lxb_css_syntax_state_consume_before_numeric, /* 0x30; '0' */
lxb_css_syntax_state_consume_before_numeric, /* 0x31; '1' */
lxb_css_syntax_state_consume_before_numeric, /* 0x32; '2' */
lxb_css_syntax_state_consume_before_numeric, /* 0x33; '3' */
lxb_css_syntax_state_consume_before_numeric, /* 0x34; '4' */
lxb_css_syntax_state_consume_before_numeric, /* 0x35; '5' */
lxb_css_syntax_state_consume_before_numeric, /* 0x36; '6' */
lxb_css_syntax_state_consume_before_numeric, /* 0x37; '7' */
lxb_css_syntax_state_consume_before_numeric, /* 0x38; '8' */
lxb_css_syntax_state_consume_before_numeric, /* 0x39; '9' */
lxb_css_syntax_state_colon, /* 0x3A; ':'; Colon */
lxb_css_syntax_state_semicolon, /* 0x3B; ';'; Semicolon */
lxb_css_syntax_state_less_sign, /* 0x3C; '<'; Small than bracket */
lxb_css_syntax_state_delim, /* 0x3D; '='; Equals sign */
lxb_css_syntax_state_delim, /* 0x3E; '>'; Bigger than symbol */
lxb_css_syntax_state_delim, /* 0x3F; '?'; Question mark */
lxb_css_syntax_state_at, /* 0x40; '@'; At symbol */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x41; 'A' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x42; 'B' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x43; 'C' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x44; 'D' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x45; 'E' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x46; 'F' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x47; 'G' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x48; 'H' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x49; 'I' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x4A; 'J' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x4B; 'K' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x4C; 'L' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x4D; 'M' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x4E; 'N' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x4F; 'O' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x50; 'P' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x51; 'Q' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x52; 'R' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x53; 'S' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x54; 'T' */
lxb_css_syntax_state_ident_like_begin, /* 0x55; 'U' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x56; 'V' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x57; 'W' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x58; 'X' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x59; 'Y' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x5A; 'Z' */
lxb_css_syntax_state_ls_bracket, /* 0x5B; '['; Left square bracket */
lxb_css_syntax_state_rsolidus, /* 0x5C; '\'; Inverse/backward slash */
lxb_css_syntax_state_rs_bracket, /* 0x5D; ']'; Right square bracket */
lxb_css_syntax_state_delim, /* 0x5E; '^'; Circumflex */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x5F; '_'; Underscore */
lxb_css_syntax_state_delim, /* 0x60; '`'; Gravis (backtick) */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x61; 'a' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x62; 'b' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x63; 'c' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x64; 'd' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x65; 'e' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x66; 'f' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x67; 'g' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x68; 'h' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x69; 'i' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x6A; 'j' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x6B; 'k' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x6C; 'l' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x6D; 'm' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x6E; 'n' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x6F; 'o' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x70; 'p' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x71; 'q' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x72; 'r' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x73; 's' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x74; 't' */
lxb_css_syntax_state_ident_like_begin, /* 0x75; 'u' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x76; 'v' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x77; 'w' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x78; 'x' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x79; 'y' */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x7A; 'z' */
lxb_css_syntax_state_lc_bracket, /* 0x7B; '{'; Left curly bracket */
lxb_css_syntax_state_delim, /* 0x7C; '|'; Vertical line */
lxb_css_syntax_state_rc_bracket, /* 0x7D; '}'; Right curly brackets */
lxb_css_syntax_state_delim, /* 0x7E; '~'; Tilde */
lxb_css_syntax_state_delim, /* 0x7F; 'DEL'; Delete */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x80 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x81 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x82 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x83 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x84 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x85 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x86 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x87 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x88 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x89 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x8A */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x8B */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x8C */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x8D */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x8E */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x8F */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x90 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x91 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x92 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x93 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x94 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x95 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x96 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x97 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x98 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x99 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x9A */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x9B */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x9C */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x9D */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x9E */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0x9F */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xA0 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xA1 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xA2 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xA3 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xA4 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xA5 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xA6 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xA7 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xA8 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xA9 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xAA */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xAB */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xAC */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xAD */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xAE */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xAF */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xB0 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xB1 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xB2 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xB3 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xB4 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xB5 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xB6 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xB7 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xB8 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xB9 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xBA */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xBB */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xBC */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xBD */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xBE */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xBF */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xC0 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xC1 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xC2 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xC3 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xC4 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xC5 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xC6 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xC7 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xC8 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xC9 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xCA */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xCB */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xCC */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xCD */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xCE */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xCF */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xD0 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xD1 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xD2 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xD3 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xD4 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xD5 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xD6 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xD7 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xD8 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xD9 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xDA */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xDB */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xDC */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xDD */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xDE */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xDF */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xE0 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xE1 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xE2 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xE3 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xE4 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xE5 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xE6 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xE7 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xE8 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xE9 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xEA */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xEB */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xEC */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xED */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xEE */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xEF */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xF0 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xF1 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xF2 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xF3 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xF4 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xF5 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xF6 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xF7 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xF8 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xF9 */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xFA */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xFB */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xFC */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xFD */
lxb_css_syntax_state_ident_like_not_url_begin, /* 0xFE */
lxb_css_syntax_state_ident_like_not_url_begin /* 0xFF */
};
#endif /* LEXBOR_CSS_SYNTAX_STATE_RES_H */

View File

@@ -1,68 +0,0 @@
/*
* Copyright (C) 2018-2019 Alexander Borisov
*
* Author: Alexander Borisov <borisov@lexbor.com>
*/
#ifndef LEXBOR_CSS_SYNTAX_TOKEN_RES_H
#define LEXBOR_CSS_SYNTAX_TOKEN_RES_H
#ifdef LXB_CSS_SYNTAX_TOKEN_RES_NAME_SHS_MAP
#ifndef LXB_CSS_SYNTAX_TOKEN_RES_NAME_SHS_MAP_ENABLED
#define LXB_CSS_SYNTAX_TOKEN_RES_NAME_SHS_MAP_ENABLED
static const lexbor_shs_entry_t lxb_css_syntax_token_res_name_shs_map[] =
{
{NULL, NULL, 92, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {"end-of-file", (void *) LXB_CSS_SYNTAX_TOKEN__EOF, 11, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{"ident", (void *) LXB_CSS_SYNTAX_TOKEN_IDENT, 5, 0}, {"cdo", (void *) LXB_CSS_SYNTAX_TOKEN_CDO, 3, 0},
{NULL, NULL, 0, 0}, {"left-parenthesis", (void *) LXB_CSS_SYNTAX_TOKEN_L_PARENTHESIS, 16, 0},
{"right-parenthesis", (void *) LXB_CSS_SYNTAX_TOKEN_R_PARENTHESIS, 17, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {"percentage", (void *) LXB_CSS_SYNTAX_TOKEN_PERCENTAGE, 10, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {"at-keyword", (void *) LXB_CSS_SYNTAX_TOKEN_AT_KEYWORD, 10, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{"string", (void *) LXB_CSS_SYNTAX_TOKEN_STRING, 6, 0}, {NULL, NULL, 0, 0},
{"bad-url", (void *) LXB_CSS_SYNTAX_TOKEN_BAD_URL, 7, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {"bad-string", (void *) LXB_CSS_SYNTAX_TOKEN_BAD_STRING, 10, 0},
{"whitespace", (void *) LXB_CSS_SYNTAX_TOKEN_WHITESPACE, 10, 0}, {NULL, NULL, 0, 0},
{"undefined", (void *) LXB_CSS_SYNTAX_TOKEN_UNDEF, 9, 0}, {NULL, NULL, 0, 0},
{"right-curly-bracket", (void *) LXB_CSS_SYNTAX_TOKEN_RC_BRACKET, 19, 0}, {"right-square-bracket", (void *) LXB_CSS_SYNTAX_TOKEN_RS_BRACKET, 20, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {"number", (void *) LXB_CSS_SYNTAX_TOKEN_NUMBER, 6, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{"semicolon", (void *) LXB_CSS_SYNTAX_TOKEN_SEMICOLON, 9, 0}, {NULL, NULL, 0, 0},
{"dimension", (void *) LXB_CSS_SYNTAX_TOKEN_DIMENSION, 9, 0}, {NULL, NULL, 0, 0},
{"colon", (void *) LXB_CSS_SYNTAX_TOKEN_COLON, 5, 0}, {"function", (void *) LXB_CSS_SYNTAX_TOKEN_FUNCTION, 8, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {"comma", (void *) LXB_CSS_SYNTAX_TOKEN_COMMA, 5, 0},
{"url", (void *) LXB_CSS_SYNTAX_TOKEN_URL, 3, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {"cdc", (void *) LXB_CSS_SYNTAX_TOKEN_CDC, 3, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {"hash", (void *) LXB_CSS_SYNTAX_TOKEN_HASH, 4, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{"comment", (void *) LXB_CSS_SYNTAX_TOKEN_COMMENT, 7, 0}, {NULL, NULL, 0, 0},
{"delim", (void *) LXB_CSS_SYNTAX_TOKEN_DELIM, 5, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {NULL, NULL, 0, 0},
{NULL, NULL, 0, 0}, {"left-curly-bracket", (void *) LXB_CSS_SYNTAX_TOKEN_LC_BRACKET, 18, 0},
{"left-square-bracket", (void *) LXB_CSS_SYNTAX_TOKEN_LS_BRACKET, 19, 0}
};
#endif /* LXB_CSS_SYNTAX_TOKEN_RES_NAME_SHS_MAP_ENABLED */
#endif /* LXB_CSS_SYNTAX_TOKEN_RES_NAME_SHS_MAP */
#endif /* LEXBOR_CSS_SYNTAX_TOKEN_RES_H */

View File

@@ -1,709 +0,0 @@
/*
* Copyright (C) 2018-2020 Alexander Borisov
*
* Author: Alexander Borisov <borisov@lexbor.com>
*/
#include "lexbor/css/syntax/tokenizer.h"
#include "lexbor/css/syntax/tokenizer/error.h"
#include "lexbor/css/syntax/state.h"
#include "lexbor/css/syntax/state_res.h"
#include "lexbor/core/array.h"
#define LEXBOR_STR_RES_MAP_LOWERCASE
#include "lexbor/core/str_res.h"
static const lxb_char_t lxb_css_syntax_tokenizer_important[] = "important";
static lxb_css_syntax_tokenizer_cache_t *
lxb_css_syntax_tokenizer_cache_create(void);
static lxb_status_t
lxb_css_syntax_tokenizer_cache_init(lxb_css_syntax_tokenizer_cache_t *cache,
size_t size);
static void
lxb_css_syntax_tokenizer_cache_clean(lxb_css_syntax_tokenizer_cache_t *cache);
static lxb_css_syntax_tokenizer_cache_t *
lxb_css_syntax_tokenizer_cache_destroy(lxb_css_syntax_tokenizer_cache_t *cache);
LXB_API lxb_status_t
lxb_css_syntax_tokenizer_cache_push(lxb_css_syntax_tokenizer_cache_t *cache,
lxb_css_syntax_token_t *value);
static lxb_status_t
lxb_css_syntax_tokenizer_blank(lxb_css_syntax_tokenizer_t *tkz,
const lxb_char_t **data, const lxb_char_t **end,
void *ctx);
static bool
lxb_css_syntax_tokenizer_lookup_important_ch(lxb_css_syntax_tokenizer_t *tkz,
const lxb_char_t *p,
const lxb_char_t *end,
const lxb_char_t stop_ch,
lxb_css_syntax_token_type_t stop,
bool skip_first);
static bool
lxb_css_syntax_tokenizer_lookup_important_end(lxb_css_syntax_tokenizer_t *tkz,
const lxb_char_t *p,
const lxb_char_t *end,
const lxb_char_t stop_ch,
lxb_css_syntax_token_type_t stop,
bool skip_first);
static bool
lxb_css_syntax_tokenizer_lookup_important_tokens(lxb_css_syntax_tokenizer_t *tkz,
lxb_css_syntax_token_type_t stop,
bool skip_first);
lxb_css_syntax_tokenizer_t *
lxb_css_syntax_tokenizer_create(void)
{
return lexbor_calloc(1, sizeof(lxb_css_syntax_tokenizer_t));
}
lxb_status_t
lxb_css_syntax_tokenizer_init(lxb_css_syntax_tokenizer_t *tkz)
{
lxb_status_t status;
static const unsigned tmp_size = 1024;
if (tkz == NULL) {
return LXB_STATUS_ERROR_OBJECT_IS_NULL;
}
/* Tokens. */
tkz->tokens = lexbor_dobject_create();
status = lexbor_dobject_init(tkz->tokens, 128,
sizeof(lxb_css_syntax_token_t));
if (status != LXB_STATUS_OK) {
return status;
}
/* Cache for Tokens. */
tkz->cache = lxb_css_syntax_tokenizer_cache_create();
status = lxb_css_syntax_tokenizer_cache_init(tkz->cache, 128);
if (status != LXB_STATUS_OK) {
return status;
}
/* Memory for text. */
tkz->mraw = lexbor_mraw_create();
status = lexbor_mraw_init(tkz->mraw, 4096);
if (status != LXB_STATUS_OK) {
return status;
}
/* Temp */
tkz->start = lexbor_malloc(tmp_size);
if (tkz->start == NULL) {
return LXB_STATUS_ERROR_MEMORY_ALLOCATION;
}
tkz->pos = tkz->start;
tkz->end = tkz->start + tmp_size;
/* Parse errors */
tkz->parse_errors = lexbor_array_obj_create();
status = lexbor_array_obj_init(tkz->parse_errors, 16,
sizeof(lxb_css_syntax_tokenizer_error_t));
if (status != LXB_STATUS_OK) {
return status;
}
tkz->offset = 0;
tkz->cache_pos = 0;
tkz->prepared = 0;
tkz->eof = false;
tkz->with_comment = false;
tkz->status = LXB_STATUS_OK;
tkz->opt = LXB_CSS_SYNTAX_TOKENIZER_OPT_UNDEF;
tkz->chunk_cb = lxb_css_syntax_tokenizer_blank;
return LXB_STATUS_OK;
}
lxb_status_t
lxb_css_syntax_tokenizer_clean(lxb_css_syntax_tokenizer_t *tkz)
{
lexbor_mraw_clean(tkz->mraw);
lexbor_array_obj_clean(tkz->parse_errors);
lxb_css_syntax_tokenizer_cache_clean(tkz->cache);
lexbor_dobject_clean(tkz->tokens);
tkz->offset = 0;
tkz->cache_pos = 0;
tkz->prepared = 0;
tkz->eof = false;
tkz->status = LXB_STATUS_OK;
tkz->in_begin = NULL;
tkz->in_end = NULL;
tkz->pos = tkz->start;
return LXB_STATUS_OK;
}
lxb_css_syntax_tokenizer_t *
lxb_css_syntax_tokenizer_destroy(lxb_css_syntax_tokenizer_t *tkz)
{
if (tkz == NULL) {
return NULL;
}
if (tkz->tokens != NULL) {
tkz->tokens = lexbor_dobject_destroy(tkz->tokens, true);
tkz->cache = lxb_css_syntax_tokenizer_cache_destroy(tkz->cache);
}
tkz->mraw = lexbor_mraw_destroy(tkz->mraw, true);
tkz->parse_errors = lexbor_array_obj_destroy(tkz->parse_errors, true);
if (tkz->start != NULL) {
tkz->start = lexbor_free(tkz->start);
}
return lexbor_free(tkz);
}
static lxb_css_syntax_tokenizer_cache_t *
lxb_css_syntax_tokenizer_cache_create(void)
{
return lexbor_calloc(1, sizeof(lxb_css_syntax_tokenizer_cache_t));
}
static lxb_status_t
lxb_css_syntax_tokenizer_cache_init(lxb_css_syntax_tokenizer_cache_t *cache,
size_t size)
{
cache->length = 0;
cache->size = size;
cache->list = lexbor_malloc(sizeof(lxb_css_syntax_token_t *) * size);
if (cache->list == NULL) {
return LXB_STATUS_ERROR_MEMORY_ALLOCATION;
}
return LXB_STATUS_OK;
}
static void
lxb_css_syntax_tokenizer_cache_clean(lxb_css_syntax_tokenizer_cache_t *cache)
{
if (cache != NULL) {
cache->length = 0;
}
}
static lxb_css_syntax_tokenizer_cache_t *
lxb_css_syntax_tokenizer_cache_destroy(lxb_css_syntax_tokenizer_cache_t *cache)
{
if (cache == NULL) {
return NULL;
}
if (cache->list) {
lexbor_free(cache->list);
}
return lexbor_free(cache);
}
static lxb_css_syntax_token_t **
lxb_css_syntax_tokenizer_cache_expand(lxb_css_syntax_tokenizer_cache_t *cache,
size_t up_to)
{
size_t new_size;
lxb_css_syntax_token_t **list;
if (cache == NULL) {
return NULL;
}
new_size = cache->length + up_to;
list = lexbor_realloc(cache->list,
sizeof(lxb_css_syntax_token_t *) * new_size);
if (list == NULL) {
return NULL;
}
cache->list = list;
cache->size = new_size;
return list;
}
lxb_status_t
lxb_css_syntax_tokenizer_cache_push(lxb_css_syntax_tokenizer_cache_t *cache,
lxb_css_syntax_token_t *value)
{
if (cache->length >= cache->size) {
if ((lxb_css_syntax_tokenizer_cache_expand(cache, 128) == NULL)) {
return LXB_STATUS_ERROR_MEMORY_ALLOCATION;
}
}
cache->list[ cache->length ] = value;
cache->length++;
return LXB_STATUS_OK;
}
static lxb_status_t
lxb_css_syntax_tokenizer_blank(lxb_css_syntax_tokenizer_t *tkz,
const lxb_char_t **data, const lxb_char_t **end,
void *ctx)
{
return LXB_STATUS_OK;
}
lxb_status_t
lxb_css_syntax_tokenizer_chunk(lxb_css_syntax_tokenizer_t *tkz,
const lxb_char_t *data, size_t size)
{
return tkz->status;
}
lxb_css_syntax_token_t *
lxb_css_syntax_tokenizer_token(lxb_css_syntax_tokenizer_t *tkz)
{
lxb_status_t status;
lxb_css_syntax_token_t *token;
const lxb_char_t *begin, *end;
begin = tkz->in_begin;
end = tkz->in_end;
if (tkz->prepared != 0) {
if (tkz->cache_pos < tkz->prepared) {
token = tkz->cache->list[tkz->prepared - 1];
status = lxb_css_syntax_token_string_make(tkz, token);
if (status != LXB_STATUS_OK) {
return NULL;
}
}
token = tkz->cache->list[tkz->prepared];
token->offset = tkz->offset;
tkz->prepared += 1;
if (tkz->prepared >= tkz->cache->length) {
tkz->prepared = 0;
}
if (lxb_css_syntax_token_base(token)->length != 0) {
tkz->offset += lxb_css_syntax_token_base(token)->length;
token->cloned = false;
return token;
}
if (begin >= end) {
status = lxb_css_syntax_tokenizer_next_chunk(tkz, &begin, &end);
if (status != LXB_STATUS_OK) {
return NULL;
}
if (begin >= end) {
lxb_css_syntax_token_base(token)->length = 1;
goto done;
}
}
if (lxb_css_syntax_token_delim(token)->character == '-') {
begin = lxb_css_syntax_state_minus_process(tkz, token, begin, end);
}
else {
begin = lxb_css_syntax_state_plus_process(tkz, token, begin, end);
}
goto done;
}
if (tkz->cache_pos < tkz->cache->length) {
token = tkz->cache->list[tkz->cache->length - 1];
status = lxb_css_syntax_token_string_make(tkz, token);
if (status != LXB_STATUS_OK) {
return NULL;
}
}
token = lxb_css_syntax_token_cached_create(tkz);
if (token == NULL) {
return NULL;
}
token->offset = tkz->offset;
again:
if (begin >= end) {
status = lxb_css_syntax_tokenizer_next_chunk(tkz, &begin, &end);
if (status != LXB_STATUS_OK) {
return NULL;
}
if (begin >= end) {
token->type = LXB_CSS_SYNTAX_TOKEN__EOF;
lxb_css_syntax_token_base(token)->begin = begin;
lxb_css_syntax_token_base(token)->length = 0;
token->cloned = false;
return token;
}
}
begin = lxb_css_syntax_state_res_map[*begin](tkz, token, begin, end);
done:
token->cloned = false;
if (begin == NULL) {
return NULL;
}
tkz->in_begin = begin;
tkz->offset += lxb_css_syntax_token_base(token)->length;
if (token->type == LXB_CSS_SYNTAX_TOKEN_COMMENT && !tkz->with_comment) {
end = tkz->in_end;
goto again;
}
return token;
}
lxb_status_t
lxb_css_syntax_tokenizer_next_chunk(lxb_css_syntax_tokenizer_t *tkz,
const lxb_char_t **data, const lxb_char_t **end)
{
const lxb_char_t *begin;
if (tkz->eof == false) {
begin = *data;
tkz->status = tkz->chunk_cb(tkz, data, end, tkz->chunk_ctx);
if (tkz->status != LXB_STATUS_OK) {
return tkz->status;
}
if (*data >= *end) {
*data = begin;
*end = begin;
tkz->in_begin = begin;
tkz->in_end = begin;
tkz->eof = true;
}
else {
tkz->in_begin = *data;
tkz->in_end = *end;
}
}
return LXB_STATUS_OK;
}
bool
lxb_css_syntax_tokenizer_lookup_colon(lxb_css_syntax_tokenizer_t *tkz)
{
const lxb_char_t *p, *end;
lxb_css_syntax_token_t *token;
if (tkz->cache_pos + 1 < tkz->cache->length) {
token = tkz->cache->list[tkz->cache_pos + 1];
if (token->type == LXB_CSS_SYNTAX_TOKEN_WHITESPACE) {
if (tkz->cache_pos + 2 < tkz->cache->length) {
token = tkz->cache->list[tkz->cache_pos + 2];
return token->type == LXB_CSS_SYNTAX_TOKEN_COLON;
}
}
else if (token->type == LXB_CSS_SYNTAX_TOKEN_COLON) {
return true;
}
return false;
}
p = tkz->in_begin;
end = tkz->in_end;
do {
if (p >= end) {
token = lxb_css_syntax_token_next(tkz);
if (token == NULL) {
return false;
}
if (token->type == LXB_CSS_SYNTAX_TOKEN_WHITESPACE) {
token = lxb_css_syntax_token_next(tkz);
if (token == NULL) {
return false;
}
}
return token->type == LXB_CSS_SYNTAX_TOKEN_COLON;
}
switch (*p) {
case 0x3A:
return true;
case 0x0D:
case 0x0C:
case 0x09:
case 0x20:
case 0x0A:
p++;
break;
default:
return false;
}
}
while (true);
}
bool
lxb_css_syntax_tokenizer_lookup_important(lxb_css_syntax_tokenizer_t *tkz,
lxb_css_syntax_token_type_t stop,
const lxb_char_t stop_ch)
{
const lxb_char_t *p, *end;
lxb_css_syntax_token_t *token;
static const size_t length = sizeof(lxb_css_syntax_tokenizer_important) - 1;
p = tkz->in_begin;
end = tkz->in_end;
if (tkz->cache_pos + 1 < tkz->cache->length) {
token = tkz->cache->list[tkz->cache_pos + 1];
if (token->type == LXB_CSS_SYNTAX_TOKEN_IDENT) {
return false;
}
if (!(lxb_css_syntax_token_ident(token)->length == length
&& lexbor_str_data_ncasecmp(lxb_css_syntax_token_ident(token)->data,
lxb_css_syntax_tokenizer_important,
length)))
{
return false;
}
if (tkz->cache_pos + 2 < tkz->cache->length) {
token = tkz->cache->list[tkz->cache_pos + 2];
if (token->type == LXB_CSS_SYNTAX_TOKEN_WHITESPACE) {
if (tkz->cache_pos + 3 >= tkz->cache->length) {
return lxb_css_syntax_tokenizer_lookup_important_end(tkz,
p, end, stop_ch, stop, false);
}
token = tkz->cache->list[tkz->cache_pos + 3];
}
return (token->type == LXB_CSS_SYNTAX_TOKEN_SEMICOLON
|| token->type == stop
|| token->type == LXB_CSS_SYNTAX_TOKEN__EOF);
}
return lxb_css_syntax_tokenizer_lookup_important_end(tkz, p, end,
stop_ch, stop, false);
}
return lxb_css_syntax_tokenizer_lookup_important_ch(tkz, p, end, stop_ch,
stop, false);
}
static bool
lxb_css_syntax_tokenizer_lookup_important_ch(lxb_css_syntax_tokenizer_t *tkz,
const lxb_char_t *p,
const lxb_char_t *end,
const lxb_char_t stop_ch,
lxb_css_syntax_token_type_t stop,
bool skip_first)
{
const lxb_char_t *imp;
imp = lxb_css_syntax_tokenizer_important;
do {
if (p >= end) {
return lxb_css_syntax_tokenizer_lookup_important_tokens(tkz, stop,
skip_first);
}
if (lexbor_str_res_map_lowercase[*p++] != *imp++) {
return false;
}
}
while (*imp != 0x00);
return lxb_css_syntax_tokenizer_lookup_important_end(tkz, p, end, stop_ch,
stop, skip_first);
}
static bool
lxb_css_syntax_tokenizer_lookup_important_end(lxb_css_syntax_tokenizer_t *tkz,
const lxb_char_t *p,
const lxb_char_t *end,
const lxb_char_t stop_ch,
lxb_css_syntax_token_type_t stop,
bool skip_first)
{
do {
if (p >= end) {
return lxb_css_syntax_tokenizer_lookup_important_tokens(tkz, stop,
skip_first);
}
switch (*p) {
case 0x3B:
return true;
case 0x0D:
case 0x0C:
case 0x09:
case 0x20:
case 0x0A:
p++;
break;
default:
return (stop_ch != 0x00 && stop_ch == *p);
}
}
while (true);
}
static bool
lxb_css_syntax_tokenizer_lookup_important_tokens(lxb_css_syntax_tokenizer_t *tkz,
lxb_css_syntax_token_type_t stop,
bool skip_first)
{
const lxb_css_syntax_token_t *next;
static const size_t length = sizeof(lxb_css_syntax_tokenizer_important) - 1;
if (skip_first) {
next = lxb_css_syntax_token_next(tkz);
if (next == NULL) {
return false;
}
}
next = lxb_css_syntax_token_next(tkz);
if (next == NULL) {
return false;
}
if (next->type != LXB_CSS_SYNTAX_TOKEN_IDENT) {
return false;
}
if (!(lxb_css_syntax_token_ident(next)->length == length
&& lexbor_str_data_ncasecmp(lxb_css_syntax_token_ident(next)->data,
lxb_css_syntax_tokenizer_important,
length)))
{
return false;
}
next = lxb_css_syntax_token_next(tkz);
if (next == NULL) {
return false;
}
if (next->type == LXB_CSS_SYNTAX_TOKEN_WHITESPACE) {
next = lxb_css_syntax_token_next(tkz);
if (next == NULL) {
return false;
}
}
return (next->type == LXB_CSS_SYNTAX_TOKEN_SEMICOLON
|| next->type == stop || next->type == LXB_CSS_SYNTAX_TOKEN__EOF);
}
bool
lxb_css_syntax_tokenizer_lookup_declaration_ws_end(lxb_css_syntax_tokenizer_t *tkz,
lxb_css_syntax_token_type_t stop,
const lxb_char_t stop_ch)
{
lxb_css_syntax_token_t *token;
const lxb_char_t *p, *end;
if (tkz->cache_pos + 1 < tkz->cache->length) {
token = tkz->cache->list[tkz->cache_pos + 1];
switch (token->type) {
case LXB_CSS_SYNTAX_TOKEN_DELIM:
if (lxb_css_syntax_token_delim(token)->character != '!') {
return lxb_css_syntax_tokenizer_lookup_important(tkz, stop,
stop_ch);
}
return false;
case LXB_CSS_SYNTAX_TOKEN_SEMICOLON:
return true;
default:
return token->type == stop_ch ||
token->type == LXB_CSS_SYNTAX_TOKEN__EOF;
}
}
p = tkz->in_begin;
end = tkz->in_end;
do {
if (p >= end) {
return lxb_css_syntax_tokenizer_lookup_important_tokens(tkz, stop,
true);
}
switch (*p) {
case 0x3B:
return true;
case 0x21:
p++;
return lxb_css_syntax_tokenizer_lookup_important_ch(tkz, p, end,
stop_ch, stop, true);
default:
return (stop_ch != 0x00 && stop_ch == *p);
}
}
while (true);
}
/*
* No inline functions for ABI.
*/
lxb_status_t
lxb_css_syntax_tokenizer_status_noi(lxb_css_syntax_tokenizer_t *tkz)
{
return lxb_css_syntax_tokenizer_status(tkz);
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,159 +0,0 @@
/*
* Copyright (C) 2024 Alexander Borisov
*
* Author: Alexander Borisov <borisov@lexbor.com>
*/
/*
* Caution!
* This file generated by the script "utils/lexbor/encoding/multi-byte.py"!
* Do not change this file!
*/
#include "lexbor/encoding/base.h"
#include "lexbor/core/shs.h"
LXB_API const lxb_encoding_multi_index_t lxb_encoding_multi_index_iso_2022_jp_katakana[63] =
{
{{'\xe3', '\x80', '\x82'}, 3, 0x3002}, /* (IDEOGRAPHIC FULL STOP) */
{{'\xe3', '\x80', '\x8c'}, 3, 0x300C}, /* (LEFT CORNER BRACKET) */
{{'\xe3', '\x80', '\x8d'}, 3, 0x300D}, /* (RIGHT CORNER BRACKET) */
{{'\xe3', '\x80', '\x81'}, 3, 0x3001}, /* (IDEOGRAPHIC COMMA) */
{{'\xe3', '\x83', '\xbb'}, 3, 0x30FB}, /* (KATAKANA MIDDLE DOT) */
{{'\xe3', '\x83', '\xb2'}, 3, 0x30F2}, /* (KATAKANA LETTER WO) */
{{'\xe3', '\x82', '\xa1'}, 3, 0x30A1}, /* (KATAKANA LETTER SMALL A) */
{{'\xe3', '\x82', '\xa3'}, 3, 0x30A3}, /* (KATAKANA LETTER SMALL I) */
{{'\xe3', '\x82', '\xa5'}, 3, 0x30A5}, /* (KATAKANA LETTER SMALL U) */
{{'\xe3', '\x82', '\xa7'}, 3, 0x30A7}, /* (KATAKANA LETTER SMALL E) */
{{'\xe3', '\x82', '\xa9'}, 3, 0x30A9}, /* (KATAKANA LETTER SMALL O) */
{{'\xe3', '\x83', '\xa3'}, 3, 0x30E3}, /* (KATAKANA LETTER SMALL YA) */
{{'\xe3', '\x83', '\xa5'}, 3, 0x30E5}, /* (KATAKANA LETTER SMALL YU) */
{{'\xe3', '\x83', '\xa7'}, 3, 0x30E7}, /* (KATAKANA LETTER SMALL YO) */
{{'\xe3', '\x83', '\x83'}, 3, 0x30C3}, /* (KATAKANA LETTER SMALL TU) */
{{'\xe3', '\x83', '\xbc'}, 3, 0x30FC}, /* (KATAKANA-HIRAGANA PROLONGED SOUND MARK) */
{{'\xe3', '\x82', '\xa2'}, 3, 0x30A2}, /* (KATAKANA LETTER A) */
{{'\xe3', '\x82', '\xa4'}, 3, 0x30A4}, /* (KATAKANA LETTER I) */
{{'\xe3', '\x82', '\xa6'}, 3, 0x30A6}, /* (KATAKANA LETTER U) */
{{'\xe3', '\x82', '\xa8'}, 3, 0x30A8}, /* (KATAKANA LETTER E) */
{{'\xe3', '\x82', '\xaa'}, 3, 0x30AA}, /* (KATAKANA LETTER O) */
{{'\xe3', '\x82', '\xab'}, 3, 0x30AB}, /* (KATAKANA LETTER KA) */
{{'\xe3', '\x82', '\xad'}, 3, 0x30AD}, /* (KATAKANA LETTER KI) */
{{'\xe3', '\x82', '\xaf'}, 3, 0x30AF}, /* (KATAKANA LETTER KU) */
{{'\xe3', '\x82', '\xb1'}, 3, 0x30B1}, /* (KATAKANA LETTER KE) */
{{'\xe3', '\x82', '\xb3'}, 3, 0x30B3}, /* (KATAKANA LETTER KO) */
{{'\xe3', '\x82', '\xb5'}, 3, 0x30B5}, /* (KATAKANA LETTER SA) */
{{'\xe3', '\x82', '\xb7'}, 3, 0x30B7}, /* (KATAKANA LETTER SI) */
{{'\xe3', '\x82', '\xb9'}, 3, 0x30B9}, /* (KATAKANA LETTER SU) */
{{'\xe3', '\x82', '\xbb'}, 3, 0x30BB}, /* (KATAKANA LETTER SE) */
{{'\xe3', '\x82', '\xbd'}, 3, 0x30BD}, /* (KATAKANA LETTER SO) */
{{'\xe3', '\x82', '\xbf'}, 3, 0x30BF}, /* (KATAKANA LETTER TA) */
{{'\xe3', '\x83', '\x81'}, 3, 0x30C1}, /* (KATAKANA LETTER TI) */
{{'\xe3', '\x83', '\x84'}, 3, 0x30C4}, /* (KATAKANA LETTER TU) */
{{'\xe3', '\x83', '\x86'}, 3, 0x30C6}, /* (KATAKANA LETTER TE) */
{{'\xe3', '\x83', '\x88'}, 3, 0x30C8}, /* (KATAKANA LETTER TO) */
{{'\xe3', '\x83', '\x8a'}, 3, 0x30CA}, /* (KATAKANA LETTER NA) */
{{'\xe3', '\x83', '\x8b'}, 3, 0x30CB}, /* (KATAKANA LETTER NI) */
{{'\xe3', '\x83', '\x8c'}, 3, 0x30CC}, /* (KATAKANA LETTER NU) */
{{'\xe3', '\x83', '\x8d'}, 3, 0x30CD}, /* (KATAKANA LETTER NE) */
{{'\xe3', '\x83', '\x8e'}, 3, 0x30CE}, /* (KATAKANA LETTER NO) */
{{'\xe3', '\x83', '\x8f'}, 3, 0x30CF}, /* (KATAKANA LETTER HA) */
{{'\xe3', '\x83', '\x92'}, 3, 0x30D2}, /* (KATAKANA LETTER HI) */
{{'\xe3', '\x83', '\x95'}, 3, 0x30D5}, /* (KATAKANA LETTER HU) */
{{'\xe3', '\x83', '\x98'}, 3, 0x30D8}, /* (KATAKANA LETTER HE) */
{{'\xe3', '\x83', '\x9b'}, 3, 0x30DB}, /* (KATAKANA LETTER HO) */
{{'\xe3', '\x83', '\x9e'}, 3, 0x30DE}, /* (KATAKANA LETTER MA) */
{{'\xe3', '\x83', '\x9f'}, 3, 0x30DF}, /* (KATAKANA LETTER MI) */
{{'\xe3', '\x83', '\xa0'}, 3, 0x30E0}, /* (KATAKANA LETTER MU) */
{{'\xe3', '\x83', '\xa1'}, 3, 0x30E1}, /* (KATAKANA LETTER ME) */
{{'\xe3', '\x83', '\xa2'}, 3, 0x30E2}, /* (KATAKANA LETTER MO) */
{{'\xe3', '\x83', '\xa4'}, 3, 0x30E4}, /* (KATAKANA LETTER YA) */
{{'\xe3', '\x83', '\xa6'}, 3, 0x30E6}, /* (KATAKANA LETTER YU) */
{{'\xe3', '\x83', '\xa8'}, 3, 0x30E8}, /* (KATAKANA LETTER YO) */
{{'\xe3', '\x83', '\xa9'}, 3, 0x30E9}, /* (KATAKANA LETTER RA) */
{{'\xe3', '\x83', '\xaa'}, 3, 0x30EA}, /* (KATAKANA LETTER RI) */
{{'\xe3', '\x83', '\xab'}, 3, 0x30EB}, /* (KATAKANA LETTER RU) */
{{'\xe3', '\x83', '\xac'}, 3, 0x30EC}, /* (KATAKANA LETTER RE) */
{{'\xe3', '\x83', '\xad'}, 3, 0x30ED}, /* (KATAKANA LETTER RO) */
{{'\xe3', '\x83', '\xaf'}, 3, 0x30EF}, /* (KATAKANA LETTER WA) */
{{'\xe3', '\x83', '\xb3'}, 3, 0x30F3}, /* (KATAKANA LETTER N) */
{{'\xe3', '\x82', '\x9b'}, 3, 0x309B}, /* (KATAKANA-HIRAGANA VOICED SOUND MARK) */
{{'\xe3', '\x82', '\x9c'}, 3, 0x309C}, /* (KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK) */
};
/* Table size: 52; Max deep: 2 */
LXB_API const lexbor_shs_hash_t lxb_encoding_multi_hash_iso_2022_jp_katakana[72] =
{
{0, 0, 0},{0, 0, 0},
{12481, 32, 0},
{0, 0, 0},
{12483, 14, 0},
{12484, 33, 0},
{0, 0, 0},
{12486, 34, 0},
{12539, 4, 0},
{12540, 15, 58},
{0, 0, 0},
{12490, 36, 0},
{12491, 37, 0},
{12492, 38, 0},
{12493, 39, 0},
{12494, 40, 0},
{12495, 41, 71},
{12444, 62, 0},
{12289, 3, 0},
{12290, 0, 59},
{0, 0, 0},
{0, 0, 0},
{12449, 6, 60},
{12450, 16, 0},
{12451, 7, 0},
{12452, 17, 61},
{12453, 8, 0},
{12454, 18, 0},
{12455, 9, 62},
{12300, 1, 54},
{12301, 2, 53},
{12458, 20, 63},
{12459, 21, 64},
{12512, 48, 0},
{12461, 22, 65},
{12514, 50, 0},
{12515, 11, 55},
{12516, 51, 0},
{12517, 12, 56},
{12518, 52, 0},
{12519, 13, 57},
{12520, 53, 0},
{12469, 26, 66},
{12522, 55, 0},
{12471, 27, 67},
{12524, 57, 0},
{12473, 28, 68},
{0, 0, 0},
{12475, 29, 69},
{0, 0, 0},
{12477, 30, 0},
{12530, 5, 0},
{12479, 31, 70},
{12457, 10, 0},
{12456, 19, 0},
{12463, 23, 0},
{12465, 24, 0},
{12467, 25, 0},
{12488, 35, 0},
{12498, 42, 0},
{12501, 43, 0},
{12504, 44, 0},
{12507, 45, 0},
{12510, 46, 0},
{12511, 47, 0},
{12513, 49, 0},
{12521, 54, 0},
{12523, 56, 0},
{12525, 58, 0},
{12527, 59, 0},
{12531, 60, 0},
{12443, 61, 0}
};

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,53 +0,0 @@
/*
* Copyright (C) 2019 Alexander Borisov
*
* Author: Alexander Borisov <borisov@lexbor.com>
*/
/*
* Caution!
* This file generated by the script "utils/lexbor/encoding/multi-byte.py"!
* Do not change this file!
*/
#ifndef LEXBOR_ENCODING_MULTI_H
#define LEXBOR_ENCODING_MULTI_H
#ifdef __cplusplus
extern "C" {
#endif
#include "lexbor/encoding/base.h"
#include "lexbor/core/shs.h"
#define LXB_ENCODING_MULTI_HASH_BIG5_SIZE 20172
#define LXB_ENCODING_MULTI_HASH_EUC_KR_SIZE 28041
#define LXB_ENCODING_MULTI_HASH_GB18030_SIZE 19950
#define LXB_ENCODING_MULTI_HASH_ISO_2022_JP_KATAKANA_SIZE 52
#define LXB_ENCODING_MULTI_HASH_JIS0208_SIZE 9253
#define LXB_ENCODING_MULTI_HASH_JIS0212_SIZE 6923
LXB_EXTERN const lxb_encoding_multi_index_t lxb_encoding_multi_index_big5[19782];
LXB_EXTERN const lxb_encoding_multi_index_t lxb_encoding_multi_index_euc_kr[23750];
LXB_EXTERN const lxb_encoding_multi_index_t lxb_encoding_multi_index_gb18030[23940];
LXB_EXTERN const lxb_encoding_multi_index_t lxb_encoding_multi_index_iso_2022_jp_katakana[63];
LXB_EXTERN const lxb_encoding_multi_index_t lxb_encoding_multi_index_jis0208[11104];
LXB_EXTERN const lxb_encoding_multi_index_t lxb_encoding_multi_index_jis0212[7211];
LXB_EXTERN const lexbor_shs_hash_t lxb_encoding_multi_hash_big5[23033];
LXB_EXTERN const lexbor_shs_hash_t lxb_encoding_multi_hash_euc_kr[30109];
LXB_EXTERN const lexbor_shs_hash_t lxb_encoding_multi_hash_gb18030[23941];
LXB_EXTERN const lexbor_shs_hash_t lxb_encoding_multi_hash_iso_2022_jp_katakana[72];
LXB_EXTERN const lexbor_shs_hash_t lxb_encoding_multi_hash_jis0208[11349];
LXB_EXTERN const lexbor_shs_hash_t lxb_encoding_multi_hash_jis0212[8552];
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* LEXBOR_ENCODING_MULTI_H */

File diff suppressed because it is too large Load Diff

View File

@@ -1,661 +0,0 @@
/*
* Copyright (C) 2018-2022 Alexander Borisov
*
* Author: Alexander Borisov <borisov@lexbor.com>
*/
#include "lexbor/html/style.h"
#include "lexbor/html/interfaces/element.h"
#include "lexbor/html/interfaces/document.h"
typedef struct {
lexbor_str_t *str;
lexbor_mraw_t *mraw;
}
lxb_html_element_style_ctx_t;
typedef struct {
lxb_html_element_t *element;
lxb_html_element_style_cb_f cb;
void *ctx;
bool weak;
}
lxb_html_element_walk_ctx_t;
static lxb_status_t
lxb_html_element_style_walk_cb(lexbor_avl_t *avl, lexbor_avl_node_t **root,
lexbor_avl_node_t *node, void *ctx);
static lxb_status_t
lxb_html_element_style_weak_append(lxb_html_document_t *doc,
lxb_html_style_node_t *node,
lxb_css_rule_declaration_t *declr,
lxb_css_selector_specificity_t spec);
static lxb_status_t
lxb_html_element_style_serialize_cb(lexbor_avl_t *avl, lexbor_avl_node_t **root,
lexbor_avl_node_t *node, void *ctx);
#if 0
static lxb_status_t
lxb_html_element_style_serialize_str_cb(const lxb_char_t *data,
size_t len, void *ctx);
#endif
lxb_html_element_t *
lxb_html_element_interface_create(lxb_html_document_t *document)
{
lxb_html_element_t *element;
element = lexbor_mraw_calloc(document->dom_document.mraw,
sizeof(lxb_html_element_t));
if (element == NULL) {
return NULL;
}
lxb_dom_node_t *node = lxb_dom_interface_node(element);
node->owner_document = lxb_html_document_original_ref(document);
node->type = LXB_DOM_NODE_TYPE_ELEMENT;
return element;
}
lxb_html_element_t *
lxb_html_element_interface_destroy(lxb_html_element_t *element)
{
(void) lxb_dom_node_interface_destroy(lxb_dom_interface_node(element));
return NULL;
}
lxb_html_element_t *
lxb_html_element_inner_html_set(lxb_html_element_t *element,
const lxb_char_t *html, size_t size)
{
lxb_dom_node_t *node, *child;
lxb_dom_node_t *root = lxb_dom_interface_node(element);
lxb_html_document_t *doc = lxb_html_interface_document(root->owner_document);
node = lxb_html_document_parse_fragment(doc, &element->element, html, size);
if (node == NULL) {
return NULL;
}
while (root->first_child != NULL) {
lxb_dom_node_destroy_deep(root->first_child);
}
while (node->first_child != NULL) {
child = node->first_child;
lxb_dom_node_remove(child);
lxb_dom_node_insert_child(root, child);
}
lxb_dom_node_destroy(node);
return lxb_html_interface_element(root);
}
const lxb_css_rule_declaration_t *
lxb_html_element_style_by_name(lxb_html_element_t *element,
const lxb_char_t *name, size_t size)
{
#if 0
uintptr_t id;
lxb_html_style_node_t *node;
lxb_dom_document_t *ddoc = lxb_dom_interface_node(element)->owner_document;
lxb_html_document_t *doc = lxb_html_interface_document(ddoc);
id = lxb_html_style_id_by_name(doc, name, size);
if (id == LXB_CSS_PROPERTY__UNDEF) {
return NULL;
}
node = (void *) lexbor_avl_search(doc->css.styles, element->style, id);
return (node != NULL) ? node->entry.value : NULL;
#endif
return NULL;
}
const lxb_css_rule_declaration_t *
lxb_html_element_style_by_id(lxb_html_element_t *element, uintptr_t id)
{
#if 0
const lxb_html_style_node_t *node;
node = lxb_html_element_style_node_by_id(element, id);
if (node == NULL) {
return NULL;
}
return node->entry.value;
#endif
return NULL;
}
const lxb_html_style_node_t *
lxb_html_element_style_node_by_id(lxb_html_element_t *element, uintptr_t id)
{
lxb_dom_document_t *ddoc = lxb_dom_interface_node(element)->owner_document;
lxb_html_document_t *doc = lxb_html_interface_document(ddoc);
return (lxb_html_style_node_t *) lexbor_avl_search(doc->css.styles,
element->style, id);
}
const lxb_html_style_node_t *
lxb_html_element_style_node_by_name(lxb_html_element_t *element,
const lxb_char_t *name, size_t size)
{
#if 0
uintptr_t id;
lxb_dom_document_t *ddoc = lxb_dom_interface_node(element)->owner_document;
lxb_html_document_t *doc = lxb_html_interface_document(ddoc);
id = lxb_html_style_id_by_name(doc, name, size);
if (id == LXB_CSS_PROPERTY__UNDEF) {
return NULL;
}
return (lxb_html_style_node_t *) lexbor_avl_search(doc->css.styles,
element->style, id);
#endif
return NULL;
}
const void *
lxb_html_element_css_property_by_id(lxb_html_element_t *element, uintptr_t id)
{
#if 0
lxb_css_rule_declaration_t *declr;
const lxb_html_style_node_t *node;
node = lxb_html_element_style_node_by_id(element, id);
if (node == NULL) {
return lxb_css_property_initial_by_id(id);
}
declr = node->entry.value;
return declr->u.user;
#endif
return NULL;
}
lxb_status_t
lxb_html_element_style_walk(lxb_html_element_t *element,
lxb_html_element_style_cb_f cb, void *ctx,
bool with_weak)
{
lxb_html_element_walk_ctx_t walk;
walk.element = element;
walk.cb = cb;
walk.ctx = ctx;
walk.weak = with_weak;
return lexbor_avl_foreach(NULL, &element->style,
lxb_html_element_style_walk_cb, &walk);
}
static lxb_status_t
lxb_html_element_style_walk_cb(lexbor_avl_t *avl, lexbor_avl_node_t **root,
lexbor_avl_node_t *node, void *ctx)
{
lxb_status_t status;
lxb_html_style_weak_t *weak;
lxb_html_style_node_t *style;
lxb_html_element_walk_ctx_t *walk = ctx;
style = (lxb_html_style_node_t *) node;
status = walk->cb(walk->element, node->value, walk->ctx, style->sp, false);
if (status != LXB_STATUS_OK) {
return status;
}
weak = style->weak;
while (weak != NULL) {
status = walk->cb(walk->element, weak->value, walk->ctx,
weak->sp, true);
if (status != LXB_STATUS_OK) {
return status;
}
weak = weak->next;
}
return LXB_STATUS_OK;
}
lxb_status_t
lxb_html_element_style_parse(lxb_html_element_t *element,
const lxb_char_t *style, size_t size)
{
#if 0
lxb_css_rule_declaration_list_t *list;
lxb_dom_document_t *ddoc = lxb_dom_interface_node(element)->owner_document;
lxb_html_document_t *doc = lxb_html_interface_document(ddoc);
lxb_html_document_css_t *css = &doc->css;
list = lxb_css_declaration_list_parse(css->parser, css->memory,
style, size);
if (list == NULL) {
return css->parser->status;
}
element->list = list;
return lxb_html_element_style_list_append(element, list,
lxb_css_selector_sp_up_s(0));
#endif
return LXB_STATUS_ERROR;
}
lxb_status_t
lxb_html_element_style_append(lxb_html_element_t *element,
lxb_css_rule_declaration_t *declr,
lxb_css_selector_specificity_t spec)
{
uintptr_t id;
lxb_status_t status;
lexbor_str_t *name;
lxb_html_style_node_t *node;
lxb_dom_document_t *ddoc = lxb_dom_interface_node(element)->owner_document;
lxb_html_document_t *doc = lxb_html_interface_document(ddoc);
lxb_html_document_css_t *css = &doc->css;
id = declr->type;
lxb_css_selector_sp_set_i(spec, declr->important);
if (id == LXB_CSS_PROPERTY__CUSTOM) {
name = &declr->u.custom->name;
id = lxb_html_document_css_customs_id(doc, name->data,
name->length);
if (id == 0) {
/* FIXME: what to do with an error? */
return LXB_STATUS_ERROR;
}
}
node = (void *) lexbor_avl_search(css->styles, element->style, id);
if (node != NULL) {
if (spec < node->sp) {
return lxb_html_element_style_weak_append(doc, node, declr, spec);
}
status = lxb_html_element_style_weak_append(doc, node,
node->entry.value, node->sp);
if (status != LXB_STATUS_OK) {
return status;
}
lxb_css_rule_ref_dec(node->entry.value);
node->entry.value = declr;
node->sp = spec;
return LXB_STATUS_OK;
}
node = (void *) lexbor_avl_insert(css->styles, &element->style,
id, declr);
if (node == NULL) {
/* FIXME: what to do with an error? */
return LXB_STATUS_ERROR;
}
node->sp = spec;
return lxb_css_rule_ref_inc(lxb_css_rule(declr));
}
static lxb_status_t
lxb_html_element_style_weak_append(lxb_html_document_t *doc,
lxb_html_style_node_t *node,
lxb_css_rule_declaration_t *declr,
lxb_css_selector_specificity_t spec)
{
lxb_html_style_weak_t *weak, *prev, *new_weak;
new_weak = lexbor_dobject_alloc(doc->css.weak);
if (new_weak == NULL) {
return LXB_STATUS_ERROR_MEMORY_ALLOCATION;
}
new_weak->value = declr;
new_weak->sp = spec;
if (node->weak == NULL) {
node->weak = new_weak;
new_weak->next = NULL;
goto done;
}
weak = node->weak;
if (weak->sp <= spec) {
node->weak = new_weak;
new_weak->next = weak;
goto done;
}
prev = weak;
weak = weak->next;
while (weak != NULL) {
if (weak->sp <= spec) {
prev->next = new_weak;
new_weak->next = weak;
goto done;
}
prev = weak;
weak = weak->next;
}
prev->next = new_weak;
new_weak->next = NULL;
done:
return lxb_css_rule_ref_inc(lxb_css_rule(declr));
}
lxb_status_t
lxb_html_element_style_list_append(lxb_html_element_t *element,
lxb_css_rule_declaration_list_t *list,
lxb_css_selector_specificity_t spec)
{
lxb_status_t status;
lxb_css_rule_t *rule;
lxb_css_rule_declaration_t *declr;
rule = list->first;
while (rule != NULL) {
if (rule->type != LXB_CSS_RULE_DECLARATION) {
goto next;
}
declr = lxb_css_rule_declaration(rule);
status = lxb_html_element_style_append(element, declr, spec);
if (status != LXB_STATUS_OK) {
/* FIXME: what to do with an error? */
}
next:
rule = rule->next;
}
return LXB_STATUS_OK;
}
void
lxb_html_element_style_remove_by_name(lxb_html_element_t *element,
const lxb_char_t *name, size_t size)
{
#if 0
uintptr_t id;
lxb_dom_document_t *ddoc = lxb_dom_interface_node(element)->owner_document;
lxb_html_document_t *doc = lxb_html_interface_document(ddoc);
id = lxb_html_style_id_by_name(doc, name, size);
if (id == LXB_CSS_PROPERTY__UNDEF) {
return;
}
lxb_html_element_style_remove_by_id(element, id);
#endif
}
void
lxb_html_element_style_remove_by_id(lxb_html_element_t *element, uintptr_t id)
{
#if 0
lxb_html_style_node_t *node;
lxb_dom_document_t *ddoc = lxb_dom_interface_node(element)->owner_document;
lxb_html_document_t *doc = lxb_html_interface_document(ddoc);
node = (lxb_html_style_node_t *) lexbor_avl_search(doc->css.styles,
element->style, id);
if (node != NULL) {
lxb_html_element_style_remove_all(doc, &element->style, node);
}
#endif
}
lxb_html_style_node_t *
lxb_html_element_style_remove_all_not(lxb_html_document_t *doc,
lexbor_avl_node_t **root,
lxb_html_style_node_t *style, bool bs)
{
lxb_html_style_weak_t *weak, *prev, *next;
weak = style->weak;
prev = NULL;
while (weak != NULL) {
next = weak->next;
if (lxb_css_selector_sp_s(weak->sp) == bs) {
lxb_css_rule_ref_dec_destroy(weak->value);
lexbor_dobject_free(doc->css.weak, weak);
if (prev != NULL) {
prev->next = next;
}
else {
style->weak = next;
}
}
else {
prev = weak;
}
weak = next;
}
if (lxb_css_selector_sp_s(style->sp) != bs) {
return style;
}
lxb_css_rule_ref_dec_destroy(style->entry.value);
if (style->weak == NULL) {
lexbor_avl_remove_by_node(doc->css.styles, root,
(lexbor_avl_node_t *) style);
return NULL;
}
weak = style->weak;
style->entry.value = weak->value;
style->sp = weak->sp;
style->weak = weak->next;
lexbor_dobject_free(doc->css.weak, weak);
return style;
}
lxb_html_style_node_t *
lxb_html_element_style_remove_all(lxb_html_document_t *doc,
lexbor_avl_node_t **root,
lxb_html_style_node_t *style)
{
lxb_html_style_weak_t *weak, *next;
weak = style->weak;
while (weak != NULL) {
next = weak->next;
lxb_css_rule_ref_dec_destroy(weak->value);
lexbor_dobject_free(doc->css.weak, weak);
weak = next;
}
lxb_css_rule_ref_dec_destroy(style->entry.value);
lexbor_avl_remove_by_node(doc->css.styles, root,
(lexbor_avl_node_t *) style);
return NULL;
}
lxb_html_style_node_t *
lxb_html_element_style_remove_by_list(lxb_html_document_t *doc,
lexbor_avl_node_t **root,
lxb_html_style_node_t *style,
lxb_css_rule_declaration_list_t *list)
{
lxb_html_style_weak_t *weak, *prev, *next;
weak = style->weak;
prev = NULL;
while (weak != NULL) {
next = weak->next;
if (((lxb_css_rule_declaration_t *) weak->value)->rule.parent
== (lxb_css_rule_t *) list)
{
lxb_css_rule_ref_dec_destroy(weak->value);
lexbor_dobject_free(doc->css.weak, weak);
if (prev != NULL) {
prev->next = next;
}
else {
style->weak = next;
}
}
else {
prev = weak;
}
weak = next;
}
if (((lxb_css_rule_declaration_t *) style->entry.value)->rule.parent
!= (lxb_css_rule_t *) list)
{
return style;
}
lxb_css_rule_ref_dec_destroy(style->entry.value);
if (style->weak == NULL) {
lexbor_avl_remove_by_node(doc->css.styles, root,
(lexbor_avl_node_t *) style);
return NULL;
}
weak = style->weak;
style->entry.value = weak->value;
style->sp = weak->sp;
style->weak = weak->next;
lexbor_dobject_free(doc->css.weak, weak);
return style;
}
lxb_status_t
lxb_html_element_style_serialize(lxb_html_element_t *element,
lxb_html_element_style_opt_t opt,
lexbor_serialize_cb_f cb, void *ctx)
{
lexbor_serialize_ctx_t context;
context.cb = cb;
context.ctx = ctx;
context.opt = opt;
context.count = 0;
return lexbor_avl_foreach(NULL, &element->style,
lxb_html_element_style_serialize_cb, &context);
}
static lxb_status_t
lxb_html_element_style_serialize_cb(lexbor_avl_t *avl, lexbor_avl_node_t **root,
lexbor_avl_node_t *node, void *ctx)
{
#if 0
lxb_status_t status;
lexbor_serialize_ctx_t *context = ctx;
static const lexbor_str_t splt = lexbor_str("; ");
if (context->count > 0) {
lexbor_serialize_write(context->cb, splt.data, splt.length,
context->ctx, status);
}
context->count = 1;
return lxb_css_rule_serialize(node->value, context->cb, context->ctx);
#endif
return LXB_STATUS_ERROR;
}
lxb_status_t
lxb_html_element_style_serialize_str(lxb_html_element_t *element,
lexbor_str_t *str,
lxb_html_element_style_opt_t opt)
{
#if 0
lxb_dom_document_t *doc;
lxb_html_element_style_ctx_t context;
doc = lxb_dom_interface_node(element)->owner_document;
if (str->data == NULL) {
lexbor_str_init(str, doc->text, 1024);
if (str->data == NULL) {
return LXB_STATUS_ERROR_MEMORY_ALLOCATION;
}
}
context.str = str;
context.mraw = doc->text;
return lxb_html_element_style_serialize(element, opt,
lxb_html_element_style_serialize_str_cb, &context);
#endif
return LXB_STATUS_ERROR;
}
#if 0
static lxb_status_t
lxb_html_element_style_serialize_str_cb(const lxb_char_t *data,
size_t len, void *ctx)
{
lxb_char_t *ret;
lxb_html_element_style_ctx_t *context = ctx;
ret = lexbor_str_append(context->str, context->mraw, data, len);
if (ret == NULL) {
return LXB_STATUS_ERROR_MEMORY_ALLOCATION;
}
return LXB_STATUS_OK;
}
#endif

View File

@@ -1,175 +0,0 @@
/*
* Copyright (C) 2018-2022 Alexander Borisov
*
* Author: Alexander Borisov <borisov@lexbor.com>
*/
#ifndef LEXBOR_HTML_ELEMENT_H
#define LEXBOR_HTML_ELEMENT_H
#ifdef __cplusplus
extern "C" {
#endif
#include "lexbor/core/avl.h"
#include "lexbor/html/interface.h"
#include "lexbor/html/style.h"
#include "lexbor/dom/interfaces/element.h"
#include "lexbor/css/rule.h"
struct lxb_html_element {
lxb_dom_element_t element;
lexbor_avl_node_t *style;
lxb_css_rule_declaration_list_t *list;
};
typedef enum {
LXB_HTML_ELEMENT_OPT_UNDEF = 0x00
}
lxb_html_element_style_opt_t;
typedef lxb_status_t
(*lxb_html_element_style_cb_f)(lxb_html_element_t *element,
const lxb_css_rule_declaration_t *declr,
void *ctx, lxb_css_selector_specificity_t spec,
bool is_weak);
LXB_API lxb_html_element_t *
lxb_html_element_interface_create(lxb_html_document_t *document);
LXB_API lxb_html_element_t *
lxb_html_element_interface_destroy(lxb_html_element_t *element);
LXB_API lxb_html_element_t *
lxb_html_element_inner_html_set(lxb_html_element_t *element,
const lxb_char_t *html, size_t size);
LXB_API const lxb_css_rule_declaration_t *
lxb_html_element_style_by_name(lxb_html_element_t *element,
const lxb_char_t *name, size_t size);
LXB_API const lxb_css_rule_declaration_t *
lxb_html_element_style_by_id(lxb_html_element_t *element, uintptr_t id);
LXB_API const lxb_html_style_node_t *
lxb_html_element_style_node_by_id(lxb_html_element_t *element, uintptr_t id);
LXB_API const lxb_html_style_node_t *
lxb_html_element_style_node_by_name(lxb_html_element_t *element,
const lxb_char_t *name, size_t size);
LXB_API const void *
lxb_html_element_css_property_by_id(lxb_html_element_t *element, uintptr_t id);
LXB_API lxb_status_t
lxb_html_element_style_walk(lxb_html_element_t *element,
lxb_html_element_style_cb_f cb, void *ctx,
bool with_weak);
LXB_API lxb_status_t
lxb_html_element_style_parse(lxb_html_element_t *element,
const lxb_char_t *style, size_t size);
LXB_API lxb_status_t
lxb_html_element_style_append(lxb_html_element_t *element,
lxb_css_rule_declaration_t *declr,
lxb_css_selector_specificity_t spec);
LXB_API lxb_status_t
lxb_html_element_style_list_append(lxb_html_element_t *element,
lxb_css_rule_declaration_list_t *list,
lxb_css_selector_specificity_t spec);
LXB_API void
lxb_html_element_style_remove_by_id(lxb_html_element_t *element, uintptr_t id);
LXB_API void
lxb_html_element_style_remove_by_name(lxb_html_element_t *element,
const lxb_char_t *name, size_t size);
LXB_API lxb_html_style_node_t *
lxb_html_element_style_remove_all_not(lxb_html_document_t *doc,
lexbor_avl_node_t **root,
lxb_html_style_node_t *style, bool bs);
LXB_API lxb_html_style_node_t *
lxb_html_element_style_remove_all(lxb_html_document_t *doc,
lexbor_avl_node_t **root,
lxb_html_style_node_t *style);
LXB_API lxb_html_style_node_t *
lxb_html_element_style_remove_by_list(lxb_html_document_t *doc,
lexbor_avl_node_t **root,
lxb_html_style_node_t *style,
lxb_css_rule_declaration_list_t *list);
LXB_API lxb_status_t
lxb_html_element_style_serialize(lxb_html_element_t *element,
lxb_html_element_style_opt_t opt,
lexbor_serialize_cb_f cb, void *ctx);
LXB_API lxb_status_t
lxb_html_element_style_serialize_str(lxb_html_element_t *element,
lexbor_str_t *str,
lxb_html_element_style_opt_t opt);
/*
* Inline functions
*/
lxb_inline lxb_tag_id_t
lxb_html_element_tag_id(lxb_html_element_t *element)
{
return lxb_dom_interface_node(element)->local_name;
}
lxb_inline lxb_ns_id_t
lxb_html_element_ns_id(lxb_html_element_t *element)
{
return lxb_dom_interface_node(element)->ns;
}
lxb_inline void
lxb_html_element_insert_before(lxb_html_element_t *dst, lxb_html_element_t *src)
{
lxb_dom_node_insert_before(lxb_dom_interface_node(dst),
lxb_dom_interface_node(src));
}
lxb_inline void
lxb_html_element_insert_after(lxb_html_element_t *dst, lxb_html_element_t *src)
{
lxb_dom_node_insert_after(lxb_dom_interface_node(dst),
lxb_dom_interface_node(src));
}
lxb_inline void
lxb_html_element_insert_child(lxb_html_element_t *dst, lxb_html_element_t *src)
{
lxb_dom_node_insert_child(lxb_dom_interface_node(dst),
lxb_dom_interface_node(src));
}
lxb_inline void
lxb_html_element_remove(lxb_html_element_t *element)
{
lxb_dom_node_remove(lxb_dom_interface_node(element));
}
lxb_inline lxb_html_document_t *
lxb_html_element_document(lxb_html_element_t *element)
{
return lxb_html_interface_document(lxb_dom_interface_node(element)->owner_document);
}
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* LEXBOR_HTML_ELEMENT_H */

View File

@@ -1,93 +0,0 @@
/*
* Copyright (C) 2018 Alexander Borisov
*
* Author: Alexander Borisov <borisov@lexbor.com>
*/
#include "lexbor/html/interfaces/style_element.h"
#include "lexbor/html/interfaces/document.h"
lxb_html_style_element_t *
lxb_html_style_element_interface_create(lxb_html_document_t *document)
{
lxb_html_style_element_t *element;
element = lexbor_mraw_calloc(document->dom_document.mraw,
sizeof(lxb_html_style_element_t));
if (element == NULL) {
return NULL;
}
lxb_dom_node_t *node = lxb_dom_interface_node(element);
node->owner_document = lxb_html_document_original_ref(document);
node->type = LXB_DOM_NODE_TYPE_ELEMENT;
return element;
}
lxb_html_style_element_t *
lxb_html_style_element_interface_destroy(lxb_html_style_element_t *style_element)
{
lxb_css_stylesheet_t *sst = style_element->stylesheet;
(void) lxb_dom_node_interface_destroy(lxb_dom_interface_node(style_element));
if (sst != NULL) {
#if 0
(void) lxb_css_stylesheet_destroy(sst, true);
#endif
}
return NULL;
}
lxb_status_t
lxb_html_style_element_parse(lxb_html_style_element_t *element)
{
#if 0
lexbor_str_t *str;
lxb_dom_text_t *text;
#endif
lxb_dom_node_t *node;
lxb_dom_document_t *ddoc = lxb_dom_interface_node(element)->owner_document;
lxb_html_document_t *doc = lxb_html_interface_document(ddoc);
lxb_html_document_css_t *css = &doc->css;
node = lxb_dom_interface_node(element);
if (node->first_child == NULL
|| node->first_child->local_name != LXB_TAG__TEXT
|| node->first_child != node->last_child)
{
return LXB_STATUS_OK;
}
#if 0
text = lxb_dom_interface_text(lxb_dom_interface_node(element)->first_child);
str = &text->char_data.data;
element->stylesheet = lxb_css_stylesheet_parse(css->parser, str->data,
str->length);
#endif
if (element->stylesheet == NULL) {
return css->parser->status;
}
element->stylesheet->element = element;
return LXB_STATUS_OK;
}
lxb_status_t
lxb_html_element_style_remove(lxb_html_style_element_t *style)
{
lxb_dom_document_t *ddoc = lxb_dom_interface_node(style)->owner_document;
lxb_html_document_t *doc = lxb_html_interface_document(ddoc);
lxb_html_document_stylesheet_remove(doc, style->stylesheet);
return LXB_STATUS_OK;
}

View File

@@ -1,445 +0,0 @@
From 168dad55b6278cd45e0f0b2aed802ce9bace3274 Mon Sep 17 00:00:00 2001
From: Niels Dossche <7771979+nielsdos@users.noreply.github.com>
Date: Sun, 7 Jan 2024 21:59:28 +0100
Subject: [PATCH 6/6] Patch out unused CSS style code
---
source/lexbor/css/rule.h | 2 ++
source/lexbor/html/interfaces/document.c | 29 +++++++++++++++++++
source/lexbor/html/interfaces/document.h | 2 --
source/lexbor/html/interfaces/element.c | 29 +++++++++++++++++++
source/lexbor/html/interfaces/style_element.c | 6 ++++
5 files changed, 66 insertions(+), 2 deletions(-)
diff --git a/source/lexbor/css/rule.h b/source/lexbor/css/rule.h
index 7cc4f0b..bd191f9 100644
--- a/source/lexbor/css/rule.h
+++ b/source/lexbor/css/rule.h
@@ -339,6 +339,7 @@ lxb_css_rule_ref_dec(lxb_css_rule_t *rule)
lxb_inline void
lxb_css_rule_ref_dec_destroy(lxb_css_rule_t *rule)
{
+#if 0
if (rule->ref_count > 0) {
rule->ref_count--;
}
@@ -346,6 +347,7 @@ lxb_css_rule_ref_dec_destroy(lxb_css_rule_t *rule)
if (rule->ref_count == 0) {
(void) lxb_css_rule_destroy(rule, true);
}
+#endif
}
lxb_inline void
diff --git a/source/lexbor/html/interfaces/document.c b/source/lexbor/html/interfaces/document.c
index bd3c02b..aa305a9 100644
--- a/source/lexbor/html/interfaces/document.c
+++ b/source/lexbor/html/interfaces/document.c
@@ -58,6 +58,7 @@ static lxb_html_document_css_custom_entry_t *
lxb_html_document_css_customs_insert(lxb_html_document_t *document,
const lxb_char_t *key, size_t length);
+#if 0
static lxb_status_t
lxb_html_document_style_remove_by_rule_cb(lxb_dom_node_t *node,
lxb_css_selector_specificity_t spec,
@@ -74,6 +75,7 @@ lxb_html_document_style_cb(lxb_dom_node_t *node,
static lxb_status_t
lxb_html_document_done(lxb_html_document_t *document);
+#endif
lxb_status_t
@@ -86,6 +88,7 @@ lxb_html_document_parser_prepare(lxb_html_document_t *document);
static lexbor_action_t
lxb_html_document_title_walker(lxb_dom_node_t *node, void *ctx);
+#if 0
static lxb_status_t
lxb_html_document_event_insert(lxb_dom_node_t *node);
@@ -112,6 +115,7 @@ lxb_html_document_event_destroy(lxb_dom_node_t *node);
static lxb_status_t
lxb_html_document_event_set_value(lxb_dom_node_t *node,
const lxb_char_t *value, size_t length);
+#endif
lxb_html_document_t *
@@ -171,7 +175,9 @@ lxb_html_document_interface_destroy(lxb_html_document_t *document)
if (doc->node.owner_document == doc) {
(void) lxb_html_parser_unref(doc->parser);
+#if 0
lxb_html_document_css_destroy(document);
+#endif
}
(void) lxb_dom_document_destroy(doc);
@@ -193,11 +199,14 @@ lxb_html_document_clean(lxb_html_document_t *document)
document->iframe_srcdoc = NULL;
document->ready_state = LXB_HTML_DOCUMENT_READY_STATE_UNDEF;
+#if 0
lxb_html_document_css_clean(document);
+#endif
lxb_dom_document_clean(lxb_dom_interface_document(document));
}
+#if 0
lxb_status_t
lxb_html_document_css_init(lxb_html_document_t *document)
{
@@ -330,6 +339,7 @@ lxb_html_document_css_clean(lxb_html_document_t *document)
lexbor_dobject_clean(css->weak);
}
}
+#endif
void
lxb_html_document_css_parser_attach(lxb_html_document_t *document,
@@ -575,6 +585,7 @@ void
lxb_html_document_stylesheet_destroy_all(lxb_html_document_t *document,
bool destroy_memory)
{
+#if 0
size_t length;
lxb_css_stylesheet_t *sst;
lxb_html_document_css_t *css = &document->css;
@@ -586,29 +597,37 @@ lxb_html_document_stylesheet_destroy_all(lxb_html_document_t *document,
(void) lxb_css_stylesheet_destroy(sst, destroy_memory);
}
+#endif
}
lxb_status_t
lxb_html_document_style_attach(lxb_html_document_t *document,
lxb_css_rule_style_t *style)
{
+#if 0
lxb_html_document_css_t *css = &document->css;
return lxb_selectors_find(css->selectors, lxb_dom_interface_node(document),
style->selector, lxb_html_document_style_cb, style);
+#endif
+ return LXB_STATUS_OK;
}
lxb_status_t
lxb_html_document_style_remove(lxb_html_document_t *document,
lxb_css_rule_style_t *style)
{
+#if 0
lxb_html_document_css_t *css = &document->css;
return lxb_selectors_find(css->selectors, lxb_dom_interface_node(document),
style->selector,
lxb_html_document_style_remove_by_rule_cb, style);
+#endif
+ return LXB_STATUS_OK;
}
+#if 0
static lxb_status_t
lxb_html_document_style_remove_by_rule_cb(lxb_dom_node_t *node,
lxb_css_selector_specificity_t spec,
@@ -646,20 +665,25 @@ lxb_html_document_style_remove_avl_cb(lexbor_avl_t *avl,
style, context->list);
return LXB_STATUS_OK;
}
+#endif
lxb_status_t
lxb_html_document_style_attach_by_element(lxb_html_document_t *document,
lxb_html_element_t *element,
lxb_css_rule_style_t *style)
{
+#if 0
lxb_html_document_css_t *css = &document->css;
return lxb_selectors_match_node(css->selectors,
lxb_dom_interface_node(element),
style->selector,
lxb_html_document_style_cb, style);
+#endif
+ return LXB_STATUS_OK;
}
+#if 0
static lxb_status_t
lxb_html_document_style_cb(lxb_dom_node_t *node,
lxb_css_selector_specificity_t spec, void *ctx)
@@ -675,6 +699,7 @@ lxb_html_document_style_cb(lxb_dom_node_t *node,
return lxb_html_element_style_list_append(lxb_html_interface_element(node),
style->declarations, spec);
}
+#endif
lxb_html_document_t *
lxb_html_document_destroy(lxb_html_document_t *document)
@@ -851,6 +876,7 @@ lxb_html_document_parser_prepare(lxb_html_document_t *document)
return LXB_STATUS_OK;
}
+#if 0
static lxb_status_t
lxb_html_document_done(lxb_html_document_t *document)
{
@@ -875,6 +901,7 @@ lxb_html_document_done(lxb_html_document_t *document)
return LXB_STATUS_OK;
}
+#endif
const lxb_char_t *
lxb_html_document_title(lxb_html_document_t *document, size_t *len)
@@ -962,6 +989,7 @@ lxb_html_document_import_node(lxb_html_document_t *doc, lxb_dom_node_t *node,
return lxb_dom_document_import_node(&doc->dom_document, node, deep);
}
+#if 0
static lxb_status_t
lxb_html_document_event_insert(lxb_dom_node_t *node)
{
@@ -1233,6 +1261,7 @@ lxb_html_document_event_set_value(lxb_dom_node_t *node,
return lxb_html_element_style_parse(lxb_html_interface_element(node),
value, length);
}
+#endif
/*
* No inline functions for ABI.
diff --git a/source/lexbor/html/interfaces/document.h b/source/lexbor/html/interfaces/document.h
index 7e8d1ea..827ff64 100644
--- a/source/lexbor/html/interfaces/document.h
+++ b/source/lexbor/html/interfaces/document.h
@@ -20,7 +20,6 @@ extern "C" {
#include "lexbor/dom/interfaces/attr.h"
#include "lexbor/dom/interfaces/document.h"
#include "lexbor/css/css.h"
-#include "lexbor/selectors/selectors.h"
typedef lxb_status_t
@@ -45,7 +44,6 @@ typedef struct {
lxb_css_memory_t *memory;
lxb_css_selectors_t *css_selectors;
lxb_css_parser_t *parser;
- lxb_selectors_t *selectors;
lexbor_avl_t *styles;
lexbor_array_t *stylesheets;
diff --git a/source/lexbor/html/interfaces/element.c b/source/lexbor/html/interfaces/element.c
index 229d3d7..363040c 100644
--- a/source/lexbor/html/interfaces/element.c
+++ b/source/lexbor/html/interfaces/element.c
@@ -38,9 +38,11 @@ static lxb_status_t
lxb_html_element_style_serialize_cb(lexbor_avl_t *avl, lexbor_avl_node_t **root,
lexbor_avl_node_t *node, void *ctx);
+#if 0
static lxb_status_t
lxb_html_element_style_serialize_str_cb(const lxb_char_t *data,
size_t len, void *ctx);
+#endif
lxb_html_element_t *
@@ -102,6 +104,7 @@ const lxb_css_rule_declaration_t *
lxb_html_element_style_by_name(lxb_html_element_t *element,
const lxb_char_t *name, size_t size)
{
+#if 0
uintptr_t id;
lxb_html_style_node_t *node;
lxb_dom_document_t *ddoc = lxb_dom_interface_node(element)->owner_document;
@@ -115,11 +118,14 @@ lxb_html_element_style_by_name(lxb_html_element_t *element,
node = (void *) lexbor_avl_search(doc->css.styles, element->style, id);
return (node != NULL) ? node->entry.value : NULL;
+#endif
+ return NULL;
}
const lxb_css_rule_declaration_t *
lxb_html_element_style_by_id(lxb_html_element_t *element, uintptr_t id)
{
+#if 0
const lxb_html_style_node_t *node;
node = lxb_html_element_style_node_by_id(element, id);
@@ -128,6 +134,8 @@ lxb_html_element_style_by_id(lxb_html_element_t *element, uintptr_t id)
}
return node->entry.value;
+#endif
+ return NULL;
}
const lxb_html_style_node_t *
@@ -144,6 +152,7 @@ const lxb_html_style_node_t *
lxb_html_element_style_node_by_name(lxb_html_element_t *element,
const lxb_char_t *name, size_t size)
{
+#if 0
uintptr_t id;
lxb_dom_document_t *ddoc = lxb_dom_interface_node(element)->owner_document;
lxb_html_document_t *doc = lxb_html_interface_document(ddoc);
@@ -155,11 +164,14 @@ lxb_html_element_style_node_by_name(lxb_html_element_t *element,
return (lxb_html_style_node_t *) lexbor_avl_search(doc->css.styles,
element->style, id);
+#endif
+ return NULL;
}
const void *
lxb_html_element_css_property_by_id(lxb_html_element_t *element, uintptr_t id)
{
+#if 0
lxb_css_rule_declaration_t *declr;
const lxb_html_style_node_t *node;
@@ -171,6 +183,8 @@ lxb_html_element_css_property_by_id(lxb_html_element_t *element, uintptr_t id)
declr = node->entry.value;
return declr->u.user;
+#endif
+ return NULL;
}
lxb_status_t
@@ -224,6 +238,7 @@ lxb_status_t
lxb_html_element_style_parse(lxb_html_element_t *element,
const lxb_char_t *style, size_t size)
{
+#if 0
lxb_css_rule_declaration_list_t *list;
lxb_dom_document_t *ddoc = lxb_dom_interface_node(element)->owner_document;
@@ -240,6 +255,8 @@ lxb_html_element_style_parse(lxb_html_element_t *element,
return lxb_html_element_style_list_append(element, list,
lxb_css_selector_sp_up_s(0));
+#endif
+ return LXB_STATUS_ERROR;
}
lxb_status_t
@@ -393,6 +410,7 @@ void
lxb_html_element_style_remove_by_name(lxb_html_element_t *element,
const lxb_char_t *name, size_t size)
{
+#if 0
uintptr_t id;
lxb_dom_document_t *ddoc = lxb_dom_interface_node(element)->owner_document;
lxb_html_document_t *doc = lxb_html_interface_document(ddoc);
@@ -403,11 +421,13 @@ lxb_html_element_style_remove_by_name(lxb_html_element_t *element,
}
lxb_html_element_style_remove_by_id(element, id);
+#endif
}
void
lxb_html_element_style_remove_by_id(lxb_html_element_t *element, uintptr_t id)
{
+#if 0
lxb_html_style_node_t *node;
lxb_dom_document_t *ddoc = lxb_dom_interface_node(element)->owner_document;
lxb_html_document_t *doc = lxb_html_interface_document(ddoc);
@@ -417,6 +437,7 @@ lxb_html_element_style_remove_by_id(lxb_html_element_t *element, uintptr_t id)
if (node != NULL) {
lxb_html_element_style_remove_all(doc, &element->style, node);
}
+#endif
}
lxb_html_style_node_t *
@@ -576,6 +597,7 @@ static lxb_status_t
lxb_html_element_style_serialize_cb(lexbor_avl_t *avl, lexbor_avl_node_t **root,
lexbor_avl_node_t *node, void *ctx)
{
+#if 0
lxb_status_t status;
lexbor_serialize_ctx_t *context = ctx;
@@ -589,6 +611,8 @@ lxb_html_element_style_serialize_cb(lexbor_avl_t *avl, lexbor_avl_node_t **root,
context->count = 1;
return lxb_css_rule_serialize(node->value, context->cb, context->ctx);
+#endif
+ return LXB_STATUS_ERROR;
}
lxb_status_t
@@ -596,6 +620,7 @@ lxb_html_element_style_serialize_str(lxb_html_element_t *element,
lexbor_str_t *str,
lxb_html_element_style_opt_t opt)
{
+#if 0
lxb_dom_document_t *doc;
lxb_html_element_style_ctx_t context;
@@ -614,8 +639,11 @@ lxb_html_element_style_serialize_str(lxb_html_element_t *element,
return lxb_html_element_style_serialize(element, opt,
lxb_html_element_style_serialize_str_cb, &context);
+#endif
+ return LXB_STATUS_ERROR;
}
+#if 0
static lxb_status_t
lxb_html_element_style_serialize_str_cb(const lxb_char_t *data,
size_t len, void *ctx)
@@ -630,3 +658,4 @@ lxb_html_element_style_serialize_str_cb(const lxb_char_t *data,
return LXB_STATUS_OK;
}
+#endif
diff --git a/source/lexbor/html/interfaces/style_element.c b/source/lexbor/html/interfaces/style_element.c
index 66d55c4..9a402ef 100644
--- a/source/lexbor/html/interfaces/style_element.c
+++ b/source/lexbor/html/interfaces/style_element.c
@@ -35,7 +35,9 @@ lxb_html_style_element_interface_destroy(lxb_html_style_element_t *style_element
(void) lxb_dom_node_interface_destroy(lxb_dom_interface_node(style_element));
if (sst != NULL) {
+#if 0
(void) lxb_css_stylesheet_destroy(sst, true);
+#endif
}
return NULL;
@@ -44,8 +46,10 @@ lxb_html_style_element_interface_destroy(lxb_html_style_element_t *style_element
lxb_status_t
lxb_html_style_element_parse(lxb_html_style_element_t *element)
{
+#if 0
lexbor_str_t *str;
lxb_dom_text_t *text;
+#endif
lxb_dom_node_t *node;
lxb_dom_document_t *ddoc = lxb_dom_interface_node(element)->owner_document;
@@ -61,11 +65,13 @@ lxb_html_style_element_parse(lxb_html_style_element_t *element)
return LXB_STATUS_OK;
}
+#if 0
text = lxb_dom_interface_text(lxb_dom_interface_node(element)->first_child);
str = &text->char_data.data;
element->stylesheet = lxb_css_stylesheet_parse(css->parser, str->data,
str->length);
+#endif
if (element->stylesheet == NULL) {
return css->parser->status;
}
--
2.44.0

View File

@@ -13,10 +13,10 @@
#include <Zend/zend_API.h>
#include <php.h>
#include "lexbor/selectors-adapted/selectors.h"
#include "../../../namespace_compat.h"
#include "../../../domexception.h"
#include "../../../php_dom.h"
#include "ext/dom/lexbor/selectors-adapted/selectors.h"
#include "../../namespace_compat.h"
#include "../../domexception.h"
#include "../../php_dom.h"
#include <math.h>

View File

@@ -129,7 +129,7 @@ struct lxb_selectors {
*
* @return LXB_STATUS_OK if successful, otherwise an error status value.
*/
LXB_API lxb_status_t
lxb_status_t
lxb_selectors_init(lxb_selectors_t *selectors);
/*
@@ -141,7 +141,7 @@ lxb_selectors_init(lxb_selectors_t *selectors);
*
* @param[in] lxb_url_parser_t *
*/
LXB_API void
void
lxb_selectors_clean(lxb_selectors_t *selectors);
/*
@@ -152,7 +152,7 @@ lxb_selectors_clean(lxb_selectors_t *selectors);
* @param[in] lxb_selectors_t *. Can be NULL.
* if true: destroys the lxb_selectors_t object and all internal caches.
*/
LXB_API void
void
lxb_selectors_destroy(lxb_selectors_t *selectors);
/*
@@ -178,7 +178,7 @@ lxb_selectors_destroy(lxb_selectors_t *selectors);
*
* @return LXB_STATUS_OK if successful, otherwise an error status value.
*/
LXB_API lxb_status_t
lxb_status_t
lxb_selectors_find(lxb_selectors_t *selectors, const xmlNode *root,
const lxb_css_selector_list_t *list,
lxb_selectors_cb_f cb, void *ctx);
@@ -209,7 +209,7 @@ lxb_selectors_find(lxb_selectors_t *selectors, const xmlNode *root,
*
* @return LXB_STATUS_OK if successful, otherwise an error status value.
*/
LXB_API lxb_status_t
lxb_status_t
lxb_selectors_match_node(lxb_selectors_t *selectors, const xmlNode *node,
const lxb_css_selector_list_t *list,
lxb_selectors_cb_f cb, void *ctx);

View File

@@ -22,8 +22,8 @@
#if defined(HAVE_LIBXML) && defined(HAVE_DOM)
#include "../php_dom.h"
#include "lexbor/css/parser.h"
#include "lexbor/selectors-adapted/selectors.h"
#include "ext/lexbor/lexbor/css/parser.h"
#include "../lexbor/selectors-adapted/selectors.h"
// TODO: optimization idea: cache the parsed selectors in an LRU fashion?

View File

@@ -33,8 +33,6 @@
#include "dom_properties.h"
#include "token_list.h"
#include "zend_interfaces.h"
#include "lexbor/lexbor/core/types.h"
#include "lexbor/lexbor/core/lexbor.h"
#include "ext/standard/info.h"
@@ -698,6 +696,7 @@ static zend_object *dom_token_list_new(zend_class_entry *class_type)
static const zend_module_dep dom_deps[] = {
ZEND_MOD_REQUIRED("libxml")
ZEND_MOD_REQUIRED("lexbor")
ZEND_MOD_CONFLICTS("domxml")
ZEND_MOD_END
};
@@ -738,22 +737,6 @@ void dom_xpath_objects_free_storage(zend_object *object);
HashTable *dom_xpath_get_gc(zend_object *object, zval **table, int *n);
#endif
static void *dom_malloc(size_t size) {
return emalloc(size);
}
static void *dom_realloc(void *dst, size_t size) {
return erealloc(dst, size);
}
static void *dom_calloc(size_t num, size_t size) {
return ecalloc(num, size);
}
static void dom_free(void *ptr) {
efree(ptr);
}
/* {{{ PHP_MINIT_FUNCTION(dom) */
PHP_MINIT_FUNCTION(dom)
{
@@ -1324,8 +1307,6 @@ PHP_MINIT_FUNCTION(dom)
php_libxml_register_export(dom_node_class_entry, php_dom_export_node);
php_libxml_register_export(dom_modern_node_class_entry, php_dom_export_node);
lexbor_memory_setup(dom_malloc, dom_realloc, dom_calloc, dom_free);
return SUCCESS;
}
/* }}} */

203
ext/lexbor/config.m4 Normal file
View File

@@ -0,0 +1,203 @@
PHP_LEXBOR_CFLAGS="-I@ext_srcdir@/"
LEXBOR_DIR="lexbor"
AC_DEFINE([HAVE_LEXBOR], [1], [Define to 1 if the PHP extension 'lexbor' is available.])
AC_DEFINE([LEXBOR_VERSION], ["2.5.0"], [Define the main Lexbor version])
PHP_NEW_EXTENSION([lexbor], m4_normalize([
php_lexbor.c
$LEXBOR_DIR/core/array_obj.c
$LEXBOR_DIR/core/array.c
$LEXBOR_DIR/core/avl.c
$LEXBOR_DIR/core/bst.c
$LEXBOR_DIR/core/conv.c
$LEXBOR_DIR/core/diyfp.c
$LEXBOR_DIR/core/dobject.c
$LEXBOR_DIR/core/dtoa.c
$LEXBOR_DIR/core/hash.c
$LEXBOR_DIR/core/mem.c
$LEXBOR_DIR/core/mraw.c
$LEXBOR_DIR/core/print.c
$LEXBOR_DIR/core/serialize.c
$LEXBOR_DIR/core/shs.c
$LEXBOR_DIR/core/str.c
$LEXBOR_DIR/core/strtod.c
$LEXBOR_DIR/css/css.c
$LEXBOR_DIR/css/log.c
$LEXBOR_DIR/css/parser.c
$LEXBOR_DIR/css/selectors/pseudo_state.c
$LEXBOR_DIR/css/selectors/pseudo.c
$LEXBOR_DIR/css/selectors/selector.c
$LEXBOR_DIR/css/selectors/selectors.c
$LEXBOR_DIR/css/selectors/state.c
$LEXBOR_DIR/css/state.c
$LEXBOR_DIR/css/syntax/anb.c
$LEXBOR_DIR/css/syntax/parser.c
$LEXBOR_DIR/css/syntax/state.c
$LEXBOR_DIR/css/syntax/syntax.c
$LEXBOR_DIR/css/syntax/token.c
$LEXBOR_DIR/css/syntax/tokenizer.c
$LEXBOR_DIR/css/syntax/tokenizer/error.c
$LEXBOR_DIR/dom/interface.c
$LEXBOR_DIR/dom/interfaces/attr.c
$LEXBOR_DIR/dom/interfaces/cdata_section.c
$LEXBOR_DIR/dom/interfaces/character_data.c
$LEXBOR_DIR/dom/interfaces/comment.c
$LEXBOR_DIR/dom/interfaces/document_fragment.c
$LEXBOR_DIR/dom/interfaces/document_type.c
$LEXBOR_DIR/dom/interfaces/document.c
$LEXBOR_DIR/dom/interfaces/element.c
$LEXBOR_DIR/dom/interfaces/node.c
$LEXBOR_DIR/dom/interfaces/processing_instruction.c
$LEXBOR_DIR/dom/interfaces/shadow_root.c
$LEXBOR_DIR/dom/interfaces/text.c
$LEXBOR_DIR/encoding/decode.c
$LEXBOR_DIR/encoding/encode.c
$LEXBOR_DIR/encoding/encoding.c
$LEXBOR_DIR/encoding/multi.c
$LEXBOR_DIR/encoding/range.c
$LEXBOR_DIR/encoding/res.c
$LEXBOR_DIR/encoding/single.c
$LEXBOR_DIR/html/encoding.c
$LEXBOR_DIR/html/interface.c
$LEXBOR_DIR/html/interfaces/anchor_element.c
$LEXBOR_DIR/html/interfaces/area_element.c
$LEXBOR_DIR/html/interfaces/audio_element.c
$LEXBOR_DIR/html/interfaces/base_element.c
$LEXBOR_DIR/html/interfaces/body_element.c
$LEXBOR_DIR/html/interfaces/br_element.c
$LEXBOR_DIR/html/interfaces/button_element.c
$LEXBOR_DIR/html/interfaces/canvas_element.c
$LEXBOR_DIR/html/interfaces/d_list_element.c
$LEXBOR_DIR/html/interfaces/data_element.c
$LEXBOR_DIR/html/interfaces/data_list_element.c
$LEXBOR_DIR/html/interfaces/details_element.c
$LEXBOR_DIR/html/interfaces/dialog_element.c
$LEXBOR_DIR/html/interfaces/directory_element.c
$LEXBOR_DIR/html/interfaces/div_element.c
$LEXBOR_DIR/html/interfaces/document.c
$LEXBOR_DIR/html/interfaces/element.c
$LEXBOR_DIR/html/interfaces/embed_element.c
$LEXBOR_DIR/html/interfaces/field_set_element.c
$LEXBOR_DIR/html/interfaces/font_element.c
$LEXBOR_DIR/html/interfaces/form_element.c
$LEXBOR_DIR/html/interfaces/frame_element.c
$LEXBOR_DIR/html/interfaces/frame_set_element.c
$LEXBOR_DIR/html/interfaces/head_element.c
$LEXBOR_DIR/html/interfaces/heading_element.c
$LEXBOR_DIR/html/interfaces/hr_element.c
$LEXBOR_DIR/html/interfaces/html_element.c
$LEXBOR_DIR/html/interfaces/iframe_element.c
$LEXBOR_DIR/html/interfaces/image_element.c
$LEXBOR_DIR/html/interfaces/input_element.c
$LEXBOR_DIR/html/interfaces/label_element.c
$LEXBOR_DIR/html/interfaces/legend_element.c
$LEXBOR_DIR/html/interfaces/li_element.c
$LEXBOR_DIR/html/interfaces/link_element.c
$LEXBOR_DIR/html/interfaces/map_element.c
$LEXBOR_DIR/html/interfaces/marquee_element.c
$LEXBOR_DIR/html/interfaces/media_element.c
$LEXBOR_DIR/html/interfaces/menu_element.c
$LEXBOR_DIR/html/interfaces/meta_element.c
$LEXBOR_DIR/html/interfaces/meter_element.c
$LEXBOR_DIR/html/interfaces/mod_element.c
$LEXBOR_DIR/html/interfaces/o_list_element.c
$LEXBOR_DIR/html/interfaces/object_element.c
$LEXBOR_DIR/html/interfaces/opt_group_element.c
$LEXBOR_DIR/html/interfaces/option_element.c
$LEXBOR_DIR/html/interfaces/output_element.c
$LEXBOR_DIR/html/interfaces/paragraph_element.c
$LEXBOR_DIR/html/interfaces/param_element.c
$LEXBOR_DIR/html/interfaces/picture_element.c
$LEXBOR_DIR/html/interfaces/pre_element.c
$LEXBOR_DIR/html/interfaces/progress_element.c
$LEXBOR_DIR/html/interfaces/quote_element.c
$LEXBOR_DIR/html/interfaces/script_element.c
$LEXBOR_DIR/html/interfaces/select_element.c
$LEXBOR_DIR/html/interfaces/slot_element.c
$LEXBOR_DIR/html/interfaces/source_element.c
$LEXBOR_DIR/html/interfaces/span_element.c
$LEXBOR_DIR/html/interfaces/style_element.c
$LEXBOR_DIR/html/interfaces/table_caption_element.c
$LEXBOR_DIR/html/interfaces/table_cell_element.c
$LEXBOR_DIR/html/interfaces/table_col_element.c
$LEXBOR_DIR/html/interfaces/table_element.c
$LEXBOR_DIR/html/interfaces/table_row_element.c
$LEXBOR_DIR/html/interfaces/table_section_element.c
$LEXBOR_DIR/html/interfaces/template_element.c
$LEXBOR_DIR/html/interfaces/text_area_element.c
$LEXBOR_DIR/html/interfaces/time_element.c
$LEXBOR_DIR/html/interfaces/title_element.c
$LEXBOR_DIR/html/interfaces/track_element.c
$LEXBOR_DIR/html/interfaces/u_list_element.c
$LEXBOR_DIR/html/interfaces/unknown_element.c
$LEXBOR_DIR/html/interfaces/video_element.c
$LEXBOR_DIR/html/interfaces/window.c
$LEXBOR_DIR/html/parser.c
$LEXBOR_DIR/html/token_attr.c
$LEXBOR_DIR/html/token.c
$LEXBOR_DIR/html/tokenizer.c
$LEXBOR_DIR/html/tokenizer/error.c
$LEXBOR_DIR/html/tokenizer/state_comment.c
$LEXBOR_DIR/html/tokenizer/state_doctype.c
$LEXBOR_DIR/html/tokenizer/state_rawtext.c
$LEXBOR_DIR/html/tokenizer/state_rcdata.c
$LEXBOR_DIR/html/tokenizer/state_script.c
$LEXBOR_DIR/html/tokenizer/state.c
$LEXBOR_DIR/html/tree.c
$LEXBOR_DIR/html/tree/active_formatting.c
$LEXBOR_DIR/html/tree/error.c
$LEXBOR_DIR/html/tree/insertion_mode/after_after_body.c
$LEXBOR_DIR/html/tree/insertion_mode/after_after_frameset.c
$LEXBOR_DIR/html/tree/insertion_mode/after_body.c
$LEXBOR_DIR/html/tree/insertion_mode/after_frameset.c
$LEXBOR_DIR/html/tree/insertion_mode/after_head.c
$LEXBOR_DIR/html/tree/insertion_mode/before_head.c
$LEXBOR_DIR/html/tree/insertion_mode/before_html.c
$LEXBOR_DIR/html/tree/insertion_mode/foreign_content.c
$LEXBOR_DIR/html/tree/insertion_mode/in_body.c
$LEXBOR_DIR/html/tree/insertion_mode/in_caption.c
$LEXBOR_DIR/html/tree/insertion_mode/in_cell.c
$LEXBOR_DIR/html/tree/insertion_mode/in_column_group.c
$LEXBOR_DIR/html/tree/insertion_mode/in_frameset.c
$LEXBOR_DIR/html/tree/insertion_mode/in_head_noscript.c
$LEXBOR_DIR/html/tree/insertion_mode/in_head.c
$LEXBOR_DIR/html/tree/insertion_mode/in_row.c
$LEXBOR_DIR/html/tree/insertion_mode/in_select_in_table.c
$LEXBOR_DIR/html/tree/insertion_mode/in_select.c
$LEXBOR_DIR/html/tree/insertion_mode/in_table_body.c
$LEXBOR_DIR/html/tree/insertion_mode/in_table_text.c
$LEXBOR_DIR/html/tree/insertion_mode/in_table.c
$LEXBOR_DIR/html/tree/insertion_mode/in_template.c
$LEXBOR_DIR/html/tree/insertion_mode/initial.c
$LEXBOR_DIR/html/tree/insertion_mode/text.c
$LEXBOR_DIR/html/tree/open_elements.c
$LEXBOR_DIR/ns/ns.c
$LEXBOR_DIR/ports/posix/lexbor/core/memory.c
$LEXBOR_DIR/tag/tag.c
]),
[no],,
[-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 $PHP_LEXBOR_CFLAGS])
PHP_ADD_BUILD_DIR([
$ext_builddir/
$ext_builddir/$LEXBOR_DIR/core
$ext_builddir/$LEXBOR_DIR/css/selectors
$ext_builddir/$LEXBOR_DIR/css/syntax/tokenizer
$ext_builddir/$LEXBOR_DIR/css/tokenizer
$ext_builddir/$LEXBOR_DIR/dom/interfaces
$ext_builddir/$LEXBOR_DIR/encoding
$ext_builddir/$LEXBOR_DIR/html
$ext_builddir/$LEXBOR_DIR/html/interfaces
$ext_builddir/$LEXBOR_DIR/html/tokenizer
$ext_builddir/$LEXBOR_DIR/html/tree/insertion_mode
$ext_builddir/$LEXBOR_DIR/ns
$ext_builddir/$LEXBOR_DIR/ports/posix/lexbor/core
$ext_builddir/$LEXBOR_DIR/tag
])
PHP_ADD_INCLUDE([$ext_srcdir])
PHP_INSTALL_HEADERS([ext/lexbor], m4_normalize([
php_lexbor.h
]))
PHP_SUBST([LEXBOR_SHARED_LIBADD])

26
ext/lexbor/config.w32 Normal file
View File

@@ -0,0 +1,26 @@
// vim:ft=javascript
EXTENSION("lexbor", "php_lexbor.c", false, "/I " + configure_module_dirname + " /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1");
PHP_LEXBOR="yes";
ADD_SOURCES("ext/lexbor/lexbor/ports/windows_nt/lexbor/core", "memory.c", "lexbor");
ADD_SOURCES("ext/lexbor/lexbor/core", "array_obj.c array.c avl.c bst.c diyfp.c conv.c dobject.c dtoa.c hash.c mem.c mraw.c print.c serialize.c shs.c str.c strtod.c", "lexbor");
ADD_SOURCES("ext/lexbor/lexbor/dom", "interface.c", "lexbor");
ADD_SOURCES("ext/lexbor/lexbor/dom/interfaces", "attr.c cdata_section.c character_data.c comment.c document.c document_fragment.c document_type.c element.c node.c processing_instruction.c shadow_root.c text.c", "lexbor");
ADD_SOURCES("ext/lexbor/lexbor/html/tokenizer", "error.c state_comment.c state_doctype.c state_rawtext.c state_rcdata.c state_script.c state.c", "lexbor");
ADD_SOURCES("ext/lexbor/lexbor/html/tree", "active_formatting.c open_elements.c error.c","lexbor");
ADD_SOURCES("ext/lexbor/lexbor/html/tree/insertion_mode", "after_after_body.c after_after_frameset.c after_body.c after_frameset.c after_head.c before_head.c before_html.c foreign_content.c in_body.c in_caption.c in_cell.c in_column_group.c in_frameset.c in_head.c in_head_noscript.c initial.c in_row.c in_select.c in_select_in_table.c in_table_body.c in_table.c in_table_text.c in_template.c text.c","lexbor");
ADD_SOURCES("ext/lexbor/lexbor/html", "encoding.c interface.c parser.c token.c token_attr.c tokenizer.c tree.c","lexbor");
ADD_SOURCES("ext/lexbor/lexbor/encoding", "decode.c encode.c encoding.c multi.c range.c res.c single.c","lexbor");
ADD_SOURCES("ext/lexbor/lexbor/html/interfaces", "anchor_element.c area_element.c audio_element.c base_element.c body_element.c br_element.c button_element.c canvas_element.c data_element.c data_list_element.c details_element.c dialog_element.c directory_element.c div_element.c d_list_element.c document.c element.c embed_element.c field_set_element.c font_element.c form_element.c frame_element.c frame_set_element.c head_element.c heading_element.c hr_element.c html_element.c iframe_element.c image_element.c input_element.c label_element.c legend_element.c li_element.c link_element.c map_element.c marquee_element.c media_element.c menu_element.c meta_element.c meter_element.c mod_element.c object_element.c o_list_element.c opt_group_element.c option_element.c output_element.c paragraph_element.c param_element.c picture_element.c pre_element.c progress_element.c quote_element.c script_element.c select_element.c slot_element.c source_element.c span_element.c style_element.c table_caption_element.c table_cell_element.c table_col_element.c table_element.c table_row_element.c table_section_element.c template_element.c text_area_element.c time_element.c title_element.c track_element.c u_list_element.c unknown_element.c video_element.c window.c","lexbor");
ADD_SOURCES("ext/lexbor/lexbor/css", "state.c log.c parser.c css.c","lexbor");
ADD_SOURCES("ext/lexbor/lexbor/css/selectors", "state.c selectors.c selector.c pseudo_state.c pseudo.c","lexbor");
ADD_SOURCES("ext/lexbor/lexbor/css/syntax", "state.c parser.c syntax.c anb.c tokenizer.c token.c","lexbor");
ADD_SOURCES("ext/lexbor/lexbor/css/syntax/tokenizer", "error.c","lexbor");
ADD_SOURCES("ext/lexbor/lexbor/ns", "ns.c","lexbor");
ADD_SOURCES("ext/lexbor/lexbor/tag", "tag.c","lexbor");
ADD_FLAG("CFLAGS_LEXBOR", "/D LEXBOR_BUILDING /utf-8");
AC_DEFINE("HAVE_LEXBOR", 1, "Define to 1 if the PHP extension 'lexbor' is available.");
AC_DEFINE("LEXBOR_VERSION", "2.5.0", "Define the main Lexbor version")
PHP_INSTALL_HEADERS("ext/lexbor", "php_lexbor.h lexbor/");

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2018-2023 Alexander Borisov
* Copyright (C) 2018-2024 Alexander Borisov
*
* Author: Alexander Borisov <borisov@lexbor.com>
*/
@@ -27,7 +27,7 @@ extern "C" {
#include "lexbor/core/lexbor.h"
#define LEXBOR_VERSION_MAJOR 1
#define LEXBOR_VERSION_MINOR 7
#define LEXBOR_VERSION_MINOR 8
#define LEXBOR_VERSION_PATCH 0
#define LEXBOR_VERSION_STRING LEXBOR_STRINGIZE(LEXBOR_VERSION_MAJOR) "." \

View File

@@ -305,13 +305,18 @@ done:
}
size_t
lexbor_conv_dec_to_hex(uint32_t number, lxb_char_t *out, size_t length)
lexbor_conv_dec_to_hex(uint32_t number, lxb_char_t *out, size_t length,
bool upper)
{
lxb_char_t c;
size_t len;
uint32_t tmp;
const lxb_char_t *map_str;
static const lxb_char_t map_str[] = "0123456789abcdef";
static const lxb_char_t map_str_l[] = "0123456789abcdef";
static const lxb_char_t map_str_u[] = "0123456789ABCDEF";
map_str = (upper) ? map_str_u : map_str_l;
if(number != 0) {
tmp = number;

View File

@@ -37,7 +37,8 @@ LXB_API unsigned
lexbor_conv_data_to_uint(const lxb_char_t **data, size_t length);
LXB_API size_t
lexbor_conv_dec_to_hex(uint32_t number, lxb_char_t *out, size_t length);
lexbor_conv_dec_to_hex(uint32_t number, lxb_char_t *out, size_t length,
bool upper);
lxb_inline long
lexbor_conv_double_to_long(double number)

View File

@@ -243,6 +243,8 @@ lexbor_mraw_realloc_tail(lexbor_mraw_t *mraw, void *data, void *begin,
size_t size, size_t begin_len, size_t new_size,
bool *is_valid)
{
size_t length;
uint8_t *tmp;
lexbor_mem_chunk_t *chunk = mraw->mem->chunk;
if (chunk->size > (begin_len + new_size)) {
@@ -267,35 +269,26 @@ lexbor_mraw_realloc_tail(lexbor_mraw_t *mraw, void *data, void *begin,
* If the tail is short then we increase the current data.
*/
if (begin_len == lexbor_mraw_meta_size()) {
void *new_data;
lexbor_mem_chunk_t new_chunk;
*is_valid = true;
lexbor_mem_chunk_init(mraw->mem, &new_chunk,
new_size + lexbor_mraw_meta_size());
if(new_chunk.data == NULL) {
return NULL;
}
lexbor_mraw_meta_set(new_chunk.data, &new_size);
new_data = lexbor_mraw_data_begin(new_chunk.data);
if (size != 0) {
memcpy(new_data, data, sizeof(uint8_t) * size);
}
#if defined(LEXBOR_HAVE_ADDRESS_SANITIZER)
ASAN_UNPOISON_MEMORY_REGION(chunk->data, chunk->size);
#endif
*is_valid = true;
lexbor_mem_chunk_destroy(mraw->mem, chunk, false);
length = lexbor_mem_align(new_size + lexbor_mraw_meta_size()
+ mraw->mem->chunk_min_size);
chunk->data = new_chunk.data;
chunk->size = new_chunk.size;
tmp = lexbor_realloc(chunk->data, length);
if (tmp == NULL) {
return NULL;
}
chunk->data = tmp;
chunk->size = length;
chunk->length = new_size + lexbor_mraw_meta_size();
return new_data;
lexbor_mraw_meta_set(tmp, &new_size);
return lexbor_mraw_data_begin(tmp);
}
*is_valid = false;

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2019-2023 Alexander Borisov
* Copyright (C) 2019-2025 Alexander Borisov
*
* Author: Alexander Borisov <borisov@lexbor.com>
*/
@@ -18,7 +18,7 @@ extern "C" {
#define LXB_CSS_VERSION_MAJOR 1
#define LXB_CSS_VERSION_MINOR 2
#define LXB_CSS_VERSION_MINOR 3
#define LXB_CSS_VERSION_PATCH 0
#define LXB_CSS_VERSION_STRING \

View File

@@ -156,9 +156,6 @@ struct lxb_css_parser {
lxb_css_syntax_token_type_t *types_end;
lxb_css_syntax_token_type_t *types_pos;
lxb_css_syntax_tokenizer_chunk_f chunk_cb;
void *chunk_ctx;
const lxb_char_t *pos;
uintptr_t offset;

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2021-2023 Alexander Borisov
* Copyright (C) 2021-2024 Alexander Borisov
*
* Author: Alexander Borisov <borisov@lexbor.com>
*/

Some files were not shown because too many files have changed in this diff Show More