📄 tnineinit.cpp
字号:
#include <windows.h>
#include <imm.h>
#include <malloc.h>
#include "imedefs.h"
extern CO_DIGIT_PINYIN_ITEM g_CoDigitPinyin[TOTAL_PINYIN_DATA_ITEMS];
extern PINYIN_DATA_ITEM* g_PinyinItem;
extern char* g_RawPinyinData;
BOOL TranslatePinyinToDigit(char* pinyin, char* digit)
{
int i,j=0;
while(pinyin[0]==' ') pinyin++;
if( pinyin[1] == (char)0xC7 &&
pinyin[2] == (char)0xF8) {
if(pinyin[0] <'F' ) {
digit[0] = '0';
} else {
digit[0] = '1';
}
digit[1] = 0;
return (TRUE);
}
for(i=0;i<6;i++) {
switch(pinyin[i])
{
case 'A':
case 'B':
case 'C':
case 'a':
case 'b':
case 'c': digit[j++]='2'; break;
case 'D':
case 'E':
case 'F':
case 'd':
case 'e':
case 'f': digit[j++]='3'; break;
case 'G':
case 'H':
case 'I':
case 'g':
case 'h':
case 'i': digit[j++]='4'; break;
case 'J':
case 'K':
case 'L':
case 'j':
case 'k':
case 'l': digit[j++]='5'; break;
case 'M':
case 'N':
case 'O':
case 'm':
case 'n':
case 'o': digit[j++]='6'; break;
case 'P':
case 'Q':
case 'R':
case 'S':
case 'p':
case 'q':
case 'r':
case 's': digit[j++]='7'; break;
case 'T':
case 'U':
case 'V':
case 't':
case 'u':
case 'v': digit[j++]='8'; break;
case 'W':
case 'X':
case 'Y':
case 'Z':
case 'w':
case 'x':
case 'y':
case 'z': digit[j++]='9'; break;
case 0: digit[j]=0; return j;
default:
digit[i]=0;
return 0;
}
}
return 0;
}
int PASCAL PinyinToDigit()
{
int i,j;
CO_DIGIT_PINYIN_ITEM* coTmp;
PINYIN_DATA_ITEM* pyItem;
CO_DIGIT_PINYIN_ITEM* coItem;
unsigned short pos;
char* digit;
coTmp = (CO_DIGIT_PINYIN_ITEM*)malloc(sizeof(CO_DIGIT_PINYIN_ITEM)*TOTAL_PINYIN_DATA_ITEMS);
if(0==coTmp) return 0;
pyItem=g_PinyinItem;
coItem=coTmp;
for(i=0;i<TOTAL_PINYIN_DATA_ITEMS;i++) {
TranslatePinyinToDigit(pyItem->szPinyin, coItem->szDigit);
coItem->pinyinItem = pyItem;
coItem++;
pyItem++;
}
//Sort and copy coTmp into g_CoDigitPinyin
memset(g_CoDigitPinyin, 0, TOTAL_PINYIN_DATA_ITEMS*sizeof(CO_DIGIT_PINYIN_ITEM));
i = 0;
while(i<TOTAL_PINYIN_DATA_ITEMS) {
j = pos = 0;
digit = coTmp[0].szDigit;
while(j<TOTAL_PINYIN_DATA_ITEMS) {
if(coTmp[j].szDigit[0] == 0x29 ) {
j++;
continue;
}
if(strcmp(coTmp[j].szDigit, digit) < 0 ) {
j++;
continue;
}
digit = coTmp[j].szDigit;
pos = (unsigned short)j;
j++;
}
memcpy(g_CoDigitPinyin+i, coTmp+pos, sizeof(CO_DIGIT_PINYIN_ITEM));
coTmp[pos].szDigit[0] = 0x29;
i++;
}
free(coTmp);
return 1;
}
int PASCAL EnumPinyinByDigit(char* digitString, char pinyin[][8])
{
int count=0;
int i,len;
len = strlen(digitString);
if(0==len) return 0;
for(i=TOTAL_PINYIN_DATA_ITEMS-1; i>=0; i--) {
if(!memcmp(g_CoDigitPinyin[i].szDigit, digitString, len)) {
strcpy(pinyin[count], g_CoDigitPinyin[i].pinyinItem->szPinyin);
count++;
if(count>=(PY_EDITER_PY_ITEMS-1)) break;
}
}
if(count>0)
pinyin[count][0] = 0;
return count;
}
PINYIN_DATA_ITEM* pyGetPinyinItem(char* pinyin)
{
int res;
int pos1,pos2,mid;
pos1 = 0;
pos2 = TOTAL_PINYIN_DATA_ITEMS;
while(pos1<pos2) {
mid = (pos1+pos2)>>1;
res = strcmp(g_PinyinItem[mid].szPinyin, pinyin);
if(!res)
return &(g_PinyinItem[mid]);
if(res>0) {
if(!strcmp(g_PinyinItem[pos1].szPinyin, pinyin))
return &(g_PinyinItem[pos1]);
pos2 = mid-1;
} else {
if(!strcmp(g_PinyinItem[pos2].szPinyin, pinyin))
return &(g_PinyinItem[pos2]);
pos1 = mid+1;
}
}
return 0;
}
int PASCAL GetHanZiByPinyin(char* pinyin,char hanzi[][4])
{
int ret;
char *ptr;
PINYIN_DATA_ITEM* pItem;
if( NULL == pinyin ) return 0 ;
pItem = pyGetPinyinItem( pinyin);
if(pItem == 0 ) return 0 ;
ptr = g_RawPinyinData + pItem->nHanziOffset;
ret = 0;
while((ret<pItem->nHanziNumber) && (ret<PY_EDITER_HZ_ITEMS)) {
hanzi[ret][0]=ptr[0];
hanzi[ret][1]=ptr[1];
hanzi[ret][2]=0;
ptr += 2;
ret++;
}
return (ret) ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -