summaryrefslogtreecommitdiffstats
path: root/src/tokenizer.go
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2015-01-23 06:26:00 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2015-01-23 06:26:00 +0900
commitc35d98dc42e8327ffbfd17701efa3d5fb68eeae0 (patch)
tree742ef68f3f5cc400c89efd23188c3a35d9fae9ab /src/tokenizer.go
parent8bead4ae3427689955a1248619917f8beeba9585 (diff)
Nullify --nth option when it's irrelevant
Diffstat (limited to 'src/tokenizer.go')
-rw-r--r--src/tokenizer.go22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/tokenizer.go b/src/tokenizer.go
index 26aebd94..d38f46f5 100644
--- a/src/tokenizer.go
+++ b/src/tokenizer.go
@@ -28,22 +28,32 @@ type Token struct {
prefixLength int
}
+func newRange(begin int, end int) Range {
+ if begin == 1 {
+ begin = rangeEllipsis
+ }
+ if end == -1 {
+ end = rangeEllipsis
+ }
+ return Range{begin, end}
+}
+
// ParseRange parses nth-expression and returns the corresponding Range object
func ParseRange(str *string) (Range, bool) {
if (*str) == ".." {
- return Range{rangeEllipsis, rangeEllipsis}, true
+ return newRange(rangeEllipsis, rangeEllipsis), true
} else if strings.HasPrefix(*str, "..") {
end, err := strconv.Atoi((*str)[2:])
if err != nil || end == 0 {
return Range{}, false
}
- return Range{rangeEllipsis, end}, true
+ return newRange(rangeEllipsis, end), true
} else if strings.HasSuffix(*str, "..") {
begin, err := strconv.Atoi((*str)[:len(*str)-2])
if err != nil || begin == 0 {
return Range{}, false
}
- return Range{begin, rangeEllipsis}, true
+ return newRange(begin, rangeEllipsis), true
} else if strings.Contains(*str, "..") {
ns := strings.Split(*str, "..")
if len(ns) != 2 {
@@ -51,17 +61,17 @@ func ParseRange(str *string) (Range, bool) {
}
begin, err1 := strconv.Atoi(ns[0])
end, err2 := strconv.Atoi(ns[1])
- if err1 != nil || err2 != nil {
+ if err1 != nil || err2 != nil || begin == 0 || end == 0 {
return Range{}, false
}
- return Range{begin, end}, true
+ return newRange(begin, end), true
}
n, err := strconv.Atoi(*str)
if err != nil || n == 0 {
return Range{}, false
}
- return Range{n, n}, true
+ return newRange(n, n), true
}
func withPrefixLengths(tokens []string, begin int) []Token {