-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmeta.go
76 lines (64 loc) · 1.51 KB
/
meta.go
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package main
import (
_ "embed"
"encoding/json"
"regexp"
"strings"
)
var floatFormatRegexp = regexp.MustCompile(`%\d+\.\d+f`)
type meta struct {
ID int `json:"id"`
Enum string `json:"enum"`
DataType int `json:"data_type"`
Desc1 string `json:"desc1"`
Desc2 string `json:"desc2"`
Desc string
Formatter string `json:"formatter"`
Format string
}
//go:embed data.json
var dataFile []byte
func loadMeta(dict map[string]string, formats map[string]string) (map[int]meta, error) {
metaArray := make([]meta, 0)
if err := json.Unmarshal(dataFile, &metaArray); err != nil {
return nil, err
}
result := make(map[int]meta)
for _, d := range metaArray {
d.Desc1 = desc(d.Desc1, dict)
d.Desc2 = desc(d.Desc2, dict)
if d.Desc2 == "" {
d.Desc = d.Desc1
} else {
d.Desc = d.Desc1 + " " + d.Desc2
}
if format, ok := formats[d.Formatter]; ok {
d.Format = sanitizeFormat(format)
}
result[d.ID] = d
}
return result, nil
}
func desc(s string, dict map[string]string) string {
return sanitizeDesc(localizeDesc(s, dict))
}
func localizeDesc(s string, dict map[string]string) string {
if strings.HasPrefix(s, "#") {
if localized, ok := dict[strings.TrimPrefix(s, "#")]; ok {
return localized
} else {
return s
}
} else {
return s
}
}
func sanitizeDesc(s string) string {
s = strings.ReplaceAll(s, "\r", "")
s = strings.ReplaceAll(s, "\n", " ")
return s
}
func sanitizeFormat(s string) string {
s = floatFormatRegexp.ReplaceAllString(s, "%f")
return s
}