--- /dev/null
+import json
+import re
+import urllib
+import xml.etree.ElementTree as ET
+
+def parse_attributes():
+ schema = urllib.urlopen('http://www.w3.org/MarkUp/SCHEMA/aria-attributes-1.xsd')
+ tree = ET.parse(schema)
+
+ for node in tree.iter():
+ node.tag = re.sub(r'{.*}', r'', node.tag)
+
+ type_map = {
+ 'states': 'state',
+ 'props': 'property'
+ }
+ properties = {}
+ groups = tree.getroot().findall('attributeGroup')
+ print groups
+ for group in groups:
+ print(group.get('name'))
+ name_match = re.match(r'ARIA\.(\w+)\.attrib', group.get('name'))
+ if not name_match:
+ continue
+ group_type = name_match.group(1)
+ print group_type
+ if group_type not in type_map:
+ continue
+ type = type_map[group_type]
+ for child in group:
+ name = re.sub(r'aria-', r'', child.attrib['name'])
+ property = {}
+ property['type'] = type
+ if 'type' in child.attrib:
+ valueType = re.sub(r'xs:', r'', child.attrib['type'])
+ if valueType == 'IDREF':
+ property['valueType'] = 'idref'
+ elif valueType == 'IDREFS':
+ property['valueType'] = 'idref_list'
+ else:
+ property['valueType'] = valueType
+ else:
+ type_spec = child.findall('simpleType')[0]
+ restriction_spec = type_spec.findall('restriction')[0]
+ base = restriction_spec.attrib['base']
+ if base == 'xs:NMTOKENS':
+ property['valueType'] = 'token_list'
+ elif base == 'xs:NMTOKEN':
+ property['valueType'] = 'token'
+ else:
+ raise Exception('Unknown value type: %s' % base)
+ values = []
+ for value_type in restriction_spec:
+ values.append(value_type.get('value'))
+ property['values'] = values
+ if 'default' in child.attrib:
+ property['defaultValue'] = child.attrib['default']
+ properties[name] = property
+ return json.dumps(properties, sort_keys=True, indent=4, separators=(',', ': '))
+
+
+
+if __name__ == "__main__":
+ attributes_json = parse_attributes()
+ constants_file = open('src/js/Constants.js', 'r')
+ new_constants_file = open('src/js/Constants.new.js', 'w')
+ in_autogen_block = False
+ for line in constants_file:
+ if not in_autogen_block:
+ new_constants_file.write('%s' % line)
+ if re.match(r'// BEGIN ARIA_PROPERTIES_AUTOGENERATED', line):
+ in_autogen_block = True
+ if re.match(r'// END ARIA_PROPERTIES_AUTOGENERATED', line):
+ break
+ new_constants_file.write('/** @type {Object.<string, Object>} */\n')
+ new_constants_file.write('axs.constants.ARIA_PROPERTIES = %s;\n' % attributes_json)
+ new_constants_file.write('// END ARIA_PROPERTIES_AUTOGENERATED\n')
+ for line in constants_file:
+ new_constants_file.write('%s' % line)