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

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

Issue 2538493005: Added initial_keyword flag to CSSProperties.in (Closed)
Patch Set: Review feedback Created 4 years 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
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 from collections import namedtuple 6 from collections import namedtuple
7 import math 7 import math
8 import sys 8 import sys
9 9
10 import in_generator 10 import in_generator
11 import template_expander 11 import template_expander
12 import make_style_builder 12 import make_style_builder
13 13
14 from name_utilities import camel_case
14 15
15 class ComputedStyleBaseWriter(make_style_builder.StyleBuilderWriter): 16 class ComputedStyleBaseWriter(make_style_builder.StyleBuilderWriter):
16 def __init__(self, in_file_path): 17 def __init__(self, in_file_path):
17 super(ComputedStyleBaseWriter, self).__init__(in_file_path) 18 super(ComputedStyleBaseWriter, self).__init__(in_file_path)
18 self._outputs = { 19 self._outputs = {
19 'ComputedStyleBase.h': self.generate_base_computed_style_h, 20 'ComputedStyleBase.h': self.generate_base_computed_style_h,
20 'ComputedStyleBase.cpp': self.generate_base_computed_style_cpp, 21 'ComputedStyleBase.cpp': self.generate_base_computed_style_cpp,
21 'ComputedStyleBaseConstants.h': self.generate_base_computed_style_co nstants, 22 'ComputedStyleBaseConstants.h': self.generate_base_computed_style_co nstants,
22 } 23 }
23 24
24 # A map of enum name -> list of enum values 25 # A map of enum name -> list of enum values
25 self._computed_enums = {} 26 self._computed_enums = {}
26 for property in self._properties.values(): 27 for property in self._properties.values():
27 if property['keyword_only']: 28 if property['keyword_only']:
28 enum_name = property['type_name'] 29 enum_name = property['type_name']
29 # From the Blink style guide: Enum members should use InterCaps with an initial capital letter. [names-enum-members] 30 # From the Blink style guide: Enum members should use InterCaps with an initial capital letter. [names-enum-members]
30 enum_values = [k.title() for k in property['keywords']] 31 enum_values = [camel_case(k) for k in property['keywords']]
31 self._computed_enums[enum_name] = enum_values 32 self._computed_enums[enum_name] = enum_values
32 33
33 # A list of fields 34 # A list of fields
34 Field = namedtuple('Field', [ 35 Field = namedtuple('Field', [
35 # Name of field member variable 36 # Name of field member variable
36 'name', 37 'name',
37 # Property field is for 38 # Property field is for
38 'property', 39 'property',
39 # Field storage type 40 # Field storage type
40 'type', 41 'type',
(...skipping 12 matching lines...) Expand all
53 if property['keyword_only']: 54 if property['keyword_only']:
54 property_name = property['upper_camel_name'] 55 property_name = property['upper_camel_name']
55 if property['name_for_methods']: 56 if property['name_for_methods']:
56 property_name = property['name_for_methods'] 57 property_name = property['name_for_methods']
57 property_name_lower = property_name[0].lower() + property_name[1 :] 58 property_name_lower = property_name[0].lower() + property_name[1 :]
58 59
59 # From the Blink style guide: Other data members should be prefi xed by "m_". [names-data-members] 60 # From the Blink style guide: Other data members should be prefi xed by "m_". [names-data-members]
60 field_name = 'm_' + property_name_lower 61 field_name = 'm_' + property_name_lower
61 bits_needed = math.log(len(property['keywords']), 2) 62 bits_needed = math.log(len(property['keywords']), 2)
62 type_name = property['type_name'] 63 type_name = property['type_name']
63 # For now, assume the default value is the first enum value. 64
64 default_value = type_name + '::' + self._computed_enums[type_nam e][0] 65 assert property['initial_keyword'] is not None, \
66 ('MakeComputedStyleBase requires an initial keyword for keyw ord_only values, none specified '
67 'for property ' + property['name'])
68 default_value = type_name + '::' + camel_case(property['initial_ keyword'])
65 69
66 self._fields.append(Field( 70 self._fields.append(Field(
67 name=field_name, 71 name=field_name,
68 property=property, 72 property=property,
69 type=type_name, 73 type=type_name,
70 size=int(math.ceil(bits_needed)), 74 size=int(math.ceil(bits_needed)),
71 default_value=default_value, 75 default_value=default_value,
72 getter_method_name=property_name_lower, 76 getter_method_name=property_name_lower,
73 setter_method_name='set' + property_name, 77 setter_method_name='set' + property_name,
74 initial_method_name='initial' + property_name, 78 initial_method_name='initial' + property_name,
(...skipping 19 matching lines...) Expand all
94 @template_expander.use_jinja('ComputedStyleBaseConstants.h.tmpl') 98 @template_expander.use_jinja('ComputedStyleBaseConstants.h.tmpl')
95 def generate_base_computed_style_constants(self): 99 def generate_base_computed_style_constants(self):
96 return { 100 return {
97 'properties': self._properties, 101 'properties': self._properties,
98 'enums': self._computed_enums, 102 'enums': self._computed_enums,
99 'fields': self._fields, 103 'fields': self._fields,
100 } 104 }
101 105
102 if __name__ == '__main__': 106 if __name__ == '__main__':
103 in_generator.Maker(ComputedStyleBaseWriter).main(sys.argv) 107 in_generator.Maker(ComputedStyleBaseWriter).main(sys.argv)
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/build/scripts/css_properties.py ('k') | third_party/WebKit/Source/core/css/CSSProperties.in » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698