#!/usr/bin/env python3
# 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 logging
import monitored
import re

typed_array_renames = {
    'ArrayBuffer': 'ByteBuffer',
    'ArrayBufferView': 'TypedData',
    'DataView': 'ByteData',
    'Float32Array': 'Float32List',
    'Float64Array': 'Float64List',
    'Int8Array': 'Int8List',
    'Int16Array': 'Int16List',
    'Int32Array': 'Int32List',
    'Uint8Array': 'Uint8List',
    'Uint8ClampedArray': 'Uint8ClampedList',
    'Uint16Array': 'Uint16List',
    'Uint32Array': 'Uint32List',
}

html_interface_renames = monitored.Dict(
    'htmlrenamer.html_interface_renames',
    dict(
        {
            'Attr':
            '_Attr',
            'BudgetService':
            '_BudgetService',
            'CDATASection':
            'CDataSection',
            'Clipboard':
            '_Clipboard',  # TODO(terry): Need to remove when ACX Clipboard is renamed to AcxClipboard.
            'Database':
            'SqlDatabase',  # Avoid conflict with Index DB's Database.
            'DatabaseSync':
            'SqlDatabaseSync',
            'DOMFileSystem':
            'FileSystem',
            'Entity':
            '_Entity',  # Not sure if we want to expose this yet, may conflict with other libs.
            'EntryCallback':
            '_EntryCallback',
            'EntriesCallback':
            '_EntriesCallback',
            'ErrorCallback':
            '_ErrorCallback',
            'FileCallback':
            '_FileCallback',
            'FileSystemCallback':
            '_FileSystemCallback',
            'FileWriterCallback':
            '_FileWriterCallback',
            'HTMLDocument':
            'HtmlDocument',
            'HTMLElement':
            'HtmlElement',
            'HTMLHtmlElement':
            'HtmlHtmlElement',
            'IDBFactory':
            'IdbFactory',  # Manual to avoid name conflicts.
            'Iterator':
            'DomIterator',
            'Key':
            'CryptoKey',
            'NamedNodeMap':
            '_NamedNodeMap',
            'NavigatorUserMediaErrorCallback':
            '_NavigatorUserMediaErrorCallback',
            'NavigatorUserMediaSuccessCallback':
            '_NavigatorUserMediaSuccessCallback',
            'NotificationPermissionCallback':
            '_NotificationPermissionCallback',
            'Position':
            'Geoposition',
            'PositionCallback':
            '_PositionCallback',
            'PositionErrorCallback':
            '_PositionErrorCallback',
            'Request':
            '_Request',
            'Report':
            '_Report',
            'RTCDTMFSender':
            'RtcDtmfSender',
            'RTCDTMFToneChangeEvent':
            'RtcDtmfToneChangeEvent',
            'RTCErrorCallback':
            '_RtcErrorCallback',
            'RTCSessionDescriptionCallback':
            '_RtcSessionDescriptionCallback',
            'SVGDocument':
            'SvgDocument',  # Manual to avoid name conflicts.
            'SVGElement':
            'SvgElement',  # Manual to avoid name conflicts.
            'SVGGradientElement':
            '_GradientElement',
            'SVGSVGElement':
            'SvgSvgElement',  # Manual to avoid name conflicts.
            'Stream':
            'FileStream',
            'StringCallback':
            '_StringCallback',
            'WebGL2RenderingContext':
            'RenderingContext2',
            'WebGL2RenderingContextBase':
            'RenderingContextBase2',
            'WindowTimers':
            '_WindowTimers',
            'XMLHttpRequest':
            'HttpRequest',
            'XMLHttpRequestUpload':
            'HttpRequestUpload',
            'XMLHttpRequestEventTarget':
            'HttpRequestEventTarget',
        },
        **typed_array_renames))

# Some callback interfaces are not just a simple callback functions.  If the callback
# interface is in this list then the interface is exposed as a class.
_gen_callback_interfaces = ['NodeFilter']


def generateCallbackInterface(id):
    return id in _gen_callback_interfaces


