Skip to content

Commit c2b1e8d

Browse files
committed
Create separate lexbor extension
In preparation of #14461 (https://wiki.php.net/rfc/url_parsing_api)
1 parent 331ac35 commit c2b1e8d

File tree

417 files changed

+360
-1188
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

417 files changed

+360
-1188
lines changed

EXTENSIONS

+7
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,13 @@ PRIMARY MAINTAINER: Thies C. Arntzen <thies@thieso.net> (1999 - 2002)
195195
MAINTENANCE: Maintained
196196
STATUS: Working
197197
-------------------------------------------------------------------------------
198+
EXTENSION: lexbor
199+
PRIMARY MAINTAINER: Niels Dossche <nielsdos@php.net> (2023 - 2025)
200+
Mate Kocsis <kocsismate@php.net> (2025 - 2025)
201+
MAINTENANCE: Maintained
202+
STATUS: Working
203+
SINCE: 5.0
204+
-------------------------------------------------------------------------------
198205
EXTENSION: libxml
199206
PRIMARY MAINTAINER: Rob Richards <rrichards@php.net> (2003 - 2009)
200207
Christian Stocker <chregu@php.net> (2004 - 2011)

ext/dom/config.m4

+6-194
Original file line numberDiff line numberDiff line change
@@ -5,188 +5,11 @@ PHP_ARG_ENABLE([dom],
55
[yes])
66

