OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright 2016 The Chromium Authors. All rights reserved. | 2 # Copyright 2016 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 import math | 6 import math |
7 import sys | 7 import sys |
8 | 8 |
9 import json5_generator | 9 import json5_generator |
10 import template_expander | 10 import template_expander |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 type_name: Name of the C++ type exposed by the generated interface (e.g.
EClear, int). | 113 type_name: Name of the C++ type exposed by the generated interface (e.g.
EClear, int). |
114 wrapper_pointer_name: Name of the pointer type that wraps this field (e.
g. RefPtr). | 114 wrapper_pointer_name: Name of the pointer type that wraps this field (e.
g. RefPtr). |
115 field_template: Determines the interface generated for the field. Can be
one of: | 115 field_template: Determines the interface generated for the field. Can be
one of: |
116 keyword, flag, or monotonic_flag. | 116 keyword, flag, or monotonic_flag. |
117 field_group: The name of the group that this field is inside. | 117 field_group: The name of the group that this field is inside. |
118 size: Number of bits needed for storage. | 118 size: Number of bits needed for storage. |
119 default_value: Default value for this field when it is first initialized
. | 119 default_value: Default value for this field when it is first initialized
. |
120 """ | 120 """ |
121 | 121 |
122 def __init__(self, field_role, name_for_methods, property_name, type_name, w
rapper_pointer_name, | 122 def __init__(self, field_role, name_for_methods, property_name, type_name, w
rapper_pointer_name, |
123 field_template, field_group, size, default_value, has_custom_co
mpare_and_copy, | 123 field_template, field_group, size, default_value, custom_copy,
custom_compare, |
124 getter_method_name, setter_method_name, initial_method_name, **
kwargs): | 124 getter_method_name, setter_method_name, initial_method_name, **
kwargs): |
125 """Creates a new field.""" | 125 """Creates a new field.""" |
126 self.name = class_member_name(name_for_methods) | 126 self.name = class_member_name(name_for_methods) |
127 self.property_name = property_name | 127 self.property_name = property_name |
128 self.type_name = type_name | 128 self.type_name = type_name |
129 self.wrapper_pointer_name = wrapper_pointer_name | 129 self.wrapper_pointer_name = wrapper_pointer_name |
130 self.alignment_type = self.wrapper_pointer_name or self.type_name | 130 self.alignment_type = self.wrapper_pointer_name or self.type_name |
131 self.field_template = field_template | 131 self.field_template = field_template |
132 self.group_name = field_group | 132 self.group_name = field_group |
133 self.group_member_name = class_member_name(join_name(field_group, 'data'
)) if field_group else None | 133 self.group_member_name = class_member_name(join_name(field_group, 'data'
)) if field_group else None |
134 self.size = size | 134 self.size = size |
135 self.default_value = default_value | 135 self.default_value = default_value |
136 self.has_custom_compare_and_copy = has_custom_compare_and_copy | 136 self.custom_copy = custom_copy |
| 137 self.custom_compare = custom_compare |
137 | 138 |
138 # Field role: one of these must be true | 139 # Field role: one of these must be true |
139 self.is_property = field_role == 'property' | 140 self.is_property = field_role == 'property' |
140 self.is_inherited_flag = field_role == 'inherited_flag' | 141 self.is_inherited_flag = field_role == 'inherited_flag' |
141 assert (self.is_property, self.is_inherited_flag).count(True) == 1, \ | 142 assert (self.is_property, self.is_inherited_flag).count(True) == 1, \ |
142 'Field role has to be exactly one of: property, inherited_flag' | 143 'Field role has to be exactly one of: property, inherited_flag' |
143 | 144 |
144 if not self.is_inherited_flag: | 145 if not self.is_inherited_flag: |
145 self.is_inherited = kwargs.pop('inherited') | 146 self.is_inherited = kwargs.pop('inherited') |
146 self.is_independent = kwargs.pop('independent') | 147 self.is_independent = kwargs.pop('independent') |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 name_for_methods, | 292 name_for_methods, |
292 property_name=property_['name'], | 293 property_name=property_['name'], |
293 inherited=property_['inherited'], | 294 inherited=property_['inherited'], |
294 independent=property_['independent'], | 295 independent=property_['independent'], |
295 type_name=type_name, | 296 type_name=type_name, |
296 wrapper_pointer_name=property_['wrapper_pointer_name'], | 297 wrapper_pointer_name=property_['wrapper_pointer_name'], |
297 field_template=property_['field_template'], | 298 field_template=property_['field_template'], |
298 field_group=property_['field_group'], | 299 field_group=property_['field_group'], |
299 size=size, | 300 size=size, |
300 default_value=default_value, | 301 default_value=default_value, |
301 has_custom_compare_and_copy=property_['has_custom_compare_and_copy'], | 302 custom_copy=property_['custom_copy'], |
| 303 custom_compare=property_['custom_compare'], |
302 getter_method_name=property_['getter'], | 304 getter_method_name=property_['getter'], |
303 setter_method_name=property_['setter'], | 305 setter_method_name=property_['setter'], |
304 initial_method_name=property_['initial'], | 306 initial_method_name=property_['initial'], |
305 ) | 307 ) |
306 | 308 |
307 | 309 |
308 def _create_inherited_flag_field(property_): | 310 def _create_inherited_flag_field(property_): |
309 """ | 311 """ |
310 Create the field used for an inheritance fast path from an independent CSS p
roperty, | 312 Create the field used for an inheritance fast path from an independent CSS p
roperty, |
311 and return the Field object. | 313 and return the Field object. |
312 """ | 314 """ |
313 name_for_methods = join_name(property_['name_for_methods'], 'is inherited') | 315 name_for_methods = join_name(property_['name_for_methods'], 'is inherited') |
314 return Field( | 316 return Field( |
315 'inherited_flag', | 317 'inherited_flag', |
316 name_for_methods, | 318 name_for_methods, |
317 property_name=property_['name'], | 319 property_name=property_['name'], |
318 type_name='bool', | 320 type_name='bool', |
319 wrapper_pointer_name=None, | 321 wrapper_pointer_name=None, |
320 field_template='primitive', | 322 field_template='primitive', |
321 field_group=property_['field_group'], | 323 field_group=property_['field_group'], |
322 size=1, | 324 size=1, |
323 default_value='true', | 325 default_value='true', |
324 has_custom_compare_and_copy=False, | 326 custom_copy=False, |
| 327 custom_compare=False, |
325 getter_method_name=method_name(name_for_methods), | 328 getter_method_name=method_name(name_for_methods), |
326 setter_method_name=method_name(join_name('set', name_for_methods)), | 329 setter_method_name=method_name(join_name('set', name_for_methods)), |
327 initial_method_name=method_name(join_name('initial', name_for_methods)), | 330 initial_method_name=method_name(join_name('initial', name_for_methods)), |
328 ) | 331 ) |
329 | 332 |
330 | 333 |
331 def _create_fields(properties): | 334 def _create_fields(properties): |
332 """ | 335 """ |
333 Create ComputedStyle fields from properties and return a list of Field objec
ts. | 336 Create ComputedStyle fields from properties and return a list of Field objec
ts. |
334 """ | 337 """ |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
403 | 406 |
404 # Ignore shorthand properties | 407 # Ignore shorthand properties |
405 for property_ in self._properties.values(): | 408 for property_ in self._properties.values(): |
406 if property_['field_template'] is not None: | 409 if property_['field_template'] is not None: |
407 assert not property_['longhands'], \ | 410 assert not property_['longhands'], \ |
408 "Shorthand '{}' cannot have a field_template.".format(proper
ty_['name']) | 411 "Shorthand '{}' cannot have a field_template.".format(proper
ty_['name']) |
409 | 412 |
410 css_properties = [value for value in self._properties.values() if not va
lue['longhands']] | 413 css_properties = [value for value in self._properties.values() if not va
lue['longhands']] |
411 | 414 |
412 for property_ in css_properties: | 415 for property_ in css_properties: |
413 # All CSS properties that are generated do not have custom compariso
n and copy logic. | 416 # All CSS properties from CSSProperties.json5 do not have custom com
parison and copy logic. |
414 property_['has_custom_compare_and_copy'] = False | 417 property_['custom_copy'] = False |
| 418 property_['custom_compare'] = False |
415 | 419 |
416 # Read extra fields using the parameter specification from the CSS prope
rties file. | 420 # Read extra fields using the parameter specification from the CSS prope
rties file. |
417 extra_fields = json5_generator.Json5File.load_from_files( | 421 extra_fields = json5_generator.Json5File.load_from_files( |
418 [json5_file_paths[1]], | 422 [json5_file_paths[1]], |
419 default_parameters=self.json5_file.parameters | 423 default_parameters=self.json5_file.parameters |
420 ).name_dictionaries | 424 ).name_dictionaries |
421 | 425 |
422 for property_ in extra_fields: | 426 for property_ in extra_fields: |
423 make_style_builder.apply_property_naming_defaults(property_) | 427 make_style_builder.apply_property_naming_defaults(property_) |
424 | 428 |
(...skipping 28 matching lines...) Expand all Loading... |
453 | 457 |
454 @template_expander.use_jinja('ComputedStyleBaseConstants.h.tmpl') | 458 @template_expander.use_jinja('ComputedStyleBaseConstants.h.tmpl') |
455 def generate_base_computed_style_constants(self): | 459 def generate_base_computed_style_constants(self): |
456 return { | 460 return { |
457 'properties': self._properties, | 461 'properties': self._properties, |
458 'enums': self._generated_enums, | 462 'enums': self._generated_enums, |
459 } | 463 } |
460 | 464 |
461 if __name__ == '__main__': | 465 if __name__ == '__main__': |
462 json5_generator.Maker(ComputedStyleBaseWriter).main() | 466 json5_generator.Maker(ComputedStyleBaseWriter).main() |
OLD | NEW |