• 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_STYLE_H__
35 #define __CR_STYLE_H__
36 
37 #include "cr-utils.h"
38 #include "cr-statement.h"
39 #include "cr-fonts.h"
40 
41 /**
42  *@file
43  *The declaration of the #CRStyle class.
44  */
45 G_BEGIN_DECLS
46 
47 typedef struct _CRStyle CRStyle ;
48 
49 enum CRBorderStyle
50 {
51         BORDER_STYLE_NONE = 0,
52         BORDER_STYLE_HIDDEN,
53         BORDER_STYLE_DOTTED,
54         BORDER_STYLE_DASHED,
55         BORDER_STYLE_SOLID,
56         BORDER_STYLE_DOUBLE,
57         BORDER_STYLE_GROOVE,
58         BORDER_STYLE_RIDGE,
59         BORDER_STYLE_INSET,
60         BORDER_STYLE_OUTSET,
61 	BORDER_STYLE_INHERIT
62 } ;
63 
64 enum CRDisplayType
65 {
66         DISPLAY_NONE,
67         DISPLAY_INLINE,
68         DISPLAY_BLOCK,
69         DISPLAY_LIST_ITEM,
70         DISPLAY_RUN_IN,
71         DISPLAY_COMPACT,
72         DISPLAY_MARKER,
73         DISPLAY_TABLE,
74         DISPLAY_INLINE_TABLE,
75         DISPLAY_TABLE_ROW_GROUP,
76         DISPLAY_TABLE_HEADER_GROUP,
77         DISPLAY_TABLE_FOOTER_GROUP,
78         DISPLAY_TABLE_ROW,
79         DISPLAY_TABLE_COLUMN_GROUP,
80         DISPLAY_TABLE_COLUMN,
81         DISPLAY_TABLE_CELL,
82         DISPLAY_TABLE_CAPTION,
83         DISPLAY_INHERIT
84 } ;
85 
86 enum CRPositionType
87 {
88         POSITION_STATIC,
89         POSITION_RELATIVE,
90         POSITION_ABSOLUTE,
91         POSITION_FIXED,
92         POSITION_INHERIT
93 } ;
94 
95 enum CRFloatType
96 {
97         FLOAT_NONE,
98         FLOAT_LEFT,
99         FLOAT_RIGHT,
100         FLOAT_INHERIT
101 } ;
102 
103 enum CRWhiteSpaceType
104 {
105 	WHITE_SPACE_NORMAL,
106 	WHITE_SPACE_PRE,
107 	WHITE_SPACE_NOWRAP,
108 	WHITE_SPACE_INHERIT
109 } ;
110 
111 
112 #define BORDER_THIN 2
113 #define BORDER_MEDIUM 4
114 #define BORDER_THICK 6
115 
116 
117 /**
118  *A numerical css property value.
119  *This data type is actually split in 3 parts:
120  *1/the specified value
121  *2/the computed value
122  *3/the actual value.
123  *To understand the semantic of these three parts,
124  *see css2 spec chap 6.1 ("Specified, computed and actual values.").
125  */
126 typedef struct _CRNumPropVal CRNumPropVal ;
127 struct _CRNumPropVal
128 {
129         /**specified value*/
130         CRNum sv ;
131         /**computed value*/
132         CRNum cv ;
133         /**actual value*/
134         CRNum av ;
135 } ;
136 
137 /**
138  *An rgb css property value.
139  *This data type is actually split in 3 parts:
140  *1/the specified value
141  *2/the computed value
142  *3/the actual value.
143  *To understand the semantic of these three parts,
144  *see css2 spec chap 6.1 ("Specified, computed and actual values.").
145  */
146 typedef struct _CRRgbPropVal CRRgbPropVal ;
147 struct _CRRgbPropVal
148 {
149         /**specified value*/
150         CRRgb sv ;
151         /**computed value*/
152         CRRgb cv ;
153         /**actual value*/
154         CRRgb av ;
155 } ;
156 
157 
158 enum CRNumProp
159 {
160         NUM_PROP_TOP=0,
161         NUM_PROP_RIGHT,
162         NUM_PROP_BOTTOM,
163         NUM_PROP_LEFT,/*3*/
164 
165         NUM_PROP_PADDING_TOP,
166         NUM_PROP_PADDING_RIGHT,
167         NUM_PROP_PADDING_BOTTOM,
168         NUM_PROP_PADDING_LEFT,/*7*/
169 
170         NUM_PROP_BORDER_TOP,
171         NUM_PROP_BORDER_RIGHT,
172         NUM_PROP_BORDER_BOTTOM,
173         NUM_PROP_BORDER_LEFT,/*11*/
174 
175         NUM_PROP_MARGIN_TOP,
176         NUM_PROP_MARGIN_RIGHT,
177         NUM_PROP_MARGIN_BOTTOM,
178         NUM_PROP_MARGIN_LEFT,/*15*/
179 
180         NUM_PROP_WIDTH,
181 
182         /*must be last*/
183         NB_NUM_PROPS
184 } ;
185 
186 enum CRRgbProp
187 {
188         RGB_PROP_BORDER_TOP_COLOR = 0,
189         RGB_PROP_BORDER_RIGHT_COLOR,
190         RGB_PROP_BORDER_BOTTOM_COLOR,
191         RGB_PROP_BORDER_LEFT_COLOR,
192         RGB_PROP_COLOR,
193         RGB_PROP_BACKGROUND_COLOR,
194 
195         /*must be last*/
196         NB_RGB_PROPS
197 } ;
198 
199 
200 enum CRBorderStyleProp
201 {
202         BORDER_STYLE_PROP_TOP = 0,
203         BORDER_STYLE_PROP_RIGHT,
204         BORDER_STYLE_PROP_BOTTOM,
205         BORDER_STYLE_PROP_LEFT,
206 
207         /*must be last*/
208         NB_BORDER_STYLE_PROPS
209 } ;
210 
211 enum CRBoxOffsetProp
212 {
213         BOX_OFFSET_PROP_TOP = 0,
214         BOX_OFFSET_PROP_RIGHT,
215         BOX_OFFSET_PROP_BOTTOM,
216         BOX_OFFSET_PROP_LEFT,
217 
218         /*must be last*/
219         NB_BOX_OFFSET_PROPS
220 } ;
221 
222 typedef struct _CRFontSizeVal CRFontSizeVal ;
223 struct _CRFontSizeVal {
224         /*specified value*/
225         CRFontSize sv ;
226         /*computed value*/
227         CRFontSize cv ;
228         /*actual value*/
229         CRFontSize av ;
230 } ;
231 
232 /**
233  *The css2 style class.
234  *Contains computed and actual values
235  *inferred from the declarations found
236  *in the stylesheets.
237  *See css2 spec chapter 6.
238  */
239 struct _CRStyle
240 {
241         /**
242          *numerical properties.
243          *the properties are indexed by
244          *enum #CRNumProp.
245          */
246         CRNumPropVal num_props[NB_NUM_PROPS] ;
247 
248         /**
249          *color properties.
250          *They are indexed by enum #CRRgbProp .
251          */
252         CRRgbPropVal rgb_props[NB_RGB_PROPS] ;
253 
254         /**
255          *border style properties.
256          *They are indexed by enum #CRBorderStyleProp .
257          */
258         enum CRBorderStyle border_style_props[NB_BORDER_STYLE_PROPS] ;
259 
260         /**box display type*/
261         enum CRDisplayType display ;
262 
263         /**the positioning scheme*/
264         enum CRPositionType position ;
265 
266         /**the float property*/
267         enum CRFloatType float_type ;
268 
269         /*
270          *the 'font-family' property.
271          */
272         CRFontFamily *font_family ;
273 
274         /**
275          *the 'font-size' property.
276          */
277         CRFontSizeVal font_size ;
278         CRFontSizeAdjust *font_size_adjust ;
279         enum CRFontStyle font_style ;
280         enum CRFontVariant font_variant ;
281         enum CRFontWeight font_weight ;
282         enum CRFontStretch font_stretch ;
283 
284 	/**
285 	 * the 'tex' properties
286 	 */
287 	enum CRWhiteSpaceType white_space;
288 
289         gboolean inherited_props_resolved ;
290         CRStyle *parent_style ;
291         gulong ref_count ;
292 } ;
293 
294 enum CRStatus cr_style_white_space_type_to_string (enum CRWhiteSpaceType a_code,
295                                                    GString * a_str, guint a_nb_indent) ;
296 
297 enum CRStatus cr_style_num_prop_val_to_string (CRNumPropVal *a_prop_val,
298                                                GString *a_str,
299                                                guint a_nb_indent) ;
300 
301 enum CRStatus cr_style_rgb_prop_val_to_string (CRRgbPropVal *a_prop_val,
302                                                GString *a_str,
303                                                guint a_nb_indent) ;
304 
305 enum CRStatus cr_style_border_style_to_string (enum CRBorderStyle a_prop,
306                                                GString *a_str,
307                                                guint a_nb_indent) ;
308 
309 enum CRStatus cr_style_display_type_to_string (enum CRDisplayType a_code,
310                                                GString *a_str,
311                                                guint a_nb_indent) ;
312 
313 enum CRStatus cr_style_position_type_to_string (enum CRPositionType a_code,
314                                                 GString *a_str,
315                                                 guint a_nb_indent) ;
316 
317 enum CRStatus cr_style_float_type_to_string (enum CRFloatType a_code,
318                                              GString *a_str,
319                                              guint a_nb_indent) ;
320 
321 CRStyle * cr_style_new (gboolean a_set_props_to_initial_values) ;
322 
323 enum CRStatus cr_style_set_props_to_default_values (CRStyle *a_this) ;
324 enum CRStatus cr_style_set_props_to_initial_values (CRStyle *a_this) ;
325 enum CRStatus cr_style_resolve_inherited_properties (CRStyle *a_this) ;
326 enum CRStatus cr_style_propagate_from_parent (CRStyle *a_this);
327 
328 enum CRStatus cr_style_set_style_from_decl (CRStyle *a_this,
329 					    CRDeclaration *a_decl) ;
330 
331 
332 enum CRStatus cr_style_copy (CRStyle *a_dest, CRStyle *a_src) ;
333 
334 enum CRStatus cr_style_ref (CRStyle *a_this) ;
335 
336 gboolean cr_style_unref (CRStyle *a_this) ;
337 
338 void cr_style_destroy (CRStyle *a_this) ;
339 
340 CRStyle * cr_style_dup (CRStyle *a_this) ;
341 
342 enum CRStatus cr_style_to_string (CRStyle *a_this,
343                                   GString **a_str,
344                                   guint a_nb_indent) ;
345 
346 G_END_DECLS
347 
348 #endif /*__CR_STYLE_H__*/
349