1 /* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
2 
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  * Author: Dodji Seketeli
21  * Look at file COPYRIGHTS for copyright information
22  */
23 
24 #ifndef __CR_DEFS_H__
25 #define __CR_DEFS_H__
26 
27 #include <stdio.h>
28 #include <glib.h>
29 #include "libcroco-config.h"
30 
31 G_BEGIN_DECLS
32 
33 /**
34  *@file
35  *The Croco library basic types definitions
36  *And global definitions.
37  */
38 
39 /**
40  *The status type returned
41  *by the methods of the croco library.
42  */
43 enum CRStatus {
44         CR_OK,
45         CR_BAD_PARAM_ERROR,
46         CR_INSTANCIATION_FAILED_ERROR,
47         CR_UNKNOWN_TYPE_ERROR,
48         CR_UNKNOWN_PROP_ERROR,
49         CR_UNKNOWN_PROP_VAL_ERROR,
50         CR_UNEXPECTED_POSITION_SCHEME,
51         CR_START_OF_INPUT_ERROR,
52         CR_END_OF_INPUT_ERROR,
53         CR_OUTPUT_TOO_SHORT_ERROR,
54         CR_INPUT_TOO_SHORT_ERROR,
55         CR_OUT_OF_BOUNDS_ERROR,
56         CR_EMPTY_PARSER_INPUT_ERROR,
57         CR_ENCODING_ERROR,
58         CR_ENCODING_NOT_FOUND_ERROR,
59         CR_PARSING_ERROR,
60         CR_SYNTAX_ERROR,
61         CR_NO_ROOT_NODE_ERROR,
62         CR_NO_TOKEN,
63         CR_OUT_OF_MEMORY_ERROR,
64         CR_PSEUDO_CLASS_SEL_HANDLER_NOT_FOUND_ERROR,
65         CR_BAD_PSEUDO_CLASS_SEL_HANDLER_ERROR,
66         CR_ERROR,
67         CR_FILE_NOT_FOUND_ERROR,
68         CR_VALUE_NOT_FOUND_ERROR
69 } ;
70 
71 /**
72  *Values used by
73  *cr_input_seek_position() ;
74  */
75 enum CRSeekPos {
76         CR_SEEK_CUR,
77         CR_SEEK_BEGIN,
78         CR_SEEK_END
79 } ;
80 
81 /**
82  *Encoding values.
83  */
84 enum CREncoding
85 {
86         CR_UCS_4 = 1/*Must be not NULL*/,
87         CR_UCS_1,
88         CR_ISO_8859_1,
89         CR_ASCII,
90         CR_UTF_8,
91         CR_UTF_16,
92         CR_AUTO/*should be the last one*/
93 } ;
94 
95 
96 
97 
98 #define CROCO_LOG_DOMAIN "LIBCROCO"
99 
100 #ifdef __GNUC__
101 #define cr_utils_trace(a_log_level, a_msg) \
102 g_log (CROCO_LOG_DOMAIN, \
103        G_LOG_LEVEL_CRITICAL, \
104        "file %s: line %d (%s): %s\n", \
105        __FILE__, \
106        __LINE__, \
107        __PRETTY_FUNCTION__, \
108 	a_msg)
109 #else /*__GNUC__*/
110 
111 #define cr_utils_trace(a_log_level, a_msg) \
112 g_log (CROCO_LOG_DOMAIN, \
113        G_LOG_LEVEL_CRITICAL, \
114        "file %s: line %d: %s\n", \
115        __FILE__, \
116        __LINE__, \
117        a_msg)
118 #endif
119 
120 /**
121  *Traces an info message.
122  *The file, line and enclosing function
123  *of the message will be automatically
124  *added to the message.
125  *@param a_msg the msg to trace.
126  */
127 #define cr_utils_trace_info(a_msg) \
128 cr_utils_trace (G_LOG_LEVEL_INFO, a_msg)
129 
130 /**
131  *Trace a debug message.
132  *The file, line and enclosing function
133  *of the message will be automatically
134  *added to the message.
135  *@param a_msg the msg to trace.
136  */
137 #define cr_utils_trace_debug(a_msg) \
138 cr_utils_trace (G_LOG_LEVEL_DEBUG, a_msg) ;
139 
140 
141 /****************************
142  *Encoding transformations and
143  *encoding helpers
144  ****************************/
145 
146 enum CRStatus
147 cr_utils_read_char_from_utf8_buf (const guchar * a_in, gulong a_in_len,
148                                   guint32 *a_out, gulong *a_consumed) ;
149 
150 enum CRStatus
151 cr_utils_ucs1_to_utf8 (const guchar *a_in, gulong *a_in_len,
152                        guchar *a_out, gulong *a_out_len) ;
153 
154 enum CRStatus
155 cr_utils_utf8_to_ucs1 (const guchar * a_in, gulong * a_in_len,
156                        guchar *a_out, gulong *a_out_len) ;
157 
158 enum CRStatus
159 cr_utils_ucs4_to_utf8 (const guint32 *a_in, gulong *a_in_len,
160                        guchar *a_out, gulong *a_out_len) ;
161 
162 enum CRStatus
163 cr_utils_utf8_str_len_as_ucs4 (const guchar *a_in_start,
164                                const guchar *a_in_end,
165                                gulong *a_len) ;
166 enum CRStatus
167 cr_utils_ucs1_str_len_as_utf8 (const guchar *a_in_start,
168                                const guchar *a_in_end,
169                                gulong *a_len) ;
170 enum CRStatus
171 cr_utils_utf8_str_len_as_ucs1 (const guchar *a_in_start,
172                                const guchar *a_in_end,
173                                gulong *a_len) ;
174 enum CRStatus
175 cr_utils_ucs4_str_len_as_utf8 (const guint32 *a_in_start,
176                                const guint32 *a_in_end,
177                                gulong *a_len) ;
178 
179 enum CRStatus
180 cr_utils_ucs1_str_to_utf8 (const guchar *a_in_start,
181                            gulong *a_in_len,
182                            guchar **a_out,
183                            gulong *a_len) ;
184 
185 enum CRStatus
186 cr_utils_utf8_str_to_ucs1 (const guchar * a_in_start,
187                            gulong * a_in_len,
188                            guchar **a_out,
189                            gulong *a_out_len) ;
190 
191 enum CRStatus
192 cr_utils_utf8_to_ucs4 (const guchar * a_in,
193                        gulong * a_in_len,
194                        guint32 *a_out, gulong *a_out_len) ;
195 
196 enum CRStatus
197 cr_utils_ucs4_str_to_utf8 (const guint32 *a_in,
198                            gulong *a_in_len,
199                            guchar **a_out, gulong *a_out_len) ;
200 
201 enum CRStatus
202 cr_utils_utf8_str_to_ucs4 (const guchar * a_in,
203                            gulong *a_in_len,
204                            guint32 **a_out,
205                            gulong *a_out_len) ;
206 
207 
208 /*****************************************
209  *CSS basic types identification utilities
210  *****************************************/
211 
212 gboolean
213 cr_utils_is_newline (guint32 a_char) ;
214 
215 gboolean
216 cr_utils_is_white_space (guint32 a_char) ;
217 
218 gboolean
219 cr_utils_is_nonascii (guint32 a_char) ;
220 
221 gboolean
222 cr_utils_is_hexa_char (guint32 a_char) ;
223 
224 
225 /**********************************
226  *Miscellaneous utility functions
227  ***********************************/
228 
229 void
230 cr_utils_dump_n_chars (guchar a_char,
231                        FILE *a_fp,
232                        glong a_nb) ;
233 
234 void
235 cr_utils_dump_n_chars2 (guchar a_char,
236                         GString *a_string,
237                         glong a_nb) ;
238 GList *
239 cr_utils_dup_glist_of_string (GList const *a_list) ;
240 
241 GList *
242 cr_utils_dup_glist_of_cr_string (GList const * a_list_of_strings) ;
243 
244 G_END_DECLS
245 
246 #endif /*__CR_DEFS_H__*/
247