79 lines
1.2 KiB
Go
79 lines
1.2 KiB
Go
package cjlookup
|
|
|
|
import (
|
|
query "github.com/tgckpg/golifehk/query"
|
|
"golang.org/x/exp/slices"
|
|
"strconv"
|
|
)
|
|
|
|
type CChar struct {
|
|
Face string
|
|
CangJie string
|
|
JyutPing *CJyutPing
|
|
DukJam *[]*DukJam
|
|
_JiDukJam *[]*CJyutPing
|
|
query.Searchable
|
|
}
|
|
|
|
type DukJam struct {
|
|
Weight int
|
|
JyutPing *CJyutPing
|
|
}
|
|
|
|
type CJyutPing struct {
|
|
Roman string
|
|
SearchKey string // Searchable key
|
|
TungJamZi *[]*CChar
|
|
tSorted bool
|
|
query.Searchable
|
|
}
|
|
|
|
func (this *CJyutPing) Test(val string) bool {
|
|
_, err := strconv.Atoi(val)
|
|
if err == nil {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (this *CChar) Test(val string) bool {
|
|
_, err := strconv.Atoi(val)
|
|
if err == nil {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (this *CChar) JiDukJam() *[]*CJyutPing {
|
|
if this._JiDukJam == nil {
|
|
jdj := &[]*CJyutPing{}
|
|
for _, dj := range *this.DukJam {
|
|
if dj.JyutPing != this.JyutPing {
|
|
*jdj = append(*jdj, dj.JyutPing)
|
|
}
|
|
}
|
|
this._JiDukJam = jdj
|
|
}
|
|
|
|
return this._JiDukJam
|
|
}
|
|
|
|
func (this *CJyutPing) SortedTungJamZi() *[]*CChar {
|
|
if this.tSorted {
|
|
return this.TungJamZi
|
|
}
|
|
|
|
slices.SortFunc(*this.TungJamZi, func(a, b *CChar) int {
|
|
switch {
|
|
case a.Face < b.Face:
|
|
return -1
|
|
case a.Face > b.Face:
|
|
return 1
|
|
default:
|
|
return 0
|
|
}
|
|
})
|
|
|
|
return this.TungJamZi
|
|
}
|