// pup func main() { cmds := ProcessFlags(os.Args[1:]) cr, err := charset.NewReader(inputStream, "") if err != nil { fmt.Fprintf(os.Stderr, err.Error()) os.Exit(2) } root, err := html.Parse(cr) if err != nil { fmt.Fprintf(os.Stderr, err.Error()) os.Exit(2) } inputStream.Close() if len(cmds) == 0 { PrintNode(root, 0) os.Exit(0) } selectors := make([]selector.Selector, len(cmds)) for i, cmd := range cmds { if i+1 == len(cmds) { d, err := funcs.NewDisplayFunc(cmd) if err == nil { displayer = d selectors = selectors[0 : len(cmds)-1] break } } selectors[i], err = selector.NewSelector(cmd) if err != nil { Fatal("Selector parse error: %s", err) } } currNodes := []*html.Node{root} var selected []*html.Node for _, selector := range selectors { selected = []*html.Node{} for _, node := range currNodes { selected = append(selected, selector.FindAllChildren(node)...) } currNodes = selected } if displayer != nil { displayer.Display(currNodes) } else if printNumber { fmt.Println(len(currNodes)) } else { for _, s := range currNodes { // defined in `printing.go` PrintNode(s, 0) } } }
// pup func main() { cmds := ProcessFlags(os.Args[1:]) cr, err := charset.NewReader(inputStream, "") if err != nil { fmt.Fprintf(os.Stderr, err.Error()) os.Exit(2) } root, err := html.Parse(cr) if err != nil { fmt.Fprintf(os.Stderr, err.Error()) os.Exit(2) } inputStream.Close() if len(cmds) == 0 { PrintNode(root, 0) os.Exit(0) } selectors := make([]selector.Selector, len(cmds)) for i, cmd := range cmds { // if this is the last element, check for a function like // text{} or attr{} if i+1 == len(cmds) { d, err := funcs.NewDisplayFunc(cmd) if err == nil { displayer = d selectors = selectors[0 : len(cmds)-1] break } } selectors[i], err = selector.NewSelector(cmd) if err != nil { Fatal("Selector parse error: %s", err) } } currNodes := []*html.Node{root} for _, selector := range selectors { currNodes = selector.Select(currNodes) } if displayer != nil { displayer.Display(currNodes) } else if printNumber { fmt.Println(len(currNodes)) } else { for _, s := range currNodes { // defined in `printing.go` PrintNode(s, 0) } } }