IMEWB.cpp
上传用户:hyb6888
上传日期:2016-01-24
资源大小:5186k
文件大小:5k
源码类别:

输入法编程

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "stdio.h"
  3. #include "IMEWB.h"
  4. #include "string.h"
  5. //torword =1是向下,torword=0是向上
  6. IMEWB::IMEWB()
  7. {
  8. mode=1;
  9. }
  10. //输入时使用的函数
  11. int IMEWB::NotNullMidtems()
  12. {
  13. return Midtems[0]==0 ?0:1;
  14. }
  15. char*IMEWB::GetCurPage()
  16. {
  17.  return Midtems;
  18. }
  19. char*IMEWB::NextPage(int torword )
  20. {
  21. char ss[1000];
  22. int i=0,ret=0;
  23. ss[0]=0;
  24. if(savtorword==torword)
  25. {
  26. if(torword==1)
  27. {
  28. GetNextPage();
  29. }
  30. if(torword==0)
  31. {
  32. GetUpPage();
  33. }
  34. }
  35. else
  36. {
  37. if(torword==1)
  38. {
  39. ReadchNode.toword=torword;
  40. GetNextPage();     //越过本页
  41. GetNextPage();
  42. }
  43. if(torword==0)
  44. {
  45. ReadchNode.toword=torword;
  46. GetUpPage();       //越过本页
  47. GetUpPage();
  48. }
  49. }
  50. savtorword=torword;
  51. ///////////////////////////////////
  52. //输出页到Midtems中供外部使用
  53. Midtems[0]=0;
  54. for(i=0;i<5;i++)
  55. {
  56. if(page.OutCh[i][0]!=0)
  57. {
  58. sprintf(ss,"%s %c%s",page.OutCh[i],page.OutstrProprit[i],page.OutEn[i]);
  59. strcat(Midtems,ss);
  60. strcat(Midtems,";");
  61. }
  62. }
  63.  return Midtems;
  64. }
  65. int IMEWB::IMEWBSetMode(int lmode)
  66. {
  67. mode=lmode;
  68. return 0;
  69. }
  70. //////////////////////////////////////////////////////////////
  71. //功能说明:
  72. //由给出的编码串得到五个对应编码及汉字串
  73. //当找到完全相符的就从此编码开始连续取5个编码并放在OutEn和OutCh中;
  74. //当没有找到完全相符的编码,就从与它最相近的编码开始取。
  75. //mode=1表示从基本到扩展,mode=2表示从扩展到基本
  76. //mode=3表示仅基本,mode=4表示仅扩展
  77. char *IMEWB::EntoCh(char* Ens)
  78. {
  79. int i,ret=0,ret2=0;
  80.     char* pchi,ss[1000];
  81. strcpy(SaveInput,Ens);
  82. strupr(SaveInput);
  83. Midtems[0]=0;
  84. //strcpy(Ens,"zzzz");
  85. savtorword=1;
  86. ret=ReadchNode.SetData(mode,SaveInput);
  87. if(ret==0)//设置数据成功
  88. {
  89. ret2=GetNextPage();
  90. }
  91. {
  92. Midtems[0]=0;
  93. for(i=0;i<5;i++)
  94. {
  95. if(page.OutCh[i][0]!=0)
  96. {
  97. sprintf(ss,"%s %c%s",page.OutCh[i],page.OutstrProprit[i],page.OutEn[i]);
  98. strcat(Midtems,ss);
  99. strcat(Midtems,";");
  100. }
  101. }
  102. }
  103. pchi=Midtems;
  104. //MessageBox(0,pchi,SaveInput,0);
  105.     return pchi;
  106. }
  107. int IMEWB::GetChiNum(int num,char *retss)
  108. {
  109.   int ret=0;
  110.  // char chss[1000];
  111.   if(num<0||num>4)
  112.   {
  113.       strcpy(retss, ""); 
  114.   return 0;
  115.   }
  116.   strcpy(retss, page.OutCh[num]); 
  117.   if(retss[0]!=0)
  118.   ret=1;
  119.   //对正确选择进行排序
  120.   ReadchNode.sort(num,retss);
  121. return ret;
  122. }
  123. //////////////////////////////////////////////////////
  124. //   向下翻一页
  125. int IMEWB::GetNextPage()  //下一页
  126. {
  127. int i;
  128. for(i=0;i<5;i++)
  129. {
  130. page.OutCh[i][0]=0;
  131. page.OutstrProprit[i]=0;
  132. page.OutEn[i][0]=0;
  133. }
  134. return WriteNextPage();
  135. }
  136. //////////////////////////////////////////////////////
  137. //   向上翻一页
  138. int IMEWB::GetUpPage()  //上一页
  139. {
  140. int i;
  141. for(i=0;i<5;i++)
  142. {
  143. page.OutCh[i][0]=0;
  144. page.OutstrProprit[i]=0;
  145. page.OutEn[i][0]=0;
  146. }
  147. return WriteUpPage();
  148. }
  149. int IMEWB::ClearPage()
  150. {
  151. int i=0;
  152. for(i=0;i<5;i++)
  153. {
  154. page.OutCh[i][0]=0;
  155. page.OutstrProprit[i]=0;
  156. page.OutEn[i][0]=0;
  157. }
  158. SaveInput[0]=0;
  159. Midtems[0]=0;
  160. return 0;
  161. }
  162. ////////////////////////////////////////////////////////////
  163. ////////////////////////////////////////////////////////////
  164. //返回非0表示有错误发生,1表示无数据读出,2表示下一次无数据可读。 
  165. int IMEWB:: WriteUpPage()
  166. {
  167. int i;
  168. int ret;
  169. char CC[1000],EE[100];
  170. for(i=4;i>=0;i--)
  171. {
  172.     ret=ReadchNode.GetWord(CC,EE);
  173. if(ret==3)//边界处解除成功
  174. {
  175. break;
  176. }
  177. if(ret==1)//说明已到边界处
  178. {
  179. break;
  180. }
  181. page.OutstrProprit[i]=getpropty(EE);
  182. strcpy(page.OutEn[i],EE);
  183. strcpy(page.OutCh[i],CC);
  184. strlwr(page.OutEn[i]);
  185. if(ret==2)//说明已到边界处
  186. {
  187. break;
  188. }
  189. }
  190. return i-1;
  191. }
  192. int IMEWB:: WriteNextPage()
  193. {
  194. int i;
  195. int ret;
  196. char CC[1000],EE[100];
  197. for(i=0;i<5;i++)
  198. {
  199. //返回非0表示有错误发生,1表示无数据读出,2表示下一次无数据可读。 
  200.     ret=ReadchNode.GetWord(CC,EE);
  201. if(ret==3)//边界处解除成功
  202. {
  203. break;
  204. }
  205. if(ret==1)//说明已到边界处
  206. {
  207. break;
  208. }
  209. page.OutstrProprit[i]=getpropty(EE);
  210. strcpy(page.OutEn[i],EE);
  211. strcpy(page.OutCh[i],CC);
  212. strlwr(page.OutEn[i]);
  213. if(ret==2)//说明已到边界处
  214. {
  215. break;
  216. }
  217. }
  218. return i-1;
  219. }
  220. ////////////////////////////////////////////////////
  221. //与保存的输入进行比较,从而得出属性值
  222. char IMEWB::getpropty(char *EE)
  223. {
  224. char ss[100],ret;
  225. int len1,len2;
  226. strcpy(ss,EE);
  227. len1=(int)(strlen(SaveInput));
  228. len2=(int)(strlen(EE));
  229. ss[len1]=0;
  230. if(strcmp(SaveInput,ss)==0)
  231. {
  232. if(len1==len2)
  233. ret='1';
  234. else
  235. ret='2';
  236. }
  237. else
  238. {
  239. ret='3';
  240. }
  241. return ret;
  242. }