Index: sdk/lib/html/scripts/htmlrenamer.py |
diff --git a/sdk/lib/html/scripts/htmlrenamer.py b/sdk/lib/html/scripts/htmlrenamer.py |
deleted file mode 100644 |
index fd80e29a853f4002c7daeac7c2af88690ca8da30..0000000000000000000000000000000000000000 |
--- a/sdk/lib/html/scripts/htmlrenamer.py |
+++ /dev/null |
@@ -1,431 +0,0 @@ |
-#!/usr/bin/python |
-# Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
-# for details. All rights reserved. Use of this source code is governed by a |
-# BSD-style license that can be found in the LICENSE file. |
-import re |
- |
-html_interface_renames = { |
- 'CDATASection': 'CDataSection', |
- 'DOMApplicationCache': 'ApplicationCache', |
- 'DOMCoreException': 'DomException', |
- 'DOMFileSystem': 'FileSystem', |
- 'DOMFileSystemSync': 'FileSystemSync', |
- 'DOMFormData': 'FormData', |
- 'DOMURL': 'Url', |
- 'DOMWindow': 'Window', |
- 'HTMLDocument' : 'HtmlDocument', |
- 'IDBAny': '_Any', # Suppressed, but needs to exist for Dartium. |
- 'IDBFactory': 'IdbFactory', # Manual to avoid name conflicts. |
- 'SVGDocument': 'SvgDocument', # Manual to avoid name conflicts. |
- 'SVGElement': 'SvgElement', # Manual to avoid name conflicts. |
- 'SVGException': 'SvgException', # Manual of avoid conflict with Exception. |
- 'SVGSVGElement': 'SvgSvgElement', # Manual to avoid name conflicts. |
- 'WebGLVertexArrayObjectOES': 'WebGLVertexArrayObject', |
- 'WebKitAnimation': 'Animation', |
- 'WebKitAnimationEvent': 'AnimationEvent', |
- 'WebKitBlobBuilder': 'BlobBuilder', |
- 'WebKitCSSKeyframeRule': 'CssKeyframeRule', |
- 'WebKitCSSKeyframesRule': 'CssKeyframesRule', |
- 'WebKitCSSMatrix': 'CssMatrix', |
- 'WebKitCSSTransformValue': 'CssTransformValue', |
- 'WebKitFlags': 'Flags', |
- 'WebKitLoseContext': 'LoseContext', |
- 'WebKitPoint': 'Point', |
- 'WebKitTransitionEvent': 'TransitionEvent', |
- 'XMLHttpRequest': 'HttpRequest', |
- 'XMLHttpRequestException': 'HttpRequestException', |
- 'XMLHttpRequestProgressEvent': 'HttpRequestProgressEvent', |
- 'XMLHttpRequestUpload': 'HttpRequestUpload', |
-} |
- |
-# Members from the standard dom that should not be exposed publicly in dart:html |
-# but need to be exposed internally to implement dart:html on top of a standard |
-# browser. |
-_private_html_members = set([ |
- 'CustomEvent.initCustomEvent', |
- 'Document.createElement', |
- 'Document.createElementNS', |
- 'Document.createEvent', |
- 'Document.createRange', |
- 'Document.createTextNode', |
- 'Document.createTouch', |
- 'Document.createTouchList', |
- 'Document.getElementById', |
- 'Document.getElementsByClassName', |
- 'Document.getElementsByName', |
- 'Document.getElementsByTagName', |
- 'Document.querySelector', |
- 'Document.querySelectorAll', |
- |
- # Moved to HTMLDocument. |
- 'Document.body', |
- 'Document.caretRangeFromPoint', |
- 'Document.elementFromPoint', |
- 'Document.getCSSCanvasContext', |
- 'Document.head', |
- 'Document.lastModified', |
- 'Document.preferredStylesheetSet', |
- 'Document.referrer', |
- 'Document.selectedStylesheetSet', |
- 'Document.styleSheets', |
- 'Document.title', |
- 'Document.webkitCancelFullScreen', |
- 'Document.webkitExitFullscreen', |
- 'Document.webkitExitPointerLock', |
- 'Document.webkitFullscreenElement', |
- 'Document.webkitFullscreenEnabled', |
- 'Document.webkitHidden', |
- 'Document.webkitIsFullScreen', |
- 'Document.webkitPointerLockElement', |
- 'Document.webkitVisibilityState', |
- |
- 'DocumentFragment.querySelector', |
- 'DocumentFragment.querySelectorAll', |
- 'Element.childElementCount', |
- 'Element.children', |
- 'Element.className', |
- 'Element.firstElementChild', |
- 'Element.getAttribute', |
- 'Element.getAttributeNS', |
- 'Element.getElementsByClassName', |
- 'Element.getElementsByTagName', |
- 'Element.hasAttribute', |
- 'Element.hasAttributeNS', |
- 'Element.lastElementChild', |
- 'Element.querySelector', |
- 'Element.querySelectorAll', |
- 'Element.removeAttribute', |
- 'Element.removeAttributeNS', |
- 'Element.setAttribute', |
- 'Element.setAttributeNS', |
- 'ElementTraversal.childElementCount', |
- 'ElementTraversal.firstElementChild', |
- 'ElementTraversal.lastElementChild', |
- 'Event.initEvent', |
- 'UIEvent.initUIEvent', |
- 'EventTarget.addEventListener', |
- 'EventTarget.dispatchEvent', |
- 'EventTarget.removeEventListener', |
- 'KeyboardEvent.keyIdentifier', |
- 'KeyboardEvent.initKeyboardEvent', |
- 'Window.getComputedStyle', |
- 'MouseEvent.initMouseEvent', |
- 'Node.appendChild', |
- 'Node.attributes', |
- 'Node.childNodes', |
- 'Node.firstChild', |
- 'Node.lastChild', |
- "Node.localName", |
- 'Node.namespaceURI', |
- 'Node.removeChild', |
- 'Node.replaceChild', |
- 'UIEvent.keyCode', |
- 'UIEvent.charCode', |
- 'ShadowRoot.getElementById', |
- 'ShadowRoot.getElementsByClassName', |
- 'ShadowRoot.getElementsByTagName', |
- 'Storage.clear', |
- 'Storage.getItem', |
- 'Storage.key', |
- 'Storage.length', |
- 'Storage.removeItem', |
- 'Storage.setItem', |
- 'WheelEvent.wheelDeltaX', |
- 'WheelEvent.wheelDeltaY', |
-]) |
- |
-# Members from the standard dom that exist in the dart:html library with |
-# identical functionality but with cleaner names. |
-_renamed_html_members = { |
- 'Document.createCDATASection': 'createCDataSection', |
- 'Document.defaultView': 'window', |
- 'Element.webkitMatchesSelector' : 'matchesSelector', |
- 'Element.scrollIntoViewIfNeeded': 'scrollIntoView', |
- 'Node.cloneNode': 'clone', |
- 'Node.nextSibling': 'nextNode', |
- 'Node.ownerDocument': 'document', |
- 'Node.parentElement': 'parent', |
- 'Node.previousSibling': 'previousNode', |
- 'Node.textContent': 'text', |
- 'SvgElement.className': '$dom_svgClassName', |
- 'AnimatedString.className': '$dom_svgClassName', |
- 'Stylable.className': '$dom_svgClassName', |
- 'Url.createObjectURL': 'createObjectUrl', |
- 'Url.revokeObjectURL': 'revokeObjectUrl', |
-} |
- |
-# Members and classes from the dom that should be removed completely from |
-# dart:html. These could be expressed in the IDL instead but expressing this |
-# as a simple table instead is more concise. |
-# Syntax is: ClassName.(get\.|set\.)?MemberName |
-# Using get: and set: is optional and should only be used when a getter needs |
-# to be suppressed but not the setter, etc. |
-# TODO(jacobr): cleanup and augment this list. |
-_removed_html_members = set([ |
- 'NodeList.item', |
- "Attr.*", |
-# "BarProp.*", |
-# "BarInfo.*", |
-# "Blob.webkitSlice", |
-# "CDATASection.*", |
-# "Comment.*", |
-# "DOMImplementation.*", |
- "CanvasRenderingContext2D.clearShadow", |
- "CanvasRenderingContext2D.drawImageFromRect", |
- "CanvasRenderingContext2D.setAlpha", |
- "CanvasRenderingContext2D.setCompositeOperation", |
- "CanvasRenderingContext2D.setFillColor", |
- "CanvasRenderingContext2D.setLineCap", |
- "CanvasRenderingContext2D.setLineJoin", |
- "CanvasRenderingContext2D.setLineWidth", |
- "CanvasRenderingContext2D.setMiterLimit", |
- "CanvasRenderingContext2D.setShadow", |
- "CanvasRenderingContext2D.setStrokeColor", |
- "DivElement.align", |
- 'Document.applets', |
- "Document.get:forms", |
-# "Document.get:selectedStylesheetSet", |
-# "Document.set:selectedStylesheetSet", |
-# "Document.get:preferredStylesheetSet", |
- "Document.get:links", |
- "Document.set:domain", |
- "Document.createAttributeNS", |
- "Document.get:inputEncoding", |
- "Document.get:height", |
- "Document.get:width", |
- "Element.getElementsByTagNameNS", |
- "Document.get:compatMode", |
- 'Document.images', |
- "Document.importNode", |
- "Document.evaluate", |
- "Document.get:images", |
- "Document.createExpression", |
- "Document.getOverrideStyle", |
- "Document.xmlStandalone", |
- "Document.createComment", |
- "Document.adoptNode", |
- "Document.get:characterSet", |
- "Document.createAttribute", |
- "Document.get:URL", |
- "Document.createEntityReference", |
- "Document.get:documentURI", |
- "Document.set:documentURI", |
- "Document.createNodeIterator", |
- "Document.createProcessingInstruction", |
- "Document.get:doctype", |
- "Document.createTreeWalker", |
- "Document.location", |
- "Document.createNSResolver", |
- "Document.get:xmlEncoding", |
- "Document.get:defaultCharset", |
- "Document.get:applets", |
- "Document.getSelection", |
- "Document.xmlVersion", |
- "Document.get:anchors", |
- "Document.getElementsByTagNameNS", |
- 'Document.webkitCurrentFullScreenElement', |
- 'Document.webkitFullScreenKeyboardInputAllowed', |
- "DocumentType.*", |
- "Element.setAttributeNode", |
- "Element.getAttributeNode", |
- "Element.removeAttributeNode", |
- "Element.setAttributeNodeNS", |
- "Element.getAttributeNodeNS", |
- "Event.srcElement", |
- "EventSource.URL", |
- "BodyElement.text", |
- "AnchorElement.text", |
- "OptionElement.text", |
- "ScriptElement.text", |
- "TitleElement.text", |
-# "EventSource.get:url", |
-# TODO(jacobr): should these be removed? |
- "Document.close", |
- "Document.hasFocus", |
- |
- "Document.vlinkColor", |
- "Document.captureEvents", |
- "Document.releaseEvents", |
- "Document.get:compatMode", |
- "Document.designMode", |
- "Document.dir", |
- "Document.all", |
- "Document.write", |
- "Document.fgColor", |
- "Document.bgColor", |
- "Document.get:plugins", |
- "Document.alinkColor", |
- "Document.get:embeds", |
- "Document.open", |
- "Document.clear", |
- "Document.get:scripts", |
- "Document.writeln", |
- "Document.linkColor", |
- "Element.get:itemRef", |
- "Element.outerText", |
- "Element.accessKey", |
- "Element.get:itemType", |
- "Element.innerText", |
- "Element.set:outerHTML", |
- "Element.itemScope", |
- "Element.itemValue", |
- "Element.itemId", |
- "Element.get:itemProp", |
- 'Element.scrollIntoView', |
- 'Element.get:classList', |
- "FormElement.get:elements", |
- "HTMLFrameElement.*", |
- "HTMLFrameSetElement.*", |
- "HtmlElement.version", |
- "HtmlElement.manifest", |
- 'SelectElement.options', |
- 'SelectElement.selectedOptions', |
- "Cursor.PREV", |
- "Cursor.PREV_NO_DUPLICATE", |
- "Cursor.NEXT", |
- "Cursor.NEXT_NO_DUPLICATE", |
- "Transaction.READ_ONLY", |
- "Transaction.READ_WRITE", |
- "Document.version", |
- "Document.manifest", |
- "HTMLIsIndexElement.*", |
- "MenuElement.compact", |
- "HTMLOptionsCollection.*", |
- "HTMLPropertiesCollection.*", |
- "SelectElement.remove", |
- "NamedNodeMap.*", |
- "Node.isEqualNode", |
- "Node.get:TEXT_NODE", |
- "Node.hasAttributes", |
- "Node.get:DOCUMENT_TYPE_NODE", |
- "Node.get:DOCUMENT_POSITION_FOLLOWING", |
- "Node.lookupNamespaceURI", |
- "Node.get:ELEMENT_NODE", |
- "Node.get:DOCUMENT_FRAGMENT_NODE", |
- "Node.isDefaultNamespace", |
- "Node.compareDocumentPosition", |
- "Node.get:baseURI", |
- "Node.isSameNode", |
- "Node.get:DOCUMENT_POSITION_DISCONNECTED", |
- "Node.get:DOCUMENT_NODE", |
- "Node.get:DOCUMENT_POSITION_CONTAINS", |
- "Node.get:COMMENT_NODE", |
- "Node.get:ENTITY_REFERENCE_NODE", |
- "Node.isSupported", |
- "Node.get:DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC", |
- "Node.get:NOTATION_NODE", |
- "Node.normalize", |
- "Node.get:ATTRIBUTE_NODE", |
- "Node.get:ENTITY_NODE", |
- "Node.get:DOCUMENT_POSITION_CONTAINED_BY", |
- "Node.get:prefix", |
- "Node.set:prefix", |
- "Node.get:DOCUMENT_POSITION_PRECEDING", |
- "Node.get:nodeValue", |
- "Node.set:nodeValue", |
- "Node.get:CDATA_SECTION_NODE", |
- "Node.get:nodeName", |
- "Node.lookupPrefix", |
- "Node.get:PROCESSING_INSTRUCTION_NODE", |
- 'ShadowRoot.getElementsByTagNameNS', |
- "Window.blur", |
- "Window.clientInformation", |
- "Window.get:frames", |
- "Window.get:length", |
- "Window.focus", |
- "Window.prompt", |
- "Window.webkitIndexedDB", |
- "Window.webkitCancelRequestAnimationFrame", |
- "WheelEvent.wheelDelta", |
- "WorkerContext.webkitIndexedDB", |
- ]) |
- |
-class HtmlRenamer(object): |
- def __init__(self, database): |
- self._database = database |
- |
- def RenameInterface(self, interface): |
- if interface.id in html_interface_renames: |
- return html_interface_renames[interface.id] |
- elif interface.id.startswith('HTML'): |
- if any(interface.id in ['Element', 'Document'] |
- for interface in self._database.Hierarchy(interface)): |
- return interface.id[len('HTML'):] |
- return self.DartifyTypeName(interface.id) |
- |
- |
- def RenameMember(self, interface_name, member_node, member, member_prefix='', |
- dartify_name=True): |
- """ |
- Returns the name of the member in the HTML library or None if the member is |
- suppressed in the HTML library |
- """ |
- interface = self._database.GetInterface(interface_name) |
- |
- if self._FindMatch(interface, member, member_prefix, _removed_html_members): |
- return None |
- |
- if 'CheckSecurityForNode' in member_node.ext_attrs: |
- return None |
- |
- name = self._FindMatch(interface, member, member_prefix, |
- _renamed_html_members) |
- |
- target_name = _renamed_html_members[name] if name else member |
- if self._FindMatch(interface, member, member_prefix, _private_html_members): |
- if not target_name.startswith('$dom_'): # e.g. $dom_svgClassName |
- target_name = '$dom_' + target_name |
- |
- if dartify_name: |
- target_name = self._DartifyMemberName(target_name) |
- return target_name |
- |
- def _FindMatch(self, interface, member, member_prefix, candidates): |
- for interface in self._database.Hierarchy(interface): |
- html_interface_name = self.RenameInterface(interface) |
- member_name = html_interface_name + '.' + member |
- if member_name in candidates: |
- return member_name |
- member_name = html_interface_name + '.' + member_prefix + member |
- if member_name in candidates: |
- return member_name |
- |
- def GetLibraryName(self, interface): |
- if 'Conditional' in interface.ext_attrs: |
- if 'WEB_AUDIO' in interface.ext_attrs['Conditional']: |
- return 'web_audio' |
- if 'SVG' in interface.ext_attrs['Conditional']: |
- return 'svg' |
- if 'INDEXED_DATABASE' in interface.ext_attrs['Conditional']: |
- return 'indexed_db' |
- |
- return 'html' |
- |
- def DartifyTypeName(self, type_name): |
- """Converts a DOM name to a Dart-friendly class name. """ |
- |
- # Strip off any standard prefixes. |
- name = re.sub(r'^SVG', '', type_name) |
- name = re.sub(r'^IDB', '', name) |
- |
- return self._CamelCaseName(name) |
- |
- def _DartifyMemberName(self, member_name): |
- # Strip off any OpenGL ES suffixes. |
- name = re.sub(r'OES$', '', member_name) |
- return self._CamelCaseName(name) |
- |
- def _CamelCaseName(self, name): |
- |
- def toLower(match): |
- return match.group(1) + match.group(2).lower() + match.group(3) |
- |
- # We're looking for a sequence of letters which start with capital letter |
- # then a series of caps and finishes with either the end of the string or |
- # a capital letter. |
- # The [0-9] check is for names such as 2D or 3D |
- # The following test cases should match as: |
- # WebKitCSSFilterValue: WebKit(C)(SS)(F)ilterValue |
- # XPathNSResolver: (X)()(P)ath(N)(S)(R)esolver (no change) |
- # IFrameElement: (I)()(F)rameElement (no change) |
- return re.sub(r'([A-Z])([A-Z]{2,})([A-Z]|$)', toLower, name) |