| 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
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..06db1ccf8955b601cf9bc14ab90506d0584a2b95
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/build/scripts/make_computed_style_base.py
|
| @@ -0,0 +1,88 @@
|
| +#!/usr/bin/env python
|
| +# Copyright 2016 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +from collections import namedtuple
|
| +import math
|
| +import sys
|
| +
|
| +import in_generator
|
| +import template_expander
|
| +import make_style_builder
|
| +
|
| +
|
| +class ComputedStyleBaseWriter(make_style_builder.StyleBuilderWriter):
|
| + def __init__(self, in_file_path):
|
| + super(ComputedStyleBaseWriter, self).__init__(in_file_path)
|
| + self._outputs = {
|
| + 'ComputedStyleBase.h': self.generate_base_computed_style_h,
|
| + 'ComputedStyleBase.cpp': self.generate_base_computed_style_cpp,
|
| + 'ComputedStyleBaseConstants.h': self.generate_base_computed_style_constants,
|
| + }
|
| +
|
| + # A map of enum name -> list of enum values
|
| + self._computed_enums = {}
|
| + for property in self._properties.values():
|
| + if property['keyword_only']:
|
| + 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.title() for k in property['keywords']]
|
| + self._computed_enums[enum_name] = enum_values
|
| +
|
| + # A list of fields
|
| + Field = namedtuple('Field', [
|
| + # Name of field member variable
|
| + 'name',
|
| + # Property field is for
|
| + 'property',
|
| + # Field storage type
|
| + 'type',
|
| + # Bits needed for storage
|
| + 'size',
|
| + # Default value for field
|
| + 'default_value',
|
| + ])
|
| + self._fields = []
|
| + for property in self._properties.values():
|
| + if property['keyword_only']:
|
| + # From the Blink style guide: Other data members should be prefixed by "m_". [names-data-members]
|
| + field_name = 'm_' + property['lower_camel_name']
|
| + bits_needed = math.log(len(property['keywords']), 2)
|
| + type_name = property['type_name']
|
| + # For now, assume the default value is the first enum value.
|
| + default_value = type_name + '::' + self._computed_enums[type_name][0]
|
| + self._fields.append(Field(
|
| + name=field_name,
|
| + property=property,
|
| + type=type_name,
|
| + size=int(math.ceil(bits_needed)),
|
| + default_value=default_value,
|
| + ))
|
| +
|
| + @template_expander.use_jinja('ComputedStyleBase.h.tmpl')
|
| + def generate_base_computed_style_h(self):
|
| + return {
|
| + 'properties': self._properties,
|
| + 'enums': self._computed_enums,
|
| + 'fields': self._fields,
|
| + }
|
| +
|
| + @template_expander.use_jinja('ComputedStyleBase.cpp.tmpl')
|
| + def generate_base_computed_style_cpp(self):
|
| + return {
|
| + 'properties': self._properties,
|
| + 'enums': self._computed_enums,
|
| + 'fields': self._fields,
|
| + }
|
| +
|
| + @template_expander.use_jinja('ComputedStyleBaseConstants.h.tmpl')
|
| + def generate_base_computed_style_constants(self):
|
| + return {
|
| + 'properties': self._properties,
|
| + 'enums': self._computed_enums,
|
| + 'fields': self._fields,
|
| + }
|
| +
|
| +if __name__ == '__main__':
|
| + in_generator.Maker(ComputedStyleBaseWriter).main(sys.argv)
|
|
|