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

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

Issue 2645283006: Convert make_qualified_names and make_element_factory to use JSON5. (Closed)
Patch Set: fix typo __majson5__ -> __main__ in make_qualified_names.py Created 3 years, 10 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
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2014 The Chromium Authors. All rights reserved. 2 # Copyright 2014 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import sys 6 import sys
7 from collections import defaultdict 7 from collections import defaultdict
8 8
9 import hasher 9 import hasher
10 import in_generator 10 import json5_generator
11 import name_utilities 11 import name_utilities
12 import template_expander 12 import template_expander
13 13
14 from in_file import InFile 14
15 def _symbol(tag):
16 return name_utilities.cpp_name(tag).replace('-', '_')
15 17
16 18
17 def _symbol(tag): 19 class MakeElementTypeHelpersWriter(json5_generator.Writer):
18 # FIXME: Remove this special case for the ugly x-webkit-foo attributes. 20 default_parameters = {
19 if tag['name'].startswith('-webkit-'): 21 'Conditional': {},
20 return tag['name'].replace('-', '_')[1:] 22 'ImplementedAs': {},
21 return name_utilities.cpp_name(tag).replace('-', '_') 23 'JSInterfaceName': {},
22 24 'constructorNeedsCreatedByParser': {},
23 class MakeElementTypeHelpersWriter(in_generator.Writer): 25 'interfaceName': {},
24 defaults = { 26 'noConstructor': {},
25 'Conditional': None, 27 'noTypeHelpers': {},
26 'ImplementedAs': None, 28 'runtimeEnabled': {},
27 'JSInterfaceName': None,
28 'constructorNeedsCreatedByParser': None,
29 'interfaceName': None,
30 'noConstructor': None,
31 'noTypeHelpers': None,
32 'runtimeEnabled': None,
33 } 29 }
34 default_parameters = { 30 default_metadata = {
35 'attrsNullNamespace': None, 31 'attrsNullNamespace': None,
36 'export': '', 32 'export': '',
37 'fallbackInterfaceName': '', 33 'fallbackInterfaceName': '',
38 'fallbackJSInterfaceName': '', 34 'fallbackJSInterfaceName': '',
39 'namespace': '', 35 'namespace': '',
40 'namespacePrefix': '', 36 'namespacePrefix': '',
41 'namespaceURI': '', 37 'namespaceURI': '',
42 } 38 }
43 filters = { 39 filters = {
44 'hash': hasher.hash, 40 'hash': hasher.hash,
45 'symbol': _symbol, 41 'symbol': _symbol,
46 } 42 }
47 43
48 def __init__(self, in_file_path): 44 def __init__(self, json5_file_path):
49 super(MakeElementTypeHelpersWriter, self).__init__(in_file_path) 45 super(MakeElementTypeHelpersWriter, self).__init__(json5_file_path)
50 46
51 self.namespace = self.in_file.parameters['namespace'].strip('"') 47 self.namespace = self.json5_file.metadata['namespace'].strip('"')
52 self.fallbackInterface = self.in_file.parameters['fallbackInterfaceName' ].strip('"') 48 self.fallback_interface = self.json5_file.metadata['fallbackInterfaceNam e'].strip('"')
53 49
54 assert self.namespace, 'A namespace is required.' 50 assert self.namespace, 'A namespace is required.'
55 51
56 self._outputs = { 52 self._outputs = {
57 (self.namespace + "ElementTypeHelpers.h"): self.generate_helper_head er, 53 (self.namespace + "ElementTypeHelpers.h"): self.generate_helper_head er,
58 (self.namespace + "ElementTypeHelpers.cpp"): self.generate_helper_im plementation, 54 (self.namespace + "ElementTypeHelpers.cpp"): self.generate_helper_im plementation,
59 } 55 }
60 56
61 self._template_context = { 57 self._template_context = {
62 'namespace': self.namespace, 58 'namespace': self.namespace,
63 'tags': self.in_file.name_dictionaries, 59 'tags': self.json5_file.name_dictionaries,
64 'elements': set(), 60 'elements': set(),
65 } 61 }
66 62
67 tags = self._template_context['tags'] 63 tags = self._template_context['tags']
68 elements = self._template_context['elements'] 64 elements = self._template_context['elements']
69 interface_counts = defaultdict(int) 65 interface_counts = defaultdict(int)
70 for tag in tags: 66 for tag in tags:
71 tag['interface'] = self._interface(tag) 67 tag['interface'] = self._interface(tag)
72 interface_counts[tag['interface']] += 1 68 interface_counts[tag['interface']] += 1
73 elements.add(tag['interface']) 69 elements.add(tag['interface'])
74 70
75 for tag in tags: 71 for tag in tags:
76 tag['multipleTagNames'] = (interface_counts[tag['interface']] > 1 or tag['interface'] == self.fallbackInterface) 72 tag['multipleTagNames'] = (interface_counts[tag['interface']] > 1 or tag['interface'] == self.fallback_interface)
77 73
78 @template_expander.use_jinja("ElementTypeHelpers.h.tmpl", filters=filters) 74 @template_expander.use_jinja("ElementTypeHelpers.h.tmpl", filters=filters)
79 def generate_helper_header(self): 75 def generate_helper_header(self):
80 return self._template_context 76 return self._template_context
81 77
82 @template_expander.use_jinja("ElementTypeHelpers.cpp.tmpl", filters=filters) 78 @template_expander.use_jinja("ElementTypeHelpers.cpp.tmpl", filters=filters)
83 def generate_helper_implementation(self): 79 def generate_helper_implementation(self):
84 return self._template_context 80 return self._template_context
85 81
86 def _interface(self, tag): 82 def _interface(self, tag):
87 if tag['interfaceName']: 83 if tag['interfaceName']:
88 return tag['interfaceName'] 84 return tag['interfaceName']
89 name = name_utilities.upper_first(tag['name']) 85 name = name_utilities.upper_first(tag['name'])
90 # FIXME: We shouldn't hard-code HTML here. 86 # FIXME: We shouldn't hard-code HTML here.
91 if name == 'HTML': 87 if name == 'HTML':
92 name = 'Html' 88 name = 'Html'
93 dash = name.find('-') 89 dash = name.find('-')
94 while dash != -1: 90 while dash != -1:
95 name = name[:dash] + name[dash + 1].upper() + name[dash + 2:] 91 name = name[:dash] + name[dash + 1].upper() + name[dash + 2:]
96 dash = name.find('-') 92 dash = name.find('-')
97 return '%s%sElement' % (self.namespace, name) 93 return '%s%sElement' % (self.namespace, name)
98 94
99 if __name__ == "__main__": 95 if __name__ == "__main__":
100 in_generator.Maker(MakeElementTypeHelpersWriter).main(sys.argv) 96 json5_generator.Maker(MakeElementTypeHelpersWriter).main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698