# Interfaces that are suppressed, but need to still exist for Dartium and to
# properly wrap DOM objects if/when encountered.
_removed_html_interfaces = [
    'Bluetooth',
    'BluetoothAdvertisingData',
    'BluetoothCharacteristicProperties',
    'BluetoothDevice',
    'BluetoothRemoteGATTCharacteristic',
    'BluetoothRemoteGATTServer',
    'BluetoothRemoteGATTService',
    'BluetoothUUID',
    'Cache',  # TODO: Symbol conflicts with Angular: dartbug.com/20937
    'CanvasPath',
    'CDataSection',
    'CSSPrimitiveValue',
    'CSSUnknownRule',
    'CSSValue',
    'Counter',
    'DOMFileSystemSync',  # Workers
    'DatabaseCallback',  # WebSql was removed
    'DatabaseSync',  # Workers
    'DirectoryEntrySync',  # Workers
    'DirectoryReaderSync',  # Workers
    'DocumentType',
    'EntrySync',  # Workers
    'FileEntrySync',  # Workers
    'FileReaderSync',  # Workers
    'FileWriterSync',  # Workers
    'HTMLAllCollection',
    'HTMLAppletElement',
    'HTMLBaseFontElement',
    'HTMLDirectoryElement',
    'HTMLFontElement',
    'HTMLFrameElement',
    'HTMLFrameSetElement',
    'HTMLMarqueeElement',
    'IDBAny',
    'Mojo',
    'MojoHandle',
    'MojoInterfaceInterceptor',
    'MojoInterfaceRequestEvent',
    'MojoWatcher',
    'NFC',
    'Notation',
    'PagePopupController',
    'RGBColor',
    'RadioNodeList',  # Folded onto NodeList in dart2js.
    'Rect',
    'Response',  # TODO: Symbol conflicts with Angular: dartbug.com/20937
    'SQLTransactionSync',  # Workers
    'SQLTransactionSyncCallback',  # Workers
    'SVGAltGlyphDefElement',  # Webkit only.
    'SVGAltGlyphItemElement',  # Webkit only.
    'SVGAnimateColorElement',  # Deprecated. Use AnimateElement instead.
    'SVGColor',
    'SVGComponentTransferFunctionElement',  # Currently not supported anywhere.
    'SVGCursorElement',  # Webkit only.
    'SVGFEDropShadowElement',  # Webkit only for the following:
    'SVGFontElement',
    'SVGFontFaceElement',
    'SVGFontFaceFormatElement',
    'SVGFontFaceNameElement',
    'SVGFontFaceSrcElement',
    'SVGFontFaceUriElement',
    'SVGGlyphElement',
    'SVGGlyphRefElement',
    'SVGHKernElement',
    'SVGMPathElement',
    'SVGPaint',
    'SVGMissingGlyphElement',
    'SVGTRefElement',
    'SVGVKernElement',
    'SubtleCrypto',
    'USB',
    'USBAlternateInterface',
    'USBConfiguration',
    'USBConnectionEvent',
    'USBDevice',
    'USBEndpoint',
    'USBInTransferResult',
    'USBInterface',
    'USBIsochronousInTransferPacket',
    'USBIsochronousInTransferResult',
    'USBIsochronousOutTransferPacket',
    'USBIsochronousOutTransferResult',
    'USBOutTransferResult',
    'WebKitCSSFilterValue',
    'WebKitCSSMatrix',
    'WebKitCSSMixFunctionValue',
    'WebKitCSSTransformValue',
    'WebKitMediaSource',
    'WebKitNotification',
    'WebGLRenderingContextBase',
    'WebGL2RenderingContextBase',
    'WebKitSourceBuffer',
    'WebKitSourceBufferList',
    'WorkerLocation',  # Workers
    'WorkerNavigator',  # Workers
    'Worklet',  # Rendering Workers
    'XMLHttpRequestProgressEvent',
    # Obsolete event for NaCl.
    'ResourceProgressEvent',
]

for interface in _removed_html_interfaces:
    html_interface_renames[interface] = '_' + interface

convert_to_future_members = monitored.Set(
    'htmlrenamer.converted_to_future_members', [
        'Database.changeVersion',
        'Database.readTransaction',
        'DataTransferItem.getAsString',
        'DirectoryEntry.getDirectory',
        'DirectoryEntry.getFile',
        'DirectoryEntry.removeRecursively',
        'Entry.copyTo',
        'Entry.getMetadata',
        'Entry.getParent',
        'Entry.moveTo',
        'Entry.remove',
        'FileEntry.createWriter',
        'FileEntry.file',
        'FontLoader.notifyWhenFontsReady',
        'MediaStreamTrack.getSources',
        'Notification.requestPermission',
        'SQLTransaction.executeSql',
        'StorageInfo.requestQuota',
        'StorageQuota.requestQuota',
        'Window.webkitRequestFileSystem',
        'Window.webkitResolveLocalFileSystemURL',
        'WorkerGlobalScope.webkitRequestFileSystem',
        'WorkerGlobalScope.webkitResolveLocalFileSystemURL',
    ])

# DDC Exposed Classes
ddc_extensions = monitored.Dict(
    'ddcextensions.ddc_extensions', {
        'DirectoryEntry': {
            'getDirectory': [''],
            'getFile': [
                'applyExtension(\'FileEntry\', value);',
                'applyExtension(\'webkitFileSystemFileEntry\', value);',
                'applyExtension(\'FileSystemFileEntry\', value);',
            ]
        },
        'Entry': {
            'getMetadata': [
                'applyExtension(\'Metadata\', value);',
            ],
            'getParent': [
                'applyExtension(\'Entry\', value);',
                'applyExtension(\'webkitFileSystemEntry\', value);',
                'applyExtension(\'FileSystemEntry\', value);',
            ]
        },
        'FileEntry': {
            'createWriter': ['applyExtension(\'FileWriter\', value);'],
            'file': ['applyExtension(\'File\', value);']
        },
        'SQLTransaction': {
            'executeSql': [
                'applyExtension(\'SQLResultSet\', resultSet);'
                'applyExtension(\'SQLResultSetRowList\', resultSet.rows);'
            ],
        },
        'Window': {
            'webkitRequestFileSystem': [
                'applyExtension(\'DOMFileSystem\', value);',
                'applyExtension(\'WebKitFileSystem\', value);',
                'applyExtension(\'webkitFileSystem\', value);',
                'applyExtension(\'FileSystem\', value);',
                'applyExtension(\'DirectoryEntry\', value.root);',
                'applyExtension(\'webkitFileSystemDirectoryEntry\', value.root);',
                'applyExtension(\'FileSystemDirectoryEntry\', value.root);',
            ]
        },
    })


# DDC Extension for this interface operation?
def GetDDC_Extension(interface, operationName):
    if interface.id in ddc_extensions:
        entry = ddc_extensions[interface.id]
        if operationName in entry:
            return entry[operationName]
    return None


# Classes where we have customized constructors, but we need to keep the old
# constructor for dispatch purposes.
custom_html_constructors = monitored.Set(
    'htmlrenamer.custom_html_constructors',
    [
        'CompositionEvent',  # 45 Roll hide default constructor use Dart's custom
        'CustomEvent',  # 45 Roll hide default constructor use Dart's custom
        'Event',  # 45 Roll hide default constructor use Dart's custom
        'HashChangeEvent',  # 45 Roll hide default constructor use Dart's custom
        'HTMLAudioElement',
        'HTMLOptionElement',
        'KeyboardEvent',  # 45 Roll hide default constructor use Dart's custom
        'MessageEvent',  # 45 Roll hide default constructor use Dart's custom
        'MouseEvent',  # 45 Roll hide default constructor use Dart's custom
        'MutationObserver',
        'StorageEvent',  # 45 Roll hide default constructor use Dart's custom
        'UIEvent',  # 45 Roll hide default constructor use Dart's custom
        'WheelEvent',  # 45 Roll hide default constructor use Dart's custom
    ])

