blob: ba62908eba0f81255ef93d7a56e7ede4344ea63a (
plain) (
blame)
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
|
package main
import (
"fmt"
"git.uakci.space/toaq/nuogai/vietoaq"
"strings"
)
func Hoelai(s string) string {
viet := vietoaq.To(s)
parts := vietoaq.Syllables(viet, vietoaq.VietoaqSyllable)
var sb strings.Builder
for i, part := range parts {
if i%2 == 0 {
sb.WriteString(part[0])
continue
}
onset, nucleus, coda := part[1], part[2], part[3]
switch onset {
case "ch":
onset = "w"
case "sh":
onset = "x"
case "x":
onset = "q"
}
diph := ""
if len(nucleus) >= 2 {
flag := true
switch nucleus[len(nucleus)-2:] {
case "ai":
diph = "y"
case "ao":
diph = "v"
case "oi":
diph = "z"
case "ei":
diph = "W"
default:
flag = false
}
if flag {
nucleus = nucleus[:len(nucleus)-2]
}
}
if len(nucleus) >= 2 {
diph = strings.ToUpper(nucleus[1:])
nucleus = nucleus[:1]
} else if nucleus == "a" && diph == "" {
nucleus = ""
}
fmt.Fprintf(&sb, "%s%s%s%s",
diph, onset, strings.ToUpper(coda), nucleus)
}
return sb.String()
}
|