1
0
mirror of https://github.com/ericchiang/pup synced 2024-11-24 08:58:08 +00:00

negative selectors fixed

This commit is contained in:
ericchiang 2014-09-19 16:37:06 -04:00
parent 791366455e
commit d39374885b
2 changed files with 7 additions and 3 deletions

View File

@ -12,7 +12,7 @@ import (
"strings" "strings"
) )
const VERSION string = "0.2.1" const VERSION string = "0.2.2"
var ( var (
// Flags // Flags

View File

@ -238,6 +238,7 @@ type SliceSelector struct {
End int End int
LimitEnd bool LimitEnd bool
By int By int
N int
} }
func (sel SliceSelector) Select(nodes []*html.Node) []*html.Node { func (sel SliceSelector) Select(nodes []*html.Node) []*html.Node {
@ -248,15 +249,17 @@ func (sel SliceSelector) Select(nodes []*html.Node) []*html.Node {
case !sel.LimitStart: case !sel.LimitStart:
start = 0 start = 0
case sel.Start < 0: case sel.Start < 0:
start = (nNodes + 1) + sel.Start start = nNodes + sel.Start
default: default:
start = sel.Start start = sel.Start
} }
switch { switch {
case sel.N == 1:
end = start + 1
case !sel.LimitEnd: case !sel.LimitEnd:
end = nNodes end = nNodes
case sel.End < 0: case sel.End < 0:
end = (nNodes + 1) + sel.End end = nNodes + sel.End
default: default:
end = sel.End end = sel.End
} }
@ -287,6 +290,7 @@ func parseSliceSelector(s string) (sel SliceSelector, err error) {
} }
split := strings.Split(s, ":") split := strings.Split(s, ":")
n := len(split) n := len(split)
sel.N = n
if n > 3 { if n > 3 {
err = fmt.Errorf("too many slices") err = fmt.Errorf("too many slices")
return return