mirror of
https://github.com/rkd77/elinks.git
synced 2025-02-02 15:09:23 -05:00
Make the DOM stack and the SGML parser interface more general
They now both hold a single private data member. This means the parser now holds the renderer data.
This commit is contained in:
parent
c769b81f93
commit
27116d6385
@ -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);
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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]);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user