docs: function(i, query) {
         var ch = query.charAt(i);
         var numReg = /\d/;
         if(ch.match(numReg) || (ch==this.ATOM_NUMERIC_NEGATIVE && query.charAt(i+1).match(numReg))) {
           var num = ch;
           var pointFound;
           var j = 0;
           while(true) {
              j++;
              if(query.length < i+j) {
                break; // EOL
              }
              else if(query.charAt(i+j) == this.ATOM_NUMERIC_POINT) {
                if(pointFound) {
                  // rewind and surrender
                  j--;
                  break;
                }
                else {
                  pointFound = true;
                  num += query.charAt(i+j);
                }
              }
              else if(query.charAt(i+j).match(numReg)) {
                // Found another numeric char
                num += query.charAt(i+j);
              }
              else {
                break;
              }
           }
           return [i+j, new this(pointFound ? parseFloat(num) : parseInt(num, 10))];
         }
         else {
           return null;
         }
      }