# 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. They are exposed simply by placing an underscore in front of the
# name.
private_html_members = monitored.Set(
    'htmlrenamer.private_html_members',
    [
        'AudioNode.connect',
        'Cache.add',
        'Cache.delete',
        'Cache.keys',
        'Cache.match',
        'Cache.matchAll',
        'Cache.put',
        'CanvasRenderingContext2D.arc',
        'CanvasRenderingContext2D.drawImage',
        'CanvasRenderingContext2D.getLineDash',
        'Crypto.getRandomValues',
        'CSSStyleDeclaration.getPropertyValue',
        'CSSStyleDeclaration.setProperty',
        'CSSStyleDeclaration.var',
        'CompositionEvent.initCompositionEvent',
        'CustomEvent.detail',
        'CustomEvent.initCustomEvent',
        'DataTransferItem.webkitGetAsEntry',
        'DeviceOrientationEvent.initDeviceOrientationEvent',
        'DirectoryEntry.createReader',
        'DirectoryReader.readEntries',
        'Document.createElement',
        'Document.createElementNS',
        'Document.createEvent',
        'Document.createNodeIterator',
        'Document.createTextNode',
        'Document.createTouch',
        'Document.createTouchList',
        'Document.createTreeWalker',
        'Document.querySelectorAll',
        'DocumentFragment.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',
        # Not prefixed.
        'Document.webkitFullscreenElement',
        'Document.webkitFullscreenEnabled',
        'Document.webkitHidden',
        'Document.webkitIsFullScreen',
        'Document.webkitVisibilityState',
        # Not prefixed but requires custom implementation for cross-browser compatibility.
        'Document.visibilityState',
        'Element.animate',
        'Element.childElementCount',
        'Element.firstElementChild',
        'Element.getClientRects',
        'Element.getElementsByTagName',
        'Element.insertAdjacentHTML',
        'Element.scrollIntoView',
        'Element.scrollIntoViewIfNeeded',
        'Element.getAttribute',
        'Element.getAttributeNS',
        'Element.hasAttribute',
        'Element.hasAttributeNS',
        'Element.removeAttribute',
        'Element.removeAttributeNS',
        'Element.setAttribute',
        'Element.setAttributeNS',
        'Element.innerHTML',
        'Element.querySelectorAll',
        # TODO(vsm): These have been converted from int to double in Chrome 36.
        # Special case them so we run on 34, 35, and 36.
        'Element.scrollLeft',
        'Element.scrollTop',
        'Element.scrollWidth',
        'Element.scrollHeight',
        'Event.initEvent',
        'EventTarget.addEventListener',
        'EventTarget.removeEventListener',
        'FileReader.result',
        'Geolocation.clearWatch',
        'Geolocation.getCurrentPosition',
        'Geolocation.watchPosition',
        'HashChangeEvent.initHashChangeEvent',
        'HTMLCanvasElement.toDataURL',
        'HTMLTableElement.createCaption',
        'HTMLTableElement.createTFoot',
        'HTMLTableElement.createTHead',
        'HTMLTableElement.createTBody',
        'HTMLTableElement.insertRow',
        'HTMLTableElement.rows',
        'HTMLTableElement.tBodies',
        'HTMLTableRowElement.cells',
        'HTMLTableRowElement.insertCell',
        'HTMLTableSectionElement.insertRow',
        'HTMLTableSectionElement.rows',
        'IDBCursor.delete',
        'IDBCursor.update',
        'IDBDatabase.createObjectStore',
        'IDBFactory.deleteDatabase',
        'IDBFactory.webkitGetDatabaseNames',
        'IDBFactory.open',
        'IDBIndex.count',
        'IDBIndex.get',
        'IDBIndex.getKey',
        'IDBIndex.openCursor',
        'IDBIndex.openKeyCursor',
        'IDBObjectStore.add',
        'IDBObjectStore.clear',
        'IDBObjectStore.count',
        'IDBObjectStore.createIndex',
        'IDBObjectStore.delete',
        'IDBObjectStore.get',
        'IDBObjectStore.openCursor',
        'IDBObjectStore.put',
        'KeyboardEvent.initKeyboardEvent',
        'KeyboardEvent.keyIdentifier',
        'MediaKeys.createSession',
        'MediaKeySession.update',
        'MessageEvent.initMessageEvent',
        'MessagePort.start',
        'MouseEvent.initMouseEvent',
        'MouseEvent.clientX',
        'MouseEvent.clientY',
        'MouseEvent.movementX',
        'MouseEvent.movementY',
        'MouseEvent.offsetX',
        'MouseEvent.offsetY',
        'MouseEvent.screenX',
        'MouseEvent.screenY',
        'MutationObserver.observe',
        'Navigator.getGamepads',
        'Node.attributes',
        'Node.localName',
        'Node.namespaceURI',
        'Node.removeChild',
        'Node.replaceChild',
        'ParentNode.childElementCount',
        'ParentNode.children',
        'ParentNode.firstElementChild',
        'ParentNode.lastElementChild',
        'ParentNode.querySelectorAll',
        'Range.getClientRects',
        'Screen.availHeight',
        'Screen.availLeft',
        'Screen.availTop',
        'Screen.availWidth',
        'ShadowRoot.resetStyleInheritance',
        'Storage.clear',
        'Storage.getItem',
        'Storage.key',
        'Storage.length',
        'Storage.removeItem',
        'Storage.setItem',
        'StorageEvent.initStorageEvent',
        'SubtleCrypto.encrypt',
        'SubtleCrypto.decrypt',
        'SubtleCrypto.sign',
        'SubtleCrypto.digest',
        'SubtleCrypto.importKey',
        'SubtleCrypto.unwrapKey',
        'ShadowRoot.applyAuthorStyles',
        'SpeechSynthesis.getVoices',
        'TextEvent.initTextEvent',
        # TODO(leafp): These have been converted from int to double in Chrome 37.
        # client, page, and screen were already special cased, adding radiusX/radiusY.
        # See impl_Touch.darttemplate for impedance matching code
        'Touch.clientX',
        'Touch.clientY',
        'Touch.pageX',
        'Touch.pageY',
        'Touch.screenX',
        'Touch.screenY',
        'Touch.radiusX',
        'Touch.radiusY',
        'UIEvent.initUIEvent',
        'UIEvent.layerX',
        'UIEvent.layerY',
        'UIEvent.pageX',
        'UIEvent.pageY',
        'UIEvent.which',
        'KeyboardEvent.charCode',
        'KeyboardEvent.keyCode',
        'KeyboardEvent.which',
        'WebGLRenderingContext.readPixels',
        'WebGL2RenderingContext.readPixels',
        'WheelEvent.initWebKitWheelEvent',
        'WheelEvent.deltaX',
        'WheelEvent.deltaY',
        'WorkerGlobalScope.webkitNotifications',
        'Window.getComputedStyle',
        'Window.clearInterval',
        'Window.clearTimeout',
        # TODO(tll): These have been converted from int to double in Chrome 39 for
        #            subpixel precision.  Special case for backward compatibility.
        'Window.pageXOffset',
        'Window.pageYOffset',
        'Window.scrollX',
        'Window.scrollY',
        'WindowTimers.clearInterval',
        'WindowTimers.clearTimeout',
        'WindowTimers.setInterval',
        'WindowTimers.setTimeout',
        'Window.moveTo',
        'Window.requestAnimationFrame',
        'Window.setInterval',
        'Window.setTimeout',
    ])

