diff --git a/src/document/sgml/parser.c b/src/document/sgml/parser.c index 288208c1..238db88a 100644 --- a/src/document/sgml/parser.c +++ b/src/document/sgml/parser.c @@ -247,6 +247,18 @@ parse_sgml_document(struct dom_stack *stack, struct scanner *scanner) if (!token->length) { pop_dom_node(stack); } else { + struct dom_stack_state *state; + + state = search_dom_stack(stack, DOM_NODE_ELEMENT, + token->string, token->length); + if (state) { + struct sgml_parser_state *pstate; + + pstate = get_dom_stack_state_data(stack, state); + + copy_struct(&pstate->end_token, token); + } + pop_dom_nodes(stack, DOM_NODE_ELEMENT, token->string, token->length); } diff --git a/src/document/sgml/parser.h b/src/document/sgml/parser.h index 2883d5a0..fbacc088 100644 --- a/src/document/sgml/parser.h +++ b/src/document/sgml/parser.h @@ -38,6 +38,9 @@ struct sgml_parser { struct sgml_parser_state { struct sgml_node_info *info; + /* This is used by the DOM source renderer for highlighting the + * end-tag of an element. */ + struct scanner_token end_token; }; struct sgml_parser *