@allpaqa/multilingual-katakana 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs ADDED
@@ -0,0 +1,2923 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ KatakanaConverter: () => KatakanaConverter,
24
+ convertChinese: () => convertChinese,
25
+ convertCyrillic: () => convertCyrillic,
26
+ convertKorean: () => convertKorean,
27
+ escapeExcluded: () => escapeExcluded,
28
+ getEnglishWord: () => getEnglishWord,
29
+ getSlangWord: () => getSlangWord,
30
+ getSpanishWord: () => getSpanishWord,
31
+ isChinese: () => isChinese,
32
+ isCyrillic: () => isCyrillic,
33
+ isKorean: () => isKorean,
34
+ normalizeProsody: () => normalizeProsody,
35
+ phonicsToKatakana: () => phonicsToKatakana,
36
+ replaceSlangPhrases: () => replaceSlangPhrases,
37
+ replaceSpanishPhrases: () => replaceSpanishPhrases,
38
+ replaceTaiwanPhrases: () => replaceTaiwanPhrases,
39
+ resolveWord: () => resolveWord,
40
+ restoreExcluded: () => restoreExcluded,
41
+ spanishPreprocess: () => spanishPreprocess,
42
+ toKatakana: () => toKatakana
43
+ });
44
+ module.exports = __toCommonJS(index_exports);
45
+
46
+ // src/dicts/chinese_data.json
47
+ var chinese_data_default = {
48
+ taiwan_phrases: {
49
+ \u5783\u573E: "\u30EC\u30FC\u30B9\u30FC",
50
+ \u4F60\u597D: "\u30CB\u30FC\u30CF\u30AA",
51
+ \u8B1D\u8B1D: "\u30B7\u30A8\u30B7\u30A8",
52
+ \u8C22\u8C22: "\u30B7\u30A8\u30B7\u30A8",
53
+ \u518D\u898B: "\u30B6\u30A4\u30B8\u30A8\u30F3",
54
+ \u518D\u89C1: "\u30B6\u30A4\u30B8\u30A8\u30F3",
55
+ \u5B89\u5B89: "\u30A2\u30F3\u30A2\u30F3",
56
+ \u7B11\u6B7B: "\u30B7\u30A2\u30AA\u30B9\u30FC",
57
+ \u6309\u8B9A: "\u30A2\u30F3\u30B6\u30F3",
58
+ \u9EDE\u8B9A: "\u30A2\u30F3\u30B6\u30F3",
59
+ \u9EDE\u8D0A: "\u30A2\u30F3\u30B6\u30F3",
60
+ \u4E7E\u7239: "\u30AC\u30F3\u30C7\u30A3\u30A8",
61
+ \u4E7E\u5ABD: "\u30AC\u30F3\u30DE\u30FC",
62
+ \u592A\u5F37\u4E86: "\u30BF\u30A4\u30C1\u30E3\u30F3\u30E9",
63
+ \u592A\u597D\u7B11\u4E86: "\u30BF\u30A4\u30CF\u30AA\u30B7\u30A2\u30AA\u30E9",
64
+ \u8F9B\u82E6\u4E86: "\u30B7\u30F3\u30AF\u30FC\u30E9",
65
+ \u5BE6\u6CC1: "\u30B7\u30FC\u30AF\u30A2\u30F3",
66
+ \u5BE6\u6CC1\u4E3B: "\u30B7\u30FC\u30AF\u30A2\u30F3\u30B8\u30E5\u30FC",
67
+ \u52A0\u6CB9: "\u30B8\u30E3\u30FC\u30E8\u30A6",
68
+ \u592A\u68D2\u4E86: "\u30BF\u30A4\u30D0\u30F3\u30E9",
69
+ \u660E\u5929\u898B: "\u30DF\u30F3\u30C6\u30A3\u30A8\u30F3\u30B8\u30A8\u30F3",
70
+ \u660E\u5929\u89C1: "\u30DF\u30F3\u30C6\u30A3\u30A8\u30F3\u30B8\u30A8\u30F3",
71
+ \u65E9\u5B89: "\u30B6\u30AA\u30A2\u30F3",
72
+ \u665A\u5B89: "\u30EF\u30F3\u30A2\u30F3",
73
+ \u6B61\u8FCE: "\u30DB\u30EF\u30F3\u30A4\u30F3",
74
+ \u6B22\u8FCE: "\u30DB\u30EF\u30F3\u30A4\u30F3"
75
+ },
76
+ marker_pattern: "[\u8FD9\u4E3A\u4EEC\u8FC7\u5BF9\u53D1\u4F1A\u4E2A\u4E48\u8C01\u8BA9\u8BF4\u8BDD\u89C1\u8FD8\u6CA1\u4ECE\u542C\u70B9\u8D5E\u9019\u5011\u9EBC\u8AB0\u88E1\u9EDE\u6C92\u5F88\u5F97\u55CE\u5427\u5566\u5594\u5462\u8B9A]",
77
+ marker_characters: [
78
+ "\u8FD9",
79
+ "\u4E3A",
80
+ "\u4EEC",
81
+ "\u8FC7",
82
+ "\u5BF9",
83
+ "\u53D1",
84
+ "\u4F1A",
85
+ "\u4E2A",
86
+ "\u4E48",
87
+ "\u8C01",
88
+ "\u8BA9",
89
+ "\u8BF4",
90
+ "\u8BDD",
91
+ "\u89C1",
92
+ "\u8FD8",
93
+ "\u6CA1",
94
+ "\u4ECE",
95
+ "\u542C",
96
+ "\u70B9",
97
+ "\u8D5E",
98
+ "\u9019",
99
+ "\u5011",
100
+ "\u9EBC",
101
+ "\u8AB0",
102
+ "\u88E1",
103
+ "\u9EDE",
104
+ "\u6C92",
105
+ "\u5F88",
106
+ "\u5F97",
107
+ "\u55CE",
108
+ "\u5427",
109
+ "\u5566",
110
+ "\u5594",
111
+ "\u5462",
112
+ "\u8B9A"
113
+ ],
114
+ common_words: [
115
+ "\u4F60\u597D",
116
+ "\u8B1D\u8B1D",
117
+ "\u8C22\u8C22",
118
+ "\u52A0\u6CB9",
119
+ "\u8F9B\u82E6\u4E86",
120
+ "\u6B61\u8FCE",
121
+ "\u6B22\u8FCE",
122
+ "\u62DC\u62DC",
123
+ "\u665A\u5B89",
124
+ "\u65E9\u5B89",
125
+ "\u660E\u5929\u898B",
126
+ "\u660E\u5929\u89C1",
127
+ "\u592A\u68D2\u4E86",
128
+ "\u5B89\u5B89",
129
+ "\u7B11\u6B7B",
130
+ "\u5BE6\u6CC1",
131
+ "\u5B9F\u6CC1",
132
+ "\u4E7E\u7239",
133
+ "\u4E7E\u5ABD",
134
+ "\u73A9\u5F97"
135
+ ],
136
+ pinyin_table: {
137
+ a: "\u30A2",
138
+ ai: "\u30A2\u30A4",
139
+ an: "\u30A2\u30F3",
140
+ ang: "\u30A2\u30F3",
141
+ ao: "\u30A2\u30AA",
142
+ ba: "\u30D0\u30FC",
143
+ bai: "\u30D0\u30A4",
144
+ ban: "\u30D0\u30F3",
145
+ bang: "\u30D0\u30F3",
146
+ bao: "\u30D0\u30AA",
147
+ bei: "\u30D9\u30A4",
148
+ ben: "\u30D9\u30F3",
149
+ beng: "\u30DC\u30F3",
150
+ bi: "\u30D3\u30FC",
151
+ bian: "\u30D3\u30A8\u30F3",
152
+ biao: "\u30D3\u30E3\u30AA",
153
+ bie: "\u30D3\u30A8",
154
+ bin: "\u30D3\u30F3",
155
+ bing: "\u30D3\u30F3",
156
+ bo: "\u30DC\u30FC",
157
+ bu: "\u30D6\u30FC",
158
+ ca: "\u30C4\u30A1",
159
+ cai: "\u30C4\u30A1\u30A4",
160
+ can: "\u30C4\u30A1\u30F3",
161
+ cang: "\u30C4\u30A1\u30F3",
162
+ cao: "\u30C4\u30A1\u30AA",
163
+ ce: "\u30C4\u30A1",
164
+ cei: "\u30C4\u30A7\u30A4",
165
+ cen: "\u30C4\u30A7\u30F3",
166
+ ceng: "\u30C4\u30A9\u30F3",
167
+ cha: "\u30C1\u30E3\u30FC",
168
+ chai: "\u30C1\u30E3\u30A4",
169
+ chan: "\u30C1\u30E3\u30F3",
170
+ chang: "\u30C1\u30E3\u30F3",
171
+ chao: "\u30C1\u30E3\u30AA",
172
+ che: "\u30C1\u30E3",
173
+ chen: "\u30C1\u30A7\u30F3",
174
+ cheng: "\u30C1\u30E7\u30F3",
175
+ chi: "\u30C1\u30FC",
176
+ chong: "\u30C1\u30E7\u30F3",
177
+ chou: "\u30C1\u30E7\u30A6",
178
+ chu: "\u30C1\u30E5\u30FC",
179
+ chua: "\u30C1\u30E5\u30A2",
180
+ chuai: "\u30C1\u30E5\u30A2\u30A4",
181
+ chuan: "\u30C1\u30E5\u30A2\u30F3",
182
+ chuang: "\u30C1\u30E5\u30A2\u30F3",
183
+ chui: "\u30C1\u30E5\u30A4",
184
+ chun: "\u30C1\u30E5\u30F3",
185
+ chuo: "\u30C1\u30E5\u30AA",
186
+ ci: "\u30C4\u30FC",
187
+ cong: "\u30C4\u30A9\u30F3",
188
+ cou: "\u30C4\u30A9\u30A6",
189
+ cu: "\u30C4\u30FC",
190
+ cuan: "\u30C4\u30A2\u30F3",
191
+ cui: "\u30C4\u30A4",
192
+ cun: "\u30C4\u30F3",
193
+ cuo: "\u30C4\u30AA",
194
+ da: "\u30C0\u30FC",
195
+ dai: "\u30C0\u30A4",
196
+ dan: "\u30C0\u30F3",
197
+ dang: "\u30C0\u30F3",
198
+ dao: "\u30C0\u30AA",
199
+ de: "\u30C9\u30A5",
200
+ dei: "\u30C7\u30A4",
201
+ den: "\u30C7\u30F3",
202
+ deng: "\u30C9\u30F3",
203
+ di: "\u30C7\u30A3\u30FC",
204
+ dian: "\u30C7\u30A3\u30A8\u30F3",
205
+ diao: "\u30C7\u30A3\u30A2\u30AA",
206
+ die: "\u30C7\u30A3\u30A8",
207
+ ding: "\u30C7\u30A3\u30F3",
208
+ diu: "\u30C7\u30A3\u30A6",
209
+ dong: "\u30C9\u30F3",
210
+ dou: "\u30C9\u30A6",
211
+ du: "\u30C9\u30A5\u30FC",
212
+ duan: "\u30C9\u30A5\u30A2\u30F3",
213
+ dui: "\u30C9\u30A5\u30A4",
214
+ dun: "\u30C9\u30A5\u30F3",
215
+ duo: "\u30C9\u30A5\u30AA",
216
+ e: "\u30A2\u30FC",
217
+ ei: "\u30A8\u30A4",
218
+ en: "\u30A8\u30F3",
219
+ eng: "\u30A8\u30F3",
220
+ er: "\u30A2\u30EB",
221
+ fa: "\u30D5\u30A1\u30FC",
222
+ fan: "\u30D5\u30A1\u30F3",
223
+ fang: "\u30D5\u30A1\u30F3",
224
+ fei: "\u30D5\u30A7\u30A4",
225
+ fen: "\u30D5\u30A7\u30F3",
226
+ feng: "\u30D5\u30A9\u30F3",
227
+ fo: "\u30D5\u30A9\u30FC",
228
+ fou: "\u30D5\u30A9\u30A6",
229
+ fu: "\u30D5\u30FC",
230
+ ga: "\u30AC\u30FC",
231
+ gai: "\u30AC\u30A4",
232
+ gan: "\u30AC\u30F3",
233
+ gang: "\u30AC\u30F3",
234
+ gao: "\u30AC\u30AA",
235
+ ge: "\u30AC\u30FC",
236
+ gei: "\u30B2\u30A4",
237
+ gen: "\u30B2\u30F3",
238
+ geng: "\u30B4\u30F3",
239
+ gong: "\u30B4\u30F3",
240
+ gou: "\u30B4\u30A6",
241
+ gu: "\u30B0\u30FC",
242
+ gua: "\u30B0\u30A2",
243
+ guai: "\u30B0\u30A2\u30A4",
244
+ guan: "\u30B0\u30A2\u30F3",
245
+ guang: "\u30B0\u30A2\u30F3",
246
+ gui: "\u30B0\u30A4",
247
+ gun: "\u30B0\u30F3",
248
+ guo: "\u30B0\u30AA",
249
+ ha: "\u30CF\u30FC",
250
+ hai: "\u30CF\u30A4",
251
+ han: "\u30CF\u30F3",
252
+ hang: "\u30CF\u30F3",
253
+ hao: "\u30CF\u30AA",
254
+ he: "\u30CF\u30FC",
255
+ hei: "\u30D8\u30A4",
256
+ hen: "\u30D8\u30F3",
257
+ heng: "\u30DB\u30F3",
258
+ hong: "\u30DB\u30F3",
259
+ hou: "\u30DB\u30A6",
260
+ hu: "\u30D5\u30FC",
261
+ hua: "\u30DB\u30A2",
262
+ huai: "\u30DB\u30A2\u30A4",
263
+ huan: "\u30DB\u30A2\u30F3",
264
+ huang: "\u30DB\u30A2\u30F3",
265
+ hui: "\u30DB\u30A4",
266
+ hun: "\u30D5\u30F3",
267
+ huo: "\u30DB\u30AA",
268
+ ji: "\u30B8\u30FC",
269
+ jia: "\u30B8\u30A2",
270
+ jian: "\u30B8\u30A8\u30F3",
271
+ jiang: "\u30B8\u30A2\u30F3",
272
+ jiao: "\u30B8\u30A2\u30AA",
273
+ jie: "\u30B8\u30A8",
274
+ jin: "\u30B8\u30F3",
275
+ jing: "\u30B8\u30F3",
276
+ jiong: "\u30B8\u30AA\u30F3",
277
+ jiu: "\u30B8\u30A6",
278
+ ju: "\u30B8\u30E5\u30FC",
279
+ juan: "\u30B8\u30E5\u30A2\u30F3",
280
+ jue: "\u30B8\u30E5\u30A8",
281
+ jun: "\u30B8\u30E5\u30F3",
282
+ ka: "\u30AB\u30FC",
283
+ kai: "\u30AB\u30A4",
284
+ kan: "\u30AB\u30F3",
285
+ kang: "\u30AB\u30F3",
286
+ kao: "\u30AB\u30AA",
287
+ ke: "\u30AB\u30FC",
288
+ kei: "\u30B1\u30A4",
289
+ ken: "\u30B1\u30F3",
290
+ keng: "\u30B3\u30F3",
291
+ kong: "\u30B3\u30F3",
292
+ kou: "\u30B3\u30A6",
293
+ ku: "\u30AF\u30FC",
294
+ kua: "\u30AF\u30A2",
295
+ kuai: "\u30AF\u30A2\u30A4",
296
+ kuan: "\u30AF\u30A2\u30F3",
297
+ kuang: "\u30AF\u30A2\u30F3",
298
+ kui: "\u30AF\u30A4",
299
+ kun: "\u30AF\u30F3",
300
+ kuo: "\u30AF\u30AA",
301
+ la: "\u30E9\u30FC",
302
+ lai: "\u30E9\u30A4",
303
+ lan: "\u30E9\u30F3",
304
+ lang: "\u30E9\u30F3",
305
+ lao: "\u30E9\u30AA",
306
+ le: "\u30E9",
307
+ lei: "\u30EC\u30A4",
308
+ leng: "\u30ED\u30F3",
309
+ li: "\u30EA\u30FC",
310
+ lia: "\u30EA\u30A2",
311
+ lian: "\u30EA\u30A8\u30F3",
312
+ liang: "\u30EA\u30A2\u30F3",
313
+ liao: "\u30EA\u30A2\u30AA",
314
+ lie: "\u30EA\u30A8",
315
+ lin: "\u30EA\u30F3",
316
+ ling: "\u30EA\u30F3",
317
+ liu: "\u30EA\u30A6",
318
+ lo: "\u30ED\u30FC",
319
+ long: "\u30ED\u30F3",
320
+ lou: "\u30ED\u30A6",
321
+ lu: "\u30EB\u30FC",
322
+ luan: "\u30EB\u30A2\u30F3",
323
+ lun: "\u30EB\u30F3",
324
+ luo: "\u30EB\u30AA",
325
+ lv: "\u30EA\u30E5\u30FC",
326
+ lve: "\u30EA\u30E5\u30A8",
327
+ ma: "\u30DE\u30FC",
328
+ mai: "\u30DE\u30A4",
329
+ man: "\u30DE\u30F3",
330
+ mang: "\u30DE\u30F3",
331
+ mao: "\u30DE\u30AA",
332
+ me: "\u30E2",
333
+ mei: "\u30E1\u30A4",
334
+ men: "\u30E1\u30F3",
335
+ meng: "\u30E2\u30F3",
336
+ mi: "\u30DF\u30FC",
337
+ mian: "\u30DF\u30A8\u30F3",
338
+ miao: "\u30DF\u30A2\u30AA",
339
+ mie: "\u30DF\u30A8",
340
+ min: "\u30DF\u30F3",
341
+ ming: "\u30DF\u30F3",
342
+ miu: "\u30DF\u30A6",
343
+ mo: "\u30E2\u30FC",
344
+ mou: "\u30E2\u30A6",
345
+ mu: "\u30E0\u30FC",
346
+ na: "\u30CA\u30FC",
347
+ nai: "\u30CA\u30A4",
348
+ nan: "\u30CA\u30F3",
349
+ nang: "\u30CA\u30F3",
350
+ nao: "\u30CA\u30AA",
351
+ ne: "\u30CD",
352
+ nei: "\u30CD\u30A4",
353
+ nen: "\u30CD\u30F3",
354
+ neng: "\u30CE\u30F3",
355
+ ni: "\u30CB\u30FC",
356
+ nian: "\u30CB\u30A8\u30F3",
357
+ niang: "\u30CB\u30A2\u30F3",
358
+ niao: "\u30CB\u30A2\u30AA",
359
+ nie: "\u30CB\u30A8",
360
+ nin: "\u30CB\u30F3",
361
+ ning: "\u30CB\u30F3",
362
+ niu: "\u30CB\u30A6",
363
+ nong: "\u30CE\u30F3",
364
+ nou: "\u30CE\u30A6",
365
+ nu: "\u30CC\u30FC",
366
+ nuan: "\u30CC\u30A2\u30F3",
367
+ nuo: "\u30CC\u30AA",
368
+ nv: "\u30CB\u30E5\u30FC",
369
+ nve: "\u30CB\u30E5\u30A8",
370
+ o: "\u30AA\u30FC",
371
+ ou: "\u30AA\u30A6",
372
+ pa: "\u30D1\u30FC",
373
+ pai: "\u30D1\u30A4",
374
+ pan: "\u30D1\u30F3",
375
+ pang: "\u30D1\u30F3",
376
+ pao: "\u30D1\u30AA",
377
+ pei: "\u30DA\u30A4",
378
+ pen: "\u30DA\u30F3",
379
+ peng: "\u30DD\u30F3",
380
+ pi: "\u30D4\u30FC",
381
+ pian: "\u30D4\u30A8\u30F3",
382
+ piao: "\u30D4\u30A2\u30AA",
383
+ pie: "\u30D4\u30A8",
384
+ pin: "\u30D4\u30F3",
385
+ ping: "\u30D4\u30F3",
386
+ po: "\u30DD\u30FC",
387
+ pou: "\u30DD\u30A6",
388
+ pu: "\u30D7\u30FC",
389
+ qi: "\u30C1\u30FC",
390
+ qia: "\u30C1\u30A2",
391
+ qian: "\u30C1\u30A8\u30F3",
392
+ qiang: "\u30C1\u30A2\u30F3",
393
+ qiao: "\u30C1\u30A2\u30AA",
394
+ qie: "\u30C1\u30A8",
395
+ qin: "\u30C1\u30F3",
396
+ qing: "\u30C1\u30F3",
397
+ qiong: "\u30C1\u30AA\u30F3",
398
+ qiu: "\u30C1\u30A6",
399
+ qu: "\u30C1\u30E5\u30FC",
400
+ quan: "\u30C1\u30E5\u30A2\u30F3",
401
+ que: "\u30C1\u30E5\u30A8",
402
+ qun: "\u30C1\u30E5\u30F3",
403
+ ran: "\u30E9\u30F3",
404
+ rang: "\u30E9\u30F3",
405
+ rao: "\u30E9\u30AA",
406
+ re: "\u30E9\u30FC",
407
+ ren: "\u30EC\u30F3",
408
+ reng: "\u30ED\u30F3",
409
+ ri: "\u30EA\u30FC",
410
+ rong: "\u30ED\u30F3",
411
+ rou: "\u30ED\u30A6",
412
+ ru: "\u30EB\u30FC",
413
+ rua: "\u30EB\u30A2",
414
+ ruan: "\u30EB\u30A2\u30F3",
415
+ rui: "\u30EB\u30A4",
416
+ run: "\u30EB\u30F3",
417
+ ruo: "\u30EB\u30AA",
418
+ sa: "\u30B5\u30FC",
419
+ sai: "\u30B5\u30A4",
420
+ san: "\u30B5\u30F3",
421
+ sang: "\u30B5\u30F3",
422
+ sao: "\u30B5\u30AA",
423
+ se: "\u30B9\u30FC",
424
+ sen: "\u30BB\u30F3",
425
+ seng: "\u30BD\u30F3",
426
+ sha: "\u30B7\u30E3\u30FC",
427
+ shai: "\u30B7\u30E3\u30A4",
428
+ shan: "\u30B7\u30E3\u30F3",
429
+ shang: "\u30B7\u30E3\u30F3",
430
+ shao: "\u30B7\u30E3\u30AA",
431
+ she: "\u30B7\u30E3\u30FC",
432
+ shei: "\u30B7\u30A7\u30A4",
433
+ shen: "\u30B7\u30A7\u30F3",
434
+ sheng: "\u30B7\u30E7\u30F3",
435
+ shi: "\u30B7\u30FC",
436
+ shou: "\u30B7\u30E7\u30A6",
437
+ shu: "\u30B7\u30E5\u30FC",
438
+ shua: "\u30B7\u30E5\u30A2",
439
+ shuai: "\u30B7\u30E5\u30A2\u30A4",
440
+ shuan: "\u30B7\u30E5\u30A2\u30F3",
441
+ shuang: "\u30B7\u30E5\u30A2\u30F3",
442
+ shui: "\u30B7\u30E5\u30A4",
443
+ shun: "\u30B7\u30E5\u30F3",
444
+ shuo: "\u30B7\u30E5\u30AA",
445
+ si: "\u30B9\u30FC",
446
+ song: "\u30BD\u30F3",
447
+ sou: "\u30BD\u30A6",
448
+ su: "\u30B9\u30FC",
449
+ suan: "\u30B9\u30A2\u30F3",
450
+ sui: "\u30B9\u30A4",
451
+ sun: "\u30B9\u30F3",
452
+ suo: "\u30B9\u30AA",
453
+ ta: "\u30BF\u30FC",
454
+ tai: "\u30BF\u30A4",
455
+ tan: "\u30BF\u30F3",
456
+ tang: "\u30BF\u30F3",
457
+ tao: "\u30BF\u30AA",
458
+ te: "\u30C8\u30A5",
459
+ tei: "\u30C6\u30A4",
460
+ teng: "\u30C8\u30F3",
461
+ ti: "\u30C6\u30A3\u30FC",
462
+ tian: "\u30C6\u30A3\u30A8\u30F3",
463
+ tiao: "\u30C6\u30A3\u30A2\u30AA",
464
+ tie: "\u30C6\u30A3\u30A8",
465
+ ting: "\u30C6\u30A3\u30F3",
466
+ tong: "\u30C8\u30F3",
467
+ tou: "\u30C8\u30A6",
468
+ tu: "\u30C8\u30A5\u30FC",
469
+ tuan: "\u30C8\u30A5\u30A2\u30F3",
470
+ tui: "\u30C8\u30A5\u30A4",
471
+ tun: "\u30C8\u30A5\u30F3",
472
+ tuo: "\u30C8\u30A5\u30AA",
473
+ wa: "\u30EF\u30FC",
474
+ wai: "\u30EF\u30A4",
475
+ wan: "\u30EF\u30F3",
476
+ wang: "\u30EF\u30F3",
477
+ wei: "\u30A6\u30A7\u30A4",
478
+ wen: "\u30A6\u30A7\u30F3",
479
+ weng: "\u30A6\u30A9\u30F3",
480
+ wo: "\u30A6\u30A9",
481
+ wu: "\u30A6\u30FC",
482
+ xi: "\u30B7\u30FC",
483
+ xia: "\u30B7\u30A2",
484
+ xian: "\u30B7\u30A8\u30F3",
485
+ xiang: "\u30B7\u30A2\u30F3",
486
+ xiao: "\u30B7\u30A2\u30AA",
487
+ xie: "\u30B7\u30A8",
488
+ xin: "\u30B7\u30F3",
489
+ xing: "\u30B7\u30F3",
490
+ xiong: "\u30B7\u30AA\u30F3",
491
+ xiu: "\u30B7\u30A6",
492
+ xu: "\u30B7\u30E5\u30FC",
493
+ xuan: "\u30B7\u30E5\u30A2\u30F3",
494
+ xue: "\u30B7\u30E5\u30A8",
495
+ xun: "\u30B7\u30E5\u30F3",
496
+ ya: "\u30E4\u30FC",
497
+ yan: "\u30A4\u30A8\u30F3",
498
+ yang: "\u30E4\u30F3",
499
+ yao: "\u30E4\u30AA",
500
+ ye: "\u30A4\u30A8",
501
+ yi: "\u30A4\u30FC",
502
+ yin: "\u30A4\u30F3",
503
+ ying: "\u30A4\u30F3",
504
+ yo: "\u30E8\u30FC",
505
+ yong: "\u30E8\u30F3",
506
+ you: "\u30E8\u30A6",
507
+ yu: "\u30E6\u30FC",
508
+ yuan: "\u30E6\u30A2\u30F3",
509
+ yue: "\u30E6\u30A8",
510
+ yun: "\u30E6\u30F3",
511
+ za: "\u30B6\u30FC",
512
+ zai: "\u30B6\u30A4",
513
+ zan: "\u30B6\u30F3",
514
+ zang: "\u30B6\u30F3",
515
+ zao: "\u30B6\u30AA",
516
+ ze: "\u30B6\u30FC",
517
+ zei: "\u30BC\u30A4",
518
+ zen: "\u30BC\u30F3",
519
+ zeng: "\u30BE\u30F3",
520
+ zha: "\u30B8\u30E3\u30FC",
521
+ zhai: "\u30B8\u30E3\u30A4",
522
+ zhan: "\u30B8\u30E3\u30F3",
523
+ zhang: "\u30B8\u30E3\u30F3",
524
+ zhao: "\u30B8\u30E3\u30AA",
525
+ zhe: "\u30B8\u30E3\u30FC",
526
+ zhei: "\u30B8\u30A7\u30A4",
527
+ zhen: "\u30B8\u30A7\u30F3",
528
+ zheng: "\u30B8\u30E7\u30F3",
529
+ zhi: "\u30B8\u30FC",
530
+ zhong: "\u30B8\u30E7\u30F3",
531
+ zhou: "\u30B8\u30E7\u30A6",
532
+ zhu: "\u30B8\u30E5\u30FC",
533
+ zhua: "\u30B8\u30E5\u30A2",
534
+ zhuai: "\u30B8\u30E5\u30A2\u30A4",
535
+ zhuan: "\u30B8\u30E5\u30A2\u30F3",
536
+ zhuang: "\u30B8\u30E5\u30A2\u30F3",
537
+ zhui: "\u30B8\u30E5\u30A4",
538
+ zhun: "\u30B8\u30E5\u30F3",
539
+ zhuo: "\u30B8\u30E5\u30AA",
540
+ zi: "\u30BA\u30FC",
541
+ zong: "\u30BE\u30F3",
542
+ zou: "\u30BE\u30A6",
543
+ zu: "\u30BA\u30FC",
544
+ zuan: "\u30BA\u30A2\u30F3",
545
+ zui: "\u30BA\u30A4",
546
+ zun: "\u30BA\u30F3",
547
+ zuo: "\u30BA\u30AA"
548
+ },
549
+ hanzi_to_katakana: {
550
+ \u7684: "\u30C9\u30A5",
551
+ \u4E00: "\u30A4\u30FC",
552
+ \u662F: "\u30B7\u30FC",
553
+ \u5728: "\u30B6\u30A4",
554
+ \u4E0D: "\u30D6\u30FC",
555
+ \u4E86: "\u30E9",
556
+ \u6709: "\u30E8\u30A6",
557
+ \u548C: "\u30CF\u30FC",
558
+ \u4EBA: "\u30EC\u30F3",
559
+ \u8FD9: "\u30B8\u30E3\u30FC",
560
+ \u4E2D: "\u30B8\u30E7\u30F3",
561
+ \u5927: "\u30C0\u30FC",
562
+ \u4E3A: "\u30A6\u30A7\u30A4",
563
+ \u4E0A: "\u30B7\u30E3\u30F3",
564
+ \u4E2A: "\u30AC\u30FC",
565
+ \u56FD: "\u30B0\u30AA",
566
+ \u6211: "\u30A6\u30A9",
567
+ \u4EE5: "\u30A4\u30FC",
568
+ \u8981: "\u30E4\u30AA",
569
+ \u4ED6: "\u30BF\u30FC",
570
+ \u65F6: "\u30B7\u30FC",
571
+ \u6765: "\u30E9\u30A4",
572
+ \u7528: "\u30E8\u30F3",
573
+ \u4EEC: "\u30E1\u30F3",
574
+ \u751F: "\u30B7\u30E7\u30F3",
575
+ \u5230: "\u30C0\u30AA",
576
+ \u4F5C: "\u30BA\u30AA",
577
+ \u5730: "\u30C7\u30A3\u30FC",
578
+ \u4E8E: "\u30E6\u30FC",
579
+ \u51FA: "\u30C1\u30E5\u30FC",
580
+ \u5C31: "\u30B8\u30A6",
581
+ \u5206: "\u30D5\u30A7\u30F3",
582
+ \u5BF9: "\u30C9\u30A5\u30A4",
583
+ \u6210: "\u30C1\u30E7\u30F3",
584
+ \u4F1A: "\u30DB\u30A4",
585
+ \u53EF: "\u30AB\u30FC",
586
+ \u4E3B: "\u30B8\u30E5\u30FC",
587
+ \u53D1: "\u30D5\u30A1\u30FC",
588
+ \u5E74: "\u30CB\u30A8\u30F3",
589
+ \u52A8: "\u30C9\u30F3",
590
+ \u540C: "\u30C8\u30F3",
591
+ \u5DE5: "\u30B4\u30F3",
592
+ \u4E5F: "\u30A4\u30A8",
593
+ \u80FD: "\u30CE\u30F3",
594
+ \u4E0B: "\u30B7\u30A2",
595
+ \u8FC7: "\u30B0\u30AA",
596
+ \u5B50: "\u30BA\u30FC",
597
+ \u8BF4: "\u30B7\u30E5\u30AA",
598
+ \u4EA7: "\u30C1\u30E3\u30F3",
599
+ \u79CD: "\u30B8\u30E7\u30F3",
600
+ \u9762: "\u30DF\u30A8\u30F3",
601
+ \u800C: "\u30A2\u30EB",
602
+ \u65B9: "\u30D5\u30A1\u30F3",
603
+ \u540E: "\u30DB\u30A6",
604
+ \u591A: "\u30C9\u30A5\u30AA",
605
+ \u5B9A: "\u30C7\u30A3\u30F3",
606
+ \u884C: "\u30B7\u30F3",
607
+ \u5B66: "\u30B7\u30E5\u30A8",
608
+ \u6CD5: "\u30D5\u30A1\u30FC",
609
+ \u6240: "\u30B9\u30AA",
610
+ \u6C11: "\u30DF\u30F3",
611
+ \u5F97: "\u30C9\u30A5",
612
+ \u7ECF: "\u30B8\u30F3",
613
+ \u5341: "\u30B7\u30FC",
614
+ \u4E09: "\u30B5\u30F3",
615
+ \u4E4B: "\u30B8\u30FC",
616
+ \u8FDB: "\u30B8\u30F3",
617
+ \u7740: "\u30B8\u30E3\u30FC",
618
+ \u7B49: "\u30C9\u30F3",
619
+ \u90E8: "\u30D6\u30FC",
620
+ \u5EA6: "\u30C9\u30A5\u30FC",
621
+ \u5BB6: "\u30B8\u30A2",
622
+ \u7535: "\u30C7\u30A3\u30A8\u30F3",
623
+ \u529B: "\u30EA\u30FC",
624
+ \u91CC: "\u30EA\u30FC",
625
+ \u5982: "\u30EB\u30FC",
626
+ \u6C34: "\u30B7\u30E5\u30A4",
627
+ \u5316: "\u30DB\u30A2",
628
+ \u9AD8: "\u30AC\u30AA",
629
+ \u81EA: "\u30BA\u30FC",
630
+ \u4E8C: "\u30A2\u30EB",
631
+ \u7406: "\u30EA\u30FC",
632
+ \u8D77: "\u30C1\u30FC",
633
+ \u5C0F: "\u30B7\u30A2\u30AA",
634
+ \u7269: "\u30A6\u30FC",
635
+ \u73B0: "\u30B7\u30A8\u30F3",
636
+ \u5B9E: "\u30B7\u30FC",
637
+ \u52A0: "\u30B8\u30A2",
638
+ \u91CF: "\u30EA\u30A2\u30F3",
639
+ \u90FD: "\u30C9\u30A6",
640
+ \u4E24: "\u30EA\u30A2\u30F3",
641
+ \u4F53: "\u30C6\u30A3\u30FC",
642
+ \u5236: "\u30B8\u30FC",
643
+ \u673A: "\u30B8\u30FC",
644
+ \u5F53: "\u30C0\u30F3",
645
+ \u4F7F: "\u30B7\u30FC",
646
+ \u70B9: "\u30C7\u30A3\u30A8\u30F3",
647
+ \u4ECE: "\u30C4\u30A9\u30F3",
648
+ \u4E1A: "\u30A4\u30A8",
649
+ \u672C: "\u30D9\u30F3",
650
+ \u53BB: "\u30C1\u30E5\u30FC",
651
+ \u628A: "\u30D0\u30FC",
652
+ \u6027: "\u30B7\u30F3",
653
+ \u597D: "\u30CF\u30AA",
654
+ \u5E94: "\u30A4\u30F3",
655
+ \u5F00: "\u30AB\u30A4",
656
+ \u5B83: "\u30BF\u30FC",
657
+ \u5408: "\u30CF\u30FC",
658
+ \u8FD8: "\u30CF\u30A4",
659
+ \u56E0: "\u30A4\u30F3",
660
+ \u7531: "\u30E8\u30A6",
661
+ \u5176: "\u30C1\u30FC",
662
+ \u4E9B: "\u30B7\u30A8",
663
+ \u7136: "\u30E9\u30F3",
664
+ \u524D: "\u30C1\u30A8\u30F3",
665
+ \u5916: "\u30EF\u30A4",
666
+ \u5929: "\u30C6\u30A3\u30A8\u30F3",
667
+ \u653F: "\u30B8\u30E7\u30F3",
668
+ \u56DB: "\u30B9\u30FC",
669
+ \u65E5: "\u30EA\u30FC",
670
+ \u90A3: "\u30CA\u30FC",
671
+ \u793E: "\u30B7\u30E3\u30FC",
672
+ \u4E49: "\u30A4\u30FC",
673
+ \u4E8B: "\u30B7\u30FC",
674
+ \u5E73: "\u30D4\u30F3",
675
+ \u5F62: "\u30B7\u30F3",
676
+ \u76F8: "\u30B7\u30A2\u30F3",
677
+ \u5168: "\u30C1\u30E5\u30A2\u30F3",
678
+ \u8868: "\u30D3\u30E3\u30AA",
679
+ \u95F4: "\u30B8\u30A8\u30F3",
680
+ \u6837: "\u30E4\u30F3",
681
+ \u60F3: "\u30B7\u30A2\u30F3",
682
+ \u5411: "\u30B7\u30A2\u30F3",
683
+ \u9053: "\u30C0\u30AA",
684
+ \u547D: "\u30DF\u30F3",
685
+ \u5173: "\u30B0\u30A2\u30F3",
686
+ \u770B: "\u30AB\u30F3",
687
+ \u89C1: "\u30B8\u30A8\u30F3",
688
+ \u7EDF: "\u30C8\u30F3",
689
+ \u95EE: "\u30A6\u30A7\u30F3",
690
+ \u7B2C: "\u30C7\u30A3\u30FC",
691
+ \u4E94: "\u30A6\u30FC",
692
+ \u77E5: "\u30B8\u30FC",
693
+ \u4E48: "\u30E2",
694
+ \u63D0: "\u30C6\u30A3\u30FC",
695
+ \u53CA: "\u30B8\u30FC",
696
+ \u89E3: "\u30B8\u30A8",
697
+ \u540D: "\u30DF\u30F3",
698
+ \u611F: "\u30AC\u30F3",
699
+ \u6B21: "\u30C4\u30FC",
700
+ \u754C: "\u30B8\u30A8",
701
+ \u771F: "\u30B8\u30A7\u30F3",
702
+ \u5DF2: "\u30A4\u30FC",
703
+ \u62A5: "\u30D0\u30AA",
704
+ \u6D77: "\u30CF\u30A4",
705
+ \u91CD: "\u30B8\u30E7\u30F3",
706
+ \u95E8: "\u30E1\u30F3",
707
+ \u5FC3: "\u30B7\u30F3",
708
+ \u6218: "\u30B8\u30E3\u30F3",
709
+ \u6B63: "\u30B8\u30E7\u30F3",
710
+ \u5404: "\u30AC\u30FC",
711
+ \u6587: "\u30A6\u30A7\u30F3",
712
+ \u610F: "\u30A4\u30FC",
713
+ \u53CD: "\u30D5\u30A1\u30F3",
714
+ \u4FDD: "\u30D0\u30AA",
715
+ \u5148: "\u30B7\u30A8\u30F3",
716
+ \u767D: "\u30D0\u30A4",
717
+ \u5EFA: "\u30B8\u30A8\u30F3",
718
+ \u516C: "\u30B4\u30F3",
719
+ \u6C42: "\u30C1\u30A6",
720
+ \u8001: "\u30E9\u30AA",
721
+ \u7A7A: "\u30B3\u30F3",
722
+ \u76F4: "\u30B8\u30FC",
723
+ \u5C55: "\u30B8\u30E3\u30F3",
724
+ \u53D7: "\u30B7\u30E7\u30A6",
725
+ \u60C5: "\u30C1\u30F3",
726
+ \u679C: "\u30B0\u30AA",
727
+ \u767E: "\u30D0\u30A4",
728
+ \u7279: "\u30C8\u30A5",
729
+ \u4EE3: "\u30C0\u30A4",
730
+ \u9898: "\u30C6\u30A3\u30FC",
731
+ \u9020: "\u30B6\u30AA",
732
+ \u8DEF: "\u30EB\u30FC",
733
+ \u5165: "\u30EB\u30FC",
734
+ \u539F: "\u30E6\u30A2\u30F3",
735
+ \u6253: "\u30C0\u30FC",
736
+ \u897F: "\u30B7\u30FC",
737
+ \u603B: "\u30BE\u30F3",
738
+ \u8D70: "\u30BE\u30A6",
739
+ \u6C14: "\u30C1\u30FC",
740
+ \u957F: "\u30C1\u30E3\u30F3",
741
+ \u624B: "\u30B7\u30E7\u30A6",
742
+ \u6D3B: "\u30DB\u30AA",
743
+ \u66F4: "\u30B4\u30F3",
744
+ \u6708: "\u30E6\u30A8",
745
+ \u5934: "\u30C8\u30A6",
746
+ \u7BA1: "\u30B0\u30A2\u30F3",
747
+ \u7ED9: "\u30B2\u30A4",
748
+ \u5E76: "\u30D3\u30F3",
749
+ \u6761: "\u30C6\u30A3\u30A2\u30AA",
750
+ \u7F8E: "\u30E1\u30A4",
751
+ \u91D1: "\u30B8\u30F3",
752
+ \u8EAB: "\u30B7\u30A7\u30F3",
753
+ \u5149: "\u30B0\u30A2\u30F3",
754
+ \u4F60: "\u30CB\u30FC",
755
+ \u8B1D: "\u30B7\u30A8",
756
+ \u8C22: "\u30B7\u30A8",
757
+ \u6CB9: "\u30E8\u30A6",
758
+ \u8F9B: "\u30B7\u30F3",
759
+ \u82E6: "\u30AF\u30FC",
760
+ \u6B61: "\u30DB\u30A2\u30F3",
761
+ \u8FCE: "\u30A4\u30F3",
762
+ \u6B22: "\u30DB\u30A2\u30F3",
763
+ \u62DC: "\u30D0\u30A4",
764
+ \u665A: "\u30EF\u30F3",
765
+ \u5B89: "\u30A2\u30F3",
766
+ \u65E9: "\u30B6\u30AA",
767
+ \u660E: "\u30DF\u30F3",
768
+ \u898B: "\u30B8\u30A8\u30F3",
769
+ \u592A: "\u30BF\u30A4",
770
+ \u68D2: "\u30D0\u30F3",
771
+ \u7B11: "\u30B7\u30A2\u30AA",
772
+ \u6B7B: "\u30B9\u30FC",
773
+ \u5BE6: "\u30B7\u30FC",
774
+ \u6CC1: "\u30AF\u30A2\u30F3",
775
+ \u5B9F: "\u30B7\u30FC",
776
+ \u4E7E: "\u30C1\u30A8\u30F3",
777
+ \u7239: "\u30C7\u30A3\u30A8",
778
+ \u5ABD: "\u30DE\u30FC",
779
+ \u73A9: "\u30EF\u30F3",
780
+ \u5F88: "\u30D8\u30F3",
781
+ \u5F37: "\u30C1\u30A2\u30F3",
782
+ \u9019: "\u30B8\u30E3\u30FC",
783
+ \u500B: "\u30AC\u30FC",
784
+ \u5783: "\u30E9\u30FC",
785
+ \u573E: "\u30B8\u30FC",
786
+ \u6876: "\u30C8\u30F3",
787
+ \u53B2: "\u30EA\u30FC",
788
+ \u5BB3: "\u30CF\u30A4",
789
+ \u5427: "\u30D0\u30FC",
790
+ \u8ACB: "\u30C1\u30F3",
791
+ \u6309: "\u30A2\u30F3",
792
+ \u8B9A: "\u30B6\u30F3",
793
+ \u4ECA: "\u30B8\u30F3",
794
+ \u914D: "\u30DA\u30A4",
795
+ \u4FE1: "\u30B7\u30F3",
796
+ \u521D: "\u30C1\u30E5\u30FC",
797
+ \u6B53: "\u30DB\u30A2\u30F3",
798
+ \u795E: "\u30B7\u30A7\u30F3",
799
+ \u56DE: "\u30DB\u30A4",
800
+ \u958B: "\u30AB\u30A4",
801
+ \u59CB: "\u30B7\u30FC",
802
+ \u6700: "\u30BA\u30A4",
803
+ \u512A: "\u30E8\u30A6",
804
+ \u52DD: "\u30B7\u30E7\u30F3"
805
+ }
806
+ };
807
+
808
+ // src/languages/chinese.ts
809
+ var CHINESE_MARKER_REGEX = new RegExp(chinese_data_default.marker_pattern);
810
+ function isChinese(text) {
811
+ if (/[\u3040-\u309F\u30A0-\u30FF]/.test(text)) {
812
+ return false;
813
+ }
814
+ if (!/[\u4E00-\u9FFF]/.test(text)) {
815
+ return false;
816
+ }
817
+ if (CHINESE_MARKER_REGEX.test(text)) {
818
+ return true;
819
+ }
820
+ for (const word of chinese_data_default.common_words) {
821
+ if (text.includes(word)) {
822
+ return true;
823
+ }
824
+ }
825
+ return false;
826
+ }
827
+ function replaceTaiwanPhrases(text) {
828
+ let result = text;
829
+ for (const [phrase, katakana] of Object.entries(chinese_data_default.taiwan_phrases)) {
830
+ if (result.includes(phrase)) {
831
+ result = result.split(phrase).join(katakana);
832
+ }
833
+ }
834
+ return result;
835
+ }
836
+ function convertChinese(text) {
837
+ let result = replaceTaiwanPhrases(text);
838
+ if (isChinese(text)) {
839
+ result = result.replace(/[\u4E00-\u9FFF]+/g, (hanziMatch) => {
840
+ let out = "";
841
+ for (const char of hanziMatch) {
842
+ out += chinese_data_default.hanzi_to_katakana[char] || char;
843
+ }
844
+ return out;
845
+ });
846
+ result = result.replace(/,/g, "\u3001").replace(/。/g, "\u3002").replace(/!/g, "\uFF01").replace(/?/g, "\uFF1F");
847
+ result = result.replace(/\s+([、。!?!?,.])/g, "$1").replace(/([、。!?!?,.])\s+/g, "$1");
848
+ result = result.replace(/[\s\u3000]+/g, " ").trim();
849
+ }
850
+ return result;
851
+ }
852
+
853
+ // src/dicts/cyrillic.json
854
+ var cyrillic_default = {
855
+ phrases: {
856
+ \u043F\u0440\u0438\u0432\u0435\u0442: "\u30D7\u30EA\u30F4\u30A3\u30A8\u30C8",
857
+ \u0437\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435: "\u30BA\u30C9\u30E9\u30FC\u30B9\u30C8\u30F4\u30A3\u30C1\u30A7",
858
+ \u0441\u043F\u0430\u0441\u0438\u0431\u043E: "\u30B9\u30D1\u30B9\u30A3\u30FC\u30D0",
859
+ \u043F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430: "\u30D1\u30B8\u30E3\u30FC\u30EB\u30B9\u30BF",
860
+ \u0445\u043E\u0440\u043E\u0448\u043E: "\u30CF\u30E9\u30B7\u30E7\u30FC",
861
+ \u0434\u0430: "\u30C0",
862
+ \u043D\u0435\u0442: "\u30CB\u30A7\u30C3\u30C8",
863
+ \u043F\u043E\u043A\u0430: "\u30D1\u30AB\u30FC",
864
+ \u0434\u043E\u0441\u0432\u0438\u0434\u0430\u043D\u0438\u044F: "\u30C0\u30B9\u30F4\u30A3\u30C0\u30FC\u30CB\u30E3"
865
+ },
866
+ letters: {
867
+ \u0430: "\u30A2",
868
+ \u0431: "\u30D6",
869
+ \u0432: "\u30F4",
870
+ \u0433: "\u30B0",
871
+ \u0434: "\u30C9",
872
+ \u0435: "\u30A4\u30A7",
873
+ \u0451: "\u30E8",
874
+ \u0436: "\u30B8\u30E5",
875
+ \u0437: "\u30BA",
876
+ \u0438: "\u30A4",
877
+ \u0439: "\u30A4",
878
+ \u043A: "\u30AF",
879
+ \u043B: "\u30EB",
880
+ \u043C: "\u30E0",
881
+ \u043D: "\u30F3",
882
+ \u043E: "\u30AA",
883
+ \u043F: "\u30D7",
884
+ \u0440: "\u30EB",
885
+ \u0441: "\u30B9",
886
+ \u0442: "\u30C8",
887
+ \u0443: "\u30A6",
888
+ \u0444: "\u30D5",
889
+ \u0445: "\u30CF",
890
+ \u0446: "\u30C4",
891
+ \u0447: "\u30C1",
892
+ \u0448: "\u30B7\u30E5",
893
+ \u0449: "\u30B7\u30C1",
894
+ \u044A: "",
895
+ \u044B: "\u30A6\u30A3",
896
+ \u044C: "",
897
+ \u044D: "\u30A8",
898
+ \u044E: "\u30E6",
899
+ \u044F: "\u30E4"
900
+ }
901
+ };
902
+
903
+ // src/languages/cyrillic.ts
904
+ function isCyrillic(text) {
905
+ return /[\u0400-\u04FF]/.test(text);
906
+ }
907
+ function convertCyrillic(text) {
908
+ if (!isCyrillic(text)) return text;
909
+ let lower = text.toLowerCase();
910
+ for (const [phrase, katakana] of Object.entries(cyrillic_default.phrases)) {
911
+ lower = lower.replace(new RegExp(phrase, "g"), katakana);
912
+ }
913
+ let result = "";
914
+ const letters = cyrillic_default.letters;
915
+ for (const char of lower) {
916
+ const mapped = letters[char];
917
+ if (mapped !== void 0) {
918
+ result += mapped;
919
+ } else {
920
+ result += char;
921
+ }
922
+ }
923
+ return result;
924
+ }
925
+
926
+ // src/dicts/english_words.json
927
+ var english_words_default = {
928
+ nice: "\u30CA\u30A4\u30B9",
929
+ hello: "\u30CF\u30ED\u30FC",
930
+ hola: "\u30DB\u30FC\u30E9",
931
+ twitch: "\u30C4\u30A4\u30C3\u30C1",
932
+ is: "\u30A4\u30BA",
933
+ now: "\u30CA\u30A6",
934
+ live: "\u30E9\u30A4\u30D6",
935
+ streaming: "\u30B9\u30C8\u30EA\u30FC\u30DF\u30F3\u30B0",
936
+ egging: "\u30A8\u30AE\u30F3\u30B0",
937
+ on: "\u30AA\u30F3",
938
+ to: "\u30C8\u30A5\u30FC",
939
+ meet: "\u30DF\u30FC\u30C8",
940
+ you: "\u30E6\u30FC",
941
+ amigo: "\u30A2\u30DF\u30FC\u30B4\u30FC",
942
+ gracias: "\u30B0\u30E9\u30B7\u30FC\u30A2\u30BA",
943
+ por: "\u30DD\u30FC",
944
+ favor: "\u30D5\u30A7\u30FC\u30F4\u30A1\u30FC",
945
+ buenos: "\u30D6\u30A6\u30A7\u30FC\u30CE\u30FC\u30B9",
946
+ dias: "\u30C0\u30A4\u30A2\u30BA",
947
+ adios: "\u30AA\u30FC\u30C7\u30A3\u30FC\u30AA\u30FC\u30B9",
948
+ w: "\u30C0\u30D0\u30EB\u30E6\u30FC",
949
+ kusa: "\u30AF\u30FC\u30B6",
950
+ pog: "\u30DD\u30C3\u30B0",
951
+ lol: "\u30ED\u30EB",
952
+ bro: "\u30D6\u30ED\u30FC",
953
+ world: "\u30EF\u30FC\u30EB\u30C9",
954
+ stream: "\u30B9\u30C8\u30EA\u30FC\u30E0",
955
+ this: "\u30C7\u30A3\u30B9",
956
+ test: "\u30C6\u30B9\u30C8",
957
+ chat: "\u30C1\u30E3\u30C3\u30C8",
958
+ bot: "\u30DC\u30C3\u30C8",
959
+ egg: "\u30A8\u30C3\u30B0",
960
+ game: "\u30B2\u30FC\u30E0",
961
+ play: "\u30D7\u30EC\u30A4",
962
+ player: "\u30D7\u30EC\u30A4\u30E4\u30FC",
963
+ playing: "\u30D7\u30EC\u30A4\u30A4\u30F3\u30B0",
964
+ comments: "\u30B3\u30E1\u30F3\u30C4",
965
+ "don't": "\u30C9\u30FC\u30F3\u30C8",
966
+ do: "\u30C9\u30A5\u30FC",
967
+ that: "\u30B6\u30C3\u30C8",
968
+ url: "\u30E6\u30FC\u30A2\u30EC\u30EB",
969
+ thanks: "\u30B5\u30F3\u30AF\u30B9",
970
+ good: "\u30B0\u30C3\u30C9",
971
+ morning: "\u30E2\u30FC\u30CB\u30F3\u30B0",
972
+ streamer: "\u30B9\u30C8\u30EA\u30FC\u30DE\u30FC",
973
+ what: "\u30EF\u30C3\u30C8",
974
+ a: "\u30A2",
975
+ about: "\u30A2\u30D0\u30A6\u30C8",
976
+ above: "\u30A2\u30D0\u30D6",
977
+ across: "\u30A2\u30AF\u30ED\u30B9",
978
+ action: "\u30A2\u30AF\u30B7\u30E3\u30F3",
979
+ after: "\u30A2\u30D5\u30BF\u30FC",
980
+ again: "\u30A2\u30B2\u30F3",
981
+ against: "\u30A2\u30B2\u30F3\u30B9\u30C8",
982
+ all: "\u30AA\u30FC\u30EB",
983
+ almost: "\u30AA\u30EB\u30E2\u30FC\u30B9\u30C8",
984
+ alone: "\u30A2\u30ED\u30FC\u30F3",
985
+ along: "\u30A2\u30ED\u30F3\u30B0",
986
+ already: "\u30AA\u30FC\u30EB\u30EC\u30C7\u30A3\u30FC",
987
+ also: "\u30AA\u30FC\u30EB\u30BD\u30FC",
988
+ always: "\u30AA\u30FC\u30EB\u30A6\u30A7\u30A4\u30BA",
989
+ am: "\u30A2\u30E0",
990
+ among: "\u30A2\u30DE\u30F3\u30B0",
991
+ an: "\u30A2\u30F3",
992
+ and: "\u30A2\u30F3\u30C9",
993
+ another: "\u30A2\u30CA\u30B6\u30FC",
994
+ answer: "\u30A2\u30F3\u30B5\u30FC",
995
+ any: "\u30A8\u30CB\u30FC",
996
+ anyone: "\u30A8\u30CB\u30FC\u30EF\u30F3",
997
+ anything: "\u30A8\u30CB\u30FC\u30B7\u30F3\u30B0",
998
+ are: "\u30A2\u30FC",
999
+ area: "\u30A8\u30EA\u30FC\u30A2",
1000
+ around: "\u30A2\u30FC\u30A2\u30A6\u30F3\u30C9",
1001
+ as: "\u30A2\u30BA",
1002
+ ask: "\u30A2\u30B9\u30AF",
1003
+ at: "\u30A2\u30C3\u30C8",
1004
+ audio: "\u30AA\u30FC\u30C7\u30A3\u30FC\u30AA\u30FC",
1005
+ away: "\u30A2\u30A6\u30A7\u30A4",
1006
+ baby: "\u30D9\u30FC\u30D3\u30FC",
1007
+ back: "\u30D0\u30C3\u30AF",
1008
+ bad: "\u30D0\u30C3\u30C9",
1009
+ ball: "\u30DC\u30FC\u30EB",
1010
+ base: "\u30D9\u30FC\u30B9",
1011
+ be: "\u30D3\u30FC",
1012
+ beat: "\u30D3\u30FC\u30C8",
1013
+ beautiful: "\u30D6\u30E6\u30FC\u30BF\u30D5\u30A1\u30EB",
1014
+ because: "\u30D3\u30B3\u30FC\u30BA",
1015
+ become: "\u30D3\u30AB\u30E0",
1016
+ bed: "\u30D9\u30C3\u30C9",
1017
+ been: "\u30D3\u30F3",
1018
+ before: "\u30D3\u30D5\u30A9\u30FC",
1019
+ began: "\u30D3\u30AC\u30F3",
1020
+ begin: "\u30D3\u30AE\u30F3",
1021
+ behind: "\u30D3\u30CF\u30A4\u30F3\u30C9",
1022
+ being: "\u30D3\u30FC\u30A4\u30F3\u30B0",
1023
+ believe: "\u30D3\u30EA\u30FC\u30D6",
1024
+ bell: "\u30D9\u30EB",
1025
+ best: "\u30D9\u30B9\u30C8",
1026
+ better: "\u30D9\u30BF\u30FC",
1027
+ between: "\u30D3\u30C4\u30A4\u30F3",
1028
+ big: "\u30D3\u30C3\u30B0",
1029
+ bird: "\u30D0\u30FC\u30C9",
1030
+ bit: "\u30D3\u30C3\u30C8",
1031
+ black: "\u30D6\u30E9\u30C3\u30AF",
1032
+ block: "\u30D6\u30ED\u30C3\u30AF",
1033
+ blood: "\u30D6\u30E9\u30C3\u30C9",
1034
+ blow: "\u30D6\u30ED\u30FC",
1035
+ blue: "\u30D6\u30EB\u30FC",
1036
+ board: "\u30DC\u30FC\u30C9",
1037
+ boat: "\u30DC\u30FC\u30C8",
1038
+ body: "\u30DC\u30C7\u30A3\u30FC",
1039
+ book: "\u30D6\u30C3\u30AF",
1040
+ boss: "\u30DC\u30B9",
1041
+ both: "\u30DC\u30FC\u30B9",
1042
+ bottom: "\u30DC\u30BF\u30E0",
1043
+ box: "\u30DC\u30C3\u30AF\u30B9",
1044
+ boy: "\u30DC\u30A4",
1045
+ break: "\u30D6\u30EC\u30FC\u30AF",
1046
+ bring: "\u30D6\u30EA\u30F3\u30B0",
1047
+ brother: "\u30D6\u30E9\u30B6\u30FC",
1048
+ build: "\u30D3\u30EB\u30C9",
1049
+ burn: "\u30D0\u30FC\u30F3",
1050
+ busy: "\u30D3\u30B8\u30FC",
1051
+ but: "\u30D0\u30C3\u30C8",
1052
+ buy: "\u30D0\u30A4",
1053
+ by: "\u30D0\u30A4",
1054
+ call: "\u30B3\u30FC\u30EB",
1055
+ came: "\u30B1\u30FC\u30E0",
1056
+ camera: "\u30AD\u30E3\u30DE\u30FC\u30A2",
1057
+ can: "\u30AD\u30E3\u30F3",
1058
+ cannot: "\u30AD\u30E3\u30CE\u30C3\u30C8",
1059
+ car: "\u30AB\u30FC",
1060
+ card: "\u30AB\u30FC\u30C9",
1061
+ care: "\u30B1\u30FC",
1062
+ carry: "\u30AD\u30E3\u30EA\u30FC",
1063
+ case: "\u30B1\u30FC\u30B9",
1064
+ cat: "\u30AD\u30E3\u30C3\u30C8",
1065
+ catch: "\u30AD\u30E3\u30C3\u30C1",
1066
+ center: "\u30BB\u30F3\u30BF\u30FC",
1067
+ chance: "\u30C1\u30E3\u30F3\u30B9",
1068
+ change: "\u30C1\u30A7\u30FC\u30F3\u30B8",
1069
+ channel: "\u30C1\u30E3\u30CA\u30EB",
1070
+ charge: "\u30C1\u30E3\u30FC\u30B8",
1071
+ check: "\u30C1\u30A7\u30C3\u30AF",
1072
+ child: "\u30C1\u30E3\u30A4\u30EB\u30C9",
1073
+ children: "\u30C1\u30EB\u30C9\u30E9\u30F3",
1074
+ choose: "\u30C1\u30E5\u30FC\u30BA",
1075
+ city: "\u30B7\u30C6\u30A3\u30FC",
1076
+ class: "\u30AF\u30E9\u30B9",
1077
+ clean: "\u30AF\u30EA\u30FC\u30F3",
1078
+ clear: "\u30AF\u30EA\u30FC",
1079
+ climb: "\u30AF\u30E9\u30A4\u30E0",
1080
+ close: "\u30AF\u30ED\u30FC\u30B9",
1081
+ cold: "\u30B3\u30FC\u30EB\u30C9",
1082
+ color: "\u30AB\u30E9\u30FC",
1083
+ come: "\u30AB\u30E0",
1084
+ comment: "\u30B3\u30E1\u30F3\u30C8",
1085
+ common: "\u30B3\u30DE\u30F3",
1086
+ community: "\u30AB\u30E0\u30E6\u30FC\u30CA\u30C6\u30A3\u30FC",
1087
+ complete: "\u30AB\u30E0\u30D7\u30EA\u30FC\u30C8",
1088
+ computer: "\u30AB\u30E0\u30D7\u30E6\u30FC\u30BF\u30FC",
1089
+ control: "\u30AB\u30F3\u30C8\u30ED\u30FC\u30EB",
1090
+ cool: "\u30AF\u30FC\u30EB",
1091
+ copy: "\u30B3\u30D4\u30FC",
1092
+ corner: "\u30B3\u30FC\u30CA\u30FC",
1093
+ cost: "\u30B3\u30B9\u30C8",
1094
+ could: "\u30AF\u30C3\u30C9",
1095
+ country: "\u30AB\u30F3\u30C8\u30EA\u30FC",
1096
+ course: "\u30B3\u30FC\u30B9",
1097
+ cover: "\u30AB\u30F4\u30A1\u30FC",
1098
+ cross: "\u30AF\u30ED\u30B9",
1099
+ cry: "\u30AF\u30E9\u30A4",
1100
+ cut: "\u30AB\u30C3\u30C8",
1101
+ daily: "\u30C7\u30A4\u30EA\u30FC",
1102
+ damage: "\u30C0\u30DE\u30B8",
1103
+ dance: "\u30C0\u30F3\u30B9",
1104
+ dark: "\u30C0\u30FC\u30AF",
1105
+ day: "\u30C7\u30A4",
1106
+ dead: "\u30C7\u30C3\u30C9",
1107
+ deal: "\u30C7\u30A3\u30FC\u30EB",
1108
+ dear: "\u30C7\u30A3\u30FC",
1109
+ death: "\u30C7\u30B9",
1110
+ decide: "\u30C7\u30A3\u30B5\u30A4\u30C9",
1111
+ deep: "\u30C7\u30A3\u30FC\u30D7",
1112
+ defeat: "\u30C7\u30A3\u30D5\u30A3\u30FC\u30C8",
1113
+ die: "\u30C0\u30A4",
1114
+ different: "\u30C7\u30A3\u30D5\u30A1\u30FC\u30A2\u30F3\u30C8",
1115
+ dinner: "\u30C7\u30A3\u30CA\u30FC",
1116
+ direct: "\u30C0\u30FC\u30A8\u30AF\u30C8",
1117
+ doctor: "\u30C9\u30AF\u30BF\u30FC",
1118
+ does: "\u30C0\u30BA",
1119
+ dog: "\u30C9\u30C3\u30B0",
1120
+ dollar: "\u30C9\u30E9\u30FC",
1121
+ done: "\u30C0\u30F3",
1122
+ door: "\u30C9\u30FC",
1123
+ double: "\u30C0\u30D0\u30EB",
1124
+ down: "\u30C0\u30A6\u30F3",
1125
+ draw: "\u30C9\u30ED\u30FC",
1126
+ dream: "\u30C9\u30EA\u30FC\u30E0",
1127
+ dress: "\u30C9\u30EC\u30B9",
1128
+ drink: "\u30C9\u30EA\u30F3\u30AF",
1129
+ drive: "\u30C9\u30E9\u30A4\u30D6",
1130
+ drop: "\u30C9\u30ED\u30C3\u30D7",
1131
+ dry: "\u30C9\u30E9\u30A4",
1132
+ during: "\u30C9\u30A5\u30EA\u30F3\u30B0",
1133
+ each: "\u30A4\u30FC\u30C1",
1134
+ early: "\u30A2\u30FC\u30EA\u30FC",
1135
+ earth: "\u30A2\u30FC\u30B9",
1136
+ east: "\u30A4\u30FC\u30B9\u30C8",
1137
+ easy: "\u30A4\u30FC\u30B8\u30FC",
1138
+ eat: "\u30A4\u30FC\u30C8",
1139
+ effect: "\u30A4\u30D5\u30A7\u30AF\u30C8",
1140
+ eight: "\u30A8\u30FC\u30C8",
1141
+ either: "\u30A4\u30FC\u30B6\u30FC",
1142
+ electric: "\u30A4\u30EC\u30AF\u30C8\u30EA\u30C3\u30AF",
1143
+ element: "\u30A8\u30E9\u30DE\u30F3\u30C8",
1144
+ else: "\u30A8\u30EB\u30B9",
1145
+ end: "\u30A8\u30F3\u30C9",
1146
+ enemy: "\u30A8\u30CA\u30DF\u30FC",
1147
+ energy: "\u30A8\u30CA\u30FC\u30B8\u30FC",
1148
+ enjoy: "\u30A8\u30F3\u30B8\u30E7\u30A4",
1149
+ enough: "\u30A4\u30CA\u30D5",
1150
+ enter: "\u30A8\u30F3\u30BF\u30FC",
1151
+ even: "\u30A4\u30FC\u30F4\u30A3\u30F3",
1152
+ evening: "\u30A4\u30FC\u30D6\u30CB\u30F3\u30B0",
1153
+ ever: "\u30A8\u30F4\u30A1\u30FC",
1154
+ every: "\u30A8\u30F4\u30A1\u30FC\u30A4\u30FC",
1155
+ everyone: "\u30A8\u30D6\u30EA\u30FC\u30EF\u30F3",
1156
+ everything: "\u30A8\u30D6\u30EA\u30FC\u30B7\u30F3\u30B0",
1157
+ face: "\u30D5\u30A7\u30FC\u30B9",
1158
+ fact: "\u30D5\u30A1\u30AF\u30C8",
1159
+ fair: "\u30D5\u30A7\u30FC",
1160
+ fall: "\u30D5\u30A9\u30FC\u30EB",
1161
+ family: "\u30D5\u30A1\u30DE\u30EA\u30FC",
1162
+ famous: "\u30D5\u30A7\u30FC\u30DE\u30B9",
1163
+ far: "\u30D5\u30A1\u30FC",
1164
+ farm: "\u30D5\u30A1\u30FC\u30E0",
1165
+ fast: "\u30D5\u30A1\u30B9\u30C8",
1166
+ fat: "\u30D5\u30A1\u30C3\u30C8",
1167
+ father: "\u30D5\u30A1\u30B6\u30FC",
1168
+ fear: "\u30D5\u30A3\u30FC",
1169
+ feel: "\u30D5\u30A3\u30FC\u30EB",
1170
+ feeling: "\u30D5\u30A3\u30FC\u30EA\u30F3\u30B0",
1171
+ few: "\u30D5\u30E6\u30FC",
1172
+ field: "\u30D5\u30A3\u30FC\u30EB\u30C9",
1173
+ fight: "\u30D5\u30A1\u30A4\u30C8",
1174
+ figure: "\u30D5\u30A3\u30B0\u30E4\u30FC",
1175
+ fill: "\u30D5\u30A3\u30EB",
1176
+ final: "\u30D5\u30A1\u30A4\u30CA\u30EB",
1177
+ find: "\u30D5\u30A1\u30A4\u30F3\u30C9",
1178
+ fine: "\u30D5\u30A1\u30A4\u30F3",
1179
+ finger: "\u30D5\u30A3\u30F3\u30B0\u30AC\u30FC",
1180
+ finish: "\u30D5\u30A3\u30CB\u30B7\u30E5",
1181
+ fire: "\u30D5\u30A1\u30A4\u30E4\u30FC",
1182
+ first: "\u30D5\u30A1\u30FC\u30B9\u30C8",
1183
+ fish: "\u30D5\u30A3\u30B7\u30E5",
1184
+ five: "\u30D5\u30A1\u30A4\u30D6",
1185
+ floor: "\u30D5\u30ED\u30FC",
1186
+ fly: "\u30D5\u30E9\u30A4",
1187
+ focus: "\u30D5\u30A9\u30FC\u30AB\u30B9",
1188
+ follow: "\u30D5\u30A9\u30ED\u30FC",
1189
+ follower: "\u30D5\u30A9\u30ED\u30FC\u30A2\u30FC",
1190
+ food: "\u30D5\u30FC\u30C9",
1191
+ foot: "\u30D5\u30C3\u30C8",
1192
+ for: "\u30D5\u30A9\u30FC",
1193
+ force: "\u30D5\u30A9\u30FC\u30B9",
1194
+ foreign: "\u30D5\u30A9\u30E9\u30F3",
1195
+ forest: "\u30D5\u30A9\u30E9\u30B9\u30C8",
1196
+ forget: "\u30D5\u30A1\u30FC\u30B2\u30C3\u30C8",
1197
+ form: "\u30D5\u30A9\u30FC\u30E0",
1198
+ forward: "\u30D5\u30A9\u30FC\u30EF\u30FC\u30C9",
1199
+ found: "\u30D5\u30A1\u30A6\u30F3\u30C9",
1200
+ four: "\u30D5\u30A9\u30FC",
1201
+ free: "\u30D5\u30EA\u30FC",
1202
+ friend: "\u30D5\u30EC\u30F3\u30C9",
1203
+ from: "\u30D5\u30E9\u30E0",
1204
+ front: "\u30D5\u30E9\u30F3\u30C8",
1205
+ full: "\u30D5\u30EB",
1206
+ fun: "\u30D5\u30A1\u30F3",
1207
+ funny: "\u30D5\u30A1\u30CB\u30FC",
1208
+ future: "\u30D5\u30E6\u30FC\u30C1\u30E3\u30FC",
1209
+ gamer: "\u30B2\u30FC\u30DE\u30FC",
1210
+ gameplay: "\u30B2\u30A4\u30E0\u30D7\u30EC\u30A4",
1211
+ garden: "\u30AC\u30FC\u30C0\u30F3",
1212
+ general: "\u30B8\u30A7\u30CA\u30FC\u30A2\u30EB",
1213
+ get: "\u30B2\u30C3\u30C8",
1214
+ girl: "\u30AC\u30FC\u30EB",
1215
+ give: "\u30AE\u30D6",
1216
+ glad: "\u30B0\u30E9\u30C3\u30C9",
1217
+ glass: "\u30B0\u30E9\u30B9",
1218
+ go: "\u30B4\u30FC",
1219
+ goal: "\u30B4\u30FC\u30EB",
1220
+ gold: "\u30B4\u30FC\u30EB\u30C9",
1221
+ gone: "\u30B4\u30F3",
1222
+ got: "\u30B4\u30C3\u30C8",
1223
+ government: "\u30AC\u30F4\u30A1\u30FC\u30DE\u30F3\u30C8",
1224
+ great: "\u30B0\u30EC\u30FC\u30C8",
1225
+ green: "\u30B0\u30EA\u30FC\u30F3",
1226
+ ground: "\u30B0\u30E9\u30A6\u30F3\u30C9",
1227
+ group: "\u30B0\u30EB\u30FC\u30D7",
1228
+ grow: "\u30B0\u30ED\u30FC",
1229
+ guide: "\u30AC\u30A4\u30C9",
1230
+ gun: "\u30AC\u30F3",
1231
+ guy: "\u30AC\u30A4",
1232
+ had: "\u30CF\u30C3\u30C9",
1233
+ hair: "\u30D8\u30FC",
1234
+ half: "\u30CF\u30D5",
1235
+ hand: "\u30CF\u30F3\u30C9",
1236
+ happen: "\u30CF\u30D1\u30F3",
1237
+ happy: "\u30CF\u30D4\u30FC",
1238
+ hard: "\u30CF\u30FC\u30C9",
1239
+ has: "\u30CF\u30BA",
1240
+ hat: "\u30CF\u30C3\u30C8",
1241
+ have: "\u30CF\u30D6",
1242
+ he: "\u30D2\u30FC",
1243
+ head: "\u30D8\u30C3\u30C9",
1244
+ hear: "\u30D2\u30FC",
1245
+ heart: "\u30CF\u30FC\u30C8",
1246
+ heavy: "\u30D8\u30F4\u30A3\u30FC",
1247
+ held: "\u30D8\u30EB\u30C9",
1248
+ help: "\u30D8\u30EB\u30D7",
1249
+ her: "\u30CF\u30FC",
1250
+ here: "\u30D2\u30FC",
1251
+ high: "\u30CF\u30A4",
1252
+ hill: "\u30D2\u30EB",
1253
+ him: "\u30D2\u30E0",
1254
+ himself: "\u30D2\u30E0\u30BB\u30EB\u30D5",
1255
+ his: "\u30D2\u30BA",
1256
+ history: "\u30D2\u30B9\u30BF\u30FC\u30A4\u30FC",
1257
+ hit: "\u30D2\u30C3\u30C8",
1258
+ hold: "\u30DB\u30FC\u30EB\u30C9",
1259
+ hole: "\u30DB\u30FC\u30EB",
1260
+ home: "\u30DB\u30FC\u30E0",
1261
+ hope: "\u30DB\u30FC\u30D7",
1262
+ horse: "\u30DB\u30FC\u30B9",
1263
+ host: "\u30DB\u30FC\u30B9\u30C8",
1264
+ hot: "\u30DB\u30C3\u30C8",
1265
+ hour: "\u30A2\u30A6\u30A2\u30FC",
1266
+ house: "\u30CF\u30A6\u30B9",
1267
+ how: "\u30CF\u30A6",
1268
+ huge: "\u30CF\u30E6\u30FC\u30B8",
1269
+ human: "\u30CF\u30E6\u30FC\u30DE\u30F3",
1270
+ hundred: "\u30CF\u30F3\u30C9\u30E9\u30C3\u30C9",
1271
+ hurry: "\u30CF\u30FC\u30A4\u30FC",
1272
+ hurt: "\u30CF\u30FC\u30C8",
1273
+ husband: "\u30CF\u30BA\u30D0\u30F3\u30C9",
1274
+ i: "\u30A2\u30A4",
1275
+ ice: "\u30A2\u30A4\u30B9",
1276
+ idea: "\u30A2\u30A4\u30C7\u30A3\u30FC\u30A2",
1277
+ if: "\u30A4\u30D5",
1278
+ important: "\u30A4\u30E0\u30DD\u30FC\u30BF\u30F3\u30C8",
1279
+ in: "\u30A4\u30F3",
1280
+ include: "\u30A4\u30F3\u30AF\u30EB\u30FC\u30C9",
1281
+ inside: "\u30A4\u30F3\u30B5\u30A4\u30C9",
1282
+ instead: "\u30A4\u30F3\u30B9\u30C6\u30C3\u30C9",
1283
+ into: "\u30A4\u30F3\u30C8\u30A5\u30FC",
1284
+ iron: "\u30A2\u30A4\u30E4\u30FC\u30F3",
1285
+ island: "\u30A2\u30A4\u30E9\u30F3\u30C9",
1286
+ issue: "\u30A4\u30B7\u30E5\u30FC",
1287
+ it: "\u30A4\u30C3\u30C8",
1288
+ its: "\u30A4\u30C3\u30C4",
1289
+ item: "\u30A2\u30A4\u30BF\u30E0",
1290
+ join: "\u30B8\u30E7\u30A4\u30F3",
1291
+ joke: "\u30B8\u30E7\u30A6\u30AF",
1292
+ jump: "\u30B8\u30E3\u30E0\u30D7",
1293
+ just: "\u30B8\u30E3\u30B9\u30C8",
1294
+ keep: "\u30AD\u30FC\u30D7",
1295
+ key: "\u30AD\u30FC",
1296
+ kill: "\u30AD\u30EB",
1297
+ kind: "\u30AB\u30A4\u30F3\u30C9",
1298
+ king: "\u30AD\u30F3\u30B0",
1299
+ knew: "\u30CC\u30FC",
1300
+ know: "\u30CE\u30FC",
1301
+ lady: "\u30EC\u30FC\u30C7\u30A3\u30FC",
1302
+ lake: "\u30EC\u30FC\u30AF",
1303
+ land: "\u30E9\u30F3\u30C9",
1304
+ large: "\u30E9\u30FC\u30B8",
1305
+ last: "\u30E9\u30B9\u30C8",
1306
+ late: "\u30EC\u30FC\u30C8",
1307
+ laugh: "\u30E9\u30D5",
1308
+ law: "\u30ED\u30FC",
1309
+ lay: "\u30EC\u30A4",
1310
+ lead: "\u30EC\u30C3\u30C9",
1311
+ leader: "\u30EA\u30FC\u30C0\u30FC",
1312
+ learn: "\u30E9\u30FC\u30F3",
1313
+ least: "\u30EA\u30FC\u30B9\u30C8",
1314
+ leave: "\u30EA\u30FC\u30D6",
1315
+ left: "\u30EC\u30D5\u30C8",
1316
+ leg: "\u30EC\u30C3\u30B0",
1317
+ less: "\u30EC\u30B9",
1318
+ let: "\u30EC\u30C3\u30C8",
1319
+ letter: "\u30EC\u30BF\u30FC",
1320
+ level: "\u30EC\u30F4\u30A1\u30EB",
1321
+ lie: "\u30E9\u30A4",
1322
+ life: "\u30E9\u30A4\u30D5",
1323
+ light: "\u30E9\u30A4\u30C8",
1324
+ like: "\u30E9\u30A4\u30AF",
1325
+ line: "\u30E9\u30A4\u30F3",
1326
+ list: "\u30EA\u30B9\u30C8",
1327
+ listen: "\u30EA\u30B5\u30F3",
1328
+ little: "\u30EA\u30BF\u30EB",
1329
+ lock: "\u30ED\u30C3\u30AF",
1330
+ long: "\u30ED\u30F3\u30B0",
1331
+ look: "\u30EB\u30C3\u30AF",
1332
+ loot: "\u30EB\u30FC\u30C8",
1333
+ lose: "\u30EB\u30FC\u30BA",
1334
+ loss: "\u30ED\u30B9",
1335
+ lost: "\u30ED\u30B9\u30C8",
1336
+ lot: "\u30ED\u30C3\u30C8",
1337
+ loud: "\u30E9\u30A6\u30C9",
1338
+ love: "\u30E9\u30D6",
1339
+ low: "\u30ED\u30FC",
1340
+ luck: "\u30E9\u30C3\u30AF",
1341
+ lucky: "\u30E9\u30AD\u30FC",
1342
+ made: "\u30E1\u30FC\u30C9",
1343
+ main: "\u30E1\u30A4\u30F3",
1344
+ make: "\u30E1\u30FC\u30AF",
1345
+ man: "\u30DE\u30F3",
1346
+ many: "\u30E1\u30CB\u30FC",
1347
+ map: "\u30DE\u30C3\u30D7",
1348
+ mark: "\u30DE\u30FC\u30AF",
1349
+ market: "\u30DE\u30FC\u30AB\u30C3\u30C8",
1350
+ match: "\u30DE\u30C3\u30C1",
1351
+ matter: "\u30DE\u30BF\u30FC",
1352
+ may: "\u30E1\u30A4",
1353
+ maybe: "\u30E1\u30A4\u30D3\u30FC",
1354
+ me: "\u30DF\u30FC",
1355
+ mean: "\u30DF\u30FC\u30F3",
1356
+ meat: "\u30DF\u30FC\u30C8",
1357
+ member: "\u30E1\u30E0\u30D0\u30FC",
1358
+ men: "\u30E1\u30F3",
1359
+ message: "\u30E1\u30B5\u30B8",
1360
+ middle: "\u30DF\u30C0\u30EB",
1361
+ might: "\u30DE\u30A4\u30C8",
1362
+ mile: "\u30DE\u30A4\u30EB",
1363
+ mind: "\u30DE\u30A4\u30F3\u30C9",
1364
+ mine: "\u30DE\u30A4\u30F3",
1365
+ minute: "\u30DF\u30CA\u30C3\u30C8",
1366
+ miss: "\u30DF\u30B9",
1367
+ mode: "\u30E2\u30FC\u30C9",
1368
+ moderator: "\u30E2\u30C0\u30FC\u30A8\u30FC\u30BF\u30FC",
1369
+ money: "\u30DE\u30CB\u30FC",
1370
+ month: "\u30DE\u30F3\u30B9",
1371
+ moon: "\u30E0\u30FC\u30F3",
1372
+ more: "\u30E2\u30FC",
1373
+ most: "\u30E2\u30FC\u30B9\u30C8",
1374
+ mother: "\u30DE\u30B6\u30FC",
1375
+ mountain: "\u30DE\u30A6\u30F3\u30BF\u30F3",
1376
+ mouth: "\u30DE\u30A6\u30B9",
1377
+ move: "\u30E0\u30FC\u30D6",
1378
+ much: "\u30DE\u30C3\u30C1",
1379
+ music: "\u30E0\u30E6\u30FC\u30B8\u30C3\u30AF",
1380
+ must: "\u30DE\u30B9\u30C8",
1381
+ my: "\u30DE\u30A4",
1382
+ name: "\u30CD\u30FC\u30E0",
1383
+ nation: "\u30CD\u30FC\u30B7\u30E3\u30F3",
1384
+ nature: "\u30CD\u30FC\u30C1\u30E3\u30FC",
1385
+ near: "\u30CB\u30FC",
1386
+ necessary: "\u30CD\u30B5\u30BB\u30EA\u30FC",
1387
+ neck: "\u30CD\u30C3\u30AF",
1388
+ need: "\u30CB\u30FC\u30C9",
1389
+ never: "\u30CD\u30F4\u30A1\u30FC",
1390
+ new: "\u30CC\u30FC",
1391
+ news: "\u30CC\u30FC\u30BA",
1392
+ next: "\u30CD\u30AF\u30B9\u30C8",
1393
+ night: "\u30CA\u30A4\u30C8",
1394
+ nine: "\u30CA\u30A4\u30F3",
1395
+ no: "\u30CE\u30FC",
1396
+ nobody: "\u30CE\u30FC\u30DC\u30C7\u30A3\u30FC",
1397
+ nod: "\u30CE\u30C3\u30C9",
1398
+ noise: "\u30CE\u30A4\u30BA",
1399
+ none: "\u30CA\u30F3",
1400
+ noon: "\u30CC\u30FC\u30F3",
1401
+ nor: "\u30CE\u30FC",
1402
+ north: "\u30CE\u30FC\u30B9",
1403
+ nose: "\u30CE\u30FC\u30BA",
1404
+ not: "\u30CE\u30C3\u30C8",
1405
+ note: "\u30CE\u30FC\u30C8",
1406
+ nothing: "\u30CA\u30B7\u30F3\u30B0",
1407
+ notice: "\u30CE\u30FC\u30BF\u30B9",
1408
+ number: "\u30CA\u30E0\u30D0\u30FC",
1409
+ object: "\u30AA\u30FC\u30D6\u30B8\u30A7\u30AF\u30C8",
1410
+ ocean: "\u30AA\u30FC\u30B7\u30E3\u30F3",
1411
+ of: "\u30A2\u30D6",
1412
+ off: "\u30AA\u30D5",
1413
+ office: "\u30AA\u30FC\u30D5\u30A3\u30B9",
1414
+ often: "\u30AA\u30FC\u30D5\u30A1\u30F3",
1415
+ oh: "\u30AA\u30FC",
1416
+ oil: "\u30AA\u30A4\u30EB",
1417
+ old: "\u30AA\u30FC\u30EB\u30C9",
1418
+ once: "\u30EF\u30F3\u30B9",
1419
+ one: "\u30EF\u30F3",
1420
+ only: "\u30AA\u30FC\u30F3\u30EA\u30FC",
1421
+ open: "\u30AA\u30FC\u30D1\u30F3",
1422
+ or: "\u30AA\u30FC",
1423
+ order: "\u30AA\u30FC\u30C0\u30FC",
1424
+ other: "\u30A2\u30B6\u30FC",
1425
+ our: "\u30A2\u30A6\u30A2\u30FC",
1426
+ out: "\u30A2\u30A6\u30C8",
1427
+ outside: "\u30A2\u30A6\u30C8\u30B5\u30A4\u30C9",
1428
+ over: "\u30AA\u30FC\u30F4\u30A1\u30FC",
1429
+ own: "\u30AA\u30FC\u30F3",
1430
+ page: "\u30DA\u30FC\u30B8",
1431
+ pain: "\u30DA\u30A4\u30F3",
1432
+ paint: "\u30DA\u30A4\u30F3\u30C8",
1433
+ pair: "\u30DA\u30FC",
1434
+ paper: "\u30DA\u30FC\u30D1\u30FC",
1435
+ part: "\u30D1\u30FC\u30C8",
1436
+ party: "\u30D1\u30FC\u30C6\u30A3\u30FC",
1437
+ pass: "\u30D1\u30B9",
1438
+ past: "\u30D1\u30B9\u30C8",
1439
+ path: "\u30D1\u30B9",
1440
+ pay: "\u30DA\u30A4",
1441
+ peace: "\u30D4\u30FC\u30B9",
1442
+ people: "\u30D4\u30FC\u30D1\u30EB",
1443
+ per: "\u30D1\u30FC",
1444
+ perfect: "\u30D1\u30FC\u30D5\u30A7\u30AF\u30C8",
1445
+ perhaps: "\u30D1\u30FC\u30CF\u30C3\u30D7\u30B9",
1446
+ person: "\u30D1\u30FC\u30B5\u30F3",
1447
+ phone: "\u30D5\u30A9\u30FC\u30F3",
1448
+ pick: "\u30D4\u30C3\u30AF",
1449
+ picture: "\u30D4\u30AF\u30C1\u30E3\u30FC",
1450
+ piece: "\u30D4\u30FC\u30B9",
1451
+ place: "\u30D7\u30EC\u30FC\u30B9",
1452
+ plain: "\u30D7\u30EC\u30A4\u30F3",
1453
+ plan: "\u30D7\u30E9\u30F3",
1454
+ plane: "\u30D7\u30EC\u30FC\u30F3",
1455
+ plant: "\u30D7\u30E9\u30F3\u30C8",
1456
+ pleasant: "\u30D7\u30EC\u30B6\u30F3\u30C8",
1457
+ please: "\u30D7\u30EA\u30FC\u30BA",
1458
+ point: "\u30DD\u30A4\u30F3\u30C8",
1459
+ police: "\u30D1\u30EA\u30FC\u30B9",
1460
+ poor: "\u30D7\u30FC",
1461
+ popular: "\u30DD\u30D7\u30E4\u30E9\u30FC",
1462
+ position: "\u30D1\u30B8\u30B7\u30E3\u30F3",
1463
+ possible: "\u30DD\u30B5\u30D0\u30EB",
1464
+ post: "\u30DD\u30FC\u30B9\u30C8",
1465
+ pound: "\u30D1\u30A6\u30F3\u30C9",
1466
+ power: "\u30D1\u30A6\u30A2\u30FC",
1467
+ practice: "\u30D7\u30E9\u30AF\u30BF\u30B9",
1468
+ prepare: "\u30D7\u30EA\u30FC\u30DA\u30FC",
1469
+ present: "\u30D7\u30EC\u30B6\u30F3\u30C8",
1470
+ pretty: "\u30D7\u30EA\u30C6\u30A3\u30FC",
1471
+ price: "\u30D7\u30E9\u30A4\u30B9",
1472
+ probably: "\u30D7\u30ED\u30D0\u30D6\u30EA\u30FC",
1473
+ problem: "\u30D7\u30ED\u30D6\u30E9\u30E0",
1474
+ produce: "\u30D7\u30E9\u30C9\u30A5\u30FC\u30B9",
1475
+ product: "\u30D7\u30ED\u30C0\u30AF\u30C8",
1476
+ program: "\u30D7\u30ED\u30FC\u30B0\u30E9\u30E0",
1477
+ proud: "\u30D7\u30E9\u30A6\u30C9",
1478
+ prove: "\u30D7\u30EB\u30FC\u30D6",
1479
+ public: "\u30D1\u30D6\u30EA\u30C3\u30AF",
1480
+ pull: "\u30D7\u30EB",
1481
+ pure: "\u30D7\u30E6\u30FC",
1482
+ push: "\u30D7\u30B7\u30E5",
1483
+ put: "\u30D7\u30C3\u30C8",
1484
+ quest: "\u30AF\u30A6\u30A7\u30B9\u30C8",
1485
+ quick: "\u30AF\u30A6\u30A3\u30C3\u30AF",
1486
+ quiet: "\u30AF\u30EF\u30A4\u30A2\u30C3\u30C8",
1487
+ quite: "\u30AF\u30EF\u30A4\u30C8",
1488
+ race: "\u30EC\u30FC\u30B9",
1489
+ radio: "\u30EC\u30FC\u30C7\u30A3\u30FC\u30AA\u30FC",
1490
+ raid: "\u30EC\u30A4\u30C9",
1491
+ rain: "\u30EC\u30A4\u30F3",
1492
+ raise: "\u30EC\u30A4\u30BA",
1493
+ ran: "\u30E9\u30F3",
1494
+ rank: "\u30E9\u30F3\u30AF",
1495
+ rapid: "\u30E9\u30D1\u30C3\u30C9",
1496
+ rather: "\u30E9\u30B6\u30FC",
1497
+ reach: "\u30EA\u30FC\u30C1",
1498
+ read: "\u30EC\u30C3\u30C9",
1499
+ ready: "\u30EC\u30C7\u30A3\u30FC",
1500
+ real: "\u30EA\u30FC\u30EB",
1501
+ really: "\u30EA\u30EA\u30FC",
1502
+ reason: "\u30EA\u30FC\u30B6\u30F3",
1503
+ receive: "\u30E9\u30B7\u30FC\u30D6",
1504
+ record: "\u30E9\u30B3\u30FC\u30C9",
1505
+ red: "\u30EC\u30C3\u30C9",
1506
+ relax: "\u30EA\u30E9\u30C3\u30AF\u30B9",
1507
+ remember: "\u30EA\u30E1\u30E0\u30D0\u30FC",
1508
+ report: "\u30EA\u30FC\u30DD\u30FC\u30C8",
1509
+ request: "\u30EA\u30AF\u30A6\u30A7\u30B9\u30C8",
1510
+ require: "\u30EA\u30FC\u30AF\u30EF\u30A4\u30E4\u30FC",
1511
+ rest: "\u30EC\u30B9\u30C8",
1512
+ result: "\u30EA\u30B6\u30EB\u30C8",
1513
+ return: "\u30EA\u30BF\u30FC\u30F3",
1514
+ reward: "\u30EA\u30A6\u30A9\u30FC\u30C9",
1515
+ rich: "\u30EA\u30C3\u30C1",
1516
+ ride: "\u30E9\u30A4\u30C9",
1517
+ right: "\u30E9\u30A4\u30C8",
1518
+ ring: "\u30EA\u30F3\u30B0",
1519
+ rise: "\u30E9\u30A4\u30BA",
1520
+ river: "\u30EA\u30F4\u30A1\u30FC",
1521
+ road: "\u30ED\u30FC\u30C9",
1522
+ rock: "\u30ED\u30C3\u30AF",
1523
+ role: "\u30ED\u30FC\u30EB",
1524
+ roll: "\u30ED\u30FC\u30EB",
1525
+ room: "\u30EB\u30FC\u30E0",
1526
+ round: "\u30E9\u30A6\u30F3\u30C9",
1527
+ rule: "\u30EB\u30FC\u30EB",
1528
+ run: "\u30E9\u30F3",
1529
+ safe: "\u30BB\u30FC\u30D5",
1530
+ said: "\u30BB\u30C3\u30C9",
1531
+ same: "\u30BB\u30FC\u30E0",
1532
+ save: "\u30BB\u30FC\u30D6",
1533
+ saw: "\u30BD\u30FC",
1534
+ say: "\u30BB\u30A4",
1535
+ scene: "\u30B7\u30FC\u30F3",
1536
+ school: "\u30B9\u30AF\u30FC\u30EB",
1537
+ science: "\u30B5\u30A4\u30A2\u30F3\u30B9",
1538
+ score: "\u30B9\u30B3\u30FC",
1539
+ screen: "\u30B9\u30AF\u30EA\u30FC\u30F3",
1540
+ sea: "\u30B7\u30FC",
1541
+ search: "\u30B5\u30FC\u30C1",
1542
+ season: "\u30B7\u30FC\u30B6\u30F3",
1543
+ seat: "\u30B7\u30FC\u30C8",
1544
+ second: "\u30BB\u30AB\u30F3\u30C9",
1545
+ secret: "\u30B7\u30FC\u30AF\u30E9\u30C3\u30C8",
1546
+ see: "\u30B7\u30FC",
1547
+ seem: "\u30B7\u30FC\u30E0",
1548
+ seen: "\u30B7\u30FC\u30F3",
1549
+ self: "\u30BB\u30EB\u30D5",
1550
+ sell: "\u30BB\u30EB",
1551
+ send: "\u30BB\u30F3\u30C9",
1552
+ sense: "\u30BB\u30F3\u30B9",
1553
+ sent: "\u30BB\u30F3\u30C8",
1554
+ sentence: "\u30BB\u30F3\u30BF\u30F3\u30B9",
1555
+ serve: "\u30B5\u30FC\u30D6",
1556
+ service: "\u30B5\u30FC\u30F4\u30A1\u30B9",
1557
+ set: "\u30BB\u30C3\u30C8",
1558
+ settle: "\u30BB\u30BF\u30EB",
1559
+ seven: "\u30BB\u30F4\u30A1\u30F3",
1560
+ several: "\u30BB\u30D6\u30E9\u30EB",
1561
+ shall: "\u30B7\u30E3\u30EB",
1562
+ share: "\u30B7\u30A7\u30FC",
1563
+ she: "\u30B7\u30FC",
1564
+ ship: "\u30B7\u30C3\u30D7",
1565
+ short: "\u30B7\u30E7\u30FC\u30C8",
1566
+ should: "\u30B7\u30E5\u30C3\u30C9",
1567
+ shout: "\u30B7\u30E3\u30A6\u30C8",
1568
+ show: "\u30B7\u30E7\u30FC",
1569
+ side: "\u30B5\u30A4\u30C9",
1570
+ sight: "\u30B5\u30A4\u30C8",
1571
+ sign: "\u30B5\u30A4\u30F3",
1572
+ silver: "\u30B7\u30EB\u30F4\u30A1\u30FC",
1573
+ simple: "\u30B7\u30E0\u30D1\u30EB",
1574
+ since: "\u30B7\u30F3\u30B9",
1575
+ sing: "\u30B7\u30F3\u30B0",
1576
+ single: "\u30B7\u30F3\u30B0\u30AC\u30EB",
1577
+ sir: "\u30B5\u30FC",
1578
+ sister: "\u30B7\u30B9\u30BF\u30FC",
1579
+ sit: "\u30B7\u30C3\u30C8",
1580
+ six: "\u30B7\u30C3\u30AF\u30B9",
1581
+ size: "\u30B5\u30A4\u30BA",
1582
+ skill: "\u30B9\u30AD\u30EB",
1583
+ skin: "\u30B9\u30AD\u30F3",
1584
+ sky: "\u30B9\u30AB\u30A4",
1585
+ sleep: "\u30B9\u30EA\u30FC\u30D7",
1586
+ slow: "\u30B9\u30ED\u30FC",
1587
+ small: "\u30B9\u30E2\u30FC\u30EB",
1588
+ smile: "\u30B9\u30DE\u30A4\u30EB",
1589
+ smoke: "\u30B9\u30E2\u30FC\u30AF",
1590
+ snow: "\u30B9\u30CE\u30FC",
1591
+ so: "\u30BD\u30FC",
1592
+ soft: "\u30BD\u30D5\u30C8",
1593
+ soldier: "\u30BD\u30FC\u30EB\u30B8\u30E3\u30FC",
1594
+ some: "\u30B5\u30E0",
1595
+ someone: "\u30B5\u30E0\u30EF\u30F3",
1596
+ something: "\u30B5\u30E0\u30B7\u30F3\u30B0",
1597
+ sometimes: "\u30B5\u30E0\u30BF\u30A4\u30E0\u30BA",
1598
+ son: "\u30B5\u30F3",
1599
+ song: "\u30BD\u30F3\u30B0",
1600
+ soon: "\u30B9\u30FC\u30F3",
1601
+ sound: "\u30B5\u30A6\u30F3\u30C9",
1602
+ south: "\u30B5\u30A6\u30B9",
1603
+ space: "\u30B9\u30DA\u30FC\u30B9",
1604
+ speak: "\u30B9\u30D4\u30FC\u30AF",
1605
+ special: "\u30B9\u30DA\u30B7\u30E3\u30EB",
1606
+ speed: "\u30B9\u30D4\u30FC\u30C9",
1607
+ spell: "\u30B9\u30DA\u30EB",
1608
+ spend: "\u30B9\u30DA\u30F3\u30C9",
1609
+ sport: "\u30B9\u30DD\u30FC\u30C8",
1610
+ spring: "\u30B9\u30D7\u30EA\u30F3\u30B0",
1611
+ square: "\u30B9\u30AF\u30A6\u30A7\u30FC",
1612
+ stage: "\u30B9\u30C6\u30FC\u30B8",
1613
+ stand: "\u30B9\u30BF\u30F3\u30C9",
1614
+ star: "\u30B9\u30BF\u30FC",
1615
+ start: "\u30B9\u30BF\u30FC\u30C8",
1616
+ state: "\u30B9\u30C6\u30FC\u30C8",
1617
+ station: "\u30B9\u30C6\u30FC\u30B7\u30E3\u30F3",
1618
+ stay: "\u30B9\u30C6\u30A4",
1619
+ step: "\u30B9\u30C6\u30C3\u30D7",
1620
+ stick: "\u30B9\u30C6\u30A3\u30C3\u30AF",
1621
+ still: "\u30B9\u30C6\u30A3\u30EB",
1622
+ stone: "\u30B9\u30C8\u30FC\u30F3",
1623
+ stood: "\u30B9\u30C8\u30A5\u30C3\u30C9",
1624
+ stop: "\u30B9\u30C8\u30C3\u30D7",
1625
+ store: "\u30B9\u30C8\u30FC",
1626
+ story: "\u30B9\u30C8\u30EA\u30FC",
1627
+ straight: "\u30B9\u30C8\u30EC\u30A4\u30C8",
1628
+ strange: "\u30B9\u30C8\u30EC\u30FC\u30F3\u30B8",
1629
+ street: "\u30B9\u30C8\u30EA\u30FC\u30C8",
1630
+ stretch: "\u30B9\u30C8\u30EC\u30C3\u30C1",
1631
+ strong: "\u30B9\u30C8\u30ED\u30F3\u30B0",
1632
+ student: "\u30B9\u30C8\u30A5\u30FC\u30C0\u30F3\u30C8",
1633
+ study: "\u30B9\u30BF\u30C7\u30A3\u30FC",
1634
+ sub: "\u30B5\u30C3\u30D6",
1635
+ subscribe: "\u30B5\u30D6\u30B9\u30AF\u30E9\u30A4\u30D6",
1636
+ subscriber: "\u30B5\u30D6\u30B9\u30AF\u30E9\u30A4\u30D0\u30FC",
1637
+ such: "\u30B5\u30C3\u30C1",
1638
+ sudden: "\u30B5\u30C0\u30F3",
1639
+ suit: "\u30B9\u30FC\u30C8",
1640
+ summer: "\u30B5\u30DE\u30FC",
1641
+ sun: "\u30B5\u30F3",
1642
+ super: "\u30B9\u30FC\u30D1\u30FC",
1643
+ support: "\u30B5\u30DD\u30FC\u30C8",
1644
+ sure: "\u30B7\u30E5\u30FC",
1645
+ surprise: "\u30B5\u30FC\u30D7\u30E9\u30A4\u30BA",
1646
+ sweet: "\u30B9\u30A6\u30A3\u30FC\u30C8",
1647
+ system: "\u30B7\u30B9\u30BF\u30E0",
1648
+ table: "\u30C6\u30FC\u30D0\u30EB",
1649
+ tail: "\u30C6\u30A4\u30EB",
1650
+ take: "\u30C6\u30FC\u30AF",
1651
+ talk: "\u30C8\u30FC\u30AF",
1652
+ tall: "\u30C8\u30FC\u30EB",
1653
+ taste: "\u30C6\u30FC\u30B9\u30C8",
1654
+ teach: "\u30C6\u30A3\u30FC\u30C1",
1655
+ teacher: "\u30C6\u30A3\u30FC\u30C1\u30E3\u30FC",
1656
+ team: "\u30C6\u30A3\u30FC\u30E0",
1657
+ tell: "\u30C6\u30EB",
1658
+ ten: "\u30C6\u30F3",
1659
+ term: "\u30BF\u30FC\u30E0",
1660
+ than: "\u30B6\u30F3",
1661
+ thank: "\u30B5\u30F3\u30AF",
1662
+ the: "\u30B6",
1663
+ their: "\u30BC\u30FC",
1664
+ them: "\u30BC\u30E0",
1665
+ then: "\u30BC\u30F3",
1666
+ there: "\u30BC\u30FC",
1667
+ these: "\u30C7\u30A3\u30FC\u30BA",
1668
+ they: "\u30BC\u30FC",
1669
+ thick: "\u30B7\u30C3\u30AF",
1670
+ thin: "\u30B7\u30F3",
1671
+ thing: "\u30B7\u30F3\u30B0",
1672
+ think: "\u30B7\u30F3\u30AF",
1673
+ third: "\u30B5\u30FC\u30C9",
1674
+ those: "\u30BE\u30A6\u30BA",
1675
+ though: "\u30BE\u30A6",
1676
+ thought: "\u30BD\u30FC\u30C8",
1677
+ three: "\u30B9\u30EA\u30FC",
1678
+ through: "\u30B9\u30EB\u30FC",
1679
+ throw: "\u30B9\u30ED\u30FC",
1680
+ tier: "\u30C6\u30A3\u30FC",
1681
+ time: "\u30BF\u30A4\u30E0",
1682
+ tiny: "\u30BF\u30A4\u30CB\u30FC",
1683
+ tired: "\u30BF\u30A4\u30E4\u30FC\u30C9",
1684
+ today: "\u30BF\u30C7\u30A4",
1685
+ together: "\u30BF\u30B2\u30B6\u30FC",
1686
+ told: "\u30C8\u30FC\u30EB\u30C9",
1687
+ tomorrow: "\u30BF\u30E2\u30ED\u30FC",
1688
+ tone: "\u30C8\u30FC\u30F3",
1689
+ too: "\u30C8\u30A5\u30FC",
1690
+ took: "\u30C8\u30A5\u30C3\u30AF",
1691
+ top: "\u30C8\u30C3\u30D7",
1692
+ total: "\u30C8\u30FC\u30BF\u30EB",
1693
+ touch: "\u30BF\u30C3\u30C1",
1694
+ toward: "\u30BF\u30A6\u30A9\u30FC\u30C9",
1695
+ town: "\u30BF\u30A6\u30F3",
1696
+ track: "\u30C8\u30E9\u30C3\u30AF",
1697
+ trade: "\u30C8\u30EC\u30FC\u30C9",
1698
+ train: "\u30C8\u30EC\u30A4\u30F3",
1699
+ travel: "\u30C8\u30E9\u30F4\u30A1\u30EB",
1700
+ tree: "\u30C8\u30EA\u30FC",
1701
+ trip: "\u30C8\u30EA\u30C3\u30D7",
1702
+ trouble: "\u30C8\u30E9\u30D0\u30EB",
1703
+ true: "\u30C8\u30EB\u30FC",
1704
+ trust: "\u30C8\u30E9\u30B9\u30C8",
1705
+ truth: "\u30C8\u30EB\u30FC\u30B9",
1706
+ try: "\u30C8\u30E9\u30A4",
1707
+ turn: "\u30BF\u30FC\u30F3",
1708
+ twelve: "\u30C4\u30A7\u30EB\u30D6",
1709
+ twenty: "\u30C4\u30A7\u30F3\u30C6\u30A3\u30FC",
1710
+ two: "\u30C8\u30A5\u30FC",
1711
+ type: "\u30BF\u30A4\u30D7",
1712
+ under: "\u30A2\u30F3\u30C0\u30FC",
1713
+ understand: "\u30A2\u30F3\u30C0\u30FC\u30B9\u30BF\u30F3\u30C9",
1714
+ unit: "\u30E6\u30FC\u30CA\u30C3\u30C8",
1715
+ until: "\u30A2\u30F3\u30C6\u30A3\u30EB",
1716
+ up: "\u30A2\u30C3\u30D7",
1717
+ upon: "\u30A2\u30DD\u30F3",
1718
+ us: "\u30A2\u30B9",
1719
+ use: "\u30E6\u30FC\u30B9",
1720
+ usual: "\u30E6\u30FC\u30B8\u30E3\u30EF\u30EB",
1721
+ valley: "\u30F4\u30A1\u30EA\u30FC",
1722
+ value: "\u30F4\u30A1\u30EB\u30E6\u30FC",
1723
+ various: "\u30F4\u30A7\u30EA\u30FC\u30A2\u30B9",
1724
+ verb: "\u30F4\u30A1\u30FC\u30D6",
1725
+ very: "\u30F4\u30A7\u30EA\u30FC",
1726
+ victory: "\u30F4\u30A3\u30AF\u30BF\u30FC\u30A4\u30FC",
1727
+ view: "\u30D6\u30E6\u30FC",
1728
+ viewer: "\u30D6\u30E6\u30FC\u30A2\u30FC",
1729
+ village: "\u30F4\u30A3\u30E9\u30B8",
1730
+ vip: "\u30F4\u30A3\u30FC\u30A2\u30A4\u30D4\u30FC",
1731
+ visit: "\u30F4\u30A3\u30B8\u30C3\u30C8",
1732
+ voice: "\u30F4\u30A9\u30A4\u30B9",
1733
+ wait: "\u30A6\u30A7\u30A4\u30C8",
1734
+ walk: "\u30A6\u30A9\u30FC\u30AF",
1735
+ wall: "\u30A6\u30A9\u30FC\u30EB",
1736
+ want: "\u30EF\u30F3\u30C8",
1737
+ war: "\u30A6\u30A9\u30FC",
1738
+ warm: "\u30A6\u30A9\u30FC\u30E0",
1739
+ was: "\u30EF\u30BA",
1740
+ wash: "\u30EF\u30B7\u30E5",
1741
+ watch: "\u30EF\u30C1",
1742
+ water: "\u30A6\u30A9\u30FC\u30BF\u30FC",
1743
+ wave: "\u30A6\u30A7\u30FC\u30D6",
1744
+ way: "\u30A6\u30A7\u30A4",
1745
+ we: "\u30A6\u30A3\u30FC",
1746
+ wear: "\u30A6\u30A7\u30FC",
1747
+ weather: "\u30A6\u30A7\u30B6\u30FC",
1748
+ week: "\u30A6\u30A3\u30FC\u30AF",
1749
+ weight: "\u30A6\u30A7\u30FC\u30C8",
1750
+ welcome: "\u30A6\u30A7\u30EB\u30AB\u30E0",
1751
+ well: "\u30A6\u30A7\u30EB",
1752
+ went: "\u30A6\u30A7\u30F3\u30C8",
1753
+ were: "\u30EF\u30FC",
1754
+ west: "\u30A6\u30A7\u30B9\u30C8",
1755
+ wheel: "\u30A6\u30A3\u30FC\u30EB",
1756
+ when: "\u30A6\u30A7\u30F3",
1757
+ where: "\u30A6\u30A7\u30FC",
1758
+ whether: "\u30A6\u30A7\u30B6\u30FC",
1759
+ which: "\u30A6\u30A3\u30C3\u30C1",
1760
+ while: "\u30EF\u30A4\u30EB",
1761
+ white: "\u30EF\u30A4\u30C8",
1762
+ who: "\u30D5\u30FC",
1763
+ whole: "\u30DB\u30FC\u30EB",
1764
+ whose: "\u30D5\u30FC\u30BA",
1765
+ why: "\u30EF\u30A4",
1766
+ wide: "\u30EF\u30A4\u30C9",
1767
+ wife: "\u30EF\u30A4\u30D5",
1768
+ wild: "\u30EF\u30A4\u30EB\u30C9",
1769
+ will: "\u30A6\u30A3\u30EB",
1770
+ win: "\u30A6\u30A3\u30F3",
1771
+ wind: "\u30EF\u30A4\u30F3\u30C9",
1772
+ window: "\u30A6\u30A3\u30F3\u30C9\u30FC",
1773
+ winter: "\u30A6\u30A3\u30F3\u30BF\u30FC",
1774
+ wire: "\u30EF\u30A4\u30E4\u30FC",
1775
+ wish: "\u30A6\u30A3\u30B7\u30E5",
1776
+ with: "\u30A6\u30A3\u30BA",
1777
+ without: "\u30A6\u30A3\u30B5\u30A6\u30C8",
1778
+ woman: "\u30A6\u30DE\u30F3",
1779
+ women: "\u30A6\u30A3\u30DE\u30F3",
1780
+ wonder: "\u30EF\u30F3\u30C0\u30FC",
1781
+ wood: "\u30A6\u30C3\u30C9",
1782
+ word: "\u30EF\u30FC\u30C9",
1783
+ work: "\u30EF\u30FC\u30AF",
1784
+ worry: "\u30EF\u30FC\u30A4\u30FC",
1785
+ would: "\u30A6\u30C3\u30C9",
1786
+ write: "\u30E9\u30A4\u30C8",
1787
+ wrong: "\u30ED\u30F3\u30B0",
1788
+ yard: "\u30E4\u30FC\u30C9",
1789
+ year: "\u30A4\u30FC",
1790
+ yellow: "\u30A4\u30A7\u30ED\u30FC",
1791
+ yes: "\u30A4\u30A7\u30B9",
1792
+ yesterday: "\u30A4\u30A7\u30B9\u30BF\u30FC\u30C7\u30A4",
1793
+ yet: "\u30A4\u30A7\u30C3\u30C8",
1794
+ young: "\u30E4\u30F3\u30B0",
1795
+ your: "\u30E8\u30FC",
1796
+ zero: "\u30B8\u30ED\u30FC",
1797
+ "can't": "\u30AD\u30E3\u30F3\u30C8",
1798
+ "won't": "\u30A6\u30A9\u30FC\u30F3\u30C8",
1799
+ "i'm": "\u30A2\u30A4\u30E0",
1800
+ "it's": "\u30A4\u30C3\u30C4",
1801
+ "you're": "\u30E6\u30FC",
1802
+ "we're": "\u30A6\u30A3\u30FC",
1803
+ "they're": "\u30BC\u30FC",
1804
+ "that's": "\u30B6\u30C3\u30C4",
1805
+ "there's": "\u30BC\u30FC\u30BA",
1806
+ "what's": "\u30EF\u30C3\u30C4",
1807
+ "let's": "\u30EC\u30C3\u30C4",
1808
+ "i've": "\u30A2\u30A4\u30D6",
1809
+ "you've": "\u30E6\u30FC\u30D6",
1810
+ "we've": "\u30A6\u30A3\u30FC\u30D6",
1811
+ "they've": "\u30BC\u30FC\u30D6",
1812
+ "i'll": "\u30A2\u30A4\u30EB",
1813
+ "you'll": "\u30E6\u30FC\u30EB",
1814
+ "he'll": "\u30D2\u30FC\u30EB",
1815
+ "she'll": "\u30B7\u30FC\u30EB",
1816
+ "we'll": "\u30A6\u30A3\u30FC\u30EB",
1817
+ "they'll": "\u30BC\u30FC\u30EB",
1818
+ "isn't": "\u30A4\u30B6\u30F3\u30C8",
1819
+ "aren't": "\u30A2\u30E9\u30F3\u30C8",
1820
+ "wasn't": "\u30EF\u30B6\u30F3\u30C8",
1821
+ "weren't": "\u30EF\u30FC\u30A2\u30F3\u30C8",
1822
+ "haven't": "\u30CF\u30F4\u30A1\u30F3\u30C8",
1823
+ "hasn't": "\u30CF\u30B6\u30F3\u30C8",
1824
+ "hadn't": "\u30CF\u30C0\u30F3\u30C8",
1825
+ "doesn't": "\u30C0\u30B6\u30F3\u30C8",
1826
+ "didn't": "\u30C7\u30A3\u30C0\u30F3\u30C8",
1827
+ "couldn't": "\u30AF\u30C0\u30F3\u30C8",
1828
+ "shouldn't": "\u30B7\u30E5\u30C0\u30F3\u30C8",
1829
+ "wouldn't": "\u30A6\u30C0\u30F3\u30C8"
1830
+ };
1831
+
1832
+ // src/languages/english.ts
1833
+ function getEnglishWord(word) {
1834
+ return english_words_default[word.toLowerCase()];
1835
+ }
1836
+ function phonicsToKatakana(rawWord) {
1837
+ let word = rawWord.toLowerCase();
1838
+ word = word.replace(/tion/g, "\u30B7\u30E7\u30F3").replace(/sion/g, "\u30B8\u30E7\u30F3").replace(/ture/g, "\u30C1\u30E3\u30FC").replace(/ight/g, "\u30A2\u30A4\u30C8").replace(/ough/g, "\u30AA\u30D5").replace(/ing$/g, "\u30A4\u30F3\u30B0").replace(/ed$/g, "\u30C9").replace(/er$/g, "\u30A2\u30FC").replace(/or$/g, "\u30AA\u30FC").replace(/ar$/g, "\u30A2\u30FC").replace(/al$/g, "\u30A2\u30EB");
1839
+ word = word.replace(/ch/g, "\u30C1").replace(/sh/g, "\u30B7\u30E5").replace(/ph/g, "\u30D5").replace(/th/g, "\u30B9").replace(/wh/g, "\u30DB").replace(/ck/g, "\u30C3\u30AF").replace(/qu/g, "\u30AF").replace(/kn/g, "\u30CA").replace(/wr/g, "\u30E9").replace(/ee/g, "\u30A4\u30FC").replace(/ea/g, "\u30A4\u30FC").replace(/oo/g, "\u30A6\u30FC").replace(/ai/g, "\u30A8\u30A4").replace(/ay/g, "\u30A8\u30A4").replace(/oa/g, "\u30AA\u30FC").replace(/ou/g, "\u30A2\u30A6").replace(/ow/g, "\u30AA\u30A6");
1840
+ word = word.replace(/str/g, "\u30B9\u30C8\u30E9").replace(/st/g, "\u30B9\u30C8").replace(/sp/g, "\u30B9\u30D4").replace(/sk/g, "\u30B9\u30AF").replace(/sm/g, "\u30B9\u30E1").replace(/sn/g, "\u30B9\u30CD").replace(/sw/g, "\u30B9\u30EF").replace(/gra/g, "\u30B0\u30E9").replace(/gri/g, "\u30B0\u30EA").replace(/gru/g, "\u30B0\u30EB").replace(/gre/g, "\u30B0\u30EC").replace(/gro/g, "\u30B0\u30ED").replace(/gr/g, "\u30B0\u30E9").replace(/tra/g, "\u30C8\u30E9").replace(/tri/g, "\u30C8\u30EA").replace(/tru/g, "\u30C8\u30A5\u30EB\u30FC").replace(/tre/g, "\u30C8\u30EC").replace(/tro/g, "\u30C8\u30ED").replace(/tr/g, "\u30C8\u30E9").replace(/bra/g, "\u30D6\u30E9").replace(/bri/g, "\u30D6\u30EA").replace(/bru/g, "\u30D6\u30EB").replace(/bre/g, "\u30D6\u30EC").replace(/bro/g, "\u30D6\u30ED").replace(/br/g, "\u30D6\u30E9").replace(/cra/g, "\u30AF\u30E9").replace(/cri/g, "\u30AF\u30EA").replace(/cru/g, "\u30AF\u30EB").replace(/cre/g, "\u30AF\u30EC").replace(/cro/g, "\u30AF\u30ED").replace(/cr/g, "\u30AF\u30E9").replace(/dra/g, "\u30C9\u30E9").replace(/dri/g, "\u30C9\u30EA").replace(/dru/g, "\u30C9\u30E9").replace(/dre/g, "\u30C9\u30EC").replace(/dro/g, "\u30C9\u30ED").replace(/dr/g, "\u30C9\u30E9").replace(/pla/g, "\u30D7\u30E9").replace(/pli/g, "\u30D7\u30EA").replace(/plu/g, "\u30D7\u30EB").replace(/ple/g, "\u30D7\u30EC").replace(/plo/g, "\u30D7\u30ED").replace(/pl/g, "\u30D7\u30EB").replace(/fla/g, "\u30D5\u30E9").replace(/fli/g, "\u30D5\u30EA").replace(/flu/g, "\u30D5\u30EB").replace(/fle/g, "\u30D5\u30EC").replace(/flo/g, "\u30D5\u30ED").replace(/fl/g, "\u30D5\u30EB");
1841
+ word = word.replace(/a([bcdfghjklmnpqrstvwxyz])e$/g, "\u30A8\u30A4$1").replace(/i([bcdfghjklmnpqrstvwxyz])e$/g, "\u30A2\u30A4$1").replace(/o([bcdfghjklmnpqrstvwxyz])e$/g, "\u30AA\u30FC$1").replace(/u([bcdfghjklmnpqrstvwxyz])e$/g, "\u30E6\u30FC$1");
1842
+ const cvTable = [
1843
+ [/kya/g, "\u30AD\u30E3"],
1844
+ [/kyu/g, "\u30AD\u30E5"],
1845
+ [/kyo/g, "\u30AD\u30E7"],
1846
+ [/sha/g, "\u30B7\u30E3"],
1847
+ [/shu/g, "\u30B7\u30E5"],
1848
+ [/sho/g, "\u30B7\u30E7"],
1849
+ [/shi/g, "\u30B7"],
1850
+ [/cha/g, "\u30C1\u30E3"],
1851
+ [/chu/g, "\u30C1\u30E5"],
1852
+ [/cho/g, "\u30C1\u30E7"],
1853
+ [/chi/g, "\u30C1"],
1854
+ [/tsu/g, "\u30C4"],
1855
+ [/fa/g, "\u30D5\u30A1"],
1856
+ [/fi/g, "\u30D5\u30A3"],
1857
+ [/fe/g, "\u30D5\u30A7"],
1858
+ [/fo/g, "\u30D5\u30A9"],
1859
+ [/fu/g, "\u30D5"],
1860
+ [/ja/g, "\u30B8\u30E3"],
1861
+ [/ju/g, "\u30B8\u30E5"],
1862
+ [/jo/g, "\u30B8\u30E7"],
1863
+ [/ji/g, "\u30B8"],
1864
+ [/va/g, "\u30F4\u30A1"],
1865
+ [/vi/g, "\u30F4\u30A3"],
1866
+ [/vu/g, "\u30F4"],
1867
+ [/ve/g, "\u30F4\u30A7"],
1868
+ [/vo/g, "\u30F4\u30A9"],
1869
+ [/ka/g, "\u30AB"],
1870
+ [/ki/g, "\u30AD"],
1871
+ [/ku/g, "\u30AF"],
1872
+ [/ke/g, "\u30B1"],
1873
+ [/ko/g, "\u30B3"],
1874
+ [/sa/g, "\u30B5"],
1875
+ [/si/g, "\u30B7"],
1876
+ [/su/g, "\u30B9"],
1877
+ [/se/g, "\u30BB"],
1878
+ [/so/g, "\u30BD"],
1879
+ [/ta/g, "\u30BF"],
1880
+ [/ti/g, "\u30C6\u30A3"],
1881
+ [/tu/g, "\u30C8\u30A5"],
1882
+ [/te/g, "\u30C6"],
1883
+ [/to/g, "\u30C8"],
1884
+ [/na/g, "\u30CA"],
1885
+ [/ni/g, "\u30CB"],
1886
+ [/nu/g, "\u30CC"],
1887
+ [/ne/g, "\u30CD"],
1888
+ [/no/g, "\u30CE"],
1889
+ [/ha/g, "\u30CF"],
1890
+ [/hi/g, "\u30D2"],
1891
+ [/he/g, "\u30D8"],
1892
+ [/ho/g, "\u30DB"],
1893
+ [/ma/g, "\u30DE"],
1894
+ [/mi/g, "\u30DF"],
1895
+ [/mu/g, "\u30E0"],
1896
+ [/me/g, "\u30E1"],
1897
+ [/mo/g, "\u30E2"],
1898
+ [/ya/g, "\u30E4"],
1899
+ [/yu/g, "\u30E6"],
1900
+ [/yo/g, "\u30E8"],
1901
+ [/ra/g, "\u30E9"],
1902
+ [/ri/g, "\u30EA"],
1903
+ [/ru/g, "\u30EB"],
1904
+ [/re/g, "\u30EC"],
1905
+ [/ro/g, "\u30ED"],
1906
+ [/la/g, "\u30E9"],
1907
+ [/li/g, "\u30EA"],
1908
+ [/lu/g, "\u30EB"],
1909
+ [/le/g, "\u30EC"],
1910
+ [/lo/g, "\u30ED"],
1911
+ [/wa/g, "\u30EF"],
1912
+ [/wo/g, "\u30A6\u30A9"],
1913
+ [/ga/g, "\u30AC"],
1914
+ [/gi/g, "\u30AE"],
1915
+ [/gu/g, "\u30B0"],
1916
+ [/ge/g, "\u30B2"],
1917
+ [/go/g, "\u30B4"],
1918
+ [/za/g, "\u30B6"],
1919
+ [/zu/g, "\u30BA"],
1920
+ [/ze/g, "\u30BC"],
1921
+ [/zo/g, "\u30BE"],
1922
+ [/da/g, "\u30C0"],
1923
+ [/di/g, "\u30C7\u30A3"],
1924
+ [/du/g, "\u30C9\u30A5"],
1925
+ [/de/g, "\u30C7"],
1926
+ [/do/g, "\u30C9"],
1927
+ [/ba/g, "\u30D0"],
1928
+ [/bi/g, "\u30D3"],
1929
+ [/bu/g, "\u30D6"],
1930
+ [/be/g, "\u30D9"],
1931
+ [/bo/g, "\u30DC"],
1932
+ [/pa/g, "\u30D1"],
1933
+ [/pi/g, "\u30D4"],
1934
+ [/pu/g, "\u30D7"],
1935
+ [/pe/g, "\u30DA"],
1936
+ [/po/g, "\u30DD"],
1937
+ [/ca/g, "\u30AB"],
1938
+ [/cu/g, "\u30AF"],
1939
+ [/co/g, "\u30B3"],
1940
+ [/ci/g, "\u30B7"],
1941
+ [/ce/g, "\u30BB"],
1942
+ [/a/g, "\u30A2"],
1943
+ [/i/g, "\u30A4"],
1944
+ [/u/g, "\u30A6"],
1945
+ [/e/g, "\u30A8"],
1946
+ [/o/g, "\u30AA"]
1947
+ ];
1948
+ for (const [pattern, rep] of cvTable) {
1949
+ word = word.replace(pattern, rep);
1950
+ }
1951
+ const consonantTable = [
1952
+ [/b/g, "\u30D6"],
1953
+ [/c/g, "\u30AF"],
1954
+ [/d/g, "\u30C9"],
1955
+ [/f/g, "\u30D5"],
1956
+ [/g/g, "\u30B0"],
1957
+ [/h/g, "\u30CF"],
1958
+ [/j/g, "\u30B8"],
1959
+ [/k/g, "\u30AF"],
1960
+ [/l/g, "\u30EB"],
1961
+ [/m/g, "\u30E0"],
1962
+ [/n/g, "\u30F3"],
1963
+ [/p/g, "\u30D7"],
1964
+ [/q/g, "\u30AF"],
1965
+ [/r/g, "\u30EB"],
1966
+ [/s/g, "\u30B9"],
1967
+ [/t/g, "\u30C8"],
1968
+ [/v/g, "\u30F4"],
1969
+ [/w/g, "\u30A6"],
1970
+ [/x/g, "\u30AF\u30B9"],
1971
+ [/y/g, "\u30A4"],
1972
+ [/z/g, "\u30BA"]
1973
+ ];
1974
+ for (const [pattern, rep] of consonantTable) {
1975
+ word = word.replace(pattern, rep);
1976
+ }
1977
+ word = word.replace(/[a-z]/g, "");
1978
+ return word || rawWord;
1979
+ }
1980
+
1981
+ // src/dicts/korean.json
1982
+ var korean_default = {
1983
+ phrases: {
1984
+ \uC548\uB155\uD558\uC138\uC694: "\u30A2\u30F3\u30CB\u30E7\u30F3\u30CF\u30BB\u30E8",
1985
+ \uC548\uB155: "\u30A2\u30F3\u30CB\u30E7\u30F3",
1986
+ \uAC10\uC0AC\uD569\uB2C8\uB2E4: "\u30AB\u30E0\u30B5\u30CF\u30E0\u30CB\u30C0",
1987
+ \uACE0\uB9C8\uC6CC: "\u30B3\u30DE\u30A6\u30A9",
1988
+ \uC8C4\uC1A1\uD569\uB2C8\uB2E4: "\u30C1\u30A7\u30BD\u30F3\u30CF\u30E0\u30CB\u30C0",
1989
+ \uBBF8\uC548\uD574: "\u30DF\u30A2\u30CD",
1990
+ \uB124: "\u30CD\u30FC",
1991
+ \uC544\uB2C8\uC694: "\u30A2\u30CB\u30E8",
1992
+ \uB300\uBC15: "\u30C6\u30D0\u30AF",
1993
+ \uC9C4\uC9DC: "\u30C1\u30F3\u30C1\u30E3",
1994
+ \uD654\uC774\uD305: "\u30D5\u30A1\u30A4\u30C6\u30A3\u30F3",
1995
+ \uD30C\uC774\uD305: "\u30D1\u30A4\u30C6\u30A3\u30F3",
1996
+ \uC0AC\uB791\uD574: "\u30B5\u30E9\u30F3\u30D8",
1997
+ \uC0AC\uB791\uD574\uC694: "\u30B5\u30E9\u30F3\u30D8\u30E8",
1998
+ \uC7AC\uBBF8\uC788\uC5B4\uC694: "\u30C1\u30A7\u30DF\u30A4\u30C3\u30BD\u30E8",
1999
+ \uC7AC\uBC0C\uC5B4\uC694: "\u30C1\u30A7\u30DF\u30C3\u30BD\u30E8",
2000
+ \uC218\uACE0\uD588\uC5B4\uC694: "\u30B9\u30B4\u30D8\u30C3\u30BD\u30E8",
2001
+ \uC218\uACE0\uD588\uC5B4: "\u30B9\u30B4\u30D8\u30C3\u30BD",
2002
+ \uC798\uC790\uC694: "\u30C1\u30E3\u30EB\u30B8\u30E3\u30E8"
2003
+ },
2004
+ chosung_jungsung_map: [
2005
+ [
2006
+ "\u30AB",
2007
+ "\u30B1",
2008
+ "\u30AD\u30E3",
2009
+ "\u30AD\u30A7",
2010
+ "\u30B3",
2011
+ "\u30B1",
2012
+ "\u30AD\u30E7",
2013
+ "\u30AD\u30A7",
2014
+ "\u30B3",
2015
+ "\u30AF\u30A1",
2016
+ "\u30AF\u30A7",
2017
+ "\u30AF\u30A7",
2018
+ "\u30AD\u30E7",
2019
+ "\u30AF",
2020
+ "\u30AF\u30A9",
2021
+ "\u30AF\u30A7",
2022
+ "\u30AF\u30A3",
2023
+ "\u30AD\u30E5",
2024
+ "\u30AF",
2025
+ "\u30AF\u30A3",
2026
+ "\u30AD"
2027
+ ],
2028
+ [
2029
+ "\u30C3\u30AB",
2030
+ "\u30C3\u30B1",
2031
+ "\u30C3\u30AD\u30E3",
2032
+ "\u30C3\u30AD\u30A7",
2033
+ "\u30C3\u30B3",
2034
+ "\u30C3\u30B1",
2035
+ "\u30C3\u30AD\u30E7",
2036
+ "\u30C3\u30AD\u30A7",
2037
+ "\u30C3\u30B3",
2038
+ "\u30C3\u30AF\u30A1",
2039
+ "\u30C3\u30AF\u30A7",
2040
+ "\u30C3\u30AF\u30A7",
2041
+ "\u30C3\u30AD\u30E7",
2042
+ "\u30C3\u30AF",
2043
+ "\u30C3\u30AF\u30A9",
2044
+ "\u30C3\u30AF\u30A7",
2045
+ "\u30C3\u30AF\u30A3",
2046
+ "\u30C3\u30AD\u30E5",
2047
+ "\u30C3\u30AF",
2048
+ "\u30C3\u30AF\u30A3",
2049
+ "\u30C3\u30AD"
2050
+ ],
2051
+ [
2052
+ "\u30CA",
2053
+ "\u30CD",
2054
+ "\u30CB\u30E3",
2055
+ "\u30CB\u30A7",
2056
+ "\u30CE",
2057
+ "\u30CD",
2058
+ "\u30CB\u30E7",
2059
+ "\u30CB\u30A7",
2060
+ "\u30CE",
2061
+ "\u30CA",
2062
+ "\u30CD",
2063
+ "\u30CD",
2064
+ "\u30CB\u30E7",
2065
+ "\u30CC",
2066
+ "\u30CC\u30A9",
2067
+ "\u30CD",
2068
+ "\u30CC\u30A3",
2069
+ "\u30CB\u30E5",
2070
+ "\u30CC",
2071
+ "\u30CC\u30A3",
2072
+ "\u30CB"
2073
+ ],
2074
+ [
2075
+ "\u30BF",
2076
+ "\u30C6",
2077
+ "\u30C1\u30E3",
2078
+ "\u30C1\u30A7",
2079
+ "\u30C8",
2080
+ "\u30C6",
2081
+ "\u30C1\u30E7",
2082
+ "\u30C1\u30A7",
2083
+ "\u30C8",
2084
+ "\u30C8\u30A1",
2085
+ "\u30C8\u30A7",
2086
+ "\u30C8\u30A7",
2087
+ "\u30C1\u30E7",
2088
+ "\u30C8\u30A5",
2089
+ "\u30C8\u30A9",
2090
+ "\u30C8\u30A7",
2091
+ "\u30C8\u30A3",
2092
+ "\u30C1\u30E5",
2093
+ "\u30C8\u30A5",
2094
+ "\u30C8\u30A3",
2095
+ "\u30C6\u30A3"
2096
+ ],
2097
+ [
2098
+ "\u30C3\u30BF",
2099
+ "\u30C3\u30C6",
2100
+ "\u30C3\u30C1\u30E3",
2101
+ "\u30C3\u30C1\u30A7",
2102
+ "\u30C3\u30C8",
2103
+ "\u30C3\u30C6",
2104
+ "\u30C3\u30C1\u30E7",
2105
+ "\u30C3\u30C1\u30A7",
2106
+ "\u30C3\u30C8",
2107
+ "\u30C3\u30C8\u30A1",
2108
+ "\u30C3\u30C8\u30A7",
2109
+ "\u30C3\u30C8\u30A7",
2110
+ "\u30C3\u30C1\u30E7",
2111
+ "\u30C3\u30C8\u30A5",
2112
+ "\u30C3\u30C8\u30A9",
2113
+ "\u30C3\u30C8\u30A7",
2114
+ "\u30C3\u30C8\u30A3",
2115
+ "\u30C3\u30C1\u30E5",
2116
+ "\u30C3\u30C8\u30A5",
2117
+ "\u30C3\u30C8\u30A3",
2118
+ "\u30C3\u30C6\u30A3"
2119
+ ],
2120
+ [
2121
+ "\u30E9",
2122
+ "\u30EC",
2123
+ "\u30EA\u30E3",
2124
+ "\u30EA\u30A7",
2125
+ "\u30ED",
2126
+ "\u30EC",
2127
+ "\u30EA\u30E7",
2128
+ "\u30EA\u30A7",
2129
+ "\u30ED",
2130
+ "\u30E9",
2131
+ "\u30EC",
2132
+ "\u30EC",
2133
+ "\u30EA\u30E7",
2134
+ "\u30EB",
2135
+ "\u30EB\u30A9",
2136
+ "\u30EC",
2137
+ "\u30EB\u30A3",
2138
+ "\u30EA\u30E5",
2139
+ "\u30EB",
2140
+ "\u30EB\u30A3",
2141
+ "\u30EA"
2142
+ ],
2143
+ [
2144
+ "\u30DE",
2145
+ "\u30E1",
2146
+ "\u30DF\u30E3",
2147
+ "\u30DF\u30A7",
2148
+ "\u30E2",
2149
+ "\u30E1",
2150
+ "\u30DF\u30E7",
2151
+ "\u30DF\u30A7",
2152
+ "\u30E2",
2153
+ "\u30DE",
2154
+ "\u30E1",
2155
+ "\u30E1",
2156
+ "\u30DF\u30E7",
2157
+ "\u30E0",
2158
+ "\u30E0\u30A9",
2159
+ "\u30E1",
2160
+ "\u30E0\u30A3",
2161
+ "\u30DF\u30E5",
2162
+ "\u30E0",
2163
+ "\u30E0\u30A3",
2164
+ "\u30DF"
2165
+ ],
2166
+ [
2167
+ "\u30D1",
2168
+ "\u30DA",
2169
+ "\u30D4\u30E3",
2170
+ "\u30D4\u30A7",
2171
+ "\u30DD",
2172
+ "\u30DA",
2173
+ "\u30D4\u30E7",
2174
+ "\u30D4\u30A7",
2175
+ "\u30DD",
2176
+ "\u30D1",
2177
+ "\u30DA",
2178
+ "\u30DA",
2179
+ "\u30D4\u30E7",
2180
+ "\u30D7",
2181
+ "\u30D7\u30A9",
2182
+ "\u30DA",
2183
+ "\u30D4\u30A3",
2184
+ "\u30D4\u30E5",
2185
+ "\u30D7",
2186
+ "\u30D4\u30A3",
2187
+ "\u30D4"
2188
+ ],
2189
+ [
2190
+ "\u30C3\u30D1",
2191
+ "\u30C3\u30DA",
2192
+ "\u30C3\u30D4\u30E3",
2193
+ "\u30C3\u30D4\u30A7",
2194
+ "\u30C3\u30DD",
2195
+ "\u30C3\u30DA",
2196
+ "\u30C3\u30D4\u30E7",
2197
+ "\u30C3\u30D4\u30A7",
2198
+ "\u30C3\u30DD",
2199
+ "\u30C3\u30D1",
2200
+ "\u30C3\u30DA",
2201
+ "\u30C3\u30DA",
2202
+ "\u30C3\u30D4\u30E7",
2203
+ "\u30C3\u30D7",
2204
+ "\u30C3\u30D7\u30A9",
2205
+ "\u30C3\u30DA",
2206
+ "\u30C3\u30D4\u30A3",
2207
+ "\u30C3\u30D4\u30E5",
2208
+ "\u30C3\u30D7",
2209
+ "\u30C3\u30D4\u30A3",
2210
+ "\u30C3\u30D4"
2211
+ ],
2212
+ [
2213
+ "\u30B5",
2214
+ "\u30BB",
2215
+ "\u30B7\u30E3",
2216
+ "\u30B7\u30A7",
2217
+ "\u30BD",
2218
+ "\u30BB",
2219
+ "\u30B7\u30E7",
2220
+ "\u30B7\u30A7",
2221
+ "\u30BD",
2222
+ "\u30B9\u30A1",
2223
+ "\u30B9\u30A7",
2224
+ "\u30B9\u30A7",
2225
+ "\u30B7\u30E7",
2226
+ "\u30B9",
2227
+ "\u30B9\u30A9",
2228
+ "\u30B9\u30A7",
2229
+ "\u30B9\u30A3",
2230
+ "\u30B7\u30E5",
2231
+ "\u30B9",
2232
+ "\u30B9\u30A3",
2233
+ "\u30B7"
2234
+ ],
2235
+ [
2236
+ "\u30C3\u30B5",
2237
+ "\u30C3\u30BB",
2238
+ "\u30C3\u30B7\u30E3",
2239
+ "\u30C3\u30B7\u30A7",
2240
+ "\u30C3\u30BD",
2241
+ "\u30C3\u30BB",
2242
+ "\u30C3\u30B7\u30E7",
2243
+ "\u30C3\u30B7\u30A7",
2244
+ "\u30C3\u30BD",
2245
+ "\u30C3\u30B9\u30A1",
2246
+ "\u30C3\u30B9\u30A7",
2247
+ "\u30C3\u30B9\u30A7",
2248
+ "\u30C3\u30B7\u30E7",
2249
+ "\u30C3\u30B9",
2250
+ "\u30C3\u30B9\u30A9",
2251
+ "\u30C3\u30B9\u30A7",
2252
+ "\u30C3\u30B9\u30A3",
2253
+ "\u30C3\u30B7\u30E5",
2254
+ "\u30C3\u30B9",
2255
+ "\u30C3\u30B9\u30A3",
2256
+ "\u30C3\u30B7"
2257
+ ],
2258
+ [
2259
+ "\u30A2",
2260
+ "\u30A8",
2261
+ "\u30E4",
2262
+ "\u30A4\u30A7",
2263
+ "\u30AA",
2264
+ "\u30A8",
2265
+ "\u30E8",
2266
+ "\u30A4\u30A7",
2267
+ "\u30AA",
2268
+ "\u30EF",
2269
+ "\u30A6\u30A7",
2270
+ "\u30A6\u30A7",
2271
+ "\u30E8",
2272
+ "\u30A6",
2273
+ "\u30A6\u30A9",
2274
+ "\u30A6\u30A7",
2275
+ "\u30A6\u30A3",
2276
+ "\u30E6",
2277
+ "\u30A6",
2278
+ "\u30A6\u30A3",
2279
+ "\u30A4"
2280
+ ],
2281
+ [
2282
+ "\u30C1\u30E3",
2283
+ "\u30C1\u30A7",
2284
+ "\u30C1\u30E3",
2285
+ "\u30C1\u30A7",
2286
+ "\u30C1\u30E7",
2287
+ "\u30C1\u30A7",
2288
+ "\u30C1\u30E7",
2289
+ "\u30C1\u30A7",
2290
+ "\u30C1\u30E7",
2291
+ "\u30C1\u30E3",
2292
+ "\u30C1\u30A7",
2293
+ "\u30C1\u30A7",
2294
+ "\u30C1\u30E7",
2295
+ "\u30C1\u30E5",
2296
+ "\u30C1\u30E7",
2297
+ "\u30C1\u30A7",
2298
+ "\u30C1",
2299
+ "\u30C1\u30E5",
2300
+ "\u30C1\u30E5",
2301
+ "\u30C1",
2302
+ "\u30C1"
2303
+ ],
2304
+ [
2305
+ "\u30C3\u30C1\u30E3",
2306
+ "\u30C3\u30C1\u30A7",
2307
+ "\u30C3\u30C1\u30E3",
2308
+ "\u30C3\u30C1\u30A7",
2309
+ "\u30C3\u30C1\u30E7",
2310
+ "\u30C3\u30C1\u30A7",
2311
+ "\u30C3\u30C1\u30E7",
2312
+ "\u30C3\u30C1\u30A7",
2313
+ "\u30C3\u30C1\u30E7",
2314
+ "\u30C3\u30C1\u30E3",
2315
+ "\u30C3\u30C1\u30A7",
2316
+ "\u30C3\u30C1\u30A7",
2317
+ "\u30C3\u30C1\u30E7",
2318
+ "\u30C3\u30C1\u30E5",
2319
+ "\u30C3\u30C1\u30E7",
2320
+ "\u30C3\u30C1\u30A7",
2321
+ "\u30C3\u30C1",
2322
+ "\u30C3\u30C1\u30E5",
2323
+ "\u30C3\u30C1\u30E5",
2324
+ "\u30C3\u30C1",
2325
+ "\u30C3\u30C1"
2326
+ ],
2327
+ [
2328
+ "\u30C1\u30E3",
2329
+ "\u30C1\u30A7",
2330
+ "\u30C1\u30E3",
2331
+ "\u30C1\u30A7",
2332
+ "\u30C1\u30E7",
2333
+ "\u30C1\u30A7",
2334
+ "\u30C1\u30E7",
2335
+ "\u30C1\u30A7",
2336
+ "\u30C1\u30E7",
2337
+ "\u30C1\u30E3",
2338
+ "\u30C1\u30A7",
2339
+ "\u30C1\u30A7",
2340
+ "\u30C1\u30E7",
2341
+ "\u30C1\u30E5",
2342
+ "\u30C1\u30E7",
2343
+ "\u30C1\u30A7",
2344
+ "\u30C1",
2345
+ "\u30C1\u30E5",
2346
+ "\u30C1\u30E5",
2347
+ "\u30C1",
2348
+ "\u30C1"
2349
+ ],
2350
+ [
2351
+ "\u30AB",
2352
+ "\u30B1",
2353
+ "\u30AD\u30E3",
2354
+ "\u30AD\u30A7",
2355
+ "\u30B3",
2356
+ "\u30B1",
2357
+ "\u30AD\u30E7",
2358
+ "\u30AD\u30A7",
2359
+ "\u30B3",
2360
+ "\u30AF\u30A1",
2361
+ "\u30AF\u30A7",
2362
+ "\u30AF\u30A7",
2363
+ "\u30AD\u30E7",
2364
+ "\u30AF",
2365
+ "\u30AF\u30A9",
2366
+ "\u30AF\u30A7",
2367
+ "\u30AF\u30A3",
2368
+ "\u30AD\u30E5",
2369
+ "\u30AF",
2370
+ "\u30AF\u30A3",
2371
+ "\u30AD"
2372
+ ],
2373
+ [
2374
+ "\u30BF",
2375
+ "\u30C6",
2376
+ "\u30C1\u30E3",
2377
+ "\u30C1\u30A7",
2378
+ "\u30C8",
2379
+ "\u30C6",
2380
+ "\u30C1\u30E7",
2381
+ "\u30C1\u30A7",
2382
+ "\u30C8",
2383
+ "\u30C8\u30A1",
2384
+ "\u30C8\u30A7",
2385
+ "\u30C8\u30A7",
2386
+ "\u30C1\u30E7",
2387
+ "\u30C8\u30A5",
2388
+ "\u30C8\u30A9",
2389
+ "\u30C8\u30A7",
2390
+ "\u30C8\u30A3",
2391
+ "\u30C1\u30E5",
2392
+ "\u30C8\u30A5",
2393
+ "\u30C8\u30A3",
2394
+ "\u30C6\u30A3"
2395
+ ],
2396
+ [
2397
+ "\u30D1",
2398
+ "\u30DA",
2399
+ "\u30D4\u30E3",
2400
+ "\u30D4\u30A7",
2401
+ "\u30DD",
2402
+ "\u30DA",
2403
+ "\u30D4\u30E7",
2404
+ "\u30D4\u30A7",
2405
+ "\u30DD",
2406
+ "\u30D1",
2407
+ "\u30DA",
2408
+ "\u30DA",
2409
+ "\u30D4\u30E7",
2410
+ "\u30D7",
2411
+ "\u30D7\u30A9",
2412
+ "\u30DA",
2413
+ "\u30D4\u30A3",
2414
+ "\u30D4\u30E5",
2415
+ "\u30D7",
2416
+ "\u30D4\u30A3",
2417
+ "\u30D4"
2418
+ ],
2419
+ [
2420
+ "\u30CF",
2421
+ "\u30D8",
2422
+ "\u30D2\u30E3",
2423
+ "\u30D2\u30A7",
2424
+ "\u30DB",
2425
+ "\u30D8",
2426
+ "\u30D2\u30E7",
2427
+ "\u30D2\u30A7",
2428
+ "\u30DB",
2429
+ "\u30D5\u30A1",
2430
+ "\u30D5\u30A7",
2431
+ "\u30D5\u30A7",
2432
+ "\u30D2\u30E7",
2433
+ "\u30D5",
2434
+ "\u30D5\u30A9",
2435
+ "\u30D5\u30A7",
2436
+ "\u30D5\u30A3",
2437
+ "\u30D2\u30E5",
2438
+ "\u30D5",
2439
+ "\u30D5\u30A3",
2440
+ "\u30D2"
2441
+ ]
2442
+ ],
2443
+ jongsung_map: [
2444
+ "",
2445
+ "\u30AF",
2446
+ "\u30AF",
2447
+ "\u30AF",
2448
+ "\u30F3",
2449
+ "\u30F3",
2450
+ "\u30F3",
2451
+ "\u30C3",
2452
+ "\u30EB",
2453
+ "\u30AF",
2454
+ "\u30E0",
2455
+ "\u30D7",
2456
+ "\u30EB",
2457
+ "\u30EB",
2458
+ "\u30D7",
2459
+ "\u30EB",
2460
+ "\u30E0",
2461
+ "\u30D7",
2462
+ "\u30D7",
2463
+ "\u30C3",
2464
+ "\u30C3",
2465
+ "\u30F3",
2466
+ "\u30C3",
2467
+ "\u30C3",
2468
+ "\u30AF",
2469
+ "\u30C3",
2470
+ "\u30D7",
2471
+ "\u30C3"
2472
+ ]
2473
+ };
2474
+
2475
+ // src/languages/korean.ts
2476
+ function isKorean(text) {
2477
+ return /[\uAC00-\uD7AF\u1100-\u11FF]/.test(text);
2478
+ }
2479
+ function decomposeHangulSyllable(code) {
2480
+ if (code < 44032 || code > 55203) {
2481
+ return null;
2482
+ }
2483
+ const idx = code - 44032;
2484
+ const l = Math.floor(idx / 588);
2485
+ const v = Math.floor(idx % 588 / 28);
2486
+ const t = idx % 28;
2487
+ return { l, v, t };
2488
+ }
2489
+ function convertKorean(text) {
2490
+ if (!isKorean(text)) return text;
2491
+ let processed = text;
2492
+ for (const [phrase, katakana] of Object.entries(korean_default.phrases)) {
2493
+ if (processed.includes(phrase)) {
2494
+ processed = processed.split(phrase).join(katakana);
2495
+ }
2496
+ }
2497
+ let result = "";
2498
+ const len = processed.length;
2499
+ for (let i = 0; i < len; i++) {
2500
+ const code = processed.charCodeAt(i);
2501
+ const syllable = decomposeHangulSyllable(code);
2502
+ if (!syllable) {
2503
+ result += processed[i];
2504
+ continue;
2505
+ }
2506
+ const { l, v, t } = syllable;
2507
+ const base = korean_default.chosung_jungsung_map[l]?.[v] || "";
2508
+ let batchimSound = korean_default.jongsung_map[t] || "";
2509
+ if (t > 0 && i + 1 < len) {
2510
+ const nextCode = processed.charCodeAt(i + 1);
2511
+ const nextSyllable = decomposeHangulSyllable(nextCode);
2512
+ if (nextSyllable && nextSyllable.l === 11) {
2513
+ if (t === 20) {
2514
+ batchimSound = "\u30C3";
2515
+ }
2516
+ }
2517
+ }
2518
+ result += base + batchimSound;
2519
+ }
2520
+ result = result.replace(/\s+([、。!?!?,.])/g, "$1");
2521
+ return result.replace(/[\s\u3000]+/g, " ").trim();
2522
+ }
2523
+
2524
+ // src/dicts/slang.json
2525
+ var slang_default = {
2526
+ slang: {
2527
+ w: "\u308F\u3089",
2528
+ ww: "\u308F\u3089\u308F\u3089",
2529
+ www: "\u308F\u3089\u308F\u3089",
2530
+ wwww: "\u308F\u3089\u308F\u3089",
2531
+ gg: "\u30B8\u30FC\u30B8\u30FC",
2532
+ ggs: "\u30B8\u30FC\u30B8\u30FC\u30BA",
2533
+ wp: "\u30A6\u30A7\u30EB\u30D7\u30EC\u30A4\u30C9",
2534
+ "gg wp": "\u30B8\u30FC\u30B8\u30FC \u30A6\u30A7\u30EB\u30D7\u30EC\u30A4\u30C9",
2535
+ gl: "\u30B0\u30C3\u30C9\u30E9\u30C3\u30AF",
2536
+ hf: "\u30CF\u30D6\u30D5\u30A1\u30F3",
2537
+ glhf: "\u30B0\u30C3\u30C9\u30E9\u30C3\u30AF \u30CF\u30D6\u30D5\u30A1\u30F3",
2538
+ ez: "\u30A4\u30FC\u30B8\u30FC",
2539
+ pog: "\u30DD\u30B0",
2540
+ poggers: "\u30DD\u30AC\u30FC\u30BA",
2541
+ pogchamp: "\u30DD\u30B0\u30C1\u30E3\u30F3\u30D7",
2542
+ kekw: "\u30B1\u30AF\u30C0\u30D6\u30EA\u30E5\u30FC",
2543
+ afk: "\u30A8\u30FC\u30A8\u30D5\u30B1\u30FC",
2544
+ brb: "\u30D3\u30FC\u30A2\u30FC\u30EB\u30D3\u30FC",
2545
+ lol: "\u30ED\u30EB",
2546
+ lmao: "\u30A8\u30EB\u30A8\u30E0\u30A8\u30FC\u30AA\u30FC",
2547
+ wtf: "\u30C0\u30D6\u30EA\u30E5\u30FC\u30C6\u30A3\u30FC\u30A8\u30D5",
2548
+ nt: "\u30CA\u30A4\u30B9\u30C8\u30E9\u30A4",
2549
+ kusa: "\u304F\u3055",
2550
+ bro: "\u30D6\u30ED",
2551
+ fps: "\u30A8\u30D5\u30D4\u30FC\u30A8\u30B9",
2552
+ rpg: "\u30A2\u30FC\u30EB\u30D4\u30FC\u30B8\u30FC",
2553
+ bgm: "\u30D3\u30FC\u30B8\u30FC\u30A8\u30E0",
2554
+ npc: "\u30A8\u30CC\u30D4\u30FC\u30B7\u30FC",
2555
+ pvp: "\u30D4\u30FC\u30D6\u30A4\u30D4\u30FC",
2556
+ pve: "\u30D4\u30FC\u30D6\u30A4\u30A4\u30FC",
2557
+ dps: "\u30C7\u30A3\u30FC\u30D4\u30FC\u30A8\u30B9",
2558
+ id: "\u30A2\u30A4\u30C7\u30A3\u30FC",
2559
+ url: "\u30E6\u30FC\u30A2\u30FC\u30EB\u30A8\u30EB",
2560
+ mp: "\u30A8\u30E0\u30D4\u30FC",
2561
+ se: "\u30A8\u30B9\u30A4\u30FC",
2562
+ op: "\u30AA\u30FC\u30D4\u30FC",
2563
+ ng: "\u30A8\u30CC\u30B8\u30FC",
2564
+ youtube: "\u30E6\u30FC\u30C1\u30E5\u30FC\u30D6",
2565
+ youtuber: "\u30E6\u30FC\u30C1\u30E5\u30FC\u30D0\u30FC",
2566
+ yt: "\u30EF\u30A4\u30C6\u30A3\u30FC",
2567
+ vtuber: "\u30D6\u30A4\u30C1\u30E5\u30FC\u30D0\u30FC",
2568
+ tiktok: "\u30C6\u30A3\u30C3\u30AF\u30C8\u30C3\u30AF",
2569
+ twitter: "\u30C4\u30A4\u30C3\u30BF\u30FC"
2570
+ },
2571
+ phrases: {
2572
+ "gg wp": "\u30B8\u30FC\u30B8\u30FC \u30A6\u30A7\u30EB\u30D7\u30EC\u30A4\u30C9"
2573
+ },
2574
+ words: {
2575
+ w: "\u308F\u3089",
2576
+ ww: "\u308F\u3089\u308F\u3089",
2577
+ www: "\u308F\u3089\u308F\u3089",
2578
+ wwww: "\u308F\u3089\u308F\u3089",
2579
+ gg: "\u30B8\u30FC\u30B8\u30FC",
2580
+ ggs: "\u30B8\u30FC\u30B8\u30FC\u30BA",
2581
+ wp: "\u30A6\u30A7\u30EB\u30D7\u30EC\u30A4\u30C9",
2582
+ gl: "\u30B0\u30C3\u30C9\u30E9\u30C3\u30AF",
2583
+ hf: "\u30CF\u30D6\u30D5\u30A1\u30F3",
2584
+ glhf: "\u30B0\u30C3\u30C9\u30E9\u30C3\u30AF \u30CF\u30D6\u30D5\u30A1\u30F3",
2585
+ ez: "\u30A4\u30FC\u30B8\u30FC",
2586
+ pog: "\u30DD\u30B0",
2587
+ poggers: "\u30DD\u30AC\u30FC\u30BA",
2588
+ pogchamp: "\u30DD\u30B0\u30C1\u30E3\u30F3\u30D7",
2589
+ kekw: "\u30B1\u30AF\u30C0\u30D6\u30EA\u30E5\u30FC",
2590
+ afk: "\u30A8\u30FC\u30A8\u30D5\u30B1\u30FC",
2591
+ brb: "\u30D3\u30FC\u30A2\u30FC\u30EB\u30D3\u30FC",
2592
+ lol: "\u30ED\u30EB",
2593
+ lmao: "\u30A8\u30EB\u30A8\u30E0\u30A8\u30FC\u30AA\u30FC",
2594
+ wtf: "\u30C0\u30D6\u30EA\u30E5\u30FC\u30C6\u30A3\u30FC\u30A8\u30D5",
2595
+ nt: "\u30CA\u30A4\u30B9\u30C8\u30E9\u30A4",
2596
+ kusa: "\u304F\u3055",
2597
+ bro: "\u30D6\u30ED",
2598
+ fps: "\u30A8\u30D5\u30D4\u30FC\u30A8\u30B9",
2599
+ rpg: "\u30A2\u30FC\u30EB\u30D4\u30FC\u30B8\u30FC",
2600
+ bgm: "\u30D3\u30FC\u30B8\u30FC\u30A8\u30E0",
2601
+ npc: "\u30A8\u30CC\u30D4\u30FC\u30B7\u30FC",
2602
+ pvp: "\u30D4\u30FC\u30D6\u30A4\u30D4\u30FC",
2603
+ pve: "\u30D4\u30FC\u30D6\u30A4\u30A4\u30FC",
2604
+ dps: "\u30C7\u30A3\u30FC\u30D4\u30FC\u30A8\u30B9",
2605
+ id: "\u30A2\u30A4\u30C7\u30A3\u30FC",
2606
+ url: "\u30E6\u30FC\u30A2\u30FC\u30EB\u30A8\u30EB",
2607
+ mp: "\u30A8\u30E0\u30D4\u30FC",
2608
+ se: "\u30A8\u30B9\u30A4\u30FC",
2609
+ op: "\u30AA\u30FC\u30D4\u30FC",
2610
+ ng: "\u30A8\u30CC\u30B8\u30FC",
2611
+ youtube: "\u30E6\u30FC\u30C1\u30E5\u30FC\u30D6",
2612
+ youtuber: "\u30E6\u30FC\u30C1\u30E5\u30FC\u30D0\u30FC",
2613
+ yt: "\u30EF\u30A4\u30C6\u30A3\u30FC",
2614
+ vtuber: "\u30D6\u30A4\u30C1\u30E5\u30FC\u30D0\u30FC",
2615
+ tiktok: "\u30C6\u30A3\u30C3\u30AF\u30C8\u30C3\u30AF",
2616
+ twitter: "\u30C4\u30A4\u30C3\u30BF\u30FC"
2617
+ }
2618
+ };
2619
+
2620
+ // src/languages/slang.ts
2621
+ function replaceSlangPhrases(text) {
2622
+ let result = text;
2623
+ const lowerResult = result.toLowerCase();
2624
+ for (const [phrase, katakana] of Object.entries(slang_default.phrases)) {
2625
+ if (lowerResult.includes(phrase)) {
2626
+ const regex = new RegExp(`\\b${phrase}\\b`, "gi");
2627
+ result = result.replace(regex, katakana);
2628
+ }
2629
+ }
2630
+ return result;
2631
+ }
2632
+ function getSlangWord(word) {
2633
+ return slang_default.slang[word.toLowerCase()];
2634
+ }
2635
+
2636
+ // src/dicts/spanish.json
2637
+ var spanish_default = {
2638
+ phrases: {
2639
+ "muchas gracias": "\u30E0\u30C1\u30E3\u30B9 \u30B0\u30E9\u30B7\u30A2\u30B9",
2640
+ "por favor": "\u30DD\u30EB \u30D5\u30A1\u30DC\u30FC\u30EB",
2641
+ "buenos dias": "\u30D6\u30A8\u30CE\u30B9 \u30C7\u30A3\u30A2\u30B9",
2642
+ "buenas noches": "\u30D6\u30A8\u30CA\u30B9 \u30CE\u30FC\u30C1\u30A7\u30B9",
2643
+ "como estas": "\u30B3\u30E2 \u30A8\u30B9\u30BF\u30B9",
2644
+ hola: "\u30AA\u30E9",
2645
+ amigo: "\u30A2\u30DF\u30FC\u30B4",
2646
+ amigos: "\u30A2\u30DF\u30FC\u30B4\u30B9",
2647
+ gracias: "\u30B0\u30E9\u30B7\u30A2\u30B9",
2648
+ adios: "\u30A2\u30C7\u30A3\u30AA\u30B9",
2649
+ buenas: "\u30D6\u30A8\u30CA\u30B9",
2650
+ bien: "\u30D3\u30A8\u30F3",
2651
+ se\u00F1or: "\u30BB\u30CB\u30E7\u30FC\u30EB",
2652
+ se\u00F1ora: "\u30BB\u30CB\u30E7\u30FC\u30E9",
2653
+ si: "\u30B9\u30A3"
2654
+ },
2655
+ character_mappings: {
2656
+ \u00F1a: "\u30CB\u30E3",
2657
+ \u00F1e: "\u30CB\u30A7",
2658
+ \u00F1i: "\u30CB",
2659
+ \u00F1o: "\u30CB\u30E7",
2660
+ \u00F1u: "\u30CB\u30E5",
2661
+ \u00F1: "\u30CB\u30E3",
2662
+ ll: "\u30EA\u30E3",
2663
+ rr: "\u30EB"
2664
+ },
2665
+ accents: {
2666
+ \u00E1: "a",
2667
+ \u00E9: "e",
2668
+ \u00ED: "i",
2669
+ \u00F3: "o",
2670
+ \u00FA: "u",
2671
+ \u00FC: "u",
2672
+ \u00E4: "e",
2673
+ \u00F6: "o",
2674
+ \u00DF: "ss",
2675
+ \u00E0: "a",
2676
+ \u00E2: "a",
2677
+ \u00E8: "e",
2678
+ \u00EA: "e",
2679
+ \u00EB: "e",
2680
+ \u00EE: "i",
2681
+ \u00EF: "i",
2682
+ \u00F4: "o",
2683
+ \u00FB: "u",
2684
+ \u00F9: "u",
2685
+ \u00E7: "s"
2686
+ },
2687
+ inverted_punctuation: [
2688
+ "\xA1",
2689
+ "\xBF"
2690
+ ]
2691
+ };
2692
+
2693
+ // src/languages/spanish.ts
2694
+ function spanishPreprocess(text) {
2695
+ return text.replace(/¡/g, "").replace(/¿/g, "").replace(/ña/gi, "\u30CB\u30E3").replace(/ñe/gi, "\u30CB\u30A7").replace(/ñi/gi, "\u30CB").replace(/ño/gi, "\u30CB\u30E7").replace(/ñu/gi, "\u30CB\u30E5").replace(/ñ/gi, "\u30CB\u30E3").replace(/ll/gi, "\u30EA\u30E3").replace(/rr/gi, "\u30EB").replace(/ü/gi, "u").replace(/ä/gi, "e").replace(/ö/gi, "o").replace(/ß/gi, "ss").replace(/à|â/gi, "a").replace(/è|ê|ë/gi, "e").replace(/î|ï/gi, "i").replace(/ô/gi, "o").replace(/û|ù/gi, "u").replace(/ç/gi, "s").replace(/á/gi, "a").replace(/é/gi, "e").replace(/í/gi, "i").replace(/ó/gi, "o").replace(/ú/gi, "u");
2696
+ }
2697
+ function replaceSpanishPhrases(text) {
2698
+ let result = text;
2699
+ const lowerResult = result.toLowerCase();
2700
+ for (const [phrase, katakana] of Object.entries(spanish_default.phrases)) {
2701
+ if (phrase.includes(" ") && lowerResult.includes(phrase)) {
2702
+ const regex = new RegExp(`\\b${phrase}\\b`, "gi");
2703
+ result = result.replace(regex, katakana);
2704
+ }
2705
+ }
2706
+ return result;
2707
+ }
2708
+ function getSpanishWord(word) {
2709
+ return spanish_default.phrases[word.toLowerCase()];
2710
+ }
2711
+
2712
+ // src/normalizers/prosody.ts
2713
+ function normalizeProsody(text) {
2714
+ let result = text;
2715
+ result = result.replace(/[¡¿]/g, "");
2716
+ result = result.replace(/,/g, "\u3001").replace(/\.(?=\s|$)/g, "\u3002").replace(/!/g, "\uFF01").replace(/\?/g, "\uFF1F");
2717
+ result = result.replace(/(?<=[\u30A0-\u30FFー])\s+(?=[\u30A0-\u30FFー])/g, "");
2718
+ result = result.replace(/\s+([、。!?])/g, "$1").replace(/([、。!?])\s+/g, "$1");
2719
+ return result.replace(/[\s\u3000]+/g, " ").trim();
2720
+ }
2721
+
2722
+ // src/converter.ts
2723
+ function resolveOptions(defaults, options) {
2724
+ const opts = { ...defaults, ...options };
2725
+ return {
2726
+ enableCyrillic: opts.enableCyrillic ?? true,
2727
+ enableKorean: opts.enableKorean ?? true,
2728
+ enableChinese: opts.enableChinese ?? true,
2729
+ enableSpanish: opts.enableSpanish ?? true,
2730
+ enableSlang: opts.enableSlang ?? true,
2731
+ enableEnglish: opts.enableEnglish ?? true,
2732
+ normalizeProsody: opts.normalizeProsody ?? true,
2733
+ exclude: opts.exclude ?? []
2734
+ };
2735
+ }
2736
+ function collectStringIntervals(text, str) {
2737
+ if (str.length === 0) return [];
2738
+ const intervals = [];
2739
+ let pos = text.indexOf(str);
2740
+ while (pos !== -1) {
2741
+ intervals.push({ start: pos, end: pos + str.length, text: str });
2742
+ pos = text.indexOf(str, pos + str.length);
2743
+ }
2744
+ return intervals;
2745
+ }
2746
+ function collectRegexIntervals(text, regexPattern) {
2747
+ const flags = regexPattern.flags.includes("g") ? regexPattern.flags : `${regexPattern.flags}g`;
2748
+ const regex = new RegExp(regexPattern.source, flags);
2749
+ const intervals = [];
2750
+ for (const match of text.matchAll(regex)) {
2751
+ if (match.index !== void 0 && match[0].length > 0) {
2752
+ intervals.push({
2753
+ start: match.index,
2754
+ end: match.index + match[0].length,
2755
+ text: match[0]
2756
+ });
2757
+ }
2758
+ }
2759
+ return intervals;
2760
+ }
2761
+ function collectIntervals(text, exclude) {
2762
+ const intervals = [];
2763
+ for (const item of exclude) {
2764
+ if (typeof item === "string") {
2765
+ for (const iv of collectStringIntervals(text, item)) {
2766
+ intervals.push(iv);
2767
+ }
2768
+ } else if (item instanceof RegExp) {
2769
+ for (const iv of collectRegexIntervals(text, item)) {
2770
+ intervals.push(iv);
2771
+ }
2772
+ }
2773
+ }
2774
+ return intervals;
2775
+ }
2776
+ function resolveIntervals(intervals) {
2777
+ intervals.sort((a, b) => a.start - b.start || b.end - b.start - (a.end - a.start));
2778
+ const result = [];
2779
+ let lastEnd = 0;
2780
+ for (const iv of intervals) {
2781
+ if (iv.start >= lastEnd) {
2782
+ result.push(iv);
2783
+ lastEnd = iv.end;
2784
+ }
2785
+ }
2786
+ return result;
2787
+ }
2788
+ function escapeExcluded(text, exclude) {
2789
+ if (!exclude || exclude.length === 0) {
2790
+ return { text, tokenMap: /* @__PURE__ */ new Map() };
2791
+ }
2792
+ const existingPua = /* @__PURE__ */ new Set();
2793
+ for (let i = 0; i < text.length; i++) {
2794
+ const code = text.charCodeAt(i);
2795
+ if (code >= 57344 && code <= 63743) {
2796
+ existingPua.add(code);
2797
+ }
2798
+ }
2799
+ const intervals = resolveIntervals(collectIntervals(text, exclude));
2800
+ const tokenMap = /* @__PURE__ */ new Map();
2801
+ const parts = [];
2802
+ let lastIndex = 0;
2803
+ let nextPuaCode = 57344;
2804
+ for (const iv of intervals) {
2805
+ parts.push(text.slice(lastIndex, iv.start));
2806
+ while (existingPua.has(nextPuaCode)) {
2807
+ nextPuaCode++;
2808
+ }
2809
+ if (nextPuaCode > 63743) {
2810
+ throw new Error(
2811
+ "Exceeded maximum number of protectable tokens in PUA range (U+E000 - U+F8FF)"
2812
+ );
2813
+ }
2814
+ const token = String.fromCharCode(nextPuaCode);
2815
+ existingPua.add(nextPuaCode);
2816
+ nextPuaCode++;
2817
+ tokenMap.set(token, iv.text);
2818
+ parts.push(token);
2819
+ lastIndex = iv.end;
2820
+ }
2821
+ parts.push(text.slice(lastIndex));
2822
+ return { text: parts.join(""), tokenMap };
2823
+ }
2824
+ function restoreExcluded(text, tokenMap) {
2825
+ const map = tokenMap instanceof Map ? tokenMap : new Map(Object.entries(tokenMap));
2826
+ if (map.size === 0) return text;
2827
+ return text.replace(/[\uE000-\uF8FF]/g, (char) => map.get(char) ?? char);
2828
+ }
2829
+ function resolveWord(match, opts) {
2830
+ const enableSpanish = opts.enableSpanish ?? true;
2831
+ const enableSlang = opts.enableSlang ?? true;
2832
+ const enableEnglish = opts.enableEnglish ?? true;
2833
+ const lower = match.toLowerCase();
2834
+ if (enableSlang) {
2835
+ const slang = getSlangWord(lower);
2836
+ if (slang !== void 0) {
2837
+ return slang;
2838
+ }
2839
+ }
2840
+ if (enableSpanish) {
2841
+ const spanish = getSpanishWord(lower);
2842
+ if (spanish !== void 0) {
2843
+ return spanish;
2844
+ }
2845
+ }
2846
+ if (enableEnglish) {
2847
+ const english = getEnglishWord(lower);
2848
+ if (english !== void 0) {
2849
+ return english;
2850
+ }
2851
+ }
2852
+ const preprocessed = spanishPreprocess(match);
2853
+ return phonicsToKatakana(preprocessed);
2854
+ }
2855
+ var KatakanaConverter = class {
2856
+ constructor(defaultOptions) {
2857
+ this.defaultOptions = defaultOptions;
2858
+ }
2859
+ defaultOptions;
2860
+ resolveWord(match, opts) {
2861
+ return resolveWord(match, opts);
2862
+ }
2863
+ convert(text, options) {
2864
+ const opts = resolveOptions(this.defaultOptions, options);
2865
+ const { text: escaped, tokenMap } = escapeExcluded(text, opts.exclude);
2866
+ let result = escaped.replace(/[\u2018\u2019]/g, "'");
2867
+ if (opts.enableCyrillic) {
2868
+ result = convertCyrillic(result);
2869
+ }
2870
+ if (opts.enableKorean) {
2871
+ result = convertKorean(result);
2872
+ }
2873
+ if (opts.enableChinese) {
2874
+ result = convertChinese(result);
2875
+ }
2876
+ if (opts.enableSpanish) {
2877
+ result = replaceSpanishPhrases(result);
2878
+ }
2879
+ if (opts.enableSlang) {
2880
+ result = replaceSlangPhrases(result);
2881
+ }
2882
+ if (opts.enableEnglish || opts.enableSlang || opts.enableSpanish) {
2883
+ result = result.replace(
2884
+ /[A-Za-zñáéíóúüäößàâèêëîïôûùçÑÁÉÍÓÚÜÄÖÀÂÈÊËÎÏÔÛÙÇ]+('[A-Za-z]+)?/g,
2885
+ (match) => this.resolveWord(match, opts)
2886
+ );
2887
+ }
2888
+ if (opts.normalizeProsody) {
2889
+ result = normalizeProsody(result);
2890
+ }
2891
+ return restoreExcluded(result, tokenMap);
2892
+ }
2893
+ transform(text, options) {
2894
+ return this.convert(text, options);
2895
+ }
2896
+ };
2897
+ var defaultConverter = new KatakanaConverter();
2898
+ function toKatakana(text, options) {
2899
+ return defaultConverter.convert(text, options);
2900
+ }
2901
+ // Annotate the CommonJS export names for ESM import in node:
2902
+ 0 && (module.exports = {
2903
+ KatakanaConverter,
2904
+ convertChinese,
2905
+ convertCyrillic,
2906
+ convertKorean,
2907
+ escapeExcluded,
2908
+ getEnglishWord,
2909
+ getSlangWord,
2910
+ getSpanishWord,
2911
+ isChinese,
2912
+ isCyrillic,
2913
+ isKorean,
2914
+ normalizeProsody,
2915
+ phonicsToKatakana,
2916
+ replaceSlangPhrases,
2917
+ replaceSpanishPhrases,
2918
+ replaceTaiwanPhrases,
2919
+ resolveWord,
2920
+ restoreExcluded,
2921
+ spanishPreprocess,
2922
+ toKatakana
2923
+ });