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

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

Issue 2567473002: Made a generator for CSSPropertyDescriptor.cpp (Closed)
Patch Set: fixed some formatting Created 4 years 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 import sys
7
8 import in_generator
9 import template_expander
10 import make_style_builder
11 from collections import namedtuple, defaultdict
12
13
14 class CSSPropertyAPIWriter(make_style_builder.StyleBuilderWriter):
15 def __init__(self, in_file_path):
16 super(CSSPropertyAPIWriter, self).__init__(in_file_path)
17 self._outputs = {
18 'CSSPropertyDescriptor.cpp': self.generate_property_descriptor_h,
19 }
20
21 # Temporary map of classname to list of propertyIDs.
22 properties_for_class = defaultdict(list)
23 for property in self._properties.values():
24 if property['api_class'] is None:
25 continue
26 classname = self.get_classname(property)
27 properties_for_class[classname].append(property['property_id'])
28
29 # Stores a list of classes with elements (index, classname, [propertyIDs , ..]).
30 self._api_classes = []
31
32 ApiClass = namedtuple('ApiClass', ('index', 'classname', 'property_ids') )
33 for i, classname in enumerate(properties_for_class.keys()):
34 self._api_classes.append(ApiClass(index=i + 1, classname=classname, property_ids=properties_for_class[classname]))
35
36 # Gets the classname for a given property.
37 def get_classname(self, property):
38 if property['api_class'] is True:
39 # This property had the generated_api_class flag set in CSSPropertie s.in.
40 return 'CSSPropertyAPI' + property['upper_camel_name']
41 # This property has a specified class name.
42 assert isinstance(property['api_class'], str)
43 return property['api_class']
44
45 @template_expander.use_jinja('CSSPropertyDescriptor.cpp.tmpl')
46 def generate_property_descriptor_h(self):
47 return {
48 'api_classes': self._api_classes,
49 }
50
51 if __name__ == '__main__':
52 in_generator.Maker(CSSPropertyAPIWriter).main(sys.argv)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698