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

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

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

Powered by Google App Engine
This is Rietveld 408576698