diff options
author | Lucas Neves <lcneves@gmail.com> | 2017-11-06 22:31:54 -0500 |
---|---|---|
committer | Lucas Neves <lcneves@gmail.com> | 2017-11-06 22:31:54 -0500 |
commit | 07e70a6e395dde906434995110c93e892b09b585 (patch) | |
tree | 7274f6dda17fdda06510bbd0245d995cccdc05a0 | |
parent | 467261fe7df209b4b329176051f71e8a546f9829 (diff) | |
download | libcss-07e70a6e395dde906434995110c93e892b09b585.tar.gz |
WIP: Select: autogen for selection properties.
-rw-r--r-- | src/select/__pycache__/assets.cpython-36.pyc | bin | 1911 -> 1913 bytes | |||
-rw-r--r-- | src/select/__pycache__/select_config.cpython-36.pyc | bin | 6514 -> 6594 bytes | |||
-rw-r--r-- | src/select/autogenerated_computed.h | 70 | ||||
-rw-r--r-- | src/select/autogenerated_propset.h | 687 | ||||
-rw-r--r-- | src/select/select_config.py | 12 | ||||
-rw-r--r-- | src/select/select_generator.py | 111 |
6 files changed, 813 insertions, 67 deletions
diff --git a/src/select/__pycache__/assets.cpython-36.pyc b/src/select/__pycache__/assets.cpython-36.pyc Binary files differindex f13ccad..b5bf9ca 100644 --- a/src/select/__pycache__/assets.cpython-36.pyc +++ b/src/select/__pycache__/assets.cpython-36.pyc diff --git a/src/select/__pycache__/select_config.cpython-36.pyc b/src/select/__pycache__/select_config.cpython-36.pyc Binary files differindex 27faa8b..738f7c8 100644 --- a/src/select/__pycache__/select_config.cpython-36.pyc +++ b/src/select/__pycache__/select_config.cpython-36.pyc diff --git a/src/select/autogenerated_computed.h b/src/select/autogenerated_computed.h index a319a58..543785c 100644 --- a/src/select/autogenerated_computed.h +++ b/src/select/autogenerated_computed.h @@ -64,15 +64,15 @@ struct css_computed_uncommon_i { * 0 bbbbbbbbbbbccccccccoooooooouuuuu * border_spacing; column_rule_width; outline_width; cursor * - * 1 wwwwwwwlllllllcccccccooooooobbbb - * word_spacing; letter_spacing; column_width; column_gap; break_before + * 1 cccccccooooooowwwwwwwlllllllbbbb + * column_width; column_gap; word_spacing; letter_spacing; break_before * * 2 ccccccccccccccccccccccccccbbbboo * clip; break_after; column_fill * - * 3 ccccbbbboolluuttnner............ - * column_rule_style; break_inside; column_span; column_count; - * column_rule_color; outline_color; content; counter_increment; counter_reset + * 3 ccccbbbboolluuttmmne............ + * column_rule_style; break_inside; content; column_count; column_rule_color; + * outline_color; column_span; counter_increment; counter_reset */ uint32_t bits[4]; @@ -125,7 +125,7 @@ typedef struct css_computed_page { * Bit allocations: * * 0 pppaaaggwo...................... - * page_break_after; page_break_before; page_break_inside; widows; orphans + * page_break_before; page_break_after; page_break_inside; widows; orphans */ uint32_t bits[1]; @@ -231,45 +231,45 @@ struct css_computed_style_i { * Bit allocations: * * 0 bbbbbbbboooooooorrrrrrrrdddddddd - * border_bottom_width; border_left_width; border_top_width; border_right_width + * border_right_width; border_top_width; border_bottom_width; border_left_width * - * 1 mmmmmmmbbbbbbbaaaaaaaiiiiiiioooo - * max_height; bottom; margin_bottom; min_height; border_left_style + * 1 ttttttthhhhhhhmmmmmmmiiiiiiiffff + * top; height; max_width; min_height; font_weight * - * 2 hhhhhhhrrrrrrrmmmmmmmaaaaaaatttt - * height; right; margin_top; margin_right; text_align + * 2 mmmmmmmbbbbbbbaaaaaaarrrrrrroooo + * min_width; bottom; margin_top; margin_bottom; border_top_style * - * 3 mmmmmmmtttttttffffffflllllllbbbb - * max_width; top; flex_basis; line_height; border_right_style + * 3 fffffffwwwwwwwmmmmmmmrrrrrrrbbbb + * flex_basis; width; max_height; right; border_right_style * - * 4 wwwwwwwmmmmmmmiiiiiiilllllllffff - * width; margin_left; min_width; left; font_weight + * 4 lllllllmmmmmmmiiiiiiiaaaaaaabbbb + * left; margin_right; line_height; margin_left; border_left_style * - * 5 bbbbbbbbbbbvvvvvvvvvfffffffffaaa - * background_position; vertical_align; font_size; align_content + * 5 bbbbbbbbbbbfffffffffvvvvvvvvvppp + * background_position; font_size; vertical_align; position * - * 6 dddddtttttoooollllbbbbrrrraaaiii - * display; text_decoration; outline_style; list_style_type; - * border_bottom_style; border_top_style; align_items; align_self + * 6 tttttdddddllllbbbbooooeeeeaaafff + * text_decoration; display; list_style_type; border_bottom_style; + * outline_style; text_align; align_content; font_family * - * 7 ppppppaaaaaaddddddttttttiiiiiicc - * padding_bottom; padding_left; padding_top; text_indent; padding_right; - * caption_side + * 7 ppppppaaaaaaddddddttttttiiiiiiff + * padding_bottom; padding_right; padding_left; text_indent; padding_top; + * font_variant * - * 8 bboorrvvttddffaanniillcczzuueess - * border_bottom_color; border_collapse; border_left_color; visibility; - * table_layout; border_top_color; flex_wrap; background_attachment; - * font_style; font_variant; float; background_color; z_index; unicode_bidi; - * border_right_color; list_style_position + * 8 ttccbbaaffvvooeerrzzkknnddllmmii + * table_layout; caption_side; border_right_color; background_attachment; + * float; visibility; box_sizing; empty_cells; border_top_color; z_index; + * background_color; font_style; direction; border_collapse; + * border_bottom_color; list_style_position * - * 9 wwwbbbcccfffooopppnnnjjjttteexxa - * white_space; background_repeat; clear; flex_direction; overflow; position; - * font_family; justify_content; text_transform; empty_cells; box_sizing; - * opacity + * 9 fffbbbaaatttccclllwwwooojjjuueer + * flex_direction; background_repeat; align_items; text_transform; clear; + * align_self; white_space; overflow; justify_content; unicode_bidi; flex_wrap; + * color * - * 10 ddfbcliqo....................... - * direction; flex_grow; background_image; color; flex_shrink; - * list_style_image; quotes; order + * 10 bbfaqlior....................... + * border_left_color; flex_shrink; background_image; quotes; flex_grow; + * list_style_image; opacity; order */ uint32_t bits[11]; diff --git a/src/select/autogenerated_propset.h b/src/select/autogenerated_propset.h index 4976929..f959500 100644 --- a/src/select/autogenerated_propset.h +++ b/src/select/autogenerated_propset.h @@ -29,32 +29,703 @@ static const css_computed_uncommon default_uncommon = { CSS_COLUMN_RULE_WIDTH_MEDIUM << 13) | ( CSS_OUTLINE_WIDTH_MEDIUM << 5) | CSS_CURSOR_INHERIT, - (CSS_WORD_SPACING_NORMAL << 25) | ( - CSS_LETTER_SPACING_NORMAL << 18) | ( - CSS_COLUMN_WIDTH_AUTO << 11) | ( - CSS_COLUMN_GAP_NORMAL << 4) | - CSS_BREAK_BEFORE_AUTO, + (CSS_COLUMN_WIDTH_AUTO << 25) | (CSS_COLUMN_GAP_NORMAL + << 18) | (CSS_WORD_SPACING_NORMAL << + 11) | (CSS_LETTER_SPACING_NORMAL << 4) + | CSS_BREAK_BEFORE_AUTO, (CSS_CLIP_AUTO << 6) | (CSS_BREAK_AFTER_AUTO << 2) | CSS_COLUMN_FILL_BALANCE, (CSS_COLUMN_RULE_STYLE_NONE << 28) | ( CSS_BREAK_INSIDE_AUTO << 24) | ( - CSS_COLUMN_SPAN_NONE << 22) | ( + CSS_CONTENT_NORMAL << 22) | ( CSS_COLUMN_COUNT_AUTO << 20) | ( CSS_COLUMN_RULE_CURRENT_COLOR << 18) | ( CSS_OUTLINE_COLOR_INVERT << 16) | ( - CSS_CONTENT_NORMAL << 14) | ( + CSS_COLUMN_SPAN_NONE << 14) | ( CSS_COUNTER_INCREMENT_NONE << 13) | ( CSS_COUNTER_RESET_NONE << 12) }, + .border_spacing_a = 0, + .border_spacing_b = 0, + .clip_a = 0, + .clip_b = 0, + .clip_c = 0, + .clip_d = 0, + .column_count = 0, + .column_gap = 0, + .column_rule_color = 0, + .column_rule_width = 0, + .column_width = 0, + .letter_spacing = 0, + .outline_color = 0, + .outline_width = 0, + .word_spacing = 0 }, + .content = NULL, + .counter_increment = NULL, + .counter_reset = NULL, + .cursor = NULL, + .next = NULL, + .count = 0, + .bin = UINT32_MAX }; + +#define ENSURE_UNCOMMON do { \ + if (style->i.uncommon == NULL) { \ + style->i.uncommon = malloc(sizeof( \ + css_computed_uncommon)); \ + if (style->i.uncommon == NULL) \ + return CSS_NOMEM; \ + \ + memcpy(style->i.uncommon, &default_uncommon, sizeof( \ + css_computed_uncommon)); \ + } \ +} while(0) \ + +#define BORDER_SPACING_INDEX 0 +#define BORDER_SPACING_SHIFT 21 +#define BORDER_SPACING_MASK 0xffe00000 +#undef BORDER_SPACING_INDEX +#undef BORDER_SPACING_SHIFT +#undef BORDER_SPACING_MASK +#define BREAK_AFTER_INDEX 2 +#define BREAK_AFTER_SHIFT 2 +#define BREAK_AFTER_MASK 0x3c +#undef BREAK_AFTER_INDEX +#undef BREAK_AFTER_SHIFT +#undef BREAK_AFTER_MASK +#define BREAK_BEFORE_INDEX 1 +#define BREAK_BEFORE_SHIFT 0 +#define BREAK_BEFORE_MASK 0xf +#undef BREAK_BEFORE_INDEX +#undef BREAK_BEFORE_SHIFT +#undef BREAK_BEFORE_MASK +#define BREAK_INSIDE_INDEX 3 +#define BREAK_INSIDE_SHIFT 24 +#define BREAK_INSIDE_MASK 0xf000000 +#undef BREAK_INSIDE_INDEX +#undef BREAK_INSIDE_SHIFT +#undef BREAK_INSIDE_MASK +#define CLIP_INDEX 2 +#define CLIP_SHIFT 6 +#define CLIP_MASK 0xffffffc0 +#undef CLIP_INDEX +#undef CLIP_SHIFT +#undef CLIP_MASK +#define COLUMN_COUNT_INDEX 3 +#define COLUMN_COUNT_SHIFT 20 +#define COLUMN_COUNT_MASK 0x300000 +#undef COLUMN_COUNT_INDEX +#undef COLUMN_COUNT_SHIFT +#undef COLUMN_COUNT_MASK +#define COLUMN_FILL_INDEX 2 +#define COLUMN_FILL_SHIFT 0 +#define COLUMN_FILL_MASK 0x3 +#undef COLUMN_FILL_INDEX +#undef COLUMN_FILL_SHIFT +#undef COLUMN_FILL_MASK +#define COLUMN_GAP_INDEX 1 +#define COLUMN_GAP_SHIFT 18 +#define COLUMN_GAP_MASK 0x1fc0000 +#undef COLUMN_GAP_INDEX +#undef COLUMN_GAP_SHIFT +#undef COLUMN_GAP_MASK +#define COLUMN_RULE_COLOR_INDEX 3 +#define COLUMN_RULE_COLOR_SHIFT 18 +#define COLUMN_RULE_COLOR_MASK 0xc0000 +#undef COLUMN_RULE_COLOR_INDEX +#undef COLUMN_RULE_COLOR_SHIFT +#undef COLUMN_RULE_COLOR_MASK +#define COLUMN_RULE_STYLE_INDEX 3 +#define COLUMN_RULE_STYLE_SHIFT 28 +#define COLUMN_RULE_STYLE_MASK 0xf0000000 +#undef COLUMN_RULE_STYLE_INDEX +#undef COLUMN_RULE_STYLE_SHIFT +#undef COLUMN_RULE_STYLE_MASK +#define COLUMN_RULE_WIDTH_INDEX 0 +#define COLUMN_RULE_WIDTH_SHIFT 13 +#define COLUMN_RULE_WIDTH_MASK 0x1fe000 +#undef COLUMN_RULE_WIDTH_INDEX +#undef COLUMN_RULE_WIDTH_SHIFT +#undef COLUMN_RULE_WIDTH_MASK +#define COLUMN_SPAN_INDEX 3 +#define COLUMN_SPAN_SHIFT 14 +#define COLUMN_SPAN_MASK 0xc000 +#undef COLUMN_SPAN_INDEX +#undef COLUMN_SPAN_SHIFT +#undef COLUMN_SPAN_MASK +#define COLUMN_WIDTH_INDEX 1 +#define COLUMN_WIDTH_SHIFT 25 +#define COLUMN_WIDTH_MASK 0xfe000000 +#undef COLUMN_WIDTH_INDEX +#undef COLUMN_WIDTH_SHIFT +#undef COLUMN_WIDTH_MASK +#define CONTENT_INDEX 3 +#define CONTENT_SHIFT 22 +#define CONTENT_MASK 0xc00000 +#undef CONTENT_INDEX +#undef CONTENT_SHIFT +#undef CONTENT_MASK +#define COUNTER_INCREMENT_INDEX 3 +#define COUNTER_INCREMENT_SHIFT 13 +#define COUNTER_INCREMENT_MASK 0x2000 +#undef COUNTER_INCREMENT_INDEX +#undef COUNTER_INCREMENT_SHIFT +#undef COUNTER_INCREMENT_MASK +#define COUNTER_RESET_INDEX 3 +#define COUNTER_RESET_SHIFT 12 +#define COUNTER_RESET_MASK 0x1000 +#undef COUNTER_RESET_INDEX +#undef COUNTER_RESET_SHIFT +#undef COUNTER_RESET_MASK +#define CURSOR_INDEX 0 +#define CURSOR_SHIFT 0 +#define CURSOR_MASK 0x1f +#undef CURSOR_INDEX +#undef CURSOR_SHIFT +#undef CURSOR_MASK +#define LETTER_SPACING_INDEX 1 +#define LETTER_SPACING_SHIFT 4 +#define LETTER_SPACING_MASK 0x7f0 +#undef LETTER_SPACING_INDEX +#undef LETTER_SPACING_SHIFT +#undef LETTER_SPACING_MASK +#define OUTLINE_COLOR_INDEX 3 +#define OUTLINE_COLOR_SHIFT 16 +#define OUTLINE_COLOR_MASK 0x30000 +#undef OUTLINE_COLOR_INDEX +#undef OUTLINE_COLOR_SHIFT +#undef OUTLINE_COLOR_MASK +#define OUTLINE_WIDTH_INDEX 0 +#define OUTLINE_WIDTH_SHIFT 5 +#define OUTLINE_WIDTH_MASK 0x1fe0 +#undef OUTLINE_WIDTH_INDEX +#undef OUTLINE_WIDTH_SHIFT +#undef OUTLINE_WIDTH_MASK +#define WORD_SPACING_INDEX 1 +#define WORD_SPACING_SHIFT 11 +#define WORD_SPACING_MASK 0x3f800 +#undef WORD_SPACING_INDEX +#undef WORD_SPACING_SHIFT +#undef WORD_SPACING_MASK static const css_computed_page default_page = { .bits = { - (CSS_PAGE_BREAK_AFTER_AUTO << 29) | (CSS_PAGE_BREAK_BEFORE_AUTO + (CSS_PAGE_BREAK_BEFORE_AUTO << 29) | (CSS_PAGE_BREAK_AFTER_AUTO << 26) | (CSS_PAGE_BREAK_INSIDE_AUTO << 24) | ( CSS_WIDOWS_SET << 23) | (CSS_ORPHANS_SET << 22) }, + .orphans = 2 << CSS_RADIX_POINT, + .widows = 2 << CSS_RADIX_POINT }; +#define ENSURE_PAGE do { \ + if (style->page == NULL) { \ + style->page = malloc(sizeof(css_computed_page)); \ + if (style->page == NULL) \ + return CSS_NOMEM; \ + \ + memcpy(style->page, &default_page, sizeof( \ + css_computed_page)); \ + } \ +} while(0) \ + +#define ORPHANS_INDEX 0 +#define ORPHANS_SHIFT 22 +#define ORPHANS_MASK 0x400000 +#undef ORPHANS_INDEX +#undef ORPHANS_SHIFT +#undef ORPHANS_MASK +#define PAGE_BREAK_AFTER_INDEX 0 +#define PAGE_BREAK_AFTER_SHIFT 26 +#define PAGE_BREAK_AFTER_MASK 0x1c000000 +#undef PAGE_BREAK_AFTER_INDEX +#undef PAGE_BREAK_AFTER_SHIFT +#undef PAGE_BREAK_AFTER_MASK +#define PAGE_BREAK_BEFORE_INDEX 0 +#define PAGE_BREAK_BEFORE_SHIFT 29 +#define PAGE_BREAK_BEFORE_MASK 0xe0000000 +#undef PAGE_BREAK_BEFORE_INDEX +#undef PAGE_BREAK_BEFORE_SHIFT +#undef PAGE_BREAK_BEFORE_MASK +#define PAGE_BREAK_INSIDE_INDEX 0 +#define PAGE_BREAK_INSIDE_SHIFT 24 +#define PAGE_BREAK_INSIDE_MASK 0x3000000 +#undef PAGE_BREAK_INSIDE_INDEX +#undef PAGE_BREAK_INSIDE_SHIFT +#undef PAGE_BREAK_INSIDE_MASK +#define WIDOWS_INDEX 0 +#define WIDOWS_SHIFT 23 +#define WIDOWS_MASK 0x800000 +#undef WIDOWS_INDEX +#undef WIDOWS_SHIFT +#undef WIDOWS_MASK +#define ALIGN_CONTENT_INDEX 6 +#define ALIGN_CONTENT_SHIFT 3 +#define ALIGN_CONTENT_MASK 0x38 +#undef ALIGN_CONTENT_INDEX +#undef ALIGN_CONTENT_SHIFT +#undef ALIGN_CONTENT_MASK +#define ALIGN_ITEMS_INDEX 9 +#define ALIGN_ITEMS_SHIFT 23 +#define ALIGN_ITEMS_MASK 0x3800000 +#undef ALIGN_ITEMS_INDEX +#undef ALIGN_ITEMS_SHIFT +#undef ALIGN_ITEMS_MASK +#define ALIGN_SELF_INDEX 9 +#define ALIGN_SELF_SHIFT 14 +#define ALIGN_SELF_MASK 0x1c000 +#undef ALIGN_SELF_INDEX +#undef ALIGN_SELF_SHIFT +#undef ALIGN_SELF_MASK +#define BACKGROUND_ATTACHMENT_INDEX 8 +#define BACKGROUND_ATTACHMENT_SHIFT 24 +#define BACKGROUND_ATTACHMENT_MASK 0x3000000 +#undef BACKGROUND_ATTACHMENT_INDEX +#undef BACKGROUND_ATTACHMENT_SHIFT +#undef BACKGROUND_ATTACHMENT_MASK +#define BACKGROUND_COLOR_INDEX 8 +#define BACKGROUND_COLOR_SHIFT 10 +#define BACKGROUND_COLOR_MASK 0xc00 +#undef BACKGROUND_COLOR_INDEX +#undef BACKGROUND_COLOR_SHIFT +#undef BACKGROUND_COLOR_MASK +#define BACKGROUND_IMAGE_INDEX 10 +#define BACKGROUND_IMAGE_SHIFT 28 +#define BACKGROUND_IMAGE_MASK 0x10000000 +#undef BACKGROUND_IMAGE_INDEX +#undef BACKGROUND_IMAGE_SHIFT +#undef BACKGROUND_IMAGE_MASK +#define BACKGROUND_POSITION_INDEX 5 +#define BACKGROUND_POSITION_SHIFT 21 +#define BACKGROUND_POSITION_MASK 0xffe00000 +#undef BACKGROUND_POSITION_INDEX +#undef BACKGROUND_POSITION_SHIFT +#undef BACKGROUND_POSITION_MASK +#define BACKGROUND_REPEAT_INDEX 9 +#define BACKGROUND_REPEAT_SHIFT 26 +#define BACKGROUND_REPEAT_MASK 0x1c000000 +#undef BACKGROUND_REPEAT_INDEX +#undef BACKGROUND_REPEAT_SHIFT +#undef BACKGROUND_REPEAT_MASK +#define BORDER_BOTTOM_COLOR_INDEX 8 +#define BORDER_BOTTOM_COLOR_SHIFT 2 +#define BORDER_BOTTOM_COLOR_MASK 0xc +#undef BORDER_BOTTOM_COLOR_INDEX +#undef BORDER_BOTTOM_COLOR_SHIFT +#undef BORDER_BOTTOM_COLOR_MASK +#define BORDER_BOTTOM_STYLE_INDEX 6 +#define BORDER_BOTTOM_STYLE_SHIFT 14 +#define BORDER_BOTTOM_STYLE_MASK 0x3c000 +#undef BORDER_BOTTOM_STYLE_INDEX +#undef BORDER_BOTTOM_STYLE_SHIFT +#undef BORDER_BOTTOM_STYLE_MASK +#define BORDER_BOTTOM_WIDTH_INDEX 0 +#define BORDER_BOTTOM_WIDTH_SHIFT 8 +#define BORDER_BOTTOM_WIDTH_MASK 0xff00 +#undef BORDER_BOTTOM_WIDTH_INDEX +#undef BORDER_BOTTOM_WIDTH_SHIFT +#undef BORDER_BOTTOM_WIDTH_MASK +#define BORDER_COLLAPSE_INDEX 8 +#define BORDER_COLLAPSE_SHIFT 4 +#define BORDER_COLLAPSE_MASK 0x30 +#undef BORDER_COLLAPSE_INDEX +#undef BORDER_COLLAPSE_SHIFT +#undef BORDER_COLLAPSE_MASK +#define BORDER_LEFT_COLOR_INDEX 10 +#define BORDER_LEFT_COLOR_SHIFT 30 +#define BORDER_LEFT_COLOR_MASK 0xc0000000 +#undef BORDER_LEFT_COLOR_INDEX +#undef BORDER_LEFT_COLOR_SHIFT +#undef BORDER_LEFT_COLOR_MASK +#define BORDER_LEFT_STYLE_INDEX 4 +#define BORDER_LEFT_STYLE_SHIFT 0 +#define BORDER_LEFT_STYLE_MASK 0xf +#undef BORDER_LEFT_STYLE_INDEX +#undef BORDER_LEFT_STYLE_SHIFT +#undef BORDER_LEFT_STYLE_MASK +#define BORDER_LEFT_WIDTH_INDEX 0 +#define BORDER_LEFT_WIDTH_SHIFT 0 +#define BORDER_LEFT_WIDTH_MASK 0xff +#undef BORDER_LEFT_WIDTH_INDEX +#undef BORDER_LEFT_WIDTH_SHIFT +#undef BORDER_LEFT_WIDTH_MASK +#define BORDER_RIGHT_COLOR_INDEX 8 +#define BORDER_RIGHT_COLOR_SHIFT 26 +#define BORDER_RIGHT_COLOR_MASK 0xc000000 +#undef BORDER_RIGHT_COLOR_INDEX +#undef BORDER_RIGHT_COLOR_SHIFT +#undef BORDER_RIGHT_COLOR_MASK +#define BORDER_RIGHT_STYLE_INDEX 3 +#define BORDER_RIGHT_STYLE_SHIFT 0 +#define BORDER_RIGHT_STYLE_MASK 0xf +#undef BORDER_RIGHT_STYLE_INDEX +#undef BORDER_RIGHT_STYLE_SHIFT +#undef BORDER_RIGHT_STYLE_MASK +#define BORDER_RIGHT_WIDTH_INDEX 0 +#define BORDER_RIGHT_WIDTH_SHIFT 24 +#define BORDER_RIGHT_WIDTH_MASK 0xff000000 +#undef BORDER_RIGHT_WIDTH_INDEX +#undef BORDER_RIGHT_WIDTH_SHIFT +#undef BORDER_RIGHT_WIDTH_MASK +#define BORDER_TOP_COLOR_INDEX 8 +#define BORDER_TOP_COLOR_SHIFT 14 +#define BORDER_TOP_COLOR_MASK 0xc000 +#undef BORDER_TOP_COLOR_INDEX +#undef BORDER_TOP_COLOR_SHIFT +#undef BORDER_TOP_COLOR_MASK +#define BORDER_TOP_STYLE_INDEX 2 +#define BORDER_TOP_STYLE_SHIFT 0 +#define BORDER_TOP_STYLE_MASK 0xf +#undef BORDER_TOP_STYLE_INDEX +#undef BORDER_TOP_STYLE_SHIFT +#undef BORDER_TOP_STYLE_MASK +#define BORDER_TOP_WIDTH_INDEX 0 +#define BORDER_TOP_WIDTH_SHIFT 16 +#define BORDER_TOP_WIDTH_MASK 0xff0000 +#undef BORDER_TOP_WIDTH_INDEX +#undef BORDER_TOP_WIDTH_SHIFT +#undef BORDER_TOP_WIDTH_MASK +#define BOTTOM_INDEX 2 +#define BOTTOM_SHIFT 18 +#define BOTTOM_MASK 0x1fc0000 +#undef BOTTOM_INDEX +#undef BOTTOM_SHIFT +#undef BOTTOM_MASK +#define BOX_SIZING_INDEX 8 +#define BOX_SIZING_SHIFT 18 +#define BOX_SIZING_MASK 0xc0000 +#undef BOX_SIZING_INDEX +#undef BOX_SIZING_SHIFT +#undef BOX_SIZING_MASK +#define CAPTION_SIDE_INDEX 8 +#define CAPTION_SIDE_SHIFT 28 +#define CAPTION_SIDE_MASK 0x30000000 +#undef CAPTION_SIDE_INDEX +#undef CAPTION_SIDE_SHIFT +#undef CAPTION_SIDE_MASK +#define CLEAR_INDEX 9 +#define CLEAR_SHIFT 17 +#define CLEAR_MASK 0xe0000 +#undef CLEAR_INDEX +#undef CLEAR_SHIFT +#undef CLEAR_MASK +#define COLOR_INDEX 9 +#define COLOR_SHIFT 0 +#define COLOR_MASK 0x1 +#undef COLOR_INDEX +#undef COLOR_SHIFT +#undef COLOR_MASK +#define DIRECTION_INDEX 8 +#define DIRECTION_SHIFT 6 +#define DIRECTION_MASK 0xc0 +#undef DIRECTION_INDEX +#undef DIRECTION_SHIFT +#undef DIRECTION_MASK +#define DISPLAY_INDEX 6 +#define DISPLAY_SHIFT 22 +#define DISPLAY_MASK 0x7c00000 +#undef DISPLAY_INDEX +#undef DISPLAY_SHIFT +#undef DISPLAY_MASK +#define EMPTY_CELLS_INDEX 8 +#define EMPTY_CELLS_SHIFT 16 +#define EMPTY_CELLS_MASK 0x30000 +#undef EMPTY_CELLS_INDEX +#undef EMPTY_CELLS_SHIFT +#undef EMPTY_CELLS_MASK +#define FLEX_BASIS_INDEX 3 +#define FLEX_BASIS_SHIFT 25 +#define FLEX_BASIS_MASK 0xfe000000 +#undef FLEX_BASIS_INDEX +#undef FLEX_BASIS_SHIFT +#undef FLEX_BASIS_MASK +#define FLEX_DIRECTION_INDEX 9 +#define FLEX_DIRECTION_SHIFT 29 +#define FLEX_DIRECTION_MASK 0xe0000000 +#undef FLEX_DIRECTION_INDEX +#undef FLEX_DIRECTION_SHIFT +#undef FLEX_DIRECTION_MASK +#define FLEX_GROW_INDEX 10 +#define FLEX_GROW_SHIFT 26 +#define FLEX_GROW_MASK 0x4000000 +#undef FLEX_GROW_INDEX +#undef FLEX_GROW_SHIFT +#undef FLEX_GROW_MASK +#define FLEX_SHRINK_INDEX 10 +#define FLEX_SHRINK_SHIFT 29 +#define FLEX_SHRINK_MASK 0x20000000 +#undef FLEX_SHRINK_INDEX +#undef FLEX_SHRINK_SHIFT +#undef FLEX_SHRINK_MASK +#define FLEX_WRAP_INDEX 9 +#define FLEX_WRAP_SHIFT 1 +#define FLEX_WRAP_MASK 0x6 +#undef FLEX_WRAP_INDEX +#undef FLEX_WRAP_SHIFT +#undef FLEX_WRAP_MASK +#define FLOAT_INDEX 8 +#define FLOAT_SHIFT 22 +#define FLOAT_MASK 0xc00000 +#undef FLOAT_INDEX +#undef FLOAT_SHIFT +#undef FLOAT_MASK +#define FONT_FAMILY_INDEX 6 +#define FONT_FAMILY_SHIFT 0 +#define FONT_FAMILY_MASK 0x7 +#undef FONT_FAMILY_INDEX +#undef FONT_FAMILY_SHIFT +#undef FONT_FAMILY_MASK +#define FONT_SIZE_INDEX 5 +#define FONT_SIZE_SHIFT 12 +#define FONT_SIZE_MASK 0x1ff000 +#undef FONT_SIZE_INDEX +#undef FONT_SIZE_SHIFT +#undef FONT_SIZE_MASK +#define FONT_STYLE_INDEX 8 +#define FONT_STYLE_SHIFT 8 +#define FONT_STYLE_MASK 0x300 +#undef FONT_STYLE_INDEX +#undef FONT_STYLE_SHIFT +#undef FONT_STYLE_MASK +#define FONT_VARIANT_INDEX 7 +#define FONT_VARIANT_SHIFT 0 +#define FONT_VARIANT_MASK 0x3 +#undef FONT_VARIANT_INDEX +#undef FONT_VARIANT_SHIFT +#undef FONT_VARIANT_MASK +#define FONT_WEIGHT_INDEX 1 +#define FONT_WEIGHT_SHIFT 0 +#define FONT_WEIGHT_MASK 0xf +#undef FONT_WEIGHT_INDEX +#undef FONT_WEIGHT_SHIFT +#undef FONT_WEIGHT_MASK +#define HEIGHT_INDEX 1 +#define HEIGHT_SHIFT 18 +#define HEIGHT_MASK 0x1fc0000 +#undef HEIGHT_INDEX +#undef HEIGHT_SHIFT +#undef HEIGHT_MASK +#define JUSTIFY_CONTENT_INDEX 9 +#define JUSTIFY_CONTENT_SHIFT 5 +#define JUSTIFY_CONTENT_MASK 0xe0 +#undef JUSTIFY_CONTENT_INDEX +#undef JUSTIFY_CONTENT_SHIFT +#undef JUSTIFY_CONTENT_MASK +#define LEFT_INDEX 4 +#define LEFT_SHIFT 25 +#define LEFT_MASK 0xfe000000 +#undef LEFT_INDEX +#undef LEFT_SHIFT +#undef LEFT_MASK +#define LINE_HEIGHT_INDEX 4 +#define LINE_HEIGHT_SHIFT 11 +#define LINE_HEIGHT_MASK 0x3f800 +#undef LINE_HEIGHT_INDEX +#undef LINE_HEIGHT_SHIFT +#undef LINE_HEIGHT_MASK +#define LIST_STYLE_IMAGE_INDEX 10 +#define LIST_STYLE_IMAGE_SHIFT 25 +#define LIST_STYLE_IMAGE_MASK 0x2000000 +#undef LIST_STYLE_IMAGE_INDEX +#undef LIST_STYLE_IMAGE_SHIFT +#undef LIST_STYLE_IMAGE_MASK +#define LIST_STYLE_POSITION_INDEX 8 +#define LIST_STYLE_POSITION_SHIFT 0 +#define LIST_STYLE_POSITION_MASK 0x3 +#undef LIST_STYLE_POSITION_INDEX +#undef LIST_STYLE_POSITION_SHIFT +#undef LIST_STYLE_POSITION_MASK +#define LIST_STYLE_TYPE_INDEX 6 +#define LIST_STYLE_TYPE_SHIFT 18 +#define LIST_STYLE_TYPE_MASK 0x3c0000 +#undef LIST_STYLE_TYPE_INDEX +#undef LIST_STYLE_TYPE_SHIFT +#undef LIST_STYLE_TYPE_MASK +#define MARGIN_BOTTOM_INDEX 2 +#define MARGIN_BOTTOM_SHIFT 4 +#define MARGIN_BOTTOM_MASK 0x7f0 +#undef MARGIN_BOTTOM_INDEX +#undef MARGIN_BOTTOM_SHIFT +#undef MARGIN_BOTTOM_MASK +#define MARGIN_LEFT_INDEX 4 +#define MARGIN_LEFT_SHIFT 4 +#define MARGIN_LEFT_MASK 0x7f0 +#undef MARGIN_LEFT_INDEX +#undef MARGIN_LEFT_SHIFT +#undef MARGIN_LEFT_MASK +#define MARGIN_RIGHT_INDEX 4 +#define MARGIN_RIGHT_SHIFT 18 +#define MARGIN_RIGHT_MASK 0x1fc0000 +#undef MARGIN_RIGHT_INDEX +#undef MARGIN_RIGHT_SHIFT +#undef MARGIN_RIGHT_MASK +#define MARGIN_TOP_INDEX 2 +#define MARGIN_TOP_SHIFT 11 +#define MARGIN_TOP_MASK 0x3f800 +#undef MARGIN_TOP_INDEX +#undef MARGIN_TOP_SHIFT +#undef MARGIN_TOP_MASK +#define MAX_HEIGHT_INDEX 3 +#define MAX_HEIGHT_SHIFT 11 +#define MAX_HEIGHT_MASK 0x3f800 +#undef MAX_HEIGHT_INDEX +#undef MAX_HEIGHT_SHIFT +#undef MAX_HEIGHT_MASK +#define MAX_WIDTH_INDEX 1 +#define MAX_WIDTH_SHIFT 11 +#define MAX_WIDTH_MASK 0x3f800 +#undef MAX_WIDTH_INDEX +#undef MAX_WIDTH_SHIFT +#undef MAX_WIDTH_MASK +#define MIN_HEIGHT_INDEX 1 +#define MIN_HEIGHT_SHIFT 4 +#define MIN_HEIGHT_MASK 0x7f0 +#undef MIN_HEIGHT_INDEX +#undef MIN_HEIGHT_SHIFT +#undef MIN_HEIGHT_MASK +#define MIN_WIDTH_INDEX 2 +#define MIN_WIDTH_SHIFT 25 +#define MIN_WIDTH_MASK 0xfe000000 +#undef MIN_WIDTH_INDEX +#undef MIN_WIDTH_SHIFT +#undef MIN_WIDTH_MASK +#define OPACITY_INDEX 10 +#define OPACITY_SHIFT 24 +#define OPACITY_MASK 0x1000000 +#undef OPACITY_INDEX +#undef OPACITY_SHIFT +#undef OPACITY_MASK +#define ORDER_INDEX 10 +#define ORDER_SHIFT 23 +#define ORDER_MASK 0x800000 +#undef ORDER_INDEX +#undef ORDER_SHIFT +#undef ORDER_MASK +#define OUTLINE_STYLE_INDEX 6 +#define OUTLINE_STYLE_SHIFT 10 +#define OUTLINE_STYLE_MASK 0x3c00 +#undef OUTLINE_STYLE_INDEX +#undef OUTLINE_STYLE_SHIFT +#undef OUTLINE_STYLE_MASK +#define OVERFLOW_INDEX 9 +#define OVERFLOW_SHIFT 8 +#define OVERFLOW_MASK 0x700 +#undef OVERFLOW_INDEX +#undef OVERFLOW_SHIFT +#undef OVERFLOW_MASK +#define PADDING_BOTTOM_INDEX 7 +#define PADDING_BOTTOM_SHIFT 26 +#define PADDING_BOTTOM_MASK 0xfc000000 +#undef PADDING_BOTTOM_INDEX +#undef PADDING_BOTTOM_SHIFT +#undef PADDING_BOTTOM_MASK +#define PADDING_LEFT_INDEX 7 +#define PADDING_LEFT_SHIFT 14 +#define PADDING_LEFT_MASK 0xfc000 +#undef PADDING_LEFT_INDEX +#undef PADDING_LEFT_SHIFT +#undef PADDING_LEFT_MASK +#define PADDING_RIGHT_INDEX 7 +#define PADDING_RIGHT_SHIFT 20 +#define PADDING_RIGHT_MASK 0x3f00000 +#undef PADDING_RIGHT_INDEX +#undef PADDING_RIGHT_SHIFT +#undef PADDING_RIGHT_MASK +#define PADDING_TOP_INDEX 7 +#define PADDING_TOP_SHIFT 2 +#define PADDING_TOP_MASK 0xfc +#undef PADDING_TOP_INDEX +#undef PADDING_TOP_SHIFT +#undef PADDING_TOP_MASK +#define POSITION_INDEX 5 +#define POSITION_SHIFT 0 +#define POSITION_MASK 0x7 +#undef POSITION_INDEX +#undef POSITION_SHIFT +#undef POSITION_MASK +#define QUOTES_INDEX 10 +#define QUOTES_SHIFT 27 +#define QUOTES_MASK 0x8000000 +#undef QUOTES_INDEX +#undef QUOTES_SHIFT +#undef QUOTES_MASK +#define RIGHT_INDEX 3 +#define RIGHT_SHIFT 4 +#define RIGHT_MASK 0x7f0 +#undef RIGHT_INDEX +#undef RIGHT_SHIFT +#undef RIGHT_MASK +#define TABLE_LAYOUT_INDEX 8 +#define TABLE_LAYOUT_SHIFT 30 +#define TABLE_LAYOUT_MASK 0xc0000000 +#undef TABLE_LAYOUT_INDEX +#undef TABLE_LAYOUT_SHIFT +#undef TABLE_LAYOUT_MASK +#define TEXT_ALIGN_INDEX 6 +#define TEXT_ALIGN_SHIFT 6 +#define TEXT_ALIGN_MASK 0x3c0 +#undef TEXT_ALIGN_INDEX +#undef TEXT_ALIGN_SHIFT +#undef TEXT_ALIGN_MASK +#define TEXT_DECORATION_INDEX 6 +#define TEXT_DECORATION_SHIFT 27 +#define TEXT_DECORATION_MASK 0xf8000000 +#undef TEXT_DECORATION_INDEX +#undef TEXT_DECORATION_SHIFT +#undef TEXT_DECORATION_MASK +#define TEXT_INDENT_INDEX 7 +#define TEXT_INDENT_SHIFT 8 +#define TEXT_INDENT_MASK 0x3f00 +#undef TEXT_INDENT_INDEX +#undef TEXT_INDENT_SHIFT +#undef TEXT_INDENT_MASK +#define TEXT_TRANSFORM_INDEX 9 +#define TEXT_TRANSFORM_SHIFT 20 +#define TEXT_TRANSFORM_MASK 0x700000 +#undef TEXT_TRANSFORM_INDEX +#undef TEXT_TRANSFORM_SHIFT +#undef TEXT_TRANSFORM_MASK +#define TOP_INDEX 1 +#define TOP_SHIFT 25 +#define TOP_MASK 0xfe000000 +#undef TOP_INDEX +#undef TOP_SHIFT +#undef TOP_MASK +#define UNICODE_BIDI_INDEX 9 +#define UNICODE_BIDI_SHIFT 3 +#define UNICODE_BIDI_MASK 0x18 +#undef UNICODE_BIDI_INDEX +#undef UNICODE_BIDI_SHIFT +#undef UNICODE_BIDI_MASK +#define VERTICAL_ALIGN_INDEX 5 +#define VERTICAL_ALIGN_SHIFT 3 +#define VERTICAL_ALIGN_MASK 0xff8 +#undef VERTICAL_ALIGN_INDEX +#undef VERTICAL_ALIGN_SHIFT +#undef VERTICAL_ALIGN_MASK +#define VISIBILITY_INDEX 8 +#define VISIBILITY_SHIFT 20 +#define VISIBILITY_MASK 0x300000 +#undef VISIBILITY_INDEX +#undef VISIBILITY_SHIFT +#undef VISIBILITY_MASK +#define WHITE_SPACE_INDEX 9 +#define WHITE_SPACE_SHIFT 11 +#define WHITE_SPACE_MASK 0x3800 +#undef WHITE_SPACE_INDEX +#undef WHITE_SPACE_SHIFT +#undef WHITE_SPACE_MASK +#define WIDTH_INDEX 3 +#define WIDTH_SHIFT 18 +#define WIDTH_MASK 0x1fc0000 +#undef WIDTH_INDEX +#undef WIDTH_SHIFT +#undef WIDTH_MASK +#define Z_INDEX_INDEX 8 +#define Z_INDEX_SHIFT 12 +#define Z_INDEX_MASK 0x3000 +#undef Z_INDEX_INDEX +#undef Z_INDEX_SHIFT +#undef Z_INDEX_MASK #endif
\ No newline at end of file diff --git a/src/select/select_config.py b/src/select/select_config.py index 748dc43..8167401 100644 --- a/src/select/select_config.py +++ b/src/select/select_config.py @@ -57,7 +57,7 @@ style = { # Style group, with additional value ('background_color', 2, 'color'), ('background_image', 1, 'string'), - ('background_position', 1, ('length', 'length'), + ('background_position', 1, (('length',), ('length',)), 'CSS_BACKGROUND_POSITION_SET'), ('border_top_color', 2, 'color'), ('border_right_color', 2, 'color'), @@ -111,18 +111,20 @@ page = { ('page_break_after', 3, None, None, 'CSS_PAGE_BREAK_AFTER_AUTO'), ('page_break_before', 3, None, None, 'CSS_PAGE_BREAK_BEFORE_AUTO'), ('page_break_inside', 2, None, None, 'CSS_PAGE_BREAK_INSIDE_AUTO'), - ('widows', 1, ('integer', '2 << CSS_RADIX_POINT'), None, 'CSS_WIDOWS_SET'), - ('orphans', 1, ('integer', '2 << CSS_RADIX_POINT'), None, 'CSS_ORPHANS_SET') + ('widows', 1, (('integer', '2 << CSS_RADIX_POINT'),), None, + 'CSS_WIDOWS_SET'), + ('orphans', 1, (('integer', '2 << CSS_RADIX_POINT'),), None, + 'CSS_ORPHANS_SET') } uncommon = { # Uncommon group - ('border_spacing', 1, ('length', 'length'), 'CSS_BORDER_SPACING_SET', + ('border_spacing', 1, (('length',), ('length',)), 'CSS_BORDER_SPACING_SET', 'CSS_BORDER_SPACING_SET'), ('break_after', 4, None, None, 'CSS_BREAK_AFTER_AUTO'), ('break_before', 4, None, None, 'CSS_BREAK_BEFORE_AUTO'), ('break_inside', 4, None, None, 'CSS_BREAK_INSIDE_AUTO'), - ('clip', 6, ('length', 'length', 'length', 'length'), + ('clip', 6, (('length',), ('length',), ('length',), ('length',)), 'CSS_CLIP_RECT', 'CSS_CLIP_AUTO', None, ('get', 'set')), ('column_count', 2, 'integer', None, 'CSS_COLUMN_COUNT_AUTO'), ('column_fill', 2, None, None, 'CSS_COLUMN_FILL_BALANCE'), diff --git a/src/select/select_generator.py b/src/select/select_generator.py index b913efe..966fa53 100644 --- a/src/select/select_generator.py +++ b/src/select/select_generator.py @@ -8,7 +8,7 @@ import string from select_config import values, groups from assets import assets -def get_tuple(self, from_var): +def get_tuple(from_var): 'Accepts tuples, strings and None; returns a tuple.' if type(from_var) is tuple: return from_var @@ -88,7 +88,8 @@ class Text: line += text[:break_index].rstrip() text = text[break_index:].lstrip() if self._esc_nl: - line += '\t' * (9 - math.floor(len(line) / 8)) + '\\' + n_tabs = 9 - self._indent - math.floor(len(line.lstrip()) / 8) + line += '\t' * n_tabs + '\\' self._lines.append(line) if text and not self._comment and not multiline: self.indent(2) @@ -139,25 +140,29 @@ class CSSProperty: self.condition = condition self.override = get_tuple(override) self.comments = comments + self.__index = None self.__shift = None + self.__mask = None def make_values(self, vals, for_list=False): - if type(vals) is None: + if vals is None: return [] elif type(vals) is str: val_list = [ CSSValue(*x) for x in values if x[0] == vals ] return val_list[0] if for_list else val_list elif type(vals) is tuple: - if len(vals) is 2 and type(vals[0]) is type(vals[1]) is str: - for v in values: - if v[0] == val[0]: - value = CSSValue(v) - value.defaults = get_tuple(vals[1]) - return value if for_list else [ value ] + val_list = [] + for val in vals: + for x in values: + if x[0] == val[0]: + value = CSSValue(*x) + if len(val) is 2: + value.defaults = get_tuple(val[1]) + val_list.append(value) + break else: raise ValueError('Value ' + val[0] + ' not found!') - else: - return [ self.make_values(x, True) for x in vals ] + return val_list else: raise TypeError('Expected None, str or tuple, got ' + type(vals).__name__) @@ -168,7 +173,6 @@ class CSSProperty: raise ValueError('Property has empty defaults!') return self.defaults[0] - @property def default_value(self, index): # First default of property is the opcode if len(self.defaults) < index + 2: @@ -210,6 +214,20 @@ class CSSProperty: (' + ' if vars_size and ptr else '') + ptr) @property + def index(self): + if self.__index is None: + raise NameError('Attribute `index` not set yet!') + return self.__index + + @index.setter + def index(self, val): + if type(val) is not int: + raise TypeError('Value of `index` must be an integer!') + if val < 0: + raise ValueError('Value of `index` must be zero or positive!') + self.__index = val + + @property def shift(self): if self.__shift is None: raise NameError('Attribute `shift` not set yet!') @@ -223,6 +241,21 @@ class CSSProperty: raise ValueError('Value of `shift` must be zero or positive!') self.__shift = val + @property + def mask(self): + if self.__mask is None: + raise NameError('Attribute `mask` not set yet!') + return '0x{:x}'.format(self.__mask).lower() + + @mask.setter + def mask(self, val): + if type(val) is not int: + raise TypeError('Value of `mask` must be an integer!') + if val < 0: + raise ValueError('Value of `mask` must be zero or positive!') + self.__mask = val + + class Bin: def __init__(self, first_object): self.contents = [ first_object ] @@ -274,8 +307,14 @@ class CSSGroup: p.shift = 32 - p.bits_size self.__bits_array.append(Bin(p)) + p.mask = (sum([ 2 ** x for x in range(p.bits_size) ]) * + 2 ** p.shift) self.__bits_array.sort(key=(lambda x: x.size), reverse=True) + for i, b in enumerate(self.__bits_array): + for p in b.contents: + p.index = i + return self.__bits_array def make_computed_h(self): @@ -380,18 +419,52 @@ class CSSGroup: t.append(',\n'.join(bits_ops).split('\n')) t.indent(-1) t.append('},') - - for p in self.props: - t.append(make_value_declaration(False, True)) + t.append(',\n'.join( + self.make_value_declaration(False, True)).split('\n')) if self.name is not 'page': t.indent(-1) t.append('},') - for p in self.props: - t.append(make_value_declaration(True, True)) + t.append(',\n'.join( + self.make_value_declaration(True, True) + + [ '.next = NULL', '.count = 0', '.bin = UINT32_MAX' ] + ).split('\n')) t.indent(-1) t.append('};') + t.append() + + t.escape_newline() + i_dot = '' if self.name is 'page' else 'i.' + t.append('#define ENSURE_{} do {{'.format(self.name.upper())) + t.indent(1) + t.append('if (style->{}{} == NULL) {{'.format(i_dot, self.name)) + t.indent(1) + t.append('style->{}{n} = malloc(sizeof(css_computed_{n}));'.format( + i_dot, n=self.name)) + t.append('if (style->{}{} == NULL)'.format(i_dot, self.name)) + t.indent(1) + t.append('return CSS_NOMEM;') + t.indent(-1) + t.append() + t.append('memcpy(style->{}{n}, &default_{n}, ' + 'sizeof(css_computed_{n}));'.format(i_dot, n=self.name)) + t.indent(-1) + t.append('}') + t.indent(-1) + t.append('} while(0)') + t.escape_newline() + t.append() + + for p in sorted(self.props, key=(lambda x: x.name)): + t.append('#define {}_INDEX {}'.format(p.name.upper(), p.index)) + t.append('#define {}_SHIFT {}'.format(p.name.upper(), p.shift)) + t.append('#define {}_MASK {}'.format(p.name.upper(), p.mask)) + t.append('#undef {}_INDEX'.format(p.name.upper())) + t.append('#undef {}_SHIFT'.format(p.name.upper())) + t.append('#undef {}_MASK'.format(p.name.upper())) + + return t.to_string() @@ -402,11 +475,11 @@ class CSSGroup: for i, v in enumerate(p.values): v_suffix = ('' if len(p.values) is 1 else '_' + string.ascii_lowercase[i]) - v_type, v_name = shift_star(v.type, p.name) if defaults: - r.append('.{} = {},'.format(v_name, + r.append('.{}{} = {}'.format(p.name, v_suffix, p.default_value(i)[0])) else: + v_type, v_name = shift_star(v.type, p.name) r.append('{} {}{};'.format(v_type, v_name, v_suffix)) return r |