1 #ifndef TABLEDICT_H 2 #define TABLEDICT_H 3 4 #include "fcitx-utils/utf8.h" 5 #include "fcitx-config/fcitx-config.h" 6 #include "fcitx-config/hotkey.h" 7 #include "fcitx-utils/memory.h" 8 #include "fcitx/candidate.h" 9 10 #define MAX_CODE_LENGTH 30 11 #define PHRASE_MAX_LENGTH 10 12 #define FH_MAX_LENGTH 10 13 #define TABLE_AUTO_SAVE_AFTER 1024 14 #define AUTO_PHRASE_COUNT 10000 15 #define SINGLE_HZ_COUNT 66000 16 17 #define RECORDTYPE_NORMAL 0x0 18 #define RECORDTYPE_PINYIN 0x1 19 #define RECORDTYPE_CONSTRUCT 0x2 20 #define RECORDTYPE_PROMPT 0x3 21 22 struct _FcitxTableState; 23 24 typedef enum { 25 TABLE_NEW = 0, // thus fcitx_utils_new will set this to default value 26 TABLE_PENDING = 1, 27 TABLE_REGISTERED = 2 28 } TableStatus; 29 30 typedef enum { 31 AD_NO = 0, 32 AD_FAST = 1, 33 AD_FREQ = 2 34 } ADJUSTORDER; 35 36 typedef struct { 37 char strFH[FH_MAX_LENGTH * UTF8_MAX_LENGTH + 1]; 38 } FH; 39 40 typedef struct { 41 unsigned char iFlag; // 1 --> 正序 0 --> 逆序 42 unsigned char iWhich; //第几个字 43 unsigned char iIndex; //第几个编码 44 } RULE_RULE; 45 46 typedef struct { 47 unsigned char iWords; //多少个字 48 unsigned char iFlag; //1 --> 大于等于iWords 0 --> 等于iWords 49 RULE_RULE *rule; 50 } RULE; 51 52 typedef struct _RECORD { 53 char *strCode; 54 char *strHZ; 55 struct _RECORD *next; 56 struct _RECORD *prev; 57 uint32_t iHit; 58 uint32_t iIndex; 59 int8_t type; 60 } RECORD; 61 62 typedef struct _AUTOPHRASE { 63 char *strHZ; 64 char *strCode; 65 char iSelected; 66 struct _AUTOPHRASE *next; //构造一个队列 67 } AUTOPHRASE; 68 69 /* 根据键码生成一个简单的索引,指向该键码起始的第一个记录 */ 70 typedef struct { 71 RECORD *record; 72 char cCode; 73 } RECORD_INDEX; 74 75 typedef struct { 76 char strHZ[UTF8_MAX_LENGTH + 1]; 77 } SINGLE_HZ; 78 79 typedef enum { 80 CM_NONE, 81 CM_ALT, 82 CM_CTRL, 83 CM_SHIFT, 84 _CM_COUNT 85 } ChooseModifier; 86 87 typedef struct { 88 char* strInputCode; 89 RECORD_INDEX* recordIndex; 90 unsigned char iCodeLength; 91 unsigned char iPYCodeLength; 92 char* strIgnoreChars; 93 unsigned char bRule; 94 RULE* rule; 95 uint32_t iRecordCount; 96 RECORD* tableSingleHZ[SINGLE_HZ_COUNT]; 97 RECORD* tableSingleHZCons[SINGLE_HZ_COUNT]; 98 unsigned int iTableIndex; 99 boolean bHasPinyin; 100 RECORD* currentRecord; 101 RECORD* recordHead; 102 int iFH; 103 FH* fh; 104 char* strNewPhraseCode; 105 AUTOPHRASE* autoPhrase; 106 AUTOPHRASE* insertPoint; 107 int32_t iAutoPhrase; 108 int iTableChanged; 109 int iHZLastInputCount; 110 SINGLE_HZ hzLastInput[PHRASE_MAX_LENGTH]; //Records last HZ input 111 RECORD* promptCode[256]; 112 FcitxMemoryPool* pool; 113 } TableDict; 114 115 typedef struct { 116 FcitxGenericConfig config; 117 char *uniqueName; 118 char *strName; 119 char *strIconName; 120 char *strPath; 121 ADJUSTORDER tableOrder; 122 int iSimpleLevel; 123 int iPriority; 124 boolean bUsePY; 125 char cPinyin; //输入该键后,表示进入临时拼音状态 126 int iTableAutoSendToClient; //自动上屏 127 int iTableAutoSendToClientWhenNone; //空码自动上屏 128 boolean bSendRawPreedit; 129 char *strEndCode; //中止键,按下该键相当于输入该键后再按一个空格 130 boolean bUseMatchingKey; //是否模糊匹配 131 char cMatchingKey; 132 boolean bTableExactMatch; //是否只显示精确匹配的候选字/词 133 boolean bAutoPhrase; //是否自动造词 134 boolean bAutoPhrasePhrase; //词组是否参与造词 135 int32_t iAutoPhraseLength; //自动造词长度 136 int iSaveAutoPhraseAfter; //选择N次后保存自动词组,0-不保存,1-立即保存 137 boolean bPromptTableCode; //输入完毕后是否提示编码 138 boolean bNoMatchDontCommit; 139 char *strSymbol; 140 char *strSymbolFile; 141 char *strChoose; //设置选择键 142 ChooseModifier chooseModifier; 143 char *langCode; 144 char *kbdlayout; 145 boolean customPrompt; 146 boolean bUseAlternativePageKey; 147 boolean bUseAlternativeCandidateWordNumber; 148 int iCandidateWordNumber; 149 boolean bFirstCandidateAsPreedit; 150 boolean bCommitAndPassByInvalidKey; 151 boolean bCommitKeyCommitWhenNoMatch; 152 boolean bIgnorePunc; 153 char* ignorePuncList; 154 FcitxHotkey hkAlternativePrevPage[2]; 155 FcitxHotkey hkAlternativeNextPage[2]; 156 FcitxHotkey hkCommitKey[2]; 157 FcitxCandidateLayoutHint layoutHint; 158 boolean bEnabled; 159 160 struct _FcitxTableState* owner; 161 TableDict* tableDict; 162 boolean bUseAutoSend; 163 char* confName; 164 TableStatus status; 165 166 UT_hash_handle hh; 167 } TableMetaData; 168 169 boolean LoadTableDict(TableMetaData* tableMetaData); 170 void SaveTableDict(TableMetaData* tableMetaData); 171 void FreeTableDict(TableMetaData* tableMetaData); 172 void UpdateTableMetaData(TableMetaData* tableMetaData); 173 174 void TableInsertPhrase(TableDict* tableDict, const char *strCode, const char *strHZ); 175 RECORD *TableFindPhrase(const TableDict* tableDict, const char *strHZ); 176 boolean TableCreatePhraseCode(TableDict* tableDict, char* strHZ); 177 void TableCreateAutoPhrase(TableMetaData* tableMetaData, char iCount); 178 RECORD *TableHasPhrase(const TableDict* tableDict, const char *strCode, const char *strHZ); 179 void TableDelPhraseByHZ(TableDict* tableDict, const char *strHZ); 180 void TableDelPhrase(TableDict* tableDict, RECORD * record); 181 void TableUpdateHitFrequency(TableMetaData* tableMetaData, RECORD * record); 182 int TableCompareCode(const TableMetaData* tableMetaData, const char* strUser, const char* strDict, boolean exactMatch); 183 int TableFindFirstMatchCode(TableMetaData* tableMetaData, const char* strCodeInput, boolean exactMatch, boolean cacheCurrentRecord); 184 void TableResetFlags(TableDict* tableDict); 185 186 boolean IsInputKey(const TableDict* tableDict, int iKey); 187 boolean IsEndKey(const TableMetaData* tableMetaData, char cChar); 188 boolean IsIgnoreChar(const TableDict* tableDict, char cChar); 189 unsigned int CalHZIndex(char *strHZ); 190 boolean HasMatchingKey(const TableMetaData* tableMetaData, const char* strCodeInput); 191 CONFIG_BINDING_DECLARE(TableMetaData); 192 193 #endif 194 // kate: indent-mode cstyle; space-indent on; indent-width 0; 195