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