?? gb2py.h
字號:
#ifndef _GB2PY_H
#define _GB2PY_H
// 漢字的全拼編碼索引格式
// 15-14 bit:拼音數(shù)目
// 13-7 bit:聲母編碼
// 6 -0 bit:韻母編碼
char *Prompt[4] = { "單音字個數(shù):", "雙音字個數(shù):", "三音字個數(shù):", "四音字個數(shù):" };
#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 ) // 區(qū)分大小寫
{
if( ch != ConvertTbl[i].code[k] ) // 字符不匹配
{
i += ( offset & 0x7F ); // 跳轉(zhuǎn)到下一項
}
else
{
k++;
break;
}
}
else // 不區(qū)分大小寫
{
// 字符不匹配
if( ch != ConvertTbl[i].code[k] && ch != ConvertTbl[i].code[k] + 0x20 )
{
i += offset; // 跳轉(zhuǎn)到下一項
}
else
{
k++;
break;
}
}
}
}
}
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -