📄 afce_zi.c
字号:
static Boolean
afImeClearEvent ( chiEditContext *chiContext_p,
SignalBuffer *signalBuffer_p)
{
Boolean keyValid = TRUE;
switch (chiContext_p->imeState)
{
case IME_STATE_PY_INPUT:/*在输入选择的状态,按了CLEAR键*/
case IME_STATE_BISHUN_INPUT:
case IME_STATE_COMPONENT_INPUT:
/*清除一个输入*/
keyValid = afClearInput(chiContext_p);
//chiContext_p->currentHzInfo.currentHzIndex=0;
break;
case IME_STATE_PY_HZ_SELECT:/*此处处理从选字状态的C键重新回到拼音选择状态*/
/*输入拼音的时候,如果按了删除键,则重新取上一组的拼音内容,将表置空*/
keyValid = afGetPyGroup(chiContext_p);
//keyValid = afGetPyHzGroup(chiContext_p);
chiContext_p->imeState=IME_STATE_PY_INPUT;
#if 0
/*先在inputValue中填一个空格,后面在afClearInput中会统一减去*/
chiContext_p->inputValue[chiContext_p->inputSerial]=0x20;
chiContext_p->inputSerial++;
chiContext_p->inputValue[chiContext_p->inputSerial]=0;
keyValid = afClearInput(chiContext_p);
#endif
// chiContext_p->currentHzInfo.currentHzIndex=0;
break;
case IME_STATE_SE_INPUT:/*此处处理SE下按C键*/
#if 0
chiContext_p->inputValue[chiContext_p->inputSerial]=0x20;
chiContext_p->inputSerial++;
chiContext_p->inputValue[chiContext_p->inputSerial]=0;
#endif
keyValid = afClearInput(chiContext_p);
break;
case IME_STATE_ASSOCIATION_SELECT:/*此处处理从联想状态返回*/
hzExitDataBody.handlerIsUnloaded = TRUE;
hzExitDataBody.inputChineseFlag = TRUE;
afglSendHandlerExitSig(chiContext_p->myHandlerId,
chiContext_p->parentHandlerId,
sizeof(AfHzExitDataBody),
&hzExitDataBody);
afshUnloadHandler(chiContext_p->myHandlerId);
break;
default:
keyValid = FALSE;
break;
}
return keyValid;
}
/***************************************************************************
* function: afClearInput
* Description: 清除最后一个按键输入
****************************************************************************/
Boolean afClearInput(chiEditContext *chiContext_p)
{
Boolean retVal = TRUE;
/*输入部件以后,选择的还是部件,然后按C键*/
if(( Zi8IsComponent(elementBuffer[0]))&& chiContext_p->currentPyBsh[1]==0)
{
/*clear the elementBuffer*/
memset (&elementBuffer[0], '\0', sizeof(elementBuffer));
hzExitDataBody.handlerIsUnloaded = TRUE;
hzExitDataBody.inputChineseFlag = TRUE;
afglSendHandlerExitSig(chiContext_p->myHandlerId,
chiContext_p->parentHandlerId,
sizeof(AfHzExitDataBody),
&hzExitDataBody);
afshUnloadHandler(chiContext_p->myHandlerId);
}
if(chiContext_p->inputSerial>0)
{
chiContext_p->inputValue[--(chiContext_p->inputSerial)]='\0';
if(chiContext_p->inputSerial ==0)
{
/*如果是部件输入法,开始输入然后选择,可能选的还是一个部件,也可能就是一个字,如果选择的是一个
部件,后面还可能继续输入。在删除的时候,删到最后,将后来输入的全部删除了,chiContext_p->inputSerial ==0
但是还会剩下一个原来选择的部件,就是这里了*/
if(( Zi8IsComponent(elementBuffer[0])))
{
retVal = afGetStrokeHzInfo(chiContext_p);
}
/*除去上面这种特殊的情况,就是真的全都删空了,退出*/
else
{
hzExitDataBody.handlerIsUnloaded = TRUE;
hzExitDataBody.inputChineseFlag = TRUE;
afglSendHandlerExitSig(chiContext_p->myHandlerId,
chiContext_p->parentHandlerId,
sizeof(AfHzExitDataBody),
&hzExitDataBody);
afshUnloadHandler(chiContext_p->myHandlerId);
}
}
else/*还剩有输入的内容*/
{
switch (chiContext_p->imeState)
{
case IME_STATE_PY_INPUT: /*正在输入拼音*/
/*输入拼音的时候,如果按了删除键,则重新取上一组的拼音内容,将表置空*/
memset(&chiContext_p->pyOrSEgroupNumTable[0],'\0',
sizeof(chiContext_p->pyOrSEgroupNumTable));
chiContext_p->pyOrSEcurrentPageNo = 0;
retVal = afGetPyGroup(chiContext_p);
/*重新取上一组拼音以后,应该将当前拼音位置设为第一个拼音的位置*/
chiContext_p->currentPyOrSEGroupInfo.currentPosInLib =
chiContext_p->currentPyOrSEGroupInfo.firstPosInLib;
memset(&chiContext_p->currentHzGroupInfo,'\0',
sizeof(chiContext_p->currentHzGroupInfo));
retVal = afGetPyHzGroup(chiContext_p);
break;
case IME_STATE_BISHUN_INPUT: /*正在输入部件*/
memset(&chiContext_p->currentHzGroupInfo,'\0',
sizeof(chiContext_p->currentHzGroupInfo));
retVal = afGetBhHzInfo(chiContext_p);
break;
case IME_STATE_COMPONENT_INPUT: /*正在输入部件*/
memset(&chiContext_p->currentHzGroupInfo,'\0',
sizeof(chiContext_p->currentHzGroupInfo));
retVal = afGetStrokeHzInfo(chiContext_p);
break;
case IME_STATE_SE_INPUT: /*正在输入SE*/
memset(&chiContext_p->pyOrSEgroupNumTable[0],'\0',
sizeof(chiContext_p->pyOrSEgroupNumTable));
chiContext_p->pyOrSEcurrentPageNo = 0;
retVal = afGetSmartEnGroup(chiContext_p);
chiContext_p->currentPyOrSEGroupInfo.currentPosInLib =
chiContext_p->currentPyOrSEGroupInfo.firstPosInLib;
break;
default:
retVal = FALSE;
break;
}
}
}
else
{
retVal = FALSE;
}
return(retVal);
}
static Boolean
afImeSelectEvent ( chiEditContext *chiContext_p,
SignalBuffer *signalBuffer_p)
{
Boolean keyValid = TRUE;
int i=0;
switch (chiContext_p->imeState)
{
case IME_STATE_SE_INPUT: /*智能英语状态*/
/*智能英文选择时,要判断是否为*号。如果是,则不让选择*/
/*否则很简单,直接将英文放回,并退出输入法*/
if(chiContext_p->currentPyBsh[0]==0x002A)/*确保输入有内容*/
{
keyValid = FALSE;
break;
}
else
{
Int8 selectSEIndex = chiContext_p->currentPyOrSEGroupInfo.currentPosInLib - \
chiContext_p->currentPyOrSEGroupInfo.firstPosInLib ;
memset(&chiContext_p->inputValue[0],'\0',sizeof(chiContext_p->inputValue));
while(chiContext_p->currentPyOrSEGroupInfo.groupData[selectSEIndex][i]!=0)
{ hzExitDataBody.hzUniCode=
(Int16)chiContext_p->currentPyOrSEGroupInfo.groupData[selectSEIndex][i];
hzExitDataBody.handlerIsUnloaded = FALSE;
hzExitDataBody.inputChineseFlag = FALSE;
afglSendHandlerExitSig(chiContext_p->myHandlerId,
chiContext_p->parentHandlerId,
sizeof(AfHzExitDataBody),
&hzExitDataBody);
chiContext_p->currentPyBsh[i]=0;
i++;
}
/*added by wangqing 2001/05/28 add a blank for every word
and move unloadhandler out of while*/
hzExitDataBody.hzUniCode= 0x20;
hzExitDataBody.handlerIsUnloaded = TRUE;
hzExitDataBody.inputChineseFlag = FALSE;
afglSendHandlerExitSig(chiContext_p->myHandlerId,
chiContext_p->parentHandlerId,
sizeof(AfHzExitDataBody),
&hzExitDataBody);
afshUnloadHandler(chiContext_p->myHandlerId);
/*added by wangqing 2001/05/28 end*/
}
break;
case IME_STATE_PY_INPUT: /*拼音输入状态*/
if(chiContext_p->currentHzGroupInfo.currentSelHz[0]==0)/*确保输入有内容*/
{
keyValid = FALSE;
break;
}
/*拼音(或笔顺或部件)输入完了,确定时焦点来到选字区*/
chiContext_p->imeState = IME_STATE_PY_HZ_SELECT;
// chiContext_p->currentHzGroupInfo.currentHzIndex=0;
/*将选中的这个拼音COPY到currentPyBsh*/
{
Int8 i;
i =chiContext_p->currentPyOrSEGroupInfo.currentPosInLib
- chiContext_p->currentPyOrSEGroupInfo.firstPosInLib;
utStrcpyUcs2(chiContext_p->currentPyBsh,
chiContext_p->currentPyOrSEGroupInfo.groupData[i]);
}
break;
case IME_STATE_BISHUN_INPUT: /*笔顺输入状态,和汉字选择状态在一起*/
case IME_STATE_COMPONENT_INPUT: /*部件输入状态,和汉字选择状态在一起*/
/*拼音(或笔顺或部件)输入完了,确定时焦点来到选字区*/
chiContext_p->imeState = IME_STATE_ASSOCIATION_SELECT;
afSelHz(chiContext_p);
break;
case IME_STATE_PY_HZ_SELECT: /*拼音输入后汉字选择状态*/
chiContext_p->imeState = IME_STATE_ASSOCIATION_SELECT;
case IME_STATE_ASSOCIATION_SELECT: /*选字以后的联想状态*/
afSelHz(chiContext_p);
/*选了字以后,要将拼音的内容清空*/
chiContext_p->pyOrSEcurrentPageNo = 0;
break;
default:
keyValid = FALSE;
break;
}
return keyValid;
}
static Boolean
afImeScrollUpEvent ( chiEditContext *chiContext_p,
SignalBuffer *signalBuffer_p)
{
Boolean keyValid = TRUE;
switch (chiContext_p->imeState)
{
case IME_STATE_SE_INPUT: /*智能英语状态*/
if (chiContext_p->pyOrSEcurrentPageNo==0)
{
keyValid = FALSE;
}
else
{
chiContext_p->pyOrSEcurrentPageNo--;
keyValid = afGetSmartEnGroup(chiContext_p);
/*重新取上一组se以后,应该将当前se位置设为第一个se的位置*/
chiContext_p->currentPyOrSEGroupInfo.currentPosInLib =
chiContext_p->currentPyOrSEGroupInfo.firstPosInLib;
}
break;
case IME_STATE_PY_INPUT: /*拼音输入状态*/
if (chiContext_p->pyOrSEcurrentPageNo==0)
{
keyValid = FALSE;
}
else
{
chiContext_p->pyOrSEcurrentPageNo--;
keyValid = afGetPyGroup(chiContext_p);
/*重新取上一组拼音以后,应该将当前拼音位置设为第一个拼音的位置*/
chiContext_p->currentPyOrSEGroupInfo.currentPosInLib =
chiContext_p->currentPyOrSEGroupInfo.firstPosInLib;
memset(&chiContext_p->currentHzGroupInfo,'\0',
sizeof(chiContext_p->curren
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -