From d39374885b65af57086bdc34674e5c7d29ee0209 Mon Sep 17 00:00:00 2001 From: ericchiang Date: Fri, 19 Sep 2014 16:37:06 -0400 Subject: [PATCH] negative selectors fixed --- main.go | 2 +- selector/selector.go | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/main.go b/main.go index 239bf43..67471d2 100644 --- a/main.go +++ b/main.go @@ -12,7 +12,7 @@ import ( "strings" ) -const VERSION string = "0.2.1" +const VERSION string = "0.2.2" var ( // Flags diff --git a/selector/selector.go b/selector/selector.go index fb9650a..f09f754 100644 --- a/selector/selector.go +++ b/selector/selector.go @@ -238,6 +238,7 @@ type SliceSelector struct { End int LimitEnd bool By int + N int } 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: start = 0 case sel.Start < 0: - start = (nNodes + 1) + sel.Start + start = nNodes + sel.Start default: start = sel.Start } switch { + case sel.N == 1: + end = start + 1 case !sel.LimitEnd: end = nNodes case sel.End < 0: - end = (nNodes + 1) + sel.End + end = nNodes + sel.End default: end = sel.End } @@ -287,6 +290,7 @@ func parseSliceSelector(s string) (sel SliceSelector, err error) { } split := strings.Split(s, ":") n := len(split) + sel.N = n if n > 3 { err = fmt.Errorf("too many slices") return