diff --git a/README.md b/README.md index 91b112b..b151d53 100644 --- a/README.md +++ b/README.md @@ -139,7 +139,7 @@ selected for the next round of selection. Provide one number for a simple index. ```bash -$ pup < robots.html a {0} +$ pup < robots.html a slice{0} ``` @@ -148,7 +148,7 @@ You can provide an end to limit the number of nodes selected. ```bash $ # {:3} is the same as {0:3} -$ pup < robots.html a {:3} +$ pup < robots.html a slice{:3} @@ -159,7 +159,24 @@ $ pup < robots.html a {:3} ``` -The `by` index still needs work. +The `by` indexer works particularly well with tables. + +```bash +$ curl -s http://www.pro-football-reference.com/boxscores/201402020den.htm | \ +pup table#linescore td slice{::6} + + + Seattle Seahawks + + (13-3-0) + + + + Denver Broncos + + (13-3-0) + +``` ## Implemented Selectors diff --git a/main.go b/main.go index 6ac695b..239bf43 100644 --- a/main.go +++ b/main.go @@ -12,7 +12,7 @@ import ( "strings" ) -const VERSION string = "0.2.0" +const VERSION string = "0.2.1" var ( // Flags diff --git a/selector/selector.go b/selector/selector.go index 4efac23..fb9650a 100644 --- a/selector/selector.go +++ b/selector/selector.go @@ -269,7 +269,7 @@ func (sel SliceSelector) Select(nodes []*html.Node) []*html.Node { selected = append(selected, nodes[i]) } } else { - for i := end - 1; i > 0 && i >= start; i = i + by { + for i := end - 1; i >= 0 && i >= start; i = i + by { selected = append(selected, nodes[i]) } } @@ -328,12 +328,12 @@ func parseSliceSelector(s string) (sel SliceSelector, err error) { func parseSelectorFunc(s string) (Selector, error) { switch { - case strings.HasPrefix(s, "{"): + case strings.HasPrefix(s, "slice{"): if !strings.HasSuffix(s, "}") { return nil, fmt.Errorf( "slice func must end with a '}'") } - s = strings.TrimPrefix(s, "{") + s = strings.TrimPrefix(s, "slice{") s = strings.TrimSuffix(s, "}") return parseSliceSelector(s) }