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

📄 gb2py.h

📁 国家ASIC工程中心使用的嵌入式操作系统
💻 H
字号:
#ifndef	_GB2PY_H
#define _GB2PY_H

// 汉字的全拼编码索引格式
// 15-14 bit:拼音数目
// 13-7	 bit:声母编码
// 6 -0	 bit:韵母编码

char	*Prompt[4] = { "单音字个数:", "双音字个数:", "三音字个数:", "四音字个数:" };

#define	SOURCE_PATH			"WINPY.txt"

#if GB_TYPE == GBK
#define DESTINATION_PATH	"py\\Gbk2Py.txt"
#elif GB_TYPE == GB2312
#define DESTINATION_PATH	"py\\Gb2Py.txt"
#elif GB_TYPE == GB2312_I
#define DESTINATION_PATH	"py\\GbI2Py.txt"
#elif GB_TYPE == GB2312_II
#define DESTINATION_PATH	"py\\GbII2Py.txt"
#elif GB_TYPE == GB2312_STD
#define DESTINATION_PATH	"py\\GbS2Py.txt"
#endif

typedef struct
{
	char	*code;		// 拼音编码
	BYTE	len;		// 拼音编码长度
	BYTE	index[6];	// 新编码索引
}CONVERTTBL;

CONVERTTBL	ConvertTbl[54] = {
	{ "a",		0x01, 0x05, 0x01, 0xFF, 0x00, 0x00, 0x00 },
	{ "ai",		0x02, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00 },
	{ "an",		0x02, 0x00, 0x02, 0x01, 0xFF, 0x00, 0x00 },
	{ "ang",	0x03, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00 },
	{ "ao",		0x02, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00 },
	{ "e",		0x01, 0x05, 0x01, 0xFF, 0x00, 0x00, 0x00 },
	{ "ei",		0x02, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00 }, 
	{ "en",		0x02, 0x00, 0x02, 0x01, 0xFF, 0x00, 0x00 },
	{ "eng",	0x03, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00 },
	{ "er",		0x02, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00 },
	{ "ha",		0x02, 0x14, 0x05, 0x01, 0xFF, 0x00, 0x00 },
	{ "hai",	0x03, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00 },
	{ "han",	0x03, 0x00, 0x00, 0x02, 0x01, 0xFF, 0x00 },
	{ "hang",	0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00 },
	{ "hao",	0x03, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00 },
	{ "he",		0x02, 0x00, 0x04, 0x01, 0xFF, 0x00, 0x00 },
	{ "hei",	0x03, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00 },
	{ "hen",	0x03, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x00 },
	{ "heng",	0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00 },
	{ "hi",		0x02, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00 },
	{ "hong",	0x04, 0x00, 0x02, 0x01, 0xFF, 0x00, 0x00 },
	{ "hou",	0x03, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00 },
	{ "hu",		0x02, 0x00, 0x08, 0x01, 0xFF, 0x00, 0x00 },
	{ "hua",	0x03, 0x00, 0x00, 0x04, 0x01, 0xFF, 0x00 },
	{ "huai",	0x04, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x00 },
	{ "huan",	0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF },
	{ "huang",	0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF },
	{ "hui",	0x03, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00 },
	{ "hun",	0x03, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00 },
	{ "huo",	0x03, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00 },
	{ "i",		0x01, 0x0A, 0x01, 0xFF, 0x00, 0x00, 0x00 },
	{ "ia",		0x02, 0x00, 0x04, 0x01, 0xFF, 0x00, 0x00 },
	{ "ian",	0x03, 0x00, 0x00, 0x02, 0x01, 0xFF, 0x00 },
	{ "iang",	0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00 },
	{ "iao",	0x03, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00 },
	{ "ie",		0x02, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00 },
	{ "in",		0x02, 0x00, 0x02, 0x01, 0xFF, 0x00, 0x00 },
	{ "ing",	0x03, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00 },
	{ "iong",	0x04, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00 },
	{ "iu",		0x02, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00 },
	{ "o",		0x01, 0x03, 0x01, 0xFF, 0x00, 0x00, 0x00 },
	{ "ong",	0x03, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00 },
	{ "ou",		0x02, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00 },
	{ "u",		0x01, 0x09, 0x01, 0xFF, 0x00, 0x00, 0x00 },
	{ "ua",		0x02, 0x00, 0x04, 0x01, 0xFF, 0x00, 0x00 },
	{ "uai",	0x03, 0x00, 0x00, 0x01, 0xFF, 0x00, 0x00 },
	{ "uan",	0x03, 0x00, 0x00, 0x00, 0x01, 0xFF, 0x00 },
	{ "uang",	0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00 },
	{ "ue",		0x02, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00 },
	{ "ui",		0x02, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00 },
	{ "un",		0x02, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00 },
	{ "uo",		0x02, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00 },
	{ "v",		0x01, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00 },
	{ NULL,		0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00 },
};


__inline BYTE GetIndex( WORD *index, BYTE *line )
{
	char 	ch = 1;
	BYTE	i = 0, k = 0, n = 1, j = 1;
	unsigned char	offset;
		
	*index = line[0];
	if( line[0] == 'a' || line[0] == 'e' || line[0] == 'o' )
	{
		n = 0;
		j = 0;
	}
	for(;;)
	{
		offset = ConvertTbl[i].index[k];
//		while( offset == 0 )		// 第一个不为0的索引偏移值
//		{
//			k++;
//			n++;
//			offset = ConvertTbl[i].index[k];
//		}
		if( ch != '\0' )
		{
			ch = line[n++];
			if( ch < ' ' )
				ch = '\0';
		}
		for(;;)
		{
			offset = ConvertTbl[i].index[k];
			if( offset == 0 || offset == 0xFF )		// 完全匹配
			{
				BYTE	len;

				while( ch != ' ' && ch != '\0' )
				{
					ch = line[n++];
				}
				if( offset == 0 )
					len = ConvertTbl[i].len + j +2;
				else
					len = ConvertTbl[i].len + j +1;
				if( n == len )
					*index = (WORD)( (*index) << 7 | i );
				else
					*index = 0x3FFF;
				return n;
			}
			else
			{	
				if( offset & 0x80 )		// 区分大小写
				{
					if( ch != ConvertTbl[i].code[k] )	// 字符不匹配
					{
						i += ( offset & 0x7F );			// 跳转到下一项
					}
					else
					{
						k++;
						break;
					}
				}
				else					// 不区分大小写
				{
					// 字符不匹配
					if( ch != ConvertTbl[i].code[k] && ch != ConvertTbl[i].code[k] + 0x20 )
					{
						i += offset;					// 跳转到下一项
					}
					else
					{
						k++;
						break;
					}
				}
			}
		}
	}
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -