| Index: tools/json_schema_compiler/idl_schema.py
|
| diff --git a/tools/json_schema_compiler/idl_schema.py b/tools/json_schema_compiler/idl_schema.py
|
| old mode 100644
|
| new mode 100755
|
| index 1d3c83ae3b9652767c0f73ec4e56601d8e2b933c..8d735e800bbbefdb803cf5e37c39f991f914691a
|
| --- a/tools/json_schema_compiler/idl_schema.py
|
| +++ b/tools/json_schema_compiler/idl_schema.py
|
| @@ -1,7 +1,9 @@
|
| +#! /usr/bin/env python
|
| # Copyright (c) 2012 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.
|
|
|
| +import json
|
| import os.path
|
| import sys
|
|
|
| @@ -28,10 +30,10 @@ class Callspec(object):
|
| def __init__(self, callspec_node):
|
| self.node = callspec_node
|
|
|
| - def process(self, refs):
|
| + def process(self, callbacks):
|
| parameters = []
|
| for node in self.node.children:
|
| - parameters.append(Param(node).process(refs))
|
| + parameters.append(Param(node).process(callbacks))
|
| return self.node.GetName(), parameters
|
|
|
| class Param(object):
|
| @@ -42,10 +44,10 @@ class Param(object):
|
| def __init__(self, param_node):
|
| self.node = param_node
|
|
|
| - def process(self, refs):
|
| + def process(self, callbacks):
|
| return Typeref(self.node.GetProperty( 'TYPEREF'),
|
| self.node,
|
| - { 'name': self.node.GetName() }).process(refs)
|
| + { 'name': self.node.GetName() }).process(callbacks)
|
|
|
| class Dictionary(object):
|
| '''
|
| @@ -55,11 +57,11 @@ class Dictionary(object):
|
| def __init__(self, dictionary_node):
|
| self.node = dictionary_node
|
|
|
| - def process(self, refs):
|
| + def process(self, callbacks):
|
| properties = {}
|
| for node in self.node.children:
|
| if node.cls == 'Member':
|
| - k, v = Member(node).process(refs)
|
| + k, v = Member(node).process(callbacks)
|
| properties[k] = v
|
| return { 'id': self.node.GetName(),
|
| 'properties': properties,
|
| @@ -74,7 +76,7 @@ class Member(object):
|
| def __init__(self, member_node):
|
| self.node = member_node
|
|
|
| - def process(self, refs):
|
| + def process(self, callbacks):
|
| properties = {}
|
| name = self.node.GetName()
|
| if self.node.GetProperty('OPTIONAL'):
|
| @@ -85,14 +87,14 @@ class Member(object):
|
| for node in self.node.children:
|
| if node.cls == 'Callspec':
|
| is_function = True
|
| - name, parameters = Callspec(node).process(refs)
|
| + name, parameters = Callspec(node).process(callbacks)
|
| properties['parameters'] = parameters
|
| properties['name'] = name
|
| if is_function:
|
| properties['type'] = 'function'
|
| else:
|
| properties = Typeref(self.node.GetProperty('TYPEREF'),
|
| - self.node, properties).process(refs)
|
| + self.node, properties).process(callbacks)
|
| return name, properties
|
|
|
| class Typeref(object):
|
| @@ -106,7 +108,7 @@ class Typeref(object):
|
| self.parent = parent
|
| self.additional_properties = additional_properties
|
|
|
| - def process(self, refs):
|
| + def process(self, callbacks):
|
| properties = self.additional_properties
|
| result = properties
|
|
|
| @@ -141,9 +143,9 @@ class Typeref(object):
|
| elif self.typeref is None:
|
| properties['type'] = 'function'
|
| else:
|
| - try:
|
| - result = refs[self.typeref]
|
| - except KeyError, e:
|
| + if self.typeref in callbacks:
|
| + properties.update(callbacks[self.typeref])
|
| + else:
|
| properties['$ref'] = self.typeref
|
|
|
| return result
|
| @@ -160,16 +162,16 @@ class Namespace(object):
|
| self.events = []
|
| self.functions = []
|
| self.types = []
|
| - self.refs = {}
|
| + self.callbacks = {}
|
|
|
| def process(self):
|
| for node in self.namespace.children:
|
| cls = node.cls
|
| if cls == "Dictionary":
|
| - self.types.append(Dictionary(node).process(self.refs))
|
| + self.types.append(Dictionary(node).process(self.callbacks))
|
| elif cls == "Callback":
|
| - k, v = Member(node).process(self.refs)
|
| - self.refs[k] = v
|
| + k, v = Member(node).process(self.callbacks)
|
| + self.callbacks[k] = v
|
| elif cls == "Interface" and node.GetName() == "Functions":
|
| self.functions = self.process_interface(node)
|
| elif cls == "Interface" and node.GetName() == "Events":
|
| @@ -187,7 +189,7 @@ class Namespace(object):
|
| members = []
|
| for member in node.children:
|
| if member.cls == 'Member':
|
| - name, properties = Member(member).process(self.refs)
|
| + name, properties = Member(member).process(self.callbacks)
|
| members.append(properties)
|
| return members
|
|
|
| @@ -234,3 +236,15 @@ def Load(filename):
|
| idl = idl_parser.IDLParser().ParseData(contents, filename)
|
| idl_schema = IDLSchema(idl)
|
| return idl_schema.process()
|
| +
|
| +def Main():
|
| + '''
|
| + Dump a json serialization of parse result for the IDL files whose names
|
| + were passed in on the command line.
|
| + '''
|
| + for filename in sys.argv[1:]:
|
| + schema = Load(filename)
|
| + print json.dumps(schema, indent=2)
|
| +
|
| +if __name__ == '__main__':
|
| + Main()
|
|
|