sbin/res/app/handlers/XMLDOC/DomReader.js
author hamidouk
Fri, 23 Dec 2011 10:59:23 +0100
branchjsdoc
changeset 519 46e21d060650
permissions -rw-r--r--
added jsdoc base files.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
519
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
     1
LOG.inform("XMLDOC.DomReader loaded");
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
     2
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
     3
XMLDOC.DomReader = function(root) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
     4
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
     5
   this.dom = root;
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
     6
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
     7
   /**
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
     8
    * The current node the reader is on
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
     9
    */
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    10
   this.node = root;
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    11
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    12
   /**
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    13
    * Get the current node the reader is on
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    14
    * @type XMLDOC.Parser.node
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    15
    */
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    16
   XMLDOC.DomReader.prototype.getNode = function() {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    17
      return this.node;
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    18
   };
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    19
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    20
   /**
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    21
    * Set the node the reader should be positioned on.
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    22
    * @param node {XMLDOC.Parser.node}
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    23
    */
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    24
   XMLDOC.DomReader.prototype.setNode = function(node) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    25
      this.node = node;
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    26
   };
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    27
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    28
   /**
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    29
    * A helper method to make sure the current node will
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    30
    * never return null, unless null is passed as the root.
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    31
    * @param step {String} An expression to evaluate - should return a node or null
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    32
    */
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    33
   XMLDOC.DomReader.prototype.navigate = function(step) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    34
      var n;
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    35
      if ((n = step) != null)
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    36
      {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    37
         this.node = n;
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    38
         return this.node;
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    39
      }
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    40
      return null;
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    41
   };
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    42
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    43
   /**
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    44
    * Get the root node of the current node's document.
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    45
    */
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    46
   XMLDOC.DomReader.prototype.root = function() {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    47
      this.navigate(this.dom);
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    48
   };
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    49
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    50
   /**
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    51
    * Get the parent of the current node.
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    52
    */
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    53
   XMLDOC.DomReader.prototype.parent = function() {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    54
      return this.navigate(this.node.parentNode());
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    55
   };
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    56
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    57
   /**
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    58
    * Get the first child of the current node.
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    59
    */
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    60
   XMLDOC.DomReader.prototype.firstChild = function() {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    61
      return this.navigate(this.node.firstChild());
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    62
   };
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    63
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    64
   /**
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    65
    * Get the last child of the current node.
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    66
    */
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    67
   XMLDOC.DomReader.prototype.lastChild = function() {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    68
      return this.navigate(this.node.lastChild());
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    69
   };
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    70
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    71
   /**
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    72
    * Get the next sibling of the current node.
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    73
    */
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    74
   XMLDOC.DomReader.prototype.nextSibling = function() {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    75
      return this.navigate(this.node.nextSibling());
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    76
   };
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    77
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    78
   /**
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    79
    * Get the previous sibling of the current node.
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    80
    */
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    81
   XMLDOC.DomReader.prototype.prevSibling = function() {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    82
      return this.navigate(this.node.prevSibling());
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    83
   };
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    84
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    85
   //===============================================================================================
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    86
   // Support methods
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    87
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    88
   /**
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    89
    * Walk the tree starting with the current node, calling the plug-in for
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    90
    * each node visited.  Each time the plug-in is called, the DomReader
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    91
    * is passed as the only parameter.  Use the {@link XMLDOC.DomReader#getNode} method
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    92
    * to access the current node.   <i>This method uses a depth first traversal pattern.</i>
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    93
    *
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    94
    * @param srcFile {String} The source file being evaluated
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    95
    */
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    96
   XMLDOC.DomReader.prototype.getSymbols = function(srcFile)
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    97
   {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    98
      XMLDOC.DomReader.symbols = [];
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
    99
      XMLDOC.DomReader.currentFile = srcFile;
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   100
      JSDOC.Symbol.srcFile = (srcFile || "");
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   101
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   102
      if (defined(JSDOC.PluginManager)) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   103
         JSDOC.PluginManager.run("onDomGetSymbols", this);
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   104
      }
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   105
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   106
      return XMLDOC.DomReader.symbols;
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   107
   };
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   108
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   109
   /**
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   110
    * Find the node with the given name using a depth first traversal.
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   111
    * Does not modify the DomReader's current node.
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   112
    *
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   113
    * @param name {String} The name of the node to find
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   114
    * @return the node that was found, or null if not found
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   115
    */
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   116
   XMLDOC.DomReader.prototype.findNode = function(name)
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   117
   {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   118
      var findNode = null;
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   119
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   120
      // Start at the current node and move into the subtree,
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   121
      // looking for the node with the given name
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   122
      function deeper(node, find)
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   123
      {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   124
         var look = null;
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   125
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   126
         if (node) {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   127
            if (node.name == find)
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   128
            {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   129
               return node;
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   130
            }
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   131
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   132
            if (node.firstChild())
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   133
            {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   134
               look = deeper(node.firstChild(), find);
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   135
            }
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   136
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   137
            if (!look && node.nextSibling())
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   138
            {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   139
               look = deeper(node.nextSibling(), find);
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   140
            }
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   141
         }
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   142
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   143
         return look;
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   144
      }
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   145
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   146
      return deeper(this.getNode().firstChild(), name);
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   147
   };
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   148
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   149
   /**
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   150
    * Find the next node with the given name using a depth first traversal.
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   151
    *
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   152
    * @param name {String} The name of the node to find
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   153
    */
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   154
   XMLDOC.DomReader.prototype.findPreviousNode = function(name)
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   155
   {
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   156
   };
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   157
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   158
};
46e21d060650 added jsdoc base files.
hamidouk
parents:
diff changeset
   159