sortpath: support half chapter

This commit is contained in:
Celogeek 2023-04-09 08:23:18 +02:00
parent a224c64568
commit a155b9fbd7
Signed by: celogeek
SSH Key Fingerprint: SHA256:njNJLzoLQdbV9PC6ehcruRb0QnEgxABoCYZ+0+aUIYc

View File

@ -7,18 +7,18 @@ import (
"strings" "strings"
) )
var split_path_regex = regexp.MustCompile(`^(.*?)(\d+)$`) var split_path_regex = regexp.MustCompile(`^(.*?)(\d+(?:\.\d+)?)$`)
type part struct { type part struct {
name string name string
number int number float64
} }
func (a part) Compare(b part) int { func (a part) Compare(b part) float64 {
if a.name == b.name { if a.name == b.name {
return a.number - b.number return a.number - b.number
} else { } else {
return strings.Compare(a.name, b.name) return float64(strings.Compare(a.name, b.name))
} }
} }
@ -27,11 +27,11 @@ func parsePart(p string) part {
if len(r) == 0 { if len(r) == 0 {
return part{p, 0} return part{p, 0}
} }
n, err := strconv.ParseInt(r[2], 10, 32) n, err := strconv.ParseFloat(r[2], 64)
if err != nil { if err != nil {
return part{p, 0} return part{p, 0}
} }
return part{r[1], int(n)} return part{r[1], n}
} }
func parse(filename string) []part { func parse(filename string) []part {
@ -48,7 +48,7 @@ func parse(filename string) []part {
return f return f
} }
func comparePart(a, b []part) int { func comparePart(a, b []part) float64 {
m := len(a) m := len(a)
if m > len(b) { if m > len(b) {
m = len(b) m = len(b)
@ -59,7 +59,7 @@ func comparePart(a, b []part) int {
return c return c
} }
} }
return len(a) - len(b) return float64(len(a) - len(b))
} }
type by struct { type by struct {