| Index: third_party/WebKit/Source/devtools/scripts/aria_attributes.py
|
| diff --git a/third_party/WebKit/Source/devtools/scripts/aria_attributes.py b/third_party/WebKit/Source/devtools/scripts/aria_attributes.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..d0acaa14d7a8b0db40e8ad9ac9ee5ac0fab2793a
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/devtools/scripts/aria_attributes.py
|
| @@ -0,0 +1,91 @@
|
| +#!/usr/bin/env python
|
| +#
|
| +# Copyright 2014 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +"""
|
| +Scrapes ARIA attributes from online resources.
|
| +To be run by hand if and when these change.
|
| +"""
|
| +
|
| +import json
|
| +import urllib2
|
| +import xml.dom.minidom
|
| +
|
| +import sys
|
| +
|
| +
|
| +def add_array_property(obj, name, info_node):
|
| + value = ''
|
| + if info_node.hasAttribute('rdf:resource'):
|
| + value = info_node.getAttribute('rdf:resource').split('#')[-1]
|
| + else:
|
| + text_node = info_node.firstChild
|
| + value = text_node.data.strip()
|
| + if value == '':
|
| + return
|
| + if name in obj:
|
| + obj[name].append(value)
|
| + else:
|
| + obj[name] = [value]
|
| +
|
| +
|
| +def fetch_roles():
|
| + response = urllib2.urlopen("http://www.w3.org/WAI/ARIA/schemata/aria-1.rdf", timeout=5)
|
| + content = response.read()
|
| + tree = xml.dom.minidom.parseString(content)
|
| + roles = {}
|
| + for role_node in tree.getElementsByTagName('owl:Class'):
|
| + role = {}
|
| + for info_node in role_node.childNodes:
|
| + if info_node.nodeType != xml.dom.minidom.Node.ELEMENT_NODE:
|
| + continue
|
| + if info_node.tagName == 'rdfs:subClassOf':
|
| + add_array_property(role, 'superclasses', info_node)
|
| + elif info_node.tagName == 'role:supportedState':
|
| + add_array_property(role, 'supportedAttributes', info_node)
|
| + elif info_node.tagName == 'role:requiredState':
|
| + add_array_property(role, 'requiredAttributes', info_node)
|
| + elif info_node.tagName == 'role:scope':
|
| + add_array_property(role, 'scope', info_node)
|
| + elif info_node.tagName == 'role:mustContain':
|
| + add_array_property(role, 'mustContain', info_node)
|
| + elif info_node.tagName == 'role:nameFrom':
|
| + add_array_property(role, 'nameFrom', info_node)
|
| + roles[role_node.getAttribute('rdf:ID')] = role
|
| + return roles
|
| +
|
| +
|
| +def fetch_attributes():
|
| + xs = 'http://www.w3.org/2001/XMLSchema'
|
| + response = urllib2.urlopen("https://www.w3.org/MarkUp/SCHEMA/aria-attributes-1.xsd", timeout=5)
|
| + content = response.read()
|
| + tree = xml.dom.minidom.parseString(content)
|
| + attributes = {}
|
| + for attribute_node in tree.getElementsByTagNameNS(xs, 'attribute'):
|
| + attribute = {}
|
| + if attribute_node.hasAttribute('type'):
|
| + attribute['type'] = attribute_node.getAttribute('type').split(':')[-1]
|
| + else:
|
| + type_node = attribute_node.getElementsByTagNameNS(xs, 'simpleType')[0]
|
| + restriction_node = type_node.getElementsByTagNameNS(xs, 'restriction')[0]
|
| + attribute['type'] = restriction_node.getAttribute('base').split(':')[-1]
|
| + attribute['enum'] = []
|
| + for enum in restriction_node.getElementsByTagNameNS(xs, 'enumeration'):
|
| + attribute['enum'].append(enum.getAttribute('value'))
|
| + if attribute_node.hasAttribute('default'):
|
| + attribute['default'] = attribute_node.getAttribute('default')
|
| + attributes[attribute_node.getAttribute('name')] = attribute
|
| + return attributes
|
| +
|
| +
|
| +def main(_):
|
| + aria = {}
|
| + aria['roles'] = fetch_roles()
|
| + aria['attributes'] = fetch_attributes()
|
| +
|
| + print json.dumps(aria, sort_keys=True, indent=4)
|
| +
|
| +if __name__ == '__main__':
|
| + sys.exit(main(sys.argv))
|
|
|