Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: third_party/WebKit/Source/build/scripts/make_computed_style_base.py

Issue 2801523002: Allow ComputedStyleBase property fields to be storage_only. (Closed)
Patch Set: Rebase Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/css/CSSProperties.json5 » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 {'name': 'HasExplicitlyInheritedProperties', 'field_template': 'monotonic_fl ag', 51 {'name': 'HasExplicitlyInheritedProperties', 'field_template': 'monotonic_fl ag',
52 'inherited': False, 'independent': False, 'default_value': False}, 52 'inherited': False, 'independent': False, 'default_value': False},
53 # These are set if we used viewport or rem units when resolving a length. 53 # These are set if we used viewport or rem units when resolving a length.
54 # TODO(shend): HasViewportUnits should be a monotonic_flag. 54 # TODO(shend): HasViewportUnits should be a monotonic_flag.
55 {'name': 'HasViewportUnits', 'field_template': 'primitive', 'default_value': 'false', 55 {'name': 'HasViewportUnits', 'field_template': 'primitive', 'default_value': 'false',
56 'type_name': 'bool', 'inherited': False, 'independent': False}, 56 'type_name': 'bool', 'inherited': False, 'independent': False},
57 {'name': 'HasRemUnits', 'field_template': 'monotonic_flag', 'default_value': 'false', 57 {'name': 'HasRemUnits', 'field_template': 'monotonic_flag', 'default_value': 'false',
58 'inherited': False, 'independent': False}, 58 'inherited': False, 'independent': False},
59 # These properties only have generated storage, and their methods are handwr itten in ComputedStyle. 59 # These properties only have generated storage, and their methods are handwr itten in ComputedStyle.
60 # TODO(shend): Remove these fields and delete the 'storage_only' template. 60 # TODO(shend): Remove these fields and delete the 'storage_only' template.
61 {'name': 'EmptyState', 'field_template': 'storage_only', 'size': 1, 'default _value': 'false', 61 {'name': 'EmptyState', 'field_template': 'storage_only', 'field_size': 1, 'd efault_value': 'false',
62 'type_name': 'bool', 'inherited': False, 'independent': False}, 62 'type_name': 'bool', 'inherited': False, 'independent': False},
63 {'name': 'StyleType', 'field_template': 'storage_only', 'size': 6, 'default_ value': '0', 63 {'name': 'StyleType', 'field_template': 'storage_only', 'field_size': 6, 'de fault_value': '0',
64 'type_name': 'PseudoId', 'inherited': False, 'independent': False}, 64 'type_name': 'PseudoId', 'inherited': False, 'independent': False},
65 {'name': 'PseudoBits', 'field_template': 'storage_only', 'size': 8, 'default _value': 'kPseudoIdNone', 65 {'name': 'PseudoBits', 'field_template': 'storage_only', 'field_size': 8, 'd efault_value': 'kPseudoIdNone',
66 'type_name': 'PseudoId', 'inherited': False, 'independent': False}, 66 'type_name': 'PseudoId', 'inherited': False, 'independent': False},
67 # True if 'underline solid' is the only text decoration on this element. 67 # True if 'underline solid' is the only text decoration on this element.
68 {'name': 'HasSimpleUnderline', 'field_template': 'storage_only', 'size': 1, 'default_value': 'false', 68 {'name': 'HasSimpleUnderline', 'field_template': 'storage_only', 'field_size ': 1, 'default_value': 'false',
69 'type_name': 'bool', 'inherited': True, 'independent': False}, 69 'type_name': 'bool', 'inherited': True, 'independent': False},
70 # TODO(shend): vertical align is actually a CSS property, but since we don't support union fields 70 # TODO(shend): vertical align is actually a CSS property, but since we don't support union fields
71 # which can be either a keyword or Length, this is generated as a nonpropert y for now. Remove this 71 # which can be either a keyword or Length, this is generated as a nonpropert y for now. Remove this
72 # once we can support union fields and groups. 72 # once we can support union fields and groups.
73 {'name': 'VerticalAlign', 'field_template': 'storage_only', 'size': 4, 'defa ult_value': 'EVerticalAlign::kBaseline', 73 {'name': 'VerticalAlign', 'field_template': 'storage_only', 'field_size': 4, 'default_value': 'EVerticalAlign::kBaseline',
74 'type_name': 'EVerticalAlign', 'inherited': False, 'independent': False}, 74 'type_name': 'EVerticalAlign', 'inherited': False, 'independent': False},
75 ] 75 ]
76 76
77 77
78 class Field(object): 78 class Field(object):
79 """ 79 """
80 The generated ComputedStyle object is made up of a series of Fields. 80 The generated ComputedStyle object is made up of a series of Fields.
81 Each Field has a name, size, type, etc, and a bunch of attributes to 81 Each Field has a name, size, type, etc, and a bunch of attributes to
82 determine which methods it will be used in. 82 determine which methods it will be used in.
83 83
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 'for property ' + property_['name']) 192 'for property ' + property_['name'])
193 193
194 if property_['field_template'] == 'keyword': 194 if property_['field_template'] == 'keyword':
195 type_name = property_['type_name'] 195 type_name = property_['type_name']
196 default_value = type_name + '::' + enum_value_name(property_['default_va lue']) 196 default_value = type_name + '::' + enum_value_name(property_['default_va lue'])
197 size = int(math.ceil(math.log(len(property_['keywords']), 2))) 197 size = int(math.ceil(math.log(len(property_['keywords']), 2)))
198 elif property_['field_template'] == 'storage_only': 198 elif property_['field_template'] == 'storage_only':
199 # 'storage_only' fields need to specify a size, type_name and default_va lue 199 # 'storage_only' fields need to specify a size, type_name and default_va lue
200 type_name = property_['type_name'] 200 type_name = property_['type_name']
201 default_value = property_['default_value'] 201 default_value = property_['default_value']
202 size = property_['size'] 202 size = property_['field_size']
203 elif property_['field_template'] == 'external': 203 elif property_['field_template'] == 'external':
204 type_name = property_['type_name'] 204 type_name = property_['type_name']
205 default_value = property_['default_value'] 205 default_value = property_['default_value']
206 size = None 206 size = None
207 elif property_['field_template'] == 'primitive': 207 elif property_['field_template'] == 'primitive':
208 type_name = property_['type_name'] 208 type_name = property_['type_name']
209 default_value = property_['default_value'] 209 default_value = property_['default_value']
210 size = 1 if type_name == 'bool' else None # pack bools with 1 bit. 210 size = 1 if type_name == 'bool' else None # pack bools with 1 bit.
211 else: 211 else:
212 assert property_['field_template'] in ('monotonic_flag',) 212 assert property_['field_template'] in ('monotonic_flag',)
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 # since the JSON5 reader will handle missing fields and defaults. 310 # since the JSON5 reader will handle missing fields and defaults.
311 for property_ in NONPROPERTIES: 311 for property_ in NONPROPERTIES:
312 property_['name_for_methods'] = property_['name'] 312 property_['name_for_methods'] = property_['name']
313 if 'field_type_path' not in property_: 313 if 'field_type_path' not in property_:
314 property_['field_type_path'] = None 314 property_['field_type_path'] = None
315 if 'type_name' not in property_: 315 if 'type_name' not in property_:
316 property_['type_name'] = 'E' + enum_type_name(property_['name_fo r_methods']) 316 property_['type_name'] = 'E' + enum_type_name(property_['name_fo r_methods'])
317 317
318 property_values = self._properties.values() 318 property_values = self._properties.values()
319 319
320 # Override the type name when field_type_path is specified
321 for property_ in property_values: 320 for property_ in property_values:
321 # Override the type name when field_type_path is specified
322 if property_['field_type_path']: 322 if property_['field_type_path']:
323 property_['type_name'] = property_['field_type_path'].split('/') [-1] 323 property_['type_name'] = property_['field_type_path'].split('/') [-1]
324 # CSS properties are not allowed to explicitly specify their field_s ize.
325 property_['field_size'] = None
324 326
325 self._generated_enums = _create_enums(property_values + NONPROPERTIES) 327 self._generated_enums = _create_enums(property_values + NONPROPERTIES)
326 328
327 all_fields = (_create_fields('property', property_values) + 329 all_fields = (_create_fields('property', property_values) +
328 _create_fields('nonproperty', NONPROPERTIES)) 330 _create_fields('nonproperty', NONPROPERTIES))
329 331
330 # Separate the normal fields from the bit fields 332 # Separate the normal fields from the bit fields
331 bit_fields = [field for field in all_fields if field.is_bit_field] 333 bit_fields = [field for field in all_fields if field.is_bit_field]
332 normal_fields = [field for field in all_fields if not field.is_bit_field ] 334 normal_fields = [field for field in all_fields if not field.is_bit_field ]
333 335
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 'mapping': [(enum_value_name(k), enum_for_css_keyword(k)) fo r k in property_['keywords']], 404 'mapping': [(enum_value_name(k), enum_for_css_keyword(k)) fo r k in property_['keywords']],
403 } 405 }
404 406
405 return { 407 return {
406 'include_paths': self._include_paths, 408 'include_paths': self._include_paths,
407 'mappings': mappings, 409 'mappings': mappings,
408 } 410 }
409 411
410 if __name__ == '__main__': 412 if __name__ == '__main__':
411 json5_generator.Maker(ComputedStyleBaseWriter).main() 413 json5_generator.Maker(ComputedStyleBaseWriter).main()
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/core/css/CSSProperties.json5 » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698