3636LCUI_BEGIN_HEADER
3737
3838#define CASE_WHITE_SPACE \
39- case ' ':\
40- case '\n':\
41- case '\r':\
39+ case ' ': \
40+ case '\n': \
41+ case '\r': \
4242 case '\t'
4343
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);
4748
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);
5254
5355#define CSSParser_GetRuleParser (CTX ) &ctx->rule.parsers[CSS_RULE_FONT_FACE]
5456
5557typedef 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 , /**< 注释 */
6365 CSS_TARGET_TOTAL_NUM
6466} LCUI_CSSParserTarget ;
6567
6668typedef enum LCUI_CSSRule {
6769 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 */
7173 CSS_RULE_TOTAL_NUM
7274} LCUI_CSSRule ;
7375
@@ -91,7 +93,7 @@ typedef struct LCUI_CSSParserCommentContextRec_ LCUI_CSSParserCommentContextRec;
9193typedef struct LCUI_CSSParserCommentContextRec_ * LCUI_CSSParserCommentContext ;
9294typedef struct LCUI_CSSParserRuleContextRec_ LCUI_CSSParserRuleContextRec ;
9395typedef struct LCUI_CSSParserRuleContextRec_ * LCUI_CSSParserRuleContext ;
94- typedef int (* LCUI_CSSParserFunction )(LCUI_CSSParserContext ctx );
96+ typedef int (* LCUI_CSSParserFunction )(LCUI_CSSParserContext ctx );
9597
9698struct LCUI_CSSParserRec_ {
9799 LCUI_CSSParserFunction parse ;
@@ -109,44 +111,45 @@ typedef LCUI_CSSRuleParserRec LCUI_CSSRuleParsers[CSS_RULE_TOTAL_NUM];
109111
110112/** 样式属性的解析器 */
111113struct 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 * );
115117};
116118
117119struct LCUI_CSSParserStyleContextRec_ {
118- char * dirname ; /**< 当前所在的目录 */
119- const char * space ; /**< 样式记录所属的空间 */
120+ char * dirname ; /**< 当前所在的目录 */
121+ const char * space ; /**< 样式记录所属的空间 */
120122
121- void (* style_handler )(int , LCUI_Style , void * );
123+ void (* style_handler )(int , LCUI_Style , void * );
122124 void * style_handler_arg ;
123125
124- LinkedList selectors ; /**< 当前匹配到的选择器列表 */
125- LCUI_StyleSheet sheet ; /**< 当前缓存的样式表 */
126- LCUI_CSSPropertyParser parser ; /**< 当前找到的样式属性解析器 */
126+ LinkedList selectors ; /**< 当前匹配到的选择器列表 */
127+ LCUI_StyleSheet sheet ; /**< 当前缓存的样式表 */
128+ LCUI_CSSPropertyParser parser ; /**< 当前找到的样式属性解析器 */
127129};
128130
129131struct 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 ; /**< 保存的上一个目标,解析完注释后将还原成该目标 */
132135};
133136
134137struct LCUI_CSSParserRuleContextRec_ {
135- int state ; /**< 规则解析器的状态 */
136- LCUI_CSSRule rule ; /**< 当前规则 */
137- LCUI_CSSRuleParsers parsers ; /**< 规则解析器列表 */
138+ int state ; /**< 规则解析器的状态 */
139+ LCUI_CSSRule rule ; /**< 当前规则 */
140+ LCUI_CSSRuleParsers parsers ; /**< 规则解析器列表 */
138141};
139142
140143/** CSS 代码解析器的环境参数(上下文数据) */
141144struct 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 ; /**< 缓存区大小 */
147150
148- LCUI_CSSParserTarget target ; /**< 当前解析目标 */
149- LCUI_CSSParsers parsers ; /**< 可供使用的解析器列表 */
151+ LCUI_CSSParserTarget target ; /**< 当前解析目标 */
152+ LCUI_CSSParsers parsers ; /**< 可供使用的解析器列表 */
150153
151154 LCUI_CSSParserRuleContextRec rule ;
152155 LCUI_CSSParserStyleContextRec style ;
@@ -162,6 +165,9 @@ LCUI_API const char *LCUI_GetStyleName(int key);
162165/** 初始化 LCUI 的 CSS 代码解析功能 */
163166LCUI_API void LCUI_InitCSSParser (void );
164167
168+ LCUI_API void CSSStyleParser_SetCSSProperty (LCUI_CSSParserStyleContext ctx ,
169+ int key , LCUI_Style s );
170+
165171LCUI_API LCUI_CSSPropertyParser LCUI_GetCSSPropertyParser (const char * name );
166172
167173/** 从文件中载入CSS样式数据,并导入至样式库中 */
@@ -170,7 +176,8 @@ LCUI_API int LCUI_LoadCSSFile(const char *filepath);
170176/** 从字符串中载入CSS样式数据,并导入至样式库中 */
171177LCUI_API size_t LCUI_LoadCSSString (const char * str , const char * space );
172178
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 );
174181
175182LCUI_API void CSSParser_EndParseRuleData (LCUI_CSSParserContext ctx );
176183
0 commit comments