whole_func_string: function () {
                  var e, c, v, index = parserInput.i;
  
                  c = this.combinator();
  
                  e = parserInput.$re(/^(?:\d+\.\d+|\d+)%/) ||
                      parserInput.$re(/^(?:[.#]?|:*)(?:[\w-]|[^\x00-\x9f]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/) ||
                      parserInput.$char('*') || parserInput.$char('&') || this.attribute() ||
                      parserInput.$re(/^\([^&()@]+\)/) ||  parserInput.$re(/^[\.#:](?=@)/) ||
                      this.entities.variableCurly();
  
                  if (!e) {
                      parserInput.save();
                      if (parserInput.$char('(')) {
                          if ((v = this.selector(false)) && parserInput.$char(')')) {
                              e = new(tree.Paren)(v);
                              parserInput.forget();
                          } else {
                              parserInput.restore('Missing closing \')\'');
                          }
                      } else {
                          parserInput.forget();
                      }
                  }
  
                  if (e) { return new(tree.Element)(c, e, e instanceof tree.Variable, index, fileInfo); }
              }
func_code_string: function () {
                  var e, c, v, index = parserInput.i;
  
                  c = this.combinator();
  
                  e = parserInput.$re(/^(?:\d+\.\d+|\d+)%/) ||
                      parserInput.$re(/^(?:[.#]?|:*)(?:[\w-]|[^\x00-\x9f]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/) ||
                      parserInput.$char('*') || parserInput.$char('&') || this.attribute() ||
                      parserInput.$re(/^\([^&()@]+\)/) ||  parserInput.$re(/^[\.#:](?=@)/) ||
                      this.entities.variableCurly();
  
                  if (!e) {
                      parserInput.save();
                      if (parserInput.$char('(')) {
                          if ((v = this.selector(false)) && parserInput.$char(')')) {
                              e = new(tree.Paren)(v);
                              parserInput.forget();
                          } else {
                              parserInput.restore('Missing closing \')\'');
                          }
                      } else {
                          parserInput.forget();
                      }
                  }
  
                  if (e) { return new(tree.Element)(c, e, e instanceof tree.Variable, index, fileInfo); }
              }
func_documentation_string: A Selector Element  div + h1 #socks input[type="text"]  Elements are the building blocks for Selectors, they are made out of a `Combinator` (see combinator rule), and an element name, such as a tag a class, or `*`.