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 *
|
static struct dom_node *
|
||||||
render_dom_node_source(struct dom_stack *stack, struct dom_node *node, void *data)
|
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);
|
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 *
|
static struct dom_node *
|
||||||
render_dom_proc_instr_source(struct dom_stack *stack, struct dom_node *node, void *data)
|
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;
|
unsigned char *value;
|
||||||
int valuelen;
|
int valuelen;
|
||||||
|
|
||||||
@ -638,7 +640,8 @@ render_dom_proc_instr_source(struct dom_stack *stack, struct dom_node *node, voi
|
|||||||
static struct dom_node *
|
static struct dom_node *
|
||||||
render_dom_element_source(struct dom_stack *stack, struct dom_node *node, void *data)
|
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);
|
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 *
|
static struct dom_node *
|
||||||
render_dom_element_end_source(struct dom_stack *stack, struct dom_node *node, void *data)
|
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 sgml_parser_state *pstate = data;
|
||||||
struct scanner_token *token = &pstate->end_token;
|
struct scanner_token *token = &pstate->end_token;
|
||||||
unsigned char *string = token->string;
|
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 *
|
static struct dom_node *
|
||||||
render_dom_attribute_source(struct dom_stack *stack, struct dom_node *node, void *data)
|
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];
|
struct screen_char *template = &renderer->styles[node->type];
|
||||||
|
|
||||||
assert(node && renderer->document);
|
assert(node && renderer->document);
|
||||||
|
@ -45,7 +45,7 @@ realloc_dom_stack_state_objects(struct dom_stack *stack)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
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 push_callbacks[DOM_NODES],
|
||||||
dom_stack_callback_T pop_callbacks[DOM_NODES],
|
dom_stack_callback_T pop_callbacks[DOM_NODES],
|
||||||
size_t object_size, int keep_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));
|
memset(stack, 0, sizeof(*stack));
|
||||||
|
|
||||||
stack->parser = parser;
|
stack->data = data;
|
||||||
stack->renderer = renderer;
|
|
||||||
stack->object_size = object_size;
|
stack->object_size = object_size;
|
||||||
stack->keep_nodes = !!keep_nodes;
|
stack->keep_nodes = !!keep_nodes;
|
||||||
|
|
||||||
|
@ -52,8 +52,7 @@ struct dom_stack {
|
|||||||
dom_stack_callback_T pop_callbacks[DOM_NODES];
|
dom_stack_callback_T pop_callbacks[DOM_NODES];
|
||||||
|
|
||||||
/* Data specific to the parser and renderer. */
|
/* Data specific to the parser and renderer. */
|
||||||
void *renderer;
|
void *data;
|
||||||
void *parser;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define dom_stack_has_parents(nav) \
|
#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
|
/* 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
|
* state to be assigned to the state's @data member. Zero means no state data should
|
||||||
* be allocated. */
|
* 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 push_callbacks[DOM_NODES],
|
||||||
dom_stack_callback_T pop_callbacks[DOM_NODES],
|
dom_stack_callback_T pop_callbacks[DOM_NODES],
|
||||||
size_t object_size, int keep_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 *
|
static inline struct dom_node *
|
||||||
add_sgml_element(struct dom_stack *stack, struct scanner_token *token)
|
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_node *parent = get_dom_stack_top(stack)->node;
|
||||||
struct dom_stack_state *state;
|
struct dom_stack_state *state;
|
||||||
struct sgml_parser_state *pstate;
|
struct sgml_parser_state *pstate;
|
||||||
@ -67,7 +67,7 @@ static inline void
|
|||||||
add_sgml_attribute(struct dom_stack *stack,
|
add_sgml_attribute(struct dom_stack *stack,
|
||||||
struct scanner_token *token, struct scanner_token *valtoken)
|
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;
|
struct dom_node *parent = get_dom_stack_top(stack)->node;
|
||||||
unsigned char *value = valtoken ? valtoken->string : NULL;
|
unsigned char *value = valtoken ? valtoken->string : NULL;
|
||||||
size_t valuelen = valtoken ? valtoken->length : 0;
|
size_t valuelen = valtoken ? valtoken->length : 0;
|
||||||
@ -305,7 +305,7 @@ parse_sgml_document(struct dom_stack *stack, struct scanner *scanner)
|
|||||||
|
|
||||||
|
|
||||||
struct sgml_parser *
|
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 push_callbacks[DOM_NODES],
|
||||||
dom_stack_callback_T pop_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->type = type;
|
||||||
parser->uri = get_uri_reference(uri);
|
parser->uri = get_uri_reference(uri);
|
||||||
parser->info = &sgml_html_info;
|
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,
|
push_callbacks, pop_callbacks, obj_size,
|
||||||
type != SGML_PARSER_STREAM);
|
type != SGML_PARSER_STREAM);
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ struct sgml_parser {
|
|||||||
|
|
||||||
struct uri *uri;
|
struct uri *uri;
|
||||||
struct dom_node *root;
|
struct dom_node *root;
|
||||||
|
void *data;
|
||||||
|
|
||||||
struct scanner scanner;
|
struct scanner scanner;
|
||||||
struct dom_stack stack;
|
struct dom_stack stack;
|
||||||
@ -42,7 +43,7 @@ struct sgml_parser_state {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct sgml_parser *
|
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 push_callbacks[DOM_NODES],
|
||||||
dom_stack_callback_T pop_callbacks[DOM_NODES]);
|
dom_stack_callback_T pop_callbacks[DOM_NODES]);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user