📄 compose.c
字号:
/*++
Copyright (c) 1990-1999 Microsoft Corporation, All Rights Reserved
Module Name:
compose.c
++*/
#include <windows.h>
#include <imm.h>
#include <imedefs.h>
void PASCAL XGBAddCodeIntoCand(LPCANDIDATELIST, WORD);
void PASCAL UnicodeAddCodeIntoCand(LPCANDIDATELIST, WORD);
/**********************************************************************/
/* UnicodeEngine() */
/* Description: */
/* Conv GBcode */
/**********************************************************************/
WORD PASCAL UnicodeEngine(LPPRIVCONTEXT lpImcP)
{
if (lpImcP->bSeq[3] || lpImcP->bSeq[2] == TEXT('?') || lpImcP->bSeq[2] == TEXT(' '))
{
if (lpImcP->bSeq[2] == TEXT('?') || lpImcP->bSeq[2] == TEXT(' '))
{
lpImcP->bSeq[2] = TEXT('0');
lpImcP->bSeq[3] = TEXT('0');
}
return (AsciiToGB(lpImcP));
} else {
return (0);
}
}
/**********************************************************************/
/* XGBEngine() */
/* Description: */
/* Conv GBcode */
/**********************************************************************/
WORD PASCAL XGBEngine(LPPRIVCONTEXT lpImcP)
{
WORD wCode;
if (lpImcP->bSeq[3] ||(lpImcP->bSeq[2] == TEXT('?'))) {
if (lpImcP->bSeq[2] == TEXT('?')){ //add 626
lpImcP->bSeq[2] = TEXT('4');
lpImcP->bSeq[3] = TEXT('0');
}
wCode = AsciiToGB(lpImcP);
return wCode;
} else {
return ((WORD)NULL);
}
}
/**********************************************************************/
/* XGBSpcEng() */
/* Description: */
/* Conv GBcode for Space */
/**********************************************************************/
WORD PASCAL XGBSpcEng(LPPRIVCONTEXT lpImcP)
{
WORD wCode;
lpImcP->bSeq[2] = TEXT('4');
lpImcP->bSeq[3] = TEXT('0');
wCode = AsciiToGB(lpImcP);
return wCode;
}
/**********************************************************************/
/* GBEngine() */
/* Description: */
/* Conv GBcode */
/**********************************************************************/
WORD PASCAL GBEngine(LPPRIVCONTEXT lpImcP)
{
WORD wCode;
if (lpImcP->bSeq[3] ||(lpImcP->bSeq[2] == TEXT('?'))) {
if (lpImcP->bSeq[0] >=TEXT('0') && lpImcP->bSeq[0] <=TEXT('9')) { //Area mode
if (lpImcP->bSeq[2] == TEXT('?')){
lpImcP->bSeq[2] = TEXT('0');
lpImcP->bSeq[3] = TEXT('1');
}
return (AsciiToArea(lpImcP));
}
else if (lpImcP->bSeq[0] >=TEXT('a') && lpImcP->bSeq[0] <=TEXT('f')) { //GB mode
if (lpImcP->bSeq[2] == TEXT('?')){
lpImcP->bSeq[2] = TEXT('a');
lpImcP->bSeq[3] = TEXT('1');
}
wCode = AsciiToGB(lpImcP);
return wCode;
} else {
return ((WORD)NULL);
}
} else
return ((WORD)NULL);
}
/**********************************************************************/
/* GBSpcEng() */
/* Description: */
/* Conv GBcode for Space */
/**********************************************************************/
WORD PASCAL GBSpcEng(LPPRIVCONTEXT lpImcP)
{
if (lpImcP->bSeq[0] >=TEXT('0') && lpImcP->bSeq[0] <=TEXT('9')) { //Area mode
lpImcP->bSeq[2] = TEXT('0');
lpImcP->bSeq[3] = TEXT('1');
return (AsciiToArea(lpImcP));
} else if (lpImcP->bSeq[0] >=TEXT('a') && lpImcP->bSeq[0] <=TEXT('f')) { //GB mode
lpImcP->bSeq[2] = TEXT('a');
lpImcP->bSeq[3] = TEXT('1');
return (AsciiToGB(lpImcP));
} else {
return ((WORD)NULL);
}
}
/**********************************************************************/
/* AsciiToGB */
/* Description: */
/**********************************************************************/
WORD PASCAL AsciiToGB(LPPRIVCONTEXT lpImcP)
{
WORD GBCode;
GBCode = (CharToHex(lpImcP->bSeq[2]) << 4) + CharToHex(lpImcP->bSeq[3]);
GBCode = GBCode * 256;
GBCode = (CharToHex(lpImcP->bSeq[0]) << 4) + CharToHex(lpImcP->bSeq[1]) + GBCode;
return (GBCode);
}
/**********************************************************************/
/* AsciiToArea */
/* Description: */
/**********************************************************************/
WORD PASCAL AsciiToArea(LPPRIVCONTEXT lpImcP)
{
WORD AreaCode;
AreaCode = (CharToHex(lpImcP->bSeq[2]) * 10) + CharToHex(lpImcP->bSeq[3]) + 0xa0;
AreaCode = AreaCode * 256;
AreaCode = (CharToHex(lpImcP->bSeq[0]) * 10) + CharToHex(lpImcP->bSeq[1]) + AreaCode + 0xa0;
return (AreaCode);
}
WORD PASCAL CharToHex(
TCHAR cChar)
{
if (cChar >= TEXT('0') && cChar <= TEXT('9'))
return((WORD)(cChar - TEXT('0')));
else if (cChar >= TEXT('a') && cChar <= TEXT('f'))
return((WORD)(cChar-TEXT('a')+ 0x0a));
else
return ((WORD)NULL);
}
/**********************************************************************/
/* Engine() */
/* Description: */
/* search MB and fill lpCompStr and lpCandList */
/**********************************************************************/
int PASCAL Engine(
LPCOMPOSITIONSTRING lpCompStr,
LPCANDIDATELIST lpCandList,
LPPRIVCONTEXT lpImcP,
LPINPUTCONTEXT lpIMC,
WORD wCharCode)
{
//if(lpCompStr->dwCursorPos < 4
// && (lpImcP->bSeq[2] != TEXT('?'))
// && (wCharCode != TEXT(' '))) {
// return (ENGINE_COMP);
//}
//if( (wCharCode != TEXT(' ')) )
//{ ////继续输入
//return (ENGINE_COMP);
//}
//else if( /*(lpCompStr->dwCursorPos==4) ////大于等于4个字母的时候不让输入了。
// ||(lpImcP->bSeq[2] == TEXT('?'))
// ||*/((wCharCode == TEXT(' ')) /* && (lpCompStr->dwCursorPos == 2) */))
{ ///该显示列表了
if (!lpCompStr)
{
MessageBeep((UINT)-1);
// __asm int 3;
return -1;
}
if (!lpImcP)
{
MessageBeep((UINT)-1);
// __asm int 3;
return -1;
}
{
DWORD i, j;
WORD wCode;
TCHAR ResaultStr[7];
//__asm int 3;
if(wCharCode != TEXT(' ')) ////不是空格显示列表
{
TCHAR szMong[10];
//wCode = GBSpcEng(lpImcP);
//lpImcP->bSeq[2] = 0;
//lpImcP->bSeq[3] = 0;
//wCode = HIBYTE(wCode) | (LOBYTE(wCode) << 8);
///////在这里把 lpImcP->bSeq 中输入的ascii码,转换成蒙文文字
///////添加到 AddCodeIntoCand(lpCandList, 转换后的蒙文 );
///////需要修改 AddCodeIntoCand的第二个参数为字符串
ZeroMemory( szMong, 10*sizeof(TCHAR) );
wCode = (WORD)0x1820;
//__asm int 3;
for (i = 0, j = 0 ; i < IME_MAXCAND ; i+=lstrlen(szMong), j++ ) {
wsprintf( szMong, TEXT("
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -