diff options
Diffstat (limited to 'src/parse/css21.c')
-rw-r--r-- | src/parse/css21.c | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/src/parse/css21.c b/src/parse/css21.c new file mode 100644 index 0000000..63e8df7 --- /dev/null +++ b/src/parse/css21.c @@ -0,0 +1,96 @@ +/* + * This file is part of LibCSS. + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2008 John-Mark Bell <jmb@netsurf-browser.org> + */ + +#include "parse/css21.h" +#include "parse/parse.h" + +#include "utils/utils.h" + +/** + * Context for a CSS 2.1 parser + */ +struct css_css21 { + css_stylesheet *sheet; /**< The stylesheet to parse for */ + css_parser *parser; /**< The underlying core parser */ + + css_alloc alloc; /**< Memory (de)allocation function */ + void *pw; /**< Client's private data */ +}; + +static bool css21_handle_event(css_parser_event type, + const parserutils_vector *tokens, void *pw); + +/** + * Create a CSS 2.1 parser + * + * \param sheet The stylesheet object to parse for + * \param parser The core parser object to use + * \param alloc Memory (de)allocation function + * \param pw Pointer to client-specific private data + * \return Pointer to parser object, or NULL on failure + */ +css_css21 *css_css21_create(css_stylesheet *sheet, css_parser *parser, + css_alloc alloc, void *pw) +{ + css_css21 *css21; + css_parser_optparams params; + css_error error; + + if (sheet == NULL || parser == NULL || alloc == NULL) + return NULL; + + css21 = alloc(NULL, sizeof(css_css21), pw); + if (css21 == NULL) + return NULL; + + params.event_handler.handler = css21_handle_event; + params.event_handler.pw = css21; + error = css_parser_setopt(parser, CSS_PARSER_EVENT_HANDLER, ¶ms); + if (error != CSS_OK) { + alloc(css21, 0, pw); + return NULL; + } + + css21->sheet = sheet; + css21->parser = parser; + css21->alloc = alloc; + css21->pw = pw; + + return css21; +} + +/** + * Destroy a CSS 2.1 parser + * + * \param css21 The parser to destroy + */ +void css_css21_destroy(css_css21 *css21) +{ + if (css21 == NULL) + return; + + css21->alloc(css21, 0, css21->pw); +} + +/** + * Handler for core parser events + * + * \param type The event type + * \param tokens Vector of tokens read since last event, or NULL + * \param pw Pointer to handler context + * \return False to signal parse error, true otherwise + */ +bool css21_handle_event(css_parser_event type, const parserutils_vector *tokens, + void *pw) +{ + UNUSED(type); + UNUSED(tokens); + UNUSED(pw); + + return true; +} + |