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