Code

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