Rewrite some struct linkages
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user