cmd.go (772B)
1 package cmd 2 3 import ( 4 "fmt" 5 "io" 6 "os" 7 8 "golang.org/x/net/html" 9 ) 10 11 func readerFromFile(file string) (f io.Reader, name string, err error) { 12 if file == "-" { 13 name = "[stdin]" 14 f = os.Stdin 15 } else { 16 name = file 17 f, err = os.Open(file) 18 if err != nil { 19 return 20 } 21 } 22 return 23 } 24 25 func logErr(fileName string, err error) { 26 fmt.Fprintf(os.Stderr, "%s: %v\n", fileName, err) 27 } 28 29 func Fatal(err error) { 30 fmt.Fprintf(os.Stderr, "%v\n", err) 31 } 32 33 func Main(args []string, handleFunc func(*html.Node)) { 34 if len(args) == 0 { 35 args = append(args, "-") 36 } 37 for _, a := range args { 38 f, fn, err := readerFromFile(a) 39 if err != nil { 40 logErr(fn, err) 41 continue 42 } 43 doc, err := html.Parse(f) 44 if err != nil { 45 logErr(fn, err) 46 return 47 } 48 handleFunc(doc) 49 } 50 }