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:
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -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
2
.gitignore
vendored
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
16
codecov.yml
16
codecov.yml
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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 */
|
||||
@@ -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 */
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
@@ -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 */
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
@@ -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?
|
||||
|
||||
|
||||
@@ -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
203
ext/lexbor/config.m4
Normal 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
26
ext/lexbor/config.w32
Normal 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/");
|
||||
@@ -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) "." \
|
||||
@@ -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;
|
||||
@@ -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)
|
||||
@@ -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;
|
||||
@@ -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 \
|
||||
@@ -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;
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user