func passData(l *lex.Lexer, o io.Writer) { data, err := l.ConsumeData() if err != nil { fmt.Fprintf(os.Stderr, "%d: error: %s\n", l.LineNumber(), l.Error()) os.Exit(1) } fmt.Fprintf(o, "data %d\n", len(data)) _, err = o.Write(data) if err != nil { fmt.Fprintf(os.Stderr, "%d: error: %s\n", l.LineNumber(), l.Error()) os.Exit(1) } }
func filter(l *lex.Lexer, o io.Writer, handler TokenHandler) { for { switch l.Token() { case lex.EOFTok: return case lex.ErrTok: fmt.Fprintf(os.Stderr, "%d: error: %s\n", l.LineNumber(), l.Error()) os.Exit(1) case lex.InvalidTok: fmt.Fprintf(os.Stderr, "%d: invalid command: %s\n", l.LineNumber(), l.Line()) os.Exit(1) case lex.DataTok: passData(l, o) default: if err := handler.HandleToken(l, o); err != nil { fmt.Fprintf(os.Stderr, "%d: error: %s\n", l.LineNumber(), err) os.Exit(1) } } } }