1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
#ifndef __CSSPARSER_HH__
#define __CSSPARSER_HH__
/* The last three ones are never parsed. */
#define CSS_NUM_INTERNAL_PROPERTIES 3
#define CSS_NUM_PARSED_PROPERTIES \
(CssProperty::CSS_PROPERTY_LAST - CSS_NUM_INTERNAL_PROPERTIES)
typedef enum {
CSS_TYPE_INTEGER, /* This type is only used internally, for x-*
properties. */
CSS_TYPE_ENUM, /* Value is i, if represented by
enum_symbols[i]. */
CSS_TYPE_MULTI_ENUM, /* For all enum_symbols[i], 1 << i are
combined. */
CSS_TYPE_LENGTH_PERCENTAGE, /* <length> or <percentage>. Represented by
CssLength. */
CSS_TYPE_LENGTH, /* <length>, represented as CssLength.
Note: In some cases, CSS_TYPE_LENGTH is used
instead of CSS_TYPE_LENGTH_PERCENTAGE,
only because Dw cannot handle percentages
in this particular case (e.g.
'margin-*-width'). */
CSS_TYPE_COLOR, /* Represented as integer. */
CSS_TYPE_FONT_WEIGHT, /* this very special and only used by
'font-weight' */
CSS_TYPE_STRING, /* <string> */
CSS_TYPE_SYMBOL, /* Symbols, which are directly copied (as
opposed to CSS_TYPE_ENUM and
CSS_TYPE_MULTI_ENUM). Used for
'font-family'. */
CSS_TYPE_UNUSED /* Not yet used. Will itself get unused some
day. */
} CssValueType;
typedef enum {
CSS_ORIGIN_USER_AGENT,
CSS_ORIGIN_USER,
CSS_ORIGIN_AUTHOR,
} CssOrigin;
/* Origin and weight. Used only internally.*/
typedef enum {
CSS_PRIMARY_USER_IMPORTANT,
CSS_PRIMARY_AUTHOR_IMPORTANT,
CSS_PRIMARY_AUTHOR,
CSS_PRIMARY_USER,
CSS_PRIMARY_USER_AGENT,
CSS_PRIMARY_LAST,
} CssPrimaryOrder;
typedef struct {
char *symbol;
CssValueType type;
char **enum_symbols;
} CssPropertyInfo;
/*
* Lengths are represented as int in the following way:
*
* +---+ - - - +---+---+- - - - - -+---+---+---+---+
* | integer part | decimal fraction | type |
* +---+ - - - +---+---+- - - - - -+---+---+---+---+
* n-1 19 18 3 2 1 0
*
* | <------ fixed point value ------> |
*
* where type is one of the CSS_LENGTH_TYPE_* values.
*/
typedef int CssLength;
enum {
CSS_LENGTH_TYPE_PX,
CSS_LENGTH_TYPE_MM, /* "cm", "in", "pt" and "pc" are converted into
millimeters. */
CSS_LENGTH_TYPE_EM,
CSS_LENGTH_TYPE_EX,
CSS_LENGTH_TYPE_PERCENTAGE,
CSS_LENGTH_TYPE_AUTO /* This can be used as a simple value. */
};
#define CSS_CREATE_LENGTH(v, t) ( ( (int)((v) * (1 << 19)) & ~7 ) | (t) )
#define CSS_LENGTH_VALUE(l) ( ( (float)((l) & ~7) ) / (1 << 19) )
#define CSS_LENGTH_TYPE(l) ((l) & 7)
void a_Css_init (void);
void a_Css_freeall (void);
void a_Css_parse (CssContext *context,
const char *buf,
int buflen,
int order_count,
CssOrigin origin);
void p_Css_parse_element_style (CssContext *context,
char *id,
char *klass,
char *pseudo,
char *element,
const char *buf,
int buflen,
int order_count,
CssOrigin origin);
extern CssPropertyInfo Css_property_info[CssProperty::CSS_PROPERTY_LAST];
#endif // __CSS_H__
|