1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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;
}
|