OLD | NEW |
---|---|
(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) | |
OLD | NEW |