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

Side by Side Diff: lib/dom/scripts/htmlrenamer.py

Issue 10703194: Extract interfaces and members renaming logic to a new HtmlRenamer class. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 5 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 #!/usr/bin/python
2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
3 # for details. All rights reserved. Use of this source code is governed by a
4 # BSD-style license that can be found in the LICENSE file.
5
6 _html_strip_webkit_prefix_classes = [
7 'Animation',
8 'AnimationEvent',
9 'AnimationList',
10 'BlobBuilder',
11 'CSSKeyframeRule',
12 'CSSKeyframesRule',
13 'CSSMatrix',
14 'CSSTransformValue',
15 'Flags',
16 'LoseContext',
17 'Point',
18 'TransitionEvent']
19
20 # Members from the standard dom that should not be exposed publicly in dart:html
21 # but need to be exposed internally to implement dart:html on top of a standard
22 # browser.
23 _private_html_members = set([
24 'Document.createElement',
25 'Document.createElementNS',
26 'Document.createEvent',
27 'Document.createTextNode',
28 'Document.createTouchList',
29 'Document.getElementById',
30 'Document.getElementsByClassName',
31 'Document.getElementsByName',
32 'Document.getElementsByTagName',
33 'Document.querySelector',
34 'Document.querySelectorAll',
35 'DocumentFragment.querySelector',
36 'DocumentFragment.querySelectorAll',
37 'Element.childElementCount',
38 'Element.children',
39 'Element.className',
40 'Element.clientHeight',
41 'Element.clientLeft',
42 'Element.clientTop',
43 'Element.clientWidth',
44 'Element.firstElementChild',
45 'Element.getAttribute',
46 'Element.getBoundingClientRect',
47 'Element.getClientRects',
48 'Element.getElementsByClassName',
49 'Element.getElementsByTagName',
50 'Element.hasAttribute',
51 'Element.lastElementChild',
52 'Element.offsetHeight',
53 'Element.offsetLeft',
54 'Element.offsetTop',
55 'Element.offsetWidth',
56 'Element.querySelector',
57 'Element.querySelectorAll',
58 'Element.removeAttribute',
59 'Element.scrollHeight',
60 'Element.scrollLeft',
61 'Element.scrollTop',
62 'Element.scrollWidth',
63 'Element.setAttribute',
64 'Event.initEvent',
65 'EventTarget.addEventListener',
66 'EventTarget.dispatchEvent',
67 'EventTarget.removeEventListener',
68 'MouseEvent.initMouseEvent',
69 'Node.appendChild',
70 'Node.attributes',
71 'Node.childNodes',
72 'Node.firstChild',
73 'Node.lastChild',
74 "Node.nodeType",
75 'Node.removeChild',
76 'Node.replaceChild',
77 'Storage.length',
78 'Storage.clear',
79 'Storage.getItem',
80 'Storage.key',
81 'Storage.removeItem',
82 'Storage.setItem',
83 'Window.getComputedStyle',
84 ])
85
86 # Members from the standard dom that exist in the dart:html library with
87 # identical functionality but with cleaner names.
88 _renamed_html_members = {
89 'Document.defaultView': 'window',
90 'Element.webkitMatchesSelector' : 'matchesSelector',
91 'Element.scrollIntoViewIfNeeded': 'scrollIntoView',
92 'Node.cloneNode': 'clone',
93 'Node.nextSibling': 'nextNode',
94 'Node.ownerDocument': 'document',
95 'Node.parentNode': 'parent',
96 'Node.previousSibling': 'previousNode',
97 'Node.textContent': 'text',
98 'SVGElement.className': '$dom_svgClassName',
99 'SVGAnimatedString.className': '$dom_svgClassName',
100 'SVGStylable.className': '$dom_svgClassName',
101 }
102
103 # Members and classes from the dom that should be removed completelly from
104 # dart:html. These could be expressed in the IDL instead but expressing this
105 # as a simple table instead is more concise.
106 # Syntax is: ClassName.(get\.|set\.)?MemberName
107 # Using get: and set: is optional and should only be used when a getter needs
108 # to be suppressed but not the setter, etc.
109 # TODO(jacobr): cleanup and augment this list.
110 _removed_html_members = set([
111 'NodeList.item',
112 "Attr.*",
113 # "BarProp.*",
114 # "BarInfo.*",
115 # "Blob.webkitSlice",
116 # "CDATASection.*",
117 # "Comment.*",
118 # "DOMImplementation.*",
119 "Document.get:forms",
120 # "Document.get:selectedStylesheetSet",
121 # "Document.set:selectedStylesheetSet",
122 # "Document.get:preferredStylesheetSet",
123 "Document.get:links",
124 "Document.set:domain",
125 "Document.get:implementation",
126 "Document.createAttributeNS",
127 "Document.get:inputEncoding",
128 "Document.get:height",
129 "Document.get:width",
130 "Element.getElementsByTagNameNS",
131 "Document.get:compatMode",
132 "Document.importNode",
133 "Document.evaluate",
134 "Document.get:images",
135 "Document.createExpression",
136 "Document.getOverrideStyle",
137 "Document.xmlStandalone",
138 "Document.createComment",
139 "Document.adoptNode",
140 "Document.get:characterSet",
141 "Document.createAttribute",
142 "Document.get:URL",
143 "Document.createEntityReference",
144 "Document.get:documentURI",
145 "Document.set:documentURI",
146 "Document.createNodeIterator",
147 "Document.createProcessingInstruction",
148 "Document.get:doctype",
149 "Document.createTreeWalker",
150 "Document.location",
151 "Document.createNSResolver",
152 "Document.get:xmlEncoding",
153 "Document.get:defaultCharset",
154 "Document.get:applets",
155 "Document.getSelection",
156 "Document.xmlVersion",
157 "Document.get:anchors",
158 "Document.getElementsByTagNameNS",
159 "DocumentType.*",
160 "Element.hasAttributeNS",
161 "Element.getAttributeNS",
162 "Element.setAttributeNode",
163 "Element.getAttributeNode",
164 "Element.removeAttributeNode",
165 "Element.removeAttributeNS",
166 "Element.setAttributeNodeNS",
167 "Element.getAttributeNodeNS",
168 "Element.setAttributeNS",
169 "BodyElement.text",
170 "AnchorElement.text",
171 "OptionElement.text",
172 "ScriptElement.text",
173 "TitleElement.text",
174 # "EventSource.get:url",
175 # TODO(jacobr): should these be removed?
176 "Document.close",
177 "Document.hasFocus",
178
179 "Document.vlinkColor",
180 "Document.captureEvents",
181 "Document.releaseEvents",
182 "Document.get:compatMode",
183 "Document.designMode",
184 "Document.dir",
185 "Document.all",
186 "Document.write",
187 "Document.fgColor",
188 "Document.bgColor",
189 "Document.get:plugins",
190 "Document.alinkColor",
191 "Document.get:embeds",
192 "Document.open",
193 "Document.clear",
194 "Document.get:scripts",
195 "Document.writeln",
196 "Document.linkColor",
197 "Element.get:itemRef",
198 "Element.outerText",
199 "Element.accessKey",
200 "Element.get:itemType",
201 "Element.innerText",
202 "Element.set:outerHTML",
203 "Element.itemScope",
204 "Element.itemValue",
205 "Element.itemId",
206 "Element.get:itemProp",
207 'Element.scrollIntoView',
208 'Element.get:classList',
209 "EmbedElement.getSVGDocument",
210 "FormElement.get:elements",
211 "HTMLFrameElement.*",
212 "HTMLFrameSetElement.*",
213 "HtmlElement.version",
214 "HtmlElement.manifest",
215 "Document.version",
216 "Document.manifest",
217 # "IFrameElement.getSVGDocument", #TODO(jacobr): should this be removed
218 "InputElement.dirName",
219 "HTMLIsIndexElement.*",
220 "ObjectElement.getSVGDocument",
221 "HTMLOptionsCollection.*",
222 "HTMLPropertiesCollection.*",
223 "SelectElement.remove",
224 "TextAreaElement.dirName",
225 "NamedNodeMap.*",
226 "Node.isEqualNode",
227 "Node.get:TEXT_NODE",
228 "Node.hasAttributes",
229 "Node.get:DOCUMENT_TYPE_NODE",
230 "Node.get:DOCUMENT_POSITION_FOLLOWING",
231 "Node.lookupNamespaceURI",
232 "Node.get:ELEMENT_NODE",
233 "Node.get:namespaceURI",
234 "Node.get:DOCUMENT_FRAGMENT_NODE",
235 "Node.get:localName",
236 "Node.isDefaultNamespace",
237 "Node.compareDocumentPosition",
238 "Node.get:baseURI",
239 "Node.isSameNode",
240 "Node.get:DOCUMENT_POSITION_DISCONNECTED",
241 "Node.get:DOCUMENT_NODE",
242 "Node.get:DOCUMENT_POSITION_CONTAINS",
243 "Node.get:COMMENT_NODE",
244 "Node.get:ENTITY_REFERENCE_NODE",
245 "Node.isSupported",
246 "Node.get:DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC",
247 "Node.get:NOTATION_NODE",
248 "Node.normalize",
249 "Node.get:parentElement",
250 "Node.get:ATTRIBUTE_NODE",
251 "Node.get:ENTITY_NODE",
252 "Node.get:DOCUMENT_POSITION_CONTAINED_BY",
253 "Node.get:prefix",
254 "Node.set:prefix",
255 "Node.get:DOCUMENT_POSITION_PRECEDING",
256 "Node.get:nodeValue",
257 "Node.set:nodeValue",
258 "Node.get:CDATA_SECTION_NODE",
259 "Node.get:nodeName",
260 "Node.lookupPrefix",
261 "Node.get:PROCESSING_INSTRUCTION_NODE",
262 "IFrameElement.get:contentDocument",
263 "Window.get:frameElement",
264 ])
265
266 class HtmlRenamer(object):
267 def __init__(self, database):
268 self._database = database
269
270 def RenameInterface(self, interface):
271 if interface.id.startswith('HTML'):
272 def IsElementOrDocument(interface):
273 return interface.id in ['Element', 'Document']
274 if self._database.FindInHierarchy(interface, IsElementOrDocument):
275 return interface.id[4:]
276 elif interface.id.startswith('WebKit'):
277 if interface.id[6:] in _html_strip_webkit_prefix_classes:
Anton Muhin 2012/07/16 10:27:04 [len('WebKit'):] instead 6? Overall, it might be
podivilov 2012/07/16 12:08:36 Done.
278 return interface.id[6:]
279 elif interface.id == 'DOMWindow':
280 return 'Window'
281 return interface.id
282
283 def RenameMember(self, interface_name, member, member_prefix=''):
284 """
285 Returns the name of the member in the HTML library or None if the member is
286 suppressed in the HTML library
287 """
288 interface = self._database.GetInterface(interface_name)
289
290 if self._FindMatch(interface, member, member_prefix, _removed_html_members):
291 return None
292
293 name = self._FindMatch(interface, member, member_prefix,
294 _renamed_html_members)
295 target_name = _renamed_html_members[name] if name else member
296 if self._FindMatch(interface, member, member_prefix, _private_html_members):
297 if not target_name.startswith('$dom_'): # e.g. $dom_svgClassName
298 target_name = '$dom_' + target_name
299 return target_name
300
301 def _FindMatch(self, interface, member, member_prefix, candidates):
302 def Test(interface):
303 html_interface_name = self.RenameInterface(interface)
304 name = html_interface_name + '.' + member
305 if name in candidates:
306 return name
307 name = html_interface_name + '.' + member_prefix + member
308 if name in candidates:
309 return name
310 matched_interface = self._database.FindInHierarchy(interface, Test)
311 if matched_interface:
312 return Test(matched_interface)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698