docs: function(i, query) {
        if(query.charAt(i) == this.ATOM_PATH_DELIMITER) {
          var j = i+1;
          var pc = new this();
          var usingProperty = false;
  
          // Grab second (recursive) slash
          if(query.charAt(j) == this.ATOM_PATH_DELIMITER) {
            pc.recursive = true;
            j++;
          }
          
          // Check for wildcard, which halts the key reader and moves on to filters
          if(query.charAt(j) == this.ATOM_PATH_WILDCARD) {
             // Expect filter or end
             pc.key = this.ATOM_PATH_WILDCARD;
             j++
          }
          else {
           // Get keyname / property name (until run out of alphanum/-/_)
           if(query.charAt(j) == this.ATOM_PROPERTY_IDENTIFIER) {
             usingProperty = true;
             j++
           }
           else if(query.charAt(j) == this.ATOM_PATH_DELIMITER) {
             this.throwParseErrorAt(j, query, "3 path delimiters found in a row. Maximum legal count is 2.");
           }
  
           // Read ahead for keyname, if not found then move on.
           var kReadResult = SpahQL.Token.KeyName.parseAt(j, query);
           if(!kReadResult && usingProperty) {
             this.throwParseError(j, query, "Found unexpected character '"+query.charAt(j)+"' when expecting TOKEN_PROPERTY")
           }
           else if(kReadResult) {
             if(usingProperty) pc.property = kReadResult[1];
             else pc.key = kReadResult[1];
             j = kReadResult[0];
           }
          }       
          // End keyname/propertyname segment
          // Start filters
          var fReadResult;
          while(fReadResult = SpahQL.Token.FilterQuery.parseAt(j, query)) {
            pc.filterQueries.push(fReadResult[1]);
            j = fReadResult[0];
          }
  
          // When out of filters, exit       
          return [j, pc]
        }
  
        return null;
      }