Spaces:
Sleeping
Sleeping
LOG.inform("XMLDOC.DomReader loaded"); | |
XMLDOC.DomReader = function(root) { | |
this.dom = root; | |
/** | |
* The current node the reader is on | |
*/ | |
this.node = root; | |
/** | |
* Get the current node the reader is on | |
* @type XMLDOC.Parser.node | |
*/ | |
XMLDOC.DomReader.prototype.getNode = function() { | |
return this.node; | |
}; | |
/** | |
* Set the node the reader should be positioned on. | |
* @param node {XMLDOC.Parser.node} | |
*/ | |
XMLDOC.DomReader.prototype.setNode = function(node) { | |
this.node = node; | |
}; | |
/** | |
* A helper method to make sure the current node will | |
* never return null, unless null is passed as the root. | |
* @param step {String} An expression to evaluate - should return a node or null | |
*/ | |
XMLDOC.DomReader.prototype.navigate = function(step) { | |
var n; | |
if ((n = step) != null) | |
{ | |
this.node = n; | |
return this.node; | |
} | |
return null; | |
}; | |
/** | |
* Get the root node of the current node's document. | |
*/ | |
XMLDOC.DomReader.prototype.root = function() { | |
this.navigate(this.dom); | |
}; | |
/** | |
* Get the parent of the current node. | |
*/ | |
XMLDOC.DomReader.prototype.parent = function() { | |
return this.navigate(this.node.parentNode()); | |
}; | |
/** | |
* Get the first child of the current node. | |
*/ | |
XMLDOC.DomReader.prototype.firstChild = function() { | |
return this.navigate(this.node.firstChild()); | |
}; | |
/** | |
* Get the last child of the current node. | |
*/ | |
XMLDOC.DomReader.prototype.lastChild = function() { | |
return this.navigate(this.node.lastChild()); | |
}; | |
/** | |
* Get the next sibling of the current node. | |
*/ | |
XMLDOC.DomReader.prototype.nextSibling = function() { | |
return this.navigate(this.node.nextSibling()); | |
}; | |
/** | |
* Get the previous sibling of the current node. | |
*/ | |
XMLDOC.DomReader.prototype.prevSibling = function() { | |
return this.navigate(this.node.prevSibling()); | |
}; | |
//=============================================================================================== | |
// Support methods | |
/** | |
* Walk the tree starting with the current node, calling the plug-in for | |
* each node visited. Each time the plug-in is called, the DomReader | |
* is passed as the only parameter. Use the {@link XMLDOC.DomReader#getNode} method | |
* to access the current node. <i>This method uses a depth first traversal pattern.</i> | |
* | |
* @param srcFile {String} The source file being evaluated | |
*/ | |
XMLDOC.DomReader.prototype.getSymbols = function(srcFile) | |
{ | |
XMLDOC.DomReader.symbols = []; | |
XMLDOC.DomReader.currentFile = srcFile; | |
JSDOC.Symbol.srcFile = (srcFile || ""); | |
if (defined(JSDOC.PluginManager)) { | |
JSDOC.PluginManager.run("onDomGetSymbols", this); | |
} | |
return XMLDOC.DomReader.symbols; | |
}; | |
/** | |
* Find the node with the given name using a depth first traversal. | |
* Does not modify the DomReader's current node. | |
* | |
* @param name {String} The name of the node to find | |
* @return the node that was found, or null if not found | |
*/ | |
XMLDOC.DomReader.prototype.findNode = function(name) | |
{ | |
var findNode = null; | |
// Start at the current node and move into the subtree, | |
// looking for the node with the given name | |
function deeper(node, find) | |
{ | |
var look = null; | |
if (node) { | |
if (node.name == find) | |
{ | |
return node; | |
} | |
if (node.firstChild()) | |
{ | |
look = deeper(node.firstChild(), find); | |
} | |
if (!look && node.nextSibling()) | |
{ | |
look = deeper(node.nextSibling(), find); | |
} | |
} | |
return look; | |
} | |
return deeper(this.getNode().firstChild(), name); | |
}; | |
/** | |
* Find the next node with the given name using a depth first traversal. | |
* | |
* @param name {String} The name of the node to find | |
*/ | |
XMLDOC.DomReader.prototype.findPreviousNode = function(name) | |
{ | |
}; | |
}; | |