| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 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 | 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. | 4 # BSD-style license that can be found in the LICENSE file. |
| 5 import re | 5 import re |
| 6 | 6 |
| 7 html_interface_renames = { | 7 html_interface_renames = { |
| 8 'DOMCoreException': 'DOMException', | 8 'DOMCoreException': 'DOMException', |
| 9 'DOMFormData': 'FormData', | 9 'DOMFormData': 'FormData', |
| 10 'DOMURL': 'Url', | 10 'DOMURL': 'Url', |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 'Storage.length', | 111 'Storage.length', |
| 112 'Storage.removeItem', | 112 'Storage.removeItem', |
| 113 'Storage.setItem', | 113 'Storage.setItem', |
| 114 'WheelEvent.wheelDeltaX', | 114 'WheelEvent.wheelDeltaX', |
| 115 'WheelEvent.wheelDeltaY', | 115 'WheelEvent.wheelDeltaY', |
| 116 ]) | 116 ]) |
| 117 | 117 |
| 118 # Members from the standard dom that exist in the dart:html library with | 118 # Members from the standard dom that exist in the dart:html library with |
| 119 # identical functionality but with cleaner names. | 119 # identical functionality but with cleaner names. |
| 120 _renamed_html_members = { | 120 _renamed_html_members = { |
| 121 'Document.createCDATASection': 'createCDataSection', |
| 121 'Document.defaultView': 'window', | 122 'Document.defaultView': 'window', |
| 122 'Element.webkitMatchesSelector' : 'matchesSelector', | 123 'Element.webkitMatchesSelector' : 'matchesSelector', |
| 123 'Element.scrollIntoViewIfNeeded': 'scrollIntoView', | 124 'Element.scrollIntoViewIfNeeded': 'scrollIntoView', |
| 124 'Node.cloneNode': 'clone', | 125 'Node.cloneNode': 'clone', |
| 125 'Node.nextSibling': 'nextNode', | 126 'Node.nextSibling': 'nextNode', |
| 126 'Node.ownerDocument': 'document', | 127 'Node.ownerDocument': 'document', |
| 127 'Node.parentNode': 'parent', | 128 'Node.parentNode': 'parent', |
| 128 'Node.previousSibling': 'previousNode', | 129 'Node.previousSibling': 'previousNode', |
| 129 'Node.textContent': 'text', | 130 'Node.textContent': 'text', |
| 130 'SvgElement.className': '$dom_svgClassName', | 131 'SvgElement.className': '$dom_svgClassName', |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 196 "Document.getElementsByTagNameNS", | 197 "Document.getElementsByTagNameNS", |
| 197 'Document.webkitCurrentFullScreenElement', | 198 'Document.webkitCurrentFullScreenElement', |
| 198 'Document.webkitFullScreenKeyboardInputAllowed', | 199 'Document.webkitFullScreenKeyboardInputAllowed', |
| 199 "DocumentType.*", | 200 "DocumentType.*", |
| 200 "Element.setAttributeNode", | 201 "Element.setAttributeNode", |
| 201 "Element.getAttributeNode", | 202 "Element.getAttributeNode", |
| 202 "Element.removeAttributeNode", | 203 "Element.removeAttributeNode", |
| 203 "Element.setAttributeNodeNS", | 204 "Element.setAttributeNodeNS", |
| 204 "Element.getAttributeNodeNS", | 205 "Element.getAttributeNodeNS", |
| 205 "Event.srcElement", | 206 "Event.srcElement", |
| 207 "EventSource.URL", |
| 206 "BodyElement.text", | 208 "BodyElement.text", |
| 207 "AnchorElement.text", | 209 "AnchorElement.text", |
| 208 "OptionElement.text", | 210 "OptionElement.text", |
| 209 "ScriptElement.text", | 211 "ScriptElement.text", |
| 210 "TitleElement.text", | 212 "TitleElement.text", |
| 211 # "EventSource.get:url", | 213 # "EventSource.get:url", |
| 212 # TODO(jacobr): should these be removed? | 214 # TODO(jacobr): should these be removed? |
| 213 "Document.close", | 215 "Document.close", |
| 214 "Document.hasFocus", | 216 "Document.hasFocus", |
| 215 | 217 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 244 'Element.scrollIntoView', | 246 'Element.scrollIntoView', |
| 245 'Element.get:classList', | 247 'Element.get:classList', |
| 246 "FormElement.get:elements", | 248 "FormElement.get:elements", |
| 247 "HTMLFrameElement.*", | 249 "HTMLFrameElement.*", |
| 248 "HTMLFrameSetElement.*", | 250 "HTMLFrameSetElement.*", |
| 249 "HtmlElement.version", | 251 "HtmlElement.version", |
| 250 "HtmlElement.manifest", | 252 "HtmlElement.manifest", |
| 251 "Document.version", | 253 "Document.version", |
| 252 "Document.manifest", | 254 "Document.manifest", |
| 253 "HTMLIsIndexElement.*", | 255 "HTMLIsIndexElement.*", |
| 256 "HTMLMenuElement.compact", |
| 254 "HTMLOptionsCollection.*", | 257 "HTMLOptionsCollection.*", |
| 255 "HTMLPropertiesCollection.*", | 258 "HTMLPropertiesCollection.*", |
| 256 "SelectElement.remove", | 259 "SelectElement.remove", |
| 257 "MenuElement.compact", | |
| 258 "NamedNodeMap.*", | 260 "NamedNodeMap.*", |
| 259 "Node.isEqualNode", | 261 "Node.isEqualNode", |
| 260 "Node.get:TEXT_NODE", | 262 "Node.get:TEXT_NODE", |
| 261 "Node.hasAttributes", | 263 "Node.hasAttributes", |
| 262 "Node.get:DOCUMENT_TYPE_NODE", | 264 "Node.get:DOCUMENT_TYPE_NODE", |
| 263 "Node.get:DOCUMENT_POSITION_FOLLOWING", | 265 "Node.get:DOCUMENT_POSITION_FOLLOWING", |
| 264 "Node.lookupNamespaceURI", | 266 "Node.lookupNamespaceURI", |
| 265 "Node.get:ELEMENT_NODE", | 267 "Node.get:ELEMENT_NODE", |
| 266 "Node.get:DOCUMENT_FRAGMENT_NODE", | 268 "Node.get:DOCUMENT_FRAGMENT_NODE", |
| 267 "Node.isDefaultNamespace", | 269 "Node.isDefaultNamespace", |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 322 interface = self._database.GetInterface(interface_name) | 324 interface = self._database.GetInterface(interface_name) |
| 323 | 325 |
| 324 if self._FindMatch(interface, member, member_prefix, _removed_html_members): | 326 if self._FindMatch(interface, member, member_prefix, _removed_html_members): |
| 325 return None | 327 return None |
| 326 | 328 |
| 327 if 'CheckSecurityForNode' in member_node.ext_attrs: | 329 if 'CheckSecurityForNode' in member_node.ext_attrs: |
| 328 return None | 330 return None |
| 329 | 331 |
| 330 name = self._FindMatch(interface, member, member_prefix, | 332 name = self._FindMatch(interface, member, member_prefix, |
| 331 _renamed_html_members) | 333 _renamed_html_members) |
| 334 |
| 332 target_name = _renamed_html_members[name] if name else member | 335 target_name = _renamed_html_members[name] if name else member |
| 333 if self._FindMatch(interface, member, member_prefix, _private_html_members): | 336 if self._FindMatch(interface, member, member_prefix, _private_html_members): |
| 334 if not target_name.startswith('$dom_'): # e.g. $dom_svgClassName | 337 if not target_name.startswith('$dom_'): # e.g. $dom_svgClassName |
| 335 target_name = '$dom_' + target_name | 338 target_name = '$dom_' + target_name |
| 339 |
| 340 target_name = self._DartifyMemberName(target_name) |
| 336 return target_name | 341 return target_name |
| 337 | 342 |
| 338 def _FindMatch(self, interface, member, member_prefix, candidates): | 343 def _FindMatch(self, interface, member, member_prefix, candidates): |
| 339 for interface in self._database.Hierarchy(interface): | 344 for interface in self._database.Hierarchy(interface): |
| 340 html_interface_name = self.RenameInterface(interface) | 345 html_interface_name = self.DartifyTypeName(interface.id) |
| 341 member_name = html_interface_name + '.' + member | 346 member_name = html_interface_name + '.' + member |
| 342 if member_name in candidates: | 347 if member_name in candidates: |
| 343 return member_name | 348 return member_name |
| 344 member_name = html_interface_name + '.' + member_prefix + member | 349 member_name = html_interface_name + '.' + member_prefix + member |
| 345 if member_name in candidates: | 350 if member_name in candidates: |
| 346 return member_name | 351 return member_name |
| 347 | 352 |
| 348 def GetLibraryName(self, interface): | 353 def GetLibraryName(self, interface): |
| 349 return self._GetLibraryName(interface.id) | 354 return self._GetLibraryName(interface.id) |
| 350 | 355 |
| 351 def _GetLibraryName(self, idl_type_name): | 356 def _GetLibraryName(self, idl_type_name): |
| 352 """ | 357 """ |
| 353 Gets the name of the library this type should live in. | 358 Gets the name of the library this type should live in. |
| 354 This is private because this should use interfaces to resolve the library. | 359 This is private because this should use interfaces to resolve the library. |
| 355 """ | 360 """ |
| 356 | |
| 357 if idl_type_name.startswith('SVG'): | 361 if idl_type_name.startswith('SVG'): |
| 358 return 'svg' | 362 return 'svg' |
| 359 return 'html' | 363 return 'html' |
| 360 | 364 |
| 365 |
| 361 def DartifyTypeName(self, type_name): | 366 def DartifyTypeName(self, type_name): |
| 362 """Converts a DOM name to a Dart-friendly class name. """ | 367 """Converts a DOM name to a Dart-friendly class name. """ |
| 363 library_name = self._GetLibraryName(type_name) | 368 library_name = self._GetLibraryName(type_name) |
| 364 # Only renaming SVG for now. | 369 # Only renaming SVG for now. |
| 365 if library_name != 'svg': | 370 if library_name != 'svg': |
| 366 return type_name | 371 return type_name |
| 367 | 372 |
| 368 # Strip off the SVG prefix. | 373 # Strip off the SVG prefix. |
| 369 name = re.sub(r'^SVG', '', type_name) | 374 name = re.sub(r'^SVG', '', type_name) |
| 375 return self._CamelCaseName(name) |
| 376 |
| 377 def _DartifyMemberName(self, member_name): |
| 378 # Strip off any OpenGL ES suffixes. |
| 379 name = re.sub(r'OES$', '', member_name) |
| 380 return self._CamelCaseName(name) |
| 381 |
| 382 def _CamelCaseName(self, name): |
| 370 | 383 |
| 371 def toLower(match): | 384 def toLower(match): |
| 372 return match.group(1) + match.group(2).lower() + match.group(3) | 385 return match.group(1) + match.group(2).lower() + match.group(3) |
| 373 | 386 |
| 374 # We're looking for a sequence of letters which start with capital letter | 387 # We're looking for a sequence of letters which start with capital letter |
| 375 # then a series of caps and finishes with either the end of the string or | 388 # then a series of caps and finishes with either the end of the string or |
| 376 # a capital letter. | 389 # a capital letter. |
| 377 # The [0-9] check is for names such as 2D or 3D | 390 # The [0-9] check is for names such as 2D or 3D |
| 378 # The following test cases should match as: | 391 # The following test cases should match as: |
| 379 # WebKitCSSFilterValue: WebKit(C)(SS)(F)ilterValue | 392 # WebKitCSSFilterValue: WebKit(C)(SS)(F)ilterValue |
| 380 # XPathNSResolver: (X)()(P)ath(N)(S)(R)esolver (no change) | 393 # XPathNSResolver: (X)()(P)ath(N)(S)(R)esolver (no change) |
| 381 # IFrameElement: (I)()(F)rameElement (no change) | 394 # IFrameElement: (I)()(F)rameElement (no change) |
| 382 return re.sub(r'([A-Z])([A-Z]{2,})([A-Z]|$)', toLower, name) | 395 return re.sub(r'([A-Z])([A-Z]{2,})([A-Z]|$)', toLower, name) |
| OLD | NEW |