# Members from the standard dom that exist in the dart:html library with
# identical functionality but with cleaner names.
renamed_html_members = monitored.Dict(
    'htmlrenamer.renamed_html_members',
    {
        'ConsoleBase.assert': 'assertCondition',
        'CSSKeyframesRule.insertRule': 'appendRule',
        'DirectoryEntry.getDirectory': '_getDirectory',
        'DirectoryEntry.getFile': '_getFile',
        'Document.createCDATASection': 'createCDataSection',
        'Document.defaultView': 'window',
        'Window.CSS': 'css',
        'Window.webkitNotifications': 'notifications',
        'Window.webkitRequestFileSystem': '_requestFileSystem',
        'Window.webkitResolveLocalFileSystemURL': 'resolveLocalFileSystemUrl',
        'Navigator.webkitGetUserMedia': '_getUserMedia',
        'Node.appendChild': 'append',
        'Node.cloneNode': 'clone',
        'Node.nextSibling': 'nextNode',
        'Node.parentElement': 'parent',
        'Node.previousSibling': 'previousNode',
        'Node.textContent': 'text',
        'SVGElement.className': '_svgClassName',
        'SVGStopElement.offset': 'gradientOffset',
        'URL.createObjectURL': 'createObjectUrl',
        'URL.revokeObjectURL': 'revokeObjectUrl',
        #'WorkerContext.webkitRequestFileSystem': '_requestFileSystem',
        #'WorkerContext.webkitRequestFileSystemSync': '_requestFileSystemSync',

        # OfflineAudioContext.suspend has an signature incompatible with shadowed
        # base class method AudioContext.suspend.
        'OfflineAudioContext.suspend': 'suspendFor',
    })

# Members that have multiple definitions, but their types are vary, so we rename
# them to make them distinct.
renamed_overloads = monitored.Dict(
    'htmldartgenerator.renamed_overloads', {
        'AudioContext.createBuffer(ArrayBuffer buffer, boolean mixToMono)':
        'createBufferFromBuffer',
        'CSS.supports(DOMString conditionText)':
        'supportsCondition',
        'DataTransferItemList.add(File file)':
        'addFile',
        'DataTransferItemList.add(DOMString data, DOMString type)':
        'addData',
        'FormData.append(DOMString name, Blob value, DOMString filename)':
        'appendBlob',
        'RTCDataChannel.send(ArrayBuffer data)':
        'sendByteBuffer',
        'RTCDataChannel.send(ArrayBufferView data)':
        'sendTypedData',
        'RTCDataChannel.send(Blob data)':
        'sendBlob',
        'RTCDataChannel.send(DOMString data)':
        'sendString',
        'SourceBuffer.appendBuffer(ArrayBufferView data)':
        'appendTypedData',
        'URL.createObjectURL(MediaSource source)':
        'createObjectUrlFromSource',
        'URL.createObjectURL(WebKitMediaSource source)':
        '_createObjectUrlFromWebKitSource',
        'URL.createObjectURL(MediaStream stream)':
        'createObjectUrlFromStream',
        'URL.createObjectURL(Blob blob)':
        'createObjectUrlFromBlob',
        'WebSocket.send(ArrayBuffer data)':
        'sendByteBuffer',
        'WebSocket.send(ArrayBufferView data)':
        'sendTypedData',
        'WebSocket.send(DOMString data)':
        'sendString',
        'WebSocket.send(Blob data)':
        'sendBlob',
        'Window.setInterval(DOMString handler, long timeout, any arguments)':
        '_setInterval_String',
        'Window.setTimeout(DOMString handler, long timeout, any arguments)':
        '_setTimeout_String',
        'WindowTimers.setInterval(DOMString handler, long timeout, any arguments)':
        '_setInterval_String',
        'WindowTimers.setTimeout(DOMString handler, long timeout, any arguments)':
        '_setTimeout_String',
    })

