本模块时本次设计的重点,根据输入法此模块设计的结果对各个类进行编码实现。考虑到此模块的整体代码行非常长,在此仅对部分关键代码进行分析。Spell2Chars类中getInput2Spell函数实现拼音索引表,拼音索引表根据不同的内码转换为相应的拼音。其相应的代码如下:
public static String getInput2Spell(int spellNumber)
String result = null;
if(spellNumber == 100)
result = "半角 全角";
else
if(spellNumber == 6826)
result = "NUAN";
else
if(spellNumber == 468)
result = "GOU HOU";
else
if(spellNumber == 5364)
result = "KENG LENG";
else
if(spellNumber == 268)
result = "COU";
else
if(spellNumber == 264)
result = "ANG";
else
if(spellNumber == 6426)
result = "MIAN MIAO NIAN NIAO";
else
if(spellNumber == 3664)
result = "DONG";
else
if(spellNumber == 0x1244a)
result = "SHUAN";
else
if(spellNumber == 0x12448)
result = "SHUAI";
else
if(spellNumber == 3464)
result = "DING";
类public class CharsLibrary_1,public class CharsLibrary_2 ,public class CharsLibrary_3,存储了本次输入法设计的文字库。本次定义一个字符数组存储每组拼音所对应的汉字。并通过unsigned char mge_ime char * mgePY_ime_mb实现了在拼音索引表中检索匹配的索引,通过索引检索到相应的汉字数组。文字库部分代码如下:
public class CharsLibrary_1 {
private CharsLibrary_1(){
}
public static final char[] A = {
'啊','阿','呵','吖','嗄','腌','锕'};
public static final char[] AI = {
'爱','矮','挨','哎','碍','癌','艾','唉','哀','蔼','隘','埃','皑','呆','嗌','嫒','瑷','暧','捱','砹','嗳','锿','霭','乃','剀','呃','噫','奇','阂'};
public static final char[] AN = {
'按','安','暗','岸','俺','案','鞍','氨','胺','厂','广','庵','揞','犴','铵','桉','谙','鹌','埯','黯','干','盒','钳','顸'};
public static final char[] ANG = {
'昂','肮','盎','仰'};
public static final char[] AO = {
'袄','凹','傲','奥','熬','懊','敖','翱','澳','嚣','拗','媪','廒','骜','嗷','坳','遨','聱','螯','獒','鏊','鳌','鏖','岙','噢','棍','浇'};
public static final char[] BA = {
'把','八','吧','爸','拔','罢','跋','巴','芭','扒','坝','霸','叭','靶','笆','疤','耙','捌','粑','茇','岜','鲅','钯','魃','菝','灞','伯','捭','杷','湃','萆'};
public static final char[] BAI = {
'百','白','摆','败','柏','拜','佰','伯','稗','捭','呗','掰','扒','排','派','薜','鞴'};
public static final char[] BAN = {
'半','办','班','般','拌','搬','版','斑','板','伴','扳','扮','瓣','颁','绊','癍','坂','钣','舨','阪','瘢','分','彬','豳','辨','辩'};
public static final char[] BANG = {
'帮','棒','绑','磅','镑','邦','榜','蚌','傍','梆','膀','谤','浜','蒡','彭','旁','纺','螃'}; public static final char[] BAO = {
'包','抱','报','饱','保','暴','薄','宝','爆','剥','豹','刨','雹','褒','堡','苞','胞','鲍','炮','瀑','龅','孢','煲','褓','鸨','趵','葆','勹','呆','簿','袍','裒'};
public static final char[] BEI = {
'被','北','倍','杯','背','悲','备','碑','卑','贝','辈','钡','焙','狈','惫','臂','褙','悖','蓓','鹎','鐾','呗','邶','鞴','孛','陂','碚','俾','埤','怫','波','菩','萆','葡','蜚','跋'};
public static final char[] BEN = {
'本','奔','苯','笨','夯','锛','贲','畚','坌','体'};
public static final char[] BENG = {
'蹦','绷','甭','崩','迸','蚌','泵','甏','嘣','俸','傍','唪','堋','平','抨','旁','榜'};
public static final char[] BI = {
'比','笔','闭','鼻','碧','必','避','逼','毕','臂','彼','鄙','壁','蓖','币','弊','辟','蔽','毙','庇','敝','陛','毖','痹','秘','泌','秕','薜','荸','芘','萆','匕','裨','畀','俾','嬖','狴','筚','箅','篦','舭','荜','襞','庳','铋','跸','吡','愎','贲','滗','濞','璧','哔','髀','弼','妣','婢','仳','佛','卑','埤','复','媲','幅','庀','拂','捭','服','枇','檗','殍','波','瞥','纰','脾','虑','被','费','跛','鐾','陂','陴','馥'};
函数unsigned char mge_ime char * mgePY_ime_mb实现了在拼音索引表中检索匹配的索引,通过索引检索到相应的汉字数组,unsigned char mge_ime作用是用来将完全匹配的索引都存到cpmgePY_Mb里,并找出完全匹配的组数,char * mgePY_ime_mb函数的作用是如果有匹配的索引组数,则取第一组里的PY_mb,即取输入的数字组合对应的汉字。如果没有匹配的索引组,则返回空字符串。unsigned char mge_ime相应的代码如下及相应的注解如下:
unsigned char mge_ime(char *strInput_mge_str)
{
struct mge_index *cpHZ;//首字母索引
struct mge_index *cpHZedge;//指向了最后一个索引
structmge_index *cpHZTemp;