45 #ifdef _MGNCSENGINE_IME 51 #define IME_STOP_MSG 1 52 #define IME_CONTINUE_MSG 0 54 typedef int (*NCSCB_LEN_FIRST_CHAR)(
const unsigned char*,
int len);
56 typedef int (*NCSCB_RETRIEVE_CHAR)(
const char*);
57 typedef struct _CHARSET_CONVERTER
60 NCSCB_RETRIEVE_CHAR retrieve_char;
65 MGNCS_EXPORT BOOL ncsIMInitCharsetConv(CHARSET_CONVERTER* conv,
const char* from_charset,
const char* to_charset, NCSCB_RETRIEVE_CHAR retrieve_char);
66 MGNCS_EXPORT
void ncsIMFreeCharsetConv(CHARSET_CONVERTER* conv);
67 MGNCS_EXPORT
unsigned int ncsIMCharsetConv(CHARSET_CONVERTER* conv,
const char ** pwords);
68 MGNCS_EXPORT
char* ncsIMConvertWord(CHARSET_CONVERTER* conv,
const char* word,
char* out,
int len);
70 MGNCS_EXPORT NCSCB_LEN_FIRST_CHAR ncsIMGetFirstCharCallback(
const char* encoding);
72 typedef struct _mIMEngineClass mIMEngineClass;
73 typedef struct _mIMEngine mIMEngine;
74 typedef struct _mIMIteratorClass mIMIteratorClass;
75 typedef struct _mIMIterator mIMIterator;
77 #define NCS_IM_SCANCODE_ISDIGIT(s) ((s) >= SCANCODE_1 && (s) <= SCANCODE_0) 78 #define NCS_IM_SCANCODE_ISALPHA(s) \ 79 ( ((s) >= SCANCODE_Q && (s) <= SCANCODE_P) \ 80 || ((s) >= SCANCODE_A && (s) <= SCANCODE_L) \ 81 || ((s) >= SCANCODE_Z && (s) <= SCANCODE_M) \ 88 #define mIMIteratorClassHeader(clss, super) \ 89 mObjectClassHeader(clss, super) \ 90 PUBLIC void (*empty)(clss*); \ 91 PUBLIC int (*count)(clss*); \ 92 PUBLIC int (*next)(clss*); \ 93 PUBLIC int (*prev)(clss*); \ 94 PUBLIC int (*locate)(clss*,int off, int type); \ 95 PUBLIC int (*curIndex)(clss*); \ 96 PUBLIC DWORD (*setProperty)(clss*, int id, DWORD valude); \ 97 PUBLIC DWORD (*getProperty)(clss*, int id); \ 98 PUBLIC const char*(*word)(clss*); 100 #define mIMIteratorHeader(clss) \ 101 mObjectHeader(clss) \ 102 CHARSET_CONVERTER *charset_converter; 105 struct _mIMIteratorClass {
106 mIMIteratorClassHeader(mIMIterator,
mObject)
109 struct _mIMIterator {
110 mIMIteratorHeader(mIMIterator)
113 MGNCS_EXPORT
extern mIMIteratorClass g_stmIMIteratorCls;
115 #define MAX_IME_NAME_LEN 16 116 #define mIMEngineClassHeader(clss, super) \ 117 mObjectClassHeader(clss, super) \ 118 const char* (*imeName)(clss*); \ 119 mIMEngine * (*create)(const char* pdict, DWORD add_data); \ 120 const char* (*getEncoding)(clss*); \ 121 PROTECTED NCSCB_RETRIEVE_CHAR (*getRetrieveChar)(clss*);\ 122 mIMIterator* (*newIterator)(clss*); \ 123 mIMIterator* (*newAssocIterator)(clss*); \ 125 BOOL (*findWords)(clss*, mIMIterator* it, const char* input, int start); \ 126 BOOL (*findAssociate)(clss*, mIMIterator* it, const char* input); 128 #define mIMEngineHeader(clss) \ 131 struct _mIMEngineClass{
132 mIMEngineClassHeader(mIMEngine,
mObject)
136 mIMEngineHeader(mIMEngine)
139 MGNCS_EXPORT
extern mIMEngineClass g_stmIMEngineCls;
141 typedef struct _mIMEClass mIMEClass;
142 typedef struct _mIME mIME;
144 typedef struct _mIMManagerClass mIMManagerClass;
145 typedef struct _mIMManager mIMManager;
148 #define NCS_MAX_INPUT 128 149 #define NCS_IME_UPDATE_KEY 0x01 150 #define NCS_IME_UPDATE_WORDS 0x02 151 #define NCS_IME_UPDATE_FEEDBACK 0x04 152 #define NCS_IME_UPDATE_CURSOR 0x08 153 #define NCS_IME_UPDATE_ALL 0xFFFF 155 #define NCS_IMM_BEGIN (MSG_USER + 100) 156 #define NCS_IMM_UPDATE (NCS_IMM_BEGIN + 1) 158 #define NCS_IMM_GETSELWORD (NCS_IMM_BEGIN + 2) 160 #define NCS_IMM_ISSELWORDCTRLACTIVE (NCS_IMM_BEGIN + 3) 161 #define NCS_IMM_SETSELWORDACTIVE (NCS_IMM_BEGIN + 4) 163 #define mIMEClassHeader(clss, super) \ 164 mObjectClassHeader(clss, super) \ 166 PROTECTED BOOL (*showIME)(clss*); \ 167 PROTECTED void (*hideIME)(clss*); \ 168 PROTECTED void (*update)(clss*, DWORD flfags); \ 169 PROTECTED const char* (*getSelWord)(clss*, BOOL braw); \ 170 PROTECTED DWORD (*getIMStatus)(clss*, int); \ 171 PROTECTED BOOL (*setIMStatus)(clss*,int, DWORD); \ 172 PROTECTED BOOL (*onCaretPos)(clss*, int,int); \ 173 PROTECTED BOOL (*findWords)(clss*, const char* input, int start, int len); \ 174 PROTECTED BOOL (*findAssociate)(clss*, const char* words); \ 175 PROTECTED BOOL (*emptyKey)(clss*); \ 176 PROTECTED BOOL (*setEncoding)(clss*, const char*); \ 177 PROTECTED BOOL (*addChar)(clss*, int ch); \ 178 PROTECTED BOOL (*delChar)(clss*,BOOL bback); \ 179 PROTECTED BOOL (*setInsert)(clss*, int pos, int type); \ 180 PROTECTED BOOL (*clearInput)(clss*); \ 181 PROTECTED int (*onChar)(clss*, int ch,DWORD keyflags); \ 182 PROTECTED int (*onKeyDown)(clss*,int scancode, DWORD keyflags); \ 183 PUBLIC void (*setIMEngine)(clss*, mIMEngine*); \ 184 PUBLIC void (*empty)(clss*, BOOL bUpdate); 187 #define mIMEHeader(clss) \ 188 mObjectHeader(clss) \ 190 char input[NCS_MAX_INPUT]; \ 194 mIMManager *ime_manager; \ 195 mIMEngine *ime_engine; \ 196 mIMIterator *key_it; \ 197 mIMIterator *assoc_it; \ 198 CHARSET_CONVERTER charset_conv; \ 200 WNDPROC old_view_proc; 210 MGNCS_EXPORT
extern mIMEClass g_stmIMECls;
212 #define mIME_sendWords(ime) (_c(ime->ime_manager)->sendWords(ime->ime_manager)) 213 #define mIME_sendKeys(ime) (_c(ime->ime_manager)->sendKeys(ime->ime_manager)) 215 #define mIME_FromView(hwnd) ((mIME*)GetWindowAdditionalData(hwnd)) 216 MGNCS_EXPORT
void mIME_attach(mIME *ime, HWND hwnd);
218 MGNCS_EXPORT
void mIME_passMessage(mIME* ime, UINT message, WPARAM wParam, LPARAM lParam);
219 #define mIMView_passMessage(hwnd, message, wParam, lParam) \ 220 mIME_passMessage(mIME_FromView(hwnd), (message), (wParam), (lParam)) 222 #define mIMManagerClassHeader(clss, super) \ 223 mObjectClassHeader(clss, super) \ 224 PROTECTED int (*procIMMsg)(clss*,UINT,WPARAM,LPARAM,LRESULT*); \ 225 PROTECTED BOOL (*nextIME)(clss*); \ 226 PROTECTED BOOL (*setIME)(clss*, const char*); \ 227 PUBLIC BOOL (*addIME)(clss*, mIME *ime); \ 228 PROTECTED BOOL (*sendWords)(clss*); \ 229 PROTECTED BOOL (*sendKeys)(clss*); \ 230 PUBLIC void (*setEncoding)(clss*, const char*); 232 #define mIMManagerHeader(clss) \ 233 mObjectHeader(clss) \ 234 NCSCB_LEN_FIRST_CHAR len_first_char; \ 243 #define NCSF_IMM_DISABLE 0x01 244 #define NCSF_IMM_ACTIVED 0x02 245 #define NCSF_IMM_NULLIME 0x04 246 #define NCSF_IMM_SETTING_IME 0x80000000 249 NCSN_IMM_IMEOPEN = 5678,
254 struct _mIMManagerClass {
255 mIMManagerClassHeader(mIMManager,
mObject)
258 mIMManagerHeader(mIMManager)
261 MGNCS_EXPORT
extern mIMManagerClass g_stmIMManagerCls;
263 #endif //_MGNCSENGINE_IME 268 #ifdef _MGNCSENGINE_DIGIT 270 #define NCS_DIGIT_MAX_FINDS 32 272 #define mDigitIteratorClassHeader(clss, super) \ 273 mIMIteratorClassHeader(clss, super) \ 274 PUBLIC mIMIterator* (*subIterator)(clss*); 276 #define mDigitIteratorHeader(clss) \ 277 mIMIteratorHeader(clss) \ 280 mIMIterator * sub_it; \ 281 const char** words; \ 282 int finds[NCS_DIGIT_MAX_FINDS][2]; 284 DECLARE_CLASS(mDigitIterator, mIMIterator)
286 #define mDigitIMEClassHeader(clss, super) \ 287 mIMEClassHeader(clss, super) 289 #define mDigitIMEHeader(clss) \ 291 CHARSET_CONVERTER sub_conv; 293 DECLARE_CLASS(mDigitIME, mIME)
296 #define mDigitEngineClassHeader(clss, super) \ 297 mIMEngineClassHeader(clss, super) \ 298 PROTECTED BOOL (*findRange)(clss*, \ 300 int start, int len, \ 301 int *pbegin, int *pend); 303 #define mDigitEngineHeader(clss) \ 304 mIMEngineHeader(clss) \ 305 mIMEngine* sub_engine; 307 DECLARE_CLASS(mDigitEngine, mIMEngine)
309 #endif //_MGNCSENGINE_DIGIT 311 #ifdef _MGNCSENGINE_DIGITPTI 314 #define mDigitPtiEngineClassHeader(clss, super) \ 315 mDigitEngineClassHeader(clss, super) 317 #define mDigitPtiEngineHeader(clss) \ 318 mDigitEngineHeader(clss) \ 321 DECLARE_CLASS(mDigitPtiEngine, mDigitEngine)
323 #define mDigitPtiIteratorClassHeader(clss, super) \ 324 mDigitIteratorClassHeader(clss, super) 326 #define mDigitPtiIteratorHeader(clss) \ 327 mDigitIteratorHeader(clss) \ 328 char* letters; //only for signle letters, for example "a\0b\0\c\0" 330 DECLARE_CLASS(mDigitPtiIterator, mDigitIterator)
332 #endif //_MGNCSENGINE_DIGITPTI 337 #ifdef _MGNCSENGINE_DIGITPY 339 #define mDigitPyEngineClassHeader(clss, super) \ 340 mDigitEngineClassHeader(clss, super) 342 #define mDigitPyEngineHeader(clss) \ 343 mDigitEngineHeader(clss) \ 345 unsigned int * keys; \ 346 const char** pinyins; 348 DECLARE_CLASS(mDigitPyEngine, mDigitEngine)
350 #define mDigitPyIteratorClassHeader(clss, super) \ 351 mDigitIteratorClassHeader(clss, super) 354 #define mDigitPyIteratorHeader(clss) \ 355 mDigitIteratorHeader(clss) \ 356 mIMEngine* py_engine; 358 DECLARE_CLASS(mDigitPyIterator, mDigitIterator)
360 #endif //_MGNCSENGINE_DIGITPY 364 #ifdef _MGNCSENGINE_PTI 366 #define mPtiIteratorClassHeader(clss, super) \ 367 mIMIteratorClassHeader(clss, super) 369 #define mPtiIteratorHeader(clss) \ 370 mIMIteratorHeader(clss) \ 372 const char** words; \ 375 char upper_buffer[128]; \ 377 const char* lead_letter; 379 DECLARE_CLASS(mPtiIterator, mIMIterator)
381 #define mPtiEngineClassHeader(clss, super) \ 382 mIMEngineClassHeader(clss, super) 384 #define MGPTI_2ND_HASH_TABLE_SIZE 100 391 typedef struct _MGPTI_2ND_HASH_BUCKET {
394 } MGPTI_2ND_HASH_BUCKET;
396 typedef struct _MGPTI_1ST_HASH_BUCKET {
398 MGPTI_2ND_HASH_BUCKET* buckets;
399 } MGPTI_1ST_HASH_BUCKET;
402 #define mPtiEngineHeader(clss) \ 403 mIMEngineHeader(clss) \ 404 char **sorted_words; \ 406 MGPTI_1ST_HASH_BUCKET *buckets[26]; 409 DECLARE_CLASS(mPtiEngine, mIMEngine)
411 MGNCS_EXPORT BOOL mPtiEngine_findWordRange(mPtiEngine* self,
int* pbegin,
int* pend, const
char* input,
int start,
int len);
413 #endif //_MGNCSENGINE_PTI 417 #ifdef _MGNCSENGINE_PINYIN 419 #define PINYIN_MAGIC_NUMBER "CCEGB" 420 #define PINYIN_ENAME_LENGTH 24 421 #define PINYIN_CNAME_LENGTH 16 422 #define PINYIN_WORD_LENGTH 16 423 #define PINYIN_SELECT_KEY_LENGTH 16 424 #define PINYIN_KEY_LENGTH 16 425 #define PINYIN_SEL_LENGTH 58 431 unsigned short word_offset_idx;
432 unsigned short frequency;
436 unsigned int off_begin;
437 unsigned int off_end;
438 }NCS_PINYIN_PHOFFSET;
441 char magic_number[
sizeof(PINYIN_MAGIC_NUMBER)];
442 char ename[PINYIN_ENAME_LENGTH];
443 char cname[PINYIN_CNAME_LENGTH];
444 char selkey[PINYIN_SELECT_KEY_LENGTH];
452 unsigned char keyMap[128];
453 unsigned char keyName[64];
454 unsigned short keyIndex[64];
459 NCS_PINYIN_ITEM * item;
460 }NCS_PINYIN_IME_TABLE;
463 #define mPinyinEngineClassHeader(clss, super) \ 464 mIMEngineClassHeader(clss, super) 466 #define mPinyinEngineHeader(clss) \ 467 mIMEngineHeader(clss) \ 468 NCS_PINYIN_IME_TABLE * ime_table; 470 DECLARE_CLASS(mPinyinEngine, mIMEngine)
472 #define PINYIN_MAX_WORD 64 473 #define PINYIN_MAX_WORDLEN 64 474 #define PINYIN_INPUT_MAX 32 481 }NCS_PINYIN_WORD_INFO;
484 #define mPinyinIteratorClassHeader(clss, super) \ 485 mIMIteratorClassHeader(clss, super) 487 #define mPinyinIteratorHeader(clss) \ 488 mIMIteratorHeader(clss) \ 491 unsigned int charIndex[PINYIN_INPUT_MAX]; \ 492 unsigned int startKey; \ 493 unsigned int endKey; \ 494 unsigned long matched_key1; \ 495 unsigned long matched_key2; \ 496 NCS_PINYIN_WORD_INFO words[PINYIN_MAX_WORD]; \ 497 char word[PINYIN_MAX_WORDLEN]; \ 500 DECLARE_CLASS(mPinyinIterator, mIMIterator)
502 #if MGUI_BYTEORDER == MGUI_BIG_ENDIAN 503 #define ARCH_SWAP16(v16) ArchSwap16(v16) 504 #define ARCH_SWAP32(v32) ArchSwap32(v32) 506 #define ARCH_SWAP16(v16) (v16) 507 #define ARCH_SWAP32(v32) (v32) 514 #endif //_MGNCSENGINE_PINYIN