1 /* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
2
3 /* libcroco - Library for parsing and applying CSS
4 * Copyright (C) 2006-2019 Free Software Foundation, Inc.
5 *
6 * This file is not part of the GNU gettext program, but is used with
7 * GNU gettext.
8 *
9 * The original copyright notice is as follows:
10 */
11
12 /*
13 * This file is part of The Croco Library
14 *
15 * Copyright (C) 2003-2004 Dodji Seketeli. All Rights Reserved.
16 *
17 * This program is free software; you can redistribute it and/or
18 * modify it under the terms of version 2.1 of the GNU Lesser General Public
19 * License as published by the Free Software Foundation.
20 *
21 * This program is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 * GNU General Public License for more details.
25 *
26 * You should have received a copy of the GNU Lesser General Public License
27 * along with this program; if not, write to the Free Software
28 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
29 * USA
30 */
31
32 #ifndef __CR_DOC_HANDLER_H__
33 #define __CR_DOC_HANDLER_H__
34
35 /**
36 *@file
37 *The declaration of the #CRDocumentHandler class.
38 *This class is actually the parsing events handler.
39 */
40
41 #include <glib.h>
42 #include "cr-utils.h"
43 #include "cr-input.h"
44 #include "cr-stylesheet.h"
45
46 G_BEGIN_DECLS
47
48
49 typedef struct _CRDocHandler CRDocHandler ;
50
51 struct _CRDocHandlerPriv ;
52 typedef struct _CRDocHandlerPriv CRDocHandlerPriv ;
53
54
55 /**
56 *The SAC document handler.
57 *An instance of this class is to
58 *be passed to a parser. Then, during the parsing
59 *the parser calls the convenient function pointer
60 *whenever a particular event (a css construction) occurs.
61 */
62 struct _CRDocHandler
63 {
64 CRDocHandlerPriv *priv ;
65
66 /**
67 *This pointer is to be used by the application for
68 *it custom needs. It is there to extend the doc handler.
69 */
70 gpointer app_data ;
71
72 /**
73 *Is called at the beginning of the parsing of the document.
74 *@param a_this a pointer to the current instance of
75 *#CRDocHandler.
76 */
77 void (*start_document) (CRDocHandler *a_this) ;
78
79 /**
80 *Is called to notify the end of the parsing of the document.
81 *@param a_this a pointer to the current instance of
82 *#CRDocHandler.
83 */
84 void (*end_document) (CRDocHandler *a_this) ;
85
86 /**
87 *Is called to notify an at charset rule.
88 *@param a_this the document handler.
89 *@param a_charset the declared charset.
90 */
91 void (*charset) (CRDocHandler *a_this,
92 CRString *a_charset,
93 CRParsingLocation *a_charset_sym_location) ;
94
95 /**
96 *Is called to notify an import statement in
97 *the stylesheet.
98 *@param a_this the current instance of #CRDocHandler.
99 *@param a_media_list a doubly linked list of GString objects.
100 *Each GString object contains a string which is the
101 *destination media for style information.
102 *@param a_uri the uri of the imported style sheet.
103 *@param a_uri_default_ns the default namespace of URI
104 *@param a_location the parsing location of the '\@import'
105 *keyword.
106 *of the imported style sheet.
107 */
108 void (*import_style) (CRDocHandler *a_this,
109 GList *a_media_list,
110 CRString *a_uri,
111 CRString *a_uri_default_ns,
112 CRParsingLocation *a_location) ;
113
114 void (*import_style_result) (CRDocHandler *a_this,
115 GList *a_media_list,
116 CRString *a_uri,
117 CRString *a_uri_default_ns,
118 CRStyleSheet *a_sheet) ;
119
120 /**
121 *Is called to notify a namespace declaration.
122 *Not used yet.
123 *@param a_this the current instance of #CRDocHandler.
124 *@param a_prefix the prefix of the namespace.
125 *@param a_uri the uri of the namespace.
126 *@param a_location the location of the "@namespace" keyword.
127 */
128 void (*namespace_declaration) (CRDocHandler *a_this,
129 CRString *a_prefix,
130 CRString *a_uri,
131 CRParsingLocation *a_location) ;
132
133 /**
134 *Is called to notify a comment.
135 *@param a_this a pointer to the current instance
136 *of #CRDocHandler.
137 *@param a_comment the comment.
138 */
139 void (*comment) (CRDocHandler *a_this,
140 CRString *a_comment) ;
141
142 /**
143 *Is called to notify the beginning of a rule
144 *statement.
145 *@param a_this the current instance of #CRDocHandler.
146 *@param a_selector_list the list of selectors that precedes
147 *the rule declarations.
148 */
149 void (*start_selector) (CRDocHandler * a_this,
150 CRSelector *a_selector_list) ;
151
152 /**
153 *Is called to notify the end of a rule statement.
154 *@param a_this the current instance of #CRDocHandler.
155 *@param a_selector_list the list of selectors that precedes
156 *the rule declarations. This pointer is the same as
157 *the one passed to start_selector() ;
158 */
159 void (*end_selector) (CRDocHandler *a_this,
160 CRSelector *a_selector_list) ;
161
162
163 /**
164 *Is called to notify a declaration.
165 *@param a_this a pointer to the current instance
166 *of #CRDocHandler.
167 *@param a_name the name of the parsed property.
168 *@param a_expression a css expression that represents
169 *the value of the property. A css expression is
170 *actually a linked list of 'terms'. Each term can
171 *be linked to other using operators.
172 *
173 */
174 void (*property) (CRDocHandler *a_this,
175 CRString *a_name,
176 CRTerm *a_expression,
177 gboolean a_is_important) ;
178 /**
179 *Is called to notify the start of a font face statement.
180 *The parser invokes this method at the beginning of every
181 *font face statement in the style sheet. There will
182 *be a corresponding end_font_face () event for every
183 *start_font_face () event.
184 *
185 *@param a_this a pointer to the current instance of
186 *#CRDocHandler.
187 *@param a_location the parsing location of the "\@font-face"
188 *keyword.
189 */
190 void (*start_font_face) (CRDocHandler *a_this,
191 CRParsingLocation *a_location) ;
192
193 /**
194 *Is called to notify the end of a font face statement.
195 *@param a_this a pointer to the current instance of
196 *#CRDocHandler.
197 */
198 void (*end_font_face) (CRDocHandler *a_this) ;
199
200
201 /**
202 *Is called to notify the beginning of a media statement.
203 *The parser will invoke this method at the beginning of
204 *every media statement in the style sheet. There will be
205 *a corresponding end_media() event for every start_media()
206 *event.
207 *@param a_this a pointer to the current instance of
208 *#CRDocHandler.
209 *@param a_media_list a double linked list of
210 #CRString * objects.
211 *Each CRString objects is actually a destination media for
212 *the style information.
213 */
214 void (*start_media) (CRDocHandler *a_this,
215 GList *a_media_list,
216 CRParsingLocation *a_location) ;
217
218 /**
219 *Is called to notify the end of a media statement.
220 *@param a_this a pointer to the current instance
221 *of #CRDocHandler.
222 *@param a_media_list a double linked list of GString * objects.
223 *Each GString objects is actually a destination media for
224 *the style information.
225 */
226 void (*end_media) (CRDocHandler *a_this,
227 GList *a_media_list) ;
228
229 /**
230 *Is called to notify the beginning of a page statement.
231 *The parser invokes this function at the beginning of
232 *every page statement in the style sheet. There will be
233 *a corresponding end_page() event for every single
234 *start_page() event.
235 *@param a_this a pointer to the current instance of
236 *#CRDocHandler.
237 *@param a_name the name of the page (if any, null otherwise).
238 *@param a_pseudo_page the pseudo page (if any, null otherwise).
239 *@param a_location the parsing location of the "\@page" keyword.
240 */
241 void (*start_page) (CRDocHandler *a_this,
242 CRString *a_name,
243 CRString *a_pseudo_page,
244 CRParsingLocation *a_location) ;
245
246 /**
247 *Is called to notify the end of a page statement.
248 *@param a_this a pointer to the current instance of
249 *#CRDocHandler.
250 *@param a_name the name of the page (if any, null otherwise).
251 *@param a_pseudo_page the pseudo page (if any, null otherwise).
252 */
253 void (*end_page) (CRDocHandler *a_this,
254 CRString *a_name,
255 CRString *pseudo_page) ;
256
257 /**
258 *Is Called to notify an unknown at-rule not supported
259 *by this parser.
260 */
261 void (*ignorable_at_rule) (CRDocHandler *a_this,
262 CRString *a_name) ;
263
264 /**
265 *Is called to notify a parsing error. After this error
266 *the application must ignore the rule being parsed, if
267 *any. After completion of this callback,
268 *the parser will then try to resume the parsing,
269 *ignoring the current error.
270 */
271 void (*error) (CRDocHandler *a_this) ;
272
273 /**
274 *Is called to notify an unrecoverable parsing error.
275 *This is the place to put emergency routines that free allocated
276 *resources.
277 */
278 void (*unrecoverable_error) (CRDocHandler *a_this) ;
279
280 gboolean resolve_import ;
281 gulong ref_count ;
282 } ;
283
284 CRDocHandler * cr_doc_handler_new (void) ;
285
286 enum CRStatus cr_doc_handler_set_result (CRDocHandler *a_this, gpointer a_result) ;
287
288 enum CRStatus cr_doc_handler_get_result (CRDocHandler const *a_this, gpointer * a_result) ;
289
290 enum CRStatus cr_doc_handler_set_ctxt (CRDocHandler *a_this, gpointer a_ctxt) ;
291
292 enum CRStatus cr_doc_handler_get_ctxt (CRDocHandler const *a_this, gpointer * a_ctxt) ;
293
294 enum CRStatus cr_doc_handler_set_default_sac_handler (CRDocHandler *a_this) ;
295
296 void cr_doc_handler_associate_a_parser (CRDocHandler *a_this,
297 gpointer a_parser) ;
298
299 void cr_doc_handler_ref (CRDocHandler *a_this) ;
300
301 gboolean cr_doc_handler_unref (CRDocHandler *a_this) ;
302
303 void cr_doc_handler_destroy (CRDocHandler *a_this) ;
304
305 G_END_DECLS
306
307 #endif /*__CR_DOC_HANDLER_H__*/