# Members that have multiple definitions, but their types are identical (only
# number of arguments vary), so we do not rename them as a _raw method.
keep_overloaded_members = monitored.Set(
    'htmldartgenerator.keep_overloaded_members', [
        'CanvasRenderingContext2D.putImageData',
        'CanvasRenderingContext2D.webkitPutImageDataHD',
        'DataTransferItemList.add', 'Document.createElement',
        'Document.createElementNS', 'HTMLInputElement.setRangeText',
        'HTMLTextAreaElement.setRangeText', 'IDBDatabase.transaction',
        'RTCDataChannel.send', 'URL.createObjectURL', 'WebSocket.send',
        'XMLHttpRequest.send'
    ])

# Members that can be overloaded.
overloaded_and_renamed = monitored.Set(
    'htmldartgenerator.overloaded_and_renamed', [
        'CanvasRenderingContext2D.clip',
        'CanvasRenderingContext2D.drawFocusIfNeeded',
        'CanvasRenderingContext2D.fill',
        'CanvasRenderingContext2D.isPointInPath',
        'CanvasRenderingContext2D.isPointInStroke',
        'CanvasRenderingContext2D.stroke',
        'Navigator.sendBeacon',
    ])


def convertedFutureMembers(member):
    return member in convert_to_future_members


for member in convert_to_future_members:
    if member in renamed_html_members:
        renamed_html_members[member] = '_' + renamed_html_members[member]
    else:
        renamed_html_members[member] = '_' + member[member.find('.') + 1:]

