1 /*
2  * SPDX-FileCopyrightText: 2004-2005 Takuro Ashie
3  * SPDX-FileCopyrightText: 2012-2017 CSSlayer <wengxt@gmail.com>
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  *
7  */
8 
9 #include "default_tables.h"
10 #include <fcitx-utils/key.h>
11 
12 /* from Suikyo */
13 ConvRule fcitx_anthy_romaji_typing_rule[] = {
14     {"-", "ー", ""},
15 #if 0
16 {"[",   "「",	""},
17 {"]",   "」",	""},
18 #endif
19     {"a", "あ", ""},
20     {"i", "い", ""},
21     {"u", "う", ""},
22     {"e", "え", ""},
23     {"o", "お", ""},
24     {"xa", "ぁ", ""},
25     {"xi", "ぃ", ""},
26     {"xu", "ぅ", ""},
27     {"xe", "ぇ", ""},
28     {"xo", "ぉ", ""},
29     {"la", "ぁ", ""},
30     {"li", "ぃ", ""},
31     {"lu", "ぅ", ""},
32     {"le", "ぇ", ""},
33     {"lo", "ぉ", ""},
34     {"wi", "うぃ", ""},
35     {"we", "うぇ", ""},
36     {"wha", "うぁ", ""},
37     {"whi", "うぃ", ""},
38     {"whe", "うぇ", ""},
39     {"who", "うぉ", ""},
40 #if 0
41 {"va",	"う゛ぁ",	""},
42 {"vi",	"う゛ぃ",	""},
43 {"vu",	"う゛",	""},
44 {"ve",	"う゛ぇ",	""},
45 {"vo",	"う゛ぉ",	""},
46 #else
47     {"va", "ヴぁ", ""},
48     {"vi", "ヴぃ", ""},
49     {"vu", "ヴ", ""},
50     {"ve", "ヴぇ", ""},
51     {"vo", "ヴぉ", ""},
52 #endif
53     {"ka", "か", ""},
54     {"ki", "き", ""},
55     {"ku", "く", ""},
56     {"ke", "け", ""},
57     {"ko", "こ", ""},
58     {"ga", "が", ""},
59     {"gi", "ぎ", ""},
60     {"gu", "ぐ", ""},
61     {"ge", "げ", ""},
62     {"go", "ご", ""},
63     {"kya", "きゃ", ""},
64     {"kyi", "きぃ", ""},
65     {"kyu", "きゅ", ""},
66     {"kye", "きぇ", ""},
67     {"kyo", "きょ", ""},
68     {"gya", "ぎゃ", ""},
69     {"gyi", "ぎぃ", ""},
70     {"gyu", "ぎゅ", ""},
71     {"gye", "ぎぇ", ""},
72     {"gyo", "ぎょ", ""},
73     {"sa", "さ", ""},
74     {"si", "し", ""},
75     {"su", "す", ""},
76     {"se", "せ", ""},
77     {"so", "そ", ""},
78     {"za", "ざ", ""},
79     {"zi", "じ", ""},
80     {"zu", "ず", ""},
81     {"ze", "ぜ", ""},
82     {"zo", "ぞ", ""},
83     {"sya", "しゃ", ""},
84     {"syi", "しぃ", ""},
85     {"syu", "しゅ", ""},
86     {"sye", "しぇ", ""},
87     {"syo", "しょ", ""},
88     {"sha", "しゃ", ""},
89     {"shi", "し", ""},
90     {"shu", "しゅ", ""},
91     {"she", "しぇ", ""},
92     {"sho", "しょ", ""},
93     {"zya", "じゃ", ""},
94     {"zyi", "じぃ", ""},
95     {"zyu", "じゅ", ""},
96     {"zye", "じぇ", ""},
97     {"zyo", "じょ", ""},
98     {"ja", "じゃ", ""},
99     {"jya", "じゃ", ""},
100     {"ji", "じ", ""},
101     {"jyi", "じぃ", ""},
102     {"ju", "じゅ", ""},
103     {"jyu", "じゅ", ""},
104     {"je", "じぇ", ""},
105     {"jye", "じぇ", ""},
106     {"jo", "じょ", ""},
107     {"jyo", "じょ", ""},
108     {"ta", "た", ""},
109     {"ti", "ち", ""},
110     {"tu", "つ", ""},
111     {"tsu", "つ", ""},
112     {"te", "て", ""},
113     {"to", "と", ""},
114     {"da", "だ", ""},
115     {"di", "ぢ", ""},
116     {"du", "づ", ""},
117     {"de", "で", ""},
118     {"do", "ど", ""},
119     {"xtu", "っ", ""},
120     {"xtsu", "っ", ""},
121     {"ltu", "っ", ""},
122     {"ltsu", "っ", ""},
123     {"tya", "ちゃ", ""},
124     {"tyi", "ちぃ", ""},
125     {"tyu", "ちゅ", ""},
126     {"tye", "ちぇ", ""},
127     {"tyo", "ちょ", ""},
128     {"cha", "ちゃ", ""},
129     {"chi", "ち", ""},
130     {"chu", "ちゅ", ""},
131     {"che", "ちぇ", ""},
132     {"cho", "ちょ", ""},
133     {"dya", "ぢゃ", ""},
134     {"dyi", "ぢぃ", ""},
135     {"dyu", "ぢゅ", ""},
136     {"dye", "ぢぇ", ""},
137     {"dyo", "ぢょ", ""},
138     {"tha", "てゃ", ""},
139     {"thi", "てぃ", ""},
140     {"thu", "てゅ", ""},
141     {"the", "てぇ", ""},
142     {"tho", "てょ", ""},
143     {"dha", "でゃ", ""},
144     {"dhi", "でぃ", ""},
145     {"dhu", "でゅ", ""},
146     {"dhe", "でぇ", ""},
147     {"dho", "でょ", ""},
148     {"na", "な", ""},
149     {"ni", "に", ""},
150     {"nu", "ぬ", ""},
151     {"ne", "ね", ""},
152     {"no", "の", ""},
153     {"nya", "にゃ", ""},
154     {"nyi", "にぃ", ""},
155     {"nyu", "にゅ", ""},
156     {"nye", "にぇ", ""},
157     {"nyo", "にょ", ""},
158     {"ha", "は", ""},
159     {"hi", "ひ", ""},
160     {"hu", "ふ", ""},
161     {"fu", "ふ", ""},
162     {"he", "へ", ""},
163     {"ho", "ほ", ""},
164     {"ba", "ば", ""},
165     {"bi", "び", ""},
166     {"bu", "ぶ", ""},
167     {"be", "べ", ""},
168     {"bo", "ぼ", ""},
169     {"pa", "ぱ", ""},
170     {"pi", "ぴ", ""},
171     {"pu", "ぷ", ""},
172     {"pe", "ぺ", ""},
173     {"po", "ぽ", ""},
174     {"hya", "ひゃ", ""},
175     {"hyi", "ひぃ", ""},
176     {"hyu", "ひゅ", ""},
177     {"hye", "ひぇ", ""},
178     {"hyo", "ひょ", ""},
179     {"bya", "びゃ", ""},
180     {"byi", "びぃ", ""},
181     {"byu", "びゅ", ""},
182     {"bye", "びぇ", ""},
183     {"byo", "びょ", ""},
184     {"pya", "ぴゃ", ""},
185     {"pyi", "ぴぃ", ""},
186     {"pyu", "ぴゅ", ""},
187     {"pye", "ぴぇ", ""},
188     {"pyo", "ぴょ", ""},
189     {"fa", "ふぁ", ""},
190     {"fi", "ふぃ", ""},
191     {"fu", "ふ", ""},
192     {"fe", "ふぇ", ""},
193     {"fo", "ふぉ", ""},
194     {"ma", "ま", ""},
195     {"mi", "み", ""},
196     {"mu", "む", ""},
197     {"me", "め", ""},
198     {"mo", "も", ""},
199     {"mya", "みゃ", ""},
200     {"myi", "みぃ", ""},
201     {"myu", "みゅ", ""},
202     {"mye", "みぇ", ""},
203     {"myo", "みょ", ""},
204     {"lya", "ゃ", ""},
205     {"xya", "ゃ", ""},
206     {"ya", "や", ""},
207     {"lyu", "ゅ", ""},
208     {"xyu", "ゅ", ""},
209     {"yu", "ゆ", ""},
210     {"lyo", "ょ", ""},
211     {"xyo", "ょ", ""},
212     {"yo", "よ", ""},
213     {"ra", "ら", ""},
214     {"ri", "り", ""},
215     {"ru", "る", ""},
216     {"re", "れ", ""},
217     {"ro", "ろ", ""},
218     {"rya", "りゃ", ""},
219     {"ryi", "りぃ", ""},
220     {"ryu", "りゅ", ""},
221     {"rye", "りぇ", ""},
222     {"ryo", "りょ", ""},
223     {"xwa", "ゎ", ""},
224     {"wa", "わ", ""},
225     {"wo", "を", ""},
226     {"n'", "ん", ""},
227     {"nn", "ん", ""},
228     {"n", "ん", ""},
229     {"wyi", "ゐ", ""},
230     {"wye", "ゑ", ""},
231 #if 0 /* emulate dead key */
232 {"\\.",	"・",	""},
233 {";r",	"→",	""},
234 {";l",	"←",	""},
235 {";u",  "↑",	""},
236 {";d",	"↓",	""},
237 {";p",	"〒",	""},
238 {";e",	"€",	""},
239 {";t",	"™",	""},
240 {";s",	"®",	""},
241 {";c",	"©",	""},
242 #endif
243     {nullptr, nullptr, nullptr},
244 };
245 
246 ConvRule fcitx_anthy_romaji_double_consonant_rule[] = {
247     {"vv", "っ", "v"},           {"xx", "っ", "x"}, {"kk", "っ", "k"},
248     {"gg", "っ", "g"},           {"ss", "っ", "s"}, {"zz", "っ", "z"},
249     {"jj", "っ", "j"},           {"tt", "っ", "t"}, {"dd", "っ", "d"},
250     {"hh", "っ", "h"},           {"ff", "っ", "f"}, {"bb", "っ", "b"},
251     {"pp", "っ", "p"},           {"mm", "っ", "m"}, {"yy", "っ", "y"},
252     {"rr", "っ", "r"},           {"ww", "っ", "w"}, {"cc", "っ", "c"},
253     {nullptr, nullptr, nullptr},
254 };
255 
256 ConvRule fcitx_anthy_half_symbol_rule[] = {
257     {",", ",", ""},   {".", ".", ""}, {"!", "!", ""},
258     {"\"", "\"", ""}, {"#", "#", ""}, {"$", "$", ""},
259     {"%", "%", ""},   {"&", "&", ""}, {"'", "'", ""},
260     {"(", "(", ""},   {")", ")", ""}, {"~", "~", ""},
261     {"-", "-", ""},   {"=", "=", ""}, {"^", "^", ""},
262     {"\\", "\\", ""}, {"|", "|", ""}, {"`", "`", ""},
263     {"@", "@", ""},   {"{", "{", ""}, {"[", "[", ""},
264     {"+", "+", ""},   {";", ";", ""}, {"*", "*", ""},
265     {":", ":", ""},   {"}", "}", ""}, {"]", "]", ""},
266     {"<", "<", ""},   {">", ">", ""}, {"?", "?", ""},
267     {"/", "/", ""},   {"_", "_", ""}, {nullptr, nullptr, nullptr},
268 };
269 
270 ConvRule fcitx_anthy_wide_symbol_rule[] = {
271     {",", "、", ""},  {".", "。", ""}, {"!", "!", ""},
272     {"\"", "”", ""},  {"#", "#", ""}, {"$", "$", ""},
273     {"%", "%", ""},  {"&", "&", ""}, {"'", "’", ""},
274     {"(", "(", ""},  {")", ")", ""}, {"~", "〜", ""},
275     {"-", "ー", ""},  {"=", "=", ""}, {"^", "^", ""},
276     {"\\", "\", ""}, {"|", "|", ""}, {"`", "‘", ""},
277     {"@", "@", ""},  {"{", "{", ""}, {"[", "「", ""},
278     {"+", "+", ""},  {";", ";", ""}, {"*", "*", ""},
279     {":", ":", ""},  {"}", "}", ""}, {"]", "」", ""},
280     {"<", "<", ""},  {">", ">", ""}, {"?", "?", ""},
281     {"/", "/", ""},  {"_", "_", ""}, {nullptr, nullptr, nullptr},
282 };
283 
284 ConvRule fcitx_anthy_half_number_rule[] = {
285     {"1", "1", ""},
286     {"2", "2", ""},
287     {"3", "3", ""},
288     {"4", "4", ""},
289     {"5", "5", ""},
290     {"6", "6", ""},
291     {"7", "7", ""},
292     {"8", "8", ""},
293     {"9", "9", ""},
294     {"0", "0", ""},
295     {nullptr, nullptr, nullptr},
296 };
297 
298 ConvRule fcitx_anthy_wide_number_rule[] = {
299     {"1", "1", ""},
300     {"2", "2", ""},
301     {"3", "3", ""},
302     {"4", "4", ""},
303     {"5", "5", ""},
304     {"6", "6", ""},
305     {"7", "7", ""},
306     {"8", "8", ""},
307     {"9", "9", ""},
308     {"0", "0", ""},
309     {nullptr, nullptr, nullptr},
310 };
311 
312 ConvRule fcitx_anthy_kana_typing_rule[] = {
313     // no modifiers keys
314     {"1", "ぬ", ""},
315     {"2", "", "ふ"},
316     {"3", "あ", ""},
317     {"4", "う", ""},
318     {"5", "え", ""},
319     {"6", "お", ""},
320     {"7", "や", ""},
321     {"8", "ゆ", ""},
322     {"9", "よ", ""},
323     {"0", "わ", ""},
324     {"-", "", "ほ"},
325     {"^", "", "へ"},
326 
327     {"q", "", "た"},
328     {"w", "", "て"},
329     {"e", "い", ""},
330     {"r", "", "す"},
331     {"t", "", "か"},
332     {"y", "ん", ""},
333     {"u", "な", ""},
334     {"i", "に", ""},
335     {"o", "ら", ""},
336     {"p", "", "せ"},
337     {"@", "゛", ""},
338     {"[", "゜", ""},
339 
340     {"a", "", "ち"},
341     {"s", "", "と"},
342     {"d", "", "し"},
343     {"f", "", "は"},
344     {"g", "", "き"},
345     {"h", "", "く"},
346     {"j", "ま", ""},
347     {"k", "の", ""},
348     {"l", "り", ""},
349     {";", "れ", ""},
350     {":", "", "け"},
351     {"]", "む", ""},
352 
353     {"z", "", "つ"},
354     {"x", "", "さ"},
355     {"c", "", "そ"},
356     {"v", "", "ひ"},
357     {"b", "", "こ"},
358     {"n", "み", ""},
359     {"m", "も", ""},
360     {",", "ね", ""},
361     {".", "る", ""},
362     {"/", "め", ""},
363     {"\\", "ー", ""},
364 
365     // shift modifiered keys
366     {"!", "ぬ", ""},
367     {"\"", "", "ふ"},
368     {"#", "ぁ", ""},
369     {"$", "ぅ", ""},
370     {"%", "ぇ", ""},
371     {"&", "ぉ", ""},
372     {"'", "ゃ", ""},
373     {"(", "ゅ", ""},
374     {")", "ょ", ""},
375     {"~", "を", ""},
376     {"=", "", "ほ"},
377     {"|", "ー", ""},
378 
379     {"Q", "", "た"},
380     {"W", "", "て"},
381     {"E", "ぃ", ""},
382     {"R", "", "す"},
383     {"T", "ヵ", ""},
384     {"Y", "ん", ""},
385     {"U", "な", ""},
386     {"I", "に", ""},
387     {"O", "ら", ""},
388     {"P", "", "せ"},
389     {"`", "゛", ""},
390 #if 0
391 {"{",	"「",	""},
392 #endif
393 
394     {"A", "", "ち"},
395     {"S", "", "と"},
396     {"D", "", "し"},
397     {"F", "ゎ", ""},
398     {"G", "", "き"},
399     {"H", "", "く"},
400     {"J", "ま", ""},
401     {"K", "の", ""},
402     {"L", "り", ""},
403     {"+", "れ", ""},
404     {"*", "ヶ", ""},
405 #if 0
406 {"}",	"」",	""},
407 #endif
408 
409     {"Z", "っ", ""},
410     {"X", "", "さ"},
411     {"C", "", "そ"},
412     {"V", "", "ゐ"},
413     {"B", "", "こ"},
414     {"M", "も", ""},
415     {"N", "み", ""},
416 #if 0
417 {"?",	"・",	""},
418 #endif
419     {"_", "ろ", ""},
420     {nullptr, nullptr, nullptr},
421 };
422 
423 ConvRule fcitx_anthy_kana_voiced_consonant_rule[] = {
424     {"か@", "が", ""},           {"き@", "ぎ", ""}, {"く@", "ぐ", ""},
425     {"け@", "げ", ""},           {"こ@", "ご", ""}, {"さ@", "ざ", ""},
426     {"し@", "じ", ""},           {"す@", "ず", ""}, {"せ@", "ぜ", ""},
427     {"そ@", "ぞ", ""},           {"た@", "だ", ""}, {"ち@", "ぢ", ""},
428     {"つ@", "づ", ""},           {"て@", "で", ""}, {"と@", "ど", ""},
429     {"は@", "ば", ""},           {"ひ@", "び", ""}, {"ふ@", "ぶ", ""},
430     {"へ@", "べ", ""},           {"ほ@", "ぼ", ""}, {"か`", "が", ""},
431     {"き`", "ぎ", ""},           {"く`", "ぐ", ""}, {"け`", "げ", ""},
432     {"こ`", "ご", ""},           {"さ`", "ざ", ""}, {"し`", "じ", ""},
433     {"す`", "ず", ""},           {"せ`", "ぜ", ""}, {"そ`", "ぞ", ""},
434     {"た`", "だ", ""},           {"ち`", "ぢ", ""}, {"つ`", "づ", ""},
435     {"て`", "で", ""},           {"と`", "ど", ""}, {"は`", "ば", ""},
436     {"ひ`", "び", ""},           {"ふ`", "ぶ", ""}, {"へ`", "べ", ""},
437     {"ほ`", "ぼ", ""},           {"は[", "ぱ", ""}, {"ひ[", "ぴ", ""},
438     {"ふ[", "ぷ", ""},           {"へ[", "ぺ", ""}, {"ほ[", "ぽ", ""},
439     {nullptr, nullptr, nullptr},
440 };
441 
442 ConvRule fcitx_anthy_romaji_ja_period_rule[] = {
443     {".", "。", ""},
444     {nullptr, nullptr, nullptr},
445 };
446 
447 ConvRule fcitx_anthy_romaji_ja_comma_rule[] = {
448     {",", "、", ""},
449     {nullptr, nullptr, nullptr},
450 };
451 
452 ConvRule fcitx_anthy_romaji_wide_period_rule[] = {
453     {".", ".", ""},
454     {nullptr, nullptr, nullptr},
455 };
456 
457 ConvRule fcitx_anthy_romaji_wide_comma_rule[] = {
458     {",", ",", ""},
459     {nullptr, nullptr, nullptr},
460 };
461 
462 ConvRule fcitx_anthy_romaji_half_period_rule[] = {
463     {".", ".", ""},
464     {nullptr, nullptr, nullptr},
465 };
466 
467 ConvRule fcitx_anthy_romaji_half_comma_rule[] = {
468     {",", ",", ""},
469     {nullptr, nullptr, nullptr},
470 };
471 
472 ConvRule fcitx_anthy_kana_ja_period_rule[] = {
473     {">", "。", ""},
474     {nullptr, nullptr, nullptr},
475 };
476 
477 ConvRule fcitx_anthy_kana_ja_comma_rule[] = {
478     {"<", "、", ""},
479     {nullptr, nullptr, nullptr},
480 };
481 
482 ConvRule fcitx_anthy_kana_wide_period_rule[] = {
483     {">", ".", ""},
484     {nullptr, nullptr, nullptr},
485 };
486 
487 ConvRule fcitx_anthy_kana_wide_comma_rule[] = {
488     {"<", ",", ""},
489     {nullptr, nullptr, nullptr},
490 };
491 
492 ConvRule fcitx_anthy_kana_half_period_rule[] = {
493     {">", ".", ""},
494     {nullptr, nullptr, nullptr},
495 };
496 
497 ConvRule fcitx_anthy_kana_half_comma_rule[] = {
498     {"<", ",", ""},
499     {nullptr, nullptr, nullptr},
500 };
501 
502 ConvRule fcitx_anthy_romaji_ja_bracket_rule[] = {
503     {"[", "「", ""},
504     {"]", "」", ""},
505     {nullptr, nullptr, nullptr},
506 };
507 
508 ConvRule fcitx_anthy_romaji_wide_bracket_rule[] = {
509     {"[", "[", ""},
510     {"]", "]", ""},
511     {nullptr, nullptr, nullptr},
512 };
513 
514 ConvRule fcitx_anthy_kana_ja_bracket_rule[] = {
515     {"{", "「", ""},
516     {"}", "」", ""},
517     {nullptr, nullptr, nullptr},
518 };
519 
520 ConvRule fcitx_anthy_kana_wide_bracket_rule[] = {
521     {"{", "[", ""},
522     {"}", "]", ""},
523     {nullptr, nullptr, nullptr},
524 };
525 
526 ConvRule fcitx_anthy_romaji_ja_slash_rule[] = {
527     {"/", "・", ""},
528     {nullptr, nullptr, nullptr},
529 };
530 
531 ConvRule fcitx_anthy_romaji_wide_slash_rule[] = {
532     {"/", "/", ""},
533     {nullptr, nullptr, nullptr},
534 };
535 
536 ConvRule fcitx_anthy_kana_ja_slash_rule[] = {
537     {"?", "・", ""},
538     {nullptr, nullptr, nullptr},
539 };
540 
541 ConvRule fcitx_anthy_kana_wide_slash_rule[] = {
542     {"?", "/", ""},
543     {nullptr, nullptr, nullptr},
544 };
545 
546 HiraganaKatakanaRule fcitx_anthy_hiragana_katakana_table[] = {
547     {"あ", "ア", "ア"},
548     {"い", "イ", "イ"},
549     {"う", "ウ", "ウ"},
550     {"え", "エ", "エ"},
551     {"お", "オ", "オ"},
552     {"か", "カ", "カ"},
553     {"き", "キ", "キ"},
554     {"く", "ク", "ク"},
555     {"け", "ケ", "ケ"},
556     {"こ", "コ", "コ"},
557     {"が", "ガ", "ガ"},
558     {"ぎ", "ギ", "ギ"},
559     {"ぐ", "グ", "グ"},
560     {"げ", "ゲ", "ゲ"},
561     {"ご", "ゴ", "ゴ"},
562     {"さ", "サ", "サ"},
563     {"し", "シ", "シ"},
564     {"す", "ス", "ス"},
565     {"せ", "セ", "セ"},
566     {"そ", "ソ", "ソ"},
567     {"ざ", "ザ", "ザ"},
568     {"じ", "ジ", "ジ"},
569     {"ず", "ズ", "ズ"},
570     {"ぜ", "ゼ", "ゼ"},
571     {"ぞ", "ゾ", "ゾ"},
572     {"た", "タ", "タ"},
573     {"ち", "チ", "チ"},
574     {"つ", "ツ", "ツ"},
575     {"て", "テ", "テ"},
576     {"と", "ト", "ト"},
577     {"だ", "ダ", "ダ"},
578     {"ぢ", "ヂ", "ヂ"},
579     {"づ", "ヅ", "ヅ"},
580     {"で", "デ", "デ"},
581     {"ど", "ド", "ド"},
582     {"な", "ナ", "ナ"},
583     {"に", "ニ", "ニ"},
584     {"ぬ", "ヌ", "ヌ"},
585     {"ね", "ネ", "ネ"},
586     {"の", "ノ", "ノ"},
587     {"は", "ハ", "ハ"},
588     {"ひ", "ヒ", "ヒ"},
589     {"ふ", "フ", "フ"},
590     {"へ", "ヘ", "ヘ"},
591     {"ほ", "ホ", "ホ"},
592     {"ば", "バ", "バ"},
593     {"び", "ビ", "ビ"},
594     {"ぶ", "ブ", "ブ"},
595     {"べ", "ベ", "ベ"},
596     {"ぼ", "ボ", "ボ"},
597     {"ぱ", "パ", "パ"},
598     {"ぴ", "ピ", "ピ"},
599     {"ぷ", "プ", "プ"},
600     {"ぺ", "ペ", "ペ"},
601     {"ぽ", "ポ", "ポ"},
602     {"ま", "マ", "マ"},
603     {"み", "ミ", "ミ"},
604     {"む", "ム", "ム"},
605     {"め", "メ", "メ"},
606     {"も", "モ", "モ"},
607     {"や", "ヤ", "ヤ"},
608     {"ゆ", "ユ", "ユ"},
609     {"よ", "ヨ", "ヨ"},
610     {"ら", "ラ", "ラ"},
611     {"り", "リ", "リ"},
612     {"る", "ル", "ル"},
613     {"れ", "レ", "レ"},
614     {"ろ", "ロ", "ロ"},
615 
616     {"わ", "ワ", "ワ"},
617     {"を", "ヲ", "ヲ"},
618     {"ん", "ン", "ン"},
619 
620     {"ぁ", "ァ", "ァ"},
621     {"ぃ", "ィ", "ィ"},
622     {"ぅ", "ゥ", "ゥ"},
623     {"ぇ", "ェ", "ェ"},
624     {"ぉ", "ォ", "ォ"},
625 
626     {"っ", "ッ", "ッ"},
627 
628     {"ゃ", "ャ", "ャ"},
629     {"ゅ", "ュ", "ュ"},
630     {"ょ", "ョ", "ョ"},
631 
632     {"ヵ", "ヵ", "カ"},
633     {"ヶ", "ヶ", "ケ"},
634 
635     {"ゎ", "ヮ", "ワ"},
636     {"ゐ", "ヰ", "ィ"},
637     {"ゑ", "ヱ", "ェ"},
638 
639 #if 1
640     //{"う゛" "ヴ" "ヴ"},
641     {"ヴ", "ヴ", "ヴ"},
642 #endif
643 
644 #if 1
645     {"ー", "ー", "ー"},
646     {"、", "、", "、"},
647     {"。", "。", "。"},
648     {"!", "!", "!"},
649     {"”", "”", "\""},
650     {"#", "#", "#"},
651     {"$", "$", "$"},
652     {"%", "%", "%"},
653     {"&", "&", "&"},
654     {"’", "’", "'"},
655     {"(", "(", "("},
656     {")", ")", ")"},
657     {"〜", "〜", "~"},
658     {"=", "=", "="},
659     {"^", "^", "^"},
660     {"\", "\", "\\"},
661     {"|", "|", "|"},
662     {"‘", "‘", "`"},
663     {"@", "@", "@"},
664     {"{", "{", "{"},
665     {"「", "「", "「"},
666     {"+", "+", "+"},
667     {";", ";", ";"},
668     {"*", "*", "*"},
669     {":", ":", ":"},
670     {"}", "}", "}"},
671     {"」", "」", "」"},
672     {"<", "<", "<"},
673     {">", ">", ">"},
674     {"?", "?", "?"},
675     {"/", "/", "/"},
676     {"_", "_", "_"},
677 #endif
678     {nullptr, nullptr, nullptr},
679 };
680 
681 WideRule fcitx_anthy_wide_table[] = {
682     {"a", "a"}, {"b", "b"}, {"c", "c"},  {"d", "d"}, {"e", "e"},
683     {"f", "f"}, {"g", "g"}, {"h", "h"},  {"i", "i"}, {"j", "j"},
684     {"k", "k"}, {"l", "l"}, {"m", "m"},  {"n", "n"}, {"o", "o"},
685     {"p", "p"}, {"q", "q"}, {"r", "r"},  {"s", "s"}, {"t", "t"},
686     {"u", "u"}, {"v", "v"}, {"w", "w"},  {"x", "x"}, {"y", "y"},
687     {"z", "z"}, {"A", "A"}, {"B", "B"},  {"C", "C"}, {"D", "D"},
688     {"E", "E"}, {"F", "F"}, {"G", "G"},  {"H", "H"}, {"I", "I"},
689     {"J", "J"}, {"K", "K"}, {"L", "L"},  {"M", "M"}, {"N", "N"},
690     {"O", "O"}, {"P", "P"}, {"Q", "Q"},  {"R", "R"}, {"S", "S"},
691     {"T", "T"}, {"U", "U"}, {"V", "V"},  {"W", "W"}, {"X", "X"},
692     {"Y", "Y"}, {"Z", "Z"}, {"1", "1"},  {"2", "2"}, {"3", "3"},
693     {"4", "4"}, {"5", "5"}, {"6", "6"},  {"7", "7"}, {"8", "8"},
694     {"9", "9"}, {"0", "0"}, {"-", "−"},   {",", ","}, {".", "."},
695     {"!", "!"}, {"\"", "”"}, {"#", "#"},  {"$", "$"}, {"%", "%"},
696     {"&", "&"}, {"'", "’"},  {"(", "("},  {")", ")"}, {"~", "〜"},
697     {"=", "="}, {"^", "^"}, {"\\", "\"}, {"|", "|"}, {"`", "‘"},
698     {"@", "@"}, {"{", "{"}, {"[", "["},  {"+", "+"}, {";", ";"},
699     {":", ":"}, {"}", "}"}, {"]", "]"},  {"<", "<"}, {">", ">"},
700     {"?", "?"}, {"/", "/"}, {"_", "_"},  {"*", "*"}, {nullptr, nullptr},
701 };
702 
703 VoicedConsonantRule fcitx_anthy_voiced_consonant_table[] = {
704     {"か", "が", ""},   {"き", "ぎ", ""},   {"く", "ぐ", ""},
705     {"け", "げ", ""},   {"こ", "ご", ""},   {"さ", "ざ", ""},
706     {"し", "じ", ""},   {"す", "ず", ""},   {"せ", "ぜ", ""},
707     {"そ", "ぞ", ""},   {"た", "だ", ""},   {"ち", "ぢ", ""},
708     {"つ", "づ", ""},   {"て", "で", ""},   {"と", "ど", ""},
709     {"は", "ば", "ぱ"}, {"ひ", "び", "ぴ"}, {"ふ", "ぶ", "ぷ"},
710     {"へ", "べ", "ぺ"}, {"ほ", "ぼ", "ぽ"}, {nullptr, nullptr, nullptr},
711 };
712 
713 KeyCodeToCharRule fcitx_anthy_keypad_table[] = {
714     {FcitxKey_KP_Equal, "="},    {FcitxKey_KP_Multiply, "*"},
715     {FcitxKey_KP_Add, "+"},      {FcitxKey_KP_Separator, ","},
716     {FcitxKey_KP_Subtract, "-"}, {FcitxKey_KP_Decimal, "."},
717     {FcitxKey_KP_Divide, "/"},   {FcitxKey_KP_0, "0"},
718     {FcitxKey_KP_1, "1"},        {FcitxKey_KP_2, "2"},
719     {FcitxKey_KP_3, "3"},        {FcitxKey_KP_4, "4"},
720     {FcitxKey_KP_5, "5"},        {FcitxKey_KP_6, "6"},
721     {FcitxKey_KP_7, "7"},        {FcitxKey_KP_8, "8"},
722     {FcitxKey_KP_9, "9"},        {0, nullptr}};
723 
724 KeyCodeToCharRule fcitx_anthy_kana_table[] = {
725     {FcitxKey_kana_fullstop, "。"},
726     {FcitxKey_kana_openingbracket, "「"},
727     {FcitxKey_kana_closingbracket, "」"},
728     {FcitxKey_kana_comma, "、"},
729     {FcitxKey_kana_conjunctive, "・"},
730     {FcitxKey_kana_middledot, "・"},
731     {FcitxKey_kana_WO, "を"},
732     {FcitxKey_kana_a, "ぁ"},
733     {FcitxKey_kana_i, "ぃ"},
734     {FcitxKey_kana_u, "ぅ"},
735     {FcitxKey_kana_e, "ぇ"},
736     {FcitxKey_kana_o, "ぉ"},
737     {FcitxKey_kana_ya, "ゃ"},
738     {FcitxKey_kana_yu, "ゅ"},
739     {FcitxKey_kana_yo, "ょ"},
740     {FcitxKey_kana_tsu, "っ"},
741     {FcitxKey_kana_tu, "っ"},
742     {FcitxKey_prolongedsound, "ー"},
743     {FcitxKey_kana_A, "あ"},
744     {FcitxKey_kana_I, "い"},
745     {FcitxKey_kana_U, "う"},
746     {FcitxKey_kana_E, "え"},
747     {FcitxKey_kana_O, "お"},
748     {FcitxKey_kana_O, "お"},
749     {FcitxKey_kana_KA, "か"},
750     {FcitxKey_kana_KI, "き"},
751     {FcitxKey_kana_KU, "く"},
752     {FcitxKey_kana_KE, "け"},
753     {FcitxKey_kana_KO, "こ"},
754     {FcitxKey_kana_SA, "さ"},
755     {FcitxKey_kana_SHI, "し"},
756     {FcitxKey_kana_SU, "す"},
757     {FcitxKey_kana_SE, "せ"},
758     {FcitxKey_kana_SO, "そ"},
759     {FcitxKey_kana_TA, "た"},
760     {FcitxKey_kana_CHI, "ち"},
761     {FcitxKey_kana_TI, "ち"},
762     {FcitxKey_kana_TSU, "つ"},
763     {FcitxKey_kana_TU, "つ"},
764     {FcitxKey_kana_TE, "て"},
765     {FcitxKey_kana_TO, "と"},
766     {FcitxKey_kana_NA, "な"},
767     {FcitxKey_kana_NI, "に"},
768     {FcitxKey_kana_NU, "ぬ"},
769     {FcitxKey_kana_NE, "ね"},
770     {FcitxKey_kana_NO, "の"},
771     {FcitxKey_kana_HA, "は"},
772     {FcitxKey_kana_HI, "ひ"},
773     {FcitxKey_kana_FU, "ふ"},
774     {FcitxKey_kana_HU, "ふ"},
775     {FcitxKey_kana_HE, "へ"},
776     {FcitxKey_kana_HO, "ほ"},
777     {FcitxKey_kana_MA, "ま"},
778     {FcitxKey_kana_MI, "み"},
779     {FcitxKey_kana_MU, "む"},
780     {FcitxKey_kana_ME, "め"},
781     {FcitxKey_kana_MO, "も"},
782     {FcitxKey_kana_YA, "や"},
783     {FcitxKey_kana_YU, "ゆ"},
784     {FcitxKey_kana_YO, "よ"},
785     {FcitxKey_kana_RA, "ら"},
786     {FcitxKey_kana_RI, "り"},
787     {FcitxKey_kana_RU, "る"},
788     {FcitxKey_kana_RE, "れ"},
789     {FcitxKey_kana_RO, "ろ"},
790     {FcitxKey_kana_WA, "わ"},
791     {FcitxKey_kana_N, "ん"},
792     {FcitxKey_voicedsound, "゛"},
793     {FcitxKey_semivoicedsound, "゜"},
794     {0, nullptr}};
795 
796 NicolaRule fcitx_anthy_nicola_table[] = {
797     // no modifiered keys
798     {"1", "1", "?", "!"},
799     {"2", "2", "/", "゛"},
800     {"3", "3", "〜", "#"},
801     {"4", "4", "「", "$"},
802     {"5", "5", "」", "%"},
803     {"6", "6", "&", "["},
804     {"7", "7", "’", "]"},
805     {"8", "8", "(", "("},
806     {"9", "9", ")", ")"},
807     {"0", "0", "〜", "『"},
808     {"-", "−", "=", "』"},
809     {"^", "^", "", ""},
810     {"\\", "¥", "", ""},
811 
812     {"q", "。", "ぁ", "ゐ"},
813     {"w", "か", "え", "が"},
814     {"e", "た", "り", "だ"},
815     {"r", "こ", "ゃ", "ご"},
816     {"t", "さ", "れ", "ざ"},
817     {"y", "ら", "ぱ", "よ"},
818     {"u", "ち", "ぢ", "に"},
819     {"i", "く", "ぐ", "る"},
820     {"o", "つ", "づ", "ま"},
821     {"p", ",", "ぴ", "ぇ"},
822     {"@", "、", "", ""},
823     {"[", "゛", "゜", "゜"},
824 
825     {"a", "う", "を", "ヴ"},
826     {"s", "し", "あ", "じ"},
827     {"d", "て", "な", "で"},
828     {"f", "け", "ゅ", "げ"},
829     {"g", "せ", "も", "ぜ"},
830     {"h", "は", "ば", "み"},
831     {"j", "と", "ど", "お"},
832     {"k", "き", "ぎ", "の"},
833     {"l", "い", "ぽ", "ょ"},
834     {";", "ん", "", "っ"},
835     {":", "", "", ""},
836     {"]", "", "", ""},
837 
838     {"z", ".", "ぅ", "ゑ"},
839     {"x", "ひ", "ー", "び"},
840     {"c", "す", "ろ", "ず"},
841     {"v", "ふ", "や", "ぶ"},
842     {"b", "へ", "ぃ", "べ"},
843     {"n", "め", "ぷ", "ぬ"},
844     {"m", "そ", "ぞ", "ゆ"},
845     {",", "ね", "ぺ", "む"},
846     {".", "ほ", "ぼ", "わ"},
847     {"/", "・", "ゎ", "ぉ"},
848 
849     // normal shift modifiered keys
850     {"!", "!", "", ""},
851     {"\"", "”", "", ""},
852     {"#", "#", "", ""},
853     {"$", "$", "", ""},
854     {"%", "%", "", ""},
855     {"&", "&", "", ""},
856     {"'", "’", "", ""},
857     {"(", "(", "", ""},
858     {")", ")", "", ""},
859     {"~", "〜", "", ""},
860     {"=", "=", "", ""},
861     {"|", "|", "", ""},
862 
863     {"`", "‘", "", ""},
864     {"{", "{", "", ""},
865 
866     {"+", "+", "", ""},
867     {"*", "*", "", ""},
868     {"}", "}", "", ""},
869 
870     {"<", "<", "", ""},
871     {">", ">", "", ""},
872     {"?", "?", "", ""},
873     {"_", "_", "", ""},
874 
875     {"Q", "。", "ぁ", "ゐ"},
876     {"W", "が", "え", "が"},
877     {"E", "だ", "り", "だ"},
878     {"R", "ご", "ゃ", "ご"},
879     {"T", "ざ", "れ", "ざ"},
880     {"Y", "ぱ", "ぱ", "よ"},
881     {"U", "ぢ", "ぢ", "に"},
882     {"I", "ぐ", "ぐ", "る"},
883     {"O", "づ", "づ", "ま"},
884     {"P", "ぴ", "ぴ", "ぇ"},
885     {"`", "、", "", ""},
886     {"{", "゛", "゜", "゜"},
887 
888     {"A", "ヴ", "を", "ヴ"},
889     {"S", "じ", "あ", "じ"},
890     {"D", "で", "な", "で"},
891     {"F", "げ", "ゅ", "げ"},
892     {"G", "ぜ", "も", "ぜ"},
893     {"H", "ば", "ば", "み"},
894     {"J", "ど", "ど", "お"},
895     {"K", "ぎ", "ぎ", "の"},
896     {"L", "ぽ", "ぽ", "ょ"},
897     {"+", "ん", "", "っ"},
898     {"*", "", "", ""},
899     {"}", "", "", ""},
900 
901     {"Z", ".", "ぅ", "ゑ"},
902     {"X", "び", "ー", "び"},
903     {"C", "ず", "ろ", "ず"},
904     {"V", "ぶ", "や", "ぶ"},
905     {"B", "べ", "ぃ", "べ"},
906     {"N", "ぷ", "ぷ", "ぬ"},
907     {"M", "ぞ", "ぞ", "ゆ"},
908     {"<", "ぺ", "ぺ", "む"},
909     {">", "ぽ", "ぼ", "わ"},
910     {"?", "・", "ゎ", "ぉ"},
911 
912     {nullptr, nullptr, nullptr, nullptr},
913 };
914