diff options
Diffstat (limited to 'src/parse')
51 files changed, 2087 insertions, 1211 deletions
diff --git a/src/parse/font_face.c b/src/parse/font_face.c index f17d50e..055a118 100644 --- a/src/parse/font_face.c +++ b/src/parse/font_face.c @@ -41,7 +41,7 @@ static bool font_rule_font_family_reserved(css_language *c, } static css_error font_face_parse_font_family(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_font_face *font_face) { css_error error; @@ -60,7 +60,7 @@ static css_error font_face_parse_font_family(css_language *c, } static css_error font_face_src_parse_format(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_font_face_format *format) { bool match; @@ -120,7 +120,7 @@ static css_error font_face_src_parse_format(css_language *c, } static css_error font_face_src_parse_spec_or_name(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, lwc_string **location, css_font_face_location_type *location_type, css_font_face_format *format) @@ -194,10 +194,10 @@ static css_error font_face_src_parse_spec_or_name(css_language *c, } static css_error font_face_parse_src(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_font_face *font_face) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error = CSS_OK; const css_token *token; css_font_face_src *srcs = NULL, *new_srcs = NULL; @@ -258,10 +258,10 @@ cleanup: } static css_error font_face_parse_font_style(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_font_face *font_face) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error = CSS_OK; const css_token *token; enum css_font_style_e style = 0; @@ -299,10 +299,10 @@ static css_error font_face_parse_font_style(css_language *c, } static css_error font_face_parse_font_weight(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_font_face *font_face) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error = CSS_OK; const css_token *token; enum css_font_weight_e weight = 0; @@ -374,7 +374,7 @@ static css_error font_face_parse_font_weight(css_language *c, */ css_error css__parse_font_descriptor(css_language *c, const css_token *descriptor, const parserutils_vector *vector, - int *ctx, css_rule_font_face *rule) + int32_t *ctx, css_rule_font_face *rule) { css_font_face *font_face = rule->font_face; css_error error; diff --git a/src/parse/font_face.h b/src/parse/font_face.h index 435380e..dc00ef1 100644 --- a/src/parse/font_face.h +++ b/src/parse/font_face.h @@ -17,6 +17,6 @@ css_error css__parse_font_descriptor(css_language *c, const css_token *descriptor, const parserutils_vector *vector, - int *ctx, struct css_rule_font_face *rule); + int32_t *ctx, struct css_rule_font_face *rule); #endif diff --git a/src/parse/important.c b/src/parse/important.c index e0e8620..02aafc4 100644 --- a/src/parse/important.c +++ b/src/parse/important.c @@ -25,10 +25,10 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_important(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, uint8_t *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; bool match = false; const css_token *token; @@ -87,7 +87,7 @@ void css__make_style_important(css_style *style) offset++; /* Advance past any property-specific data */ - if (isInherit(opv) == false) { + if (hasFlagValue(opv) == false) { switch (op) { case CSS_PROP_AZIMUTH: if ((value & ~AZIMUTH_BEHIND) == AZIMUTH_ANGLE) @@ -346,6 +346,16 @@ void css__make_style_important(css_style *style) offset++; /* value */ break; + case CSS_PROP_FILL_OPACITY: + if (value == FILL_OPACITY_SET) + offset++; /* value */ + break; + + case CSS_PROP_STROKE_OPACITY: + if (value == STROKE_OPACITY_SET) + offset++; /* value */ + break; + case CSS_PROP_ORDER: if (value == ORDER_SET) offset++; /* value */ diff --git a/src/parse/important.h b/src/parse/important.h index ba5e118..e939c4b 100644 --- a/src/parse/important.h +++ b/src/parse/important.h @@ -12,7 +12,7 @@ #include "parse/language.h" css_error css__parse_important(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, uint8_t *result); void css__make_style_important(css_style *style); diff --git a/src/parse/language.c b/src/parse/language.c index c2d02d7..936ab3d 100644 --- a/src/parse/language.c +++ b/src/parse/language.c @@ -63,37 +63,37 @@ static css_error lookupNamespace(css_language *c, /* Selector list parsing */ static css_error parseClass(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_selector_detail *specific); static css_error parseAttrib(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_selector_detail *specific); static css_error parseNth(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_selector_detail_value *value); static css_error parsePseudo(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, bool in_not, css_selector_detail *specific); static css_error parseSpecific(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, bool in_not, css_selector_detail *specific); static css_error parseAppendSpecific(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_selector **parent); static css_error parseSelectorSpecifics(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_selector **parent); static css_error parseTypeSelector(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_qname *qname); static css_error parseSimpleSelector(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_selector **result); static css_error parseCombinator(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_combinator *result); static css_error parseSelector(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_selector **result); static css_error parseSelectorList(css_language *c, const parserutils_vector *vector, css_rule *rule); @@ -101,7 +101,7 @@ static css_error parseSelectorList(css_language *c, /* Declaration parsing */ static css_error parseProperty(css_language *c, const css_token *property, const parserutils_vector *vector, - int *ctx, css_rule *rule); + int32_t *ctx, css_rule *rule); /** * Create a CSS language parser @@ -790,7 +790,7 @@ css_error handleDeclaration(css_language *c, const parserutils_vector *vector) { css_error error; const css_token *token, *ident; - int ctx = 0; + int32_t ctx = 0; context_entry *entry; css_rule *rule; @@ -945,7 +945,7 @@ css_error lookupNamespace(css_language *c, lwc_string *prefix, lwc_string **uri) ******************************************************************************/ css_error parseClass(css_language *c, const parserutils_vector *vector, - int *ctx, css_selector_detail *specific) + int32_t *ctx, css_selector_detail *specific) { css_qname qname; css_selector_detail_value detail_value; @@ -976,7 +976,7 @@ css_error parseClass(css_language *c, const parserutils_vector *vector, } css_error parseAttrib(css_language *c, const parserutils_vector *vector, - int *ctx, css_selector_detail *specific) + int32_t *ctx, css_selector_detail *specific) { css_qname qname; css_selector_detail_value detail_value; @@ -1078,7 +1078,7 @@ css_error parseAttrib(css_language *c, const parserutils_vector *vector, } css_error parseNth(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_selector_detail_value *value) { const css_token *token; @@ -1279,7 +1279,7 @@ css_error parseNth(css_language *c, } css_error parsePseudo(css_language *c, const parserutils_vector *vector, - int *ctx, bool in_not, css_selector_detail *specific) + int32_t *ctx, bool in_not, css_selector_detail *specific) { static const struct { @@ -1459,7 +1459,7 @@ css_error parsePseudo(css_language *c, const parserutils_vector *vector, } css_error parseSpecific(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, bool in_not, css_selector_detail *specific) { css_error error; @@ -1514,7 +1514,7 @@ css_error parseSpecific(css_language *c, } css_error parseAppendSpecific(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_selector **parent) { css_error error; @@ -1529,7 +1529,7 @@ css_error parseAppendSpecific(css_language *c, } css_error parseSelectorSpecifics(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_selector **parent) { css_error error; @@ -1551,7 +1551,7 @@ css_error parseSelectorSpecifics(css_language *c, } css_error parseTypeSelector(css_language *c, const parserutils_vector *vector, - int *ctx, css_qname *qname) + int32_t *ctx, css_qname *qname) { const css_token *token; css_error error; @@ -1612,10 +1612,10 @@ css_error parseTypeSelector(css_language *c, const parserutils_vector *vector, } css_error parseSimpleSelector(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_selector **result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error; const css_token *token; css_selector *selector; @@ -1678,7 +1678,7 @@ css_error parseSimpleSelector(css_language *c, } css_error parseCombinator(css_language *c, const parserutils_vector *vector, - int *ctx, css_combinator *result) + int32_t *ctx, css_combinator *result) { const css_token *token; css_combinator comb = CSS_COMBINATOR_NONE; @@ -1719,7 +1719,7 @@ css_error parseCombinator(css_language *c, const parserutils_vector *vector, } css_error parseSelector(css_language *c, const parserutils_vector *vector, - int *ctx, css_selector **result) + int32_t *ctx, css_selector **result) { css_error error; const css_token *token = NULL; @@ -1785,7 +1785,7 @@ css_error parseSelectorList(css_language *c, const parserutils_vector *vector, css_error error; const css_token *token = NULL; css_selector *selector = NULL; - int ctx = 0; + int32_t ctx = 0; /* Strip any leading whitespace (can happen if in nested block) */ consumeWhitespace(vector, &ctx); @@ -1843,7 +1843,7 @@ css_error parseSelectorList(css_language *c, const parserutils_vector *vector, ******************************************************************************/ css_error parseProperty(css_language *c, const css_token *property, - const parserutils_vector *vector, int *ctx, css_rule *rule) + const parserutils_vector *vector, int32_t *ctx, css_rule *rule) { css_error error; css_prop_handler handler = NULL; diff --git a/src/parse/language.h b/src/parse/language.h index 2ab4987..81a096a 100644 --- a/src/parse/language.h +++ b/src/parse/language.h @@ -64,7 +64,7 @@ css_error css__language_destroy(css_language *language); * \param vector The vector to consume from * \param ctx The vector's context */ -static inline void consumeWhitespace(const parserutils_vector *vector, int *ctx) +static inline void consumeWhitespace(const parserutils_vector *vector, int32_t *ctx) { const css_token *token = NULL; diff --git a/src/parse/mq.c b/src/parse/mq.c index c6ebe84..5031e34 100644 --- a/src/parse/mq.c +++ b/src/parse/mq.c @@ -79,11 +79,11 @@ void css__mq_query_destroy(css_mq_query *media) } static css_error mq_parse_condition(lwc_string **strings, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, bool permit_or, css_mq_cond **cond); static css_error mq_parse_ratio( - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, const css_token *numerator, css_fixed *ratio) { const css_token *token; @@ -260,7 +260,7 @@ static css_error mq_parse_range__convert_to_level_4( } static css_error mq_parse_range(lwc_string **strings, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, const css_token *name_or_value, css_mq_feature **feature) { @@ -443,7 +443,7 @@ static css_error mq_parse_range(lwc_string **strings, } static css_error mq_parse_media_feature(lwc_string **strings, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_mq_feature **feature) { const css_token *name_or_value, *token; @@ -565,7 +565,7 @@ static css_error mq_parse_media_feature(lwc_string **strings, * CSS Syntax Module Level 3: 8.2 */ static css_error mq_parse_consume_any_value(lwc_string **strings, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, bool until, const char until_char) { const css_token *token; @@ -627,7 +627,7 @@ static css_error mq_parse_consume_any_value(lwc_string **strings, } static css_error mq_parse_general_enclosed(lwc_string **strings, - const parserutils_vector *vector, int *ctx) + const parserutils_vector *vector, int32_t *ctx) { const css_token *token; css_error error; @@ -671,7 +671,7 @@ static css_error mq_parse_general_enclosed(lwc_string **strings, } static css_error mq_parse_media_in_parens(lwc_string **strings, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_mq_cond_or_feature **cond_or_feature) { const css_token *token; @@ -754,7 +754,7 @@ static css_error mq_parse_media_in_parens(lwc_string **strings, } static css_error mq_parse_condition(lwc_string **strings, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, bool permit_or, css_mq_cond **cond) { const css_token *token; @@ -800,13 +800,13 @@ static css_error mq_parse_condition(lwc_string **strings, } result->negate = 1; - result->nparts = 1; result->parts = malloc(sizeof(*result->parts)); if (result->parts == NULL) { css__mq_cond_or_feature_destroy(cond_or_feature); css__mq_cond_destroy(result); return CSS_NOMEM; } + result->nparts = 1; result->parts[0] = cond_or_feature; *cond = result; @@ -882,63 +882,84 @@ static css_error mq_parse_condition(lwc_string **strings, /** * Parse a media query type. */ -static uint64_t mq_parse_type(lwc_string **strings, lwc_string *type) +static css_error mq_parse_type(lwc_string **strings, lwc_string *type, + uint64_t *result) { bool match; + css_error error = CSS_OK; if (type == NULL) { - return CSS_MEDIA_ALL; + *result = CSS_MEDIA_ALL; } else if (lwc_string_caseless_isequal( type, strings[AURAL], &match) == lwc_error_ok && match) { - return CSS_MEDIA_AURAL; + *result = CSS_MEDIA_AURAL; } else if (lwc_string_caseless_isequal( type, strings[BRAILLE], &match) == lwc_error_ok && match) { - return CSS_MEDIA_BRAILLE; + *result = CSS_MEDIA_BRAILLE; } else if (lwc_string_caseless_isequal( type, strings[EMBOSSED], &match) == lwc_error_ok && match) { - return CSS_MEDIA_EMBOSSED; + *result = CSS_MEDIA_EMBOSSED; } else if (lwc_string_caseless_isequal( type, strings[HANDHELD], &match) == lwc_error_ok && match) { - return CSS_MEDIA_HANDHELD; + *result = CSS_MEDIA_HANDHELD; } else if (lwc_string_caseless_isequal( type, strings[PRINT], &match) == lwc_error_ok && match) { - return CSS_MEDIA_PRINT; + *result = CSS_MEDIA_PRINT; } else if (lwc_string_caseless_isequal( type, strings[PROJECTION], &match) == lwc_error_ok && match) { - return CSS_MEDIA_PROJECTION; + *result = CSS_MEDIA_PROJECTION; } else if (lwc_string_caseless_isequal( type, strings[SCREEN], &match) == lwc_error_ok && match) { - return CSS_MEDIA_SCREEN; + *result = CSS_MEDIA_SCREEN; } else if (lwc_string_caseless_isequal( type, strings[SPEECH], &match) == lwc_error_ok && match) { - return CSS_MEDIA_SPEECH; + *result = CSS_MEDIA_SPEECH; } else if (lwc_string_caseless_isequal( type, strings[TTY], &match) == lwc_error_ok && match) { - return CSS_MEDIA_TTY; + *result = CSS_MEDIA_TTY; } else if (lwc_string_caseless_isequal( type, strings[TV], &match) == lwc_error_ok && match) { - return CSS_MEDIA_TV; + *result = CSS_MEDIA_TV; } else if (lwc_string_caseless_isequal( type, strings[ALL], &match) == lwc_error_ok && match) { - return CSS_MEDIA_ALL; + *result = CSS_MEDIA_ALL; + } else if (lwc_string_caseless_isequal( + type, strings[NOT], + &match) == lwc_error_ok && match) { + error = CSS_INVALID; + } else if (lwc_string_caseless_isequal( + type, strings[AND], + &match) == lwc_error_ok && match) { + error = CSS_INVALID; + } else if (lwc_string_caseless_isequal( + type, strings[OR], + &match) == lwc_error_ok && match) { + error = CSS_INVALID; + } else if (lwc_string_caseless_isequal( + type, strings[ONLY], + &match) == lwc_error_ok && match) { + error = CSS_INVALID; + } else { + /* Unknown type: same as not matching */ + *result = 0; } - return 0; + return error; } static css_error mq_parse_media_query(lwc_string **strings, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_mq_query **query) { const css_token *token; @@ -963,7 +984,7 @@ static css_error mq_parse_media_query(lwc_string **strings, lwc_string_caseless_isequal(token->idata, strings[NOT], &match) == lwc_error_ok && match) { - int old_ctx = *ctx; + int32_t old_ctx = *ctx; parserutils_vector_iterate(vector, ctx); consumeWhitespace(vector, ctx); @@ -991,6 +1012,7 @@ static css_error mq_parse_media_query(lwc_string **strings, return error; } + result->type = CSS_MEDIA_ALL; goto finished; } @@ -1016,7 +1038,11 @@ static css_error mq_parse_media_query(lwc_string **strings, return CSS_INVALID; } - result->type = mq_parse_type(strings, token->idata); + error = mq_parse_type(strings, token->idata, &result->type); + if (error != CSS_OK) { + free(result); + return error; + } consumeWhitespace(vector, ctx); @@ -1041,10 +1067,6 @@ static css_error mq_parse_media_query(lwc_string **strings, } finished: - if (result->type == 0) { - result->type = CSS_MEDIA_ALL; - } - *query = result; return CSS_OK; } @@ -1078,7 +1100,7 @@ static css_error css__mq_parse__create_not_all( } css_error css__mq_parse_media_list(lwc_string **strings, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_mq_query **media) { css_mq_query *result = NULL, *last = NULL; @@ -1140,7 +1162,7 @@ static css_error css_parse_media_query_handle_event( const parserutils_vector *tokens, void *pw) { - int idx = 0; + int32_t idx = 0; css_error err; css_mq_query *media; const css_token *tok; diff --git a/src/parse/mq.h b/src/parse/mq.h index 7a51578..ec19419 100644 --- a/src/parse/mq.h +++ b/src/parse/mq.h @@ -88,7 +88,7 @@ css_error css_parse_media_query(lwc_string **strings, css_mq_query **media_out); css_error css__mq_parse_media_list(lwc_string **strings, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_mq_query **media); void css__mq_query_destroy(css_mq_query *media); diff --git a/src/parse/properties/Makefile b/src/parse/properties/Makefile index 6461dda..df84d49 100644 --- a/src/parse/properties/Makefile +++ b/src/parse/properties/Makefile @@ -45,6 +45,7 @@ DIR_SOURCES := \ cue.c \ cursor.c \ elevation.c \ + fill_opacity.c \ flex.c \ flex_flow.c \ font.c \ @@ -61,6 +62,7 @@ DIR_SOURCES := \ play_during.c \ properties.c \ quotes.c \ + stroke_opacity.c \ text_decoration.c \ utils.c \ voice_family.c diff --git a/src/parse/properties/azimuth.c b/src/parse/properties/azimuth.c index f54189b..a9265d1 100644 --- a/src/parse/properties/azimuth.c +++ b/src/parse/properties/azimuth.c @@ -28,10 +28,10 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_azimuth(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error; const css_token *token; uint8_t flags = 0; @@ -53,11 +53,30 @@ css_error css__parse_azimuth(css_language *c, } if (token->type == CSS_TOKEN_IDENT && - (lwc_string_caseless_isequal(token->idata, c->strings[INHERIT], + (lwc_string_caseless_isequal( + token->idata, c->strings[INHERIT], &match) == lwc_error_ok && match)) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && + (lwc_string_caseless_isequal( + token->idata, c->strings[INITIAL], + &match) == lwc_error_ok && match)) { + parserutils_vector_iterate(vector, ctx); + flags = FLAG_INITIAL; + } else if (token->type == CSS_TOKEN_IDENT && + (lwc_string_caseless_isequal( + token->idata, c->strings[REVERT], + &match) == lwc_error_ok && match)) { + parserutils_vector_iterate(vector, ctx); + flags = FLAG_REVERT; + } else if (token->type == CSS_TOKEN_IDENT && + (lwc_string_caseless_isequal( + token->idata, c->strings[UNSET], + &match) == lwc_error_ok && match)) { + parserutils_vector_iterate(vector, ctx); + flags = FLAG_UNSET; + } else if (token->type == CSS_TOKEN_IDENT && (lwc_string_caseless_isequal(token->idata, c->strings[LEFTWARDS], &match) == lwc_error_ok && match)) { parserutils_vector_iterate(vector, ctx); diff --git a/src/parse/properties/background.c b/src/parse/properties/background.c index 01b995e..20aeb30 100644 --- a/src/parse/properties/background.c +++ b/src/parse/properties/background.c @@ -28,10 +28,10 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_background(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; int prev_ctx; const css_token *token; css_error error = CSS_OK; @@ -45,31 +45,38 @@ css_error css__parse_background(css_language *c, css_style * image_style; css_style * position_style; css_style * repeat_style; - + enum flag_value flag_value; /* Firstly, handle inherit */ token = parserutils_vector_peek(vector, *ctx); if (token == NULL) return CSS_INVALID; - if (is_css_inherit(c, token)) { - error = css_stylesheet_style_inherit(result, CSS_PROP_BACKGROUND_ATTACHMENT); + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_BACKGROUND_ATTACHMENT); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_BACKGROUND_COLOR); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_BACKGROUND_COLOR); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_BACKGROUND_IMAGE); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_BACKGROUND_IMAGE); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_BACKGROUND_POSITION); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_BACKGROUND_POSITION); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_BACKGROUND_REPEAT); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_BACKGROUND_REPEAT); if (error == CSS_OK) parserutils_vector_iterate(vector, ctx); diff --git a/src/parse/properties/background_position.c b/src/parse/properties/background_position.c index 6932c05..1d87e6a 100644 --- a/src/parse/properties/background_position.c +++ b/src/parse/properties/background_position.c @@ -28,10 +28,10 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_background_position(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error; const css_token *token; uint8_t flags = 0; @@ -54,6 +54,24 @@ css_error css__parse_background_position(css_language *c, &match) == lwc_error_ok && match)) { parserutils_vector_iterate(vector, ctx); flags = FLAG_INHERIT; + } else if (token->type == CSS_TOKEN_IDENT && + (lwc_string_caseless_isequal( + token->idata, c->strings[INITIAL], + &match) == lwc_error_ok && match)) { + parserutils_vector_iterate(vector, ctx); + flags = FLAG_INITIAL; + } else if (token->type == CSS_TOKEN_IDENT && + (lwc_string_caseless_isequal( + token->idata, c->strings[REVERT], + &match) == lwc_error_ok && match)) { + parserutils_vector_iterate(vector, ctx); + flags = FLAG_REVERT; + } else if (token->type == CSS_TOKEN_IDENT && + (lwc_string_caseless_isequal( + token->idata, c->strings[UNSET], + &match) == lwc_error_ok && match)) { + parserutils_vector_iterate(vector, ctx); + flags = FLAG_UNSET; } else { int i; diff --git a/src/parse/properties/border.c b/src/parse/properties/border.c index 26cdbcd..be269ab 100644 --- a/src/parse/properties/border.c +++ b/src/parse/properties/border.c @@ -28,10 +28,10 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_border(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error; error = css__parse_border_side(c, vector, ctx, result, BORDER_SIDE_TOP); diff --git a/src/parse/properties/border_color.c b/src/parse/properties/border_color.c index 28d30b7..60b401e 100644 --- a/src/parse/properties/border_color.c +++ b/src/parse/properties/border_color.c @@ -28,15 +28,16 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_border_color(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; int prev_ctx; const css_token *token; uint16_t side_val[4]; uint32_t side_color[4]; uint32_t side_count = 0; + enum flag_value flag_value; css_error error; /* Firstly, handle inherit */ @@ -44,20 +45,26 @@ css_error css__parse_border_color(css_language *c, if (token == NULL) return CSS_INVALID; - if (is_css_inherit(c, token)) { - error = css_stylesheet_style_inherit(result, CSS_PROP_BORDER_TOP_COLOR); + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_BORDER_TOP_COLOR); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_BORDER_RIGHT_COLOR); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_BORDER_RIGHT_COLOR); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_BORDER_BOTTOM_COLOR); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_BORDER_BOTTOM_COLOR); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_BORDER_LEFT_COLOR); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_BORDER_LEFT_COLOR); if (error == CSS_OK) parserutils_vector_iterate(vector, ctx); diff --git a/src/parse/properties/border_spacing.c b/src/parse/properties/border_spacing.c index 2322a5a..e00fb27 100644 --- a/src/parse/properties/border_spacing.c +++ b/src/parse/properties/border_spacing.c @@ -28,15 +28,15 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_border_spacing(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error; const css_token *token; css_fixed length[2] = { 0 }; uint32_t unit[2] = { 0 }; - bool match; + enum flag_value flag_value; /* length length? | IDENT(inherit) */ token = parserutils_vector_peek(vector, *ctx); @@ -45,16 +45,13 @@ css_error css__parse_border_spacing(css_language *c, return CSS_INVALID; } - if (token->type == CSS_TOKEN_IDENT && - (lwc_string_caseless_isequal( - token->idata, c->strings[INHERIT], - &match) == lwc_error_ok && match)) { + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { parserutils_vector_iterate(vector, ctx); /* inherit */ - error = css__stylesheet_style_appendOPV(result, - CSS_PROP_BORDER_SPACING, - FLAG_INHERIT, - 0); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_BORDER_SPACING); } else { int num_lengths = 0; diff --git a/src/parse/properties/border_style.c b/src/parse/properties/border_style.c index a0d264d..4d54900 100644 --- a/src/parse/properties/border_style.c +++ b/src/parse/properties/border_style.c @@ -28,36 +28,43 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_border_style(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; int prev_ctx; const css_token *token; uint16_t side_val[4]; uint32_t side_count = 0; bool match; css_error error; + enum flag_value flag_value; /* Firstly, handle inherit */ token = parserutils_vector_peek(vector, *ctx); if (token == NULL) return CSS_INVALID; - if (is_css_inherit(c, token)) { - error = css_stylesheet_style_inherit(result, CSS_PROP_BORDER_TOP_STYLE); + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_BORDER_TOP_STYLE); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_BORDER_RIGHT_STYLE); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_BORDER_RIGHT_STYLE); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_BORDER_BOTTOM_STYLE); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_BORDER_BOTTOM_STYLE); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_BORDER_LEFT_STYLE); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_BORDER_LEFT_STYLE); if (error == CSS_OK) parserutils_vector_iterate(vector, ctx); diff --git a/src/parse/properties/border_width.c b/src/parse/properties/border_width.c index bc911c9..b11ca05 100644 --- a/src/parse/properties/border_width.c +++ b/src/parse/properties/border_width.c @@ -28,10 +28,10 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_border_width(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; int prev_ctx; const css_token *token; uint16_t side_val[4]; @@ -40,26 +40,33 @@ css_error css__parse_border_width(css_language *c, uint32_t side_count = 0; bool match; css_error error; + enum flag_value flag_value; /* Firstly, handle inherit */ token = parserutils_vector_peek(vector, *ctx); if (token == NULL) return CSS_INVALID; - if (is_css_inherit(c, token)) { - error = css_stylesheet_style_inherit(result, CSS_PROP_BORDER_TOP_WIDTH); + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_BORDER_TOP_WIDTH); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_BORDER_RIGHT_WIDTH); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_BORDER_RIGHT_WIDTH); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_BORDER_BOTTOM_WIDTH); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_BORDER_BOTTOM_WIDTH); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_BORDER_LEFT_WIDTH); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_BORDER_LEFT_WIDTH); if (error == CSS_OK) parserutils_vector_iterate(vector, ctx); diff --git a/src/parse/properties/clip.c b/src/parse/properties/clip.c index 7862d4a..4bf653d 100644 --- a/src/parse/properties/clip.c +++ b/src/parse/properties/clip.c @@ -28,15 +28,16 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_clip(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error; const css_token *token; int num_lengths = 0; css_fixed length[4] = { 0 }; uint32_t unit[4] = { 0 }; + enum flag_value flag_value; bool match; /* FUNCTION(rect) [ [ IDENT(auto) | length ] CHAR(,)? ]{3} @@ -48,14 +49,12 @@ css_error css__parse_clip(css_language *c, return CSS_INVALID; } - if ((token->type == CSS_TOKEN_IDENT) && - (lwc_string_caseless_isequal( - token->idata, c->strings[INHERIT], - &match) == lwc_error_ok && match)) { - error = css__stylesheet_style_appendOPV(result, - CSS_PROP_CLIP, - FLAG_INHERIT, - 0); + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, + flag_value, CSS_PROP_CLIP); + } else if ((token->type == CSS_TOKEN_IDENT) && (lwc_string_caseless_isequal( token->idata, c->strings[AUTO], diff --git a/src/parse/properties/column_rule.c b/src/parse/properties/column_rule.c index ba57565..7bfcad5 100644 --- a/src/parse/properties/column_rule.c +++ b/src/parse/properties/column_rule.c @@ -28,10 +28,10 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_column_rule(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; int prev_ctx; const css_token *token; css_error error; @@ -41,26 +41,28 @@ css_error css__parse_column_rule(css_language *c, css_style *color_style; css_style *style_style; css_style *width_style; + enum flag_value flag_value; /* Firstly, handle inherit */ token = parserutils_vector_peek(vector, *ctx); if (token == NULL) return CSS_INVALID; - if (is_css_inherit(c, token)) { - error = css_stylesheet_style_inherit(result, + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, flag_value, CSS_PROP_COLUMN_RULE_COLOR); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, + error = css_stylesheet_style_flag_value(result, flag_value, CSS_PROP_COLUMN_RULE_STYLE); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, + error = css_stylesheet_style_flag_value(result, flag_value, CSS_PROP_COLUMN_RULE_WIDTH); - if (error == CSS_OK) parserutils_vector_iterate(vector, ctx); diff --git a/src/parse/properties/columns.c b/src/parse/properties/columns.c index b245740..277a305 100644 --- a/src/parse/properties/columns.c +++ b/src/parse/properties/columns.c @@ -28,10 +28,10 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_columns(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; int prev_ctx; const css_token *token; css_error error = CSS_OK; @@ -39,19 +39,22 @@ css_error css__parse_columns(css_language *c, bool count = true; css_style *width_style; css_style *count_style; + enum flag_value flag_value; /* Firstly, handle inherit */ token = parserutils_vector_peek(vector, *ctx); if (token == NULL) return CSS_INVALID; - if (is_css_inherit(c, token)) { - error = css_stylesheet_style_inherit(result, + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, flag_value, CSS_PROP_COLUMN_WIDTH); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, + error = css_stylesheet_style_flag_value(result, flag_value, CSS_PROP_COLUMN_COUNT); if (error == CSS_OK) parserutils_vector_iterate(vector, ctx); diff --git a/src/parse/properties/content.c b/src/parse/properties/content.c index 10f221f..b32de22 100644 --- a/src/parse/properties/content.c +++ b/src/parse/properties/content.c @@ -29,12 +29,13 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_content(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error; const css_token *token; + enum flag_value flag_value; bool match; /* IDENT(normal, none, inherit) | [ ... ]+ */ @@ -44,12 +45,11 @@ css_error css__parse_content(css_language *c, return CSS_INVALID; } + flag_value = get_css_flag_value(c, token); - if ((token->type == CSS_TOKEN_IDENT) && - (lwc_string_caseless_isequal(token->idata, - c->strings[INHERIT], - &match) == lwc_error_ok && match)) { - error = css_stylesheet_style_inherit(result, CSS_PROP_CONTENT); + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_CONTENT); } else if ((token->type == CSS_TOKEN_IDENT) && (lwc_string_caseless_isequal(token->idata, c->strings[NORMAL], diff --git a/src/parse/properties/css_property_parser_gen.c b/src/parse/properties/css_property_parser_gen.c index 0e6ce72..3e1d997 100644 --- a/src/parse/properties/css_property_parser_gen.c +++ b/src/parse/properties/css_property_parser_gen.c @@ -106,7 +106,7 @@ void output_header(FILE *outputf, const char *descriptor, struct keyval *parser_ " * If the input is invalid, then \\a *ctx remains unchanged.\n" " */\n" "css_error css__parse_%s(css_language *c,\n" - " const parserutils_vector *vector, int *ctx,\n" + " const parserutils_vector *vector, int32_t *ctx,\n" " css_style *result%s)\n" "{\n", descriptor, @@ -120,7 +120,7 @@ void output_header(FILE *outputf, const char *descriptor, struct keyval *parser_ void output_token_type_check(FILE *outputf, bool do_token_check, struct keyval_list *IDENT, struct keyval_list *URI, struct keyval_list *NUMBER) { fprintf(outputf, - " int orig_ctx = *ctx;\n" + " int32_t orig_ctx = *ctx;\n" " css_error error;\n" " const css_token *token;\n" " bool match;\n\n" @@ -169,18 +169,38 @@ void output_ident(FILE *outputf, bool only_ident, struct keyval *parseid, struct "if ("); if (!only_ident) { fprintf(outputf, - "(token->type == CSS_TOKEN_IDENT) && "); + "(token->type == CSS_TOKEN_IDENT) &&\n\t\t\t"); } fprintf(outputf, - "(lwc_string_caseless_isequal(token->idata, c->strings[%s], &match) == lwc_error_ok && match)) {\n", + "(lwc_string_caseless_isequal(\n" + "\t\t\ttoken->idata, c->strings[%s],\n" + "\t\t\t&match) == lwc_error_ok && match)) {\n", ckv->key); if (strcmp(ckv->key,"INHERIT") == 0) { fprintf(outputf, - "\t\t\terror = css_stylesheet_style_inherit(result, %s);\n", + "\t\terror = css_stylesheet_style_inherit(result,\n" + "\t\t\t\t%s);\n\n", + parseid->val); + } else if (strcmp(ckv->key,"INITIAL") == 0) { + fprintf(outputf, + "\t\terror = css_stylesheet_style_initial(result,\n" + "\t\t\t\t%s);\n\n", + parseid->val); + } else if (strcmp(ckv->key,"REVERT") == 0) { + fprintf(outputf, + "\t\terror = css_stylesheet_style_revert(result,\n" + "\t\t\t\t%s);\n\n", + parseid->val); + } else if (strcmp(ckv->key,"UNSET") == 0) { + fprintf(outputf, + "\t\terror = css_stylesheet_style_unset(result,\n" + "\t\t\t\t%s);\n\n", parseid->val); } else { fprintf(outputf, - "\t\t\terror = css__stylesheet_style_appendOPV(result, %s, %s);\n", + "\t\terror = css__stylesheet_style_appendOPV(result,\n" + "\t\t\t\t%s,\n" + "\t\t\t\t%s);\n\n", parseid->val, ckv->val); } @@ -326,6 +346,13 @@ void output_length_unit(FILE *outputf, struct keyval *parseid, struct keyval_lis "\t\t\treturn CSS_INVALID;\n" "\t\t}\n\n", ulkv->val); + } else if (strcmp(ulkv->key, "MASK") == 0) { + fprintf(outputf, + "\t\tif ((unit & %s ) == 0) {\n" + "\t\t\t*ctx = orig_ctx;\n" + "\t\t\treturn CSS_INVALID;\n" + "\t\t}\n\n", + ulkv->val); } else if (strcmp(ulkv->key, "RANGE") == 0) { fprintf(outputf, "\t\tif (length %s) {\n" @@ -459,10 +486,22 @@ void output_wrap(FILE *outputf, struct keyval *parseid, struct keyval_list *WRAP } char str_INHERIT[] = "INHERIT"; +char str_INITIAL[] = "INITIAL"; +char str_REVERT[] = "REVERT"; +char str_UNSET[] = "UNSET"; struct keyval ident_inherit = { .key = str_INHERIT, }; +struct keyval ident_initial = { + .key = str_INITIAL, +}; +struct keyval ident_unset = { + .key = str_UNSET, +}; +struct keyval ident_revert = { + .key = str_REVERT, +}; int main(int argc, char **argv) { @@ -547,6 +586,12 @@ int main(int argc, char **argv) curlist = &base; } else if (strcmp(rkv->val, str_INHERIT) == 0) { IDENT.item[IDENT.count++] = &ident_inherit; + } else if (strcmp(rkv->val, str_INITIAL) == 0) { + IDENT.item[IDENT.count++] = &ident_initial; + } else if (strcmp(rkv->val, str_REVERT) == 0) { + IDENT.item[IDENT.count++] = &ident_revert; + } else if (strcmp(rkv->val, str_UNSET) == 0) { + IDENT.item[IDENT.count++] = &ident_unset; } } else if (strcmp(rkv->key, "IDENT_LIST") == 0) { if (rkv->val[0] == '(') { diff --git a/src/parse/properties/cue.c b/src/parse/properties/cue.c index eef10d1..db64412 100644 --- a/src/parse/properties/cue.c +++ b/src/parse/properties/cue.c @@ -28,10 +28,10 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_cue(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error; const css_token *first_token; const css_token *token; @@ -57,15 +57,23 @@ css_error css__parse_cue(css_language *c, error = css__parse_cue_after(c, vector, ctx, result); } else { /* second token - might be useful */ - if (is_css_inherit(c, token)) { - /* another inherit which is bogus */ + enum flag_value flag_value; + + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + /* another generic property reset value + * which is bogus */ error = CSS_INVALID; } else { error = css__parse_cue_after(c, vector, ctx, result); if (error == CSS_OK) { /* second token parsed */ - if (is_css_inherit(c, first_token)) { - /* valid second token after inherit */ + flag_value = get_css_flag_value(c, first_token); + + if (flag_value != FLAG_VALUE__NONE) { + /* valid second token after + * generic property reset value */ error = CSS_INVALID; } } else { diff --git a/src/parse/properties/cursor.c b/src/parse/properties/cursor.c index ad3ac47..b61d9a9 100644 --- a/src/parse/properties/cursor.c +++ b/src/parse/properties/cursor.c @@ -27,12 +27,13 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_cursor(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error = CSS_OK; const css_token *token; + enum flag_value flag_value; bool match; /* [ (URI ',')* IDENT(auto, crosshair, default, pointer, move, e-resize, @@ -48,11 +49,11 @@ css_error css__parse_cursor(css_language *c, return CSS_INVALID; } - if ((token->type == CSS_TOKEN_IDENT) && - (lwc_string_caseless_isequal(token->idata, - c->strings[INHERIT], - &match) == lwc_error_ok && match)) { - error = css_stylesheet_style_inherit(result, CSS_PROP_CURSOR); + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_CURSOR); } else { bool first = true; diff --git a/src/parse/properties/elevation.c b/src/parse/properties/elevation.c index fea35a3..b456799 100644 --- a/src/parse/properties/elevation.c +++ b/src/parse/properties/elevation.c @@ -28,10 +28,10 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_elevation(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error; const css_token *token; uint8_t flags = 0; @@ -55,6 +55,24 @@ css_error css__parse_elevation(css_language *c, flags = FLAG_INHERIT; } else if (token->type == CSS_TOKEN_IDENT && (lwc_string_caseless_isequal( + token->idata, c->strings[INITIAL], + &match) == lwc_error_ok && match)) { + parserutils_vector_iterate(vector, ctx); + flags = FLAG_INITIAL; + } else if (token->type == CSS_TOKEN_IDENT && + (lwc_string_caseless_isequal( + token->idata, c->strings[REVERT], + &match) == lwc_error_ok && match)) { + parserutils_vector_iterate(vector, ctx); + flags = FLAG_REVERT; + } else if (token->type == CSS_TOKEN_IDENT && + (lwc_string_caseless_isequal( + token->idata, c->strings[UNSET], + &match) == lwc_error_ok && match)) { + parserutils_vector_iterate(vector, ctx); + flags = FLAG_UNSET; + } else if (token->type == CSS_TOKEN_IDENT && + (lwc_string_caseless_isequal( token->idata, c->strings[BELOW], &match) == lwc_error_ok && match)) { parserutils_vector_iterate(vector, ctx); diff --git a/src/parse/properties/fill_opacity.c b/src/parse/properties/fill_opacity.c new file mode 100644 index 0000000..caed86f --- /dev/null +++ b/src/parse/properties/fill_opacity.c @@ -0,0 +1,82 @@ +/* + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + */ + +#include <assert.h> +#include <string.h> + +#include "bytecode/bytecode.h" +#include "bytecode/opcodes.h" +#include "parse/properties/properties.h" +#include "parse/properties/utils.h" + +/** + * Parse fill-opacity + * + * \param c Parsing context + * \param vector Vector of tokens to process + * \param ctx Pointer to vector iteration context + * \param result resulting style + * \return CSS_OK on success, + * CSS_NOMEM on memory exhaustion, + * CSS_INVALID if the input is not valid + * + * Post condition: \a *ctx is updated with the next token to process + * If the input is invalid, then \a *ctx remains unchanged. + */ +css_error css__parse_fill_opacity(css_language *c, + const parserutils_vector *vector, int32_t *ctx, + css_style *result) +{ + int32_t orig_ctx = *ctx; + css_error error; + const css_token *token; + enum flag_value flag_value; + + token = parserutils_vector_iterate(vector, ctx); + if ((token == NULL) || ((token->type != CSS_TOKEN_IDENT) && (token->type != CSS_TOKEN_NUMBER))) { + *ctx = orig_ctx; + return CSS_INVALID; + } + + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_FILL_OPACITY); + + } else if (token->type == CSS_TOKEN_NUMBER) { + css_fixed num = 0; + size_t consumed = 0; + + num = css__number_from_lwc_string(token->idata, false, &consumed); + /* Invalid if there are trailing characters */ + if (consumed != lwc_string_length(token->idata)) { + *ctx = orig_ctx; + return CSS_INVALID; + } + + /* Clamp to range [0,1] */ + if (num < 0) + num = 0; + if (num > INTTOFIX(1)) + num = INTTOFIX(1); + + error = css__stylesheet_style_appendOPV(result, CSS_PROP_FILL_OPACITY, 0, FILL_OPACITY_SET); + if (error != CSS_OK) { + *ctx = orig_ctx; + return error; + } + + error = css__stylesheet_style_append(result, num); + } else { + error = CSS_INVALID; + } + + if (error != CSS_OK) + *ctx = orig_ctx; + + return error; +} + diff --git a/src/parse/properties/flex.c b/src/parse/properties/flex.c index 9e284d9..a29309b 100644 --- a/src/parse/properties/flex.c +++ b/src/parse/properties/flex.c @@ -29,10 +29,10 @@ */ css_error css__parse_flex(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; int prev_ctx; const css_token *token; css_error error; @@ -44,29 +44,30 @@ css_error css__parse_flex(css_language *c, css_style *basis_style; bool short_auto = false; bool short_none = false; + enum flag_value flag_value; bool match; /* Firstly, handle inherit */ token = parserutils_vector_peek(vector, *ctx); if (token == NULL) return CSS_INVALID; - - if (is_css_inherit(c, token)) { - error = css_stylesheet_style_inherit(result, + + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, flag_value, CSS_PROP_FLEX_GROW); - if (error != CSS_OK) + if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, + error = css_stylesheet_style_flag_value(result, flag_value, CSS_PROP_FLEX_SHRINK); - - if (error != CSS_OK) + if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, + error = css_stylesheet_style_flag_value(result, flag_value, CSS_PROP_FLEX_BASIS); - - if (error == CSS_OK) + if (error == CSS_OK) parserutils_vector_iterate(vector, ctx); return error; diff --git a/src/parse/properties/flex_flow.c b/src/parse/properties/flex_flow.c index 6a83e15..a5e2926 100644 --- a/src/parse/properties/flex_flow.c +++ b/src/parse/properties/flex_flow.c @@ -29,10 +29,10 @@ */ css_error css__parse_flex_flow(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; int prev_ctx; const css_token *token; css_error error; @@ -40,26 +40,28 @@ css_error css__parse_flex_flow(css_language *c, bool wrap = true; css_style *direction_style; css_style *wrap_style; + enum flag_value flag_value; /* Firstly, handle inherit */ token = parserutils_vector_peek(vector, *ctx); if (token == NULL) return CSS_INVALID; - - if (is_css_inherit(c, token)) { - error = css_stylesheet_style_inherit(result, + + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, flag_value, CSS_PROP_FLEX_DIRECTION); - if (error != CSS_OK) + if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, + error = css_stylesheet_style_flag_value(result, flag_value, CSS_PROP_FLEX_WRAP); - - if (error == CSS_OK) + if (error == CSS_OK) parserutils_vector_iterate(vector, ctx); return error; - } + } /* allocate styles */ error = css__stylesheet_style_create(c->sheet, &direction_style); @@ -107,15 +109,21 @@ css_error css__parse_flex_flow(css_language *c, /* defaults */ if (direction) { - error = css__stylesheet_style_appendOPV(direction_style, + error = css__stylesheet_style_appendOPV(direction_style, CSS_PROP_FLEX_DIRECTION, 0, FLEX_DIRECTION_ROW); + if (error != CSS_OK) { + goto css__parse_flex_flow_cleanup; + } } if (wrap) { - error = css__stylesheet_style_appendOPV(wrap_style, + error = css__stylesheet_style_appendOPV(wrap_style, CSS_PROP_FLEX_WRAP, 0, FLEX_WRAP_NOWRAP); + if (error != CSS_OK) { + goto css__parse_flex_flow_cleanup; + } } error = css__stylesheet_merge_style(result, direction_style); diff --git a/src/parse/properties/font.c b/src/parse/properties/font.c index 9903f75..16a6cc4 100644 --- a/src/parse/properties/font.c +++ b/src/parse/properties/font.c @@ -13,6 +13,42 @@ #include "parse/properties/properties.h" #include "parse/properties/utils.h" +/** + * Convert css_unit to a bytecode unit. + */ +static inline uint32_t css__to_parse_unit(css_unit u) +{ + switch (u) { + case CSS_UNIT_PX: return UNIT_PX; + case CSS_UNIT_EX: return UNIT_EX; + case CSS_UNIT_EM: return UNIT_EM; + case CSS_UNIT_IN: return UNIT_IN; + case CSS_UNIT_CM: return UNIT_CM; + case CSS_UNIT_MM: return UNIT_MM; + case CSS_UNIT_PT: return UNIT_PT; + case CSS_UNIT_PC: return UNIT_PC; + case CSS_UNIT_CH: return UNIT_CH; + case CSS_UNIT_REM: return UNIT_REM; + case CSS_UNIT_LH: return UNIT_LH; + case CSS_UNIT_VH: return UNIT_VH; + case CSS_UNIT_VW: return UNIT_VW; + case CSS_UNIT_VI: return UNIT_VI; + case CSS_UNIT_VB: return UNIT_VB; + case CSS_UNIT_VMIN: return UNIT_VMIN; + case CSS_UNIT_VMAX: return UNIT_VMAX; + case CSS_UNIT_Q: return UNIT_Q; + case CSS_UNIT_PCT: return UNIT_PCT; + case CSS_UNIT_DEG: return UNIT_DEG; + case CSS_UNIT_GRAD: return UNIT_GRAD; + case CSS_UNIT_RAD: return UNIT_RAD; + case CSS_UNIT_MS: return UNIT_MS; + case CSS_UNIT_S: return UNIT_S; + case CSS_UNIT_HZ: return UNIT_HZ; + case CSS_UNIT_KHZ: return UNIT_KHZ; + } + + return 0; +} static css_error parse_system_font(css_language *c, css_style *result, css_system_font *system_font) @@ -124,7 +160,9 @@ static css_error parse_system_font(css_language *c, if (error != CSS_OK) return error; - error = css__stylesheet_style_vappend(result, 2, system_font->size.size, system_font->size.unit); + error = css__stylesheet_style_vappend(result, 2, + system_font->size.size, + css__to_parse_unit(system_font->size.unit)); if (error != CSS_OK) return error; @@ -133,7 +171,9 @@ static css_error parse_system_font(css_language *c, if (error != CSS_OK) return error; - error = css__stylesheet_style_vappend(result, 2, system_font->line_height.size, system_font->line_height.unit); + error = css__stylesheet_style_vappend(result, 2, + system_font->line_height.size, + css__to_parse_unit(system_font->line_height.unit)); if (error != CSS_OK) return error; @@ -184,12 +224,12 @@ static css_error parse_system_font(css_language *c, * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_font(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { const css_token *token; css_error error; - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; int prev_ctx; css_system_font system_font; @@ -203,6 +243,7 @@ css_error css__parse_font(css_language *c, css_style *size_style; css_style *line_height_style; css_style *family_style; + enum flag_value flag_value; int svw; /* Firstly, handle inherit */ @@ -210,28 +251,36 @@ css_error css__parse_font(css_language *c, if (token == NULL) return CSS_INVALID; - if (is_css_inherit(c, token)) { - error = css_stylesheet_style_inherit(result, CSS_PROP_FONT_STYLE); + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_FONT_STYLE); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_FONT_VARIANT); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_FONT_VARIANT); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_FONT_WEIGHT); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_FONT_WEIGHT); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_FONT_SIZE); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_FONT_SIZE); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_LINE_HEIGHT); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_LINE_HEIGHT); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_FONT_FAMILY); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_FONT_FAMILY); if (error == CSS_OK) parserutils_vector_iterate(vector, ctx); @@ -247,6 +296,9 @@ css_error css__parse_font(css_language *c, error = parse_system_font(c, result, &system_font); + lwc_string_unref(system_font.family); + system_font.family = NULL; + if (error == CSS_OK) parserutils_vector_iterate(vector, ctx); diff --git a/src/parse/properties/font_family.c b/src/parse/properties/font_family.c index 23c080b..2f8782e 100644 --- a/src/parse/properties/font_family.c +++ b/src/parse/properties/font_family.c @@ -99,10 +99,10 @@ static css_code_t font_family_value(css_language *c, const css_token *token, boo * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_font_family(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error; const css_token *token; bool match; @@ -127,7 +127,30 @@ css_error css__parse_font_family(css_language *c, (lwc_string_caseless_isequal( token->idata, c->strings[INHERIT], &match) == lwc_error_ok && match)) { - error = css_stylesheet_style_inherit(result, CSS_PROP_FONT_FAMILY); + error = css_stylesheet_style_inherit(result, + CSS_PROP_FONT_FAMILY); + + } else if ((token->type == CSS_TOKEN_IDENT) && + (lwc_string_caseless_isequal( + token->idata, c->strings[INITIAL], + &match) == lwc_error_ok && match)) { + error = css_stylesheet_style_initial(result, + CSS_PROP_FONT_FAMILY); + + } else if ((token->type == CSS_TOKEN_IDENT) && + (lwc_string_caseless_isequal( + token->idata, c->strings[REVERT], + &match) == lwc_error_ok && match)) { + error = css_stylesheet_style_revert(result, + CSS_PROP_FONT_FAMILY); + + } else if ((token->type == CSS_TOKEN_IDENT) && + (lwc_string_caseless_isequal( + token->idata, c->strings[UNSET], + &match) == lwc_error_ok && match)) { + error = css_stylesheet_style_unset(result, + CSS_PROP_FONT_FAMILY); + } else { *ctx = orig_ctx; diff --git a/src/parse/properties/font_weight.c b/src/parse/properties/font_weight.c index 8e57e5f..77ec9a1 100644 --- a/src/parse/properties/font_weight.c +++ b/src/parse/properties/font_weight.c @@ -28,10 +28,10 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_font_weight(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error; const css_token *token; uint8_t flags = 0; @@ -47,10 +47,29 @@ css_error css__parse_font_weight(css_language *c, return CSS_INVALID; } - if ((lwc_string_caseless_isequal( + if ((token->type == CSS_TOKEN_IDENT) && + (lwc_string_caseless_isequal( token->idata, c->strings[INHERIT], &match) == lwc_error_ok && match)) { flags |= FLAG_INHERIT; + } else if ((token->type == CSS_TOKEN_IDENT) && + (lwc_string_caseless_isequal( + token->idata, c->strings[INITIAL], + &match) == lwc_error_ok && match)) { + flags |= FLAG_INITIAL; + + } else if ((token->type == CSS_TOKEN_IDENT) && + (lwc_string_caseless_isequal( + token->idata, c->strings[REVERT], + &match) == lwc_error_ok && match)) { + flags |= FLAG_REVERT; + + } else if ((token->type == CSS_TOKEN_IDENT) && + (lwc_string_caseless_isequal( + token->idata, c->strings[UNSET], + &match) == lwc_error_ok && match)) { + flags |= FLAG_UNSET; + } else if (token->type == CSS_TOKEN_NUMBER) { size_t consumed = 0; css_fixed num = css__number_from_lwc_string(token->idata, diff --git a/src/parse/properties/list_style.c b/src/parse/properties/list_style.c index f12fa2e..1cb373a 100644 --- a/src/parse/properties/list_style.c +++ b/src/parse/properties/list_style.c @@ -28,10 +28,10 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_list_style(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; int prev_ctx; const css_token *token; css_error error; @@ -41,23 +41,28 @@ css_error css__parse_list_style(css_language *c, css_style *image_style; css_style *position_style; css_style *type_style; + enum flag_value flag_value; /* Firstly, handle inherit */ token = parserutils_vector_peek(vector, *ctx); if (token == NULL) return CSS_INVALID; - if (is_css_inherit(c, token)) { - error = css_stylesheet_style_inherit(result, CSS_PROP_LIST_STYLE_IMAGE); + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_LIST_STYLE_IMAGE); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_LIST_STYLE_POSITION); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_LIST_STYLE_POSITION); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_LIST_STYLE_TYPE); - + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_LIST_STYLE_TYPE); if (error == CSS_OK) parserutils_vector_iterate(vector, ctx); @@ -122,20 +127,29 @@ css_error css__parse_list_style(css_language *c, /* defaults */ if (image) { error = css__stylesheet_style_appendOPV(image_style, - CSS_PROP_LIST_STYLE_IMAGE, + CSS_PROP_LIST_STYLE_IMAGE, 0, LIST_STYLE_IMAGE_NONE); + if (error != CSS_OK) { + goto css__parse_list_style_cleanup; + } } if (position) { error = css__stylesheet_style_appendOPV(position_style, - CSS_PROP_LIST_STYLE_POSITION, + CSS_PROP_LIST_STYLE_POSITION, 0, LIST_STYLE_POSITION_OUTSIDE); + if (error != CSS_OK) { + goto css__parse_list_style_cleanup; + } } if (type) { error = css__stylesheet_style_appendOPV(type_style, - CSS_PROP_LIST_STYLE_TYPE, + CSS_PROP_LIST_STYLE_TYPE, 0, LIST_STYLE_TYPE_DISC); + if (error != CSS_OK) { + goto css__parse_list_style_cleanup; + } } diff --git a/src/parse/properties/list_style_type.c b/src/parse/properties/list_style_type.c index ccaa133..eb7f363 100644 --- a/src/parse/properties/list_style_type.c +++ b/src/parse/properties/list_style_type.c @@ -28,10 +28,10 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_list_style_type(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error; const css_token *ident; uint8_t flags = 0; @@ -49,10 +49,26 @@ css_error css__parse_list_style_type(css_language *c, return CSS_INVALID; } - if ((lwc_string_caseless_isequal( + if (ident->type == CSS_TOKEN_IDENT && + (lwc_string_caseless_isequal( ident->idata, c->strings[INHERIT], &match) == lwc_error_ok && match)) { flags |= FLAG_INHERIT; + } else if (ident->type == CSS_TOKEN_IDENT && + (lwc_string_caseless_isequal( + ident->idata, c->strings[INITIAL], + &match) == lwc_error_ok && match)) { + flags = FLAG_INITIAL; + } else if (ident->type == CSS_TOKEN_IDENT && + (lwc_string_caseless_isequal( + ident->idata, c->strings[REVERT], + &match) == lwc_error_ok && match)) { + flags = FLAG_REVERT; + } else if (ident->type == CSS_TOKEN_IDENT && + (lwc_string_caseless_isequal( + ident->idata, c->strings[UNSET], + &match) == lwc_error_ok && match)) { + flags = FLAG_UNSET; } else { error = css__parse_list_style_type_value(c, ident, &value); if (error != CSS_OK) { diff --git a/src/parse/properties/margin.c b/src/parse/properties/margin.c index 7817d50..1ee56f7 100644 --- a/src/parse/properties/margin.c +++ b/src/parse/properties/margin.c @@ -28,10 +28,10 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_margin(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; int prev_ctx; const css_token *token; uint16_t side_val[4]; @@ -40,26 +40,33 @@ css_error css__parse_margin(css_language *c, uint32_t side_count = 0; bool match; css_error error; + enum flag_value flag_value; /* Firstly, handle inherit */ token = parserutils_vector_peek(vector, *ctx); if (token == NULL) return CSS_INVALID; - if (is_css_inherit(c, token)) { - error = css_stylesheet_style_inherit(result, CSS_PROP_MARGIN_TOP); + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_MARGIN_TOP); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_MARGIN_RIGHT); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_MARGIN_RIGHT); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_MARGIN_BOTTOM); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_MARGIN_BOTTOM); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_MARGIN_LEFT); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_MARGIN_LEFT); if (error == CSS_OK) parserutils_vector_iterate(vector, ctx); @@ -70,7 +77,9 @@ css_error css__parse_margin(css_language *c, do { prev_ctx = *ctx; - if ((token != NULL) && is_css_inherit(c, token)) { + flag_value = get_css_flag_value(c, token); + + if ((token != NULL) && flag_value != FLAG_VALUE__NONE) { *ctx = orig_ctx; return CSS_INVALID; } diff --git a/src/parse/properties/opacity.c b/src/parse/properties/opacity.c index e8b7c3e..22acd76 100644 --- a/src/parse/properties/opacity.c +++ b/src/parse/properties/opacity.c @@ -27,13 +27,13 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_opacity(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error; const css_token *token; - bool match; + enum flag_value flag_value; token = parserutils_vector_iterate(vector, ctx); if ((token == NULL) || ((token->type != CSS_TOKEN_IDENT) && (token->type != CSS_TOKEN_NUMBER))) { @@ -41,8 +41,12 @@ css_error css__parse_opacity(css_language *c, return CSS_INVALID; } - if ((token->type == CSS_TOKEN_IDENT) && (lwc_string_caseless_isequal(token->idata, c->strings[INHERIT], &match) == lwc_error_ok && match)) { - error = css_stylesheet_style_inherit(result, CSS_PROP_OPACITY); + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_OPACITY); + } else if (token->type == CSS_TOKEN_NUMBER) { css_fixed num = 0; size_t consumed = 0; diff --git a/src/parse/properties/outline.c b/src/parse/properties/outline.c index d9d9ec2..ac91ffd 100644 --- a/src/parse/properties/outline.c +++ b/src/parse/properties/outline.c @@ -28,10 +28,10 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_outline(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; int prev_ctx; const css_token *token; css_error error; @@ -41,23 +41,28 @@ css_error css__parse_outline(css_language *c, css_style *color_style; css_style *style_style; css_style *width_style; + enum flag_value flag_value; /* Firstly, handle inherit */ token = parserutils_vector_peek(vector, *ctx); if (token == NULL) return CSS_INVALID; - if (is_css_inherit(c, token)) { - error = css_stylesheet_style_inherit(result, CSS_PROP_OUTLINE_COLOR); + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_OUTLINE_COLOR); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_OUTLINE_STYLE); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_OUTLINE_STYLE); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_OUTLINE_WIDTH); - + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_OUTLINE_WIDTH); if (error == CSS_OK) parserutils_vector_iterate(vector, ctx); @@ -122,20 +127,29 @@ css_error css__parse_outline(css_language *c, /* defaults */ if (color) { error = css__stylesheet_style_appendOPV(color_style, - CSS_PROP_OUTLINE_COLOR, + CSS_PROP_OUTLINE_COLOR, 0, OUTLINE_COLOR_INVERT); + if (error != CSS_OK) { + goto css__parse_outline_cleanup; + } } if (style) { error = css__stylesheet_style_appendOPV(style_style, - CSS_PROP_OUTLINE_STYLE, + CSS_PROP_OUTLINE_STYLE, 0, OUTLINE_STYLE_NONE); + if (error != CSS_OK) { + goto css__parse_outline_cleanup; + } } if (width) { error = css__stylesheet_style_appendOPV(width_style, - CSS_PROP_OUTLINE_WIDTH, + CSS_PROP_OUTLINE_WIDTH, 0, OUTLINE_WIDTH_MEDIUM); + if (error != CSS_OK) { + goto css__parse_outline_cleanup; + } } diff --git a/src/parse/properties/overflow.c b/src/parse/properties/overflow.c index ca133ed..dbb373a 100644 --- a/src/parse/properties/overflow.c +++ b/src/parse/properties/overflow.c @@ -28,12 +28,13 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_overflow(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error1, error2 = CSS_OK; const css_token *token; + enum flag_value flag_value; bool match; token = parserutils_vector_iterate(vector, ctx); @@ -42,12 +43,12 @@ css_error css__parse_overflow(css_language *c, return CSS_INVALID; } - if ((lwc_string_caseless_isequal(token->idata, - c->strings[INHERIT], &match) == lwc_error_ok && - match)) { - error1 = css_stylesheet_style_inherit(result, + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error1 = css_stylesheet_style_flag_value(result, flag_value, CSS_PROP_OVERFLOW_X); - error2 = css_stylesheet_style_inherit(result, + error2 = css_stylesheet_style_flag_value(result, flag_value, CSS_PROP_OVERFLOW_Y); } else if ((lwc_string_caseless_isequal(token->idata, diff --git a/src/parse/properties/padding.c b/src/parse/properties/padding.c index 7f5b9f6..a87ffa5 100644 --- a/src/parse/properties/padding.c +++ b/src/parse/properties/padding.c @@ -28,15 +28,16 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_padding(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; int prev_ctx; const css_token *token; css_fixed side_length[4]; uint32_t side_unit[4]; uint32_t side_count = 0; + enum flag_value flag_value; css_error error; /* Firstly, handle inherit */ @@ -44,20 +45,26 @@ css_error css__parse_padding(css_language *c, if (token == NULL) return CSS_INVALID; - if (is_css_inherit(c, token)) { - error = css_stylesheet_style_inherit(result, CSS_PROP_PADDING_TOP); + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_PADDING_TOP); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_PADDING_RIGHT); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_PADDING_RIGHT); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_PADDING_BOTTOM); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_PADDING_BOTTOM); if (error != CSS_OK) return error; - error = css_stylesheet_style_inherit(result, CSS_PROP_PADDING_LEFT); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_PADDING_LEFT); if (error == CSS_OK) parserutils_vector_iterate(vector, ctx); diff --git a/src/parse/properties/pause.c b/src/parse/properties/pause.c index e45a8f4..e558337 100644 --- a/src/parse/properties/pause.c +++ b/src/parse/properties/pause.c @@ -28,10 +28,10 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_pause(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error; const css_token *first_token; const css_token *token; @@ -57,15 +57,23 @@ css_error css__parse_pause(css_language *c, error = css__parse_pause_after(c, vector, ctx, result); } else { /* second token - might be useful */ - if (is_css_inherit(c, token)) { - /* another bogus inherit */ + enum flag_value flag_value; + + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + /* another generic property reset value + * which is bogus */ error = CSS_INVALID; } else { error = css__parse_pause_after(c, vector, ctx, result); if (error == CSS_OK) { /* second token parsed */ - if (is_css_inherit(c, first_token)) { - /* valid second token after inherit */ + flag_value = get_css_flag_value(c, first_token); + + if (flag_value != FLAG_VALUE__NONE) { + /* valid second token after + * generic property reset value */ error = CSS_INVALID; } } else { diff --git a/src/parse/properties/play_during.c b/src/parse/properties/play_during.c index 109ae64..da7f236 100644 --- a/src/parse/properties/play_during.c +++ b/src/parse/properties/play_during.c @@ -28,10 +28,10 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_play_during(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error; const css_token *token; uint8_t flags = 0; @@ -54,14 +54,32 @@ css_error css__parse_play_during(css_language *c, token->idata, c->strings[INHERIT], &match) == lwc_error_ok && match)) { flags |= FLAG_INHERIT; + + } else if ((lwc_string_caseless_isequal( + token->idata, c->strings[INITIAL], + &match) == lwc_error_ok && match)) { + flags |= FLAG_INITIAL; + + } else if ((lwc_string_caseless_isequal( + token->idata, c->strings[REVERT], + &match) == lwc_error_ok && match)) { + flags |= FLAG_REVERT; + + } else if ((lwc_string_caseless_isequal( + token->idata, c->strings[UNSET], + &match) == lwc_error_ok && match)) { + flags |= FLAG_UNSET; + } else if ((lwc_string_caseless_isequal( token->idata, c->strings[NONE], &match) == lwc_error_ok && match)) { value = PLAY_DURING_NONE; + } else if ((lwc_string_caseless_isequal( token->idata, c->strings[AUTO], &match) == lwc_error_ok && match)) { value = PLAY_DURING_AUTO; + } else { *ctx = orig_ctx; return CSS_INVALID; diff --git a/src/parse/properties/properties.c b/src/parse/properties/properties.c index 3f374fa..2cc849c 100644 --- a/src/parse/properties/properties.c +++ b/src/parse/properties/properties.c @@ -74,6 +74,7 @@ const css_prop_handler property_handlers[LAST_PROP + 1 - FIRST_PROP] = css__parse_display, css__parse_elevation, css__parse_empty_cells, + css__parse_fill_opacity, css__parse_flex, css__parse_flex_basis, css__parse_flex_direction, @@ -140,6 +141,7 @@ const css_prop_handler property_handlers[LAST_PROP + 1 - FIRST_PROP] = css__parse_speak, css__parse_speech_rate, css__parse_stress, + css__parse_stroke_opacity, css__parse_table_layout, css__parse_text_align, css__parse_text_decoration, @@ -158,3 +160,133 @@ const css_prop_handler property_handlers[LAST_PROP + 1 - FIRST_PROP] = css__parse_writing_mode, css__parse_z_index }; + +/** Mapping from property bytecode index to bytecode unit class mask. */ +const uint32_t property_unit_mask[CSS_N_PROPERTIES] = { + [CSS_PROP_AZIMUTH] = UNIT_MASK_AZIMUTH, + [CSS_PROP_BACKGROUND_ATTACHMENT] = UNIT_MASK_BACKGROUND_ATTACHMENT, + [CSS_PROP_BACKGROUND_COLOR] = UNIT_MASK_BACKGROUND_COLOR, + [CSS_PROP_BACKGROUND_IMAGE] = UNIT_MASK_BACKGROUND_IMAGE, + [CSS_PROP_BACKGROUND_POSITION] = UNIT_MASK_BACKGROUND_POSITION, + [CSS_PROP_BACKGROUND_REPEAT] = UNIT_MASK_BACKGROUND_REPEAT, + [CSS_PROP_BORDER_COLLAPSE] = UNIT_MASK_BORDER_COLLAPSE, + [CSS_PROP_BORDER_SPACING] = UNIT_MASK_BORDER_SPACING, + [CSS_PROP_BORDER_TOP_COLOR] = UNIT_MASK_BORDER_SIDE_COLOR, + [CSS_PROP_BORDER_RIGHT_COLOR] = UNIT_MASK_BORDER_SIDE_COLOR, + [CSS_PROP_BORDER_BOTTOM_COLOR] = UNIT_MASK_BORDER_SIDE_COLOR, + [CSS_PROP_BORDER_LEFT_COLOR] = UNIT_MASK_BORDER_SIDE_COLOR, + [CSS_PROP_BORDER_TOP_STYLE] = UNIT_MASK_BORDER_SIDE_STYLE, + [CSS_PROP_BORDER_RIGHT_STYLE] = UNIT_MASK_BORDER_SIDE_STYLE, + [CSS_PROP_BORDER_BOTTOM_STYLE] = UNIT_MASK_BORDER_SIDE_STYLE, + [CSS_PROP_BORDER_LEFT_STYLE] = UNIT_MASK_BORDER_SIDE_STYLE, + [CSS_PROP_BORDER_TOP_WIDTH] = UNIT_MASK_BORDER_SIDE_WIDTH, + [CSS_PROP_BORDER_RIGHT_WIDTH] = UNIT_MASK_BORDER_SIDE_WIDTH, + [CSS_PROP_BORDER_BOTTOM_WIDTH] = UNIT_MASK_BORDER_SIDE_WIDTH, + [CSS_PROP_BORDER_LEFT_WIDTH] = UNIT_MASK_BORDER_SIDE_WIDTH, + [CSS_PROP_BOTTOM] = UNIT_MASK_BOTTOM, + [CSS_PROP_CAPTION_SIDE] = UNIT_MASK_CAPTION_SIDE, + [CSS_PROP_CLEAR] = UNIT_MASK_CLEAR, + [CSS_PROP_CLIP] = UNIT_MASK_CLIP, + [CSS_PROP_COLOR] = UNIT_MASK_COLOR, + [CSS_PROP_CONTENT] = UNIT_MASK_CONTENT, + [CSS_PROP_COUNTER_INCREMENT] = UNIT_MASK_COUNTER_INCREMENT, + [CSS_PROP_COUNTER_RESET] = UNIT_MASK_COUNTER_RESET, + [CSS_PROP_CUE_AFTER] = UNIT_MASK_CUE_AFTER, + [CSS_PROP_CUE_BEFORE] = UNIT_MASK_CUE_BEFORE, + [CSS_PROP_CURSOR] = UNIT_MASK_CURSOR, + [CSS_PROP_DIRECTION] = UNIT_MASK_DIRECTION, + [CSS_PROP_DISPLAY] = UNIT_MASK_DISPLAY, + [CSS_PROP_ELEVATION] = UNIT_MASK_ELEVATION, + [CSS_PROP_EMPTY_CELLS] = UNIT_MASK_EMPTY_CELLS, + [CSS_PROP_FLOAT] = UNIT_MASK_FLOAT, + [CSS_PROP_FONT_FAMILY] = UNIT_MASK_FONT_FAMILY, + [CSS_PROP_FONT_SIZE] = UNIT_MASK_FONT_SIZE, + [CSS_PROP_FONT_STYLE] = UNIT_MASK_FONT_STYLE, + [CSS_PROP_FONT_VARIANT] = UNIT_MASK_FONT_VARIANT, + [CSS_PROP_FONT_WEIGHT] = UNIT_MASK_FONT_WEIGHT, + [CSS_PROP_HEIGHT] = UNIT_MASK_HEIGHT, + [CSS_PROP_LEFT] = UNIT_MASK_LEFT, + [CSS_PROP_LETTER_SPACING] = UNIT_MASK_LETTER_SPACING, + [CSS_PROP_LINE_HEIGHT] = UNIT_MASK_LINE_HEIGHT, + [CSS_PROP_LIST_STYLE_IMAGE] = UNIT_MASK_LIST_STYLE_IMAGE, + [CSS_PROP_LIST_STYLE_POSITION] = UNIT_MASK_LIST_STYLE_POSITION, + [CSS_PROP_LIST_STYLE_TYPE] = UNIT_MASK_LIST_STYLE_TYPE, + [CSS_PROP_MARGIN_TOP] = UNIT_MASK_MARGIN_SIDE, + [CSS_PROP_MARGIN_RIGHT] = UNIT_MASK_MARGIN_SIDE, + [CSS_PROP_MARGIN_BOTTOM] = UNIT_MASK_MARGIN_SIDE, + [CSS_PROP_MARGIN_LEFT] = UNIT_MASK_MARGIN_SIDE, + [CSS_PROP_MAX_HEIGHT] = UNIT_MASK_MAX_HEIGHT, + [CSS_PROP_MAX_WIDTH] = UNIT_MASK_MAX_WIDTH, + [CSS_PROP_MIN_HEIGHT] = UNIT_MASK_MIN_HEIGHT, + [CSS_PROP_MIN_WIDTH] = UNIT_MASK_MIN_WIDTH, + [CSS_PROP_ORPHANS] = UNIT_MASK_ORPHANS, + [CSS_PROP_OUTLINE_COLOR] = UNIT_MASK_OUTLINE_COLOR, + [CSS_PROP_OUTLINE_STYLE] = UNIT_MASK_OUTLINE_STYLE, + [CSS_PROP_OUTLINE_WIDTH] = UNIT_MASK_OUTLINE_WIDTH, + [CSS_PROP_OVERFLOW_X] = UNIT_MASK_OVERFLOW_X, + [CSS_PROP_PADDING_TOP] = UNIT_MASK_PADDING_SIDE, + [CSS_PROP_PADDING_RIGHT] = UNIT_MASK_PADDING_SIDE, + [CSS_PROP_PADDING_BOTTOM] = UNIT_MASK_PADDING_SIDE, + [CSS_PROP_PADDING_LEFT] = UNIT_MASK_PADDING_SIDE, + [CSS_PROP_PAGE_BREAK_AFTER] = UNIT_MASK_PAGE_BREAK_AFTER, + [CSS_PROP_PAGE_BREAK_BEFORE] = UNIT_MASK_PAGE_BREAK_BEFORE, + [CSS_PROP_PAGE_BREAK_INSIDE] = UNIT_MASK_PAGE_BREAK_INSIDE, + [CSS_PROP_PAUSE_AFTER] = UNIT_MASK_PAUSE_AFTER, + [CSS_PROP_PAUSE_BEFORE] = UNIT_MASK_PAUSE_BEFORE, + [CSS_PROP_PITCH_RANGE] = UNIT_MASK_PITCH_RANGE, + [CSS_PROP_PITCH] = UNIT_MASK_PITCH, + [CSS_PROP_PLAY_DURING] = UNIT_MASK_PLAY_DURING, + [CSS_PROP_POSITION] = UNIT_MASK_POSITION, + [CSS_PROP_QUOTES] = UNIT_MASK_QUOTES, + [CSS_PROP_RICHNESS] = UNIT_MASK_RICHNESS, + [CSS_PROP_RIGHT] = UNIT_MASK_RIGHT, + [CSS_PROP_SPEAK_HEADER] = UNIT_MASK_SPEAK_HEADER, + [CSS_PROP_SPEAK_NUMERAL] = UNIT_MASK_SPEAK_NUMERAL, + [CSS_PROP_SPEAK_PUNCTUATION] = UNIT_MASK_SPEAK_PUNCTUATION, + [CSS_PROP_SPEAK] = UNIT_MASK_SPEAK, + [CSS_PROP_SPEECH_RATE] = UNIT_MASK_SPEECH_RATE, + [CSS_PROP_STRESS] = UNIT_MASK_STRESS, + [CSS_PROP_TABLE_LAYOUT] = UNIT_MASK_TABLE_LAYOUT, + [CSS_PROP_TEXT_ALIGN] = UNIT_MASK_TEXT_ALIGN, + [CSS_PROP_TEXT_DECORATION] = UNIT_MASK_TEXT_DECORATION, + [CSS_PROP_TEXT_INDENT] = UNIT_MASK_TEXT_INDENT, + [CSS_PROP_TEXT_TRANSFORM] = UNIT_MASK_TEXT_TRANSFORM, + [CSS_PROP_TOP] = UNIT_MASK_TOP, + [CSS_PROP_UNICODE_BIDI] = UNIT_MASK_UNICODE_BIDI, + [CSS_PROP_VERTICAL_ALIGN] = UNIT_MASK_VERTICAL_ALIGN, + [CSS_PROP_VISIBILITY] = UNIT_MASK_VISIBILITY, + [CSS_PROP_VOICE_FAMILY] = UNIT_MASK_VOICE_FAMILY, + [CSS_PROP_VOLUME] = UNIT_MASK_VOLUME, + [CSS_PROP_WHITE_SPACE] = UNIT_MASK_WHITE_SPACE, + [CSS_PROP_WIDOWS] = UNIT_MASK_WIDOWS, + [CSS_PROP_WIDTH] = UNIT_MASK_WIDTH, + [CSS_PROP_WORD_SPACING] = UNIT_MASK_WORD_SPACING, + [CSS_PROP_Z_INDEX] = UNIT_MASK_Z_INDEX, + [CSS_PROP_OPACITY] = UNIT_MASK_OPACITY, + [CSS_PROP_FILL_OPACITY] = UNIT_MASK_FILL_OPACITY, + [CSS_PROP_STROKE_OPACITY] = UNIT_MASK_STROKE_OPACITY, + [CSS_PROP_BREAK_AFTER] = UNIT_MASK_BREAK_AFTER, + [CSS_PROP_BREAK_BEFORE] = UNIT_MASK_BREAK_BEFORE, + [CSS_PROP_BREAK_INSIDE] = UNIT_MASK_BREAK_INSIDE, + [CSS_PROP_COLUMN_COUNT] = UNIT_MASK_COLUMN_COUNT, + [CSS_PROP_COLUMN_FILL] = UNIT_MASK_COLUMN_FILL, + [CSS_PROP_COLUMN_GAP] = UNIT_MASK_COLUMN_GAP, + [CSS_PROP_COLUMN_RULE_COLOR] = UNIT_MASK_COLUMN_RULE_COLOR, + [CSS_PROP_COLUMN_RULE_STYLE] = UNIT_MASK_COLUMN_RULE_STYLE, + [CSS_PROP_COLUMN_RULE_WIDTH] = UNIT_MASK_COLUMN_RULE_WIDTH, + [CSS_PROP_COLUMN_SPAN] = UNIT_MASK_COLUMN_SPAN, + [CSS_PROP_COLUMN_WIDTH] = UNIT_MASK_COLUMN_WIDTH, + [CSS_PROP_WRITING_MODE] = UNIT_MASK_WRITING_MODE, + [CSS_PROP_OVERFLOW_Y] = UNIT_MASK_OVERFLOW_Y, + [CSS_PROP_BOX_SIZING] = UNIT_MASK_BOX_SIZING, + [CSS_PROP_ALIGN_CONTENT] = UNIT_MASK_ALIGN_CONTENT, + [CSS_PROP_ALIGN_ITEMS] = UNIT_MASK_ALIGN_ITEMS, + [CSS_PROP_ALIGN_SELF] = UNIT_MASK_ALIGN_SELF, + [CSS_PROP_FLEX_BASIS] = UNIT_MASK_FLEX_BASIS, + [CSS_PROP_FLEX_DIRECTION] = UNIT_MASK_FLEX_DIRECTION, + [CSS_PROP_FLEX_GROW] = UNIT_MASK_FLEX_GROW, + [CSS_PROP_FLEX_SHRINK] = UNIT_MASK_FLEX_SHRINK, + [CSS_PROP_FLEX_WRAP] = UNIT_MASK_FLEX_WRAP, + [CSS_PROP_JUSTIFY_CONTENT] = UNIT_MASK_JUSTIFY_CONTENT, + [CSS_PROP_ORDER] = UNIT_MASK_ORDER, +}; diff --git a/src/parse/properties/properties.gen b/src/parse/properties/properties.gen index 61dcd5e..b0e797c 100644 --- a/src/parse/properties/properties.gen +++ b/src/parse/properties/properties.gen @@ -1,56 +1,56 @@ ##Common templates # -#property:CSS_PROP_ENUM IDENT:( INHERIT: IDENT:) -#property:CSS_PROP_ENUM IDENT:INHERIT NUMBER:( false: RANGE: NUMBER:) -#property:CSS_PROP_ENUM IDENT:INHERIT LENGTH_UNIT:( UNIT_HZ:PITCH_FREQUENCY ALLOW: DISALLOW: RANGE:<0 LENGTH_UNIT:) -#property:CSS_PROP_ENUM IDENT:( INHERIT: IDENT:) LENGTH_UNIT:( UNIT_HZ:PITCH_FREQUENCY ALLOW: DISALLOW: RANGE:<0 LENGTH_UNIT:) +#property:CSS_PROP_ENUM IDENT:( INHERIT: INITIAL: REVERT: UNSET: IDENT:) +#property:CSS_PROP_ENUM IDENT:( INHERIT: INITIAL: REVERT: UNSET: IDENT:) NUMBER:( false: RANGE: NUMBER:) +#property:CSS_PROP_ENUM IDENT:( INHERIT: INITIAL: REVERT: UNSET: IDENT:) LENGTH_UNIT:( UNIT_HZ:PITCH_FREQUENCY ALLOW: DISALLOW: RANGE:<0 LENGTH_UNIT:) +#property:CSS_PROP_ENUM IDENT:( INHERIT: INITIAL: REVERT: UNSET: IDENT:) LENGTH_UNIT:( UNIT_HZ:PITCH_FREQUENCY ALLOW: DISALLOW: RANGE:<0 LENGTH_UNIT:) #property:CSS_PROP_ENUM WRAP: -background_repeat:CSS_PROP_BACKGROUND_REPEAT IDENT:( INHERIT: NO_REPEAT:0,BACKGROUND_REPEAT_NO_REPEAT REPEAT_X:0,BACKGROUND_REPEAT_REPEAT_X REPEAT_Y:0,BACKGROUND_REPEAT_REPEAT_Y REPEAT:0,BACKGROUND_REPEAT_REPEAT IDENT:) +background_repeat:CSS_PROP_BACKGROUND_REPEAT IDENT:( INHERIT: INITIAL: REVERT: UNSET: NO_REPEAT:0,BACKGROUND_REPEAT_NO_REPEAT REPEAT_X:0,BACKGROUND_REPEAT_REPEAT_X REPEAT_Y:0,BACKGROUND_REPEAT_REPEAT_Y REPEAT:0,BACKGROUND_REPEAT_REPEAT IDENT:) -border_collapse:CSS_PROP_BORDER_COLLAPSE IDENT:( INHERIT: COLLAPSE:0,BORDER_COLLAPSE_COLLAPSE SEPARATE:0,BORDER_COLLAPSE_SEPARATE IDENT:) +border_collapse:CSS_PROP_BORDER_COLLAPSE IDENT:( INHERIT: INITIAL: REVERT: UNSET: COLLAPSE:0,BORDER_COLLAPSE_COLLAPSE SEPARATE:0,BORDER_COLLAPSE_SEPARATE IDENT:) -cue_after:CSS_PROP_CUE_AFTER IDENT:( INHERIT: NONE:0,CUE_AFTER_NONE IDENT:) URI:CUE_AFTER_URI +cue_after:CSS_PROP_CUE_AFTER IDENT:( INHERIT: INITIAL: REVERT: UNSET: NONE:0,CUE_AFTER_NONE IDENT:) URI:CUE_AFTER_URI -cue_before:CSS_PROP_CUE_BEFORE IDENT:( INHERIT: NONE:0,CUE_BEFORE_NONE IDENT:) URI:CUE_BEFORE_URI +cue_before:CSS_PROP_CUE_BEFORE IDENT:( INHERIT: INITIAL: REVERT: UNSET: NONE:0,CUE_BEFORE_NONE IDENT:) URI:CUE_BEFORE_URI -direction:CSS_PROP_DIRECTION IDENT:( INHERIT: LTR:0,DIRECTION_LTR RTL:0,DIRECTION_RTL IDENT:) +direction:CSS_PROP_DIRECTION IDENT:( INHERIT: INITIAL: REVERT: UNSET: LTR:0,DIRECTION_LTR RTL:0,DIRECTION_RTL IDENT:) -display:CSS_PROP_DISPLAY IDENT:( INHERIT: INLINE:0,DISPLAY_INLINE BLOCK:0,DISPLAY_BLOCK LIST_ITEM:0,DISPLAY_LIST_ITEM RUN_IN:0,DISPLAY_RUN_IN INLINE_BLOCK:0,DISPLAY_INLINE_BLOCK TABLE:0,DISPLAY_TABLE INLINE_TABLE:0,DISPLAY_INLINE_TABLE TABLE_ROW_GROUP:0,DISPLAY_TABLE_ROW_GROUP TABLE_HEADER_GROUP:0,DISPLAY_TABLE_HEADER_GROUP TABLE_FOOTER_GROUP:0,DISPLAY_TABLE_FOOTER_GROUP TABLE_ROW:0,DISPLAY_TABLE_ROW TABLE_COLUMN_GROUP:0,DISPLAY_TABLE_COLUMN_GROUP TABLE_COLUMN:0,DISPLAY_TABLE_COLUMN TABLE_CELL:0,DISPLAY_TABLE_CELL TABLE_CAPTION:0,DISPLAY_TABLE_CAPTION NONE:0,DISPLAY_NONE FLEX:0,DISPLAY_FLEX INLINE_FLEX:0,DISPLAY_INLINE_FLEX IDENT:) +display:CSS_PROP_DISPLAY IDENT:( INHERIT: INITIAL: REVERT: UNSET: INLINE:0,DISPLAY_INLINE BLOCK:0,DISPLAY_BLOCK LIST_ITEM:0,DISPLAY_LIST_ITEM RUN_IN:0,DISPLAY_RUN_IN INLINE_BLOCK:0,DISPLAY_INLINE_BLOCK TABLE:0,DISPLAY_TABLE INLINE_TABLE:0,DISPLAY_INLINE_TABLE TABLE_ROW_GROUP:0,DISPLAY_TABLE_ROW_GROUP TABLE_HEADER_GROUP:0,DISPLAY_TABLE_HEADER_GROUP TABLE_FOOTER_GROUP:0,DISPLAY_TABLE_FOOTER_GROUP TABLE_ROW:0,DISPLAY_TABLE_ROW TABLE_COLUMN_GROUP:0,DISPLAY_TABLE_COLUMN_GROUP TABLE_COLUMN:0,DISPLAY_TABLE_COLUMN TABLE_CELL:0,DISPLAY_TABLE_CELL TABLE_CAPTION:0,DISPLAY_TABLE_CAPTION NONE:0,DISPLAY_NONE FLEX:0,DISPLAY_FLEX INLINE_FLEX:0,DISPLAY_INLINE_FLEX GRID:0,DISPLAY_GRID INLINE_GRID:0,DISPLAY_INLINE_GRID IDENT:) -empty_cells:CSS_PROP_EMPTY_CELLS IDENT:( INHERIT: SHOW:0,EMPTY_CELLS_SHOW HIDE:0,EMPTY_CELLS_HIDE IDENT:) +empty_cells:CSS_PROP_EMPTY_CELLS IDENT:( INHERIT: INITIAL: REVERT: UNSET: SHOW:0,EMPTY_CELLS_SHOW HIDE:0,EMPTY_CELLS_HIDE IDENT:) -float:CSS_PROP_FLOAT IDENT:( INHERIT: LEFT:0,FLOAT_LEFT RIGHT:0,FLOAT_RIGHT NONE:0,FLOAT_NONE IDENT:) +float:CSS_PROP_FLOAT IDENT:( INHERIT: INITIAL: REVERT: UNSET: LEFT:0,FLOAT_LEFT RIGHT:0,FLOAT_RIGHT NONE:0,FLOAT_NONE IDENT:) -font_size:CSS_PROP_FONT_SIZE IDENT:( INHERIT: XX_SMALL:0,FONT_SIZE_XX_SMALL X_SMALL:0,FONT_SIZE_X_SMALL SMALL:0,FONT_SIZE_SMALL MEDIUM:0,FONT_SIZE_MEDIUM LARGE:0,FONT_SIZE_LARGE X_LARGE:0,FONT_SIZE_X_LARGE XX_LARGE:0,FONT_SIZE_XX_LARGE LARGER:0,FONT_SIZE_LARGER SMALLER:0,FONT_SIZE_SMALLER IDENT:) LENGTH_UNIT:( UNIT_PX:FONT_SIZE_DIMENSION DISALLOW:unit&UNIT_ANGLE||unit&UNIT_TIME||unit&UNIT_FREQ RANGE:<0 LENGTH_UNIT:) +font_size:CSS_PROP_FONT_SIZE IDENT:( INHERIT: INITIAL: REVERT: UNSET: XX_SMALL:0,FONT_SIZE_XX_SMALL X_SMALL:0,FONT_SIZE_X_SMALL SMALL:0,FONT_SIZE_SMALL MEDIUM:0,FONT_SIZE_MEDIUM LARGE:0,FONT_SIZE_LARGE X_LARGE:0,FONT_SIZE_X_LARGE XX_LARGE:0,FONT_SIZE_XX_LARGE LARGER:0,FONT_SIZE_LARGER SMALLER:0,FONT_SIZE_SMALLER IDENT:) LENGTH_UNIT:( UNIT_PX:FONT_SIZE_DIMENSION MASK:UNIT_MASK_FONT_SIZE RANGE:<0 LENGTH_UNIT:) -font_style:CSS_PROP_FONT_STYLE IDENT:( INHERIT: NORMAL:0,FONT_STYLE_NORMAL ITALIC:0,FONT_STYLE_ITALIC OBLIQUE:0,FONT_STYLE_OBLIQUE IDENT:) +font_style:CSS_PROP_FONT_STYLE IDENT:( INHERIT: INITIAL: REVERT: UNSET: NORMAL:0,FONT_STYLE_NORMAL ITALIC:0,FONT_STYLE_ITALIC OBLIQUE:0,FONT_STYLE_OBLIQUE IDENT:) -font_variant:CSS_PROP_FONT_VARIANT IDENT:( INHERIT: NORMAL:0,FONT_VARIANT_NORMAL SMALL_CAPS:0,FONT_VARIANT_SMALL_CAPS IDENT:) +font_variant:CSS_PROP_FONT_VARIANT IDENT:( INHERIT: INITIAL: REVERT: UNSET: NORMAL:0,FONT_VARIANT_NORMAL SMALL_CAPS:0,FONT_VARIANT_SMALL_CAPS IDENT:) -height:CSS_PROP_HEIGHT IDENT:( INHERIT: AUTO:0,HEIGHT_AUTO IDENT:) LENGTH_UNIT:( UNIT_PX:HEIGHT_SET DISALLOW:unit&UNIT_ANGLE||unit&UNIT_TIME||unit&UNIT_FREQ RANGE:<0 LENGTH_UNIT:) +height:CSS_PROP_HEIGHT IDENT:( INHERIT: INITIAL: REVERT: UNSET: AUTO:0,HEIGHT_AUTO IDENT:) LENGTH_UNIT:( UNIT_PX:HEIGHT_SET MASK:UNIT_MASK_HEIGHT RANGE:<0 LENGTH_UNIT:) -letter_spacing:CSS_PROP_LETTER_SPACING IDENT:( INHERIT: NORMAL:0,LETTER_SPACING_NORMAL IDENT:) LENGTH_UNIT:( UNIT_PX:LETTER_SPACING_SET DISALLOW:unit&UNIT_ANGLE||unit&UNIT_TIME||unit&UNIT_FREQ||unit&UNIT_PCT LENGTH_UNIT:) +letter_spacing:CSS_PROP_LETTER_SPACING IDENT:( INHERIT: INITIAL: REVERT: UNSET: NORMAL:0,LETTER_SPACING_NORMAL IDENT:) LENGTH_UNIT:( UNIT_PX:LETTER_SPACING_SET MASK:UNIT_MASK_LETTER_SPACING LENGTH_UNIT:) -line_height:CSS_PROP_LINE_HEIGHT IDENT:( INHERIT: NORMAL:0,LINE_HEIGHT_NORMAL IDENT:) NUMBER:( false:LINE_HEIGHT_NUMBER RANGE:num<0 NUMBER:) LENGTH_UNIT:( UNIT_PX:LINE_HEIGHT_DIMENSION DISALLOW:unit&UNIT_ANGLE||unit&UNIT_TIME||unit&UNIT_FREQ RANGE:<0 LENGTH_UNIT:) +line_height:CSS_PROP_LINE_HEIGHT IDENT:( INHERIT: INITIAL: REVERT: UNSET: NORMAL:0,LINE_HEIGHT_NORMAL IDENT:) NUMBER:( false:LINE_HEIGHT_NUMBER RANGE:num<0 NUMBER:) LENGTH_UNIT:( UNIT_PX:LINE_HEIGHT_DIMENSION MASK:UNIT_MASK_LINE_HEIGHT RANGE:<0 LENGTH_UNIT:) border_top:BORDER_SIDE_TOP WRAP:css__parse_border_side border_bottom:BORDER_SIDE_BOTTOM WRAP:css__parse_border_side border_left:BORDER_SIDE_LEFT WRAP:css__parse_border_side border_right:BORDER_SIDE_RIGHT WRAP:css__parse_border_side -max_height:CSS_PROP_MAX_HEIGHT IDENT:( INHERIT: NONE:0,MAX_HEIGHT_NONE IDENT:) LENGTH_UNIT:( UNIT_PX:MAX_HEIGHT_SET DISALLOW:unit&UNIT_ANGLE||unit&UNIT_TIME||unit&UNIT_FREQ RANGE:<0 LENGTH_UNIT:) +max_height:CSS_PROP_MAX_HEIGHT IDENT:( INHERIT: INITIAL: REVERT: UNSET: NONE:0,MAX_HEIGHT_NONE IDENT:) LENGTH_UNIT:( UNIT_PX:MAX_HEIGHT_SET MASK:UNIT_MASK_MAX_HEIGHT RANGE:<0 LENGTH_UNIT:) -max_width:CSS_PROP_MAX_WIDTH IDENT:( INHERIT: NONE:0,MAX_WIDTH_NONE IDENT:) LENGTH_UNIT:( UNIT_PX:MAX_WIDTH_SET DISALLOW:unit&UNIT_ANGLE||unit&UNIT_TIME||unit&UNIT_FREQ RANGE:<0 LENGTH_UNIT:) +max_width:CSS_PROP_MAX_WIDTH IDENT:( INHERIT: INITIAL: REVERT: UNSET: NONE:0,MAX_WIDTH_NONE IDENT:) LENGTH_UNIT:( UNIT_PX:MAX_WIDTH_SET MASK:UNIT_MASK_MAX_WIDTH RANGE:<0 LENGTH_UNIT:) -min_height:CSS_PROP_MIN_HEIGHT IDENT:( INHERIT: AUTO:0,MIN_HEIGHT_AUTO IDENT:) LENGTH_UNIT:( UNIT_PX:MIN_HEIGHT_SET DISALLOW:unit&UNIT_ANGLE||unit&UNIT_TIME||unit&UNIT_FREQ RANGE:<0 LENGTH_UNIT:) +min_height:CSS_PROP_MIN_HEIGHT IDENT:( INHERIT: INITIAL: REVERT: UNSET: AUTO:0,MIN_HEIGHT_AUTO IDENT:) LENGTH_UNIT:( UNIT_PX:MIN_HEIGHT_SET MASK:UNIT_MASK_MIN_HEIGHT RANGE:<0 LENGTH_UNIT:) -min_width:CSS_PROP_MIN_WIDTH IDENT:( INHERIT: AUTO:0,MIN_WIDTH_AUTO IDENT:) LENGTH_UNIT:( UNIT_PX:MIN_WIDTH_SET DISALLOW:unit&UNIT_ANGLE||unit&UNIT_TIME||unit&UNIT_FREQ RANGE:<0 LENGTH_UNIT:) +min_width:CSS_PROP_MIN_WIDTH IDENT:( INHERIT: INITIAL: REVERT: UNSET: AUTO:0,MIN_WIDTH_AUTO IDENT:) LENGTH_UNIT:( UNIT_PX:MIN_WIDTH_SET MASK:UNIT_MASK_MIN_WIDTH RANGE:<0 LENGTH_UNIT:) -color:CSS_PROP_COLOR IDENT:INHERIT COLOR:COLOR_SET +color:CSS_PROP_COLOR IDENT:( INHERIT: INITIAL: REVERT: UNSET: IDENT:) COLOR:COLOR_SET #generic for padding_{top, bottom, left, right}.c -padding_side:op GENERIC: IDENT:INHERIT LENGTH_UNIT:( UNIT_PX:PADDING_SET DISALLOW:unit&UNIT_ANGLE||unit&UNIT_TIME||unit&UNIT_FREQ RANGE:<0 LENGTH_UNIT:) +padding_side:op GENERIC: IDENT:( INHERIT: INITIAL: REVERT: UNSET: IDENT:) LENGTH_UNIT:( UNIT_PX:PADDING_SET MASK:UNIT_MASK_PADDING_SIDE RANGE:<0 LENGTH_UNIT:) padding_bottom:CSS_PROP_PADDING_BOTTOM WRAP:css__parse_padding_side padding_left:CSS_PROP_PADDING_LEFT WRAP:css__parse_padding_side @@ -59,7 +59,7 @@ padding_right:CSS_PROP_PADDING_RIGHT WRAP:css__parse_padding_side #generic for margin_{top, bottom, left, right}.c -margin_side:op GENERIC IDENT:( INHERIT: AUTO:0,MARGIN_AUTO IDENT:) LENGTH_UNIT:( UNIT_PX:MARGIN_SET DISALLOW:unit&UNIT_ANGLE||unit&UNIT_TIME||unit&UNIT_FREQ LENGTH_UNIT:) +margin_side:op GENERIC IDENT:( INHERIT: INITIAL: REVERT: UNSET: AUTO:0,MARGIN_AUTO IDENT:) LENGTH_UNIT:( UNIT_PX:MARGIN_SET MASK:UNIT_MASK_MARGIN_SIDE LENGTH_UNIT:) margin_top:CSS_PROP_MARGIN_TOP WRAP:css__parse_margin_side margin_bottom:CSS_PROP_MARGIN_BOTTOM WRAP:css__parse_margin_side @@ -67,7 +67,7 @@ margin_left:CSS_PROP_MARGIN_LEFT WRAP:css__parse_margin_side margin_right:CSS_PROP_MARGIN_RIGHT WRAP:css__parse_margin_side #generic for {top, bottom, left, right}.c -side:op GENERIC: IDENT:( INHERIT: AUTO:0,BOTTOM_AUTO IDENT:) LENGTH_UNIT:( UNIT_PX:BOTTOM_SET DISALLOW:unit&UNIT_ANGLE||unit&UNIT_TIME||unit&UNIT_FREQ LENGTH_UNIT:) +side:op GENERIC: IDENT:( INHERIT: INITIAL: REVERT: UNSET: AUTO:0,BOTTOM_AUTO IDENT:) LENGTH_UNIT:( UNIT_PX:BOTTOM_SET ALLOW:unit&(UNIT_LENGTH|UNIT_PCT) LENGTH_UNIT:) top:CSS_PROP_TOP WRAP:css__parse_side bottom:CSS_PROP_BOTTOM WRAP:css__parse_side @@ -76,7 +76,7 @@ right:CSS_PROP_RIGHT WRAP:css__parse_side #generic for border_{top, bottom, left, right}_width.c -border_side_width:op GENERIC: IDENT:( INHERIT: THIN:0,BORDER_WIDTH_THIN MEDIUM:0,BORDER_WIDTH_MEDIUM THICK:0,BORDER_WIDTH_THICK IDENT:) LENGTH_UNIT:( UNIT_PX:BORDER_WIDTH_SET DISALLOW:unit==UNIT_PCT||unit&UNIT_ANGLE||unit&UNIT_TIME||unit&UNIT_FREQ RANGE:<0 LENGTH_UNIT:) +border_side_width:op GENERIC: IDENT:( INHERIT: INITIAL: REVERT: UNSET: THIN:0,BORDER_WIDTH_THIN MEDIUM:0,BORDER_WIDTH_MEDIUM THICK:0,BORDER_WIDTH_THICK IDENT:) LENGTH_UNIT:( UNIT_PX:BORDER_WIDTH_SET MASK:UNIT_MASK_BORDER_SIDE_WIDTH RANGE:<0 LENGTH_UNIT:) border_top_width:CSS_PROP_BORDER_TOP_WIDTH WRAP:css__parse_border_side_width border_bottom_width:CSS_PROP_BORDER_BOTTOM_WIDTH WRAP:css__parse_border_side_width @@ -85,7 +85,7 @@ border_right_width:CSS_PROP_BORDER_RIGHT_WIDTH WRAP:css__parse_border_side_width #generic for border_{top, bottom, left, right}_style.c -border_side_style:op GENERIC: IDENT:( INHERIT: NONE:0,BORDER_STYLE_NONE HIDDEN:0,BORDER_STYLE_HIDDEN DOTTED:0,BORDER_STYLE_DOTTED DASHED:0,BORDER_STYLE_DASHED SOLID:0,BORDER_STYLE_SOLID LIBCSS_DOUBLE:0,BORDER_STYLE_DOUBLE GROOVE:0,BORDER_STYLE_GROOVE RIDGE:0,BORDER_STYLE_RIDGE INSET:0,BORDER_STYLE_INSET OUTSET:0,BORDER_STYLE_OUTSET IDENT:) +border_side_style:op GENERIC: IDENT:( INHERIT: INITIAL: REVERT: UNSET: NONE:0,BORDER_STYLE_NONE HIDDEN:0,BORDER_STYLE_HIDDEN DOTTED:0,BORDER_STYLE_DOTTED DASHED:0,BORDER_STYLE_DASHED SOLID:0,BORDER_STYLE_SOLID LIBCSS_DOUBLE:0,BORDER_STYLE_DOUBLE GROOVE:0,BORDER_STYLE_GROOVE RIDGE:0,BORDER_STYLE_RIDGE INSET:0,BORDER_STYLE_INSET OUTSET:0,BORDER_STYLE_OUTSET IDENT:) border_top_style:CSS_PROP_BORDER_TOP_STYLE WRAP:css__parse_border_side_style border_bottom_style:CSS_PROP_BORDER_BOTTOM_STYLE WRAP:css__parse_border_side_style @@ -93,7 +93,7 @@ border_left_style:CSS_PROP_BORDER_LEFT_STYLE WRAP:css__parse_border_side_style border_right_style:CSS_PROP_BORDER_RIGHT_STYLE WRAP:css__parse_border_side_style #generic for border_{top, bottom, left, right}_color.c -border_side_color:op GENERIC: IDENT:( INHERIT: IDENT:) COLOR:BORDER_COLOR_SET +border_side_color:op GENERIC: IDENT:( INHERIT: INITIAL: REVERT: UNSET: IDENT:) COLOR:BORDER_COLOR_SET border_top_color:CSS_PROP_BORDER_TOP_COLOR WRAP:css__parse_border_side_color border_bottom_color:CSS_PROP_BORDER_BOTTOM_COLOR WRAP:css__parse_border_side_color @@ -101,139 +101,139 @@ border_left_color:CSS_PROP_BORDER_LEFT_COLOR WRAP:css__parse_border_side_color border_right_color:CSS_PROP_BORDER_RIGHT_COLOR WRAP:css__parse_border_side_color -counter_increment:CSS_PROP_COUNTER_INCREMENT IDENT:( INHERIT: NONE:0,COUNTER_INCREMENT_NONE IDENT:) IDENT_LIST:( STRING_OPTNUM:COUNTER_INCREMENT_NAMED 1:COUNTER_INCREMENT_NONE IDENT_LIST:) +counter_increment:CSS_PROP_COUNTER_INCREMENT IDENT:( INHERIT: INITIAL: REVERT: UNSET: NONE:0,COUNTER_INCREMENT_NONE IDENT:) IDENT_LIST:( STRING_OPTNUM:COUNTER_INCREMENT_NAMED 1:COUNTER_INCREMENT_NONE IDENT_LIST:) -counter_reset:CSS_PROP_COUNTER_RESET IDENT:( INHERIT: NONE:0,COUNTER_RESET_NONE IDENT:) IDENT_LIST:( STRING_OPTNUM:COUNTER_RESET_NAMED 0:COUNTER_RESET_NONE IDENT_LIST:) +counter_reset:CSS_PROP_COUNTER_RESET IDENT:( INHERIT: INITIAL: REVERT: UNSET: NONE:0,COUNTER_RESET_NONE IDENT:) IDENT_LIST:( STRING_OPTNUM:COUNTER_RESET_NAMED 0:COUNTER_RESET_NONE IDENT_LIST:) -background_attachment:CSS_PROP_BACKGROUND_ATTACHMENT IDENT:( INHERIT: FIXED:0,BACKGROUND_ATTACHMENT_FIXED SCROLL:0,BACKGROUND_ATTACHMENT_SCROLL IDENT:) +background_attachment:CSS_PROP_BACKGROUND_ATTACHMENT IDENT:( INHERIT: INITIAL: REVERT: UNSET: FIXED:0,BACKGROUND_ATTACHMENT_FIXED SCROLL:0,BACKGROUND_ATTACHMENT_SCROLL IDENT:) -background_color:CSS_PROP_BACKGROUND_COLOR IDENT:( INHERIT: IDENT:) COLOR:BACKGROUND_COLOR_SET +background_color:CSS_PROP_BACKGROUND_COLOR IDENT:( INHERIT: INITIAL: REVERT: UNSET: IDENT:) COLOR:BACKGROUND_COLOR_SET -caption_side:CSS_PROP_CAPTION_SIDE IDENT:( INHERIT: TOP:0,CAPTION_SIDE_TOP BOTTOM:0,CAPTION_SIDE_BOTTOM IDENT:) +caption_side:CSS_PROP_CAPTION_SIDE IDENT:( INHERIT: INITIAL: REVERT: UNSET: TOP:0,CAPTION_SIDE_TOP BOTTOM:0,CAPTION_SIDE_BOTTOM IDENT:) -clear:CSS_PROP_CLEAR IDENT:( INHERIT: RIGHT:0,CLEAR_RIGHT LEFT:0,CLEAR_LEFT BOTH:0,CLEAR_BOTH NONE:0,CLEAR_NONE IDENT:) +clear:CSS_PROP_CLEAR IDENT:( INHERIT: INITIAL: REVERT: UNSET: RIGHT:0,CLEAR_RIGHT LEFT:0,CLEAR_LEFT BOTH:0,CLEAR_BOTH NONE:0,CLEAR_NONE IDENT:) -background_image:CSS_PROP_BACKGROUND_IMAGE IDENT:( INHERIT: NONE:0,BACKGROUND_IMAGE_NONE IDENT:) URI:BACKGROUND_IMAGE_URI +background_image:CSS_PROP_BACKGROUND_IMAGE IDENT:( INHERIT: INITIAL: REVERT: UNSET: NONE:0,BACKGROUND_IMAGE_NONE IDENT:) URI:BACKGROUND_IMAGE_URI -list_style_image:CSS_PROP_LIST_STYLE_IMAGE IDENT:( INHERIT: NONE:0,LIST_STYLE_IMAGE_NONE IDENT:) URI:LIST_STYLE_IMAGE_URI +list_style_image:CSS_PROP_LIST_STYLE_IMAGE IDENT:( INHERIT: INITIAL: REVERT: UNSET: NONE:0,LIST_STYLE_IMAGE_NONE IDENT:) URI:LIST_STYLE_IMAGE_URI -list_style_position:CSS_PROP_LIST_STYLE_POSITION IDENT:( INHERIT: INSIDE:0,LIST_STYLE_POSITION_INSIDE OUTSIDE:0,LIST_STYLE_POSITION_OUTSIDE IDENT:) +list_style_position:CSS_PROP_LIST_STYLE_POSITION IDENT:( INHERIT: INITIAL: REVERT: UNSET: INSIDE:0,LIST_STYLE_POSITION_INSIDE OUTSIDE:0,LIST_STYLE_POSITION_OUTSIDE IDENT:) -orphans:CSS_PROP_ORPHANS IDENT:INHERIT NUMBER:( true:ORPHANS_SET RANGE:num<0 NUMBER:) +orphans:CSS_PROP_ORPHANS IDENT:( INHERIT: INITIAL: REVERT: UNSET: IDENT:) NUMBER:( true:ORPHANS_SET RANGE:num<0 NUMBER:) -outline_color:CSS_PROP_OUTLINE_COLOR IDENT:( INHERIT: INVERT:0,OUTLINE_COLOR_INVERT IDENT:) COLOR:OUTLINE_COLOR_SET +outline_color:CSS_PROP_OUTLINE_COLOR IDENT:( INHERIT: INITIAL: REVERT: UNSET: INVERT:0,OUTLINE_COLOR_INVERT IDENT:) COLOR:OUTLINE_COLOR_SET -outline_style:CSS_PROP_OUTLINE_STYLE IDENT:( INHERIT: NONE:0,BORDER_STYLE_NONE DOTTED:0,BORDER_STYLE_DOTTED DASHED:0,BORDER_STYLE_DASHED SOLID:0,BORDER_STYLE_SOLID LIBCSS_DOUBLE:0,BORDER_STYLE_DOUBLE GROOVE:0,BORDER_STYLE_GROOVE RIDGE:0,BORDER_STYLE_RIDGE INSET:0,BORDER_STYLE_INSET OUTSET:0,BORDER_STYLE_OUTSET IDENT:) +outline_style:CSS_PROP_OUTLINE_STYLE IDENT:( INHERIT: INITIAL: REVERT: UNSET: NONE:0,BORDER_STYLE_NONE DOTTED:0,BORDER_STYLE_DOTTED DASHED:0,BORDER_STYLE_DASHED SOLID:0,BORDER_STYLE_SOLID LIBCSS_DOUBLE:0,BORDER_STYLE_DOUBLE GROOVE:0,BORDER_STYLE_GROOVE RIDGE:0,BORDER_STYLE_RIDGE INSET:0,BORDER_STYLE_INSET OUTSET:0,BORDER_STYLE_OUTSET IDENT:) outline_width:CSS_PROP_OUTLINE_WIDTH WRAP:css__parse_border_side_width -overflow_x:CSS_PROP_OVERFLOW_X IDENT:( INHERIT: VISIBLE:0,OVERFLOW_VISIBLE HIDDEN:0,OVERFLOW_HIDDEN SCROLL:0,OVERFLOW_SCROLL AUTO:0,OVERFLOW_AUTO IDENT:) +overflow_x:CSS_PROP_OVERFLOW_X IDENT:( INHERIT: INITIAL: REVERT: UNSET: VISIBLE:0,OVERFLOW_VISIBLE HIDDEN:0,OVERFLOW_HIDDEN SCROLL:0,OVERFLOW_SCROLL AUTO:0,OVERFLOW_AUTO IDENT:) -overflow_y:CSS_PROP_OVERFLOW_Y IDENT:( INHERIT: VISIBLE:0,OVERFLOW_VISIBLE HIDDEN:0,OVERFLOW_HIDDEN SCROLL:0,OVERFLOW_SCROLL AUTO:0,OVERFLOW_AUTO IDENT:) +overflow_y:CSS_PROP_OVERFLOW_Y IDENT:( INHERIT: INITIAL: REVERT: UNSET: VISIBLE:0,OVERFLOW_VISIBLE HIDDEN:0,OVERFLOW_HIDDEN SCROLL:0,OVERFLOW_SCROLL AUTO:0,OVERFLOW_AUTO IDENT:) -page_break_after:CSS_PROP_PAGE_BREAK_AFTER IDENT:( INHERIT: AUTO:0,PAGE_BREAK_AFTER_AUTO ALWAYS:0,PAGE_BREAK_AFTER_ALWAYS AVOID:0,PAGE_BREAK_AFTER_AVOID LEFT:0,PAGE_BREAK_AFTER_LEFT RIGHT:0,PAGE_BREAK_AFTER_RIGHT IDENT:) +page_break_after:CSS_PROP_PAGE_BREAK_AFTER IDENT:( INHERIT: INITIAL: REVERT: UNSET: AUTO:0,PAGE_BREAK_AFTER_AUTO ALWAYS:0,PAGE_BREAK_AFTER_ALWAYS AVOID:0,PAGE_BREAK_AFTER_AVOID LEFT:0,PAGE_BREAK_AFTER_LEFT RIGHT:0,PAGE_BREAK_AFTER_RIGHT IDENT:) -page_break_before:CSS_PROP_PAGE_BREAK_BEFORE IDENT:( INHERIT: AUTO:0,PAGE_BREAK_BEFORE_AUTO ALWAYS:0,PAGE_BREAK_BEFORE_ALWAYS AVOID:0,PAGE_BREAK_BEFORE_AVOID LEFT:0,PAGE_BREAK_BEFORE_LEFT RIGHT:0,PAGE_BREAK_BEFORE_RIGHT IDENT:) +page_break_before:CSS_PROP_PAGE_BREAK_BEFORE IDENT:( INHERIT: INITIAL: REVERT: UNSET: AUTO:0,PAGE_BREAK_BEFORE_AUTO ALWAYS:0,PAGE_BREAK_BEFORE_ALWAYS AVOID:0,PAGE_BREAK_BEFORE_AVOID LEFT:0,PAGE_BREAK_BEFORE_LEFT RIGHT:0,PAGE_BREAK_BEFORE_RIGHT IDENT:) -page_break_inside:CSS_PROP_PAGE_BREAK_INSIDE IDENT:( INHERIT: AUTO:0,PAGE_BREAK_INSIDE_AUTO AVOID:0,PAGE_BREAK_INSIDE_AVOID IDENT:) +page_break_inside:CSS_PROP_PAGE_BREAK_INSIDE IDENT:( INHERIT: INITIAL: REVERT: UNSET: AUTO:0,PAGE_BREAK_INSIDE_AUTO AVOID:0,PAGE_BREAK_INSIDE_AVOID IDENT:) -pause_after:CSS_PROP_PAUSE_AFTER IDENT:INHERIT LENGTH_UNIT:( UNIT_S:PAUSE_AFTER_SET DISALLOW:(unit&UNIT_TIME)==false&&(unit&UNIT_PCT)==false RANGE:<0 LENGTH_UNIT:) +pause_after:CSS_PROP_PAUSE_AFTER IDENT:( INHERIT: INITIAL: REVERT: UNSET: IDENT:) LENGTH_UNIT:( UNIT_S:PAUSE_AFTER_SET MASK:UNIT_MASK_PAUSE_AFTER RANGE:<0 LENGTH_UNIT:) -pause_before:CSS_PROP_PAUSE_BEFORE IDENT:INHERIT LENGTH_UNIT:( UNIT_S:PAUSE_BEFORE_SET DISALLOW:(unit&UNIT_TIME)==false&&(unit&UNIT_PCT)==false RANGE:<0 LENGTH_UNIT:) +pause_before:CSS_PROP_PAUSE_BEFORE IDENT:( INHERIT: INITIAL: REVERT: UNSET: IDENT:) LENGTH_UNIT:( UNIT_S:PAUSE_BEFORE_SET MASK:UNIT_MASK_PAUSE_BEFORE RANGE:<0 LENGTH_UNIT:) -pitch:CSS_PROP_PITCH IDENT:( INHERIT: X_LOW:0,PITCH_X_LOW LOW:0,PITCH_LOW MEDIUM:0,PITCH_MEDIUM HIGH:0,PITCH_HIGH X_HIGH:0,PITCH_X_HIGH IDENT:) LENGTH_UNIT:( UNIT_HZ:PITCH_FREQUENCY ALLOW:unit&UNIT_FREQ RANGE:<0 LENGTH_UNIT:) +pitch:CSS_PROP_PITCH IDENT:( INHERIT: INITIAL: REVERT: UNSET: X_LOW:0,PITCH_X_LOW LOW:0,PITCH_LOW MEDIUM:0,PITCH_MEDIUM HIGH:0,PITCH_HIGH X_HIGH:0,PITCH_X_HIGH IDENT:) LENGTH_UNIT:( UNIT_HZ:PITCH_FREQUENCY MASK:UNIT_MASK_PITCH RANGE:<0 LENGTH_UNIT:) -pitch_range:CSS_PROP_PITCH_RANGE IDENT:INHERIT NUMBER:( false:PITCH_RANGE_SET RANGE:num<0||num>F_100 NUMBER:) +pitch_range:CSS_PROP_PITCH_RANGE IDENT:( INHERIT: INITIAL: REVERT: UNSET: IDENT:) NUMBER:( false:PITCH_RANGE_SET RANGE:num<0||num>F_100 NUMBER:) -position:CSS_PROP_POSITION IDENT:( INHERIT: LIBCSS_STATIC:0,POSITION_STATIC RELATIVE:0,POSITION_RELATIVE ABSOLUTE:0,POSITION_ABSOLUTE FIXED:0,POSITION_FIXED IDENT:) +position:CSS_PROP_POSITION IDENT:( INHERIT: INITIAL: REVERT: UNSET: LIBCSS_STATIC:0,POSITION_STATIC RELATIVE:0,POSITION_RELATIVE ABSOLUTE:0,POSITION_ABSOLUTE FIXED:0,POSITION_FIXED STICKY:0,POSITION_STICKY IDENT:) -richness:CSS_PROP_RICHNESS IDENT:INHERIT NUMBER:( false:RICHNESS_SET RANGE:num<0||num>F_100 NUMBER:) +richness:CSS_PROP_RICHNESS IDENT:( INHERIT: INITIAL: REVERT: UNSET: IDENT:) NUMBER:( false:RICHNESS_SET RANGE:num<0||num>F_100 NUMBER:) -speak:CSS_PROP_SPEAK IDENT:( INHERIT: NORMAL:0,SPEAK_NORMAL NONE:0,SPEAK_NONE SPELL_OUT:0,SPEAK_SPELL_OUT IDENT:) +speak:CSS_PROP_SPEAK IDENT:( INHERIT: INITIAL: REVERT: UNSET: NORMAL:0,SPEAK_NORMAL NONE:0,SPEAK_NONE SPELL_OUT:0,SPEAK_SPELL_OUT IDENT:) -speak_header:CSS_PROP_SPEAK_HEADER IDENT:( INHERIT: ONCE:0,SPEAK_HEADER_ONCE ALWAYS:0,SPEAK_HEADER_ALWAYS IDENT:) +speak_header:CSS_PROP_SPEAK_HEADER IDENT:( INHERIT: INITIAL: REVERT: UNSET: ONCE:0,SPEAK_HEADER_ONCE ALWAYS:0,SPEAK_HEADER_ALWAYS IDENT:) -speak_numeral:CSS_PROP_SPEAK_NUMERAL IDENT:( INHERIT: DIGITS:0,SPEAK_NUMERAL_DIGITS CONTINUOUS:0,SPEAK_NUMERAL_CONTINUOUS IDENT:) +speak_numeral:CSS_PROP_SPEAK_NUMERAL IDENT:( INHERIT: INITIAL: REVERT: UNSET: DIGITS:0,SPEAK_NUMERAL_DIGITS CONTINUOUS:0,SPEAK_NUMERAL_CONTINUOUS IDENT:) -speak_punctuation:CSS_PROP_SPEAK_PUNCTUATION IDENT:( INHERIT: CODE:0,SPEAK_PUNCTUATION_CODE NONE:0,SPEAK_PUNCTUATION_NONE IDENT:) +speak_punctuation:CSS_PROP_SPEAK_PUNCTUATION IDENT:( INHERIT: INITIAL: REVERT: UNSET: CODE:0,SPEAK_PUNCTUATION_CODE NONE:0,SPEAK_PUNCTUATION_NONE IDENT:) -speech_rate:CSS_PROP_SPEECH_RATE IDENT:( INHERIT: X_SLOW:0,SPEECH_RATE_X_SLOW SLOW:0,SPEECH_RATE_SLOW MEDIUM:0,SPEECH_RATE_MEDIUM FAST:0,SPEECH_RATE_FAST X_FAST:0,SPEECH_RATE_X_FAST FASTER:0,SPEECH_RATE_FASTER SLOWER:0,SPEECH_RATE_SLOWER IDENT:) NUMBER:( false:SPEECH_RATE_SET RANGE:num<0 NUMBER:) +speech_rate:CSS_PROP_SPEECH_RATE IDENT:( INHERIT: INITIAL: REVERT: UNSET: X_SLOW:0,SPEECH_RATE_X_SLOW SLOW:0,SPEECH_RATE_SLOW MEDIUM:0,SPEECH_RATE_MEDIUM FAST:0,SPEECH_RATE_FAST X_FAST:0,SPEECH_RATE_X_FAST FASTER:0,SPEECH_RATE_FASTER SLOWER:0,SPEECH_RATE_SLOWER IDENT:) NUMBER:( false:SPEECH_RATE_SET RANGE:num<0 NUMBER:) -stress:CSS_PROP_STRESS IDENT:INHERIT NUMBER:( false:STRESS_SET RANGE:num<0||num>INTTOFIX(100) NUMBER:) +stress:CSS_PROP_STRESS IDENT:( INHERIT: INITIAL: REVERT: UNSET: IDENT:) NUMBER:( false:STRESS_SET RANGE:num<0||num>INTTOFIX(100) NUMBER:) -table_layout:CSS_PROP_TABLE_LAYOUT IDENT:( INHERIT: AUTO:0,TABLE_LAYOUT_AUTO FIXED:0,TABLE_LAYOUT_FIXED IDENT:) +table_layout:CSS_PROP_TABLE_LAYOUT IDENT:( INHERIT: INITIAL: REVERT: UNSET: AUTO:0,TABLE_LAYOUT_AUTO FIXED:0,TABLE_LAYOUT_FIXED IDENT:) -text_align:CSS_PROP_TEXT_ALIGN IDENT:( INHERIT: LEFT:0,TEXT_ALIGN_LEFT RIGHT:0,TEXT_ALIGN_RIGHT CENTER:0,TEXT_ALIGN_CENTER JUSTIFY:0,TEXT_ALIGN_JUSTIFY LIBCSS_LEFT:0,TEXT_ALIGN_LIBCSS_LEFT LIBCSS_CENTER:0,TEXT_ALIGN_LIBCSS_CENTER LIBCSS_RIGHT:0,TEXT_ALIGN_LIBCSS_RIGHT IDENT:) +text_align:CSS_PROP_TEXT_ALIGN IDENT:( INHERIT: INITIAL: REVERT: UNSET: LEFT:0,TEXT_ALIGN_LEFT RIGHT:0,TEXT_ALIGN_RIGHT CENTER:0,TEXT_ALIGN_CENTER JUSTIFY:0,TEXT_ALIGN_JUSTIFY LIBCSS_LEFT:0,TEXT_ALIGN_LIBCSS_LEFT LIBCSS_CENTER:0,TEXT_ALIGN_LIBCSS_CENTER LIBCSS_RIGHT:0,TEXT_ALIGN_LIBCSS_RIGHT IDENT:) -text_indent:CSS_PROP_TEXT_INDENT IDENT:INHERIT LENGTH_UNIT:( UNIT_PX:TEXT_INDENT_SET DISALLOW:unit&UNIT_ANGLE||unit&UNIT_TIME||unit&UNIT_FREQ LENGTH_UNIT:) +text_indent:CSS_PROP_TEXT_INDENT IDENT:( INHERIT: INITIAL: REVERT: UNSET: IDENT:) LENGTH_UNIT:( UNIT_PX:TEXT_INDENT_SET MASK:UNIT_MASK_TEXT_INDENT LENGTH_UNIT:) -text_transform:CSS_PROP_TEXT_TRANSFORM IDENT:( INHERIT: CAPITALIZE:0,TEXT_TRANSFORM_CAPITALIZE UPPERCASE:0,TEXT_TRANSFORM_UPPERCASE LOWERCASE:0,TEXT_TRANSFORM_LOWERCASE NONE:0,TEXT_TRANSFORM_NONE IDENT:) +text_transform:CSS_PROP_TEXT_TRANSFORM IDENT:( INHERIT: INITIAL: REVERT: UNSET: CAPITALIZE:0,TEXT_TRANSFORM_CAPITALIZE UPPERCASE:0,TEXT_TRANSFORM_UPPERCASE LOWERCASE:0,TEXT_TRANSFORM_LOWERCASE NONE:0,TEXT_TRANSFORM_NONE IDENT:) -unicode_bidi:CSS_PROP_UNICODE_BIDI IDENT:( INHERIT: NORMAL:0,UNICODE_BIDI_NORMAL EMBED:0,UNICODE_BIDI_EMBED BIDI_OVERRIDE:0,UNICODE_BIDI_BIDI_OVERRIDE IDENT:) +unicode_bidi:CSS_PROP_UNICODE_BIDI IDENT:( INHERIT: INITIAL: REVERT: UNSET: NORMAL:0,UNICODE_BIDI_NORMAL EMBED:0,UNICODE_BIDI_EMBED BIDI_OVERRIDE:0,UNICODE_BIDI_BIDI_OVERRIDE IDENT:) -vertical_align:CSS_PROP_VERTICAL_ALIGN IDENT:( INHERIT: BASELINE:0,VERTICAL_ALIGN_BASELINE SUB:0,VERTICAL_ALIGN_SUB SUPER:0,VERTICAL_ALIGN_SUPER TOP:0,VERTICAL_ALIGN_TOP TEXT_TOP:0,VERTICAL_ALIGN_TEXT_TOP MIDDLE:0,VERTICAL_ALIGN_MIDDLE BOTTOM:0,VERTICAL_ALIGN_BOTTOM TEXT_BOTTOM:0,VERTICAL_ALIGN_TEXT_BOTTOM IDENT:) LENGTH_UNIT:( UNIT_PX:VERTICAL_ALIGN_SET DISALLOW:unit&UNIT_ANGLE||unit&UNIT_TIME||unit&UNIT_FREQ LENGTH_UNIT:) +vertical_align:CSS_PROP_VERTICAL_ALIGN IDENT:( INHERIT: INITIAL: REVERT: UNSET: BASELINE:0,VERTICAL_ALIGN_BASELINE SUB:0,VERTICAL_ALIGN_SUB SUPER:0,VERTICAL_ALIGN_SUPER TOP:0,VERTICAL_ALIGN_TOP TEXT_TOP:0,VERTICAL_ALIGN_TEXT_TOP MIDDLE:0,VERTICAL_ALIGN_MIDDLE BOTTOM:0,VERTICAL_ALIGN_BOTTOM TEXT_BOTTOM:0,VERTICAL_ALIGN_TEXT_BOTTOM IDENT:) LENGTH_UNIT:( UNIT_PX:VERTICAL_ALIGN_SET MASK:UNIT_MASK_VERTICAL_ALIGN LENGTH_UNIT:) -visibility:CSS_PROP_VISIBILITY IDENT:( INHERIT: VISIBLE:0,VISIBILITY_VISIBLE HIDDEN:0,VISIBILITY_HIDDEN COLLAPSE:0,VISIBILITY_COLLAPSE IDENT:) +visibility:CSS_PROP_VISIBILITY IDENT:( INHERIT: INITIAL: REVERT: UNSET: VISIBLE:0,VISIBILITY_VISIBLE HIDDEN:0,VISIBILITY_HIDDEN COLLAPSE:0,VISIBILITY_COLLAPSE IDENT:) -volume:CSS_PROP_VOLUME IDENT:( INHERIT: SILENT:0,VOLUME_SILENT X_SOFT:0,VOLUME_X_SOFT SOFT:0,VOLUME_SOFT MEDIUM:0,VOLUME_MEDIUM LOUD:0,VOLUME_LOUD X_LOUD:0,VOLUME_X_LOUD IDENT:) NUMBER:( false:VOLUME_NUMBER RANGE:num<0||num>F_100 NUMBER:) LENGTH_UNIT:( UNIT_PX:VOLUME_DIMENSION ALLOW:unit&UNIT_PCT RANGE:<0 LENGTH_UNIT:) +volume:CSS_PROP_VOLUME IDENT:( INHERIT: INITIAL: REVERT: UNSET: SILENT:0,VOLUME_SILENT X_SOFT:0,VOLUME_X_SOFT SOFT:0,VOLUME_SOFT MEDIUM:0,VOLUME_MEDIUM LOUD:0,VOLUME_LOUD X_LOUD:0,VOLUME_X_LOUD IDENT:) NUMBER:( false:VOLUME_NUMBER RANGE:num<0||num>F_100 NUMBER:) LENGTH_UNIT:( UNIT_PX:VOLUME_DIMENSION MASK:UNIT_MASK_VOLUME RANGE:<0 LENGTH_UNIT:) -white_space:CSS_PROP_WHITE_SPACE IDENT:( INHERIT: NORMAL:0,WHITE_SPACE_NORMAL PRE:0,WHITE_SPACE_PRE NOWRAP:0,WHITE_SPACE_NOWRAP PRE_WRAP:0,WHITE_SPACE_PRE_WRAP PRE_LINE:0,WHITE_SPACE_PRE_LINE IDENT:) +white_space:CSS_PROP_WHITE_SPACE IDENT:( INHERIT: INITIAL: REVERT: UNSET: NORMAL:0,WHITE_SPACE_NORMAL PRE:0,WHITE_SPACE_PRE NOWRAP:0,WHITE_SPACE_NOWRAP PRE_WRAP:0,WHITE_SPACE_PRE_WRAP PRE_LINE:0,WHITE_SPACE_PRE_LINE IDENT:) -widows:CSS_PROP_WIDOWS IDENT:INHERIT NUMBER:( true:WIDOWS_SET RANGE:num<0 NUMBER:) +widows:CSS_PROP_WIDOWS IDENT:( INHERIT: INITIAL: REVERT: UNSET: IDENT:) NUMBER:( true:WIDOWS_SET RANGE:num<0 NUMBER:) -width:CSS_PROP_WIDTH IDENT:( INHERIT: AUTO:0,WIDTH_AUTO IDENT:) LENGTH_UNIT:( UNIT_PX:WIDTH_SET DISALLOW:unit&UNIT_ANGLE||unit&UNIT_TIME||unit&UNIT_FREQ RANGE:<0 LENGTH_UNIT:) +width:CSS_PROP_WIDTH IDENT:( INHERIT: INITIAL: REVERT: UNSET: AUTO:0,WIDTH_AUTO IDENT:) LENGTH_UNIT:( UNIT_PX:WIDTH_SET MASK:UNIT_MASK_WIDTH RANGE:<0 LENGTH_UNIT:) -word_spacing:CSS_PROP_WORD_SPACING IDENT:( INHERIT: NORMAL:0,WORD_SPACING_NORMAL IDENT:) LENGTH_UNIT:( UNIT_PX:WORD_SPACING_SET DISALLOW:unit&UNIT_ANGLE||unit&UNIT_TIME||unit&UNIT_FREQ||unit&UNIT_PCT LENGTH_UNIT:) +word_spacing:CSS_PROP_WORD_SPACING IDENT:( INHERIT: INITIAL: REVERT: UNSET: NORMAL:0,WORD_SPACING_NORMAL IDENT:) LENGTH_UNIT:( UNIT_PX:WORD_SPACING_SET MASK:UNIT_MASK_WORD_SPACING LENGTH_UNIT:) -z_index:CSS_PROP_Z_INDEX IDENT:( INHERIT: AUTO:0,Z_INDEX_AUTO IDENT:) NUMBER:( true:Z_INDEX_SET NUMBER:) +z_index:CSS_PROP_Z_INDEX IDENT:( INHERIT: INITIAL: REVERT: UNSET: AUTO:0,Z_INDEX_AUTO IDENT:) NUMBER:( true:Z_INDEX_SET NUMBER:) -break_after:CSS_PROP_BREAK_AFTER IDENT:( INHERIT: AUTO:0,BREAK_AFTER_AUTO ALWAYS:0,BREAK_AFTER_ALWAYS AVOID:0,BREAK_AFTER_AVOID LEFT:0,BREAK_AFTER_LEFT RIGHT:0,BREAK_AFTER_RIGHT PAGE:0,BREAK_AFTER_PAGE COLUMN:0,BREAK_AFTER_COLUMN AVOID_PAGE:0,BREAK_AFTER_AVOID_PAGE AVOID_COLUMN:0,BREAK_AFTER_AVOID_COLUMN IDENT:) +break_after:CSS_PROP_BREAK_AFTER IDENT:( INHERIT: INITIAL: REVERT: UNSET: AUTO:0,BREAK_AFTER_AUTO ALWAYS:0,BREAK_AFTER_ALWAYS AVOID:0,BREAK_AFTER_AVOID LEFT:0,BREAK_AFTER_LEFT RIGHT:0,BREAK_AFTER_RIGHT PAGE:0,BREAK_AFTER_PAGE COLUMN:0,BREAK_AFTER_COLUMN AVOID_PAGE:0,BREAK_AFTER_AVOID_PAGE AVOID_COLUMN:0,BREAK_AFTER_AVOID_COLUMN IDENT:) -break_before:CSS_PROP_BREAK_BEFORE IDENT:( INHERIT: AUTO:0,BREAK_BEFORE_AUTO ALWAYS:0,BREAK_BEFORE_ALWAYS AVOID:0,BREAK_BEFORE_AVOID LEFT:0,BREAK_BEFORE_LEFT RIGHT:0,BREAK_BEFORE_RIGHT PAGE:0,BREAK_BEFORE_PAGE COLUMN:0,BREAK_BEFORE_COLUMN AVOID_PAGE:0,BREAK_BEFORE_AVOID_PAGE AVOID_COLUMN:0,BREAK_BEFORE_AVOID_COLUMN IDENT:) +break_before:CSS_PROP_BREAK_BEFORE IDENT:( INHERIT: INITIAL: REVERT: UNSET: AUTO:0,BREAK_BEFORE_AUTO ALWAYS:0,BREAK_BEFORE_ALWAYS AVOID:0,BREAK_BEFORE_AVOID LEFT:0,BREAK_BEFORE_LEFT RIGHT:0,BREAK_BEFORE_RIGHT PAGE:0,BREAK_BEFORE_PAGE COLUMN:0,BREAK_BEFORE_COLUMN AVOID_PAGE:0,BREAK_BEFORE_AVOID_PAGE AVOID_COLUMN:0,BREAK_BEFORE_AVOID_COLUMN IDENT:) -break_inside:CSS_PROP_BREAK_INSIDE IDENT:( INHERIT: AUTO:0,BREAK_INSIDE_AUTO AVOID:0,BREAK_INSIDE_AVOID AVOID_PAGE:0,BREAK_INSIDE_AVOID_PAGE AVOID_COLUMN:0,BREAK_INSIDE_AVOID_COLUMN IDENT:) +break_inside:CSS_PROP_BREAK_INSIDE IDENT:( INHERIT: INITIAL: REVERT: UNSET: AUTO:0,BREAK_INSIDE_AUTO AVOID:0,BREAK_INSIDE_AVOID AVOID_PAGE:0,BREAK_INSIDE_AVOID_PAGE AVOID_COLUMN:0,BREAK_INSIDE_AVOID_COLUMN IDENT:) -column_count:CSS_PROP_COLUMN_COUNT IDENT:( INHERIT: AUTO:0,COLUMN_COUNT_AUTO IDENT:) NUMBER:( true:COLUMN_COUNT_SET RANGE:num<0 NUMBER:) +column_count:CSS_PROP_COLUMN_COUNT IDENT:( INHERIT: INITIAL: REVERT: UNSET: AUTO:0,COLUMN_COUNT_AUTO IDENT:) NUMBER:( true:COLUMN_COUNT_SET RANGE:num<0 NUMBER:) -column_fill:CSS_PROP_COLUMN_FILL IDENT:( INHERIT: BALANCE:0,COLUMN_FILL_BALANCE AUTO:0,COLUMN_FILL_AUTO IDENT:) +column_fill:CSS_PROP_COLUMN_FILL IDENT:( INHERIT: INITIAL: REVERT: UNSET: BALANCE:0,COLUMN_FILL_BALANCE AUTO:0,COLUMN_FILL_AUTO IDENT:) -column_gap:CSS_PROP_COLUMN_GAP IDENT:( INHERIT: NORMAL:0,COLUMN_GAP_NORMAL IDENT:) LENGTH_UNIT:( UNIT_PX:COLUMN_GAP_SET RANGE:<0 DISALLOW:unit&UNIT_ANGLE||unit&UNIT_TIME||unit&UNIT_FREQ||unit&UNIT_PCT LENGTH_UNIT:) +column_gap:CSS_PROP_COLUMN_GAP IDENT:( INHERIT: INITIAL: REVERT: UNSET: NORMAL:0,COLUMN_GAP_NORMAL IDENT:) LENGTH_UNIT:( UNIT_PX:COLUMN_GAP_SET RANGE:<0 MASK:UNIT_MASK_COLUMN_GAP LENGTH_UNIT:) -column_rule_color:CSS_PROP_COLUMN_RULE_COLOR IDENT:( INHERIT: IDENT:) COLOR:COLUMN_RULE_COLOR_SET +column_rule_color:CSS_PROP_COLUMN_RULE_COLOR IDENT:( INHERIT: INITIAL: REVERT: UNSET: IDENT:) COLOR:COLUMN_RULE_COLOR_SET -column_rule_style:CSS_PROP_COLUMN_RULE_STYLE IDENT:( INHERIT: NONE:0,BORDER_STYLE_NONE HIDDEN:0,BORDER_STYLE_HIDDEN DOTTED:0,BORDER_STYLE_DOTTED DASHED:0,BORDER_STYLE_DASHED SOLID:0,BORDER_STYLE_SOLID LIBCSS_DOUBLE:0,BORDER_STYLE_DOUBLE GROOVE:0,BORDER_STYLE_GROOVE RIDGE:0,BORDER_STYLE_RIDGE INSET:0,BORDER_STYLE_INSET OUTSET:0,BORDER_STYLE_OUTSET IDENT:) +column_rule_style:CSS_PROP_COLUMN_RULE_STYLE IDENT:( INHERIT: INITIAL: REVERT: UNSET: NONE:0,BORDER_STYLE_NONE HIDDEN:0,BORDER_STYLE_HIDDEN DOTTED:0,BORDER_STYLE_DOTTED DASHED:0,BORDER_STYLE_DASHED SOLID:0,BORDER_STYLE_SOLID LIBCSS_DOUBLE:0,BORDER_STYLE_DOUBLE GROOVE:0,BORDER_STYLE_GROOVE RIDGE:0,BORDER_STYLE_RIDGE INSET:0,BORDER_STYLE_INSET OUTSET:0,BORDER_STYLE_OUTSET IDENT:) column_rule_width:CSS_PROP_COLUMN_RULE_WIDTH WRAP:css__parse_border_side_width -column_span:CSS_PROP_COLUMN_SPAN IDENT:( INHERIT: NONE:0,COLUMN_SPAN_NONE ALL:0,COLUMN_SPAN_ALL IDENT:) +column_span:CSS_PROP_COLUMN_SPAN IDENT:( INHERIT: INITIAL: REVERT: UNSET: NONE:0,COLUMN_SPAN_NONE ALL:0,COLUMN_SPAN_ALL IDENT:) -column_width:CSS_PROP_COLUMN_WIDTH IDENT:( INHERIT: AUTO:0,COLUMN_WIDTH_AUTO IDENT:) LENGTH_UNIT:( UNIT_PX:COLUMN_WIDTH_SET DISALLOW:unit&UNIT_ANGLE||unit&UNIT_TIME||unit&UNIT_FREQ||unit&UNIT_PCT LENGTH_UNIT:) +column_width:CSS_PROP_COLUMN_WIDTH IDENT:( INHERIT: INITIAL: REVERT: UNSET: AUTO:0,COLUMN_WIDTH_AUTO IDENT:) LENGTH_UNIT:( UNIT_PX:COLUMN_WIDTH_SET MASK:UNIT_MASK_COLUMN_WIDTH LENGTH_UNIT:) -writing_mode:CSS_PROP_WRITING_MODE IDENT:( INHERIT: HORIZONTAL_TB:0,WRITING_MODE_HORIZONTAL_TB VERTICAL_RL:0,WRITING_MODE_VERTICAL_RL VERTICAL_LR:0,WRITING_MODE_VERTICAL_LR IDENT:) +writing_mode:CSS_PROP_WRITING_MODE IDENT:( INHERIT: INITIAL: REVERT: UNSET: HORIZONTAL_TB:0,WRITING_MODE_HORIZONTAL_TB VERTICAL_RL:0,WRITING_MODE_VERTICAL_RL VERTICAL_LR:0,WRITING_MODE_VERTICAL_LR IDENT:) -box_sizing:CSS_PROP_BOX_SIZING IDENT:( INHERIT: CONTENT_BOX:0,BOX_SIZING_CONTENT_BOX BORDER_BOX:0,BOX_SIZING_BORDER_BOX IDENT:) +box_sizing:CSS_PROP_BOX_SIZING IDENT:( INHERIT: INITIAL: REVERT: UNSET: CONTENT_BOX:0,BOX_SIZING_CONTENT_BOX BORDER_BOX:0,BOX_SIZING_BORDER_BOX IDENT:) -align_content:CSS_PROP_ALIGN_CONTENT IDENT:( INHERIT: STRETCH:0,ALIGN_CONTENT_STRETCH FLEX_START:0,ALIGN_CONTENT_FLEX_START FLEX_END:0,ALIGN_CONTENT_FLEX_END CENTER:0,ALIGN_CONTENT_CENTER SPACE_BETWEEN:0,ALIGN_CONTENT_SPACE_BETWEEN SPACE_AROUND:0,ALIGN_CONTENT_SPACE_AROUND SPACE_EVENLY:0,ALIGN_CONTENT_SPACE_EVENLY IDENT:) +align_content:CSS_PROP_ALIGN_CONTENT IDENT:( INHERIT: INITIAL: REVERT: UNSET: STRETCH:0,ALIGN_CONTENT_STRETCH FLEX_START:0,ALIGN_CONTENT_FLEX_START FLEX_END:0,ALIGN_CONTENT_FLEX_END CENTER:0,ALIGN_CONTENT_CENTER SPACE_BETWEEN:0,ALIGN_CONTENT_SPACE_BETWEEN SPACE_AROUND:0,ALIGN_CONTENT_SPACE_AROUND SPACE_EVENLY:0,ALIGN_CONTENT_SPACE_EVENLY IDENT:) -align_items:CSS_PROP_ALIGN_ITEMS IDENT:( INHERIT: STRETCH:0,ALIGN_ITEMS_STRETCH FLEX_START:0,ALIGN_ITEMS_FLEX_START FLEX_END:0,ALIGN_ITEMS_FLEX_END CENTER:0,ALIGN_ITEMS_CENTER BASELINE:0,ALIGN_ITEMS_BASELINE IDENT:) +align_items:CSS_PROP_ALIGN_ITEMS IDENT:( INHERIT: INITIAL: REVERT: UNSET: STRETCH:0,ALIGN_ITEMS_STRETCH FLEX_START:0,ALIGN_ITEMS_FLEX_START FLEX_END:0,ALIGN_ITEMS_FLEX_END CENTER:0,ALIGN_ITEMS_CENTER BASELINE:0,ALIGN_ITEMS_BASELINE IDENT:) -align_self:CSS_PROP_ALIGN_SELF IDENT:( INHERIT: STRETCH:0,ALIGN_SELF_STRETCH FLEX_START:0,ALIGN_SELF_FLEX_START FLEX_END:0,ALIGN_SELF_FLEX_END CENTER:0,ALIGN_SELF_CENTER BASELINE:0,ALIGN_SELF_BASELINE AUTO:0,ALIGN_SELF_AUTO IDENT:) +align_self:CSS_PROP_ALIGN_SELF IDENT:( INHERIT: INITIAL: REVERT: UNSET: STRETCH:0,ALIGN_SELF_STRETCH FLEX_START:0,ALIGN_SELF_FLEX_START FLEX_END:0,ALIGN_SELF_FLEX_END CENTER:0,ALIGN_SELF_CENTER BASELINE:0,ALIGN_SELF_BASELINE AUTO:0,ALIGN_SELF_AUTO IDENT:) -flex_basis:CSS_PROP_FLEX_BASIS IDENT:( INHERIT: AUTO:0,FLEX_BASIS_AUTO CONTENT:0,FLEX_BASIS_CONTENT IDENT:) LENGTH_UNIT:( UNIT_PX:FLEX_BASIS_SET DISALLOW:unit&UNIT_ANGLE||unit&UNIT_TIME||unit&UNIT_FREQ RANGE:<0 LENGTH_UNIT:) +flex_basis:CSS_PROP_FLEX_BASIS IDENT:( INHERIT: INITIAL: REVERT: UNSET: AUTO:0,FLEX_BASIS_AUTO CONTENT:0,FLEX_BASIS_CONTENT IDENT:) LENGTH_UNIT:( UNIT_PX:FLEX_BASIS_SET MASK:UNIT_MASK_FLEX_BASIS RANGE:<0 LENGTH_UNIT:) -flex_direction:CSS_PROP_FLEX_DIRECTION IDENT:( INHERIT: ROW:0,FLEX_DIRECTION_ROW ROW_REVERSE:0,FLEX_DIRECTION_ROW_REVERSE COLUMN:0,FLEX_DIRECTION_COLUMN COLUMN_REVERSE:0,FLEX_DIRECTION_COLUMN_REVERSE IDENT:) +flex_direction:CSS_PROP_FLEX_DIRECTION IDENT:( INHERIT: INITIAL: REVERT: UNSET: ROW:0,FLEX_DIRECTION_ROW ROW_REVERSE:0,FLEX_DIRECTION_ROW_REVERSE COLUMN:0,FLEX_DIRECTION_COLUMN COLUMN_REVERSE:0,FLEX_DIRECTION_COLUMN_REVERSE IDENT:) -flex_grow:CSS_PROP_FLEX_GROW IDENT:INHERIT NUMBER:( false:FLEX_GROW_SET RANGE:num<0 NUMBER:) +flex_grow:CSS_PROP_FLEX_GROW IDENT:( INHERIT: INITIAL: REVERT: UNSET: IDENT:) NUMBER:( false:FLEX_GROW_SET RANGE:num<0 NUMBER:) -flex_shrink:CSS_PROP_FLEX_SHRINK IDENT:INHERIT NUMBER:( false:FLEX_SHRINK_SET RANGE:num<0 NUMBER:) +flex_shrink:CSS_PROP_FLEX_SHRINK IDENT:( INHERIT: INITIAL: REVERT: UNSET: IDENT:) NUMBER:( false:FLEX_SHRINK_SET RANGE:num<0 NUMBER:) -flex_wrap:CSS_PROP_FLEX_WRAP IDENT:( INHERIT: NOWRAP:0,FLEX_WRAP_NOWRAP WRAP_STRING:0,FLEX_WRAP_WRAP WRAP_REVERSE:0,FLEX_WRAP_WRAP_REVERSE IDENT:) +flex_wrap:CSS_PROP_FLEX_WRAP IDENT:( INHERIT: INITIAL: REVERT: UNSET: NOWRAP:0,FLEX_WRAP_NOWRAP WRAP_STRING:0,FLEX_WRAP_WRAP WRAP_REVERSE:0,FLEX_WRAP_WRAP_REVERSE IDENT:) -justify_content:CSS_PROP_JUSTIFY_CONTENT IDENT:( INHERIT: FLEX_START:0,JUSTIFY_CONTENT_FLEX_START FLEX_END:0,JUSTIFY_CONTENT_FLEX_END CENTER:0,JUSTIFY_CONTENT_CENTER SPACE_BETWEEN:0,JUSTIFY_CONTENT_SPACE_BETWEEN SPACE_AROUND:0,JUSTIFY_CONTENT_SPACE_AROUND SPACE_EVENLY:0,JUSTIFY_CONTENT_SPACE_EVENLY IDENT:) +justify_content:CSS_PROP_JUSTIFY_CONTENT IDENT:( INHERIT: INITIAL: REVERT: UNSET: FLEX_START:0,JUSTIFY_CONTENT_FLEX_START FLEX_END:0,JUSTIFY_CONTENT_FLEX_END CENTER:0,JUSTIFY_CONTENT_CENTER SPACE_BETWEEN:0,JUSTIFY_CONTENT_SPACE_BETWEEN SPACE_AROUND:0,JUSTIFY_CONTENT_SPACE_AROUND SPACE_EVENLY:0,JUSTIFY_CONTENT_SPACE_EVENLY IDENT:) -order:CSS_PROP_ORDER IDENT:INHERIT NUMBER:( true:ORDER_SET NUMBER:) +order:CSS_PROP_ORDER IDENT:( INHERIT: INITIAL: REVERT: UNSET: IDENT:) NUMBER:( true:ORDER_SET NUMBER:) diff --git a/src/parse/properties/properties.h b/src/parse/properties/properties.h index 1e085c5..17b7f41 100644 --- a/src/parse/properties/properties.h +++ b/src/parse/properties/properties.h @@ -17,445 +17,566 @@ * Type of property handler function */ typedef css_error (*css_prop_handler)(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); extern const css_prop_handler property_handlers[LAST_PROP + 1 - FIRST_PROP]; css_error css__parse_align_content(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_align_items(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_align_self(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_azimuth(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_background(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_background_attachment(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_background_color(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_background_image(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_background_position(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_background_repeat(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_bottom(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_bottom_color(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_bottom_style(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_bottom_width(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_color(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_collapse(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_left(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_left_color(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_left_style(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_left_width(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_right(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_right_color(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_right_style(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_right_width(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_spacing(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_style(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_top(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_top_color(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_top_style(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_top_width(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_border_width(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_bottom(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_box_sizing(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_break_after(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_break_before(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_break_inside(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_caption_side(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_clear(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_clip(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_color(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_columns(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_column_count(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_column_fill(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_column_gap(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_column_rule(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_column_rule_color(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_column_rule_style(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_column_rule_width(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_column_span(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_column_width(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_content(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_counter_increment(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_counter_reset(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_cue(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_cue_after(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_cue_before(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_cursor(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_direction(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_display(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_elevation(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_empty_cells(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, + css_style *result); +css_error css__parse_fill_opacity(css_language *c, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_flex(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_flex_basis(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_flex_direction(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_flex_flow(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_flex_grow(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_flex_shrink(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_flex_wrap(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_float(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_font(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_font_family(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_font_size(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_font_style(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_font_variant(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_font_weight(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_height(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_justify_content(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_left(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_letter_spacing(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_line_height(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_list_style(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_list_style_image(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_list_style_position(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_list_style_type(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_margin(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_margin_bottom(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_margin_left(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_margin_right(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_margin_top(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_max_height(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_max_width(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_min_height(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_min_width(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_opacity(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_order(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_orphans(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_outline(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_outline_color(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_outline_style(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_outline_width(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_overflow(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_overflow_x(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_overflow_y(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_padding(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_padding_bottom(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_padding_left(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_padding_right(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_padding_top(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_page_break_after(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_page_break_before(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_page_break_inside(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_pause(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_pause_after(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_pause_before(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_pitch_range(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_pitch(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_play_during(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_position(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_quotes(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_richness(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_right(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_speak_header(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_speak_numeral(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_speak_punctuation(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_speak(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_speech_rate(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_stress(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, + css_style *result); +css_error css__parse_stroke_opacity(css_language *c, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_table_layout(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_text_align(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_text_decoration(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_text_indent(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_text_transform(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_top(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_unicode_bidi(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_vertical_align(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_visibility(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_voice_family(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_volume(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_white_space(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_widows(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_width(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_word_spacing(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_writing_mode(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); css_error css__parse_z_index(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result); +/** Mapping from property bytecode index to bytecode unit class mask. */ +extern const uint32_t property_unit_mask[CSS_N_PROPERTIES]; + +#define UNIT_MASK_AZIMUTH (UNIT_ANGLE) +#define UNIT_MASK_BACKGROUND_ATTACHMENT (0) +#define UNIT_MASK_BACKGROUND_COLOR (0) +#define UNIT_MASK_BACKGROUND_IMAGE (0) +#define UNIT_MASK_BACKGROUND_POSITION (UNIT_LENGTH | UNIT_PCT) +#define UNIT_MASK_BACKGROUND_REPEAT (0) +#define UNIT_MASK_BORDER_COLLAPSE (0) +#define UNIT_MASK_BORDER_SPACING (UNIT_LENGTH) +#define UNIT_MASK_BORDER_SIDE_COLOR (0) +#define UNIT_MASK_BORDER_SIDE_STYLE (0) +#define UNIT_MASK_BORDER_SIDE_WIDTH (UNIT_LENGTH) +#define UNIT_MASK_BOTTOM (UNIT_LENGTH | UNIT_PCT) +#define UNIT_MASK_CAPTION_SIDE (0) +#define UNIT_MASK_CLEAR (0) +#define UNIT_MASK_CLIP (UNIT_LENGTH) +#define UNIT_MASK_COLOR (0) +#define UNIT_MASK_CONTENT (0) +#define UNIT_MASK_COUNTER_INCREMENT (0) +#define UNIT_MASK_COUNTER_RESET (0) +#define UNIT_MASK_CUE_AFTER (0) +#define UNIT_MASK_CUE_BEFORE (0) +#define UNIT_MASK_CURSOR (0) +#define UNIT_MASK_DIRECTION (0) +#define UNIT_MASK_DISPLAY (0) +#define UNIT_MASK_ELEVATION (UNIT_ANGLE) +#define UNIT_MASK_EMPTY_CELLS (0) +#define UNIT_MASK_FLOAT (0) +#define UNIT_MASK_FONT_FAMILY (0) +#define UNIT_MASK_FONT_SIZE (UNIT_LENGTH | UNIT_PCT) +#define UNIT_MASK_FONT_STYLE (0) +#define UNIT_MASK_FONT_VARIANT (0) +#define UNIT_MASK_FONT_WEIGHT (0) +#define UNIT_MASK_HEIGHT (UNIT_LENGTH | UNIT_PCT) +#define UNIT_MASK_LEFT (UNIT_LENGTH | UNIT_PCT) +#define UNIT_MASK_LETTER_SPACING (UNIT_LENGTH) +#define UNIT_MASK_LINE_HEIGHT (UNIT_LENGTH | UNIT_PCT) +#define UNIT_MASK_LIST_STYLE_IMAGE (0) +#define UNIT_MASK_LIST_STYLE_POSITION (0) +#define UNIT_MASK_LIST_STYLE_TYPE (0) +#define UNIT_MASK_MARGIN_SIDE (UNIT_LENGTH | UNIT_PCT) +#define UNIT_MASK_MAX_HEIGHT (UNIT_LENGTH | UNIT_PCT) +#define UNIT_MASK_MAX_WIDTH (UNIT_LENGTH | UNIT_PCT) +#define UNIT_MASK_MIN_HEIGHT (UNIT_LENGTH | UNIT_PCT) +#define UNIT_MASK_MIN_WIDTH (UNIT_LENGTH | UNIT_PCT) +#define UNIT_MASK_ORPHANS (0) +#define UNIT_MASK_OUTLINE_COLOR (0) +#define UNIT_MASK_OUTLINE_STYLE (0) +#define UNIT_MASK_OUTLINE_WIDTH (UNIT_LENGTH) +#define UNIT_MASK_OVERFLOW_X (0) +#define UNIT_MASK_PADDING_SIDE (UNIT_LENGTH | UNIT_PCT) +#define UNIT_MASK_PAGE_BREAK_AFTER (0) +#define UNIT_MASK_PAGE_BREAK_BEFORE (0) +#define UNIT_MASK_PAGE_BREAK_INSIDE (0) +#define UNIT_MASK_PAUSE_AFTER (UNIT_TIME | UNIT_PCT) +#define UNIT_MASK_PAUSE_BEFORE (UNIT_TIME | UNIT_PCT) +#define UNIT_MASK_PITCH_RANGE (0) +#define UNIT_MASK_PITCH (UNIT_FREQ) +#define UNIT_MASK_PLAY_DURING (0) +#define UNIT_MASK_POSITION (0) +#define UNIT_MASK_QUOTES (0) +#define UNIT_MASK_RICHNESS (0) +#define UNIT_MASK_RIGHT (UNIT_LENGTH | UNIT_PCT) +#define UNIT_MASK_SPEAK_HEADER (0) +#define UNIT_MASK_SPEAK_NUMERAL (0) +#define UNIT_MASK_SPEAK_PUNCTUATION (0) +#define UNIT_MASK_SPEAK (0) +#define UNIT_MASK_SPEECH_RATE (0) +#define UNIT_MASK_STRESS (0) +#define UNIT_MASK_TABLE_LAYOUT (0) +#define UNIT_MASK_TEXT_ALIGN (0) +#define UNIT_MASK_TEXT_DECORATION (0) +#define UNIT_MASK_TEXT_INDENT (UNIT_LENGTH | UNIT_PCT) +#define UNIT_MASK_TEXT_TRANSFORM (0) +#define UNIT_MASK_TOP (UNIT_LENGTH | UNIT_PCT) +#define UNIT_MASK_UNICODE_BIDI (0) +#define UNIT_MASK_VERTICAL_ALIGN (UNIT_LENGTH | UNIT_PCT) +#define UNIT_MASK_VISIBILITY (0) +#define UNIT_MASK_VOICE_FAMILY (0) +#define UNIT_MASK_VOLUME (UNIT_PCT) +#define UNIT_MASK_WHITE_SPACE (0) +#define UNIT_MASK_WIDOWS (0) +#define UNIT_MASK_WIDTH (UNIT_LENGTH | UNIT_PCT) +#define UNIT_MASK_WORD_SPACING (UNIT_LENGTH) +#define UNIT_MASK_Z_INDEX (0) +#define UNIT_MASK_OPACITY (0) +#define UNIT_MASK_FILL_OPACITY (0) +#define UNIT_MASK_STROKE_OPACITY (0) +#define UNIT_MASK_BREAK_AFTER (0) +#define UNIT_MASK_BREAK_BEFORE (0) +#define UNIT_MASK_BREAK_INSIDE (0) +#define UNIT_MASK_COLUMN_COUNT (0) +#define UNIT_MASK_COLUMN_FILL (0) +#define UNIT_MASK_COLUMN_GAP (UNIT_LENGTH) +#define UNIT_MASK_COLUMN_RULE_COLOR (0) +#define UNIT_MASK_COLUMN_RULE_STYLE (0) +#define UNIT_MASK_COLUMN_RULE_WIDTH (UNIT_LENGTH) +#define UNIT_MASK_COLUMN_SPAN (0) +#define UNIT_MASK_COLUMN_WIDTH (UNIT_LENGTH) +#define UNIT_MASK_WRITING_MODE (0) +#define UNIT_MASK_OVERFLOW_Y (0) +#define UNIT_MASK_BOX_SIZING (0) +#define UNIT_MASK_ALIGN_CONTENT (0) +#define UNIT_MASK_ALIGN_ITEMS (0) +#define UNIT_MASK_ALIGN_SELF (0) +#define UNIT_MASK_FLEX_BASIS (UNIT_LENGTH | UNIT_PCT) +#define UNIT_MASK_FLEX_DIRECTION (0) +#define UNIT_MASK_FLEX_GROW (0) +#define UNIT_MASK_FLEX_SHRINK (0) +#define UNIT_MASK_FLEX_WRAP (0) +#define UNIT_MASK_JUSTIFY_CONTENT (0) +#define UNIT_MASK_ORDER (0) + #endif diff --git a/src/parse/properties/quotes.c b/src/parse/properties/quotes.c index 9d3c4c9..f5360a4 100644 --- a/src/parse/properties/quotes.c +++ b/src/parse/properties/quotes.c @@ -28,12 +28,13 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_quotes(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error = CSS_INVALID; const css_token *token; + enum flag_value flag_value; bool match; /* [ STRING STRING ]+ | IDENT(none,inherit) */ @@ -45,11 +46,12 @@ css_error css__parse_quotes(css_language *c, return CSS_INVALID; } - if ((token->type == CSS_TOKEN_IDENT) && - (lwc_string_caseless_isequal(token->idata, - c->strings[INHERIT], - &match) == lwc_error_ok && match)) { - error = css_stylesheet_style_inherit(result, CSS_PROP_QUOTES); + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_QUOTES); + } else if ((token->type == CSS_TOKEN_IDENT) && (lwc_string_caseless_isequal(token->idata, c->strings[NONE], diff --git a/src/parse/properties/stroke_opacity.c b/src/parse/properties/stroke_opacity.c new file mode 100644 index 0000000..7c10998 --- /dev/null +++ b/src/parse/properties/stroke_opacity.c @@ -0,0 +1,82 @@ +/* + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + */ + +#include <assert.h> +#include <string.h> + +#include "bytecode/bytecode.h" +#include "bytecode/opcodes.h" +#include "parse/properties/properties.h" +#include "parse/properties/utils.h" + +/** + * Parse stroke-opacity + * + * \param c Parsing context + * \param vector Vector of tokens to process + * \param ctx Pointer to vector iteration context + * \param result resulting style + * \return CSS_OK on success, + * CSS_NOMEM on memory exhaustion, + * CSS_INVALID if the input is not valid + * + * Post condition: \a *ctx is updated with the next token to process + * If the input is invalid, then \a *ctx remains unchanged. + */ +css_error css__parse_stroke_opacity(css_language *c, + const parserutils_vector *vector, int32_t *ctx, + css_style *result) +{ + int32_t orig_ctx = *ctx; + css_error error; + const css_token *token; + enum flag_value flag_value; + + token = parserutils_vector_iterate(vector, ctx); + if ((token == NULL) || ((token->type != CSS_TOKEN_IDENT) && (token->type != CSS_TOKEN_NUMBER))) { + *ctx = orig_ctx; + return CSS_INVALID; + } + + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_STROKE_OPACITY); + + } else if (token->type == CSS_TOKEN_NUMBER) { + css_fixed num = 0; + size_t consumed = 0; + + num = css__number_from_lwc_string(token->idata, false, &consumed); + /* Invalid if there are trailing characters */ + if (consumed != lwc_string_length(token->idata)) { + *ctx = orig_ctx; + return CSS_INVALID; + } + + /* Clamp to range [0,1] */ + if (num < 0) + num = 0; + if (num > INTTOFIX(1)) + num = INTTOFIX(1); + + error = css__stylesheet_style_appendOPV(result, CSS_PROP_STROKE_OPACITY, 0, STROKE_OPACITY_SET); + if (error != CSS_OK) { + *ctx = orig_ctx; + return error; + } + + error = css__stylesheet_style_append(result, num); + } else { + error = CSS_INVALID; + } + + if (error != CSS_OK) + *ctx = orig_ctx; + + return error; +} + diff --git a/src/parse/properties/text_decoration.c b/src/parse/properties/text_decoration.c index a7bae24..4849a12 100644 --- a/src/parse/properties/text_decoration.c +++ b/src/parse/properties/text_decoration.c @@ -28,12 +28,13 @@ * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_text_decoration(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error = CSS_INVALID; const css_token *token; + enum flag_value flag_value; bool match; /* IDENT([ underline || overline || line-through || blink ]) @@ -44,10 +45,14 @@ css_error css__parse_text_decoration(css_language *c, return CSS_INVALID; } + flag_value = get_css_flag_value(c, token); + if (lwc_string_caseless_isequal(token->idata, c->strings[INHERIT], &match) == lwc_error_ok && match) { - error = css_stylesheet_style_inherit(result, CSS_PROP_TEXT_DECORATION); + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_TEXT_DECORATION); + } else if (lwc_string_caseless_isequal(token->idata, c->strings[NONE], &match) == lwc_error_ok && match) { diff --git a/src/parse/properties/utils.c b/src/parse/properties/utils.c index 0e49853..e6ab872 100644 --- a/src/parse/properties/utils.c +++ b/src/parse/properties/utils.c @@ -29,77 +29,83 @@ css_error css__parse_list_style_type_value(css_language *c, const css_token *ident, uint16_t *value) { - bool match; - /* IDENT (disc, circle, square, decimal, decimal-leading-zero, * lower-roman, upper-roman, lower-greek, lower-latin, * upper-latin, armenian, georgian, lower-alpha, upper-alpha, * none) */ - if ((lwc_string_caseless_isequal( - ident->idata, c->strings[DISC], - &match) == lwc_error_ok && match)) { - *value = LIST_STYLE_TYPE_DISC; - } else if ((lwc_string_caseless_isequal( - ident->idata, c->strings[CIRCLE], - &match) == lwc_error_ok && match)) { - *value = LIST_STYLE_TYPE_CIRCLE; - } else if ((lwc_string_caseless_isequal( - ident->idata, c->strings[SQUARE], - &match) == lwc_error_ok && match)) { - *value = LIST_STYLE_TYPE_SQUARE; - } else if ((lwc_string_caseless_isequal( - ident->idata, c->strings[DECIMAL], - &match) == lwc_error_ok && match)) { - *value = LIST_STYLE_TYPE_DECIMAL; - } else if ((lwc_string_caseless_isequal( - ident->idata, c->strings[DECIMAL_LEADING_ZERO], - &match) == lwc_error_ok && match)) { - *value = LIST_STYLE_TYPE_DECIMAL_LEADING_ZERO; - } else if ((lwc_string_caseless_isequal( - ident->idata, c->strings[LOWER_ROMAN], - &match) == lwc_error_ok && match)) { - *value = LIST_STYLE_TYPE_LOWER_ROMAN; - } else if ((lwc_string_caseless_isequal( - ident->idata, c->strings[UPPER_ROMAN], - &match) == lwc_error_ok && match)) { - *value = LIST_STYLE_TYPE_UPPER_ROMAN; - } else if ((lwc_string_caseless_isequal( - ident->idata, c->strings[LOWER_GREEK], - &match) == lwc_error_ok && match)) { - *value = LIST_STYLE_TYPE_LOWER_GREEK; - } else if ((lwc_string_caseless_isequal( - ident->idata, c->strings[LOWER_LATIN], - &match) == lwc_error_ok && match)) { - *value = LIST_STYLE_TYPE_LOWER_LATIN; - } else if ((lwc_string_caseless_isequal( - ident->idata, c->strings[UPPER_LATIN], - &match) == lwc_error_ok && match)) { - *value = LIST_STYLE_TYPE_UPPER_LATIN; - } else if ((lwc_string_caseless_isequal( - ident->idata, c->strings[ARMENIAN], - &match) == lwc_error_ok && match)) { - *value = LIST_STYLE_TYPE_ARMENIAN; - } else if ((lwc_string_caseless_isequal( - ident->idata, c->strings[GEORGIAN], - &match) == lwc_error_ok && match)) { - *value = LIST_STYLE_TYPE_GEORGIAN; - } else if ((lwc_string_caseless_isequal( - ident->idata, c->strings[LOWER_ALPHA], - &match) == lwc_error_ok && match)) { - *value = LIST_STYLE_TYPE_LOWER_ALPHA; - } else if ((lwc_string_caseless_isequal( - ident->idata, c->strings[UPPER_ALPHA], - &match) == lwc_error_ok && match)) { - *value = LIST_STYLE_TYPE_UPPER_ALPHA; - } else if ((lwc_string_caseless_isequal( - ident->idata, c->strings[NONE], - &match) == lwc_error_ok && match)) { - *value = LIST_STYLE_TYPE_NONE; - } else - return CSS_INVALID; + #define MAP_ENTRIES 52 + bool match; + int midx; + const struct { + int stringid; + int value; + } mapping[MAP_ENTRIES] = { + { DISC, LIST_STYLE_TYPE_DISC }, + { CIRCLE, LIST_STYLE_TYPE_CIRCLE }, + { SQUARE, LIST_STYLE_TYPE_SQUARE }, + { DECIMAL, LIST_STYLE_TYPE_DECIMAL }, + { DECIMAL_LEADING_ZERO, LIST_STYLE_TYPE_DECIMAL_LEADING_ZERO }, + { LOWER_ROMAN, LIST_STYLE_TYPE_LOWER_ROMAN }, + { UPPER_ROMAN, LIST_STYLE_TYPE_UPPER_ROMAN }, + { LOWER_GREEK, LIST_STYLE_TYPE_LOWER_GREEK }, + { LOWER_LATIN, LIST_STYLE_TYPE_LOWER_LATIN }, + { UPPER_LATIN, LIST_STYLE_TYPE_UPPER_LATIN }, + { ARMENIAN, LIST_STYLE_TYPE_ARMENIAN }, + { GEORGIAN, LIST_STYLE_TYPE_GEORGIAN }, + { LOWER_ALPHA, LIST_STYLE_TYPE_LOWER_ALPHA }, + { UPPER_ALPHA, LIST_STYLE_TYPE_UPPER_ALPHA }, + { NONE, LIST_STYLE_TYPE_NONE }, + { BINARY, LIST_STYLE_TYPE_BINARY }, + { OCTAL, LIST_STYLE_TYPE_OCTAL}, + { LOWER_HEXADECIMAL, LIST_STYLE_TYPE_LOWER_HEXADECIMAL }, + { UPPER_HEXADECIMAL, LIST_STYLE_TYPE_UPPER_HEXADECIMAL }, + { ARABIC_INDIC, LIST_STYLE_TYPE_ARABIC_INDIC }, + { LOWER_ARMENIAN, LIST_STYLE_TYPE_LOWER_ARMENIAN }, + { UPPER_ARMENIAN, LIST_STYLE_TYPE_UPPER_ARMENIAN }, + { BENGALI, LIST_STYLE_TYPE_BENGALI }, + { CAMBODIAN, LIST_STYLE_TYPE_CAMBODIAN }, + { KHMER, LIST_STYLE_TYPE_KHMER }, + { CJK_DECIMAL, LIST_STYLE_TYPE_CJK_DECIMAL }, + { DEVANAGARI, LIST_STYLE_TYPE_DEVANAGARI }, + { GUJARATI, LIST_STYLE_TYPE_GUJARATI }, + { GURMUKHI, LIST_STYLE_TYPE_GURMUKHI }, + { HEBREW, LIST_STYLE_TYPE_HEBREW }, + { KANNADA, LIST_STYLE_TYPE_KANNADA }, + { LAO, LIST_STYLE_TYPE_LAO }, + { MALAYALAM, LIST_STYLE_TYPE_MALAYALAM }, + { MONGOLIAN, LIST_STYLE_TYPE_MONGOLIAN }, + { MYANMAR, LIST_STYLE_TYPE_MYANMAR }, + { ORIYA, LIST_STYLE_TYPE_ORIYA }, + { PERSIAN, LIST_STYLE_TYPE_PERSIAN }, + { TAMIL, LIST_STYLE_TYPE_TAMIL }, + { TELUGU, LIST_STYLE_TYPE_TELUGU }, + { THAI, LIST_STYLE_TYPE_THAI }, + { TIBETAN, LIST_STYLE_TYPE_TIBETAN }, + { CJK_EARTHLY_BRANCH, LIST_STYLE_TYPE_CJK_EARTHLY_BRANCH }, + { CJK_HEAVENLY_STEM, LIST_STYLE_TYPE_CJK_HEAVENLY_STEM }, + { HIAGANA, LIST_STYLE_TYPE_HIAGANA }, + { HIAGANA_IROHA, LIST_STYLE_TYPE_HIAGANA_IROHA }, + { KATAKANA, LIST_STYLE_TYPE_KATAKANA }, + { KATAKANA_IROHA, LIST_STYLE_TYPE_KATAKANA_IROHA }, + { JAPANESE_INFORMAL, LIST_STYLE_TYPE_JAPANESE_INFORMAL }, + { JAPANESE_FORMAL, LIST_STYLE_TYPE_JAPANESE_FORMAL }, + { KOREAN_HANGUL_FORMAL, LIST_STYLE_TYPE_KOREAN_HANGUL_FORMAL }, + { KOREAN_HANJA_INFORMAL, LIST_STYLE_TYPE_KOREAN_HANJA_INFORMAL }, + { KOREAN_HANJA_FORMAL, LIST_STYLE_TYPE_KOREAN_HANJA_FORMAL } + }; - return CSS_OK; + for (midx = 0; midx < MAP_ENTRIES; midx++) { + if ((lwc_string_caseless_isequal( + ident->idata, + c->strings[mapping[midx].stringid], + &match) == lwc_error_ok && match)) { + *value = mapping[midx].value; + return CSS_OK; + } + } + + return CSS_INVALID; } @@ -120,10 +126,10 @@ css_error css__parse_list_style_type_value(css_language *c, const css_token *ide * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_border_side(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result, enum border_side_e side) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; int prev_ctx; const css_token *token; css_error error = CSS_OK; @@ -360,10 +366,10 @@ static void HSL_to_RGB(css_fixed hue, css_fixed sat, css_fixed lit, uint8_t *r, * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_colour_specifier(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, uint16_t *value, uint32_t *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; const css_token *token; bool match; css_error error; @@ -907,11 +913,11 @@ css_error css__parse_hash_colour(lwc_string *data, uint32_t *result) * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_unit_specifier(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, uint32_t default_unit, css_fixed *length, uint32_t *unit) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; const css_token *token; css_fixed num; size_t consumed = 0; @@ -932,7 +938,7 @@ css_error css__parse_unit_specifier(css_language *c, if (token->type == CSS_TOKEN_DIMENSION) { size_t len = lwc_string_length(token->idata); const char *data = lwc_string_data(token->idata); - css_unit temp_unit = CSS_UNIT_PX; + uint32_t temp_unit = CSS_UNIT_PX; error = css__parse_unit_keyword(data + consumed, len - consumed, &temp_unit); @@ -941,7 +947,7 @@ css_error css__parse_unit_specifier(css_language *c, return error; } - *unit = (uint32_t) temp_unit; + *unit = temp_unit; } else if (token->type == CSS_TOKEN_NUMBER) { /* Non-zero values are permitted in quirks mode */ if (num != 0) { @@ -960,8 +966,8 @@ css_error css__parse_unit_specifier(css_language *c, * dimensions separated from their units by whitespace * (e.g. "0 px") */ - int temp_ctx = *ctx; - css_unit temp_unit; + int32_t temp_ctx = *ctx; + uint32_t temp_unit; consumeWhitespace(vector, &temp_ctx); @@ -975,7 +981,7 @@ css_error css__parse_unit_specifier(css_language *c, if (error == CSS_OK) { c->sheet->quirks_used = true; *ctx = temp_ctx; - *unit = (uint32_t) temp_unit; + *unit = temp_unit; } } } @@ -1026,12 +1032,8 @@ css_error css__parse_unit_keyword(const char *ptr, size_t len, uint32_t *unit) *unit = UNIT_DEG; else if (strncasecmp(ptr, "rad", 3) == 0) *unit = UNIT_RAD; - else if (strncasecmp(ptr, "cap", 3) == 0) - *unit = UNIT_CAP; else if (strncasecmp(ptr, "rem", 3) == 0) *unit = UNIT_REM; - else if (strncasecmp(ptr, "rlh", 3) == 0) - *unit = UNIT_RLH; else if (strncasecmp(ptr, "dpi", 3) == 0) *unit = UNIT_DPI; else @@ -1059,8 +1061,6 @@ css_error css__parse_unit_keyword(const char *ptr, size_t len, uint32_t *unit) *unit = UNIT_PC; else if (strncasecmp(ptr, "ch", 2) == 0) *unit = UNIT_CH; - else if (strncasecmp(ptr, "ic", 2) == 0) - *unit = UNIT_IC; else if (strncasecmp(ptr, "lh", 2) == 0) *unit = UNIT_LH; else if (strncasecmp(ptr, "vh", 2) == 0) @@ -1103,7 +1103,7 @@ css_error css__parse_unit_keyword(const char *ptr, size_t len, uint32_t *unit) * The resulting string's reference is passed to the caller */ css_error css__ident_list_or_string_to_string(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, bool (*reserved)(css_language *c, const css_token *ident), lwc_string **result) { @@ -1117,7 +1117,7 @@ css_error css__ident_list_or_string_to_string(css_language *c, token = parserutils_vector_iterate(vector, ctx); *result = lwc_string_ref(token->idata); return CSS_OK; - } else if(token->type == CSS_TOKEN_IDENT) { + } else if(token->type == CSS_TOKEN_IDENT) { return css__ident_list_to_string(c, vector, ctx, reserved, result); } @@ -1141,11 +1141,11 @@ css_error css__ident_list_or_string_to_string(css_language *c, * The resulting string's reference is passed to the caller */ css_error css__ident_list_to_string(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, bool (*reserved)(css_language *c, const css_token *ident), lwc_string **result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; const css_token *token; css_error error = CSS_OK; parserutils_buffer *buffer; @@ -1229,12 +1229,12 @@ cleanup: * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__comma_list_to_style(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, bool (*reserved)(css_language *c, const css_token *ident), css_code_t (*get_value)(css_language *c, const css_token *token, bool first), css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; int prev_ctx = orig_ctx; const css_token *token; bool first = true; @@ -1333,4 +1333,3 @@ cleanup: return error; } - diff --git a/src/parse/properties/utils.h b/src/parse/properties/utils.h index e4c97c7..aab14e8 100644 --- a/src/parse/properties/utils.h +++ b/src/parse/properties/utils.h @@ -19,6 +19,35 @@ static inline bool is_css_inherit(css_language *c, const css_token *token) &match) == lwc_error_ok && match)); } +static inline enum flag_value get_css_flag_value( + css_language *c, + const css_token *token) +{ + if (token->type == CSS_TOKEN_IDENT) { + bool match; + + if (lwc_string_caseless_isequal( + token->idata, c->strings[INHERIT], + &match) == lwc_error_ok && match) { + return FLAG_VALUE_INHERIT; + } else if (lwc_string_caseless_isequal( + token->idata, c->strings[INITIAL], + &match) == lwc_error_ok && match) { + return FLAG_VALUE_INITIAL; + } else if (lwc_string_caseless_isequal( + token->idata, c->strings[REVERT], + &match) == lwc_error_ok && match) { + return FLAG_VALUE_REVERT; + } else if (lwc_string_caseless_isequal( + token->idata, c->strings[UNSET], + &match) == lwc_error_ok && match) { + return FLAG_VALUE_UNSET; + } + } + + return FLAG_VALUE__NONE; +} + enum border_side_e { BORDER_SIDE_TOP = 0, BORDER_SIDE_RIGHT = 1, BORDER_SIDE_BOTTOM = 2, BORDER_SIDE_LEFT = 3 }; /** @@ -37,7 +66,7 @@ enum border_side_e { BORDER_SIDE_TOP = 0, BORDER_SIDE_RIGHT = 1, BORDER_SIDE_BOT * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_border_side(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result, enum border_side_e side); /** @@ -56,7 +85,7 @@ css_error css__parse_border_side(css_language *c, * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_border_side_color(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result, enum css_properties_e op); /** @@ -75,7 +104,7 @@ css_error css__parse_border_side_color(css_language *c, * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_border_side_style(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result, enum css_properties_e op); @@ -95,7 +124,7 @@ css_error css__parse_border_side_style(css_language *c, * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_border_side_width(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result, enum css_properties_e op); @@ -115,7 +144,7 @@ css_error css__parse_border_side_width(css_language *c, * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_side(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result, enum css_properties_e op); @@ -134,7 +163,7 @@ css_error css__parse_side(css_language *c, * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_margin_side(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result, enum css_properties_e op); /** @@ -152,7 +181,7 @@ css_error css__parse_margin_side(css_language *c, * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_padding_side(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result, enum css_properties_e op); @@ -165,7 +194,7 @@ css_error css__parse_list_style_type_value(css_language *c, const css_token *token, uint16_t *value); css_error css__parse_colour_specifier(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, uint16_t *value, uint32_t *result); css_error css__parse_named_colour(css_language *c, lwc_string *data, @@ -174,7 +203,7 @@ css_error css__parse_named_colour(css_language *c, lwc_string *data, css_error css__parse_hash_colour(lwc_string *data, uint32_t *result); css_error css__parse_unit_specifier(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, uint32_t default_unit, css_fixed *length, uint32_t *unit); @@ -182,17 +211,17 @@ css_error css__parse_unit_keyword(const char *ptr, size_t len, uint32_t *unit); css_error css__ident_list_or_string_to_string(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, bool (*reserved)(css_language *c, const css_token *ident), lwc_string **result); css_error css__ident_list_to_string(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, bool (*reserved)(css_language *c, const css_token *ident), lwc_string **result); css_error css__comma_list_to_style(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, bool (*reserved)(css_language *c, const css_token *ident), css_code_t (*get_value)(css_language *c, const css_token *token, diff --git a/src/parse/properties/voice_family.c b/src/parse/properties/voice_family.c index 193cb6b..45d63f1 100644 --- a/src/parse/properties/voice_family.c +++ b/src/parse/properties/voice_family.c @@ -84,13 +84,13 @@ static css_code_t voice_family_value(css_language *c, const css_token *token, bo * If the input is invalid, then \a *ctx remains unchanged. */ css_error css__parse_voice_family(css_language *c, - const parserutils_vector *vector, int *ctx, + const parserutils_vector *vector, int32_t *ctx, css_style *result) { - int orig_ctx = *ctx; + int32_t orig_ctx = *ctx; css_error error; const css_token *token; - bool match; + enum flag_value flag_value; /* [ IDENT+ | STRING ] [ ',' [ IDENT+ | STRING ] ]* | IDENT(inherit) * @@ -105,11 +105,12 @@ css_error css__parse_voice_family(css_language *c, return CSS_INVALID; } - if (token->type == CSS_TOKEN_IDENT && - (lwc_string_caseless_isequal( - token->idata, c->strings[INHERIT], - &match) == lwc_error_ok && match)) { - error = css_stylesheet_style_inherit(result, CSS_PROP_VOICE_FAMILY); + flag_value = get_css_flag_value(c, token); + + if (flag_value != FLAG_VALUE__NONE) { + error = css_stylesheet_style_flag_value(result, flag_value, + CSS_PROP_VOICE_FAMILY); + } else { *ctx = orig_ctx; diff --git a/src/parse/propstrings.c b/src/parse/propstrings.c index 3c9401b..c57bc1b 100644 --- a/src/parse/propstrings.c +++ b/src/parse/propstrings.c @@ -10,6 +10,10 @@ #include <assert.h> +/** build string map entry with a string constant */ +#define SMAP(s) { s, (sizeof((s)) - 1) /* -1 for '\0' */ } + + typedef struct stringmap_entry { const char *data; size_t len; @@ -24,576 +28,620 @@ static css__propstrings_ctx css__propstrings; /* Must be synchronised with enum in propstrings.h */ const stringmap_entry stringmap[LAST_KNOWN] = { - { "*", SLEN("*") }, + SMAP("*"), - { ":", SLEN(":") }, - { ",", SLEN(",") }, - { ";", SLEN(";") }, - { "{", SLEN("{") }, - { "}", SLEN("}") }, - { "0", SLEN("0") }, + SMAP(":"), + SMAP(","), + SMAP(";"), + SMAP("{"), + SMAP("}"), + SMAP("0"), - { "charset", SLEN("charset") }, - { "import", SLEN("import") }, - { "media", SLEN("media") }, - { "namespace", SLEN("namespace") }, - { "font-face", SLEN("font-face") }, - { "page", SLEN("page") }, + SMAP("charset"), + SMAP("import"), + SMAP("media"), + SMAP("namespace"), + SMAP("font-face"), + SMAP("page"), - { "aural", SLEN("aural") }, - { "braille", SLEN("braille") }, - { "embossed", SLEN("embossed") }, - { "handheld", SLEN("handheld") }, - { "print", SLEN("print") }, - { "projection", SLEN("projection") }, - { "screen", SLEN("screen") }, - { "speech", SLEN("speech") }, - { "tty", SLEN("tty") }, - { "tv", SLEN("tv") }, - { "all", SLEN("all") }, + SMAP("aural"), + SMAP("braille"), + SMAP("embossed"), + SMAP("handheld"), + SMAP("print"), + SMAP("projection"), + SMAP("screen"), + SMAP("speech"), + SMAP("tty"), + SMAP("tv"), + SMAP("all"), - { "first-child", SLEN("first-child") }, - { "link", SLEN("link") }, - { "visited", SLEN("visited") }, - { "hover", SLEN("hover") }, - { "active", SLEN("active") }, - { "focus", SLEN("focus") }, - { "lang", SLEN("lang") }, - { "first", SLEN("first") }, - { "root", SLEN("root") }, - { "nth-child", SLEN("nth-child") }, - { "nth-last-child", SLEN("nth-last-child") }, - { "nth-of-type", SLEN("nth-of-type") }, - { "nth-last-of-type", SLEN("nth-last-of-type") }, - { "last-child", SLEN("last-child") }, - { "first-of-type", SLEN("first-of-type") }, - { "last-of-type", SLEN("last-of-type") }, - { "only-child", SLEN("only-child") }, - { "only-of-type", SLEN("only-of-type") }, - { "empty", SLEN("empty") }, - { "target", SLEN("target") }, - { "enabled", SLEN("enabled") }, - { "disabled", SLEN("disabled") }, - { "checked", SLEN("checked") }, - { "not", SLEN("not") }, + SMAP("first-child"), + SMAP("link"), + SMAP("visited"), + SMAP("hover"), + SMAP("active"), + SMAP("focus"), + SMAP("lang"), + SMAP("first"), + SMAP("root"), + SMAP("nth-child"), + SMAP("nth-last-child"), + SMAP("nth-of-type"), + SMAP("nth-last-of-type"), + SMAP("last-child"), + SMAP("first-of-type"), + SMAP("last-of-type"), + SMAP("only-child"), + SMAP("only-of-type"), + SMAP("empty"), + SMAP("target"), + SMAP("enabled"), + SMAP("disabled"), + SMAP("checked"), + SMAP("not"), - { "first-line", SLEN("first-line") }, - { "first-letter", SLEN("first-letter") }, - { "before", SLEN("before") }, - { "after", SLEN("after") }, + SMAP("first-line"), + SMAP("first-letter"), + SMAP("before"), + SMAP("after"), - { "align-content", SLEN("align-content") }, - { "align-items", SLEN("align-items") }, - { "align-self", SLEN("align-self") }, - { "azimuth", SLEN("azimuth") }, - { "background", SLEN("background") }, - { "background-attachment", SLEN("background-attachment") }, - { "background-color", SLEN("background-color") }, - { "background-image", SLEN("background-image") }, - { "background-position", SLEN("background-position") }, - { "background-repeat", SLEN("background-repeat") }, - { "border", SLEN("border") }, - { "border-bottom", SLEN("border-bottom") }, - { "border-bottom-color", SLEN("border-bottom-color") }, - { "border-bottom-style", SLEN("border-bottom-style") }, - { "border-bottom-width", SLEN("border-bottom-width") }, - { "border-collapse", SLEN("border-collapse") }, - { "border-color", SLEN("border-color") }, - { "border-left", SLEN("border-left") }, - { "border-left-color", SLEN("border-left-color") }, - { "border-left-style", SLEN("border-left-style") }, - { "border-left-width", SLEN("border-left-width") }, - { "border-right", SLEN("border-right") }, - { "border-right-color", SLEN("border-right-color") }, - { "border-right-style", SLEN("border-right-style") }, - { "border-right-width", SLEN("border-right-width") }, - { "border-spacing", SLEN("border-spacing") }, - { "border-style", SLEN("border-style") }, - { "border-top", SLEN("border-top") }, - { "border-top-color", SLEN("border-top-color") }, - { "border-top-style", SLEN("border-top-style") }, - { "border-top-width", SLEN("border-top-width") }, - { "border-width", SLEN("border-width") }, - { "bottom", SLEN("bottom") }, - { "box-sizing", SLEN("box-sizing") }, - { "break-after", SLEN("break-after") }, - { "break-before", SLEN("break-before") }, - { "break-inside", SLEN("break-inside") }, - { "caption-side", SLEN("caption-side") }, - { "clear", SLEN("clear") }, - { "clip", SLEN("clip") }, - { "color", SLEN("color") }, - { "columns", SLEN("columns") }, - { "column-count", SLEN("column-count") }, - { "column-fill", SLEN("column-fill") }, - { "column-gap", SLEN("column-gap") }, - { "column-rule", SLEN("column-rule") }, - { "column-rule-color", SLEN("column-rule-color") }, - { "column-rule-style", SLEN("column-rule-style") }, - { "column-rule-width", SLEN("column-rule_width") }, - { "column-span", SLEN("column-span") }, - { "column-width", SLEN("column-width") }, - { "content", SLEN("content") }, - { "counter-increment", SLEN("counter-increment") }, - { "counter-reset", SLEN("counter-reset") }, - { "cue", SLEN("cue") }, - { "cue-after", SLEN("cue-after") }, - { "cue-before", SLEN("cue-before") }, - { "cursor", SLEN("cursor") }, - { "direction", SLEN("direction") }, - { "display", SLEN("display") }, - { "elevation", SLEN("elevation") }, - { "empty-cells", SLEN("empty-cells") }, - { "flex", SLEN("flex") }, - { "flex-basis", SLEN("flex-basis") }, - { "flex-direction", SLEN("flex-direction") }, - { "flex-flow", SLEN("flex-flow") }, - { "flex-grow", SLEN("flex-grow") }, - { "flex-shrink", SLEN("flex-shrink") }, - { "flex-wrap", SLEN("flex-wrap") }, - { "float", SLEN("float") }, - { "font", SLEN("font") }, - { "font-family", SLEN("font-family") }, - { "font-size", SLEN("font-size") }, - { "font-style", SLEN("font-style") }, - { "font-variant", SLEN("font-variant") }, - { "font-weight", SLEN("font-weight") }, - { "height", SLEN("height") }, - { "justify-content", SLEN("justify-content") }, - { "left", SLEN("left") }, - { "letter-spacing", SLEN("letter-spacing") }, - { "line-height", SLEN("line-height") }, - { "list-style", SLEN("list-style") }, - { "list-style-image", SLEN("list-style-image") }, - { "list-style-position", SLEN("list-style-position") }, - { "list-style-type", SLEN("list-style-type") }, - { "margin", SLEN("margin") }, - { "margin-bottom", SLEN("margin-bottom") }, - { "margin-left", SLEN("margin-left") }, - { "margin-right", SLEN("margin-right") }, - { "margin-top", SLEN("margin-top") }, - { "max-height", SLEN("max-height") }, - { "max-width", SLEN("max-width") }, - { "min-height", SLEN("min-height") }, - { "min-width", SLEN("min-width") }, - { "opacity", SLEN("opacity") }, - { "order", SLEN("order") }, - { "orphans", SLEN("orphans") }, - { "outline", SLEN("outline") }, - { "outline-color", SLEN("outline-color") }, - { "outline-style", SLEN("outline-style") }, - { "outline-width", SLEN("outline-width") }, - { "overflow", SLEN("overflow") }, - { "overflow-x", SLEN("overflow-x") }, - { "overflow-y", SLEN("overflow-y") }, - { "padding", SLEN("padding") }, - { "padding-bottom", SLEN("padding-bottom") }, - { "padding-left", SLEN("padding-left") }, - { "padding-right", SLEN("padding-right") }, - { "padding-top", SLEN("padding-top") }, - { "page-break-after", SLEN("page-break-after") }, - { "page-break-before", SLEN("page-break-before") }, - { "page-break-inside", SLEN("page-break-inside") }, - { "pause", SLEN("pause") }, - { "pause-after", SLEN("pause-after") }, - { "pause-before", SLEN("pause-before") }, - { "pitch-range", SLEN("pitch-range") }, - { "pitch", SLEN("pitch") }, - { "play-during", SLEN("play-during") }, - { "position", SLEN("position") }, - { "quotes", SLEN("quotes") }, - { "richness", SLEN("richness") }, - { "right", SLEN("right") }, - { "speak-header", SLEN("speak-header") }, - { "speak-numeral", SLEN("speak-numeral") }, - { "speak-punctuation", SLEN("speak-punctuation") }, - { "speak", SLEN("speak") }, - { "speech-rate", SLEN("speech-rate") }, - { "stress", SLEN("stress") }, - { "table-layout", SLEN("table-layout") }, - { "text-align", SLEN("text-align") }, - { "text-decoration", SLEN("text-decoration") }, - { "text-indent", SLEN("text-indent") }, - { "text-transform", SLEN("text-transform") }, - { "top", SLEN("top") }, - { "unicode-bidi", SLEN("unicode-bidi") }, - { "vertical-align", SLEN("vertical-align") }, - { "visibility", SLEN("visibility") }, - { "voice-family", SLEN("voice-family") }, - { "volume", SLEN("volume") }, - { "white-space", SLEN("white-space") }, - { "widows", SLEN("widows") }, - { "width", SLEN("width") }, - { "word-spacing", SLEN("word-spacing") }, - { "writing-mode", SLEN("writing-mode") }, - { "z-index", SLEN("z-index") }, + SMAP("align-content"), + SMAP("align-items"), + SMAP("align-self"), + SMAP("azimuth"), + SMAP("background"), + SMAP("background-attachment"), + SMAP("background-color"), + SMAP("background-image"), + SMAP("background-position"), + SMAP("background-repeat"), + SMAP("border"), + SMAP("border-bottom"), + SMAP("border-bottom-color"), + SMAP("border-bottom-style"), + SMAP("border-bottom-width"), + SMAP("border-collapse"), + SMAP("border-color"), + SMAP("border-left"), + SMAP("border-left-color"), + SMAP("border-left-style"), + SMAP("border-left-width"), + SMAP("border-right"), + SMAP("border-right-color"), + SMAP("border-right-style"), + SMAP("border-right-width"), + SMAP("border-spacing"), + SMAP("border-style"), + SMAP("border-top"), + SMAP("border-top-color"), + SMAP("border-top-style"), + SMAP("border-top-width"), + SMAP("border-width"), + SMAP("bottom"), + SMAP("box-sizing"), + SMAP("break-after"), + SMAP("break-before"), + SMAP("break-inside"), + SMAP("caption-side"), + SMAP("clear"), + SMAP("clip"), + SMAP("color"), + SMAP("columns"), + SMAP("column-count"), + SMAP("column-fill"), + SMAP("column-gap"), + SMAP("column-rule"), + SMAP("column-rule-color"), + SMAP("column-rule-style"), + SMAP("column-rule-width"), + SMAP("column-span"), + SMAP("column-width"), + SMAP("content"), + SMAP("counter-increment"), + SMAP("counter-reset"), + SMAP("cue"), + SMAP("cue-after"), + SMAP("cue-before"), + SMAP("cursor"), + SMAP("direction"), + SMAP("display"), + SMAP("elevation"), + SMAP("empty-cells"), + SMAP("fill-opacity"), + SMAP("flex"), + SMAP("flex-basis"), + SMAP("flex-direction"), + SMAP("flex-flow"), + SMAP("flex-grow"), + SMAP("flex-shrink"), + SMAP("flex-wrap"), + SMAP("float"), + SMAP("font"), + SMAP("font-family"), + SMAP("font-size"), + SMAP("font-style"), + SMAP("font-variant"), + SMAP("font-weight"), + SMAP("height"), + SMAP("justify-content"), + SMAP("left"), + SMAP("letter-spacing"), + SMAP("line-height"), + SMAP("list-style"), + SMAP("list-style-image"), + SMAP("list-style-position"), + SMAP("list-style-type"), + SMAP("margin"), + SMAP("margin-bottom"), + SMAP("margin-left"), + SMAP("margin-right"), + SMAP("margin-top"), + SMAP("max-height"), + SMAP("max-width"), + SMAP("min-height"), + SMAP("min-width"), + SMAP("opacity"), + SMAP("order"), + SMAP("orphans"), + SMAP("outline"), + SMAP("outline-color"), + SMAP("outline-style"), + SMAP("outline-width"), + SMAP("overflow"), + SMAP("overflow-x"), + SMAP("overflow-y"), + SMAP("padding"), + SMAP("padding-bottom"), + SMAP("padding-left"), + SMAP("padding-right"), + SMAP("padding-top"), + SMAP("page-break-after"), + SMAP("page-break-before"), + SMAP("page-break-inside"), + SMAP("pause"), + SMAP("pause-after"), + SMAP("pause-before"), + SMAP("pitch-range"), + SMAP("pitch"), + SMAP("play-during"), + SMAP("position"), + SMAP("quotes"), + SMAP("richness"), + SMAP("right"), + SMAP("speak-header"), + SMAP("speak-numeral"), + SMAP("speak-punctuation"), + SMAP("speak"), + SMAP("speech-rate"), + SMAP("stress"), + SMAP("stroke-opacity"), + SMAP("table-layout"), + SMAP("text-align"), + SMAP("text-decoration"), + SMAP("text-indent"), + SMAP("text-transform"), + SMAP("top"), + SMAP("unicode-bidi"), + SMAP("vertical-align"), + SMAP("visibility"), + SMAP("voice-family"), + SMAP("volume"), + SMAP("white-space"), + SMAP("widows"), + SMAP("width"), + SMAP("word-spacing"), + SMAP("writing-mode"), + SMAP("z-index"), - { "inherit", SLEN("inherit") }, - { "important", SLEN("important") }, - { "none", SLEN("none") }, - { "both", SLEN("both") }, - { "fixed", SLEN("fixed") }, - { "scroll", SLEN("scroll") }, - { "transparent", SLEN("transparent") }, - { "no-repeat", SLEN("no-repeat") }, - { "repeat-x", SLEN("repeat-x") }, - { "repeat-y", SLEN("repeat-y") }, - { "repeat", SLEN("repeat") }, - { "hidden", SLEN("hidden") }, - { "dotted", SLEN("dotted") }, - { "dashed", SLEN("dashed") }, - { "solid", SLEN("solid") }, - { "double", SLEN("double") }, - { "groove", SLEN("groove") }, - { "ridge", SLEN("ridge") }, - { "inset", SLEN("inset") }, - { "outset", SLEN("outset") }, - { "thin", SLEN("thin") }, - { "medium", SLEN("medium") }, - { "thick", SLEN("thick") }, - { "collapse", SLEN("collapse") }, - { "separate", SLEN("separate") }, - { "auto", SLEN("auto") }, - { "ltr", SLEN("ltr") }, - { "rtl", SLEN("rtl") }, - { "inline", SLEN("inline") }, - { "block", SLEN("block") }, - { "list-item", SLEN("list-item") }, - { "run-in", SLEN("run-in") }, - { "inline-block", SLEN("inline-block") }, - { "table", SLEN("table") }, - { "inline-table", SLEN("inline-table") }, - { "table-row-group", SLEN("table-row-group") }, - { "table-header-group", SLEN("table-header-group") }, - { "table-footer-group", SLEN("table-footer-group") }, - { "table-row", SLEN("table-row") }, - { "table-column-group", SLEN("table-column-group") }, - { "table-column", SLEN("table-column") }, - { "table-cell", SLEN("table-cell") }, - { "table-caption", SLEN("table-caption") }, - { "below", SLEN("below") }, - { "level", SLEN("level") }, - { "above", SLEN("above") }, - { "higher", SLEN("higher") }, - { "lower", SLEN("lower") }, - { "show", SLEN("show") }, - { "hide", SLEN("hide") }, - { "xx-small", SLEN("xx-small") }, - { "x-small", SLEN("x-small") }, - { "small", SLEN("small") }, - { "large", SLEN("large") }, - { "x-large", SLEN("x-large") }, - { "xx-large", SLEN("xx-large") }, - { "larger", SLEN("larger") }, - { "smaller", SLEN("smaller") }, - { "normal", SLEN("normal") }, - { "italic", SLEN("italic") }, - { "oblique", SLEN("oblique") }, - { "small-caps", SLEN("small-caps") }, - { "bold", SLEN("bold") }, - { "bolder", SLEN("bolder") }, - { "lighter", SLEN("lighter") }, - { "inside", SLEN("inside") }, - { "outside", SLEN("outside") }, - { "disc", SLEN("disc") }, - { "circle", SLEN("circle") }, - { "square", SLEN("square") }, - { "decimal", SLEN("decimal") }, - { "decimal-leading-zero", SLEN("decimal-leading-zero") }, - { "lower-roman", SLEN("lower-roman") }, - { "upper-roman", SLEN("upper-roman") }, - { "lower-greek", SLEN("lower-greek") }, - { "lower-latin", SLEN("lower-latin") }, - { "upper-latin", SLEN("upper-latin") }, - { "armenian", SLEN("armenian") }, - { "georgian", SLEN("georgian") }, - { "lower-alpha", SLEN("lower-alpha") }, - { "upper-alpha", SLEN("upper-alpha") }, - { "invert", SLEN("invert") }, - { "visible", SLEN("visible") }, - { "always", SLEN("always") }, - { "avoid", SLEN("avoid") }, - { "x-low", SLEN("x-low") }, - { "low", SLEN("low") }, - { "high", SLEN("high") }, - { "x-high", SLEN("x-high") }, - { "static", SLEN("static") }, - { "relative", SLEN("relative") }, - { "absolute", SLEN("absolute") }, - { "once", SLEN("once") }, - { "digits", SLEN("digits") }, - { "continuous", SLEN("continuous") }, - { "code", SLEN("code") }, - { "spell-out", SLEN("spell-out") }, - { "x-slow", SLEN("x-slow") }, - { "slow", SLEN("slow") }, - { "fast", SLEN("fast") }, - { "x-fast", SLEN("x-fast") }, - { "faster", SLEN("faster") }, - { "slower", SLEN("slower") }, - { "center", SLEN("center") }, - { "justify", SLEN("justify") }, - { "capitalize", SLEN("capitalize") }, - { "uppercase", SLEN("uppercase") }, - { "lowercase", SLEN("lowercase") }, - { "embed", SLEN("embed") }, - { "bidi-override", SLEN("bidi-override") }, - { "baseline", SLEN("baseline") }, - { "sub", SLEN("sub") }, - { "super", SLEN("super") }, - { "text-top", SLEN("text-top") }, - { "middle", SLEN("middle") }, - { "text-bottom", SLEN("text-bottom") }, - { "silent", SLEN("silent") }, - { "x-soft", SLEN("x-soft") }, - { "soft", SLEN("soft") }, - { "loud", SLEN("loud") }, - { "x-loud", SLEN("x-loud") }, - { "pre", SLEN("pre") }, - { "nowrap", SLEN("nowrap") }, - { "pre-wrap", SLEN("pre-wrap") }, - { "pre-line", SLEN("pre-line") }, - { "leftwards", SLEN("leftwards") }, - { "rightwards", SLEN("rightwards") }, - { "left-side", SLEN("left-side") }, - { "far-left", SLEN("far-left") }, - { "center-left", SLEN("center-left") }, - { "center-right", SLEN("center-right") }, - { "far-right", SLEN("far-right") }, - { "right-side", SLEN("right-side") }, - { "behind", SLEN("behind") }, - { "rect", SLEN("rect") }, - { "open-quote", SLEN("open-quote") }, - { "close-quote", SLEN("close-quote") }, - { "no-open-quote", SLEN("no-open-quote") }, - { "no-close-quote", SLEN("no-close-quote") }, - { "attr", SLEN("attr") }, - { "counter", SLEN("counter") }, - { "counters", SLEN("counters") }, - { "crosshair", SLEN("crosshair") }, - { "default", SLEN("default") }, - { "pointer", SLEN("pointer") }, - { "move", SLEN("move") }, - { "e-resize", SLEN("e-resize") }, - { "ne-resize", SLEN("ne-resize") }, - { "nw-resize", SLEN("nw-resize") }, - { "n-resize", SLEN("n-resize") }, - { "se-resize", SLEN("se-resize") }, - { "sw-resize", SLEN("sw-resize") }, - { "s-resize", SLEN("s-resize") }, - { "w-resize", SLEN("w-resize") }, - { "text", SLEN("text") }, - { "wait", SLEN("wait") }, - { "help", SLEN("help") }, - { "progress", SLEN("progress") }, - { "serif", SLEN("serif") }, - { "sans-serif", SLEN("sans-serif") }, - { "cursive", SLEN("cursive") }, - { "fantasy", SLEN("fantasy") }, - { "monospace", SLEN("monospace") }, - { "male", SLEN("male") }, - { "female", SLEN("female") }, - { "child", SLEN("child") }, - { "mix", SLEN("mix") }, - { "underline", SLEN("underline") }, - { "overline", SLEN("overline") }, - { "line-through", SLEN("line-through") }, - { "blink", SLEN("blink") }, - { "rgb", SLEN("rgb") }, - { "rgba", SLEN("rgba") }, - { "hsl", SLEN("hsl") }, - { "hsla", SLEN("hsla") }, - { "-libcss-left", SLEN("-libcss-left") }, - { "-libcss-center", SLEN("-libcss-center") }, - { "-libcss-right", SLEN("-libcss-right") }, - { "currentColor", SLEN("currentColor") }, - { "odd", SLEN("odd") }, - { "even", SLEN("even") }, - { "src", SLEN("src") }, - { "local", SLEN("local") }, - { "initial", SLEN("initial") }, - { "format", SLEN("format") }, - { "woff", SLEN("woff") }, - { "truetype", SLEN("truetype") }, - { "opentype", SLEN("opentype") }, - { "embedded-opentype", SLEN("embedded-opentype") }, - { "svg", SLEN("svg") }, - { "column", SLEN("column") }, - { "avoid-page", SLEN("avoid_page") }, - { "avoid-column", SLEN("avoid-column") }, - { "balance", SLEN("balance") }, - { "horizontal-tb", SLEN("horizontal-tb") }, - { "vertical-rl", SLEN("vertical-rl") }, - { "vertical-lr", SLEN("vertical-lr") }, - { "content-box", SLEN("content-box") }, - { "border-box", SLEN("border-box") }, - { "stretch", SLEN("stretch") }, - { "inline-flex", SLEN("inline-flex") }, - { "flex-start", SLEN("flex-start") }, - { "flex-end", SLEN("flex-end") }, - { "space-between", SLEN("space-between") }, - { "space-around", SLEN("space-around") }, - { "space-evenly", SLEN("space-evenly") }, - { "row", SLEN("row") }, - { "row-reverse", SLEN("row-reverse") }, - { "column-reverse", SLEN("column-reverse") }, - { "wrap", SLEN("wrap") }, - { "wrap-reverse", SLEN("wrap-reverse") }, - { "and", SLEN("and") }, - { "or", SLEN("or") }, - { "only", SLEN("only") }, - { "infinite", SLEN("infinite") }, + SMAP("inherit"), + SMAP("unset"), + SMAP("important"), + SMAP("none"), + SMAP("both"), + SMAP("fixed"), + SMAP("scroll"), + SMAP("transparent"), + SMAP("no-repeat"), + SMAP("repeat-x"), + SMAP("repeat-y"), + SMAP("repeat"), + SMAP("hidden"), + SMAP("dotted"), + SMAP("dashed"), + SMAP("solid"), + SMAP("double"), + SMAP("groove"), + SMAP("ridge"), + SMAP("inset"), + SMAP("outset"), + SMAP("thin"), + SMAP("medium"), + SMAP("thick"), + SMAP("collapse"), + SMAP("separate"), + SMAP("auto"), + SMAP("ltr"), + SMAP("rtl"), + SMAP("inline"), + SMAP("block"), + SMAP("list-item"), + SMAP("run-in"), + SMAP("inline-block"), + SMAP("table"), + SMAP("inline-table"), + SMAP("table-row-group"), + SMAP("table-header-group"), + SMAP("table-footer-group"), + SMAP("table-row"), + SMAP("table-column-group"), + SMAP("table-column"), + SMAP("table-cell"), + SMAP("table-caption"), + SMAP("below"), + SMAP("level"), + SMAP("above"), + SMAP("higher"), + SMAP("lower"), + SMAP("show"), + SMAP("hide"), + SMAP("xx-small"), + SMAP("x-small"), + SMAP("small"), + SMAP("large"), + SMAP("x-large"), + SMAP("xx-large"), + SMAP("larger"), + SMAP("smaller"), + SMAP("normal"), + SMAP("italic"), + SMAP("oblique"), + SMAP("small-caps"), + SMAP("bold"), + SMAP("bolder"), + SMAP("lighter"), + SMAP("inside"), + SMAP("outside"), + SMAP("disc"), + SMAP("circle"), + SMAP("square"), + SMAP("decimal"), + SMAP("decimal-leading-zero"), + SMAP("lower-roman"), + SMAP("upper-roman"), + SMAP("lower-greek"), + SMAP("lower-latin"), + SMAP("upper-latin"), + SMAP("armenian"), + SMAP("georgian"), + SMAP("lower-alpha"), + SMAP("upper-alpha"), + SMAP("binary"), + SMAP("octal"), + SMAP("lower-hexadecimal"), + SMAP("upper-hexadecimal"), + SMAP("arabic-indic"), + SMAP("lower-armenian"), + SMAP("upper-armenian"), + SMAP("bengali"), + SMAP("cambodian"), + SMAP("khmer"), + SMAP("cjk-decimal"), + SMAP("devanagari"), + SMAP("gujarati"), + SMAP("gurmukhi"), + SMAP("hebrew"), + SMAP("kannada"), + SMAP("lao"), + SMAP("malayalam"), + SMAP("mongolian"), + SMAP("myanmar"), + SMAP("oriya"), + SMAP("persian"), + SMAP("tamil"), + SMAP("telugu"), + SMAP("thai"), + SMAP("tibetan"), + SMAP("cjk-earthly-branch"), + SMAP("cjk-heavenly-stem"), + SMAP("hiragana"), + SMAP("hiragana-iroha"), + SMAP("katakana"), + SMAP("katakana-iroha"), + SMAP("japanese-informal"), + SMAP("japanese-formal"), + SMAP("korean-hangul-formal"), + SMAP("korean-hanja-informal"), + SMAP("korean-hanja-formal"), + SMAP("invert"), + SMAP("visible"), + SMAP("always"), + SMAP("avoid"), + SMAP("x-low"), + SMAP("low"), + SMAP("high"), + SMAP("x-high"), + SMAP("static"), + SMAP("relative"), + SMAP("absolute"), + SMAP("once"), + SMAP("digits"), + SMAP("continuous"), + SMAP("code"), + SMAP("spell-out"), + SMAP("x-slow"), + SMAP("slow"), + SMAP("fast"), + SMAP("x-fast"), + SMAP("faster"), + SMAP("slower"), + SMAP("center"), + SMAP("justify"), + SMAP("capitalize"), + SMAP("uppercase"), + SMAP("lowercase"), + SMAP("embed"), + SMAP("bidi-override"), + SMAP("baseline"), + SMAP("sub"), + SMAP("super"), + SMAP("text-top"), + SMAP("middle"), + SMAP("text-bottom"), + SMAP("silent"), + SMAP("x-soft"), + SMAP("soft"), + SMAP("loud"), + SMAP("x-loud"), + SMAP("pre"), + SMAP("nowrap"), + SMAP("pre-wrap"), + SMAP("pre-line"), + SMAP("leftwards"), + SMAP("rightwards"), + SMAP("left-side"), + SMAP("far-left"), + SMAP("center-left"), + SMAP("center-right"), + SMAP("far-right"), + SMAP("right-side"), + SMAP("behind"), + SMAP("rect"), + SMAP("open-quote"), + SMAP("close-quote"), + SMAP("no-open-quote"), + SMAP("no-close-quote"), + SMAP("attr"), + SMAP("counter"), + SMAP("counters"), + SMAP("crosshair"), + SMAP("default"), + SMAP("pointer"), + SMAP("move"), + SMAP("e-resize"), + SMAP("ne-resize"), + SMAP("nw-resize"), + SMAP("n-resize"), + SMAP("se-resize"), + SMAP("sw-resize"), + SMAP("s-resize"), + SMAP("w-resize"), + SMAP("text"), + SMAP("wait"), + SMAP("help"), + SMAP("progress"), + SMAP("serif"), + SMAP("sans-serif"), + SMAP("cursive"), + SMAP("fantasy"), + SMAP("monospace"), + SMAP("male"), + SMAP("female"), + SMAP("child"), + SMAP("mix"), + SMAP("underline"), + SMAP("overline"), + SMAP("line-through"), + SMAP("blink"), + SMAP("rgb"), + SMAP("rgba"), + SMAP("hsl"), + SMAP("hsla"), + SMAP("-libcss-left"), + SMAP("-libcss-center"), + SMAP("-libcss-right"), + SMAP("currentColor"), + SMAP("odd"), + SMAP("even"), + SMAP("src"), + SMAP("local"), + SMAP("initial"), + SMAP("revert"), + SMAP("format"), + SMAP("woff"), + SMAP("truetype"), + SMAP("opentype"), + SMAP("embedded-opentype"), + SMAP("svg"), + SMAP("column"), + SMAP("avoid-page"), + SMAP("avoid-column"), + SMAP("balance"), + SMAP("horizontal-tb"), + SMAP("vertical-rl"), + SMAP("vertical-lr"), + SMAP("content-box"), + SMAP("border-box"), + SMAP("stretch"), + SMAP("inline-flex"), + SMAP("flex-start"), + SMAP("flex-end"), + SMAP("space-between"), + SMAP("space-around"), + SMAP("space-evenly"), + SMAP("row"), + SMAP("row-reverse"), + SMAP("column-reverse"), + SMAP("wrap"), + SMAP("wrap-reverse"), + SMAP("and"), + SMAP("or"), + SMAP("only"), + SMAP("infinite"), + SMAP("grid"), + SMAP("inline-grid"), + SMAP("sticky"), - { "aliceblue", SLEN("aliceblue") }, - { "antiquewhite", SLEN("antiquewhite") }, - { "aqua", SLEN("aqua") }, - { "aquamarine", SLEN("aquamarine") }, - { "azure", SLEN("azure") }, - { "beige", SLEN("beige") }, - { "bisque", SLEN("bisque") }, - { "black", SLEN("black") }, - { "blanchedalmond", SLEN("blanchedalmond") }, - { "blue", SLEN("blue") }, - { "blueviolet", SLEN("blueviolet") }, - { "brown", SLEN("brown") }, - { "burlywood", SLEN("burlywood") }, - { "cadetblue", SLEN("cadetblue") }, - { "chartreuse", SLEN("chartreuse") }, - { "chocolate", SLEN("chocolate") }, - { "coral", SLEN("coral") }, - { "cornflowerblue", SLEN("cornflowerblue") }, - { "cornsilk", SLEN("cornsilk") }, - { "crimson", SLEN("crimson") }, - { "cyan", SLEN("cyan") }, - { "darkblue", SLEN("darkblue") }, - { "darkcyan", SLEN("darkcyan") }, - { "darkgoldenrod", SLEN("darkgoldenrod") }, - { "darkgray", SLEN("darkgray") }, - { "darkgreen", SLEN("darkgreen") }, - { "darkgrey", SLEN("darkgrey") }, - { "darkkhaki", SLEN("darkkhaki") }, - { "darkmagenta", SLEN("darkmagenta") }, - { "darkolivegreen", SLEN("darkolivegreen") }, - { "darkorange", SLEN("darkorange") }, - { "darkorchid", SLEN("darkorchid") }, - { "darkred", SLEN("darkred") }, - { "darksalmon", SLEN("darksalmon") }, - { "darkseagreen", SLEN("darkseagreen") }, - { "darkslateblue", SLEN("darkslateblue") }, - { "darkslategray", SLEN("darkslategray") }, - { "darkslategrey", SLEN("darkslategrey") }, - { "darkturquoise", SLEN("darkturquoise") }, - { "darkviolet", SLEN("darkviolet") }, - { "deeppink", SLEN("deeppink") }, - { "deepskyblue", SLEN("deepskyblue") }, - { "dimgray", SLEN("dimgray") }, - { "dimgrey", SLEN("dimgrey") }, - { "dodgerblue", SLEN("dodgerblue") }, - { "feldspar", SLEN("feldspar") }, - { "firebrick", SLEN("firebrick") }, - { "floralwhite", SLEN("floralwhite") }, - { "forestgreen", SLEN("forestgreen") }, - { "fuchsia", SLEN("fuchsia") }, - { "gainsboro", SLEN("gainsboro") }, - { "ghostwhite", SLEN("ghostwhite") }, - { "gold", SLEN("gold") }, - { "goldenrod", SLEN("goldenrod") }, - { "gray", SLEN("gray") }, - { "green", SLEN("green") }, - { "greenyellow", SLEN("greenyellow") }, - { "grey", SLEN("grey") }, - { "honeydew", SLEN("honeydew") }, - { "hotpink", SLEN("hotpink") }, - { "indianred", SLEN("indianred") }, - { "indigo", SLEN("indigo") }, - { "ivory", SLEN("ivory") }, - { "khaki", SLEN("khaki") }, - { "lavender", SLEN("lavender") }, - { "lavenderblush", SLEN("lavenderblush") }, - { "lawngreen", SLEN("lawngreen") }, - { "lemonchiffon", SLEN("lemonchiffon") }, - { "lightblue", SLEN("lightblue") }, - { "lightcoral", SLEN("lightcoral") }, - { "lightcyan", SLEN("lightcyan") }, - { "lightgoldenrodyellow", SLEN("lightgoldenrodyellow") }, - { "lightgray", SLEN("lightgray") }, - { "lightgreen", SLEN("lightgreen") }, - { "lightgrey", SLEN("lightgrey") }, - { "lightpink", SLEN("lightpink") }, - { "lightsalmon", SLEN("lightsalmon") }, - { "lightseagreen", SLEN("lightseagreen") }, - { "lightskyblue", SLEN("lightskyblue") }, - { "lightslateblue", SLEN("lightslateblue") }, - { "lightslategray", SLEN("lightslategray") }, - { "lightslategrey", SLEN("lightslategrey") }, - { "lightsteelblue", SLEN("lightsteelblue") }, - { "lightyellow", SLEN("lightyellow") }, - { "lime", SLEN("lime") }, - { "limegreen", SLEN("limegreen") }, - { "linen", SLEN("linen") }, - { "magenta", SLEN("magenta") }, - { "maroon", SLEN("maroon") }, - { "mediumaquamarine", SLEN("mediumaquamarine") }, - { "mediumblue", SLEN("mediumblue") }, - { "mediumorchid", SLEN("mediumorchid") }, - { "mediumpurple", SLEN("mediumpurple") }, - { "mediumseagreen", SLEN("mediumseagreen") }, - { "mediumslateblue", SLEN("mediumslateblue") }, - { "mediumspringgreen", SLEN("mediumspringgreen") }, - { "mediumturquoise", SLEN("mediumturquoise") }, - { "mediumvioletred", SLEN("mediumvioletred") }, - { "midnightblue", SLEN("midnightblue") }, - { "mintcream", SLEN("mintcream") }, - { "mistyrose", SLEN("mistyrose") }, - { "moccasin", SLEN("moccasin") }, - { "navajowhite", SLEN("navajowhite") }, - { "navy", SLEN("navy") }, - { "oldlace", SLEN("oldlace") }, - { "olive", SLEN("olive") }, - { "olivedrab", SLEN("olivedrab") }, - { "orange", SLEN("orange") }, - { "orangered", SLEN("orangered") }, - { "orchid", SLEN("orchid") }, - { "palegoldenrod", SLEN("palegoldenrod") }, - { "palegreen", SLEN("palegreen") }, - { "paleturquoise", SLEN("paleturquoise") }, - { "palevioletred", SLEN("palevioletred") }, - { "papayawhip", SLEN("papayawhip") }, - { "peachpuff", SLEN("peachpuff") }, - { "peru", SLEN("peru") }, - { "pink", SLEN("pink") }, - { "plum", SLEN("plum") }, - { "powderblue", SLEN("powderblue") }, - { "purple", SLEN("purple") }, - { "red", SLEN("red") }, - { "rosybrown", SLEN("rosybrown") }, - { "royalblue", SLEN("royalblue") }, - { "saddlebrown", SLEN("saddlebrown") }, - { "salmon", SLEN("salmon") }, - { "sandybrown", SLEN("sandybrown") }, - { "seagreen", SLEN("seagreen") }, - { "seashell", SLEN("seashell") }, - { "sienna", SLEN("sienna") }, - { "silver", SLEN("silver") }, - { "skyblue", SLEN("skyblue") }, - { "slateblue", SLEN("slateblue") }, - { "slategray", SLEN("slategray") }, - { "slategrey", SLEN("slategrey") }, - { "snow", SLEN("snow") }, - { "springgreen", SLEN("springgreen") }, - { "steelblue", SLEN("steelblue") }, - { "tan", SLEN("tan") }, - { "teal", SLEN("teal") }, - { "thistle", SLEN("thistle") }, - { "tomato", SLEN("tomato") }, - { "turquoise", SLEN("turquoise") }, - { "violet", SLEN("violet") }, - { "violetred", SLEN("violetred") }, - { "wheat", SLEN("wheat") }, - { "white", SLEN("white") }, - { "whitesmoke", SLEN("whitesmoke") }, - { "yellow", SLEN("yellow") }, - { "yellowgreen", SLEN("yellowgreen") } + SMAP("aliceblue"), + SMAP("antiquewhite"), + SMAP("aqua"), + SMAP("aquamarine"), + SMAP("azure"), + SMAP("beige"), + SMAP("bisque"), + SMAP("black"), + SMAP("blanchedalmond"), + SMAP("blue"), + SMAP("blueviolet"), + SMAP("brown"), + SMAP("burlywood"), + SMAP("cadetblue"), + SMAP("chartreuse"), + SMAP("chocolate"), + SMAP("coral"), + SMAP("cornflowerblue"), + SMAP("cornsilk"), + SMAP("crimson"), + SMAP("cyan"), + SMAP("darkblue"), + SMAP("darkcyan"), + SMAP("darkgoldenrod"), + SMAP("darkgray"), + SMAP("darkgreen"), + SMAP("darkgrey"), + SMAP("darkkhaki"), + SMAP("darkmagenta"), + SMAP("darkolivegreen"), + SMAP("darkorange"), + SMAP("darkorchid"), + SMAP("darkred"), + SMAP("darksalmon"), + SMAP("darkseagreen"), + SMAP("darkslateblue"), + SMAP("darkslategray"), + SMAP("darkslategrey"), + SMAP("darkturquoise"), + SMAP("darkviolet"), + SMAP("deeppink"), + SMAP("deepskyblue"), + SMAP("dimgray"), + SMAP("dimgrey"), + SMAP("dodgerblue"), + SMAP("feldspar"), + SMAP("firebrick"), + SMAP("floralwhite"), + SMAP("forestgreen"), + SMAP("fuchsia"), + SMAP("gainsboro"), + SMAP("ghostwhite"), + SMAP("gold"), + SMAP("goldenrod"), + SMAP("gray"), + SMAP("green"), + SMAP("greenyellow"), + SMAP("grey"), + SMAP("honeydew"), + SMAP("hotpink"), + SMAP("indianred"), + SMAP("indigo"), + SMAP("ivory"), + SMAP("khaki"), + SMAP("lavender"), + SMAP("lavenderblush"), + SMAP("lawngreen"), + SMAP("lemonchiffon"), + SMAP("lightblue"), + SMAP("lightcoral"), + SMAP("lightcyan"), + SMAP("lightgoldenrodyellow"), + SMAP("lightgray"), + SMAP("lightgreen"), + SMAP("lightgrey"), + SMAP("lightpink"), + SMAP("lightsalmon"), + SMAP("lightseagreen"), + SMAP("lightskyblue"), + SMAP("lightslateblue"), + SMAP("lightslategray"), + SMAP("lightslategrey"), + SMAP("lightsteelblue"), + SMAP("lightyellow"), + SMAP("lime"), + SMAP("limegreen"), + SMAP("linen"), + SMAP("magenta"), + SMAP("maroon"), + SMAP("mediumaquamarine"), + SMAP("mediumblue"), + SMAP("mediumorchid"), + SMAP("mediumpurple"), + SMAP("mediumseagreen"), + SMAP("mediumslateblue"), + SMAP("mediumspringgreen"), + SMAP("mediumturquoise"), + SMAP("mediumvioletred"), + SMAP("midnightblue"), + SMAP("mintcream"), + SMAP("mistyrose"), + SMAP("moccasin"), + SMAP("navajowhite"), + SMAP("navy"), + SMAP("oldlace"), + SMAP("olive"), + SMAP("olivedrab"), + SMAP("orange"), + SMAP("orangered"), + SMAP("orchid"), + SMAP("palegoldenrod"), + SMAP("palegreen"), + SMAP("paleturquoise"), + SMAP("palevioletred"), + SMAP("papayawhip"), + SMAP("peachpuff"), + SMAP("peru"), + SMAP("pink"), + SMAP("plum"), + SMAP("powderblue"), + SMAP("purple"), + SMAP("red"), + SMAP("rosybrown"), + SMAP("royalblue"), + SMAP("saddlebrown"), + SMAP("salmon"), + SMAP("sandybrown"), + SMAP("seagreen"), + SMAP("seashell"), + SMAP("sienna"), + SMAP("silver"), + SMAP("skyblue"), + SMAP("slateblue"), + SMAP("slategray"), + SMAP("slategrey"), + SMAP("snow"), + SMAP("springgreen"), + SMAP("steelblue"), + SMAP("tan"), + SMAP("teal"), + SMAP("thistle"), + SMAP("tomato"), + SMAP("turquoise"), + SMAP("violet"), + SMAP("violetred"), + SMAP("wheat"), + SMAP("white"), + SMAP("whitesmoke"), + SMAP("yellow"), + SMAP("yellowgreen") }; diff --git a/src/parse/propstrings.h b/src/parse/propstrings.h index 24b681b..8491e72 100644 --- a/src/parse/propstrings.h +++ b/src/parse/propstrings.h @@ -51,27 +51,28 @@ enum { COLUMN_COUNT, COLUMN_FILL, COLUMN_GAP, COLUMN_RULE, COLUMN_RULE_COLOR, COLUMN_RULE_STYLE, COLUMN_RULE_WIDTH, COLUMN_SPAN, COLUMN_WIDTH, CONTENT, COUNTER_INCREMENT, COUNTER_RESET, CUE, CUE_AFTER, CUE_BEFORE, - CURSOR, DIRECTION, DISPLAY, ELEVATION, EMPTY_CELLS, FLEX, FLEX_BASIS, - FLEX_DIRECTION, FLEX_FLOW, FLEX_GROW, FLEX_SHRINK, FLEX_WRAP, - LIBCSS_FLOAT, FONT, FONT_FAMILY, FONT_SIZE, FONT_STYLE, FONT_VARIANT, - FONT_WEIGHT, HEIGHT, JUSTIFY_CONTENT, LEFT, LETTER_SPACING, LINE_HEIGHT, - LIST_STYLE, LIST_STYLE_IMAGE, LIST_STYLE_POSITION, LIST_STYLE_TYPE, - MARGIN, MARGIN_BOTTOM, MARGIN_LEFT, MARGIN_RIGHT, MARGIN_TOP, - MAX_HEIGHT, MAX_WIDTH, MIN_HEIGHT, MIN_WIDTH, OPACITY, ORDER, ORPHANS, - OUTLINE, OUTLINE_COLOR, OUTLINE_STYLE, OUTLINE_WIDTH, OVERFLOW, - OVERFLOW_X, OVERFLOW_Y, PADDING, PADDING_BOTTOM, PADDING_LEFT, - PADDING_RIGHT, PADDING_TOP, PAGE_BREAK_AFTER, PAGE_BREAK_BEFORE, - PAGE_BREAK_INSIDE, PAUSE, PAUSE_AFTER, PAUSE_BEFORE, PITCH_RANGE, PITCH, - PLAY_DURING, POSITION, QUOTES, RICHNESS, RIGHT, SPEAK_HEADER, - SPEAK_NUMERAL, SPEAK_PUNCTUATION, SPEAK, SPEECH_RATE, STRESS, - TABLE_LAYOUT, TEXT_ALIGN, TEXT_DECORATION, TEXT_INDENT, TEXT_TRANSFORM, - TOP, UNICODE_BIDI, VERTICAL_ALIGN, VISIBILITY, VOICE_FAMILY, VOLUME, - WHITE_SPACE, WIDOWS, WIDTH, WORD_SPACING, WRITING_MODE, Z_INDEX, + CURSOR, DIRECTION, DISPLAY, ELEVATION, EMPTY_CELLS, FILL_OPACITY, FLEX, + FLEX_BASIS, FLEX_DIRECTION, FLEX_FLOW, FLEX_GROW, FLEX_SHRINK, + FLEX_WRAP, LIBCSS_FLOAT, FONT, FONT_FAMILY, FONT_SIZE, FONT_STYLE, + FONT_VARIANT, FONT_WEIGHT, HEIGHT, JUSTIFY_CONTENT, LEFT, + LETTER_SPACING, LINE_HEIGHT, LIST_STYLE, LIST_STYLE_IMAGE, + LIST_STYLE_POSITION, LIST_STYLE_TYPE, MARGIN, MARGIN_BOTTOM, + MARGIN_LEFT, MARGIN_RIGHT, MARGIN_TOP, MAX_HEIGHT, MAX_WIDTH, + MIN_HEIGHT, MIN_WIDTH, OPACITY, ORDER, ORPHANS, OUTLINE, OUTLINE_COLOR, + OUTLINE_STYLE, OUTLINE_WIDTH, OVERFLOW, OVERFLOW_X, OVERFLOW_Y, PADDING, + PADDING_BOTTOM, PADDING_LEFT, PADDING_RIGHT, PADDING_TOP, + PAGE_BREAK_AFTER, PAGE_BREAK_BEFORE, PAGE_BREAK_INSIDE, PAUSE, + PAUSE_AFTER, PAUSE_BEFORE, PITCH_RANGE, PITCH, PLAY_DURING, POSITION, + QUOTES, RICHNESS, RIGHT, SPEAK_HEADER, SPEAK_NUMERAL, SPEAK_PUNCTUATION, + SPEAK, SPEECH_RATE, STRESS, STROKE_OPACITY, TABLE_LAYOUT, TEXT_ALIGN, + TEXT_DECORATION, TEXT_INDENT, TEXT_TRANSFORM, TOP, UNICODE_BIDI, + VERTICAL_ALIGN, VISIBILITY, VOICE_FAMILY, VOLUME, WHITE_SPACE, WIDOWS, + WIDTH, WORD_SPACING, WRITING_MODE, Z_INDEX, LAST_PROP = Z_INDEX, /* Other keywords */ - INHERIT, IMPORTANT, NONE, BOTH, FIXED, SCROLL, TRANSPARENT, + INHERIT, UNSET, IMPORTANT, NONE, BOTH, FIXED, SCROLL, TRANSPARENT, NO_REPEAT, REPEAT_X, REPEAT_Y, REPEAT, HIDDEN, DOTTED, DASHED, SOLID, LIBCSS_DOUBLE, GROOVE, RIDGE, INSET, OUTSET, THIN, MEDIUM, THICK, COLLAPSE, SEPARATE, AUTO, LTR, RTL, INLINE, BLOCK, LIST_ITEM, RUN_IN, @@ -83,6 +84,13 @@ enum { LIGHTER, INSIDE, OUTSIDE, DISC, CIRCLE, SQUARE, DECIMAL, DECIMAL_LEADING_ZERO, LOWER_ROMAN, UPPER_ROMAN, LOWER_GREEK, LOWER_LATIN, UPPER_LATIN, ARMENIAN, GEORGIAN, LOWER_ALPHA, UPPER_ALPHA, + BINARY, OCTAL, LOWER_HEXADECIMAL, UPPER_HEXADECIMAL, ARABIC_INDIC, + LOWER_ARMENIAN, UPPER_ARMENIAN, BENGALI, CAMBODIAN, KHMER, CJK_DECIMAL, + DEVANAGARI, GUJARATI, GURMUKHI, HEBREW, KANNADA, LAO, MALAYALAM, + MONGOLIAN, MYANMAR, ORIYA, PERSIAN, TAMIL, TELUGU, THAI, TIBETAN, + CJK_EARTHLY_BRANCH, CJK_HEAVENLY_STEM, HIAGANA, HIAGANA_IROHA, + KATAKANA, KATAKANA_IROHA, JAPANESE_INFORMAL, JAPANESE_FORMAL, + KOREAN_HANGUL_FORMAL, KOREAN_HANJA_INFORMAL, KOREAN_HANJA_FORMAL, INVERT, VISIBLE, ALWAYS, AVOID, X_LOW, LOW, HIGH, X_HIGH, LIBCSS_STATIC, RELATIVE, ABSOLUTE, ONCE, DIGITS, CONTINUOUS, CODE, SPELL_OUT, X_SLOW, SLOW, FAST, X_FAST, FASTER, SLOWER, CENTER, JUSTIFY, CAPITALIZE, @@ -96,12 +104,13 @@ enum { W_RESIZE, LIBCSS_TEXT, WAIT, HELP, PROGRESS, SERIF, SANS_SERIF, CURSIVE, FANTASY, MONOSPACE, MALE, FEMALE, CHILD, MIX, UNDERLINE, OVERLINE, LINE_THROUGH, BLINK, RGB, RGBA, HSL, HSLA, LIBCSS_LEFT, LIBCSS_CENTER, - LIBCSS_RIGHT, CURRENTCOLOR, ODD, EVEN, SRC, LOCAL, INITIAL, + LIBCSS_RIGHT, CURRENTCOLOR, ODD, EVEN, SRC, LOCAL, INITIAL, REVERT, FORMAT, WOFF, TRUETYPE, OPENTYPE, EMBEDDED_OPENTYPE, SVG, COLUMN, AVOID_PAGE, AVOID_COLUMN, BALANCE, HORIZONTAL_TB, VERTICAL_RL, VERTICAL_LR, CONTENT_BOX, BORDER_BOX, STRETCH, INLINE_FLEX, FLEX_START, FLEX_END, SPACE_BETWEEN, SPACE_AROUND, SPACE_EVENLY, ROW, ROW_REVERSE, COLUMN_REVERSE, WRAP_STRING, WRAP_REVERSE, AND, OR, ONLY, INFINITE, + GRID, INLINE_GRID, STICKY, /* Named colours */ FIRST_COLOUR, |