func (l *selLexer) next() rune {
	if l.pos >= len(l.input) {
		l.width = 0
		return eof
	}
	r, w := utf8.DecodeRuneInString(l.input[l.pos:])
	l.width = w
	l.pos += l.width
	return r
}
next returns the next rune in the input.
package lzjson
import (
	"fmt"
	"strings"
	"unicode/utf8"
)
type selItem struct {
	typ selItemType
	val string
}
type selItemType int
const (
	selItemError     selItemType = iota  
	selItemDot                           
	selItemSpace                         
	selItemRightBrac                     
	selItemLeftBrac                      
	selItemProp                          
	selItemNumber                        
	selItemString                        
	selItemEnd                           
)
const (
	charCap      = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
	charSmallCap = "abcdefghijklmnoperstuvwxyz"
	charNumeric  = "0123456789"
)
const eof = -1
func lexSel(input string) *selLexer {
	return &selLexer{
		input: input,
		items: make(chan selItem),
	}
}
type selLexer struct {
	input string
	state selStateFn
	pos   int
	start int
	width int
	items chan selItem
}