Generate PinyinParserTable with bopomofo
authorPeng Huang <shawn.p.huang@gmail.com>
Wed, 12 May 2010 07:35:56 +0000 (15:35 +0800)
committerPeng Huang <shawn.p.huang@gmail.com>
Wed, 12 May 2010 07:35:56 +0000 (15:35 +0800)
scripts/bopomofo.py [new file with mode: 0644]
scripts/genpytable.py
src/PinyinParserTable.h
src/Types.h

diff --git a/scripts/bopomofo.py b/scripts/bopomofo.py
new file mode 100644 (file)
index 0000000..c4c0a65
--- /dev/null
@@ -0,0 +1,449 @@
+# vim:set et sts=4:
+# -*- coding: utf-8 -*-
+
+'''
+const static gunichar bopomofo_char[] = {
+    L'\0',L'ㄅ',L'ㄆ',L'ㄇ',L'ㄈ',L'ㄉ',L'ㄊ',L'ㄋ',L'ㄌ',L'ㄍ',L'ㄎ',
+    L'ㄏ',L'ㄐ',L'ㄑ',L'ㄒ',L'ㄓ',L'ㄔ',L'ㄕ',L'ㄖ',L'ㄗ',L'ㄘ',L'ㄙ',
+
+    L'ㄧ',L'ㄨ',L'ㄩ',L'ㄚ',L'ㄛ',L'ㄜ',L'ㄝ',L'ㄞ',L'ㄟ',L'ㄠ',L'ㄡ',
+    L'ㄢ',L'ㄣ',L'ㄤ',L'ㄥ',L'ㄦ',
+
+    L'ˊ',L'ˇ',L'ˋ',L'˙',
+};
+'''
+
+bopomofo_pinyin_map = {
+    "ㄅ" : "b",
+    "ㄅㄚ" : "ba",
+    "ㄅㄛ" : "bo",
+    "ㄅㄞ" : "bai",
+    "ㄅㄟ" : "bei",
+    "ㄅㄠ" : "bao",
+    "ㄅㄢ" : "ban",
+    "ㄅㄣ" : "ben",
+    "ㄅㄤ" : "bang",
+    "ㄅㄥ" : "beng",
+    "ㄅㄧ" : "bi",
+    "ㄅㄧㄝ" : "bie",
+    "ㄅㄧㄠ" : "biao",
+    "ㄅㄧㄢ" : "bian",
+    "ㄅㄧㄣ" : "bin",
+    "ㄅㄧㄥ" : "bing",
+    "ㄅㄨ" : "bu",
+    "ㄆ" : "p",
+    "ㄆㄚ" : "pa",
+    "ㄆㄛ" : "po",
+    "ㄆㄞ" : "pai",
+    "ㄆㄟ" : "pei",
+    "ㄆㄠ" : "pao",
+    "ㄆㄡ" : "pou",
+    "ㄆㄢ" : "pan",
+    "ㄆㄣ" : "pen",
+    "ㄆㄤ" : "pang",
+    "ㄆㄥ" : "peng",
+    "ㄆㄧ" : "pi",
+    "ㄆㄧㄝ" : "pie",
+    "ㄆㄧㄠ" : "piao",
+    "ㄆㄧㄢ" : "pian",
+    "ㄆㄧㄣ" : "pin",
+    "ㄆㄧㄥ" : "ping",
+    "ㄆㄨ" : "pu",
+    "ㄇ" : "m",
+    "ㄇㄚ" : "ma",
+    "ㄇㄛ" : "mo",
+    "ㄇㄜ" : "me",
+    "ㄇㄞ" : "mai",
+    "ㄇㄟ" : "mei",
+    "ㄇㄠ" : "mao",
+    "ㄇㄡ" : "mou",
+    "ㄇㄢ" : "man",
+    "ㄇㄣ" : "men",
+    "ㄇㄤ" : "mang",
+    "ㄇㄥ" : "meng",
+    "ㄇㄧ" : "mi",
+    "ㄇㄧㄝ" : "mie",
+    "ㄇㄧㄠ" : "miao",
+    "ㄇㄧㄡ" : "miu",
+    "ㄇㄧㄢ" : "mian",
+    "ㄇㄧㄣ" : "min",
+    "ㄇㄧㄥ" : "ming",
+    "ㄇㄨ" : "mu",
+    "ㄈ" : "f",
+    "ㄈㄚ" : "fa",
+    "ㄈㄛ" : "fo",
+    "ㄈㄜ" : "fe",
+    "ㄈㄟ" : "fei",
+    "ㄈㄡ" : "fou",
+    "ㄈㄢ" : "fan",
+    "ㄈㄣ" : "fen",
+    "ㄈㄤ" : "fang",
+    "ㄈㄥ" : "feng",
+    "ㄈㄨ" : "fu",
+    "ㄉ" : "d",
+    "ㄉㄚ" : "da",
+    "ㄉㄜ" : "de",
+    "ㄉㄞ" : "dai",
+    "ㄉㄟ" : "dei",
+    "ㄉㄠ" : "dao",
+    "ㄉㄡ" : "dou",
+    "ㄉㄢ" : "dan",
+    "ㄉㄣ" : "den",
+    "ㄉㄤ" : "dang",
+    "ㄉㄥ" : "deng",
+    "ㄉㄧ" : "di",
+    "ㄉㄧㄚ" : "dia",
+    "ㄉㄧㄝ" : "die",
+    "ㄉㄧㄠ" : "diao",
+    "ㄉㄧㄡ" : "diu",
+    "ㄉㄧㄢ" : "dian",
+    "ㄉㄧㄣ" : "din",
+    "ㄉㄧㄥ" : "ding",
+    "ㄉㄨ" : "du",
+    "ㄉㄨㄛ" : "duo",
+    "ㄉㄨㄟ" : "dui",
+    "ㄉㄨㄢ" : "duan",
+    "ㄉㄨㄣ" : "dun",
+    "ㄉㄨㄥ" : "dong",
+    "ㄊ" : "t",
+    "ㄊㄚ" : "ta",
+    "ㄊㄜ" : "te",
+    "ㄊㄞ" : "tai",
+    "ㄊㄠ" : "tao",
+    "ㄊㄡ" : "tou",
+    "ㄊㄢ" : "tan",
+    "ㄊㄤ" : "tang",
+    "ㄊㄥ" : "teng",
+    "ㄊㄧ" : "ti",
+    "ㄊㄧㄝ" : "tie",
+    "ㄊㄧㄠ" : "tiao",
+    "ㄊㄧㄢ" : "tian",
+    "ㄊㄧㄥ" : "ting",
+    "ㄊㄨ" : "tu",
+    "ㄊㄨㄛ" : "tuo",
+    "ㄊㄨㄟ" : "tui",
+    "ㄊㄨㄢ" : "tuan",
+    "ㄊㄨㄣ" : "tun",
+    "ㄊㄨㄥ" : "tong",
+    "ㄋ" : "n",
+    "ㄋㄚ" : "na",
+    "ㄋㄜ" : "ne",
+    "ㄋㄞ" : "nai",
+    "ㄋㄟ" : "nei",
+    "ㄋㄠ" : "nao",
+    "ㄋㄡ" : "nou",
+    "ㄋㄢ" : "nan",
+    "ㄋㄣ" : "nen",
+    "ㄋㄤ" : "nang",
+    "ㄋㄥ" : "neng",
+    "ㄋㄧ" : "ni",
+    "ㄋㄧㄚ" : "nia",
+    "ㄋㄧㄝ" : "nie",
+    "ㄋㄧㄠ" : "niao",
+    "ㄋㄧㄡ" : "niu",
+    "ㄋㄧㄢ" : "nian",
+    "ㄋㄧㄣ" : "nin",
+    "ㄋㄧㄤ" : "niang",
+    "ㄋㄧㄥ" : "ning",
+    "ㄋㄨ" : "nu",
+    "ㄋㄨㄛ" : "nuo",
+    "ㄋㄨㄢ" : "nuan",
+    "ㄋㄨㄣ" : "nun",
+    "ㄋㄨㄥ" : "nong",
+    "ㄋㄩ" : "nv",
+    "ㄋㄩㄝ" : "nve",
+    "ㄌ" : "l",
+    "ㄌㄚ" : "la",
+    "ㄌㄛ" : "lo",
+    "ㄌㄜ" : "le",
+    "ㄌㄞ" : "lai",
+    "ㄌㄟ" : "lei",
+    "ㄌㄠ" : "lao",
+    "ㄌㄡ" : "lou",
+    "ㄌㄢ" : "lan",
+    "ㄌㄣ" : "len",
+    "ㄌㄤ" : "lang",
+    "ㄌㄥ" : "leng",
+    "ㄌㄧ" : "li",
+    "ㄌㄧㄚ" : "lia",
+    "ㄌㄧㄝ" : "lie",
+    "ㄌㄧㄠ" : "liao",
+    "ㄌㄧㄡ" : "liu",
+    "ㄌㄧㄢ" : "lian",
+    "ㄌㄧㄣ" : "lin",
+    "ㄌㄧㄤ" : "liang",
+    "ㄌㄧㄥ" : "ling",
+    "ㄌㄨ" : "lu",
+    "ㄌㄨㄛ" : "luo",
+    "ㄌㄨㄢ" : "luan",
+    "ㄌㄨㄣ" : "lun",
+    "ㄌㄨㄥ" : "long",
+    "ㄌㄩ" : "lv",
+    "ㄌㄩㄝ" : "lve",
+    "ㄍ" : "g",
+    "ㄍㄚ" : "ga",
+    "ㄍㄜ" : "ge",
+    "ㄍㄞ" : "gai",
+    "ㄍㄟ" : "gei",
+    "ㄍㄠ" : "gao",
+    "ㄍㄡ" : "gou",
+    "ㄍㄢ" : "gan",
+    "ㄍㄣ" : "gen",
+    "ㄍㄤ" : "gang",
+    "ㄍㄥ" : "geng",
+    "ㄍㄨ" : "gu",
+    "ㄍㄨㄚ" : "gua",
+    "ㄍㄨㄛ" : "guo",
+    "ㄍㄨㄞ" : "guai",
+    "ㄍㄨㄟ" : "gui",
+    "ㄍㄨㄢ" : "guan",
+    "ㄍㄨㄣ" : "gun",
+    "ㄍㄨㄤ" : "guang",
+    "ㄍㄨㄥ" : "gong",
+    "ㄎ" : "k",
+    "ㄎㄚ" : "ka",
+    "ㄎㄜ" : "ke",
+    "ㄎㄞ" : "kai",
+    "ㄎㄟ" : "kei",
+    "ㄎㄠ" : "kao",
+    "ㄎㄡ" : "kou",
+    "ㄎㄢ" : "kan",
+    "ㄎㄣ" : "ken",
+    "ㄎㄤ" : "kang",
+    "ㄎㄥ" : "keng",
+    "ㄎㄨ" : "ku",
+    "ㄎㄨㄚ" : "kua",
+    "ㄎㄨㄛ" : "kuo",
+    "ㄎㄨㄞ" : "kuai",
+    "ㄎㄨㄟ" : "kui",
+    "ㄎㄨㄢ" : "kuan",
+    "ㄎㄨㄣ" : "kun",
+    "ㄎㄨㄤ" : "kuang",
+    "ㄎㄨㄥ" : "kong",
+    "ㄏ" : "h",
+    "ㄏㄚ" : "ha",
+    "ㄏㄜ" : "he",
+    "ㄏㄞ" : "hai",
+    "ㄏㄟ" : "hei",
+    "ㄏㄠ" : "hao",
+    "ㄏㄡ" : "hou",
+    "ㄏㄢ" : "han",
+    "ㄏㄣ" : "hen",
+    "ㄏㄤ" : "hang",
+    "ㄏㄥ" : "heng",
+    "ㄏㄨ" : "hu",
+    "ㄏㄨㄚ" : "hua",
+    "ㄏㄨㄛ" : "huo",
+    "ㄏㄨㄞ" : "huai",
+    "ㄏㄨㄟ" : "hui",
+    "ㄏㄨㄢ" : "huan",
+    "ㄏㄨㄣ" : "hun",
+    "ㄏㄨㄤ" : "huang",
+    "ㄏㄨㄥ" : "hong",
+    "ㄐ" : "j",
+    "ㄐㄧ" : "ji",
+    "ㄐㄧㄚ" : "jia",
+    "ㄐㄧㄝ" : "jie",
+    "ㄐㄧㄠ" : "jiao",
+    "ㄐㄧㄡ" : "jiu",
+    "ㄐㄧㄢ" : "jian",
+    "ㄐㄧㄣ" : "jin",
+    "ㄐㄧㄤ" : "jiang",
+    "ㄐㄧㄥ" : "jing",
+    "ㄐㄩ" : "ju",
+    "ㄐㄩㄝ" : "jue",
+    "ㄐㄩㄢ" : "juan",
+    "ㄐㄩㄣ" : "jun",
+    "ㄐㄩㄥ" : "jiong",
+    "ㄑ" : "q",
+    "ㄑㄧ" : "qi",
+    "ㄑㄧㄚ" : "qia",
+    "ㄑㄧㄝ" : "qie",
+    "ㄑㄧㄠ" : "qiao",
+    "ㄑㄧㄡ" : "qiu",
+    "ㄑㄧㄢ" : "qian",
+    "ㄑㄧㄣ" : "qin",
+    "ㄑㄧㄤ" : "qiang",
+    "ㄑㄧㄥ" : "qing",
+    "ㄑㄩ" : "qu",
+    "ㄑㄩㄝ" : "que",
+    "ㄑㄩㄢ" : "quan",
+    "ㄑㄩㄣ" : "qun",
+    "ㄑㄩㄥ" : "qiong",
+    "ㄒ" : "x",
+    "ㄒㄧ" : "xi",
+    "ㄒㄧㄚ" : "xia",
+    "ㄒㄧㄝ" : "xie",
+    "ㄒㄧㄠ" : "xiao",
+    "ㄒㄧㄡ" : "xiu",
+    "ㄒㄧㄢ" : "xian",
+    "ㄒㄧㄣ" : "xin",
+    "ㄒㄧㄤ" : "xiang",
+    "ㄒㄧㄥ" : "xing",
+    "ㄒㄩ" : "xu",
+    "ㄒㄩㄝ" : "xue",
+    "ㄒㄩㄢ" : "xuan",
+    "ㄒㄩㄣ" : "xun",
+    "ㄒㄩㄥ" : "xiong",
+    "ㄓ" : "zhi",
+    "ㄓㄚ" : "zha",
+    "ㄓㄜ" : "zhe",
+    "ㄓㄞ" : "zhai",
+    "ㄓㄟ" : "zhei",
+    "ㄓㄠ" : "zhao",
+    "ㄓㄡ" : "zhou",
+    "ㄓㄢ" : "zhan",
+    "ㄓㄣ" : "zhen",
+    "ㄓㄤ" : "zhang",
+    "ㄓㄥ" : "zheng",
+    "ㄓㄨ" : "zhu",
+    "ㄓㄨㄚ" : "zhua",
+    "ㄓㄨㄛ" : "zhuo",
+    "ㄓㄨㄞ" : "zhuai",
+    "ㄓㄨㄟ" : "zhui",
+    "ㄓㄨㄢ" : "zhuan",
+    "ㄓㄨㄣ" : "zhun",
+    "ㄓㄨㄤ" : "zhuang",
+    "ㄓㄨㄥ" : "zhong",
+    "ㄔ" : "chi",
+    "ㄔㄚ" : "cha",
+    "ㄔㄜ" : "che",
+    "ㄔㄞ" : "chai",
+    "ㄔㄠ" : "chao",
+    "ㄔㄡ" : "chou",
+    "ㄔㄢ" : "chan",
+    "ㄔㄣ" : "chen",
+    "ㄔㄤ" : "chang",
+    "ㄔㄥ" : "cheng",
+    "ㄔㄨ" : "chu",
+    "ㄔㄨㄚ" : "chua",
+    "ㄔㄨㄛ" : "chuo",
+    "ㄔㄨㄞ" : "chuai",
+    "ㄔㄨㄟ" : "chui",
+    "ㄔㄨㄢ" : "chuan",
+    "ㄔㄨㄣ" : "chun",
+    "ㄔㄨㄤ" : "chuang",
+    "ㄔㄨㄥ" : "chong",
+    "ㄕ" : "shi",
+    "ㄕㄚ" : "sha",
+    "ㄕㄜ" : "she",
+    "ㄕㄞ" : "shai",
+    "ㄕㄟ" : "shei",
+    "ㄕㄠ" : "shao",
+    "ㄕㄡ" : "shou",
+    "ㄕㄢ" : "shan",
+    "ㄕㄣ" : "shen",
+    "ㄕㄤ" : "shang",
+    "ㄕㄥ" : "sheng",
+    "ㄕㄨ" : "shu",
+    "ㄕㄨㄚ" : "shua",
+    "ㄕㄨㄛ" : "shuo",
+    "ㄕㄨㄞ" : "shuai",
+    "ㄕㄨㄟ" : "shui",
+    "ㄕㄨㄢ" : "shuan",
+    "ㄕㄨㄣ" : "shun",
+    "ㄕㄨㄤ" : "shuang",
+    "ㄖ" : "ri",
+    "ㄖㄜ" : "re",
+    "ㄖㄠ" : "rao",
+    "ㄖㄡ" : "rou",
+    "ㄖㄢ" : "ran",
+    "ㄖㄣ" : "ren",
+    "ㄖㄤ" : "rang",
+    "ㄖㄥ" : "reng",
+    "ㄖㄨ" : "ru",
+    "ㄖㄨㄚ" : "rua",
+    "ㄖㄨㄛ" : "ruo",
+    "ㄖㄨㄟ" : "rui",
+    "ㄖㄨㄢ" : "ruan",
+    "ㄖㄨㄣ" : "run",
+    "ㄖㄨㄥ" : "rong",
+    "ㄗ" : "zi",
+    "ㄗㄚ" : "za",
+    "ㄗㄜ" : "ze",
+    "ㄗㄞ" : "zai",
+    "ㄗㄟ" : "zei",
+    "ㄗㄠ" : "zao",
+    "ㄗㄡ" : "zou",
+    "ㄗㄢ" : "zan",
+    "ㄗㄣ" : "zen",
+    "ㄗㄤ" : "zang",
+    "ㄗㄥ" : "zeng",
+    "ㄗㄨ" : "zu",
+    "ㄗㄨㄛ" : "zuo",
+    "ㄗㄨㄟ" : "zui",
+    "ㄗㄨㄢ" : "zuan",
+    "ㄗㄨㄣ" : "zun",
+    "ㄗㄨㄥ" : "zong",
+    "ㄘ" : "ci",
+    "ㄘㄚ" : "ca",
+    "ㄘㄜ" : "ce",
+    "ㄘㄞ" : "cai",
+    "ㄘㄠ" : "cao",
+    "ㄘㄡ" : "cou",
+    "ㄘㄢ" : "can",
+    "ㄘㄣ" : "cen",
+    "ㄘㄤ" : "cang",
+    "ㄘㄥ" : "ceng",
+    "ㄘㄨ" : "cu",
+    "ㄘㄨㄛ" : "cuo",
+    "ㄘㄨㄟ" : "cui",
+    "ㄘㄨㄢ" : "cuan",
+    "ㄘㄨㄣ" : "cun",
+    "ㄘㄨㄥ" : "cong",
+    "ㄙ" : "si",
+    "ㄙㄚ" : "sa",
+    "ㄙㄜ" : "se",
+    "ㄙㄞ" : "sai",
+    "ㄙㄠ" : "sao",
+    "ㄙㄡ" : "sou",
+    "ㄙㄢ" : "san",
+    "ㄙㄣ" : "sen",
+    "ㄙㄤ" : "sang",
+    "ㄙㄥ" : "seng",
+    "ㄙㄨ" : "su",
+    "ㄙㄨㄛ" : "suo",
+    "ㄙㄨㄟ" : "sui",
+    "ㄙㄨㄢ" : "suan",
+    "ㄙㄨㄣ" : "sun",
+    "ㄙㄨㄥ" : "song",
+    "ㄚ" : "a",
+    "ㄛ" : "o",
+    "ㄜ" : "e",
+    "ㄞ" : "ai",
+    "ㄟ" : "ei",
+    "ㄠ" : "ao",
+    "ㄡ" : "ou",
+    "ㄢ" : "an",
+    "ㄣ" : "en",
+    "ㄤ" : "ang",
+    "ㄥ" : "eng",
+    "ㄦ" : "er",
+    "ㄧ" : "yi",
+    "ㄧㄚ" : "ya",
+    "ㄧㄛ" : "yo",
+    "ㄧㄝ" : "ye",
+    "ㄧㄞ" : "yai",
+    "ㄧㄠ" : "yao",
+    "ㄧㄡ" : "you",
+    "ㄧㄢ" : "yan",
+    "ㄧㄣ" : "yin",
+    "ㄧㄤ" : "yang",
+    "ㄧㄥ" : "ying",
+    "ㄨ" : "wu",
+    "ㄨㄚ" : "wa",
+    "ㄨㄛ" : "wo",
+    "ㄨㄞ" : "wai",
+    "ㄨㄟ" : "wei",
+    "ㄨㄢ" : "wan",
+    "ㄨㄣ" : "wen",
+    "ㄨㄤ" : "wang",
+    "ㄨㄥ" : "weng",
+    "ㄩ" : "yu",
+    "ㄩㄝ" : "yue",
+    "ㄩㄢ" : "yuan",
+    "ㄩㄣ" : "yun",
+    "ㄩㄥ" : "yong",
+}
+
+pinyin_bopomofo_map = dict([(v, k) for k, v in bopomofo_pinyin_map.items()])
index 4e031ba..5021718 100644 (file)
@@ -2,6 +2,7 @@
 # -*- coding: utf-8 -*-
 
 from pydict import *
+from bopomofo import *
 
 def str_cmp(a, b):
     if len(a) == len(b):
@@ -219,7 +220,9 @@ def get_pinyin_with_fuzzy():
             (fs2 and fs2 + fy2 not in pinyin_list):
             fy2 = ""
 
-        yield text, s, y, fs1, fy1, fs2, fy2, l, flags
+        bopomofo = pinyin_bopomofo_map.get(text, "")
+
+        yield text, bopomofo, s, y, fs1, fy1, fs2, fy2, l, flags
 
 
 def gen_header():
@@ -269,13 +272,13 @@ def union_dups(a):
     na.sort()
     return na
 
-def gen_tables():
+def gen_table():
 
     pinyins = list(get_pinyin_with_fuzzy())
     pinyins = union_dups(pinyins)
 
     print 'static const Pinyin pinyin_table[] = {'
-    for i, (text, s, y, fs1, fy1, fs2, fy2, l, flags)  in enumerate(pinyins):
+    for i, (text, bopomofo, s, y, fs1, fy1, fs2, fy2, l, flags)  in enumerate(pinyins):
         s_id = "PINYIN_ID_%s" % s.upper() if s else "PINYIN_ID_ZERO"
         y_id = "PINYIN_ID_%s" % y.upper() if y else "PINYIN_ID_ZERO"
         fs1_id = "PINYIN_ID_%s" % fs1.upper() if fs1 else "PINYIN_ID_ZERO"
@@ -286,6 +289,7 @@ def gen_tables():
         # args = (i, ) + tuple(['"%s"' % s for s in p[:3]]) + tuple(["PINYIN_ID_%s" % s.upper() if s else "PINYIN_ID_ZERO" for s in p[3:9]]) + p[9:-1] + (str(p[-1]), )
         print '''    {  /* %d */
         text        : "%s",
+        bopomofo    : "%s",
         sheng       : "%s",
         yun         : "%s",
         sheng_id    : %s,
@@ -296,13 +300,22 @@ def gen_tables():
         fyun_id_2   : %s,
         len         : %d,
         flags       : %s
-    },''' % (i, text, s, y.replace("v", "ü"), s_id, y_id, fs1_id, fy1_id, fs2_id, fy2_id, l, flags)
+    },''' % (i, text, bopomofo, s, y.replace("v", "ü"), s_id, y_id, fs1_id, fy1_id, fs2_id, fy2_id, l, flags)
 
     print '};'
     print
 
     return pinyins
 
+def gen_bopomofo_table(pinyins):
+    bopomofo_table = [ (i, p) for i, p in enumerate(pinyins)]
+    bopomofo_table.sort(lambda a, b: cmp(a[1][1], b[1][1]))
+    print 'static const Pinyin *bopomofo_table[] = {'
+    for i, p in bopomofo_table:
+        if p[1]:
+            print '    %-20s %s' % ('&pinyin_table[%d],' % i, '// "%s" => "%s"' % (p[1], p[0]))
+    print '};'
+
 def get_all_special(pinyins):
     for p in pinyins:
         if p[-1] in ["n", "g", "r"]:
@@ -394,8 +407,9 @@ def gen_special_table(pinyins):
 def main():
     # gen_header()
     # gen_macros()
-    pinyins = gen_tables()
+    pinyins = gen_table()
     # gen_full_pinyin_table (pinyins)
+    gen_bopomofo_table(pinyins)
     gen_special_table(pinyins)
     # gen_option_check("pinyin_option_check_sheng", fuzzy_shengmu)
     # gen_option_check("pinyin_option_check_yun", fuzzy_yunmu)
index d6d1c7c..11dc23d 100644 (file)
@@ -1,6 +1,7 @@
 static const Pinyin pinyin_table[] = {
     {  /* 0 */
         text        : "a",
+        bopomofo    : "ㄚ",
         sheng       : "",
         yun         : "a",
         sheng_id    : PINYIN_ID_ZERO,
@@ -14,6 +15,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 1 */
         text        : "agn",
+        bopomofo    : "",
         sheng       : "",
         yun         : "ang",
         sheng_id    : PINYIN_ID_ZERO,
@@ -27,6 +29,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 2 */
         text        : "ai",
+        bopomofo    : "ㄞ",
         sheng       : "",
         yun         : "ai",
         sheng_id    : PINYIN_ID_ZERO,
@@ -40,6 +43,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 3 */
         text        : "amg",
+        bopomofo    : "",
         sheng       : "",
         yun         : "ang",
         sheng_id    : PINYIN_ID_ZERO,
@@ -53,6 +57,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 4 */
         text        : "an",
+        bopomofo    : "ㄢ",
         sheng       : "",
         yun         : "an",
         sheng_id    : PINYIN_ID_ZERO,
@@ -66,6 +71,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 5 */
         text        : "ang",
+        bopomofo    : "ㄤ",
         sheng       : "",
         yun         : "ang",
         sheng_id    : PINYIN_ID_ZERO,
@@ -79,6 +85,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 6 */
         text        : "ao",
+        bopomofo    : "ㄠ",
         sheng       : "",
         yun         : "ao",
         sheng_id    : PINYIN_ID_ZERO,
@@ -92,6 +99,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 7 */
         text        : "b",
+        bopomofo    : "ㄅ",
         sheng       : "b",
         yun         : "",
         sheng_id    : PINYIN_ID_B,
@@ -105,6 +113,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 8 */
         text        : "ba",
+        bopomofo    : "ㄅㄚ",
         sheng       : "b",
         yun         : "a",
         sheng_id    : PINYIN_ID_B,
@@ -118,6 +127,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 9 */
         text        : "bagn",
+        bopomofo    : "",
         sheng       : "b",
         yun         : "ang",
         sheng_id    : PINYIN_ID_B,
@@ -131,6 +141,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 10 */
         text        : "bai",
+        bopomofo    : "ㄅㄞ",
         sheng       : "b",
         yun         : "ai",
         sheng_id    : PINYIN_ID_B,
@@ -144,6 +155,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 11 */
         text        : "bamg",
+        bopomofo    : "",
         sheng       : "b",
         yun         : "ang",
         sheng_id    : PINYIN_ID_B,
@@ -157,6 +169,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 12 */
         text        : "ban",
+        bopomofo    : "ㄅㄢ",
         sheng       : "b",
         yun         : "an",
         sheng_id    : PINYIN_ID_B,
@@ -170,6 +183,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 13 */
         text        : "bang",
+        bopomofo    : "ㄅㄤ",
         sheng       : "b",
         yun         : "ang",
         sheng_id    : PINYIN_ID_B,
@@ -183,6 +197,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 14 */
         text        : "bao",
+        bopomofo    : "ㄅㄠ",
         sheng       : "b",
         yun         : "ao",
         sheng_id    : PINYIN_ID_B,
@@ -196,6 +211,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 15 */
         text        : "begn",
+        bopomofo    : "",
         sheng       : "b",
         yun         : "eng",
         sheng_id    : PINYIN_ID_B,
@@ -209,6 +225,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 16 */
         text        : "bei",
+        bopomofo    : "ㄅㄟ",
         sheng       : "b",
         yun         : "ei",
         sheng_id    : PINYIN_ID_B,
@@ -222,6 +239,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 17 */
         text        : "bemg",
+        bopomofo    : "",
         sheng       : "b",
         yun         : "eng",
         sheng_id    : PINYIN_ID_B,
@@ -235,6 +253,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 18 */
         text        : "ben",
+        bopomofo    : "ㄅㄣ",
         sheng       : "b",
         yun         : "en",
         sheng_id    : PINYIN_ID_B,
@@ -248,6 +267,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 19 */
         text        : "beng",
+        bopomofo    : "ㄅㄥ",
         sheng       : "b",
         yun         : "eng",
         sheng_id    : PINYIN_ID_B,
@@ -261,6 +281,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 20 */
         text        : "bi",
+        bopomofo    : "ㄅㄧ",
         sheng       : "b",
         yun         : "i",
         sheng_id    : PINYIN_ID_B,
@@ -274,6 +295,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 21 */
         text        : "bian",
+        bopomofo    : "ㄅㄧㄢ",
         sheng       : "b",
         yun         : "ian",
         sheng_id    : PINYIN_ID_B,
@@ -287,6 +309,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 22 */
         text        : "biang",
+        bopomofo    : "",
         sheng       : "b",
         yun         : "iang",
         sheng_id    : PINYIN_ID_B,
@@ -300,6 +323,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 23 */
         text        : "biao",
+        bopomofo    : "ㄅㄧㄠ",
         sheng       : "b",
         yun         : "iao",
         sheng_id    : PINYIN_ID_B,
@@ -313,6 +337,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 24 */
         text        : "bie",
+        bopomofo    : "ㄅㄧㄝ",
         sheng       : "b",
         yun         : "ie",
         sheng_id    : PINYIN_ID_B,
@@ -326,6 +351,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 25 */
         text        : "bign",
+        bopomofo    : "",
         sheng       : "b",
         yun         : "ing",
         sheng_id    : PINYIN_ID_B,
@@ -339,6 +365,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 26 */
         text        : "bimg",
+        bopomofo    : "",
         sheng       : "b",
         yun         : "ing",
         sheng_id    : PINYIN_ID_B,
@@ -352,6 +379,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 27 */
         text        : "bin",
+        bopomofo    : "ㄅㄧㄣ",
         sheng       : "b",
         yun         : "in",
         sheng_id    : PINYIN_ID_B,
@@ -365,6 +393,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 28 */
         text        : "bing",
+        bopomofo    : "ㄅㄧㄥ",
         sheng       : "b",
         yun         : "ing",
         sheng_id    : PINYIN_ID_B,
@@ -378,6 +407,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 29 */
         text        : "bo",
+        bopomofo    : "ㄅㄛ",
         sheng       : "b",
         yun         : "o",
         sheng_id    : PINYIN_ID_B,
@@ -391,6 +421,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 30 */
         text        : "bu",
+        bopomofo    : "ㄅㄨ",
         sheng       : "b",
         yun         : "u",
         sheng_id    : PINYIN_ID_B,
@@ -404,6 +435,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 31 */
         text        : "c",
+        bopomofo    : "",
         sheng       : "c",
         yun         : "",
         sheng_id    : PINYIN_ID_C,
@@ -417,6 +449,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 32 */
         text        : "ca",
+        bopomofo    : "ㄘㄚ",
         sheng       : "c",
         yun         : "a",
         sheng_id    : PINYIN_ID_C,
@@ -430,6 +463,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 33 */
         text        : "cagn",
+        bopomofo    : "",
         sheng       : "c",
         yun         : "ang",
         sheng_id    : PINYIN_ID_C,
@@ -443,6 +477,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 34 */
         text        : "cai",
+        bopomofo    : "ㄘㄞ",
         sheng       : "c",
         yun         : "ai",
         sheng_id    : PINYIN_ID_C,
@@ -456,6 +491,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 35 */
         text        : "camg",
+        bopomofo    : "",
         sheng       : "c",
         yun         : "ang",
         sheng_id    : PINYIN_ID_C,
@@ -469,6 +505,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 36 */
         text        : "can",
+        bopomofo    : "ㄘㄢ",
         sheng       : "c",
         yun         : "an",
         sheng_id    : PINYIN_ID_C,
@@ -482,6 +519,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 37 */
         text        : "cang",
+        bopomofo    : "ㄘㄤ",
         sheng       : "c",
         yun         : "ang",
         sheng_id    : PINYIN_ID_C,
@@ -495,6 +533,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 38 */
         text        : "cao",
+        bopomofo    : "ㄘㄠ",
         sheng       : "c",
         yun         : "ao",
         sheng_id    : PINYIN_ID_C,
@@ -508,6 +547,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 39 */
         text        : "ce",
+        bopomofo    : "ㄘㄜ",
         sheng       : "c",
         yun         : "e",
         sheng_id    : PINYIN_ID_C,
@@ -521,6 +561,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 40 */
         text        : "cegn",
+        bopomofo    : "",
         sheng       : "c",
         yun         : "eng",
         sheng_id    : PINYIN_ID_C,
@@ -534,6 +575,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 41 */
         text        : "cemg",
+        bopomofo    : "",
         sheng       : "c",
         yun         : "eng",
         sheng_id    : PINYIN_ID_C,
@@ -547,6 +589,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 42 */
         text        : "cen",
+        bopomofo    : "ㄘㄣ",
         sheng       : "c",
         yun         : "en",
         sheng_id    : PINYIN_ID_C,
@@ -560,6 +603,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 43 */
         text        : "ceng",
+        bopomofo    : "ㄘㄥ",
         sheng       : "c",
         yun         : "eng",
         sheng_id    : PINYIN_ID_C,
@@ -573,6 +617,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 44 */
         text        : "ch",
+        bopomofo    : "",
         sheng       : "ch",
         yun         : "",
         sheng_id    : PINYIN_ID_CH,
@@ -586,6 +631,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 45 */
         text        : "cha",
+        bopomofo    : "ㄔㄚ",
         sheng       : "ch",
         yun         : "a",
         sheng_id    : PINYIN_ID_CH,
@@ -599,6 +645,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 46 */
         text        : "chagn",
+        bopomofo    : "",
         sheng       : "ch",
         yun         : "ang",
         sheng_id    : PINYIN_ID_CH,
@@ -612,6 +659,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 47 */
         text        : "chai",
+        bopomofo    : "ㄔㄞ",
         sheng       : "ch",
         yun         : "ai",
         sheng_id    : PINYIN_ID_CH,
@@ -625,6 +673,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 48 */
         text        : "chamg",
+        bopomofo    : "",
         sheng       : "ch",
         yun         : "ang",
         sheng_id    : PINYIN_ID_CH,
@@ -638,6 +687,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 49 */
         text        : "chan",
+        bopomofo    : "ㄔㄢ",
         sheng       : "ch",
         yun         : "an",
         sheng_id    : PINYIN_ID_CH,
@@ -651,6 +701,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 50 */
         text        : "chang",
+        bopomofo    : "ㄔㄤ",
         sheng       : "ch",
         yun         : "ang",
         sheng_id    : PINYIN_ID_CH,
@@ -664,6 +715,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 51 */
         text        : "chao",
+        bopomofo    : "ㄔㄠ",
         sheng       : "ch",
         yun         : "ao",
         sheng_id    : PINYIN_ID_CH,
@@ -677,6 +729,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 52 */
         text        : "che",
+        bopomofo    : "ㄔㄜ",
         sheng       : "ch",
         yun         : "e",
         sheng_id    : PINYIN_ID_CH,
@@ -690,6 +743,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 53 */
         text        : "chegn",
+        bopomofo    : "",
         sheng       : "ch",
         yun         : "eng",
         sheng_id    : PINYIN_ID_CH,
@@ -703,6 +757,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 54 */
         text        : "chemg",
+        bopomofo    : "",
         sheng       : "ch",
         yun         : "eng",
         sheng_id    : PINYIN_ID_CH,
@@ -716,6 +771,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 55 */
         text        : "chen",
+        bopomofo    : "ㄔㄣ",
         sheng       : "ch",
         yun         : "en",
         sheng_id    : PINYIN_ID_CH,
@@ -729,6 +785,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 56 */
         text        : "cheng",
+        bopomofo    : "ㄔㄥ",
         sheng       : "ch",
         yun         : "eng",
         sheng_id    : PINYIN_ID_CH,
@@ -742,6 +799,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 57 */
         text        : "chi",
+        bopomofo    : "ㄔ",
         sheng       : "ch",
         yun         : "i",
         sheng_id    : PINYIN_ID_CH,
@@ -755,6 +813,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 58 */
         text        : "chogn",
+        bopomofo    : "",
         sheng       : "ch",
         yun         : "ong",
         sheng_id    : PINYIN_ID_CH,
@@ -768,6 +827,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 59 */
         text        : "chomg",
+        bopomofo    : "",
         sheng       : "ch",
         yun         : "ong",
         sheng_id    : PINYIN_ID_CH,
@@ -781,6 +841,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 60 */
         text        : "chong",
+        bopomofo    : "ㄔㄨㄥ",
         sheng       : "ch",
         yun         : "ong",
         sheng_id    : PINYIN_ID_CH,
@@ -794,6 +855,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 61 */
         text        : "chou",
+        bopomofo    : "ㄔㄡ",
         sheng       : "ch",
         yun         : "ou",
         sheng_id    : PINYIN_ID_CH,
@@ -807,6 +869,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 62 */
         text        : "chu",
+        bopomofo    : "ㄔㄨ",
         sheng       : "ch",
         yun         : "u",
         sheng_id    : PINYIN_ID_CH,
@@ -820,6 +883,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 63 */
         text        : "chuagn",
+        bopomofo    : "",
         sheng       : "ch",
         yun         : "uang",
         sheng_id    : PINYIN_ID_CH,
@@ -833,6 +897,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 64 */
         text        : "chuai",
+        bopomofo    : "ㄔㄨㄞ",
         sheng       : "ch",
         yun         : "uai",
         sheng_id    : PINYIN_ID_CH,
@@ -846,6 +911,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 65 */
         text        : "chuamg",
+        bopomofo    : "",
         sheng       : "ch",
         yun         : "uang",
         sheng_id    : PINYIN_ID_CH,
@@ -859,6 +925,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 66 */
         text        : "chuan",
+        bopomofo    : "ㄔㄨㄢ",
         sheng       : "ch",
         yun         : "uan",
         sheng_id    : PINYIN_ID_CH,
@@ -872,6 +939,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 67 */
         text        : "chuang",
+        bopomofo    : "ㄔㄨㄤ",
         sheng       : "ch",
         yun         : "uang",
         sheng_id    : PINYIN_ID_CH,
@@ -885,6 +953,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 68 */
         text        : "chuei",
+        bopomofo    : "",
         sheng       : "ch",
         yun         : "ui",
         sheng_id    : PINYIN_ID_CH,
@@ -898,6 +967,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 69 */
         text        : "chuen",
+        bopomofo    : "",
         sheng       : "ch",
         yun         : "un",
         sheng_id    : PINYIN_ID_CH,
@@ -911,6 +981,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 70 */
         text        : "chui",
+        bopomofo    : "ㄔㄨㄟ",
         sheng       : "ch",
         yun         : "ui",
         sheng_id    : PINYIN_ID_CH,
@@ -924,6 +995,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 71 */
         text        : "chun",
+        bopomofo    : "ㄔㄨㄣ",
         sheng       : "ch",
         yun         : "un",
         sheng_id    : PINYIN_ID_CH,
@@ -937,6 +1009,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 72 */
         text        : "chuo",
+        bopomofo    : "ㄔㄨㄛ",
         sheng       : "ch",
         yun         : "uo",
         sheng_id    : PINYIN_ID_CH,
@@ -950,6 +1023,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 73 */
         text        : "ci",
+        bopomofo    : "ㄘ",
         sheng       : "c",
         yun         : "i",
         sheng_id    : PINYIN_ID_C,
@@ -963,6 +1037,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 74 */
         text        : "cogn",
+        bopomofo    : "",
         sheng       : "c",
         yun         : "ong",
         sheng_id    : PINYIN_ID_C,
@@ -976,6 +1051,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 75 */
         text        : "comg",
+        bopomofo    : "",
         sheng       : "c",
         yun         : "ong",
         sheng_id    : PINYIN_ID_C,
@@ -989,6 +1065,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 76 */
         text        : "cong",
+        bopomofo    : "ㄘㄨㄥ",
         sheng       : "c",
         yun         : "ong",
         sheng_id    : PINYIN_ID_C,
@@ -1002,6 +1079,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 77 */
         text        : "cou",
+        bopomofo    : "ㄘㄡ",
         sheng       : "c",
         yun         : "ou",
         sheng_id    : PINYIN_ID_C,
@@ -1015,6 +1093,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 78 */
         text        : "cu",
+        bopomofo    : "ㄘㄨ",
         sheng       : "c",
         yun         : "u",
         sheng_id    : PINYIN_ID_C,
@@ -1028,6 +1107,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 79 */
         text        : "cuai",
+        bopomofo    : "",
         sheng       : "c",
         yun         : "uai",
         sheng_id    : PINYIN_ID_C,
@@ -1041,6 +1121,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 80 */
         text        : "cuan",
+        bopomofo    : "ㄘㄨㄢ",
         sheng       : "c",
         yun         : "uan",
         sheng_id    : PINYIN_ID_C,
@@ -1054,6 +1135,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 81 */
         text        : "cuang",
+        bopomofo    : "",
         sheng       : "c",
         yun         : "uang",
         sheng_id    : PINYIN_ID_C,
@@ -1067,6 +1149,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 82 */
         text        : "cuei",
+        bopomofo    : "",
         sheng       : "c",
         yun         : "ui",
         sheng_id    : PINYIN_ID_C,
@@ -1080,6 +1163,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 83 */
         text        : "cuen",
+        bopomofo    : "",
         sheng       : "c",
         yun         : "un",
         sheng_id    : PINYIN_ID_C,
@@ -1093,6 +1177,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 84 */
         text        : "cui",
+        bopomofo    : "ㄘㄨㄟ",
         sheng       : "c",
         yun         : "ui",
         sheng_id    : PINYIN_ID_C,
@@ -1106,6 +1191,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 85 */
         text        : "cun",
+        bopomofo    : "ㄘㄨㄣ",
         sheng       : "c",
         yun         : "un",
         sheng_id    : PINYIN_ID_C,
@@ -1119,6 +1205,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 86 */
         text        : "cuo",
+        bopomofo    : "ㄘㄨㄛ",
         sheng       : "c",
         yun         : "uo",
         sheng_id    : PINYIN_ID_C,
@@ -1132,6 +1219,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 87 */
         text        : "d",
+        bopomofo    : "ㄉ",
         sheng       : "d",
         yun         : "",
         sheng_id    : PINYIN_ID_D,
@@ -1145,6 +1233,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 88 */
         text        : "da",
+        bopomofo    : "ㄉㄚ",
         sheng       : "d",
         yun         : "a",
         sheng_id    : PINYIN_ID_D,
@@ -1158,6 +1247,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 89 */
         text        : "dagn",
+        bopomofo    : "",
         sheng       : "d",
         yun         : "ang",
         sheng_id    : PINYIN_ID_D,
@@ -1171,6 +1261,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 90 */
         text        : "dai",
+        bopomofo    : "ㄉㄞ",
         sheng       : "d",
         yun         : "ai",
         sheng_id    : PINYIN_ID_D,
@@ -1184,6 +1275,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 91 */
         text        : "damg",
+        bopomofo    : "",
         sheng       : "d",
         yun         : "ang",
         sheng_id    : PINYIN_ID_D,
@@ -1197,6 +1289,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 92 */
         text        : "dan",
+        bopomofo    : "ㄉㄢ",
         sheng       : "d",
         yun         : "an",
         sheng_id    : PINYIN_ID_D,
@@ -1210,6 +1303,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 93 */
         text        : "dang",
+        bopomofo    : "ㄉㄤ",
         sheng       : "d",
         yun         : "ang",
         sheng_id    : PINYIN_ID_D,
@@ -1223,6 +1317,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 94 */
         text        : "dao",
+        bopomofo    : "ㄉㄠ",
         sheng       : "d",
         yun         : "ao",
         sheng_id    : PINYIN_ID_D,
@@ -1236,6 +1331,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 95 */
         text        : "de",
+        bopomofo    : "ㄉㄜ",
         sheng       : "d",
         yun         : "e",
         sheng_id    : PINYIN_ID_D,
@@ -1249,6 +1345,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 96 */
         text        : "degn",
+        bopomofo    : "",
         sheng       : "d",
         yun         : "eng",
         sheng_id    : PINYIN_ID_D,
@@ -1262,6 +1359,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 97 */
         text        : "dei",
+        bopomofo    : "ㄉㄟ",
         sheng       : "d",
         yun         : "ei",
         sheng_id    : PINYIN_ID_D,
@@ -1275,6 +1373,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 98 */
         text        : "demg",
+        bopomofo    : "",
         sheng       : "d",
         yun         : "eng",
         sheng_id    : PINYIN_ID_D,
@@ -1288,6 +1387,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 99 */
         text        : "den",
+        bopomofo    : "ㄉㄣ",
         sheng       : "d",
         yun         : "en",
         sheng_id    : PINYIN_ID_D,
@@ -1301,6 +1401,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 100 */
         text        : "deng",
+        bopomofo    : "ㄉㄥ",
         sheng       : "d",
         yun         : "eng",
         sheng_id    : PINYIN_ID_D,
@@ -1314,6 +1415,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 101 */
         text        : "di",
+        bopomofo    : "ㄉㄧ",
         sheng       : "d",
         yun         : "i",
         sheng_id    : PINYIN_ID_D,
@@ -1327,6 +1429,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 102 */
         text        : "dia",
+        bopomofo    : "ㄉㄧㄚ",
         sheng       : "d",
         yun         : "ia",
         sheng_id    : PINYIN_ID_D,
@@ -1340,6 +1443,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 103 */
         text        : "dian",
+        bopomofo    : "ㄉㄧㄢ",
         sheng       : "d",
         yun         : "ian",
         sheng_id    : PINYIN_ID_D,
@@ -1353,6 +1457,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 104 */
         text        : "diang",
+        bopomofo    : "",
         sheng       : "d",
         yun         : "iang",
         sheng_id    : PINYIN_ID_D,
@@ -1366,6 +1471,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 105 */
         text        : "diao",
+        bopomofo    : "ㄉㄧㄠ",
         sheng       : "d",
         yun         : "iao",
         sheng_id    : PINYIN_ID_D,
@@ -1379,6 +1485,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 106 */
         text        : "die",
+        bopomofo    : "ㄉㄧㄝ",
         sheng       : "d",
         yun         : "ie",
         sheng_id    : PINYIN_ID_D,
@@ -1392,6 +1499,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 107 */
         text        : "dign",
+        bopomofo    : "",
         sheng       : "d",
         yun         : "ing",
         sheng_id    : PINYIN_ID_D,
@@ -1405,6 +1513,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 108 */
         text        : "dimg",
+        bopomofo    : "",
         sheng       : "d",
         yun         : "ing",
         sheng_id    : PINYIN_ID_D,
@@ -1418,6 +1527,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 109 */
         text        : "din",
+        bopomofo    : "ㄉㄧㄣ",
         sheng       : "d",
         yun         : "in",
         sheng_id    : PINYIN_ID_D,
@@ -1431,6 +1541,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 110 */
         text        : "ding",
+        bopomofo    : "ㄉㄧㄥ",
         sheng       : "d",
         yun         : "ing",
         sheng_id    : PINYIN_ID_D,
@@ -1444,6 +1555,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 111 */
         text        : "diou",
+        bopomofo    : "",
         sheng       : "d",
         yun         : "iu",
         sheng_id    : PINYIN_ID_D,
@@ -1457,6 +1569,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 112 */
         text        : "diu",
+        bopomofo    : "ㄉㄧㄡ",
         sheng       : "d",
         yun         : "iu",
         sheng_id    : PINYIN_ID_D,
@@ -1470,6 +1583,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 113 */
         text        : "dogn",
+        bopomofo    : "",
         sheng       : "d",
         yun         : "ong",
         sheng_id    : PINYIN_ID_D,
@@ -1483,6 +1597,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 114 */
         text        : "domg",
+        bopomofo    : "",
         sheng       : "d",
         yun         : "ong",
         sheng_id    : PINYIN_ID_D,
@@ -1496,6 +1611,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 115 */
         text        : "dong",
+        bopomofo    : "ㄉㄨㄥ",
         sheng       : "d",
         yun         : "ong",
         sheng_id    : PINYIN_ID_D,
@@ -1509,6 +1625,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 116 */
         text        : "dou",
+        bopomofo    : "ㄉㄡ",
         sheng       : "d",
         yun         : "ou",
         sheng_id    : PINYIN_ID_D,
@@ -1522,6 +1639,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 117 */
         text        : "du",
+        bopomofo    : "ㄉㄨ",
         sheng       : "d",
         yun         : "u",
         sheng_id    : PINYIN_ID_D,
@@ -1535,6 +1653,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 118 */
         text        : "duan",
+        bopomofo    : "ㄉㄨㄢ",
         sheng       : "d",
         yun         : "uan",
         sheng_id    : PINYIN_ID_D,
@@ -1548,6 +1667,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 119 */
         text        : "duang",
+        bopomofo    : "",
         sheng       : "d",
         yun         : "uang",
         sheng_id    : PINYIN_ID_D,
@@ -1561,6 +1681,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 120 */
         text        : "duei",
+        bopomofo    : "",
         sheng       : "d",
         yun         : "ui",
         sheng_id    : PINYIN_ID_D,
@@ -1574,6 +1695,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 121 */
         text        : "duen",
+        bopomofo    : "",
         sheng       : "d",
         yun         : "un",
         sheng_id    : PINYIN_ID_D,
@@ -1587,6 +1709,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 122 */
         text        : "dui",
+        bopomofo    : "ㄉㄨㄟ",
         sheng       : "d",
         yun         : "ui",
         sheng_id    : PINYIN_ID_D,
@@ -1600,6 +1723,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 123 */
         text        : "dun",
+        bopomofo    : "ㄉㄨㄣ",
         sheng       : "d",
         yun         : "un",
         sheng_id    : PINYIN_ID_D,
@@ -1613,6 +1737,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 124 */
         text        : "duo",
+        bopomofo    : "ㄉㄨㄛ",
         sheng       : "d",
         yun         : "uo",
         sheng_id    : PINYIN_ID_D,
@@ -1626,6 +1751,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 125 */
         text        : "e",
+        bopomofo    : "ㄜ",
         sheng       : "",
         yun         : "e",
         sheng_id    : PINYIN_ID_ZERO,
@@ -1639,6 +1765,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 126 */
         text        : "ei",
+        bopomofo    : "ㄟ",
         sheng       : "",
         yun         : "ei",
         sheng_id    : PINYIN_ID_ZERO,
@@ -1652,6 +1779,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 127 */
         text        : "en",
+        bopomofo    : "ㄣ",
         sheng       : "",
         yun         : "en",
         sheng_id    : PINYIN_ID_ZERO,
@@ -1665,6 +1793,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 128 */
         text        : "er",
+        bopomofo    : "ㄦ",
         sheng       : "",
         yun         : "er",
         sheng_id    : PINYIN_ID_ZERO,
@@ -1678,6 +1807,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 129 */
         text        : "f",
+        bopomofo    : "ㄈ",
         sheng       : "f",
         yun         : "",
         sheng_id    : PINYIN_ID_F,
@@ -1691,6 +1821,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 130 */
         text        : "fa",
+        bopomofo    : "ㄈㄚ",
         sheng       : "f",
         yun         : "a",
         sheng_id    : PINYIN_ID_F,
@@ -1704,6 +1835,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 131 */
         text        : "fagn",
+        bopomofo    : "",
         sheng       : "f",
         yun         : "ang",
         sheng_id    : PINYIN_ID_F,
@@ -1717,6 +1849,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 132 */
         text        : "fai",
+        bopomofo    : "",
         sheng       : "f",
         yun         : "ai",
         sheng_id    : PINYIN_ID_F,
@@ -1730,6 +1863,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 133 */
         text        : "famg",
+        bopomofo    : "",
         sheng       : "f",
         yun         : "ang",
         sheng_id    : PINYIN_ID_F,
@@ -1743,6 +1877,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 134 */
         text        : "fan",
+        bopomofo    : "ㄈㄢ",
         sheng       : "f",
         yun         : "an",
         sheng_id    : PINYIN_ID_F,
@@ -1756,6 +1891,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 135 */
         text        : "fang",
+        bopomofo    : "ㄈㄤ",
         sheng       : "f",
         yun         : "ang",
         sheng_id    : PINYIN_ID_F,
@@ -1769,6 +1905,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 136 */
         text        : "fao",
+        bopomofo    : "",
         sheng       : "f",
         yun         : "ao",
         sheng_id    : PINYIN_ID_F,
@@ -1782,6 +1919,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 137 */
         text        : "fe",
+        bopomofo    : "ㄈㄜ",
         sheng       : "f",
         yun         : "e",
         sheng_id    : PINYIN_ID_F,
@@ -1795,6 +1933,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 138 */
         text        : "fegn",
+        bopomofo    : "",
         sheng       : "f",
         yun         : "eng",
         sheng_id    : PINYIN_ID_F,
@@ -1808,6 +1947,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 139 */
         text        : "fei",
+        bopomofo    : "ㄈㄟ",
         sheng       : "f",
         yun         : "ei",
         sheng_id    : PINYIN_ID_F,
@@ -1821,6 +1961,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 140 */
         text        : "femg",
+        bopomofo    : "",
         sheng       : "f",
         yun         : "eng",
         sheng_id    : PINYIN_ID_F,
@@ -1834,6 +1975,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 141 */
         text        : "fen",
+        bopomofo    : "ㄈㄣ",
         sheng       : "f",
         yun         : "en",
         sheng_id    : PINYIN_ID_F,
@@ -1847,6 +1989,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 142 */
         text        : "feng",
+        bopomofo    : "ㄈㄥ",
         sheng       : "f",
         yun         : "eng",
         sheng_id    : PINYIN_ID_F,
@@ -1860,6 +2003,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 143 */
         text        : "fo",
+        bopomofo    : "ㄈㄛ",
         sheng       : "f",
         yun         : "o",
         sheng_id    : PINYIN_ID_F,
@@ -1873,6 +2017,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 144 */
         text        : "fong",
+        bopomofo    : "",
         sheng       : "f",
         yun         : "ong",
         sheng_id    : PINYIN_ID_F,
@@ -1886,6 +2031,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 145 */
         text        : "fou",
+        bopomofo    : "ㄈㄡ",
         sheng       : "f",
         yun         : "ou",
         sheng_id    : PINYIN_ID_F,
@@ -1899,6 +2045,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 146 */
         text        : "fu",
+        bopomofo    : "ㄈㄨ",
         sheng       : "f",
         yun         : "u",
         sheng_id    : PINYIN_ID_F,
@@ -1912,6 +2059,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 147 */
         text        : "fua",
+        bopomofo    : "",
         sheng       : "f",
         yun         : "ua",
         sheng_id    : PINYIN_ID_F,
@@ -1925,6 +2073,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 148 */
         text        : "fuai",
+        bopomofo    : "",
         sheng       : "f",
         yun         : "uai",
         sheng_id    : PINYIN_ID_F,
@@ -1938,6 +2087,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 149 */
         text        : "fuan",
+        bopomofo    : "",
         sheng       : "f",
         yun         : "uan",
         sheng_id    : PINYIN_ID_F,
@@ -1951,6 +2101,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 150 */
         text        : "fuang",
+        bopomofo    : "",
         sheng       : "f",
         yun         : "uang",
         sheng_id    : PINYIN_ID_F,
@@ -1964,6 +2115,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 151 */
         text        : "fuei",
+        bopomofo    : "",
         sheng       : "f",
         yun         : "ui",
         sheng_id    : PINYIN_ID_F,
@@ -1977,6 +2129,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 152 */
         text        : "fuen",
+        bopomofo    : "",
         sheng       : "f",
         yun         : "un",
         sheng_id    : PINYIN_ID_F,
@@ -1990,6 +2143,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 153 */
         text        : "fui",
+        bopomofo    : "",
         sheng       : "f",
         yun         : "ui",
         sheng_id    : PINYIN_ID_F,
@@ -2003,6 +2157,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 154 */
         text        : "fun",
+        bopomofo    : "",
         sheng       : "f",
         yun         : "un",
         sheng_id    : PINYIN_ID_F,
@@ -2016,6 +2171,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 155 */
         text        : "fuo",
+        bopomofo    : "",
         sheng       : "f",
         yun         : "uo",
         sheng_id    : PINYIN_ID_F,
@@ -2029,6 +2185,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 156 */
         text        : "g",
+        bopomofo    : "ㄍ",
         sheng       : "g",
         yun         : "",
         sheng_id    : PINYIN_ID_G,
@@ -2042,6 +2199,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 157 */
         text        : "ga",
+        bopomofo    : "ㄍㄚ",
         sheng       : "g",
         yun         : "a",
         sheng_id    : PINYIN_ID_G,
@@ -2055,6 +2213,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 158 */
         text        : "gagn",
+        bopomofo    : "",
         sheng       : "g",
         yun         : "ang",
         sheng_id    : PINYIN_ID_G,
@@ -2068,6 +2227,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 159 */
         text        : "gai",
+        bopomofo    : "ㄍㄞ",
         sheng       : "g",
         yun         : "ai",
         sheng_id    : PINYIN_ID_G,
@@ -2081,6 +2241,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 160 */
         text        : "gamg",
+        bopomofo    : "",
         sheng       : "g",
         yun         : "ang",
         sheng_id    : PINYIN_ID_G,
@@ -2094,6 +2255,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 161 */
         text        : "gan",
+        bopomofo    : "ㄍㄢ",
         sheng       : "g",
         yun         : "an",
         sheng_id    : PINYIN_ID_G,
@@ -2107,6 +2269,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 162 */
         text        : "gang",
+        bopomofo    : "ㄍㄤ",
         sheng       : "g",
         yun         : "ang",
         sheng_id    : PINYIN_ID_G,
@@ -2120,6 +2283,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 163 */
         text        : "gao",
+        bopomofo    : "ㄍㄠ",
         sheng       : "g",
         yun         : "ao",
         sheng_id    : PINYIN_ID_G,
@@ -2133,6 +2297,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 164 */
         text        : "ge",
+        bopomofo    : "ㄍㄜ",
         sheng       : "g",
         yun         : "e",
         sheng_id    : PINYIN_ID_G,
@@ -2146,6 +2311,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 165 */
         text        : "gegn",
+        bopomofo    : "",
         sheng       : "g",
         yun         : "eng",
         sheng_id    : PINYIN_ID_G,
@@ -2159,6 +2325,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 166 */
         text        : "gei",
+        bopomofo    : "ㄍㄟ",
         sheng       : "g",
         yun         : "ei",
         sheng_id    : PINYIN_ID_G,
@@ -2172,6 +2339,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 167 */
         text        : "gemg",
+        bopomofo    : "",
         sheng       : "g",
         yun         : "eng",
         sheng_id    : PINYIN_ID_G,
@@ -2185,6 +2353,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 168 */
         text        : "gen",
+        bopomofo    : "ㄍㄣ",
         sheng       : "g",
         yun         : "en",
         sheng_id    : PINYIN_ID_G,
@@ -2198,6 +2367,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 169 */
         text        : "geng",
+        bopomofo    : "ㄍㄥ",
         sheng       : "g",
         yun         : "eng",
         sheng_id    : PINYIN_ID_G,
@@ -2211,6 +2381,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 170 */
         text        : "gogn",
+        bopomofo    : "",
         sheng       : "g",
         yun         : "ong",
         sheng_id    : PINYIN_ID_G,
@@ -2224,6 +2395,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 171 */
         text        : "gomg",
+        bopomofo    : "",
         sheng       : "g",
         yun         : "ong",
         sheng_id    : PINYIN_ID_G,
@@ -2237,6 +2409,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 172 */
         text        : "gong",
+        bopomofo    : "ㄍㄨㄥ",
         sheng       : "g",
         yun         : "ong",
         sheng_id    : PINYIN_ID_G,
@@ -2250,6 +2423,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 173 */
         text        : "gou",
+        bopomofo    : "ㄍㄡ",
         sheng       : "g",
         yun         : "ou",
         sheng_id    : PINYIN_ID_G,
@@ -2263,6 +2437,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 174 */
         text        : "gu",
+        bopomofo    : "ㄍㄨ",
         sheng       : "g",
         yun         : "u",
         sheng_id    : PINYIN_ID_G,
@@ -2276,6 +2451,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 175 */
         text        : "gua",
+        bopomofo    : "ㄍㄨㄚ",
         sheng       : "g",
         yun         : "ua",
         sheng_id    : PINYIN_ID_G,
@@ -2289,6 +2465,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 176 */
         text        : "guagn",
+        bopomofo    : "",
         sheng       : "g",
         yun         : "uang",
         sheng_id    : PINYIN_ID_G,
@@ -2302,6 +2479,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 177 */
         text        : "guai",
+        bopomofo    : "ㄍㄨㄞ",
         sheng       : "g",
         yun         : "uai",
         sheng_id    : PINYIN_ID_G,
@@ -2315,6 +2493,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 178 */
         text        : "guamg",
+        bopomofo    : "",
         sheng       : "g",
         yun         : "uang",
         sheng_id    : PINYIN_ID_G,
@@ -2328,6 +2507,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 179 */
         text        : "guan",
+        bopomofo    : "ㄍㄨㄢ",
         sheng       : "g",
         yun         : "uan",
         sheng_id    : PINYIN_ID_G,
@@ -2341,6 +2521,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 180 */
         text        : "guang",
+        bopomofo    : "ㄍㄨㄤ",
         sheng       : "g",
         yun         : "uang",
         sheng_id    : PINYIN_ID_G,
@@ -2354,6 +2535,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 181 */
         text        : "guei",
+        bopomofo    : "",
         sheng       : "g",
         yun         : "ui",
         sheng_id    : PINYIN_ID_G,
@@ -2367,6 +2549,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 182 */
         text        : "guen",
+        bopomofo    : "",
         sheng       : "g",
         yun         : "un",
         sheng_id    : PINYIN_ID_G,
@@ -2380,6 +2563,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 183 */
         text        : "gui",
+        bopomofo    : "ㄍㄨㄟ",
         sheng       : "g",
         yun         : "ui",
         sheng_id    : PINYIN_ID_G,
@@ -2393,6 +2577,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 184 */
         text        : "gun",
+        bopomofo    : "ㄍㄨㄣ",
         sheng       : "g",
         yun         : "un",
         sheng_id    : PINYIN_ID_G,
@@ -2406,6 +2591,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 185 */
         text        : "guo",
+        bopomofo    : "ㄍㄨㄛ",
         sheng       : "g",
         yun         : "uo",
         sheng_id    : PINYIN_ID_G,
@@ -2419,6 +2605,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 186 */
         text        : "h",
+        bopomofo    : "ㄏ",
         sheng       : "h",
         yun         : "",
         sheng_id    : PINYIN_ID_H,
@@ -2432,6 +2619,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 187 */
         text        : "ha",
+        bopomofo    : "ㄏㄚ",
         sheng       : "h",
         yun         : "a",
         sheng_id    : PINYIN_ID_H,
@@ -2445,6 +2633,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 188 */
         text        : "hagn",
+        bopomofo    : "",
         sheng       : "h",
         yun         : "ang",
         sheng_id    : PINYIN_ID_H,
@@ -2458,6 +2647,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 189 */
         text        : "hai",
+        bopomofo    : "ㄏㄞ",
         sheng       : "h",
         yun         : "ai",
         sheng_id    : PINYIN_ID_H,
@@ -2471,6 +2661,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 190 */
         text        : "hamg",
+        bopomofo    : "",
         sheng       : "h",
         yun         : "ang",
         sheng_id    : PINYIN_ID_H,
@@ -2484,6 +2675,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 191 */
         text        : "han",
+        bopomofo    : "ㄏㄢ",
         sheng       : "h",
         yun         : "an",
         sheng_id    : PINYIN_ID_H,
@@ -2497,6 +2689,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 192 */
         text        : "hang",
+        bopomofo    : "ㄏㄤ",
         sheng       : "h",
         yun         : "ang",
         sheng_id    : PINYIN_ID_H,
@@ -2510,6 +2703,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 193 */
         text        : "hao",
+        bopomofo    : "ㄏㄠ",
         sheng       : "h",
         yun         : "ao",
         sheng_id    : PINYIN_ID_H,
@@ -2523,6 +2717,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 194 */
         text        : "he",
+        bopomofo    : "ㄏㄜ",
         sheng       : "h",
         yun         : "e",
         sheng_id    : PINYIN_ID_H,
@@ -2536,6 +2731,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 195 */
         text        : "hegn",
+        bopomofo    : "",
         sheng       : "h",
         yun         : "eng",
         sheng_id    : PINYIN_ID_H,
@@ -2549,6 +2745,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 196 */
         text        : "hei",
+        bopomofo    : "ㄏㄟ",
         sheng       : "h",
         yun         : "ei",
         sheng_id    : PINYIN_ID_H,
@@ -2562,6 +2759,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 197 */
         text        : "hemg",
+        bopomofo    : "",
         sheng       : "h",
         yun         : "eng",
         sheng_id    : PINYIN_ID_H,
@@ -2575,6 +2773,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 198 */
         text        : "hen",
+        bopomofo    : "ㄏㄣ",
         sheng       : "h",
         yun         : "en",
         sheng_id    : PINYIN_ID_H,
@@ -2588,6 +2787,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 199 */
         text        : "heng",
+        bopomofo    : "ㄏㄥ",
         sheng       : "h",
         yun         : "eng",
         sheng_id    : PINYIN_ID_H,
@@ -2601,6 +2801,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 200 */
         text        : "ho",
+        bopomofo    : "",
         sheng       : "h",
         yun         : "o",
         sheng_id    : PINYIN_ID_H,
@@ -2614,6 +2815,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 201 */
         text        : "hogn",
+        bopomofo    : "",
         sheng       : "h",
         yun         : "ong",
         sheng_id    : PINYIN_ID_H,
@@ -2627,6 +2829,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 202 */
         text        : "homg",
+        bopomofo    : "",
         sheng       : "h",
         yun         : "ong",
         sheng_id    : PINYIN_ID_H,
@@ -2640,6 +2843,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 203 */
         text        : "hong",
+        bopomofo    : "ㄏㄨㄥ",
         sheng       : "h",
         yun         : "ong",
         sheng_id    : PINYIN_ID_H,
@@ -2653,6 +2857,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 204 */
         text        : "hou",
+        bopomofo    : "ㄏㄡ",
         sheng       : "h",
         yun         : "ou",
         sheng_id    : PINYIN_ID_H,
@@ -2666,6 +2871,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 205 */
         text        : "hu",
+        bopomofo    : "ㄏㄨ",
         sheng       : "h",
         yun         : "u",
         sheng_id    : PINYIN_ID_H,
@@ -2679,6 +2885,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 206 */
         text        : "hua",
+        bopomofo    : "ㄏㄨㄚ",
         sheng       : "h",
         yun         : "ua",
         sheng_id    : PINYIN_ID_H,
@@ -2692,6 +2899,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 207 */
         text        : "huagn",
+        bopomofo    : "",
         sheng       : "h",
         yun         : "uang",
         sheng_id    : PINYIN_ID_H,
@@ -2705,6 +2913,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 208 */
         text        : "huai",
+        bopomofo    : "ㄏㄨㄞ",
         sheng       : "h",
         yun         : "uai",
         sheng_id    : PINYIN_ID_H,
@@ -2718,6 +2927,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 209 */
         text        : "huamg",
+        bopomofo    : "",
         sheng       : "h",
         yun         : "uang",
         sheng_id    : PINYIN_ID_H,
@@ -2731,6 +2941,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 210 */
         text        : "huan",
+        bopomofo    : "ㄏㄨㄢ",
         sheng       : "h",
         yun         : "uan",
         sheng_id    : PINYIN_ID_H,
@@ -2744,6 +2955,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 211 */
         text        : "huang",
+        bopomofo    : "ㄏㄨㄤ",
         sheng       : "h",
         yun         : "uang",
         sheng_id    : PINYIN_ID_H,
@@ -2757,6 +2969,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 212 */
         text        : "huei",
+        bopomofo    : "",
         sheng       : "h",
         yun         : "ui",
         sheng_id    : PINYIN_ID_H,
@@ -2770,6 +2983,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 213 */
         text        : "huen",
+        bopomofo    : "",
         sheng       : "h",
         yun         : "un",
         sheng_id    : PINYIN_ID_H,
@@ -2783,6 +2997,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 214 */
         text        : "hui",
+        bopomofo    : "ㄏㄨㄟ",
         sheng       : "h",
         yun         : "ui",
         sheng_id    : PINYIN_ID_H,
@@ -2796,6 +3011,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 215 */
         text        : "hun",
+        bopomofo    : "ㄏㄨㄣ",
         sheng       : "h",
         yun         : "un",
         sheng_id    : PINYIN_ID_H,
@@ -2809,6 +3025,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 216 */
         text        : "huo",
+        bopomofo    : "ㄏㄨㄛ",
         sheng       : "h",
         yun         : "uo",
         sheng_id    : PINYIN_ID_H,
@@ -2822,6 +3039,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 217 */
         text        : "j",
+        bopomofo    : "ㄐ",
         sheng       : "j",
         yun         : "",
         sheng_id    : PINYIN_ID_J,
@@ -2835,6 +3053,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 218 */
         text        : "ji",
+        bopomofo    : "ㄐㄧ",
         sheng       : "j",
         yun         : "i",
         sheng_id    : PINYIN_ID_J,
@@ -2848,6 +3067,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 219 */
         text        : "jia",
+        bopomofo    : "ㄐㄧㄚ",
         sheng       : "j",
         yun         : "ia",
         sheng_id    : PINYIN_ID_J,
@@ -2861,6 +3081,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 220 */
         text        : "jiagn",
+        bopomofo    : "",
         sheng       : "j",
         yun         : "iang",
         sheng_id    : PINYIN_ID_J,
@@ -2874,6 +3095,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 221 */
         text        : "jiamg",
+        bopomofo    : "",
         sheng       : "j",
         yun         : "iang",
         sheng_id    : PINYIN_ID_J,
@@ -2887,6 +3109,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 222 */
         text        : "jian",
+        bopomofo    : "ㄐㄧㄢ",
         sheng       : "j",
         yun         : "ian",
         sheng_id    : PINYIN_ID_J,
@@ -2900,6 +3123,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 223 */
         text        : "jiang",
+        bopomofo    : "ㄐㄧㄤ",
         sheng       : "j",
         yun         : "iang",
         sheng_id    : PINYIN_ID_J,
@@ -2913,6 +3137,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 224 */
         text        : "jiao",
+        bopomofo    : "ㄐㄧㄠ",
         sheng       : "j",
         yun         : "iao",
         sheng_id    : PINYIN_ID_J,
@@ -2926,6 +3151,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 225 */
         text        : "jie",
+        bopomofo    : "ㄐㄧㄝ",
         sheng       : "j",
         yun         : "ie",
         sheng_id    : PINYIN_ID_J,
@@ -2939,6 +3165,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 226 */
         text        : "jign",
+        bopomofo    : "",
         sheng       : "j",
         yun         : "ing",
         sheng_id    : PINYIN_ID_J,
@@ -2952,6 +3179,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 227 */
         text        : "jimg",
+        bopomofo    : "",
         sheng       : "j",
         yun         : "ing",
         sheng_id    : PINYIN_ID_J,
@@ -2965,6 +3193,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 228 */
         text        : "jin",
+        bopomofo    : "ㄐㄧㄣ",
         sheng       : "j",
         yun         : "in",
         sheng_id    : PINYIN_ID_J,
@@ -2978,6 +3207,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 229 */
         text        : "jing",
+        bopomofo    : "ㄐㄧㄥ",
         sheng       : "j",
         yun         : "ing",
         sheng_id    : PINYIN_ID_J,
@@ -2991,6 +3221,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 230 */
         text        : "jiogn",
+        bopomofo    : "",
         sheng       : "j",
         yun         : "iong",
         sheng_id    : PINYIN_ID_J,
@@ -3004,6 +3235,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 231 */
         text        : "jiomg",
+        bopomofo    : "",
         sheng       : "j",
         yun         : "iong",
         sheng_id    : PINYIN_ID_J,
@@ -3017,6 +3249,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 232 */
         text        : "jiong",
+        bopomofo    : "ㄐㄩㄥ",
         sheng       : "j",
         yun         : "iong",
         sheng_id    : PINYIN_ID_J,
@@ -3030,6 +3263,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 233 */
         text        : "jiou",
+        bopomofo    : "",
         sheng       : "j",
         yun         : "iu",
         sheng_id    : PINYIN_ID_J,
@@ -3043,6 +3277,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 234 */
         text        : "jiu",
+        bopomofo    : "ㄐㄧㄡ",
         sheng       : "j",
         yun         : "iu",
         sheng_id    : PINYIN_ID_J,
@@ -3056,6 +3291,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 235 */
         text        : "ju",
+        bopomofo    : "ㄐㄩ",
         sheng       : "j",
         yun         : "u",
         sheng_id    : PINYIN_ID_J,
@@ -3069,6 +3305,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 236 */
         text        : "juan",
+        bopomofo    : "ㄐㄩㄢ",
         sheng       : "j",
         yun         : "uan",
         sheng_id    : PINYIN_ID_J,
@@ -3082,6 +3319,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 237 */
         text        : "juang",
+        bopomofo    : "",
         sheng       : "j",
         yun         : "uang",
         sheng_id    : PINYIN_ID_J,
@@ -3095,6 +3333,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 238 */
         text        : "jue",
+        bopomofo    : "ㄐㄩㄝ",
         sheng       : "j",
         yun         : "ue",
         sheng_id    : PINYIN_ID_J,
@@ -3108,6 +3347,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 239 */
         text        : "juen",
+        bopomofo    : "",
         sheng       : "j",
         yun         : "un",
         sheng_id    : PINYIN_ID_J,
@@ -3121,6 +3361,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 240 */
         text        : "jun",
+        bopomofo    : "ㄐㄩㄣ",
         sheng       : "j",
         yun         : "un",
         sheng_id    : PINYIN_ID_J,
@@ -3134,6 +3375,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 241 */
         text        : "jv",
+        bopomofo    : "",
         sheng       : "j",
         yun         : "u",
         sheng_id    : PINYIN_ID_J,
@@ -3147,6 +3389,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 242 */
         text        : "jvan",
+        bopomofo    : "",
         sheng       : "j",
         yun         : "uan",
         sheng_id    : PINYIN_ID_J,
@@ -3160,6 +3403,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 243 */
         text        : "jvang",
+        bopomofo    : "",
         sheng       : "j",
         yun         : "uang",
         sheng_id    : PINYIN_ID_J,
@@ -3173,6 +3417,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 244 */
         text        : "jve",
+        bopomofo    : "",
         sheng       : "j",
         yun         : "ue",
         sheng_id    : PINYIN_ID_J,
@@ -3186,6 +3431,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 245 */
         text        : "jven",
+        bopomofo    : "",
         sheng       : "j",
         yun         : "un",
         sheng_id    : PINYIN_ID_J,
@@ -3199,6 +3445,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 246 */
         text        : "jvn",
+        bopomofo    : "",
         sheng       : "j",
         yun         : "un",
         sheng_id    : PINYIN_ID_J,
@@ -3212,6 +3459,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 247 */
         text        : "k",
+        bopomofo    : "ㄎ",
         sheng       : "k",
         yun         : "",
         sheng_id    : PINYIN_ID_K,
@@ -3225,6 +3473,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 248 */
         text        : "ka",
+        bopomofo    : "ㄎㄚ",
         sheng       : "k",
         yun         : "a",
         sheng_id    : PINYIN_ID_K,
@@ -3238,6 +3487,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 249 */
         text        : "kagn",
+        bopomofo    : "",
         sheng       : "k",
         yun         : "ang",
         sheng_id    : PINYIN_ID_K,
@@ -3251,6 +3501,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 250 */
         text        : "kai",
+        bopomofo    : "ㄎㄞ",
         sheng       : "k",
         yun         : "ai",
         sheng_id    : PINYIN_ID_K,
@@ -3264,6 +3515,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 251 */
         text        : "kamg",
+        bopomofo    : "",
         sheng       : "k",
         yun         : "ang",
         sheng_id    : PINYIN_ID_K,
@@ -3277,6 +3529,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 252 */
         text        : "kan",
+        bopomofo    : "ㄎㄢ",
         sheng       : "k",
         yun         : "an",
         sheng_id    : PINYIN_ID_K,
@@ -3290,6 +3543,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 253 */
         text        : "kang",
+        bopomofo    : "ㄎㄤ",
         sheng       : "k",
         yun         : "ang",
         sheng_id    : PINYIN_ID_K,
@@ -3303,6 +3557,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 254 */
         text        : "kao",
+        bopomofo    : "ㄎㄠ",
         sheng       : "k",
         yun         : "ao",
         sheng_id    : PINYIN_ID_K,
@@ -3316,6 +3571,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 255 */
         text        : "ke",
+        bopomofo    : "ㄎㄜ",
         sheng       : "k",
         yun         : "e",
         sheng_id    : PINYIN_ID_K,
@@ -3329,6 +3585,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 256 */
         text        : "kegn",
+        bopomofo    : "",
         sheng       : "k",
         yun         : "eng",
         sheng_id    : PINYIN_ID_K,
@@ -3342,6 +3599,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 257 */
         text        : "kei",
+        bopomofo    : "ㄎㄟ",
         sheng       : "k",
         yun         : "ei",
         sheng_id    : PINYIN_ID_K,
@@ -3355,6 +3613,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 258 */
         text        : "kemg",
+        bopomofo    : "",
         sheng       : "k",
         yun         : "eng",
         sheng_id    : PINYIN_ID_K,
@@ -3368,6 +3627,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 259 */
         text        : "ken",
+        bopomofo    : "ㄎㄣ",
         sheng       : "k",
         yun         : "en",
         sheng_id    : PINYIN_ID_K,
@@ -3381,6 +3641,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 260 */
         text        : "keng",
+        bopomofo    : "ㄎㄥ",
         sheng       : "k",
         yun         : "eng",
         sheng_id    : PINYIN_ID_K,
@@ -3394,6 +3655,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 261 */
         text        : "kogn",
+        bopomofo    : "",
         sheng       : "k",
         yun         : "ong",
         sheng_id    : PINYIN_ID_K,
@@ -3407,6 +3669,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 262 */
         text        : "komg",
+        bopomofo    : "",
         sheng       : "k",
         yun         : "ong",
         sheng_id    : PINYIN_ID_K,
@@ -3420,6 +3683,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 263 */
         text        : "kong",
+        bopomofo    : "ㄎㄨㄥ",
         sheng       : "k",
         yun         : "ong",
         sheng_id    : PINYIN_ID_K,
@@ -3433,6 +3697,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 264 */
         text        : "kou",
+        bopomofo    : "ㄎㄡ",
         sheng       : "k",
         yun         : "ou",
         sheng_id    : PINYIN_ID_K,
@@ -3446,6 +3711,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 265 */
         text        : "ku",
+        bopomofo    : "ㄎㄨ",
         sheng       : "k",
         yun         : "u",
         sheng_id    : PINYIN_ID_K,
@@ -3459,6 +3725,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 266 */
         text        : "kua",
+        bopomofo    : "ㄎㄨㄚ",
         sheng       : "k",
         yun         : "ua",
         sheng_id    : PINYIN_ID_K,
@@ -3472,6 +3739,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 267 */
         text        : "kuagn",
+        bopomofo    : "",
         sheng       : "k",
         yun         : "uang",
         sheng_id    : PINYIN_ID_K,
@@ -3485,6 +3753,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 268 */
         text        : "kuai",
+        bopomofo    : "ㄎㄨㄞ",
         sheng       : "k",
         yun         : "uai",
         sheng_id    : PINYIN_ID_K,
@@ -3498,6 +3767,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 269 */
         text        : "kuamg",
+        bopomofo    : "",
         sheng       : "k",
         yun         : "uang",
         sheng_id    : PINYIN_ID_K,
@@ -3511,6 +3781,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 270 */
         text        : "kuan",
+        bopomofo    : "ㄎㄨㄢ",
         sheng       : "k",
         yun         : "uan",
         sheng_id    : PINYIN_ID_K,
@@ -3524,6 +3795,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 271 */
         text        : "kuang",
+        bopomofo    : "ㄎㄨㄤ",
         sheng       : "k",
         yun         : "uang",
         sheng_id    : PINYIN_ID_K,
@@ -3537,6 +3809,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 272 */
         text        : "kuei",
+        bopomofo    : "",
         sheng       : "k",
         yun         : "ui",
         sheng_id    : PINYIN_ID_K,
@@ -3550,6 +3823,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 273 */
         text        : "kuen",
+        bopomofo    : "",
         sheng       : "k",
         yun         : "un",
         sheng_id    : PINYIN_ID_K,
@@ -3563,6 +3837,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 274 */
         text        : "kui",
+        bopomofo    : "ㄎㄨㄟ",
         sheng       : "k",
         yun         : "ui",
         sheng_id    : PINYIN_ID_K,
@@ -3576,6 +3851,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 275 */
         text        : "kun",
+        bopomofo    : "ㄎㄨㄣ",
         sheng       : "k",
         yun         : "un",
         sheng_id    : PINYIN_ID_K,
@@ -3589,6 +3865,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 276 */
         text        : "kuo",
+        bopomofo    : "ㄎㄨㄛ",
         sheng       : "k",
         yun         : "uo",
         sheng_id    : PINYIN_ID_K,
@@ -3602,6 +3879,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 277 */
         text        : "l",
+        bopomofo    : "ㄌ",
         sheng       : "l",
         yun         : "",
         sheng_id    : PINYIN_ID_L,
@@ -3615,6 +3893,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 278 */
         text        : "la",
+        bopomofo    : "ㄌㄚ",
         sheng       : "l",
         yun         : "a",
         sheng_id    : PINYIN_ID_L,
@@ -3628,6 +3907,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 279 */
         text        : "lagn",
+        bopomofo    : "",
         sheng       : "l",
         yun         : "ang",
         sheng_id    : PINYIN_ID_L,
@@ -3641,6 +3921,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 280 */
         text        : "lai",
+        bopomofo    : "ㄌㄞ",
         sheng       : "l",
         yun         : "ai",
         sheng_id    : PINYIN_ID_L,
@@ -3654,6 +3935,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 281 */
         text        : "lamg",
+        bopomofo    : "",
         sheng       : "l",
         yun         : "ang",
         sheng_id    : PINYIN_ID_L,
@@ -3667,6 +3949,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 282 */
         text        : "lan",
+        bopomofo    : "ㄌㄢ",
         sheng       : "l",
         yun         : "an",
         sheng_id    : PINYIN_ID_L,
@@ -3680,6 +3963,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 283 */
         text        : "lang",
+        bopomofo    : "ㄌㄤ",
         sheng       : "l",
         yun         : "ang",
         sheng_id    : PINYIN_ID_L,
@@ -3693,6 +3977,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 284 */
         text        : "lao",
+        bopomofo    : "ㄌㄠ",
         sheng       : "l",
         yun         : "ao",
         sheng_id    : PINYIN_ID_L,
@@ -3706,6 +3991,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 285 */
         text        : "le",
+        bopomofo    : "ㄌㄜ",
         sheng       : "l",
         yun         : "e",
         sheng_id    : PINYIN_ID_L,
@@ -3719,6 +4005,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 286 */
         text        : "legn",
+        bopomofo    : "",
         sheng       : "l",
         yun         : "eng",
         sheng_id    : PINYIN_ID_L,
@@ -3732,6 +4019,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 287 */
         text        : "lei",
+        bopomofo    : "ㄌㄟ",
         sheng       : "l",
         yun         : "ei",
         sheng_id    : PINYIN_ID_L,
@@ -3745,6 +4033,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 288 */
         text        : "lemg",
+        bopomofo    : "",
         sheng       : "l",
         yun         : "eng",
         sheng_id    : PINYIN_ID_L,
@@ -3758,6 +4047,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 289 */
         text        : "len",
+        bopomofo    : "ㄌㄣ",
         sheng       : "l",
         yun         : "en",
         sheng_id    : PINYIN_ID_L,
@@ -3771,6 +4061,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 290 */
         text        : "leng",
+        bopomofo    : "ㄌㄥ",
         sheng       : "l",
         yun         : "eng",
         sheng_id    : PINYIN_ID_L,
@@ -3784,6 +4075,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 291 */
         text        : "li",
+        bopomofo    : "ㄌㄧ",
         sheng       : "l",
         yun         : "i",
         sheng_id    : PINYIN_ID_L,
@@ -3797,6 +4089,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 292 */
         text        : "lia",
+        bopomofo    : "ㄌㄧㄚ",
         sheng       : "l",
         yun         : "ia",
         sheng_id    : PINYIN_ID_L,
@@ -3810,6 +4103,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 293 */
         text        : "liagn",
+        bopomofo    : "",
         sheng       : "l",
         yun         : "iang",
         sheng_id    : PINYIN_ID_L,
@@ -3823,6 +4117,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 294 */
         text        : "liamg",
+        bopomofo    : "",
         sheng       : "l",
         yun         : "iang",
         sheng_id    : PINYIN_ID_L,
@@ -3836,6 +4131,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 295 */
         text        : "lian",
+        bopomofo    : "ㄌㄧㄢ",
         sheng       : "l",
         yun         : "ian",
         sheng_id    : PINYIN_ID_L,
@@ -3849,6 +4145,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 296 */
         text        : "liang",
+        bopomofo    : "ㄌㄧㄤ",
         sheng       : "l",
         yun         : "iang",
         sheng_id    : PINYIN_ID_L,
@@ -3862,6 +4159,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 297 */
         text        : "liao",
+        bopomofo    : "ㄌㄧㄠ",
         sheng       : "l",
         yun         : "iao",
         sheng_id    : PINYIN_ID_L,
@@ -3875,6 +4173,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 298 */
         text        : "lie",
+        bopomofo    : "ㄌㄧㄝ",
         sheng       : "l",
         yun         : "ie",
         sheng_id    : PINYIN_ID_L,
@@ -3888,6 +4187,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 299 */
         text        : "lign",
+        bopomofo    : "",
         sheng       : "l",
         yun         : "ing",
         sheng_id    : PINYIN_ID_L,
@@ -3901,6 +4201,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 300 */
         text        : "limg",
+        bopomofo    : "",
         sheng       : "l",
         yun         : "ing",
         sheng_id    : PINYIN_ID_L,
@@ -3914,6 +4215,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 301 */
         text        : "lin",
+        bopomofo    : "ㄌㄧㄣ",
         sheng       : "l",
         yun         : "in",
         sheng_id    : PINYIN_ID_L,
@@ -3927,6 +4229,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 302 */
         text        : "ling",
+        bopomofo    : "ㄌㄧㄥ",
         sheng       : "l",
         yun         : "ing",
         sheng_id    : PINYIN_ID_L,
@@ -3940,6 +4243,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 303 */
         text        : "liou",
+        bopomofo    : "",
         sheng       : "l",
         yun         : "iu",
         sheng_id    : PINYIN_ID_L,
@@ -3953,6 +4257,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 304 */
         text        : "liu",
+        bopomofo    : "ㄌㄧㄡ",
         sheng       : "l",
         yun         : "iu",
         sheng_id    : PINYIN_ID_L,
@@ -3966,6 +4271,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 305 */
         text        : "lo",
+        bopomofo    : "ㄌㄛ",
         sheng       : "l",
         yun         : "o",
         sheng_id    : PINYIN_ID_L,
@@ -3979,6 +4285,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 306 */
         text        : "logn",
+        bopomofo    : "",
         sheng       : "l",
         yun         : "ong",
         sheng_id    : PINYIN_ID_L,
@@ -3992,6 +4299,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 307 */
         text        : "lomg",
+        bopomofo    : "",
         sheng       : "l",
         yun         : "ong",
         sheng_id    : PINYIN_ID_L,
@@ -4005,6 +4313,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 308 */
         text        : "long",
+        bopomofo    : "ㄌㄨㄥ",
         sheng       : "l",
         yun         : "ong",
         sheng_id    : PINYIN_ID_L,
@@ -4018,6 +4327,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 309 */
         text        : "lou",
+        bopomofo    : "ㄌㄡ",
         sheng       : "l",
         yun         : "ou",
         sheng_id    : PINYIN_ID_L,
@@ -4031,6 +4341,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 310 */
         text        : "lu",
+        bopomofo    : "ㄌㄨ",
         sheng       : "l",
         yun         : "u",
         sheng_id    : PINYIN_ID_L,
@@ -4044,6 +4355,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 311 */
         text        : "luan",
+        bopomofo    : "ㄌㄨㄢ",
         sheng       : "l",
         yun         : "uan",
         sheng_id    : PINYIN_ID_L,
@@ -4057,6 +4369,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 312 */
         text        : "luang",
+        bopomofo    : "",
         sheng       : "l",
         yun         : "uang",
         sheng_id    : PINYIN_ID_L,
@@ -4070,6 +4383,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 313 */
         text        : "lue",
+        bopomofo    : "",
         sheng       : "l",
         yun         : "üe",
         sheng_id    : PINYIN_ID_L,
@@ -4083,6 +4397,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 314 */
         text        : "luei",
+        bopomofo    : "",
         sheng       : "l",
         yun         : "ui",
         sheng_id    : PINYIN_ID_L,
@@ -4096,6 +4411,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 315 */
         text        : "luen",
+        bopomofo    : "",
         sheng       : "l",
         yun         : "un",
         sheng_id    : PINYIN_ID_L,
@@ -4109,6 +4425,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 316 */
         text        : "lui",
+        bopomofo    : "",
         sheng       : "l",
         yun         : "ui",
         sheng_id    : PINYIN_ID_L,
@@ -4122,6 +4439,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 317 */
         text        : "lun",
+        bopomofo    : "ㄌㄨㄣ",
         sheng       : "l",
         yun         : "un",
         sheng_id    : PINYIN_ID_L,
@@ -4135,6 +4453,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 318 */
         text        : "luo",
+        bopomofo    : "ㄌㄨㄛ",
         sheng       : "l",
         yun         : "uo",
         sheng_id    : PINYIN_ID_L,
@@ -4148,6 +4467,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 319 */
         text        : "lv",
+        bopomofo    : "ㄌㄩ",
         sheng       : "l",
         yun         : "ü",
         sheng_id    : PINYIN_ID_L,
@@ -4161,6 +4481,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 320 */
         text        : "lve",
+        bopomofo    : "ㄌㄩㄝ",
         sheng       : "l",
         yun         : "üe",
         sheng_id    : PINYIN_ID_L,
@@ -4174,6 +4495,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 321 */
         text        : "m",
+        bopomofo    : "ㄇ",
         sheng       : "m",
         yun         : "",
         sheng_id    : PINYIN_ID_M,
@@ -4187,6 +4509,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 322 */
         text        : "ma",
+        bopomofo    : "ㄇㄚ",
         sheng       : "m",
         yun         : "a",
         sheng_id    : PINYIN_ID_M,
@@ -4200,6 +4523,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 323 */
         text        : "magn",
+        bopomofo    : "",
         sheng       : "m",
         yun         : "ang",
         sheng_id    : PINYIN_ID_M,
@@ -4213,6 +4537,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 324 */
         text        : "mai",
+        bopomofo    : "ㄇㄞ",
         sheng       : "m",
         yun         : "ai",
         sheng_id    : PINYIN_ID_M,
@@ -4226,6 +4551,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 325 */
         text        : "mamg",
+        bopomofo    : "",
         sheng       : "m",
         yun         : "ang",
         sheng_id    : PINYIN_ID_M,
@@ -4239,6 +4565,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 326 */
         text        : "man",
+        bopomofo    : "ㄇㄢ",
         sheng       : "m",
         yun         : "an",
         sheng_id    : PINYIN_ID_M,
@@ -4252,6 +4579,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 327 */
         text        : "mang",
+        bopomofo    : "ㄇㄤ",
         sheng       : "m",
         yun         : "ang",
         sheng_id    : PINYIN_ID_M,
@@ -4265,6 +4593,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 328 */
         text        : "mao",
+        bopomofo    : "ㄇㄠ",
         sheng       : "m",
         yun         : "ao",
         sheng_id    : PINYIN_ID_M,
@@ -4278,6 +4607,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 329 */
         text        : "me",
+        bopomofo    : "ㄇㄜ",
         sheng       : "m",
         yun         : "e",
         sheng_id    : PINYIN_ID_M,
@@ -4291,6 +4621,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 330 */
         text        : "megn",
+        bopomofo    : "",
         sheng       : "m",
         yun         : "eng",
         sheng_id    : PINYIN_ID_M,
@@ -4304,6 +4635,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 331 */
         text        : "mei",
+        bopomofo    : "ㄇㄟ",
         sheng       : "m",
         yun         : "ei",
         sheng_id    : PINYIN_ID_M,
@@ -4317,6 +4649,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 332 */
         text        : "memg",
+        bopomofo    : "",
         sheng       : "m",
         yun         : "eng",
         sheng_id    : PINYIN_ID_M,
@@ -4330,6 +4663,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 333 */
         text        : "men",
+        bopomofo    : "ㄇㄣ",
         sheng       : "m",
         yun         : "en",
         sheng_id    : PINYIN_ID_M,
@@ -4343,6 +4677,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 334 */
         text        : "meng",
+        bopomofo    : "ㄇㄥ",
         sheng       : "m",
         yun         : "eng",
         sheng_id    : PINYIN_ID_M,
@@ -4356,6 +4691,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 335 */
         text        : "mi",
+        bopomofo    : "ㄇㄧ",
         sheng       : "m",
         yun         : "i",
         sheng_id    : PINYIN_ID_M,
@@ -4369,6 +4705,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 336 */
         text        : "mian",
+        bopomofo    : "ㄇㄧㄢ",
         sheng       : "m",
         yun         : "ian",
         sheng_id    : PINYIN_ID_M,
@@ -4382,6 +4719,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 337 */
         text        : "miang",
+        bopomofo    : "",
         sheng       : "m",
         yun         : "iang",
         sheng_id    : PINYIN_ID_M,
@@ -4395,6 +4733,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 338 */
         text        : "miao",
+        bopomofo    : "ㄇㄧㄠ",
         sheng       : "m",
         yun         : "iao",
         sheng_id    : PINYIN_ID_M,
@@ -4408,6 +4747,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 339 */
         text        : "mie",
+        bopomofo    : "ㄇㄧㄝ",
         sheng       : "m",
         yun         : "ie",
         sheng_id    : PINYIN_ID_M,
@@ -4421,6 +4761,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 340 */
         text        : "mign",
+        bopomofo    : "",
         sheng       : "m",
         yun         : "ing",
         sheng_id    : PINYIN_ID_M,
@@ -4434,6 +4775,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 341 */
         text        : "mimg",
+        bopomofo    : "",
         sheng       : "m",
         yun         : "ing",
         sheng_id    : PINYIN_ID_M,
@@ -4447,6 +4789,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 342 */
         text        : "min",
+        bopomofo    : "ㄇㄧㄣ",
         sheng       : "m",
         yun         : "in",
         sheng_id    : PINYIN_ID_M,
@@ -4460,6 +4803,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 343 */
         text        : "ming",
+        bopomofo    : "ㄇㄧㄥ",
         sheng       : "m",
         yun         : "ing",
         sheng_id    : PINYIN_ID_M,
@@ -4473,6 +4817,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 344 */
         text        : "miou",
+        bopomofo    : "",
         sheng       : "m",
         yun         : "iu",
         sheng_id    : PINYIN_ID_M,
@@ -4486,6 +4831,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 345 */
         text        : "miu",
+        bopomofo    : "ㄇㄧㄡ",
         sheng       : "m",
         yun         : "iu",
         sheng_id    : PINYIN_ID_M,
@@ -4499,6 +4845,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 346 */
         text        : "mo",
+        bopomofo    : "ㄇㄛ",
         sheng       : "m",
         yun         : "o",
         sheng_id    : PINYIN_ID_M,
@@ -4512,6 +4859,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 347 */
         text        : "mou",
+        bopomofo    : "ㄇㄡ",
         sheng       : "m",
         yun         : "ou",
         sheng_id    : PINYIN_ID_M,
@@ -4525,6 +4873,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 348 */
         text        : "mu",
+        bopomofo    : "ㄇㄨ",
         sheng       : "m",
         yun         : "u",
         sheng_id    : PINYIN_ID_M,
@@ -4538,6 +4887,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 349 */
         text        : "n",
+        bopomofo    : "ㄋ",
         sheng       : "n",
         yun         : "",
         sheng_id    : PINYIN_ID_N,
@@ -4551,6 +4901,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 350 */
         text        : "na",
+        bopomofo    : "ㄋㄚ",
         sheng       : "n",
         yun         : "a",
         sheng_id    : PINYIN_ID_N,
@@ -4564,6 +4915,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 351 */
         text        : "nagn",
+        bopomofo    : "",
         sheng       : "n",
         yun         : "ang",
         sheng_id    : PINYIN_ID_N,
@@ -4577,6 +4929,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 352 */
         text        : "nai",
+        bopomofo    : "ㄋㄞ",
         sheng       : "n",
         yun         : "ai",
         sheng_id    : PINYIN_ID_N,
@@ -4590,6 +4943,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 353 */
         text        : "namg",
+        bopomofo    : "",
         sheng       : "n",
         yun         : "ang",
         sheng_id    : PINYIN_ID_N,
@@ -4603,6 +4957,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 354 */
         text        : "nan",
+        bopomofo    : "ㄋㄢ",
         sheng       : "n",
         yun         : "an",
         sheng_id    : PINYIN_ID_N,
@@ -4616,6 +4971,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 355 */
         text        : "nang",
+        bopomofo    : "ㄋㄤ",
         sheng       : "n",
         yun         : "ang",
         sheng_id    : PINYIN_ID_N,
@@ -4629,6 +4985,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 356 */
         text        : "nao",
+        bopomofo    : "ㄋㄠ",
         sheng       : "n",
         yun         : "ao",
         sheng_id    : PINYIN_ID_N,
@@ -4642,6 +4999,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 357 */
         text        : "ne",
+        bopomofo    : "ㄋㄜ",
         sheng       : "n",
         yun         : "e",
         sheng_id    : PINYIN_ID_N,
@@ -4655,6 +5013,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 358 */
         text        : "negn",
+        bopomofo    : "",
         sheng       : "n",
         yun         : "eng",
         sheng_id    : PINYIN_ID_N,
@@ -4668,6 +5027,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 359 */
         text        : "nei",
+        bopomofo    : "ㄋㄟ",
         sheng       : "n",
         yun         : "ei",
         sheng_id    : PINYIN_ID_N,
@@ -4681,6 +5041,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 360 */
         text        : "nemg",
+        bopomofo    : "",
         sheng       : "n",
         yun         : "eng",
         sheng_id    : PINYIN_ID_N,
@@ -4694,6 +5055,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 361 */
         text        : "nen",
+        bopomofo    : "ㄋㄣ",
         sheng       : "n",
         yun         : "en",
         sheng_id    : PINYIN_ID_N,
@@ -4707,6 +5069,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 362 */
         text        : "neng",
+        bopomofo    : "ㄋㄥ",
         sheng       : "n",
         yun         : "eng",
         sheng_id    : PINYIN_ID_N,
@@ -4720,6 +5083,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 363 */
         text        : "ni",
+        bopomofo    : "ㄋㄧ",
         sheng       : "n",
         yun         : "i",
         sheng_id    : PINYIN_ID_N,
@@ -4733,6 +5097,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 364 */
         text        : "nia",
+        bopomofo    : "ㄋㄧㄚ",
         sheng       : "n",
         yun         : "ia",
         sheng_id    : PINYIN_ID_N,
@@ -4746,6 +5111,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 365 */
         text        : "niagn",
+        bopomofo    : "",
         sheng       : "n",
         yun         : "iang",
         sheng_id    : PINYIN_ID_N,
@@ -4759,6 +5125,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 366 */
         text        : "niamg",
+        bopomofo    : "",
         sheng       : "n",
         yun         : "iang",
         sheng_id    : PINYIN_ID_N,
@@ -4772,6 +5139,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 367 */
         text        : "nian",
+        bopomofo    : "ㄋㄧㄢ",
         sheng       : "n",
         yun         : "ian",
         sheng_id    : PINYIN_ID_N,
@@ -4785,6 +5153,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 368 */
         text        : "niang",
+        bopomofo    : "ㄋㄧㄤ",
         sheng       : "n",
         yun         : "iang",
         sheng_id    : PINYIN_ID_N,
@@ -4798,6 +5167,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 369 */
         text        : "niao",
+        bopomofo    : "ㄋㄧㄠ",
         sheng       : "n",
         yun         : "iao",
         sheng_id    : PINYIN_ID_N,
@@ -4811,6 +5181,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 370 */
         text        : "nie",
+        bopomofo    : "ㄋㄧㄝ",
         sheng       : "n",
         yun         : "ie",
         sheng_id    : PINYIN_ID_N,
@@ -4824,6 +5195,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 371 */
         text        : "nign",
+        bopomofo    : "",
         sheng       : "n",
         yun         : "ing",
         sheng_id    : PINYIN_ID_N,
@@ -4837,6 +5209,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 372 */
         text        : "nimg",
+        bopomofo    : "",
         sheng       : "n",
         yun         : "ing",
         sheng_id    : PINYIN_ID_N,
@@ -4850,6 +5223,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 373 */
         text        : "nin",
+        bopomofo    : "ㄋㄧㄣ",
         sheng       : "n",
         yun         : "in",
         sheng_id    : PINYIN_ID_N,
@@ -4863,6 +5237,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 374 */
         text        : "ning",
+        bopomofo    : "ㄋㄧㄥ",
         sheng       : "n",
         yun         : "ing",
         sheng_id    : PINYIN_ID_N,
@@ -4876,6 +5251,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 375 */
         text        : "niou",
+        bopomofo    : "",
         sheng       : "n",
         yun         : "iu",
         sheng_id    : PINYIN_ID_N,
@@ -4889,6 +5265,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 376 */
         text        : "niu",
+        bopomofo    : "ㄋㄧㄡ",
         sheng       : "n",
         yun         : "iu",
         sheng_id    : PINYIN_ID_N,
@@ -4902,6 +5279,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 377 */
         text        : "no",
+        bopomofo    : "",
         sheng       : "n",
         yun         : "o",
         sheng_id    : PINYIN_ID_N,
@@ -4915,6 +5293,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 378 */
         text        : "nogn",
+        bopomofo    : "",
         sheng       : "n",
         yun         : "ong",
         sheng_id    : PINYIN_ID_N,
@@ -4928,6 +5307,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 379 */
         text        : "nomg",
+        bopomofo    : "",
         sheng       : "n",
         yun         : "ong",
         sheng_id    : PINYIN_ID_N,
@@ -4941,6 +5321,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 380 */
         text        : "nong",
+        bopomofo    : "ㄋㄨㄥ",
         sheng       : "n",
         yun         : "ong",
         sheng_id    : PINYIN_ID_N,
@@ -4954,6 +5335,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 381 */
         text        : "nou",
+        bopomofo    : "ㄋㄡ",
         sheng       : "n",
         yun         : "ou",
         sheng_id    : PINYIN_ID_N,
@@ -4967,6 +5349,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 382 */
         text        : "nu",
+        bopomofo    : "ㄋㄨ",
         sheng       : "n",
         yun         : "u",
         sheng_id    : PINYIN_ID_N,
@@ -4980,6 +5363,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 383 */
         text        : "nuan",
+        bopomofo    : "ㄋㄨㄢ",
         sheng       : "n",
         yun         : "uan",
         sheng_id    : PINYIN_ID_N,
@@ -4993,6 +5377,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 384 */
         text        : "nuang",
+        bopomofo    : "",
         sheng       : "n",
         yun         : "uang",
         sheng_id    : PINYIN_ID_N,
@@ -5006,6 +5391,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 385 */
         text        : "nue",
+        bopomofo    : "",
         sheng       : "n",
         yun         : "üe",
         sheng_id    : PINYIN_ID_N,
@@ -5019,6 +5405,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 386 */
         text        : "nuen",
+        bopomofo    : "",
         sheng       : "n",
         yun         : "un",
         sheng_id    : PINYIN_ID_N,
@@ -5032,6 +5419,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 387 */
         text        : "nun",
+        bopomofo    : "ㄋㄨㄣ",
         sheng       : "n",
         yun         : "un",
         sheng_id    : PINYIN_ID_N,
@@ -5045,6 +5433,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 388 */
         text        : "nuo",
+        bopomofo    : "ㄋㄨㄛ",
         sheng       : "n",
         yun         : "uo",
         sheng_id    : PINYIN_ID_N,
@@ -5058,6 +5447,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 389 */
         text        : "nv",
+        bopomofo    : "ㄋㄩ",
         sheng       : "n",
         yun         : "ü",
         sheng_id    : PINYIN_ID_N,
@@ -5071,6 +5461,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 390 */
         text        : "nve",
+        bopomofo    : "ㄋㄩㄝ",
         sheng       : "n",
         yun         : "üe",
         sheng_id    : PINYIN_ID_N,
@@ -5084,6 +5475,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 391 */
         text        : "o",
+        bopomofo    : "ㄛ",
         sheng       : "",
         yun         : "o",
         sheng_id    : PINYIN_ID_ZERO,
@@ -5097,6 +5489,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 392 */
         text        : "ou",
+        bopomofo    : "ㄡ",
         sheng       : "",
         yun         : "ou",
         sheng_id    : PINYIN_ID_ZERO,
@@ -5110,6 +5503,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 393 */
         text        : "p",
+        bopomofo    : "ㄆ",
         sheng       : "p",
         yun         : "",
         sheng_id    : PINYIN_ID_P,
@@ -5123,6 +5517,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 394 */
         text        : "pa",
+        bopomofo    : "ㄆㄚ",
         sheng       : "p",
         yun         : "a",
         sheng_id    : PINYIN_ID_P,
@@ -5136,6 +5531,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 395 */
         text        : "pagn",
+        bopomofo    : "",
         sheng       : "p",
         yun         : "ang",
         sheng_id    : PINYIN_ID_P,
@@ -5149,6 +5545,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 396 */
         text        : "pai",
+        bopomofo    : "ㄆㄞ",
         sheng       : "p",
         yun         : "ai",
         sheng_id    : PINYIN_ID_P,
@@ -5162,6 +5559,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 397 */
         text        : "pamg",
+        bopomofo    : "",
         sheng       : "p",
         yun         : "ang",
         sheng_id    : PINYIN_ID_P,
@@ -5175,6 +5573,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 398 */
         text        : "pan",
+        bopomofo    : "ㄆㄢ",
         sheng       : "p",
         yun         : "an",
         sheng_id    : PINYIN_ID_P,
@@ -5188,6 +5587,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 399 */
         text        : "pang",
+        bopomofo    : "ㄆㄤ",
         sheng       : "p",
         yun         : "ang",
         sheng_id    : PINYIN_ID_P,
@@ -5201,6 +5601,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 400 */
         text        : "pao",
+        bopomofo    : "ㄆㄠ",
         sheng       : "p",
         yun         : "ao",
         sheng_id    : PINYIN_ID_P,
@@ -5214,6 +5615,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 401 */
         text        : "pegn",
+        bopomofo    : "",
         sheng       : "p",
         yun         : "eng",
         sheng_id    : PINYIN_ID_P,
@@ -5227,6 +5629,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 402 */
         text        : "pei",
+        bopomofo    : "ㄆㄟ",
         sheng       : "p",
         yun         : "ei",
         sheng_id    : PINYIN_ID_P,
@@ -5240,6 +5643,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 403 */
         text        : "pemg",
+        bopomofo    : "",
         sheng       : "p",
         yun         : "eng",
         sheng_id    : PINYIN_ID_P,
@@ -5253,6 +5657,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 404 */
         text        : "pen",
+        bopomofo    : "ㄆㄣ",
         sheng       : "p",
         yun         : "en",
         sheng_id    : PINYIN_ID_P,
@@ -5266,6 +5671,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 405 */
         text        : "peng",
+        bopomofo    : "ㄆㄥ",
         sheng       : "p",
         yun         : "eng",
         sheng_id    : PINYIN_ID_P,
@@ -5279,6 +5685,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 406 */
         text        : "pi",
+        bopomofo    : "ㄆㄧ",
         sheng       : "p",
         yun         : "i",
         sheng_id    : PINYIN_ID_P,
@@ -5292,6 +5699,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 407 */
         text        : "pian",
+        bopomofo    : "ㄆㄧㄢ",
         sheng       : "p",
         yun         : "ian",
         sheng_id    : PINYIN_ID_P,
@@ -5305,6 +5713,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 408 */
         text        : "piang",
+        bopomofo    : "",
         sheng       : "p",
         yun         : "iang",
         sheng_id    : PINYIN_ID_P,
@@ -5318,6 +5727,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 409 */
         text        : "piao",
+        bopomofo    : "ㄆㄧㄠ",
         sheng       : "p",
         yun         : "iao",
         sheng_id    : PINYIN_ID_P,
@@ -5331,6 +5741,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 410 */
         text        : "pie",
+        bopomofo    : "ㄆㄧㄝ",
         sheng       : "p",
         yun         : "ie",
         sheng_id    : PINYIN_ID_P,
@@ -5344,6 +5755,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 411 */
         text        : "pign",
+        bopomofo    : "",
         sheng       : "p",
         yun         : "ing",
         sheng_id    : PINYIN_ID_P,
@@ -5357,6 +5769,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 412 */
         text        : "pimg",
+        bopomofo    : "",
         sheng       : "p",
         yun         : "ing",
         sheng_id    : PINYIN_ID_P,
@@ -5370,6 +5783,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 413 */
         text        : "pin",
+        bopomofo    : "ㄆㄧㄣ",
         sheng       : "p",
         yun         : "in",
         sheng_id    : PINYIN_ID_P,
@@ -5383,6 +5797,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 414 */
         text        : "ping",
+        bopomofo    : "ㄆㄧㄥ",
         sheng       : "p",
         yun         : "ing",
         sheng_id    : PINYIN_ID_P,
@@ -5396,6 +5811,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 415 */
         text        : "po",
+        bopomofo    : "ㄆㄛ",
         sheng       : "p",
         yun         : "o",
         sheng_id    : PINYIN_ID_P,
@@ -5409,6 +5825,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 416 */
         text        : "pou",
+        bopomofo    : "ㄆㄡ",
         sheng       : "p",
         yun         : "ou",
         sheng_id    : PINYIN_ID_P,
@@ -5422,6 +5839,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 417 */
         text        : "pu",
+        bopomofo    : "ㄆㄨ",
         sheng       : "p",
         yun         : "u",
         sheng_id    : PINYIN_ID_P,
@@ -5435,6 +5853,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 418 */
         text        : "q",
+        bopomofo    : "ㄑ",
         sheng       : "q",
         yun         : "",
         sheng_id    : PINYIN_ID_Q,
@@ -5448,6 +5867,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 419 */
         text        : "qi",
+        bopomofo    : "ㄑㄧ",
         sheng       : "q",
         yun         : "i",
         sheng_id    : PINYIN_ID_Q,
@@ -5461,6 +5881,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 420 */
         text        : "qia",
+        bopomofo    : "ㄑㄧㄚ",
         sheng       : "q",
         yun         : "ia",
         sheng_id    : PINYIN_ID_Q,
@@ -5474,6 +5895,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 421 */
         text        : "qiagn",
+        bopomofo    : "",
         sheng       : "q",
         yun         : "iang",
         sheng_id    : PINYIN_ID_Q,
@@ -5487,6 +5909,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 422 */
         text        : "qiamg",
+        bopomofo    : "",
         sheng       : "q",
         yun         : "iang",
         sheng_id    : PINYIN_ID_Q,
@@ -5500,6 +5923,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 423 */
         text        : "qian",
+        bopomofo    : "ㄑㄧㄢ",
         sheng       : "q",
         yun         : "ian",
         sheng_id    : PINYIN_ID_Q,
@@ -5513,6 +5937,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 424 */
         text        : "qiang",
+        bopomofo    : "ㄑㄧㄤ",
         sheng       : "q",
         yun         : "iang",
         sheng_id    : PINYIN_ID_Q,
@@ -5526,6 +5951,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 425 */
         text        : "qiao",
+        bopomofo    : "ㄑㄧㄠ",
         sheng       : "q",
         yun         : "iao",
         sheng_id    : PINYIN_ID_Q,
@@ -5539,6 +5965,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 426 */
         text        : "qie",
+        bopomofo    : "ㄑㄧㄝ",
         sheng       : "q",
         yun         : "ie",
         sheng_id    : PINYIN_ID_Q,
@@ -5552,6 +5979,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 427 */
         text        : "qign",
+        bopomofo    : "",
         sheng       : "q",
         yun         : "ing",
         sheng_id    : PINYIN_ID_Q,
@@ -5565,6 +5993,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 428 */
         text        : "qimg",
+        bopomofo    : "",
         sheng       : "q",
         yun         : "ing",
         sheng_id    : PINYIN_ID_Q,
@@ -5578,6 +6007,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 429 */
         text        : "qin",
+        bopomofo    : "ㄑㄧㄣ",
         sheng       : "q",
         yun         : "in",
         sheng_id    : PINYIN_ID_Q,
@@ -5591,6 +6021,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 430 */
         text        : "qing",
+        bopomofo    : "ㄑㄧㄥ",
         sheng       : "q",
         yun         : "ing",
         sheng_id    : PINYIN_ID_Q,
@@ -5604,6 +6035,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 431 */
         text        : "qiogn",
+        bopomofo    : "",
         sheng       : "q",
         yun         : "iong",
         sheng_id    : PINYIN_ID_Q,
@@ -5617,6 +6049,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 432 */
         text        : "qiomg",
+        bopomofo    : "",
         sheng       : "q",
         yun         : "iong",
         sheng_id    : PINYIN_ID_Q,
@@ -5630,6 +6063,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 433 */
         text        : "qiong",
+        bopomofo    : "ㄑㄩㄥ",
         sheng       : "q",
         yun         : "iong",
         sheng_id    : PINYIN_ID_Q,
@@ -5643,6 +6077,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 434 */
         text        : "qiou",
+        bopomofo    : "",
         sheng       : "q",
         yun         : "iu",
         sheng_id    : PINYIN_ID_Q,
@@ -5656,6 +6091,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 435 */
         text        : "qiu",
+        bopomofo    : "ㄑㄧㄡ",
         sheng       : "q",
         yun         : "iu",
         sheng_id    : PINYIN_ID_Q,
@@ -5669,6 +6105,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 436 */
         text        : "qu",
+        bopomofo    : "ㄑㄩ",
         sheng       : "q",
         yun         : "u",
         sheng_id    : PINYIN_ID_Q,
@@ -5682,6 +6119,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 437 */
         text        : "quan",
+        bopomofo    : "ㄑㄩㄢ",
         sheng       : "q",
         yun         : "uan",
         sheng_id    : PINYIN_ID_Q,
@@ -5695,6 +6133,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 438 */
         text        : "quang",
+        bopomofo    : "",
         sheng       : "q",
         yun         : "uang",
         sheng_id    : PINYIN_ID_Q,
@@ -5708,6 +6147,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 439 */
         text        : "que",
+        bopomofo    : "ㄑㄩㄝ",
         sheng       : "q",
         yun         : "ue",
         sheng_id    : PINYIN_ID_Q,
@@ -5721,6 +6161,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 440 */
         text        : "quen",
+        bopomofo    : "",
         sheng       : "q",
         yun         : "un",
         sheng_id    : PINYIN_ID_Q,
@@ -5734,6 +6175,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 441 */
         text        : "qun",
+        bopomofo    : "ㄑㄩㄣ",
         sheng       : "q",
         yun         : "un",
         sheng_id    : PINYIN_ID_Q,
@@ -5747,6 +6189,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 442 */
         text        : "qv",
+        bopomofo    : "",
         sheng       : "q",
         yun         : "u",
         sheng_id    : PINYIN_ID_Q,
@@ -5760,6 +6203,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 443 */
         text        : "qvan",
+        bopomofo    : "",
         sheng       : "q",
         yun         : "uan",
         sheng_id    : PINYIN_ID_Q,
@@ -5773,6 +6217,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 444 */
         text        : "qvang",
+        bopomofo    : "",
         sheng       : "q",
         yun         : "uang",
         sheng_id    : PINYIN_ID_Q,
@@ -5786,6 +6231,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 445 */
         text        : "qve",
+        bopomofo    : "",
         sheng       : "q",
         yun         : "ue",
         sheng_id    : PINYIN_ID_Q,
@@ -5799,6 +6245,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 446 */
         text        : "qven",
+        bopomofo    : "",
         sheng       : "q",
         yun         : "un",
         sheng_id    : PINYIN_ID_Q,
@@ -5812,6 +6259,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 447 */
         text        : "qvn",
+        bopomofo    : "",
         sheng       : "q",
         yun         : "un",
         sheng_id    : PINYIN_ID_Q,
@@ -5825,6 +6273,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 448 */
         text        : "r",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "",
         sheng_id    : PINYIN_ID_R,
@@ -5838,6 +6287,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 449 */
         text        : "ra",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "a",
         sheng_id    : PINYIN_ID_R,
@@ -5851,6 +6301,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 450 */
         text        : "ragn",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "ang",
         sheng_id    : PINYIN_ID_R,
@@ -5864,6 +6315,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 451 */
         text        : "rai",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "ai",
         sheng_id    : PINYIN_ID_R,
@@ -5877,6 +6329,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 452 */
         text        : "ramg",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "ang",
         sheng_id    : PINYIN_ID_R,
@@ -5890,6 +6343,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 453 */
         text        : "ran",
+        bopomofo    : "ㄖㄢ",
         sheng       : "r",
         yun         : "an",
         sheng_id    : PINYIN_ID_R,
@@ -5903,6 +6357,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 454 */
         text        : "rang",
+        bopomofo    : "ㄖㄤ",
         sheng       : "r",
         yun         : "ang",
         sheng_id    : PINYIN_ID_R,
@@ -5916,6 +6371,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 455 */
         text        : "rao",
+        bopomofo    : "ㄖㄠ",
         sheng       : "r",
         yun         : "ao",
         sheng_id    : PINYIN_ID_R,
@@ -5929,6 +6385,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 456 */
         text        : "re",
+        bopomofo    : "ㄖㄜ",
         sheng       : "r",
         yun         : "e",
         sheng_id    : PINYIN_ID_R,
@@ -5942,6 +6399,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 457 */
         text        : "regn",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "eng",
         sheng_id    : PINYIN_ID_R,
@@ -5955,6 +6413,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 458 */
         text        : "rei",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "ei",
         sheng_id    : PINYIN_ID_R,
@@ -5968,6 +6427,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 459 */
         text        : "remg",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "eng",
         sheng_id    : PINYIN_ID_R,
@@ -5981,6 +6441,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 460 */
         text        : "ren",
+        bopomofo    : "ㄖㄣ",
         sheng       : "r",
         yun         : "en",
         sheng_id    : PINYIN_ID_R,
@@ -5994,6 +6455,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 461 */
         text        : "reng",
+        bopomofo    : "ㄖㄥ",
         sheng       : "r",
         yun         : "eng",
         sheng_id    : PINYIN_ID_R,
@@ -6007,6 +6469,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 462 */
         text        : "ri",
+        bopomofo    : "ㄖ",
         sheng       : "r",
         yun         : "i",
         sheng_id    : PINYIN_ID_R,
@@ -6020,6 +6483,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 463 */
         text        : "ria",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "ia",
         sheng_id    : PINYIN_ID_R,
@@ -6033,6 +6497,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 464 */
         text        : "rian",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "ian",
         sheng_id    : PINYIN_ID_R,
@@ -6046,6 +6511,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 465 */
         text        : "riang",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "iang",
         sheng_id    : PINYIN_ID_R,
@@ -6059,6 +6525,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 466 */
         text        : "riao",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "iao",
         sheng_id    : PINYIN_ID_R,
@@ -6072,6 +6539,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 467 */
         text        : "rie",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "ie",
         sheng_id    : PINYIN_ID_R,
@@ -6085,6 +6553,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 468 */
         text        : "rin",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "in",
         sheng_id    : PINYIN_ID_R,
@@ -6098,6 +6567,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 469 */
         text        : "ring",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "ing",
         sheng_id    : PINYIN_ID_R,
@@ -6111,6 +6581,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 470 */
         text        : "riou",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "iu",
         sheng_id    : PINYIN_ID_R,
@@ -6124,6 +6595,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 471 */
         text        : "riu",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "iu",
         sheng_id    : PINYIN_ID_R,
@@ -6137,6 +6609,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 472 */
         text        : "ro",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "o",
         sheng_id    : PINYIN_ID_R,
@@ -6150,6 +6623,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 473 */
         text        : "rogn",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "ong",
         sheng_id    : PINYIN_ID_R,
@@ -6163,6 +6637,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 474 */
         text        : "romg",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "ong",
         sheng_id    : PINYIN_ID_R,
@@ -6176,6 +6651,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 475 */
         text        : "rong",
+        bopomofo    : "ㄖㄨㄥ",
         sheng       : "r",
         yun         : "ong",
         sheng_id    : PINYIN_ID_R,
@@ -6189,6 +6665,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 476 */
         text        : "rou",
+        bopomofo    : "ㄖㄡ",
         sheng       : "r",
         yun         : "ou",
         sheng_id    : PINYIN_ID_R,
@@ -6202,6 +6679,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 477 */
         text        : "ru",
+        bopomofo    : "ㄖㄨ",
         sheng       : "r",
         yun         : "u",
         sheng_id    : PINYIN_ID_R,
@@ -6215,6 +6693,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 478 */
         text        : "ruan",
+        bopomofo    : "ㄖㄨㄢ",
         sheng       : "r",
         yun         : "uan",
         sheng_id    : PINYIN_ID_R,
@@ -6228,6 +6707,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 479 */
         text        : "ruang",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "uang",
         sheng_id    : PINYIN_ID_R,
@@ -6241,6 +6721,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 480 */
         text        : "rue",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "üe",
         sheng_id    : PINYIN_ID_R,
@@ -6254,6 +6735,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 481 */
         text        : "ruei",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "ui",
         sheng_id    : PINYIN_ID_R,
@@ -6267,6 +6749,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 482 */
         text        : "ruen",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "un",
         sheng_id    : PINYIN_ID_R,
@@ -6280,6 +6763,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 483 */
         text        : "rui",
+        bopomofo    : "ㄖㄨㄟ",
         sheng       : "r",
         yun         : "ui",
         sheng_id    : PINYIN_ID_R,
@@ -6293,6 +6777,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 484 */
         text        : "run",
+        bopomofo    : "ㄖㄨㄣ",
         sheng       : "r",
         yun         : "un",
         sheng_id    : PINYIN_ID_R,
@@ -6306,6 +6791,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 485 */
         text        : "ruo",
+        bopomofo    : "ㄖㄨㄛ",
         sheng       : "r",
         yun         : "uo",
         sheng_id    : PINYIN_ID_R,
@@ -6319,6 +6805,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 486 */
         text        : "rv",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "ü",
         sheng_id    : PINYIN_ID_R,
@@ -6332,6 +6819,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 487 */
         text        : "rve",
+        bopomofo    : "",
         sheng       : "r",
         yun         : "üe",
         sheng_id    : PINYIN_ID_R,
@@ -6345,6 +6833,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 488 */
         text        : "s",
+        bopomofo    : "",
         sheng       : "s",
         yun         : "",
         sheng_id    : PINYIN_ID_S,
@@ -6358,6 +6847,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 489 */
         text        : "sa",
+        bopomofo    : "ㄙㄚ",
         sheng       : "s",
         yun         : "a",
         sheng_id    : PINYIN_ID_S,
@@ -6371,6 +6861,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 490 */
         text        : "sagn",
+        bopomofo    : "",
         sheng       : "s",
         yun         : "ang",
         sheng_id    : PINYIN_ID_S,
@@ -6384,6 +6875,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 491 */
         text        : "sai",
+        bopomofo    : "ㄙㄞ",
         sheng       : "s",
         yun         : "ai",
         sheng_id    : PINYIN_ID_S,
@@ -6397,6 +6889,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 492 */
         text        : "samg",
+        bopomofo    : "",
         sheng       : "s",
         yun         : "ang",
         sheng_id    : PINYIN_ID_S,
@@ -6410,6 +6903,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 493 */
         text        : "san",
+        bopomofo    : "ㄙㄢ",
         sheng       : "s",
         yun         : "an",
         sheng_id    : PINYIN_ID_S,
@@ -6423,6 +6917,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 494 */
         text        : "sang",
+        bopomofo    : "ㄙㄤ",
         sheng       : "s",
         yun         : "ang",
         sheng_id    : PINYIN_ID_S,
@@ -6436,6 +6931,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 495 */
         text        : "sao",
+        bopomofo    : "ㄙㄠ",
         sheng       : "s",
         yun         : "ao",
         sheng_id    : PINYIN_ID_S,
@@ -6449,6 +6945,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 496 */
         text        : "se",
+        bopomofo    : "ㄙㄜ",
         sheng       : "s",
         yun         : "e",
         sheng_id    : PINYIN_ID_S,
@@ -6462,6 +6959,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 497 */
         text        : "segn",
+        bopomofo    : "",
         sheng       : "s",
         yun         : "eng",
         sheng_id    : PINYIN_ID_S,
@@ -6475,6 +6973,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 498 */
         text        : "sei",
+        bopomofo    : "",
         sheng       : "s",
         yun         : "ei",
         sheng_id    : PINYIN_ID_S,
@@ -6488,6 +6987,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 499 */
         text        : "semg",
+        bopomofo    : "",
         sheng       : "s",
         yun         : "eng",
         sheng_id    : PINYIN_ID_S,
@@ -6501,6 +7001,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 500 */
         text        : "sen",
+        bopomofo    : "ㄙㄣ",
         sheng       : "s",
         yun         : "en",
         sheng_id    : PINYIN_ID_S,
@@ -6514,6 +7015,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 501 */
         text        : "seng",
+        bopomofo    : "ㄙㄥ",
         sheng       : "s",
         yun         : "eng",
         sheng_id    : PINYIN_ID_S,
@@ -6527,6 +7029,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 502 */
         text        : "sh",
+        bopomofo    : "",
         sheng       : "sh",
         yun         : "",
         sheng_id    : PINYIN_ID_SH,
@@ -6540,6 +7043,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 503 */
         text        : "sha",
+        bopomofo    : "ㄕㄚ",
         sheng       : "sh",
         yun         : "a",
         sheng_id    : PINYIN_ID_SH,
@@ -6553,6 +7057,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 504 */
         text        : "shagn",
+        bopomofo    : "",
         sheng       : "sh",
         yun         : "ang",
         sheng_id    : PINYIN_ID_SH,
@@ -6566,6 +7071,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 505 */
         text        : "shai",
+        bopomofo    : "ㄕㄞ",
         sheng       : "sh",
         yun         : "ai",
         sheng_id    : PINYIN_ID_SH,
@@ -6579,6 +7085,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 506 */
         text        : "shamg",
+        bopomofo    : "",
         sheng       : "sh",
         yun         : "ang",
         sheng_id    : PINYIN_ID_SH,
@@ -6592,6 +7099,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 507 */
         text        : "shan",
+        bopomofo    : "ㄕㄢ",
         sheng       : "sh",
         yun         : "an",
         sheng_id    : PINYIN_ID_SH,
@@ -6605,6 +7113,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 508 */
         text        : "shang",
+        bopomofo    : "ㄕㄤ",
         sheng       : "sh",
         yun         : "ang",
         sheng_id    : PINYIN_ID_SH,
@@ -6618,6 +7127,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 509 */
         text        : "shao",
+        bopomofo    : "ㄕㄠ",
         sheng       : "sh",
         yun         : "ao",
         sheng_id    : PINYIN_ID_SH,
@@ -6631,6 +7141,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 510 */
         text        : "she",
+        bopomofo    : "ㄕㄜ",
         sheng       : "sh",
         yun         : "e",
         sheng_id    : PINYIN_ID_SH,
@@ -6644,6 +7155,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 511 */
         text        : "shegn",
+        bopomofo    : "",
         sheng       : "sh",
         yun         : "eng",
         sheng_id    : PINYIN_ID_SH,
@@ -6657,6 +7169,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 512 */
         text        : "shei",
+        bopomofo    : "ㄕㄟ",
         sheng       : "sh",
         yun         : "ei",
         sheng_id    : PINYIN_ID_SH,
@@ -6670,6 +7183,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 513 */
         text        : "shemg",
+        bopomofo    : "",
         sheng       : "sh",
         yun         : "eng",
         sheng_id    : PINYIN_ID_SH,
@@ -6683,6 +7197,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 514 */
         text        : "shen",
+        bopomofo    : "ㄕㄣ",
         sheng       : "sh",
         yun         : "en",
         sheng_id    : PINYIN_ID_SH,
@@ -6696,6 +7211,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 515 */
         text        : "sheng",
+        bopomofo    : "ㄕㄥ",
         sheng       : "sh",
         yun         : "eng",
         sheng_id    : PINYIN_ID_SH,
@@ -6709,6 +7225,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 516 */
         text        : "shi",
+        bopomofo    : "ㄕ",
         sheng       : "sh",
         yun         : "i",
         sheng_id    : PINYIN_ID_SH,
@@ -6722,6 +7239,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 517 */
         text        : "shong",
+        bopomofo    : "",
         sheng       : "sh",
         yun         : "ong",
         sheng_id    : PINYIN_ID_SH,
@@ -6735,6 +7253,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 518 */
         text        : "shou",
+        bopomofo    : "ㄕㄡ",
         sheng       : "sh",
         yun         : "ou",
         sheng_id    : PINYIN_ID_SH,
@@ -6748,6 +7267,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 519 */
         text        : "shu",
+        bopomofo    : "ㄕㄨ",
         sheng       : "sh",
         yun         : "u",
         sheng_id    : PINYIN_ID_SH,
@@ -6761,6 +7281,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 520 */
         text        : "shua",
+        bopomofo    : "ㄕㄨㄚ",
         sheng       : "sh",
         yun         : "ua",
         sheng_id    : PINYIN_ID_SH,
@@ -6774,6 +7295,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 521 */
         text        : "shuagn",
+        bopomofo    : "",
         sheng       : "sh",
         yun         : "uang",
         sheng_id    : PINYIN_ID_SH,
@@ -6787,6 +7309,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 522 */
         text        : "shuai",
+        bopomofo    : "ㄕㄨㄞ",
         sheng       : "sh",
         yun         : "uai",
         sheng_id    : PINYIN_ID_SH,
@@ -6800,6 +7323,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 523 */
         text        : "shuamg",
+        bopomofo    : "",
         sheng       : "sh",
         yun         : "uang",
         sheng_id    : PINYIN_ID_SH,
@@ -6813,6 +7337,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 524 */
         text        : "shuan",
+        bopomofo    : "ㄕㄨㄢ",
         sheng       : "sh",
         yun         : "uan",
         sheng_id    : PINYIN_ID_SH,
@@ -6826,6 +7351,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 525 */
         text        : "shuang",
+        bopomofo    : "ㄕㄨㄤ",
         sheng       : "sh",
         yun         : "uang",
         sheng_id    : PINYIN_ID_SH,
@@ -6839,6 +7365,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 526 */
         text        : "shuei",
+        bopomofo    : "",
         sheng       : "sh",
         yun         : "ui",
         sheng_id    : PINYIN_ID_SH,
@@ -6852,6 +7379,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 527 */
         text        : "shuen",
+        bopomofo    : "",
         sheng       : "sh",
         yun         : "un",
         sheng_id    : PINYIN_ID_SH,
@@ -6865,6 +7393,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 528 */
         text        : "shui",
+        bopomofo    : "ㄕㄨㄟ",
         sheng       : "sh",
         yun         : "ui",
         sheng_id    : PINYIN_ID_SH,
@@ -6878,6 +7407,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 529 */
         text        : "shun",
+        bopomofo    : "ㄕㄨㄣ",
         sheng       : "sh",
         yun         : "un",
         sheng_id    : PINYIN_ID_SH,
@@ -6891,6 +7421,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 530 */
         text        : "shuo",
+        bopomofo    : "ㄕㄨㄛ",
         sheng       : "sh",
         yun         : "uo",
         sheng_id    : PINYIN_ID_SH,
@@ -6904,6 +7435,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 531 */
         text        : "si",
+        bopomofo    : "ㄙ",
         sheng       : "s",
         yun         : "i",
         sheng_id    : PINYIN_ID_S,
@@ -6917,6 +7449,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 532 */
         text        : "sogn",
+        bopomofo    : "",
         sheng       : "s",
         yun         : "ong",
         sheng_id    : PINYIN_ID_S,
@@ -6930,6 +7463,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 533 */
         text        : "somg",
+        bopomofo    : "",
         sheng       : "s",
         yun         : "ong",
         sheng_id    : PINYIN_ID_S,
@@ -6943,6 +7477,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 534 */
         text        : "song",
+        bopomofo    : "ㄙㄨㄥ",
         sheng       : "s",
         yun         : "ong",
         sheng_id    : PINYIN_ID_S,
@@ -6956,6 +7491,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 535 */
         text        : "sou",
+        bopomofo    : "ㄙㄡ",
         sheng       : "s",
         yun         : "ou",
         sheng_id    : PINYIN_ID_S,
@@ -6969,6 +7505,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 536 */
         text        : "su",
+        bopomofo    : "ㄙㄨ",
         sheng       : "s",
         yun         : "u",
         sheng_id    : PINYIN_ID_S,
@@ -6982,6 +7519,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 537 */
         text        : "sua",
+        bopomofo    : "",
         sheng       : "s",
         yun         : "ua",
         sheng_id    : PINYIN_ID_S,
@@ -6995,6 +7533,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 538 */
         text        : "suai",
+        bopomofo    : "",
         sheng       : "s",
         yun         : "uai",
         sheng_id    : PINYIN_ID_S,
@@ -7008,6 +7547,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 539 */
         text        : "suan",
+        bopomofo    : "ㄙㄨㄢ",
         sheng       : "s",
         yun         : "uan",
         sheng_id    : PINYIN_ID_S,
@@ -7021,6 +7561,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 540 */
         text        : "suang",
+        bopomofo    : "",
         sheng       : "s",
         yun         : "uang",
         sheng_id    : PINYIN_ID_S,
@@ -7034,6 +7575,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 541 */
         text        : "suei",
+        bopomofo    : "",
         sheng       : "s",
         yun         : "ui",
         sheng_id    : PINYIN_ID_S,
@@ -7047,6 +7589,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 542 */
         text        : "suen",
+        bopomofo    : "",
         sheng       : "s",
         yun         : "un",
         sheng_id    : PINYIN_ID_S,
@@ -7060,6 +7603,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 543 */
         text        : "sui",
+        bopomofo    : "ㄙㄨㄟ",
         sheng       : "s",
         yun         : "ui",
         sheng_id    : PINYIN_ID_S,
@@ -7073,6 +7617,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 544 */
         text        : "sun",
+        bopomofo    : "ㄙㄨㄣ",
         sheng       : "s",
         yun         : "un",
         sheng_id    : PINYIN_ID_S,
@@ -7086,6 +7631,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 545 */
         text        : "suo",
+        bopomofo    : "ㄙㄨㄛ",
         sheng       : "s",
         yun         : "uo",
         sheng_id    : PINYIN_ID_S,
@@ -7099,6 +7645,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 546 */
         text        : "t",
+        bopomofo    : "ㄊ",
         sheng       : "t",
         yun         : "",
         sheng_id    : PINYIN_ID_T,
@@ -7112,6 +7659,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 547 */
         text        : "ta",
+        bopomofo    : "ㄊㄚ",
         sheng       : "t",
         yun         : "a",
         sheng_id    : PINYIN_ID_T,
@@ -7125,6 +7673,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 548 */
         text        : "tagn",
+        bopomofo    : "",
         sheng       : "t",
         yun         : "ang",
         sheng_id    : PINYIN_ID_T,
@@ -7138,6 +7687,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 549 */
         text        : "tai",
+        bopomofo    : "ㄊㄞ",
         sheng       : "t",
         yun         : "ai",
         sheng_id    : PINYIN_ID_T,
@@ -7151,6 +7701,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 550 */
         text        : "tamg",
+        bopomofo    : "",
         sheng       : "t",
         yun         : "ang",
         sheng_id    : PINYIN_ID_T,
@@ -7164,6 +7715,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 551 */
         text        : "tan",
+        bopomofo    : "ㄊㄢ",
         sheng       : "t",
         yun         : "an",
         sheng_id    : PINYIN_ID_T,
@@ -7177,6 +7729,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 552 */
         text        : "tang",
+        bopomofo    : "ㄊㄤ",
         sheng       : "t",
         yun         : "ang",
         sheng_id    : PINYIN_ID_T,
@@ -7190,6 +7743,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 553 */
         text        : "tao",
+        bopomofo    : "ㄊㄠ",
         sheng       : "t",
         yun         : "ao",
         sheng_id    : PINYIN_ID_T,
@@ -7203,6 +7757,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 554 */
         text        : "te",
+        bopomofo    : "ㄊㄜ",
         sheng       : "t",
         yun         : "e",
         sheng_id    : PINYIN_ID_T,
@@ -7216,6 +7771,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 555 */
         text        : "tegn",
+        bopomofo    : "",
         sheng       : "t",
         yun         : "eng",
         sheng_id    : PINYIN_ID_T,
@@ -7229,6 +7785,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 556 */
         text        : "temg",
+        bopomofo    : "",
         sheng       : "t",
         yun         : "eng",
         sheng_id    : PINYIN_ID_T,
@@ -7242,6 +7799,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 557 */
         text        : "ten",
+        bopomofo    : "",
         sheng       : "t",
         yun         : "en",
         sheng_id    : PINYIN_ID_T,
@@ -7255,6 +7813,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 558 */
         text        : "teng",
+        bopomofo    : "ㄊㄥ",
         sheng       : "t",
         yun         : "eng",
         sheng_id    : PINYIN_ID_T,
@@ -7268,6 +7827,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 559 */
         text        : "ti",
+        bopomofo    : "ㄊㄧ",
         sheng       : "t",
         yun         : "i",
         sheng_id    : PINYIN_ID_T,
@@ -7281,6 +7841,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 560 */
         text        : "tian",
+        bopomofo    : "ㄊㄧㄢ",
         sheng       : "t",
         yun         : "ian",
         sheng_id    : PINYIN_ID_T,
@@ -7294,6 +7855,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 561 */
         text        : "tiang",
+        bopomofo    : "",
         sheng       : "t",
         yun         : "iang",
         sheng_id    : PINYIN_ID_T,
@@ -7307,6 +7869,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 562 */
         text        : "tiao",
+        bopomofo    : "ㄊㄧㄠ",
         sheng       : "t",
         yun         : "iao",
         sheng_id    : PINYIN_ID_T,
@@ -7320,6 +7883,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 563 */
         text        : "tie",
+        bopomofo    : "ㄊㄧㄝ",
         sheng       : "t",
         yun         : "ie",
         sheng_id    : PINYIN_ID_T,
@@ -7333,6 +7897,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 564 */
         text        : "tign",
+        bopomofo    : "",
         sheng       : "t",
         yun         : "ing",
         sheng_id    : PINYIN_ID_T,
@@ -7346,6 +7911,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 565 */
         text        : "timg",
+        bopomofo    : "",
         sheng       : "t",
         yun         : "ing",
         sheng_id    : PINYIN_ID_T,
@@ -7359,6 +7925,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 566 */
         text        : "tin",
+        bopomofo    : "",
         sheng       : "t",
         yun         : "in",
         sheng_id    : PINYIN_ID_T,
@@ -7372,6 +7939,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 567 */
         text        : "ting",
+        bopomofo    : "ㄊㄧㄥ",
         sheng       : "t",
         yun         : "ing",
         sheng_id    : PINYIN_ID_T,
@@ -7385,6 +7953,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 568 */
         text        : "togn",
+        bopomofo    : "",
         sheng       : "t",
         yun         : "ong",
         sheng_id    : PINYIN_ID_T,
@@ -7398,6 +7967,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 569 */
         text        : "tomg",
+        bopomofo    : "",
         sheng       : "t",
         yun         : "ong",
         sheng_id    : PINYIN_ID_T,
@@ -7411,6 +7981,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 570 */
         text        : "tong",
+        bopomofo    : "ㄊㄨㄥ",
         sheng       : "t",
         yun         : "ong",
         sheng_id    : PINYIN_ID_T,
@@ -7424,6 +7995,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 571 */
         text        : "tou",
+        bopomofo    : "ㄊㄡ",
         sheng       : "t",
         yun         : "ou",
         sheng_id    : PINYIN_ID_T,
@@ -7437,6 +8009,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 572 */
         text        : "tu",
+        bopomofo    : "ㄊㄨ",
         sheng       : "t",
         yun         : "u",
         sheng_id    : PINYIN_ID_T,
@@ -7450,6 +8023,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 573 */
         text        : "tuan",
+        bopomofo    : "ㄊㄨㄢ",
         sheng       : "t",
         yun         : "uan",
         sheng_id    : PINYIN_ID_T,
@@ -7463,6 +8037,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 574 */
         text        : "tuang",
+        bopomofo    : "",
         sheng       : "t",
         yun         : "uang",
         sheng_id    : PINYIN_ID_T,
@@ -7476,6 +8051,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 575 */
         text        : "tuei",
+        bopomofo    : "",
         sheng       : "t",
         yun         : "ui",
         sheng_id    : PINYIN_ID_T,
@@ -7489,6 +8065,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 576 */
         text        : "tuen",
+        bopomofo    : "",
         sheng       : "t",
         yun         : "un",
         sheng_id    : PINYIN_ID_T,
@@ -7502,6 +8079,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 577 */
         text        : "tui",
+        bopomofo    : "ㄊㄨㄟ",
         sheng       : "t",
         yun         : "ui",
         sheng_id    : PINYIN_ID_T,
@@ -7515,6 +8093,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 578 */
         text        : "tun",
+        bopomofo    : "ㄊㄨㄣ",
         sheng       : "t",
         yun         : "un",
         sheng_id    : PINYIN_ID_T,
@@ -7528,6 +8107,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 579 */
         text        : "tuo",
+        bopomofo    : "ㄊㄨㄛ",
         sheng       : "t",
         yun         : "uo",
         sheng_id    : PINYIN_ID_T,
@@ -7541,6 +8121,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 580 */
         text        : "w",
+        bopomofo    : "",
         sheng       : "w",
         yun         : "",
         sheng_id    : PINYIN_ID_W,
@@ -7554,6 +8135,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 581 */
         text        : "wa",
+        bopomofo    : "ㄨㄚ",
         sheng       : "w",
         yun         : "a",
         sheng_id    : PINYIN_ID_W,
@@ -7567,6 +8149,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 582 */
         text        : "wagn",
+        bopomofo    : "",
         sheng       : "w",
         yun         : "ang",
         sheng_id    : PINYIN_ID_W,
@@ -7580,6 +8163,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 583 */
         text        : "wai",
+        bopomofo    : "ㄨㄞ",
         sheng       : "w",
         yun         : "ai",
         sheng_id    : PINYIN_ID_W,
@@ -7593,6 +8177,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 584 */
         text        : "wamg",
+        bopomofo    : "",
         sheng       : "w",
         yun         : "ang",
         sheng_id    : PINYIN_ID_W,
@@ -7606,6 +8191,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 585 */
         text        : "wan",
+        bopomofo    : "ㄨㄢ",
         sheng       : "w",
         yun         : "an",
         sheng_id    : PINYIN_ID_W,
@@ -7619,6 +8205,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 586 */
         text        : "wang",
+        bopomofo    : "ㄨㄤ",
         sheng       : "w",
         yun         : "ang",
         sheng_id    : PINYIN_ID_W,
@@ -7632,6 +8219,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 587 */
         text        : "wegn",
+        bopomofo    : "",
         sheng       : "w",
         yun         : "eng",
         sheng_id    : PINYIN_ID_W,
@@ -7645,6 +8233,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 588 */
         text        : "wei",
+        bopomofo    : "ㄨㄟ",
         sheng       : "w",
         yun         : "ei",
         sheng_id    : PINYIN_ID_W,
@@ -7658,6 +8247,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 589 */
         text        : "wemg",
+        bopomofo    : "",
         sheng       : "w",
         yun         : "eng",
         sheng_id    : PINYIN_ID_W,
@@ -7671,6 +8261,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 590 */
         text        : "wen",
+        bopomofo    : "ㄨㄣ",
         sheng       : "w",
         yun         : "en",
         sheng_id    : PINYIN_ID_W,
@@ -7684,6 +8275,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 591 */
         text        : "weng",
+        bopomofo    : "ㄨㄥ",
         sheng       : "w",
         yun         : "eng",
         sheng_id    : PINYIN_ID_W,
@@ -7697,6 +8289,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 592 */
         text        : "wo",
+        bopomofo    : "ㄨㄛ",
         sheng       : "w",
         yun         : "o",
         sheng_id    : PINYIN_ID_W,
@@ -7710,6 +8303,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 593 */
         text        : "wu",
+        bopomofo    : "ㄨ",
         sheng       : "w",
         yun         : "u",
         sheng_id    : PINYIN_ID_W,
@@ -7723,6 +8317,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 594 */
         text        : "x",
+        bopomofo    : "ㄒ",
         sheng       : "x",
         yun         : "",
         sheng_id    : PINYIN_ID_X,
@@ -7736,6 +8331,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 595 */
         text        : "xi",
+        bopomofo    : "ㄒㄧ",
         sheng       : "x",
         yun         : "i",
         sheng_id    : PINYIN_ID_X,
@@ -7749,6 +8345,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 596 */
         text        : "xia",
+        bopomofo    : "ㄒㄧㄚ",
         sheng       : "x",
         yun         : "ia",
         sheng_id    : PINYIN_ID_X,
@@ -7762,6 +8359,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 597 */
         text        : "xiagn",
+        bopomofo    : "",
         sheng       : "x",
         yun         : "iang",
         sheng_id    : PINYIN_ID_X,
@@ -7775,6 +8373,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 598 */
         text        : "xiamg",
+        bopomofo    : "",
         sheng       : "x",
         yun         : "iang",
         sheng_id    : PINYIN_ID_X,
@@ -7788,6 +8387,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 599 */
         text        : "xian",
+        bopomofo    : "ㄒㄧㄢ",
         sheng       : "x",
         yun         : "ian",
         sheng_id    : PINYIN_ID_X,
@@ -7801,6 +8401,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 600 */
         text        : "xiang",
+        bopomofo    : "ㄒㄧㄤ",
         sheng       : "x",
         yun         : "iang",
         sheng_id    : PINYIN_ID_X,
@@ -7814,6 +8415,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 601 */
         text        : "xiao",
+        bopomofo    : "ㄒㄧㄠ",
         sheng       : "x",
         yun         : "iao",
         sheng_id    : PINYIN_ID_X,
@@ -7827,6 +8429,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 602 */
         text        : "xie",
+        bopomofo    : "ㄒㄧㄝ",
         sheng       : "x",
         yun         : "ie",
         sheng_id    : PINYIN_ID_X,
@@ -7840,6 +8443,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 603 */
         text        : "xign",
+        bopomofo    : "",
         sheng       : "x",
         yun         : "ing",
         sheng_id    : PINYIN_ID_X,
@@ -7853,6 +8457,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 604 */
         text        : "ximg",
+        bopomofo    : "",
         sheng       : "x",
         yun         : "ing",
         sheng_id    : PINYIN_ID_X,
@@ -7866,6 +8471,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 605 */
         text        : "xin",
+        bopomofo    : "ㄒㄧㄣ",
         sheng       : "x",
         yun         : "in",
         sheng_id    : PINYIN_ID_X,
@@ -7879,6 +8485,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 606 */
         text        : "xing",
+        bopomofo    : "ㄒㄧㄥ",
         sheng       : "x",
         yun         : "ing",
         sheng_id    : PINYIN_ID_X,
@@ -7892,6 +8499,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 607 */
         text        : "xiogn",
+        bopomofo    : "",
         sheng       : "x",
         yun         : "iong",
         sheng_id    : PINYIN_ID_X,
@@ -7905,6 +8513,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 608 */
         text        : "xiomg",
+        bopomofo    : "",
         sheng       : "x",
         yun         : "iong",
         sheng_id    : PINYIN_ID_X,
@@ -7918,6 +8527,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 609 */
         text        : "xiong",
+        bopomofo    : "ㄒㄩㄥ",
         sheng       : "x",
         yun         : "iong",
         sheng_id    : PINYIN_ID_X,
@@ -7931,6 +8541,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 610 */
         text        : "xiou",
+        bopomofo    : "",
         sheng       : "x",
         yun         : "iu",
         sheng_id    : PINYIN_ID_X,
@@ -7944,6 +8555,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 611 */
         text        : "xiu",
+        bopomofo    : "ㄒㄧㄡ",
         sheng       : "x",
         yun         : "iu",
         sheng_id    : PINYIN_ID_X,
@@ -7957,6 +8569,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 612 */
         text        : "xu",
+        bopomofo    : "ㄒㄩ",
         sheng       : "x",
         yun         : "u",
         sheng_id    : PINYIN_ID_X,
@@ -7970,6 +8583,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 613 */
         text        : "xuan",
+        bopomofo    : "ㄒㄩㄢ",
         sheng       : "x",
         yun         : "uan",
         sheng_id    : PINYIN_ID_X,
@@ -7983,6 +8597,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 614 */
         text        : "xuang",
+        bopomofo    : "",
         sheng       : "x",
         yun         : "uang",
         sheng_id    : PINYIN_ID_X,
@@ -7996,6 +8611,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 615 */
         text        : "xue",
+        bopomofo    : "ㄒㄩㄝ",
         sheng       : "x",
         yun         : "ue",
         sheng_id    : PINYIN_ID_X,
@@ -8009,6 +8625,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 616 */
         text        : "xuen",
+        bopomofo    : "",
         sheng       : "x",
         yun         : "un",
         sheng_id    : PINYIN_ID_X,
@@ -8022,6 +8639,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 617 */
         text        : "xun",
+        bopomofo    : "ㄒㄩㄣ",
         sheng       : "x",
         yun         : "un",
         sheng_id    : PINYIN_ID_X,
@@ -8035,6 +8653,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 618 */
         text        : "xv",
+        bopomofo    : "",
         sheng       : "x",
         yun         : "u",
         sheng_id    : PINYIN_ID_X,
@@ -8048,6 +8667,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 619 */
         text        : "xvan",
+        bopomofo    : "",
         sheng       : "x",
         yun         : "uan",
         sheng_id    : PINYIN_ID_X,
@@ -8061,6 +8681,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 620 */
         text        : "xvang",
+        bopomofo    : "",
         sheng       : "x",
         yun         : "uang",
         sheng_id    : PINYIN_ID_X,
@@ -8074,6 +8695,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 621 */
         text        : "xve",
+        bopomofo    : "",
         sheng       : "x",
         yun         : "ue",
         sheng_id    : PINYIN_ID_X,
@@ -8087,6 +8709,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 622 */
         text        : "xven",
+        bopomofo    : "",
         sheng       : "x",
         yun         : "un",
         sheng_id    : PINYIN_ID_X,
@@ -8100,6 +8723,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 623 */
         text        : "xvn",
+        bopomofo    : "",
         sheng       : "x",
         yun         : "un",
         sheng_id    : PINYIN_ID_X,
@@ -8113,6 +8737,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 624 */
         text        : "y",
+        bopomofo    : "",
         sheng       : "y",
         yun         : "",
         sheng_id    : PINYIN_ID_Y,
@@ -8126,6 +8751,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 625 */
         text        : "ya",
+        bopomofo    : "ㄧㄚ",
         sheng       : "y",
         yun         : "a",
         sheng_id    : PINYIN_ID_Y,
@@ -8139,6 +8765,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 626 */
         text        : "yagn",
+        bopomofo    : "",
         sheng       : "y",
         yun         : "ang",
         sheng_id    : PINYIN_ID_Y,
@@ -8152,6 +8779,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 627 */
         text        : "yamg",
+        bopomofo    : "",
         sheng       : "y",
         yun         : "ang",
         sheng_id    : PINYIN_ID_Y,
@@ -8165,6 +8793,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 628 */
         text        : "yan",
+        bopomofo    : "ㄧㄢ",
         sheng       : "y",
         yun         : "an",
         sheng_id    : PINYIN_ID_Y,
@@ -8178,6 +8807,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 629 */
         text        : "yang",
+        bopomofo    : "ㄧㄤ",
         sheng       : "y",
         yun         : "ang",
         sheng_id    : PINYIN_ID_Y,
@@ -8191,6 +8821,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 630 */
         text        : "yao",
+        bopomofo    : "ㄧㄠ",
         sheng       : "y",
         yun         : "ao",
         sheng_id    : PINYIN_ID_Y,
@@ -8204,6 +8835,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 631 */
         text        : "ye",
+        bopomofo    : "ㄧㄝ",
         sheng       : "y",
         yun         : "e",
         sheng_id    : PINYIN_ID_Y,
@@ -8217,6 +8849,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 632 */
         text        : "yi",
+        bopomofo    : "ㄧ",
         sheng       : "y",
         yun         : "i",
         sheng_id    : PINYIN_ID_Y,
@@ -8230,6 +8863,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 633 */
         text        : "yign",
+        bopomofo    : "",
         sheng       : "y",
         yun         : "ing",
         sheng_id    : PINYIN_ID_Y,
@@ -8243,6 +8877,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 634 */
         text        : "yimg",
+        bopomofo    : "",
         sheng       : "y",
         yun         : "ing",
         sheng_id    : PINYIN_ID_Y,
@@ -8256,6 +8891,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 635 */
         text        : "yin",
+        bopomofo    : "ㄧㄣ",
         sheng       : "y",
         yun         : "in",
         sheng_id    : PINYIN_ID_Y,
@@ -8269,6 +8905,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 636 */
         text        : "ying",
+        bopomofo    : "ㄧㄥ",
         sheng       : "y",
         yun         : "ing",
         sheng_id    : PINYIN_ID_Y,
@@ -8282,6 +8919,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 637 */
         text        : "yo",
+        bopomofo    : "ㄧㄛ",
         sheng       : "y",
         yun         : "o",
         sheng_id    : PINYIN_ID_Y,
@@ -8295,6 +8933,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 638 */
         text        : "yogn",
+        bopomofo    : "",
         sheng       : "y",
         yun         : "ong",
         sheng_id    : PINYIN_ID_Y,
@@ -8308,6 +8947,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 639 */
         text        : "yomg",
+        bopomofo    : "",
         sheng       : "y",
         yun         : "ong",
         sheng_id    : PINYIN_ID_Y,
@@ -8321,6 +8961,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 640 */
         text        : "yong",
+        bopomofo    : "ㄩㄥ",
         sheng       : "y",
         yun         : "ong",
         sheng_id    : PINYIN_ID_Y,
@@ -8334,6 +8975,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 641 */
         text        : "you",
+        bopomofo    : "ㄧㄡ",
         sheng       : "y",
         yun         : "ou",
         sheng_id    : PINYIN_ID_Y,
@@ -8347,6 +8989,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 642 */
         text        : "yu",
+        bopomofo    : "ㄩ",
         sheng       : "y",
         yun         : "u",
         sheng_id    : PINYIN_ID_Y,
@@ -8360,6 +9003,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 643 */
         text        : "yuan",
+        bopomofo    : "ㄩㄢ",
         sheng       : "y",
         yun         : "uan",
         sheng_id    : PINYIN_ID_Y,
@@ -8373,6 +9017,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 644 */
         text        : "yuang",
+        bopomofo    : "",
         sheng       : "y",
         yun         : "uang",
         sheng_id    : PINYIN_ID_Y,
@@ -8386,6 +9031,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 645 */
         text        : "yue",
+        bopomofo    : "ㄩㄝ",
         sheng       : "y",
         yun         : "ue",
         sheng_id    : PINYIN_ID_Y,
@@ -8399,6 +9045,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 646 */
         text        : "yuen",
+        bopomofo    : "",
         sheng       : "y",
         yun         : "un",
         sheng_id    : PINYIN_ID_Y,
@@ -8412,6 +9059,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 647 */
         text        : "yun",
+        bopomofo    : "ㄩㄣ",
         sheng       : "y",
         yun         : "un",
         sheng_id    : PINYIN_ID_Y,
@@ -8425,6 +9073,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 648 */
         text        : "yv",
+        bopomofo    : "",
         sheng       : "y",
         yun         : "u",
         sheng_id    : PINYIN_ID_Y,
@@ -8438,6 +9087,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 649 */
         text        : "yvan",
+        bopomofo    : "",
         sheng       : "y",
         yun         : "uan",
         sheng_id    : PINYIN_ID_Y,
@@ -8451,6 +9101,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 650 */
         text        : "yvang",
+        bopomofo    : "",
         sheng       : "y",
         yun         : "uang",
         sheng_id    : PINYIN_ID_Y,
@@ -8464,6 +9115,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 651 */
         text        : "yve",
+        bopomofo    : "",
         sheng       : "y",
         yun         : "ue",
         sheng_id    : PINYIN_ID_Y,
@@ -8477,6 +9129,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 652 */
         text        : "yven",
+        bopomofo    : "",
         sheng       : "y",
         yun         : "un",
         sheng_id    : PINYIN_ID_Y,
@@ -8490,6 +9143,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 653 */
         text        : "yvn",
+        bopomofo    : "",
         sheng       : "y",
         yun         : "un",
         sheng_id    : PINYIN_ID_Y,
@@ -8503,6 +9157,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 654 */
         text        : "z",
+        bopomofo    : "",
         sheng       : "z",
         yun         : "",
         sheng_id    : PINYIN_ID_Z,
@@ -8516,6 +9171,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 655 */
         text        : "za",
+        bopomofo    : "ㄗㄚ",
         sheng       : "z",
         yun         : "a",
         sheng_id    : PINYIN_ID_Z,
@@ -8529,6 +9185,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 656 */
         text        : "zagn",
+        bopomofo    : "",
         sheng       : "z",
         yun         : "ang",
         sheng_id    : PINYIN_ID_Z,
@@ -8542,6 +9199,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 657 */
         text        : "zai",
+        bopomofo    : "ㄗㄞ",
         sheng       : "z",
         yun         : "ai",
         sheng_id    : PINYIN_ID_Z,
@@ -8555,6 +9213,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 658 */
         text        : "zamg",
+        bopomofo    : "",
         sheng       : "z",
         yun         : "ang",
         sheng_id    : PINYIN_ID_Z,
@@ -8568,6 +9227,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 659 */
         text        : "zan",
+        bopomofo    : "ㄗㄢ",
         sheng       : "z",
         yun         : "an",
         sheng_id    : PINYIN_ID_Z,
@@ -8581,6 +9241,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 660 */
         text        : "zang",
+        bopomofo    : "ㄗㄤ",
         sheng       : "z",
         yun         : "ang",
         sheng_id    : PINYIN_ID_Z,
@@ -8594,6 +9255,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 661 */
         text        : "zao",
+        bopomofo    : "ㄗㄠ",
         sheng       : "z",
         yun         : "ao",
         sheng_id    : PINYIN_ID_Z,
@@ -8607,6 +9269,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 662 */
         text        : "ze",
+        bopomofo    : "ㄗㄜ",
         sheng       : "z",
         yun         : "e",
         sheng_id    : PINYIN_ID_Z,
@@ -8620,6 +9283,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 663 */
         text        : "zegn",
+        bopomofo    : "",
         sheng       : "z",
         yun         : "eng",
         sheng_id    : PINYIN_ID_Z,
@@ -8633,6 +9297,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 664 */
         text        : "zei",
+        bopomofo    : "ㄗㄟ",
         sheng       : "z",
         yun         : "ei",
         sheng_id    : PINYIN_ID_Z,
@@ -8646,6 +9311,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 665 */
         text        : "zemg",
+        bopomofo    : "",
         sheng       : "z",
         yun         : "eng",
         sheng_id    : PINYIN_ID_Z,
@@ -8659,6 +9325,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 666 */
         text        : "zen",
+        bopomofo    : "ㄗㄣ",
         sheng       : "z",
         yun         : "en",
         sheng_id    : PINYIN_ID_Z,
@@ -8672,6 +9339,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 667 */
         text        : "zeng",
+        bopomofo    : "ㄗㄥ",
         sheng       : "z",
         yun         : "eng",
         sheng_id    : PINYIN_ID_Z,
@@ -8685,6 +9353,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 668 */
         text        : "zh",
+        bopomofo    : "",
         sheng       : "zh",
         yun         : "",
         sheng_id    : PINYIN_ID_ZH,
@@ -8698,6 +9367,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 669 */
         text        : "zha",
+        bopomofo    : "ㄓㄚ",
         sheng       : "zh",
         yun         : "a",
         sheng_id    : PINYIN_ID_ZH,
@@ -8711,6 +9381,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 670 */
         text        : "zhagn",
+        bopomofo    : "",
         sheng       : "zh",
         yun         : "ang",
         sheng_id    : PINYIN_ID_ZH,
@@ -8724,6 +9395,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 671 */
         text        : "zhai",
+        bopomofo    : "ㄓㄞ",
         sheng       : "zh",
         yun         : "ai",
         sheng_id    : PINYIN_ID_ZH,
@@ -8737,6 +9409,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 672 */
         text        : "zhamg",
+        bopomofo    : "",
         sheng       : "zh",
         yun         : "ang",
         sheng_id    : PINYIN_ID_ZH,
@@ -8750,6 +9423,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 673 */
         text        : "zhan",
+        bopomofo    : "ㄓㄢ",
         sheng       : "zh",
         yun         : "an",
         sheng_id    : PINYIN_ID_ZH,
@@ -8763,6 +9437,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 674 */
         text        : "zhang",
+        bopomofo    : "ㄓㄤ",
         sheng       : "zh",
         yun         : "ang",
         sheng_id    : PINYIN_ID_ZH,
@@ -8776,6 +9451,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 675 */
         text        : "zhao",
+        bopomofo    : "ㄓㄠ",
         sheng       : "zh",
         yun         : "ao",
         sheng_id    : PINYIN_ID_ZH,
@@ -8789,6 +9465,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 676 */
         text        : "zhe",
+        bopomofo    : "ㄓㄜ",
         sheng       : "zh",
         yun         : "e",
         sheng_id    : PINYIN_ID_ZH,
@@ -8802,6 +9479,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 677 */
         text        : "zhegn",
+        bopomofo    : "",
         sheng       : "zh",
         yun         : "eng",
         sheng_id    : PINYIN_ID_ZH,
@@ -8815,6 +9493,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 678 */
         text        : "zhei",
+        bopomofo    : "ㄓㄟ",
         sheng       : "zh",
         yun         : "ei",
         sheng_id    : PINYIN_ID_ZH,
@@ -8828,6 +9507,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 679 */
         text        : "zhemg",
+        bopomofo    : "",
         sheng       : "zh",
         yun         : "eng",
         sheng_id    : PINYIN_ID_ZH,
@@ -8841,6 +9521,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 680 */
         text        : "zhen",
+        bopomofo    : "ㄓㄣ",
         sheng       : "zh",
         yun         : "en",
         sheng_id    : PINYIN_ID_ZH,
@@ -8854,6 +9535,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 681 */
         text        : "zheng",
+        bopomofo    : "ㄓㄥ",
         sheng       : "zh",
         yun         : "eng",
         sheng_id    : PINYIN_ID_ZH,
@@ -8867,6 +9549,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 682 */
         text        : "zhi",
+        bopomofo    : "ㄓ",
         sheng       : "zh",
         yun         : "i",
         sheng_id    : PINYIN_ID_ZH,
@@ -8880,6 +9563,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 683 */
         text        : "zhogn",
+        bopomofo    : "",
         sheng       : "zh",
         yun         : "ong",
         sheng_id    : PINYIN_ID_ZH,
@@ -8893,6 +9577,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 684 */
         text        : "zhomg",
+        bopomofo    : "",
         sheng       : "zh",
         yun         : "ong",
         sheng_id    : PINYIN_ID_ZH,
@@ -8906,6 +9591,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 685 */
         text        : "zhong",
+        bopomofo    : "ㄓㄨㄥ",
         sheng       : "zh",
         yun         : "ong",
         sheng_id    : PINYIN_ID_ZH,
@@ -8919,6 +9605,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 686 */
         text        : "zhou",
+        bopomofo    : "ㄓㄡ",
         sheng       : "zh",
         yun         : "ou",
         sheng_id    : PINYIN_ID_ZH,
@@ -8932,6 +9619,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 687 */
         text        : "zhu",
+        bopomofo    : "ㄓㄨ",
         sheng       : "zh",
         yun         : "u",
         sheng_id    : PINYIN_ID_ZH,
@@ -8945,6 +9633,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 688 */
         text        : "zhua",
+        bopomofo    : "ㄓㄨㄚ",
         sheng       : "zh",
         yun         : "ua",
         sheng_id    : PINYIN_ID_ZH,
@@ -8958,6 +9647,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 689 */
         text        : "zhuagn",
+        bopomofo    : "",
         sheng       : "zh",
         yun         : "uang",
         sheng_id    : PINYIN_ID_ZH,
@@ -8971,6 +9661,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 690 */
         text        : "zhuai",
+        bopomofo    : "ㄓㄨㄞ",
         sheng       : "zh",
         yun         : "uai",
         sheng_id    : PINYIN_ID_ZH,
@@ -8984,6 +9675,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 691 */
         text        : "zhuamg",
+        bopomofo    : "",
         sheng       : "zh",
         yun         : "uang",
         sheng_id    : PINYIN_ID_ZH,
@@ -8997,6 +9689,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 692 */
         text        : "zhuan",
+        bopomofo    : "ㄓㄨㄢ",
         sheng       : "zh",
         yun         : "uan",
         sheng_id    : PINYIN_ID_ZH,
@@ -9010,6 +9703,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 693 */
         text        : "zhuang",
+        bopomofo    : "ㄓㄨㄤ",
         sheng       : "zh",
         yun         : "uang",
         sheng_id    : PINYIN_ID_ZH,
@@ -9023,6 +9717,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 694 */
         text        : "zhuei",
+        bopomofo    : "",
         sheng       : "zh",
         yun         : "ui",
         sheng_id    : PINYIN_ID_ZH,
@@ -9036,6 +9731,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 695 */
         text        : "zhuen",
+        bopomofo    : "",
         sheng       : "zh",
         yun         : "un",
         sheng_id    : PINYIN_ID_ZH,
@@ -9049,6 +9745,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 696 */
         text        : "zhui",
+        bopomofo    : "ㄓㄨㄟ",
         sheng       : "zh",
         yun         : "ui",
         sheng_id    : PINYIN_ID_ZH,
@@ -9062,6 +9759,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 697 */
         text        : "zhun",
+        bopomofo    : "ㄓㄨㄣ",
         sheng       : "zh",
         yun         : "un",
         sheng_id    : PINYIN_ID_ZH,
@@ -9075,6 +9773,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 698 */
         text        : "zhuo",
+        bopomofo    : "ㄓㄨㄛ",
         sheng       : "zh",
         yun         : "uo",
         sheng_id    : PINYIN_ID_ZH,
@@ -9088,6 +9787,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 699 */
         text        : "zi",
+        bopomofo    : "ㄗ",
         sheng       : "z",
         yun         : "i",
         sheng_id    : PINYIN_ID_Z,
@@ -9101,6 +9801,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 700 */
         text        : "zogn",
+        bopomofo    : "",
         sheng       : "z",
         yun         : "ong",
         sheng_id    : PINYIN_ID_Z,
@@ -9114,6 +9815,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 701 */
         text        : "zomg",
+        bopomofo    : "",
         sheng       : "z",
         yun         : "ong",
         sheng_id    : PINYIN_ID_Z,
@@ -9127,6 +9829,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 702 */
         text        : "zong",
+        bopomofo    : "ㄗㄨㄥ",
         sheng       : "z",
         yun         : "ong",
         sheng_id    : PINYIN_ID_Z,
@@ -9140,6 +9843,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 703 */
         text        : "zou",
+        bopomofo    : "ㄗㄡ",
         sheng       : "z",
         yun         : "ou",
         sheng_id    : PINYIN_ID_Z,
@@ -9153,6 +9857,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 704 */
         text        : "zu",
+        bopomofo    : "ㄗㄨ",
         sheng       : "z",
         yun         : "u",
         sheng_id    : PINYIN_ID_Z,
@@ -9166,6 +9871,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 705 */
         text        : "zua",
+        bopomofo    : "",
         sheng       : "z",
         yun         : "ua",
         sheng_id    : PINYIN_ID_Z,
@@ -9179,6 +9885,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 706 */
         text        : "zuai",
+        bopomofo    : "",
         sheng       : "z",
         yun         : "uai",
         sheng_id    : PINYIN_ID_Z,
@@ -9192,6 +9899,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 707 */
         text        : "zuan",
+        bopomofo    : "ㄗㄨㄢ",
         sheng       : "z",
         yun         : "uan",
         sheng_id    : PINYIN_ID_Z,
@@ -9205,6 +9913,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 708 */
         text        : "zuang",
+        bopomofo    : "",
         sheng       : "z",
         yun         : "uang",
         sheng_id    : PINYIN_ID_Z,
@@ -9218,6 +9927,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 709 */
         text        : "zuei",
+        bopomofo    : "",
         sheng       : "z",
         yun         : "ui",
         sheng_id    : PINYIN_ID_Z,
@@ -9231,6 +9941,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 710 */
         text        : "zuen",
+        bopomofo    : "",
         sheng       : "z",
         yun         : "un",
         sheng_id    : PINYIN_ID_Z,
@@ -9244,6 +9955,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 711 */
         text        : "zui",
+        bopomofo    : "ㄗㄨㄟ",
         sheng       : "z",
         yun         : "ui",
         sheng_id    : PINYIN_ID_Z,
@@ -9257,6 +9969,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 712 */
         text        : "zun",
+        bopomofo    : "ㄗㄨㄣ",
         sheng       : "z",
         yun         : "un",
         sheng_id    : PINYIN_ID_Z,
@@ -9270,6 +9983,7 @@ static const Pinyin pinyin_table[] = {
     },
     {  /* 713 */
         text        : "zuo",
+        bopomofo    : "ㄗㄨㄛ",
         sheng       : "z",
         yun         : "uo",
         sheng_id    : PINYIN_ID_Z,
@@ -9283,6 +9997,434 @@ static const Pinyin pinyin_table[] = {
     },
 };
 
+static const Pinyin * bopomofo_table[] = {
+    &pinyin_table[7],    // "ㄅ" => "b"
+    &pinyin_table[8],    // "ㄅㄚ" => "ba"
+    &pinyin_table[29],   // "ㄅㄛ" => "bo"
+    &pinyin_table[10],   // "ㄅㄞ" => "bai"
+    &pinyin_table[16],   // "ㄅㄟ" => "bei"
+    &pinyin_table[14],   // "ㄅㄠ" => "bao"
+    &pinyin_table[12],   // "ㄅㄢ" => "ban"
+    &pinyin_table[18],   // "ㄅㄣ" => "ben"
+    &pinyin_table[13],   // "ㄅㄤ" => "bang"
+    &pinyin_table[19],   // "ㄅㄥ" => "beng"
+    &pinyin_table[20],   // "ㄅㄧ" => "bi"
+    &pinyin_table[24],   // "ㄅㄧㄝ" => "bie"
+    &pinyin_table[23],   // "ㄅㄧㄠ" => "biao"
+    &pinyin_table[21],   // "ㄅㄧㄢ" => "bian"
+    &pinyin_table[27],   // "ㄅㄧㄣ" => "bin"
+    &pinyin_table[28],   // "ㄅㄧㄥ" => "bing"
+    &pinyin_table[30],   // "ㄅㄨ" => "bu"
+    &pinyin_table[393],  // "ㄆ" => "p"
+    &pinyin_table[394],  // "ㄆㄚ" => "pa"
+    &pinyin_table[415],  // "ㄆㄛ" => "po"
+    &pinyin_table[396],  // "ㄆㄞ" => "pai"
+    &pinyin_table[402],  // "ㄆㄟ" => "pei"
+    &pinyin_table[400],  // "ㄆㄠ" => "pao"
+    &pinyin_table[416],  // "ㄆㄡ" => "pou"
+    &pinyin_table[398],  // "ㄆㄢ" => "pan"
+    &pinyin_table[404],  // "ㄆㄣ" => "pen"
+    &pinyin_table[399],  // "ㄆㄤ" => "pang"
+    &pinyin_table[405],  // "ㄆㄥ" => "peng"
+    &pinyin_table[406],  // "ㄆㄧ" => "pi"
+    &pinyin_table[410],  // "ㄆㄧㄝ" => "pie"
+    &pinyin_table[409],  // "ㄆㄧㄠ" => "piao"
+    &pinyin_table[407],  // "ㄆㄧㄢ" => "pian"
+    &pinyin_table[413],  // "ㄆㄧㄣ" => "pin"
+    &pinyin_table[414],  // "ㄆㄧㄥ" => "ping"
+    &pinyin_table[417],  // "ㄆㄨ" => "pu"
+    &pinyin_table[321],  // "ㄇ" => "m"
+    &pinyin_table[322],  // "ㄇㄚ" => "ma"
+    &pinyin_table[346],  // "ㄇㄛ" => "mo"
+    &pinyin_table[329],  // "ㄇㄜ" => "me"
+    &pinyin_table[324],  // "ㄇㄞ" => "mai"
+    &pinyin_table[331],  // "ㄇㄟ" => "mei"
+    &pinyin_table[328],  // "ㄇㄠ" => "mao"
+    &pinyin_table[347],  // "ㄇㄡ" => "mou"
+    &pinyin_table[326],  // "ㄇㄢ" => "man"
+    &pinyin_table[333],  // "ㄇㄣ" => "men"
+    &pinyin_table[327],  // "ㄇㄤ" => "mang"
+    &pinyin_table[334],  // "ㄇㄥ" => "meng"
+    &pinyin_table[335],  // "ㄇㄧ" => "mi"
+    &pinyin_table[339],  // "ㄇㄧㄝ" => "mie"
+    &pinyin_table[338],  // "ㄇㄧㄠ" => "miao"
+    &pinyin_table[345],  // "ㄇㄧㄡ" => "miu"
+    &pinyin_table[336],  // "ㄇㄧㄢ" => "mian"
+    &pinyin_table[342],  // "ㄇㄧㄣ" => "min"
+    &pinyin_table[343],  // "ㄇㄧㄥ" => "ming"
+    &pinyin_table[348],  // "ㄇㄨ" => "mu"
+    &pinyin_table[129],  // "ㄈ" => "f"
+    &pinyin_table[130],  // "ㄈㄚ" => "fa"
+    &pinyin_table[143],  // "ㄈㄛ" => "fo"
+    &pinyin_table[137],  // "ㄈㄜ" => "fe"
+    &pinyin_table[139],  // "ㄈㄟ" => "fei"
+    &pinyin_table[145],  // "ㄈㄡ" => "fou"
+    &pinyin_table[134],  // "ㄈㄢ" => "fan"
+    &pinyin_table[141],  // "ㄈㄣ" => "fen"
+    &pinyin_table[135],  // "ㄈㄤ" => "fang"
+    &pinyin_table[142],  // "ㄈㄥ" => "feng"
+    &pinyin_table[146],  // "ㄈㄨ" => "fu"
+    &pinyin_table[87],   // "ㄉ" => "d"
+    &pinyin_table[88],   // "ㄉㄚ" => "da"
+    &pinyin_table[95],   // "ㄉㄜ" => "de"
+    &pinyin_table[90],   // "ㄉㄞ" => "dai"
+    &pinyin_table[97],   // "ㄉㄟ" => "dei"
+    &pinyin_table[94],   // "ㄉㄠ" => "dao"
+    &pinyin_table[116],  // "ㄉㄡ" => "dou"
+    &pinyin_table[92],   // "ㄉㄢ" => "dan"
+    &pinyin_table[99],   // "ㄉㄣ" => "den"
+    &pinyin_table[93],   // "ㄉㄤ" => "dang"
+    &pinyin_table[100],  // "ㄉㄥ" => "deng"
+    &pinyin_table[101],  // "ㄉㄧ" => "di"
+    &pinyin_table[102],  // "ㄉㄧㄚ" => "dia"
+    &pinyin_table[106],  // "ㄉㄧㄝ" => "die"
+    &pinyin_table[105],  // "ㄉㄧㄠ" => "diao"
+    &pinyin_table[112],  // "ㄉㄧㄡ" => "diu"
+    &pinyin_table[103],  // "ㄉㄧㄢ" => "dian"
+    &pinyin_table[109],  // "ㄉㄧㄣ" => "din"
+    &pinyin_table[110],  // "ㄉㄧㄥ" => "ding"
+    &pinyin_table[117],  // "ㄉㄨ" => "du"
+    &pinyin_table[124],  // "ㄉㄨㄛ" => "duo"
+    &pinyin_table[122],  // "ㄉㄨㄟ" => "dui"
+    &pinyin_table[118],  // "ㄉㄨㄢ" => "duan"
+    &pinyin_table[123],  // "ㄉㄨㄣ" => "dun"
+    &pinyin_table[115],  // "ㄉㄨㄥ" => "dong"
+    &pinyin_table[546],  // "ㄊ" => "t"
+    &pinyin_table[547],  // "ㄊㄚ" => "ta"
+    &pinyin_table[554],  // "ㄊㄜ" => "te"
+    &pinyin_table[549],  // "ㄊㄞ" => "tai"
+    &pinyin_table[553],  // "ㄊㄠ" => "tao"
+    &pinyin_table[571],  // "ㄊㄡ" => "tou"
+    &pinyin_table[551],  // "ㄊㄢ" => "tan"
+    &pinyin_table[552],  // "ㄊㄤ" => "tang"
+    &pinyin_table[558],  // "ㄊㄥ" => "teng"
+    &pinyin_table[559],  // "ㄊㄧ" => "ti"
+    &pinyin_table[563],  // "ㄊㄧㄝ" => "tie"
+    &pinyin_table[562],  // "ㄊㄧㄠ" => "tiao"
+    &pinyin_table[560],  // "ㄊㄧㄢ" => "tian"
+    &pinyin_table[567],  // "ㄊㄧㄥ" => "ting"
+    &pinyin_table[572],  // "ㄊㄨ" => "tu"
+    &pinyin_table[579],  // "ㄊㄨㄛ" => "tuo"
+    &pinyin_table[577],  // "ㄊㄨㄟ" => "tui"
+    &pinyin_table[573],  // "ㄊㄨㄢ" => "tuan"
+    &pinyin_table[578],  // "ㄊㄨㄣ" => "tun"
+    &pinyin_table[570],  // "ㄊㄨㄥ" => "tong"
+    &pinyin_table[349],  // "ㄋ" => "n"
+    &pinyin_table[350],  // "ㄋㄚ" => "na"
+    &pinyin_table[357],  // "ㄋㄜ" => "ne"
+    &pinyin_table[352],  // "ㄋㄞ" => "nai"
+    &pinyin_table[359],  // "ㄋㄟ" => "nei"
+    &pinyin_table[356],  // "ㄋㄠ" => "nao"
+    &pinyin_table[381],  // "ㄋㄡ" => "nou"
+    &pinyin_table[354],  // "ㄋㄢ" => "nan"
+    &pinyin_table[361],  // "ㄋㄣ" => "nen"
+    &pinyin_table[355],  // "ㄋㄤ" => "nang"
+    &pinyin_table[362],  // "ㄋㄥ" => "neng"
+    &pinyin_table[363],  // "ㄋㄧ" => "ni"
+    &pinyin_table[364],  // "ㄋㄧㄚ" => "nia"
+    &pinyin_table[370],  // "ㄋㄧㄝ" => "nie"
+    &pinyin_table[369],  // "ㄋㄧㄠ" => "niao"
+    &pinyin_table[376],  // "ㄋㄧㄡ" => "niu"
+    &pinyin_table[367],  // "ㄋㄧㄢ" => "nian"
+    &pinyin_table[373],  // "ㄋㄧㄣ" => "nin"
+    &pinyin_table[368],  // "ㄋㄧㄤ" => "niang"
+    &pinyin_table[374],  // "ㄋㄧㄥ" => "ning"
+    &pinyin_table[382],  // "ㄋㄨ" => "nu"
+    &pinyin_table[388],  // "ㄋㄨㄛ" => "nuo"
+    &pinyin_table[383],  // "ㄋㄨㄢ" => "nuan"
+    &pinyin_table[387],  // "ㄋㄨㄣ" => "nun"
+    &pinyin_table[380],  // "ㄋㄨㄥ" => "nong"
+    &pinyin_table[389],  // "ㄋㄩ" => "nv"
+    &pinyin_table[390],  // "ㄋㄩㄝ" => "nve"
+    &pinyin_table[277],  // "ㄌ" => "l"
+    &pinyin_table[278],  // "ㄌㄚ" => "la"
+    &pinyin_table[305],  // "ㄌㄛ" => "lo"
+    &pinyin_table[285],  // "ㄌㄜ" => "le"
+    &pinyin_table[280],  // "ㄌㄞ" => "lai"
+    &pinyin_table[287],  // "ㄌㄟ" => "lei"
+    &pinyin_table[284],  // "ㄌㄠ" => "lao"
+    &pinyin_table[309],  // "ㄌㄡ" => "lou"
+    &pinyin_table[282],  // "ㄌㄢ" => "lan"
+    &pinyin_table[289],  // "ㄌㄣ" => "len"
+    &pinyin_table[283],  // "ㄌㄤ" => "lang"
+    &pinyin_table[290],  // "ㄌㄥ" => "leng"
+    &pinyin_table[291],  // "ㄌㄧ" => "li"
+    &pinyin_table[292],  // "ㄌㄧㄚ" => "lia"
+    &pinyin_table[298],  // "ㄌㄧㄝ" => "lie"
+    &pinyin_table[297],  // "ㄌㄧㄠ" => "liao"
+    &pinyin_table[304],  // "ㄌㄧㄡ" => "liu"
+    &pinyin_table[295],  // "ㄌㄧㄢ" => "lian"
+    &pinyin_table[301],  // "ㄌㄧㄣ" => "lin"
+    &pinyin_table[296],  // "ㄌㄧㄤ" => "liang"
+    &pinyin_table[302],  // "ㄌㄧㄥ" => "ling"
+    &pinyin_table[310],  // "ㄌㄨ" => "lu"
+    &pinyin_table[318],  // "ㄌㄨㄛ" => "luo"
+    &pinyin_table[311],  // "ㄌㄨㄢ" => "luan"
+    &pinyin_table[317],  // "ㄌㄨㄣ" => "lun"
+    &pinyin_table[308],  // "ㄌㄨㄥ" => "long"
+    &pinyin_table[319],  // "ㄌㄩ" => "lv"
+    &pinyin_table[320],  // "ㄌㄩㄝ" => "lve"
+    &pinyin_table[156],  // "ㄍ" => "g"
+    &pinyin_table[157],  // "ㄍㄚ" => "ga"
+    &pinyin_table[164],  // "ㄍㄜ" => "ge"
+    &pinyin_table[159],  // "ㄍㄞ" => "gai"
+    &pinyin_table[166],  // "ㄍㄟ" => "gei"
+    &pinyin_table[163],  // "ㄍㄠ" => "gao"
+    &pinyin_table[173],  // "ㄍㄡ" => "gou"
+    &pinyin_table[161],  // "ㄍㄢ" => "gan"
+    &pinyin_table[168],  // "ㄍㄣ" => "gen"
+    &pinyin_table[162],  // "ㄍㄤ" => "gang"
+    &pinyin_table[169],  // "ㄍㄥ" => "geng"
+    &pinyin_table[174],  // "ㄍㄨ" => "gu"
+    &pinyin_table[175],  // "ㄍㄨㄚ" => "gua"
+    &pinyin_table[185],  // "ㄍㄨㄛ" => "guo"
+    &pinyin_table[177],  // "ㄍㄨㄞ" => "guai"
+    &pinyin_table[183],  // "ㄍㄨㄟ" => "gui"
+    &pinyin_table[179],  // "ㄍㄨㄢ" => "guan"
+    &pinyin_table[184],  // "ㄍㄨㄣ" => "gun"
+    &pinyin_table[180],  // "ㄍㄨㄤ" => "guang"
+    &pinyin_table[172],  // "ㄍㄨㄥ" => "gong"
+    &pinyin_table[247],  // "ㄎ" => "k"
+    &pinyin_table[248],  // "ㄎㄚ" => "ka"
+    &pinyin_table[255],  // "ㄎㄜ" => "ke"
+    &pinyin_table[250],  // "ㄎㄞ" => "kai"
+    &pinyin_table[257],  // "ㄎㄟ" => "kei"
+    &pinyin_table[254],  // "ㄎㄠ" => "kao"
+    &pinyin_table[264],  // "ㄎㄡ" => "kou"
+    &pinyin_table[252],  // "ㄎㄢ" => "kan"
+    &pinyin_table[259],  // "ㄎㄣ" => "ken"
+    &pinyin_table[253],  // "ㄎㄤ" => "kang"
+    &pinyin_table[260],  // "ㄎㄥ" => "keng"
+    &pinyin_table[265],  // "ㄎㄨ" => "ku"
+    &pinyin_table[266],  // "ㄎㄨㄚ" => "kua"
+    &pinyin_table[276],  // "ㄎㄨㄛ" => "kuo"
+    &pinyin_table[268],  // "ㄎㄨㄞ" => "kuai"
+    &pinyin_table[274],  // "ㄎㄨㄟ" => "kui"
+    &pinyin_table[270],  // "ㄎㄨㄢ" => "kuan"
+    &pinyin_table[275],  // "ㄎㄨㄣ" => "kun"
+    &pinyin_table[271],  // "ㄎㄨㄤ" => "kuang"
+    &pinyin_table[263],  // "ㄎㄨㄥ" => "kong"
+    &pinyin_table[186],  // "ㄏ" => "h"
+    &pinyin_table[187],  // "ㄏㄚ" => "ha"
+    &pinyin_table[194],  // "ㄏㄜ" => "he"
+    &pinyin_table[189],  // "ㄏㄞ" => "hai"
+    &pinyin_table[196],  // "ㄏㄟ" => "hei"
+    &pinyin_table[193],  // "ㄏㄠ" => "hao"
+    &pinyin_table[204],  // "ㄏㄡ" => "hou"
+    &pinyin_table[191],  // "ㄏㄢ" => "han"
+    &pinyin_table[198],  // "ㄏㄣ" => "hen"
+    &pinyin_table[192],  // "ㄏㄤ" => "hang"
+    &pinyin_table[199],  // "ㄏㄥ" => "heng"
+    &pinyin_table[205],  // "ㄏㄨ" => "hu"
+    &pinyin_table[206],  // "ㄏㄨㄚ" => "hua"
+    &pinyin_table[216],  // "ㄏㄨㄛ" => "huo"
+    &pinyin_table[208],  // "ㄏㄨㄞ" => "huai"
+    &pinyin_table[214],  // "ㄏㄨㄟ" => "hui"
+    &pinyin_table[210],  // "ㄏㄨㄢ" => "huan"
+    &pinyin_table[215],  // "ㄏㄨㄣ" => "hun"
+    &pinyin_table[211],  // "ㄏㄨㄤ" => "huang"
+    &pinyin_table[203],  // "ㄏㄨㄥ" => "hong"
+    &pinyin_table[217],  // "ㄐ" => "j"
+    &pinyin_table[218],  // "ㄐㄧ" => "ji"
+    &pinyin_table[219],  // "ㄐㄧㄚ" => "jia"
+    &pinyin_table[225],  // "ㄐㄧㄝ" => "jie"
+    &pinyin_table[224],  // "ㄐㄧㄠ" => "jiao"
+    &pinyin_table[234],  // "ㄐㄧㄡ" => "jiu"
+    &pinyin_table[222],  // "ㄐㄧㄢ" => "jian"
+    &pinyin_table[228],  // "ㄐㄧㄣ" => "jin"
+    &pinyin_table[223],  // "ㄐㄧㄤ" => "jiang"
+    &pinyin_table[229],  // "ㄐㄧㄥ" => "jing"
+    &pinyin_table[235],  // "ㄐㄩ" => "ju"
+    &pinyin_table[238],  // "ㄐㄩㄝ" => "jue"
+    &pinyin_table[236],  // "ㄐㄩㄢ" => "juan"
+    &pinyin_table[240],  // "ㄐㄩㄣ" => "jun"
+    &pinyin_table[232],  // "ㄐㄩㄥ" => "jiong"
+    &pinyin_table[418],  // "ㄑ" => "q"
+    &pinyin_table[419],  // "ㄑㄧ" => "qi"
+    &pinyin_table[420],  // "ㄑㄧㄚ" => "qia"
+    &pinyin_table[426],  // "ㄑㄧㄝ" => "qie"
+    &pinyin_table[425],  // "ㄑㄧㄠ" => "qiao"
+    &pinyin_table[435],  // "ㄑㄧㄡ" => "qiu"
+    &pinyin_table[423],  // "ㄑㄧㄢ" => "qian"
+    &pinyin_table[429],  // "ㄑㄧㄣ" => "qin"
+    &pinyin_table[424],  // "ㄑㄧㄤ" => "qiang"
+    &pinyin_table[430],  // "ㄑㄧㄥ" => "qing"
+    &pinyin_table[436],  // "ㄑㄩ" => "qu"
+    &pinyin_table[439],  // "ㄑㄩㄝ" => "que"
+    &pinyin_table[437],  // "ㄑㄩㄢ" => "quan"
+    &pinyin_table[441],  // "ㄑㄩㄣ" => "qun"
+    &pinyin_table[433],  // "ㄑㄩㄥ" => "qiong"
+    &pinyin_table[594],  // "ㄒ" => "x"
+    &pinyin_table[595],  // "ㄒㄧ" => "xi"
+    &pinyin_table[596],  // "ㄒㄧㄚ" => "xia"
+    &pinyin_table[602],  // "ㄒㄧㄝ" => "xie"
+    &pinyin_table[601],  // "ㄒㄧㄠ" => "xiao"
+    &pinyin_table[611],  // "ㄒㄧㄡ" => "xiu"
+    &pinyin_table[599],  // "ㄒㄧㄢ" => "xian"
+    &pinyin_table[605],  // "ㄒㄧㄣ" => "xin"
+    &pinyin_table[600],  // "ㄒㄧㄤ" => "xiang"
+    &pinyin_table[606],  // "ㄒㄧㄥ" => "xing"
+    &pinyin_table[612],  // "ㄒㄩ" => "xu"
+    &pinyin_table[615],  // "ㄒㄩㄝ" => "xue"
+    &pinyin_table[613],  // "ㄒㄩㄢ" => "xuan"
+    &pinyin_table[617],  // "ㄒㄩㄣ" => "xun"
+    &pinyin_table[609],  // "ㄒㄩㄥ" => "xiong"
+    &pinyin_table[682],  // "ㄓ" => "zhi"
+    &pinyin_table[669],  // "ㄓㄚ" => "zha"
+    &pinyin_table[676],  // "ㄓㄜ" => "zhe"
+    &pinyin_table[671],  // "ㄓㄞ" => "zhai"
+    &pinyin_table[678],  // "ㄓㄟ" => "zhei"
+    &pinyin_table[675],  // "ㄓㄠ" => "zhao"
+    &pinyin_table[686],  // "ㄓㄡ" => "zhou"
+    &pinyin_table[673],  // "ㄓㄢ" => "zhan"
+    &pinyin_table[680],  // "ㄓㄣ" => "zhen"
+    &pinyin_table[674],  // "ㄓㄤ" => "zhang"
+    &pinyin_table[681],  // "ㄓㄥ" => "zheng"
+    &pinyin_table[687],  // "ㄓㄨ" => "zhu"
+    &pinyin_table[688],  // "ㄓㄨㄚ" => "zhua"
+    &pinyin_table[698],  // "ㄓㄨㄛ" => "zhuo"
+    &pinyin_table[690],  // "ㄓㄨㄞ" => "zhuai"
+    &pinyin_table[696],  // "ㄓㄨㄟ" => "zhui"
+    &pinyin_table[692],  // "ㄓㄨㄢ" => "zhuan"
+    &pinyin_table[697],  // "ㄓㄨㄣ" => "zhun"
+    &pinyin_table[693],  // "ㄓㄨㄤ" => "zhuang"
+    &pinyin_table[685],  // "ㄓㄨㄥ" => "zhong"
+    &pinyin_table[57],   // "ㄔ" => "chi"
+    &pinyin_table[45],   // "ㄔㄚ" => "cha"
+    &pinyin_table[52],   // "ㄔㄜ" => "che"
+    &pinyin_table[47],   // "ㄔㄞ" => "chai"
+    &pinyin_table[51],   // "ㄔㄠ" => "chao"
+    &pinyin_table[61],   // "ㄔㄡ" => "chou"
+    &pinyin_table[49],   // "ㄔㄢ" => "chan"
+    &pinyin_table[55],   // "ㄔㄣ" => "chen"
+    &pinyin_table[50],   // "ㄔㄤ" => "chang"
+    &pinyin_table[56],   // "ㄔㄥ" => "cheng"
+    &pinyin_table[62],   // "ㄔㄨ" => "chu"
+    &pinyin_table[72],   // "ㄔㄨㄛ" => "chuo"
+    &pinyin_table[64],   // "ㄔㄨㄞ" => "chuai"
+    &pinyin_table[70],   // "ㄔㄨㄟ" => "chui"
+    &pinyin_table[66],   // "ㄔㄨㄢ" => "chuan"
+    &pinyin_table[71],   // "ㄔㄨㄣ" => "chun"
+    &pinyin_table[67],   // "ㄔㄨㄤ" => "chuang"
+    &pinyin_table[60],   // "ㄔㄨㄥ" => "chong"
+    &pinyin_table[516],  // "ㄕ" => "shi"
+    &pinyin_table[503],  // "ㄕㄚ" => "sha"
+    &pinyin_table[510],  // "ㄕㄜ" => "she"
+    &pinyin_table[505],  // "ㄕㄞ" => "shai"
+    &pinyin_table[512],  // "ㄕㄟ" => "shei"
+    &pinyin_table[509],  // "ㄕㄠ" => "shao"
+    &pinyin_table[518],  // "ㄕㄡ" => "shou"
+    &pinyin_table[507],  // "ㄕㄢ" => "shan"
+    &pinyin_table[514],  // "ㄕㄣ" => "shen"
+    &pinyin_table[508],  // "ㄕㄤ" => "shang"
+    &pinyin_table[515],  // "ㄕㄥ" => "sheng"
+    &pinyin_table[519],  // "ㄕㄨ" => "shu"
+    &pinyin_table[520],  // "ㄕㄨㄚ" => "shua"
+    &pinyin_table[530],  // "ㄕㄨㄛ" => "shuo"
+    &pinyin_table[522],  // "ㄕㄨㄞ" => "shuai"
+    &pinyin_table[528],  // "ㄕㄨㄟ" => "shui"
+    &pinyin_table[524],  // "ㄕㄨㄢ" => "shuan"
+    &pinyin_table[529],  // "ㄕㄨㄣ" => "shun"
+    &pinyin_table[525],  // "ㄕㄨㄤ" => "shuang"
+    &pinyin_table[462],  // "ㄖ" => "ri"
+    &pinyin_table[456],  // "ㄖㄜ" => "re"
+    &pinyin_table[455],  // "ㄖㄠ" => "rao"
+    &pinyin_table[476],  // "ㄖㄡ" => "rou"
+    &pinyin_table[453],  // "ㄖㄢ" => "ran"
+    &pinyin_table[460],  // "ㄖㄣ" => "ren"
+    &pinyin_table[454],  // "ㄖㄤ" => "rang"
+    &pinyin_table[461],  // "ㄖㄥ" => "reng"
+    &pinyin_table[477],  // "ㄖㄨ" => "ru"
+    &pinyin_table[485],  // "ㄖㄨㄛ" => "ruo"
+    &pinyin_table[483],  // "ㄖㄨㄟ" => "rui"
+    &pinyin_table[478],  // "ㄖㄨㄢ" => "ruan"
+    &pinyin_table[484],  // "ㄖㄨㄣ" => "run"
+    &pinyin_table[475],  // "ㄖㄨㄥ" => "rong"
+    &pinyin_table[699],  // "ㄗ" => "zi"
+    &pinyin_table[655],  // "ㄗㄚ" => "za"
+    &pinyin_table[662],  // "ㄗㄜ" => "ze"
+    &pinyin_table[657],  // "ㄗㄞ" => "zai"
+    &pinyin_table[664],  // "ㄗㄟ" => "zei"
+    &pinyin_table[661],  // "ㄗㄠ" => "zao"
+    &pinyin_table[703],  // "ㄗㄡ" => "zou"
+    &pinyin_table[659],  // "ㄗㄢ" => "zan"
+    &pinyin_table[666],  // "ㄗㄣ" => "zen"
+    &pinyin_table[660],  // "ㄗㄤ" => "zang"
+    &pinyin_table[667],  // "ㄗㄥ" => "zeng"
+    &pinyin_table[704],  // "ㄗㄨ" => "zu"
+    &pinyin_table[713],  // "ㄗㄨㄛ" => "zuo"
+    &pinyin_table[711],  // "ㄗㄨㄟ" => "zui"
+    &pinyin_table[707],  // "ㄗㄨㄢ" => "zuan"
+    &pinyin_table[712],  // "ㄗㄨㄣ" => "zun"
+    &pinyin_table[702],  // "ㄗㄨㄥ" => "zong"
+    &pinyin_table[73],   // "ㄘ" => "ci"
+    &pinyin_table[32],   // "ㄘㄚ" => "ca"
+    &pinyin_table[39],   // "ㄘㄜ" => "ce"
+    &pinyin_table[34],   // "ㄘㄞ" => "cai"
+    &pinyin_table[38],   // "ㄘㄠ" => "cao"
+    &pinyin_table[77],   // "ㄘㄡ" => "cou"
+    &pinyin_table[36],   // "ㄘㄢ" => "can"
+    &pinyin_table[42],   // "ㄘㄣ" => "cen"
+    &pinyin_table[37],   // "ㄘㄤ" => "cang"
+    &pinyin_table[43],   // "ㄘㄥ" => "ceng"
+    &pinyin_table[78],   // "ㄘㄨ" => "cu"
+    &pinyin_table[86],   // "ㄘㄨㄛ" => "cuo"
+    &pinyin_table[84],   // "ㄘㄨㄟ" => "cui"
+    &pinyin_table[80],   // "ㄘㄨㄢ" => "cuan"
+    &pinyin_table[85],   // "ㄘㄨㄣ" => "cun"
+    &pinyin_table[76],   // "ㄘㄨㄥ" => "cong"
+    &pinyin_table[531],  // "ㄙ" => "si"
+    &pinyin_table[489],  // "ㄙㄚ" => "sa"
+    &pinyin_table[496],  // "ㄙㄜ" => "se"
+    &pinyin_table[491],  // "ㄙㄞ" => "sai"
+    &pinyin_table[495],  // "ㄙㄠ" => "sao"
+    &pinyin_table[535],  // "ㄙㄡ" => "sou"
+    &pinyin_table[493],  // "ㄙㄢ" => "san"
+    &pinyin_table[500],  // "ㄙㄣ" => "sen"
+    &pinyin_table[494],  // "ㄙㄤ" => "sang"
+    &pinyin_table[501],  // "ㄙㄥ" => "seng"
+    &pinyin_table[536],  // "ㄙㄨ" => "su"
+    &pinyin_table[545],  // "ㄙㄨㄛ" => "suo"
+    &pinyin_table[543],  // "ㄙㄨㄟ" => "sui"
+    &pinyin_table[539],  // "ㄙㄨㄢ" => "suan"
+    &pinyin_table[544],  // "ㄙㄨㄣ" => "sun"
+    &pinyin_table[534],  // "ㄙㄨㄥ" => "song"
+    &pinyin_table[0],    // "ㄚ" => "a"
+    &pinyin_table[391],  // "ㄛ" => "o"
+    &pinyin_table[125],  // "ㄜ" => "e"
+    &pinyin_table[2],    // "ㄞ" => "ai"
+    &pinyin_table[126],  // "ㄟ" => "ei"
+    &pinyin_table[6],    // "ㄠ" => "ao"
+    &pinyin_table[392],  // "ㄡ" => "ou"
+    &pinyin_table[4],    // "ㄢ" => "an"
+    &pinyin_table[127],  // "ㄣ" => "en"
+    &pinyin_table[5],    // "ㄤ" => "ang"
+    &pinyin_table[128],  // "ㄦ" => "er"
+    &pinyin_table[632],  // "ㄧ" => "yi"
+    &pinyin_table[625],  // "ㄧㄚ" => "ya"
+    &pinyin_table[637],  // "ㄧㄛ" => "yo"
+    &pinyin_table[631],  // "ㄧㄝ" => "ye"
+    &pinyin_table[630],  // "ㄧㄠ" => "yao"
+    &pinyin_table[641],  // "ㄧㄡ" => "you"
+    &pinyin_table[628],  // "ㄧㄢ" => "yan"
+    &pinyin_table[635],  // "ㄧㄣ" => "yin"
+    &pinyin_table[629],  // "ㄧㄤ" => "yang"
+    &pinyin_table[636],  // "ㄧㄥ" => "ying"
+    &pinyin_table[593],  // "ㄨ" => "wu"
+    &pinyin_table[581],  // "ㄨㄚ" => "wa"
+    &pinyin_table[592],  // "ㄨㄛ" => "wo"
+    &pinyin_table[583],  // "ㄨㄞ" => "wai"
+    &pinyin_table[588],  // "ㄨㄟ" => "wei"
+    &pinyin_table[585],  // "ㄨㄢ" => "wan"
+    &pinyin_table[590],  // "ㄨㄣ" => "wen"
+    &pinyin_table[586],  // "ㄨㄤ" => "wang"
+    &pinyin_table[591],  // "ㄨㄥ" => "weng"
+    &pinyin_table[642],  // "ㄩ" => "yu"
+    &pinyin_table[645],  // "ㄩㄝ" => "yue"
+    &pinyin_table[643],  // "ㄩㄢ" => "yuan"
+    &pinyin_table[647],  // "ㄩㄣ" => "yun"
+    &pinyin_table[640],  // "ㄩㄥ" => "yong"
+};
 static const Pinyin *special_table[][4] = {
     { &pinyin_table[4],    &pinyin_table[0],    &pinyin_table[0],    &pinyin_table[350],  }, /* an a => a na */
     { &pinyin_table[4],    &pinyin_table[2],    &pinyin_table[0],    &pinyin_table[352],  }, /* an ai => a nai */
index b4b47f3..c8cd928 100644 (file)
@@ -107,6 +107,7 @@ namespace PY {
 
 struct Pinyin {
     const gchar *text;
+    const gchar *bopomofo;
     const gchar *sheng;
     const gchar *yun;
     const gchar  sheng_id;