docs: function(){
                  /*
                   * simple_selector_sequence
                   *   : [ type_selector | universal ]
                   *     [ HASH | class | attrib | pseudo | negation ]*
                   *   | [ HASH | class | attrib | pseudo | negation ]+
                   *   ;
                   */
  
                  var tokenStream = this._tokenStream,
  
                      //parts of a simple selector
                      elementName = null,
                      modifiers   = [],
  
                      //complete selector text
                      selectorText= "",
  
                      //the different parts after the element name to search for
                      components  = [
                          //HASH
                          function(){
                              return tokenStream.match(Tokens.HASH) ?
                                      new SelectorSubPart(tokenStream.token().value, "id", tokenStream.token().startLine, tokenStream.token().startCol) :
                                      null;
                          },
                          this._class,
                          this._attrib,
                          this._pseudo,
                          this._negation
                      ],
                      i           = 0,
                      len         = components.length,
                      component   = null,
                      line,
                      col;
  
  
                  //get starting line and column for the selector
                  line = tokenStream.LT(1).startLine;
                  col = tokenStream.LT(1).startCol;
                  
                  var selectorEnd = tokenStream.curr().range[1]; // ORION AST Generation
  
                  elementName = this._type_selector();
                  if (!elementName){
                      elementName = this._universal();
                  }
  
                  if (elementName !== null){
                      selectorText += elementName;
                  }
  
                  while(true){
  
                      //whitespace means we're done
                      if (tokenStream.peek() === Tokens.S){
                          break;
                      }
  
                      //check for each component
                      while(i < len && component === null){
                          component = components[i++].call(this);
                      }
  
                      if (component === null){
  
                          //we don't have a selector
                          if (selectorText === ""){
                              return null;
                          } else {
                              break;
                          }
                      } else {
                      	if (component.type !== 'id'){
                      		selectorEnd = tokenStream.curr().range[1]; // ORION AST Generation
                  		}
                      	
                          i = 0;
                          modifiers.push(component);
                          selectorText += component.toString();
                          component = null;
                      }
                  }
  				
  				if (selectorText !== null){
  					var selPart = new SelectorPart(elementName, modifiers, selectorText, line, col);
  					selPart.endOffset = selectorEnd; // ORION AST Generation
  					return selPart;
  				} else {
  					return null;
  				}
              }