-
Notifications
You must be signed in to change notification settings - Fork 24
/
to-hankaku-alpha-num.ts
106 lines (103 loc) · 2.62 KB
/
to-hankaku-alpha-num.ts
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/*!
* MIT License
*
* Copyright (c) 2024 デジタル庁
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
import { CharNode } from "./trie/char-node";
const zenkakuHankakuMap = new Map<string, string>([
['A', 'A'],
['B', 'B'],
['C', 'C'],
['D', 'D'],
['E', 'E'],
['F', 'F'],
['G', 'G'],
['H', 'H'],
['I', 'I'],
['J', 'J'],
['K', 'K'],
['L', 'L'],
['M', 'M'],
['N', 'N'],
['O', 'O'],
['P', 'P'],
['Q', 'Q'],
['R', 'R'],
['S', 'S'],
['T', 'T'],
['U', 'U'],
['V', 'V'],
['W', 'W'],
['X', 'X'],
['Y', 'Y'],
['Z', 'Z'],
['a', 'a'],
['b', 'b'],
['c', 'c'],
['d', 'd'],
['e', 'e'],
['f', 'f'],
['g', 'g'],
['h', 'h'],
['i', 'i'],
['j', 'j'],
['k', 'k'],
['l', 'l'],
['m', 'm'],
['n', 'n'],
['o', 'o'],
['p', 'p'],
['q', 'q'],
['r', 'r'],
['s', 's'],
['t', 't'],
['u', 'u'],
['v', 'v'],
['w', 'w'],
['x', 'x'],
['y', 'y'],
['z', 'z'],
['0', '0'],
['1', '1'],
['2', '2'],
['3', '3'],
['4', '4'],
['5', '5'],
['6', '6'],
['7', '7'],
['8', '8'],
['9', '9'],
]);
export const toHankakuAlphaNum = (str: string): string => {
const buffer: string[] = [];
for (const char of str) {
buffer.push(zenkakuHankakuMap.get(char) || char);
}
return buffer.join('');
};
export const toHankakuAlphaNumForCharNode = (root: CharNode | undefined): CharNode | undefined => {
let head = root;
while (head) {
head.char = zenkakuHankakuMap.get(head.char!) || head.char;
head = head.next;
}
return root;
};