# HG changeset patch # User Zoe Hong # Date 1433343249 -7200 # Node ID e681d693240e0f67eaf2105b1692bc7efb34e418 # Parent 61593b0472896e29bd9f0e6c5ece74a7330b72a4 new: generated regex to SmartRegex diff -r 61593b047289 -r e681d693240e .DS_Store Binary file .DS_Store has changed diff -r 61593b047289 -r e681d693240e controllers/extractapp.php --- a/controllers/extractapp.php Wed Jun 03 10:49:00 2015 +0200 +++ b/controllers/extractapp.php Wed Jun 03 16:54:09 2015 +0200 @@ -162,6 +162,8 @@ if (isset($this->postdata['func'])) { $func = $this->postdata['func']; + } else { + $func = ""; } switch ($func) { case 'exportFromExtractionInterface': @@ -187,6 +189,8 @@ $viewmodel = $this->viewmodel; if (isset($this->postdata['func'])) { $func = $this->postdata['func']; + } else { + $func = ""; } switch ($func) { case 'AddNewList': @@ -211,6 +215,8 @@ $viewmodel = $this->viewmodel; if (isset($this->postdata['func'])) { $func = $this->postdata['func']; + } else { + $func = ""; } switch ($func) { case 'NewTagElement': @@ -238,6 +244,8 @@ $viewmodel = $this->viewmodel; if (isset($this->postdata['func'])) { $func = $this->postdata['func']; + } else { + $func = ""; } switch ($func) { case 'Update': diff -r 61593b047289 -r e681d693240e css/taggingtext.css --- a/css/taggingtext.css Wed Jun 03 10:49:00 2015 +0200 +++ b/css/taggingtext.css Wed Jun 03 16:54:09 2015 +0200 @@ -96,14 +96,25 @@ padding: 5px; } -.popup-regex { +#smartRegexPopUpDiv{ left: -450px; width: 450px; height: 300px; top: 120px; z-index: 2; + } +#regex_generator { + left: -450px; + width: 450px; + height: 300px; + top: 280px; + z-index: 2; + +} + + .popup-loadregex{ left: -300px; width: 300px; diff -r 61593b047289 -r e681d693240e data/parsing_files/1_2015_03_13_09_57_52.txt --- a/data/parsing_files/1_2015_03_13_09_57_52.txt Wed Jun 03 10:49:00 2015 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ - - -2 - -南陵縣志 -qwer -1999 -333 - - -31 -物產名稱 -product_name -rgb(227, 63, 227) - - -32 - -shu -rgb(143, 14, 143) - - -17 -無意義 -null -rgb(219, 219, 219) - - -34 -物產產地 -product_place -rgb(7, 64, 209) - - -26 -別名 -othername -rgb(141, 212, 224) - - - 【102】 契本工課鈔肆貫 -物産 按淳属嚴郡爲 -〈古揚州之境〉而其物産之見於經 者曰陽鳥攸居而已曰篠簜既敷而已曰厥草惟 夭厥木惟喬而已固今日諸郡縣之所同而非止 嚴陵属縣爲然也謹擇其有資於民生服食噐用 -者載焉 -〈糓〉〈糓〉 秔 -〈糓〉有 -〈糓〉早稻 -〈糓〉晚稻 -〈糓〉紅稻 -〈糓〉白稻 - -〈糯〉〈糯〉有 -〈糯〉秋糯 -〈糯〉晩糯 - - \ No newline at end of file diff -r 61593b047289 -r e681d693240e data/parsing_files/1_2015_03_13_10_01_11.txt --- a/data/parsing_files/1_2015_03_13_10_01_11.txt Wed Jun 03 10:49:00 2015 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ - - -2 - -南陵縣志 -qwer -1999 -333 - - -31 -物產名稱 -product_name -rgb(227, 63, 227) - - -32 - -shu -rgb(143, 14, 143) - - -17 -無意義 -null -rgb(219, 219, 219) - - -34 -物產產地 -product_place -rgb(7, 64, 209) - - -26 -別名 -othername -rgb(141, 212, 224) - - - 【102】 契本工課鈔肆貫 -物産 按淳属嚴郡爲 -〈古揚州之境〉而其物産之見於經 者曰陽鳥攸居而已曰篠簜既敷而已曰厥草惟 夭厥木惟喬而已固今日諸郡縣之所同而非止 嚴陵属縣爲然也謹擇其有資於民生服食噐用 -者載焉 -〈糓〉〈糓〉 秔 -〈糓〉有 -〈糓〉早稻 -〈糓〉晚稻 -〈糓〉紅稻 -〈糓〉白稻 - -〈糯〉〈糯〉有 -〈糯〉秋糯 -〈糯〉晩糯 - - \ No newline at end of file diff -r 61593b047289 -r e681d693240e data/parsing_files/1_2015_03_13_10_01_50.txt --- a/data/parsing_files/1_2015_03_13_10_01_50.txt Wed Jun 03 10:49:00 2015 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ - - -2 - -南陵縣志 -qwer -1999 -333 - - -31 -物產名稱 -product_name -rgb(227, 63, 227) - - -32 - -shu -rgb(143, 14, 143) - - -17 -無意義 -null -rgb(219, 219, 219) - - -34 -物產產地 -product_place -rgb(7, 64, 209) - - -26 -別名 -othername -rgb(141, 212, 224) - - - 【102】 契本工課鈔肆貫 -物産 按淳属嚴郡爲 -〈古揚州之境〉而其物産之見於經 者曰陽鳥攸居而已曰篠簜既敷而已曰厥草惟 夭厥木惟喬而已固今日諸郡縣之所同而非止 嚴陵属縣爲然也謹擇其有資於民生服食噐用 -者載焉 -〈糓〉〈糓〉 秔 -〈糓〉有 -〈糓〉早稻 -〈糓〉晚稻 -〈糓〉紅稻 -〈糓〉白稻 - -〈糯〉〈糯〉有 -〈糯〉秋糯 -〈糯〉晩糯 - - \ No newline at end of file diff -r 61593b047289 -r e681d693240e data/parsing_files/1_2015_03_13_10_02_38.txt --- a/data/parsing_files/1_2015_03_13_10_02_38.txt Wed Jun 03 10:49:00 2015 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ - - -2 - -南陵縣志 -qwer -1999 -333 - - -31 -物產名稱 -product_name -rgb(227, 63, 227) - - -32 - -shu -rgb(143, 14, 143) - - -17 -無意義 -null -rgb(219, 219, 219) - - -34 -物產產地 -product_place -rgb(7, 64, 209) - - -26 -別名 -othername -rgb(141, 212, 224) - - - 【102】 契本工課鈔肆貫 -物産 按淳属嚴郡爲 -〈古揚州之境〉而其物産之見於經 者曰陽鳥攸居而已曰篠簜既敷而已曰厥草惟 夭厥木惟喬而已固今日諸郡縣之所同而非止 嚴陵属縣爲然也謹擇其有資於民生服食噐用 -者載焉 -〈糓〉〈糓〉 秔 -〈糓〉有 -〈糓〉早稻 -〈糓〉晚稻 -〈糓〉紅稻 -〈糓〉白稻 - -〈糯〉〈糯〉有 -〈糯〉秋糯 -〈糯〉晩糯 - - \ No newline at end of file diff -r 61593b047289 -r e681d693240e data/parsing_files/1_2015_03_13_10_02_57.txt --- a/data/parsing_files/1_2015_03_13_10_02_57.txt Wed Jun 03 10:49:00 2015 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ - - -2 - -南陵縣志 -qwer -1999 -333 - - -31 -物產名稱 -product_name -rgb(227, 63, 227) - - -32 - -shu -rgb(143, 14, 143) - - -17 -無意義 -null -rgb(219, 219, 219) - - -34 -物產產地 -product_place -rgb(7, 64, 209) - - -26 -別名 -othername -rgb(141, 212, 224) - - - 【102】 契本工課鈔肆貫 -物産 按淳属嚴郡爲 -〈古揚州之境〉而其物産之見於經 者曰陽鳥攸居而已曰篠簜既敷而已曰厥草惟 夭厥木惟喬而已固今日諸郡縣之所同而非止 嚴陵属縣爲然也謹擇其有資於民生服食噐用 -者載焉 -〈糓〉〈糓〉 秔 -〈糓〉有 -〈糓〉早稻 -〈糓〉晚稻 -〈糓〉紅稻 -〈糓〉白稻 - -〈糯〉〈糯〉有 -〈糯〉秋糯 -〈糯〉晩糯 - - \ No newline at end of file diff -r 61593b047289 -r e681d693240e js/.DS_Store Binary file js/.DS_Store has changed diff -r 61593b047289 -r e681d693240e js/cjst.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/js/cjst.js Wed Jun 03 16:54:09 2015 +0200 @@ -0,0 +1,2874 @@ +/* A javascript toolset for helping work with Chinese characters in a web context or nodeJS. + * + * (The MIT License) + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software + * and associated documentation files (the 'Software'), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * 這是一份MIT的非官方中文翻譯。它並非MIT發布,也不是使用MIT授權的軟件的法定發布條款——只有MIT授權的英文原版具 + * 有這樣的效力。然而,我們希望這份翻譯能夠幫助中文讀者更好的理解MIT授權。 + * + * 現授予的權限,免費向任何人索取該軟件和相關的文檔文件( “軟件” ),以處理軟件,沒有任何限制,包括但不限於使用權,複製, + * 修改,合併,出版,發行,授權,和/或銷售軟件的副本,並允許的人提供的軟件是這樣做,但須符合下列條件: + * 上述版權聲明和本許可聲明中應包括所有副本或實質性部分的軟件。 + * 該軟件是“按原樣”提供,不做任何保證,明示或暗示,包括但不限於適銷性,針對特定用途的適用性和非侵權的。 + * 在任何情況下,作者或版權持有人對任何索賠,損害賠償或其他責任,無論是在一項行動的合同,侵權或其他因出於或有關的軟件 + * 或利用等交易必須軟件。 + */ + + +(function(window, exports){ + +var module = (function(){ + + /* A complete lookup reference from pinyin (with no tones) to zhuyin (also with no tones) */ + var __pinyinToZhuyinLookup = { + a:'ㄚ', + ai:'ㄞ', + an:'ㄢ', + ang:'ㄤ', + ao:'ㄠ', + ba:'ㄅㄚ', + bai:'ㄅㄞ', + ban:'ㄅㄢ', + bang:'ㄅㄤ', + bao:'ㄅㄠ', + bei:'ㄅㄟ', + ben:'ㄅㄣ', + beng:'ㄅㄥ', + bi:'ㄅㄧ', + bian:'ㄅㄧㄢ', + biao:'ㄅㄧㄠ', + bie:'ㄅㄧㄝ', + bin:'ㄅㄧㄣ', + bing:'ㄅㄧㄥ', + bo:'ㄅㄛ', + bu:'ㄅㄨ', + ca:'ㄘㄚ', + cai:'ㄘㄞ', + can:'ㄘㄢ', + cang:'ㄘㄤ', + cao:'ㄘㄠ', + ce:'ㄘㄜ', + cen:'ㄘㄣ', + ceng:'ㄘㄥ', + cha:'ㄔㄚ', + chai:'ㄔㄞ', + chan:'ㄔㄢ', + chang:'ㄔㄤ', + chao:'ㄔㄠ', + che:'ㄔㄜ', + chen:'ㄔㄣ', + cheng:'ㄔㄥ', + chi:'ㄔ', + chong:'ㄔㄨㄥ', + chou:'ㄔㄡ', + chu:'ㄔㄨ', + chua:'ㄔㄨㄚ', + chuai:'ㄔㄨㄞ', + chuan:'ㄔㄨㄢ', + chuang:'ㄔㄨㄤ', + chui:'ㄔㄨㄟ', + chun:'ㄔㄨㄣ', + chuo:'ㄔㄨㄛ', + ci:'ㄘ', + cong:'ㄘㄨㄥ', + cou:'ㄘㄡ', + cu:'ㄘㄨ', + cuan:'ㄘㄨㄢ', + cui:'ㄘㄨㄟ', + cun:'ㄘㄨㄣ', + cuo:'ㄘㄨㄛ', + da:'ㄉㄚ', + dai:'ㄉㄞ', + dan:'ㄉㄢ', + dang:'ㄉㄤ', + dao:'ㄉㄠ', + de:'ㄉㄜ', + dei:'ㄉㄟ', + den:'ㄉㄣ', + deng:'ㄉㄥ', + di:'ㄉㄧ', + dia:'ㄉㄧㄚ', + dian:'ㄉㄧㄢ', + diao:'ㄉㄧㄠ', + die:'ㄉㄧㄝ', + ding:'ㄉㄧㄥ', + diu:'ㄉㄧㄡ', + dong:'ㄉㄨㄥ', + dou:'ㄉㄡ', + du:'ㄉㄨ', + duan:'ㄉㄨㄢ', + dui:'ㄉㄨㄟ', + dun:'ㄉㄨㄣ', + duo:'ㄉㄨㄛ', + e:'ㄜ', + ei:'ㄟ', + en:'ㄣ', + eng:'ㄥ', + er:'ㄦ', + fa:'ㄈㄚ', + fan:'ㄈㄢ', + fang:'ㄈㄤ', + fei:'ㄈㄟ', + fen:'ㄈㄣ', + feng:'ㄈㄥ', + fo:'ㄈㄛ', + fou:'ㄈㄡ', + fu:'ㄈㄨ', + ga:'ㄍㄚ', + gai:'ㄍㄞ', + gan:'ㄍㄢ', + gang:'ㄍㄤ', + gao:'ㄍㄠ', + ge:'ㄍㄜ', + gei:'ㄍㄟ', + gen:'ㄍㄣ', + geng:'ㄍㄥ', + gong:'ㄍㄨㄥ', + gou:'ㄍㄡ', + gu:'ㄍㄨ', + gua:'ㄍㄨㄚ', + guai:'ㄍㄨㄞ', + guan:'ㄍㄨㄢ', + guang:'ㄍㄨㄤ', + gui:'ㄍㄨㄟ', + gun:'ㄍㄨㄣ', + guo:'ㄍㄨㄛ', + ha:'ㄏㄚ', + hai:'ㄏㄞ', + han:'ㄏㄢ', + hang:'ㄏㄤ', + hao:'ㄏㄠ', + he:'ㄏㄜ', + hei:'ㄏㄟ', + hen:'ㄏㄣ', + heng:'ㄏㄥ', + hong:'ㄏㄨㄥ', + hou:'ㄏㄡ', + hu:'ㄏㄨ', + hua:'ㄏㄨㄚ', + huai:'ㄏㄨㄞ', + huan:'ㄏㄨㄢ', + huang:'ㄏㄨㄤ', + hui:'ㄏㄨㄟ', + hun:'ㄏㄨㄣ', + huo:'ㄏㄨㄛ', + ji:'ㄐㄧ', + jia:'ㄐㄧㄚ', + jian:'ㄐㄧㄢ', + jiang:'ㄐㄧㄤ', + jiao:'ㄐㄧㄠ', + jie:'ㄐㄧㄝ', + jin:'ㄐㄧㄣ', + jing:'ㄐㄧㄥ', + jiong:'ㄐㄩㄥ', + jiu:'ㄐㄧㄡ', + ju:'ㄐㄩ', + juan:'ㄐㄩㄢ', + jue:'ㄐㄩㄝ', + jun:'ㄐㄩㄣ', + ka:'ㄎㄚ', + kai:'ㄎㄞ', + kan:'ㄎㄢ', + kang:'ㄎㄤ', + kao:'ㄎㄠ', + ke:'ㄎㄜ', + kei:'ㄎㄟ', + ken:'ㄎㄣ', + keng:'ㄎㄥ', + kong:'ㄎㄨㄥ', + kou:'ㄎㄡ', + ku:'ㄎㄨ', + kua:'ㄎㄨㄚ', + kuai:'ㄎㄨㄞ', + kuan:'ㄎㄨㄢ', + kuang:'ㄎㄨㄤ', + kui:'ㄎㄨㄟ', + kun:'ㄎㄨㄣ', + kuo:'ㄎㄨㄛ', + la:'ㄌㄚ', + lai:'ㄌㄞ', + lan:'ㄌㄢ', + lang:'ㄌㄤ', + lao:'ㄌㄠ', + le:'ㄌㄜ', + lei:'ㄌㄟ', + leng:'ㄌㄥ', + li:'ㄌㄧ', + lia:'ㄌㄧㄚ', + lian:'ㄌㄧㄢ', + liang:'ㄌㄧㄤ', + liao:'ㄌㄧㄠ', + lie:'ㄌㄧㄝ', + lin:'ㄌㄧㄣ', + ling:'ㄌㄧㄥ', + liu:'ㄌㄧㄡ', + long:'ㄌㄨㄥ', + lou:'ㄌㄡ', + lu:'ㄌㄨ', + lü:'ㄌㄩ', + luan:'ㄌㄨㄢ', + lüe:'ㄌㄩㄝ', + lun:'ㄌㄨㄣ', + luo:'ㄌㄨㄛ', + ma:'ㄇㄚ', + mai:'ㄇㄞ', + man:'ㄇㄢ', + mang:'ㄇㄤ', + mao:'ㄇㄠ', + me:'ㄇㄜ', + mei:'ㄇㄟ', + men:'ㄇㄣ', + meng:'ㄇㄥ', + mi:'ㄇㄧ', + mian:'ㄇㄧㄢ', + miao:'ㄇㄧㄠ', + mie:'ㄇㄧㄝ', + min:'ㄇㄧㄣ', + ming:'ㄇㄧㄥ', + miu:'ㄇㄧㄡ', + mo:'ㄇㄛ', + mou:'ㄇㄡ', + mu:'ㄇㄨ', + na:'ㄋㄚ', + nai:'ㄋㄞ', + nan:'ㄋㄢ', + nang:'ㄋㄤ', + nao:'ㄋㄠ', + ne:'ㄋㄜ', + nei:'ㄋㄟ', + nen:'ㄋㄣ', + neng:'ㄋㄥ', + ni:'ㄋㄧ', + nian:'ㄋㄧㄢ', + niang:'ㄋㄧㄤ', + niao:'ㄋㄧㄠ', + nie:'ㄋㄧㄝ', + nin:'ㄋㄧㄣ', + ning:'ㄋㄧㄥ', + niu:'ㄋㄧㄡ', + nong:'ㄋㄨㄥ', + nou:'ㄋㄡ', + nu:'ㄋㄨ', + nü:'ㄋㄩ', + nuan:'ㄋㄨㄢ', + nüe:'ㄋㄩㄝ', + nun:'ㄋㄨㄣ', + nuo:'ㄋㄨㄛ', + o:'ㄛ', + ou:'ㄡ', + pa:'ㄆㄚ', + pai:'ㄆㄞ', + pan:'ㄆㄢ', + pang:'ㄆㄤ', + pao:'ㄆㄠ', + pei:'ㄆㄟ', + pen:'ㄆㄣ', + peng:'ㄆㄥ', + pi:'ㄆㄧ', + pian:'ㄆㄧㄢ', + piao:'ㄆㄧㄠ', + pie:'ㄆㄧㄝ', + pin:'ㄆㄧㄣ', + ping:'ㄆㄧㄥ', + po:'ㄆㄛ', + pou:'ㄆㄡ', + pu:'ㄆㄨ', + qi:'ㄑㄧ', + qia:'ㄑㄧㄚ', + qian:'ㄑㄧㄢ', + qiang:'ㄑㄧㄤ', + qiao:'ㄑㄧㄠ', + qie:'ㄑㄧㄝ', + qin:'ㄑㄧㄣ', + qing:'ㄑㄧㄥ', + qiong:'ㄑㄩㄥ', + qiu:'ㄑㄧㄡ', + qu:'ㄑㄩ', + quan:'ㄑㄩㄢ', + que:'ㄑㄩㄝ', + qun:'ㄑㄩㄣ', + ran:'ㄖㄢ', + rang:'ㄖㄤ', + rao:'ㄖㄠ', + re:'ㄖㄜ', + ren:'ㄖㄣ', + reng:'ㄖㄥ', + ri:'ㄖ', + rong:'ㄖㄨㄥ', + rou:'ㄖㄡ', + ru:'ㄖㄨ', + rua:'ㄖㄨㄚ', + ruan:'ㄖㄨㄢ', + rui:'ㄖㄨㄟ', + run:'ㄖㄨㄣ', + ruo:'ㄖㄨㄛ', + sa:'ㄙㄚ', + sai:'ㄙㄞ', + san:'ㄙㄢ', + sang:'ㄙㄤ', + sao:'ㄙㄠ', + se:'ㄙㄜ', + sen:'ㄙㄣ', + seng:'ㄙㄥ', + sha:'ㄕㄚ', + shai:'ㄕㄞ', + shan:'ㄕㄢ', + shang:'ㄕㄤ', + shao:'ㄕㄠ', + she:'ㄕㄜ', + shei:'ㄕㄟ', + shen:'ㄕㄣ', + sheng:'ㄕㄥ', + shi:'ㄕ', + shou:'ㄕㄡ', + shu:'ㄕㄨ', + shua:'ㄕㄨㄚ', + shuai:'ㄕㄨㄞ', + shuan:'ㄕㄨㄢ', + shuang:'ㄕㄨㄤ', + shui:'ㄕㄨㄟ', + shun:'ㄕㄨㄣ', + shuo:'ㄕㄨㄛ', + si:'ㄙ', + song:'ㄙㄨㄥ', + sou:'ㄙㄡ', + su:'ㄙㄨ', + suan:'ㄙㄨㄢ', + sui:'ㄙㄨㄟ', + sun:'ㄙㄨㄣ', + suo:'ㄙㄨㄛ', + ta:'ㄊㄚ', + tai:'ㄊㄞ', + tan:'ㄊㄢ', + tang:'ㄊㄤ', + tao:'ㄊㄠ', + te:'ㄊㄜ', + tei:'ㄊㄟ', + teng:'ㄊㄥ', + ti:'ㄊㄧ', + tian:'ㄊㄧㄢ', + tiao:'ㄊㄧㄠ', + tie:'ㄊㄧㄝ', + ting:'ㄊㄧㄥ', + tong:'ㄊㄨㄥ', + tou:'ㄊㄡ', + tu:'ㄊㄨ', + tuan:'ㄊㄨㄢ', + tui:'ㄊㄨㄟ', + tun:'ㄊㄨㄣ', + tuo:'ㄊㄨㄛ', + wa:'ㄨㄚ', + wai:'ㄨㄞ', + wan:'ㄨㄢ', + wang:'ㄨㄤ', + wei:'ㄨㄟ', + wen:'ㄨㄣ', + weng:'ㄨㄥ', + wo:'ㄨㄛ', + wu:'ㄨ', + xi:'ㄒㄧ', + xia:'ㄒㄧㄚ', + xian:'ㄒㄧㄢ', + xiang:'ㄒㄧㄤ', + xiao:'ㄒㄧㄠ', + xie:'ㄒㄧㄝ', + xin:'ㄒㄧㄣ', + xing:'ㄒㄧㄥ', + xiong:'ㄒㄩㄥ', + xiu:'ㄒㄧㄡ', + xu:'ㄒㄩ', + xuan:'ㄒㄩㄢ', + xue:'ㄒㄩㄝ', + xun:'ㄒㄩㄣ', + ya:'ㄧㄚ', + yan:'ㄧㄢ', + yang:'ㄧㄤ', + yao:'ㄧㄠ', + ye:'ㄧㄝ', + yi:'ㄧ', + yin:'ㄧㄣ', + ying:'ㄧㄥ', + yong:'ㄩㄥ', + you:'ㄧㄡ', + yu:'ㄩ', + yuan:'ㄩㄢ', + yue:'ㄩㄝ', + yun:'ㄩㄣ', + za:'ㄗㄚ', + zai:'ㄗㄞ', + zan:'ㄗㄢ', + zang:'ㄗㄤ', + zao:'ㄗㄠ', + ze:'ㄗㄜ', + zei:'ㄗㄟ', + zen:'ㄗㄣ', + zeng:'ㄗㄥ', + zha:'ㄓㄚ', + zhai:'ㄓㄞ', + zhan:'ㄓㄢ', + zhang:'ㄓㄤ', + zhao:'ㄓㄠ', + zhe:'ㄓㄜ', + zhei:'ㄓㄟ', + zhen:'ㄓㄣ', + zheng:'ㄓㄥ', + zhi:'ㄓ', + zhong:'ㄓㄨㄥ', + zhou:'ㄓㄡ', + zhu:'ㄓㄨ', + zhua:'ㄓㄨㄚ', + zhuai:'ㄓㄨㄞ', + zhuan:'ㄓㄨㄢ', + zhuang:'ㄓㄨㄤ', + zhui:'ㄓㄨㄟ', + zhun:'ㄓㄨㄣ', + zhuo:'ㄓㄨㄛ', + zi:'ㄗ', + zong:'ㄗㄨㄥ', + zou:'ㄗㄡ', + zu:'ㄗㄨ', + zuan:'ㄗㄨㄢ', + zui:'ㄗㄨㄟ', + zun:'ㄗㄨㄣ', + zuo:'ㄗㄨㄛ' + }; + + + /* A reference lookup to convert pinyin with a tone into pinyin without */ + var __pinyinToneLookup = { + 'ā':'a1', + 'á':'a2', + 'ǎ':'a3', + 'à':'a4', + 'ē':'e1', + 'é':'e2', + 'ě':'e3', + 'è':'e4', + 'ō':'o1', + 'ó':'o2', + 'ǒ':'o3', + 'ò':'o4', + 'ī':'i1', + 'í':'i2', + 'ǐ':'i3', + 'ì':'i4', + 'ū':'u1', + 'ú':'u2', + 'ǔ':'u3', + 'ù':'u4', + 'ü':'v1', + 'ǘ':'v2', + 'ǚ':'v3', + 'ǜ':'v4', + 'ń':'n2', + 'ň':'n3', + '':'m2' + } + + + /* The possible tones to use while rendering zhuyin. */ + var __zhuyinTones = ' ˊˇˋ˙'; + + + /* A list of chinese symbols that we have no intention of trying to write pinyin or zhuyin for. */ + var __chineseGrammarTokens = ',。 《》/? ;「:『」』'; + + + /* A lookup of all chinese characters to the respective pinyin equivalant. */ + var __chineseToPinyinLookup = { + '':'桛烪', + bei:'呗唄', + biàn:'辧辨辩辯变遍卞辫忭汴苄弁変峅徧抃昪汳艑覍變辡辮釆玣諚便缏緶閞', + biào:'鳔俵摽', + biáo:'嫑', + biè:'彆', + bié:'别別蹩徶莂蛂襒', + biān:'边编鞭砭蝙笾鳊煸炞甂箯籩編萹邉鍽邊鯾鯿牑猵獱糄鞕', + biāo:'髟标彪膘飑飙瘭飚镳镖儦墂幖標滮瀌熛爂猋脿臕蔈謤贆鏢颷颮鑣飇飆飊飈驫骉磦檦淲穮藨颩', + biē:'憋鳖虌鼈龞鱉瘪癟蟞', + biǎn:'扁贬匾碥褊窆惼揙稨藊貶鴘', + biǎo:'表婊裱褾諘錶', + bo:'啵蔔', + bà:'爸坝霸鲅灞垻弝壩欛矲鮁罢罷耙覇跁', + bài:'败稗拜拝敗粺薭贁韛庍猈', + bàn:'半办伴扮瓣绊姅怑秚絆辦鉡靽拌湴', + bàng:'棒镑傍谤塝蒡玤稖艕蜯謗鎊磅蚌挷搒棓', + bào:'报抱爆豹鲍儤勽報忁曓菢虣蚫鉋鑤铇髱骲鮑犦暴趵袌', + bá:'拔跋茇菝魃叐妭抜炦癹胈詙軷鼥颰', + bái:'白', + báo:'薄雹窇', + bèi:'鞁鞴倍备辈贝钡焙狈惫褙悖蓓鐾孛碚俻偝偹僃備邶愂昁憊梖牬犕琲珼狽禙糒苝蛽軰貝鄁輩鋇郥被背誖骳', + bèn:'倴笨坌捹撪渀逩桳坋', + bèng:'蹦迸泵甏塴逬鏰镚揼', + béng:'甭甮', + bì:'萆薜痺鐴闭碧避必毕壁币蓖弊蔽敝毙庇毖陛痹畀嬖狴筚箅篦荜襞铋跸愎滗璧哔髀弼婢咇佖坒堛嗶奰妼幤幣廦弻彃愊怭斃梐滭煏熚湢獘潷獙珌疪畢皕箆篳粊綼縪繴罼腷苾萞蓽蜌袐襅襣觱詖诐貱贔蹕赑躃躄邲鄨鄪鏎鉍閇閉閟韠饆飶馝駜驆魓鮅鷝鷩鼊睤臂贲賁辟濞睥裨芘禆朇怶柲畁鞸髲', + bìn:'摈殡膑髌鬓擯殯臏髩鬂髕鬢', + bìng:'並鮩病摒倂併傡垪栤窉竝誁靐并幷庰', + bí:'鼻荸嬶', + bò:'檗蘗孹譒簸擘', + bó:'伯鮊鲌嚗萡驳博搏脖帛渤舶铂箔膊礴亳鹁踣钹仢侼僰懪愽挬桲欂浡淿煿牔狛瓝秡簙糪艊胉葧袯襏襮郣鋍鈸鉑鎛鑮镈餺馛駮駁馞馎髆鵓謈泊勃猼瓟肑袹髉', + bù:'抪柨簿不布步部埠怖瓿钚佈勏吥咘埗廍悑歨歩篰荹蔀踄郶鈈餢捗', + bú:'醭轐鳪', + bā:'扷八巴芭叭笆疤捌粑岜仈哵夿朳玐羓蚆豝釟丷巼吧扒柭魞鲃', + bāi:'挀掰', + bān:'班般搬斑扳癍颁瘢攽斒肦螁螌褩辬頒鳻', + bāng:'帮邦梆浜垹幚幇幫捠邫鞤縍', + bāo:'包褒苞胞龅孢煲佨勹笣蕔裦襃闁齙剥剝枹', + bēi:'杯悲碑卑鹎揹桮椑盃藣鵯庳陂柸', + bēn:'锛犇錛奔泍栟漰', + bēng:'嗙绷綳繃崩嘣伻奟嵭閍痭絣祊', + běi:'北鉳', + běn:'本苯畚奙楍翉', + běng:'埲琫菶鞛埄琣', + bī:'逼偪屄楅毴豍鰏鲾鵖螕鎞榌', + bīn:'彬豳宾濒斌滨缤傧镔椕濵濱瀕虨繽賔賓豩邠霦鑌顮頻槟梹檳玢儐汃瑸璸', + bīng:'兵冰仌冫掤氷蛃鋲仒', + bō:'波拨播玻菠钵饽僠嶓撥癶砵盋礡碆缽蹳鉢餑驋鱍袰溊紴癷', + bū:'晡逋钸峬庯誧餔鈽鵏錻', + bǎ:'把靶鈀钯', + bǎi:'捭百摆佰栢擺竡粨襬柏絔', + bǎn:'版板坂钣舨阪岅昄瓪粄蝂鈑魬闆', + bǎng:'绑膀牓綁髈榜', + bǎo:'饱保宝褓鸨葆堢寚寳媬寶珤緥藵賲靌飹駂鳵飽鴇堡怉宲', + bǐ:'俾笔比彼鄙秕匕舭妣佊夶朼柀沘疕粃筆聛貏毞啚', + bǐng:'鞞丙饼秉柄炳禀邴怲抦昞昺棅稟苪鈵陃鞆餠餅偋寎眪鉼', + bǒ:'跛', + bǔ:'卜补捕哺卟補鸔喸', + chi:'麶', + chou:'鮘', + chuài:'膪踹', + chuàn:'串钏汌玔賗釧猭鶨', + chuàng:'怆刱剙剏愴创創', + chuái:'膗', + chuán:'船椽遄舡剶暷篅舩輲传傳圌', + chuáng:'床噇牀幢', + chuí:'腄垂锤棰槌倕埀捶搥桘陲菙箠錘顀鎚', + chuò:'绰綽踀龊辍娖嚽擉歠涰磭辵輟酫辶鑡齪餟啜惙娕婥哾', + chuāi:'搋', + chuān:'穿川氚巛瑏', + chuāng:'窗疮刅摐牎牕瘡窻窓', + chuī:'吹炊龡', + chuō:'繛趠戳踔逴', + chuǎi:'揣', + chuǎn:'喘舛僢堾荈踳歂', + chuǎng:'闖闯傸磢', + chà:'差岔诧衩汊姹侘奼詫刹剎紁', + chài:'訍虿囆袃蠆瘥', + chàn:'摲颤羼忏懴懺硟韂顫', + chàng:'唱畅鬯怅悵暢焻畼誯韔倡玚瑒', + chào:'耖仦觘仯', + chá:'查査茶搽茬察槎檫垞嵖猹詧靫碴秅', + chái:'柴豺侪儕喍犲祡', + chán:'孱缠谗蝉馋婵廛蟾潺躔澶劖嚵壥嬋巉棎毚湹潹瀍瀺煘獑磛緾纒纏艬蟬誗讒鄽酁鋋镵鑱饞蟐禅儃儳欃螹苂', + cháng:'长仧兏長场塲場常尝肠偿嫦徜苌償嚐嘗瑺瓺甞膓腸萇镸鱨鲿仩裳', + cháo:'潮巢晁巣漅牊窲罺謿轈鄛鼂鼌嘲樔', + chè:'屮撤掣彻澈坼勶徹烢瞮爡硩聅迠頙', + chèn:'讖谶趁衬龀榇儭嚫櫬疢襯趂齓齔', + chèng:'秤', + chén:'梣辰尘臣晨沉陈忱谌宸塵敐曟樄煁瘎茞莀莐蔯薼螴訦諶軙迧鷐霃陳麎鈂敶栕愖桭', + chéng:'棖橙揨成城诚程惩呈承塍铖酲埕枨丞塖堘宬挰懲掁峸檙洆溗澂珵畻珹窚筬絾脭荿誠鋮郕鯎騬乘乗娍椉澄瀓裎憕朾', + chì:'硳勑斥翅赤炽饬瘛敕啻叱彳傺侙勅恜憏懘慗抶杘湁灻熾痸烾翄翤翨腟趩遫鉓雴飭鶒鷘銐', + chí:'池迟持驰弛踟茌墀篪漦竾筂箎荎蚳謘貾赿迡遅遟鍉遲馳匙', + chòng:'铳銃揰', + chòu:'臭殠臰遚', + chóng:'虫崇崈爞褈蟲蝩隀漴緟', + chóu:'愁稠绸酬筹畴踌俦惆雠儔嬦懤栦燽皗絒疇籌綢菗讐讎詶酧躊醻雔雦仇帱幬椆檮薵裯梼', + chù:'触搐矗怵亍绌憷黜傗儊斶歜珿竌絀臅觸豖鄐閦俶処埱嘼敊欪滀竐諔泏', + chú:'锄除橱滁厨躇雏刍蹰蜍幮廚櫉櫥犓篨耡蒢蒭芻蟵豠趎鉏躕鋤鶵雛媰', + chún:'唇纯醇莼鹑浱湻滣犉漘純脣蒓錞蓴陙鯙醕鶉淳', + chā:'插馇偛锸嗏扠挿揷臿疀艖芆銟鍤餷叉杈', + chāi:'拆肞釵钗', + chān:'掺摻搀觇攙裧襜覘辿鋓幨梴', + chāng:'昌猖鲳菖阊伥娼倀淐椙琩裮錩锠閶鯧鼚', + chāo:'抄超钞怊弨欩訬鈔窼', + chē:'车伡俥車砗唓莗硨蛼', + chēn:'郴抻嗔琛捵瞋諃賝謓棽', + chēng:'穪称稱罉晿撑柽瞠蛏憆摚撐棦橕檉泟浾琤碀緽赪蟶赬阷鏿靗頳饓鐣偁爯僜牚竀', + chě:'扯偖撦', + chěn:'磣硶碜墋夦贂趻踸鍖', + chěng:'逞骋庱悜睈騁侱徎', + chī:'吃痴媸哧蚩鸱眵螭魑笞嗤喫噄妛彨彲摛攡瓻癡瞝粚胵訵鵄鴟黐齝殦絺誺', + chōng:'冲充艟舂忡憧茺嘃憃摏沖浺珫罿翀蹖衝', + chōu:'抽瘳犫犨篘搊紬', + chū:'摴出初樗岀榋貙齣', + chūn:'春椿媋旾暙杶槆櫄橁蝽瑃箺萅輴鰆鶞', + chǎ:'镲蹅鑔', + chǎi:'茝', + chǎn:'产阐铲蒇谄冁骣丳剷囅嵼旵浐滻灛產産簅蕆譂讇諂鏟閳闡刬剗幝摌斺燀繟醦', + chǎng:'厂敞氅惝昶僘厰廠鋹', + chǎo:'吵炒巐煼眧麨焣', + chǐ:'尺耻侈齿豉褫卶叺呎垑恥歯肔胣蚇裭鉹齒伬欼袲袳', + chǒng:'宠寵埫', + chǒu:'瞅丑丒吜杽矁醜魗偢', + chǔ:'处楚础储杵楮儲椘檚濋礎璴禇處齭齼', + chǔn:'蠢偆惷睶萶賰', + cuàn:'窜篡爨殩熶簒竄', + cuán:'巑櫕欑穳', + cuì:'脆淬翠瘁悴粹萃毳伜啛忰焠疩竁紣綷翆粋脃膬臎膵顇襊啐倅琗濢', + cuò:'措錯错挫厝锉剒剉夎莝蓌莡逪銼', + cuó:'嵳嵯蔖鹾痤矬蒫虘鹺睉', + cuān:'镩蹿汆撺攛躥鑹', + cuī:'催崔摧榱凗墔慛磪脺鏙嵟槯縗缞', + cuō:'鎈搓蹉磋瑳遳醝撮', + cuǐ:'璀皠趡漼', + cuǒ:'脞', + cà:'遪', + cài:'蔡菜縩', + càn:'灿璨粲儏澯燦薒謲', + càng:'賶', + cào:'肏襙鄵鼜', + cái:'才财材裁纔財', + cán:'蚕残惭慙殘慚蝅蠺蠶', + cáng:'藏欌鑶', + cáo:'曹槽嘈艚螬嶆漕曺蓸褿鏪慒', + cè:'册测策厕恻冊厠廁敇憡惻測笧筞筴箣荝萴萗蓛夨侧側拺畟簎粣', + cèng:'蹭', + cén:'涔岑埁笒', + céng:'层嶒層驓竲', + cì:'次赐刾佽庛朿栨絘茦莿蛓螆賜刺', + cí:'词瓷雌磁辞茨慈鹚祠糍垐嬨柌濨珁礠甆詞辤辝飺餈辭鶿鴜鷀薋', + còng:'憁謥愡', + còu:'楱辏凑腠湊輳', + cóng:'从從丛琮淙婃叢孮従徖悰樷欉灇爜藂誴賨賩徔錝漎潀潈', + cù:'促簇蔟醋猝蹙蹴媨憱瘄瘯縬脨誎趗踧蹵顣鼀踿噈', + cùn:'寸籿', + cú:'徂殂', + cún:'存壿侟拵', + cā:'擦嚓攃', + cāi:'猜偲', + cān:'傪参叄參叅餐骖嬠湌爘驂飡喰', + cāng:'仓沧舱仺倉苍凔嵢濸獊滄螥蒼艙鸧伧傖鶬', + cāo:'操糙撡', + cēn:'嵾篸', + cēng:'噌', + cī:'疵偨蠀趀骴髊齹玼跐縒', + cōng:'囪囱葱蔥匆聪璁苁骢忩悤怱暰樬漗瑽篵瞛繱聡聦茐聰蟌蓯騘驄鏦鍯鏓枞樅棇熜潨', + cū:'觕粗麁麄麤橻怚', + cūn:'膥村皴竴邨澊', + cǎ:'礤礸', + cǎi:'采寀埰踩睬倸啋彩婇棌採綵跴毝', + cǎn:'惨黪憯慘黲朁穇', + cǎo:'草愺艸騲慅懆', + cǐ:'此佌泚皉鮆', + cǔn:'忖刌', + da:'繨', + de:'的', + diàn:'电店殿淀垫惦靛奠坫阽簟玷癜壂墊婝扂橂琔澱磹蜔鈿電驔佃钿甸', + diào:'弔魡掉钓吊铞伄瘹窎窵竨訋釣鋽銱鑃鈟雿盄蓧藋铫銚調', + diè:'哋', + dié:'跮迭碟谍叠牒蝶瓞鲽堞耋垤蹀峌幉恎惵戜曡殜氎牃畳疂疉疊絰绖胅耊艓苵蜨褋詄諜镻鰈鴩眣嵽咥喋挕昳楪眰螲臷趃', + diān:'瘨颠掂滇巅傎癫厧嵮巓敁巔槇攧癲蹎顚顛齻槙', + diāo:'虭雕刁碉叼鲷凋貂奝刟弴彫汈琱簓蛁錭鯛鮉鼦鵰瞗鳭', + diē:'跌爹褺', + diū:'铥丟銩丢', + diǎ:'嗲', + diǎn:'猠点碘典踮奌婰敟椣蒧蕇點嚸跕', + diǎo:'扚屌', + duàn:'段断锻椴煅簖塅缎毈瑖斷籪腶緞葮躖碫鍛', + duì:'对队憝怼碓對対懟濧瀩祋綐薱譈譵陮轛兑兊兌憞隊', + duò:'舵剁跺惰刴墯尮憜挅桗跥陊陏飿饳鵽堕墮柮', + duó:'踱剫夺奪铎凙痥鈬鐸喥敓敚', + duān:'端偳媏褍鍴耑', + duī:'堆镦垖塠痽磓鐜鐓鴭', + duō:'夛多剟哆掇咄裰嚉毲敠敪', + duǎn:'短', + duǐ:'頧', + duǒ:'奲鬌朵躲哚亸缍嚲埵崜朶綞趓躱軃垛垜挆椯', + dà:'大亣眔', + dài:'跢带代戴逮袋贷怠殆迨玳岱甙黛绐埭侢垈帒帯廗叇曃帶柋瀻瑇簤緿艜紿蝳蹛軑軚軩轪襶霴靆鴏黱待蚮貸', + dàn:'僤但蛋淡氮诞旦萏啖啗啿嚪噉帎憺柦沊泹狚癚禫疍腅窞蜑觛訑贉誕霮餤駳髧鴠饏蓞憚惮繵弹澹嘾弾彈瘅癉唌黮', + dàng:'荡档宕菪凼砀圵垱壋檔氹璗瓽瞊礑碭盪簜蘯蕩趤逿雼婸嵣愓潒', + dào:'到道盗稻悼纛焘噵椡檤瓙燾稲盜翿菿衟軇衜艔翢辺', + dá:'瘩答笪达怛靼妲匒鞑垯炟燵畣羍荅荙薘蟽跶詚迏迖逹鐽達龖龘韃迚剳呾溚畗', + dáo:'捯', + dèn:'扥扽', + dèng:'邓瞪凳磴镫嶝墱櫈覴鄧隥鐙', + dé:'得德徳锝恴悳惪淂鍀棏', + dì:'蔕蝭踶螮遰遞第递缔帝蒂谛睇娣碲俤偙僀埊墑嶳墬怟梊玓焍甋眱祶禘締菂腣蝃諦逓鉪慸棣地弟坔埅媂珶苐遆摕旳杕枤楴釱', + dìng:'定订锭腚碇啶椗矴碠磸聢萣訂錠顁飣饤蝊忊', + dí:'敌涤嫡笛迪狄觌嘀荻镝籴唙啇嚁廸敵梑滌糴苖蔋藡覿蔐豴蹢靮頔馰髢鸐翟鏑', + dòng:'动洞冻栋恫胨胴硐働凍動姛戙挏棟湩腖迵霘駧侗垌', + dòu:'吋豆逗痘窦斣梪浢脰竇荳酘郖閗餖饾鬥鬦鬪闘鬬鬭毭', + dù:'度渡杜镀蠹妒芏妬殬秺荰蠧螙鍍靯肚', + dùi:'襨', + dùn:'沌顿頓钝盾遁砘炖伅潡碷燉踲逇遯鈍囤庉', + dú:'毒读渎瀆凟讀独犊椟牍黩髑匵嬻涜殰櫝犢牘瓄獨皾裻読讟豄贕錖鑟韇韣黷騳韥', + dā:'搭哒耷褡咑噠墶撘鎝笚鎉', + dāi:'呆呔懛獃', + dān:'单單単襌眈丹耽郸殚聃箪勯匰妉媅殫甔耼砃簞聸褝躭酖鄲頕担儋擔', + dāng:'铛鐺当儅闣裆噹澢珰璫筜簹艡蟷襠當', + dāo:'刂刀氘忉舠釖魛鱽螩朷', + dē:'嘚', + dēng:'登灯蹬嬁噔璒竳燈艠豋簦', + děng:'等戥', + dī:'岻低滴堤羝仾啲埞彽樀磾袛趆隄鞮秪氐奃', + dīng:'盯虰叮玎疔仃耵帄靪丁钉釘酊', + dōng:'东冬鸫氡岽倲咚埬崬昸東氭涷笗苳菄蝀鮗鯟鶫鼕鶇徚娻崠', + dōu:'兜篼蔸兠剅枓唗橷吺', + dū:'都督嘟厾醏剢闍阇', + dūn:'蹲吨墩礅噸墪惇撉撴犜獤蜳蹾驐敦', + dǎ:'打', + dǎi:'歹傣', + dǎn:'亶馾掸撣疸胆赕刐伔撢玬瓭紞膽衴黕賧抌黵', + dǎng:'黨党谠攩欓譡讜挡擋灙', + dǎo:'擣岛导祷蹈捣壔導嶋嶌嶹島搗槝禂禱陦隝隯倒', + dǐ:'坻柢坘軧抵邸诋骶砥厎呧弤拞掋牴菧觝詆阺鯳底聜', + dǐng:'顶鼎嵿艼薡鐤頂鼑奵濎', + dǒng:'懂董嬞箽蕫諌', + dǒu:'斗抖陡蚪乧鈄钭阧', + dǔ:'赌睹堵笃琽篤覩賭', + dǔn:'趸盹躉', + fiào:'覅', + fà:'珐琺蕟髪髮', + fàn:'輽汎泛饭贩范犯畈梵奿嬎氾滼瀪盕笵範訉軬販飯飰軓', + fàng:'放', + fá:'坺墢笩茷罚乏伐阀筏垡姂傠栰瞂罸罰藅閥浌疺橃', + fán:'蕃襎凡烦樊钒矾燔蘩凢凣匥墦蹯杋柉棥煩璠瀿笲礬籵緐羳舤舧薠蠜鐇釩鷭鐢繁膰', + fáng:'防房肪妨鲂魴', + fèi:'杮蟦胇费費廢肺废沸吠狒镄剕厞廃屝俷昲曊櫠濷癈萉陫鐨靅鼣芾痱疿', + fèn:'份奋愤忿粪瀵鲼偾僨奮弅憤秎瞓膹糞鱝', + fèng:'俸凤奉湗焨煈賵赗鳯鴌鳳', + féi:'肥腓淝蜰', + fén:'朌炃燌鐼岎蕡坟焚棼汾鼢墳妢幩枌燓羒羵蒶蚠蚡豶豮隫轒馩魵黂鼖獖橨濆', + féng:'漨逢堸綘艂缝縫冯馮夆浲溄摓', + fó:'佛仏梻坲', + fóu:'紑', + fù:'萯复馥輹附鲋嬔富负付赴缚赋妇腹覆傅讣阜咐鳆蝮赙驸冨坿偩媍婦彿復椱禣竎祔緮縛蕧蚹蛗蝜袝複覄詂訃負賦賻鍑鍢駙鮒鰒秿婏副父蚥峊褔', + fú:'怫茀幅踾帗艴袚祓紼绋髴芣扶浮福伏符氟俘弗涪辐袱苻蚨幞茯蜉菔蝠罘匐绂凫桴孚郛乀黻芙咈哹刜垘巿岪柫栿澓炥玸泭畉甶癁稪箙綍絥紱翇罦艀葍虙襆襥諨豧輻鉘鉜韍韨颫鮄鮲鴔鵩鳧鳬拂畐鶝服洑榑笰砩莩枎琈棴烰', + fā:'發彂沷発冹发', + fān:'籓噃番畨翻帆藩幡勫嬏忛憣旛旙繙轓颿飜鱕', + fāng:'蚄枋芳方钫邡匚堏淓牥錺鈁鴋坊汸趽', + fēi:'蜚非飞啡扉霏鲱绯婔婓暃渄猆緋裶靟飝飛餥馡騑騛鯡菲妃', + fēn:'分訜芬纷酚吩氛帉昐朆梤棻竕紛翂衯躮鈖雰餴饙馚哛兺', + fēng:'封楓渢蜂丰枫疯峰锋葑酆烽仹偑凨沣僼凬砜凮妦寷崶峯沨檒犎猦灃琒盽瘋篈碸蘴豐鄷鋒鏠靊鎽飌麷堼蠭闏霻风風桻', + fěi:'匪诽篚悱翡榧奜棐蕜誹斐朏胐', + fěn:'粉黺', + fěng:'覂唪讽諷', + fū:'尃孵敷肤趺跗稃麸呋伕娐怤懯旉玞砆糐筟綒膚荂荴衭邞鄜酜鈇麬麱麩夫姇粰妋柎紨胕鳺', + fǎ:'法砝佱灋鍅峜', + fǎn:'反返仮橎払', + fǎng:'紡纺仿访舫倣旊昉昘瓬眆訪髣鶭', + fǒu:'殕否缶缹缻雬鴀妚', + fǔ:'拊俯斧辅腐府抚甫釜脯腑黼滏俌俛呒弣撫椨焤盙簠蜅輔郙釡阝頫鬴乶捬嘸', + guà:'挂褂卦诖坬掛啩罣詿絓', + guài:'怪恠夬', + guàn:'惯罐灌贯掼盥鹳悹慣摜悺樌泴潅爟瓘礶祼罆躀貫鏆遦鑵鱹鸛欟卝丱毌矔雚', + guàng:'逛俇臦', + guái:'叏', + guì:'贵跪桂刽刿劊劌撌攰昋椢槶櫃禬筀蓕襘貴鞼鱥鱖樻鐀鑎柜桧檜鳜癐瞆瞶螝眭', + guò:'过腂過鐹', + guó:'掴国帼馘虢囯囶囻圀國幗慖摑漍腘蔮聝膕簂', + guā:'呱胍刮瓜鸹劀歄煱踻颪騧鴰颳桰栝緺趏', + guāi:'乖', + guān:'关官棺涫鳏倌瘝癏窤蒄関闗關鱞鰥观冠観覌觀莞', + guāng:'咣光胱僙垙姯洸灮炗炚烡炛珖茪輄銧黆桄', + guī:'归规硅闺瑰圭皈妫亀嫢媯嬀帰摫椝槼槻櫷歸珪璝瓌瞡茥蘬規邽郌閨騩鬶鬹龟龜鲑嶲巂廆胿袿雟鮭', + guō:'锅郭埚聒猓崞蝈啯嘓墎堝彍彉瘑蟈鈛鍋懖楇濄', + guǎ:'寡剐冎剮叧', + guǎi:'箉罫拐枴柺', + guǎn:'管馆琯痯舘筦輨錧館鳤璭', + guǎng:'广犷広廣獷臩', + guǐ:'鬼轨诡癸庋宄晷匦佹簋匭厬垝姽庪恑湀祪蛫蟡觤詭軌陒攱氿', + guǒ:'果裹椁蜾惈槨粿綶菓褁輠餜馃淉', + gà:'尬魀', + gài:'盖蓋概溉丐戤乢匃钙匄漑瓂槪槩葢鈣摡', + gàn:'汵赣绀淦倝凎幹檊灨榦盰紺詌贑骭贛旰', + gàng:'筻槓焵焹戆戅戇杠', + gào:'告郜诰锆勂吿峼祮祰禞筶誥鋯', + gá:'噶钆尜錷釓', + gè:'个各個铬虼箇茖鉻亇', + gèn:'亘茛艮搄揯亙', + gèng:'堩', + gé:'佮輵格阁隔骼革塥镉嗝膈搿佫匌呄挌愅櫊滆槅臵觡轕諽閣鞷韐騔韚鮯鬲鎘葛蛤敋獦蛒裓鞈', + gén:'哏', + gòng:'共贡熕貢莻唝嗊', + gòu:'够购构垢彀觏诟遘媾冓坸搆撀煹構夠訽覯詬購雊啂姤', + gù:'故顾固雇梏崮鲴锢牿痼僱凅堌崓棝榾祻錮顧鯝', + gùn:'棍睔謴', + gā:'嘎嘠旮', + gāi:'该垓陔赅侅姟峐晐畡豥荄祴賌賅該絯郂', + gān:'干竿肝甘酐矸柑疳苷泔坩尴凲尶尲尷漧玕筸粓迀魐杆忓攼鳱', + gāng:'钢鋼刚纲缸肛罡冈堽剛冮岡堈掆棡牨犅疘罁綱釭鎠摃矼', + gāo:'高篙羔糕睾槔槹櫜橰臯韟餻髙鷎鷱鼛膏皋皐', + gē:'胳搁擱歌割哥戈鸽袼圪彁戓戨犵滒肐謌鎶鴚鴿疙牫饹', + gēn:'跟根', + gēng:'更緪縆耕庚赓刯椩羹焿浭畊絚羮菮鶊鹒賡', + gě:'笴舸嗰哿', + gěi:'给給', + gěng:'綆绠梗耿鲠哽峺挭埂莄郠骾鯁', + gōng:'篢工功公弓攻宫恭躬肱龚觥匑匔塨幊杛碽糼宮觵躳髸龔侊糿供蚣厷愩慐龏', + gōu:'溝沟钩鞲缑篝簼緱褠袧鉤韝鈎痀勾佝芶', + gū:'杚孤箍姑咕沽菇辜鸪轱菰酤蛄觚唂唃嫴橭柧泒稒笟箛篐罛苽蓇軱軲鈲鴣鮕巬巭估', + gǎ:'尕玍', + gǎi:'絠改忋', + gǎn:'澸赶感敢秆擀澉橄皯桿稈衦芉趕鱤鳡仠簳', + gǎng:'崗港岗', + gǎo:'搞稿镐杲槁藁缟夰槀檺稾稁縞菒藳鎬', + gǒng:'拱巩汞珙廾拲栱輁鞏', + gǒu:'狗苟岣笱玽耈耉耇豿蚼', + gǔ:'扢古股鼓谷蛊鹘臌钴牯诂瞽毂嘏傦罟啒尳愲榖淈濲瀔皷盬穀羖脵薣蠱詁轂逧鈷餶馉鼔皼骨贾汩夃糓縎鶻', + gǔn:'鲧滚辊衮丨绲磙惃滾緄蓘袞輥蔉鮌鯀緷', + han:'兯爳', + huà:'諣话画桦婳嫿嬅崋摦杹槬樺澅畫畵繣舙諙話譮黊夻枠化觟', + huài:'咶坏壞壊蘾', + huàn:'澣换唤患幻宦涣焕豢痪逭漶鲩奂擐浣喚奐嵈愌攌換槵梙烉渙煥瑍瘓肒藧轘鯶鰀鯇喛嚾', + huàng:'愰曂滉榥皝皩鎤', + huá:'滑猾铧骅搳撶蕐螖譁鷨鏵驊磆划劃鋘哗嘩华華姡釪釫呚', + huái:'怀淮踝徊懐槐懷耲蘹褱褢櫰瀤', + huán:'还還絙狟貆环桓鬟寰锾萑洹缳堚寏峘澴環糫羦繯萈荁豲鍰鐶镮阛闤雈鹮獂圜瓛綄嬛', + huáng:'潢趪黄簧凰惶皇蝗磺煌隍鳇篁徨遑癀湟璜偟蟥喤堭媓崲墴楻獚瑝穔艎葟諻鍠鐄锽餭韹騜鱑鰉鷬黃揘熿', + huì:'屶絵繪绘嬒汇惠晦慧秽贿讳卉诲烩彗蕙喙恚蟪荟僡嘒匯嚖圚寭屷彚彙恵憓懳徻暳槥橞檅櫘泋滙潓獩燴璤瞺篲穢翙翽蔧薉薈詯誨諱譓譿賄鐬闠阓靧頮顪餯颒芔会會璯缋繢藱儶湏濊瘣鏸', + huí:'烠佪回蛔茴洄囘囬廽廻恛痐蚘蜖蛕逥迴鮰', + huò:'捇藿霍擭穫韄檴或货祸惑获嚯镬锪蠖俰剨咟嚿奯旤曤沎湱瀖癨獲眓矐禍耯臛艧蒦謋貨鍃鑊雘靃窢彟彠濩掝嚄矆閄喐', + huó:'活佸秮秳', + huā:'花婲埖椛硴糀蘤誮錵蒊', + huān:'犿懽鵍欢獾歓歡讙貛酄驩鴅孉', + huāng:'慌荒肓塃巟衁宺朚', + huī:'隓隳咴蘳灰挥辉恢徽麾晖诙噅噕媈幑婎拻揮楎暉洃瀈灳烣睳禈翬翚褘袆詼豗輝鰴撝煇睢', + huō:'秴劐攉耠吙騞豁', + huǎn:'缓睆緩', + huǎng:'櫎恍谎幌奛怳兤晄炾熀縨詤謊晃', + huǐ:'毁悔虺檓毇毀燬譭', + huǒ:'灬火伙夥钬邩鈥煷漷', + hài:'妎害氦骇亥嗐餀饚駴駭', + hàn:'厈屽垾憾扞捍釬汉旱焊翰撼撖悍菡瀚傼颔暵晘涆漢猂皔睅莟蔊蛿蜭螒譀銲鋎雗顄頷駻鶾輚閈闬汗馯熯', + hàng:'沆', + hào:'侴暠浩澔耗昊颢灏皓傐哠恏昦暤晧暭曍淏灝皜皞皡皥聕薃號鄗鰝顥号悎滈秏', + hái:'骸孩', + hán:'浛虷含寒韩涵函邗邯焓凾娢圅晗崡梒嵅澏甝筨琀蜬鋡韓唅', + háng:'頏颃航杭绗垳斻筕絎蚢貥迒苀魧裄行吭笐', + háo:'蚝獔嚎豪毫壕嗥濠儫嘷噑椃獆竓籇蠔譹毜獋乚', + hè:'翯贺赫褐鹤壑哬垎寉焃煂燺爀癋碋謞賀靍靎靏鸖鶴穒嗃嚇熇袔鶮', + hèn:'恨', + hèng:'啈', + hé:'閡阂盒釛毼曷菏詥魺頜河荷禾涸劾盍翮阖啝姀峆敆柇楁渮澕熆皬盇盉篕籺粭萂覈訸郃鉌闔鞨鑉餄饸鹖麧齕龁龢礉核合鲄颌閤纥紇貉和何咊惒狢貈螛鶡', + hén:'痕拫鞎', + héng:'恆珩恒衡蘅姮烆胻鑅鵆鸻鴴撗横橫桁', + hòng:'銾澒蕻讧撔訌闀鬨閧闂', + hòu:'茩厚后候鲎後逅垕洉堠豞郈鮜鱟鲘', + hóng:'红紅渱虹魟洪宏鸿弘闳荭黉仜泓吰垬娂妅宖彋汯浤潂玒玜硔竑竤篊粠紭綋紘翃翝耾纮苰葒葓谹鈜鋐鉷谼閎霐霟鞃鴻黌羾屸沗', + hóu:'喉猴篌糇骺瘊帿睺翭葔鄇鍭鯸餱侯矦翵銗', + hù:'豰嗀瓠乥户互护沪冱怙鹱笏戽扈祜岵嚛婟嫮嫭帍弖戸戶昈槴沍滬熩簄粐綔蔰護鍙鄠頀鱯鳠鳸鸌摢怘枑芐', + hùn:'混睴圂倱溷俒慁掍诨焝諢觨尡婫', + hú:'鹄鵠湖壶胡弧狐葫蝴瑚鹕醐囫斛猢煳觳槲喖嘝壷壺媩搰楜瀫焀瓳絗箶縠蔛螜衚鍸頶餬魱鰗鬍鶦鶘抇隺', + hún:'浑渾魂忶馄餛鼲珲琿', + hā:'紦鉿铪哈', + hāi:'嗨咍', + hān:'犴頇顸酣憨蚶鼾哻谽馠魽佄嫨', + hāng:'夯', + hāo:'蒿嚆薅茠薧', + hē:'呵喝嗬诃欱蠚訶抲', + hēi:'嘿黒潶黑', + hēng:'哼涥脝亨悙', + hěn:'狠很佷詪', + hōng:'訇轰烘薨嚝揈灴焢硡谾軣輷轟鍧呍哄叿渹', + hōu:'齁', + hū:'呼忽乎烀轷惚滹唿匢匫嘑垀寣幠昒歑泘淴苸虍謼虖軤雐乯糊恗曶雽膴', + hūn:'昏荤婚阍昬棔睧睯涽蔒葷轋閽惛殙', + hǎi:'胲海醢塰烸酼', + hǎn:'豃喊罕浫丆', + hǎo:'好郝', + hǒng:'晎', + hǒu:'吽吼犼', + hǔ:'俿唬虎琥乕萀虝錿鯱浒滸汻', + jià:'价架驾嫁稼幏榢駕價', + jiàn:'覵渐漸溅濺鞬跈洊件键贱箭建健荐剑涧鉴践舰饯牮谏腱毽楗踺俴僭剣剱劎劒劔劍墹寋徤擶旔澗珔瞷礀磵繝糋臶艦薦覸諓諫賎趝轞賤踐鍳鍵鐱鑑鑬鑒鑳餞譛见見槛檻栫瀳袸榗鏩', + jiàng:'降夅酱匠犟绛糨洚勥匞嵹弜弶摾櫤滰糡絳謽醤醬', + jiào:'噭嘄较叫轿窖酵噍醮呌嘦嘂嬓斠滘漖獥珓皭藠訆譥趭較釂轎教挍敎峤嶠潐窌', + jiá:'荚颊铗戛恝郏蛱圿忦戞扴脥莢裌蛺郟鋏頬頰鴶鵊唊袷', + jiáo:'嚼', + jiè:'芥鎅介骱借界届戒诫疥蚧丯堺屆岕庎徣楐玠琾畍砎犗蛶衸褯誡魪吤藉唶悈', + jié:'捷卩掶洁狤訐讦跲頡杢截劫竭杰睫桀羯鲒婕孑倢偼刦傑刼劼刧卪岊媫崨嵥巀嶻幯擮昅桝楶榤滐潔礍節蓵蛣蜐蠘莭蠞蠽衱袺誱詰踕鉣迼鍻鮚镼诘尐鞊結结节拮颉桔碣搩疌', + jiù:'鯦咎就旧救舅厩臼疚僦柩桕倃鹫匓匛匶廏廐廄慦捄柾殧舊麔鷲欍齨', + jiā:'夹夾鴐加佳嘉葭迦浃镓跏笳痂枷珈袈傢抸梜毠泇犌猳耞糘腵浹豭貑鉫鎵麚乫家拁', + jiān:'戔奸鰔菅靬尖兼肩煎歼坚艰笺缄鞯戋搛缣鲣蒹鹣湔冿囏堅姧姦幵惤椾樫櫼殱殲瀐瀸熞熸牋睷瑊礛箋縑緘菺葌艱蔪蕑蕳虃譼豜鑯韀韉餰馢鰜鳒鰹鵳鶼麉雃鵑礷椷间监監鋻間玪犍猏豣碊鳽', + jiāng:'将浆將漿畺江僵姜礓豇缰茳壃橿殭疅繮畕翞葁螀螿薑韁鱂鳉疆摪', + jiāo:'浇澆虠膠交焦胶娇骄郊蕉礁椒僬蛟跤茭鹪鲛峧嶕嶣嬌憍穚簥膲茮蟭轇驕鐎鮫鵁鷮鷦艽姣燋', + jiē:'接喼秸街皆阶喈嗟疖堦媘掲擑楬湝煯痎癤稭脻蝔謯階鞂鶛揭嫅椄菨', + jiě:'解觧姐媎毑檞飷', + jiōng:'扃冋坰埛冂蘏蘔駉駫絅', + jiū:'糾纠揪究赳鬏丩阄啾勼鸠揫朻萛鬮鳩揂摎樛牞糺', + jiǎ:'鉀钾甲岬胛叚婽斚斝榎槚檟玾賈假瘕徦椵', + jiǎn:'茧减检剪简捡俭硷柬拣碱翦枧趼戬谫笕蹇謇裥睑锏倹儉堿彅弿戩挸揀撿梘検檢減湕瀽瑐瞼礆筧簡絸繭藆蠒襉襺襇詃譾謭鐗鐧鬋鰎鹸鹻鹼囝帴揃篯籛暕', + jiǎng:'傋讲奖蒋桨耩塂奨奬槳獎膙蔣講顜', + jiǎo:'剿勦劋摷角繳缴憿脚绞搅狡饺铰敫皎佼挢儌孂撹撟攪敽敿晈暞曒灚璬皦纐腳臫絞蟜譑賋踋鉸餃鱎龣燞矫矯徼笅筊侥僥徺捁烄煍', + jiǒng:'炅窘炯侰僒迥冏囧泂澃烱煚煛熲燛綗褧逈顈颎浻', + jiǔ:'九酒久韭玖灸乆乣奺杦汣紤舏镹韮', + juàn:'卷帣巻倦眷绢鄄劵桊狷奆慻淃獧睊絭睠羂絹腃罥蔨餋勌瓹弮惓讂', + jué:'嶡趹觖赽鴃鴂焳臄趉决绝爵掘诀抉攫劂桷矍爝镢橛獗珏崛蕨谲孓亅厥刔匷孒崫嶥彏憰憠戄挗欮氒橜灍決熦爴爑玃玦玨瘚瑴矡絕砄絶芵蕝虳蟨蟩觼譎貜蹷訣躩鈌鐍钁鐝鷢觮噊蹶櫭觉覐覚覺斍倔噱弡捔泬疦蚗駃', + juān:'鋑鹃捐娟镌蠲涓勬姢脧裐鎸鐫朘焆', + juē:'撅噘屩屫撧', + juǎn:'锩呟埍臇菤錈捲', + jì:'薺伎荠茤魥既记计季寄际绩迹蓟技冀剂悸寂忌妓继洎鲚鲫稷暨跽霁髻骥觊芰兾剤勣劑坖垍廭彑徛惎懻旣暩旡曁梞檵檕漃漈瀱痵癠禝穄穊稩穧紀継繋繼績罽臮茍葪蔇薊蘮蘎蘻裚襀覬誋計記跡蹟際霽鬾魝驥鯚鰶鰿鱀鯽鱭鵋鷑齌塈纪济済濟祭偈哜嚌彐璾紒諅', + jìn:'近进浸晋烬靳荩噤缙妗赆觐僸凚嚍墐壗嬧搢枃晉殣浕溍濅濜煡燼瑨璶盡祲縉藎覲賮贐進齽尽劲劤勁伒唫寖歏', + jìng:'净淨凈瀞竟静敬镜竞径境痉靖獍弪婧胫迳俓傹妌婙弳徑梷桱曔浄痙竸競竫莖誩踁脛逕鏡靚靜鵛靓竧', + jí:'皀卙堲伋及急即极级吉汲嫉棘辑籍集疾戢笈蒺瘠佶楫蕺殛岌亼偮卽叝塉姞嶯彶忣愱揤槉極檝湒潗皍箿級膌艥蕀蝍螏襋觙谻蹐躤踖轚輯郆銡鍓鏶雧霵齎亽亟焏楖濈耤趌磼', + jù:'烥巨具距锯剧拒惧聚俱踞炬倨醵屦犋窭飓遽倶讵钜劇勮埧姖壉埾岠屨愳懅拠懼怇昛歫洰澽秬窶簴粔耟虡豦詎蚷躆邭鉅鐻駏颶鮔句袓据據鋸苣寠貗', + jùn:'浚濬俊棞峻竣骏郡儁捃呁埈寯懏晙燇珺畯箟葰蜠餕馂陖駿鵔鵕鵘攟賐隽雋攈箘', + jú:'局菊橘侷婅巈挶椈泦淗湨焗狊犑粷蘜趜跼輂郹蹫閰駶驧鵙鵴鼳鶪鼰繘', + jī:'庴槣几幾机鸡积激基肌姬饥击圾箕讥畸墼齑屐嵇矶笄剞叽跻唧畿玑羁赍芨犄乩刉刏僟喞嘰嗘嵆撃擊枅機毄樭璣癪磯積筓簊羇羈耭虀覉覊譤譏賫賷躸踑銈躋錤鑇鑙鐖隮雞鞿韲飢饑鳮鶏鸄鷄鹡鶺齏朞魕緁缉緝稽咭櫅禨稘觭綨', + jīn:'矜矝今斤金筋津巾襟衿堇堻惍琻璡琎珒砛荕觔釒釿钅鹶黅禁紟仐', + jīng:'葏经京惊精荆晶粳茎鲸睛兢腈菁旌泾亰坕坙婛旍橸涇猄秔稉経聙經荊鶁鯨驚麖鶄麠鼱綡巠', + jū:'苴抅泃鮈居鞠驹狙疽裾锔椐琚掬雎鞫凥匊娵婮崌梮檋毩毱涺砠腒罝艍蜛諊跔踘躹陱駒鴡鶋拘岨眗跙鋦', + jūn:'君军均钧皲桾汮皹碅皸莙蚐袀覠軍鈞銁銞鍕鮶鲪麏麕頵菌麇姰', + jǐ:'挤己脊戟虮嵴掎麂丮妀撠擠橶泲犱蟣魢鱾穖', + jǐn:'仅僅嫤紧锦谨瑾馑槿卺儘侭厪巹漌緊菫蓳謹錦饉廑', + jǐng:'丼頸澋井警肼阱刭憬儆坓剄宑幜暻汬汫璄璟璥穽蟼頚殌颈景憼', + jǔ:'枸举矩龃榘踽莒榉弆挙擧椇櫸欅筥聥舉蒟襷齟沮咀', + kuà:'挎趶跨胯骻', + kuài:'哙噲獪巜块快筷侩郐狯脍儈凷圦塊廥旝糩膾鄶鱠鲙欳浍澮墤', + kuàng:'矌爌矿框况旷眶邝纩贶圹岲壙懬昿曠況眖砿穬絋礦絖纊貺軦鉱鋛鑛黋鄺', + kuáng:'狂诳狅誑軖軠鵟忹抂', + kuì:'媿膭謉嘳喟蕢愧馈愦聩篑嬇憒籄簣聵聭餽饋匱匮溃殨潰蒉尯', + kuí:'睽騤骙魁葵奎喹逵暌揆馗蝰夔巙戣晆楑楏櫆藈蘷虁躨鍨鄈鍷頯犪', + kuò:'括扩擴萿鬠廓蛞拡濶阔筈葀霩闊鞹韕頢鞟挄髺', + kuā:'姱夸誇咵舿', + kuān:'髋寛寬宽髖鑧臗', + kuāng:'硄筐匡诓哐劻匩恇洭誆筺邼軭', + kuī:'顝亏窥盔岿刲巋窺聧虧闚悝', + kuǎ:'侉垮銙', + kuǎi:'蒯擓', + kuǎn:'窾窽梡款欵歀', + kuǎng:'夼儣懭', + kuǐ:'傀跬煃蹞頍磈', + kài:'欬忾愾勓烗炌鎎', + kàn:'阚鬫瞰墈崁矙磡衎闞看', + kàng:'亢伉抗炕钪囥匟鈧犺邟闶', + kào:'靠犒铐鮳銬鯌鲓', + káng:'扛', + kè:'峇錁锞艐衉溘克刻课客恪缂氪骒勀勊愙堁娔碦緙課騍礊愘', + kèn:'裉掯褃硍', + ké:'咳殻壳殼揢翗', + kòng:'控鞚', + kòu:'瞉怐扣蔻寇冦筘叩宼敂窛簆蔲釦鷇滱', + kù:'焅廤裤库酷喾绔俈嚳庫瘔絝袴褲秙', + kùn:'困涃睏', + kā:'咖喀', + kāi:'揩开锎奒鐦開', + kān:'堪刊龛勘戡栞龕嵁', + kāng:'忼粇慷康糠嫝嵻槺漮砊穅躿鱇鏮閌', + kāo:'尻髛嵪', + kē:'匼搕牱頦颏蚵稞棵科颗柯磕蝌轲窠钶珂瞌髁疴嵙樖牁榼犐礚萪薖趷鈳顆醘嗑苛坷軻痾砢', + kēi:'剋尅', + kēng:'阬坑劥铿牼硁硜誙銵鍞鏗妔摼挳硻', + kě:'可渇渴岢炣敤嵑嶱', + kěn:'肯啃恳垦墾懇豤肎肻錹貇', + kōng:'空倥悾崆埪箜硿躻錓鵼涳', + kōu:'抠芤眍剾彄摳瞘', + kū:'枯哭窟刳骷堀圐桍矻跍鮬郀', + kūn:'錕锟昆坤髡琨醌鲲堃堒崑晜潉焜熴猑瑻崐菎蜫裈裩褌騉髠髨鯤鵾鶤鹍', + kǎ:'咯胩佧咔垰裃鉲', + kǎi:'剴剀鍇锴凯慨垲铠恺蒈凱塏愷暟輆鎧闓闿颽嵦嘅楷', + kǎn:'欿砍坎偘莰侃惂冚輡轗顑凵歁竷', + kǎo:'考烤拷栲攷丂洘', + kǒng:'孔恐', + kǒu:'口劶', + kǔ:'苦狜楛', + kǔn:'捆梱阃悃壸壼硱祵稇稛綑裍閸閫', + la:'鞡', + lei:'嘞', + li:'哩', + liàn:'錬鍊湅煉炼练恋链殓潋僆楝堜媡戀殮澰瀲瑓練纞萰鏈鰊', + liàng:'倞哴悢亮辆晾谅喨湸諒輌輛鍄', + liào:'料撂廖尥镣尦炓窷鐐', + lián:'帘涟漣莲联连怜廉蠊镰鲢奁臁濂裢亷劆匲嗹噒奩匳嫾憐濓熑燫籢簾籨縺聨翴聫聮聯蓮螊覝褳薕謰蹥鎌連鐮鬑鰱瀮慩梿槤櫣溓磏', + liáng:'俍粮良梁墚椋粱樑糧輬辌踉凉量涼駺', + liáo:'嵺僚橑獠聊疗辽寥鹩寮缭嫽嘹尞屪嶚嶛廫憀敹暸璙療竂簝膋繚膫蟟豂賿蹘遼飉鷯髎藔燎爎爒漻', + liè:'儠鱲列捩栵猎劣烈埒鬣趔躐冽劽洌埓姴巤挒浖烮煭犣猟聗獵脟蛚迾颲鮤鬛鴷茢擸裂哷', + liù:'飂六馏遛鹨塯廇磟翏雡霤餾鬸鷚', + liú:'硫蟉鏐镠流留刘瘤榴琉鎏镏浏旒骝嚠劉媹嵧旈橊瑠璢畱畄瀏瑬疁癅蒥蓅裗鐂飀飗駠駵飅驑騮鶹鰡鹠麍懰藰斿磂鎦', + liāo:'撩蹽', + liě:'咧毟挘', + liū:'溜澑熘蹓', + liǎ:'俩倆', + liǎn:'裣襝脸敛琏蔹嬚斂羷璉臉蘞蘝鄻歛摙', + liǎng:'脼两魉両兩唡啢掚緉蜽裲魎', + liǎo:'蓼了钌瞭釕憭鄝镽曢', + liǔ:'柳绺锍嬼栁桞橮桺熮珋罶羀綹鋶', + luàn:'乱亂釠', + luán:'脔娈孌挛攣滦峦孪栾銮鸾圝圞孿奱曫巒癵癴欒羉灤臠虊鵉鑾鸞灓', + luò:'詻鵅駱骆珞洛荦雒摞峈犖笿纙洜硌鮥络絡漯濼泺硦', + luó:'玀罗锣骡箩螺萝逻椤脶镙儸猡攞欏籮羅腡覼蘿邏饠鑼鸁鏍騾驘囖覶', + luō:'捋啰囉頱', + luǎn:'卵', + luǒ:'蠃裸倮瘰剆曪癳臝蓏躶', + là:'臈蜡辣瘌揧楋溂瓎翋臘蝋蝲辢鑞蠟镴鬎鯻腊落剌揦攋櫴爉', + lài:'鵣癩癞赖濑籁赉唻睐瀬瀨籟睞藾賚賴顂頼徕', + làn:'嚂滥濫烂燗爁爤瓓爛糷钄', + làng:'浪蒗阆埌閬莨', + lào:'唠嘮憦烙涝酪耢嗠橯嫪澇耮軂躼', + lá:'嚹旯磖', + lái:'来莱崃涞铼俫倈來崍庲梾棶猍筙琜箂淶萊逨郲騋錸鶆鯠麳婡徠', + lán:'燷蘫蓝兰拦篮栏谰婪澜岚褴斓镧儖囒阑幱嵐攔斕欗欄灆瀾灡燣璼籣籃繿葻襕藍蘭襽襴襤讕譋躝鑭闌韊啉惏懢', + láng:'狼廊稂琅螂榔锒勆嫏桹樃欴瑯硠艆蓈蜋躴郒郞鎯鋃斏郎筤', + láo:'牢劳铹醪僗崂痨労哰勞憥嶗朥浶癆窂簩顟鐒髝磱蟧', + lè:'扐艻鳓仂泐叻忇氻玏砳簕阞韷餎鰳鱳竻乐楽勒樂', + lèi:'肋类泪酹涙淚禷纇蘱銇錑頛頪颣類', + lèng:'踜倰', + léi:'累礧雷镭缧羸嫘儽檑欙瓃畾縲纝罍纍蔂蘲虆轠鐳鑘靁鱩鼺擂攂樏櫑礌', + léng:'唥棱', + lì:'皪莉厲脷力立例利历砾傈荔俐痢粒吏沥栗励厉笠坜苈蜊粝呖枥砺篥猁疬溧戾唳轹詈俪雳莅蛎儮凓儷厤勵叓唎囇塛嚦厯娳壢婯岦屴悧悷搮慄暦曞朸栃栛曆檪櫔欐櫪歴沴歷涖濿瀝犡珕爏瑮瓑瓥癧盭瓅砅磿礫礰秝禲礪糲茘蒚蒞藶蛠蚸蜧蝷蠇蠣赲讈轣轢酈鉝靋靂鬁鴗鳨鷅麜浰睙隶隷隸苙砬丽郦跞攊躒栎櫟疠癘巁棙爄綟擽攭攦觻', + lìn:'膦赁蔺吝躏悋恡橉甐焛藺蹸躙賃躪轥閵', + lìng:'另炩蘦靈', + lí:'厘离離驪骊黧梨漓狸璃篱黎鹂犁缡蓠嫠藜鲡罹喱刕剓剺劙嚟囄孷廲悡梸棃灕犂琍瓈盠睝穲竰筣籬縭糎艃荲菞蔾蘺蟍蠫褵謧蟸貍醨鋫錅鏫鑗鯏鯬鵹鱺鸝樆邌釐孋麗斄纚', + lín:'綝瞵林临邻磷鳞琳霖遴嶙粼麟辚壣崊斴晽暽潾瀶璘燐碄粦繗翷臨轔鏻鄰隣驎麐鱗阾冧淋獜疄厸箖', + líng:'令苓零魿铃玲灵龄凌陵羚菱伶翎绫酃瓴蛉泠呤棂鲮聆囹柃刢坽姈婈孁夌彾掕昤朎櫺淩澪欞燯爧狑琌砱祾秢竛紷皊舲綾笭蓤蕶衑蔆裬詅跉軨輘醽錂閝鈴霊霝霛駖鸰鯪鹷霗麢齢齡鴒龗羐崚', + lòng:'哢梇贚徿', + lòu:'漏陋镂瘘屚瘻瘺鏤露', + lóng:'靇龙隆聋咙窿胧珑栊砻癃茏嚨巃嶐巄昽曨槞朧湰櫳滝漋爖矓瓏礲礱竜眬聾蠬蘢襱豅蠪鏧鑨霳驡鸗龒笼篭籠躘龓龍泷瀧尨', + lóu:'蒌蔞楼娄蝼髅婁耧廔溇樓漊熡艛耬謱螻遱鞻軁髏喽嘍慺鷜瞜', + lù:'熝鏕膔蔍逯樚輅辂穋僇陆陸录路鹿戮赂潞禄麓渌簏辘漉璐鹭侓勎勠塶坴圥峍廘娽彔摝椂淕淥琭甪盝睩硉稑祿簶箓簬籙簵粶菉蕗螰虂踛賂蹗轆醁趢錄録錴鏴騄騼鯥鴼鵦鵱鷺剹碌', + lùn:'论論溣', + lú:'璷芦卢盧炉颅庐栌泸轳鲈垆胪鸬舻嚧壚廬枦櫨瀘獹爐玈瓐矑籚罏纑舮艫蘆臚蠦轤鈩顱髗魲鑪鱸鸕黸曥馿攎', + lún:'錀沦淪轮伦仑囵圇侖婨倫崘崙棆磮腀菕蜦踚陯鯩輪纶綸芲碖耣', + lüè:'略掠锊畧圙稤鋢鋝寽', + lā:'拉啦垃邋柆菈搚', + lāng:'啷', + lāo:'捞撈粩', + lěi:'垒蕾儡磊诔耒傫塁厽壨壘櫐灅癗礨矋蕌藟蘽蠝讄誄鑸鸓洡磥絫', + lěng:'冷', + līn:'拎', + lū:'撸噜嚕擼謢', + lūn:'抡掄', + lǎ:'喇藞', + lǎi:'襰', + lǎn:'懶揽懒缆览榄罱漤壈嬾孄孏擥攬浨欖灠覧覽纜醂顲囕爦', + lǎng:'朗塱崀朖朤烺蓢誏', + lǎo:'荖狫老佬铑栳恅咾珯硓蛯轑銠鮱耂潦', + lǐ:'豊里李理礼鲤鳢锂澧蠡醴逦俚娌峛峲欚浬禮粴裏裡邐鋰鯉鱱鱧峢', + lǐn:'癛癝廩廪懔凛檩僯凜撛懍檁澟亃菻', + lǐng:'领嶺領岭岺袊', + lǒng:'拢垄陇垅壠壟攏竉隴儱', + lǒu:'篓簍嵝塿嶁甊搂摟', + lǔ:'鲁卤虏掳氇橹镥塷擄樐氌櫓澛滷瀂硵磠艣艪蓾虜鏀鐪鑥魯鹵穞', + lǔn:'埨稐惀', + lǘ:'氀膢驴榈闾櫚藘閭驢', + lǚ:'僂偻挔捛铝屡吕缕侣履旅膂褛稆儢侶屢呂焒梠祣穭絽縷郘鋁膐褸', + lǜ:'虑滤濾膟律氯勴垏嵂慮爈箻繂綠葎鑢櫖绿緑', + m:'呣', + miàn:'面糆靣麫麪麺麵', + miào:'庙妙庿玅廟竗', + mián:'宀绵棉眠婂嬵檰櫋矈矊緜綿芇矏蝒杣臱媔', + miáo:'描苗瞄媌嫹鹋鶓緢', + miè:'鴓礣鑖灭篾蠛幭懱搣蔑滅薎衊鱴烕櫗瀎', + miù:'谬謬', + miāo:'喵', + miē:'孭咩吀哶乜', + miǎn:'睌免缅冕勉娩腼湎眄偭丏沔勔喕愐汅緬葂鮸靦絻渑澠', + miǎo:'秒藐眇渺缈淼杪邈篎緲劰', + mà:'骂唛傌嘜睰祃禡罵閁鬕駡杩榪', + mài:'卖迈麦劢佅勱売脈衇邁霡霢麥賣脉', + màn:'慢漫曼幔墁熳缦镘僈嫚澷獌蔄蘰縵鄤鏝蔓槾', + mào:'冒帽貌茂贸耄懋瞀袤瑁冃冐媢愗暓毷皃眊萺覒蝐貿鄚鄮柕', + má:'痳吗嗎嘛麻犘痲蔴蟇蟆', + mái:'霾埋薶', + mán:'樠蛮馒谩鳗姏慲蠻謾鬗饅鰻鬘瞒瞞鞔悗摱', + máng:'蛖茫芒忙盲硭邙吂娏厖哤恾杗杧浝汒牻笀痝蘉釯鋩铓駹庬狵盳', + máo:'氂毛矛锚茅茆蝥髦牦蟊枆渵楙罞軞鉾酕鶜錨犛旄芼堥髳', + mè:'嚰濹', + mèi:'沬妹寐昧媚袂魅抺煝眛痗睸祙篃跊蝞鬽旀嚜韎', + mèn:'闷悶焖懑懣暪燜', + mèng:'癦梦孟夣夢霥懜', + méi:'坆没沒酶枚霉煤玫梅眉媒嵋猸湄鹛莓镅楣堳塺攗栂楳槑徾湈珻瑂睂脄禖腜脢葿苺郿鎇鶥黴鋂', + mén:'门们扪钔們捫璊菛虋鍆閅門玧穈', + méng:'氓朦甿鸏鹲霿盟萌檬礞甍儚虻艨幪曚橗氋溕獴濛莔蕄蝱鄳鄸靀顭饛鯍瞢懞矒', + mì:'秘泌祕宓沕密蜜觅幂汨谧嘧冖冪宻塓峚幎幦榓樒櫁淧滵漞濗熐羃蔤覔覛覓謐鼏怽糸簚', + mìng:'命掵椧', + mí:'靡谜蘪迷醚蘼縻麋祢猕冞擟瀰爢禰獼蒾藌袮詸醾謎醿釄鸍镾麊麛麿糜弥彌戂攠瓕', + mín:'緍緡缗民珉苠岷垊姄崏慜捪旻旼琘琝瑉盿砇碈痻罠鈱錉鍲鴖怋玟', + míng:'嫇明瞑溟蓂冥名铭螟暝茗鸣朙榠洺猽眀眳覭銘鳴詺鄍', + mò:'蓦貊驀獏沫墨眽末默陌漠寞秣殁镆瘼貘茉耱嗼圽塻妺嫼帞昩枺歿爅皌眿瞐瞙砞礳纆莈藦蛨蟔絈貃銆靺鏌魩黙眜莫帓歾', + mó:'嬷尛嬤劘擵膜魔摹蘑嫫馍谟橅糢謩謨饝饃髍魹摩麼麽庅磨模', + móu:'缪繆侔蛑踎谋鍪劺眸恈謀鴾麰牟', + mù:'募幕毣暯艒木目牧墓穆暮慕睦钼沐凩仫苜幙楘慔炑蚞狇雮莯鉬霂坶縸鞪', + mú:'毪氁', + mā:'妈媽嫲', + mān:'颟顢', + māng:'牤', + māo:'猫貓', + mē:'嚒', + mēn:'椚', + mēng:'蒙掹擝矇', + měi:'羙每镁美浼凂媄媺嬍嵄挴毎渼燘躾鎂黣', + měng:'猛锰勐蜢懵蠓艋冡錳鯭鼆', + mī:'咪眯瞇', + mō:'摸嚤', + mōu:'哞', + mǎ:'马码玛犸獁溤瑪碼遤鎷馬鰢鷌蚂螞', + mǎi:'买荬嘪蕒買鷶', + mǎn:'满螨屘満滿襔蟎鏋娨矕', + mǎng:'硥莽漭壾茻蠎莾蟒', + mǎo:'泖鉚铆卯昴冇峁戼笷蓩夘', + mǐ:'沵米弭芈脒敉侎孊洣渳灖粎羋葞蔝銤濔', + mǐn:'愍敃惽泯蠠抿敏闽皿悯闵鳘僶冺刡勄敯憫潣笢笽簢閔閩鰵湣黽黾忞忟暋', + mǐng:'佲凕姳慏酩', + mǒ:'抹懡', + mǒu:'某', + mǔ:'畂母亩牡拇姆峔牳畆畒畮畞畝砪胟踇鉧姥', + niàn:'唸埝念廿卄艌惗', + niào:'尿脲', + nián:'年黏鲶鲇哖秊秥鮎鯰鵇姩', + niáng:'孃', + niè:'蘖湼籋痆鑈镍聂孽涅镊啮陧嗫蹑臬颞噛嚙囁囓圼孼嵲嶭巕帇敜枿槷篞櫱糱糵聶臲蠥讘踂踙踗躡錜鎳钀鑷闑隉齧顳摰菍', + nié:'苶', + niú:'汼牜牛', + niān:'拈蔫', + niē:'捏揑', + niū:'妞', + niǎn:'蹍焾撵碾辇撚涊攆簐蹨躎輦淰捻', + niǎo:'鳥鸟茑嬲嫋嬝蔦袅裊褭樢', + niǔ:'扭鈕钮纽狃忸炄莥靵紐杻', + nuán:'奻', + nuò:'蹃懦糯诺锘搦愞懧掿榒稬穤糑糥逽諾鍩喏', + nuó:'挪傩儺梛橠', + nuǎn:'暖煖煗餪渜', + nà:'貀郍纳钠衲捺肭笝納蒳豽軜鈉靹魶袦呐吶那娜妠', + nài:'耐萘奈柰鼐渿褦錼螚', + nàn:'婻', + nàng:'儾齉', + nào:'淖臑闹閙鬧', + ná:'拿镎嗱拏鎿搻', + nái:'孻腉', + nán:'南男楠侽喃娚抩暔枏柟畘莮遖难難諵', + náng:'囊馕乪嚢欜蠰饢', + náo:'碙呶詉铙挠猱蛲硇夒峱嶩巎撓譊蟯鐃憹怓獶獿', + nè:'疒讷眲訥抐', + nèi:'氞內氝錗内', + nèn:'嫩嫰恁', + néng:'能', + nì:'屰氼腻逆匿昵睨堄嫟嬺愵惄暱眤胒縌膩誽溺', + nìng:'濘泞佞侫澝倿', + ní:'埿倪霓铌尼猊坭怩鲵屔淣籾蚭觬蜺貎跜輗郳鈮馜齯鯢麑聣臡呢泥秜婗棿', + nín:'囜您脌', + níng:'柠凝狞咛儜聍嬣嚀橣檸獰聹鑏薴鬡鸋宁拧擰寍寕寗甯寜寧', + nòng:'弄挊挵齈癑', + nòu:'鎒鐞耨槈檽獳', + nóng:'哝噥譨鬞檂农浓脓侬儂欁禯濃秾蕽膿襛辳穠農醲燶', + nóu:'羺', + nù:'搙怒傉', + nú:'奴驽孥笯駑伮', + nún:'黁', + nüè:'婩硸虐疟瘧', + nān:'囡', + nāng:'囔', + nāo:'孬', + něi:'娞馁脮腇鮾餒鯘', + nī:'妮', + nǎ:'哪乸雫', + nǎi:'乃嬭奶氖艿倷廼疓迺釢', + nǎn:'赧蝻腩戁揇湳煵萳', + nǎng:'曩攮擃灢', + nǎo:'脑恼垴匘瑙堖嫐悩惱碯脳腦', + nǐ:'儗柅聻檷妳掜你拟伱儞旎孴晲擬狔苨薿隬伲抳', + nǐn:'拰', + nǐng:'矃', + nǒng:'繷', + nǔ:'努胬弩砮', + nǚ:'女钕籹釹', + nǜ:'沑衄恧衂朒', + o:'筽', + piàn:'片骗騗魸騙', + piào:'骠僄徱驃鰾票', + pián:'跰骈蹁胼楩腁賆騈駢骿', + piáo:'嫖瓢薸闝', + piè:'嫳', + piān:'鶣篇偏翩囨犏媥楄鍂', + piāo:'剽犥飘螵勡嘌慓旚翲飃魒飄漂彯', + piē:'瞥撆氕暼撇覕', + piě:'苤丿鐅', + piǎn:'谝覑貵諞', + piǎo:'殍瞟皫醥顠篻缥縹', + pà:'怕帕袙帊', + pài:'湃派哌沠蒎鎃渒', + pàn:'拚袢盼肨判畔叛胖襻泮冸沜溿炍牉詊鋬鑻頖鵥聁', + pàng:'炐眫', + pào:'砲靤疱奅礟皰麭礮泡', + pá:'杷爬琶筢掱潖', + pái:'排棑箄牌徘俳犤猅輫簰簲', + pán:'搫柈跘磻蟠縏蹒蹣盘磐爿媻幋槃洀瀊盤蒰鎜鞶丬', + páng:'嫎徬螃鰟鳑舽逄厐庞龐龎旁彷', + páo:'刨炮袍咆狍庖匏垉爮褜軳鞄麅麃炰', + pèi:'犻配佩沛帔旆霈辔姵伂斾珮蓜浿馷轡', + pèn:'喯', + pèng:'踫碰掽椪槰', + péi:'裵裴錇锫陪赔培毰阫賠', + pén:'葐盆湓瓫', + péng:'彭騯傰錋捀蘕鵬鹏袶棚蓬朋硼澎篷蟛膨倗塜塳憉弸椖樥稝纄竼芃蟚輣韸韼髼鬅鑝鬔堋熢莑篣', + pì:'媲鸊屁僻譬甓嫓澼疈闢鷿稫揊淠潎', + pìn:'汖聘牝朩', + pí:'埤崥枇腗脾魮鲏鮍蜱皮琵毗啤疲貔郫鼙罴蚍壀毘焷篺膍蚽螷羆蠯豼鈹阰隦鵧笓肶蚾铍', + pín:'蠙贫嫔颦嚬玭嬪矉薲貧顰娦频琕蘋', + píng:'平荓輧軿瓶评萍坪凭呯凴枰鲆塀岼帡帲幈慿洴憑焩甁玶竮箳簈缾蚲蛢蓱郱評鮃屏檘淜胓苹', + pò:'哱魄湐昢破粕珀岶敀洦烞砶蒪奤迫廹', + pó:'蔢嚩皤鄱婆櫇嘙', + póu:'裒抔箁垺抙捊', + pù:'瀑曝舗舖', + pú:'菩葡蒲僕獛莆匍濮镤璞圤墣瞨穙菐蒱贌酺鏷纀', + pā:'皅苩趴啪妑葩舥', + pāi:'拍', + pān:'潘萠攀眅', + pāng:'雱乓滂胮膖霶', + pāo:'抛脬拋萢', + pēi:'衃呸胚醅怌肧', + pēn:'喷噴歕', + pēng:'抨駍砰烹剻嘭匉怦恲梈軯泙硑磞閛', + pěi:'俖', + pěn:'呠翸', + pěng:'捧淎皏', + pī:'錍鈚陴坯批披霹砒丕邳噼伾伓憵岯炋狉狓磇礕秛秠礔耚豾鉟錃銔駓髬魾悂劈旇枈紕纰翍抷釽', + pīn:'砏拼姘礗穦驞馪', + pīng:'娉乒俜涄甹砯聠艵頩', + pō:'泼潑頗颇坡钋岥溌酦鏺釙醗醱', + pōu:'娝剖', + pū:'撲陠攵扑攴噗潽炇鯆铺痡鋪仆', + pǎn:'坢', + pǎng:'耪覫', + pǎo:'跑', + pǐ:'諀吡仳庀匹痞癖圮噽嚭脴苉銢鴄擗嶏疋', + pǐn:'品榀', + pǐng:'屛', + pǒ:'箥笸叵钷尀駊鉕', + pǒu:'婄掊咅哣犃', + pǔ:'埔擈溥谱圃浦镨普氆蹼圑暜檏樸烳諩譜鐠朴', + qià:'髂洽胢恰冾圶帢殎硈', + qiàn:'嬱欠歉倩芡茜俔椠儙伣刋壍悓棈槧皘篏篟縴蔳蒨輤嵌傔堑塹慊綪', + qiàng:'炝唴熗羻', + qiào:'撽撬窍峭诮僺竅誚躈陗鞩韒髚鞘俏', + qián:'鉗钳乹亁鈐钤偂前葥銭錢钱黚仱潜黔箝掮虔墘媊岒拑歬榩橬濳灊潛軡鎆騚騝鰬乾揵荨蕁忴扲羬', + qiáng:'强強彊蔃墙蔷樯嫱墻嬙漒檣牆艢蘠廧薔', + qiáo:'趫乔侨僑嫶櫵橋蕎鞒鞽桥瞧荞樵谯憔槗犞硚礄荍藮譙鐈顦喬翘嘺翹墧癄睄菬', + qiè:'淁挈窃怯惬锲妾匧厒箧悏穕笡竊籡篋愜踥鍥鯜洯趄蛪郄朅', + qié:'伽茄癿聺', + qióng:'蛩舼宆穹跫穷琼邛茕筇儝銎卭惸桏焪焭橩憌熍煢睘瓊竆笻藭藑窮蛬赹瞏璚瓗', + qiú:'醔朹芁蝤訄頄求球泅囚酋裘巯逑俅虬赇犰鼽遒叴唒崷巰扏梂殏毬汓浗煪玌璆皳盚紌絿湭莍虯蛷觓肍觩訅逎賕釚釻銶鮂鯄鰽渞', + qiā:'擖掐葜', + qiān:'欦騫骞千牵签钎谦扦迁仟岍褰搴愆悭芊佥阡僉奷孯圲慳拪撁攐攑攓杄櫏汘汧竏牽籖籤簽粁茾蚈諐谸謙鈆遷釺鉛韆顅鬜鬝鏲鵮鹐婜厱铅圱掔檶臤', + qiāng:'瑲篬玱呛嗆戧跄戗抢搶摤槍腔枪羌蜣戕锖锵啌嗴嶈斨溬猐牄獇羗謒蹡蹌鏘鎗椌羫', + qiāo:'墽磽鐰勪蹻繑敲锹跷硗劁墝帩橇幧毃燆趬踍蹺郻鄡鄥頝鍫鍬骹缲繰', + qiē:'切苆', + qiě:'且', + qiū:'趥萩秋丘邱楸蚯鳅丠坵媝恘秌穐篍緧蘒蝵蟗蠤鞦鞧鰌鰍鶖鹙龝恷蓲湫湬', + qiǎ:'峠拤跒酠鞐卡', + qiǎn:'淺谴遣缱肷繾膁蜸譴鑓浅槏', + qiǎng:'羥羟襁镪墏繈繦鏹', + qiǎo:'釥巧愀髜悄', + qiǔ:'糗搝', + quàn:'韏劝勧勸牶券', + quán:'輇辁荃醛權蠸埢踡蜷啳权拳全颧泉痊筌诠鬈姾铨峑巏搼佺権洤湶楾牷犈硂縓葲觠瑔跧闎銓詮駩顴鰁騡鳈齤婘恮絟', + què:'棤搉却卻闋阕琷塙确鹊崅榷悫愨燩慤皵礭確鵲礐趞傕埆闕硞雀碻碏', + qué:'瘸', + quān:'圈圏棬奍箞悛鐉椦', + quē:'炔缺缼蒛阙', + quǎn:'犮犭犬绻畎烇綣虇', + qì:'摖呮矵汽蟿泣气器弃迄讫憩汔碛葺咠唭噐夡憇暣棄欫気氣湇湆炁甈盵碶磜磧罊芞訖藒鐑愒契砌栔槭滊磩', + qìn:'沁吣吢唚揿抋搇撳瀙菣藽', + qìng:'儬濪靘庆慶磬凊罄櫦碃箐殸綮掅', + qí:'奇其丌隑芪萕祈棋璂萁蕲蘄褀鄿騎骑頎颀祁歧畦脐崎旗祺骐岐鳍蛴綦亓琪麒蜞琦淇剘埼岓嵜愭掑斉斊旂棊檱櫀濝猉玂疧碕碁禥簱簯籏粸竒綥肵艩藄臍蚑蜝蚚螧蠐軝錡锜釮騹騏鬿鬐鯕鲯鰭鵸麡鶀陭齐帺懠跂齊亝圻耆忯蚔', + qín:'肣埐嶜斳勤擒琴芹秦禽芩嗪螓檎噙懃懄庈捦珡琹瘽澿耹菦鈙蠄靲雂鳹鵭鈫慬菳蚙嫀', + qíng:'擏殑檠葝剠情晴擎氰黥勍夝暒棾樈甠硘啨', + qù:'耝趣去阒刞厺迲閴闃麮鼁觑覻覷', + qú:'朐胊軥鴝鸜鸲爠籧蘧欔蠼蕖磲劬癯衢璩氍佢戵斪欋淭璖灈絇菃臞葋蟝蠷衐鑺躣鼩瞿忂渠螶翑', + qún:'宭群帬峮羣裠裙', + qī:'墄戚踦七漆柒欺凄沏桤萋嘁欹倛僛娸悽慼慽捿桼棲榿淒紪緀褄諆迉郪鏚霋魌鶈期敧攲妻栖傶', + qīn:'兓侵钦衾媇嵚嶔欽誛駸顉鮼骎嵰親亲寴綅', + qīng:'蜻靑青錆轻清氢倾卿圊傾鲭寈淸氫軽郬輕鯖鑋埥', + qū:'趍詘诎坥蛆屈鶌呿敺佉驱躯祛麴黢蛐伹岖匤抾岴憈嶇浀筁粬胠袪阹駆駈軀髷驅魼鰸鱋麹麯煀趋趨区區誳焌曲紶覰', + qūn:'踆囷夋逡', + qǐ:'晵豈起启乞企屺芑杞绮呇唘啔啓婍啟棨玘盀綺諬邔闙岂', + qǐn:'鋟锓寝坅寑寢昑梫笉螼赾', + qǐng:'頃顷请謦苘庼廎檾漀請', + qǔ:'娶取龋竬蝺詓齲竘', + ruán:'堧撋壖', + ruì:'銳鋭锐枘瑞睿芮叡汭蚋蜹', + ruí:'蕤桵甤緌', + ruò:'婼篛箬偌叒弱楉爇焫蒻鄀鰙嵶鶸鰯若渃', + ruó:'挼捼', + ruǎn:'輭腝偄软阮朊瓀瑌礝軟碝媆耎緛', + ruǐ:'蕋蕊壡橤繠蘃蘂', + ràng:'让懹譲讓', + rào:'绕繞遶', + rán:'然燃髯呥嘫蚺繎肰衻袇髥袡蚦', + ráng:'瀼蘘鬤瓤穰禳穣獽躟勷儴', + ráo:'橈桡饶荛襓蕘饒嬈娆', + rè:'热熱', + rèn:'腍认刃韧妊纫饪轫仭衽刄姙屻仞扨牣紝絍纴紉肕訒袵讱認鈓軔靱餁靭飪韌祍杒梕任', + rén:'亻人仁壬忈忎朲秂芢魜鵀銋', + réng:'陾', + rì:'釰釼日馹驲囸鈤衵', + ròng:'穃', + ròu:'譳肉宍', + róng:'肜搑容融绒溶熔荣戎蓉茸榕狨嵘傛蝾媶嫆嬫峵搈曧嶸栄榵毧榮瀜瑢穁烿絨羢茙螎鎔褣镕蠑駥嵤爃縙槦', + róu:'蝚柔糅揉蹂媃鞣渘瑈粈腬瓇煣葇輮鍒騥禸鰇鶔脜厹楺', + rù:'褥縟缛入蓐溽洳嗕媷扖杁鳰', + rùn:'橍润闰潤閠閏', + rú:'濡渪邚嬬如儒茹蠕孺襦铷嚅颥侞帤曘薷桇筎繻蕠袽醹銣鱬顬鴑鴽蝡挐蒘', + rún:'瞤', + rě:'惹', + rěn:'忍荏稔栠栣秹綛荵躵棯', + rū:'嶿', + rǎn:'冄冉染苒媣姌珃蒅橪', + rǎng:'攘壤壌爙嚷', + rǎo:'扰隢擾', + rǒng:'軵冗傇宂氄坈', + rǒu:'韖', + rǔ:'擩汝乳辱肗鄏', + san:'壭', + shi:'籂辻', + shuà:'誜', + shuài:'率卛蟀帅帥', + shuàn:'涮腨', + shuàng:'灀', + shuì:'祱睡税帨涗涚裞稅', + shuí:'谁脽誰', + shuò:'鑠铄烁爍朔搠妁槊蒴矟鎙箾獡硕碩欶', + shuā:'唰刷', + shuāi:'衰摔', + shuān:'拴栓闩閂', + shuāng:'双霜孇孀欆礵艭驦騻骦鷞鸘雙鹴', + shuō:'说説說', + shuǎ:'耍', + shuǎi:'甩', + shuǎng:'漺爽塽慡縔鏯', + shuǐ:'氵水氺閖', + shà:'嗄喢唼霎倽歃箑翜翣萐閯啑帹厦廈', + shài:'晒曬', + shàn:'墠嬗蟺贍赡善膳汕缮蟮鄯擅鳝骟讪疝僐墡敾樿椫灗磰繕謆譱訕赸鐥饍鱓騸鱔歚禪扇掞銏', + shàng:'尙尚绱恦丄緔上鞝', + shào:'綤紹绍哨邵劭潲卲袑娋', + shá:'啥', + sháo:'杓勺芍韶玿柖', + shè:'赦渉涉滠灄摂社舍设慑厍麝弽慴厙懾欇涻舎蔎蠂騇設摄攝射韘', + shèn:'胂涁渗滲葚肾慎侺蜃愼昚瘆瘮祳眘脤腎蜄鋠甚', + shèng:'盛晟嵊圣胜剩剰墭勝晠榺橳琞蕂聖貹賸', + shé:'蛇揲舌佘蛥虵', + shén:'鉮神榊鰰', + shéng:'繉繩绳憴縄譝', + shì:'飾餝饰澨適市适示是事室试式士拭誓柿逝势世嗜噬仕释侍恃视铈舐轼贳筮弑亊丗谥冟卋勢呩奭嬕弒恀戺揓昰枾栻烒煶眎眡眂礻睗簭舓襫觢視試諡謚貰軾遾釈鈰鉃釋鉽餙鰘諟崼柹氏莳蒔螫徥忕秲銴', + shí:'石姼蝕十时蚀实埘鲥炻塒実寔實嵵峕旹時榯湜溡祏竍識遈鉐飠鮖饣鰣鼭鼫乭拾什识食', + shòu:'受瘦授兽售寿狩夀绶壽獣痩獸膄綬涭鏉', + shù:'侸術树束述戍墅竖庶恕漱沭腧庻怷樹潄濖竪絉荗蒁虪裋豎鉥錰鏣鶐霔数數术朮澍尌咰捒', + shùn:'顺瞬舜橓瞚蕣鬊順', + shú:'熟赎孰秫塾尗璹贖', + shā:'粆紗纱桬殺乷鎩铩杀砂杉鲨痧裟唦硰猀繺蔱閷魦鯋鯊髿毮沙煞榝樧', + shāi:'筛篩簁籭簛', + shān:'嘇柵脠縿山衫删煽珊芟潸跚傓舢剼刪挻搧圸澘狦檆笘羴羶軕邖閊鯅苫姍姗钐釤膻幓彡痁', + shāng:'伤商墒熵觞殇慯傷滳殤漡蔏螪謪觴鬺禓', + shāo:'捎稍梢烧艄筲弰旓燒焼萷蕱輎髾鮹莦', + shē:'奓賖賒赊奢猞畲檨輋畭畬', + shēn:'鯵鰺鲹身罙糂蔘曑葠伸深申绅砷呻娠诜侁兟堔妽屾峷扟柛燊氠珅甡甧眒穼籶籸罧蓡紳薓裑訷詵駪鯓鵢敒莘姺', + shēng:'声栍生升甥牲笙呏斘昇曻殅泩枡湦焺珄竔聲鉎鍟阩陞鵿陹鼪苼狌', + shě:'捨', + shěn:'沈瀋谂諗宷审審婶矧渖哂嬸弞曋矤瞫覾訠讅谉邥頣魫', + shěng:'省偗眚渻', + shī:'釃酾师虱失狮施湿诗尸鲺蓍呞屍師浉湤溮溼濕瑡獅葹蒒絁蝨褷襹詩邿鉇鍦鯴鰤鳲鳾鸤鶳箷釶', + shōu:'收収', + shū:'跾淑琡樞菽摅攄书输叔梳疏蔬枢抒殊纾舒姝毹殳倏儵倐婌掓書毺瀭焂疎綀紓軗踈輸鄃陎鮛鵨杸橾', + shǎ:'傻儍', + shǎn:'炶煔闪陕晱熌睒覢閃陝', + shǎng:'鋿鏛垧赏晌鑜賞樉贘扄', + shǎo:'少', + shǐ:'使史矢驶始屎豕乨兘宩榁笶鉂駛', + shǒu:'首手守艏垨扌', + shǔ:'暏襡襩蜀鼠黍薯暑曙署潻癙糬薥藷蠴鱪鱰鼡属屬', + shǔn:'楯吮', + suàn:'算蒜筭笇祘', + suì:'繀韢岁碎穗遂隧祟谇邃亗嵗嬘檖旞燧歳歲澻煫璲砕穂禭穟繐繸襚譢誶賥鐆鐩埣睟', + suí:'隋綏绥随瓍遀隨髄', + suò:'溹蜶逤', + suān:'狻酸痠', + suī:'熣浽虽濉荽倠哸夊滖芕荾鞖雖', + suō:'睃簑唆嗍蓑梭桫娑嗦羧傞摍莏簔趖鮻挲莎挱缩縮', + suǎn:'匴', + suǐ:'髓瀡膸', + suǒ:'褨獕乺所锁琐索唢溑暛嗩琑瑣鎻鏁鎖惢鎍', + sà:'颯飒蕯萨脎卅櫒薩鈒隡馺虄摋钑', + sài:'赛僿賽簺', + sàn:'潵散俕閐', + sào:'埽瘙氉矂髞', + sè:'栜色涩瑟啬铯嗇穑懎擌歮渋澁濏濇澀瀒瘷璱穯繬穡譅轖鏼銫飋摵洓歰雭', + sì:'騃鈶洠佀寺四肆饲嗣巳耜驷兕汜泗姒笥祀亖価儩娰孠柶榹涘瀃牭禩泤竢洍肂蕼覗貄鈻釲飤飼駟耛伺枱俟梩似杫', + sòng:'頌颂送宋讼诵鎹訟誦餸', + sòu:'嗽瘶擞擻', + sù:'橚宿愬洬涑溯潚诉素速塑肃粟愫僳簌觫谡夙嗉傃蔌塐嫊憟榡樎樕殐泝溸潥玊珟璛粛縤膆肅藗訴趚謖蹜遬遡鋉驌餗骕鱐鷫鹔梀碿莤', + sú:'俗', + sā:'撒仨', + sāi:'揌塞腮噻嘥毢顋鰓鳃愢毸', + sān:'三叁毵厁弎毶犙毿鬖', + sāng:'桑槡桒丧喪', + sāo:'骚搔鳋缫掻溞騒繅騷鱢鰠螦臊颾', + sē:'閪', + sēn:'槮森襂椮', + sēng:'僧鬙', + sī:'司纟斯撕丝私嘶蛳锶鸶咝厮缌俬澌凘噝媤恖廝楒泀燍禠禗絲糹罳緦蕬虒蜤蟴螄蟖鉰銯鐁颸鍶飔騦鼶鷥厶思磃鋖', + sōng:'松菘淞嵩倯凇崧庺娀憽枀柗枩檧硹梥濍鬆忪', + sōu:'蒐摉搜溲艘嗖飕锼凁廀廋捜馊獀鄋醙颼鎪騪餿摗蓃', + sū:'苏酥稣囌櫯甦窣穌蘓蘇鯂', + sūn:'飱飧荪狲搎槂猻蕵薞蓀孙孫', + sǎ:'灑訯靸洒躠', + sǎi:'嗮', + sǎn:'鏒鏾伞馓傘繖糤饊糁糣糝', + sǎng:'颡嗓磉搡鎟褬顙', + sǎo:'扫掃嫂', + sǐ:'死', + sǒng:'楤傱耸怂竦悚嵷愯慫駷聳', + sǒu:'薮藪叟瞍傁螋叜嗾櫢籔', + sǔn:'损笋榫隼損箰筍鎨簨鶽', + ta:'侤', + tiàn:'掭舚瑱', + tiào:'絩粜糶眺覜趒跳', + tián:'緂塡田甜恬阗畋屇沺湉璳甛畑碵磌胋闐鴫鷆鷏填搷窴菾', + tiáo:'鯈蜩髫笤萔龆鲦迢岧岹樤祒芀蓚蓨鋚鎥鞗齠鰷调苕条條', + tiè:'呫帖餮飻', + tiān:'天添兲婖酟靔靝黇', + tiāo:'佻祧庣旫聎挑恌', + tiē:'贴萜貼怗聑', + tiě:'鐡鐵铁蛈鉄銕驖僣', + tiǎn:'痶舔腆忝殄倎唺悿晪淟睓觍覥賟錪餂琠', + tiǎo:'嬥宨晀朓窱脁誂窕', + tu:'汢', + tuàn:'彖褖湪', + tuán:'團团抟団慱檲摶糰鷒鏄鷻槫剸漙篿', + tuì:'褪退蜕煺娧蛻駾', + tuí:'魋弚颓尵穨蘈蹪隤頽頹頺橔', + tuò:'跅嶞唾柝箨毤毻籜萚蘀拓', + tuó:'沱驮酡橐詑陀驼跎坨佗鸵鼍堶岮砣槖砤碢紽阤陁駞騨驒驝駝鮀鴕鼉鼧駄馱沲媠柁侻狏袉', + tuān:'湍圕煓猯貒', + tuī:'推蓷藬', + tuō:'仛扡拕拖鮵咜脫脱托侂咃汑莌袥託讬飥饦魠沰挩捝乇杔馲涶', + tuǎn:'墥疃畽', + tuǐ:'腿俀蹆骽僓', + tuǒ:'嫷橢妥椭庹楕鰖鵎彵', + tà:'沓嗒搨橽躂踏挞蹋榻遢闼嚃嚺崉毾涾撻澾濌禢誻譶躢蹹錔闒阘遝鞳鞜闥粏狧傝', + tài:'汏汱太泰态酞汰肽冭夳钛忲態溙舦鈦燤', + tàn:'碳叹探炭嘆歎湠舕', + tàng:'趟铴烫燙摥鐋', + tào:'套', + tái:'抬骀炱跆鲐儓坮邰嬯薹擡炲檯籉臺颱鮐箈菭駘台苔旲', + tán:'倓埮坛壇潭燂檀顃谈痰谭锬郯昙墵壜婒墰憛榃曇罈罎藫談譚貚醰錟譠惔醈橝覃', + táng:'闛樘踼堂糖塘搪唐棠螳膛瑭醣溏傏螗啺坣榶漟煻磄篖糃糛膅蓎赯禟鄌鎕隚餹饄鶶橖', + táo:'洮陶逃桃淘萄鼗啕咷祹綯蜪裪绹迯醄鋾鞉鞀饀騊駣匋', + tè:'忑慝忒', + tèng:'霯', + téng:'痋疼藤儯幐誊滕漛籐籘縢腾虅螣邆駦謄驣鰧騰', + tì:'揥鬄倜笹剃替涕嚏惕屉逖悌嚔悐惖戻掦歒殢屜瓋籊薙褅逷髰鬀朑趯', + tí:'徲鶙鶗提渧碮蹏蹄題题罤媞禵褆謕鷤啼鹈缇偍厗嗁崹漽瑅稊蕛緹趧鍗騠鮷鯷鳀鵜睼惿醍绨綈禔', + tíng:'蜓葶停亭庭廷莛霆婷嵉榳楟筳聤蝏諪邒鼮渟閮', + tòng:'衕痛恸憅慟', + tòu:'透', + tóng:'僮潼酮膧峝桐詷铜童彤瞳茼砼仝哃峂佟庝晍曈氃浵獞犝眮秱粡蚒赨鉖鉵餇鮦鲖銅朣橦峒勭烔燑狪同穜', + tóu:'投骰亠頭头', + tù:'兎兔堍迌鵵菟莵', + tú:'捈梌荼涂跿塗腯图途徒屠凃酴図圖圗峹嵞廜悇揬庩瘏筡蒤鈯鍎馟駼鵌鶟鷋鷵瑹稌潳', + tún:'芚忳豚蛌饨臀豘軘霕魨臋鲀黗飩屯坉', + tā:'她塌趿鉈他它溻榙牠祂褟闧铊', + tāi:'胎囼孡', + tān:'啴嘽滩灘摊攤舑贪瘫坍怹擹癱貪潬痑', + tāng:'汤湯羰镗劏嘡薚蝪蹚鞺鼞鏜', + tāo:'夲涛濤轁掏绦饕韬滔嫍幍慆搯弢槄瑫縚絛縧詜謟鞱韜飸叨', + tēng:'膯鼟熥', + tī:'踢鷉剔梯锑銻鷈擿', + tīng:'汀烃烴听厅厛庁廰廳綎耓聴聼聽鞓桯', + tōng:'絧通嗵樋炵蓪痌', + tōu:'鋀偸偷鍮婾媮緰', + tū:'怢宊突秃凸堗嶀捸涋湥痜葖禿鋵鵚鼵', + tūn:'焞吞暾朜噋呑旽涒', + tǎ:'塔鮙鰨鳎獭墖獺', + tǎn:'忐毯坦袒钽嗿憳憻暺璮菼襢醓鉭僋', + tǎng:'倘儻伖躺傥耥戃曭爣矘鎲钂镋淌偒帑', + tǎo:'讨討', + tǐ:'体挮躰軆骵體', + tǐng:'铤鋌町甼娗挺艇侹圢涏烶珽脡誔頲颋梃', + tǒng:'筩筒捅桶统綂統', + tǒu:'斢妵敨紏蘣黈', + tǔ:'土钍圡釷吐唋', + tǔn:'氽', + wa:'瓲', + wà:'袜腽嗢膃襪韤聉', + wài:'夞外顡', + wàn:'瞣輐錽蟃腕卍卐杤脕萬贎鋄鎫薍澫万妧捥贃', + wàng:'迋徍望忘旺妄朢', + wá:'娃', + wán:'汍完頑顽玩丸烷芄纨刓岏忨抏捖琓笂紈翫貦', + wáng:'王亡亾仼兦莣蚟', + wèi:'磑位味餧蜼未喂胃卫魏畏谓蔚慰渭猬軎墛媦懀煟熭犚緭罻苿菋藯蘶螱衞蝟褽衛讏謂讆躗躛轊鏏霨餵饖鮇鳚尉叞', + wèn:'顐问璺妏問揾搵汶莬渂', + wèng:'蕹瓮罋甕齆', + wéi:'桅沩潙违違韋韦矀围唯维惟潍帏闱涠帷嵬壝圍峗峞幃洈湋濰潿溈犩維蓶覹鄬醀鍏闈鮠囗為为喡爲囲圩媁欈琟硙', + wén:'駇文闻蚊雯阌彣炆珳瘒聞芠螡蚉蟁閺闅闦閿馼魰鳼鴍鼤繧纹紋', + wò:'焥硪渥握卧沃幄仴龌偓肟媉楃濣瓁瞃腛臥齷斡捾枂臒', + wù:'蘁鼿齀卼務霚霧勿婺痦阢杌物雾误悟务戊晤坞寤兀骛鋈鹜焐俉奦塢屼岉嵨忢悞悮扤溩熃矹窹粅誤隖靰騖鶩唔芴嵍雺敄旿', + wú:'无無譕毋蟱墲吴芜梧蜈鼯浯呉吳峿橆洖珸璑祦莁茣蕪郚鋙铻鯃鵐鷡鹀吾娪', + wā:'嗗咼呙哇洼蛙瓾挖娲劸屲媧攨溛漥畖穵窊韈窪鼃窐搲', + wāi:'喎歪竵', + wān:'婠弯湾豌蜿剜塆壪帵彎潫睕灣', + wāng:'汪尣尩尪尫', + wēi:'溦微威危巍葳逶隈偎煨薇喴媙嶶愄揋揻椳楲烓燰癓縅葨蜲蝛覣詴隇霺鰃鰄鳂厃嵔', + wēn:'昷温瘟塭榲殟瑥溫豱轀輼辒鎾饂鰛鰮鳁鞰榅', + wēng:'翁嗡聬鎓螉鶲鹟', + wěi:'踓嶉伪僞偽蒍煒屗骩骪骫伟纬萎苇艉鲔娓玮诿洧猥韪痿炜儰偉寪崣徫愇捤暐梶浘渨瑋腲芛緯荱蔿葦諉鍡韑頠韡韙颹鮪瀢濻硊隗椲亹斖撱尾委痏碨', + wěn:'呅稳吻刎紊抆桽穏肳穩脗伆呡', + wěng:'勜蓊塕嵡奣暡瞈攚滃', + wō:'涡渦蝸踒窝蜗莴涹猧窩萵倭唩', + wū:'洿汚汙污屋钨呜乌诬巫邬圬剭嗚弙杇歍烏窏箼誈螐誣鄔鎢鴮鰞', + wǎ:'瓦佤咓砙邷', + wǎi:'崴', + wǎn:'萖晥皖脘晚碗挽婉惋绾琬畹倇唍晩晼梚椀盌綩綰踠鋔輓宛箢菀埦涴', + wǎng:'罓枉罖罒往网辋魍惘罔彺徃棢菵網蛧蝄誷輞暀瀇', + wǒ:'捰婑我婐', + wǔ:'陚五舞捂武侮伍午牾妩怃忤仵迕庑鹉乄倵儛啎娬嫵廡摀憮潕熓玝珷瑦甒碔逜躌鵡瞴娒', + xià:'吓乤夓夏鎼下罅丅圷懗梺疜睱鏬諕', + xiàn:'娊錎糮橌橺涀塪餡馅霰獻莧苋限线现献陷腺宪羡岘僩僴哯垷姭峴撊憲晛瀗現県睍粯絤綫線缐臔羨臽誢豏鋧陥麲鼸埳壏县縣咞', + xiàng:'巷衖曏向象项像橡蟓勨姠嚮嶑珦缿襐鐌項鱌', + xiào:'啸嘨嘯歗笑效哮孝俲効傚嘋咲斅斆涍熽詨誟校恔敩', + xiá:'轄辖暇柙峡霞狭匣侠狎黠硖遐瑕俠敮炠峽烚珨狹祫碬筪舝縖硤翈舺蕸赮鍜鎋陜騢陿魻鶷埉磍', + xián:'湺涎諴醎鹹輱藖闲嫌弦衔咸贤舷痫娴鹇啣娹婱嫺嫻挦撏澖甉癇癎絃胘蛝蚿衘誸贒賢鑦銜閑鷴鷼麙鷳咁瞯稴閒盷嗛伭妶憪礥', + xiáng:'瓨祥翔庠佭栙絴跭詳详', + xiáo:'郩訤淆崤洨誵殽', + xiè:'焎烲屟渫獬繲齛齥僁谢屑卸蟹泻懈械绁廨榭瀣亵榍邂薤燮伳躞偞偰卨噧塮媟夑屧徢暬洩澥灺炨炧瀉爕祄禼糏絏絬紲缷薢纈蠏褉謝褻韰齂齘靾鞢嶰泄緤', + xié:'斜奊鞋脇脋胁脅縀协谐携缬撷偕勰嗋垥協恊愶拹擕旪擷攜熁燲綊緳翓膎蝢衺襭讗諧鞵龤嚡孈挟挾絜劦邪峫瑎', + xiòng:'夐敻詗诇', + xióng:'熋熊雄', + xiù:'峀溴綉绣锈嗅袖秀岫珛琇璓繍繡螑褏褎鏥銹鏽齅嚊', + xiú:'苬', + xiā:'呷虾蝦虲瞎傄煆谺颬鰕閕', + xiān:'銽銛铦掀纎纖杴襳先锨仙籼祆跹酰暹氙仚佡僊僲嘕奾屳廯忺憸珗秈繊苮褼蹮躚鍁韯韱馦鱻鶱攕纤嬐莶薟孅鲜鮮枮', + xiāng:'忀欀鑲镶稥香乡箱厢襄湘骧芗缃葙楿廂瓖膷萫緗薌郷鄊鄕鄉驤鱜麘纕相', + xiāo:'嚣嚻囂硝踃櫹蛸綃绡颵翛揱萧销消宵霄魈骁枵哓逍潇侾枭箫婋宯嘵彇庨歊毊梟灱灲烋焇瀟猇獢痚痟硣窙簘膮虈簫虓蕭蟂蟏蟰蠨髐髇驍鴞銷鴵鷍鸮嘐憢呺藃削穘撨肖', + xiē:'猲蝎揳歇楔娎蠍些', + xiě:'血写冩藛寫', + xiōng:'匂哅兄胸凶汹兇忷恟匈芎胷訩讻詾洶賯', + xiū:'鱃脩咻修羞馐貅髹鸺俢樇庥烌脙臹銝鎀飍髤饈鮴鵂休鏅', + xiǎ:'閜', + xiǎn:'燹险險冼跣显藓蚬猃筅尠尟崄嶮幰攇毨櫶灦烍獫狝獮玁禒箲蘚蜆譣赻鍌韅険顕顯铣銑搟', + xiǎng:'銄想响享飨鲞饷亯晑蠁蚃響餉饗鮝鯗鱶饟', + xiǎo:'皛謏小晓筱暁曉皢筿篠', + xiǒng:'焸焽', + xiǔ:'潃朽滫糔', + xuàn:'眩泫绚楦渲铉碹镟炫怰昡琄縼繏絢蔙衒袨贙颴鉉鏇眴楥', + xuán:'琁玹悬玄漩璇痃嫙暶懸檈璿蜁旋', + xuè:'趐谑瞲坹岤桖瀥狘謔吷', + xué:'壆踅學学穴澩泶乴峃嶨斈燢茓袕鷽鸴觷', + xuān:'軒轩縇宣喧暄儇煊萱揎塇媗谖愃愋昍晅瑄睻矎箮禤翾翧蓒萲蕿藼蘐蝖蠉諠譞諼鍹駽鰚懁梋鋗鞙吅弲', + xuē:'辪靴薛疶蒆辥鞾', + xuě:'雪鳕樰膤艝轌鱈', + xuǎn:'暅烜选選癣癬咺', + xì:'呬阋鬩墍縘舃舄虩细隙饩禊係匸卌屃屭忥怬恄椞潟澙熂犔磶綌绤細蕮衋覤赩趇郤釳隟霼餼黖屓戏戯戲戱系繫欯盻稧闟慀', + xìn:'脪顖孞衅囟伩炘焮舋訫釁阠馸信軐', + xìng:'幸姓性杏悻倖荇婞嬹涬緈臖莕葕', + xí:'喺謵椺席袭习檄媳隰觋嶍漝習蓆襲趘郋鎴霫飁騱騽驨鰼鳛槢蒵薂', + xín:'镡枔襑鐔', + xíng:'郉邢銒鈃钘陘陉硎饧餳型形刑侀哘娙洐蛵鉶铏鋞荥滎', + xù:'畜慉槒絮勖聓卹昫煦蓄续叙婿旭绪序酗恤蓿洫溆伵侐勗垿壻敍朂敘欰殈汿沀潊烅漵烼獝珬盢瞁稸続緖聟續緒藚訹賉頊鱮銊晇怴旴芧藇', + xùn:'巺潠蕈讯训殉迅驯汛逊巽伨徇侚卂噀愻殾狥訊訓訙迿鑂遜顨馴奞稄', + xú:'俆禑徐冔蒣', + xún:'郇旬栒廵巡恂畃寻尋洵循询鲟浔峋荀偱噚揗攳杊桪樳燅燖潯璕珣紃蟳鄩詢鱏鱘灥駨毥', + xī:'娭肸糦饎郗螅昔谿蹊磎析菥犧牺錫锡邜觹觽觿西吸稀溪熄膝息惜嘻夕矽熙悉希晰硒烯汐犀蜥奚浠嬉兮穸翕僖淅舾醯欷皙蟋羲唏曦樨粞鼷熹俙凞卥唽厀嚱噏嬆屖嵠巇徆徯悕惁晞晳桸榽橀氥渓焁焈焟熈熺燨熻爔犠琋瘜睎瞦礂窸緆繥翖肹莃蒠蠵覡譆豨豀豯貕赥鄎酅釸鑴鏭隵餏饻鯑鸂鵗鐊扱忚恓螇歙狶裼傒怸扸暿潝焬煕', + xīn:'昕廞鈊忄訢新心欣薪锌辛忻歆馨鑫俽噺妡嬜惞杺盺邤鋅馫噷芯', + xīng:'箵興星腥惺猩垶曐煋瑆皨篂觪觲謃騂鮏骍鯹兴', + xū:'歘許需戌鑐燸裇蝑綇虚须墟顼胥盱偦媭嬃楈欨歔疞縃蕦虗訏虛諝譃谞驉須鬚魆魖欻砉揟嘘噓吁', + xūn:'焄獯勋埙醺薰曛勲勛勳嚑坃壎壦塤燻矄纁臐薫蘍熏爋', + xǐ:'諰喜矖鉨鉩徙葸屣玺禧蓰壐憙枲橲歖漇璽縰葈蟢謑蹝躧鈢鱚洗憘', + xǐn:'伈', + xǐng:'醒擤睲', + xǔ:'呴许諿糈栩醑诩喣暊珝盨詡鄦姁湑稰', + ye:'亪', + yi:'弬', + yuàn:'掾瑗苑院愿怨噮妴禐衏裫褑願垸夗媛傆', + yuán:'援謜茒园魭円元圆原猿源缘袁垣辕鼋橼爰沅螈塬厡厵圎園媴嫄圓榞榬櫞溒湲猨笎縁羱緣薗蝝蝯褤邧轅邍酛鈨鎱騵鶢鶰黿蒝蚖杬芫员員貟贠', + yuè:'越月跃躍瀹鑰黦阅岳悦粤钺嬳刖樾岄龠恱嶽戉抈捳悅爚玥礿禴篗籆籰蚎籥粵蚏蘥跀軏鈅鉞閱閲鸑鸙妜泧钥', + yuān:'裷悁惌蜎冤渊鸳眢鸢剈囦寃嬽棩渁渆淵渕灁肙葾蒬蜵駌鴛鳶鵷鼘鹓鼝', + yuē:'箹約约啘曰曱矱', + yuě:'哕噦', + yuǎn:'鋺薳远盶逺遠', + yà:'猰亜亚垭埡齾轧冴覀讶砑娅氩迓俹揠劜圔圠婭椻犽氬稏聐襾訝軋挜掗窫', + yàn:'鴳敥彦烻厌厭宴堰验艳雁砚唁焰谚滟焱赝餍谳晏酽偐喭嚥墕妟姲嬊嬿彥暥曕灎灔灩焔灧熖燄牪猒硯艶艷覎觾觃讌讞諺豔豓贋贗軅酀醼釅騐饜験騴驠鬳驗鳫鴈鷃鷰齞曣嚈囐溎醶爓燕隁', + yàng:'样漾恙怏様樣羕詇', + yào:'纅药藥燿艞鼼耀鹞曜熎矅穾窔筄葯薬袎覞詏讑靿鷂獟要', + yá:'崖岈牙芽涯衙蚜琊睚伢厓堐崕漄玡笌齖猚', + yán:'檐蜒欕炏啱喦嵒炎顔颜沿盐言严岩延阎筵闫妍厳塩壛嚴壧娫姸娮嵓巌巖巗揅昖楌櫩狿琂碞簷莚蔅虤訁訮詽讠郔閆閻顏麣鹽埏綖硏研礹', + yáng:'崵瘍劷洋鴹扬杨阳佯疡炀徉蛘垟崸敭旸昜揚暘楊珜眻諹輰鍚钖阦陽霷鰑颺飏鸉氜羏羊烊煬', + yáo:'軺轺鱙窯顤姚滧爻摇窑谣遥瑶尧鳐珧肴徭倄傜嗂垚媱堯尭峣嶢嶤揺摿暚搖榣烑猺瑤磘窰蘨謡謠遙颻餆飖餚鰩邎愮繇鎐', + yè:'鎑璍邺抴葉洂液鍱鐷页頁靨靥夜业腋曳谒晔烨亱僷墷嶫嶪捙擛擪擫曅枽曗枼曄澲業爗燁皣瞱瞸礏謁鄴餣饁馌驜鵺鸈曵叶殗掖煠', + yé:'耶瑘爷揶铘爺鎁鋣釾捓', + yì:'嗌乂醷硛呹轶邑饐阣屹幆褹鮨篒绎繹肄义義蜴浥鄓亿易亦益翼译异谊翌抑艺役逸疫臆裔毅忆意议诣溢怿癔镒熠驿翊峄懿劓殪瘗羿弈佾刈缢悒弋翳埸奕挹薏亄呓伇镱伿俋兿劮億勚勩匇呭唈圛坄囈垼嬑嫕寱帟帠嶧廙怈憶懌敡晹曀曎杙枍棭槸榏檍歝殔殹浂湙浳潩澺炈瀷焲熤燚熼燡燱獈玴痬異瘱瘞瞖穓竩繶耴縊肊膉艗芅苅萟蓺藙蘙虉藝螠衪袣裛襼訲訳詍詣誼讛譯豙議豛豷貖贀跇釴鈠鐿隿霬鎰駅骮驛鶂鶍鶃鷊鷁鷧鷾鸃鹝黓鹢齸佚泆軼斁睪仡忔埶醳墿羛枻栧蛡悥欭秇貤鯣', + yìn:'堷憖印胤茚垽廕慭憗懚洕湚猌癊酳鮣窨', + yìng:'硬鱦媵映暎膡', + yí:'拸沶狋眙移謻詒嶷螔饴遗遺洟鮧鴺咦仪姨胰沂宜彝颐夷痍怡圯贻侇冝儀匜宧宐寲峓嶬巸彜彛彞恞扅暆栘椬椸熪瓵簃籎羠萓蛦觺貽跠迻鏔頉頥顊頤誃诒柂乁疑媐飴珆荑桋讉杝袘', + yín:'吟訡垠齦乑淫滛银寅鄞夤狺霪噖嚚圁婬峾崯崟檭殥泿烎犾璌碒荶蔩訔訚誾鈝銀鷣珢龈龂蟫冘斦', + yíng:'營謍瀅熒鎣营迎蝇赢盈莹荧萤楹萦蓥茔滢潆嬴瀛僌営塋攍櫿溁溋濙濚濴瀯灐灜瀠盁籝籯縈萾藀蛍蝿螢蠅贏禜巆瑩覮', + yòng:'用砽苚蒏醟', + yòu:'牰蚴佦幼又右诱佑釉宥囿鼬亴侑哊唀峟姷狖祐貁誘迶酭柚櫾孧', + yóng:'喁鰫顒颙', + yóu:'怞郵莜游尢猶由油铀尤犹邮疣蚰鱿猷莸蝣偤庮怣沋秞肬訧蕕輏輶逰遊鈾駀鮋鲉魷甴楢', + yù:'儥硲蜮魊鬻潏妪嫗粖肀醧遇豫鷸鹬諭谕艈熨茟御籲芌芋雤育欲愈狱玉誉域郁喻峪寓浴裕驭预鹆阈蓣煜钰聿昱燠饫毓俼喅喩堉嶎庽彧慾戫棛棜棫櫲欎欝淯滪澦灪焴燏爩獄琙癒瘉砡硢礇礖礜秗稢稶禦篽緎籞罭蒮蓹薁蘌蕷蜟袬譽軉輍逳遹鋊錥鈺鐭霱閾預饇飫驈馭鬰鬱鱊鳿鴥鴧鴪鵒鸒龥欥僪矞忬悆銉惐淢圫媀', + yùn:'餫愠慍蕰薀蕴藴褞蘊韞运韵孕酝恽郓傊惲枟腪鄆運醖醞韗韻緼縕缊韫晕暈', + yú:'揄踰窬逾乻旕臾齵褕余亐于伃謣雩魣餘馀鱼渔愚虞娱舆盂渝榆隅嵛妤觎舁谀瑜竽欤萸腴狳蝓偊堣堬娯嬩娛崳嵎扵旟楡楰歈歶歟湡澞漁牏玙玗璵睮籅羭艅茰萮蕍蘛虶螸衧諛覦轝輿邘酑鍝雓騟骬髃鮽鯲鰅魚鷠鸆桙俞兪隃愉於杅予禺', + yún:'眃勻匀鋆畇筼篔云耘郧芸昀纭伝囩妘愪抣橒沄涢溳澐熉秐縜紜蒷鄖蕓雲筠耺', + yā:'吖亞压壓铔椏押圧鸭丫鸦桠孲庘枒錏鐚鴨鴉鵶呀', + yān:'醃懨淊焑烟淹阉焉菸恹胭鄢崦嫣剦嶖懕樮漹煙珚篶臙閹黫咽湮歅傿嬮渰硽', + yāng:'秧殃鸯央泱姎抰胦鉠鍈雵鴦鞅眏', + yāo:'鴁鴢妖幺夭腰邀吆喓楆殀祅葽訞么', + yē:'噎倻椰吔擨暍歋潱蠮', + yě:'嘢野也冶埜壄漜', + yī:'噫乊揖渏黳吚一衣依医伊壹铱漪咿黟壱夁嫛嬄弌撎檹毉洢瑿畩稦祎禕繄蛜衤譩辷郼醫銥鷖鹥猗悘', + yīn:'隂陰阴氤洇齗因音茵堙姻喑铟侌凐噾囙垔婣愔慇栶溵濦瘖禋秵筃絪緸蒑裀蔭諲陻銦闉阥霒霠鞇韾駰骃殷荫磤', + yīng:'鶑嫈英霙鹰樱缨婴鹦莺璎嘤撄瑛罂膺偀噟媖嚶孆嬰孾愥攖朠桜渶櫻煐珱甇瓔甖碤礯緓绬纓罃罌蘡蝧蠳褮譻譍賏軈鑍锳鴬鶧鷪韺鶯鷹鸎鸚应応應瀴', + yō:'哟喲唷', + yōng:'傭壅拥雍痈臃庸慵墉鳙邕饔嗈镛嫞廱擁滽灉牅癕癰郺鄘雝鏞鷛鱅佣噰澭', + yōu:'泑浟羪优忧悠幽攸呦嚘優峳櫌憂瀀滺纋耰逌鄾麀怮懮', + yū:'扝紆纡込淤迂瘀唹盓箊迃陓扜穻', + yūn:'蝹贇赟氲奫氳蒀蒕煴熅馧', + yǎ:'唖雅痖厊庌瘂蕥哑啞疨', + yǎn:'裺遃顩黬萒弇沇眼演掩衍厣琰魇兖罨偃俨郾鼹乵儼兗噞厴孍嵃巚愝巘戭扊抁曮揜椼檿渷甗蝘褗躽酓隒鰋魘鶠黡黤黭黶齴鼴龑剡夵奄匽棪縯', + yǎng:'仰卬飬蝆养氧痒佒傟咉坱岟慃懩攁氱炴癢礢紻軮駚養柍楧瀁', + yǎo:'眑仸咬鷕舀崾杳偠窈婹宎岆柼榚溔狕窅苭闄騕齩抭枖蓔', + yǐ:'佁倚蟻乙裿齮以逘乛矣已蚁旖酏苡钇舣偯嬟崺庡扆攺敼旑檥礒笖苢艤螘輢轙鈘釔鉯顗鳦迆迱迤椅', + yǐn:'廴隐隠隱飮飲赺輑引饮尹蚓瘾嶾朄檃檼櫽淾濥癮粌蘟螾讔趛鈏靷吲', + yǐng:'浧郢頴颕影颖瘿颍巊廮摬梬潁矨癭穎鐛', + yǒng:'涌甬恿永蛹勇咏泳踊俑勈埇塎嵱彮怺惥愑愹悀柡栐湧慂詠踴鯒鲬硧', + yǒu:'槱有莠黝友酉卣牖铕丣梄湵禉羑聈苃蜏銪栯牗', + yǔ:'頨羽萭齬龉屿禹宇窳俣伛庾圄瘐圉俁匬傴噳寙嶼挧敔斞楀瑀祤穥與貐鄅麌与雨语語懙斔', + yǔn:'鈗阭允陨隕狁殒喗夽抎殞磒荺賱霣馻齫齳', + zhuài:'拽', + zhuàn:'篹腞襈譔撰馔饌赚僎篆堟灷瑑啭囀籑蒃縳転賺', + zhuàng:'撞壮状壯壵焋狀', + zhuì:'惴缀綴腏錣坠赘缒甀礈畷諈膇墜縋醊贅鑆硾笍娷', + zhuó:'彴斫謶镯鐲啄劅茁灼浊卓酌诼擢丵浞圴妰撯娺禚斮擆斵斱晫椓烵斲琸濁硺籗窡籱罬蠗蠿諁鵫鷟諑鋜篧灂叕汋濯啅着斀櫡琢犳', + zhuā:'簻檛髽膼抓挝撾', + zhuān:'甎叀鱄磗專嫥磚专砖専颛瑼蟤諯鄟顓膞塼', + zhuāng:'樁庄装桩妆娤庒梉妝糚粧荘莊裝湷', + zhuī:'椎隹追锥骓鵻錐騅', + zhuō:'穛焯炪穱棁拙捉桌涿倬梲棳槕窧鐯', + zhuǎi:'跩', + zhuǎn:'孨竱轉转', + zhuǐ:'沝', + zhà:'栅灹炸榨诈痄乍咤蚱宱搾溠醡詐吒', + zhài:'瘵寨债砦債', + zhàn:'佔僝棧湛譧站战栈蘸绽偡嶘戦桟戰菚虥虦綻轏驏覱', + zhàng:'胀脹帐仗丈账杖瘴障幛嶂墇扙涱帳痮瞕粀瘬賬', + zhào:'箌赵趙櫂罩照兆肇诏垗笊旐曌枛燳狣罀瞾羄肁肈鮡詔召棹炤', + zhá:'閘闸霅札铡牐箚蚻譗鍘耫', + zhái:'宅檡', + zhán:'讝', + zhè:'這浙柘蔗鹧樜淛蟅鷓这', + zhèn:'侲揕圳甽震鎭镇鎮阵振朕赈鸩塦挋栚眹紖絼纼誫賑鋴陣鴆', + zhèng:'幁靕证郑政塣诤証諍證鄭鴊正挣症', + zhé:'袩矺摺讁謫谪蛰辙哲辄啠磔嚞蜇埑悊喆晢歽晣砓籷虴粍讋詟謺輙蟄鮿輒轍銸厇', + zhì:'歭治滞滯痓騺陟挃窒至郅鯯雉忮穉寘璏鷙鸷制稚质炙痔志挚掷致置帜秩智帙桎蛭觯膣彘踬轾痣骘俧贽豸偫栉儨劕垁娡庢庤廌徏徝幟懥懫旘晊摯梽擲櫍洷櫛滍潌瀄狾熫猘瓆礩祑秷稺紩緻翐芖袠袟覟觗製豑觶貭豒誌跱質贄輊銍鋕躓铚鑕锧隲駤驇鴙騭瘈迣畤墆疐柣剬擳扻乿搱摨峙崻厔傂筫', + zhí:'淔樴直职植侄执值摭絷踯埴跖値嬂執姪戠漐禃縶聀膱蟙職蹠軄釞躑馽瓡殖妷慹潪犆', + zhòng:'重偅祌众仲堹妕媑狆筗茽眾蚛衶諥衆', + zhòu:'縐绉咮皱昼宙骤咒胄纣荮伷籀酎僽呪冑晝甃籒籕粙皺紂葤詋駎驟噣', + zhóu:'妯碡轴軸', + zhù:'助拀祝乼簗杼紵注住贮铸驻柱伫蛀翥苎箸炷疰壴佇墸坾嵀樦柷殶眝竚祩筯篫紸纻羜莇註跓鉒貯軴鋳鑄馵駐著麆苧飳迬筑築砫', + zhùn:'稕訰', + zhú:'烛蓫逐笁逫爥燭蠾舳竹瘃躅劚曯欘斸灟炢笜茿蠋钃鱁孎篴竺窋', + zhā:'楂喳皻觰渣哳偧揸抯齄挓摣樝皶譇齇紥紮劄柤', + zhāi:'摘斋夈捚斎榸粂齋', + zhān:'岾沾詀噡詹飦枬粘鱣毡谵旃瞻惉旜栴氊氈薝蛅趈譫閚邅霑饘驙魙鸇鹯嶦鳣占', + zhāng:'章张樟彰漳嫜璋傽鄣蟑獐慞張暲粻蔁遧鏱餦騿鱆麞', + zhāo:'朝皽招昭钊妱巶鉊鍣駋釗佋', + zhē:'折遮嫬嗻', + zhēn:'碪浈箴甄葴鍼蓁真针臻砧斟珍侦祯贞榛胗桢偵寊帪搸樼殝潧澵獉珎瑧楨湞眞禛蒖薽禎轃貞酙遉錱鉁針鱵帧幀籈溱椹嫃', + zhēng:'埩脀鏳睁争征怔狰蒸峥凧铮筝佂崝姃媜徰崢炡爭眐烝猙篜癥睜聇踭箏鬇錚鉦揁钲掙糽', + zhě:'乽褶鍺锗踷者赭襵', + zhěn:'稹枕疹縝缜诊轸畛姫屒弫抮昣眕縥聄萙袗裖覙診軫辴駗鬒紾黰', + zhěng:'撜氶掟整拯愸抍晸', + zhī:'泜胝鳷隻祗支汁胑肢之芝蜘脂栀卮倁巵搘椥梔榰疷祬秓稙綕蘵衼鴲鼅汥臸吱枝馶栺只知织憄織', + zhōng:'盅蹱蜙泈钟忠终衷伀舯刣妐螽锺幒彸柊汷炂籦蔠終螤衳鈡鴤鼨鐘鍾銿中', + zhōu:'謅诌譸淍鵃鸼騆洲周州舟侜喌徟炿烐珘矪賙輈赒辀輖週郮銂霌駲嚋盩诪婤啁粥', + zhū:'蕏蠩諸诸跦侏猪株珠蛛诛潴洙茱橥铢邾槠櫫櫧瀦硃秼絑蝫袾誅豬銖駯鮢鯺鴸鼄藸朱', + zhūn:'肫啍窀宒谆衠迍諄', + zhǎ:'眨砟拃鮺鲝厏鮓鲊', + zhǎi:'窄鉙', + zhǎn:'嶃崭嶄榐橏輾盏展斩嫸搌琖斬盞醆颭飐辗', + zhǎng:'涨漲掌仉幥礃', + zhǎo:'找沼瑵爪爫', + zhǐ:'徴徵祇夂怾扺衹黹止指纸趾址旨枳轵祉芷咫酯凪劧坧帋恉汦洔淽沚疻砋秖紙藢茋襧訨軹阯抧坁墌', + zhǒng:'种喠徸種肿踵冢塚尰歱煄瘇腫', + zhǒu:'肘帚晭疛睭箒菷鯞', + zhǔ:'褚鸀丶帾陼燝主煮嘱拄瞩渚麈劯宔囑濐煑矚罜詝', + zhǔn:'埻凖準准綧', + zi:'嗭', + zuo:'咗', + zuàn:'攥', + zuì:'最酻冣蕞槜錊醉罪嶵晬栬檇檌祽絊辠酔鋷稡', + zuò:'酢唑葃做作坐座祚胙侳岝岞糳阼葄袏蓙柞怍飵', + zuó:'捽莋昨秨稓筰鈼笮苲', + zuān:'鉆躜躦劗鑚鑽钻', + zuī:'嗺厜樶纗蟕', + zuō:'嘬穝', + zuǎn:'纂纉繤缵籫纘', + zuǐ:'嘴噿嶊璻', + zuǒ:'左佐繓', + zài:'在再儎扗傤洅酨載縡', + zàn:'蹔襸酂酇暂赞瓒錾瓉禶讃讚賛暫瓚鄼饡贊鏨濽灒', + zàng:'蔵脏塟葬弉臓銺臟奘', + zào:'造煰燥灶躁皂唣唕噪慥梍竃皁簉艁譟趮竈喿', + zá:'囃囋杂砸沯襍雑雥韴雜咱喒偺', + záo:'凿鑿', + zè:'仄昃崱庂昗捑汄', + zèn:'譖谮', + zèng:'鬵囎赠甑熷锃贈鋥', + zé:'嫧帻幘齰襗则责箦舴迮啧赜則嘖択歵樍沢泎皟溭瞔矠礋蔶蠌簀謮鸅齚賾諎澤泽啫滜择擇責', + zéi:'戝蠈鰂鱡鲗贼賊', + zì:'胔渍漬荢字自恣倳剚眦牸胾眥茡芓', + zí:'蓻', + zòng:'縦糭粽昮猔瘲疭糉縱纵碂', + zòu:'奏揍', + zùn:'捘銌', + zú:'鏃镞族卆踤崪足哫箤卒崒椊', + zā:'魳匝帀沞咂臜臢鉔迊扎桚拶', + zāi:'畠甾灾栽哉渽溨烖睵災賳', + zān:'鵤橵鐟簪糌兂簮鐕', + zāng:'匨臧羘牂赃賍賘贓贜髒', + zāo:'傮遭糟蹧醩', + zēng:'曾橧曽增憎罾増璔矰磳譄鄫鱛缯繒', + zěn:'怎', + zī:'龇齜姕澬滋茲趑赼齍緕纃玆资姿咨淄孜缁谘鲻锱孳赀髭訾嵫嗞辎崰孶栥椔湽禌秶紎茊葘緇趦諮貲資輺鄑鈭輜鍿鎡镃頾頿錙鰦鶅鼒鯔呲兹粢稵孖仔菑觜', + zōng:'繌緵鍐鬷宗棕鬃踪腙倧堫嵕嵏惾朡椶熧猣磫緃翪葼蝬豵踨鑁騌騣骔鬉蹤鯮鯼综綜稯', + zōu:'箃齱鄒鄹郰邹騶驺陬諏诹棸緅齺鲰黀鯫掫菆棷', + zū:'蒩租葅菹', + zūn:'墫尊鳟遵噂嶟樽鐏鶎鷷罇鱒繜', + zǎ:'咋', + zǎi:'载宰崽', + zǎn:'噆攅趱昝儧儹寁趲攒攢撍揝', + zǎng:'驵駔', + zǎo:'澡早枣藻蚤栆璪薻棗璅', + zǐ:'橴茈吇紫籽子滓笫秭梓耔姉杍姊榟矷虸訿釨呰啙胏秄', + zǒng:'偬燪総緫總总捴倊傯嵸惣搃摠縂蓗焧揔', + zǒu:'赱鯐走', + zǔ:'祖组組阻唨爼诅俎鎺靻詛珇', + zǔn:'僔撙譐', + ài:'爱碍艾嫒瑷隘暧砹僾伌壒塧嬡懓愛曖璦硋皧瞹礙薆譺賹鑀靉馤餲鱫鴱叆懝', + àn:'按岸暗案胺黯堓荌豻貋錌闇隌屵晻洝', + àng:'盎枊醠', + ào:'傲澳懊坳鏊岙垇墺奡岰嫯嶴擙驁奥奧澚隩慠', + ái:'癌捱皑凒嘊啀溰皚敱敳', + án:'儑玵雸', + áng:'昂岇昻', + áo:'翱敖骜廒嗷遨聱螯獒鳌厫鏖嗸滶獓璈翶翺蔜謷謸隞鼇鰲鷔嶅摮磝', + è:'呃呝阸阨頞饿扼遏厄鄂谔垩锷萼阏苊轭鳄颚腭愕鹗噩偔匎卾咢堮堊岋崿廅悪搹搤擜戹歞櫮湂琧歺砈砐硆蕚蚅蝁覨諤讍豟軶軛遌遻鑩鍔顎餓餩鰐鰪鱷齃鶚齶鈪堨咹恶惡僫姶礘閼', + èi:'欸', + èn:'摁', + èr:'誀二贰刵咡弍樲弐貮貳髶佴', + é:'额鹅俄讹峨娥锇莪囮峉峩涐珴皒睋磀訛譌誐迗鈋鋨頟額魤鵞鵝蛾吪', + ér:'而儿鲕鸸侕兒児峏栭洏粫胹袻輀荋轜陑隭髵鮞鴯唲耏聏', + òu:'沤漚怄慪', + ó:'哦', + ā:'阿啊腌锕錒', + āi:'挨哎埃哀锿溾鎄銰唉', + ān:'安鞍氨庵谙鹌侒桉媕峖盫盦腤菴萻蓭誝諳葊鞌韽馣鮟鶕鵪偣啽痷', + āng:'肮骯', + āo:'凹熬柪軪梎爊', + ē:'婀屙妸妿娿', + ēi:'誒诶', + ēn:'蒽恩奀煾', + ēng:'鞥', + ě:'噁砨騀鵈頋枙', + ěn:'峎', + ěr:'耳饵尔洱珥迩铒尒尓栮毦爾薾衈趰邇駬鉺餌', + ň:'嗯', + ō:'噢喔', + ōu:'毆鏂欧鸥殴瓯讴櫙歐甌膒藲謳鴎鷗塸熰', + ǎi:'矮蔼霭毐昹譪藹躷靄嗳噯娾濭', + ǎn:'俺揞铵埯垵唵罯銨', + ǎo:'袄媪媼芺襖镺艹拗抝', + ǒu: '偶藕耦吘嘔腢蕅呕' + }; + + + /* A list of chinese symbols that we have no intention of trying to write pinyin or zhuyin for. */ + var __chineseGrammarTokens = ',。 《》/? ;「:『」』'; + + + /* A list of chinese symbols that we have no intention of trying to write pinyin or zhuyin for. */ + var __chineseConversion = { + simplified: '皑蔼碍爱翱袄奥坝罢摆败颁办绊帮绑镑谤剥饱宝报鲍辈贝钡狈备惫绷笔毕毙币闭边编贬变辩辫标鳖别瘪濒滨宾摈饼并拨钵铂驳卜补财参蚕残惭惨灿苍舱仓沧厕侧册测层诧搀掺蝉馋谗缠铲产阐颤场尝长偿肠厂畅钞车彻尘沉陈衬撑称惩诚骋痴迟驰耻齿炽冲虫宠畴踌筹绸丑橱厨锄雏础储触处传疮闯创锤纯绰辞词赐聪葱囱从丛凑蹿窜错达带贷担单郸掸胆惮诞弹当挡党荡档捣岛祷导盗灯邓敌涤递缔颠点垫电淀钓调迭谍叠钉顶锭订丢东动栋冻斗犊独读赌镀锻断缎兑队对吨顿钝夺堕鹅额讹恶饿儿尔饵贰发罚阀珐矾钒烦范贩饭访纺飞诽废费纷坟奋愤粪丰枫锋风疯冯缝讽凤肤辐抚辅赋复负讣妇缚该钙盖干赶秆赣冈刚钢纲岗皋镐搁鸽阁铬个给龚宫巩贡钩沟构购够蛊顾剐关观馆惯贯广规硅归龟闺轨诡柜贵刽辊滚锅国过骇韩汉号阂鹤贺横轰鸿红后壶护沪户哗华画划话怀坏欢环还缓换唤痪焕涣黄谎挥辉毁贿秽会烩汇讳诲绘荤浑伙获货祸击机积饥讥鸡绩缉极辑级挤几蓟剂济计记际继纪夹荚颊贾钾价驾歼监坚笺间艰缄茧检碱硷拣捡简俭减荐槛鉴践贱见键舰剑饯渐溅涧将浆蒋桨奖讲酱胶浇骄娇搅铰矫侥脚饺缴绞轿较秸阶节茎鲸惊经颈静镜径痉竞净纠厩旧驹举据锯惧剧鹃绢杰洁结诫届紧锦仅谨进晋烬尽劲荆觉决诀绝钧军骏开凯颗壳课垦恳抠库裤夸块侩宽矿旷况亏岿窥馈溃扩阔蜡腊莱来赖蓝栏拦篮阑兰澜谰揽览懒缆烂滥捞劳涝乐镭垒类泪篱离里鲤礼丽厉励砾历沥隶俩联莲连镰怜涟帘敛脸链恋炼练粮凉两辆谅疗辽镣猎临邻鳞凛赁龄铃凌灵岭领馏刘龙聋咙笼垄拢陇楼娄搂篓芦卢颅庐炉掳卤虏鲁赂禄录陆驴吕铝侣屡缕虑滤绿峦挛孪滦乱抡轮伦仑沦纶论萝罗逻锣箩骡骆络妈玛码蚂马骂吗买麦卖迈脉瞒馒蛮满谩猫锚铆贸么霉没镁门闷们锰梦谜弥觅幂绵缅庙灭悯闽鸣铭谬谋亩钠纳难挠脑恼闹馁内拟腻撵捻酿鸟聂啮镊镍柠狞宁拧泞钮纽脓浓农疟诺欧鸥殴呕沤盘庞赔喷鹏骗飘频贫苹凭评泼颇扑铺朴谱栖凄脐齐骑岂启气弃讫牵扦钎铅迁签谦钱钳潜浅谴堑枪呛墙蔷强抢锹桥乔侨翘窍窃钦亲寝轻氢倾顷请庆琼穷趋区躯驱龋颧权劝却鹊确让饶扰绕热韧认纫荣绒软锐闰润洒萨鳃赛叁伞丧骚扫涩杀纱筛晒删闪陕赡缮伤赏烧绍赊摄慑设绅审婶肾渗声绳胜圣师狮湿诗尸时蚀实识驶势适释饰视试寿兽枢输书赎属术树竖数帅双谁税顺说硕烁丝饲耸怂颂讼诵擞苏诉肃虽随绥岁孙损笋缩琐锁獭挞抬态摊贪瘫滩坛谭谈叹汤烫涛绦讨腾誊锑题体屉条贴铁厅听烃铜统头秃图涂团颓蜕脱鸵驮驼椭洼袜弯湾顽万网韦违围为潍维苇伟伪纬谓卫温闻纹稳问瓮挝蜗涡窝卧呜钨乌污诬无芜吴坞雾务误锡牺袭习铣戏细虾辖峡侠狭厦吓锨鲜纤咸贤衔闲显险现献县馅羡宪线厢镶乡详响项萧嚣销晓啸蝎协挟携胁谐写泻谢锌衅兴汹锈绣虚嘘须许叙绪续轩悬选癣绚学勋询寻驯训讯逊压鸦鸭哑亚讶阉烟盐严颜阎艳厌砚彦谚验鸯杨扬疡阳痒养样瑶摇尧遥窑谣药爷页业叶医铱颐遗仪彝蚁艺亿忆义诣议谊译异绎荫阴银饮隐樱婴鹰应缨莹萤营荧蝇赢颖哟拥佣痈踊咏涌优忧邮铀犹游诱舆鱼渔娱与屿语吁御狱誉预驭鸳渊辕园员圆缘远愿约跃钥岳粤悦阅云郧匀陨运蕴酝晕韵杂灾载攒暂赞赃脏凿枣灶责择则泽贼赠扎札轧铡闸栅诈斋债毡盏斩辗崭栈战绽张涨帐账胀赵蛰辙锗这贞针侦诊镇阵挣睁狰争帧郑证织职执纸挚掷帜质滞钟终种肿众诌轴皱昼骤猪诸诛烛瞩嘱贮铸筑驻专砖转赚桩庄装妆壮状锥赘坠缀谆着浊兹资渍踪综总纵邹诅组钻', + traditional: '皚藹礙愛翺襖奧壩罷擺敗頒辦絆幫綁鎊謗剝飽寶報鮑輩貝鋇狽備憊繃筆畢斃幣閉邊編貶變辯辮標鼈別癟瀕濱賓擯餅並撥缽鉑駁蔔補財參蠶殘慚慘燦蒼艙倉滄廁側冊測層詫攙摻蟬饞讒纏鏟産闡顫場嘗長償腸廠暢鈔車徹塵沈陳襯撐稱懲誠騁癡遲馳恥齒熾沖蟲寵疇躊籌綢醜櫥廚鋤雛礎儲觸處傳瘡闖創錘純綽辭詞賜聰蔥囪從叢湊躥竄錯達帶貸擔單鄲撣膽憚誕彈當擋黨蕩檔搗島禱導盜燈鄧敵滌遞締顛點墊電澱釣調叠諜疊釘頂錠訂丟東動棟凍鬥犢獨讀賭鍍鍛斷緞兌隊對噸頓鈍奪墮鵝額訛惡餓兒爾餌貳發罰閥琺礬釩煩範販飯訪紡飛誹廢費紛墳奮憤糞豐楓鋒風瘋馮縫諷鳳膚輻撫輔賦複負訃婦縛該鈣蓋幹趕稈贛岡剛鋼綱崗臯鎬擱鴿閣鉻個給龔宮鞏貢鈎溝構購夠蠱顧剮關觀館慣貫廣規矽歸龜閨軌詭櫃貴劊輥滾鍋國過駭韓漢號閡鶴賀橫轟鴻紅後壺護滬戶嘩華畫劃話懷壞歡環還緩換喚瘓煥渙黃謊揮輝毀賄穢會燴彙諱誨繪葷渾夥獲貨禍擊機積饑譏雞績緝極輯級擠幾薊劑濟計記際繼紀夾莢頰賈鉀價駕殲監堅箋間艱緘繭檢堿鹼揀撿簡儉減薦檻鑒踐賤見鍵艦劍餞漸濺澗將漿蔣槳獎講醬膠澆驕嬌攪鉸矯僥腳餃繳絞轎較稭階節莖鯨驚經頸靜鏡徑痙競淨糾廄舊駒舉據鋸懼劇鵑絹傑潔結誡屆緊錦僅謹進晉燼盡勁荊覺決訣絕鈞軍駿開凱顆殼課墾懇摳庫褲誇塊儈寬礦曠況虧巋窺饋潰擴闊蠟臘萊來賴藍欄攔籃闌蘭瀾讕攬覽懶纜爛濫撈勞澇樂鐳壘類淚籬離裏鯉禮麗厲勵礫曆瀝隸倆聯蓮連鐮憐漣簾斂臉鏈戀煉練糧涼兩輛諒療遼鐐獵臨鄰鱗凜賃齡鈴淩靈嶺領餾劉龍聾嚨籠壟攏隴樓婁摟簍蘆盧顱廬爐擄鹵虜魯賂祿錄陸驢呂鋁侶屢縷慮濾綠巒攣孿灤亂掄輪倫侖淪綸論蘿羅邏鑼籮騾駱絡媽瑪碼螞馬罵嗎買麥賣邁脈瞞饅蠻滿謾貓錨鉚貿麽黴沒鎂門悶們錳夢謎彌覓冪綿緬廟滅憫閩鳴銘謬謀畝鈉納難撓腦惱鬧餒內擬膩攆撚釀鳥聶齧鑷鎳檸獰甯擰濘鈕紐膿濃農瘧諾歐鷗毆嘔漚盤龐賠噴鵬騙飄頻貧蘋憑評潑頗撲鋪樸譜棲淒臍齊騎豈啓氣棄訖牽扡釺鉛遷簽謙錢鉗潛淺譴塹槍嗆牆薔強搶鍬橋喬僑翹竅竊欽親寢輕氫傾頃請慶瓊窮趨區軀驅齲顴權勸卻鵲確讓饒擾繞熱韌認紉榮絨軟銳閏潤灑薩鰓賽三傘喪騷掃澀殺紗篩曬刪閃陝贍繕傷賞燒紹賒攝懾設紳審嬸腎滲聲繩勝聖師獅濕詩屍時蝕實識駛勢適釋飾視試壽獸樞輸書贖屬術樹豎數帥雙誰稅順說碩爍絲飼聳慫頌訟誦擻蘇訴肅雖隨綏歲孫損筍縮瑣鎖獺撻擡態攤貪癱灘壇譚談歎湯燙濤縧討騰謄銻題體屜條貼鐵廳聽烴銅統頭禿圖塗團頹蛻脫鴕馱駝橢窪襪彎灣頑萬網韋違圍爲濰維葦偉僞緯謂衛溫聞紋穩問甕撾蝸渦窩臥嗚鎢烏汙誣無蕪吳塢霧務誤錫犧襲習銑戲細蝦轄峽俠狹廈嚇鍁鮮纖鹹賢銜閑顯險現獻縣餡羨憲線廂鑲鄉詳響項蕭囂銷曉嘯蠍協挾攜脅諧寫瀉謝鋅釁興洶鏽繡虛噓須許敘緒續軒懸選癬絢學勳詢尋馴訓訊遜壓鴉鴨啞亞訝閹煙鹽嚴顔閻豔厭硯彥諺驗鴦楊揚瘍陽癢養樣瑤搖堯遙窯謠藥爺頁業葉醫銥頤遺儀彜蟻藝億憶義詣議誼譯異繹蔭陰銀飲隱櫻嬰鷹應纓瑩螢營熒蠅贏穎喲擁傭癰踴詠湧優憂郵鈾猶遊誘輿魚漁娛與嶼語籲禦獄譽預馭鴛淵轅園員圓緣遠願約躍鑰嶽粵悅閱雲鄖勻隕運蘊醞暈韻雜災載攢暫贊贓髒鑿棗竈責擇則澤賊贈紮劄軋鍘閘柵詐齋債氈盞斬輾嶄棧戰綻張漲帳賬脹趙蟄轍鍺這貞針偵診鎮陣掙睜猙爭幀鄭證織職執紙摯擲幟質滯鍾終種腫衆謅軸皺晝驟豬諸誅燭矚囑貯鑄築駐專磚轉賺樁莊裝妝壯狀錐贅墜綴諄著濁茲資漬蹤綜總縱鄒詛組鑽' + }; + + + /* Replace all instances of simplified Chinese characters with traditional Chinese characters. + */ + var simplifiedToTraditional = function(input) { + // some minimal validation + if (typeof input !== 'string') + throw 'Only strings should be passed into cjst.simplifiedToTraditional()'; + + // simply loop through the string and replace simplified chars with respective traditional char. + var output = '', + index = -1; + for (var i = 0; i < input.length; i++) { + index = __chineseConversion.simplified.indexOf(input[i]); + if (index == -1) { + output += input[i]; + } else { + output += __chineseConversion.traditional[index]; + } + } + return output; + } + + + /* Replace all instances of traditional Chinese characters with potential simplified Chinese characters. + */ + var traditionalToSimplified = function(input) { + // some minimal validation + if (typeof input !== 'string') + throw 'Only strings should be passed into cjst.traditionalToSimplified()'; + + // simply loop through the string and replace traditional chars with respective simplified char. + var output = '', + index = -1; + for (var i = 0; i < input.length; i++) { + index = __chineseConversion.traditional.indexOf(input[i]); + if (index == -1) { + output += input[i]; + } else { + output += __chineseConversion.simplified[index]; + } + } + return output; + } + + + /* A list of useful properties. + */ + var __props = { + translationLocation: 'translation/data/' + }; + + + /* Facility for updating one of the above properties. + */ + var setProperty = function(name, value) { + if (__props[name]) { + __props[name] = value; + } else { + throw 'An unknown property (' + name + ') has been specified for cjst.setProperty()'; + } + } + + + /* Do a horrible loop to find the pinyin of a character. TODO: alter this into a better solution + * that doesn't just brute-force find chracters in the lookup dictionary. + */ + var getPinyinForChar = function(input) { + for (var pinyin in __chineseToPinyinLookup) { + if (__chineseToPinyinLookup[pinyin].indexOf(input) > -1) { + + return pinyin; + } + } + return ''; + } + + + /* Accepts a string or an array of Chinese characters. + * Returns an array of pinyin strings for each input character. + * Example: + * console.log(chineseToPinyin("豬牛雞羊")); + * >> ["zhū", "niú", "jī", "yáng"] + */ + var chineseToPinyin = function(input) { + var payload; + // ensure our working payload is in array form + if (typeof input == 'string') { + payload = input.split(''); + } else { + payload = input; + } + // now start processing input + var output = []; + for (var i = 0; i < payload.length; i++) + output.push(getPinyinForChar(payload[i])); + // return to caller + return output; + } + + + /* Joseph Myer's md5() algorithm wrapped in a self-invoked function to prevent + * namespace polution. + * + * http://www.myersdaily.org/joseph/javascript/md5-text.html + */ + var md5 = (function() { + + function md5cycle(x, k) { + var a = x[0], + b = x[1], + c = x[2], + d = x[3]; + + a = ff(a, b, c, d, k[0], 7, -680876936); + d = ff(d, a, b, c, k[1], 12, -389564586); + c = ff(c, d, a, b, k[2], 17, 606105819); + b = ff(b, c, d, a, k[3], 22, -1044525330); + a = ff(a, b, c, d, k[4], 7, -176418897); + d = ff(d, a, b, c, k[5], 12, 1200080426); + c = ff(c, d, a, b, k[6], 17, -1473231341); + b = ff(b, c, d, a, k[7], 22, -45705983); + a = ff(a, b, c, d, k[8], 7, 1770035416); + d = ff(d, a, b, c, k[9], 12, -1958414417); + c = ff(c, d, a, b, k[10], 17, -42063); + b = ff(b, c, d, a, k[11], 22, -1990404162); + a = ff(a, b, c, d, k[12], 7, 1804603682); + d = ff(d, a, b, c, k[13], 12, -40341101); + c = ff(c, d, a, b, k[14], 17, -1502002290); + b = ff(b, c, d, a, k[15], 22, 1236535329); + + a = gg(a, b, c, d, k[1], 5, -165796510); + d = gg(d, a, b, c, k[6], 9, -1069501632); + c = gg(c, d, a, b, k[11], 14, 643717713); + b = gg(b, c, d, a, k[0], 20, -373897302); + a = gg(a, b, c, d, k[5], 5, -701558691); + d = gg(d, a, b, c, k[10], 9, 38016083); + c = gg(c, d, a, b, k[15], 14, -660478335); + b = gg(b, c, d, a, k[4], 20, -405537848); + a = gg(a, b, c, d, k[9], 5, 568446438); + d = gg(d, a, b, c, k[14], 9, -1019803690); + c = gg(c, d, a, b, k[3], 14, -187363961); + b = gg(b, c, d, a, k[8], 20, 1163531501); + a = gg(a, b, c, d, k[13], 5, -1444681467); + d = gg(d, a, b, c, k[2], 9, -51403784); + c = gg(c, d, a, b, k[7], 14, 1735328473); + b = gg(b, c, d, a, k[12], 20, -1926607734); + + a = hh(a, b, c, d, k[5], 4, -378558); + d = hh(d, a, b, c, k[8], 11, -2022574463); + c = hh(c, d, a, b, k[11], 16, 1839030562); + b = hh(b, c, d, a, k[14], 23, -35309556); + a = hh(a, b, c, d, k[1], 4, -1530992060); + d = hh(d, a, b, c, k[4], 11, 1272893353); + c = hh(c, d, a, b, k[7], 16, -155497632); + b = hh(b, c, d, a, k[10], 23, -1094730640); + a = hh(a, b, c, d, k[13], 4, 681279174); + d = hh(d, a, b, c, k[0], 11, -358537222); + c = hh(c, d, a, b, k[3], 16, -722521979); + b = hh(b, c, d, a, k[6], 23, 76029189); + a = hh(a, b, c, d, k[9], 4, -640364487); + d = hh(d, a, b, c, k[12], 11, -421815835); + c = hh(c, d, a, b, k[15], 16, 530742520); + b = hh(b, c, d, a, k[2], 23, -995338651); + + a = ii(a, b, c, d, k[0], 6, -198630844); + d = ii(d, a, b, c, k[7], 10, 1126891415); + c = ii(c, d, a, b, k[14], 15, -1416354905); + b = ii(b, c, d, a, k[5], 21, -57434055); + a = ii(a, b, c, d, k[12], 6, 1700485571); + d = ii(d, a, b, c, k[3], 10, -1894986606); + c = ii(c, d, a, b, k[10], 15, -1051523); + b = ii(b, c, d, a, k[1], 21, -2054922799); + a = ii(a, b, c, d, k[8], 6, 1873313359); + d = ii(d, a, b, c, k[15], 10, -30611744); + c = ii(c, d, a, b, k[6], 15, -1560198380); + b = ii(b, c, d, a, k[13], 21, 1309151649); + a = ii(a, b, c, d, k[4], 6, -145523070); + d = ii(d, a, b, c, k[11], 10, -1120210379); + c = ii(c, d, a, b, k[2], 15, 718787259); + b = ii(b, c, d, a, k[9], 21, -343485551); + + x[0] = add32(a, x[0]); + x[1] = add32(b, x[1]); + x[2] = add32(c, x[2]); + x[3] = add32(d, x[3]); + + } + + function cmn(q, a, b, x, s, t) { + a = add32(add32(a, q), add32(x, t)); + return add32((a << s) | (a >>> (32 - s)), b); + } + + function ff(a, b, c, d, x, s, t) { + return cmn((b & c) | ((~b) & d), a, b, x, s, t); + } + + function gg(a, b, c, d, x, s, t) { + return cmn((b & d) | (c & (~d)), a, b, x, s, t); + } + + function hh(a, b, c, d, x, s, t) { + return cmn(b ^ c ^ d, a, b, x, s, t); + } + + function ii(a, b, c, d, x, s, t) { + return cmn(c ^ (b | (~d)), a, b, x, s, t); + } + + function md51(s) { + txt = ''; + var n = s.length, + state = [1732584193, -271733879, -1732584194, 271733878], + i; + for (i = 64; i <= s.length; i += 64) { + md5cycle(state, md5blk(s.substring(i - 64, i))); + } + s = s.substring(i - 64); + var tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + for (i = 0; i < s.length; i++) + tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3); + tail[i >> 2] |= 0x80 << ((i % 4) << 3); + if (i > 55) { + md5cycle(state, tail); + for (i = 0; i < 16; i++) tail[i] = 0; + } + tail[14] = n * 8; + md5cycle(state, tail); + return state; + } + + /* there needs to be support for Unicode here, + * unless we pretend that we can redefine the MD-5 + * algorithm for multi-byte characters (perhaps + * by adding every four 16-bit characters and + * shortening the sum to 32 bits). Otherwise + * I suggest performing MD-5 as if every character + * was two bytes--e.g., 0040 0025 = @%--but then + * how will an ordinary MD-5 sum be matched? + * There is no way to standardize text to something + * like UTF-8 before transformation; speed cost is + * utterly prohibitive. The JavaScript standard + * itself needs to look at this: it should start + * providing access to strings as preformed UTF-8 + * 8-bit unsigned value arrays. + */ + function md5blk(s) { /* I figured global was faster. */ + var md5blks = [], + i; /* Andy King said do it this way. */ + for (i = 0; i < 64; i += 4) { + md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24); + } + return md5blks; + } + + var hex_chr = '0123456789abcdef'.split(''); + + function rhex(n) { + var s = '', + j = 0; + for (; j < 4; j++) + s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F]; + return s; + } + + function hex(x) { + for (var i = 0; i < x.length; i++) + x[i] = rhex(x[i]); + return x.join(''); + } + + function md5(s) { + return hex(md51(s)); + } + + /* this function is much faster, + so if possible we use it. Some IEs + are the only ones I know of that + need the idiotic second function, + generated by an if clause. + */ + + function add32(a, b) { + return (a + b) & 0xFFFFFFFF; + } + + if (md5('hello') != '5d41402abc4b2a76b9719d911017c592') { + function add32(x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF), + msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); + } + } + return md5; + })(); + + + /* Accepts a string or an array of Chinese characters. + * Returns a unique string hex representing the URI encoded Chinese chars. + * - Done like this since MD5ing unicode chars on the client is hard. + */ + var md5ChineseText = function(input) { + var payload; + // ensure our working payload is in string form + if (typeof input == 'object') { + payload = input.join(''); + } else { + payload = input; + } + // now process input + return md5(encodeURI(payload)); + } + + + /* Lookup pinyin tone. Use the lookup to find a friendly character for the pinyin and a tone number + * for the programmer. + */ + var getPinyinTone = function(input) { + for (var pinyin in __pinyinToneLookup) { + if (input.indexOf(pinyin) > -1) { + var tone = __pinyinToneLookup[pinyin].split(''); + return [ + input.replace(pinyin, tone[0]), + parseInt(tone[1]) + ]; + } + } + // if it's not found in the lookup table, then it must be a first flat tone,, which is often not + // included in the written form of pinyin when using shorthand. + return [input, 1]; + } + + + /* Accepts an array of, or string of space separated pinyin strings, to be converted into the + * zhuyin equivalants. + * Returns: an array of zhuyin strings for each respective pinyin input + * Example: + * console.log(pinyinToZhuyin(["zhū", "niú", "jī", "yáng"])); + * >> [["ㄓㄨ","1"],["ㄋㄧㄡ","2"],["ㄐㄧ","1"],["ㄧㄤ","2"]] + */ + var pinyinToZhuyin = function(input) { + var payload; + // ensure our working payload is in array from + if (typeof input == 'string') { + payload = input.split(' '); + } else { + payload = input; + } + // now start processing input + // __pinyinToZhuyinLookup __pinyinToneLookup + var output = []; + for (var i = 0; i < payload.length; i++) { + var tone = getPinyinTone(payload[i]); + var zhuyin = __pinyinToZhuyinLookup[tone[0]]; + if (zhuyin == undefined) + zhuyin = null; + output.push([zhuyin, __zhuyinTones[tone[1]]]); + } + // return to caller + return output; + } + + + /* Accepts a string or an array of Chinese characters. + * Returns: an array of zhuyin strings for each respective chinese character + * Example: + * console.log(chineseToZhuyin("豬牛雞羊")); + * >> [["ㄓㄨ","1"],["ㄋㄧㄡ","2"],["ㄐㄧ","1"],["ㄧㄤ","2"]] + */ + var chineseToZhuyin = function(input) { + return pinyinToZhuyin(chineseToPinyin(input)); + } + + + /* A helpder function to create DOM elements. Purposefully JS-library agnostic. + * Returns: an element of the provided details. + */ + var createElement = function(tag, className, contents) { + var element = document.createElement(tag); + if (className) + element.className = className; + if (typeof contents == 'string') { + element.innerHTML = contents; + } else { + for (var i = 0; i < contents.length; i++) + element.appendChild(contents[i]); + } + return element; + } + + + /* Accepts a single chinese character as input. + * Returns: an element that contains the chinese character and some pinyin all balanced in a layout + * ready for reading. + */ + var generatePinyinElement = function(input) { + // some minimal validation + if (typeof input !== 'string' && input.length == 1) + throw 'Only single chracter strings should be passed into cjst.generatePinyinElement()'; + + /* create a DOM structure like: +
+
+
+
zhuāng
+
+
+ */ + var element = createElement('div', 'cjst el pinyin', [ + createElement('div', 'c', input), + createElement('div', '音', [ + createElement('div', null, getPinyinForChar(input)) + ]) + ]); + + return element; + } + + + /* Accepts a single chinese character or a string of them as input. + * Returns: an element that contains the chinese character and some pinyin all balanced in a layout + * ready for reading. + */ + var generatePinyinElements = function(input) { + // some minimal validation + if (typeof input !== 'string') + throw 'Only character strings should be passed into cjst.generatePinyinElements()'; + + // now start processing input + var output = []; + for (var i = 0; i < input.length; i++) + output.push(generatePinyinElement(input[i])); + // return to caller + return output; + } + + + /* Accepts a single chinese character as input. + * Returns: an element that contains the chinese character and some zhuyin all balanced in a layout + * ready for reading. + */ + var generateZhuyinElement = function(input) { + // some minimal validation + if (typeof input !== 'string' && input.length == 1) + throw 'Only single chracter strings should be passed into cjst.generateZhuyinElement()'; + + /* create a DOM structure like: +
+
+
+
ㄓㄨㄤ
+
+ ˇ +
+ */ + var 注音 = chineseToZhuyin(input)[0]; + var element = createElement('div', 'cjst el 注音', [ + createElement('div', 'c', input), + createElement('div', '音', [ + createElement('div', null, 注音[0] ? 注音[0] : '') + ]), + createElement('em', null, 注音[1]) + ]); + + return element; + } + + + /* Accepts a single chinese character or a string of them as input. + * Returns: elements that contains the chinese character and some zhuyin all balanced in a layout + * ready for reading. + */ + var generateZhuyinElements = function(input) { + // some minimal validation + if (typeof input !== 'string') + throw 'Only character strings should be passed into cjst.generateZhuyinElements()'; + + // now start processing input + var output = []; + for (var i = 0; i < input.length; i++) + output.push(generateZhuyinElement(input[i])); + // return to caller + return output; + } + + + /* Accepts an object + * Returns true if the object is a part of the DOM + */ + function isObjectAnElement(o){ + return ( + typeof HTMLElement === 'object' ? o instanceof HTMLElement : //DOM2 + o && typeof o === 'object' && o !== null && o.nodeType === 1 && typeof o.nodeName === 'string' + ); + } + + + /* Accepts a single (chinese) character. + * Returns: a boolean value indicating the likeliness that this library can give a conversion for it. + */ + var isChineseCharacter = function(input) { + // some minimal validation + if (typeof input !== 'string' || input.length !== 1) + throw 'Only single-character strings should be passed into cjst.isChineseCharacter()'; + + // check that we have the required constants to work with further below + if (typeof __props.smallestChineseUnicode != 'number' || typeof __props.biggestChineseUnicode != 'number') { + var min = __chineseToPinyinLookup['zhōng'].charCodeAt(0), max = min; + for (var k in __chineseToPinyinLookup) { + if (__chineseToPinyinLookup.hasOwnProperty(k)) { + var match = __chineseToPinyinLookup[k]; + for (var i = 0, code; i < match.length; code = match.charCodeAt(i++)) { + if (code < min) min = code; + if (code > max) max = code; + } + } + } + __props.smallestChineseUnicode = min; + __props.biggestChineseUnicode = max; + } + + // now process input + var iv = input.charCodeAt(0); + return iv >= __props.smallestChineseUnicode && iv <= __props.biggestChineseUnicode; + } + + + /* Accepts a string or DOM element. + * Returns: a boolean value indicating the likeliness that this library can give a conversion for it. + */ + var hasChineseCharacters = function(input) { + // some minimal validation + if (typeof input !== 'string' && typeof input !== 'object') + throw 'Only character strings and DOM elements should be passed into cjst.hasChineseCharacters()'; + + // now process input + if (typeof input === 'string') { + for (var i = 0; i < input.length; i++) + if (isChineseCharacter(input[i])) + return true; + } else { + if (isObjectAnElement(input)) { + return hasChineseCharacters(input.textContent); + } + } + return false; + } + + + /* An event handler that adds a dom element from a tiled element once the mouse has entered. + * Tiles are only added upon mouseover and removed on mouseout in an effort to conserve memory. + */ + var tiledCharacterMouseoverEvent = function(element, text, options, generator) { + var tile = generator(text), + bounds = element.getBoundingClientRect(), + top = (((window.pageYOffset || document.scrollTop) - (document.clientTop || 0)) || 0) + (bounds.bottom); + + __props.tilePopupContainer.appendChild(tile); + tile.style.left = (bounds.left + ~~((bounds.width - tile.offsetWidth) / 2)) + 'px'; + tile.style.top = top + 'px'; + + // the pinyin/zhuyin tile is not optional. that will be shown upon scroll over + var leaveEvent = function() { + __props.tilePopupContainer.removeChild(tile); + element.removeEventListener('mouseleave', leaveEvent, false); + delete tile; + }; + element.addEventListener('mouseleave', leaveEvent, false); + + // the translation is an option. + if (options.translation) { + var translationBox = createElement('ul', 'cjst 翻譯', 'Loading...'); + + var clickEvent = function() { + __props.tilePopupContainer.appendChild(translationBox); + translationBox.style.left = tile.style.left; + translationBox.style.top = (top + 70) + 'px'; + translatePhrase(text, {}, function(response) { + // emoty the box + while (translationBox.hasChildNodes()) translationBox.removeChild(translationBox.lastChild); + // now add the translations + for (var i = 0; i < response.translation.length; i++) + translationBox.appendChild(createElement('li', '', response.translation[i])); + }); + + }; + element.addEventListener('click', clickEvent, false); + } + }; + + + /* Accepts a string or DOM element. + * Recursively iterates through every chinese letter and wraps it with a custom element, with wich + * we can attach events, style, and do special stuff. + * Returns: nothing. + */ + var recurseDOMNode = function(input, worker, callback) { // okay for up to a thousand or so chars..... + // some minimal validation + if (!isObjectAnElement(input)) { + console.log('xx', input); + throw 'Only DOM elements should be passed into cjst.recurseDOMNode()'; + } + + // a function to recurse through a dom and check for Chinese text + var check = function(e, innerCallback) { + if (e.childNodes.length === 0 && e.nodeType == 3) { // this is purely a end leaf node + var text = e.textContent, + lastTextGroup = '', + group = createElement('cjst-group', '', ''); + if (hasChineseCharacters(text)) { + for (var j = 0; j < text.length; j++) { + if (isChineseCharacter(text[j])) { + if (lastTextGroup.length > 0) { // non chinese text was built between the last chinese and here. group it into one node and append to dom group. + group.appendChild(createElement('cjst-text', '', lastTextGroup)); + lastTextGroup = ''; + } + var element = createElement('cjst-zi', '', text[j]); + element.className = 'tile'; + element.addEventListener('mouseover', worker(element, text[j]), false); + + group.appendChild(element); + } else { + lastTextGroup += text[j]; + } + } + if (lastTextGroup.length > 0) // non chinese text was built between the last chinese and here. group it into one node and append to dom group. + group.appendChild(createElement('cjst-text', '', lastTextGroup)); + e.parentNode.replaceChild(group, e); + } + if (innerCallback) innerCallback(); + } else { + if (['SCRIPT','STYLE','#COMMENT'].indexOf(e.nodeName.toUpperCase()) == -1) { + var doneCounter = 0; + var allDone = function() { + if (++doneCounter == e.childNodes.length) + if (innerCallback) + innerCallback(); + }; + for (var j = 0; j < e.childNodes.length; j++) { + setTimeout((function(elementReference, adcb) { + return function() { + check(elementReference, adcb); + }; + })(e.childNodes[j], allDone), 0); + } + } else { + if (innerCallback) innerCallback(); + } + } + } + + // start processing at passed in node + var allDoneCounter = 0; + var allDoneCallback = function() { + if (++allDoneCounter == input.childNodes.length) + if (callback) + callback(); + }; + for (var i = 0; i < input.childNodes.length; i++) { + check(input.childNodes[i], allDoneCallback); + } + } + + + /* Accepts a string or DOM element. + * Recursively checks a dom node for chinese letters, and adds a pinyin title if found. + * Returns: nothing. + */ + var pinyinTitleOnHover = function(input) { + var worker = function(element, character) { + element.title = getPinyinForChar(character); + }; + recurseDOMNode(input, worker); + } + + + /* Accepts a string or DOM element. + * Recursively checks a dom node for chinese letters, and adds a zhuyin title if found. + * Returns: nothing. + */ + var zhuyinTitleOnHover = function(input) { + var worker = function(element, character) { + element.title = chineseToZhuyin(character)[0].join(''); + }; + recurseDOMNode(input, worker); + } + + + /* Ensures that the DOM object used for holding tiles has been setup accordingly. + * + */ + var initializeDOMContainer = function() { + if (!__props.tilePopupContainer) { + __props.tilePopupContainer = createElement('div', 'cjst-tile-container', ''); + window.document.body.appendChild(__props.tilePopupContainer); + } + } + + + /* Accepts a string or DOM element. + * Recursively checks a dom node for chinese letters, and adds a zhuyin title if found. + * Returns: nothing. + */ + var pinyinTileOnHover = function(input, options) { + // make sure there is a container to hold tiles. + initializeDOMContainer(); + + // setup minimum requirements for options object + if (options == null) options = {}; + if (typeof options.translation == 'undefined') options.translation = false; + + var worker = function(element, text) { + return function() { + tiledCharacterMouseoverEvent(element, text, options, generatePinyinElement); + }; + } + recurseDOMNode(input, worker); + } + + + /* Accepts a string or DOM element. + * Recursively checks a dom node for chinese letters, and adds a zhuyin title if found. + * Returns: nothing. + */ + var zhuyinTileOnHover = function(input, options) { + // make sure there is a container to hold tiles. + initializeDOMContainer(); + + // setup minimum requirements for options object + if (options == null) options = {}; + if (typeof options.translation == 'undefined') options.translation = false; + + var worker = function(element, text) { + return function() { + tiledCharacterMouseoverEvent(element, text, options, generateZhuyinElement); + }; + } + recurseDOMNode(input, worker); + } + + + /* Accepts a function where the entire contents is CSS wrapped in a multiline comment. + * Returns the style element that was created and injected. + * Example: + * (function(){ + * require(['injectCSS'], function(injectCSS) { + * injectCSS(function(){/* + * .woohoo { + * border: 3px solid #f0f; + * } + * * /}); + * // or + * injectCSS('.foobar { border: 2px solid #f00; } '); + * }); + * })(); + */ + /* + var injectCSS = function(input) { + var __dynamicStyleObject = window.document.createElement('style'); + __dynamicStyleObject.id = 'injectCSS'; + __dynamicStyleObject.innerHTML = ''; + document.body.appendChild(__dynamicStyleObject); + + // interpret the input + var content = null; + if (typeof input === 'string') { + content = input; + } else + if (typeof input === 'function') { + content = input.toString(). + replace(/^[^\/]+\/\*!?/, ''). + replace(/\*\/[^\/]+$/, ''); + } else { + throw 'Type (' + (typeof input) + ') is not supported by injectCSS.'; + } + + // now lets append CSS content inside + if (content != null) + __dynamicStyleObject.innerHTML += '\n' + content; + + // return our working node for the implementor to potentially poke holes in. + return __dynamicStyleObject; + } + */ + + + /* A cross browser XMLHTTPRequest facility. + * Submitted to: http://codereview.stackexchange.com/questions/28325/implementing-a-cross-browser-ajax-utility-as-an-exercise + * By: hattenn: http://codereview.stackexchange.com/users/14577/hattenn + * & By: Morranr: http://codereview.stackexchange.com/users/27194/morranr + */ + var httpRequest = function(url, requestType, callback, queryString) { + var ids = ['MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'], + xhr; + + if (window.XMLHttpRequest) { + xhr = new XMLHttpRequest(); + } else { + for (var i = 0; i < ids.length; i++) { + try { + xhr = new ActiveXObject(ids[i]); + break; + } catch(e) { } + } + } + + if (callback) + xhr.onreadystatechange = function() { + if (xhr.readyState === 4) { + if (xhr.status === 200) { + callback({ + st: 'ok', + data: xhr.response + }); + } else { + callback({ + st: 'er', + status: xhr.status, + data: xhr.statusText + }); + } + } + }; + + xhr.open(requestType, url, true); + + if (requestType.toUpperCase() === 'GET') { + xhr.send(); + } else if (requestType.toUpperCase() === 'POST') { + xhr.send(queryString); + } + } + + + /* Accepts a string of chinese characters and a callback. + * + * Sends an HTTP request to a web service providing the translation of the characters and some additional information. + * * Note: + * - This is not a facility to translate sentences, merely words, phrases and idioms. + * Returns: An object containing translation and information about the Chinese characters. + * { + * traditional: '認識', + * translations: [ + * 'to know', + * 'to recognize', + * 'to be familiar with', + * 'to get acquainted with sb', + * 'knowledge', + * 'understanding', + * 'awareness', + * 'cognition' + * ] + * } + */ + var translatePhrase = function(input, options, callback) { + var query = simplifiedToTraditional(input), + md5 = md5ChineseText(query); + httpRequest(__props.translationLocation + md5[0] + '/' + md5[1] + '/' + md5, 'GET', function(response) { + if (callback) { + if (response.st == 'ok') { + try { + callback(JSON.parse(response.data)); + } catch (err) { + console.log('Error parsing JSON translation', err); + console.log('Response', response.data); + callback({ query: query, translation: [] }); + } + } else { + callback({ query: query, translation: [] }); + } + } + }); + } + + + /* The default layout styles for objects generated by this library */ + var stylesLayout = function(){/* + .cjst.el { + display: block; + float: left; + text-align: center; + padding: 0.15em; + white-space: nowrap; + } + .cjst.el .c { + font-size: 2.2em; + display: block; + min-width: 0.4em; + min-height: 1em; + } + + .cjst.el.pinyin .音 { + font-size: 0.9em; + display: block; + height: 1em; + } + + .cjst.el.注音 { + display: table-cell; + vertical-align: middle; + letter-spacing: -0.12em; + margin-right: 0.1em; + } + .cjst.el.注音 .c { + display: inline-block; + vertical-align: middle; + } + .cjst.el.注音 .音 { + display: inline-block; + font-size: 0.6em; + vertical-align: middle; + margin-left: 0.2em; + white-space: normal; + } + .cjst.el.注音 .音 div { + width: 0.75em; + } + .cjst.el.注音 em { + display: inline-block; + font-size: 1.5em; + vertical-align: middle; + margin: 0.48em 0.1em 0em 0em; + } + .cjst-tile-container { + position: absolute; + left: 0px; top: 0px; width: 0px; height: 0px; + overflow: visible; + } + .cjst-tile-container .cjst.el, .cjst-tile-container .cjst.翻譯 { + position: absolute; + background-color: #fff; + border: 1px solid #ccc; + box-shadow: 0em 0.07em 0.6em #aaa; -webkit-box-shadow: 0em 0.07em 0.6em #aaa; + border-radius: 3px; + cursor: pointer; + -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; + font-size: 1.3em; + text-shadow: 0px 0px 0px #000; + z-index: 0; + padding: 0.3em; + z-index: 10000; + } + .cjst-tile-container .cjst.翻譯 { + font-size: 0.8em; + font-weight: normal; + font-family: Arial; + width: auto; + white-space: nowrap; + padding: 0.1em 0em 0.3em 0em; + color: #444; + } + .cjst-tile-container .cjst.翻譯 li { + margin: 0em 1.3em 0em 0.6em; + padding: 0em; + list-style-position: inside; + } + */}; + + + /* The default colors used by this library. */ + var stylesDefaultTheme = function(){/* + .cjst.el .c { + color: #000; + } + .cjst.el .音, .cjst.el.注音 em { + color: #aad; + } + + cjst-zi.tile:hover { + + } + + */}; + + + /* Return a clean API for use with this module. All methods provided in here can be used within NodeJS or the browser. + * Most internal workings of the functions leverage off of other functions and referelce data stored within the + * library. + */ + var api = { + + // a facility to update certain properties/constants in this library. + setProperty: setProperty, + + // converting Chinese characters to Pinyin + chineseToPinyin: chineseToPinyin, + c2p: chineseToPinyin, + 中文到拼音: chineseToPinyin, + + // converting Chinese text to Zhuyin characters (used in R.O.C.) + chineseToZhuyin: chineseToZhuyin, + c2z: chineseToZhuyin, + 中文到注音: chineseToZhuyin, + + // converting Pinyin text to Zhuyin characters (used in R.O.C.) + pinyinToZhuyin: pinyinToZhuyin, + p2z: pinyinToZhuyin, + 拼音到注音: pinyinToZhuyin, + + // convert simplified Chinese to traditional Chinese + simplifiedToTraditional: simplifiedToTraditional, + // convert traditional Chinese to simplified Chinese + traditionalToSimplified: traditionalToSimplified, + + // utility to determine if a character is likely a Chinese character + isChineseCharacter: isChineseCharacter, + // utility to determine if a string or DOM element contains Chinese + hasChineseCharacters: hasChineseCharacters, + + // return a unique identifier that represents this chinese string (only for use with this library, hashing unicode text is hard) + md5ChineseText: md5ChineseText, + // translate a character, word, idiom or common phrase to English. + translatePhrase: translatePhrase + + }; + + + /* Detect if this is being used in the browser or NodeJS. If it detects browser objects then we can add a bunch of functions that + * help working with visual elements and DOM objects. + */ + if (window && window.document) { + + // Apply default layout styles for CJST objects. + //injectCSS(stylesLayout); + + // Apply default colors/styles/themes for CJST characters + //injectCSS(stylesDefaultTheme); + + // creates an element/s with all the bits inside that encase a char with pinyin under it + api.pinyinElements = generatePinyinElements; + // creates an element/s with all the bits inside that encase a char with bopomofo under it + api.zhuyinElements = generateZhuyinElements; + + // accepts element, adds event to show pinyin title on mouse hover + api.pinyinTitleOnHover = pinyinTitleOnHover; + // accepts element, adds event to show zhuyin title on mouse hover + api.zhuyinTitleOnHover = zhuyinTitleOnHover; + + // accepts element, adds pinyin character tile to be shown on mouse hover + api.pinyinTileOnHover = pinyinTileOnHover; + // accepts element, adds zhuyin character tile to be shown on mouse hover + api.zhuyinTileOnHover = zhuyinTileOnHover; + + } else { + + } + + return api; +}); + + +/* Decide how to load this code. + * If exports is set, then this is likely NodeJS else this must be clientside. + * If RequireJS is not detected, a global variable called 'cjst' will be created. + * + */ +if (exports) { + exports.cjst = module(); +} else { + if (window['define'] !== undefined) { + define(module); + } else { + window['cjst'] = module(); + } + if (typeof define === 'function' && define.amd) { + define('cjst', [], module); + } else { + window.cjst = module(); + } +} + +})(typeof window === 'undefined' ? null : window, typeof exports === 'undefined' ? null : exports); diff -r 61593b047289 -r e681d693240e js/taggingtext.js --- a/js/taggingtext.js Wed Jun 03 10:49:00 2015 +0200 +++ b/js/taggingtext.js Wed Jun 03 16:54:09 2015 +0200 @@ -578,8 +578,7 @@ function genRegexWindowOpen(){ var btn_state = $('#regex_generator').css('display'); if (btn_state == "block") { - $("#regex_generator").css("display", "none"); - $("#gen_regex_window_open_id").text("Open Gen Regex"); + genRegexWindowClose(); } else { $('#regex_generator').css("display", "block"); $("#gen_regex_window_open_id").text("Close Gen Regex"); @@ -587,6 +586,7 @@ } function genRegexWindowClose(){ $('#regex_generator').css("display", "none"); + $("#gen_regex_window_open_id").text("Open Gen Regex"); } function sharedStart_(array){ @@ -596,6 +596,68 @@ return a1.substring(0, i); } +function getTagNameByTag(tag){ + var name = ""; + // taglistArray is a global variable + for (var i = 0; i < taglistArray.length; i++) { + var taglistValue = taglistArray[i]; + + var _tag = taglistValue[2]; + var _name = taglistValue[1]; + if (_tag == tag) { + name = _name; + } + } + + return name; +} + +function genRegexAddToSmartRegex() { + // append blocks of generated regex to smart regex + + smartRegexEmpty(); // clear + + var reg_obj = getSuggestedRegex(); + console.log(reg_obj); + + for (var i = 0; i < reg_obj.length; i++) { + if (reg_obj[i].txt != "") { + + var newdiv = document.createElement("span"); + + $(newdiv).css("border", "1px solid black"); + $(newdiv).css("width", "100px"); + + if (reg_obj[i].tag == null) { + if (reg_obj[i].txt == "○") { + $(newdiv).text("空白"); + } else { + $(newdiv).text(reg_obj[i].txt); + } + $(newdiv).attr("class", "span_NOTAG"); + $(newdiv).attr("regexReplace","NOTAG"); + } else { + + var name = getTagNameByTag(reg_obj[i].tag); + $(newdiv).text(name+"名"); + + $(newdiv).attr("class", "span_"+reg_obj[i].tag); + $(newdiv).attr("regexReplace", reg_obj[i].tag); + + } + + regex_element_index += 1; + $(newdiv).attr("id", "regex_elem_"+regex_element_index); + + $(newdiv).attr("regexText", reg_obj[i].txt); + + $('#smartRegexShowDiv').append(newdiv); + + } + } + +} + function longestCommonSubstring_(string1, string2){ // init max value var longestCommonSubstring = 0; @@ -658,29 +720,31 @@ } -function getRegex(_pattern) { +var suggestedRegex = []; + +function setSuggestedRegex(_pattern) { + /* console.log(_pattern[0]); console.log(_pattern[1]); + */ var p0 = _pattern[0]; var p1 = _pattern[1]; // TODO: find common pattern - var reg_str = ""; - // _p1 = 測試 - // _p2 = 測一下 - var combined = []; + suggestedRegex = []; // it's a global variable + if (p0.length > p1.length) { - combined = p0; + suggestedRegex = p0; } else if(p0.length < p1.length) { - combined = p1; + suggestedRegex = p1; } else { // equal length // find matching string var cnt = p0.length; for (var i = 0; i < cnt; i++) { if (p1[i].tag != null) { - combined.push({tag:p1[i].tag, txt:"[^○如即而之有<>〈〉【】]{1,"+p1[i].txt.length+"}"}); + suggestedRegex.push({tag:p1[i].tag, txt:"[^○如即而之有<>〈〉【】]{1,"+p1[i].txt.length+"}"}); } else if (p0[i].tag != null) { - combined.push({tag:p0[i].tag, txt:"[^○如即而之有<>〈〉【】]{1,"+p0[i].txt.length+"}"}); + suggestedRegex.push({tag:p0[i].tag, txt:"[^○如即而之有<>〈〉【】]{1,"+p0[i].txt.length+"}"}); } else { // find matching for text in each corresponding position var texts = [p0[i].txt, p1[i].txt]; @@ -694,16 +758,16 @@ }; reg_for_common += "]"; */ - combined.push({tag:null, txt:common}); + suggestedRegex.push({tag:null, txt:common}); } }; } - for (var i = 0; i < combined.length; i++) { - reg_str += combined[i].txt; - }; + +} - return reg_str; +function getSuggestedRegex(){ + return suggestedRegex; } var pattern_obj = []; // record pattern array for regex generator. only contain pattern1 and pattern2 @@ -714,9 +778,11 @@ $(add_gen_regex_button).addClass("btn btn-md"); $(add_gen_regex_button).click( function(){ // popup for selected words regex gen + /* console.log("Debug: "); console.log(_selection); - + */ + if (_selection.type == "Range") { // select words, not just click on text var anchor_node = _selection.anchorNode; @@ -751,16 +817,17 @@ seleted_obj.push({tag:null, txt:text_before}); seleted_obj.push({tag:tag_name, txt:tagged_text}); seleted_obj.push({tag:null, txt:text_after}); - - + /* console.log(text_before); console.log(tag_name); console.log(tagged_text); console.log(text_after); + */ } - var generated_regex = ""; + + var generated_regex_plaintext = ""; // show generate regex window $('#regex_generator').css("display", "block"); $("#gen_regex_window_open_id").text("Close Gen Regex"); @@ -775,8 +842,14 @@ } else if (pattern2.children().length == 0) { pattern2.append(seleted_div); pattern_obj.push(seleted_obj); - //pattern2.text(seleted_div.text()); - generated_regex = getRegex(pattern_obj); + + setSuggestedRegex(pattern_obj); + var generated_regex = getSuggestedRegex(); + + // get plaintext from generated_regex obj + for (var i = 0; i < generated_regex.length; i++) { + generated_regex_plaintext += generated_regex[i].txt; + } } else { // pattern1 and pattern2 are already having text @@ -788,13 +861,19 @@ pattern_obj.shift(); pattern_obj.push(seleted_obj); - - //pattern1.text(pattern2.text()); - //pattern2.text(seleted_div); - generated_regex = getRegex(pattern_obj); + + setSuggestedRegex(pattern_obj); + var generated_regex = getSuggestedRegex(); + + // get plaintext from generated_regex obj + for (var i = 0; i < generated_regex.length; i++) { + generated_regex_plaintext += generated_regex[i].txt; + } + } - $('#generated_regex').text(generated_regex); + //$('#generated_regex').text(generated_regex); + $('#generated_regex').text(generated_regex_plaintext); // --- $('#regex_generator_error_msg').text(""); diff -r 61593b047289 -r e681d693240e models/extractapp.php --- a/models/extractapp.php Wed Jun 03 10:49:00 2015 +0200 +++ b/models/extractapp.php Wed Jun 03 16:54:09 2015 +0200 @@ -413,27 +413,6 @@ $text .= "".$book->y."\n"; $text .= "\n"; - /* - foreach ($book as $b) { - $text .= "\n"; - $text .= "".$b[0]."\n"; - $text .= "".$b[1]."\n"; - $text .= "".$b[2]."\n"; - $text .= "".$b[3]."\n"; - $text .= "".$b[4]."\n"; - $text .= "".$b[5]."\n"; - $text .= "".$b[6]."\n"; - $text .= "".$b[7]."\n"; - $text .= "".$b[8]."\n"; - $text .= "".$b[9]."\n"; - $text .= "".$b[10]."\n"; - $text .= "".$b[11]."\n"; - $text .= "".$b[12]."\n"; - $text .= "".$b[13]."\n"; - $text .= "\n"; - - } - */ // --- section info --- $text .= "
\n"; diff -r 61593b047289 -r e681d693240e views/Extractapp/TaggingText.php --- a/views/Extractapp/TaggingText.php Wed Jun 03 10:49:00 2015 +0200 +++ b/views/Extractapp/TaggingText.php Wed Jun 03 16:54:09 2015 +0200 @@ -936,7 +936,7 @@
-