From cc9d55ba6e7916e2a7e439c7ba0239a1f736db72 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Sat, 3 Oct 2020 18:28:31 +0100 Subject: parse: Update parser generator to support calc() details. Co-authored-by: Daniel Silverstone --- src/bytecode/bytecode.h | 4 ++ src/bytecode/opcodes.h | 37 +++++++++++++ src/parse/properties/css_property_parser_gen.c | 45 +++++++++++++-- src/parse/properties/properties.gen | 77 ++++++++++++++------------ src/parse/properties/utils.c | 65 +++++++--------------- 5 files changed, 141 insertions(+), 87 deletions(-) diff --git a/src/bytecode/bytecode.h b/src/bytecode/bytecode.h index 7518281..c356f90 100644 --- a/src/bytecode/bytecode.h +++ b/src/bytecode/bytecode.h @@ -68,6 +68,10 @@ typedef enum unit { UNIT_DPI = (1 << 13) + 0, UNIT_DPCM = (1 << 13) + 1, UNIT_DPPX = (1 << 13) + 2, + + /* These are special only to the CALC bytecodes */ + UNIT_CALC_ANY = (1 << 20), + UNIT_CALC_NUMBER = (1 << 20) + 1, } unit; typedef uint32_t colour; diff --git a/src/bytecode/opcodes.h b/src/bytecode/opcodes.h index 82bf75f..d728831 100644 --- a/src/bytecode/opcodes.h +++ b/src/bytecode/opcodes.h @@ -119,6 +119,7 @@ enum op_border_style { }; enum op_border_width { + BORDER_WIDTH_CALC = 0x007f, BORDER_WIDTH_SET = 0x0080, BORDER_WIDTH_THIN = 0x0000, BORDER_WIDTH_MEDIUM = 0x0001, @@ -126,6 +127,7 @@ enum op_border_width { }; enum op_bottom { + BOTTOM_CALC = 0x007f, BOTTOM_SET = 0x0080, BOTTOM_AUTO = 0x0000 }; @@ -198,6 +200,7 @@ enum op_color { enum op_column_count { COLUMN_COUNT_AUTO = 0x0000, + COLUMN_COUNT_CALC = 0x007f, COLUMN_COUNT_SET = 0x0080 }; @@ -208,6 +211,7 @@ enum op_column_fill { enum op_column_gap { COLUMN_GAP_NORMAL = 0x0000, + COLUMN_GAP_CALC = 0x007f, COLUMN_GAP_SET = 0x0080 }; @@ -231,6 +235,7 @@ enum op_column_rule_style { }; enum op_column_rule_width { + COLUMN_RULE_WIDTH_CALC = BORDER_WIDTH_CALC, COLUMN_RULE_WIDTH_SET = BORDER_WIDTH_SET, COLUMN_RULE_WIDTH_THIN = BORDER_WIDTH_THIN, COLUMN_RULE_WIDTH_MEDIUM = BORDER_WIDTH_MEDIUM, @@ -244,6 +249,7 @@ enum op_column_span { enum op_column_width { COLUMN_WIDTH_AUTO = 0x0000, + COLUMN_WIDTH_CALC = 0x007f, COLUMN_WIDTH_SET = 0x0080 }; @@ -352,6 +358,7 @@ enum op_empty_cells { enum op_flex_basis { FLEX_BASIS_AUTO = 0x0000, FLEX_BASIS_CONTENT = 0x0001, + FLEX_BASIS_CALC = 0x007f, FLEX_BASIS_SET = 0x0080 }; @@ -363,10 +370,12 @@ enum op_flex_direction { }; enum op_flex_grow { + FLEX_GROW_CALC = 0x007f, FLEX_GROW_SET = 0x0080 }; enum op_flex_shrink { + FLEX_SHRINK_CALC = 0x007f, FLEX_SHRINK_SET = 0x0080 }; @@ -396,6 +405,7 @@ enum op_font_family { }; enum op_font_size { + FONT_SIZE_CALC = 0x007f, FONT_SIZE_DIMENSION = 0x0080, FONT_SIZE_XX_SMALL = 0x0000, @@ -437,6 +447,7 @@ enum op_font_weight { }; enum op_height { + HEIGHT_CALC = 0x007f, HEIGHT_SET = 0x0080, HEIGHT_AUTO = 0x0000 }; @@ -451,16 +462,19 @@ enum op_justify_content { }; enum op_left { + LEFT_CALC = BOTTOM_CALC, LEFT_SET = BOTTOM_SET, LEFT_AUTO = BOTTOM_AUTO }; enum op_letter_spacing { + LETTER_SPACING_CALC = 0x007f, LETTER_SPACING_SET = 0x0080, LETTER_SPACING_NORMAL = 0x0000 }; enum op_line_height { + LINE_HEIGHT_CALC = 0x007f, LINE_HEIGHT_NUMBER = 0x0080, LINE_HEIGHT_DIMENSION = 0x0081, LINE_HEIGHT_NORMAL = 0x0000 @@ -495,26 +509,31 @@ enum op_list_style_type { }; enum op_margin { + MARGIN_CALC = 0x007f, MARGIN_SET = 0x0080, MARGIN_AUTO = 0x0000 }; enum op_max_height { + MAX_HEIGHT_CALC = 0x007f, MAX_HEIGHT_SET = 0x0080, MAX_HEIGHT_NONE = 0x0000 }; enum op_max_width { + MAX_WIDTH_CALC = 0x007f, MAX_WIDTH_SET = 0x0080, MAX_WIDTH_NONE = 0x0000 }; enum op_min_height { + MIN_HEIGHT_CALC = 0x007f, MIN_HEIGHT_SET = 0x0080, MIN_HEIGHT_AUTO = 0x0000 }; enum op_min_width { + MIN_WIDTH_CALC = 0x007f, MIN_WIDTH_SET = 0x0080, MIN_WIDTH_AUTO = 0x0000 }; @@ -524,10 +543,12 @@ enum op_opacity { }; enum op_order { + ORDER_CALC = 0x007f, ORDER_SET = 0x0080 }; enum op_orphans { + ORPHANS_CALC = 0x007f, ORPHANS_SET = 0x0080 }; @@ -566,6 +587,7 @@ enum op_overflow { }; enum op_padding { + PADDING_CALC = 0x007f, PADDING_SET = 0x0080 }; @@ -591,18 +613,22 @@ enum op_page_break_inside { }; enum op_pause_after { + PAUSE_AFTER_CALC = 0x007f, PAUSE_AFTER_SET = 0x0080 }; enum op_pause_before { + PAUSE_BEFORE_CALC = 0x007f, PAUSE_BEFORE_SET = 0x0080 }; enum op_pitch_range { + PITCH_RANGE_CALC = 0x007f, PITCH_RANGE_SET = 0x0080 }; enum op_pitch { + PITCH_CALC = 0x007f, PITCH_FREQUENCY = 0x0080, PITCH_X_LOW = 0x0000, @@ -636,6 +662,7 @@ enum op_quotes { }; enum op_richness { + RICHNESS_CALC = 0x007f, RICHNESS_SET = 0x0080 }; @@ -666,6 +693,7 @@ enum op_speak { }; enum op_speech_rate { + SPEECH_RATE_CALC = 0x007f, SPEECH_RATE_SET = 0x0080, SPEECH_RATE_X_SLOW = 0x0000, @@ -678,6 +706,7 @@ enum op_speech_rate { }; enum op_stress { + STRESS_CALC = 0x007f, STRESS_SET = 0x0080 }; @@ -706,6 +735,7 @@ enum op_text_decoration { }; enum op_text_indent { + TEXT_INDENT_CALC = 0x007f, TEXT_INDENT_SET = 0x0080 }; @@ -717,6 +747,7 @@ enum op_text_transform { }; enum op_top { + TOP_CALC = BOTTOM_CALC, TOP_SET = BOTTOM_SET, TOP_AUTO = BOTTOM_AUTO }; @@ -728,6 +759,7 @@ enum op_unicode_bidi { }; enum op_vertical_align { + VERTICAL_ALIGN_CALC = 0x007f, VERTICAL_ALIGN_SET = 0x0080, VERTICAL_ALIGN_BASELINE = 0x0000, @@ -758,6 +790,7 @@ enum op_voice_family { }; enum op_volume { + VOLUME_CALC = 0x007f, VOLUME_NUMBER = 0x0080, VOLUME_DIMENSION = 0x0081, @@ -778,16 +811,19 @@ enum op_white_space { }; enum op_widows { + WIDOWS_CALC = 0x007f, WIDOWS_SET = 0x0080 }; enum op_width { + WIDTH_CALC = 0x007f, WIDTH_SET = 0x0080, WIDTH_AUTO = 0x0000 }; enum op_word_spacing { + WORD_SPACING_CALC = 0x007f, WORD_SPACING_SET = 0x0080, WORD_SPACING_NORMAL = 0x0000 @@ -800,6 +836,7 @@ enum op_writing_mode { }; enum op_z_index { + Z_INDEX_CALC = 0x007f, Z_INDEX_SET = 0x0080, Z_INDEX_AUTO = 0x0000 diff --git a/src/parse/properties/css_property_parser_gen.c b/src/parse/properties/css_property_parser_gen.c index 3d88cef..1cdb27f 100644 --- a/src/parse/properties/css_property_parser_gen.c +++ b/src/parse/properties/css_property_parser_gen.c @@ -19,6 +19,12 @@ * list_style_position:CSS_PROP_LIST_STYLE_POSITION IDENT:( INHERIT: INSIDE:0,LIST_STYLE_POSITION_INSIDE OUTSIDE:0,LIST_STYLE_POSITION_OUTSIDE IDENT:) */ +typedef enum { + CALC_ANY, + CALC_NUMBER, + CALC_UNIT, +} calc_kind; + struct keyval { char *key; char *val; @@ -291,21 +297,34 @@ void output_color(FILE *outputf, struct keyval *parseid, struct keyval_list *kvl parseid->val); } -void output_length_unit(FILE *outputf, struct keyval *parseid, struct keyval_list *kvlist) +void output_calc(FILE *outputf, struct keyval *parseid, struct keyval_list *kvlist) { struct keyval *ckv = kvlist->item[0]; - int ident_count; + const char *kind; + + if (strcmp(ckv->key, "NUMBER") == 0) + kind = "UNIT_CALC_NUMBER"; + else if (strcmp(ckv->key, "ANY") == 0) + kind = "UNIT_CALC_ANY"; + else + kind = ckv->key; fprintf(outputf, "if ((token->type == CSS_TOKEN_IDENT) && " "(lwc_string_caseless_isequal(token->idata, c->strings[CALC], &match) == lwc_error_ok && match))" " {\n" - "\t\terror = css__parse_calc(c, vector, ctx, result, buildOPV(%s, 0, %s /* _CALC */), %s);\n" + "\t\terror = css__parse_calc(c, vector, ctx, result, buildOPV(%s, 0, %s), %s);\n" "\t} else ", parseid->val, ckv->val, - ckv->key + kind ); +} + +void output_length_unit(FILE *outputf, struct keyval *parseid, struct keyval_list *kvlist) +{ + struct keyval *ckv = kvlist->item[0]; + int ident_count; fprintf(outputf, "{\n" @@ -501,6 +520,7 @@ int main(int argc, char **argv) struct keyval_list WRAP; struct keyval_list NUMBER; struct keyval_list COLOR; + struct keyval_list CALC; if (argc < 2) { @@ -533,6 +553,7 @@ int main(int argc, char **argv) COLOR.count = 0; LENGTH_UNIT.count = 0; IDENT_LIST.count = 0; + CALC.count = 0; curlist = &base; @@ -548,7 +569,7 @@ int main(int argc, char **argv) if (strcmp(rkv->key, "WRAP") == 0) { WRAP.item[WRAP.count++] = rkv; only_ident = false; - } else if (strcmp(rkv->key, "NUMBER") == 0) { + } else if (curlist == &base && strcmp(rkv->key, "NUMBER") == 0) { if (rkv->val[0] == '(') { curlist = &NUMBER; } else if (rkv->val[0] == ')') { @@ -579,6 +600,14 @@ int main(int argc, char **argv) } only_ident = false; do_token_check = false; + } else if (strcmp(rkv->key, "CALC") == 0) { + if (rkv->val[0] == '(') { + curlist = &CALC; + } else if (rkv->val[0] == ')') { + curlist = &base; + } + only_ident = false; + do_token_check = false; } else if (strcmp(rkv->key, "COLOR") == 0) { COLOR.item[COLOR.count++] = rkv; do_token_check = false; @@ -602,7 +631,7 @@ int main(int argc, char **argv) /* header */ -output_header(outputf, descriptor, base.item[0], is_generic); + output_header(outputf, descriptor, base.item[0], is_generic); if (WRAP.count > 0) { output_wrap(outputf, base.item[0], &WRAP); @@ -616,6 +645,10 @@ output_header(outputf, descriptor, base.item[0], is_generic); if (URI.count > 0) output_uri(outputf, base.item[0], &URI); + if (CALC.count > 0) { + output_calc(outputf, base.item[0], &CALC); + } + if (NUMBER.count > 0) output_number(outputf, base.item[0], &NUMBER); diff --git a/src/parse/properties/properties.gen b/src/parse/properties/properties.gen index e729285..9830ce4 100644 --- a/src/parse/properties/properties.gen +++ b/src/parse/properties/properties.gen @@ -6,6 +6,13 @@ #property:CSS_PROP_ENUM IDENT:( INHERIT: IDENT:) LENGTH_UNIT:( UNIT_HZ:PITCH_FREQUENCY ALLOW: DISALLOW: RANGE:<0 LENGTH_UNIT:) #property:CSS_PROP_ENUM WRAP: +# When a property takes a NUMBER and/or LENGTH_UNIT you may add calc() support: +# In the below, PROPERTY_FOO_CALC is the opcode enum for the set-but-calculated value bytecode. +# e.g. HEIGHT_SET (for a LENGTH_UNIT) would be HEIGHT_CALC here. +# CALC:( UNIT_??:PROPERTY_FOO_CALC CALC:) <-- When a default unit must be considered +# CALC:( NUMBER:PROPERTY_FOO_CALC CALC:) <-- When a number must be produced (not a dimension) +# CALC:( ANY:PROPERTY_FOO_CALC CALC:) <-- When a number or dimension is valid (e.g. line-height) + 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:) border_collapse:CSS_PROP_BORDER_COLLAPSE IDENT:( INHERIT: COLLAPSE:0,BORDER_COLLAPSE_COLLAPSE SEPARATE:0,BORDER_COLLAPSE_SEPARATE IDENT:) @@ -22,35 +29,35 @@ empty_cells:CSS_PROP_EMPTY_CELLS IDENT:( INHERIT: SHOW:0,EMPTY_CELLS_SHOW HIDE:0 float:CSS_PROP_FLOAT IDENT:( INHERIT: 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 MASK:UNIT_MASK_FONT_SIZE RANGE:<0 LENGTH_UNIT:) +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:) CALC:( UNIT_PX:FONT_SIZE_CALC CALC:) 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_variant:CSS_PROP_FONT_VARIANT IDENT:( INHERIT: 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 MASK:UNIT_MASK_HEIGHT RANGE:<0 LENGTH_UNIT:) +height:CSS_PROP_HEIGHT IDENT:( INHERIT: AUTO:0,HEIGHT_AUTO IDENT:) CALC:( UNIT_PX:HEIGHT_CALC CALC:) 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 MASK:UNIT_MASK_LETTER_SPACING LENGTH_UNIT:) +letter_spacing:CSS_PROP_LETTER_SPACING IDENT:( INHERIT: NORMAL:0,LETTER_SPACING_NORMAL IDENT:) CALC:( UNIT_PX:LETTER_SPACING_CALC CALC:) 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 MASK:UNIT_MASK_LINE_HEIGHT RANGE:<0 LENGTH_UNIT:) +line_height:CSS_PROP_LINE_HEIGHT IDENT:( INHERIT: NORMAL:0,LINE_HEIGHT_NORMAL IDENT:) CALC:( ANY:LINE_HEIGHT_CALC CALC:) 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 MASK:UNIT_MASK_MAX_HEIGHT RANGE:<0 LENGTH_UNIT:) +max_height:CSS_PROP_MAX_HEIGHT IDENT:( INHERIT: NONE:0,MAX_HEIGHT_NONE IDENT:) CALC:( UNIT_PX:MAX_HEIGHT_CALC CALC:) 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 MASK:UNIT_MASK_MAX_WIDTH RANGE:<0 LENGTH_UNIT:) +max_width:CSS_PROP_MAX_WIDTH IDENT:( INHERIT: NONE:0,MAX_WIDTH_NONE IDENT:) CALC:( UNIT_PX:MAX_WIDTH_CALC CALC:) 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 MASK:UNIT_MASK_MIN_HEIGHT RANGE:<0 LENGTH_UNIT:) +min_height:CSS_PROP_MIN_HEIGHT IDENT:( INHERIT: AUTO:0,MIN_HEIGHT_AUTO IDENT:) CALC:( UNIT_PX:MIN_HEIGHT_CALC CALC:) 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 MASK:UNIT_MASK_MIN_WIDTH RANGE:<0 LENGTH_UNIT:) +min_width:CSS_PROP_MIN_WIDTH IDENT:( INHERIT: AUTO:0,MIN_WIDTH_AUTO IDENT:) CALC:( UNIT_PX:MIN_WIDTH_CALC CALC:) 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 #generic for padding_{top, bottom, left, right}.c -padding_side:op GENERIC: IDENT:INHERIT LENGTH_UNIT:( UNIT_PX:PADDING_SET MASK:UNIT_MASK_PADDING_SIDE RANGE:<0 LENGTH_UNIT:) +padding_side:op GENERIC: IDENT:INHERIT CALC:( UNIT_PX:PADDING_CALC CALC:) 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 +66,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 MASK:UNIT_MASK_MARGIN_SIDE LENGTH_UNIT:) +margin_side:op GENERIC IDENT:( INHERIT: AUTO:0,MARGIN_AUTO IDENT:) CALC:( UNIT_PX:MARGIN_CALC CALC:) 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 +74,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 ALLOW:unit&(UNIT_LENGTH|UNIT_PCT) LENGTH_UNIT:) +side:op GENERIC: IDENT:( INHERIT: AUTO:0,BOTTOM_AUTO IDENT:) CALC:( UNIT_PX:BOTTOM_CALC CALC:) 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 +83,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 MASK:UNIT_MASK_BORDER_SIDE_WIDTH RANGE:<0 LENGTH_UNIT:) +border_side_width:op GENERIC: IDENT:( INHERIT: THIN:0,BORDER_WIDTH_THIN MEDIUM:0,BORDER_WIDTH_MEDIUM THICK:0,BORDER_WIDTH_THICK IDENT:) CALC:( UNIT_PX:BORDER_WIDTH_CALC CALC:) 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 @@ -120,7 +127,7 @@ list_style_image:CSS_PROP_LIST_STYLE_IMAGE IDENT:( INHERIT: NONE:0,LIST_STYLE_IM list_style_position:CSS_PROP_LIST_STYLE_POSITION IDENT:( INHERIT: 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 CALC:( NUMBER:ORPHANS_CALC CALC:) 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 @@ -140,17 +147,17 @@ page_break_before:CSS_PROP_PAGE_BREAK_BEFORE IDENT:( INHERIT: AUTO:0,PAGE_BREAK_ page_break_inside:CSS_PROP_PAGE_BREAK_INSIDE IDENT:( INHERIT: 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 MASK:UNIT_MASK_PAUSE_AFTER RANGE:<0 LENGTH_UNIT:) +pause_after:CSS_PROP_PAUSE_AFTER IDENT:INHERIT CALC:( UNIT_S:PAUSE_AFTER_CALC CALC:) 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 MASK:UNIT_MASK_PAUSE_BEFORE RANGE:<0 LENGTH_UNIT:) +pause_before:CSS_PROP_PAUSE_BEFORE IDENT:INHERIT CALC:( UNIT_S:PAUSE_BEFORE_CALC CALC:) 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 MASK:UNIT_MASK_PITCH 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:) CALC:( UNIT_HZ:PITCH_CALC CALC:) 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 CALC:( NUMBER:PITCH_RANGE_CALC CALC:) 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:) -richness:CSS_PROP_RICHNESS IDENT:INHERIT NUMBER:( false:RICHNESS_SET RANGE:num<0||num>F_100 NUMBER:) +richness:CSS_PROP_RICHNESS IDENT:INHERIT CALC:( NUMBER:RICHNESS_CALC CALC:) 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:) @@ -160,37 +167,35 @@ speak_numeral:CSS_PROP_SPEAK_NUMERAL IDENT:( INHERIT: DIGITS:0,SPEAK_NUMERAL_DIG speak_punctuation:CSS_PROP_SPEAK_PUNCTUATION IDENT:( INHERIT: 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: 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:) CALC:( NUMBER:SPEECH_RATE_CALC CALC:) 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 CALC:( NUMBER:STRESS_CALC CALC:) 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:) 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_indent:CSS_PROP_TEXT_INDENT IDENT:INHERIT LENGTH_UNIT:( UNIT_PX:TEXT_INDENT_SET MASK:UNIT_MASK_TEXT_INDENT LENGTH_UNIT:) +text_indent:CSS_PROP_TEXT_INDENT IDENT:INHERIT CALC:( UNIT_PX:TEXT_INDENT_CALC CALC:) 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:) 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:) -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 MASK:UNIT_MASK_VERTICAL_ALIGN LENGTH_UNIT:) +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:) CALC:( UNIT_PX:VERTICAL_ALIGN_CALC CALC:) 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:) -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 MASK:UNIT_MASK_VOLUME RANGE:<0 LENGTH_UNIT:) +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:) CALC:( ANY:VOLUME_CALC CALC:) 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:) -widows:CSS_PROP_WIDOWS IDENT:INHERIT 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 MASK:UNIT_MASK_WIDTH RANGE:<0 LENGTH_UNIT:) +widows:CSS_PROP_WIDOWS IDENT:INHERIT CALC:( NUMBER:WIDOWS_CALC CALC:) NUMBER:( true:WIDOWS_SET RANGE:num<0 NUMBER:) -word_spacing:CSS_PROP_WORD_SPACING IDENT:( INHERIT: NORMAL:0,WORD_SPACING_NORMAL IDENT:) LENGTH_UNIT:( UNIT_PX:WORD_SPACING_SET MASK:UNIT_MASK_WORD_SPACING LENGTH_UNIT:) +width:CSS_PROP_WIDTH IDENT:( INHERIT: AUTO:0,WIDTH_AUTO IDENT:) CALC:( UNIT_PX:WIDTH_CALC CALC:) LENGTH_UNIT:( UNIT_PX:WIDTH_SET MASK:UNIT_MASK_WIDTH RANGE:<0 LENGTH_UNIT:) -z_index:CSS_PROP_Z_INDEX IDENT:( INHERIT: AUTO:0,Z_INDEX_AUTO IDENT:) NUMBER:( true:Z_INDEX_SET NUMBER:) +word_spacing:CSS_PROP_WORD_SPACING IDENT:( INHERIT: NORMAL:0,WORD_SPACING_NORMAL IDENT:) CALC:( UNIT_PX:WORD_SPACING_CALC CALC:) 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:) CALC:( NUMBER:Z_INDEX_CALC CALC:) 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:) @@ -198,11 +203,11 @@ break_before:CSS_PROP_BREAK_BEFORE IDENT:( INHERIT: AUTO:0,BREAK_BEFORE_AUTO ALW 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:) -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: AUTO:0,COLUMN_COUNT_AUTO IDENT: CALC:( NUMBER:COLUMN_COUNT_CALC CALC:)) 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_gap:CSS_PROP_COLUMN_GAP IDENT:( INHERIT: NORMAL:0,COLUMN_GAP_NORMAL IDENT:) LENGTH_UNIT:( UNIT_PX:COLUMN_GAP_SET RANGE:<0 MASK:UNIT_MASK_COLUMN_GAP LENGTH_UNIT:) +column_gap:CSS_PROP_COLUMN_GAP IDENT:( INHERIT: NORMAL:0,COLUMN_GAP_NORMAL IDENT:) CALC:( UNIT_PX:COLUMN_GAP_CALC CALC:) 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 @@ -212,7 +217,7 @@ 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_width:CSS_PROP_COLUMN_WIDTH IDENT:( INHERIT: AUTO:0,COLUMN_WIDTH_AUTO IDENT:) LENGTH_UNIT:( UNIT_PX:COLUMN_WIDTH_SET MASK:UNIT_MASK_COLUMN_WIDTH LENGTH_UNIT:) +column_width:CSS_PROP_COLUMN_WIDTH IDENT:( INHERIT: AUTO:0,COLUMN_WIDTH_AUTO IDENT:) CALC:( UNIT_PX:COLUMN_WIDTH_CALC CALC:) 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:) @@ -224,16 +229,16 @@ align_items:CSS_PROP_ALIGN_ITEMS IDENT:( INHERIT: STRETCH:0,ALIGN_ITEMS_STRETCH 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:) -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 MASK:UNIT_MASK_FLEX_BASIS RANGE:<0 LENGTH_UNIT:) +flex_basis:CSS_PROP_FLEX_BASIS IDENT:( INHERIT: AUTO:0,FLEX_BASIS_AUTO CONTENT:0,FLEX_BASIS_CONTENT IDENT:) CALC:( UNIT_PX:FLEX_BASIS_CALC CALC:) 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_grow:CSS_PROP_FLEX_GROW IDENT:INHERIT NUMBER:( false:FLEX_GROW_SET RANGE:num<0 NUMBER:) +flex_grow:CSS_PROP_FLEX_GROW IDENT:INHERIT CALC:( NUMBER:FLEX_GROW_CALC CALC:) 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 CALC:( NUMBER:FLEX_SHRINK_CALC CALC:) 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:) 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:) -order:CSS_PROP_ORDER IDENT:INHERIT NUMBER:( true:ORDER_SET NUMBER:) +order:CSS_PROP_ORDER IDENT:INHERIT CALC:( NUMBER:ORDER_CALC CALC:) NUMBER:( true:ORDER_SET NUMBER:) diff --git a/src/parse/properties/utils.c b/src/parse/properties/utils.c index b1864cb..11b7f72 100644 --- a/src/parse/properties/utils.c +++ b/src/parse/properties/utils.c @@ -1351,9 +1351,9 @@ cleanup: * * * calc(10px + (4rem / 2)) => - * U 10 px - * U 4 rem - * N 2 + * V 10 px + * V 4 rem + * V 2 NUMBER * / * + * = @@ -1362,14 +1362,12 @@ cleanup: static css_error css__parse_calc_sum(css_language *c, const parserutils_vector *vector, int *ctx, - css_style *result, - uint32_t unit); + css_style *result); static css_error css__parse_calc_value(css_language *c, const parserutils_vector *vector, int *ctx, - css_style *result, - uint32_t default_unit) + css_style *result) { css_error error; int orig_ctx = *ctx; @@ -1377,7 +1375,7 @@ css__parse_calc_value(css_language *c, token = parserutils_vector_iterate(vector, ctx); if (tokenIsChar(token, '(')) { - error = css__parse_calc_sum(c, vector, ctx, result, default_unit); + error = css__parse_calc_sum(c, vector, ctx, result); if (error != CSS_OK) { return error; } @@ -1396,13 +1394,13 @@ css__parse_calc_value(css_language *c, uint32_t unit = 0; *ctx = orig_ctx; - error = css__parse_unit_specifier(c, vector, ctx, default_unit, &length, &unit); + error = css__parse_unit_specifier(c, vector, ctx, UNIT_CALC_NUMBER, &length, &unit); if (error != CSS_OK) { *ctx = orig_ctx; return error; } - error = css__stylesheet_style_vappend(result, 3, (css_code_t) 'U', length, unit); + error = css__stylesheet_style_vappend(result, 3, (css_code_t) 'V', length, unit); } break; @@ -1422,8 +1420,7 @@ css__parse_calc_value(css_language *c, static css_error css__parse_calc_product(css_language *c, const parserutils_vector *vector, int *ctx, - css_style *result, - uint32_t unit) + css_style *result) { css_error error = CSS_OK; const css_token *token; @@ -1431,7 +1428,7 @@ css__parse_calc_product(css_language *c, /* First parse a value */ - error = css__parse_calc_value(c, vector, ctx, result, unit); + error = css__parse_calc_value(c, vector, ctx, result); if (error != CSS_OK) { return error; } @@ -1455,33 +1452,10 @@ css__parse_calc_product(css_language *c, /* Consume that * or / now */ token = parserutils_vector_iterate(vector, ctx); - if (multiplication) { - /* parse another value */ - error = css__parse_calc_value(c, vector, ctx, result, unit); - if (error != CSS_OK) - break; - } else { - css_fixed num; - size_t consumed; - - token = parserutils_vector_iterate(vector, ctx); - if (token->type != CSS_TOKEN_NUMBER) { - error = CSS_INVALID; - break; - } - num = css__number_from_lwc_string(token->idata, false, &consumed); - if (consumed != lwc_string_length(token->idata)) { - error = CSS_INVALID; - break; - } - - error = css__stylesheet_style_append(result, (css_code_t) 'N'); - if (error != CSS_OK) - break; - error = css__stylesheet_style_append(result, (css_code_t) num); - if (error != CSS_OK) - break; - } + /* parse another value */ + error = css__parse_calc_value(c, vector, ctx, result); + if (error != CSS_OK) + break; /* emit the multiplication/division operator */ error = css__stylesheet_style_append(result, (css_code_t) (multiplication ? '*' : '/')); @@ -1494,8 +1468,7 @@ css__parse_calc_product(css_language *c, css_error css__parse_calc_sum(css_language *c, const parserutils_vector *vector, int *ctx, - css_style *result, - uint32_t unit) + css_style *result) { css_error error = CSS_OK; const css_token *token; @@ -1503,7 +1476,7 @@ css__parse_calc_sum(css_language *c, /* First parse a product */ - error = css__parse_calc_product(c, vector, ctx, result, unit); + error = css__parse_calc_product(c, vector, ctx, result); if (error != CSS_OK) { return error; } @@ -1528,7 +1501,7 @@ css__parse_calc_sum(css_language *c, token = parserutils_vector_iterate(vector, ctx); /* parse another product */ - error = css__parse_calc_product(c, vector, ctx, result, unit); + error = css__parse_calc_product(c, vector, ctx, result); if (error != CSS_OK) break; @@ -1570,8 +1543,10 @@ css_error css__parse_calc(css_language *c, error = css__stylesheet_style_append(calc_style, property); if (error != CSS_OK) goto cleanup; + + error = css__stylesheet_style_append(calc_style, (css_code_t) unit); - error = css__parse_calc_sum(c, vector, ctx, calc_style, unit); + error = css__parse_calc_sum(c, vector, ctx, calc_style); if (error != CSS_OK) goto cleanup; -- cgit v1.2.3