1# vim:set et sts=4 sw=4:
2# -*- coding: utf-8 -*-
3#
4# ibus-anthy - The Anthy engine for IBus
5#
6# Copyright (c) 2007-2008 Peng Huang <shawn.p.huang@gmail.com>
7# Copyright (c) 2010-2014 Takao Fujiwara <takao.fujiwara1@gmail.com>
8# Copyright (c) 2007-2014 Red Hat, Inc.
9#
10# This program is free software; you can redistribute it and/or modify
11# it under the terms of the GNU General Public License as published by
12# the Free Software Foundation; either version 2 of the License, or
13# (at your option) any later version.
14#
15# This program is distributed in the hope that it will be useful,
16# but WITHOUT ANY WARRANTY; without even the implied warranty of
17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18# GNU General Public License for more details.
19#
20# You should have received a copy of the GNU General Public License along
21# with this program; if not, write to the Free Software Foundation, Inc.,
22# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23
24# string, result, cont
25romaji_typing_rule_static = {
26    '-' : 'ー',
27    'a' : 'あ',
28    'i' : 'い',
29    'u' : 'う',
30    'e' : 'え',
31    'o' : 'お',
32    'xa' : 'ぁ',
33    'xi' : 'ぃ',
34    'xu' : 'ぅ',
35    'xe' : 'ぇ',
36    'xo' : 'ぉ',
37    'la' : 'ぁ',
38    'li' : 'ぃ',
39    'lu' : 'ぅ',
40    'le' : 'ぇ',
41    'lo' : 'ぉ',
42    'wha' : 'うぁ',
43    'whi' : 'うぃ',
44    'whe' : 'うぇ',
45    'who' : 'うぉ',
46    'va' : 'ヴぁ',
47    'vi' : 'ヴぃ',
48    'vu' : 'ヴ',
49    've' : 'ヴぇ',
50    'vo' : 'ヴぉ',
51    'ka' : 'か',
52    'ki' : 'き',
53    'ku' : 'く',
54    'ke' : 'け',
55    'ko' : 'こ',
56    'lka' : 'ヵ',
57    'lke' : 'ヶ',
58#    u'xka' : u'ゕ',
59    'xka' : 'ヵ',
60#    u'xke' : u'ゖ',
61    'xke' : 'ヶ',
62    'ga' : 'が',
63    'gi' : 'ぎ',
64    'gu' : 'ぐ',
65    'ge' : 'げ',
66    'go' : 'ご',
67    'kya' : 'きゃ',
68    'kyi' : 'きぃ',
69    'kyu' : 'きゅ',
70    'kye' : 'きぇ',
71    'kyo' : 'きょ',
72    'kwa' : 'くぁ',
73    'gya' : 'ぎゃ',
74    'gyi' : 'ぎぃ',
75    'gyu' : 'ぎゅ',
76    'gye' : 'ぎぇ',
77    'gyo' : 'ぎょ',
78    'gwa' : 'ぐぁ',
79    'sa' : 'さ',
80    'si' : 'し',
81    'su' : 'す',
82    'se' : 'せ',
83    'so' : 'そ',
84    'za' : 'ざ',
85    'zi' : 'じ',
86    'zu' : 'ず',
87    'ze' : 'ぜ',
88    'zo' : 'ぞ',
89    'sya' : 'しゃ',
90    'syi' : 'しぃ',
91    'syu' : 'しゅ',
92    'sye' : 'しぇ',
93    'syo' : 'しょ',
94    'sha' : 'しゃ',
95    'shi' : 'し',
96    'shu' : 'しゅ',
97    'she' : 'しぇ',
98    'sho' : 'しょ',
99    'zya' : 'じゃ',
100    'zyi' : 'じぃ',
101    'zyu' : 'じゅ',
102    'zye' : 'じぇ',
103    'zyo' : 'じょ',
104    'ja' : 'じゃ',
105    'jya' : 'じゃ',
106    'ji' : 'じ',
107    'jyi' : 'じぃ',
108    'ju' : 'じゅ',
109    'jyu' : 'じゅ',
110    'je' : 'じぇ',
111    'jye' : 'じぇ',
112    'jo' : 'じょ',
113    'jyo' : 'じょ',
114    'ta' : 'た',
115    'ti' : 'ち',
116    'tu' : 'つ',
117    'tsu' : 'つ',
118    'te' : 'て',
119    'to' : 'と',
120    'da' : 'だ',
121    'di' : 'ぢ',
122    'du' : 'づ',
123    'de' : 'で',
124    'do' : 'ど',
125    'xtu' : 'っ',
126    'xtsu' : 'っ',
127    'ltu' : 'っ',
128    'ltsu' : 'っ',
129    'tya' : 'ちゃ',
130    'tyi' : 'ちぃ',
131    'tyu' : 'ちゅ',
132    'tye' : 'ちぇ',
133    'tyo' : 'ちょ',
134    'cya' : 'ちゃ',
135    'cyi' : 'ちぃ',
136    'cyu' : 'ちゅ',
137    'cye' : 'ちぇ',
138    'cyo' : 'ちょ',
139    'cha' : 'ちゃ',
140    'chi' : 'ち',
141    'chu' : 'ちゅ',
142    'che' : 'ちぇ',
143    'cho' : 'ちょ',
144    'dya' : 'ぢゃ',
145    'dyi' : 'ぢぃ',
146    'dyu' : 'ぢゅ',
147    'dye' : 'ぢぇ',
148    'dyo' : 'ぢょ',
149    'tsa' : 'つぁ',
150    'tsi' : 'つぃ',
151    'tse' : 'つぇ',
152    'tso' : 'つぉ',
153    'tha' : 'てゃ',
154    'thi' : 'てぃ',
155    'thu' : 'てゅ',
156    'the' : 'てぇ',
157    'tho' : 'てょ',
158    'twu' : 'とぅ',
159    'dha' : 'でゃ',
160    'dhi' : 'でぃ',
161    'dhu' : 'でゅ',
162    'dhe' : 'でぇ',
163    'dho' : 'でょ',
164    'dwu' : 'どぅ',
165    'na' : 'な',
166    'ni' : 'に',
167    'nu' : 'ぬ',
168    'ne' : 'ね',
169    'no' : 'の',
170    'nya' : 'にゃ',
171    'nyi' : 'にぃ',
172    'nyu' : 'にゅ',
173    'nye' : 'にぇ',
174    'nyo' : 'にょ',
175    'ha' : 'は',
176    'hi' : 'ひ',
177    'hu' : 'ふ',
178    'he' : 'へ',
179    'ho' : 'ほ',
180    'ba' : 'ば',
181    'bi' : 'び',
182    'bu' : 'ぶ',
183    'be' : 'べ',
184    'bo' : 'ぼ',
185    'pa' : 'ぱ',
186    'pi' : 'ぴ',
187    'pu' : 'ぷ',
188    'pe' : 'ぺ',
189    'po' : 'ぽ',
190    'hya' : 'ひゃ',
191    'hyi' : 'ひぃ',
192    'hyu' : 'ひゅ',
193    'hye' : 'ひぇ',
194    'hyo' : 'ひょ',
195    'bya' : 'びゃ',
196    'byi' : 'びぃ',
197    'byu' : 'びゅ',
198    'bye' : 'びぇ',
199    'byo' : 'びょ',
200    'pya' : 'ぴゃ',
201    'pyi' : 'ぴぃ',
202    'pyu' : 'ぴゅ',
203    'pye' : 'ぴぇ',
204    'pyo' : 'ぴょ',
205    'fa' : 'ふぁ',
206    'fi' : 'ふぃ',
207    'fu' : 'ふ',
208    'fe' : 'ふぇ',
209    'fo' : 'ふぉ',
210    'fya' : 'ふゃ',
211    'fyi' : 'ふぃ',
212    'fyu' : 'ふゅ',
213    'fye' : 'ふぇ',
214    'fyo' : 'ふょ',
215    'ma' : 'ま',
216    'mi' : 'み',
217    'mu' : 'む',
218    'me' : 'め',
219    'mo' : 'も',
220    'mya' : 'みゃ',
221    'myi' : 'みぃ',
222    'myu' : 'みゅ',
223    'mye' : 'みぇ',
224    'myo' : 'みょ',
225    'ya' : 'や',
226    'yi' : 'い',
227    'yu' : 'ゆ',
228    'ye' : 'いぇ',
229    'yo' : 'よ',
230    'lya' : 'ゃ',
231    'lyi' : 'ぃ',
232    'lyu' : 'ゅ',
233    'lye' : 'ぇ',
234    'lyo' : 'ょ',
235    'xya' : 'ゃ',
236    'xyi' : 'ぃ',
237    'xyu' : 'ゅ',
238    'xye' : 'ぇ',
239    'xyo' : 'ょ',
240    'ra' : 'ら',
241    'ri' : 'り',
242    'ru' : 'る',
243    're' : 'れ',
244    'ro' : 'ろ',
245    'rya' : 'りゃ',
246    'ryi' : 'りぃ',
247    'ryu' : 'りゅ',
248    'rye' : 'りぇ',
249    'ryo' : 'りょ',
250    'wa' : 'わ',
251    'wi' : 'うぃ',
252    'wu' : 'う',
253    'we' : 'うぇ',
254    'wo' : 'を',
255    'lwa' : 'ゎ',
256    'xwa' : 'ゎ',
257    'n\'' : 'ん',
258    'nn' : 'ん',
259    'wyi' : 'ゐ',
260    'wye' : 'ゑ',
261}
262
263symbol_rule = {
264    # symbols
265    ' '  : ' ',
266    ','  : '、',
267    '.'  : '。',
268    '!'  : '!',
269    '"' : '\u201d',
270    '#'  : '#',
271    '$'  : '$',
272    '%'  : '%',
273    '&'  : '&',
274    '\''  : '\u2019',
275    '('  : '(',
276    ')'  : ')',
277    '~'  : '\uff5e',
278    '-'  : 'ー',
279    '='  : '=',
280    '^'  : '^',
281    '\\' : '\',
282    '|'  : '|',
283    '`'  : '\u2018',
284    '@'  : '@',
285    '{'  : '{',
286    '['  : '「',
287    '+'  : '+',
288    ';'  : ';',
289    '*'  : '*',
290    ':'  : ':',
291    '}'  : '}',
292    ']'  : '」',
293    '<'  : '<',
294    '>'  : '>',
295    '?'  : '?',
296    '/'  : '/',
297    '_'  : '_',
298    '¥'  : '¥',
299
300    # numbers
301    '0': '0',
302    '1': '1',
303    '2': '2',
304    '3': '3',
305    '4': '4',
306    '5': '5',
307    '6': '6',
308    '7': '7',
309    '8': '8',
310    '9': '9',
311}
312
313# this is only used with romaji_typing_rule
314romaji_double_consonat_typing_rule = {
315    # double consonant rule
316    'bb' : ('っ', 'b'),
317    'cc' : ('っ', 'c'),
318    'dd' : ('っ', 'd'),
319    'ff' : ('っ', 'f'),
320    'gg' : ('っ', 'g'),
321    'hh' : ('っ', 'h'),
322    'jj' : ('っ', 'j'),
323    'kk' : ('っ', 'k'),
324    'mm' : ('っ', 'm'),
325    'pp' : ('っ', 'p'),
326    'rr' : ('っ', 'r'),
327    'ss' : ('っ', 's'),
328    'tt' : ('っ', 't'),
329    'vv' : ('っ', 'v'),
330    'ww' : ('っ', 'w'),
331    'xx' : ('っ', 'x'),
332    'yy' : ('っ', 'y'),
333    'zz' : ('っ', 'z'),
334}
335
336# this is only used with romaji_typing_rule
337romaji_correction_rule = {
338    'nb' : ('ん', 'b'),
339    'nc' : ('ん', 'c'),
340    'nd' : ('ん', 'd'),
341    'nf' : ('ん', 'f'),
342    'ng' : ('ん', 'g'),
343    'nh' : ('ん', 'h'),
344    'nj' : ('ん', 'j'),
345    'nk' : ('ん', 'k'),
346    'nl' : ('ん', 'l'),
347    'nm' : ('ん', 'm'),
348    'np' : ('ん', 'p'),
349    'nr' : ('ん', 'r'),
350    'ns' : ('ん', 's'),
351    'nt' : ('ん', 't'),
352    'nv' : ('ん', 'v'),
353    'nw' : ('ん', 'w'),
354    'nx' : ('ん', 'x'),
355    'nz' : ('ん', 'z'),
356    'n\0' : ('ん', ''),
357    'n,' : ('ん', ','),
358    'n.' : ('ん', '.'),
359}
360
361# EUC-JP and SJIS do not have the chars
362romaji_utf8_rule = {
363    'う゛' : ['ゔ'],
364}
365
366# Hiragana normalization is needed for the personal dict.
367romaji_normalize_rule = {
368    'ヴ' : ['う゛'],
369}
370
371# a port of 101kana.sty from scim-anthy
372kana_typing_rule_static = {
373    # no modifiers keys
374    '1' : 'ぬ',
375    '2' : 'ふ',
376    '3' : 'あ',
377    '4' : 'う',
378    '5' : 'え',
379    '6' : 'お',
380    '7' : 'や',
381    '8' : 'ゆ',
382    '9' : 'よ',
383    '0' : 'わ',
384    '-' : 'ほ',
385    '^' : 'へ',
386
387    'q' : 'た',
388    'w' : 'て',
389    'e' : 'い',
390    'r' : 'す',
391    't' : 'か',
392    'y' : 'ん',
393    'u' : 'な',
394    'i' : 'に',
395    'o' : 'ら',
396    'p' : 'せ',
397    '@' : '゛',
398    '[' : '゜',
399
400    'a' : 'ち',
401    's' : 'と',
402    'd' : 'し',
403    'f' : 'は',
404    'g' : 'き',
405    'h' : 'く',
406    'j' : 'ま',
407    'k' : 'の',
408    'l' : 'り',
409    ';' : 'れ',
410    ':' : 'け',
411    ']' : 'む',
412
413    'z' : 'つ',
414    'x' : 'さ',
415    'c' : 'そ',
416    'v' : 'ひ',
417    'b' : 'こ',
418    'n' : 'み',
419    'm' : 'も',
420    ',' : 'ね',
421    '.' : 'る',
422    '/' : 'め',
423    # u'\\' : u'ー',
424    '\\' : 'ろ',
425
426    # shift modifiered keys
427    '!' : 'ぬ',
428    '"' : 'ふ',
429    '#' : 'ぁ',
430    '$' : 'ぅ',
431    '%' : 'ぇ',
432    '&' : 'ぉ',
433    '\'' : 'ゃ',
434    '(' : 'ゅ',
435    ')' : 'ょ',
436    '~' : 'を',
437    '=' : 'ほ',
438    '|' : 'ー',
439
440    'Q' : 'た',
441    'W' : 'て',
442    'E' : 'ぃ',
443    'R' : 'す',
444    'T' : 'ヵ',
445    'Y' : 'ん',
446    'U' : 'な',
447    'I' : 'に',
448    'O' : 'ら',
449    'P' : 'せ',
450    '`' : '゛',
451
452    '{' : '「',
453
454    'A' : 'ち',
455    'S' : 'と',
456    'D' : 'し',
457    'F' : 'ゎ',
458    'G' : 'き',
459    'H' : 'く',
460    'J' : 'ま',
461    'K' : 'の',
462    'L' : 'り',
463    '+' : 'れ',
464    '*' : 'ヶ',
465
466    '}' : '」',
467
468    'Z' : 'っ',
469    'X' : 'さ',
470    'C' : 'そ',
471    'V' : 'ゐ',
472    'B' : 'こ',
473    'M' : 'も',
474    'N' : 'み',
475    '<' : '、',
476    '>' : '。',
477
478    '?' : '・',
479    '_' : 'ろ',
480
481    '¥' : 'ー',
482}
483
484kana_voiced_consonant_no_rule = {
485    'か' : 'が',
486    'き' : 'ぎ',
487    'く' : 'ぐ',
488    'け' : 'げ',
489    'こ' : 'ご',
490    'さ' : 'ざ',
491    'し' : 'じ',
492    'す' : 'ず',
493    'せ' : 'ぜ',
494    'そ' : 'ぞ',
495    'た' : 'だ',
496    'ち' : 'ぢ',
497    'つ' : 'づ',
498    'て' : 'で',
499    'と' : 'ど',
500    'は' : 'ば',
501    'ひ' : 'び',
502    'ふ' : 'ぶ',
503    'へ' : 'べ',
504    'ほ' : 'ぼ',
505}
506
507kana_semi_voiced_consonant_no_rule = {
508    'は' : 'ぱ',
509    'ひ' : 'ぴ',
510    'ふ' : 'ぷ',
511    'へ' : 'ぺ',
512    'ほ' : 'ぽ',
513}
514
515# Create the table dynamically with kana_voiced_consonant_no_rule
516#
517#kana_voiced_consonant_rule = {
518#    u'か@' : u'が',
519#    u'き@' : u'ぎ',
520#    u'く@' : u'ぐ',
521#    u'け@' : u'げ',
522#    u'こ@' : u'ご',
523#    u'さ@' : u'ざ',
524#    u'し@' : u'じ',
525#    u'す@' : u'ず',
526#    u'せ@' : u'ぜ',
527#    u'そ@' : u'ぞ',
528#    u'た@' : u'だ',
529#    u'ち@' : u'ぢ',
530#    u'つ@' : u'づ',
531#    u'て@' : u'で',
532#    u'と@' : u'ど',
533#    u'は@' : u'ば',
534#    u'ひ@' : u'び',
535#    u'ふ@' : u'ぶ',
536#    u'へ@' : u'べ',
537#    u'ほ@' : u'ぼ',
538#    u'か`' : u'が',
539#    u'き`' : u'ぎ',
540#    u'く`' : u'ぐ',
541#    u'け`' : u'げ',
542#    u'こ`' : u'ご',
543#    u'さ`' : u'ざ',
544#    u'し`' : u'じ',
545#    u'す`' : u'ず',
546#    u'せ`' : u'ぜ',
547#    u'そ`' : u'ぞ',
548#    u'た`' : u'だ',
549#    u'ち`' : u'ぢ',
550#    u'つ`' : u'づ',
551#    u'て`' : u'で',
552#    u'と`' : u'ど',
553#    u'は`' : u'ば',
554#    u'ひ`' : u'び',
555#    u'ふ`' : u'ぶ',
556#    u'へ`' : u'べ',
557#    u'ほ`' : u'ぼ',
558#    u'は[' : u'ぱ',
559#    u'ひ[' : u'ぴ',
560#    u'ふ[' : u'ぷ',
561#    u'へ[' : u'ぺ',
562#    u'ほ[' : u'ぽ',
563#}
564#
565#kana_voiced_consonant_us_rule = {
566#    u'か[' : u'が',
567#    u'き[' : u'ぎ',
568#    u'く[' : u'ぐ',
569#    u'け[' : u'げ',
570#    u'こ[' : u'ご',
571#    u'さ[' : u'ざ',
572#    u'し[' : u'じ',
573#    u'す[' : u'ず',
574#    u'せ[' : u'ぜ',
575#    u'そ[' : u'ぞ',
576#    u'た[' : u'だ',
577#    u'ち[' : u'ぢ',
578#    u'つ[' : u'づ',
579#    u'て[' : u'で',
580#    u'と[' : u'ど',
581#    u'は[' : u'ば',
582#    u'ひ[' : u'び',
583#    u'ふ[' : u'ぶ',
584#    u'へ[' : u'べ',
585#    u'ほ[' : u'ぼ',
586#    u'は]' : u'ぱ',
587#    u'ひ]' : u'ぴ',
588#    u'ふ]' : u'ぷ',
589#    u'へ]' : u'ぺ',
590#    u'ほ]' : u'ぽ',
591#}
592
593#hiragana, katakana, half_katakana
594hiragana_katakana_table = {
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    'ほ' : ('ホ', 'ホ'),
640    'ば' : ('バ', 'バ'),
641    'び' : ('ビ', 'ビ'),
642    'ぶ' : ('ブ', 'ブ'),
643    'べ' : ('ベ', 'ベ'),
644    'ぼ' : ('ボ', 'ボ'),
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    'ゎ' : ('ヮ', 'ワ'),
678    'ゐ' : ('ヰ', 'ィ'),
679    'ゑ' : ('ヱ', 'ェ'),
680    'ヴ' : ('ヴ', 'ヴ'),
681
682    # symbols
683    'ー' : ('ー', 'ー'),
684    '、' : ('、', '、'),
685    '。' : ('。', '。'),
686    '!' : ('!', '!'),
687    '\u201d'  : ('\u201d', '"'),
688    '#' : ('#', '#'),
689    '$' : ('$', '$'),
690    '%' : ('%', '%'),
691    '&' : ('&', '&'),
692    '\u2019'  : ('\u2019', '\''),
693    '(' : ('(', '('),
694    ')' : (')', ')'),
695    '\uff5e' : ('\uff5e', '~'),
696    '=' : ('=', '='),
697    '^' : ('^', '^'),
698    '\' : ('\', '\\'),
699    '|' : ('|', '|'),
700    '\u2018'  : ('\u2018', '`'),
701    '@' : ('@', '@'),
702    '゛' : ('゛', '゙'),
703    '{' : ('{', '{'),
704    '゜' : ('゜', '゚'),
705    '「' : ('「', '「'),
706    '+' : ('+', '+'),
707    ';' : (';', ';'),
708    '*' : ('*', '*'),
709    ':' : (':', ':'),
710    '}' : ('}', '}'),
711    '」' : ('」', '」'),
712    '<' : ('<', '<'),
713    '>' : ('>', '>'),
714    '?' : ('?', '?'),
715    '・' : ('・', '・'),
716    '/' : ('/', '/'),
717    '_' : ('_', '_'),
718    '¥' : ('¥', '¥'),
719
720    # numbers
721    '0': ('0', '0'),
722    '1': ('1', '1'),
723    '2': ('2', '2'),
724    '3': ('3', '3'),
725    '4': ('4', '4'),
726    '5': ('5', '5'),
727    '6': ('6', '6'),
728    '7': ('7', '7'),
729    '8': ('8', '8'),
730    '9': ('9', '9'),
731}
732