77
if test "$PHP_DOM" != "no"; then
8+
PHP_LEXBOR_ENABLED=yes
9+
810
PHP_SETUP_LIBXML([DOM_SHARED_LIBADD], [
911
AC_DEFINE([HAVE_DOM], [1],
1012
[Define to 1 if the PHP extension 'dom' is available.])
11-
PHP_LEXBOR_CFLAGS="-I@ext_srcdir@/lexbor -DLEXBOR_STATIC"
12-
LEXBOR_DIR="lexbor/lexbor"
13-
LEXBOR_SOURCES=m4_normalize(["
14-
$LEXBOR_DIR/core/array_obj.c
15-
$LEXBOR_DIR/core/array.c
16-
$LEXBOR_DIR/core/avl.c
17-
$LEXBOR_DIR/core/bst.c
18-
$LEXBOR_DIR/core/conv.c
19-
$LEXBOR_DIR/core/diyfp.c
20-
$LEXBOR_DIR/core/dobject.c
21-
$LEXBOR_DIR/core/dtoa.c
22-
$LEXBOR_DIR/core/hash.c
23-
$LEXBOR_DIR/core/mem.c
24-
$LEXBOR_DIR/core/mraw.c
25-
$LEXBOR_DIR/core/print.c
26-
$LEXBOR_DIR/core/serialize.c
27-
$LEXBOR_DIR/core/shs.c
28-
$LEXBOR_DIR/core/str.c
29-
$LEXBOR_DIR/core/strtod.c
30-
$LEXBOR_DIR/css/css.c
31-
$LEXBOR_DIR/css/log.c
32-
$LEXBOR_DIR/css/parser.c
33-
$LEXBOR_DIR/css/selectors/pseudo_state.c
34-
$LEXBOR_DIR/css/selectors/pseudo.c
35-
$LEXBOR_DIR/css/selectors/selector.c
36-
$LEXBOR_DIR/css/selectors/selectors.c
37-
$LEXBOR_DIR/css/selectors/state.c
38-
$LEXBOR_DIR/css/state.c
39-
$LEXBOR_DIR/css/syntax/anb.c
40-
$LEXBOR_DIR/css/syntax/parser.c
41-
$LEXBOR_DIR/css/syntax/state.c
42-
$LEXBOR_DIR/css/syntax/syntax.c
43-
$LEXBOR_DIR/css/syntax/token.c
44-
$LEXBOR_DIR/css/syntax/tokenizer.c
45-
$LEXBOR_DIR/css/syntax/tokenizer/error.c
46-
$LEXBOR_DIR/dom/interface.c
47-
$LEXBOR_DIR/dom/interfaces/attr.c
48-
$LEXBOR_DIR/dom/interfaces/cdata_section.c
49-
$LEXBOR_DIR/dom/interfaces/character_data.c
50-
$LEXBOR_DIR/dom/interfaces/comment.c
51-
$LEXBOR_DIR/dom/interfaces/document_fragment.c
52-
$LEXBOR_DIR/dom/interfaces/document_type.c
53-
$LEXBOR_DIR/dom/interfaces/document.c
54-
$LEXBOR_DIR/dom/interfaces/element.c
55-
$LEXBOR_DIR/dom/interfaces/node.c
56-
$LEXBOR_DIR/dom/interfaces/processing_instruction.c
57-
$LEXBOR_DIR/dom/interfaces/shadow_root.c
58-
$LEXBOR_DIR/dom/interfaces/text.c
59-
$LEXBOR_DIR/encoding/big5.c
60-
$LEXBOR_DIR/encoding/decode.c
61-
$LEXBOR_DIR/encoding/encode.c
62-
$LEXBOR_DIR/encoding/encoding.c
63-
$LEXBOR_DIR/encoding/euc_kr.c
64-
$LEXBOR_DIR/encoding/gb18030.c
65-
$LEXBOR_DIR/encoding/iso_2022_jp_katakana.c
66-
$LEXBOR_DIR/encoding/jis0208.c
67-
$LEXBOR_DIR/encoding/jis0212.c
68-
$LEXBOR_DIR/encoding/range.c
69-
$LEXBOR_DIR/encoding/res.c
70-
$LEXBOR_DIR/encoding/single.c
71-
$LEXBOR_DIR/html/encoding.c
72-
$LEXBOR_DIR/html/interface.c
73-
$LEXBOR_DIR/html/interfaces/anchor_element.c
74-
$LEXBOR_DIR/html/interfaces/area_element.c
75-
$LEXBOR_DIR/html/interfaces/audio_element.c
76-
$LEXBOR_DIR/html/interfaces/base_element.c
77-
$LEXBOR_DIR/html/interfaces/body_element.c
78-
$LEXBOR_DIR/html/interfaces/br_element.c
79-
$LEXBOR_DIR/html/interfaces/button_element.c
80-
$LEXBOR_DIR/html/interfaces/canvas_element.c
81-
$LEXBOR_DIR/html/interfaces/d_list_element.c
82-
$LEXBOR_DIR/html/interfaces/data_element.c
83-
$LEXBOR_DIR/html/interfaces/data_list_element.c
84-
$LEXBOR_DIR/html/interfaces/details_element.c
85-
$LEXBOR_DIR/html/interfaces/dialog_element.c
86-
$LEXBOR_DIR/html/interfaces/directory_element.c
87-
$LEXBOR_DIR/html/interfaces/div_element.c
88-
$LEXBOR_DIR/html/interfaces/document.c
89-
$LEXBOR_DIR/html/interfaces/element.c
90-
$LEXBOR_DIR/html/interfaces/embed_element.c
91-
$LEXBOR_DIR/html/interfaces/field_set_element.c
92-
$LEXBOR_DIR/html/interfaces/font_element.c
93-
$LEXBOR_DIR/html/interfaces/form_element.c
94-
$LEXBOR_DIR/html/interfaces/frame_element.c
95-
$LEXBOR_DIR/html/interfaces/frame_set_element.c
96-
$LEXBOR_DIR/html/interfaces/head_element.c
97-
$LEXBOR_DIR/html/interfaces/heading_element.c
98-
$LEXBOR_DIR/html/interfaces/hr_element.c
99-
$LEXBOR_DIR/html/interfaces/html_element.c
100-
$LEXBOR_DIR/html/interfaces/iframe_element.c
101-
$LEXBOR_DIR/html/interfaces/image_element.c
102-
$LEXBOR_DIR/html/interfaces/input_element.c
103-
$LEXBOR_DIR/html/interfaces/label_element.c
104-
$LEXBOR_DIR/html/interfaces/legend_element.c
105-
$LEXBOR_DIR/html/interfaces/li_element.c
106-
$LEXBOR_DIR/html/interfaces/link_element.c
107-
$LEXBOR_DIR/html/interfaces/map_element.c
108-
$LEXBOR_DIR/html/interfaces/marquee_element.c
109-
$LEXBOR_DIR/html/interfaces/media_element.c
110-
$LEXBOR_DIR/html/interfaces/menu_element.c
111-
$LEXBOR_DIR/html/interfaces/meta_element.c
112-
$LEXBOR_DIR/html/interfaces/meter_element.c
113-
$LEXBOR_DIR/html/interfaces/mod_element.c
114-
$LEXBOR_DIR/html/interfaces/o_list_element.c
115-
$LEXBOR_DIR/html/interfaces/object_element.c
116-
$LEXBOR_DIR/html/interfaces/opt_group_element.c
117-
$LEXBOR_DIR/html/interfaces/option_element.c
118-
$LEXBOR_DIR/html/interfaces/output_element.c
119-
$LEXBOR_DIR/html/interfaces/paragraph_element.c
120-
$LEXBOR_DIR/html/interfaces/param_element.c
121-
$LEXBOR_DIR/html/interfaces/picture_element.c
122-
$LEXBOR_DIR/html/interfaces/pre_element.c
123-
$LEXBOR_DIR/html/interfaces/progress_element.c
124-
$LEXBOR_DIR/html/interfaces/quote_element.c
125-
$LEXBOR_DIR/html/interfaces/script_element.c
126-
$LEXBOR_DIR/html/interfaces/select_element.c
127-
$LEXBOR_DIR/html/interfaces/slot_element.c
128-
$LEXBOR_DIR/html/interfaces/source_element.c
129-
$LEXBOR_DIR/html/interfaces/span_element.c
130-
$LEXBOR_DIR/html/interfaces/style_element.c
131-
$LEXBOR_DIR/html/interfaces/table_caption_element.c
132-
$LEXBOR_DIR/html/interfaces/table_cell_element.c
133-
$LEXBOR_DIR/html/interfaces/table_col_element.c
134-
$LEXBOR_DIR/html/interfaces/table_element.c
135-
$LEXBOR_DIR/html/interfaces/table_row_element.c
136-
$LEXBOR_DIR/html/interfaces/table_section_element.c
137-
$LEXBOR_DIR/html/interfaces/template_element.c
138-
$LEXBOR_DIR/html/interfaces/text_area_element.c
139-
$LEXBOR_DIR/html/interfaces/time_element.c
140-
$LEXBOR_DIR/html/interfaces/title_element.c
141-
$LEXBOR_DIR/html/interfaces/track_element.c
142-
$LEXBOR_DIR/html/interfaces/u_list_element.c
143-
$LEXBOR_DIR/html/interfaces/unknown_element.c
144-
$LEXBOR_DIR/html/interfaces/video_element.c
145-
$LEXBOR_DIR/html/interfaces/window.c
146-
$LEXBOR_DIR/html/parser.c
147-
$LEXBOR_DIR/html/token_attr.c
148-
$LEXBOR_DIR/html/token.c
149-
$LEXBOR_DIR/html/tokenizer.c
150-
$LEXBOR_DIR/html/tokenizer/error.c
151-
$LEXBOR_DIR/html/tokenizer/state_comment.c
152-
$LEXBOR_DIR/html/tokenizer/state_doctype.c
153-
$LEXBOR_DIR/html/tokenizer/state_rawtext.c
154-
$LEXBOR_DIR/html/tokenizer/state_rcdata.c
155-
$LEXBOR_DIR/html/tokenizer/state_script.c
156-
$LEXBOR_DIR/html/tokenizer/state.c
157-
$LEXBOR_DIR/html/tree.c
158-
$LEXBOR_DIR/html/tree/active_formatting.c
159-
$LEXBOR_DIR/html/tree/error.c
160-
$LEXBOR_DIR/html/tree/insertion_mode/after_after_body.c
161-
$LEXBOR_DIR/html/tree/insertion_mode/after_after_frameset.c
162-
$LEXBOR_DIR/html/tree/insertion_mode/after_body.c
163-
$LEXBOR_DIR/html/tree/insertion_mode/after_frameset.c
164-
$LEXBOR_DIR/html/tree/insertion_mode/after_head.c
165-
$LEXBOR_DIR/html/tree/insertion_mode/before_head.c
166-
$LEXBOR_DIR/html/tree/insertion_mode/before_html.c
167-
$LEXBOR_DIR/html/tree/insertion_mode/foreign_content.c
168-
$LEXBOR_DIR/html/tree/insertion_mode/in_body.c
169-
$LEXBOR_DIR/html/tree/insertion_mode/in_caption.c
170-
$LEXBOR_DIR/html/tree/insertion_mode/in_cell.c
171-
$LEXBOR_DIR/html/tree/insertion_mode/in_column_group.c
172-
$LEXBOR_DIR/html/tree/insertion_mode/in_frameset.c
173-
$LEXBOR_DIR/html/tree/insertion_mode/in_head_noscript.c
174-
$LEXBOR_DIR/html/tree/insertion_mode/in_head.c
175-
$LEXBOR_DIR/html/tree/insertion_mode/in_row.c
176-
$LEXBOR_DIR/html/tree/insertion_mode/in_select_in_table.c
177-
$LEXBOR_DIR/html/tree/insertion_mode/in_select.c
178-
$LEXBOR_DIR/html/tree/insertion_mode/in_table_body.c
179-
$LEXBOR_DIR/html/tree/insertion_mode/in_table_text.c
180-
$LEXBOR_DIR/html/tree/insertion_mode/in_table.c
181-
$LEXBOR_DIR/html/tree/insertion_mode/in_template.c
182-
$LEXBOR_DIR/html/tree/insertion_mode/initial.c
183-
$LEXBOR_DIR/html/tree/insertion_mode/text.c
184-
$LEXBOR_DIR/html/tree/open_elements.c
185-
$LEXBOR_DIR/ns/ns.c
186-
$LEXBOR_DIR/ports/posix/lexbor/core/memory.c
187-
$LEXBOR_DIR/selectors-adapted/selectors.c
188-
$LEXBOR_DIR/tag/tag.c
189-
"])
19013
PHP_NEW_EXTENSION([dom], m4_normalize([
19114
attr.c
19215
cdatasection.c
@@ -223,25 +46,13 @@ if test "$PHP_DOM" != "no"; then
22346
xml_serializer.c
22447
xpath_callbacks.c
22548
xpath.c
226-
$LEXBOR_SOURCES
49+
lexbor/selectors-adapted/selectors.c
22750
]),
22851
[$ext_shared],,
229-
[$PHP_LEXBOR_CFLAGS])
52+
[])
23053
PHP_ADD_BUILD_DIR([
23154
$ext_builddir/parentnode
232-
$ext_builddir/$LEXBOR_DIR/core
233-
$ext_builddir/$LEXBOR_DIR/css/selectors
234-
$ext_builddir/$LEXBOR_DIR/css/syntax/tokenizer
235-
$ext_builddir/$LEXBOR_DIR/css/tokenizer
236-
$ext_builddir/$LEXBOR_DIR/dom/interfaces
237-
$ext_builddir/$LEXBOR_DIR/encoding
238-
$ext_builddir/$LEXBOR_DIR/html/interfaces
239-
$ext_builddir/$LEXBOR_DIR/html/tokenizer
240-
$ext_builddir/$LEXBOR_DIR/html/tree/insertion_mode
241-
$ext_builddir/$LEXBOR_DIR/ns
242-
$ext_builddir/$LEXBOR_DIR/ports/posix/lexbor/core
243-
$ext_builddir/$LEXBOR_DIR/selectors-adapted
244-
$ext_builddir/$LEXBOR_DIR/tag
55+
$ext_builddir/lexbor/selectors-adapted
24556
])
24657
PHP_SUBST([DOM_SHARED_LIBADD])
24758
PHP_INSTALL_HEADERS([ext/dom], m4_normalize([
@@ -251,5 +62,6 @@ if test "$PHP_DOM" != "no"; then
25162
xpath_callbacks.h
25263
]))
25364
PHP_ADD_EXTENSION_DEP(dom, libxml)
65+
PHP_ADD_EXTENSION_DEP(dom, lexbor)
25466
])
25567
fi

ext/dom/config.w32

+3-19
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ ARG_WITH("dom", "DOM support", "yes");
55
if (PHP_DOM == "yes") {
66
if (PHP_LIBXML == "yes" &&
77
ADD_EXTENSION_DEP('dom', 'libxml') &&
8+
ADD_EXTENSION_DEP('dom', 'lexbor') &&
89
CHECK_HEADER_ADD_INCLUDE("libxml/parser.h", "CFLAGS_DOM", PHP_PHP_BUILD + "\\include\\libxml2")
910
) {
1011
EXTENSION("dom", "php_dom.c attr.c document.c infra.c \
@@ -16,27 +17,10 @@ if (PHP_DOM == "yes") {
1617
entityreference.c \
1718
token_list.c \
1819
notation.c xpath.c dom_iterators.c \
19-
namednodemap.c xpath_callbacks.c", null, "-Iext/dom/lexbor");
20+
namednodemap.c xpath_callbacks.c", null, "");
2021

2122
ADD_SOURCES("ext/dom/parentnode", "tree.c css_selectors.c", "dom");
22-
ADD_SOURCES("ext/dom/lexbor/lexbor/ports/windows_nt/lexbor/core", "memory.c", "dom");
23-
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");
24-
ADD_SOURCES("ext/dom/lexbor/lexbor/dom", "interface.c", "dom");
25-
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");
26-
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");
27-
ADD_SOURCES("ext/dom/lexbor/lexbor/html/tree", "active_formatting.c open_elements.c error.c", "dom");
28-
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");
29-
ADD_SOURCES("ext/dom/lexbor/lexbor/html", "encoding.c interface.c parser.c token.c token_attr.c tokenizer.c tree.c", "dom");
30-
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");
31-
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");
32-
ADD_SOURCES("ext/dom/lexbor/lexbor/selectors-adapted", "selectors.c", "dom");
33-
ADD_SOURCES("ext/dom/lexbor/lexbor/css", "state.c log.c parser.c css.c", "dom");
34-
ADD_SOURCES("ext/dom/lexbor/lexbor/css/selectors", "state.c selectors.c selector.c pseudo_state.c pseudo.c", "dom");
35-
ADD_SOURCES("ext/dom/lexbor/lexbor/css/syntax", "state.c parser.c syntax.c anb.c tokenizer.c token.c", "dom");
36-
ADD_SOURCES("ext/dom/lexbor/lexbor/css/syntax/tokenizer", "error.c", "dom");
37-
ADD_SOURCES("ext/dom/lexbor/lexbor/ns", "ns.c", "dom");
38-
ADD_SOURCES("ext/dom/lexbor/lexbor/tag", "tag.c", "dom");
39-
ADD_FLAG("CFLAGS_DOM", "/D LEXBOR_STATIC ");
23+
ADD_SOURCES("ext/dom/lexbor/selectors-adapted", "selectors.c", "dom");
4024

4125
AC_DEFINE("HAVE_DOM", 1, "Define to 1 if the PHP extension 'dom' is available.");
4226

0 commit comments

Comments
 (0)