Rewrite some struct linkages
This commit is contained in:
@@ -7,7 +7,6 @@ import (
|
||||
|
||||
query "github.com/tgckpg/golifehk/query"
|
||||
utils "github.com/tgckpg/golifehk/utils"
|
||||
"golang.org/x/exp/slices"
|
||||
)
|
||||
|
||||
type QueryResult struct {
|
||||
@@ -19,11 +18,11 @@ type QueryResult struct {
|
||||
func writeCCharInfo(sb *strings.Builder, cc *CChar) {
|
||||
sb.WriteString(getCUHARTSUrlForChar(cc.Face))
|
||||
sb.WriteString(" ")
|
||||
utils.WriteMDv2Text(sb, cc.JyutPing)
|
||||
if cc.YiDukJam != nil {
|
||||
sb.WriteString(getCUHARTSUrlForPronounce(cc.JyutPing.Roman))
|
||||
if 0 < len(*cc.JiDukJam()) {
|
||||
sb.WriteString("\n")
|
||||
utils.WriteMDv2Text(sb, "異讀: ")
|
||||
utils.WriteMDv2Text(sb, strings.Join(*cc.YiDukJam, " "))
|
||||
sb.WriteString(strings.Join(getCUHARTSUrlsForPronounce(*cc.JiDukJam()), " "))
|
||||
}
|
||||
sb.WriteString("\n")
|
||||
utils.WriteMDv2Text(sb, "倉: ")
|
||||
@@ -31,18 +30,7 @@ func writeCCharInfo(sb *strings.Builder, cc *CChar) {
|
||||
sb.WriteString("\n")
|
||||
utils.WriteMDv2Text(sb, "同音字:")
|
||||
|
||||
slices.SortFunc(*cc.TungJamZi, func(a, b *CChar) int {
|
||||
switch {
|
||||
case a.Face < b.Face:
|
||||
return -1
|
||||
case a.Face > b.Face:
|
||||
return 1
|
||||
default:
|
||||
return 0
|
||||
}
|
||||
})
|
||||
|
||||
for i, cchar := range *cc.TungJamZi {
|
||||
for i, cchar := range *cc.JyutPing.SortedTungJamZi() {
|
||||
sb.WriteString(" ")
|
||||
utils.WriteMDv2Text(sb, cchar.Face)
|
||||
utils.WriteMDv2Text(sb, strconv.Itoa(i+1))
|
||||
@@ -74,53 +62,45 @@ func (this QueryResult) Message() (string, error) {
|
||||
return "", fmt.Errorf("Not Found: \"%s\"", strings.Join(terms, "\", \""))
|
||||
}
|
||||
|
||||
slices.SortFunc(*q.Results, func(a, b query.ISearchable) int {
|
||||
aa := a.(*CJyutPing)
|
||||
bb := b.(*CJyutPing)
|
||||
switch {
|
||||
case aa.Ref.Face < bb.Ref.Face:
|
||||
return -1
|
||||
case aa.Ref.Face > bb.Ref.Face:
|
||||
return 1
|
||||
default:
|
||||
return 0
|
||||
}
|
||||
})
|
||||
|
||||
if utils.IsASCIIAlnum(argv[0].Value) {
|
||||
// Roman Search
|
||||
cjp := any((*q.Results)[0]).(*CJyutPing)
|
||||
if args == 1 {
|
||||
for i, entry := range *q.Results {
|
||||
cjp := any(entry).(*CJyutPing)
|
||||
sb.WriteString(" ")
|
||||
utils.WriteMDv2Text(&sb, cjp.Ref.Face)
|
||||
utils.WriteMDv2Text(&sb, strconv.Itoa(i+1))
|
||||
}
|
||||
} else if args == 2 {
|
||||
var err error
|
||||
x, err := strconv.Atoi(argv[1].Value)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("Invalid index: %s", argv[1].Org)
|
||||
}
|
||||
if 0 < x {
|
||||
for i, entry := range *q.Results {
|
||||
cjp := any(entry).(*CJyutPing)
|
||||
if (i + 1) == x {
|
||||
writeCCharInfo(&sb, cjp.Ref)
|
||||
if len(*q.Results) == 1 {
|
||||
if len(*cjp.SortedTungJamZi()) == 1 {
|
||||
for _, cchar := range *cjp.SortedTungJamZi() {
|
||||
writeCCharInfo(&sb, cchar)
|
||||
}
|
||||
} else {
|
||||
for i, cchar := range *cjp.SortedTungJamZi() {
|
||||
sb.WriteString(" ")
|
||||
utils.WriteMDv2Text(&sb, cchar.Face)
|
||||
utils.WriteMDv2Text(&sb, strconv.Itoa(i+1))
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return "", fmt.Errorf("Multiple results found: %s", *q.Results)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
cjp := any((*q.Results)[0]).(*CFace)
|
||||
if args == 1 {
|
||||
writeCCharInfo(&sb, cjp.Ref)
|
||||
} else if args == 2 {
|
||||
var err error
|
||||
x, err := strconv.Atoi(argv[1].Value)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("Invalid index: %s", argv[1].Org)
|
||||
}
|
||||
tjz := (*(*cjp.Ref).TungJamZi)[x-1]
|
||||
writeCCharInfo(&sb, (*cjp.SortedTungJamZi())[x-1])
|
||||
}
|
||||
} else {
|
||||
// Char Search
|
||||
cchar := any((*q.Results)[0]).(*CChar)
|
||||
if args == 1 {
|
||||
writeCCharInfo(&sb, cchar)
|
||||
} else if args == 2 {
|
||||
var err error
|
||||
x, err := strconv.Atoi(argv[1].Value)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("Invalid index: %s", argv[1].Org)
|
||||
}
|
||||
tjz := (*(cchar.JyutPing).SortedTungJamZi())[x-1]
|
||||
|
||||
if tjz != nil {
|
||||
writeCCharInfo(&sb, tjz)
|
||||
|
||||
Reference in New Issue
Block a user