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

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

Issue 2187493004: Add a generated ComputedStyleBase class that ComputedStyle extends (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@_make_visibility_enum_class_rebase
Patch Set: Re-ordered inheritance to match initializers Created 4 years, 2 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
OLDNEW
(Empty)
1 #!/usr/bin/env python
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
4 # found in the LICENSE file.
5
6 from collections import namedtuple
7 import math
8 import sys
9
10 import in_generator
11 import template_expander
12 import make_style_builder
13
14
15 class ComputedStyleBaseWriter(make_style_builder.StyleBuilderWriter):
16 def __init__(self, in_file_path):
17 super(ComputedStyleBaseWriter, self).__init__(in_file_path)
18 self._outputs = {
19 'ComputedStyleBase.h': self.generate_base_computed_style_h,
20 'ComputedStyleBase.cpp': self.generate_base_computed_style_cpp,
21 'ComputedStyleBaseConstants.h': self.generate_base_computed_style_co nstants,
22 }
23
24 # A map of enum name -> list of enum values
25 self._computed_enums = {}
26 for property in self._properties.values():
27 if property['keyword_only']:
28 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 enum_values = [k.title() for k in property['keywords']]
31 self._computed_enums[enum_name] = enum_values
32
33 # A list of fields
34 Field = namedtuple('Field', [
35 # Name of field member variable
36 'name',
37 # Property field is for
38 'property',
39 # Field storage type
40 'type',
41 # Bits needed for storage
42 'size',
43 # Default value for field
44 'default_value',
45 ])
46 self._fields = []
47 for property in self._properties.values():
48 if property['keyword_only']:
49 # From the Blink style guide: Other data members should be prefi xed by "m_". [names-data-members]
50 field_name = 'm_' + property['lower_camel_name']
51 bits_needed = math.log(len(property['keywords']), 2)
52 type_name = property['type_name']
53 # For now, assume the default value is the first enum value.
54 default_value = type_name + '::' + self._computed_enums[type_nam e][0]
55 self._fields.append(Field(
56 name=field_name,
57 property=property,
58 type=type_name,
59 size=int(math.ceil(bits_needed)),
60 default_value=default_value,
61 ))
62
63 @template_expander.use_jinja('ComputedStyleBase.h.tmpl')
64 def generate_base_computed_style_h(self):
65 return {
66 'properties': self._properties,
67 'enums': self._computed_enums,
68 'fields': self._fields,
69 }
70
71 @template_expander.use_jinja('ComputedStyleBase.cpp.tmpl')
72 def generate_base_computed_style_cpp(self):
73 return {
74 'properties': self._properties,
75 'enums': self._computed_enums,
76 'fields': self._fields,
77 }
78
79 @template_expander.use_jinja('ComputedStyleBaseConstants.h.tmpl')
80 def generate_base_computed_style_constants(self):
81 return {
82 'properties': self._properties,
83 'enums': self._computed_enums,
84 'fields': self._fields,
85 }
86
87 if __name__ == '__main__':
88 in_generator.Maker(ComputedStyleBaseWriter).main(sys.argv)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698