# 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\:|call\:|on\:)?MemberName
# Using get: and set: is optional and should only be used when a getter needs
# to be suppressed but not the setter, etc.
# Prepending ClassName with = will only match against direct class, not for
# subclasses.
# TODO(jacobr): cleanup and augment this list.
removed_html_members = monitored.Set(
    'htmlrenamer.removed_html_members',
    [
        'Attr.textContent',  # Not needed as it is the same as Node.textContent.
        'AudioContext.decodeAudioData',
        'AudioBufferSourceNode.looping',  # TODO(vsm): Use deprecated IDL annotation
        'CSSStyleDeclaration.getPropertyCSSValue',
        'HTMLCanvasElement.toBlob',
        'CanvasRenderingContext2D.clearShadow',
        'CanvasRenderingContext2D.drawImageFromRect',
        'CanvasRenderingContext2D.setAlpha',
        'CanvasRenderingContext2D.setCompositeOperation',
        'CanvasRenderingContext2D.setFillColor',
        'CanvasRenderingContext2D.setLineCap',
        'CanvasRenderingContext2D.setLineJoin',
        'CanvasRenderingContext2D.setLineWidth',
        'CanvasRenderingContext2D.setMiterLimit',
        'CanvasRenderingContext2D.setShadow',
        'CanvasRenderingContext2D.setStrokeColor',
        # Disable the webKit version, imageSmoothingEnabled is exposed.
        'CanvasRenderingContext2D.webkitImageSmoothingEnabled',
        'CharacterData.remove',
        'ChildNode.replaceWith',
        'CSSStyleDeclaration.__getter__',
        'CSSStyleDeclaration.__setter__',
        'Window.call:blur',
        'Window.call:focus',
        'Window.clientInformation',
        'Window.createImageBitmap',
        'Window.get:frames',
        'Window.get:length',
        'Window.openDatabase',
        'Window.on:beforeUnload',
        'Window.on:webkitTransitionEnd',
        'Window.pagePopupController',
        'Window.prompt',
        'Window.webkitCancelAnimationFrame',
        'Window.webkitCancelRequestAnimationFrame',
        'Window.webkitIndexedDB',
        'Window.webkitRequestAnimationFrame',
        'Document.alinkColor',
        'Document.all',
        'Document.append',
        'Document.applets',
        'Document.bgColor',
        'Document.clear',
        'Document.createAttribute',
        'Document.createAttributeNS',
        'Document.createComment',
        'Document.createExpression',
        'Document.createNSResolver',
        'Document.createProcessingInstruction',
        'Document.designMode',
        'Document.dir',
        'Document.evaluate',
        'Document.fgColor',
        'Document.get:URL',
        'Document.get:anchors',
        'Document.get:characterSet',
        'Document.get:compatMode',
        'Document.get:defaultCharset',
        'Document.get:doctype',
        'Document.get:documentURI',
        'Document.get:embeds',
        'Document.get:forms',
        'Document.get:inputEncoding',
        'Document.get:links',
        'Document.get:plugins',
        'Document.get:scripts',
        'Document.get:xmlEncoding',
        'Document.getElementsByTagNameNS',
        'Document.getOverrideStyle',
        'Document.getSelection',
        'Document.images',
        'Document.linkColor',
        'Document.location',
        'Document.on:wheel',
        'Document.open',
        'Document.prepend',
        'Document.register',
        'Document.set:domain',
        'Document.vlinkColor',
        'Document.webkitCurrentFullScreenElement',
        'Document.webkitFullScreenKeyboardInputAllowed',
        'Document.write',
        'Document.writeln',
        'Document.xmlStandalone',
        'Document.xmlVersion',
        'DocumentFragment.children',
        'DocumentType.*',
        'DOMException.code',
        'DOMException.ABORT_ERR',
        'DOMException.DATA_CLONE_ERR',
        'DOMException.DOMSTRING_SIZE_ERR',
        'DOMException.HIERARCHY_REQUEST_ERR',
        'DOMException.INDEX_SIZE_ERR',
        'DOMException.INUSE_ATTRIBUTE_ERR',
        'DOMException.INVALID_ACCESS_ERR',
        'DOMException.INVALID_CHARACTER_ERR',
        'DOMException.INVALID_MODIFICATION_ERR',
        'DOMException.INVALID_NODE_TYPE_ERR',
        'DOMException.INVALID_STATE_ERR',
        'DOMException.NAMESPACE_ERR',
        'DOMException.NETWORK_ERR',
        'DOMException.NOT_FOUND_ERR',
        'DOMException.NOT_SUPPORTED_ERR',
        'DOMException.NO_DATA_ALLOWED_ERR',
        'DOMException.NO_MODIFICATION_ALLOWED_ERR',
        'DOMException.QUOTA_EXCEEDED_ERR',
        'DOMException.SECURITY_ERR',
        'DOMException.SYNTAX_ERR',
        'DOMException.TIMEOUT_ERR',
        'DOMException.TYPE_MISMATCH_ERR',
        'DOMException.URL_MISMATCH_ERR',
        'DOMException.VALIDATION_ERR',
        'DOMException.WRONG_DOCUMENT_ERR',
        'Element.accessKey',
        'Element.append',
        'Element.children',
        'Element.dataset',
        'Element.get:classList',
        'Element.getAttributeNode',
        'Element.getAttributeNodeNS',
        'Element.getElementsByTagNameNS',
        'Element.innerText',
        # TODO(terry): All offset* attributes are in both HTMLElement and Element
        #              (it's a Chrome bug with a FIXME note to correct - sometime).
        #              Until corrected these Element attributes must be ignored.
        'Element.offsetParent',
        'Element.offsetTop',
        'Element.offsetLeft',
        'Element.offsetWidth',
        'Element.offsetHeight',
        'Element.outerText',
        'Element.prepend',
        'Element.removeAttributeNode',
        'Element.set:outerHTML',
        'Element.setApplyScroll',
        'Element.setAttributeNode',
        'Element.setAttributeNodeNS',
        'Element.setDistributeScroll',
        'Element.webkitCreateShadowRoot',
        'Element.webkitMatchesSelector',
        'Element.webkitPseudo',
        'Element.webkitShadowRoot',
        '=Event.returnValue',  # Only suppress on Event, allow for BeforeUnloadEvnt.
        'Event.srcElement',
        'EventSource.URL',
        'FontFace.ready',
        'FontFaceSet.load',
        'FontFaceSet.ready',
        'HTMLAnchorElement.charset',
        'HTMLAnchorElement.coords',
        'HTMLAnchorElement.rev',
        'HTMLAnchorElement.shape',
        'HTMLAnchorElement.text',
        'HTMLAppletElement.*',
        'HTMLAreaElement.noHref',
        'HTMLBRElement.clear',
        'HTMLBaseFontElement.*',
        'HTMLBodyElement.aLink',
        'HTMLBodyElement.background',
        'HTMLBodyElement.bgColor',
        'HTMLBodyElement.link',
        'HTMLBodyElement.on:beforeUnload',
        'HTMLBodyElement.text',
        'HTMLBodyElement.vLink',
        'HTMLDListElement.compact',
        'HTMLDirectoryElement.*',
        'HTMLDivElement.align',
        'HTMLFontElement.*',
        'HTMLFormControlsCollection.__getter__',
        'HTMLFormElement.get:elements',
        'HTMLFrameElement.*',
        'HTMLFrameSetElement.*',
        'HTMLHRElement.align',
        'HTMLHRElement.noShade',
        'HTMLHRElement.size',
        'HTMLHRElement.width',
        'HTMLHeadElement.profile',
        'HTMLHeadingElement.align',
        'HTMLHtmlElement.manifest',
        'HTMLHtmlElement.version',
        'HTMLIFrameElement.align',
        'HTMLIFrameElement.frameBorder',
        'HTMLIFrameElement.longDesc',
        'HTMLIFrameElement.marginHeight',
        'HTMLIFrameElement.marginWidth',
        'HTMLIFrameElement.scrolling',
        'HTMLImageElement.align',
        'HTMLImageElement.hspace',
        'HTMLImageElement.longDesc',
        'HTMLImageElement.name',
        'HTMLImageElement.vspace',
        'HTMLInputElement.align',
        'HTMLLegendElement.align',
        'HTMLLinkElement.charset',
        'HTMLLinkElement.rev',
        'HTMLLinkElement.target',
        'HTMLMarqueeElement.*',
        'HTMLMenuElement.compact',
        'HTMLMetaElement.scheme',
        'HTMLOListElement.compact',
        'HTMLObjectElement.align',
        'HTMLObjectElement.archive',
        'HTMLObjectElement.border',
        'HTMLObjectElement.codeBase',
        'HTMLObjectElement.codeType',
        'HTMLObjectElement.declare',
        'HTMLObjectElement.hspace',
        'HTMLObjectElement.standby',
        'HTMLObjectElement.vspace',
        'HTMLOptionElement.text',
        'HTMLOptionsCollection.*',
        'HTMLParagraphElement.align',
        'HTMLParamElement.type',
        'HTMLParamElement.valueType',
        'HTMLPreElement.width',
        'HTMLScriptElement.text',
        'HTMLSelectElement.options',
        'HTMLSelectElement.selectedOptions',
        'HTMLTableCaptionElement.align',
        'HTMLTableCellElement.abbr',
        'HTMLTableCellElement.align',
        'HTMLTableCellElement.axis',
        'HTMLTableCellElement.bgColor',
        'HTMLTableCellElement.ch',
        'HTMLTableCellElement.chOff',
        'HTMLTableCellElement.height',
        'HTMLTableCellElement.noWrap',
        'HTMLTableCellElement.scope',
        'HTMLTableCellElement.vAlign',
        'HTMLTableCellElement.width',
        'HTMLTableColElement.align',
        'HTMLTableColElement.ch',
        'HTMLTableColElement.chOff',
        'HTMLTableColElement.vAlign',
        'HTMLTableColElement.width',
        'HTMLTableElement.align',
        'HTMLTableElement.bgColor',
        'HTMLTableElement.cellPadding',
        'HTMLTableElement.cellSpacing',
        'HTMLTableElement.frame',
        'HTMLTableElement.rules',
        'HTMLTableElement.summary',
        'HTMLTableElement.width',
        'HTMLTableRowElement.align',
        'HTMLTableRowElement.bgColor',
        'HTMLTableRowElement.ch',
        'HTMLTableRowElement.chOff',
        'HTMLTableRowElement.vAlign',
        'HTMLTableSectionElement.align',
        'HTMLTableSectionElement.ch',
        'HTMLTableSectionElement.chOff',
        'HTMLTableSectionElement.vAlign',
        'HTMLTitleElement.text',
        'HTMLUListElement.compact',
        'HTMLUListElement.type',
        'IDBDatabase.transaction',  # We do this in a template without the generated implementation at all.
        'Location.valueOf',
        'MessageEvent.data',
        'MouseEvent.webkitMovementX',
        'MouseEvent.webkitMovementY',
        'MouseEvent.x',
        'MouseEvent.y',
        'Navigator.bluetooth',
        'Navigator.isProtocolHandlerRegistered',
        'Navigator.unregisterProtocolHandler',
        'Navigator.usb',
        'Node.compareDocumentPosition',
        'Node.get:DOCUMENT_POSITION_CONTAINED_BY',
        'Node.get:DOCUMENT_POSITION_CONTAINS',
        'Node.get:DOCUMENT_POSITION_DISCONNECTED',
        'Node.get:DOCUMENT_POSITION_FOLLOWING',
        'Node.get:DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC',
        'Node.get:DOCUMENT_POSITION_PRECEDING',
        'Node.get:childNodes',
        'Node.get:prefix',
        'Node.hasAttributes',
        'Node.isDefaultNamespace',
        'Node.isEqualNode',
        'Node.isSameNode',
        'Node.isSupported',
        'Node.lookupNamespaceURI',
        'Node.lookupPrefix',
        'Node.normalize',
        'Node.set:nodeValue',
        'NodeFilter.acceptNode',
        'NodeIterator.expandEntityReferences',
        'NodeIterator.filter',
        'NodeList.item',
        'ParentNode.append',
        'ParentNode.prepend',
        'RTCPeerConnection.generateCertificate',
        'ShadowRoot.getElementsByTagNameNS',
        'SVGElement.getPresentationAttribute',
        'SVGElementInstance.on:wheel',
        'Touch.get:webkitRadiusX',
        'Touch.get:webkitRadiusY',
        'Touch.get:webkitForce',
        'Touch.get:webkitRotationAngle',
        'WheelEvent.wheelDelta',
        'WheelEvent.wheelDeltaX',
        'WheelEvent.wheelDeltaY',
        'Window.on:wheel',
        'WindowEventHandlers.on:beforeUnload',
        'WorkerGlobalScope.webkitIndexedDB',
        'XMLHttpRequest.open',
        # TODO(jacobr): should these be removed?
        'Document.close',
        'Document.hasFocus',
    ])

