ELinks 0.16.1.1
parser.c File Reference
#include <stdlib.h>
#include <string.h>
#include "elinks.h"
#include "dom/node.h"
#include "dom/sgml/parser.h"
#include "dom/sgml/scanner.h"
#include "dom/sgml/sgml.h"
#include "dom/stack.h"
#include "dom/string.h"
#include "util/error.h"
#include "util/memory.h"
Include dependency graph for parser.c:

Data Structures

struct  sgml_parsing_state

Macros

#define get_sgml_parser(stack)
#define get_sgml_parser_state(stack, state)

Functions

static struct dom_nodeadd_sgml_document (struct sgml_parser *parser)
static struct dom_nodeadd_sgml_element (struct dom_stack *stack, struct dom_scanner_token *token)
static struct dom_nodeadd_sgml_attribute (struct dom_stack *stack, struct dom_scanner_token *token, struct dom_scanner_token *valtoken)
static struct dom_nodeadd_sgml_proc_instruction (struct dom_stack *stack, struct dom_scanner_token *target, struct dom_scanner_token *data)
static struct dom_nodeadd_sgml_node (struct dom_stack *stack, enum dom_node_type type, struct dom_scanner_token *token)
static enum dom_code call_sgml_error_function (struct dom_stack *stack, struct dom_scanner_token *token)
static enum dom_code check_sgml_incomplete (struct dom_scanner *scanner, struct dom_scanner_token *start, struct dom_scanner_token *token)
static enum dom_code parse_sgml_attributes (struct dom_stack *stack, struct dom_scanner *scanner)
static enum dom_code parse_sgml_plain (struct dom_stack *stack, struct dom_scanner *scanner)
enum dom_code parse_sgml (struct sgml_parser *parser, char *buf, size_t bufsize, int complete)
 Parse a chunk of SGML source.
enum dom_code sgml_parsing_push (struct dom_stack *stack, struct dom_node *node, void *data)
enum dom_code sgml_parsing_pop (struct dom_stack *stack, struct dom_node *node, void *data)
unsigned int get_sgml_parser_line_number (struct sgml_parser *parser)
 Get the line position in the source.
struct sgml_parserinit_sgml_parser (enum sgml_parser_type type, enum sgml_document_type doctype, struct dom_string *uri, unsigned int flags)
 Initialise an SGML parser.
void done_sgml_parser (struct sgml_parser *parser)
 Release an SGML parser.

Variables

static struct dom_stack_context_info sgml_parsing_context_info
static struct dom_stack_context_info sgml_parser_context_info

Macro Definition Documentation

◆ get_sgml_parser

#define get_sgml_parser ( stack)
Value:
((stack)->contexts[0]->data)

◆ get_sgml_parser_state

#define get_sgml_parser_state ( stack,
state )
Value:
get_dom_stack_state_data(stack->contexts[0], state)
static void * get_dom_stack_state_data(struct dom_stack_context *context, struct dom_stack_state *state)
Access context specific state data.
Definition stack.h:195

Function Documentation

◆ add_sgml_attribute()

struct dom_node * add_sgml_attribute ( struct dom_stack * stack,
struct dom_scanner_token * token,
struct dom_scanner_token * valtoken )
inlinestatic

◆ add_sgml_document()

struct dom_node * add_sgml_document ( struct sgml_parser * parser)
inlinestatic

◆ add_sgml_element()

struct dom_node * add_sgml_element ( struct dom_stack * stack,
struct dom_scanner_token * token )
inlinestatic

◆ add_sgml_node()

struct dom_node * add_sgml_node ( struct dom_stack * stack,
enum dom_node_type type,
struct dom_scanner_token * token )
inlinestatic

◆ add_sgml_proc_instruction()

struct dom_node * add_sgml_proc_instruction ( struct dom_stack * stack,
struct dom_scanner_token * target,
struct dom_scanner_token * data )
inlinestatic

◆ call_sgml_error_function()

enum dom_code call_sgml_error_function ( struct dom_stack * stack,
struct dom_scanner_token * token )
static

◆ check_sgml_incomplete()

enum dom_code check_sgml_incomplete ( struct dom_scanner * scanner,
struct dom_scanner_token * start,
struct dom_scanner_token * token )
static

◆ done_sgml_parser()

void done_sgml_parser ( struct sgml_parser * parser)

Release an SGML parser.

Deallocates all resources, except the root node.

Parameters
parserThe parser being released.

◆ get_sgml_parser_line_number()

unsigned int get_sgml_parser_line_number ( struct sgml_parser * parser)

Get the line position in the source.

Note
Line numbers are recorded in the scanner tokens.
Parameters
parserA parser created with init_sgml_parser.
Returns
What line number the parser is currently at or zero if there has been no parsing yet.

◆ init_sgml_parser()

struct sgml_parser * init_sgml_parser ( enum sgml_parser_type type,
enum sgml_document_type doctype,
struct dom_string * uri,
unsigned int flags )

Initialise an SGML parser.

Initialise an SGML parser with the given properties.

Parameters
typeStream or tree; one-time or persistant.
doctypeThe document type, this affects what sub type nodes are given.
uriThe URI of the document root.
flagsFlags controlling the behaviour of the parser.
Returns
The created parser or NULL.

◆ parse_sgml()

enum dom_code parse_sgml ( struct sgml_parser * parser,
char * buf,
size_t bufsize,
int complete )

Parse a chunk of SGML source.

Parses the given buffer. For incremental rendering the last buffer can be signals through the complete parameter.

Parameters
parserA parser created with init_sgml_parser.
bufA buffer containing the chunk to parse.
bufsizeThe size of the buffer given in the buf parameter.
completeWhether this is the last chunk to parse.
Returns
DOM_CODE_OK if the buffer was successfully parsed, else a code hinting at the error.

◆ parse_sgml_attributes()

enum dom_code parse_sgml_attributes ( struct dom_stack * stack,
struct dom_scanner * scanner )
inlinestatic

◆ parse_sgml_plain()

enum dom_code parse_sgml_plain ( struct dom_stack * stack,
struct dom_scanner * scanner )
static

◆ sgml_parsing_pop()

enum dom_code sgml_parsing_pop ( struct dom_stack * stack,
struct dom_node * node,
void * data )

◆ sgml_parsing_push()

enum dom_code sgml_parsing_push ( struct dom_stack * stack,
struct dom_node * node,
void * data )

Variable Documentation

◆ sgml_parser_context_info

struct dom_stack_context_info sgml_parser_context_info
static

◆ sgml_parsing_context_info

struct dom_stack_context_info sgml_parsing_context_info
static