code: func lexOpenMustache(l *Lexer) lexFunc {
  	var str string
  	var tok TokenKind
  
  	nextFunc := lexExpression
  
  	if str = l.findRegexp(rOpenEndRaw); str != "" {
  		tok = TokenOpenEndRawBlock
  	} else if str = l.findRegexp(rOpenRaw); str != "" {
  		tok = TokenOpenRawBlock
  		l.rawBlock = true
  	} else if str = l.findRegexp(rOpenUnescaped); str != "" {
  		tok = TokenOpenUnescaped
  	} else if str = l.findRegexp(rOpenBlock); str != "" {
  		tok = TokenOpenBlock
  	} else if str = l.findRegexp(rOpenEndBlock); str != "" {
  		tok = TokenOpenEndBlock
  	} else if str = l.findRegexp(rOpenPartial); str != "" {
  		tok = TokenOpenPartial
  	} else if str = l.findRegexp(rInverse); str != "" {
  		tok = TokenInverse
  		nextFunc = lexContent
  	} else if str = l.findRegexp(rOpenInverse); str != "" {
  		tok = TokenOpenInverse
  	} else if str = l.findRegexp(rOpenInverseChain); str != "" {
  		tok = TokenOpenInverseChain
  	} else if str = l.findRegexp(rOpen); str != "" {
  		tok = TokenOpen
  	} else {
  		// this is rotten
  		panic("Current pos MUST be an opening mustache")
  	}
  
  	l.pos += len(str)
  	l.emit(tok)
  
  	return nextFunc
  }
docs: // lexOpenMustache scans {{