diff options
author | Junegunn Choi <junegunn.c@gmail.com> | 2015-01-23 06:26:00 +0900 |
---|---|---|
committer | Junegunn Choi <junegunn.c@gmail.com> | 2015-01-23 06:26:00 +0900 |
commit | c35d98dc42e8327ffbfd17701efa3d5fb68eeae0 (patch) | |
tree | 742ef68f3f5cc400c89efd23188c3a35d9fae9ab /src/tokenizer.go | |
parent | 8bead4ae3427689955a1248619917f8beeba9585 (diff) |
Nullify --nth option when it's irrelevant
Diffstat (limited to 'src/tokenizer.go')
-rw-r--r-- | src/tokenizer.go | 22 |
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 { |