function crawl(e, i, p) {
        while (p = walker[dividedTokens[i]](p, e)) {
          if (isNode(p) && (found = interpret.apply(p, q(tokens[i])))) {
            if (i) {
              if (cand = crawl(p, i - 1, p)) return cand
            } else return p
          }
        }
      }
// recursively work backwards through the tokens and up the dom, covering all options
recursively work backwards through the tokens and up the dom, covering all options
recursively work backwards through the tokens and up the dom covering all options
function crawl(e, i, p) {
        while (p = walker[dividedTokens[i]](p, e)) {
          if (isNode(p) && (found = interpret.apply(p, q(tokens[i])))) {
            if (i) {
              if (cand = crawl(p, i - 1, p)) return cand
            } else return p
          }
        }
      }
function crawl ( e , i , p ) { while ( p = walker [ dividedTokens [ i ] ] ( p , e ) ) { if ( isNode ( p ) && ( found = interpret . apply ( p , q ( tokens [ i ] ) ) ) ) { if ( i ) { if ( cand = crawl ( p , i - 1 , p ) ) return cand } else return p } } }
recursively work backwards through the tokens and up the dom, covering all options
recursively work backwards through the tokens and up the dom covering all options