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_TOKEN_H__
35 #define __CR_TOKEN_H__
36
37 #include "cr-utils.h"
38 #include "cr-input.h"
39 #include "cr-num.h"
40 #include "cr-rgb.h"
41 #include "cr-string.h"
42 #include "cr-parsing-location.h"
43
44 G_BEGIN_DECLS
45
46 enum CRTokenType
47 {
48 NO_TK,
49 S_TK,
50 CDO_TK,
51 CDC_TK,
52 INCLUDES_TK,
53 DASHMATCH_TK,
54 COMMENT_TK,
55 STRING_TK,
56 IDENT_TK,
57 HASH_TK,
58 IMPORT_SYM_TK,
59 PAGE_SYM_TK,
60 MEDIA_SYM_TK,
61 FONT_FACE_SYM_TK,
62 CHARSET_SYM_TK,
63 ATKEYWORD_TK,
64 IMPORTANT_SYM_TK,
65 EMS_TK,
66 EXS_TK,
67 LENGTH_TK,
68 ANGLE_TK,
69 TIME_TK,
70 FREQ_TK,
71 DIMEN_TK,
72 PERCENTAGE_TK,
73 NUMBER_TK,
74 RGB_TK,
75 URI_TK,
76 FUNCTION_TK,
77 UNICODERANGE_TK,
78 SEMICOLON_TK,
79 CBO_TK, /*opening curly bracket*/
80 CBC_TK, /*closing curly bracket*/
81 PO_TK, /*opening parenthesis*/
82 PC_TK, /*closing parenthesis*/
83 BO_TK, /*opening bracket*/
84 BC_TK, /*closing bracket*/
85 DELIM_TK
86 } ;
87
88 enum CRTokenExtraType
89 {
90 NO_ET = 0,
91 LENGTH_PX_ET,
92 LENGTH_CM_ET,
93 LENGTH_MM_ET,
94 LENGTH_IN_ET,
95 LENGTH_PT_ET,
96 LENGTH_PC_ET,
97 ANGLE_DEG_ET,
98 ANGLE_RAD_ET,
99 ANGLE_GRAD_ET,
100 TIME_MS_ET,
101 TIME_S_ET,
102 FREQ_HZ_ET,
103 FREQ_KHZ_ET
104 } ;
105
106 typedef struct _CRToken CRToken ;
107
108 /**
109 *This class abstracts a css2 token.
110 */
111 struct _CRToken
112 {
113 enum CRTokenType type ;
114 enum CRTokenExtraType extra_type ;
115 CRInputPos pos ;
116
117 union
118 {
119 CRString *str ;
120 CRRgb *rgb ;
121 CRNum *num ;
122 guint32 unichar ;
123 } u ;
124
125 CRString * dimen ;
126 CRParsingLocation location ;
127 } ;
128
129 CRToken* cr_token_new (void) ;
130
131 enum CRStatus cr_token_set_s (CRToken *a_this) ;
132
133 enum CRStatus cr_token_set_cdo (CRToken *a_this) ;
134
135 enum CRStatus cr_token_set_cdc (CRToken *a_this) ;
136
137 enum CRStatus cr_token_set_includes (CRToken *a_this) ;
138
139 enum CRStatus cr_token_set_dashmatch (CRToken *a_this) ;
140
141 enum CRStatus cr_token_set_comment (CRToken *a_this, CRString *a_str) ;
142
143 enum CRStatus cr_token_set_string (CRToken *a_this, CRString *a_str) ;
144
145 enum CRStatus cr_token_set_ident (CRToken *a_this, CRString * a_ident) ;
146
147 enum CRStatus cr_token_set_hash (CRToken *a_this, CRString *a_hash) ;
148
149 enum CRStatus cr_token_set_rgb (CRToken *a_this, CRRgb *a_rgb) ;
150
151 enum CRStatus cr_token_set_import_sym (CRToken *a_this) ;
152
153 enum CRStatus cr_token_set_page_sym (CRToken *a_this) ;
154
155 enum CRStatus cr_token_set_media_sym (CRToken *a_this) ;
156
157 enum CRStatus cr_token_set_font_face_sym (CRToken *a_this) ;
158
159 enum CRStatus cr_token_set_charset_sym (CRToken *a_this) ;
160
161 enum CRStatus cr_token_set_atkeyword (CRToken *a_this, CRString *a_atname) ;
162
163 enum CRStatus cr_token_set_important_sym (CRToken *a_this) ;
164
165 enum CRStatus cr_token_set_ems (CRToken *a_this, CRNum *a_num) ;
166
167 enum CRStatus cr_token_set_exs (CRToken *a_this, CRNum *a_num) ;
168
169 enum CRStatus cr_token_set_length (CRToken *a_this, CRNum *a_num,
170 enum CRTokenExtraType a_et) ;
171
172 enum CRStatus cr_token_set_angle (CRToken *a_this, CRNum *a_num,
173 enum CRTokenExtraType a_et) ;
174
175 enum CRStatus cr_token_set_time (CRToken *a_this, CRNum *a_num,
176 enum CRTokenExtraType a_et) ;
177
178 enum CRStatus cr_token_set_freq (CRToken *a_this, CRNum *a_num,
179 enum CRTokenExtraType a_et) ;
180
181 enum CRStatus cr_token_set_dimen (CRToken *a_this, CRNum *a_num,
182 CRString *a_dim) ;
183
184 enum CRStatus cr_token_set_percentage (CRToken *a_this, CRNum *a_num) ;
185
186 enum CRStatus cr_token_set_number (CRToken *a_this, CRNum *a_num) ;
187
188 enum CRStatus cr_token_set_uri (CRToken *a_this, CRString *a_uri) ;
189
190 enum CRStatus cr_token_set_function (CRToken *a_this,
191 CRString *a_fun_name) ;
192
193 enum CRStatus cr_token_set_bc (CRToken *a_this) ;
194
195 enum CRStatus cr_token_set_bo (CRToken *a_this) ;
196
197 enum CRStatus cr_token_set_po (CRToken *a_this) ;
198
199 enum CRStatus cr_token_set_pc (CRToken *a_this) ;
200
201 enum CRStatus cr_token_set_cbc (CRToken *a_this) ;
202
203 enum CRStatus cr_token_set_cbo (CRToken *a_this) ;
204
205 enum CRStatus cr_token_set_semicolon (CRToken *a_this) ;
206
207 enum CRStatus cr_token_set_delim (CRToken *a_this, guint32 a_char) ;
208
209
210 /*
211 enum CRStatus
212 cr_token_set_unicoderange (CRToken *a_this,
213 CRUnicodeRange *a_range) ;
214 */
215
216 void
217 cr_token_destroy (CRToken *a_this) ;
218
219
220 G_END_DECLS
221
222 #endif /*__CR_TOKEN_H__*/