1 /* -*- Mode: C; indent-tabs-mode:nil; 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 * Author: Dodji Seketeli
21 * See COPYRIGHTS file for copyright information.
22 */
24 #ifndef __CR_TOKEN_H__
25 #define __CR_TOKEN_H__
27 #include "cr-utils.h"
28 #include "cr-input.h"
29 #include "cr-num.h"
30 #include "cr-rgb.h"
31 #include "cr-string.h"
32 #include "cr-parsing-location.h"
34 G_BEGIN_DECLS
36 enum CRTokenType
37 {
38 NO_TK,
39 S_TK,
40 CDO_TK,
41 CDC_TK,
42 INCLUDES_TK,
43 DASHMATCH_TK,
44 COMMENT_TK,
45 STRING_TK,
46 IDENT_TK,
47 HASH_TK,
48 IMPORT_SYM_TK,
49 PAGE_SYM_TK,
50 MEDIA_SYM_TK,
51 FONT_FACE_SYM_TK,
52 CHARSET_SYM_TK,
53 ATKEYWORD_TK,
54 IMPORTANT_SYM_TK,
55 EMS_TK,
56 EXS_TK,
57 LENGTH_TK,
58 ANGLE_TK,
59 TIME_TK,
60 FREQ_TK,
61 DIMEN_TK,
62 PERCENTAGE_TK,
63 NUMBER_TK,
64 RGB_TK,
65 URI_TK,
66 FUNCTION_TK,
67 UNICODERANGE_TK,
68 SEMICOLON_TK,
69 CBO_TK, /*opening curly bracket*/
70 CBC_TK, /*closing curly bracket*/
71 PO_TK, /*opening parenthesis*/
72 PC_TK, /*closing parenthesis*/
73 BO_TK, /*opening bracket*/
74 BC_TK, /*closing bracket*/
75 DELIM_TK
76 } ;
78 enum CRTokenExtraType
79 {
80 NO_ET = 0,
81 LENGTH_PX_ET,
82 LENGTH_CM_ET,
83 LENGTH_MM_ET,
84 LENGTH_IN_ET,
85 LENGTH_PT_ET,
86 LENGTH_PC_ET,
87 ANGLE_DEG_ET,
88 ANGLE_RAD_ET,
89 ANGLE_GRAD_ET,
90 TIME_MS_ET,
91 TIME_S_ET,
92 FREQ_HZ_ET,
93 FREQ_KHZ_ET
94 } ;
96 typedef struct _CRToken CRToken ;
98 /**
99 *This class abstracts a css2 token.
100 */
101 struct _CRToken
102 {
103 enum CRTokenType type ;
104 enum CRTokenExtraType extra_type ;
105 CRInputPos pos ;
107 union
108 {
109 CRString *str ;
110 CRRgb *rgb ;
111 CRNum *num ;
112 guint32 unichar ;
113 } u ;
115 CRString * dimen ;
116 CRParsingLocation location ;
117 } ;
119 CRToken* cr_token_new (void) ;
121 enum CRStatus cr_token_set_s (CRToken *a_this) ;
123 enum CRStatus cr_token_set_cdo (CRToken *a_this) ;
125 enum CRStatus cr_token_set_cdc (CRToken *a_this) ;
127 enum CRStatus cr_token_set_includes (CRToken *a_this) ;
129 enum CRStatus cr_token_set_dashmatch (CRToken *a_this) ;
131 enum CRStatus cr_token_set_comment (CRToken *a_this, CRString *a_str) ;
133 enum CRStatus cr_token_set_string (CRToken *a_this, CRString *a_str) ;
135 enum CRStatus cr_token_set_ident (CRToken *a_this, CRString * a_ident) ;
137 enum CRStatus cr_token_set_hash (CRToken *a_this, CRString *a_hash) ;
139 enum CRStatus cr_token_set_rgb (CRToken *a_this, CRRgb *a_rgb) ;
141 enum CRStatus cr_token_set_import_sym (CRToken *a_this) ;
143 enum CRStatus cr_token_set_page_sym (CRToken *a_this) ;
145 enum CRStatus cr_token_set_media_sym (CRToken *a_this) ;
147 enum CRStatus cr_token_set_font_face_sym (CRToken *a_this) ;
149 enum CRStatus cr_token_set_charset_sym (CRToken *a_this) ;
151 enum CRStatus cr_token_set_atkeyword (CRToken *a_this, CRString *a_atname) ;
153 enum CRStatus cr_token_set_important_sym (CRToken *a_this) ;
155 enum CRStatus cr_token_set_ems (CRToken *a_this, CRNum *a_num) ;
157 enum CRStatus cr_token_set_exs (CRToken *a_this, CRNum *a_num) ;
159 enum CRStatus cr_token_set_length (CRToken *a_this, CRNum *a_num,
160 enum CRTokenExtraType a_et) ;
162 enum CRStatus cr_token_set_angle (CRToken *a_this, CRNum *a_num,
163 enum CRTokenExtraType a_et) ;
165 enum CRStatus cr_token_set_time (CRToken *a_this, CRNum *a_num,
166 enum CRTokenExtraType a_et) ;
168 enum CRStatus cr_token_set_freq (CRToken *a_this, CRNum *a_num,
169 enum CRTokenExtraType a_et) ;
171 enum CRStatus cr_token_set_dimen (CRToken *a_this, CRNum *a_num,
172 CRString *a_dim) ;
174 enum CRStatus cr_token_set_percentage (CRToken *a_this, CRNum *a_num) ;
176 enum CRStatus cr_token_set_number (CRToken *a_this, CRNum *a_num) ;
178 enum CRStatus cr_token_set_uri (CRToken *a_this, CRString *a_uri) ;
180 enum CRStatus cr_token_set_function (CRToken *a_this,
181 CRString *a_fun_name) ;
183 enum CRStatus cr_token_set_bc (CRToken *a_this) ;
185 enum CRStatus cr_token_set_bo (CRToken *a_this) ;
187 enum CRStatus cr_token_set_po (CRToken *a_this) ;
189 enum CRStatus cr_token_set_pc (CRToken *a_this) ;
191 enum CRStatus cr_token_set_cbc (CRToken *a_this) ;
193 enum CRStatus cr_token_set_cbo (CRToken *a_this) ;
195 enum CRStatus cr_token_set_semicolon (CRToken *a_this) ;
197 enum CRStatus cr_token_set_delim (CRToken *a_this, guint32 a_char) ;
200 /*
201 enum CRStatus
202 cr_token_set_unicoderange (CRToken *a_this,
203 CRUnicodeRange *a_range) ;
204 */
206 void
207 cr_token_destroy (CRToken *a_this) ;
210 G_END_DECLS
212 #endif /*__CR_TOKEN_H__*/