From 609e1623335d5d5147439c5ba600152e963fc951 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Sun, 27 Nov 2022 15:49:36 +0000 Subject: select: generator: Split out propget printer --- src/select/select_generator.py | 119 +++++++++++++++++++++-------------------- 1 file changed, 61 insertions(+), 58 deletions(-) (limited to 'src') diff --git a/src/select/select_generator.py b/src/select/select_generator.py index ece7a91..dcb0429 100644 --- a/src/select/select_generator.py +++ b/src/select/select_generator.py @@ -707,80 +707,83 @@ class CSSGroup: return t.to_string() - def make_propget_h(self): - """Output this group's property functions for the propget.h file.""" - t = Text() + def print_propget(self, t, p): i_dot, grp = self.get_idot_grp() - for p in sorted(self.props, key=(lambda x: x.name)): - defines, undefs = p.def_undefs + vals = p.get_param_values(pointer=True) + params = ', '.join([ 'css_computed_style *style' ] + + [ ' '.join(x) for x in vals ]) + t.append('static inline uint8_t get_{}(const {})'.format( + p.name, params)) + t.append('{') + t.indent(1) - t.append() - t.append(defines) + if self.name != 'style': + t.append('if (style{} != NULL) {{'.format(grp)) + t.indent(1) - if p.name in overrides['get']: - t.append(overrides['get'][p.name], pre_formatted=True) - t.append(undefs) - continue + t.append('uint32_t bits = style{}->{}bits[{}_INDEX];'.format( + grp, i_dot, p.name.upper())) + t.append('bits &= {}_MASK;'.format(p.name.upper())) + t.append('bits >>= {}_SHIFT;'.format(p.name.upper())) + t.append() - vals = p.get_param_values(pointer=True) - params = ', '.join([ 'css_computed_style *style' ] - + [ ' '.join(x) for x in vals ]) - t.append('static inline uint8_t get_{}(const {})'.format( - p.name, params)) - t.append('{') - t.indent(1) + type_mask, shift_list, bits_comment = p.get_bits() + t.append(bits_comment) - if self.name != 'style': - t.append('if (style{} != NULL) {{'.format(grp)) - t.indent(1) + if p.condition: + t.append('if ((bits & {}) == {}) {{'.format( + type_mask, p.condition)) + t.indent(1) - t.append('uint32_t bits = style{}->{}bits[{}_INDEX];'.format( - grp, i_dot, p.name.upper())) - t.append('bits &= {}_MASK;'.format(p.name.upper())) - t.append('bits >>= {}_SHIFT;'.format(p.name.upper())) - t.append() + for v in p.values: + this_idot = '' if v.is_ptr and v.name != 'string' else i_dot + t.append('*{} = style{}->{}{};'.format( + v.name + v.suffix, grp, this_idot, p.name + v.suffix)) + for i, v in enumerate(list(reversed(shift_list))): + if i == 0: + t.append('*{} = bits >> {};'.format(v[0], v[1])) + else: + t.append('*{} = (bits & 0x{:x}) >> {};'.format( + v[0], v[2], v[1]).lower()) - type_mask, shift_list, bits_comment = p.get_bits() - t.append(bits_comment) + if p.condition: + t.indent(-1) + t.append('}') - if p.condition: - t.append('if ((bits & {}) == {}) {{'.format( - type_mask, p.condition)) - t.indent(1) + t.append() + t.append('return (bits & {});'.format(type_mask)) + if self.name != 'style': + t.indent(-1) + t.append('}') + t.append() + t.append('/* Initial value */') for v in p.values: - this_idot = '' if v.is_ptr and v.name != 'string' else i_dot - t.append('*{} = style{}->{}{};'.format( - v.name + v.suffix, grp, this_idot, p.name + v.suffix)) - for i, v in enumerate(list(reversed(shift_list))): - if i == 0: - t.append('*{} = bits >> {};'.format(v[0], v[1])) - else: - t.append('*{} = (bits & 0x{:x}) >> {};'.format( - v[0], v[2], v[1]).lower()) + t.append('*{} = {};'.format(v.name + v.suffix, v.defaults)) + if v.bits is not None: + t.append('*{} = {};'.format( + v.bits['name'] + v.suffix, v.bits['defaults'])) + t.append('return {};'.format(p.defaults)) - if p.condition: - t.indent(-1) - t.append('}') + t.indent(-1) + t.append('}') + + def make_propget_h(self): + """Output this group's property functions for the propget.h file.""" + t = Text() + + for p in sorted(self.props, key=(lambda x: x.name)): + defines, undefs = p.def_undefs t.append() - t.append('return (bits & {});'.format(type_mask)) + t.append(defines) - if self.name != 'style': - t.indent(-1) - t.append('}') - t.append() - t.append('/* Initial value */') - for v in p.values: - t.append('*{} = {};'.format(v.name + v.suffix, v.defaults)) - if v.bits is not None: - t.append('*{} = {};'.format( - v.bits['name'] + v.suffix, v.bits['defaults'])) - t.append('return {};'.format(p.defaults)) + if p.name in overrides['get']: + t.append(overrides['get'][p.name], pre_formatted=True) + else: + self.print_propget(t, p) - t.indent(-1) - t.append('}') t.append(undefs) return t.to_string() -- cgit v1.2.3