diff --git a/src/document/dom/renderer.c b/src/document/dom/renderer.c index 3a8aadcc5..361faac95 100644 --- a/src/document/dom/renderer.c +++ b/src/document/dom/renderer.c @@ -597,7 +597,8 @@ render_dom_node_text(struct dom_renderer *renderer, struct screen_char *template static struct dom_node * render_dom_node_source(struct dom_stack *stack, struct dom_node *node, void *data) { - struct dom_renderer *renderer = stack->renderer; + struct sgml_parser *parser = stack->data; + struct dom_renderer *renderer = parser->data; assert(node && renderer && renderer->document); @@ -611,7 +612,8 @@ render_dom_node_source(struct dom_stack *stack, struct dom_node *node, void *dat static struct dom_node * render_dom_proc_instr_source(struct dom_stack *stack, struct dom_node *node, void *data) { - struct dom_renderer *renderer = stack->renderer; + struct sgml_parser *parser = stack->data; + struct dom_renderer *renderer = parser->data; unsigned char *value; int valuelen; @@ -638,7 +640,8 @@ render_dom_proc_instr_source(struct dom_stack *stack, struct dom_node *node, voi static struct dom_node * render_dom_element_source(struct dom_stack *stack, struct dom_node *node, void *data) { - struct dom_renderer *renderer = stack->renderer; + struct sgml_parser *parser = stack->data; + struct dom_renderer *renderer = parser->data; assert(node && renderer && renderer->document); @@ -650,7 +653,8 @@ render_dom_element_source(struct dom_stack *stack, struct dom_node *node, void * static struct dom_node * render_dom_element_end_source(struct dom_stack *stack, struct dom_node *node, void *data) { - struct dom_renderer *renderer = stack->renderer; + struct sgml_parser *parser = stack->data; + struct dom_renderer *renderer = parser->data; struct sgml_parser_state *pstate = data; struct scanner_token *token = &pstate->end_token; unsigned char *string = token->string; @@ -675,7 +679,8 @@ render_dom_element_end_source(struct dom_stack *stack, struct dom_node *node, vo static struct dom_node * render_dom_attribute_source(struct dom_stack *stack, struct dom_node *node, void *data) { - struct dom_renderer *renderer = stack->renderer; + struct sgml_parser *parser = stack->data; + struct dom_renderer *renderer = parser->data; struct screen_char *template = &renderer->styles[node->type]; assert(node && renderer->document); diff --git a/src/document/dom/stack.c b/src/document/dom/stack.c index e61fe954c..a5692a879 100644 --- a/src/document/dom/stack.c +++ b/src/document/dom/stack.c @@ -45,7 +45,7 @@ realloc_dom_stack_state_objects(struct dom_stack *stack) } void -init_dom_stack(struct dom_stack *stack, void *parser, void *renderer, +init_dom_stack(struct dom_stack *stack, void *data, dom_stack_callback_T push_callbacks[DOM_NODES], dom_stack_callback_T pop_callbacks[DOM_NODES], size_t object_size, int keep_nodes) @@ -54,8 +54,7 @@ init_dom_stack(struct dom_stack *stack, void *parser, void *renderer, memset(stack, 0, sizeof(*stack)); - stack->parser = parser; - stack->renderer = renderer; + stack->data = data; stack->object_size = object_size; stack->keep_nodes = !!keep_nodes; diff --git a/src/document/dom/stack.h b/src/document/dom/stack.h index 831237d86..e1383cd6f 100644 --- a/src/document/dom/stack.h +++ b/src/document/dom/stack.h @@ -52,8 +52,7 @@ struct dom_stack { dom_stack_callback_T pop_callbacks[DOM_NODES]; /* Data specific to the parser and renderer. */ - void *renderer; - void *parser; + void *data; }; #define dom_stack_has_parents(nav) \ @@ -110,7 +109,7 @@ search_dom_stack(struct dom_stack *stack, enum dom_node_type type, /* The @object_size arg tells whether the stack should allocate objects for each * state to be assigned to the state's @data member. Zero means no state data should * be allocated. */ -void init_dom_stack(struct dom_stack *stack, void *parser, void *renderer, +void init_dom_stack(struct dom_stack *stack, void *data, dom_stack_callback_T push_callbacks[DOM_NODES], dom_stack_callback_T pop_callbacks[DOM_NODES], size_t object_size, int keep_nodes); diff --git a/src/document/sgml/parser.c b/src/document/sgml/parser.c index c654a7653..50590553d 100644 --- a/src/document/sgml/parser.c +++ b/src/document/sgml/parser.c @@ -37,7 +37,7 @@ add_sgml_document(struct dom_stack *stack, struct uri *uri) static inline struct dom_node * add_sgml_element(struct dom_stack *stack, struct scanner_token *token) { - struct sgml_parser *parser = stack->parser; + struct sgml_parser *parser = stack->data; struct dom_node *parent = get_dom_stack_top(stack)->node; struct dom_stack_state *state; struct sgml_parser_state *pstate; @@ -67,7 +67,7 @@ static inline void add_sgml_attribute(struct dom_stack *stack, struct scanner_token *token, struct scanner_token *valtoken) { - struct sgml_parser *parser = stack->parser; + struct sgml_parser *parser = stack->data; struct dom_node *parent = get_dom_stack_top(stack)->node; unsigned char *value = valtoken ? valtoken->string : NULL; size_t valuelen = valtoken ? valtoken->length : 0; @@ -305,7 +305,7 @@ parse_sgml_document(struct dom_stack *stack, struct scanner *scanner) struct sgml_parser * -init_sgml_parser(enum sgml_parser_type type, void *renderer, struct uri *uri, +init_sgml_parser(enum sgml_parser_type type, void *data, struct uri *uri, dom_stack_callback_T push_callbacks[DOM_NODES], dom_stack_callback_T pop_callbacks[DOM_NODES]) { @@ -318,8 +318,9 @@ init_sgml_parser(enum sgml_parser_type type, void *renderer, struct uri *uri, parser->type = type; parser->uri = get_uri_reference(uri); parser->info = &sgml_html_info; + parser->data = data; - init_dom_stack(&parser->stack, parser, renderer, + init_dom_stack(&parser->stack, parser, push_callbacks, pop_callbacks, obj_size, type != SGML_PARSER_STREAM); diff --git a/src/document/sgml/parser.h b/src/document/sgml/parser.h index 6021f1c21..6447351fd 100644 --- a/src/document/sgml/parser.h +++ b/src/document/sgml/parser.h @@ -29,6 +29,7 @@ struct sgml_parser { struct uri *uri; struct dom_node *root; + void *data; struct scanner scanner; struct dom_stack stack; @@ -42,7 +43,7 @@ struct sgml_parser_state { }; struct sgml_parser * -init_sgml_parser(enum sgml_parser_type type, void *renderer, struct uri *uri, +init_sgml_parser(enum sgml_parser_type type, void *data, struct uri *uri, dom_stack_callback_T push_callbacks[DOM_NODES], dom_stack_callback_T pop_callbacks[DOM_NODES]);