# Manual dart: library name lookup.
_library_names = monitored.Dict(
    'htmlrenamer._library_names', {
        'ANGLEInstancedArrays': 'web_gl',
        'CHROMIUMSubscribeUniform': 'web_gl',
        'Database': 'web_sql',
        'Navigator': 'html',
        'Window': 'html',
        'AnalyserNode': 'web_audio',
        'AudioBufferCallback': 'web_audio',
        'AudioBuffer': 'web_audio',
        'AudioBufferSourceNode': 'web_audio',
        'AudioContext': 'web_audio',
        'AudioDestinationNode': 'web_audio',
        'AudioElement': 'web_audio',
        'AudioListener': 'web_audio',
        'AudioNode': 'web_audio',
        'AudioParam': 'web_audio',
        'AudioParamMap': 'web_audio',
        'AudioProcessingEvent': 'web_audio',
        'AudioScheduledSourceNode': 'web_audio',
        'AudioSourceNode': 'web_audio',
        'AudioTrack': 'web_audio',
        'AudioTrackList': 'web_audio',
        'AudioWorkletGlobalScope': 'web_audio',
        'AudioWorkletNode': 'web_audio',
        'AudioWorkletProcessor': 'web_audio',
        'BaseAudioContext': 'web_audio',
        'BiquadFilterNode': 'web_audio',
        'ChannelMergerNode': 'web_audio',
        'ChannelSplitterNode': 'web_audio',
        'ConstantSourceNode': 'web_audio',
        'ConvolverNode': 'web_audio',
        'DelayNode': 'web_audio',
        'DynamicsCompressorNode': 'web_audio',
        'GainNode': 'web_audio',
        'IIRFilterNode': 'web_audio',
        'MediaElementAudioSourceNode': 'web_audio',
        'MediaStreamAudioDestinationNode': 'web_audio',
        'MediaStreamAudioSourceNode': 'web_audio',
        'OfflineAudioCompletionEvent': 'web_audio',
        'OfflineAudioContext': 'web_audio',
        'OscillatorNode': 'web_audio',
        'PannerNode': 'web_audio',
        'PeriodicWave': 'web_audio',
        'ScriptProcessorNode': 'web_audio',
        'StereoPannerNode': 'web_audio',
        'WaveShaperNode': 'web_audio',
        'WindowWebAudio': 'web_audio',
    })

