code: func (p *Parser) Variable() bool {
  
  	c, _ := p.Byte()
  
  	if c != '$' {
  		p.UnreadByte()
  		return false
  	}
  
  	c, _ = p.Byte()
  	if c == '\\' {
  		p.ev.Add("$")
  		return true
  	}
  
  	p.UnreadByte()
  
  	i := p.ev.Level()
  
  	c, _ = p.Byte()
  	if c == '(' {
  		p.ev.Add(TypeExpression)
  		p.ev.Inc()
  		p.Expression()
  		p.Space()
  		p.Byte() // Should be ')'
  	} else {
  		p.ev.Add(TypePath)
  		p.ev.Inc()
  		if c != '{' {
  			p.UnreadByte()
  		} else {
  			p.Space()
  		}
  		p.Path()
  
  		if c == '{' {
  			p.Space()
  			p.Byte() // Should be '}'
  		}
  	}
  
  	// Reset the level
  	p.ev.SetLevel(i)
  
  	return true
  
  }
docs: // Variable parses variables in a template. They begin with $.