summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLucas Neves <lcneves@gmail.com>2017-11-06 22:31:54 -0500
committerLucas Neves <lcneves@gmail.com>2017-11-06 22:31:54 -0500
commit07e70a6e395dde906434995110c93e892b09b585 (patch)
tree7274f6dda17fdda06510bbd0245d995cccdc05a0
parent467261fe7df209b4b329176051f71e8a546f9829 (diff)
downloadlibcss-07e70a6e395dde906434995110c93e892b09b585.tar.gz
WIP: Select: autogen for selection properties.
-rw-r--r--src/select/__pycache__/assets.cpython-36.pycbin1911 -> 1913 bytes
-rw-r--r--src/select/__pycache__/select_config.cpython-36.pycbin6514 -> 6594 bytes
-rw-r--r--src/select/autogenerated_computed.h70
-rw-r--r--src/select/autogenerated_propset.h687
-rw-r--r--src/select/select_config.py12
-rw-r--r--src/select/select_generator.py111
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
index f13ccad..b5bf9ca 100644
--- a/src/select/__pycache__/assets.cpython-36.pyc
+++ b/src/select/__pycache__/assets.cpython-36.pyc
Binary files differ
diff --git a/src/select/__pycache__/select_config.cpython-36.pyc b/src/select/__pycache__/select_config.cpython-36.pyc
index 27faa8b..738f7c8 100644
--- a/src/select/__pycache__/select_config.cpython-36.pyc
+++ b/src/select/__pycache__/select_config.cpython-36.pyc
Binary files differ
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