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

Side by Side Diff: third_party/WebKit/Source/build/scripts/make_base_computed_style.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: Created 4 years, 4 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 BaseComputedStyleWriter(make_style_builder.StyleBuilderWriter):
16 def __init__(self, in_file_path):
17 super(BaseComputedStyleWriter, self).__init__(in_file_path)
18 self._outputs = {
19 'BaseComputedStyle.h': self.generate_base_computed_style_h,
20 'BaseComputedStyle.cpp': self.generate_base_computed_style_cpp,
21 'BaseComputedStyleConstants.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', [
sashab 2016/07/27 03:23:18 This is just a quick way of creating a class in Py
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('BaseComputedStyle.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 }
sashab 2016/07/27 03:23:18 Although technically not all 3 things are used in
70
71 @template_expander.use_jinja('BaseComputedStyle.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('BaseComputedStyleConstants.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(BaseComputedStyleWriter).main(sys.argv)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698