-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathkana.js
73 lines (72 loc) · 2.21 KB
/
kana.js
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// hiragana2katakana
const hiragana2katakana = function(s) {
return s.replace(/[ぁ-ん]/g, function(s) {
return String.fromCharCode(s.charCodeAt(0) + 0x60)
})
}
const katakana2hiraana = function(s) {
return s.replace(/[ア-ン]/g, function(s) {
return String.fromCharCode(s.charCodeAt(0) - 0x60)
})
}
// hankaku, half kana
const HALF_KANA_ZEN = "¥。「」、。ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜"
const HALF_KANA = "\¥。「」、。ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚" // FORI=#A0TO#DF:?CHR$(I);:NEXT
const fromHankakuSJIS = function(c) {
if (c >= 0xa0 && c <= 0xdf) {
c = HALF_KANA.charCodeAt(c - 0xa0)
}
return c
}
const DAKU_KANA = "ガギグゲゴザジズゼゾダヂヅデドバビブベボ"
const DAKU_HALF_KANA = "カキクケコサシスセソタチツテトハヒフヘホ"
const HANDAKU_KANA = "パピプペポ"
const HANDAKU_HALF_KANA = "ハヒフヘホ"
const getHankakuSJIS = function(c) {
var n = HALF_KANA.indexOf(c)
if (n >= 0) {
return n + 0xa0
} else {
var n = c.charCodeAt(0)
if (n >= '!'.charCodeAt(0) && n <= '~'.charCodeAt(0)) {
return n - 0xfee0
}
if (n == ' '.charCodeAt(0)) {
return 0x20
}
if (n < 0x100)
return c.charCodeAt(0);
return 0
}
}
const toHankakuSJIS = function(c) { // ret array
c = hiragana2katakana(c)
var n = DAKU_KANA.indexOf(c)
if (n >= 0) {
return [ getHankakuSJIS(DAKU_HALF_KANA.charAt(n)), getHankakuSJIS("゙") ]
}
var n = HANDAKU_KANA.indexOf(c)
if (n >= 0) {
return [ getHankakuSJIS(HANDAKU_HALF_KANA.charAt(n)), getHankakuSJIS("゚") ]
}
var n = HALF_KANA_ZEN.indexOf(c)
if (n >= 0) {
return [ getHankakuSJIS(HALF_KANA.charAt(n)) ]
}
return [ getHankakuSJIS(c) ]
}
const toHankaku = function(s) {
s = hiragana2katakana(s)
const res = []
for (const c of s) {
const han = toHankakuSJIS(c)
for (let c2 of han) {
if (c2 >= 0xa0) {
c2 += -0xa0 + 0xff60
}
res.push(String.fromCharCode(c2))
}
}
return res.join("")
}
export { toHankaku };