36
36
LCUI_BEGIN_HEADER
37
37
38
38
#define CASE_WHITE_SPACE \
39
- case ' ':\
40
- case '\n':\
41
- case '\r':\
39
+ case ' ': \
40
+ case '\n': \
41
+ case '\r': \
42
42
case '\t'
43
43
44
- #define CSSParser_GetChar ( CTX ) do {\
45
- (CTX)->buffer[(ctx)->pos++] = *((CTX)->cur);\
46
- } while( 0 );
44
+ #define CSSParser_GetChar (CTX ) \
45
+ do { \
46
+ (CTX)->buffer[(ctx)->pos++] = *((CTX)->cur); \
47
+ } while (0);
47
48
48
- #define CSSParser_EndBuffer ( CTX ) do {\
49
- (CTX)->buffer[(CTX)->pos] = 0;\
50
- (CTX)->pos = 0;\
51
- } while( 0 );
49
+ #define CSSParser_EndBuffer (CTX ) \
50
+ do { \
51
+ (CTX)->buffer[(CTX)->pos] = 0; \
52
+ (CTX)->pos = 0; \
53
+ } while (0);
52
54
53
55
#define CSSParser_GetRuleParser (CTX ) &ctx->rule.parsers[CSS_RULE_FONT_FACE]
54
56
55
57
typedef enum LCUI_CSSParserTarget {
56
- CSS_TARGET_NONE , /**< 无 */
57
- CSS_TARGET_RULE_NAME , /**< 规则名称 */
58
- CSS_TARGET_RULE_DATA , /**< 规则数据 */
59
- CSS_TARGET_SELECTOR , /**< 选择器 */
60
- CSS_TARGET_KEY , /**< 属性名 */
61
- CSS_TARGET_VALUE , /**< 属性值 */
62
- CSS_TARGET_COMMENT , /**< 注释 */
58
+ CSS_TARGET_NONE , /**< 无 */
59
+ CSS_TARGET_RULE_NAME , /**< 规则名称 */
60
+ CSS_TARGET_RULE_DATA , /**< 规则数据 */
61
+ CSS_TARGET_SELECTOR , /**< 选择器 */
62
+ CSS_TARGET_KEY , /**< 属性名 */
63
+ CSS_TARGET_VALUE , /**< 属性值 */
64
+ CSS_TARGET_COMMENT , /**< 注释 */
63
65
CSS_TARGET_TOTAL_NUM
64
66
} LCUI_CSSParserTarget ;
65
67
66
68
typedef enum LCUI_CSSRule {
67
69
CSS_RULE_NONE ,
68
- CSS_RULE_FONT_FACE , /**< @font-face */
69
- CSS_RULE_IMPORT , /**< @import */
70
- CSS_RULE_MEDIA , /**< @media */
70
+ CSS_RULE_FONT_FACE , /**< @font-face */
71
+ CSS_RULE_IMPORT , /**< @import */
72
+ CSS_RULE_MEDIA , /**< @media */
71
73
CSS_RULE_TOTAL_NUM
72
74
} LCUI_CSSRule ;
73
75
@@ -91,7 +93,7 @@ typedef struct LCUI_CSSParserCommentContextRec_ LCUI_CSSParserCommentContextRec;
91
93
typedef struct LCUI_CSSParserCommentContextRec_ * LCUI_CSSParserCommentContext ;
92
94
typedef struct LCUI_CSSParserRuleContextRec_ LCUI_CSSParserRuleContextRec ;
93
95
typedef struct LCUI_CSSParserRuleContextRec_ * LCUI_CSSParserRuleContext ;
94
- typedef int (* LCUI_CSSParserFunction )(LCUI_CSSParserContext ctx );
96
+ typedef int (* LCUI_CSSParserFunction )(LCUI_CSSParserContext ctx );
95
97
96
98
struct LCUI_CSSParserRec_ {
97
99
LCUI_CSSParserFunction parse ;
@@ -109,44 +111,45 @@ typedef LCUI_CSSRuleParserRec LCUI_CSSRuleParsers[CSS_RULE_TOTAL_NUM];
109
111
110
112
/** 样式属性的解析器 */
111
113
struct LCUI_CSSPropertyParserRec_ {
112
- int key ; /**< 标识,在解析数据时可以使用它访问样式表中的自定义属性 */
113
- char * name ; /**< 名称,对应 CSS 样式属性名称 */
114
- int (* parse )(LCUI_CSSParserStyleContext , const char * );
114
+ int key ; /**< 标识,在解析数据时可以使用它访问样式表中的自定义属性 */
115
+ char * name ; /**< 名称,对应 CSS 样式属性名称 */
116
+ int (* parse )(LCUI_CSSParserStyleContext , const char * );
115
117
};
116
118
117
119
struct LCUI_CSSParserStyleContextRec_ {
118
- char * dirname ; /**< 当前所在的目录 */
119
- const char * space ; /**< 样式记录所属的空间 */
120
+ char * dirname ; /**< 当前所在的目录 */
121
+ const char * space ; /**< 样式记录所属的空间 */
120
122
121
- void (* style_handler )(int , LCUI_Style , void * );
123
+ void (* style_handler )(int , LCUI_Style , void * );
122
124
void * style_handler_arg ;
123
125
124
- LinkedList selectors ; /**< 当前匹配到的选择器列表 */
125
- LCUI_StyleSheet sheet ; /**< 当前缓存的样式表 */
126
- LCUI_CSSPropertyParser parser ; /**< 当前找到的样式属性解析器 */
126
+ LinkedList selectors ; /**< 当前匹配到的选择器列表 */
127
+ LCUI_StyleSheet sheet ; /**< 当前缓存的样式表 */
128
+ LCUI_CSSPropertyParser parser ; /**< 当前找到的样式属性解析器 */
127
129
};
128
130
129
131
struct LCUI_CSSParserCommentContextRec_ {
130
- LCUI_BOOL is_line_comment ; /**< 是否为单行注释 */
131
- LCUI_CSSParserTarget prev_target ; /**< 保存的上一个目标,解析完注释后将还原成该目标 */
132
+ LCUI_BOOL is_line_comment ; /**< 是否为单行注释 */
133
+ LCUI_CSSParserTarget
134
+ prev_target ; /**< 保存的上一个目标,解析完注释后将还原成该目标 */
132
135
};
133
136
134
137
struct LCUI_CSSParserRuleContextRec_ {
135
- int state ; /**< 规则解析器的状态 */
136
- LCUI_CSSRule rule ; /**< 当前规则 */
137
- LCUI_CSSRuleParsers parsers ; /**< 规则解析器列表 */
138
+ int state ; /**< 规则解析器的状态 */
139
+ LCUI_CSSRule rule ; /**< 当前规则 */
140
+ LCUI_CSSRuleParsers parsers ; /**< 规则解析器列表 */
138
141
};
139
142
140
143
/** CSS 代码解析器的环境参数(上下文数据) */
141
144
struct LCUI_CSSParserContextRec_ {
142
- int pos ; /**< 缓存中的字符串的下标位置 */
143
- const char * cur ; /**< 用于遍历字符串的指针 */
144
- char * space ; /**< 样式记录所属的空间 */
145
- char * buffer ; /**< 缓存中的字符串 */
146
- size_t buffer_size ; /**< 缓存区大小 */
145
+ int pos ; /**< 缓存中的字符串的下标位置 */
146
+ const char * cur ; /**< 用于遍历字符串的指针 */
147
+ char * space ; /**< 样式记录所属的空间 */
148
+ char * buffer ; /**< 缓存中的字符串 */
149
+ size_t buffer_size ; /**< 缓存区大小 */
147
150
148
- LCUI_CSSParserTarget target ; /**< 当前解析目标 */
149
- LCUI_CSSParsers parsers ; /**< 可供使用的解析器列表 */
151
+ LCUI_CSSParserTarget target ; /**< 当前解析目标 */
152
+ LCUI_CSSParsers parsers ; /**< 可供使用的解析器列表 */
150
153
151
154
LCUI_CSSParserRuleContextRec rule ;
152
155
LCUI_CSSParserStyleContextRec style ;
@@ -162,6 +165,9 @@ LCUI_API const char *LCUI_GetStyleName(int key);
162
165
/** 初始化 LCUI 的 CSS 代码解析功能 */
163
166
LCUI_API void LCUI_InitCSSParser (void );
164
167
168
+ LCUI_API void CSSStyleParser_SetCSSProperty (LCUI_CSSParserStyleContext ctx ,
169
+ int key , LCUI_Style s );
170
+
165
171
LCUI_API LCUI_CSSPropertyParser LCUI_GetCSSPropertyParser (const char * name );
166
172
167
173
/** 从文件中载入CSS样式数据,并导入至样式库中 */
@@ -170,7 +176,8 @@ LCUI_API int LCUI_LoadCSSFile(const char *filepath);
170
176
/** 从字符串中载入CSS样式数据,并导入至样式库中 */
171
177
LCUI_API size_t LCUI_LoadCSSString (const char * str , const char * space );
172
178
173
- LCUI_API LCUI_CSSParserContext CSSParser_Begin (size_t buffer_size , const char * space );
179
+ LCUI_API LCUI_CSSParserContext CSSParser_Begin (size_t buffer_size ,
180
+ const char * space );
174
181
175
182
LCUI_API void CSSParser_EndParseRuleData (LCUI_CSSParserContext ctx );
176
183
0 commit comments