diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bytecode/bytecode.h | 169 | ||||
-rw-r--r-- | src/bytecode/opcodes.h | 8 | ||||
-rw-r--r-- | src/parse/properties.c | 122 | ||||
-rw-r--r-- | src/select/properties.c | 290 | ||||
-rw-r--r-- | src/select/select.c | 43 |
5 files changed, 455 insertions, 177 deletions
diff --git a/src/bytecode/bytecode.h b/src/bytecode/bytecode.h index e773613..a0810e2 100644 --- a/src/bytecode/bytecode.h +++ b/src/bytecode/bytecode.h @@ -22,82 +22,99 @@ typedef enum opcode { OP_BACKGROUND_REPEAT = 0x005, OP_BORDER_COLLAPSE = 0x006, OP_BORDER_SPACING = 0x007, - OP_BORDER_TRBL_COLOR = 0x008, - OP_BORDER_TRBL_STYLE = 0x009, - OP_BORDER_TRBL_WIDTH = 0x00a, - OP_BOTTOM = 0x00b, - OP_CAPTION_SIDE = 0x00c, - OP_CLEAR = 0x00d, - OP_CLIP = 0x00e, - OP_COLOR = 0x00f, - OP_CONTENT = 0x010, - OP_COUNTER_INCREMENT = 0x011, - OP_COUNTER_RESET = 0x012, - OP_CUE_AFTER = 0x013, - OP_CUE_BEFORE = 0x014, - OP_CURSOR = 0x015, - OP_DIRECTION = 0x016, - OP_DISPLAY = 0x017, - OP_ELEVATION = 0x018, - OP_EMPTY_CELLS = 0x019, - OP_FLOAT = 0x01a, - OP_FONT_FAMILY = 0x01b, - OP_FONT_SIZE = 0x01c, - OP_FONT_STYLE = 0x01d, - OP_FONT_VARIANT = 0x01e, - OP_FONT_WEIGHT = 0x01f, - OP_HEIGHT = 0x020, - OP_LEFT = 0x021, - OP_LETTER_SPACING = 0x022, - OP_LINE_HEIGHT = 0x023, - OP_LIST_STYLE_IMAGE = 0x024, - OP_LIST_STYLE_POSITION = 0x025, - OP_LIST_STYLE_TYPE = 0x026, - OP_MARGIN_TRBL = 0x027, - OP_MAX_HEIGHT = 0x028, - OP_MAX_WIDTH = 0x029, - OP_MIN_HEIGHT = 0x02a, - OP_MIN_WIDTH = 0x02b, - OP_ORPHANS = 0x02c, - OP_OUTLINE_COLOR = 0x02d, - OP_OUTLINE_STYLE = 0x02e, - OP_OUTLINE_WIDTH = 0x02f, - OP_OVERFLOW = 0x030, - OP_PADDING_TRBL = 0x031, - OP_PAGE_BREAK_AFTER = 0x032, - OP_PAGE_BREAK_BEFORE = 0x033, - OP_PAGE_BREAK_INSIDE = 0x034, - OP_PAUSE_AFTER = 0x035, - OP_PAUSE_BEFORE = 0x036, - OP_PITCH_RANGE = 0x037, - OP_PITCH = 0x038, - OP_PLAY_DURING = 0x039, - OP_POSITION = 0x03a, - OP_QUOTES = 0x03b, - OP_RICHNESS = 0x03c, - OP_RIGHT = 0x03d, - OP_SPEAK_HEADER = 0x03e, - OP_SPEAK_NUMERAL = 0x03f, - OP_SPEAK_PUNCTUATION = 0x040, - OP_SPEAK = 0x041, - OP_SPEECH_RATE = 0x042, - OP_STRESS = 0x043, - OP_TABLE_LAYOUT = 0x044, - OP_TEXT_ALIGN = 0x045, - OP_TEXT_DECORATION = 0x046, - OP_TEXT_INDENT = 0x047, - OP_TEXT_TRANSFORM = 0x048, - OP_TOP = 0x049, - OP_UNICODE_BIDI = 0x04a, - OP_VERTICAL_ALIGN = 0x04b, - OP_VISIBILITY = 0x04c, - OP_VOICE_FAMILY = 0x04d, - OP_VOLUME = 0x04e, - OP_WHITE_SPACE = 0x04f, - OP_WIDOWS = 0x050, - OP_WIDTH = 0x051, - OP_WORD_SPACING = 0x052, - OP_Z_INDEX = 0x053, + OP_BORDER_TOP_COLOR = 0x008, + OP_BORDER_RIGHT_COLOR = 0x009, + OP_BORDER_BOTTOM_COLOR = 0x00a, + OP_BORDER_LEFT_COLOR = 0x00b, + OP_BORDER_TOP_STYLE = 0x00c, + OP_BORDER_RIGHT_STYLE = 0x00d, + OP_BORDER_BOTTOM_STYLE = 0x00e, + OP_BORDER_LEFT_STYLE = 0x00f, + OP_BORDER_TOP_WIDTH = 0x010, + OP_BORDER_RIGHT_WIDTH = 0x011, + OP_BORDER_BOTTOM_WIDTH = 0x012, + OP_BORDER_LEFT_WIDTH = 0x013, + OP_BOTTOM = 0x014, + OP_CAPTION_SIDE = 0x015, + OP_CLEAR = 0x016, + OP_CLIP = 0x017, + OP_COLOR = 0x018, + OP_CONTENT = 0x019, + OP_COUNTER_INCREMENT = 0x01a, + OP_COUNTER_RESET = 0x01b, + OP_CUE_AFTER = 0x01c, + OP_CUE_BEFORE = 0x01d, + OP_CURSOR = 0x01e, + OP_DIRECTION = 0x01f, + OP_DISPLAY = 0x020, + OP_ELEVATION = 0x021, + OP_EMPTY_CELLS = 0x022, + OP_FLOAT = 0x023, + OP_FONT_FAMILY = 0x024, + OP_FONT_SIZE = 0x025, + OP_FONT_STYLE = 0x026, + OP_FONT_VARIANT = 0x027, + OP_FONT_WEIGHT = 0x028, + OP_HEIGHT = 0x029, + OP_LEFT = 0x02a, + OP_LETTER_SPACING = 0x02b, + OP_LINE_HEIGHT = 0x02c, + OP_LIST_STYLE_IMAGE = 0x02d, + OP_LIST_STYLE_POSITION = 0x02e, + OP_LIST_STYLE_TYPE = 0x02f, + OP_MARGIN_TOP = 0x030, + OP_MARGIN_RIGHT = 0x031, + OP_MARGIN_BOTTOM = 0x032, + OP_MARGIN_LEFT = 0x033, + OP_MAX_HEIGHT = 0x034, + OP_MAX_WIDTH = 0x035, + OP_MIN_HEIGHT = 0x036, + OP_MIN_WIDTH = 0x037, + OP_ORPHANS = 0x038, + OP_OUTLINE_COLOR = 0x039, + OP_OUTLINE_STYLE = 0x03a, + OP_OUTLINE_WIDTH = 0x03b, + OP_OVERFLOW = 0x03c, + OP_PADDING_TOP = 0x03d, + OP_PADDING_RIGHT = 0x03e, + OP_PADDING_BOTTOM = 0x03f, + OP_PADDING_LEFT = 0x040, + OP_PAGE_BREAK_AFTER = 0x041, + OP_PAGE_BREAK_BEFORE = 0x042, + OP_PAGE_BREAK_INSIDE = 0x043, + OP_PAUSE_AFTER = 0x044, + OP_PAUSE_BEFORE = 0x045, + OP_PITCH_RANGE = 0x046, + OP_PITCH = 0x047, + OP_PLAY_DURING = 0x048, + OP_POSITION = 0x049, + OP_QUOTES = 0x04a, + OP_RICHNESS = 0x04b, + OP_RIGHT = 0x04c, + OP_SPEAK_HEADER = 0x04d, + OP_SPEAK_NUMERAL = 0x04e, + OP_SPEAK_PUNCTUATION = 0x04f, + OP_SPEAK = 0x050, + OP_SPEECH_RATE = 0x051, + OP_STRESS = 0x052, + OP_TABLE_LAYOUT = 0x053, + OP_TEXT_ALIGN = 0x054, + OP_TEXT_DECORATION = 0x055, + OP_TEXT_INDENT = 0x056, + OP_TEXT_TRANSFORM = 0x057, + OP_TOP = 0x058, + OP_UNICODE_BIDI = 0x059, + OP_VERTICAL_ALIGN = 0x05a, + OP_VISIBILITY = 0x05b, + OP_VOICE_FAMILY = 0x05c, + OP_VOLUME = 0x05d, + OP_WHITE_SPACE = 0x05e, + OP_WIDOWS = 0x05f, + OP_WIDTH = 0x060, + OP_WORD_SPACING = 0x061, + OP_Z_INDEX = 0x062, + + N_OPCODES = OP_Z_INDEX + 1 } opcode; enum flag { diff --git a/src/bytecode/opcodes.h b/src/bytecode/opcodes.h index f82d129..eb68c48 100644 --- a/src/bytecode/opcodes.h +++ b/src/bytecode/opcodes.h @@ -10,13 +10,6 @@ #include <inttypes.h> -enum side { - SIDE_TOP = 0x0000, - SIDE_RIGHT = 0x0100, - SIDE_BOTTOM = 0x0200, - SIDE_LEFT = 0x0300, -}; - enum op_azimuth { AZIMUTH_ANGLE = 0x0080, @@ -103,7 +96,6 @@ enum op_border_width { BORDER_WIDTH_THICK = 0x0002, }; -/** \todo merge top, right, left, bottom into one opcode and use side bits? */ enum op_bottom { BOTTOM_SET = 0x0080, BOTTOM_AUTO = 0x0000, diff --git a/src/parse/properties.c b/src/parse/properties.c index 67479dc..c333a17 100644 --- a/src/parse/properties.c +++ b/src/parse/properties.c @@ -322,19 +322,19 @@ static inline css_error parse_unit_specifier(css_language *c, static inline css_error parse_border_side_color(css_language *c, const parserutils_vector *vector, int *ctx, - uint16_t side, css_style **result); + uint16_t op, css_style **result); static inline css_error parse_border_side_style(css_language *c, const parserutils_vector *vector, int *ctx, - uint16_t side, css_style **result); + uint16_t op, css_style **result); static inline css_error parse_border_side_width(css_language *c, const parserutils_vector *vector, int *ctx, - uint16_t side, css_style **result); + uint16_t op, css_style **result); static inline css_error parse_margin_side(css_language *c, const parserutils_vector *vector, int *ctx, - uint16_t side, css_style **result); + uint16_t op, css_style **result); static inline css_error parse_padding_side(css_language *c, const parserutils_vector *vector, int *ctx, - uint16_t side, css_style **result); + uint16_t op, css_style **result); static inline css_error parse_list_style_type_value(css_language *c, const css_token *token, uint16_t *value); static inline css_error parse_content_list(css_language *c, @@ -973,21 +973,24 @@ css_error parse_border_bottom_color(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - return parse_border_side_color(c, vector, ctx, SIDE_BOTTOM, result); + return parse_border_side_color(c, vector, ctx, + OP_BORDER_BOTTOM_COLOR, result); } css_error parse_border_bottom_style(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - return parse_border_side_style(c, vector, ctx, SIDE_BOTTOM, result); + return parse_border_side_style(c, vector, ctx, + OP_BORDER_BOTTOM_STYLE, result); } css_error parse_border_bottom_width(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - return parse_border_side_width(c, vector, ctx, SIDE_BOTTOM, result); + return parse_border_side_width(c, vector, ctx, + OP_BORDER_BOTTOM_WIDTH, result); } css_error parse_border_collapse(css_language *c, @@ -1035,42 +1038,48 @@ css_error parse_border_left_color(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - return parse_border_side_color(c, vector, ctx, SIDE_LEFT, result); + return parse_border_side_color(c, vector, ctx, + OP_BORDER_LEFT_COLOR, result); } css_error parse_border_left_style(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - return parse_border_side_style(c, vector, ctx, SIDE_LEFT, result); + return parse_border_side_style(c, vector, ctx, + OP_BORDER_LEFT_STYLE, result); } css_error parse_border_left_width(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - return parse_border_side_width(c, vector, ctx, SIDE_LEFT, result); + return parse_border_side_width(c, vector, ctx, + OP_BORDER_LEFT_WIDTH, result); } css_error parse_border_right_color(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - return parse_border_side_color(c, vector, ctx, SIDE_RIGHT, result); + return parse_border_side_color(c, vector, ctx, + OP_BORDER_RIGHT_COLOR, result); } css_error parse_border_right_style(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - return parse_border_side_style(c, vector, ctx, SIDE_RIGHT, result); + return parse_border_side_style(c, vector, ctx, + OP_BORDER_RIGHT_STYLE, result); } css_error parse_border_right_width(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - return parse_border_side_width(c, vector, ctx, SIDE_RIGHT, result); + return parse_border_side_width(c, vector, ctx, + OP_BORDER_RIGHT_WIDTH, result); } css_error parse_border_spacing(css_language *c, @@ -1175,21 +1184,24 @@ css_error parse_border_top_color(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - return parse_border_side_color(c, vector, ctx, SIDE_TOP, result); + return parse_border_side_color(c, vector, ctx, + OP_BORDER_TOP_COLOR, result); } css_error parse_border_top_style(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - return parse_border_side_style(c, vector, ctx, SIDE_TOP, result); + return parse_border_side_style(c, vector, ctx, + OP_BORDER_TOP_STYLE, result); } css_error parse_border_top_width(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - return parse_border_side_width(c, vector, ctx, SIDE_TOP, result); + return parse_border_side_width(c, vector, ctx, + OP_BORDER_TOP_WIDTH, result); } css_error parse_bottom(css_language *c, @@ -3644,28 +3656,28 @@ css_error parse_margin_bottom(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - return parse_margin_side(c, vector, ctx, SIDE_BOTTOM, result); + return parse_margin_side(c, vector, ctx, OP_MARGIN_BOTTOM, result); } css_error parse_margin_left(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - return parse_margin_side(c, vector, ctx, SIDE_LEFT, result); + return parse_margin_side(c, vector, ctx, OP_MARGIN_LEFT, result); } css_error parse_margin_right(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - return parse_margin_side(c, vector, ctx, SIDE_RIGHT, result); + return parse_margin_side(c, vector, ctx, OP_MARGIN_RIGHT, result); } css_error parse_margin_top(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - return parse_margin_side(c, vector, ctx, SIDE_TOP, result); + return parse_margin_side(c, vector, ctx, OP_MARGIN_TOP, result); } css_error parse_max_height(css_language *c, @@ -4062,28 +4074,22 @@ css_error parse_outline_style(css_language *c, { css_error error; uint32_t opv; - uint8_t flags; uint16_t value; - /* Fake as border-left-style */ - error = parse_border_side_style(c, vector, ctx, SIDE_LEFT, result); + /* Parse as a border style */ + error = parse_border_side_style(c, vector, ctx, + OP_OUTLINE_STYLE, result); if (error != CSS_OK) return error; - /* Then change the opcode to outline-style, and clear the side bits */ opv = *((uint32_t *) (*result)->bytecode); - flags = getFlags(opv); - value = getValue(opv) & ~SIDE_LEFT; + value = getValue(opv); /* Hidden is invalid */ if (value == BORDER_STYLE_HIDDEN) return CSS_INVALID; - opv = buildOPV(OP_OUTLINE_STYLE, flags, value); - - *((uint32_t *) (*result)->bytecode) = opv; - return CSS_OK; } @@ -4091,27 +4097,9 @@ css_error parse_outline_width(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - css_error error; - uint32_t opv; - uint8_t flags; - uint16_t value; - - /* Fake as border-left-width */ - error = parse_border_side_width(c, vector, ctx, SIDE_LEFT, result); - if (error != CSS_OK) - return error; - - /* Then change the opcode to outline-width, and clear the side bits */ - opv = *((uint32_t *) (*result)->bytecode); - - flags = getFlags(opv); - value = getValue(opv) & ~SIDE_LEFT; - - opv = buildOPV(OP_OUTLINE_WIDTH, flags, value); - - *((uint32_t *) (*result)->bytecode) = opv; - - return CSS_OK; + /* Parse as border width */ + return parse_border_side_width(c, vector, ctx, + OP_OUTLINE_WIDTH, result); } css_error parse_overflow(css_language *c, @@ -4163,28 +4151,28 @@ css_error parse_padding_bottom(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - return parse_padding_side(c, vector, ctx, SIDE_BOTTOM, result); + return parse_padding_side(c, vector, ctx, OP_PADDING_BOTTOM, result); } css_error parse_padding_left(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - return parse_padding_side(c, vector, ctx, SIDE_LEFT, result); + return parse_padding_side(c, vector, ctx, OP_PADDING_LEFT, result); } css_error parse_padding_right(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - return parse_padding_side(c, vector, ctx, SIDE_RIGHT, result); + return parse_padding_side(c, vector, ctx, OP_PADDING_RIGHT, result); } css_error parse_padding_top(css_language *c, const parserutils_vector *vector, int *ctx, css_style **result) { - return parse_padding_side(c, vector, ctx, SIDE_TOP, result); + return parse_padding_side(c, vector, ctx, OP_PADDING_TOP, result); } css_error parse_page_break_after(css_language *c, @@ -6827,13 +6815,13 @@ css_error parse_unit_specifier(css_language *c, css_error parse_border_side_color(css_language *c, const parserutils_vector *vector, int *ctx, - uint16_t side, css_style **result) + uint16_t op, css_style **result) { css_error error; const css_token *token; + uint32_t opv; uint8_t flags = 0; uint16_t value = 0; - uint32_t opv; uint32_t colour = 0; uint32_t required_size; @@ -6862,7 +6850,7 @@ css_error parse_border_side_color(css_language *c, if (error != CSS_OK) return error; - opv = buildOPV(OP_BORDER_TRBL_COLOR, flags, value | side); + opv = buildOPV(op, flags, value); required_size = sizeof(opv); if ((flags & FLAG_INHERIT) == false && value == BORDER_COLOR_SET) @@ -6885,7 +6873,7 @@ css_error parse_border_side_color(css_language *c, css_error parse_border_side_style(css_language *c, const parserutils_vector *vector, int *ctx, - uint16_t side, css_style **result) + uint16_t op, css_style **result) { css_error error; const css_token *ident; @@ -6928,7 +6916,7 @@ css_error parse_border_side_style(css_language *c, } else return CSS_INVALID; - opv = buildOPV(OP_BORDER_TRBL_STYLE, flags, value | side); + opv = buildOPV(op, flags, value); /* Allocate result */ error = css_stylesheet_style_create(c->sheet, sizeof(opv), result); @@ -6943,7 +6931,7 @@ css_error parse_border_side_style(css_language *c, css_error parse_border_side_width(css_language *c, const parserutils_vector *vector, int *ctx, - uint16_t side, css_style **result) + uint16_t op, css_style **result) { css_error error; const css_token *token; @@ -6996,7 +6984,7 @@ css_error parse_border_side_width(css_language *c, if (error != CSS_OK) return error; - opv = buildOPV(OP_BORDER_TRBL_WIDTH, flags, value | side); + opv = buildOPV(op, flags, value); required_size = sizeof(opv); if ((flags & FLAG_INHERIT) == false && value == BORDER_WIDTH_SET) @@ -7021,7 +7009,7 @@ css_error parse_border_side_width(css_language *c, css_error parse_margin_side(css_language *c, const parserutils_vector *vector, int *ctx, - uint16_t side, css_style **result) + uint16_t op, css_style **result) { css_error error; const css_token *token; @@ -7061,7 +7049,7 @@ css_error parse_margin_side(css_language *c, if (error != CSS_OK) return error; - opv = buildOPV(OP_MARGIN_TRBL, flags, value | side); + opv = buildOPV(op, flags, value); required_size = sizeof(opv); if ((flags & FLAG_INHERIT) == false && value == MARGIN_SET) @@ -7086,7 +7074,7 @@ css_error parse_margin_side(css_language *c, css_error parse_padding_side(css_language *c, const parserutils_vector *vector, int *ctx, - uint16_t side, css_style **result) + uint16_t op, css_style **result) { css_error error; const css_token *token; @@ -7126,7 +7114,7 @@ css_error parse_padding_side(css_language *c, if (error != CSS_OK) return error; - opv = buildOPV(OP_PADDING_TRBL, flags, value | side); + opv = buildOPV(op, flags, value); required_size = sizeof(opv); if ((flags & FLAG_INHERIT) == false && value == PADDING_SET) diff --git a/src/select/properties.c b/src/select/properties.c index 658f668..db3fca9 100644 --- a/src/select/properties.c +++ b/src/select/properties.c @@ -149,7 +149,7 @@ static css_error initial_border_spacing(css_computed_style *style) return CSS_OK; } -static css_error cascade_border_color(css_select_ctx *ctx, +static css_error cascade_border_top_color(css_select_ctx *ctx, uint32_t opv, css_style *style, css_select_state *state) { UNUSED(ctx); @@ -160,14 +160,14 @@ static css_error cascade_border_color(css_select_ctx *ctx, return CSS_OK; } -static css_error initial_border_color(css_computed_style *style) +static css_error initial_border_top_color(css_computed_style *style) { UNUSED(style); return CSS_OK; } -static css_error cascade_border_style(css_select_ctx *ctx, +static css_error cascade_border_right_color(css_select_ctx *ctx, uint32_t opv, css_style *style, css_select_state *state) { UNUSED(ctx); @@ -178,14 +178,14 @@ static css_error cascade_border_style(css_select_ctx *ctx, return CSS_OK; } -static css_error initial_border_style(css_computed_style *style) +static css_error initial_border_right_color(css_computed_style *style) { UNUSED(style); return CSS_OK; } -static css_error cascade_border_width(css_select_ctx *ctx, +static css_error cascade_border_bottom_color(css_select_ctx *ctx, uint32_t opv, css_style *style, css_select_state *state) { UNUSED(ctx); @@ -196,7 +196,169 @@ static css_error cascade_border_width(css_select_ctx *ctx, return CSS_OK; } -static css_error initial_border_width(css_computed_style *style) +static css_error initial_border_bottom_color(css_computed_style *style) +{ + UNUSED(style); + + return CSS_OK; +} + +static css_error cascade_border_left_color(css_select_ctx *ctx, + uint32_t opv, css_style *style, css_select_state *state) +{ + UNUSED(ctx); + UNUSED(opv); + UNUSED(style); + UNUSED(state); + + return CSS_OK; +} + +static css_error initial_border_left_color(css_computed_style *style) +{ + UNUSED(style); + + return CSS_OK; +} + +static css_error cascade_border_top_style(css_select_ctx *ctx, + uint32_t opv, css_style *style, css_select_state *state) +{ + UNUSED(ctx); + UNUSED(opv); + UNUSED(style); + UNUSED(state); + + return CSS_OK; +} + +static css_error initial_border_top_style(css_computed_style *style) +{ + UNUSED(style); + + return CSS_OK; +} + +static css_error cascade_border_right_style(css_select_ctx *ctx, + uint32_t opv, css_style *style, css_select_state *state) +{ + UNUSED(ctx); + UNUSED(opv); + UNUSED(style); + UNUSED(state); + + return CSS_OK; +} + +static css_error initial_border_right_style(css_computed_style *style) +{ + UNUSED(style); + + return CSS_OK; +} + +static css_error cascade_border_bottom_style(css_select_ctx *ctx, + uint32_t opv, css_style *style, css_select_state *state) +{ + UNUSED(ctx); + UNUSED(opv); + UNUSED(style); + UNUSED(state); + + return CSS_OK; +} + +static css_error initial_border_bottom_style(css_computed_style *style) +{ + UNUSED(style); + + return CSS_OK; +} + +static css_error cascade_border_left_style(css_select_ctx *ctx, + uint32_t opv, css_style *style, css_select_state *state) +{ + UNUSED(ctx); + UNUSED(opv); + UNUSED(style); + UNUSED(state); + + return CSS_OK; +} + +static css_error initial_border_left_style(css_computed_style *style) +{ + UNUSED(style); + + return CSS_OK; +} + +static css_error cascade_border_top_width(css_select_ctx *ctx, + uint32_t opv, css_style *style, css_select_state *state) +{ + UNUSED(ctx); + UNUSED(opv); + UNUSED(style); + UNUSED(state); + + return CSS_OK; +} + +static css_error initial_border_top_width(css_computed_style *style) +{ + UNUSED(style); + + return CSS_OK; +} + +static css_error cascade_border_right_width(css_select_ctx *ctx, + uint32_t opv, css_style *style, css_select_state *state) +{ + UNUSED(ctx); + UNUSED(opv); + UNUSED(style); + UNUSED(state); + + return CSS_OK; +} + +static css_error initial_border_right_width(css_computed_style *style) +{ + UNUSED(style); + + return CSS_OK; +} + +static css_error cascade_border_bottom_width(css_select_ctx *ctx, + uint32_t opv, css_style *style, css_select_state *state) +{ + UNUSED(ctx); + UNUSED(opv); + UNUSED(style); + UNUSED(state); + + return CSS_OK; +} + +static css_error initial_border_bottom_width(css_computed_style *style) +{ + UNUSED(style); + + return CSS_OK; +} + +static css_error cascade_border_left_width(css_select_ctx *ctx, + uint32_t opv, css_style *style, css_select_state *state) +{ + UNUSED(ctx); + UNUSED(opv); + UNUSED(style); + UNUSED(state); + + return CSS_OK; +} + +static css_error initial_border_left_width(css_computed_style *style) { UNUSED(style); @@ -707,7 +869,61 @@ static css_error initial_list_style_type(css_computed_style *style) return CSS_OK; } -static css_error cascade_margin(css_select_ctx *ctx, +static css_error cascade_margin_top(css_select_ctx *ctx, + uint32_t opv, css_style *style, css_select_state *state) +{ + UNUSED(ctx); + UNUSED(opv); + UNUSED(style); + UNUSED(state); + + return CSS_OK; +} + +static css_error initial_margin_top(css_computed_style *style) +{ + UNUSED(style); + + return CSS_OK; +} + +static css_error cascade_margin_right(css_select_ctx *ctx, + uint32_t opv, css_style *style, css_select_state *state) +{ + UNUSED(ctx); + UNUSED(opv); + UNUSED(style); + UNUSED(state); + + return CSS_OK; +} + +static css_error initial_margin_right(css_computed_style *style) +{ + UNUSED(style); + + return CSS_OK; +} + +static css_error cascade_margin_bottom(css_select_ctx *ctx, + uint32_t opv, css_style *style, css_select_state *state) +{ + UNUSED(ctx); + UNUSED(opv); + UNUSED(style); + UNUSED(state); + + return CSS_OK; +} + +static css_error initial_margin_bottom(css_computed_style *style) +{ + UNUSED(style); + + return CSS_OK; +} + +static css_error cascade_margin_left(css_select_ctx *ctx, uint32_t opv, css_style *style, css_select_state *state) { UNUSED(ctx); @@ -718,7 +934,7 @@ static css_error cascade_margin(css_select_ctx *ctx, return CSS_OK; } -static css_error initial_margin(css_computed_style *style) +static css_error initial_margin_left(css_computed_style *style) { UNUSED(style); @@ -887,7 +1103,61 @@ static css_error initial_overflow(css_computed_style *style) return CSS_OK; } -static css_error cascade_padding(css_select_ctx *ctx, +static css_error cascade_padding_top(css_select_ctx *ctx, + uint32_t opv, css_style *style, css_select_state *state) +{ + UNUSED(ctx); + UNUSED(opv); + UNUSED(style); + UNUSED(state); + + return CSS_OK; +} + +static css_error initial_padding_top(css_computed_style *style) +{ + UNUSED(style); + + return CSS_OK; +} + +static css_error cascade_padding_right(css_select_ctx *ctx, + uint32_t opv, css_style *style, css_select_state *state) +{ + UNUSED(ctx); + UNUSED(opv); + UNUSED(style); + UNUSED(state); + + return CSS_OK; +} + +static css_error initial_padding_right(css_computed_style *style) +{ + UNUSED(style); + + return CSS_OK; +} + +static css_error cascade_padding_bottom(css_select_ctx *ctx, + uint32_t opv, css_style *style, css_select_state *state) +{ + UNUSED(ctx); + UNUSED(opv); + UNUSED(style); + UNUSED(state); + + return CSS_OK; +} + +static css_error initial_padding_bottom(css_computed_style *style) +{ + UNUSED(style); + + return CSS_OK; +} + +static css_error cascade_padding_left(css_select_ctx *ctx, uint32_t opv, css_style *style, css_select_state *state) { UNUSED(ctx); @@ -898,7 +1168,7 @@ static css_error cascade_padding(css_select_ctx *ctx, return CSS_OK; } -static css_error initial_padding(css_computed_style *style) +static css_error initial_padding_left(css_computed_style *style) { UNUSED(style); diff --git a/src/select/select.c b/src/select/select.c index 21f3770..74db52f 100644 --- a/src/select/select.c +++ b/src/select/select.c @@ -50,14 +50,11 @@ typedef struct css_select_state { uint32_t current_rule_index; /* Index of current rule */ uint32_t current_specificity; /* Specificity of current rule */ -/** \todo We need a better way of knowing the number of properties - * Bytecode opcodes cover 84 properties, then there's a - * further 15 generated from the side bits */ -/* Stylesheet identity is a monotonically increasing number based at 1 and - * increasing by 1 for every applicable stylesheet encountered, including - * imports. Imported sheets' identities are below that of the sheet that - * imported them. */ -#define N_PROPS (99) + /* Stylesheet identity is a monotonically increasing number based at 1 + * and increasing by 1 for every applicable stylesheet encountered, + * including imports. Imported sheets' identities are below that of + * the sheet that imported them. + */ struct { uint32_t specificity; /* Specificity of property in result */ uint32_t sheet; /* Identity of applicable stylesheet */ @@ -65,8 +62,7 @@ typedef struct css_select_state { origin : 2, /* Origin of property in result */ important : 1, /* Importance of property in result */ index : 16;/* Index of corresponding rule */ - } props[N_PROPS]; -#undef N_PROPS + } props[N_OPCODES]; } css_select_state; static css_error select_from_sheet(css_select_ctx *ctx, @@ -104,7 +100,7 @@ static struct prop_table { css_error (*initial)(css_computed_style *style); uint32_t inherited : 1; -} properties[] = { +} properties[N_OPCODES] = { { cascade_azimuth, initial_azimuth, 1 }, { cascade_background_attachment, initial_background_attachment, 0 }, { cascade_background_color, initial_background_color, 0 }, @@ -113,9 +109,18 @@ static struct prop_table { { cascade_background_repeat, initial_background_repeat, 0 }, { cascade_border_collapse, initial_border_collapse, 1 }, { cascade_border_spacing, initial_border_spacing, 1 }, - { cascade_border_color, initial_border_color, 0 }, - { cascade_border_style, initial_border_style, 0 }, - { cascade_border_width, initial_border_width, 0 }, + { cascade_border_top_color, initial_border_top_color, 0 }, + { cascade_border_right_color, initial_border_right_color, 0 }, + { cascade_border_bottom_color, initial_border_bottom_color, 0 }, + { cascade_border_left_color, initial_border_left_color, 0 }, + { cascade_border_top_style, initial_border_top_style, 0 }, + { cascade_border_right_style, initial_border_right_style, 0 }, + { cascade_border_bottom_style, initial_border_bottom_style, 0 }, + { cascade_border_left_style, initial_border_left_style, 0 }, + { cascade_border_top_width, initial_border_top_width, 0 }, + { cascade_border_right_width, initial_border_right_width, 0 }, + { cascade_border_bottom_width, initial_border_bottom_width, 0 }, + { cascade_border_left_width, initial_border_left_width, 0 }, { cascade_bottom, initial_bottom, 0 }, { cascade_caption_side, initial_caption_side, 1 }, { cascade_clear, initial_clear, 0 }, @@ -144,7 +149,10 @@ static struct prop_table { { cascade_list_style_image, initial_list_style_image, 1 }, { cascade_list_style_position, initial_list_style_position, 1 }, { cascade_list_style_type, initial_list_style_type, 1 }, - { cascade_margin, initial_margin, 0 }, + { cascade_margin_top, initial_margin_top, 0 }, + { cascade_margin_right, initial_margin_right, 0 }, + { cascade_margin_bottom, initial_margin_bottom, 0 }, + { cascade_margin_left, initial_margin_left, 0 }, { cascade_max_height, initial_max_height, 0 }, { cascade_max_width, initial_max_width, 0 }, { cascade_min_height, initial_min_height, 0 }, @@ -154,7 +162,10 @@ static struct prop_table { { cascade_outline_style, initial_outline_style, 0 }, { cascade_outline_width, initial_outline_width, 0 }, { cascade_overflow, initial_overflow, 0 }, - { cascade_padding, initial_padding, 0 }, + { cascade_padding_top, initial_padding_top, 0 }, + { cascade_padding_right, initial_padding_right, 0 }, + { cascade_padding_bottom, initial_padding_bottom, 0 }, + { cascade_padding_left, initial_padding_left, 0 }, { cascade_page_break_after, initial_page_break_after, 0 }, { cascade_page_break_before, initial_page_break_before, 0 }, { cascade_page_break_inside, initial_page_break_inside, 1 }, |