package main import ( "bufio" "bytes" "errors" "flag" "io" "os" ) var ( stdin io.Reader = os.Stdin stdout io.Writer = os.Stdout columnDelimiter string pageDelimiter string minimumInstances int ) func main() { flag.StringVar(&pageDelimiter, "p", "\f", "page delimiter character") flag.StringVar(&columnDelimiter, "d", " ", "column delimiter character") flag.IntVar(&minimumInstances, "m", 2, "minimum non-leading instances of delimiter to break a column") flag.Parse() if err := _main(); err != nil { panic(err) } } func _main() error { r := bufio.NewReader(stdin) for { b, err := readPage(r) if err != nil && err != io.EOF { return err } if err := putPage(b); err != nil { return err } if err == io.EOF { break } } return nil } func readPage(r *bufio.Reader) ([]byte, error) { return _readPage([]byte(pageDelimiter)[0], r) } func _readPage(d byte, r *bufio.Reader) ([]byte, error) { b, err := r.ReadBytes(d) if len(b) > 0 && byte(b[len(b)-1]) == d { b = b[:len(b)-1] } return b, err } func putPage(b []byte) error { return _putPage(stdout, b) } func _putPage(w io.Writer, b []byte) error { for _, line := range lines(b) { _ = line } return errors.New("not impl") } func lines(b []byte) [][]byte { return bytes.Split(b, []byte{'\n'}) }