1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
// License: GPLv3 Copyright: 2022, Kovid Goyal, <kovid at kovidgoyal.net>
package at
import (
"fmt"
"strconv"
"strings"
)
func parse_scroll_amount(amt string) ([]any, error) {
var ans = make([]any, 2)
if amt == "start" || amt == "end" {
ans[0] = amt
ans[1] = nil
} else {
pages := strings.Contains(amt, "p")
unscroll := strings.Contains(amt, "u")
prompt := strings.Contains(amt, "r")
var mult float64 = 1
if strings.HasSuffix(amt, "-") && !unscroll {
mult = -1
}
q, err := strconv.ParseFloat(strings.TrimRight(amt, "+-plur"), 64)
if err != nil {
return ans, err
}
if !pages && q != float64(int(q)) {
return ans, fmt.Errorf("The number must be an integer")
}
ans[0] = q * mult
if pages {
ans[1] = "p"
} else if unscroll {
ans[1] = "u"
} else if prompt {
ans[1] = "r"
} else {
ans[1] = "l"
}
}
return ans, nil
}
|