#ifndef EL__DOCUMENT_HTML_PARSER_PARSE_H
#define EL__DOCUMENT_HTML_PARSER_PARSE_H
struct html_context;
struct document_options;
struct part;
struct string;
/* Flags for get_attr_value(). */
enum html_attr_flags {
HTML_ATTR_NONE = 0,
/* If HTML_ATTR_TEST is set then we only test for existence of
* an attribute of that @name. In that mode it returns NULL if
* attribute was not found, and a pointer to start of the attribute
* if it was found. */
HTML_ATTR_TEST = 1,
/* If HTML_ATTR_EAT_NL is not set, newline and tabs chars are
* replaced by spaces in returned value, else these chars are
* skipped. */
HTML_ATTR_EAT_NL = 2,
/* If HTML_ATTR_NO_CONV is set, then convert_string() is not called
* on value. Unused for now. */
/* HTML_ATTR_NO_CONV = 4, */
};
/* Parses html element attributes.
* - e is attr pointer previously get from parse_element,
* DON'T PASS HERE ANY OTHER VALUE!!!
* - name is searched attribute
*
* Returns allocated string containing the attribute, or NULL on unsuccess. */
unsigned char *get_attr_value(register unsigned char *e, unsigned char *name, struct document_options *options, enum html_attr_flags flags);
/* Wrappers for get_attr_value(). */
#define get_attr_val(e, name, options) get_attr_value(e, name, options, HTML_ATTR_NONE)
#define get_url_val(e, name, options) get_attr_value(e, name, options, HTML_ATTR_EAT_NL)
#define has_attr(e, name, options) (!!get_attr_value(e, name, options, HTML_ATTR_TEST))
/* Interface for both the renderer and the table handling */
void parse_html(unsigned char *html, unsigned char *eof, struct part *part, unsigned char *head, struct html_context *html_context);
/* Interface for element handlers */
typedef void (element_handler_T)(struct html_context *, unsigned char *attr,
unsigned char *html, unsigned char *eof,
unsigned char **end);
/* Interface for the table handling */
int parse_element(unsigned char *, unsigned char *, unsigned char **, int *, unsigned char **, unsigned char **);
int get_num(unsigned char *, unsigned char *, struct document_options *);
int get_width(unsigned char *, unsigned char *, int, struct html_context *);
unsigned char *skip_comment(unsigned char *, unsigned char *);
void scan_http_equiv(unsigned char *s, unsigned char *eof, struct string *head, struct string *title, struct document_options *options);
/* Lifecycle functions for the tags fastfind cache, if being in use. */
void free_tags_lookup(void);
void init_tags_lookup(void);
#endif