| Index: third_party/WebKit/Source/build/scripts/make_computed_style_base.py
|
| diff --git a/third_party/WebKit/Source/build/scripts/make_computed_style_base.py b/third_party/WebKit/Source/build/scripts/make_computed_style_base.py
|
| index af01def834510dff821fc21fe183a8f67123d5d6..a24ebf77efced89cf7d6c5161883e351b035c966 100755
|
| --- a/third_party/WebKit/Source/build/scripts/make_computed_style_base.py
|
| +++ b/third_party/WebKit/Source/build/scripts/make_computed_style_base.py
|
| @@ -31,23 +31,28 @@ class Field(object):
|
| regular member variables, or more complex storage like vectors or hashmaps.
|
| Almost all properties will have at least one Field, often more than one.
|
|
|
| - Fields also fall into various families, which determine the logic that is
|
| - used to generate them. The available field families are:
|
| + Fields also fall into various roles, which determine the logic that is
|
| + used to generate them. The available field roles are:
|
| - 'property', for fields that store CSS properties
|
| - 'inherited_flag', for single-bit flags that store whether a property is
|
| inherited by this style or set explicitly
|
| + - 'nonproperty', for fields that are not CSS properties
|
| """
|
|
|
| # List of required attributes for a field which need to be passed in by
|
| - # keyword arguments
|
| + # keyword arguments. See CSSProperties.json5 for an explanation of each
|
| + # attribute.
|
| REQUIRED_ATTRIBUTES = set([
|
| # Name of field
|
| 'name',
|
| # Name of property field is for
|
| 'property_name',
|
| - # Internal field storage type (storage_type_path can be None)
|
| - 'storage_type',
|
| - 'storage_type_path',
|
| + # Name of the type (e.g. EClear, int)
|
| + 'type_name',
|
| + # Path to predefined class for overriding generated types.
|
| + 'field_type_path',
|
| + # Affects how the field is generated (keyword, flag)
|
| + 'field_template',
|
| # Bits needed for storage
|
| 'size',
|
| # Default value for field
|
| @@ -59,18 +64,18 @@ class Field(object):
|
| 'resetter_method_name',
|
| ])
|
|
|
| - def __init__(self, field_family, **kwargs):
|
| + def __init__(self, field_role, **kwargs):
|
| # Values common to all fields
|
| # Set attributes from the keyword arguments
|
| for attrib in Field.REQUIRED_ATTRIBUTES:
|
| setattr(self, attrib, kwargs.pop(attrib))
|
|
|
| - # Field family: one of these must be true
|
| - self.is_property = field_family == 'property'
|
| - self.is_inherited_flag = field_family == 'inherited_flag'
|
| - self.is_nonproperty = field_family == 'nonproperty'
|
| + # Field role: one of these must be true
|
| + self.is_property = field_role == 'property'
|
| + self.is_inherited_flag = field_role == 'inherited_flag'
|
| + self.is_nonproperty = field_role == 'nonproperty'
|
| assert (self.is_property, self.is_inherited_flag, self.is_nonproperty).count(True) == 1, \
|
| - 'Field family has to be exactly one of: property, inherited_flag, nonproperty'
|
| + 'Field role has to be exactly one of: property, inherited_flag, nonproperty'
|
|
|
| if self.is_property:
|
| self.is_inherited = kwargs.pop('inherited')
|
| @@ -91,8 +96,8 @@ def _create_enums(properties):
|
| """
|
| enums = {}
|
| for property_ in properties:
|
| - # Only generate enums for keyword properties that use the default field_storage_type.
|
| - if property_['keyword_only'] and property_['field_storage_type'] is None:
|
| + # Only generate enums for keyword properties that use the default field_type_path.
|
| + if property_['field_template'] == 'keyword' and property_['field_type_path'] is None:
|
| enum_name = property_['type_name']
|
| # From the Blink style guide: Enum members should use InterCaps with an initial capital letter. [names-enum-members]
|
| enum_values = [('k' + camel_case(k)) for k in property_['keywords']]
|
| @@ -118,15 +123,15 @@ def _create_property_field(property_):
|
|
|
| # From the Blink style guide: Other data members should be prefixed by "m_". [names-data-members]
|
| field_name = 'm_' + property_name_lower
|
| - bits_needed = math.log(len(property_['keywords']), 2)
|
| + bits_needed = math.log(len(property_['keywords']), 2) # TODO: implement for non-enums
|
|
|
| # Separate the type path from the type name, if specified.
|
| - if property_['field_storage_type']:
|
| - type_path = property_['field_storage_type']
|
| - type_name = type_path.split('/')[-1]
|
| + if property_['field_type_path']:
|
| + field_type_path = property_['field_type_path']
|
| + type_name = field_type_path.split('/')[-1]
|
| else:
|
| + field_type_path = None
|
| type_name = property_['type_name']
|
| - type_path = None
|
|
|
| # For now, the getter name should match the field name. Later, getter names
|
| # will start with an uppercase letter, so if they conflict with the type name,
|
| @@ -136,19 +141,19 @@ def _create_property_field(property_):
|
| getter_method_name = 'get' + property_name
|
|
|
| assert property_['initial_keyword'] is not None, \
|
| - ('MakeComputedStyleBase requires an initial keyword for keyword_only values, none specified '
|
| + ('MakeComputedStyleBase requires an initial keyword for keyword fields, none specified '
|
| 'for property ' + property_['name'])
|
| default_value = type_name + '::k' + camel_case(property_['initial_keyword'])
|
|
|
| - # Add the property itself as a member variable.
|
| return Field(
|
| 'property',
|
| name=field_name,
|
| property_name=property_['name'],
|
| inherited=property_['inherited'],
|
| independent=property_['independent'],
|
| - storage_type=type_name,
|
| - storage_type_path=type_path,
|
| + type_name=type_name,
|
| + field_type_path=field_type_path,
|
| + field_template=property_['field_template'],
|
| size=int(math.ceil(bits_needed)),
|
| default_value=default_value,
|
| getter_method_name=getter_method_name,
|
| @@ -174,8 +179,9 @@ def _create_inherited_flag_field(property_):
|
| 'inherited_flag',
|
| name='m_' + field_name_suffix_lower,
|
| property_name=property_['name'],
|
| - storage_type='bool',
|
| - storage_type_path=None,
|
| + type_name='bool',
|
| + field_type_path=None,
|
| + field_template='flag',
|
| size=1,
|
| default_value='true',
|
| getter_method_name=field_name_suffix_lower,
|
| @@ -196,8 +202,9 @@ def _create_nonproperty_field(field_name):
|
| 'nonproperty',
|
| name=member_name,
|
| property_name=field_name,
|
| - storage_type='bool',
|
| - storage_type_path=None,
|
| + type_name='bool',
|
| + field_type_path=None,
|
| + field_template='flag',
|
| size=1,
|
| default_value='false',
|
| getter_method_name=field_name,
|
| @@ -213,8 +220,8 @@ def _create_fields(properties):
|
| """
|
| fields = []
|
| for property_ in properties:
|
| - # Keywords only means we generate an enum field.
|
| - if property_['keyword_only']:
|
| + # Only generate properties that have a field template
|
| + if property_['field_template'] is not None:
|
| # If the property is independent, add the single-bit sized isInherited flag
|
| # to the list of Fields as well.
|
| if property_['independent']:
|
|
|