1 #ifndef _TABLE_H
2 #define _TABLE_H
3 
4 #include <limits.h>
5 #include <scim_fcitx_imengine.h>
6 #include "ime.h"
7 
8 #define TABLE_CONFIG_FILENAME "tables.conf"
9 
10 #define MAX_CODE_LENGTH  12
11 #define PHRASE_MAX_LENGTH 10
12 #define FH_MAX_LENGTH  10
13 #define TABLE_AUTO_SAVE_AFTER 48
14 
15 typedef struct _RULE_RULE {
16     unsigned char   iFlag;	// 1 --> 正序   0 --> 逆序
17     unsigned char   iWhich;	//第几个字
18     unsigned char   iIndex;	//第几个编码
19 } RULE_RULE;
20 
21 typedef struct _RULE {
22     unsigned char   iWords;	//多少个字
23     unsigned char   iFlag;	//1 --> 大于等于iWords  0 --> 等于iWords
24     RULE_RULE      *rule;
25 } RULE;
26 
27 typedef struct _TABLE {
28     char            strPath[PATH_MAX];
29     char            strSymbolFile[PATH_MAX];
30     char            strName[MAX_IM_NAME + 1];
31     char           *strInputCode;
32     unsigned char   iCodeLength;
33     char           *strIgnoreChars;
34     char            cMatchingKey;
35     char            strSymbol[MAX_CODE_LENGTH + 1];
36     char            cPinyin;
37     unsigned char   bRule;
38 
39     RULE           *rule;	//组词规则
40     INT8            iIMIndex;	//记录该码表对应于输入法的顺序
41     unsigned int    iRecordCount;
42     ADJUSTORDER     tableOrder;
43 
44     Bool            bUsePY;	//使用拼音
45     Bool	    bGetPY;	//查拼音读音
46     Bool            bTableAutoSendToClient;	//自动上屏
47     Bool            bUseMatchingKey;	//是否模糊匹配
48     Bool            bAutoPhrase;	//是否自动造词
49     INT8            iSaveAutoPhraseAfter;	//选择N次后保存自动词组,0-不保存,1-立即保存
50     Bool            bAutoPhrasePhrase;	//词组是否参与造词
51     INT8            iAutoPhrase;	//自动造词长度
52     Bool            bTableExactMatch;	//是否只显示精确匹配的候选字/词
53     Bool            bPromptTableCode;	//输入完毕后是否提示编码--使用拼音时总有提示
54 } TABLE;
55 
56 typedef struct _RECORD {
57     char           *strCode;
58     char           *strHZ;
59     struct _RECORD *next;
60     struct _RECORD *prev;
61     unsigned int    iHit;
62     unsigned int    iIndex;
63     unsigned int    flag:1;
64 } RECORD;
65 
66 /* 根据键码生成一个简单的索引,指向该键码起始的第一个记录本 */
67 typedef struct _RECORD_INDEX {
68     RECORD         *record;
69     char            cCode;
70 } RECORD_INDEX;
71 
72 typedef struct _FH {
73     char            strFH[FH_MAX_LENGTH * 2 + 1];
74 } FH;
75 
76 typedef struct _AUTOPHRASE {
77     char           *strHZ;
78     char           *strCode;
79     INT8            iSelected;
80     unsigned int    flag:1;
81     struct _AUTOPHRASE *next;	//构造一个队列
82 } AUTOPHRASE;
83 
84 typedef union {
85     AUTOPHRASE     *autoPhrase;
86     RECORD         *record;
87 } CANDWORD;
88 
89 typedef struct _TABLECANDWORD {
90     unsigned int    flag:1;	//指示该候选字/词是自动组的词还是正常的字/词
91     CANDWORD        candWord;
92 } TABLECANDWORD;
93 
94 extern TABLE          *table;
95 extern INT8            iTableIMIndex;
96 extern INT8            iTableCount;
97 
98 extern Bool            bTableDictLoaded;	//需要用的时候再读入码表
99 
100 extern RECORD         *currentRecord;
101 extern RECORD         *recordHead;
102 extern RECORD        **tableSingleHZ;	//记录码表中的单字,以提高自动词组的速度
103 extern unsigned int    iSingleHZCount;
104 extern TABLECANDWORD   tableCandWord[];
105 
106 extern RECORD_INDEX   *recordIndex;
107 
108 extern AUTOPHRASE     *autoPhrase;
109 extern AUTOPHRASE     *insertPoint;
110 
111 extern INT16           iAutoPhrase;
112 extern INT16           iTotalAutoPhrase;
113 
114 extern INT8            iTableOrderChanged;
115 extern char            strTableLegendSource[];
116 
117 extern FH             *fh;
118 extern int             iFH;
119 extern unsigned int    iTableIndex;
120 
121 extern Bool            bIsTableDelPhrase;
122 extern KeyEvent         hkTableDelPhrase[];
123 extern Bool            bIsTableAdjustOrder;
124 extern KeyEvent         hkTableAdjustOrder[];
125 extern Bool            bIsTableAddPhrase;
126 extern KeyEvent         hkTableAddPhrase[];
127 
128 extern INT8            iTableChanged;
129 extern INT8            iTableNewPhraseHZCount;
130 extern Bool            bCanntFindCode;	//记录新组成的词能否生成五笔编码--一般情况下都是可以的
131 extern char           *strNewPhraseCode;
132 
133 extern SINGLE_HZ       hzLastInput[];	//记录最近输入的汉字
134 extern INT16           iHZLastInputCount;
135 extern Bool            bTablePhraseTips;
136 
137 extern ADJUSTORDER     PYBaseOrder;
138 
139 void            LoadTableInfo (void);
140 Bool            LoadTableDict (void);
141 void            TableInit (void);
142 void            FreeTableIM (void);
143 void            SaveTableDict (void);
144 Bool            IsInputKey (int iKey);
145 Bool            IsIgnoreChar (char cChar);
146 INPUT_RETURN_VALUE DoTableInput (const KeyEvent& key);
147 INPUT_RETURN_VALUE TableGetCandWords (SEARCH_MODE mode);
148 void            TableAddCandWord (RECORD * wbRecord, SEARCH_MODE mode);
149 void            TableAddAutoCandWord (INT16 which, SEARCH_MODE mode);
150 INPUT_RETURN_VALUE TableGetLegendCandWords (SEARCH_MODE mode);
151 void            TableAddLegendCandWord (RECORD * record, SEARCH_MODE mode);
152 INPUT_RETURN_VALUE TableGetFHCandWords (SEARCH_MODE mode);
153 INPUT_RETURN_VALUE TableGetPinyinCandWords (SEARCH_MODE mode);
154 void            TableResetStatus (void);
155 char           *TableGetLegendCandWord (int iIndex);
156 char           *TableGetFHCandWord (int iIndex);
157 Bool            HasMatchingKey (void);
158 int             TableCompareCode (char *strUser, char *strDict);
159 int             TableFindFirstMatchCode (void);
160 RECORD         *TableFindCode (char *strHZ, Bool bMode);
161 void            TableAdjustOrderByIndex (int iIndex);
162 void            TableDelPhraseByIndex (int iIndex);
163 void            TableDelPhraseByHZ (char *strHZ);
164 void            TableDelPhrase (RECORD * record);
165 RECORD         *TableHasPhrase (char *strCode, char *strHZ);
166 Bool            TableCandHasPhrase (char *strHZ);
167 RECORD         *TableFindPhrase (char *strHZ);
168 void            TableInsertPhrase (char *strCode, char *strHZ);
169 char           *TableGetCandWord (int iIndex);
170 void            TableCreateNewPhrase (void);
171 void            TableCreatePhraseCode (char *strHZ);
172 Bool            TablePhraseTips (void);
173 void            TableSetCandWordsFlag (int iCount, Bool flag);
174 void            TableResetFlags (void);
175 
176 void            TableCreateAutoPhrase (INT8 iCount);
177 
178 void            UpdateHZLastInput (char *);
179 
180 #endif
181