From 22704af4b8675aad6d82a60b1ea8ed1308f37ebf Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Sun, 19 Jan 2025 11:50:56 +0100 Subject: [PATCH] Cherry-pick lexbor/lexbor@f94d97a3 Co-authored-by: Alexander Borisov --- .../html/tree/insertion_mode/in_select.c | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/ext/dom/lexbor/lexbor/html/tree/insertion_mode/in_select.c b/ext/dom/lexbor/lexbor/html/tree/insertion_mode/in_select.c index 359d3b28f130b..b4eed2c5d3a84 100644 --- a/ext/dom/lexbor/lexbor/html/tree/insertion_mode/in_select.c +++ b/ext/dom/lexbor/lexbor/html/tree/insertion_mode/in_select.c @@ -125,6 +125,37 @@ lxb_html_tree_insertion_mode_in_select_optgroup(lxb_html_tree_t *tree, return true; } +lxb_inline bool +lxb_html_tree_insertion_mode_in_select_hr(lxb_html_tree_t *tree, + lxb_html_token_t *token) +{ + lxb_html_element_t *element; + lxb_dom_node_t *node = lxb_html_tree_current_node(tree); + + if (lxb_html_tree_node_is(node, LXB_TAG_OPTION)) { + lxb_html_tree_open_elements_pop(tree); + } + + node = lxb_html_tree_current_node(tree); + + if (lxb_html_tree_node_is(node, LXB_TAG_OPTGROUP)) { + lxb_html_tree_open_elements_pop(tree); + } + + element = lxb_html_tree_insert_html_element(tree, token); + if (element == NULL) { + tree->status = LXB_STATUS_ERROR_MEMORY_ALLOCATION; + + return lxb_html_tree_process_abort(tree); + } + + lxb_html_tree_open_elements_pop(tree); + + lxb_html_tree_acknowledge_token_self_closing(tree, token); + + return true; +} + lxb_inline bool lxb_html_tree_insertion_mode_in_select_optgroup_closed(lxb_html_tree_t *tree, lxb_html_token_t *token) @@ -319,6 +350,9 @@ lxb_html_tree_insertion_mode_in_select(lxb_html_tree_t *tree, case LXB_TAG_OPTGROUP: return lxb_html_tree_insertion_mode_in_select_optgroup(tree, token); + case LXB_TAG_HR: + return lxb_html_tree_insertion_mode_in_select_hr(tree, token); + case LXB_TAG_SELECT: return lxb_html_tree_insertion_mode_in_select_select(tree, token);