1 #ifndef _IME_H
2 #define _IME_H
3 
4 #include "xim.h"
5 #ifdef __FreeBSD__
6 #include <sys/types.h>
7 #endif
8 
9 #include "scim_fcitx_imengine.h"
10 
11 #define MAX_CAND_WORD	10
12 #define MAX_USER_INPUT 300
13 
14 #define HOT_KEY_COUNT	2
15 #define MAX_HZ_SAVED    1024
16 
17 #define MAX_IM_NAME	12
18 
19 #define NAME_OF_PINYIN		"pinyin"
20 #define NAME_OF_SHUANGPIN	"shuangpin"
21 #define NAME_OF_QUWEI		"quwei"
22 
23 #define TEMP_FILE		"FCITX_DICT_TEMP"
24 
25 typedef enum _SEARCH_MODE {
26     SM_FIRST,
27     SM_NEXT,
28     SM_PREV
29 } SEARCH_MODE;
30 
31 typedef enum ADJUST_ORDER {
32     AD_NO,
33     AD_FAST,
34     AD_FREQ
35 } ADJUSTORDER;
36 
37 typedef enum _INPUT_RETURN_VALUE {
38     //IRV_UNKNOWN = -1,
39     IRV_DO_NOTHING = 0,
40     IRV_DONOT_PROCESS,
41     IRV_DONOT_PROCESS_CLEAN,
42     IRV_CLEAN,
43     IRV_TO_PROCESS,
44     IRV_DISPLAY_MESSAGE,
45     IRV_DISPLAY_CANDWORDS,
46     IRV_DISPLAY_LAST,
47     IRV_PUNC,
48     IRV_ENG,
49     IRV_GET_LEGEND,
50     IRV_GET_CANDWORDS,
51     IRV_GET_CANDWORDS_NEXT
52 } INPUT_RETURN_VALUE;
53 
54 typedef enum _ENTER_TO_DO {
55     K_ENTER_NOTHING,
56     K_ENTER_CLEAN,
57     K_ENTER_SEND
58 } ENTER_TO_DO;
59 
60 typedef struct _SINGLE_HZ {
61     char            strHZ[3];
62 } SINGLE_HZ;
63 
64 typedef enum _KEY_RELEASED {
65     KR_OTHER = 0,
66     KR_CTRL,
67     KR_2ND_SELECTKEY,
68     KR_3RD_SELECTKEY
69 } KEY_RELEASED;
70 
71 typedef struct {
72     char            strName[MAX_IM_NAME + 1];
73     void            (*ResetIM) (void);
74                     INPUT_RETURN_VALUE (*DoInput) (const KeyEvent&);
75                     INPUT_RETURN_VALUE (*GetCandWords) (SEARCH_MODE);
76     char           *(*GetCandWord) (int);
77     char           *(*GetLegendCandWord) (int);
78                     Bool (*PhraseTips) (void);
79     void            (*Init) (void);
80     void            (*Destroy) (void);
81 } IM;
82 
83 
84 #define MESSAGE_MAX_LENGTH	300	//����������ʾ������ȣ����ַ���
85 
86 /* ������������ʾ�����ݷ�Ϊ���¼��� */
87 #define MESSAGE_TYPE_COUNT	7
88 
89 typedef enum {
90     MSG_TIPS,			//��ʾ�ı�
91     MSG_INPUT,			//�û�������
92     MSG_INDEX,			//��ѡ��ǰ������
93     MSG_FIRSTCAND,		//��һ����ѡ��
94     MSG_USERPHR,		//�û�����
95     MSG_CODE,			//��ʾ�ı���
96     MSG_OTHER			//�����ı�
97 } MSG_TYPE;
98 
99 typedef struct {
100     char            strMsg[MESSAGE_MAX_LENGTH + 1];
101     int        type;
102 } MESSAGE;
103 
104 
105 extern IM             *im;
106 extern INT8            iIMCount;
107 
108 extern int             iMaxCandWord;
109 extern int             iCandPageCount;
110 extern int             iCurrentCandPage;
111 extern int             iCandWordCount;
112 
113 extern int             iLegendCandWordCount;
114 extern int             iLegendCandPageCount;
115 extern int             iCurrentLegendCandPage;
116 
117 extern int             iCodeInputCount;
118 
119 // *************************************************************
120 extern char            strCodeInput[];
121 extern char            strStringGet[];	//�������뷨���ص���Ҫ�͵��ͻ������е��ִ�
122 extern unsigned int   messageColor[];
123 extern unsigned int   cursorColor;
124 // *************************************************************
125 
126 extern ENTER_TO_DO     enterToDo;
127 
128 extern Bool            bCorner;	//ȫ����л�
129 extern Bool            bChnPunc;	//��Ӣ�ı���л�
130 extern Bool            bUseGBK;	//�Ƿ�֧��GBK
131 extern Bool            bIsDoInputOnly;	//�����Ƿ�ֻ�����뷨���������
132 extern Bool            bLastIsNumber;	//��һ�������Dz��ǰ���������
133 extern Bool            bInCap;	//�Dz��Ǵ��ڴ�д���Ӣ��״̬
134 extern Bool            bAutoHideInputWindow;	//�Ƿ��Զ�����������
135 extern Bool            bEngPuncAfterNumber;	//���ֺ��������Ƿ���(ֻ��'.'/','��Ч)
136 extern Bool            bPhraseTips;
137 extern INT8            lastIsSingleHZ;
138 extern int 	       iCursorPos;
139 extern Bool            bEngAfterSemicolon;
140 extern Bool            bEngAfterCap;
141 extern Bool            bDisablePagingInLegend;
142 
143 extern KeyEvent             i2ndSelectKey;	//�ڶ�����ѡ��ѡ�����Ϊɨ����
144 extern KeyEvent             i2ndSelectKeyPress;	//�ڶ�����ѡ��ѡ�����Ϊɨ����
145 extern KeyEvent             i3rdSelectKey;	//��������ѡ��ѡ�����Ϊɨ����
146 extern KeyEvent             i3rdSelectKeyPress;	//��������ѡ��ѡ�����Ϊɨ����
147 
148 
149 extern KEY_RELEASED    keyReleased;
150 extern Bool		bDoubleSwitchKey;
151 extern KeyEvent          switchKey;
152 extern KeyEvent          switchKeyPress;
153 
154 //�ȼ�����
155 extern KeyEvent         hkGBK[];
156 extern KeyEvent         hkLegend[];
157 extern KeyEvent         hkCorner[];	//ȫ����л�
158 extern KeyEvent         hkPunc[];	//���ı��
159 extern KeyEvent         hkNextPage[];	//��һҳ
160 extern KeyEvent         hkPrevPage[];	//��һҳ
161 
162 extern Bool            bUseLegend;
163 extern Bool            bIsInLegend;
164 
165 extern INT8            iIMIndex;
166 extern Bool            bUsePinyin;
167 extern Bool            bUseSP;
168 extern Bool            bUseQW;
169 extern Bool            bUseTable;
170 
171 
172 extern MESSAGE         messageUp[];
173 extern uint            uMessageUp;
174 extern MESSAGE         messageDown[];
175 extern uint            uMessageDown;
176 extern Bool            bShowPrev;
177 extern Bool            bShowNext;
178 extern Bool	       bShowCursor;
179 extern Bool		bLocked;
180 
181 
182 void            ResetInput (void);
183 bool            ProcessKey (FcitxInstance &fInst, const KeyEvent& key);
184 
185 Bool            IsHotKey (const KeyEvent& key, KeyEvent * hotkey);
186 INPUT_RETURN_VALUE ChangeCorner (FcitxInstance& finst);
187 INPUT_RETURN_VALUE ChangePunc (FcitxInstance& finst);
188 INPUT_RETURN_VALUE ChangeGBK (FcitxInstance& finst);
189 INPUT_RETURN_VALUE ChangeLegend (FcitxInstance& finst);
190 void            SwitchIM (INT8 index);
191 void            DoPhraseTips ();
192 
193 void            RegisterNewIM (char *strName,
194 			       void (*ResetIM) (void),
195 			       INPUT_RETURN_VALUE (*DoInput) (int),
196 			       INPUT_RETURN_VALUE (*GetCandWords) (SEARCH_MODE),
197 			       char *(*GetCandWord) (int),
198 			       char *(*GetLegendCandWord) (int),
199 			       Bool (*PhraseTips) (void),
200 			       void (*Init) (void),
201 			       void (*Destroy) (void));
202 
203 
204 Bool            IsIM (char *strName);
205 void            SaveIM (void);
206 void            SetIM (void);
207 void 		CloseIM(FcitxInstance&);
208 #endif
209