Exemplo n.º 1
0
_WCRTLINK int _ismbbkana( unsigned int ch )
{
    if( __MBCodePage == 932 ) {
        return( iskana( ch ) );
    } else {
        return( 0 );
    }
}
Exemplo n.º 2
0
Arquivo: iskanji.c Projeto: erukiti/ne
void	kanji_toeuc(char *s,size_t bytes,const char *t,bool f_sjis,int *jm)
{
	u_char 	c,sjc;
	bool	sf;		// (SI/SO)shift flag

	sjc=0;
	sf=FALSE;
	for (;*t!='\0'&& bytes>0;)
		{
		 c=(u_char)*t++;

		 switch(c)
		 	{
		  case SI:
		  	 sf=FALSE;
		  	 continue;
		  case SO:
		  	 sf=TRUE;
		  	 continue;

		  case ESC:
		 	 switch(*t++)
		 	 	{
		 	  case 'K':		// NEC kanji
		 	  	 *jm=JM_kanji;
		 	  	 sf=FALSE;
		 	 	 continue;

		 	  case 'H':		// NEC ank
		 	  	 *jm=JM_ank;
		 	  	 sf=FALSE;
		 	 	 continue;

		 	  case '&':
		 	  	 if (*t=='@') // JIS X0208-1990 切り替え準備
		 	  	 	{
		 	  	 	 ++t;
		 	  	 	 continue;
		 	  	 	}
		 	  	 break;

		 	  case '$':
		 	 	 if (*t=='B'||*t=='@')	// JIS X0208
		 	 	 	{
		 	 	 	 ++t;
		 	  	 	 sf=FALSE;
		 	  	 	 *jm=JM_kanji;
		 	 	 	 continue;
		 	 	 	}
		 	 	 break;

		 	  case '(':
		 	 	 if (*t=='J'||*t=='B'||*t=='H') // JIS X0201(roman)/ank
		 	 	 	{
		 	 	 	 ++t;
		 	  	 	 sf=FALSE;
		 	  	 	 *jm=JM_ank;
		 	 	 	 continue;
		 	 	 	}
		 	 	 if (*t=='I')	// JIS X0201(kana)
		 	 	 	{
		 	 	 	 ++t;
		 	 	 	 *jm=JM_kana;
		 	 	 	 continue;
		 	 	 	}
		 	 	}
		 	 --t;
		 	}

		 if (f_sjis)
			{
			 if (sjc!=0)
			 	{
			 	 if (issjis2(c))
			 	 	{
			 	 	 if (bytes<2)
			 	 	 	break;

				 	 if (c>=0x9f)
				 	 	++sjc;
				 	 *s++=sjc;
				 	 *s++=SJIStoEUCtable2[c-0x40];
				 	 bytes-=2;
				 	 sjc=0;
				 	 continue;
			 	 	}
			 	 sjc=0;
			 	 --t;
			 	 c=*t;
			 	} else
			 	{
			 	 if (issjis1(c))
			 	 	{
			 	 	 sjc= SJIStoEUCtable1[c&0x7f];
			 	 	 continue;
			 	 	}
			 	 if (iskana(c))
			 	 	{
			 	 	 if (bytes<2)
			 	 	 	break;

			 	 	 *s++=0x8e;
			 	 	 --bytes;
			 	 	}
			 	}
			}

		 if (*jm==JM_kana|| sf)
		 	{
		 	 if (bytes<2)
		 	 	break;
		 	 *s++=0x8e;
		 	 --bytes;
		 	}
		 if (*jm!=JM_ank|| sf)
		 	c |= 0x80;
		 *s++=c;
		 --bytes;
		}

	*s='\0';
}
Exemplo n.º 3
0
Arquivo: iskanji.c Projeto: erukiti/ne
const	char	*kanji_fromeuc(char *s,size_t bytes,const char *t,int kc)
{
	u_char	c;
	const	char	*p;
	enum	{KM_ank, KM_kanji, KM_kana}	km;

	p=s;
	switch(kc)
		{
	 case KC_euc:
		 return t;

	 case KC_sjis:
		 for(;*t!='\0'&& bytes>0;)
		 	{
		 	 c=*t++;
		 	 if (c==0x8e&& iskana(*t))
		 	 	c=*t++; else
		 	 	{
		 	 	 if (iseuc(c)&& iseuc(*t))
		 	 		{
		 	 	 	 *s++= EUCtoSJIStable1[c - 0xa1];
		 	 	 	 --bytes;

		 	 	 	 c= *(u_char *)t - ((c&1)==0 ? 2 : *(u_char *)t>=0xe0? 0x60: 0x61);
		 	 	 	 ++t;
		 	 	 	}
		 	 	}
		 	 *s++=c;
		 	 --bytes;
		 	}
		 *s='\0';
		 break;

	 case KC_jis:
		 km=KM_ank;
		 for(;*t!='\0'&& bytes>0;)
		 	{
		 	 c=*t++;
		 	 if (iseuc(c)&& km!=KM_kanji)
		 	 	{
		 	 	 if (bytes<3)
		 	 	 	break;
		 	 	 *s++='\x1b';
		 	 	 *s++='$';
		 	 	 *s++='B';
		 	 	 bytes-=3;
		 	 	 km=KM_kanji;
		 	 	}
		 	 if (c==0x8e && iskana(*t))
		 	 	{
		 	 	 if (km!=KM_kana)
		 	 	 	{
		 	 	 	 if (bytes<3)
		 	 	 	 	break;
		 	 	 	 *s++='\x1b';
		 	 	 	 *s++='(';
		 	 	 	 *s++='I';
		 	 	 	 bytes-=3;
		 	 	 	 km=KM_kana;
		 	 	 	}

		 	 	 c=*t++;
		 	 	} else
		 	 	{
		 	 	 if (!iseuc(c) && km!=KM_ank)
		 	 	 	{
		 	 	 	 if (bytes<3)
		 	 	 	 	break;
		 	 	 	 *s++='\x1b';
		 	 	 	 *s++='(';
		 	 	 	 *s++='B';
		 	 	 	 bytes-=3;
		 	 	 	 km=KM_ank;
		 	 	 	}
		 	 	}

			 *s++= (c&0x7f);
			 --bytes;
		 	}
		 if (km!=KM_ank&& bytes>=3)
		 	strcpy(s,"\x1b(B"); else
		 	*s='\0';
		}
	return p;
}