-
Notifications
You must be signed in to change notification settings - Fork 0
/
tables.go
55 lines (48 loc) · 3.69 KB
/
tables.go
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
package gomojimoji
// Character tables are taken from the original mojimoji python library.
var (
ASCII_ZENKAKU_CHARS = []rune{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '!', '”', '#', '$', '%', '&', '’', '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '¥', ']', '^', '_', '‘', '{', '|', '}', '~', '\u3000'}
ASCII_HANKAKU_CHARS = []rune{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '¥', ']', '^', '_', '`', '{', '|', '}', '~', ' '}
tabASCIIzh, tabASCIIhz = indexRunes(ASCII_ZENKAKU_CHARS, ASCII_HANKAKU_CHARS)
KANA_ZENKAKU_CHARS = []rune{'ア', 'イ', 'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ', 'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト', 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ', 'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ', 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ヲ', 'ン', 'ァ', 'ィ', 'ゥ', 'ェ', 'ォ', 'ッ', 'ャ', 'ュ', 'ョ', '。', '、', '・', '゛', '゜', '「', '」', 'ー'}
KANA_HANKAKU_CHARS = []rune{'ア', 'イ', 'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ', 'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト', 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ', 'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ', 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ヲ', 'ン', 'ァ', 'ィ', 'ゥ', 'ェ', 'ォ', 'ッ', 'ャ', 'ュ', 'ョ', '。', '、', '・', '゙', '゚', '「', '」', 'ー'}
tabKANAzh, tabKanaHz = indexRunes(KANA_ZENKAKU_CHARS, KANA_HANKAKU_CHARS)
DIGIT_ZENKAKU_CHARS = []rune{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}
DIGIT_HANKAKU_CHARS = []rune{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}
tabDIGITzh, tabDigitHz = indexRunes(DIGIT_ZENKAKU_CHARS, DIGIT_HANKAKU_CHARS)
KANA_TEN_MAP = map[rune]rune{
'ガ': 'カ', 'ギ': 'キ', 'グ': 'ク', 'ゲ': 'ケ', 'ゴ': 'コ',
'ザ': 'サ', 'ジ': 'シ', 'ズ': 'ス', 'ゼ': 'セ', 'ゾ': 'ソ',
'ダ': 'タ', 'ヂ': 'チ', 'ヅ': 'ツ', 'デ': 'テ', 'ド': 'ト',
'バ': 'ハ', 'ビ': 'ヒ', 'ブ': 'フ', 'ベ': 'ヘ', 'ボ': 'ホ',
'ヴ': 'ウ',
}
tabKANATENzh, tabKanaTenHz = inverse(KANA_TEN_MAP)
KANA_MARU_MAP = map[rune]rune{
'パ': 'ハ', 'ピ': 'ヒ', 'プ': 'フ', 'ペ': 'ヘ', 'ポ': 'ホ',
}
tabKANAMARUzh, tabKanaMaruHz = inverse(KANA_MARU_MAP)
)
// indexRunes maps runes from rune-set a to rune-set b and vice versa. a and
// b should be of equal size, otherwise the function panics.
func indexRunes(a []rune, b []rune) (ab map[rune]rune, ba map[rune]rune) {
if len(a) != len(b) {
panic("slices of unequal sizes")
}
ab, ba = make(map[rune]rune, len(a)), make(map[rune]rune, len(b))
for i := range a {
ab[a[i]] = b[i]
ba[b[i]] = a[i]
}
return
}
// inverse inverts the mapping in abIn, and returns both inverted and
// non-inverted maps.
func inverse(abIn map[rune]rune) (ab map[rune]rune, ba map[rune]rune) {
ab = abIn
ba = make(map[rune]rune, len(ab))
for k, v := range ab {
ba[v] = k
}
return
}