mirror of
https://github.com/rkd77/elinks.git
synced 2025-02-02 15:09:23 -05:00
Add the concept of completeness to strings being parsed and scanned
... not used yet.
This commit is contained in:
parent
6e9a18b444
commit
f608e2a0ae
@ -707,13 +707,13 @@ render_dom_document(struct cache_entry *cached, struct document *document,
|
||||
doctype = SGML_DOCTYPE_HTML;
|
||||
}
|
||||
|
||||
parser = init_sgml_parser(SGML_PARSER_STREAM, doctype, &uri);
|
||||
parser = init_sgml_parser(SGML_PARSER_STREAM, doctype, &uri, 0);
|
||||
if (!parser) return;
|
||||
|
||||
add_dom_stack_context(&parser->stack, &renderer,
|
||||
&dom_source_renderer_context_info);
|
||||
|
||||
root = parse_sgml(parser, &source);
|
||||
root = parse_sgml(parser, &source, 1);
|
||||
if (root) {
|
||||
assert(parser->stack.depth == 1);
|
||||
|
||||
|
@ -154,7 +154,7 @@ init_dom_scanner_info(struct dom_scanner_info *scanner_info)
|
||||
|
||||
void
|
||||
init_dom_scanner(struct dom_scanner *scanner, struct dom_scanner_info *scanner_info,
|
||||
struct dom_string *string, int state, int count_lines)
|
||||
struct dom_string *string, int state, int count_lines, int complete)
|
||||
{
|
||||
if (!scanner_info->initialized) {
|
||||
init_dom_scanner_info(scanner_info);
|
||||
|
@ -92,7 +92,7 @@ struct dom_scanner_info {
|
||||
|
||||
/* Initializes the scanner. */
|
||||
void init_dom_scanner(struct dom_scanner *scanner, struct dom_scanner_info *scanner_info,
|
||||
struct dom_string *string, int state, int count_lines);
|
||||
struct dom_string *string, int state, int count_lines, int complete);
|
||||
|
||||
/* The number of tokens in the scanners token table:
|
||||
* At best it should be big enough to contain properties with space separated
|
||||
@ -123,8 +123,9 @@ struct dom_scanner {
|
||||
int line;
|
||||
#endif
|
||||
|
||||
unsigned int count_lines:1;
|
||||
unsigned int lineno;
|
||||
unsigned int incomplete:1; /* The scanned string is incomplete */
|
||||
unsigned int count_lines:1; /* Is line counting enbaled? */
|
||||
unsigned int lineno; /* Line # of the last scanned token */
|
||||
|
||||
/* Some state indicator only meaningful to the scanner internals */
|
||||
int state;
|
||||
|
@ -391,7 +391,7 @@ parse_dom_select(struct dom_select *select, struct dom_stack *stack,
|
||||
struct dom_scanner scanner;
|
||||
struct dom_select_node sel;
|
||||
|
||||
init_dom_scanner(&scanner, &dom_css_scanner_info, string, 0, 0);
|
||||
init_dom_scanner(&scanner, &dom_css_scanner_info, string, 0, 0, 1);
|
||||
|
||||
memset(&sel, 0, sizeof(sel));
|
||||
|
||||
|
@ -305,9 +305,10 @@ parse_sgml_plain(struct dom_stack *stack, struct dom_scanner *scanner)
|
||||
/* Parse the <?xml data="attributes"?>. */
|
||||
struct dom_scanner attr_scanner;
|
||||
|
||||
/* The attribute souce is complete. */
|
||||
init_dom_scanner(&attr_scanner, &sgml_scanner_info,
|
||||
&token->string, SGML_STATE_ELEMENT,
|
||||
scanner->count_lines);
|
||||
scanner->count_lines, 0);
|
||||
|
||||
if (dom_scanner_has_tokens(&attr_scanner))
|
||||
parse_sgml_attributes(stack, &attr_scanner);
|
||||
@ -332,10 +333,13 @@ parse_sgml_plain(struct dom_stack *stack, struct dom_scanner *scanner)
|
||||
}
|
||||
|
||||
struct dom_node *
|
||||
parse_sgml(struct sgml_parser *parser, struct dom_string *buffer)
|
||||
parse_sgml(struct sgml_parser *parser, struct dom_string *buffer, int complete)
|
||||
{
|
||||
struct sgml_parsing_state *parsing;
|
||||
|
||||
if (complete)
|
||||
parser->flags |= SGML_PARSER_COMPLETE;
|
||||
|
||||
if (!parser->root) {
|
||||
parser->root = add_sgml_document(&parser->stack, &parser->uri);
|
||||
if (!parser->root)
|
||||
@ -369,11 +373,12 @@ sgml_parsing_push(struct dom_stack *stack, struct dom_node *node, void *data)
|
||||
struct sgml_parser *parser = get_sgml_parser(stack);
|
||||
struct sgml_parsing_state *parsing = data;
|
||||
int count_lines = !!(parser->flags & SGML_PARSER_COUNT_LINES);
|
||||
int complete = !!(parser->flags & SGML_PARSER_COMPLETE);
|
||||
|
||||
parsing->depth = parser->stack.depth;
|
||||
get_dom_stack_top(&parser->stack)->immutable = 1;
|
||||
init_dom_scanner(&parsing->scanner, &sgml_scanner_info, &node->string,
|
||||
SGML_STATE_TEXT, count_lines);
|
||||
SGML_STATE_TEXT, count_lines, complete);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -24,6 +24,7 @@ enum sgml_parser_type {
|
||||
|
||||
enum sgml_parser_flag {
|
||||
SGML_PARSER_COUNT_LINES = 1,
|
||||
SGML_PARSER_COMPLETE = 2,
|
||||
};
|
||||
|
||||
struct sgml_parser_state {
|
||||
@ -55,7 +56,8 @@ init_sgml_parser(enum sgml_parser_type type, enum sgml_document_type doctype,
|
||||
|
||||
void done_sgml_parser(struct sgml_parser *parser);
|
||||
|
||||
struct dom_node *parse_sgml(struct sgml_parser *parser, struct dom_string *buffer);
|
||||
struct dom_node *
|
||||
parse_sgml(struct sgml_parser *parser, struct dom_string *buffer, int complete);
|
||||
|
||||
unsigned int get_sgml_parser_line_number(struct sgml_parser *parser);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user