func ReadSML(reader io.Reader, builder Builder) error {
	s := &mlReader{
		reader:  bufio.NewReader(reader),
		builder: builder,
		index:   -1,
	}
	if err := s.readPreliminary(); err != nil {
		return err
	}
	return s.readTagNode()
}
ReadSML parses a SML document and uses the passed builder
for the callbacks.
package sml
import (
	"bufio"
	"bytes"
	"fmt"
	"io"
	"unicode"
	"github.com/tideland/golib/errors"
)
const (
	rcText int = iota + 1
	rcSpace
	rcOpen
	rcClose
	rcEscape
	rcExclamation
	rcHash
	rcTag
	rcEOF
	rcInvalid
	chSpace       = ' '
	chOpen        = '{'
	chClose       = '}'
	chEscape      = '^'
	chExclamation = '!'
	chHash        = '#'
)