// Copyright 2005 Google Inc. // All Rights Reserved // // Debug stuff for the XPath parser. Also used by XSLT. TokenExpr.prototype.toString = function() { return this.value; } TokenExpr.prototype.parseTree = function(indent) { var ret = indent + '[token] ' + this.value + '\n'; return ret; } LocationExpr.prototype.toString = function() { var ret = ''; if (this.absolute) { ret += '/'; } for (var i = 0; i < this.steps.length; ++i) { if (i > 0) { ret += '/'; } ret += this.steps[i].toString(); } return ret; } LocationExpr.prototype.parseTree = function(indent) { var ret = indent + '[location] ' + (this.absolute ? 'absolute' : 'relative') + '\n'; for (var i = 0; i < this.steps.length; ++i) { ret += this.steps[i].parseTree(indent + ' '); } return ret; } StepExpr.prototype.toString = function() { var ret = this.axis + '::' + this.nodetest.toString(); for (var i = 0; i < this.predicate.length; ++i) { ret += this.predicate[i].toString(); } return ret; } StepExpr.prototype.parseTree = function(indent) { var ret = indent + '[step]\n' + indent + ' [axis] ' + this.axis + '\n' + this.nodetest.parseTree(indent + ' '); for (var i = 0; i < this.predicate.length; ++i) { ret += this.predicate[i].parseTree(indent + ' '); } return ret; } NodeTestAny.prototype.toString = function() { return 'node()'; } NodeTestAny.prototype.parseTree = function(indent) { return indent + '[nodetest] ' + this.toString() + '\n'; } NodeTestElement.prototype.toString = function() { return '*'; } NodeTestElement.prototype.parseTree = NodeTestAny.prototype.parseTree; NodeTestText.prototype.toString = function() { return 'text()'; } NodeTestText.prototype.parseTree = NodeTestAny.prototype.parseTree; NodeTestComment.prototype.toString = function() { return 'comment()'; } NodeTestComment.prototype.parseTree = NodeTestAny.prototype.parseTree; NodeTestPI.prototype.toString = function() { return 'processing-instruction()'; } NodeTestPI.prototype.parseTree = NodeTestAny.prototype.parseTree; NodeTestNC.prototype.toString = function() { return this.nsprefix + ':*'; } NodeTestNC.prototype.parseTree = NodeTestAny.prototype.parseTree; NodeTestName.prototype.toString = function() { return this.name; } NodeTestName.prototype.parseTree = NodeTestAny.prototype.parseTree; PredicateExpr.prototype.toString = function() { var ret = '[' + this.expr.toString() + ']'; return ret; } PredicateExpr.prototype.parseTree = function(indent) { var ret = indent + '[predicate]\n' + this.expr.parseTree(indent + ' '); return ret; } FunctionCallExpr.prototype.toString = function() { var ret = this.name.value + '('; for (var i = 0; i < this.args.length; ++i) { if (i > 0) { ret += ', '; } ret += this.args[i].toString(); } ret += ')'; return ret; } FunctionCallExpr.prototype.parseTree = function(indent) { var ret = indent + '[function call] ' + this.name.value + '\n'; for (var i = 0; i < this.args.length; ++i) { ret += this.args[i].parseTree(indent + ' '); } return ret; } UnionExpr.prototype.toString = function() { return this.expr1.toString() + ' | ' + this.expr2.toString(); } UnionExpr.prototype.parseTree = function(indent) { var ret = indent + '[union]\n' + this.expr1.parseTree(indent + ' ') + this.expr2.parseTree(indent + ' '); return ret; } PathExpr.prototype.toString = function() { var ret = '{path: {' + this.filter.toString() + '} {' + this.rel.toString() + '}}'; return ret; } PathExpr.prototype.parseTree = function(indent) { var ret = indent + '[path]\n' + indent + '- filter:\n' + this.filter.parseTree(indent + ' ') + indent + '- location path:\n' + this.rel.parseTree(indent + ' '); return ret; } FilterExpr.prototype.toString = function() { var ret = this.expr.toString(); for (var i = 0; i < this.predicate.length; ++i) { ret += this.predicate[i].toString(); } return ret; } FilterExpr.prototype.parseTree = function(indent) { var ret = indent + '[filter]\n' + indent + '- expr:\n' + this.expr.parseTree(indent + ' '); indent + '- predicates:\n'; for (var i = 0; i < this.predicate.length; ++i) { ret += this.predicate[i].parseTree(indent + ' '); } return ret; } UnaryMinusExpr.prototype.toString = function() { return '-' + this.expr.toString(); } UnaryMinusExpr.prototype.parseTree = function(indent) { return indent + '[unary] -\n' + this.expr.parseTree(indent + ' '); } BinaryExpr.prototype.toString = function() { return this.expr1.toString() + ' ' + this.op.value + ' ' + this.expr2.toString(); } BinaryExpr.prototype.parseTree = function(indent) { return indent + '[binary] ' + this.op.value + '\n' + this.expr1.parseTree(indent + ' ') + this.expr2.parseTree(indent + ' '); } LiteralExpr.prototype.toString = function() { return '"' + this.value + '"'; } LiteralExpr.prototype.parseTree = function(indent) { return indent + '[literal] ' + this.toString() + '\n'; } NumberExpr.prototype.toString = function() { return '' + this.value; } NumberExpr.prototype.parseTree = function(indent) { return indent + '[number] ' + this.toString() + '\n'; } VariableExpr.prototype.toString = function() { return '$' + this.name; } VariableExpr.prototype.parseTree = function(indent) { return indent + '[variable] ' + this.toString() + '\n'; } XNode.prototype.toString = function() { return this.nodeName; } ExprContext.prototype.toString = function() { return '[' + this.position + '/' + this.nodelist.length + '] ' + this.node.nodeName; } function Value_toString() { return this.type + ': ' + this.value; } StringValue.prototype.toString = Value_toString; NumberValue.prototype.toString = Value_toString; BooleanValue.prototype.toString = Value_toString; NodeSetValue.prototype.toString = Value_toString;