summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2022-11-27 15:49:36 +0000
committerMichael Drake <mdrake.unique@gmail.com>2022-11-27 16:22:21 +0000
commit609e1623335d5d5147439c5ba600152e963fc951 (patch)
treec6748e0c463a83297cb6fe1f9da7f5d3c8391070 /src
parent64f864c7e3ce9dcbd5964c5084075f07af169b0d (diff)
downloadlibcss-609e1623335d5d5147439c5ba600152e963fc951.tar.gz
libcss-609e1623335d5d5147439c5ba600152e963fc951.tar.bz2
select: generator: Split out propget printer
Diffstat (limited to 'src')
-rw-r--r--src/select/select_generator.py119
1 files changed, 61 insertions, 58 deletions
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()