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