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