_library_ids = monitored.Dict(
    'htmlrenamer._library_names', {
        'ANGLEInstancedArrays': 'WebGl',
        'CHROMIUMSubscribeUniform': 'WebGl',
        'Database': 'WebSql',
        'Navigator': 'Html',
        'Window': 'Html',
        'AnalyserNode': 'WebAudio',
        'AudioBufferCallback': 'WebAudio',
        'AudioBuffer': 'WebAudio',
        'AudioBufferSourceNode': 'WebAudio',
        'AudioContext': 'WebAudio',
        'AudioDestinationNode': 'WebAudio',
        'AudioListener': 'WebAudio',
        'AudioNode': 'WebAudio',
        'AudioParam': 'WebAudio',
        'AudioProcessingEvent': 'WebAudio',
        'AudioSourceNode': 'WebAudio',
        'BiquadFilterNode': 'WebAudio',
        'ChannelMergerNode': 'WebAudio',
        'ChannelSplitterNode': 'WebAudio',
        'ConvolverNode': 'WebAudio',
        'DelayNode': 'WebAudio',
        'DynamicsCompressorNode': 'WebAudio',
        'GainNode': 'WebAudio',
        'IIRFilterNode': 'WebAudio',
        'MediaElementAudioSourceNode': 'WebAudio',
        'MediaStreamAudioDestinationNode': 'WebAudio',
        'MediaStreamAudioSourceNode': 'WebAudio',
        'OfflineAudioCompletionEvent': 'WebAudio',
        'OfflineAudioContext': 'WebAudio',
        'OscillatorNode': 'WebAudio',
        'PannerNode': 'WebAudio',
        'PeriodicWave': 'WebAudio',
        'ScriptProcessorNode': 'WebAudio',
        'StereoPannerNode': 'WebAudio',
        'WaveShaperNode': 'WebAudio',
        'WindowWebAudio': 'WebAudio',
    })


class HtmlRenamer(object):

    def __init__(self, database, metadata):
        self._database = database
        self._metadata = metadata

    def RenameInterface(self, interface):
        if 'Callback' in interface.ext_attrs:
            if interface.id in _removed_html_interfaces:
                return None

        candidate = self.RenameInterfaceId(interface.id)
        if candidate:
            return candidate

        if 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._DartifyName(interface.javascript_binding_name)

    def RenameInterfaceId(self, interface_id):
        if interface_id in html_interface_renames:
            return html_interface_renames[interface_id]
        return None

    def isPrivate(self, interface, member):
        return self._FindMatch(interface, member, '', private_html_members)

    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 not member:
            if 'ImplementedAs' in member_node.ext_attrs:
                member = member_node.ext_attrs['ImplementedAs']

        if self.ShouldSuppressMember(interface, member, member_prefix):
            return None

        if 'CheckSecurity' 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('_'):  # e.g. _svgClassName
                target_name = '_' + target_name

        if not name and target_name.startswith('webkit'):
            target_name = member[len('webkit'):]
            target_name = target_name[:1].lower() + target_name[1:]

        if dartify_name:
            target_name = self._DartifyMemberName(target_name)
        return target_name

    def ShouldSuppressMember(self, interface, member, member_prefix=''):
        """ Returns true if the member should be suppressed."""
        if self._FindMatch(interface, member, member_prefix,
                           removed_html_members):
            return True
        if interface.id in _removed_html_interfaces:
            return True
        metadata_member = member
        if member_prefix == 'on:':
            metadata_member = 'on' + metadata_member.lower()
        if self._metadata.IsSuppressed(interface, metadata_member):
            return True
        return False

    def ShouldSuppressInterface(self, interface):
        """ Returns true if the interface should be suppressed."""
        if interface.id in _removed_html_interfaces:
            return True

    def _FindMatch(self, interface, member, member_prefix, candidates):

        def find_match(interface_id):
            member_name = interface_id + '.' + member
            if member_name in candidates:
                return member_name
            member_name = interface_id + '.' + member_prefix + member
            if member_name in candidates:
                return member_name
            member_name = interface_id + '.*'
            if member_name in candidates:
                return member_name

        # Check direct matches first
        match = find_match('=%s' % interface.id)
        if match:
            return match

        for interface in self._database.Hierarchy(interface):
            match = find_match(interface.id)
            if match:
                return match

    def GetLibraryName(self, interface):
        # Some types have attributes merged in from many other interfaces.
        if interface.id in _library_names:
            return _library_names[interface.id]

        # Support for IDL conditional has been removed from indexed db, web_sql,
        # svg and web_gl so we can no longer determine the library based on conditional.
        # Use interface prefix to do that.  web_audio interfaces have no common prefix
        # - all audio interfaces added to _library_names/_library_ids.
        if interface.id.startswith("IDB"):
            return 'indexed_db'
        if interface.id.startswith("SQL"):
            return 'web_sql'
        if interface.id.startswith("SVG"):
            return 'svg'
        if interface.id.startswith("WebGL") or interface.id.startswith("OES") \
            or interface.id.startswith("EXT") \
            or interface.id == "WebGL":    # Name of the synthesized class for WebGL constants.
            return 'web_gl'

        if interface.id in typed_array_renames:
            return 'typed_data'

        return 'html'

    def GetLibraryId(self, interface):
        # Some types have attributes merged in from many other interfaces.
        if interface.id in _library_ids:
            return _library_ids[interface.id]

        # Support for IDL conditional has been removed from indexed db, web_sql,
        # svg and web_gl so we can no longer determine the library based on conditional.
        # Use interface prefix to do that.  web_audio interfaces have no common prefix
        # - all audio interfaces added to _library_names/_library_ids.
        if interface.id.startswith("IDB"):
            return 'IndexedDb'
        if interface.id.startswith("SQL"):
            return 'WebSql'
        if interface.id.startswith("SVG"):
            return 'Svg'
        if interface.id.startswith("WebGL") or interface.id.startswith("OES") \
            or interface.id.startswith("EXT") \
            or interface.id == 'WebGL':     # Name of the synthesized class for WebGL constants.
            return 'WebGl'

        if interface.id in typed_array_renames:
            return 'TypedData'

        return 'Html'

    def DartifyTypeName(self, type_name):
        """Converts a DOM name to a Dart-friendly class name. """

        if type_name in html_interface_renames:
            return html_interface_renames[type_name]

        return self._DartifyName(type_name)

    def _DartifyName(self, dart_name):
        # Strip off any standard prefixes.
        name = re.sub(r'^SVG', '', dart_name)
        name = re.sub(r'^IDB', '', name)
        # Don't Strip the synthesized class name WebGL contains all rendering/draw constants.
        if name != 'WebGL':
            name = re.sub(r'^WebGL', '', name)
        name = re.sub(r'^WebKit', '', 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)
