Rewrite some struct linkages

This commit is contained in:
2026-02-20 21:06:47 +08:00
parent 1d9407331a
commit d54f106dee
10 changed files with 228 additions and 128 deletions

View File

@@ -86,6 +86,7 @@ func ReadCangJieTable(charMap map[string]*CChar, repl *strings.Replacer) error {
} else {
c := CChar{}
c.Face = face
c.Key = &c.Face
c.CangJie = repl.Replace(record[1])
charMap[face] = &c
}
@@ -94,7 +95,7 @@ func ReadCangJieTable(charMap map[string]*CChar, repl *strings.Replacer) error {
return nil
}
func ReadJyutPingTable(charMap map[string]*CChar) (map[string]*[]*CChar, error) {
func ReadJyutPingTable(charMap map[string]*CChar) (map[string]*CJyutPing, error) {
f, err := os.Open(YAML_JYUTPING_CHARS)
if err != nil {
log.Fatal(err)
@@ -118,7 +119,7 @@ func ReadJyutPingTable(charMap map[string]*CChar) (map[string]*[]*CChar, error)
r.Comma = '\t'
r.FieldsPerRecord = -1
JyutPingMap := map[string]*[]*CChar{}
JyutPingMap := map[string]*CJyutPing{}
for {
record, err := r.Read()
if err == io.EOF {
@@ -131,41 +132,70 @@ func ReadJyutPingTable(charMap map[string]*CChar) (map[string]*[]*CChar, error)
face := record[0]
jyutping := record[1]
var c *CChar
c, ok := charMap[face]
var tjz *[]*CChar
cjp, ok := JyutPingMap[jyutping]
if ok {
if len(record) == 2 {
c.JyutPing = record[1]
} else if len(record) == 3 {
s := record[2]
if strings.HasSuffix(s, "%") {
_, err := strconv.Atoi(s[:len(s)-1])
if err != nil {
return nil, err
}
}
yList := c.YiDukJam
if yList == nil {
yList = &[]string{}
}
*yList = append(*yList, record[1])
c.YiDukJam = yList
}
tjz = cjp.TungJamZi
} else {
cjp = &CJyutPing{}
cjp.Roman = jyutping
cjp.SearchKey = strings.ToUpper(jyutping)
cjp.Key = &cjp.SearchKey
tjz = &[]*CChar{}
cjp.TungJamZi = tjz
JyutPingMap[jyutping] = cjp
}
var c *CChar
c, ok = charMap[face]
if !ok {
c = &CChar{}
c.Face = face
c.JyutPing = jyutping
c.Key = &c.Face
charMap[face] = c
}
pListPtr, ok := JyutPingMap[jyutping]
if !ok {
pList := []*CChar{}
pListPtr = &pList
JyutPingMap[jyutping] = pListPtr
*tjz = append(*tjz, c)
var dj *DukJam
if len(record) == 2 {
c.JyutPing = cjp
dj = &DukJam{}
dj.Weight = 100
dj.JyutPing = cjp
} else if len(record) == 3 {
s := record[2]
var w int
if strings.HasSuffix(s, "%") {
w, err = strconv.Atoi(s[:len(s)-1])
if err != nil {
return nil, err
}
}
dj = &DukJam{}
dj.Weight = w
dj.JyutPing = cjp
}
if dj != nil {
if c.DukJam == nil {
c.DukJam = &[]*DukJam{}
}
*c.DukJam = append(*c.DukJam, dj)
}
}
for _, c := range charMap {
if c.JyutPing == nil && c.DukJam != nil {
_max := -1
for _, dj := range *c.DukJam {
if _max < dj.Weight {
_max = dj.Weight
c.JyutPing = dj.JyutPing
}
}
}
*pListPtr = append(*pListPtr, c)
c.TungJamZi = pListPtr
}
return JyutPingMap, nil