57 #ifdef _MGNCSENGINE_IME 63 #define IME_STOP_MSG 1 64 #define IME_CONTINUE_MSG 0 66 typedef int (*NCSCB_LEN_FIRST_CHAR)(
const unsigned char*,
int len);
68 typedef int (*NCSCB_RETRIEVE_CHAR)(
const char*);
69 typedef struct _CHARSET_CONVERTER
72 NCSCB_RETRIEVE_CHAR retrieve_char;
77 MGNCS_EXPORT BOOL ncsIMInitCharsetConv(CHARSET_CONVERTER* conv,
const char* from_charset,
const char* to_charset, NCSCB_RETRIEVE_CHAR retrieve_char);
78 MGNCS_EXPORT
void ncsIMFreeCharsetConv(CHARSET_CONVERTER* conv);
79 MGNCS_EXPORT
unsigned int ncsIMCharsetConv(CHARSET_CONVERTER* conv,
const char ** pwords);
80 MGNCS_EXPORT
char* ncsIMConvertWord(CHARSET_CONVERTER* conv,
const char* word,
char* out,
int len);
82 MGNCS_EXPORT NCSCB_LEN_FIRST_CHAR ncsIMGetFirstCharCallback(
const char* encoding);
84 typedef struct _mIMEngineClass mIMEngineClass;
85 typedef struct _mIMEngine mIMEngine;
86 typedef struct _mIMIteratorClass mIMIteratorClass;
87 typedef struct _mIMIterator mIMIterator;
89 #define NCS_IM_SCANCODE_ISDIGIT(s) ((s) >= SCANCODE_1 && (s) <= SCANCODE_0) 90 #define NCS_IM_SCANCODE_ISALPHA(s) \ 91 ( ((s) >= SCANCODE_Q && (s) <= SCANCODE_P) \ 92 || ((s) >= SCANCODE_A && (s) <= SCANCODE_L) \ 93 || ((s) >= SCANCODE_Z && (s) <= SCANCODE_M) \ 100 #define mIMIteratorClassHeader(clss, super) \ 101 mObjectClassHeader(clss, super) \ 102 PUBLIC void (*empty)(clss*); \ 103 PUBLIC int (*count)(clss*); \ 104 PUBLIC int (*next)(clss*); \ 105 PUBLIC int (*prev)(clss*); \ 106 PUBLIC int (*locate)(clss*,int off, int type); \ 107 PUBLIC int (*curIndex)(clss*); \ 108 PUBLIC DWORD (*setProperty)(clss*, int id, DWORD valude); \ 109 PUBLIC DWORD (*getProperty)(clss*, int id); \ 110 PUBLIC const char*(*word)(clss*); 112 #define mIMIteratorHeader(clss) \ 113 mObjectHeader(clss) \ 114 CHARSET_CONVERTER *charset_converter; 117 struct _mIMIteratorClass {
118 mIMIteratorClassHeader(mIMIterator,
mObject)
121 struct _mIMIterator {
122 mIMIteratorHeader(mIMIterator)
125 MGNCS_EXPORT
extern mIMIteratorClass g_stmIMIteratorCls;
127 #define MAX_IME_NAME_LEN 16 128 #define mIMEngineClassHeader(clss, super) \ 129 mObjectClassHeader(clss, super) \ 130 const char* (*imeName)(clss*); \ 131 mIMEngine * (*create)(const char* pdict, DWORD add_data); \ 132 const char* (*getEncoding)(clss*); \ 133 PROTECTED NCSCB_RETRIEVE_CHAR (*getRetrieveChar)(clss*);\ 134 mIMIterator* (*newIterator)(clss*); \ 135 mIMIterator* (*newAssocIterator)(clss*); \ 137 BOOL (*findWords)(clss*, mIMIterator* it, const char* input, int start); \ 138 BOOL (*findAssociate)(clss*, mIMIterator* it, const char* input); 140 #define mIMEngineHeader(clss) \ 143 struct _mIMEngineClass{
144 mIMEngineClassHeader(mIMEngine,
mObject)
148 mIMEngineHeader(mIMEngine)
151 MGNCS_EXPORT
extern mIMEngineClass g_stmIMEngineCls;
153 typedef struct _mIMEClass mIMEClass;
154 typedef struct _mIME mIME;
156 typedef struct _mIMManagerClass mIMManagerClass;
157 typedef struct _mIMManager mIMManager;
160 #define NCS_MAX_INPUT 128 161 #define NCS_IME_UPDATE_KEY 0x01 162 #define NCS_IME_UPDATE_WORDS 0x02 163 #define NCS_IME_UPDATE_FEEDBACK 0x04 164 #define NCS_IME_UPDATE_CURSOR 0x08 165 #define NCS_IME_UPDATE_ALL 0xFFFF 167 #define NCS_IMM_BEGIN (MSG_USER + 100) 168 #define NCS_IMM_UPDATE (NCS_IMM_BEGIN + 1) 170 #define NCS_IMM_GETSELWORD (NCS_IMM_BEGIN + 2) 172 #define NCS_IMM_ISSELWORDCTRLACTIVE (NCS_IMM_BEGIN + 3) 173 #define NCS_IMM_SETSELWORDACTIVE (NCS_IMM_BEGIN + 4) 175 #define mIMEClassHeader(clss, super) \ 176 mObjectClassHeader(clss, super) \ 178 PROTECTED BOOL (*showIME)(clss*); \ 179 PROTECTED void (*hideIME)(clss*); \ 180 PROTECTED void (*update)(clss*, DWORD flfags); \ 181 PROTECTED const char* (*getSelWord)(clss*, BOOL braw); \ 182 PROTECTED DWORD (*getIMStatus)(clss*, int); \ 183 PROTECTED BOOL (*setIMStatus)(clss*,int, DWORD); \ 184 PROTECTED BOOL (*onCaretPos)(clss*, int,int); \ 185 PROTECTED BOOL (*findWords)(clss*, const char* input, int start, int len); \ 186 PROTECTED BOOL (*findAssociate)(clss*, const char* words); \ 187 PROTECTED BOOL (*emptyKey)(clss*); \ 188 PROTECTED BOOL (*setEncoding)(clss*, const char*); \ 189 PROTECTED BOOL (*addChar)(clss*, int ch); \ 190 PROTECTED BOOL (*delChar)(clss*,BOOL bback); \ 191 PROTECTED BOOL (*setInsert)(clss*, int pos, int type); \ 192 PROTECTED BOOL (*clearInput)(clss*); \ 193 PROTECTED int (*onChar)(clss*, int ch,DWORD keyflags); \ 194 PROTECTED int (*onKeyDown)(clss*,int scancode, DWORD keyflags); \ 195 PUBLIC void (*setIMEngine)(clss*, mIMEngine*); \ 196 PUBLIC void (*empty)(clss*, BOOL bUpdate); 199 #define mIMEHeader(clss) \ 200 mObjectHeader(clss) \ 202 char input[NCS_MAX_INPUT]; \ 206 mIMManager *ime_manager; \ 207 mIMEngine *ime_engine; \ 208 mIMIterator *key_it; \ 209 mIMIterator *assoc_it; \ 210 CHARSET_CONVERTER charset_conv; \ 212 WNDPROC old_view_proc; 222 MGNCS_EXPORT
extern mIMEClass g_stmIMECls;
224 #define mIME_sendWords(ime) (_c(ime->ime_manager)->sendWords(ime->ime_manager)) 225 #define mIME_sendKeys(ime) (_c(ime->ime_manager)->sendKeys(ime->ime_manager)) 227 #define mIME_FromView(hwnd) ((mIME*)GetWindowAdditionalData(hwnd)) 228 MGNCS_EXPORT
void mIME_attach(mIME *ime, HWND hwnd);
230 MGNCS_EXPORT
void mIME_passMessage(mIME* ime, UINT message, WPARAM wParam, LPARAM lParam);
231 #define mIMView_passMessage(hwnd, message, wParam, lParam) \ 232 mIME_passMessage(mIME_FromView(hwnd), (message), (wParam), (lParam)) 234 #define mIMManagerClassHeader(clss, super) \ 235 mObjectClassHeader(clss, super) \ 236 PROTECTED int (*procIMMsg)(clss*,UINT,WPARAM,LPARAM,LRESULT*); \ 237 PROTECTED BOOL (*nextIME)(clss*); \ 238 PROTECTED BOOL (*setIME)(clss*, const char*); \ 239 PUBLIC BOOL (*addIME)(clss*, mIME *ime); \ 240 PROTECTED BOOL (*sendWords)(clss*); \ 241 PROTECTED BOOL (*sendKeys)(clss*); \ 242 PUBLIC void (*setEncoding)(clss*, const char*); 244 #define mIMManagerHeader(clss) \ 245 mObjectHeader(clss) \ 246 NCSCB_LEN_FIRST_CHAR len_first_char; \ 255 #define NCSF_IMM_DISABLE 0x01 256 #define NCSF_IMM_ACTIVED 0x02 257 #define NCSF_IMM_NULLIME 0x04 258 #define NCSF_IMM_SETTING_IME 0x80000000 261 NCSN_IMM_IMEOPEN = 5678,
266 struct _mIMManagerClass {
267 mIMManagerClassHeader(mIMManager,
mObject)
270 mIMManagerHeader(mIMManager)
273 MGNCS_EXPORT
extern mIMManagerClass g_stmIMManagerCls;
275 #endif //_MGNCSENGINE_IME 280 #ifdef _MGNCSENGINE_DIGIT 282 #define NCS_DIGIT_MAX_FINDS 32 284 #define mDigitIteratorClassHeader(clss, super) \ 285 mIMIteratorClassHeader(clss, super) \ 286 PUBLIC mIMIterator* (*subIterator)(clss*); 288 #define mDigitIteratorHeader(clss) \ 289 mIMIteratorHeader(clss) \ 292 mIMIterator * sub_it; \ 293 const char** words; \ 294 int finds[NCS_DIGIT_MAX_FINDS][2]; 296 DECLARE_CLASS(mDigitIterator, mIMIterator)
298 #define mDigitIMEClassHeader(clss, super) \ 299 mIMEClassHeader(clss, super) 301 #define mDigitIMEHeader(clss) \ 303 CHARSET_CONVERTER sub_conv; 305 DECLARE_CLASS(mDigitIME, mIME)
308 #define mDigitEngineClassHeader(clss, super) \ 309 mIMEngineClassHeader(clss, super) \ 310 PROTECTED BOOL (*findRange)(clss*, \ 312 int start, int len, \ 313 int *pbegin, int *pend); 315 #define mDigitEngineHeader(clss) \ 316 mIMEngineHeader(clss) \ 317 mIMEngine* sub_engine; 319 DECLARE_CLASS(mDigitEngine, mIMEngine)
321 #endif //_MGNCSENGINE_DIGIT 323 #ifdef _MGNCSENGINE_DIGITPTI 326 #define mDigitPtiEngineClassHeader(clss, super) \ 327 mDigitEngineClassHeader(clss, super) 329 #define mDigitPtiEngineHeader(clss) \ 330 mDigitEngineHeader(clss) \ 333 DECLARE_CLASS(mDigitPtiEngine, mDigitEngine)
335 #define mDigitPtiIteratorClassHeader(clss, super) \ 336 mDigitIteratorClassHeader(clss, super) 338 #define mDigitPtiIteratorHeader(clss) \ 339 mDigitIteratorHeader(clss) \ 340 char* letters; //only for signle letters, for example "a\0b\0\c\0" 342 DECLARE_CLASS(mDigitPtiIterator, mDigitIterator)
344 #endif //_MGNCSENGINE_DIGITPTI 349 #ifdef _MGNCSENGINE_DIGITPY 351 #define mDigitPyEngineClassHeader(clss, super) \ 352 mDigitEngineClassHeader(clss, super) 354 #define mDigitPyEngineHeader(clss) \ 355 mDigitEngineHeader(clss) \ 357 unsigned int * keys; \ 358 const char** pinyins; 360 DECLARE_CLASS(mDigitPyEngine, mDigitEngine)
362 #define mDigitPyIteratorClassHeader(clss, super) \ 363 mDigitIteratorClassHeader(clss, super) 366 #define mDigitPyIteratorHeader(clss) \ 367 mDigitIteratorHeader(clss) \ 368 mIMEngine* py_engine; 370 DECLARE_CLASS(mDigitPyIterator, mDigitIterator)
372 #endif //_MGNCSENGINE_DIGITPY 376 #ifdef _MGNCSENGINE_PTI 378 #define mPtiIteratorClassHeader(clss, super) \ 379 mIMIteratorClassHeader(clss, super) 381 #define mPtiIteratorHeader(clss) \ 382 mIMIteratorHeader(clss) \ 384 const char** words; \ 387 char upper_buffer[128]; \ 389 const char* lead_letter; 391 DECLARE_CLASS(mPtiIterator, mIMIterator)
393 #define mPtiEngineClassHeader(clss, super) \ 394 mIMEngineClassHeader(clss, super) 396 #define MGPTI_2ND_HASH_TABLE_SIZE 100 403 typedef struct _MGPTI_2ND_HASH_BUCKET {
406 } MGPTI_2ND_HASH_BUCKET;
408 typedef struct _MGPTI_1ST_HASH_BUCKET {
410 MGPTI_2ND_HASH_BUCKET* buckets;
411 } MGPTI_1ST_HASH_BUCKET;
414 #define mPtiEngineHeader(clss) \ 415 mIMEngineHeader(clss) \ 416 char **sorted_words; \ 418 MGPTI_1ST_HASH_BUCKET *buckets[26]; 421 DECLARE_CLASS(mPtiEngine, mIMEngine)
423 MGNCS_EXPORT BOOL mPtiEngine_findWordRange(mPtiEngine*
self,
int* pbegin,
int* pend,
const char* input,
int start,
int len);
425 #endif //_MGNCSENGINE_PTI 429 #ifdef _MGNCSENGINE_PINYIN 431 #define PINYIN_MAGIC_NUMBER "CCEGB" 432 #define PINYIN_ENAME_LENGTH 24 433 #define PINYIN_CNAME_LENGTH 16 434 #define PINYIN_WORD_LENGTH 16 435 #define PINYIN_SELECT_KEY_LENGTH 16 436 #define PINYIN_KEY_LENGTH 16 437 #define PINYIN_SEL_LENGTH 58 443 unsigned short word_offset_idx;
444 unsigned short frequency;
448 unsigned int off_begin;
449 unsigned int off_end;
450 }NCS_PINYIN_PHOFFSET;
453 char magic_number[
sizeof(PINYIN_MAGIC_NUMBER)];
454 char ename[PINYIN_ENAME_LENGTH];
455 char cname[PINYIN_CNAME_LENGTH];
456 char selkey[PINYIN_SELECT_KEY_LENGTH];
464 unsigned char keyMap[128];
465 unsigned char keyName[64];
466 unsigned short keyIndex[64];
471 NCS_PINYIN_ITEM * item;
472 }NCS_PINYIN_IME_TABLE;
475 #define mPinyinEngineClassHeader(clss, super) \ 476 mIMEngineClassHeader(clss, super) 478 #define mPinyinEngineHeader(clss) \ 479 mIMEngineHeader(clss) \ 480 NCS_PINYIN_IME_TABLE * ime_table; 482 DECLARE_CLASS(mPinyinEngine, mIMEngine)
484 #define PINYIN_MAX_WORD 64 485 #define PINYIN_MAX_WORDLEN 64 486 #define PINYIN_INPUT_MAX 32 493 }NCS_PINYIN_WORD_INFO;
496 #define mPinyinIteratorClassHeader(clss, super) \ 497 mIMIteratorClassHeader(clss, super) 499 #define mPinyinIteratorHeader(clss) \ 500 mIMIteratorHeader(clss) \ 503 unsigned int charIndex[PINYIN_INPUT_MAX]; \ 504 unsigned int startKey; \ 505 unsigned int endKey; \ 506 unsigned long matched_key1; \ 507 unsigned long matched_key2; \ 508 NCS_PINYIN_WORD_INFO words[PINYIN_MAX_WORD]; \ 509 char word[PINYIN_MAX_WORDLEN]; \ 512 DECLARE_CLASS(mPinyinIterator, mIMIterator)
514 #if MGUI_BYTEORDER == MGUI_BIG_ENDIAN 515 #define ARCH_SWAP16(v16) ArchSwap16(v16) 516 #define ARCH_SWAP32(v32) ArchSwap32(v32) 518 #define ARCH_SWAP16(v16) (v16) 519 #define ARCH_SWAP32(v32) (v32) 526 #endif //_MGNCSENGINE_PINYIN