1
0
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:
Jonas Fonseca 2005-12-12 17:41:09 +01:00 committed by Jonas Fonseca
parent c769b81f93
commit 27116d6385
5 changed files with 21 additions and 16 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -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);

View File

@ -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]);