⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 infertt.c

📁 汉字在计算机内存放分为两种情况
💻 C
📖 第 1 页 / 共 3 页
字号:
	  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 + -