func proceed(i *TypeOneI, rdr fancy.Reader) { for !i.Done { t, _ := ps.Token(rdr) // fmt.Printf("Stack: %v\n", util.StringArray(i.St.Dump())); // fmt.Printf("--- %s\n", t); if len(t) < 1 { break } b, _ := rdr.ReadByte() if b > 32 { rdr.UnreadByte() } if len(t) == 0 { break } if d, ok := find(i, "/"+string(t)); ok { if d[0] == '{' { proceed(i, fancy.SliceReader(d[1:len(d)-1])) } else { i.St.Push(d) } } else if f, ok := Ops[string(t)]; ok { f(i) } else { i.St.Push(t) } } return }
func SkipLE(f fancy.Reader) { for { c, err := f.ReadByte() if err != nil { return } if c > 32 { f.UnreadByte() return } if c == 13 { c, err = f.ReadByte() if err == nil && c != 10 { f.UnreadByte() } return } if c == 10 { return } } }
func Token(f fancy.Reader) ([]byte, int64) { again: c := skipSpaces(f) if c == 0 { return []byte{}, -1 } p := fpos(f) - 1 switch c { case '%': skipComment(f) goto again case '<', '[', '{': skipComposite(f) case '(': skipString(f) default: if skipToDelim(f) != 255 { f.UnreadByte() } } n := int(fpos(f) - p) f.Seek(p, 0) return f.Slice(n), p }