From 24479e3311cb07d09d3efb3338cb2904b18c0397 Mon Sep 17 00:00:00 2001 From: Lucas Neves Date: Thu, 28 Sep 2017 15:21:36 +0000 Subject: Add codes to flexbox properties. --- docs/Bytecode | 107 +++++++++++++++++++++++++++++++++++++++++--- include/libcss/properties.h | 96 +++++++++++++++++++++++++++++++++++++-- src/bytecode/opcodes.h | 78 ++++++++++++++++++++++++++++++-- 3 files changed, 269 insertions(+), 12 deletions(-) diff --git a/docs/Bytecode b/docs/Bytecode index 852a918..e857193 100644 --- a/docs/Bytecode +++ b/docs/Bytecode @@ -464,6 +464,8 @@ Opcodes d => table-cell, e => table-caption, f => none, + 10 => flex, + 11 => inline-flex, other => Reserved for future expansion. 21 - elevation @@ -678,8 +680,9 @@ Opcodes bits 0-7 : bit 7: set => length or percentage follows bits 0-6: MBZ - clear => Reserved for future expansion - bits 0-6: MBZ + bit 7 clear => keywords: + bits 0-6: 0000000 => auto, + other => rffe. 37 - min-width (14bits) : @@ -687,8 +690,9 @@ Opcodes bits 0-7 : bit 7: set => length or percentage follows bits 0-6: MBZ - clear => Reserved for future expansion - bits 0-6: MBZ + bit 7 clear => keywords: + bits 0-6: 0000000 => auto, + other => rffe. 38 - orphans (14bits) : @@ -1255,5 +1259,98 @@ Opcodes 1 => border-box, other => Reserved for future expansion. -72-3ff - Reserved for future expansion. +72 - align-content + (14bits) : + 0 => stretch, + 1 => flex-start, + 2 => flex-end, + 3 => center, + 4 => space-between, + 5 => space-around, + 6 => space-evenly + other => Reserved for future expansion. + +73 - align-items + (14bits) : + 0 => stretch, + 1 => flex-start, + 2 => flex-end, + 3 => center, + 4 => baseline, + other => Reserved for future expansion. + +74 - align-self + (14bits) : + 0 => stretch, + 1 => flex-start, + 2 => flex-end, + 3 => center, + 4 => baseline, + 5 => auto, + other => Reserved for future expansion. + +75 - flex-basis + (14bits) : + bits 8-13: MBZ + bits 0-7 : + bit 7 set => length or percentage follows + bits 0-6: MBZ + bit 7 clear => keywords: + bits 0-6: + 0000000 => auto, + 0000001 => content, + other => rffe. + +76 - flex-direction + (14bits) : + 0 => row, + 1 => row-reverse, + 2 => column, + 3 => column-reverse, + other => Reserved for future expansion. + +77 - flex-grow + (14bits) : + bits 8-13: MBZ + bits 0-7 : + bit 7 set => number follows + bits 0-6: MBZ + bit 7 clear => Reserved for future expansion + bits 0-6: MBZ + +78 - flex-shrink + (14bits) : + bits 8-13: MBZ + bits 0-7 : + bit 7 set => number follows + bits 0-6: MBZ + bit 7 clear => Reserved for future expansion + bits 0-6: MBZ + +79 - flex-wrap + (14bits) : + 0 => nowrap, + 1 => wrap, + 2 => wrap-reverse, + other => Reserved for future expansion. + +7a - justify-content + (14bits) : + 0 => flex-start, + 1 => flex-end, + 2 => center, + 3 => space-between, + 4 => space-around, + 5 => space-evenly, + other => Reserved for future expansion. + +7b - order + (14bits) : + bits 8-13: MBZ + bits 0-7 : + bit 7 set => integer follows + bits 0-6: MBZ + bit 7 clear => Reserved for future expansion + bits 0-6: MBZ +7c-3ff - Reserved for future expansion. diff --git a/include/libcss/properties.h b/include/libcss/properties.h index 06c033f..577bed0 100644 --- a/include/libcss/properties.h +++ b/include/libcss/properties.h @@ -128,10 +128,49 @@ enum css_properties_e { CSS_PROP_WRITING_MODE = 0x06f, CSS_PROP_OVERFLOW_Y = 0x070, CSS_PROP_BOX_SIZING = 0x071, + CSS_PROP_ALIGN_CONTENT = 0x072, + CSS_PROP_ALIGN_ITEMS = 0x073, + CSS_PROP_ALIGN_SELF = 0x074, + CSS_PROP_FLEX_BASIS = 0x075, + CSS_PROP_FLEX_DIRECTION = 0x076, + CSS_PROP_FLEX_GROW = 0x077, + CSS_PROP_FLEX_SHRINK = 0x078, + CSS_PROP_FLEX_WRAP = 0x079, + CSS_PROP_JUSTIFY_CONTENT = 0x07a, + CSS_PROP_ORDER = 0x07b, CSS_N_PROPERTIES }; +enum css_align_content_e { + CSS_ALIGN_CONTENT_INHERIT = 0x0, + CSS_ALIGN_CONTENT_STRETCH = 0x1, + CSS_ALIGN_CONTENT_FLEX_START = 0x2, + CSS_ALIGN_CONTENT_FLEX_END = 0x3, + CSS_ALIGN_CONTENT_CENTER = 0x4, + CSS_ALIGN_CONTENT_SPACE_BETWEEN = 0x5, + CSS_ALIGN_CONTENT_SPACE_AROUND = 0x6, + CSS_ALIGN_CONTENT_SPACE_EVENLY = 0x7 +}; + +enum css_align_items_e { + CSS_ALIGN_ITEMS_INHERIT = 0x0, + CSS_ALIGN_ITEMS_STRETCH = 0x1, + CSS_ALIGN_ITEMS_FLEX_START = 0x2, + CSS_ALIGN_ITEMS_FLEX_END = 0x3, + CSS_ALIGN_ITEMS_CENTER = 0x4, + CSS_ALIGN_ITEMS_BASELINE = 0x5 +}; + +enum css_align_self_e { + CSS_ALIGN_SELF_INHERIT = 0x0, + CSS_ALIGN_SELF_STRETCH = 0x1, + CSS_ALIGN_SELF_FLEX_START = 0x2, + CSS_ALIGN_SELF_FLEX_END = 0x3, + CSS_ALIGN_SELF_CENTER = 0x4, + CSS_ALIGN_SELF_BASELINE = 0x5, + CSS_ALIGN_SELF_AUTO = 0x6 +}; enum css_background_attachment_e { CSS_BACKGROUND_ATTACHMENT_INHERIT = 0x0, @@ -399,7 +438,9 @@ enum css_display_e { CSS_DISPLAY_TABLE_COLUMN = 0x0d, CSS_DISPLAY_TABLE_CELL = 0x0e, CSS_DISPLAY_TABLE_CAPTION = 0x0f, - CSS_DISPLAY_NONE = 0x10 + CSS_DISPLAY_NONE = 0x10, + CSS_DISPLAY_FLEX = 0x11, + CSS_DISPLAY_INLINE_FLEX = 0x12 }; enum css_empty_cells_e { @@ -408,6 +449,38 @@ enum css_empty_cells_e { CSS_EMPTY_CELLS_HIDE = 0x2 }; +enum css_flex_basis_e { + CSS_FLEX_BASIS_INHERIT = 0x0, + CSS_FLEX_BASIS_SET = 0x1, + CSS_FLEX_BASIS_AUTO = 0x2, + CSS_FLEX_BASIS_CONTENT = 0x3 +}; + +enum css_flex_direction_e { + CSS_FLEX_DIRECTION_INHERIT = 0x0, + CSS_FLEX_DIRECTION_ROW = 0x1, + CSS_FLEX_DIRECTION_ROW_REVERSE = 0x2, + CSS_FLEX_DIRECTION_COLUMN = 0x3, + CSS_FLEX_DIRECTION_COLUMN_REVERSE = 0x4 +}; + +enum css_flex_grow_e { + CSS_FLEX_GROW_INHERIT = 0x0, + CSS_FLEX_GROW_SET = 0x1 +}; + +enum css_flex_shrink_e { + CSS_FLEX_SHRINK_INHERIT = 0x0, + CSS_FLEX_SHRINK_SET = 0x1 +}; + +enum css_flex_wrap_e { + CSS_FLEX_WRAP_INHERIT = 0x0, + CSS_FLEX_WRAP_NOWRAP = 0x1, + CSS_FLEX_WRAP_WRAP = 0x2, + CSS_FLEX_WRAP_WRAP_REVERSE = 0x3 +}; + enum css_float_e { CSS_FLOAT_INHERIT = 0x0, CSS_FLOAT_LEFT = 0x1, @@ -475,6 +548,16 @@ enum css_height_e { CSS_HEIGHT_AUTO = 0x2 }; +enum css_justify_content_e { + CSS_JUSTIFY_CONTENT_INHERIT = 0x0, + CSS_JUSTIFY_CONTENT_FLEX_START = 0x1, + CSS_JUSTIFY_CONTENT_FLEX_END = 0x2, + CSS_JUSTIFY_CONTENT_CENTER = 0x3, + CSS_JUSTIFY_CONTENT_SPACE_BETWEEN = 0x4, + CSS_JUSTIFY_CONTENT_SPACE_AROUND = 0x5, + CSS_JUSTIFY_CONTENT_SPACE_EVENLY = 0x6 +}; + enum css_left_e { CSS_LEFT_INHERIT = 0x0, CSS_LEFT_SET = 0x1, @@ -546,12 +629,14 @@ enum css_max_width_e { enum css_min_height_e { CSS_MIN_HEIGHT_INHERIT = 0x0, - CSS_MIN_HEIGHT_SET = 0x1 + CSS_MIN_HEIGHT_SET = 0x1, + CSS_MIN_HEIGHT_AUTO = 0x2 }; enum css_min_width_e { CSS_MIN_WIDTH_INHERIT = 0x0, - CSS_MIN_WIDTH_SET = 0x1 + CSS_MIN_WIDTH_SET = 0x1, + CSS_MIN_WIDTH_AUTO = 0x2 }; enum css_opacity_e { @@ -559,6 +644,11 @@ enum css_opacity_e { CSS_OPACITY_SET = 0x1 }; +enum css_order_e { + CSS_ORDER_INHERIT = 0x0, + CSS_ORDER_SET = 0x1 +}; + enum css_outline_color_e { CSS_OUTLINE_COLOR_INHERIT = CSS_BACKGROUND_COLOR_INHERIT, CSS_OUTLINE_COLOR_COLOR = CSS_BACKGROUND_COLOR_COLOR, diff --git a/src/bytecode/opcodes.h b/src/bytecode/opcodes.h index 64ea482..82bf75f 100644 --- a/src/bytecode/opcodes.h +++ b/src/bytecode/opcodes.h @@ -10,6 +10,33 @@ #include +enum op_align_content { + ALIGN_CONTENT_STRETCH = 0x0000, + ALIGN_CONTENT_FLEX_START = 0x0001, + ALIGN_CONTENT_FLEX_END = 0x0002, + ALIGN_CONTENT_CENTER = 0x0003, + ALIGN_CONTENT_SPACE_BETWEEN = 0x0004, + ALIGN_CONTENT_SPACE_AROUND = 0x0005, + ALIGN_CONTENT_SPACE_EVENLY = 0x0006 +}; + +enum op_align_items { + ALIGN_ITEMS_STRETCH = 0x0000, + ALIGN_ITEMS_FLEX_START = 0x0001, + ALIGN_ITEMS_FLEX_END = 0x0002, + ALIGN_ITEMS_CENTER = 0x0003, + ALIGN_ITEMS_BASELINE = 0x0004 +}; + +enum op_align_self { + ALIGN_SELF_STRETCH = 0x0000, + ALIGN_SELF_FLEX_START = 0x0001, + ALIGN_SELF_FLEX_END = 0x0002, + ALIGN_SELF_CENTER = 0x0003, + ALIGN_SELF_BASELINE = 0x0004, + ALIGN_SELF_AUTO = 0x0005 +}; + enum op_azimuth { AZIMUTH_ANGLE = 0x0080, @@ -303,7 +330,9 @@ enum op_display { DISPLAY_TABLE_COLUMN = 0x000c, DISPLAY_TABLE_CELL = 0x000d, DISPLAY_TABLE_CAPTION = 0x000e, - DISPLAY_NONE = 0x000f + DISPLAY_NONE = 0x000f, + DISPLAY_FLEX = 0x0010, + DISPLAY_INLINE_FLEX = 0x0011 }; enum op_elevation { @@ -320,6 +349,33 @@ enum op_empty_cells { EMPTY_CELLS_HIDE = 0x0001 }; +enum op_flex_basis { + FLEX_BASIS_AUTO = 0x0000, + FLEX_BASIS_CONTENT = 0x0001, + FLEX_BASIS_SET = 0x0080 +}; + +enum op_flex_direction { + FLEX_DIRECTION_ROW = 0x0000, + FLEX_DIRECTION_ROW_REVERSE = 0x0001, + FLEX_DIRECTION_COLUMN = 0x0002, + FLEX_DIRECTION_COLUMN_REVERSE = 0x0003 +}; + +enum op_flex_grow { + FLEX_GROW_SET = 0x0080 +}; + +enum op_flex_shrink { + FLEX_SHRINK_SET = 0x0080 +}; + +enum op_flex_wrap { + FLEX_WRAP_NOWRAP = 0x0000, + FLEX_WRAP_WRAP = 0x0001, + FLEX_WRAP_WRAP_REVERSE = 0x0002 +}; + enum op_float { FLOAT_LEFT = 0x0000, FLOAT_RIGHT = 0x0001, @@ -385,6 +441,15 @@ enum op_height { HEIGHT_AUTO = 0x0000 }; +enum op_justify_content { + JUSTIFY_CONTENT_FLEX_START = 0x0000, + JUSTIFY_CONTENT_FLEX_END = 0x0001, + JUSTIFY_CONTENT_CENTER = 0x0002, + JUSTIFY_CONTENT_SPACE_BETWEEN = 0x0003, + JUSTIFY_CONTENT_SPACE_AROUND = 0x0004, + JUSTIFY_CONTENT_SPACE_EVENLY = 0x0005 +}; + enum op_left { LEFT_SET = BOTTOM_SET, LEFT_AUTO = BOTTOM_AUTO @@ -445,17 +510,23 @@ enum op_max_width { }; enum op_min_height { - MIN_HEIGHT_SET = 0x0080 + MIN_HEIGHT_SET = 0x0080, + MIN_HEIGHT_AUTO = 0x0000 }; enum op_min_width { - MIN_WIDTH_SET = 0x0080 + MIN_WIDTH_SET = 0x0080, + MIN_WIDTH_AUTO = 0x0000 }; enum op_opacity { OPACITY_SET = 0x0080 }; +enum op_order { + ORDER_SET = 0x0080 +}; + enum op_orphans { ORPHANS_SET = 0x0080 }; @@ -735,4 +806,3 @@ enum op_z_index { }; #endif - -- cgit v1.2.3 From 54183411a97306df6e52d35dc5547ffac18a0992 Mon Sep 17 00:00:00 2001 From: Lucas Neves Date: Thu, 28 Sep 2017 15:30:14 +0000 Subject: Parsing: Add support for parsing the flexbox properties. --- src/parse/important.c | 20 ++++ src/parse/properties/Makefile | 2 + src/parse/properties/flex.c | 213 ++++++++++++++++++++++++++++++++++++ src/parse/properties/flex_flow.c | 137 +++++++++++++++++++++++ src/parse/properties/properties.c | 13 ++- src/parse/properties/properties.gen | 26 ++++- src/parse/properties/properties.h | 37 ++++++- src/parse/propstrings.c | 26 ++++- src/parse/propstrings.h | 48 ++++---- 9 files changed, 492 insertions(+), 30 deletions(-) create mode 100644 src/parse/properties/flex.c create mode 100644 src/parse/properties/flex_flow.c diff --git a/src/parse/important.c b/src/parse/important.c index ca4d60c..e0e8620 100644 --- a/src/parse/important.c +++ b/src/parse/important.c @@ -258,6 +258,21 @@ void css__make_style_important(css_style *style) offset += 2; /* length + units */ break; + case CSS_PROP_FLEX_BASIS: + if (value == FLEX_BASIS_SET) + offset += 2; /* length + units */ + break; + + case CSS_PROP_FLEX_GROW: + if (value == FLEX_GROW_SET) + offset++; /* value */ + break; + + case CSS_PROP_FLEX_SHRINK: + if (value == FLEX_SHRINK_SET) + offset++; /* value */ + break; + case CSS_PROP_FONT_FAMILY: while (value != FONT_FAMILY_END) { switch (value) { @@ -331,6 +346,11 @@ void css__make_style_important(css_style *style) offset++; /* value */ break; + case CSS_PROP_ORDER: + if (value == ORDER_SET) + offset++; /* value */ + break; + case CSS_PROP_ORPHANS: case CSS_PROP_PITCH_RANGE: case CSS_PROP_RICHNESS: diff --git a/src/parse/properties/Makefile b/src/parse/properties/Makefile index 6d6cff0..6461dda 100644 --- a/src/parse/properties/Makefile +++ b/src/parse/properties/Makefile @@ -45,6 +45,8 @@ DIR_SOURCES := \ cue.c \ cursor.c \ elevation.c \ + flex.c \ + flex_flow.c \ font.c \ font_family.c \ font_weight.c \ diff --git a/src/parse/properties/flex.c b/src/parse/properties/flex.c new file mode 100644 index 0000000..9e284d9 --- /dev/null +++ b/src/parse/properties/flex.c @@ -0,0 +1,213 @@ +/* + * This file is part of LibCSS. + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2017 Lucas Neves + */ + +#include +#include + +#include "bytecode/bytecode.h" +#include "bytecode/opcodes.h" +#include "parse/properties/properties.h" +#include "parse/properties/utils.h" + +/** + * Parse list-style + * + * \param c Parsing context + * \param vector Vector of tokens to process + * \param ctx Pointer to vector iteration context + * \param result Pointer to location to receive 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_flex(css_language *c, + const parserutils_vector *vector, int *ctx, + css_style *result) +{ + int orig_ctx = *ctx; + int prev_ctx; + const css_token *token; + css_error error; + bool grow = true; + bool shrink = true; + bool basis = true; + css_style *grow_style; + css_style *shrink_style; + css_style *basis_style; + bool short_auto = false; + bool short_none = false; + 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, + CSS_PROP_FLEX_GROW); + if (error != CSS_OK) + return error; + + error = css_stylesheet_style_inherit(result, + CSS_PROP_FLEX_SHRINK); + + if (error != CSS_OK) + return error; + + error = css_stylesheet_style_inherit(result, + CSS_PROP_FLEX_BASIS); + + if (error == CSS_OK) + parserutils_vector_iterate(vector, ctx); + + return error; + } + + /* allocate styles */ + error = css__stylesheet_style_create(c->sheet, &grow_style); + if (error != CSS_OK) + return error; + + error = css__stylesheet_style_create(c->sheet, &shrink_style); + if (error != CSS_OK) { + css__stylesheet_style_destroy(grow_style); + return error; + } + + error = css__stylesheet_style_create(c->sheet, &basis_style); + if (error != CSS_OK) { + css__stylesheet_style_destroy(grow_style); + css__stylesheet_style_destroy(shrink_style); + return error; + } + + /* Handle shorthand none, equivalent of flex: 0 0 auto; */ + if ((token->type == CSS_TOKEN_IDENT) && + (lwc_string_caseless_isequal( + token->idata, c->strings[NONE], + &match) == lwc_error_ok && match)) { + short_none = true; + parserutils_vector_iterate(vector, ctx); + + } else if ((token->type == CSS_TOKEN_IDENT) && + (lwc_string_caseless_isequal( + token->idata, c->strings[AUTO], + &match) == lwc_error_ok && match)) { + /* Handle shorthand auto, equivalent of flex: 1 1 auto; */ + short_auto = true; + parserutils_vector_iterate(vector, ctx); + + } else do { + /* Attempt to parse the various longhand properties */ + prev_ctx = *ctx; + error = CSS_OK; + + /* Ensure that we're not about to parse another inherit */ + token = parserutils_vector_peek(vector, *ctx); + if (token != NULL && is_css_inherit(c, token)) { + error = CSS_INVALID; + goto css__parse_flex_cleanup; + } + + if ((grow) && + (error = css__parse_flex_grow(c, vector, + ctx, grow_style)) == CSS_OK) { + grow = false; + } else if ((basis) && + (error = css__parse_flex_basis(c, vector, + ctx, basis_style)) == CSS_OK) { + basis = false; + } else if ((shrink) && + (error = css__parse_flex_shrink(c, vector, + ctx, shrink_style)) == CSS_OK) { + shrink = false; + } + + if (error == CSS_OK) { + consumeWhitespace(vector, ctx); + token = parserutils_vector_peek(vector, *ctx); + } else { + /* Forcibly cause loop to exit */ + token = NULL; + } + } while (*ctx != prev_ctx && token != NULL); + + /* defaults */ + if (grow) { + error = css__stylesheet_style_appendOPV(grow_style, + CSS_PROP_FLEX_GROW, 0, FLEX_GROW_SET); + if (error != CSS_OK) + goto css__parse_flex_cleanup; + + css_fixed grow_num = short_auto ? INTTOFIX(1) : 0; + error = css__stylesheet_style_append(grow_style, grow_num); + if (error != CSS_OK) + goto css__parse_flex_cleanup; + } + + if (shrink) { + error = css__stylesheet_style_appendOPV(shrink_style, + CSS_PROP_FLEX_SHRINK, 0, FLEX_SHRINK_SET); + if (error != CSS_OK) + goto css__parse_flex_cleanup; + + css_fixed shrink_num = short_none ? 0 : INTTOFIX(1); + error = css__stylesheet_style_append(shrink_style, shrink_num); + if (error != CSS_OK) + goto css__parse_flex_cleanup; + } + + if (basis) { + /* Default is auto, but zero if grow or shrink are set */ + if (!grow || !shrink) { + error = css__stylesheet_style_appendOPV(basis_style, + CSS_PROP_FLEX_BASIS, 0, + FLEX_BASIS_SET); + if (error != CSS_OK) + goto css__parse_flex_cleanup; + + error = css__stylesheet_style_vappend( + basis_style, 2, 0, UNIT_PX); + if (error != CSS_OK) + goto css__parse_flex_cleanup; + + } else { + error = css__stylesheet_style_appendOPV(basis_style, + CSS_PROP_FLEX_BASIS, 0, + FLEX_BASIS_AUTO); + if (error != CSS_OK) + goto css__parse_flex_cleanup; + } + } + + error = css__stylesheet_merge_style(result, grow_style); + if (error != CSS_OK) + goto css__parse_flex_cleanup; + + error = css__stylesheet_merge_style(result, shrink_style); + if (error != CSS_OK) + goto css__parse_flex_cleanup; + + error = css__stylesheet_merge_style(result, basis_style); + +css__parse_flex_cleanup: + + css__stylesheet_style_destroy(basis_style); + css__stylesheet_style_destroy(shrink_style); + css__stylesheet_style_destroy(grow_style); + + if (error != CSS_OK) + *ctx = orig_ctx; + + return error; +} + diff --git a/src/parse/properties/flex_flow.c b/src/parse/properties/flex_flow.c new file mode 100644 index 0000000..40a42d9 --- /dev/null +++ b/src/parse/properties/flex_flow.c @@ -0,0 +1,137 @@ +* + * This file is part of LibCSS. + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2017 Lucas Neves + */ + +#include +#include + +#include "bytecode/bytecode.h" +#include "bytecode/opcodes.h" +#include "parse/properties/properties.h" +#include "parse/properties/utils.h" + +/** + * Parse flex-flow + * + * \param c Parsing context + * \param vector Vector of tokens to process + * \param ctx Pointer to vector iteration context + * \param result Pointer to location to receive 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_flex_flow(css_language *c, + const parserutils_vector *vector, int *ctx, + css_style *result) +{ + int orig_ctx = *ctx; + int prev_ctx; + const css_token *token; + css_error error; + bool direction = true; + bool wrap = true; + css_style *direction_style; + css_style *wrap_style; + + /* 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_FLEX_DIRECTION); + if (error != CSS_OK) + return error; + + error = css_stylesheet_style_inherit(result, + CSS_PROP_FLEX_WRAP); + + if (error == CSS_OK) + parserutils_vector_iterate(vector, ctx); + + return error; + } + + /* allocate styles */ + error = css__stylesheet_style_create(c->sheet, &direction_style); + if (error != CSS_OK) + return error; + + error = css__stylesheet_style_create(c->sheet, &wrap_style); + if (error != CSS_OK) { + css__stylesheet_style_destroy(direction_style); + return error; + } + + /* Attempt to parse the various longhand properties */ + do { + prev_ctx = *ctx; + error = CSS_OK; + + /* Ensure that we're not about to parse another inherit */ + token = parserutils_vector_peek(vector, *ctx); + if (token != NULL && is_css_inherit(c, token)) { + error = CSS_INVALID; + goto css__parse_flex_flow_cleanup; + } + + if ((wrap) && + (error = css__parse_flex_wrap(c, vector, + ctx, wrap_style)) == CSS_OK) { + wrap = false; + } else if ((direction) && + (error = css__parse_flex_direction(c, vector, + ctx, direction_style)) == CSS_OK) { + direction = false; + } + + if (error == CSS_OK) { + consumeWhitespace(vector, ctx); + + token = parserutils_vector_peek(vector, *ctx); + } else { + /* Forcibly cause loop to exit */ + token = NULL; + } + } while (*ctx != prev_ctx && token != NULL); + + + /* defaults */ + if (direction) { + error = css__stylesheet_style_appendOPV(direction_style, + CSS_PROP_FLEX_DIRECTION, + 0, FLEX_DIRECTION_ROW); + } + + if (wrap) { + error = css__stylesheet_style_appendOPV(wrap_style, + CSS_PROP_FLEX_WRAP, + 0, FLEX_WRAP_NOWRAP); + } + + error = css__stylesheet_merge_style(result, direction_style); + if (error != CSS_OK) + goto css__parse_flex_flow_cleanup; + + error = css__stylesheet_merge_style(result, wrap_style); + +css__parse_flex_flow_cleanup: + + css__stylesheet_style_destroy(wrap_style); + css__stylesheet_style_destroy(direction_style); + + if (error != CSS_OK) + *ctx = orig_ctx; + + return error; +} + diff --git a/src/parse/properties/properties.c b/src/parse/properties/properties.c index f32e374..3f374fa 100644 --- a/src/parse/properties/properties.c +++ b/src/parse/properties/properties.c @@ -12,6 +12,9 @@ */ const css_prop_handler property_handlers[LAST_PROP + 1 - FIRST_PROP] = { + css__parse_align_content, + css__parse_align_items, + css__parse_align_self, css__parse_azimuth, css__parse_background, css__parse_background_attachment, @@ -71,6 +74,13 @@ const css_prop_handler property_handlers[LAST_PROP + 1 - FIRST_PROP] = css__parse_display, css__parse_elevation, css__parse_empty_cells, + css__parse_flex, + css__parse_flex_basis, + css__parse_flex_direction, + css__parse_flex_flow, + css__parse_flex_grow, + css__parse_flex_shrink, + css__parse_flex_wrap, css__parse_float, css__parse_font, css__parse_font_family, @@ -79,6 +89,7 @@ const css_prop_handler property_handlers[LAST_PROP + 1 - FIRST_PROP] = css__parse_font_variant, css__parse_font_weight, css__parse_height, + css__parse_justify_content, css__parse_left, css__parse_letter_spacing, css__parse_line_height, @@ -96,6 +107,7 @@ const css_prop_handler property_handlers[LAST_PROP + 1 - FIRST_PROP] = css__parse_min_height, css__parse_min_width, css__parse_opacity, + css__parse_order, css__parse_orphans, css__parse_outline, css__parse_outline_color, @@ -146,4 +158,3 @@ const css_prop_handler property_handlers[LAST_PROP + 1 - FIRST_PROP] = css__parse_writing_mode, css__parse_z_index }; - diff --git a/src/parse/properties/properties.gen b/src/parse/properties/properties.gen index 60d5536..61dcd5e 100644 --- a/src/parse/properties/properties.gen +++ b/src/parse/properties/properties.gen @@ -16,7 +16,7 @@ cue_before:CSS_PROP_CUE_BEFORE IDENT:( INHERIT: NONE:0,CUE_BEFORE_NONE IDENT:) U direction:CSS_PROP_DIRECTION IDENT:( INHERIT: 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 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:) empty_cells:CSS_PROP_EMPTY_CELLS IDENT:( INHERIT: SHOW:0,EMPTY_CELLS_SHOW HIDE:0,EMPTY_CELLS_HIDE IDENT:) @@ -43,9 +43,9 @@ max_height:CSS_PROP_MAX_HEIGHT IDENT:( INHERIT: NONE:0,MAX_HEIGHT_NONE IDENT:) L 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:) -min_height:CSS_PROP_MIN_HEIGHT IDENT:INHERIT 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: 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_width:CSS_PROP_MIN_WIDTH IDENT:INHERIT 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: 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:) color:CSS_PROP_COLOR IDENT:INHERIT COLOR:COLOR_SET @@ -217,3 +217,23 @@ column_width:CSS_PROP_COLUMN_WIDTH IDENT:( INHERIT: AUTO:0,COLUMN_WIDTH_AUTO IDE 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:) box_sizing:CSS_PROP_BOX_SIZING IDENT:( INHERIT: 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_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_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 DISALLOW:unit&UNIT_ANGLE||unit&UNIT_TIME||unit&UNIT_FREQ 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_shrink:CSS_PROP_FLEX_SHRINK IDENT:INHERIT 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:) diff --git a/src/parse/properties/properties.h b/src/parse/properties/properties.h index 4517515..1e085c5 100644 --- a/src/parse/properties/properties.h +++ b/src/parse/properties/properties.h @@ -22,6 +22,15 @@ typedef css_error (*css_prop_handler)(css_language *c, 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, + css_style *result); +css_error css__parse_align_items(css_language *c, + const parserutils_vector *vector, int *ctx, + css_style *result); +css_error css__parse_align_self(css_language *c, + const parserutils_vector *vector, int *ctx, + css_style *result); css_error css__parse_azimuth(css_language *c, const parserutils_vector *vector, int *ctx, css_style *result); @@ -199,6 +208,27 @@ css_error css__parse_elevation(css_language *c, css_error css__parse_empty_cells(css_language *c, const parserutils_vector *vector, int *ctx, css_style *result); +css_error css__parse_flex(css_language *c, + const parserutils_vector *vector, int *ctx, + css_style *result); +css_error css__parse_flex_basis(css_language *c, + const parserutils_vector *vector, int *ctx, + css_style *result); +css_error css__parse_flex_direction(css_language *c, + const parserutils_vector *vector, int *ctx, + css_style *result); +css_error css__parse_flex_flow(css_language *c, + const parserutils_vector *vector, int *ctx, + css_style *result); +css_error css__parse_flex_grow(css_language *c, + const parserutils_vector *vector, int *ctx, + css_style *result); +css_error css__parse_flex_shrink(css_language *c, + const parserutils_vector *vector, int *ctx, + css_style *result); +css_error css__parse_flex_wrap(css_language *c, + const parserutils_vector *vector, int *ctx, + css_style *result); css_error css__parse_float(css_language *c, const parserutils_vector *vector, int *ctx, css_style *result); @@ -223,6 +253,9 @@ css_error css__parse_font_weight(css_language *c, css_error css__parse_height(css_language *c, const parserutils_vector *vector, int *ctx, css_style *result); +css_error css__parse_justify_content(css_language *c, + const parserutils_vector *vector, int *ctx, + css_style *result); css_error css__parse_left(css_language *c, const parserutils_vector *vector, int *ctx, css_style *result); @@ -274,6 +307,9 @@ css_error css__parse_min_width(css_language *c, css_error css__parse_opacity(css_language *c, const parserutils_vector *vector, int *ctx, css_style *result); +css_error css__parse_order(css_language *c, + const parserutils_vector *vector, int *ctx, + css_style *result); css_error css__parse_orphans(css_language *c, const parserutils_vector *vector, int *ctx, css_style *result); @@ -423,4 +459,3 @@ css_error css__parse_z_index(css_language *c, css_style *result); #endif - diff --git a/src/parse/propstrings.c b/src/parse/propstrings.c index dd6bee4..bfd2965 100644 --- a/src/parse/propstrings.c +++ b/src/parse/propstrings.c @@ -82,6 +82,9 @@ const stringmap_entry stringmap[LAST_KNOWN] = { { "before", SLEN("before") }, { "after", SLEN("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") }, @@ -141,6 +144,13 @@ const stringmap_entry stringmap[LAST_KNOWN] = { { "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") }, @@ -149,6 +159,7 @@ const stringmap_entry stringmap[LAST_KNOWN] = { { "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") }, @@ -166,6 +177,7 @@ const stringmap_entry stringmap[LAST_KNOWN] = { { "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") }, @@ -415,6 +427,18 @@ const stringmap_entry stringmap[LAST_KNOWN] = { { "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") }, { "aliceblue", SLEN("aliceblue") }, { "antiquewhite", SLEN("antiquewhite") }, @@ -621,5 +645,3 @@ void css__propstrings_unref(void) lwc_string_unref(css__propstrings.strings[i]); } } - - diff --git a/src/parse/propstrings.h b/src/parse/propstrings.h index e0d16e2..67eaa5f 100644 --- a/src/parse/propstrings.h +++ b/src/parse/propstrings.h @@ -38,12 +38,12 @@ enum { /* Properties */ FIRST_PROP, - AZIMUTH = FIRST_PROP, BACKGROUND, BACKGROUND_ATTACHMENT, - BACKGROUND_COLOR, BACKGROUND_IMAGE, BACKGROUND_POSITION, - BACKGROUND_REPEAT, BORDER, BORDER_BOTTOM, BORDER_BOTTOM_COLOR, - BORDER_BOTTOM_STYLE, BORDER_BOTTOM_WIDTH, BORDER_COLLAPSE, - BORDER_COLOR, BORDER_LEFT, BORDER_LEFT_COLOR, BORDER_LEFT_STYLE, - BORDER_LEFT_WIDTH, BORDER_RIGHT, BORDER_RIGHT_COLOR, + ALIGN_CONTENT = FIRST_PROP, ALIGN_ITEMS, ALIGN_SELF, AZIMUTH, + BACKGROUND, BACKGROUND_ATTACHMENT, BACKGROUND_COLOR, BACKGROUND_IMAGE, + BACKGROUND_POSITION, BACKGROUND_REPEAT, BORDER, BORDER_BOTTOM, + BORDER_BOTTOM_COLOR, BORDER_BOTTOM_STYLE, BORDER_BOTTOM_WIDTH, + BORDER_COLLAPSE, BORDER_COLOR, BORDER_LEFT, BORDER_LEFT_COLOR, + BORDER_LEFT_STYLE, BORDER_LEFT_WIDTH, BORDER_RIGHT, BORDER_RIGHT_COLOR, BORDER_RIGHT_STYLE, BORDER_RIGHT_WIDTH, BORDER_SPACING, BORDER_STYLE, BORDER_TOP, BORDER_TOP_COLOR, BORDER_TOP_STYLE, BORDER_TOP_WIDTH, BORDER_WIDTH, BOTTOM, BOX_SIZING, BREAK_AFTER, @@ -51,21 +51,22 @@ 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, LIBCSS_FLOAT, FONT, - FONT_FAMILY, FONT_SIZE, FONT_STYLE, FONT_VARIANT, FONT_WEIGHT, HEIGHT, - 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, 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, 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, LAST_PROP = Z_INDEX, @@ -98,7 +99,9 @@ enum { LIBCSS_RIGHT, CURRENTCOLOR, ODD, EVEN, SRC, LOCAL, INITIAL, FORMAT, WOFF, TRUETYPE, OPENTYPE, EMBEDDED_OPENTYPE, SVG, COLUMN, AVOID_PAGE, AVOID_COLUMN, BALANCE, HORIZONTAL_TB, VERTICAL_RL, - VERTICAL_LR, CONTENT_BOX, BORDER_BOX, + 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, /* Named colours */ FIRST_COLOUR, @@ -138,4 +141,3 @@ css_error css__propstrings_get(lwc_string ***strings); void css__propstrings_unref(void); #endif - -- cgit v1.2.3 From d637196dce1f95d5294d9fb6fc2a8a3c785684d4 Mon Sep 17 00:00:00 2001 From: Lucas Neves Date: Thu, 28 Sep 2017 15:39:22 +0000 Subject: Selection: Add support for the flexbox properties. --- include/libcss/computed.h | 35 +++++++ src/select/computed.c | 91 ++++++++++++++++- src/select/computed.h | 43 ++++++-- src/select/dispatch.c | 50 +++++++++ src/select/propget.h | 254 ++++++++++++++++++++++++++++++++++++++++++---- src/select/propset.h | 250 ++++++++++++++++++++++++++++++++++++++++++--- 6 files changed, 675 insertions(+), 48 deletions(-) diff --git a/include/libcss/computed.h b/include/libcss/computed.h index e15d0b0..af40abf 100644 --- a/include/libcss/computed.h +++ b/include/libcss/computed.h @@ -439,6 +439,41 @@ uint8_t css_computed_widows( const css_computed_style *style, int32_t *widows); +uint8_t css_computed_align_content( + const css_computed_style *style); + +uint8_t css_computed_align_items( + const css_computed_style *style); + +uint8_t css_computed_align_self( + const css_computed_style *style); + +uint8_t css_computed_flex_basis( + const css_computed_style *style, + css_fixed *length, + css_unit *unit); + +uint8_t css_computed_flex_direction( + const css_computed_style *style); + +uint8_t css_computed_flex_grow( + const css_computed_style *style, + css_fixed *number); + +uint8_t css_computed_flex_shrink( + const css_computed_style *style, + css_fixed *number); + +uint8_t css_computed_flex_wrap( + const css_computed_style *style); + +uint8_t css_computed_justify_content( + const css_computed_style *style); + +uint8_t css_computed_order( + const css_computed_style *style, + int32_t *order); + #ifdef __cplusplus } #endif diff --git a/src/select/computed.c b/src/select/computed.c index 03e7c15..ebb2b29 100644 --- a/src/select/computed.c +++ b/src/select/computed.c @@ -749,13 +749,39 @@ uint8_t css_computed_font_style(const css_computed_style *style) uint8_t css_computed_min_height(const css_computed_style *style, css_fixed *length, css_unit *unit) { - return get_min_height(style, length, unit); + uint8_t min_height = get_min_height(style, length, unit); + + if (min_height == CSS_MIN_HEIGHT_AUTO) { + uint8_t display = get_display(style); + + if (display != CSS_DISPLAY_FLEX && + display != CSS_DISPLAY_INLINE_FLEX) { + min_height = CSS_MIN_HEIGHT_SET; + *length = 0; + *unit = CSS_UNIT_PX; + } + } + + return min_height; } uint8_t css_computed_min_width(const css_computed_style *style, css_fixed *length, css_unit *unit) { - return get_min_width(style, length, unit); + uint8_t min_width = get_min_width(style, length, unit); + + if (min_width == CSS_MIN_WIDTH_AUTO) { + uint8_t display = get_display(style); + + if (display != CSS_DISPLAY_FLEX && + display != CSS_DISPLAY_INLINE_FLEX) { + min_width = CSS_MIN_WIDTH_SET; + *length = 0; + *unit = CSS_UNIT_PX; + } + } + + return min_width; } uint8_t css_computed_background_repeat(const css_computed_style *style) @@ -927,6 +953,8 @@ uint8_t css_computed_display(const css_computed_style *style, root /* 4. */) { if (display == CSS_DISPLAY_INLINE_TABLE) { return CSS_DISPLAY_TABLE; + } else if (display == CSS_DISPLAY_INLINE_FLEX) { + return CSS_DISPLAY_FLEX; } else if (display == CSS_DISPLAY_INLINE || display == CSS_DISPLAY_RUN_IN || display == CSS_DISPLAY_TABLE_ROW_GROUP || @@ -1054,6 +1082,59 @@ uint8_t css_computed_widows(const css_computed_style *style, return get_widows(style, widows); } +uint8_t css_computed_align_content(const css_computed_style *style) +{ + return get_align_content(style); +} + +uint8_t css_computed_align_items(const css_computed_style *style) +{ + return get_align_items(style); +} + +uint8_t css_computed_align_self(const css_computed_style *style) +{ + return get_align_self(style); +} + +uint8_t css_computed_flex_basis(const css_computed_style *style, + css_fixed *length, css_unit *unit) +{ + return get_flex_basis(style, length, unit); +} + +uint8_t css_computed_flex_direction(const css_computed_style *style) +{ + return get_flex_direction(style); +} + +uint8_t css_computed_flex_grow(const css_computed_style *style, + css_fixed *number) +{ + return get_flex_grow(style, number); +} + +uint8_t css_computed_flex_shrink(const css_computed_style *style, + css_fixed *number) +{ + return get_flex_shrink(style, number); +} + +uint8_t css_computed_flex_wrap(const css_computed_style *style) +{ + return get_flex_wrap(style); +} + +uint8_t css_computed_justify_content(const css_computed_style *style) +{ + return get_justify_content(style); +} + +uint8_t css_computed_order(const css_computed_style *style, + int32_t *order) +{ + return get_order(style, order); +} /****************************************************************************** * Library internals * @@ -1205,6 +1286,12 @@ css_error css__compute_absolute_values(const css_computed_style *parent, if (error != CSS_OK) return error; + /* Fix up flex-basis */ + error = compute_absolute_length(style, &ex_size.data.length, + get_flex_basis, set_flex_basis); + if (error != CSS_OK) + return error; + /* Uncommon properties */ if (style->i.uncommon != NULL) { /* Fix up border-spacing */ diff --git a/src/select/computed.h b/src/select/computed.h index 9f2abdd..a8934b1 100644 --- a/src/select/computed.h +++ b/src/select/computed.h @@ -160,8 +160,14 @@ struct css_computed_style_i { * visibility 2 * white_space 3 * box_sizing 2 + * align_content 3 + * align_items 3 + * align_self 3 + * flex_direction 3 + * flex_wrap 2 + * justify_content 3 * --- - * 86 bits + * 103 bits * * Colours are 32bits of AARRGGBB * Dimensions are encoded as a fixed point value + 4 bits of unit data @@ -192,8 +198,8 @@ struct css_computed_style_i { * margin_left 2 + 4 4 * max_height 2 + 4 4 * max_width 2 + 4 4 - * min_height 1 + 4 4 - * min_width 1 + 4 4 + * min_height 2 + 4 4 + * min_width 2 + 4 4 * padding_top 1 + 4 4 * padding_right 1 + 4 4 * padding_bottom 1 + 4 4 @@ -202,8 +208,12 @@ struct css_computed_style_i { * vertical_align 4 + 4 4 * width 2 + 4 4 * z_index 2 4 + * flex_basis 2 + 4 4 + * flex_grow 1 4 + * flex_shrink 1 4 + * order 1 4 * --- --- - * 181 bits 140 + 2sizeof(ptr) bytes + * 196 bits 156 + 2sizeof(ptr) bytes * * Encode font family as an array of string objects, terminated with a * blank entry. @@ -219,11 +229,11 @@ struct css_computed_style_i { * 1 bit sizeof(ptr) bytes * * ___ ___ - * 269 bits 140 + 4sizeof(ptr) bytes + * 303 bits 156 + 4sizeof(ptr) bytes * - * 34 bytes 140 + 4sizeof(ptr) bytes + * 38 bytes 156 + 4sizeof(ptr) bytes * =================== - * 174 + 4sizeof(ptr) bytes + * 194 + 4sizeof(ptr) bytes * * Bit allocations: * @@ -247,8 +257,8 @@ struct css_computed_style_i { * 17 mmmmmmee max-height | empty-cells * 18 mmmmmmff max-width | float * 19 wwwwwwff width | font-style - * 20 mmmmmbbb min-height | background-repeat - * 21 mmmmmccc min-width | clear + * 20 mmmmmmff min-height | flex-wrap + * 21 mmmmmmsg min-width | flex-shrink | flex_grow * 22 tttttxxx padding-top | overflow-x * 23 rrrrrppp padding-right | position * 24 bbbbboss padding-bottom | opacity | box-sizing @@ -262,9 +272,12 @@ struct css_computed_style_i { * 32 ffffllll font-weight | list-style-type * 33 oooottuu outline-style | table-layout | unicode-bidi * 34 vvlltttt visibility | list-style-position | text-align - * 35 yyy..... overflow-y | + * 35 yyybbbaa overflow-y | background-repeat | align-content1 + * 36 bbbbbbaj flex-basis | align-content2 | justify_content1 + * 37 fffcccjj flex-direction | clear | justify_content2 + * 38 iiissso. align-items | align-self | order */ - uint8_t bits[35]; + uint8_t bits[38]; uint8_t unused[1]; @@ -310,6 +323,14 @@ struct css_computed_style_i { int32_t z_index; + css_fixed flex_basis; + + css_fixed flex_grow; + + css_fixed flex_shrink; + + int32_t order; + css_computed_uncommon *uncommon;/**< Uncommon properties */ void *aural; /**< Aural properties */ }; diff --git a/src/select/dispatch.c b/src/select/dispatch.c index 7af9000..3ab4c96 100644 --- a/src/select/dispatch.c +++ b/src/select/dispatch.c @@ -587,5 +587,55 @@ struct prop_table prop_dispatch[CSS_N_PROPERTIES] = { PROPERTY_FUNCS(box_sizing), 0, GROUP_NORMAL + }, + { + PROPERTY_FUNCS(align_content), + 0, + GROUP_NORMAL + }, + { + PROPERTY_FUNCS(align_items), + 0, + GROUP_NORMAL + }, + { + PROPERTY_FUNCS(align_self), + 0, + GROUP_NORMAL + }, + { + PROPERTY_FUNCS(flex_basis), + 0, + GROUP_NORMAL + }, + { + PROPERTY_FUNCS(flex_direction), + 0, + GROUP_NORMAL + }, + { + PROPERTY_FUNCS(flex_grow), + 0, + GROUP_NORMAL + }, + { + PROPERTY_FUNCS(flex_shrink), + 0, + GROUP_NORMAL + }, + { + PROPERTY_FUNCS(flex_wrap), + 0, + GROUP_NORMAL + }, + { + PROPERTY_FUNCS(justify_content), + 0, + GROUP_NORMAL + }, + { + PROPERTY_FUNCS(order), + 0, + GROUP_NORMAL } }; diff --git a/src/select/propget.h b/src/select/propget.h index 6719443..737dcd4 100644 --- a/src/select/propget.h +++ b/src/select/propget.h @@ -1268,7 +1268,7 @@ static inline uint8_t get_background_attachment( #undef BACKGROUND_ATTACHMENT_SHIFT #undef BACKGROUND_ATTACHMENT_INDEX -#define BOX_SIZING_INDEX 34 +#define BOX_SIZING_INDEX 23 #define BOX_SIZING_SHIFT 0 #define BOX_SIZING_MASK 0x3 static inline uint8_t get_box_sizing( @@ -1457,8 +1457,8 @@ static inline uint8_t get_font_style( #undef FONT_STYLE_INDEX #define MIN_HEIGHT_INDEX 19 -#define MIN_HEIGHT_SHIFT 3 -#define MIN_HEIGHT_MASK 0xf8 +#define MIN_HEIGHT_SHIFT 2 +#define MIN_HEIGHT_MASK 0xfc static inline uint8_t get_min_height( const css_computed_style *style, css_fixed *length, css_unit *unit) @@ -1467,21 +1467,21 @@ static inline uint8_t get_min_height( bits &= MIN_HEIGHT_MASK; bits >>= MIN_HEIGHT_SHIFT; - /* 5bits: uuuut : units | type */ - if ((bits & 0x1) == CSS_MIN_HEIGHT_SET) { + /* 6bits: uuuutt : units | type */ + if ((bits & 0x3) == CSS_MIN_HEIGHT_SET) { *length = style->i.min_height; - *unit = bits >> 1; + *unit = bits >> 2; } - return (bits & 0x1); + return (bits & 0x3); } #undef MIN_HEIGHT_MASK #undef MIN_HEIGHT_SHIFT #undef MIN_HEIGHT_INDEX #define MIN_WIDTH_INDEX 20 -#define MIN_WIDTH_SHIFT 3 -#define MIN_WIDTH_MASK 0xf8 +#define MIN_WIDTH_SHIFT 2 +#define MIN_WIDTH_MASK 0xfc static inline uint8_t get_min_width( const css_computed_style *style, css_fixed *length, css_unit *unit) @@ -1490,21 +1490,21 @@ static inline uint8_t get_min_width( bits &= MIN_WIDTH_MASK; bits >>= MIN_WIDTH_SHIFT; - /* 5bits: uuuut : units | type */ - if ((bits & 0x1) == CSS_MIN_WIDTH_SET) { + /* 6bits: uuuutt : units | type */ + if ((bits & 0x3) == CSS_MIN_WIDTH_SET) { *length = style->i.min_width; - *unit = bits >> 1; + *unit = bits >> 2; } - return (bits & 0x1); + return (bits & 0x3); } #undef MIN_WIDTH_MASK #undef MIN_WIDTH_SHIFT #undef MIN_WIDTH_INDEX -#define BACKGROUND_REPEAT_INDEX 19 -#define BACKGROUND_REPEAT_SHIFT 0 -#define BACKGROUND_REPEAT_MASK 0x7 +#define BACKGROUND_REPEAT_INDEX 34 +#define BACKGROUND_REPEAT_SHIFT 2 +#define BACKGROUND_REPEAT_MASK 0x1c static inline uint8_t get_background_repeat( const css_computed_style *style) { @@ -1519,9 +1519,9 @@ static inline uint8_t get_background_repeat( #undef BACKGROUND_REPEAT_SHIFT #undef BACKGROUND_REPEAT_INDEX -#define CLEAR_INDEX 20 -#define CLEAR_SHIFT 0 -#define CLEAR_MASK 0x7 +#define CLEAR_INDEX 36 +#define CLEAR_SHIFT 2 +#define CLEAR_MASK 0x1c static inline uint8_t get_clear( const css_computed_style *style) { @@ -2189,4 +2189,220 @@ static inline uint8_t get_widows( #undef WIDOWS_SHIFT #undef WIDOWS_INDEX +#define ALIGN_CONTENT_INDEX_A 34 +#define ALIGN_CONTENT_SHIFT_A 0 +#define ALIGN_CONTENT_MASK_A 0x3 +#define ALIGN_CONTENT_INDEX_B 35 +#define ALIGN_CONTENT_SHIFT_B 1 +#define ALIGN_CONTENT_MASK_B 0x2 +static inline uint8_t get_align_content( + const css_computed_style *style) +{ + uint8_t bits_a = style->i.bits[ALIGN_CONTENT_INDEX_A]; + bits_a &= ALIGN_CONTENT_MASK_A; + bits_a >>= ALIGN_CONTENT_SHIFT_A; + + uint8_t bits_b = style->i.bits[ALIGN_CONTENT_INDEX_B]; + bits_b &= ALIGN_CONTENT_MASK_B; + bits_b >>= ALIGN_CONTENT_SHIFT_B; + /* Most significant bit out of three */ + bits_b <<= 2; + + uint8_t bits = bits_a | bits_b; + + /* 3bits: type */ + return bits; +} +#undef ALIGN_CONTENT_MASK_A +#undef ALIGN_CONTENT_SHIFT_A +#undef ALIGN_CONTENT_INDEX_A +#undef ALIGN_CONTENT_MASK_B +#undef ALIGN_CONTENT_SHIFT_B +#undef ALIGN_CONTENT_INDEX_B + +#define FLEX_WRAP_INDEX 19 +#define FLEX_WRAP_SHIFT 0 +#define FLEX_WRAP_MASK 0x3 +static inline uint8_t get_flex_wrap( + const css_computed_style *style) +{ + uint8_t bits = style->i.bits[FLEX_WRAP_INDEX]; + bits &= FLEX_WRAP_MASK; + bits >>= FLEX_WRAP_SHIFT; + + /* 2bits: type */ + return bits; +} +#undef FLEX_WRAP_MASK +#undef FLEX_WRAP_SHIFT +#undef FLEX_WRAP_INDEX + +#define FLEX_BASIS_INDEX 35 +#define FLEX_BASIS_SHIFT 2 +#define FLEX_BASIS_MASK 0xfc +static inline uint8_t get_flex_basis( + const css_computed_style *style, + css_fixed *length, css_unit *unit) +{ + uint8_t bits = style->i.bits[FLEX_BASIS_INDEX]; + bits &= FLEX_BASIS_MASK; + bits >>= FLEX_BASIS_SHIFT; + + /* 6bits: uuuutt : units | type */ + if ((bits & 0x3) == CSS_FLEX_BASIS_SET) { + *length = style->i.flex_basis; + *unit = bits >> 2; + } + + return (bits & 0x3); +} +#undef FLEX_BASIS_MASK +#undef FLEX_BASIS_SHIFT +#undef FLEX_BASIS_INDEX + +#define FLEX_SHRINK_INDEX 20 +#define FLEX_SHRINK_SHIFT 1 +#define FLEX_SHRINK_MASK 0x2 +static inline uint8_t get_flex_shrink( + const css_computed_style *style, css_fixed *number) +{ + uint8_t bits = style->i.bits[FLEX_SHRINK_INDEX]; + bits &= FLEX_SHRINK_MASK; + bits >>= FLEX_SHRINK_SHIFT; + + /* 1bit: type */ + if ((bits & 0x1) == CSS_FLEX_SHRINK_SET) { + *number = style->i.flex_shrink; + } + + return (bits & 0x1); +} +#undef FLEX_SHRINK_MASK +#undef FLEX_SHRINK_SHIFT +#undef FLEX_SHRINK_INDEX + +#define FLEX_GROW_INDEX 20 +#define FLEX_GROW_SHIFT 0 +#define FLEX_GROW_MASK 0x1 +static inline uint8_t get_flex_grow( + const css_computed_style *style, css_fixed *number) +{ + uint8_t bits = style->i.bits[FLEX_GROW_INDEX]; + bits &= FLEX_GROW_MASK; + bits >>= FLEX_GROW_SHIFT; + + /* 1bit: type */ + if ((bits & 0x1) == CSS_FLEX_GROW_SET) { + *number = style->i.flex_grow; + } + + return (bits & 0x1); +} +#undef FLEX_GROW_MASK +#undef FLEX_GROW_SHIFT +#undef FLEX_GROW_INDEX + +#define FLEX_DIRECTION_INDEX 36 +#define FLEX_DIRECTION_SHIFT 5 +#define FLEX_DIRECTION_MASK 0xe0 +static inline uint8_t get_flex_direction( + const css_computed_style *style) +{ + uint8_t bits = style->i.bits[FLEX_DIRECTION_INDEX]; + bits &= FLEX_DIRECTION_MASK; + bits >>= FLEX_DIRECTION_SHIFT; + + /* 3bits: type */ + return bits; +} +#undef FLEX_DIRECTION_MASK +#undef FLEX_DIRECTION_SHIFT +#undef FLEX_DIRECTION_INDEX + +#define JUSTIFY_CONTENT_INDEX_A 35 +#define JUSTIFY_CONTENT_SHIFT_A 0 +#define JUSTIFY_CONTENT_MASK_A 0x1 +#define JUSTIFY_CONTENT_INDEX_B 36 +#define JUSTIFY_CONTENT_SHIFT_B 0 +#define JUSTIFY_CONTENT_MASK_B 0x3 +static inline uint8_t get_justify_content( + const css_computed_style *style) +{ + uint8_t bits_a = style->i.bits[JUSTIFY_CONTENT_INDEX_A]; + bits_a &= JUSTIFY_CONTENT_MASK_A; + bits_a >>= JUSTIFY_CONTENT_SHIFT_A; + + uint8_t bits_b = style->i.bits[JUSTIFY_CONTENT_INDEX_B]; + bits_b &= JUSTIFY_CONTENT_MASK_B; + bits_b >>= JUSTIFY_CONTENT_SHIFT_B; + /* Most significant two bits out of three */ + bits_b <<= 1; + + uint8_t bits = bits_a | bits_b; + + /* 3bits: type */ + return bits; +} +#undef JUSTIFY_CONTENT_MASK_A +#undef JUSTIFY_CONTENT_SHIFT_A +#undef JUSTIFY_CONTENT_INDEX_A +#undef JUSTIFY_CONTENT_MASK_B +#undef JUSTIFY_CONTENT_SHIFT_B +#undef JUSTIFY_CONTENT_INDEX_B + +#define ORDER_INDEX 37 +#define ORDER_SHIFT 1 +#define ORDER_MASK 0x2 +static inline uint8_t get_order( + const css_computed_style *style, int32_t *number) +{ + uint8_t bits = style->i.bits[ORDER_INDEX]; + bits &= ORDER_MASK; + bits >>= ORDER_SHIFT; + + /* 1bit: type */ + if ((bits & 0x1) == CSS_ORDER_SET) { + *number = style->i.order; + } + + return (bits & 0x1); +} +#undef ORDER_MASK +#undef ORDER_SHIFT +#undef ORDER_INDEX + +#define ALIGN_ITEMS_INDEX 37 +#define ALIGN_ITEMS_SHIFT 5 +#define ALIGN_ITEMS_MASK 0xe0 +static inline uint8_t get_align_items( + const css_computed_style *style) +{ + uint8_t bits = style->i.bits[ALIGN_ITEMS_INDEX]; + bits &= ALIGN_ITEMS_MASK; + bits >>= ALIGN_ITEMS_SHIFT; + + /* 3bits: type */ + return bits; +} +#undef ALIGN_ITEMS_MASK +#undef ALIGN_ITEMS_SHIFT +#undef ALIGN_ITEMS_INDEX + +#define ALIGN_SELF_INDEX 37 +#define ALIGN_SELF_SHIFT 2 +#define ALIGN_SELF_MASK 0x1c +static inline uint8_t get_align_self( + const css_computed_style *style) +{ + uint8_t bits = style->i.bits[ALIGN_SELF_INDEX]; + bits &= ALIGN_SELF_MASK; + bits >>= ALIGN_SELF_SHIFT; + + /* 3bits: type */ + return bits; +} +#undef ALIGN_SELF_MASK +#undef ALIGN_SELF_SHIFT +#undef ALIGN_SELF_INDEX + #endif diff --git a/src/select/propset.h b/src/select/propset.h index 3f4038c..ea7ca48 100644 --- a/src/select/propset.h +++ b/src/select/propset.h @@ -908,7 +908,7 @@ static inline css_error set_background_image( ((type & 0x1) << BACKGROUND_IMAGE_SHIFT); if (url != NULL) { - style->i.background_image = lwc_string_ref(url); + style->i.background_image = lwc_string_ref(url); } else { style->i.background_image = NULL; } @@ -1361,7 +1361,7 @@ static inline css_error set_background_attachment( #undef BACKGROUND_ATTACHMENT_SHIFT #undef BACKGROUND_ATTACHMENT_INDEX -#define BOX_SIZING_INDEX 34 +#define BOX_SIZING_INDEX 23 #define BOX_SIZING_SHIFT 0 #define BOX_SIZING_MASK 0x3 static inline css_error set_box_sizing( @@ -1551,17 +1551,17 @@ static inline css_error set_font_style( #undef FONT_STYLE_INDEX #define MIN_HEIGHT_INDEX 19 -#define MIN_HEIGHT_SHIFT 3 -#define MIN_HEIGHT_MASK 0xf8 +#define MIN_HEIGHT_SHIFT 2 +#define MIN_HEIGHT_MASK 0xfc static inline css_error set_min_height( css_computed_style *style, uint8_t type, css_fixed length, css_unit unit) { uint8_t *bits = &style->i.bits[MIN_HEIGHT_INDEX]; - /* 5bits: uuuut : units | type */ + /* 6bits: uuuutt : units | type */ *bits = (*bits & ~MIN_HEIGHT_MASK) | - (((type & 0x1) | (unit << 1)) << MIN_HEIGHT_SHIFT); + (((type & 0x3) | (unit << 2)) << MIN_HEIGHT_SHIFT); style->i.min_height = length; @@ -1572,17 +1572,17 @@ static inline css_error set_min_height( #undef MIN_HEIGHT_INDEX #define MIN_WIDTH_INDEX 20 -#define MIN_WIDTH_SHIFT 3 -#define MIN_WIDTH_MASK 0xf8 +#define MIN_WIDTH_SHIFT 2 +#define MIN_WIDTH_MASK 0xfc static inline css_error set_min_width( css_computed_style *style, uint8_t type, css_fixed length, css_unit unit) { uint8_t *bits = &style->i.bits[MIN_WIDTH_INDEX]; - /* 5bits: uuuut : units | type */ + /* 6bits: uuuutt : units | type */ *bits = (*bits & ~MIN_WIDTH_MASK) | - (((type & 0x1) | (unit << 1)) << MIN_WIDTH_SHIFT); + (((type & 0x3) | (unit << 2)) << MIN_WIDTH_SHIFT); style->i.min_width = length; @@ -1592,9 +1592,9 @@ static inline css_error set_min_width( #undef MIN_WIDTH_SHIFT #undef MIN_WIDTH_INDEX -#define BACKGROUND_REPEAT_INDEX 19 -#define BACKGROUND_REPEAT_SHIFT 0 -#define BACKGROUND_REPEAT_MASK 0x7 +#define BACKGROUND_REPEAT_INDEX 34 +#define BACKGROUND_REPEAT_SHIFT 2 +#define BACKGROUND_REPEAT_MASK 0x1c static inline css_error set_background_repeat( css_computed_style *style, uint8_t type) { @@ -1610,9 +1610,9 @@ static inline css_error set_background_repeat( #undef BACKGROUND_REPEAT_SHIFT #undef BACKGROUND_REPEAT_INDEX -#define CLEAR_INDEX 20 -#define CLEAR_SHIFT 0 -#define CLEAR_MASK 0x7 +#define CLEAR_INDEX 36 +#define CLEAR_SHIFT 2 +#define CLEAR_MASK 0x1c static inline css_error set_clear( css_computed_style *style, uint8_t type) { @@ -2325,4 +2325,222 @@ static inline css_error set_widows( #undef WIDOWS_SHIFT #undef WIDOWS_MASK +#define ALIGN_CONTENT_INDEX_A 34 +#define ALIGN_CONTENT_SHIFT_A 0 +#define ALIGN_CONTENT_MASK_A 0x3 +#define ALIGN_CONTENT_INDEX_B 35 +#define ALIGN_CONTENT_SHIFT_B 1 +#define ALIGN_CONTENT_MASK_B 0x2 +static inline css_error set_align_content( + css_computed_style *style, uint8_t type) +{ + uint8_t *bits_a = &style->i.bits[ALIGN_CONTENT_INDEX_A]; + uint8_t *bits_b = &style->i.bits[ALIGN_CONTENT_INDEX_B]; + + /* type is 3bits: assigning the least significant two */ + *bits_a = (*bits_a & ~ALIGN_CONTENT_MASK_A) | + ((type & 0x3) << ALIGN_CONTENT_SHIFT_A); + + /* type is 3bits: assigning the most significant one */ + *bits_b = (*bits_b & ~ALIGN_CONTENT_MASK_B) | + (((type & 0x4) >> 2) << ALIGN_CONTENT_SHIFT_B); + + return CSS_OK; +} +#undef ALIGN_CONTENT_MASK_A +#undef ALIGN_CONTENT_SHIFT_A +#undef ALIGN_CONTENT_INDEX_A +#undef ALIGN_CONTENT_MASK_B +#undef ALIGN_CONTENT_SHIFT_B +#undef ALIGN_CONTENT_INDEX_B + +#define FLEX_WRAP_INDEX 19 +#define FLEX_WRAP_SHIFT 0 +#define FLEX_WRAP_MASK 0x3 +static inline css_error set_flex_wrap( + css_computed_style *style, uint8_t type) +{ + uint8_t *bits = &style->i.bits[FLEX_WRAP_INDEX]; + + /* 2bits: type */ + *bits = (*bits & ~FLEX_WRAP_MASK) | + ((type & 0x3) << FLEX_WRAP_SHIFT); + + return CSS_OK; +} +#undef FLEX_WRAP_MASK +#undef FLEX_WRAP_SHIFT +#undef FLEX_WRAP_INDEX + +#define FLEX_BASIS_INDEX 35 +#define FLEX_BASIS_SHIFT 2 +#define FLEX_BASIS_MASK 0xfc +static inline css_error set_flex_basis( + css_computed_style *style, uint8_t type, + css_fixed length, css_unit unit) +{ + uint8_t *bits = &style->i.bits[FLEX_BASIS_INDEX]; + + /* 6bits: uuuutt : units | type */ + *bits = (*bits & ~FLEX_BASIS_MASK) | + (((type & 0x3) | (unit << 2)) << FLEX_BASIS_SHIFT); + + style->i.flex_basis = length; + + return CSS_OK; +} + +#undef FLEX_BASIS_MASK +#undef FLEX_BASIS_SHIFT +#undef FLEX_BASIS_INDEX + +#define FLEX_SHRINK_INDEX 20 +#define FLEX_SHRINK_SHIFT 1 +#define FLEX_SHRINK_MASK 0x2 +static inline css_error set_flex_shrink( + css_computed_style *style, uint8_t type, + css_fixed number) +{ + uint8_t *bits = &style->i.bits[FLEX_SHRINK_INDEX]; + + /* 1bit: type */ + *bits = (*bits & ~FLEX_SHRINK_MASK) | + ((type & 0x1) << FLEX_SHRINK_SHIFT); + + style->i.flex_shrink = number; + + return CSS_OK; +} + +#undef FLEX_SHRINK_MASK +#undef FLEX_SHRINK_SHIFT +#undef FLEX_SHRINK_INDEX + +#define FLEX_GROW_INDEX 20 +#define FLEX_GROW_SHIFT 0 +#define FLEX_GROW_MASK 0x1 +static inline css_error set_flex_grow( + css_computed_style *style, uint8_t type, + css_fixed number) +{ + uint8_t *bits = &style->i.bits[FLEX_GROW_INDEX]; + + /* 1bit: type */ + *bits = (*bits & ~FLEX_GROW_MASK) | + ((type & 0x1) << FLEX_GROW_SHIFT); + + style->i.flex_grow = number; + + return CSS_OK; +} + +#undef FLEX_GROW_MASK +#undef FLEX_GROW_SHIFT +#undef FLEX_GROW_INDEX + +#define FLEX_DIRECTION_INDEX 36 +#define FLEX_DIRECTION_SHIFT 5 +#define FLEX_DIRECTION_MASK 0xe0 +static inline css_error set_flex_direction( + css_computed_style *style, uint8_t type) +{ + uint8_t *bits = &style->i.bits[FLEX_DIRECTION_INDEX]; + + /* 3bits: type */ + *bits = (*bits & ~FLEX_DIRECTION_MASK) | + ((type & 0x7) << FLEX_DIRECTION_SHIFT); + + return CSS_OK; +} +#undef FLEX_DIRECTION_MASK +#undef FLEX_DIRECTION_SHIFT +#undef FLEX_DIRECTION_INDEX + +#define JUSTIFY_CONTENT_INDEX_A 35 +#define JUSTIFY_CONTENT_SHIFT_A 0 +#define JUSTIFY_CONTENT_MASK_A 0x1 +#define JUSTIFY_CONTENT_INDEX_B 36 +#define JUSTIFY_CONTENT_SHIFT_B 0 +#define JUSTIFY_CONTENT_MASK_B 0x3 +static inline css_error set_justify_content( + css_computed_style *style, uint8_t type) +{ + uint8_t *bits_a = &style->i.bits[JUSTIFY_CONTENT_INDEX_A]; + uint8_t *bits_b = &style->i.bits[JUSTIFY_CONTENT_INDEX_B]; + + /* type is 3bits: assigning the least significant one */ + *bits_a = (*bits_a & ~JUSTIFY_CONTENT_MASK_A) | + ((type & 0x1) << JUSTIFY_CONTENT_SHIFT_A); + + /* type is 3bits: assigning the most significant two */ + *bits_b = (*bits_b & ~JUSTIFY_CONTENT_MASK_B) | + (((type & 0x6) >> 1) << JUSTIFY_CONTENT_SHIFT_B); + + return CSS_OK; +} +#undef JUSTIFY_CONTENT_MASK_A +#undef JUSTIFY_CONTENT_SHIFT_A +#undef JUSTIFY_CONTENT_INDEX_A +#undef JUSTIFY_CONTENT_MASK_B +#undef JUSTIFY_CONTENT_SHIFT_B +#undef JUSTIFY_CONTENT_INDEX_B + +#define ORDER_INDEX 37 +#define ORDER_SHIFT 1 +#define ORDER_MASK 0x2 +static inline css_error set_order( + css_computed_style *style, uint8_t type, + int32_t number) +{ + uint8_t *bits = &style->i.bits[ORDER_INDEX]; + + /* 1bit: type */ + *bits = (*bits & ~ORDER_MASK) | + ((type & 0x1) << ORDER_SHIFT); + + style->i.order = number; + + return CSS_OK; +} + +#undef ORDER_MASK +#undef ORDER_SHIFT +#undef ORDER_INDEX + +#define ALIGN_ITEMS_INDEX 37 +#define ALIGN_ITEMS_SHIFT 5 +#define ALIGN_ITEMS_MASK 0xe0 +static inline css_error set_align_items( + css_computed_style *style, uint8_t type) +{ + uint8_t *bits = &style->i.bits[ALIGN_ITEMS_INDEX]; + + /* 3bits: type */ + *bits = (*bits & ~ALIGN_ITEMS_MASK) | + ((type & 0x7) << ALIGN_ITEMS_SHIFT); + + return CSS_OK; +} +#undef ALIGN_ITEMS_MASK +#undef ALIGN_ITEMS_SHIFT +#undef ALIGN_ITEMS_INDEX + +#define ALIGN_SELF_INDEX 37 +#define ALIGN_SELF_SHIFT 2 +#define ALIGN_SELF_MASK 0x1c +static inline css_error set_align_self( + css_computed_style *style, uint8_t type) +{ + uint8_t *bits = &style->i.bits[ALIGN_SELF_INDEX]; + + /* 3bits: type */ + *bits = (*bits & ~ALIGN_SELF_MASK) | + ((type & 0x7) << ALIGN_SELF_SHIFT); + + return CSS_OK; +} +#undef ALIGN_SELF_MASK +#undef ALIGN_SELF_SHIFT +#undef ALIGN_SELF_INDEX + #endif -- cgit v1.2.3 From 12fd8aea8f990d30a2475ae886fc7aa98c77525b Mon Sep 17 00:00:00 2001 From: Lucas Neves Date: Thu, 28 Sep 2017 15:46:31 +0000 Subject: Selection: Logic for the flexbox properties. --- src/parse/properties/flex_flow.c | 2 +- src/select/properties/Makefile | 10 ++++ src/select/properties/align_content.c | 81 +++++++++++++++++++++++++++++++++ src/select/properties/align_items.c | 75 ++++++++++++++++++++++++++++++ src/select/properties/align_self.c | 78 +++++++++++++++++++++++++++++++ src/select/properties/display.c | 6 +++ src/select/properties/flex_basis.c | 79 ++++++++++++++++++++++++++++++++ src/select/properties/flex_direction.c | 72 +++++++++++++++++++++++++++++ src/select/properties/flex_grow.c | 62 +++++++++++++++++++++++++ src/select/properties/flex_shrink.c | 62 +++++++++++++++++++++++++ src/select/properties/flex_wrap.c | 69 ++++++++++++++++++++++++++++ src/select/properties/justify_content.c | 79 ++++++++++++++++++++++++++++++++ src/select/properties/min_height.c | 4 +- src/select/properties/min_width.c | 5 +- src/select/properties/order.c | 62 +++++++++++++++++++++++++ src/select/properties/properties.h | 10 ++++ 16 files changed, 751 insertions(+), 5 deletions(-) create mode 100644 src/select/properties/align_content.c create mode 100644 src/select/properties/align_items.c create mode 100644 src/select/properties/align_self.c create mode 100644 src/select/properties/flex_basis.c create mode 100644 src/select/properties/flex_direction.c create mode 100644 src/select/properties/flex_grow.c create mode 100644 src/select/properties/flex_shrink.c create mode 100644 src/select/properties/flex_wrap.c create mode 100644 src/select/properties/justify_content.c create mode 100644 src/select/properties/order.c diff --git a/src/parse/properties/flex_flow.c b/src/parse/properties/flex_flow.c index 40a42d9..6a83e15 100644 --- a/src/parse/properties/flex_flow.c +++ b/src/parse/properties/flex_flow.c @@ -1,4 +1,4 @@ -* +/* * This file is part of LibCSS. * Licensed under the MIT License, * http://www.opensource.org/licenses/mit-license.php diff --git a/src/select/properties/Makefile b/src/select/properties/Makefile index 288eda9..6c6cf84 100644 --- a/src/select/properties/Makefile +++ b/src/select/properties/Makefile @@ -1,5 +1,8 @@ # Sources DIR_SOURCES := helpers.c \ +align_content.c \ +align_items.c \ +align_self.c \ azimuth.c \ background_attachment.c \ background_color.c \ @@ -47,6 +50,11 @@ direction.c \ display.c \ elevation.c \ empty_cells.c \ +flex_basis.c \ +flex_direction.c \ +flex_grow.c \ +flex_shrink.c \ +flex_wrap.c \ float.c \ font_family.c \ font_size.c \ @@ -54,6 +62,7 @@ font_style.c \ font_variant.c \ font_weight.c \ height.c \ +justify_content.c \ left.c \ letter_spacing.c \ line_height.c \ @@ -69,6 +78,7 @@ max_width.c \ min_height.c \ min_width.c \ opacity.c \ +order.c \ orphans.c \ outline_color.c \ outline_style.c \ diff --git a/src/select/properties/align_content.c b/src/select/properties/align_content.c new file mode 100644 index 0000000..f43cd8e --- /dev/null +++ b/src/select/properties/align_content.c @@ -0,0 +1,81 @@ +/* + * This file is part of LibCSS + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2017 Lucas Neves + */ + +#include "bytecode/bytecode.h" +#include "bytecode/opcodes.h" +#include "select/propset.h" +#include "select/propget.h" +#include "utils/utils.h" + +#include "select/properties/properties.h" +#include "select/properties/helpers.h" + +css_error css__cascade_align_content(uint32_t opv, css_style *style, + css_select_state *state) +{ + uint16_t value = CSS_ALIGN_CONTENT_INHERIT; + + UNUSED(style); + + if (isInherit(opv) == false) { + switch (getValue(opv)) { + case ALIGN_CONTENT_STRETCH: + value = CSS_ALIGN_CONTENT_STRETCH; + break; + case ALIGN_CONTENT_FLEX_START: + value = CSS_ALIGN_CONTENT_FLEX_START; + break; + case ALIGN_CONTENT_FLEX_END: + value = CSS_ALIGN_CONTENT_FLEX_END; + break; + case ALIGN_CONTENT_CENTER: + value = CSS_ALIGN_CONTENT_CENTER; + break; + case ALIGN_CONTENT_SPACE_BETWEEN: + value = CSS_ALIGN_CONTENT_SPACE_BETWEEN; + break; + case ALIGN_CONTENT_SPACE_AROUND: + value = CSS_ALIGN_CONTENT_SPACE_AROUND; + break; + case ALIGN_CONTENT_SPACE_EVENLY: + value = CSS_ALIGN_CONTENT_SPACE_EVENLY; + break; + } + } + + if (css__outranks_existing(getOpcode(opv), isImportant(opv), state, + isInherit(opv))) { + return set_align_content(state->computed, value); + } + + return CSS_OK; +} + +css_error css__set_align_content_from_hint(const css_hint *hint, + css_computed_style *style) +{ + return set_align_content(style, hint->status); +} + +css_error css__initial_align_content(css_select_state *state) +{ + return set_align_content(state->computed, CSS_ALIGN_CONTENT_STRETCH); +} + +css_error css__compose_align_content(const css_computed_style *parent, + const css_computed_style *child, + css_computed_style *result) +{ + uint8_t type = get_align_content(child); + + if (type == CSS_ALIGN_CONTENT_INHERIT) { + type = get_align_content(parent); + } + + return set_align_content(result, type); +} + diff --git a/src/select/properties/align_items.c b/src/select/properties/align_items.c new file mode 100644 index 0000000..ad69c81 --- /dev/null +++ b/src/select/properties/align_items.c @@ -0,0 +1,75 @@ +/* + * This file is part of LibCSS + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2017 Lucas Neves + */ + +#include "bytecode/bytecode.h" +#include "bytecode/opcodes.h" +#include "select/propset.h" +#include "select/propget.h" +#include "utils/utils.h" + +#include "select/properties/properties.h" +#include "select/properties/helpers.h" + +css_error css__cascade_align_items(uint32_t opv, css_style *style, + css_select_state *state) +{ + uint16_t value = CSS_ALIGN_ITEMS_INHERIT; + + UNUSED(style); + + if (isInherit(opv) == false) { + switch (getValue(opv)) { + case ALIGN_ITEMS_STRETCH: + value = CSS_ALIGN_ITEMS_STRETCH; + break; + case ALIGN_ITEMS_FLEX_START: + value = CSS_ALIGN_ITEMS_FLEX_START; + break; + case ALIGN_ITEMS_FLEX_END: + value = CSS_ALIGN_ITEMS_FLEX_END; + break; + case ALIGN_ITEMS_CENTER: + value = CSS_ALIGN_ITEMS_CENTER; + break; + case ALIGN_ITEMS_BASELINE: + value = CSS_ALIGN_ITEMS_BASELINE; + break; + } + } + + if (css__outranks_existing(getOpcode(opv), isImportant(opv), state, + isInherit(opv))) { + return set_align_items(state->computed, value); + } + + return CSS_OK; +} + +css_error css__set_align_items_from_hint(const css_hint *hint, + css_computed_style *style) +{ + return set_align_items(style, hint->status); +} + +css_error css__initial_align_items(css_select_state *state) +{ + return set_align_items(state->computed, CSS_ALIGN_ITEMS_STRETCH); +} + +css_error css__compose_align_items(const css_computed_style *parent, + const css_computed_style *child, + css_computed_style *result) +{ + uint8_t type = get_align_items(child); + + if (type == CSS_ALIGN_ITEMS_INHERIT) { + type = get_align_items(parent); + } + + return set_align_items(result, type); +} + diff --git a/src/select/properties/align_self.c b/src/select/properties/align_self.c new file mode 100644 index 0000000..e8e469e --- /dev/null +++ b/src/select/properties/align_self.c @@ -0,0 +1,78 @@ +/* + * This file is part of LibCSS + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2017 Lucas Neves + */ + +#include "bytecode/bytecode.h" +#include "bytecode/opcodes.h" +#include "select/propset.h" +#include "select/propget.h" +#include "utils/utils.h" + +#include "select/properties/properties.h" +#include "select/properties/helpers.h" + +css_error css__cascade_align_self(uint32_t opv, css_style *style, + css_select_state *state) +{ + uint16_t value = CSS_ALIGN_SELF_INHERIT; + + UNUSED(style); + + if (isInherit(opv) == false) { + switch (getValue(opv)) { + case ALIGN_SELF_STRETCH: + value = CSS_ALIGN_SELF_STRETCH; + break; + case ALIGN_SELF_FLEX_START: + value = CSS_ALIGN_SELF_FLEX_START; + break; + case ALIGN_SELF_FLEX_END: + value = CSS_ALIGN_SELF_FLEX_END; + break; + case ALIGN_SELF_CENTER: + value = CSS_ALIGN_SELF_CENTER; + break; + case ALIGN_SELF_BASELINE: + value = CSS_ALIGN_SELF_BASELINE; + break; + case ALIGN_SELF_AUTO: + value = CSS_ALIGN_SELF_AUTO; + break; + } + } + + if (css__outranks_existing(getOpcode(opv), isImportant(opv), state, + isInherit(opv))) { + return set_align_self(state->computed, value); + } + + return CSS_OK; +} + +css_error css__set_align_self_from_hint(const css_hint *hint, + css_computed_style *style) +{ + return set_align_self(style, hint->status); +} + +css_error css__initial_align_self(css_select_state *state) +{ + return set_align_self(state->computed, CSS_ALIGN_SELF_AUTO); +} + +css_error css__compose_align_self(const css_computed_style *parent, + const css_computed_style *child, + css_computed_style *result) +{ + uint8_t type = get_align_self(child); + + if (type == CSS_ALIGN_SELF_INHERIT) { + type = get_align_self(parent); + } + + return set_align_self(result, type); +} + diff --git a/src/select/properties/display.c b/src/select/properties/display.c index 40c2e3e..510d24a 100644 --- a/src/select/properties/display.c +++ b/src/select/properties/display.c @@ -71,6 +71,12 @@ css_error css__cascade_display(uint32_t opv, css_style *style, case DISPLAY_NONE: value = CSS_DISPLAY_NONE; break; + case DISPLAY_FLEX: + value = CSS_DISPLAY_FLEX; + break; + case DISPLAY_INLINE_FLEX: + value = CSS_DISPLAY_INLINE_FLEX; + break; } } diff --git a/src/select/properties/flex_basis.c b/src/select/properties/flex_basis.c new file mode 100644 index 0000000..1a92a6b --- /dev/null +++ b/src/select/properties/flex_basis.c @@ -0,0 +1,79 @@ +/* + * This file is part of LibCSS + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2017 Lucas Neves + */ + +#include "bytecode/bytecode.h" +#include "bytecode/opcodes.h" +#include "select/propset.h" +#include "select/propget.h" +#include "utils/utils.h" + +#include "select/properties/properties.h" +#include "select/properties/helpers.h" + +css_error css__cascade_flex_basis(uint32_t opv, css_style *style, + css_select_state *state) +{ + uint16_t value = CSS_FLEX_BASIS_INHERIT; + css_fixed length = 0; + uint32_t unit = UNIT_PX; + + if (isInherit(opv) == false) { + switch (getValue(opv)) { + case FLEX_BASIS_AUTO: + value = CSS_FLEX_BASIS_AUTO; + break; + case FLEX_BASIS_CONTENT: + value = CSS_FLEX_BASIS_CONTENT; + break; + case FLEX_BASIS_SET: + value = CSS_FLEX_BASIS_SET; + length = *((css_fixed *) style->bytecode); + advance_bytecode(style, sizeof(length)); + unit = *((uint32_t *) style->bytecode); + advance_bytecode(style, sizeof(unit)); + break; + } + } + + unit = css__to_css_unit(unit); + + if (css__outranks_existing(getOpcode(opv), isImportant(opv), state, + isInherit(opv))) { + return set_flex_basis(state->computed, value, length, unit); + } + + return CSS_OK; +} + +css_error css__set_flex_basis_from_hint(const css_hint *hint, + css_computed_style *style) +{ + return set_flex_basis(style, hint->status, + hint->data.length.value, hint->data.length.unit); +} + +css_error css__initial_flex_basis(css_select_state *state) +{ + return set_flex_basis(state->computed, CSS_FLEX_BASIS_AUTO, 0, + CSS_UNIT_PX); +} + +css_error css__compose_flex_basis(const css_computed_style *parent, + const css_computed_style *child, + css_computed_style *result) +{ + css_fixed length = 0; + css_unit unit = CSS_UNIT_PX; + uint8_t type = get_flex_basis(child, &length, &unit); + + if (type == CSS_FLEX_BASIS_INHERIT) { + type = get_flex_basis(parent, &length, &unit); + } + + return set_flex_basis(result, type, length, unit); +} + diff --git a/src/select/properties/flex_direction.c b/src/select/properties/flex_direction.c new file mode 100644 index 0000000..79703be --- /dev/null +++ b/src/select/properties/flex_direction.c @@ -0,0 +1,72 @@ +/* + * This file is part of LibCSS + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2017 Lucas Neves + */ + +#include "bytecode/bytecode.h" +#include "bytecode/opcodes.h" +#include "select/propset.h" +#include "select/propget.h" +#include "utils/utils.h" + +#include "select/properties/properties.h" +#include "select/properties/helpers.h" + +css_error css__cascade_flex_direction(uint32_t opv, css_style *style, + css_select_state *state) +{ + uint16_t value = CSS_FLEX_DIRECTION_INHERIT; + + UNUSED(style); + + if (isInherit(opv) == false) { + switch (getValue(opv)) { + case FLEX_DIRECTION_ROW: + value = CSS_FLEX_DIRECTION_ROW; + break; + case FLEX_DIRECTION_ROW_REVERSE: + value = CSS_FLEX_DIRECTION_ROW_REVERSE; + break; + case FLEX_DIRECTION_COLUMN: + value = CSS_FLEX_DIRECTION_COLUMN; + break; + case FLEX_DIRECTION_COLUMN_REVERSE: + value = CSS_FLEX_DIRECTION_COLUMN_REVERSE; + break; + } + } + + if (css__outranks_existing(getOpcode(opv), isImportant(opv), state, + isInherit(opv))) { + return set_flex_direction(state->computed, value); + } + + return CSS_OK; +} + +css_error css__set_flex_direction_from_hint(const css_hint *hint, + css_computed_style *style) +{ + return set_flex_direction(style, hint->status); +} + +css_error css__initial_flex_direction(css_select_state *state) +{ + return set_flex_direction(state->computed, CSS_FLEX_DIRECTION_ROW); +} + +css_error css__compose_flex_direction(const css_computed_style *parent, + const css_computed_style *child, + css_computed_style *result) +{ + uint8_t type = get_flex_direction(child); + + if (type == CSS_FLEX_DIRECTION_INHERIT) { + type = get_flex_direction(parent); + } + + return set_flex_direction(result, type); +} + diff --git a/src/select/properties/flex_grow.c b/src/select/properties/flex_grow.c new file mode 100644 index 0000000..7f37cfe --- /dev/null +++ b/src/select/properties/flex_grow.c @@ -0,0 +1,62 @@ +/* + * This file is part of LibCSS + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2017 Lucas Neves + */ + +#include "bytecode/bytecode.h" +#include "bytecode/opcodes.h" +#include "select/propset.h" +#include "select/propget.h" +#include "utils/utils.h" + +#include "select/properties/properties.h" +#include "select/properties/helpers.h" + +css_error css__cascade_flex_grow(uint32_t opv, css_style *style, + css_select_state *state) +{ + uint16_t value = CSS_FLEX_GROW_INHERIT; + css_fixed flex_grow = 0; + + if (isInherit(opv) == false) { + value = CSS_FLEX_GROW_SET; + + flex_grow = *((css_fixed *) style->bytecode); + advance_bytecode(style, sizeof(flex_grow)); + } + + if (css__outranks_existing(getOpcode(opv), isImportant(opv), state, + isInherit(opv))) { + return set_flex_grow(state->computed, value, flex_grow); + } + + return CSS_OK; +} + +css_error css__set_flex_grow_from_hint(const css_hint *hint, + css_computed_style *style) +{ + return set_flex_grow(style, hint->status, hint->data.fixed); +} + +css_error css__initial_flex_grow(css_select_state *state) +{ + return set_flex_grow(state->computed, CSS_FLEX_GROW_SET, INTTOFIX(0)); +} + +css_error css__compose_flex_grow(const css_computed_style *parent, + const css_computed_style *child, + css_computed_style *result) +{ + css_fixed flex_grow = 0; + uint8_t type = get_flex_grow(child, &flex_grow); + + if (type == CSS_FLEX_GROW_INHERIT) { + type = get_flex_grow(parent, &flex_grow); + } + + return set_flex_grow(result, type, flex_grow); +} + diff --git a/src/select/properties/flex_shrink.c b/src/select/properties/flex_shrink.c new file mode 100644 index 0000000..d1acd2a --- /dev/null +++ b/src/select/properties/flex_shrink.c @@ -0,0 +1,62 @@ +/* + * This file is part of LibCSS + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2017 Lucas Neves + */ + +#include "bytecode/bytecode.h" +#include "bytecode/opcodes.h" +#include "select/propset.h" +#include "select/propget.h" +#include "utils/utils.h" + +#include "select/properties/properties.h" +#include "select/properties/helpers.h" + +css_error css__cascade_flex_shrink(uint32_t opv, css_style *style, + css_select_state *state) +{ + uint16_t value = CSS_FLEX_SHRINK_INHERIT; + css_fixed flex_shrink = 0; + + if (isInherit(opv) == false) { + value = CSS_FLEX_SHRINK_SET; + + flex_shrink = *((css_fixed *) style->bytecode); + advance_bytecode(style, sizeof(flex_shrink)); + } + + if (css__outranks_existing(getOpcode(opv), isImportant(opv), state, + isInherit(opv))) { + return set_flex_shrink(state->computed, value, flex_shrink); + } + + return CSS_OK; +} + +css_error css__set_flex_shrink_from_hint(const css_hint *hint, + css_computed_style *style) +{ + return set_flex_shrink(style, hint->status, hint->data.fixed); +} + +css_error css__initial_flex_shrink(css_select_state *state) +{ + return set_flex_shrink(state->computed, CSS_FLEX_SHRINK_SET, INTTOFIX(1)); +} + +css_error css__compose_flex_shrink(const css_computed_style *parent, + const css_computed_style *child, + css_computed_style *result) +{ + css_fixed flex_shrink = 0; + uint8_t type = get_flex_shrink(child, &flex_shrink); + + if (type == CSS_FLEX_SHRINK_INHERIT) { + type = get_flex_shrink(parent, &flex_shrink); + } + + return set_flex_shrink(result, type, flex_shrink); +} + diff --git a/src/select/properties/flex_wrap.c b/src/select/properties/flex_wrap.c new file mode 100644 index 0000000..688a9b6 --- /dev/null +++ b/src/select/properties/flex_wrap.c @@ -0,0 +1,69 @@ +/* + * This file is part of LibCSS + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2017 Lucas Neves + */ + +#include "bytecode/bytecode.h" +#include "bytecode/opcodes.h" +#include "select/propset.h" +#include "select/propget.h" +#include "utils/utils.h" + +#include "select/properties/properties.h" +#include "select/properties/helpers.h" + +css_error css__cascade_flex_wrap(uint32_t opv, css_style *style, + css_select_state *state) +{ + uint16_t value = CSS_FLEX_WRAP_INHERIT; + + UNUSED(style); + + if (isInherit(opv) == false) { + switch (getValue(opv)) { + case FLEX_WRAP_NOWRAP: + value = CSS_FLEX_WRAP_NOWRAP; + break; + case FLEX_WRAP_WRAP: + value = CSS_FLEX_WRAP_WRAP; + break; + case FLEX_WRAP_WRAP_REVERSE: + value = CSS_FLEX_WRAP_WRAP_REVERSE; + break; + } + } + + if (css__outranks_existing(getOpcode(opv), isImportant(opv), state, + isInherit(opv))) { + return set_flex_wrap(state->computed, value); + } + + return CSS_OK; +} + +css_error css__set_flex_wrap_from_hint(const css_hint *hint, + css_computed_style *style) +{ + return set_flex_wrap(style, hint->status); +} + +css_error css__initial_flex_wrap(css_select_state *state) +{ + return set_flex_wrap(state->computed, CSS_FLEX_WRAP_NOWRAP); +} + +css_error css__compose_flex_wrap(const css_computed_style *parent, + const css_computed_style *child, + css_computed_style *result) +{ + uint8_t type = get_flex_wrap(child); + + if (type == CSS_FLEX_WRAP_INHERIT) { + type = get_flex_wrap(parent); + } + + return set_flex_wrap(result, type); +} + diff --git a/src/select/properties/justify_content.c b/src/select/properties/justify_content.c new file mode 100644 index 0000000..2e17ca5 --- /dev/null +++ b/src/select/properties/justify_content.c @@ -0,0 +1,79 @@ +/* + * This file is part of LibCSS + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2017 Lucas Neves + */ + +#include "bytecode/bytecode.h" +#include "bytecode/opcodes.h" +#include "select/propset.h" +#include "select/propget.h" +#include "utils/utils.h" + +#include "select/properties/properties.h" +#include "select/properties/helpers.h" + +css_error css__cascade_justify_content(uint32_t opv, css_style *style, + css_select_state *state) +{ + uint16_t value = CSS_JUSTIFY_CONTENT_INHERIT; + + UNUSED(style); + + if (isInherit(opv) == false) { + switch (getValue(opv)) { + case JUSTIFY_CONTENT_FLEX_START: + value = CSS_JUSTIFY_CONTENT_FLEX_START; + break; + case JUSTIFY_CONTENT_FLEX_END: + value = CSS_JUSTIFY_CONTENT_FLEX_END; + break; + case JUSTIFY_CONTENT_CENTER: + value = CSS_JUSTIFY_CONTENT_CENTER; + break; + case JUSTIFY_CONTENT_SPACE_BETWEEN: + value = CSS_JUSTIFY_CONTENT_SPACE_BETWEEN; + break; + case JUSTIFY_CONTENT_SPACE_AROUND: + value = CSS_JUSTIFY_CONTENT_SPACE_AROUND; + break; + case JUSTIFY_CONTENT_SPACE_EVENLY: + value = CSS_JUSTIFY_CONTENT_SPACE_EVENLY; + break; + } + } + + if (css__outranks_existing(getOpcode(opv), isImportant(opv), state, + isInherit(opv))) { + return set_justify_content(state->computed, value); + } + + return CSS_OK; +} + +css_error css__set_justify_content_from_hint(const css_hint *hint, + css_computed_style *style) +{ + return set_justify_content(style, hint->status); +} + +css_error css__initial_justify_content(css_select_state *state) +{ + return set_justify_content(state->computed, + CSS_JUSTIFY_CONTENT_FLEX_START); +} + +css_error css__compose_justify_content(const css_computed_style *parent, + const css_computed_style *child, + css_computed_style *result) +{ + uint8_t type = get_justify_content(child); + + if (type == CSS_JUSTIFY_CONTENT_INHERIT) { + type = get_justify_content(parent); + } + + return set_justify_content(result, type); +} + diff --git a/src/select/properties/min_height.c b/src/select/properties/min_height.c index 687d8a1..a5389ce 100644 --- a/src/select/properties/min_height.c +++ b/src/select/properties/min_height.c @@ -17,7 +17,7 @@ css_error css__cascade_min_height(uint32_t opv, css_style *style, css_select_state *state) { - return css__cascade_length(opv, style, state, set_min_height); + return css__cascade_length_auto(opv, style, state, set_min_height); } css_error css__set_min_height_from_hint(const css_hint *hint, @@ -29,7 +29,7 @@ css_error css__set_min_height_from_hint(const css_hint *hint, css_error css__initial_min_height(css_select_state *state) { - return set_min_height(state->computed, CSS_MIN_HEIGHT_SET, + return set_min_height(state->computed, CSS_MIN_HEIGHT_AUTO, 0, CSS_UNIT_PX); } diff --git a/src/select/properties/min_width.c b/src/select/properties/min_width.c index 5365588..8460e01 100644 --- a/src/select/properties/min_width.c +++ b/src/select/properties/min_width.c @@ -17,7 +17,7 @@ css_error css__cascade_min_width(uint32_t opv, css_style *style, css_select_state *state) { - return css__cascade_length(opv, style, state, set_min_width); + return css__cascade_length_auto(opv, style, state, set_min_width); } css_error css__set_min_width_from_hint(const css_hint *hint, @@ -29,7 +29,8 @@ css_error css__set_min_width_from_hint(const css_hint *hint, css_error css__initial_min_width(css_select_state *state) { - return set_min_width(state->computed, CSS_MIN_WIDTH_SET, 0, CSS_UNIT_PX); + return set_min_width(state->computed, CSS_MIN_WIDTH_AUTO, + 0, CSS_UNIT_PX); } css_error css__compose_min_width(const css_computed_style *parent, diff --git a/src/select/properties/order.c b/src/select/properties/order.c new file mode 100644 index 0000000..0366537 --- /dev/null +++ b/src/select/properties/order.c @@ -0,0 +1,62 @@ +/* + * This file is part of LibCSS + * Licensed under the MIT License, + * http://www.opensource.org/licenses/mit-license.php + * Copyright 2017 Lucas Neves + */ + +#include "bytecode/bytecode.h" +#include "bytecode/opcodes.h" +#include "select/propset.h" +#include "select/propget.h" +#include "utils/utils.h" + +#include "select/properties/properties.h" +#include "select/properties/helpers.h" + +css_error css__cascade_order(uint32_t opv, css_style *style, + css_select_state *state) +{ + uint16_t value = CSS_ORDER_INHERIT; + css_fixed order = 0; + + if (isInherit(opv) == false) { + value = CSS_ORDER_SET; + + order = FIXTOINT(*((css_fixed *) style->bytecode)); + advance_bytecode(style, sizeof(order)); + } + + if (css__outranks_existing(getOpcode(opv), isImportant(opv), state, + isInherit(opv))) { + return set_order(state->computed, value, order); + } + + return CSS_OK; +} + +css_error css__set_order_from_hint(const css_hint *hint, + css_computed_style *style) +{ + return set_order(style, hint->status, hint->data.integer); +} + +css_error css__initial_order(css_select_state *state) +{ + return set_order(state->computed, CSS_ORDER_SET, 0); +} + +css_error css__compose_order(const css_computed_style *parent, + const css_computed_style *child, + css_computed_style *result) +{ + int32_t order = 0; + uint8_t type = get_order(child, &order); + + if (type == CSS_ORDER_INHERIT) { + type = get_order(parent, &order); + } + + return set_order(result, type, order); +} + diff --git a/src/select/properties/properties.h b/src/select/properties/properties.h index a1ab49f..6eac397 100644 --- a/src/select/properties/properties.h +++ b/src/select/properties/properties.h @@ -21,6 +21,9 @@ css_error css__compose_##pname (const css_computed_style *parent, const css_computed_style *child, css_computed_style *result); \ uint32_t destroy_##pname (void *bytecode) +PROPERTY_FUNCS(align_content); +PROPERTY_FUNCS(align_items); +PROPERTY_FUNCS(align_self); PROPERTY_FUNCS(azimuth); PROPERTY_FUNCS(background_attachment); PROPERTY_FUNCS(background_color); @@ -68,6 +71,11 @@ PROPERTY_FUNCS(direction); PROPERTY_FUNCS(display); PROPERTY_FUNCS(elevation); PROPERTY_FUNCS(empty_cells); +PROPERTY_FUNCS(flex_basis); +PROPERTY_FUNCS(flex_direction); +PROPERTY_FUNCS(flex_grow); +PROPERTY_FUNCS(flex_shrink); +PROPERTY_FUNCS(flex_wrap); PROPERTY_FUNCS(float); PROPERTY_FUNCS(font_family); PROPERTY_FUNCS(font_size); @@ -75,6 +83,7 @@ PROPERTY_FUNCS(font_style); PROPERTY_FUNCS(font_variant); PROPERTY_FUNCS(font_weight); PROPERTY_FUNCS(height); +PROPERTY_FUNCS(justify_content); PROPERTY_FUNCS(left); PROPERTY_FUNCS(letter_spacing); PROPERTY_FUNCS(line_height); @@ -90,6 +99,7 @@ PROPERTY_FUNCS(max_width); PROPERTY_FUNCS(min_height); PROPERTY_FUNCS(min_width); PROPERTY_FUNCS(opacity); +PROPERTY_FUNCS(order); PROPERTY_FUNCS(orphans); PROPERTY_FUNCS(outline_color); PROPERTY_FUNCS(outline_style); -- cgit v1.2.3 From f5f7146021582b132f712b39d290aa9201556330 Mon Sep 17 00:00:00 2001 From: Lucas Neves Date: Thu, 28 Sep 2017 15:52:31 +0000 Subject: Tests: Add support and parsing tests for the flexbox properties. --- test/data/parse2/INDEX | 1 + test/data/parse2/flexbox.dat | 1713 ++++++++++++++++++++++++++++++++++++++++++ test/dump.h | 234 +++++- 3 files changed, 1933 insertions(+), 15 deletions(-) create mode 100644 test/data/parse2/flexbox.dat diff --git a/test/data/parse2/INDEX b/test/data/parse2/INDEX index 1afb4da..9a4c02b 100644 --- a/test/data/parse2/INDEX +++ b/test/data/parse2/INDEX @@ -20,3 +20,4 @@ outline.dat Outline property tests overflow.dat Overflow property tests padding.dat Padding property tests multicol.dat Multi-column layout property tests +flexbox.dat Flexbox properties and shorthands tests diff --git a/test/data/parse2/flexbox.dat b/test/data/parse2/flexbox.dat new file mode 100644 index 0000000..99ac2df --- /dev/null +++ b/test/data/parse2/flexbox.dat @@ -0,0 +1,1713 @@ +#data +* { align-content: invalid; } +#errors +#expected +| * +#reset + +#data +* { align-content: inherit; } +#errors +#expected +| * +| align-content: inherit +#reset + +#data +* { align-content: stretch; } +#errors +#expected +| * +| align-content: stretch +#reset + +#data +* { align-content: flex-start; } +#errors +#expected +| * +| align-content: flex-start +#reset + +#data +* { align-content: flex-end; } +#errors +#expected +| * +| align-content: flex-end +#reset + +#data +* { align-content: center; } +#errors +#expected +| * +| align-content: center +#reset + +#data +* { align-content: space-between; } +#errors +#expected +| * +| align-content: space-between +#reset + +#data +* { align-content: space-around; } +#errors +#expected +| * +| align-content: space-around +#reset + +#data +* { align-content: space-evenly; } +#errors +#expected +| * +| align-content: space-evenly +#reset + +#data +* { align-content: inherit !important; } +#errors +#expected +| * +| align-content: inherit !important +#reset + +#data +* { align-content: stretch !important; } +#errors +#expected +| * +| align-content: stretch !important +#reset + +#data +* { align-content: flex-start !important; } +#errors +#expected +| * +| align-content: flex-start !important +#reset + +#data +* { align-content: flex-end !important; } +#errors +#expected +| * +| align-content: flex-end !important +#reset + +#data +* { align-content: center !important; } +#errors +#expected +| * +| align-content: center !important +#reset + +#data +* { align-content: space-between !important; } +#errors +#expected +| * +| align-content: space-between !important +#reset + +#data +* { align-content: space-around !important; } +#errors +#expected +| * +| align-content: space-around !important +#reset + +#data +* { align-content: space-evenly !important; } +#errors +#expected +| * +| align-content: space-evenly !important +#reset + +#data +* { align-items: invalid; } +#errors +#expected +| * +#reset + +#data +* { align-items: inherit; } +#errors +#expected +| * +| align-items: inherit +#reset + +#data +* { align-items: stretch; } +#errors +#expected +| * +| align-items: stretch +#reset + +#data +* { align-items: flex-start; } +#errors +#expected +| * +| align-items: flex-start +#reset + +#data +* { align-items: flex-end; } +#errors +#expected +| * +| align-items: flex-end +#reset + +#data +* { align-items: center; } +#errors +#expected +| * +| align-items: center +#reset + +#data +* { align-items: baseline; } +#errors +#expected +| * +| align-items: baseline +#reset + +#data +* { align-items: inherit !important; } +#errors +#expected +| * +| align-items: inherit !important +#reset + +#data +* { align-items: stretch !important; } +#errors +#expected +| * +| align-items: stretch !important +#reset + +#data +* { align-items: flex-start !important; } +#errors +#expected +| * +| align-items: flex-start !important +#reset + +#data +* { align-items: flex-end !important; } +#errors +#expected +| * +| align-items: flex-end !important +#reset + +#data +* { align-items: center !important; } +#errors +#expected +| * +| align-items: center !important +#reset + +#data +* { align-items: baseline !important; } +#errors +#expected +| * +| align-items: baseline !important +#reset + +#data +* { align-self: invalid; } +#errors +#expected +| * +#reset + +#data +* { align-self: inherit; } +#errors +#expected +| * +| align-self: inherit +#reset + +#data +* { align-self: stretch; } +#errors +#expected +| * +| align-self: stretch +#reset + +#data +* { align-self: flex-start; } +#errors +#expected +| * +| align-self: flex-start +#reset + +#data +* { align-self: flex-end; } +#errors +#expected +| * +| align-self: flex-end +#reset + +#data +* { align-self: center; } +#errors +#expected +| * +| align-self: center +#reset + +#data +* { align-self: baseline; } +#errors +#expected +| * +| align-self: baseline +#reset + +#data +* { align-self: auto; } +#errors +#expected +| * +| align-self: auto +#reset + +#data +* { align-self: inherit !important; } +#errors +#expected +| * +| align-self: inherit !important +#reset + +#data +* { align-self: stretch !important; } +#errors +#expected +| * +| align-self: stretch !important +#reset + +#data +* { align-self: flex-start !important; } +#errors +#expected +| * +| align-self: flex-start !important +#reset + +#data +* { align-self: flex-end !important; } +#errors +#expected +| * +| align-self: flex-end !important +#reset + +#data +* { align-self: center !important; } +#errors +#expected +| * +| align-self: center !important +#reset + +#data +* { align-self: baseline !important; } +#errors +#expected +| * +| align-self: baseline !important +#reset + +#data +* { align-self: auto !important; } +#errors +#expected +| * +| align-self: auto !important +#reset + +#data +* { flex-basis: invalid; } +#errors +#expected +| * +#reset + +#data +* { flex-basis: inherit; } +#errors +#expected +| * +| flex-basis: inherit +#reset + +#data +* { flex-basis: auto; } +#errors +#expected +| * +| flex-basis: auto +#reset + +#data +* { flex-basis: content; } +#errors +#expected +| * +| flex-basis: content +#reset + +#data +* { flex-basis: 0; } +#errors +#expected +| * +| flex-basis: 0px +#reset + +#data +* { flex-basis: 10px; } +#errors +#expected +| * +| flex-basis: 10px +#reset + +#data +* { flex-basis: 10em; } +#errors +#expected +| * +| flex-basis: 10em +#reset + +#data +* { flex-basis: 10invalid; } +#errors +#expected +| * +#reset + +#data +* { flex-basis: invalid !important; } +#errors +#expected +| * +#reset + +#data +* { flex-basis: inherit !important; } +#errors +#expected +| * +| flex-basis: inherit !important +#reset + +#data +* { flex-basis: auto !important; } +#errors +#expected +| * +| flex-basis: auto !important +#reset + +#data +* { flex-basis: content !important; } +#errors +#expected +| * +| flex-basis: content !important +#reset + +#data +* { flex-basis: 0 !important; } +#errors +#expected +| * +| flex-basis: 0px !important +#reset + +#data +* { flex-basis: 10px !important; } +#errors +#expected +| * +| flex-basis: 10px !important +#reset + +#data +* { flex-basis: 10em !important; } +#errors +#expected +| * +| flex-basis: 10em !important +#reset + +#data +* { flex-basis: 10invalid !important; } +#errors +#expected +| * +#reset + +#data +* { flex-direction: invalid; } +#errors +#expected +| * +#reset + +#data +* { flex-direction: inherit; } +#errors +#expected +| * +| flex-direction: inherit +#reset + +#data +* { flex-direction: row; } +#errors +#expected +| * +| flex-direction: row +#reset + +#data +* { flex-direction: row-reverse; } +#errors +#expected +| * +| flex-direction: row-reverse +#reset + +#data +* { flex-direction: column; } +#errors +#expected +| * +| flex-direction: column +#reset + +#data +* { flex-direction: column-reverse; } +#errors +#expected +| * +| flex-direction: column-reverse +#reset + +#data +* { flex-direction: invalid !important; } +#errors +#expected +| * +#reset + +#data +* { flex-direction: inherit !important; } +#errors +#expected +| * +| flex-direction: inherit !important +#reset + +#data +* { flex-direction: row !important; } +#errors +#expected +| * +| flex-direction: row !important +#reset + +#data +* { flex-direction: row-reverse !important; } +#errors +#expected +| * +| flex-direction: row-reverse !important +#reset + +#data +* { flex-direction: column !important; } +#errors +#expected +| * +| flex-direction: column !important +#reset + +#data +* { flex-direction: column-reverse !important; } +#errors +#expected +| * +| flex-direction: column-reverse !important +#reset + +#data +* { flex-grow: invalid; } +#errors +#expected +| * +#reset + +#data +* { flex-grow: 10px; } +#errors +#expected +| * +#reset + +#data +* { flex-grow: -2; } +#errors +#expected +| * +#reset + +#data +* { flex-grow: inherit; } +#errors +#expected +| * +| flex-grow: inherit +#reset + +#data +* { flex-grow: 0; } +#errors +#expected +| * +| flex-grow: 0 +#reset + +#data +* { flex-grow: 0.5; } +#errors +#expected +| * +| flex-grow: 0.500 +#reset + +#data +* { flex-grow: 1; } +#errors +#expected +| * +| flex-grow: 1 +#reset + +#data +* { flex-grow: 3.5; } +#errors +#expected +| * +| flex-grow: 3.500 +#reset + +#data +* { flex-grow: 20; } +#errors +#expected +| * +| flex-grow: 20 +#reset + +#data +* { flex-grow: invalid !important; } +#errors +#expected +| * +#reset + +#data +* { flex-grow: 10px !important; } +#errors +#expected +| * +#reset + +#data +* { flex-grow: -2 !important; } +#errors +#expected +| * +#reset + +#data +* { flex-grow: inherit !important; } +#errors +#expected +| * +| flex-grow: inherit !important +#reset + +#data +* { flex-grow: 0 !important; } +#errors +#expected +| * +| flex-grow: 0 !important +#reset + +#data +* { flex-grow: 0.5 !important; } +#errors +#expected +| * +| flex-grow: 0.500 !important +#reset + +#data +* { flex-grow: 1 !important; } +#errors +#expected +| * +| flex-grow: 1 !important +#reset + +#data +* { flex-grow: 3.5 !important; } +#errors +#expected +| * +| flex-grow: 3.500 !important +#reset + +#data +* { flex-grow: 20 !important; } +#errors +#expected +| * +| flex-grow: 20 !important +#reset + +#data +* { flex-shrink: invalid; } +#errors +#expected +| * +#reset + +#data +* { flex-shrink: 10px; } +#errors +#expected +| * +#reset + +#data +* { flex-shrink: -2; } +#errors +#expected +| * +#reset + +#data +* { flex-shrink: inherit; } +#errors +#expected +| * +| flex-shrink: inherit +#reset + +#data +* { flex-shrink: 0; } +#errors +#expected +| * +| flex-shrink: 0 +#reset + +#data +* { flex-shrink: 0.5; } +#errors +#expected +| * +| flex-shrink: 0.500 +#reset + +#data +* { flex-shrink: 1; } +#errors +#expected +| * +| flex-shrink: 1 +#reset + +#data +* { flex-shrink: 3.5; } +#errors +#expected +| * +| flex-shrink: 3.500 +#reset + +#data +* { flex-shrink: 20; } +#errors +#expected +| * +| flex-shrink: 20 +#reset + +#data +* { flex-shrink: invalid !important; } +#errors +#expected +| * +#reset + +#data +* { flex-shrink: 10px !important; } +#errors +#expected +| * +#reset + +#data +* { flex-shrink: -2 !important; } +#errors +#expected +| * +#reset + +#data +* { flex-shrink: inherit !important; } +#errors +#expected +| * +| flex-shrink: inherit !important +#reset + +#data +* { flex-shrink: 0 !important; } +#errors +#expected +| * +| flex-shrink: 0 !important +#reset + +#data +* { flex-shrink: 0.5 !important; } +#errors +#expected +| * +| flex-shrink: 0.500 !important +#reset + +#data +* { flex-shrink: 1 !important; } +#errors +#expected +| * +| flex-shrink: 1 !important +#reset + +#data +* { flex-shrink: 3.5 !important; } +#errors +#expected +| * +| flex-shrink: 3.500 !important +#reset + +#data +* { flex-shrink: 20 !important; } +#errors +#expected +| * +| flex-shrink: 20 !important +#reset + +#data +* { flex-wrap: invalid; } +#errors +#expected +| * +#reset + +#data +* { flex-wrap: inherit; } +#errors +#expected +| * +| flex-wrap: inherit +#reset + +#data +* { flex-wrap: nowrap; } +#errors +#expected +| * +| flex-wrap: nowrap +#reset + +#data +* { flex-wrap: wrap; } +#errors +#expected +| * +| flex-wrap: wrap +#reset + +#data +* { flex-wrap: wrap-reverse; } +#errors +#expected +| * +| flex-wrap: wrap-reverse +#reset + +#data +* { flex-wrap: invalid !important; } +#errors +#expected +| * +#reset + +#data +* { flex-wrap: inherit !important; } +#errors +#expected +| * +| flex-wrap: inherit !important +#reset + +#data +* { flex-wrap: nowrap !important; } +#errors +#expected +| * +| flex-wrap: nowrap !important +#reset + +#data +* { flex-wrap: wrap !important; } +#errors +#expected +| * +| flex-wrap: wrap !important +#reset + +#data +* { flex-wrap: wrap-reverse !important; } +#errors +#expected +| * +| flex-wrap: wrap-reverse !important +#reset + +#data +* { justify-content: invalid; } +#errors +#expected +| * +#reset + +#data +* { justify-content: inherit; } +#errors +#expected +| * +| justify-content: inherit +#reset + +#data +* { justify-content: stretch; } +#errors +#expected +| * +#reset + +#data +* { justify-content: flex-start; } +#errors +#expected +| * +| justify-content: flex-start +#reset + +#data +* { justify-content: flex-end; } +#errors +#expected +| * +| justify-content: flex-end +#reset + +#data +* { justify-content: center; } +#errors +#expected +| * +| justify-content: center +#reset + +#data +* { justify-content: space-between; } +#errors +#expected +| * +| justify-content: space-between +#reset + +#data +* { justify-content: space-around; } +#errors +#expected +| * +| justify-content: space-around +#reset + +#data +* { justify-content: space-evenly; } +#errors +#expected +| * +| justify-content: space-evenly +#reset + +#data +* { justify-content: inherit !important; } +#errors +#expected +| * +| justify-content: inherit !important +#reset + +#data +* { justify-content: stretch !important; } +#errors +#expected +| * +#reset + +#data +* { justify-content: flex-start !important; } +#errors +#expected +| * +| justify-content: flex-start !important +#reset + +#data +* { justify-content: flex-end !important; } +#errors +#expected +| * +| justify-content: flex-end !important +#reset + +#data +* { justify-content: center !important; } +#errors +#expected +| * +| justify-content: center !important +#reset + +#data +* { justify-content: space-between !important; } +#errors +#expected +| * +| justify-content: space-between !important +#reset + +#data +* { justify-content: space-around !important; } +#errors +#expected +| * +| justify-content: space-around !important +#reset + +#data +* { justify-content: space-evenly !important; } +#errors +#expected +| * +| justify-content: space-evenly !important +#reset + +#data +* { order: invalid; } +#errors +#expected +| * +#reset +# +#data +* { order: 0.5; } +#errors +#expected +| * +#reset + +#data +* { order: 10px; } +#errors +#expected +| * +#reset + +#data +* { order: inherit; } +#errors +#expected +| * +| order: inherit +#reset + +#data +* { order: 0; } +#errors +#expected +| * +| order: 0 +#reset + +#data +* { order: -2; } +#errors +#expected +| * +| order: -2 +#reset + +#data +* { order: 1; } +#errors +#expected +| * +| order: 1 +#reset + +#data +* { order: 10000; } +#errors +#expected +| * +| order: 10000 +#reset + +#data +* { order: invalid !important; } +#errors +#expected +| * +#reset + +#data +* { order: 0.5 !important; } +#errors +#expected +| * +#reset + +#data +* { order: 10px !important; } +#errors +#expected +| * +#reset + +#data +* { order: inherit !important; } +#errors +#expected +| * +| order: inherit !important +#reset + +#data +* { order: 0 !important; } +#errors +#expected +| * +| order: 0 !important +#reset + +#data +* { order: -2 !important; } +#errors +#expected +| * +| order: -2 !important +#reset + +#data +* { order: 1 !important; } +#errors +#expected +| * +| order: 1 !important +#reset + +#data +* { order: 10000 !important; } +#errors +#expected +| * +| order: 10000 !important +#reset + +#data +* { flex: invalid; } +#errors +#expected +| * +#reset + +#data +* { flex: -1; } +#errors +#expected +| * +#reset + +#data +* { flex: 2 2 2px 2; } +#errors +#expected +| * +#reset + +#data +* { flex: inherit; } +#errors +#expected +| * +| flex-grow: inherit +| flex-shrink: inherit +| flex-basis: inherit +#reset + +#data +* { flex: 0; } +#errors +#expected +| * +| flex-grow: 0 +| flex-shrink: 1 +| flex-basis: 0px +#reset + +#data +* { flex: 2; } +#errors +#expected +| * +| flex-grow: 2 +| flex-shrink: 1 +| flex-basis: 0px +#reset + +#data +* { flex: 3em; } +#errors +#expected +| * +| flex-grow: 0 +| flex-shrink: 1 +| flex-basis: 3em +#reset + +#data +* { flex: 3 4; } +#errors +#expected +| * +| flex-grow: 3 +| flex-shrink: 4 +| flex-basis: 0px +#reset + +#data +* { flex: 2.5 3.75; } +#errors +#expected +| * +| flex-grow: 2.500 +| flex-shrink: 3.750 +| flex-basis: 0px +#reset + +#data +* { flex: 10 20 30px; } +#errors +#expected +| * +| flex-grow: 10 +| flex-shrink: 20 +| flex-basis: 30px +#reset + +#data +* { flex: none; } +#errors +#expected +| * +| flex-grow: 0 +| flex-shrink: 0 +| flex-basis: auto +#reset + +#data +* { flex: auto; } +#errors +#expected +| * +| flex-grow: 1 +| flex-shrink: 1 +| flex-basis: auto +#reset + +#data +* { flex: invalid !important; } +#errors +#expected +| * +#reset + +#data +* { flex: -1 !important; } +#errors +#expected +| * +#reset + +#data +* { flex: 2 2 2px 2 !important; } +#errors +#expected +| * +#reset + +#data +* { flex: inherit !important; } +#errors +#expected +| * +| flex-grow: inherit !important +| flex-shrink: inherit !important +| flex-basis: inherit !important +#reset + +#data +* { flex: 0 !important; } +#errors +#expected +| * +| flex-grow: 0 !important +| flex-shrink: 1 !important +| flex-basis: 0px !important +#reset + +#data +* { flex: 2 !important; } +#errors +#expected +| * +| flex-grow: 2 !important +| flex-shrink: 1 !important +| flex-basis: 0px !important +#reset + +#data +* { flex: 3em !important; } +#errors +#expected +| * +| flex-grow: 0 !important +| flex-shrink: 1 !important +| flex-basis: 3em !important +#reset + +#data +* { flex: 3 4 !important; } +#errors +#expected +| * +| flex-grow: 3 !important +| flex-shrink: 4 !important +| flex-basis: 0px !important +#reset + +#data +* { flex: 2.5 3.75 !important; } +#errors +#expected +| * +| flex-grow: 2.500 !important +| flex-shrink: 3.750 !important +| flex-basis: 0px !important +#reset + +#data +* { flex: 10 20 30px !important; } +#errors +#expected +| * +| flex-grow: 10 !important +| flex-shrink: 20 !important +| flex-basis: 30px !important +#reset + +#data +* { flex: none !important; } +#errors +#expected +| * +| flex-grow: 0 !important +| flex-shrink: 0 !important +| flex-basis: auto !important +#reset + +#data +* { flex: auto !important; } +#errors +#expected +| * +| flex-grow: 1 !important +| flex-shrink: 1 !important +| flex-basis: auto !important +#reset + +#data +* { flex-flow: invalid; } +#errors +#expected +| * +#reset + +#data +* { flex-flow: 1; } +#errors +#expected +| * +#reset + +#data +* { flex-flow: wrap 0; } +#errors +#expected +| * +#reset + +#data +* { flex-flow: inherit; } +#errors +#expected +| * +| flex-direction: inherit +| flex-wrap: inherit +#reset + +#data +* { flex-flow: row; } +#errors +#expected +| * +| flex-direction: row +| flex-wrap: nowrap +#reset + +#data +* { flex-flow: column; } +#errors +#expected +| * +| flex-direction: column +| flex-wrap: nowrap +#reset + +#data +* { flex-flow: row-reverse; } +#errors +#expected +| * +| flex-direction: row-reverse +| flex-wrap: nowrap +#reset + +#data +* { flex-flow: column-reverse; } +#errors +#expected +| * +| flex-direction: column-reverse +| flex-wrap: nowrap +#reset + +#data +* { flex-flow: nowrap; } +#errors +#expected +| * +| flex-direction: row +| flex-wrap: nowrap +#reset + +#data +* { flex-flow: wrap; } +#errors +#expected +| * +| flex-direction: row +| flex-wrap: wrap +#reset + +#data +* { flex-flow: wrap-reverse; } +#errors +#expected +| * +| flex-direction: row +| flex-wrap: wrap-reverse +#reset + +#data +* { flex-flow: column wrap; } +#errors +#expected +| * +| flex-direction: column +| flex-wrap: wrap +#reset + +#data +* { flex-flow: row-reverse wrap-reverse; } +#errors +#expected +| * +| flex-direction: row-reverse +| flex-wrap: wrap-reverse +#reset + +#data +* { flex-flow: row nowrap; } +#errors +#expected +| * +| flex-direction: row +| flex-wrap: nowrap +#reset + +#data +* { flex-flow: column nowrap; } +#errors +#expected +| * +| flex-direction: column +| flex-wrap: nowrap +#reset + +#data +* { flex-flow: invalid !important; } +#errors +#expected +| * +#reset + +#data +* { flex-flow: 1 !important; } +#errors +#expected +| * +#reset + +#data +* { flex-flow: wrap 0 !important; } +#errors +#expected +| * +#reset + +#data +* { flex-flow: inherit !important; } +#errors +#expected +| * +| flex-direction: inherit !important +| flex-wrap: inherit !important +#reset + +#data +* { flex-flow: row !important; } +#errors +#expected +| * +| flex-direction: row !important +| flex-wrap: nowrap !important +#reset + +#data +* { flex-flow: column !important; } +#errors +#expected +| * +| flex-direction: column !important +| flex-wrap: nowrap !important +#reset + +#data +* { flex-flow: row-reverse !important; } +#errors +#expected +| * +| flex-direction: row-reverse !important +| flex-wrap: nowrap !important +#reset + +#data +* { flex-flow: column-reverse !important; } +#errors +#expected +| * +| flex-direction: column-reverse !important +| flex-wrap: nowrap !important +#reset + +#data +* { flex-flow: nowrap !important; } +#errors +#expected +| * +| flex-direction: row !important +| flex-wrap: nowrap !important +#reset + +#data +* { flex-flow: wrap !important; } +#errors +#expected +| * +| flex-direction: row !important +| flex-wrap: wrap !important +#reset + +#data +* { flex-flow: wrap-reverse !important; } +#errors +#expected +| * +| flex-direction: row !important +| flex-wrap: wrap-reverse !important +#reset + +#data +* { flex-flow: column wrap !important; } +#errors +#expected +| * +| flex-direction: column !important +| flex-wrap: wrap !important +#reset + +#data +* { flex-flow: row-reverse wrap-reverse !important; } +#errors +#expected +| * +| flex-direction: row-reverse !important +| flex-wrap: wrap-reverse !important +#reset + +#data +* { flex-flow: row nowrap !important; } +#errors +#expected +| * +| flex-direction: row !important +| flex-wrap: nowrap !important +#reset + +#data +* { flex-flow: column nowrap !important; } +#errors +#expected +| * +| flex-direction: column !important +| flex-wrap: nowrap !important +#reset + +#data +* { display: flex; } +#errors +#expected +| * +| display: flex +#reset + +#data +* { display: inline-flex; } +#errors +#expected +| * +| display: inline-flex +#reset + +#data +* { display: flex !important; } +#errors +#expected +| * +| display: flex !important +#reset + +#data +* { display: inline-flex !important; } +#errors +#expected +| * +| display: inline-flex !important +#reset + +#data +* { min-width: auto; min-height: auto; } +#errors +#expected +| * +| min-width: auto +| min-height: auto +#reset + +#data +* { min-width: auto !important; min-height: auto !important; } +#errors +#expected +| * +| min-width: auto !important +| min-height: auto !important +#reset diff --git a/test/dump.h b/test/dump.h index 0159b19..64cad32 100644 --- a/test/dump.h +++ b/test/dump.h @@ -479,6 +479,16 @@ static const char *opcode_names[] = { "writing-mode", "overflow-y", "box-sizing", + "align-content", + "align-items", + "align-self", + "flex-basis", + "flex-direction", + "flex-grow", + "flex-shrink", + "flex-wrap", + "justify-content", + "order", }; static void dump_css_fixed(css_fixed f, char **ptr) @@ -752,6 +762,72 @@ void dump_bytecode(css_style *style, char **ptr, uint32_t depth) value = getValue(opv); switch (op) { + case CSS_PROP_ALIGN_CONTENT: + switch (value) { + case ALIGN_CONTENT_STRETCH: + *ptr += sprintf(*ptr, "stretch"); + break; + case ALIGN_CONTENT_FLEX_START: + *ptr += sprintf(*ptr, "flex-start"); + break; + case ALIGN_CONTENT_FLEX_END: + *ptr += sprintf(*ptr, "flex-end"); + break; + case ALIGN_CONTENT_CENTER: + *ptr += sprintf(*ptr, "center"); + break; + case ALIGN_CONTENT_SPACE_BETWEEN: + *ptr += sprintf(*ptr, "space-between"); + break; + case ALIGN_CONTENT_SPACE_AROUND: + *ptr += sprintf(*ptr, "space-around"); + break; + case ALIGN_CONTENT_SPACE_EVENLY: + *ptr += sprintf(*ptr, "space-evenly"); + break; + } + break; + case CSS_PROP_ALIGN_ITEMS: + switch (value) { + case ALIGN_ITEMS_STRETCH: + *ptr += sprintf(*ptr, "stretch"); + break; + case ALIGN_ITEMS_FLEX_START: + *ptr += sprintf(*ptr, "flex-start"); + break; + case ALIGN_ITEMS_FLEX_END: + *ptr += sprintf(*ptr, "flex-end"); + break; + case ALIGN_ITEMS_CENTER: + *ptr += sprintf(*ptr, "center"); + break; + case ALIGN_ITEMS_BASELINE: + *ptr += sprintf(*ptr, "baseline"); + break; + } + break; + case CSS_PROP_ALIGN_SELF: + switch (value) { + case ALIGN_SELF_STRETCH: + *ptr += sprintf(*ptr, "stretch"); + break; + case ALIGN_SELF_FLEX_START: + *ptr += sprintf(*ptr, "flex-start"); + break; + case ALIGN_SELF_FLEX_END: + *ptr += sprintf(*ptr, "flex-end"); + break; + case ALIGN_SELF_CENTER: + *ptr += sprintf(*ptr, "center"); + break; + case ALIGN_SELF_BASELINE: + *ptr += sprintf(*ptr, "baseline"); + break; + case ALIGN_SELF_AUTO: + *ptr += sprintf(*ptr, "auto"); + break; + } + break; case CSS_PROP_AZIMUTH: switch (value & ~AZIMUTH_BEHIND) { case AZIMUTH_ANGLE: @@ -1658,6 +1734,12 @@ void dump_bytecode(css_style *style, char **ptr, uint32_t depth) case DISPLAY_NONE: *ptr += sprintf(*ptr, "none"); break; + case DISPLAY_FLEX: + *ptr += sprintf(*ptr, "flex"); + break; + case DISPLAY_INLINE_FLEX: + *ptr += sprintf(*ptr, "inline-flex"); + break; } break; case CSS_PROP_ELEVATION: @@ -1699,6 +1781,77 @@ void dump_bytecode(css_style *style, char **ptr, uint32_t depth) break; } break; + case CSS_PROP_FLEX_BASIS: + switch (value) { + case FLEX_BASIS_AUTO: + *ptr += sprintf(*ptr, "auto"); + break; + case FLEX_BASIS_CONTENT: + *ptr += sprintf(*ptr, "content"); + break; + case FLEX_BASIS_SET: + { + uint32_t unit; + css_fixed val = *((css_fixed *) bytecode); + ADVANCE(sizeof(val)); + unit = *((uint32_t *) bytecode); + ADVANCE(sizeof(unit)); + dump_unit(val, unit, ptr); + } + break; + } + break; + case CSS_PROP_FLEX_DIRECTION: + switch (value) { + case FLEX_DIRECTION_ROW: + *ptr += sprintf(*ptr, "row"); + break; + case FLEX_DIRECTION_COLUMN: + *ptr += sprintf(*ptr, "column"); + break; + case FLEX_DIRECTION_ROW_REVERSE: + *ptr += sprintf(*ptr, "row-reverse"); + break; + case FLEX_DIRECTION_COLUMN_REVERSE: + *ptr += sprintf(*ptr, "column-reverse"); + break; + } + break; + case CSS_PROP_FLEX_GROW: + switch (value) { + case FLEX_GROW_SET: + { + css_fixed val = *((css_fixed *) bytecode); + ADVANCE(sizeof(val)); + dump_number(val, ptr); + } + break; + } + break; + case CSS_PROP_FLEX_SHRINK: + switch (value) { + case FLEX_SHRINK_SET: + { + css_fixed val = *((css_fixed *) bytecode); + ADVANCE(sizeof(val)); + dump_number(val, ptr); + } + break; + } + break; + case CSS_PROP_FLEX_WRAP: + switch (value) { + case FLEX_WRAP_NOWRAP: + *ptr += sprintf(*ptr, "nowrap"); + break; + case FLEX_WRAP_WRAP: + *ptr += sprintf(*ptr, "wrap"); + break; + case FLEX_WRAP_WRAP_REVERSE: + *ptr += sprintf(*ptr, "wrap-reverse"); + break; + } + break; case CSS_PROP_FLOAT: switch (value) { case FLOAT_LEFT: @@ -1858,6 +2011,29 @@ void dump_bytecode(css_style *style, char **ptr, uint32_t depth) break; } break; + case CSS_PROP_JUSTIFY_CONTENT: + switch (value) { + case JUSTIFY_CONTENT_FLEX_START: + *ptr += sprintf(*ptr, "flex-start"); + break; + case JUSTIFY_CONTENT_FLEX_END: + *ptr += sprintf(*ptr, "flex-end"); + break; + case JUSTIFY_CONTENT_CENTER: + *ptr += sprintf(*ptr, "center"); + break; + case JUSTIFY_CONTENT_SPACE_BETWEEN: + *ptr += sprintf(*ptr, "space-between"); + break; + case JUSTIFY_CONTENT_SPACE_AROUND: + *ptr += sprintf(*ptr, "space-around"); + break; + case JUSTIFY_CONTENT_SPACE_EVENLY: + *ptr += sprintf(*ptr, "space-evenly"); + break; + } + break; + case CSS_PROP_LETTER_SPACING: case CSS_PROP_WORD_SPACING: assert(LETTER_SPACING_SET == @@ -1991,6 +2167,31 @@ void dump_bytecode(css_style *style, char **ptr, uint32_t depth) break; } break; + case CSS_PROP_MIN_HEIGHT: + case CSS_PROP_MIN_WIDTH: + assert(MIN_HEIGHT_SET == + (enum op_min_height) + MIN_WIDTH_SET); + assert(MIN_HEIGHT_AUTO == + (enum op_min_height) + MIN_WIDTH_AUTO); + + switch (value) { + case MIN_HEIGHT_SET: + { + uint32_t unit; + css_fixed val = *((css_fixed *) bytecode); + ADVANCE(sizeof(val)); + unit = *((uint32_t *) bytecode); + ADVANCE(sizeof(unit)); + dump_unit(val, unit, ptr); + } + break; + case MIN_HEIGHT_AUTO: + *ptr += sprintf(*ptr, "auto"); + break; + } + break; case CSS_PROP_OPACITY: switch (value) { case OPACITY_SET: @@ -2002,33 +2203,36 @@ void dump_bytecode(css_style *style, char **ptr, uint32_t depth) break; } break; + case CSS_PROP_ORDER: + switch (value) { + case ORDER_SET: + { + css_fixed val = *((css_fixed *) bytecode); + ADVANCE(sizeof(val)); + dump_number(val, ptr); + } + break; + } + break; case CSS_PROP_PADDING_TOP: case CSS_PROP_PADDING_RIGHT: case CSS_PROP_PADDING_BOTTOM: case CSS_PROP_PADDING_LEFT: - case CSS_PROP_MIN_HEIGHT: - case CSS_PROP_MIN_WIDTH: case CSS_PROP_PAUSE_AFTER: case CSS_PROP_PAUSE_BEFORE: case CSS_PROP_TEXT_INDENT: - assert(MIN_HEIGHT_SET == - (enum op_min_height) - MIN_WIDTH_SET); - assert(MIN_HEIGHT_SET == - (enum op_min_height) + assert(TEXT_INDENT_SET == + (enum op_text_indent) PADDING_SET); - assert(MIN_HEIGHT_SET == - (enum op_min_height) + assert(TEXT_INDENT_SET == + (enum op_text_indent) PAUSE_AFTER_SET); - assert(MIN_HEIGHT_SET == - (enum op_min_height) + assert(TEXT_INDENT_SET == + (enum op_text_indent) PAUSE_BEFORE_SET); - assert(MIN_HEIGHT_SET == - (enum op_min_height) - TEXT_INDENT_SET); switch (value) { - case MIN_HEIGHT_SET: + case TEXT_INDENT_SET: { uint32_t unit; css_fixed val = *((css_fixed *) bytecode); -- cgit v1.2.3 From e0f8cddcc76ef5cb2b6b1082232a2de53aad9653 Mon Sep 17 00:00:00 2001 From: Lucas Neves Date: Thu, 28 Sep 2017 15:53:39 +0000 Subject: Tests: Add support and selection tests for the flexbox properties. --- test/data/select/tests1.dat | 6213 +++++++++++++++++++++++++++++++++++++++++++ test/dump_computed.h | 277 ++ 2 files changed, 6490 insertions(+) diff --git a/test/data/select/tests1.dat b/test/data/select/tests1.dat index ff8bbe1..ea0d237 100644 --- a/test/data/select/tests1.dat +++ b/test/data/select/tests1.dat @@ -6,6 +6,9 @@ div { display: block; } div { display: inline; } #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -49,6 +52,11 @@ cursor: auto direction: ltr display: block empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -56,6 +64,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -71,6 +80,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -110,6 +120,9 @@ p { display: block; } #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -153,6 +166,11 @@ cursor: auto direction: ltr display: block empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -160,6 +178,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -175,6 +194,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -218,6 +238,9 @@ div#foo { background-color: #bbc; } div#foo { float: right; } #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -261,6 +284,11 @@ cursor: auto direction: ltr display: block empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -268,6 +296,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -283,6 +312,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -327,6 +357,9 @@ div#foo { background-color: #bbc; } div p.green { float: left !important; } #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -370,6 +403,11 @@ cursor: auto direction: ltr display: table-cell empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -377,6 +415,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -392,6 +431,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -436,6 +476,9 @@ div.moose > div { border-top-style: none; } div.moose > div + div { border-top-style: solid; } #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -479,6 +522,11 @@ cursor: auto direction: ltr display: block empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -486,6 +534,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -501,6 +550,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -545,6 +595,9 @@ div.moose > div { border-top-style: none; } div.moose > div + div { border-top-style: solid; } #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -588,6 +641,11 @@ cursor: auto direction: ltr display: block empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -595,6 +653,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -610,6 +669,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -644,6 +704,9 @@ z-index: auto div { color: currentColor; } #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -687,6 +750,11 @@ cursor: auto direction: ltr display: inline empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -694,6 +762,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -709,6 +778,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -744,6 +814,9 @@ div { background-color: #000; } div:active { background-color: #bbc; } #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #ff000000 background-image: none @@ -787,6 +860,11 @@ cursor: auto direction: ltr display: inline empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -794,6 +872,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -809,6 +888,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -844,6 +924,9 @@ z-index: auto p:first-child { background-color: #bbc; } #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #ffbbbbcc background-image: none @@ -887,6 +970,11 @@ cursor: auto direction: ltr display: inline empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -894,6 +982,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -909,6 +998,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -943,6 +1033,9 @@ z-index: auto div { quotes: "a" "b" } #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -986,6 +1079,11 @@ cursor: auto direction: ltr display: inline empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -993,6 +1091,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -1008,6 +1107,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -1047,6 +1147,9 @@ div, p { display: block; } div p + p { background-attachment: fixed; } #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: fixed background-color: #00000000 background-image: none @@ -1090,6 +1193,11 @@ cursor: auto direction: ltr display: block empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -1097,6 +1205,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -1112,6 +1221,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -1151,6 +1261,9 @@ div, p { display: block; } div p + p { background-attachment: fixed; } #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -1194,6 +1307,11 @@ cursor: auto direction: ltr display: block empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -1201,6 +1319,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -1216,6 +1335,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -1256,6 +1376,9 @@ div p { background-attachment: scroll; } div p + p { background-attachment: fixed; } #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -1299,6 +1422,11 @@ cursor: auto direction: ltr display: block empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -1306,6 +1434,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -1321,6 +1450,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -1364,6 +1494,9 @@ div p + p { background-image: url("Sonic2.png"); background-position: center; } div p + p { background-image: url("Sonic_the_Hedgehog.png"); background-position: bottom right; } #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: url('Sonic_the_Hedgehog.png') @@ -1407,6 +1540,11 @@ cursor: auto direction: ltr display: block empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -1414,6 +1552,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -1429,6 +1568,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -1471,6 +1611,9 @@ div p + p { background-image: url("Sonic2.png"); } div p + p { background-image: url("Sonic_the_Hedgehog.png"); background-repeat: repeat} #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: url('Sonic_the_Hedgehog.png') @@ -1514,6 +1657,11 @@ cursor: auto direction: ltr display: block empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -1521,6 +1669,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -1536,6 +1685,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -1584,6 +1734,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -1627,6 +1780,11 @@ cursor: auto direction: ltr display: table-row empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -1634,6 +1792,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -1649,6 +1808,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -1697,6 +1857,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -1740,6 +1903,11 @@ cursor: auto direction: ltr display: table-cell empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -1747,6 +1915,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -1762,6 +1931,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -1810,6 +1980,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -1853,6 +2026,11 @@ cursor: auto direction: ltr display: table-cell empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -1860,6 +2038,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -1875,6 +2054,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -1927,6 +2107,9 @@ td,th {border-top-style: none;border-right-style: hidden;border-bottom-style: do tr > td {border-top-width: thin;border-right-width: medium;border-bottom-width: thick;border-left-width: 2px;} #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -1970,6 +2153,11 @@ cursor: auto direction: ltr display: table-cell empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -1977,6 +2165,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -1992,6 +2181,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -2043,6 +2233,9 @@ td,th {border-top-style: solid;border-right-style: double;border-bottom-style: g tr > td {border-top-width: 0;border-right-width: 2em;border-bottom-width: thick;border-left-width: -2px;} #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -2086,6 +2279,11 @@ cursor: auto direction: ltr display: table-cell empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -2093,6 +2291,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -2108,6 +2307,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -2157,6 +2357,9 @@ td,th {display:table-cell;} .hedgehog > tr > td {border-style:inset outset;} #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -2200,6 +2403,11 @@ cursor: auto direction: ltr display: table-cell empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -2207,6 +2415,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -2222,6 +2431,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -2270,6 +2480,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -2313,6 +2526,11 @@ cursor: auto direction: ltr display: table empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -2320,6 +2538,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -2335,6 +2554,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -2383,6 +2603,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -2426,6 +2649,11 @@ cursor: auto direction: ltr display: table empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -2433,6 +2661,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -2448,6 +2677,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -2496,6 +2726,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #ff1122ee background-image: url('sonic-the-hedgehog.png') @@ -2539,6 +2772,11 @@ cursor: auto direction: ltr display: table empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -2546,6 +2784,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -2561,6 +2800,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -2609,6 +2849,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -2652,6 +2895,11 @@ cursor: crosshair direction: ltr display: table empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -2659,6 +2907,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -2674,6 +2923,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -2722,6 +2972,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -2765,6 +3018,11 @@ cursor: default direction: ltr display: table empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -2772,6 +3030,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -2787,6 +3046,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -2835,6 +3095,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -2878,6 +3141,11 @@ cursor: pointer direction: ltr display: table empty-cells: hide +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -2885,6 +3153,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -2900,6 +3169,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -2948,6 +3218,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -2991,6 +3264,11 @@ cursor: move direction: ltr display: table empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -2998,6 +3276,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -3013,6 +3292,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -3061,6 +3341,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -3104,6 +3387,11 @@ cursor: e-resize direction: ltr display: table empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -3111,6 +3399,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -3126,6 +3415,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -3174,6 +3464,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -3217,6 +3510,11 @@ cursor: ne-resize direction: ltr display: table empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -3224,6 +3522,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -3239,6 +3538,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -3287,6 +3587,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -3330,6 +3633,11 @@ cursor: nw-resize direction: ltr display: table empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 14.391pt @@ -3337,6 +3645,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -3352,6 +3661,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -3400,6 +3710,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -3443,6 +3756,11 @@ cursor: n-resize direction: ltr display: table empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 14.391pt @@ -3450,6 +3768,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -3465,6 +3784,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -3513,6 +3833,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -3556,6 +3879,11 @@ cursor: se-resize direction: ltr display: table empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 24pt @@ -3563,6 +3891,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -3578,6 +3907,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -3626,6 +3956,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -3669,6 +4002,11 @@ cursor: sw-resize direction: ltr display: table empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 18pt @@ -3676,6 +4014,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -3691,6 +4030,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -3739,6 +4079,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -3782,6 +4125,11 @@ cursor: s-resize direction: ltr display: table empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 13.500pt @@ -3789,6 +4137,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -3804,6 +4153,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -3852,6 +4202,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -3895,6 +4248,11 @@ cursor: w-resize direction: ltr display: table empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -3902,6 +4260,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -3917,6 +4276,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -3965,6 +4325,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -4008,6 +4371,11 @@ cursor: text direction: ltr display: table empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 9.750pt @@ -4015,6 +4383,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -4030,6 +4399,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -4078,6 +4448,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -4121,6 +4494,11 @@ cursor: wait direction: ltr display: table empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 7.500pt @@ -4128,6 +4506,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -4143,6 +4522,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -4191,6 +4571,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -4234,6 +4617,11 @@ cursor: help direction: ltr display: table empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 6.750pt @@ -4241,6 +4629,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -4256,6 +4645,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -4304,6 +4694,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -4347,6 +4740,11 @@ cursor: progress direction: ltr display: table empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 40px @@ -4354,6 +4752,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -4369,6 +4768,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 0.500 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -4417,6 +4817,9 @@ td,th {display:table-cell;} #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -4460,6 +4863,11 @@ cursor: url('sonic-team.png') pointer direction: ltr display: table empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -4467,6 +4875,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -4482,6 +4891,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -4523,6 +4933,9 @@ div#foo { background-color: #bbc; letter-spacing: 200%; } div#foo p { letter-spacing: 300%; } #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -4566,6 +4979,11 @@ cursor: auto direction: ltr display: none empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -4573,6 +4991,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -4588,6 +5007,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -4629,6 +5049,9 @@ div#foo { background-color: #bbc; letter-spacing: 20mm; } div#foo p { letter-spacing: 300px; } #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -4672,6 +5095,11 @@ cursor: auto direction: ltr display: none empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -4679,6 +5107,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: 300px line-height: normal @@ -4694,6 +5123,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -4735,6 +5165,9 @@ div#foo p { letter-spacing: inherit; } div p { letter-spacing: horizontal-tb; } #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -4778,6 +5211,11 @@ cursor: auto direction: ltr display: block empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -4785,6 +5223,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -4800,6 +5239,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -4838,6 +5278,9 @@ p{display: block;} p{column-count: 2; column-rule-color: #bbc; column-rule-style: solid; column-rule-width: 2px; column-span: all; column-width: 6em;} #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -4881,6 +5324,11 @@ cursor: auto direction: ltr display: block empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -4888,6 +5336,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -4903,6 +5352,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -4942,6 +5392,9 @@ p { display: block; break-after: avoid; break-before: column; } #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -4985,6 +5438,11 @@ cursor: auto direction: ltr display: block empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -4992,6 +5450,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -5007,6 +5466,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -5046,6 +5506,9 @@ p { display: block; break-after: avoid-page; break-before: always; } #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -5089,6 +5552,11 @@ cursor: auto direction: ltr display: block empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -5096,6 +5564,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -5111,6 +5580,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -5150,6 +5620,9 @@ p { display: block; break-after: avoid-page; break-before: always; break-inside: #author #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -5193,6 +5666,11 @@ cursor: auto direction: ltr display: block empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -5200,6 +5678,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -5215,6 +5694,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -5250,6 +5730,9 @@ div { box-sizing: inherit; } #user #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -5293,6 +5776,11 @@ cursor: auto direction: ltr display: inline empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -5300,6 +5788,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -5315,6 +5804,7 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px @@ -5351,6 +5841,9 @@ div { box-sizing: inherit; } div { box-sizing: border-box; } #errors #expected +align-content: stretch +align-items: stretch +align-self: auto background-attachment: scroll background-color: #00000000 background-image: none @@ -5394,6 +5887,11 @@ cursor: auto direction: ltr display: inline empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap float: none font-family: sans-serif font-size: 12pt @@ -5401,6 +5899,7 @@ font-style: normal font-variant: normal font-weight: normal height: auto +justify-content: flex-start left: auto letter-spacing: normal line-height: normal @@ -5416,6 +5915,5720 @@ max-width: none min-height: 0px min-width: 0px opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { align-content: space-between; align-items: stretch; align-self: flex-start; } +#user +#errors +#expected +align-content: space-between +align-items: stretch +align-self: flex-start +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { align-content: stretch; align-items: flex-start; align-self: flex-end; } +#user +#errors +#expected +align-content: stretch +align-items: flex-start +align-self: flex-end +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { align-content: flex-start; align-items: flex-end; align-self: center; } +#user +#errors +#expected +align-content: flex-start +align-items: flex-end +align-self: center +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { align-content: flex-end; align-items: center; align-self: baseline; } +#user +#errors +#expected +align-content: flex-end +align-items: center +align-self: baseline +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { align-content: center; align-items: baseline; align-self: auto; } +#user +#errors +#expected +align-content: center +align-items: baseline +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div +| p* +#ua +div { align-content: flex-end; } +p { align-content: inherit; align-items: stretch; align-self: flex-start; } +| div* +#ua +div { align-content: center; align-items: center; align-self: center; } +p { align-content: inherit; align-items: inherit; align-self: inherit; } +#user +#errors +#expected +align-content: center +align-items: center +align-self: center +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { align-content: space-around; align-items: stretch; align-self: stretch; } +#user +#errors +#expected +align-content: space-around +align-items: stretch +align-self: stretch +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { align-content: space-evenly; align-items: flex-start; align-self: stretch; } +#user +#errors +#expected +align-content: space-evenly +align-items: flex-start +align-self: stretch +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { align-content: center; align-items: center; align-self: center; } +#user +div { align-content: flex-end; align-items: flex-end; align-self: flex-end; } +#errors +#expected +align-content: flex-end +align-items: flex-end +align-self: flex-end +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset +# +#tree +| div* +#ua +div { flex: 2 3 10px; } +#user +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: 10px +flex-direction: row +flex-grow: 2.000 +flex-shrink: 3.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex: auto; } +#user +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 1.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex: none; } +#user +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 0.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex: 0; } +#user +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: 0px +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex: 0 0; } +#user +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: 0px +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex: 0 0 0; } +#user +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: 0px +flex-direction: row +flex-grow: 0.000 +flex-shrink: 0.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex: 3; } +#user +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: 0px +flex-direction: row +flex-grow: 3.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex: 3px; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: 3px +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex: 2 3em; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: 3em +flex-direction: row +flex-grow: 2.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex: 20 30; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: 0px +flex-direction: row +flex-grow: 20.000 +flex-shrink: 30.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex: 2 2 2px; } +#user +div { flex: 3 3; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: 0px +flex-direction: row +flex-grow: 3.000 +flex-shrink: 3.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex: 2 2 2px; } +#user +div { flex-grow: 3; flex-shrink: 3; flex-basis: 3px; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: 3px +flex-direction: row +flex-grow: 3.000 +flex-shrink: 3.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex: 0 0 0; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: 0px +flex-direction: row +flex-grow: 0.000 +flex-shrink: 0.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex-grow: 2; flex-basis: 20rem; } +#user +div { flex: none; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 0.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +| p +#ua +div { flex: 3 3 3%; } +p { flex: inherit; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: 3% +flex-direction: row +flex-grow: 3.000 +flex-shrink: 3.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div +| p* +#ua +div { flex: 3 3 3%; } +p { flex: inherit; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: 3% +flex-direction: row +flex-grow: 3.000 +flex-shrink: 3.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex-flow: nowrap; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex-flow: wrap; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: wrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex-flow: wrap-reverse; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: wrap-reverse +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex-flow: row; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex-flow: column; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: column +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex-flow: row-reverse; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row-reverse +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex-flow: column-reverse; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: column-reverse +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex-flow: column-reverse wrap-reverse; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: column-reverse +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: wrap-reverse +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div +| p* +#ua +div { flex-flow: column wrap; } +p {flex-flow: inherit; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: column +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: wrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div +| p* +#ua +div { flex-flow: row-reverse wrap-reverse; } +p { flex-direction: inherit; flex-wrap: inherit; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row-reverse +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: wrap-reverse +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex-basis: 4.5em; flex-grow: 2.37; flex-shrink: 0.899; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: 4.500em +flex-direction: row +flex-grow: 2.370 +flex-shrink: 0.899 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { justify-content: flex-start; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { justify-content: flex-end; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-end +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { justify-content: center; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: center +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { justify-content: space-between; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: space-between +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { justify-content: space-around; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: space-around +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { justify-content: space-evenly; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: space-evenly +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { justify-content: space-around; } +#user +div { justify-content: space-evenly; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: space-evenly +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div +| p* +#ua +div { justify-content: center; } +p { justify-content: inherit; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: center +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { order: 0; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { order: 5; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 5 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { order: -5; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: -5 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div +| p* +#ua +div { order: 7; } +p { order: inherit; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: 7 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { flex: 2.3 3.78 4.5em; flex-flow: column wrap; align-content: space-around; align-items: center; align-self: flex-end; justify-content: space-evenly; order: -1; } +#errors +#expected +align-content: space-around +align-items: center +align-self: flex-end +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: 4.500em +flex-direction: column +flex-grow: 2.300 +flex-shrink: 3.780 +flex-wrap: wrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: space-evenly +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: -1 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div +| p* +#ua +div { flex: 2.3 3.78 4.5em; flex-flow: column wrap; align-content: space-around; align-items: center; align-self: flex-end; justify-content: space-evenly; order: -1; } +p { flex: inherit; flex-flow: inherit; align-content: inherit; align-items: inherit; align-self: inherit; justify-content: inherit; order: inherit; } +#errors +#expected +align-content: space-around +align-items: center +align-self: flex-end +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline +empty-cells: show +flex-basis: 4.500em +flex-direction: column +flex-grow: 2.300 +flex-shrink: 3.780 +flex-wrap: wrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: space-evenly +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: 0px +min-width: 0px +opacity: 1.000 +order: -1 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { display: flex; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: flex +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: auto +min-width: auto +opacity: 1.000 +order: 0 +outline-color: invert +outline-style: none +outline-width: 2px +overflow-x: visible +overflow-y: visible +padding-top: 0px +padding-right: 0px +padding-bottom: 0px +padding-left: 0px +position: static +quotes: none +right: auto +table-layout: auto +text-align: default +text-decoration: none +text-indent: 0px +text-transform: none +top: auto +unicode-bidi: normal +vertical-align: baseline +visibility: visible +white-space: normal +width: auto +word-spacing: normal +writing-mode: horizontal-tb +z-index: auto +#reset + +#tree +| div* +#ua +div { display: inline-flex; } +#errors +#expected +align-content: stretch +align-items: stretch +align-self: auto +background-attachment: scroll +background-color: #00000000 +background-image: none +background-position: 0% 0% +background-repeat: repeat +border-collapse: separate +border-spacing: 0px 0px +border-top-color: #ff000000 +border-right-color: #ff000000 +border-bottom-color: #ff000000 +border-left-color: #ff000000 +border-top-style: none +border-right-style: none +border-bottom-style: none +border-left-style: none +border-top-width: 2px +border-right-width: 2px +border-bottom-width: 2px +border-left-width: 2px +bottom: auto +box-sizing: content-box +break-after: auto +break-before: auto +break-inside: auto +caption-side: top +clear: none +clip: auto +color: #ff000000 +column-count: auto +column-fill: balance +column-gap: normal +column-rule-color: #ff000000 +column-rule-style: none +column-rule-width: 2px +column-span: none +column-width: auto +content: normal +counter-increment: none +counter-reset: none +cursor: auto +direction: ltr +display: inline-flex +empty-cells: show +flex-basis: auto +flex-direction: row +flex-grow: 0.000 +flex-shrink: 1.000 +flex-wrap: nowrap +float: none +font-family: sans-serif +font-size: 12pt +font-style: normal +font-variant: normal +font-weight: normal +height: auto +justify-content: flex-start +left: auto +letter-spacing: normal +line-height: normal +list-style-image: none +list-style-position: outside +list-style-type: disc +margin-top: 0px +margin-right: 0px +margin-bottom: 0px +margin-left: 0px +max-height: none +max-width: none +min-height: auto +min-width: auto +opacity: 1.000 +order: 0 outline-color: invert outline-style: none outline-width: 2px diff --git a/test/dump_computed.h b/test/dump_computed.h index c9d699d..c33704a 100644 --- a/test/dump_computed.h +++ b/test/dump_computed.h @@ -153,6 +153,99 @@ static void dump_computed_style(const css_computed_style *style, char *buf, lwc_string **string_list = NULL; int32_t integer = 0; + /* align-content */ + val = css_computed_align_content(style); + switch (val) { + case CSS_ALIGN_CONTENT_INHERIT: + wrote = snprintf(ptr, *len, "align-content: inherit\n"); + break; + case CSS_ALIGN_CONTENT_STRETCH: + wrote = snprintf(ptr, *len, "align-content: stretch\n"); + break; + case CSS_ALIGN_CONTENT_FLEX_START: + wrote = snprintf(ptr, *len, "align-content: flex-start\n"); + break; + case CSS_ALIGN_CONTENT_FLEX_END: + wrote = snprintf(ptr, *len, "align-content: flex-end\n"); + break; + case CSS_ALIGN_CONTENT_CENTER: + wrote = snprintf(ptr, *len, "align-content: center\n"); + break; + case CSS_ALIGN_CONTENT_SPACE_BETWEEN: + wrote = snprintf(ptr, *len, "align-content: space-between\n"); + break; + case CSS_ALIGN_CONTENT_SPACE_AROUND: + wrote = snprintf(ptr, *len, "align-content: space-around\n"); + break; + case CSS_ALIGN_CONTENT_SPACE_EVENLY: + wrote = snprintf(ptr, *len, "align-content: space-evenly\n"); + break; + default: + wrote = 0; + break; + } + ptr += wrote; + *len -= wrote; + + /* align-items */ + val = css_computed_align_items(style); + switch (val) { + case CSS_ALIGN_ITEMS_INHERIT: + wrote = snprintf(ptr, *len, "align-items: inherit\n"); + break; + case CSS_ALIGN_ITEMS_STRETCH: + wrote = snprintf(ptr, *len, "align-items: stretch\n"); + break; + case CSS_ALIGN_ITEMS_FLEX_START: + wrote = snprintf(ptr, *len, "align-items: flex-start\n"); + break; + case CSS_ALIGN_ITEMS_FLEX_END: + wrote = snprintf(ptr, *len, "align-items: flex-end\n"); + break; + case CSS_ALIGN_ITEMS_CENTER: + wrote = snprintf(ptr, *len, "align-items: center\n"); + break; + case CSS_ALIGN_ITEMS_BASELINE: + wrote = snprintf(ptr, *len, "align-items: baseline\n"); + break; + default: + wrote = 0; + break; + } + ptr += wrote; + *len -= wrote; + + /* align-self */ + val = css_computed_align_self(style); + switch (val) { + case CSS_ALIGN_SELF_INHERIT: + wrote = snprintf(ptr, *len, "align-self: inherit\n"); + break; + case CSS_ALIGN_SELF_STRETCH: + wrote = snprintf(ptr, *len, "align-self: stretch\n"); + break; + case CSS_ALIGN_SELF_FLEX_START: + wrote = snprintf(ptr, *len, "align-self: flex-start\n"); + break; + case CSS_ALIGN_SELF_FLEX_END: + wrote = snprintf(ptr, *len, "align-self: flex-end\n"); + break; + case CSS_ALIGN_SELF_CENTER: + wrote = snprintf(ptr, *len, "align-self: center\n"); + break; + case CSS_ALIGN_SELF_BASELINE: + wrote = snprintf(ptr, *len, "align-self: baseline\n"); + break; + case CSS_ALIGN_SELF_AUTO: + wrote = snprintf(ptr, *len, "align-self: auto\n"); + break; + default: + wrote = 0; + break; + } + ptr += wrote; + *len -= wrote; + /* background-attachment */ val = css_computed_background_attachment(style); switch (val) { @@ -1474,6 +1567,12 @@ static void dump_computed_style(const css_computed_style *style, char *buf, case CSS_DISPLAY_NONE: wrote = snprintf(ptr, *len, "display: none\n"); break; + case CSS_DISPLAY_FLEX: + wrote = snprintf(ptr, *len, "display: flex\n"); + break; + case CSS_DISPLAY_INLINE_FLEX: + wrote = snprintf(ptr, *len, "display: inline-flex\n"); + break; default: wrote = 0; break; @@ -1500,6 +1599,131 @@ static void dump_computed_style(const css_computed_style *style, char *buf, ptr += wrote; *len -= wrote; + /* flex-basis */ + val = css_computed_flex_basis(style, &len1, &unit1); + switch (val) { + case CSS_FLEX_BASIS_INHERIT: + wrote = snprintf(ptr, *len, "flex-basis: inherit\n"); + break; + case CSS_FLEX_BASIS_AUTO: + wrote = snprintf(ptr, *len, "flex-basis: auto\n"); + break; + case CSS_FLEX_BASIS_CONTENT: + wrote = snprintf(ptr, *len, "flex-basis: content\n"); + break; + case CSS_FLEX_BASIS_SET: + wrote = snprintf(ptr, *len, "flex-basis: "); + ptr += wrote; + *len -= wrote; + + wrote = dump_css_unit(len1, unit1, ptr, *len); + ptr += wrote; + *len -= wrote; + + wrote = snprintf(ptr, *len, "\n"); + break; + default: + wrote = 0; + break; + } + ptr += wrote; + *len -= wrote; + + /* flex-direction */ + val = css_computed_flex_direction(style); + switch (val) { + case CSS_FLEX_DIRECTION_INHERIT: + wrote = snprintf(ptr, *len, "flex-direction: inherit\n"); + break; + case CSS_FLEX_DIRECTION_ROW: + wrote = snprintf(ptr, *len, "flex-direction: row\n"); + break; + case CSS_FLEX_DIRECTION_ROW_REVERSE: + wrote = snprintf(ptr, *len, "flex-direction: row-reverse\n"); + break; + case CSS_FLEX_DIRECTION_COLUMN: + wrote = snprintf(ptr, *len, "flex-direction: column\n"); + break; + case CSS_FLEX_DIRECTION_COLUMN_REVERSE: + wrote = snprintf(ptr, *len, "flex-direction: column-reverse\n"); + break; + default: + wrote = 0; + break; + } + ptr += wrote; + *len -= wrote; + + /* flex-grow */ + val = css_computed_flex_grow(style, &len1); + switch (val) { + case CSS_FLEX_GROW_INHERIT: + wrote = snprintf(ptr, *len, "flex-grow: inherit\n"); + break; + case CSS_FLEX_GROW_SET: + wrote = snprintf(ptr, *len, "flex-grow: "); + ptr += wrote; + *len -= wrote; + + wrote = dump_css_fixed(len1, ptr, *len); + ptr += wrote; + *len -= wrote; + + wrote = snprintf(ptr, *len, "\n"); + break; + default: + wrote = 0; + break; + } + ptr += wrote; + *len -= wrote; + + /* flex-shrink */ + val = css_computed_flex_shrink(style, &len1); + switch (val) { + case CSS_FLEX_SHRINK_INHERIT: + wrote = snprintf(ptr, *len, "flex-shrink: inherit\n"); + break; + case CSS_FLEX_SHRINK_SET: + wrote = snprintf(ptr, *len, "flex-shrink: "); + ptr += wrote; + *len -= wrote; + + wrote = dump_css_fixed(len1, ptr, *len); + ptr += wrote; + *len -= wrote; + + wrote = snprintf(ptr, *len, "\n"); + break; + default: + wrote = 0; + break; + } + ptr += wrote; + *len -= wrote; + + /* flex-wrap */ + val = css_computed_flex_wrap(style); + switch (val) { + case CSS_FLEX_WRAP_INHERIT: + wrote = snprintf(ptr, *len, "flex-wrap: inherit\n"); + break; + case CSS_FLEX_WRAP_NOWRAP: + wrote = snprintf(ptr, *len, "flex-wrap: nowrap\n"); + break; + case CSS_FLEX_WRAP_WRAP: + wrote = snprintf(ptr, *len, "flex-wrap: wrap\n"); + break; + case CSS_FLEX_WRAP_WRAP_REVERSE: + wrote = snprintf(ptr, *len, "flex-wrap: wrap-reverse\n"); + break; + default: + wrote = 0; + break; + } + ptr += wrote; + *len -= wrote; + /* float */ val = css_computed_float(style); switch (val) { @@ -1736,6 +1960,37 @@ static void dump_computed_style(const css_computed_style *style, char *buf, ptr += wrote; *len -= wrote; + /* justify-content */ + val = css_computed_justify_content(style); + switch (val) { + case CSS_JUSTIFY_CONTENT_INHERIT: + wrote = snprintf(ptr, *len, "justify-content: inherit\n"); + break; + case CSS_JUSTIFY_CONTENT_FLEX_START: + wrote = snprintf(ptr, *len, "justify-content: flex-start\n"); + break; + case CSS_JUSTIFY_CONTENT_FLEX_END: + wrote = snprintf(ptr, *len, "justify-content: flex-end\n"); + break; + case CSS_JUSTIFY_CONTENT_CENTER: + wrote = snprintf(ptr, *len, "justify-content: center\n"); + break; + case CSS_JUSTIFY_CONTENT_SPACE_BETWEEN: + wrote = snprintf(ptr, *len, "justify-content: space-between\n"); + break; + case CSS_JUSTIFY_CONTENT_SPACE_AROUND: + wrote = snprintf(ptr, *len, "justify-content: space-around\n"); + break; + case CSS_JUSTIFY_CONTENT_SPACE_EVENLY: + wrote = snprintf(ptr, *len, "justify-content: space-evenly\n"); + break; + default: + wrote = 0; + break; + } + ptr += wrote; + *len -= wrote; + /* left */ val = css_computed_left(style, &len1, &unit1); switch (val) { @@ -2090,6 +2345,9 @@ static void dump_computed_style(const css_computed_style *style, char *buf, case CSS_MIN_HEIGHT_INHERIT: wrote = snprintf(ptr, *len, "min-height: inherit\n"); break; + case CSS_MIN_HEIGHT_AUTO: + wrote = snprintf(ptr, *len, "min-height: auto\n"); + break; case CSS_MIN_HEIGHT_SET: wrote = snprintf(ptr, *len, "min-height: "); ptr += wrote; @@ -2114,6 +2372,9 @@ static void dump_computed_style(const css_computed_style *style, char *buf, case CSS_MIN_WIDTH_INHERIT: wrote = snprintf(ptr, *len, "min-width: inherit\n"); break; + case CSS_MIN_WIDTH_AUTO: + wrote = snprintf(ptr, *len, "min-width: auto\n"); + break; case CSS_MIN_WIDTH_SET: wrote = snprintf(ptr, *len, "min-width: "); ptr += wrote; @@ -2156,6 +2417,22 @@ static void dump_computed_style(const css_computed_style *style, char *buf, ptr += wrote; *len -= wrote; + /* order */ + val = css_computed_order(style, &integer); + switch (val) { + case CSS_ORDER_INHERIT: + wrote = snprintf(ptr, *len, "order: inherit\n"); + break; + case CSS_ORDER_SET: + wrote = snprintf(ptr, *len, "order: %d\n", integer); + break; + default: + wrote = 0; + break; + } + ptr += wrote; + *len -= wrote; + /* outline-color */ val = css_computed_outline_color(style, &color); switch (val) { -- cgit v1.2.3 From 2ab29ddb34b452fdd8e78fd15945495be3b0340a Mon Sep 17 00:00:00 2001 From: Lucas Neves Date: Sat, 30 Sep 2017 16:21:48 -0400 Subject: Fixes use of spaces instead of tabs for whitespace. --- test/dump_computed.h | 122 +++++++++++++++++++++++++-------------------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/test/dump_computed.h b/test/dump_computed.h index c33704a..2a8b009 100644 --- a/test/dump_computed.h +++ b/test/dump_computed.h @@ -283,8 +283,8 @@ static void dump_computed_style(const css_computed_style *style, char *buf, /* background-image */ val = css_computed_background_image(style, &url); - if (val == CSS_BACKGROUND_IMAGE_INHERIT) { - wrote = snprintf(ptr, *len, "background-image: inherit\n"); + if (val == CSS_BACKGROUND_IMAGE_INHERIT) { + wrote = snprintf(ptr, *len, "background-image: inherit\n"); } else if (val == CSS_BACKGROUND_IMAGE_IMAGE && url != NULL) { wrote = snprintf(ptr, *len, "background-image: url('%.*s')\n", (int) lwc_string_length(url), @@ -301,10 +301,10 @@ static void dump_computed_style(const css_computed_style *style, char *buf, val = css_computed_background_position(style, &len1, &unit1, &len2, &unit2); if (val == CSS_BACKGROUND_POSITION_INHERIT) { - wrote = snprintf(ptr, *len, "background-position: inherit\n"); - ptr += wrote; - *len -= wrote; - } else if (val == CSS_BACKGROUND_POSITION_SET) { + wrote = snprintf(ptr, *len, "background-position: inherit\n"); + ptr += wrote; + *len -= wrote; + } else if (val == CSS_BACKGROUND_POSITION_SET) { wrote = snprintf(ptr, *len, "background-position: "); ptr += wrote; *len -= wrote; @@ -372,10 +372,10 @@ static void dump_computed_style(const css_computed_style *style, char *buf, /* border-spacing */ val = css_computed_border_spacing(style, &len1, &unit1, &len2, &unit2); - if (val == CSS_BORDER_SPACING_INHERIT) { - wrote = snprintf(ptr, *len, "border-spacing: inherit\n"); - ptr += wrote; - *len -= wrote; + if (val == CSS_BORDER_SPACING_INHERIT) { + wrote = snprintf(ptr, *len, "border-spacing: inherit\n"); + ptr += wrote; + *len -= wrote; } else if (val == CSS_BORDER_SPACING_SET) { wrote = snprintf(ptr, *len, "border-spacing: "); ptr += wrote; @@ -1035,13 +1035,13 @@ static void dump_computed_style(const css_computed_style *style, char *buf, /* color */ val = css_computed_color(style, &color); - if (val == CSS_COLOR_INHERIT) { - wrote = snprintf(ptr, *len, "color: inherit\n"); + if (val == CSS_COLOR_INHERIT) { + wrote = snprintf(ptr, *len, "color: inherit\n"); } else if (val == CSS_COLOR_COLOR) { wrote = snprintf(ptr, *len, "color: #%08x\n", color); } - ptr += wrote; - *len -= wrote; + ptr += wrote; + *len -= wrote; /* column-count */ val = css_computed_column_count(style, &integer); @@ -1122,8 +1122,8 @@ static void dump_computed_style(const css_computed_style *style, char *buf, color); break; } - ptr += wrote; - *len -= wrote; + ptr += wrote; + *len -= wrote; /* column-rule-style */ val = css_computed_column_rule_style(style); @@ -1357,9 +1357,9 @@ static void dump_computed_style(const css_computed_style *style, char *buf, /* counter-increment */ val = css_computed_counter_increment(style, &counter); - if (val == CSS_COUNTER_INCREMENT_INHERIT) { - wrote = snprintf(ptr, *len, "counter-increment: inherit\n"); - } else if (counter == NULL) { + if (val == CSS_COUNTER_INCREMENT_INHERIT) { + wrote = snprintf(ptr, *len, "counter-increment: inherit\n"); + } else if (counter == NULL) { wrote = snprintf(ptr, *len, "counter-increment: none\n"); } else { wrote = snprintf(ptr, *len, "counter-increment:"); @@ -1387,8 +1387,8 @@ static void dump_computed_style(const css_computed_style *style, char *buf, /* counter-reset */ val = css_computed_counter_reset(style, &counter); - if (val == CSS_COUNTER_RESET_INHERIT) { - wrote = snprintf(ptr, *len, "counter-reset: inherit\n"); + if (val == CSS_COUNTER_RESET_INHERIT) { + wrote = snprintf(ptr, *len, "counter-reset: inherit\n"); } else if (counter == NULL) { wrote = snprintf(ptr, *len, "counter-reset: none\n"); } else { @@ -1657,9 +1657,9 @@ static void dump_computed_style(const css_computed_style *style, char *buf, /* flex-grow */ val = css_computed_flex_grow(style, &len1); switch (val) { - case CSS_FLEX_GROW_INHERIT: - wrote = snprintf(ptr, *len, "flex-grow: inherit\n"); - break; + case CSS_FLEX_GROW_INHERIT: + wrote = snprintf(ptr, *len, "flex-grow: inherit\n"); + break; case CSS_FLEX_GROW_SET: wrote = snprintf(ptr, *len, "flex-grow: "); ptr += wrote; @@ -1681,9 +1681,9 @@ static void dump_computed_style(const css_computed_style *style, char *buf, /* flex-shrink */ val = css_computed_flex_shrink(style, &len1); switch (val) { - case CSS_FLEX_SHRINK_INHERIT: - wrote = snprintf(ptr, *len, "flex-shrink: inherit\n"); - break; + case CSS_FLEX_SHRINK_INHERIT: + wrote = snprintf(ptr, *len, "flex-shrink: inherit\n"); + break; case CSS_FLEX_SHRINK_SET: wrote = snprintf(ptr, *len, "flex-shrink: "); ptr += wrote; @@ -1749,10 +1749,10 @@ static void dump_computed_style(const css_computed_style *style, char *buf, /* font-family */ val = css_computed_font_family(style, &string_list); if (val == CSS_FONT_FAMILY_INHERIT) { - wrote = snprintf(ptr, *len, "font-family: inherit\n"); - ptr += wrote; - *len -= wrote; - } else { + wrote = snprintf(ptr, *len, "font-family: inherit\n"); + ptr += wrote; + *len -= wrote; + } else { wrote = snprintf(ptr, *len, "font-family:"); ptr += wrote; *len -= wrote; @@ -2085,8 +2085,8 @@ static void dump_computed_style(const css_computed_style *style, char *buf, /* list-style-image */ val = css_computed_list_style_image(style, &url); - if (val == CSS_LIST_STYLE_IMAGE_INHERIT) { - wrote = snprintf(ptr, *len, "list-style-image: inherit\n"); + if (val == CSS_LIST_STYLE_IMAGE_INHERIT) { + wrote = snprintf(ptr, *len, "list-style-image: inherit\n"); } else if (url != NULL) { wrote = snprintf(ptr, *len, "list-style-image: url('%.*s')\n", (int) lwc_string_length(url), @@ -2344,10 +2344,10 @@ static void dump_computed_style(const css_computed_style *style, char *buf, switch (val) { case CSS_MIN_HEIGHT_INHERIT: wrote = snprintf(ptr, *len, "min-height: inherit\n"); - break; + break; case CSS_MIN_HEIGHT_AUTO: wrote = snprintf(ptr, *len, "min-height: auto\n"); - break; + break; case CSS_MIN_HEIGHT_SET: wrote = snprintf(ptr, *len, "min-height: "); ptr += wrote; @@ -2369,12 +2369,12 @@ static void dump_computed_style(const css_computed_style *style, char *buf, /* min-width */ val = css_computed_min_width(style, &len1, &unit1); switch (val) { - case CSS_MIN_WIDTH_INHERIT: - wrote = snprintf(ptr, *len, "min-width: inherit\n"); - break; - case CSS_MIN_WIDTH_AUTO: - wrote = snprintf(ptr, *len, "min-width: auto\n"); - break; + case CSS_MIN_WIDTH_INHERIT: + wrote = snprintf(ptr, *len, "min-width: inherit\n"); + break; + case CSS_MIN_WIDTH_AUTO: + wrote = snprintf(ptr, *len, "min-width: auto\n"); + break; case CSS_MIN_WIDTH_SET: wrote = snprintf(ptr, *len, "min-width: "); ptr += wrote; @@ -2396,9 +2396,9 @@ static void dump_computed_style(const css_computed_style *style, char *buf, /* opacity */ val = css_computed_opacity(style, &len1); switch (val) { - case CSS_OPACITY_INHERIT: - wrote = snprintf(ptr, *len, "opacity: inherit\n"); - break; + case CSS_OPACITY_INHERIT: + wrote = snprintf(ptr, *len, "opacity: inherit\n"); + break; case CSS_OPACITY_SET: wrote = snprintf(ptr, *len, "opacity: "); ptr += wrote; @@ -2578,9 +2578,9 @@ static void dump_computed_style(const css_computed_style *style, char *buf, /* padding-top */ val = css_computed_padding_top(style, &len1, &unit1); switch (val) { - case CSS_PADDING_INHERIT: - wrote = snprintf(ptr, *len, "padding-top: inherit\n"); - break; + case CSS_PADDING_INHERIT: + wrote = snprintf(ptr, *len, "padding-top: inherit\n"); + break; case CSS_PADDING_SET: wrote = snprintf(ptr, *len, "padding-top: "); ptr += wrote; @@ -2602,9 +2602,9 @@ static void dump_computed_style(const css_computed_style *style, char *buf, /* padding-right */ val = css_computed_padding_right(style, &len1, &unit1); switch (val) { - case CSS_PADDING_INHERIT: - wrote = snprintf(ptr, *len, "padding-right: inherit\n"); - break; + case CSS_PADDING_INHERIT: + wrote = snprintf(ptr, *len, "padding-right: inherit\n"); + break; case CSS_PADDING_SET: wrote = snprintf(ptr, *len, "padding-right: "); ptr += wrote; @@ -2626,9 +2626,9 @@ static void dump_computed_style(const css_computed_style *style, char *buf, /* padding-bottom */ val = css_computed_padding_bottom(style, &len1, &unit1); switch (val) { - case CSS_PADDING_INHERIT: - wrote = snprintf(ptr, *len, "padding-bottom: inherit\n"); - break; + case CSS_PADDING_INHERIT: + wrote = snprintf(ptr, *len, "padding-bottom: inherit\n"); + break; case CSS_PADDING_SET: wrote = snprintf(ptr, *len, "padding-bottom: "); ptr += wrote; @@ -2650,9 +2650,9 @@ static void dump_computed_style(const css_computed_style *style, char *buf, /* padding-left */ val = css_computed_padding_left(style, &len1, &unit1); switch (val) { - case CSS_PADDING_INHERIT: - wrote = snprintf(ptr, *len, "padding-left: inherit\n"); - break; + case CSS_PADDING_INHERIT: + wrote = snprintf(ptr, *len, "padding-left: inherit\n"); + break; case CSS_PADDING_SET: wrote = snprintf(ptr, *len, "padding-left: "); ptr += wrote; @@ -2815,8 +2815,8 @@ static void dump_computed_style(const css_computed_style *style, char *buf, /* text-decoration */ val = css_computed_text_decoration(style); - if (val == CSS_TEXT_DECORATION_INHERIT) { - wrote = snprintf(ptr, *len, "text-decoration: inherit\n"); + if (val == CSS_TEXT_DECORATION_INHERIT) { + wrote = snprintf(ptr, *len, "text-decoration: inherit\n"); ptr += wrote; *len -= wrote; } else if (val == CSS_TEXT_DECORATION_NONE) { @@ -2857,9 +2857,9 @@ static void dump_computed_style(const css_computed_style *style, char *buf, /* text-indent */ val = css_computed_text_indent(style, &len1, &unit1); switch (val) { - case CSS_TEXT_INDENT_INHERIT: - wrote = snprintf(ptr, *len, "text-indent: inherit\n"); - break; + case CSS_TEXT_INDENT_INHERIT: + wrote = snprintf(ptr, *len, "text-indent: inherit\n"); + break; case CSS_TEXT_INDENT_SET: wrote = snprintf(ptr, *len, "text-indent: "); ptr += wrote; -- cgit v1.2.3 From 6d2bf7797ac10b36a270339ee381c11c3a52dbc9 Mon Sep 17 00:00:00 2001 From: Lucas Neves Date: Tue, 10 Oct 2017 20:30:29 +0000 Subject: Tests: Remove invalid lines from selection test. --- test/data/select/tests1.dat | 4 ---- 1 file changed, 4 deletions(-) diff --git a/test/data/select/tests1.dat b/test/data/select/tests1.dat index ea0d237..f8e6c38 100644 --- a/test/data/select/tests1.dat +++ b/test/data/select/tests1.dat @@ -6498,10 +6498,6 @@ z-index: auto | div | p* #ua -div { align-content: flex-end; } -p { align-content: inherit; align-items: stretch; align-self: flex-start; } -| div* -#ua div { align-content: center; align-items: center; align-self: center; } p { align-content: inherit; align-items: inherit; align-self: inherit; } #user -- cgit v1.2.3