code: func (p *Lexer) Number() (string, bool) {
  
  	var buf []byte
  	var sign byte
  	point := false
  
  	c := p.PeekByte()
  	if c == '-' || c == '+' {
  		sign = c
  		p.Byte()
  	}
  
  	for {
  		c, _ := p.Byte()
  		if !IsDigit(rune(c)) {
  			if !point && c == '.' {
  				point = true
  				buf = append(buf, c)
  				continue
  			}
  			break
  		}
  		buf = append(buf, c)
  	}
  
  	p.UnreadByte()
  	if sign == '-' {
  		return "-" + string(buf), len(buf) > 0
  	}
  	return string(buf), len(buf) > 0
  }
docs: // Number returns true if it finds a number at the current
  // parser position. It returns also the number found.
  // TODO recognize exp notation ?