📄 infertt.c
字号:
if(c == cbc1[i])
return 0;
return 1;
}
static int DoStage1(char *pickstr)
{
int len,i,j = 0;
memset(cmatrix,0,5*7);
len = strlen(pickstr);
for( i = 0;i < len;i++)
{
if(InCbc1(pickstr[i]))
{
cmatrix[0][j] = pickstr[i];
j++;
}
}
/*下面要做的是抛弃规则验证*/
return j;
}
static int DoStage2(char *pickstr)
{
int len,i,j = 0;
len = strlen(pickstr);
for( i = 0;i < len;i++)
{
if(InCbc2(pickstr[i]))
{
/*验证N,H*/
if(pickstr[i] == 'n')
{
if( FindC(cmatrix[0],'e')||
FindC(cmatrix[0],'a'))
goto L;
else
continue;
}
if(pickstr[i] == 'h')
{
if( FindC(cmatrix[0],'c')||
FindC(cmatrix[0],'z')||
FindC(cmatrix[0],'s'))
goto L;
else
continue;
}
L:
cmatrix[1][j] = pickstr[i];
j++;
}
}
return j;
}
static int DoStage3(char *pickstr)
{
int len,i,j = 0;
len = strlen(pickstr);
for( i = 0;i < len;i++)
{
if(InCbc3(pickstr[i]))
{
if(pickstr[i] == 'a')
{
if(FindC(cmatrix[1],'u')||
FindC(cmatrix[1],'h')||
FindC(cmatrix[1],'i'))
goto L;
else
continue;
}
if(pickstr[i] == 'e')
{
if(FindC(cmatrix[1],'u')||
FindC(cmatrix[1],'i'))
goto L;
else
continue;
}
if(pickstr[i] == 'i')
{
if(FindC(cmatrix[1],'u')||
FindC(cmatrix[1],'e')||
FindC(cmatrix[1],'h')||
FindC(cmatrix[1],'a'))
goto L;
else
continue;
}
if(pickstr[i] == 'o')
{
if(FindC(cmatrix[1],'u')||
FindC(cmatrix[1],'h')||
FindC(cmatrix[1],'a'))
goto L;
else
continue;
}
if(pickstr[i] == 'u')
{
if(FindC(cmatrix[1],'o')||
FindC(cmatrix[1],'i'))
goto L;
else
continue;
}
if(pickstr[i] == 'n')
{
if(FindC(cmatrix[1],'u')||
FindC(cmatrix[1],'e')||
FindC(cmatrix[1],'i')||
FindC(cmatrix[1],'o')||
FindC(cmatrix[1],'a'))
goto L;
else
continue;
}
if(pickstr[i] == 'g')
{
if(FindC(cmatrix[1],'n'))
goto L;
else
continue;
}
L:
cmatrix[2][j] = pickstr[i];
j++;
}
}
return j;
}
static int DoStage4(char *pickstr)
{
int len,i,j = 0;
len = strlen(pickstr);
for( i = 0;i < len;i++)
{
if(InCbc4(pickstr[i]))
{
if(pickstr[i] == 'a')
{
if(FindC(cmatrix[2],'u'))
goto L;
else
continue;
}
if(pickstr[i] == 'i')
{
if(FindC(cmatrix[2],'u')||
FindC(cmatrix[2],'e')||
FindC(cmatrix[2],'a'))
goto L;
else
continue;
}
if(pickstr[i] == 'n')
{
if(FindC(cmatrix[2],'u')||
FindC(cmatrix[2],'e')||
FindC(cmatrix[2],'o')||
FindC(cmatrix[2],'a'))
goto L;
else
continue;
}
if(pickstr[i] == 'o')
{
if(FindC(cmatrix[2],'u')||
FindC(cmatrix[2],'a'))
goto L;
else
continue;
}
if(pickstr[i] == 'u')
{
if(FindC(cmatrix[2],'o'))
goto L;
else
continue;
}
if(pickstr[i] == 'g')
{
if(FindC(cmatrix[2],'n'))
goto L;
else
continue;
}
L:
cmatrix[3][j] = pickstr[i];
j++;
}
}
return j;
}
static int DoStage5(char *pickstr)
{
int len,i,j = 0;
len = strlen(pickstr);
for( i = 0;i < len;i++)
{
if(InCbc5(pickstr[i]))
{
if(pickstr[i] == 'i')
{
if(FindC(cmatrix[3],'e')||
FindC(cmatrix[3],'a'))
goto L;
else
continue;
}
if(pickstr[i] == 'n')
{
if(FindC(cmatrix[3],'a'))
goto L;
else
continue;
}
if(pickstr[i] == 'g')
{
if(FindC(cmatrix[3],'n'))
goto L;
else
continue;
}
L:
cmatrix[4][j] = pickstr[i];
j++;
}
}
return j;
}
static int DoStage6(char *pickstr)
{
int len,i,j = 0;
len = strlen(pickstr);
for( i = 0;i < len;i++)
{
if(InCbc6(pickstr[i]))
{
cmatrix[5][j] = pickstr[i];
j++;
}
}
return j;
}
static int DefDic(int pickstage,char *pickstr)
{
switch(pickstage)
{
case 1:
return DoStage1(pickstr);
break;
case 2:
return DoStage2(pickstr);
break;
case 3:
return DoStage3(pickstr);
break;
case 4:
return DoStage4(pickstr);
break;
case 5:
return DoStage5(pickstr);
break;
case 6:
return DoStage6(pickstr);
break;
}
}
/*
*把推断出正确的拼音并加入LR
*/
static void InferAddToLr(void *lr,char *str)
{
struct _hanzi_ *p1;
struct _hanzi_ *p2;
int len1,len2,i;
char txt[8] ;
p1 = (struct _hanzi_ *) g_IndexTable->index[str[0] -'a'];
p2 = (struct _hanzi_ *) g_IndexTable->index[str[0] -'a' + 1];
len1 = strlen(str);
for(;p1 < p2;p1++)
{
len2 = strlen(p1->name);
if(p1->name[len2-1] == '#') len2--;
if( len1 <= len2 && len2 <= len1+1)
{
i = len1;
while(--i >= 0)
if(str[i] != p1->name[i])
break;
if(i < 0)
{
memset(txt,0,8);
if(p1->name[len2] == '#')
{
strncpy(txt,p1->name,len2);
}
else
strcpy(txt,p1->name);
AddToLrList( lrview0,txt);
}
}
}
}
/*
*做拼音的验证
*/
static int ValidAtIndex(char *str)/*1:拼写不存在但存在后续:2拼写正确*/
{
/*
extern INDEX_STRUCT *g_IndexTable;
extern _hanzi_ HanziTable[TABLE_UNITS] ;
*/
struct _hanzi_ *p1;
struct _hanzi_ *p2;
int len1,len2,i;
p1 = (struct _hanzi_ *) g_IndexTable->index[str[0] -'a'];
p2 = (struct _hanzi_ *) g_IndexTable->index[str[0] -'a' + 1];
len1 = strlen(str);
for(;p1 < p2;p1++)
{
len2 = strlen(p1->name);
if(len2 >= len1)
{
i = len1;
while(--i >= 0)
if(str[i] != p1->name[i])
break;
if(i < 0)
return 1;
}
}
return 0;
}
/*
由从上到下由左到右的顺序第归遍历矩阵,组合拼音,然后到INDEX之中验证,直到所有遍历完成
*/
static int ProcessDic(void)
{
/*扫描矩阵*/
char buf[8]={0};
char buf1[8]={0};
short NewPross = 0; /*当一个拼写判断有效时,开始lr新的输入操作*/
char *p1,*p2;
int len,i,j,k,l,ret;
if(picklen <= 0)
{
FreeLrListItems(lrview0);
return;
}
len = strlen(cmatrix[0]);
for(i = 0;i < len;i++)
{
memset(buf,0,8);
buf[0] = cmatrix[0][i];
for(j = 1;j < picklen;j++)
buf[j] = cmatrix[j][0];
/*use buf ,search in index
*/
if(strcmp(buf,buf1) != 0)
{
ret = ValidAtIndex(buf);
if(ret)
{
if(NewPross == 0)
{
FreeLrListItems(lrview0);
InferAddToLr(NULL,buf);
NewPross =1;
strcpy(buf1,buf);
}else
{
InferAddToLr(NULL,buf);
strcpy(buf1,buf);
}
}
}
k = picklen ;
while(--k >= 1)
{
p1 = &cmatrix[k][1];
while( *p1 != 0)
{
buf[k] = *p1;
p1++;
if(strcmp(buf,buf1) != 0)
{
ret = ValidAtIndex(buf);
if(ret)
{
if(NewPross == 0)
{
FreeLrListItems(lrview0);
NewPross =1;
InferAddToLr(NULL,buf);
strcpy(buf1,buf);
}else
{
InferAddToLr(NULL,buf);
strcpy(buf1,buf);
}
}/* end if(ret)*/
}/*if(strcmp(buf,buf1) != 0) */
for(l = k+1;l <picklen;l++)
{
p2 = &cmatrix[l][0];
while(*p2 != 0)
{
buf[l] = *p2;
p2++;
/*search in index*/
if(strcmp(buf,buf1) != 0)
{
ret = ValidAtIndex(buf);
if(ret)
{
if(NewPross == 0)
{
FreeLrListItems(lrview0);
NewPross =1;
InferAddToLr(NULL,buf);
strcpy(buf1,buf);
}else
{
InferAddToLr(NULL,buf);
strcpy(buf1,buf);
}
}
}
}/*end while(*p2 != 0)*/
}/*end for(l = k+1;l <picklen;l++)*/
}/*while( *p1 != 0)*/
}/*end while(--k >= 1)*/
}/*end for(i = 0;i < len;i++)*/
return NewPross;
}
/*
处理用户输入
*/
void ProcessPick(void)
{
if(g_IndexTable == NULL|| curpick == NULL) return;
if(picklen > 6) return ;/*最大的拼音长度不会超过6*/
switch(curpick[0])
{
case ' ':/*用户按下空格键,应直接加入汉字编辑区*/
AddToCellView(cellview," ");
break;
case ',':
/*锁定LR0,解锁LR1,将特殊字符加入LR1中,并显示LR1*/
AddPickToList();
break;
default:
{
int len = strlen(curpick);
if(picklen == 0)
memset(cmatrix,0,42);
picklen++;
if(picklen > 6)
{
return;
}
if(DefDic(picklen,curpick) ==0)
picklen--;
else
{
/*处理字典,组合拼音输入LR0*/
if(! ProcessDic())
picklen--;
}
}/*end defualt*/
break;
}
}
static char * SetTT(char *txt)
{
if(cellview && strlen(txt) >=1)
SetSingleViewBuf(cellview,(unsigned char *)txt,strlen(txt));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -