function _ast_string()

in src/parser/WDL/hermes/wdl_parser.js [56:109]


function _ast_string(ast, indent, b64_source, indent_level) {
  if (typeof(indent) != 'number' || indent <= 0) {
    indent = undefined
  }
  var indent_str = typeof(indent) !== 'undefined' ? Array(indent * indent_level + 1).join(' ') : ''
  var next_indent_str = typeof(indent) !== 'undefined' ? Array(indent * (indent_level+1) + 1).join(' ') : ''
  if (ast instanceof Ast) {
    var children = {}
    for (var key in ast.attributes) {
      children[key] = _ast_string(ast.attributes[key], indent, b64_source, indent_level + 1)
    }
    if (typeof(indent) == 'undefined') {
      var strs = []
      for (var key in children) {
        strs.push('{0}={1}'.format(key, children[key]))
      }
      return '({0}: {1})'.format(
        ast.name,
        strs.join(', ')
      )
    } else {
      var strs = []
      for (var key in children) {
        strs.push('{0}{1}={2}'.format(next_indent_str, key, children[key]))
      }
      return '({0}:\n{1}\n{2})'.format(
        ast.name,
        strs.join(',\n'),
        indent_str
      )
    }
  } else if (ast instanceof AstList) {
    var children = []
    for (var key in ast.list) {
      children.push(_ast_string(ast.list[key], indent, b64_source, indent_level + 1))
    }
    if (typeof(indent) == 'undefined' || children.length == 0) {
      return '[{0}]'.format(children.join(', '))
    } else {
      var strs = []
      for (var index in children) {
        strs.push('{0}{1}'.format(next_indent_str, children[index]))
      }
      return '[\n{0}\n{1}]'.format(
        strs.join(',\n'),
        indent_str
      )
    }
  } else if (ast instanceof Terminal) {
    return ast.to_string(b64_source)
  } else {
    return (ast == null) ? 'None' : ast.to_string()
  }
}