| Index: client/dom/scripts/idlrenderer.py
|
| ===================================================================
|
| --- client/dom/scripts/idlrenderer.py (revision 5796)
|
| +++ client/dom/scripts/idlrenderer.py (working copy)
|
| @@ -1,180 +0,0 @@
|
| -#!/usr/bin/python
|
| -# Copyright (c) 2011, 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.
|
| -
|
| -from idlnode import *
|
| -
|
| -
|
| -def render(idl_node, indent_str=' '):
|
| - output = []
|
| - indent_stack = []
|
| -
|
| - def begin_indent():
|
| - indent_stack.append(indent_str)
|
| - def end_indent():
|
| - indent_stack.pop()
|
| -
|
| - def sort(nodes):
|
| - return sorted(nodes, key=lambda node: node.id)
|
| -
|
| - def wln(node=None):
|
| - """Writes the given node and adds a new line."""
|
| - w(node)
|
| - output.append('\n')
|
| -
|
| - def wsp(node):
|
| - """Writes the given node and adds a space if there was output."""
|
| - mark = len(output)
|
| - w(node)
|
| - if mark != len(output):
|
| - w(' ')
|
| -
|
| - def w(node, list_separator=None):
|
| - """Writes the given node.
|
| -
|
| - Args:
|
| - node -- a string, IDLNode instance or a list of such.
|
| - list_separator -- if provided, and node is a list,
|
| - list_separator will be written between the list items.
|
| - """
|
| - if node is None:
|
| - return
|
| - elif isinstance(node, str):
|
| - if output and output[-1].endswith('\n'):
|
| - # Auto-indent.
|
| - output.extend(indent_stack)
|
| - output.append(node)
|
| - elif isinstance(node, list):
|
| - for i in range(0, len(node)):
|
| - if i > 0:
|
| - w(list_separator)
|
| - w(node[i])
|
| - elif isinstance(node, IDLFile):
|
| - w(node.modules)
|
| - w(node.interfaces)
|
| - elif isinstance(node, IDLModule):
|
| - wsp(node.annotations)
|
| - wsp(node.ext_attrs)
|
| - wln('module %s {' % node.id)
|
| - begin_indent()
|
| - w(node.interfaces)
|
| - w(node.typeDefs)
|
| - end_indent()
|
| - wln('};')
|
| - elif isinstance(node, IDLInterface):
|
| - if node.annotations:
|
| - wln(node.annotations)
|
| - if node.ext_attrs:
|
| - wln(node.ext_attrs)
|
| - w('interface %s' % node.id)
|
| - begin_indent()
|
| - begin_indent()
|
| - if node.parents:
|
| - wln(' :')
|
| - w(node.parents, ',\n')
|
| - wln(' {')
|
| - end_indent()
|
| - if node.constants:
|
| - wln()
|
| - wln('/* Constants */')
|
| - w(sort(node.constants))
|
| - if node.attributes:
|
| - wln()
|
| - wln('/* Attributes */')
|
| - w(sort(node.attributes))
|
| - if node.operations:
|
| - wln()
|
| - wln('/* Operations */')
|
| - w(sort(node.operations))
|
| - end_indent()
|
| - wln('};')
|
| - elif isinstance(node, IDLParentInterface):
|
| - wsp(node.annotations)
|
| - w(node.type.id)
|
| - elif isinstance(node, IDLAnnotations):
|
| - sep = ''
|
| - for (name, annotation) in sorted(node.items()):
|
| - w(sep)
|
| - sep = ' '
|
| - if annotation and len(annotation):
|
| - subRes = []
|
| - for (argName, argValue) in sorted(annotation.items()):
|
| - if argValue is None:
|
| - subRes.append(argName)
|
| - else:
|
| - subRes.append('%s=%s' % (argName, argValue))
|
| - w('@%s(%s)' % (name, ', '.join(subRes)))
|
| - else:
|
| - w('@%s' % name)
|
| - elif isinstance(node, IDLExtAttrs):
|
| - if len(node):
|
| - w('[')
|
| - i = 0
|
| - for k in sorted(node):
|
| - if i > 0:
|
| - w(', ')
|
| - w(k)
|
| - v = node[k]
|
| - if v is not None:
|
| - if isinstance(v, IDLExtAttrFunctionValue):
|
| - if v.id:
|
| - w('=')
|
| - w(v)
|
| - else:
|
| - w('=%s' % v.__str__())
|
| - i += 1
|
| - w(']')
|
| - elif isinstance(node, IDLExtAttrFunctionValue):
|
| - if node.id:
|
| - w(node.id)
|
| - w('(')
|
| - w(node.arguments, ', ')
|
| - w(')')
|
| - elif isinstance(node, IDLAttribute):
|
| - wsp(node.annotations)
|
| - wsp(node.ext_attrs)
|
| - if node.is_fc_getter:
|
| - w('getter ')
|
| - if node.is_fc_setter:
|
| - w('setter ')
|
| - w('attribute %s %s' % (node.type.id, node.id))
|
| - if node.raises:
|
| - w(' raises (%s)' % node.raises.id)
|
| - elif node.is_fc_getter and node.get_raises:
|
| - w(' getraises (%s)' % node.get_raises.id)
|
| - elif node.is_fc_setter and node.set_raises:
|
| - w(' setraises (%s)' % node.set_raises.id)
|
| - wln(';')
|
| - elif isinstance(node, IDLConstant):
|
| - wsp(node.annotations)
|
| - wsp(node.ext_attrs)
|
| - wln('const %s %s = %s;' % (node.type.id, node.id, node.value))
|
| - elif isinstance(node, IDLOperation):
|
| - wsp(node.annotations)
|
| - wsp(node.ext_attrs)
|
| - if node.is_static:
|
| - w('static ')
|
| - if node.specials:
|
| - w(node.specials, ' ')
|
| - w(' ')
|
| - w('%s ' % node.type.id)
|
| - w(node.id)
|
| - w('(')
|
| - w(node.arguments, ', ')
|
| - w(')')
|
| - if node.raises:
|
| - w(' raises (%s)' % node.raises.id)
|
| - wln(';')
|
| - elif isinstance(node, IDLArgument):
|
| - wsp(node.ext_attrs)
|
| - w('in ')
|
| - if node.is_optional:
|
| - w('optional ')
|
| - w('%s %s' % (node.type.id, node.id))
|
| - else:
|
| - raise TypeError("Expected str or IDLNode but %s found" %
|
| - type(node))
|
| -
|
| - w(idl_node)
|
| - return ''.join(output)
|
|
|