aboutsummaryrefslogtreecommitdiff
path: root/tools/jsdoc-toolkit-2.4.0/app/handlers/XMLDOC/DomReader.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/jsdoc-toolkit-2.4.0/app/handlers/XMLDOC/DomReader.js')
-rwxr-xr-xtools/jsdoc-toolkit-2.4.0/app/handlers/XMLDOC/DomReader.js159
1 files changed, 159 insertions, 0 deletions
diff --git a/tools/jsdoc-toolkit-2.4.0/app/handlers/XMLDOC/DomReader.js b/tools/jsdoc-toolkit-2.4.0/app/handlers/XMLDOC/DomReader.js
new file mode 100755
index 0000000..240563d
--- /dev/null
+++ b/tools/jsdoc-toolkit-2.4.0/app/handlers/XMLDOC/DomReader.js
@@ -0,0 +1,159 @@
+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)
+ {
+ };
+
+};
+