- Timestamp:
- 06/27/08 17:59:49 (5 months ago)
- Location:
- lang/c/SDL_textmanager
- Files:
-
- 4 modified
-
CHANGES (modified) (1 diff)
-
SDL_textmanager.c (modified) (45 diffs)
-
SDL_textmanager.h (modified) (5 diffs)
-
win32.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/c/SDL_textmanager/CHANGES
r238 r14709 1 1 2 pre-alpha ��2 pre-alpha 履歴 3 3 4 4 2004/09/05 5 Kazunori Itoyanagi(531 ��pm4Rr1N8T6)6 ������������ 5 Kazunori Itoyanagi(531 ◆pm4Rr1N8T6) 6 一日で無理矢理作る。 7 7 8 8 2004/09/05 9 Kazunori Itoyanagi(531 ��pm4Rr1N8T6)10 �Х���餱��ä��Τǽ���� 11 ��å������Ĵ������ 12 �ե�������L_InputMethod.* ����DL_inputmethod.* ��ѹ��� 9 Kazunori Itoyanagi(531 ◆pm4Rr1N8T6) 10 バグだらけだったので修正。 11 メソッド名、引数の調整を行う。 12 ファイル名を SDL_InputMethod.* から SDL_inputmethod.* に変更。 13 13 14 14 2004/09/06 15 Kazunori Itoyanagi(531 ��pm4Rr1N8T6) 16 ����������ƾä�������INPUT_METHOD_MESSAGE_CHANGE ������Ƥ��ʤ��ä��Τ���� 15 Kazunori Itoyanagi(531 ◆pm4Rr1N8T6) 16 入力中の文字列が全て消えた時に 17 INPUT_METHOD_MESSAGE_CHANGE が送られていなかったのを修正。 17 18 18 19 2004/09/08 19 20 564 20 XIM ��%���餤��� skkinput�Ǥ�����ʤ� canna + kinput2 �ǰ�ư������21 XIMに5%くらい対応 skkinputでは動かない canna + kinput2 で一応動いた。 21 22 22 23 2004/09/09 23 Kazunori Itoyanagi(531 ��pm4Rr1N8T6)24 ��ΥХ������ 25 Win32 ��ˤ����ơ������������ڤ����Ƥ��ʤ��ä��Τǽ����26 INPUT_METHOD_MESSAGE_CHANGE ��������24 Kazunori Itoyanagi(531 ◆pm4Rr1N8T6) 25 諸々のバグを修正。 26 Win32 版において、変換中の文節情報を適切に送信していなかったので修正。 27 INPUT_METHOD_MESSAGE_CHANGE に説明を追記。 27 28 28 29 2004/09/13 29 30 sgi_rocks 30 �ʤ�������� 31 なんか修正した。 31 32 32 33 2004/09/13 33 Kazunori Itoyanagi(531 ��pm4Rr1N8T6) 34 �������Υ���å� 34 Kazunori Itoyanagi(531 ◆pm4Rr1N8T6) 35 ソースのクリーンアップ 36 35 37 2004/09/14 36 Kazunori Itoyanagi(531 ��pm4Rr1N8T6) 37 README.ja ��������� 38 InputMethod_Valid(), InputMethod_Invalid() ��Win32 ���� 38 Kazunori Itoyanagi(531 ◆pm4Rr1N8T6) 39 README.ja の説明を大幅に変更。 40 InputMethod_Valid(), InputMethod_Invalid() の Win32 版を実装。 41 39 42 2004/09/15 40 43 sgi_rocks 41 InputMethod_Valid(), InputMethod_Invalid() ��XIM ����InputMethod_Invalid()�ˤ����ݤ�M��ON��ä����� 42 InputMethod_Valid()�������᤻�ʤ���ʬ����������� 44 InputMethod_Valid(), InputMethod_Invalid() の XIM 版を実装。 45 InputMethod_Invalid()にした際にIMがONだった場合、 46 InputMethod_Valid()を呼んでもIMをONに戻せない。分かる方修正求む。 43 47 44 48 2004/09/16 45 Kazunori Itoyanagi(531 ��pm4Rr1N8T6) 46 Valid, Invalid �Ϥʤ������Ȥ�����������sgi_rocks �� Validate, Invalidate �ΰƤ�����롣 47 xim.c, win32.c ���ˤ�����Reset �Τ���������٥������Ƥʤ��ä��Τǽ���� 49 Kazunori Itoyanagi(531 ◆pm4Rr1N8T6) 50 Valid, Invalid はないだろう、という指摘を受けて 51 sgi_rocks 氏の Validate, Invalidate の案を適応する。 52 xim.c, win32.c 双方において Reset のあと 53 正常にイベントを送信してなかったので修正。 48 54 49 55 2004/09/16 50 56 564 51 uim-xim�������ư��ʤ��Ȥ�������64������������ѥå�����Ŭ��� 57 uim-ximで正しく動作しないという事を受けて564氏がそれを修正する 58 パッチを公開。適用。 52 59 53 60 2004/09/19 54 61 sgi_rocks 55 xim.c �ǡ�Ĺ��ʸ�Ϥ�Ϥ���iconv������¥롼�פ��Ƥ�������56 Ĺ��ʸ�Ϥ�Ϥ��������ˤʤäƤ���������� 57 ������ޤ����ʸ�Ϥ�����������������狼������ 62 xim.cで、長い文章を入力するとiconvの部分で無限ループしていた問題、 63 長い文章を入力するとメモリー不足になっていた問題を修正。 64 ただ、まだ長い文章を入れると途中で切れるが原因はまだわからない。 58 65 59 66 2004/09/24 60 Kazunori Itoyanagi(531 ��pm4Rr1N8T6) 61 xim.c ����ľ������� 67 Kazunori Itoyanagi(531 ◆pm4Rr1N8T6) 68 xim.c を大幅に書き直して清書。 69 62 70 2007/09/19 63 71 ITOYANAGI Kazunori 64 SDL_intputmethod ��L_textmanager ��ѹ���65 ���ʽ��������� 72 SDL_intputmethod を SDL_textmanager に変更し 73 大幅な修正を加えた。 66 74 75 2008/06/27 76 ITOYANAGI Kazunori 77 win32.c と SDL_textmanager 本体においてデッドキー入力に対応。 -
lang/c/SDL_textmanager/SDL_textmanager.c
r238 r14709 51 51 int compositionLength; 52 52 Uint16 character; 53 TextManager_DeadChar deadCharacter;54 53 } TextManager_Event; 55 54 … … 58 57 SDL_EventFilter OriginalFilterSDL = NULL; 59 58 60 static TextManager_Event *TextManager_EventQue = NULL;61 static int TextManager_EventQue Number = 0;59 static TextManager_Event *TextManager_EventQueue = NULL; 60 static int TextManager_EventQueueNumber = 0; 62 61 static SDL_bool IsOriginalTextManager = SDL_FALSE; 63 62 static SDL_bool IsInited = SDL_FALSE; 64 63 static SDL_bool IsValid = SDL_TRUE; 65 64 static SDL_bool IsEnableUNICODEOld; 65 static TextManager_DeadChar PreviousDeadChar; 66 66 static int BootStrapNum = -1; 67 67 … … 70 70 static void TextManager_SetEventFilter(void); 71 71 static void TextManager_RestoreEventFilter(void); 72 static void TextManager_AddEventToQue(TextManager_Event *event); 73 74 75 void TextManager_SetEventFilter(void) 72 static void TextManager_AddEventToQueue(TextManager_Event *event); 73 static Uint16 TextManager_GetDeadCharCode(TextManager_DeadChar deadChar); 74 75 76 static void TextManager_SetEventFilter(void) 76 77 { 77 78 IsEnableUNICODEOld = SDL_EnableUNICODE(SDL_TRUE); … … 81 82 82 83 83 void TextManager_RestoreEventFilter(void)84 static void TextManager_RestoreEventFilter(void) 84 85 { 85 86 SDL_EnableUNICODE(IsEnableUNICODEOld); … … 95 96 96 97 if (IsInited == SDL_TRUE) { 97 return INPUT_METHOD_ERROR_ALREADY_INIT;98 return TEXT_MANAGER_ERROR_ALREADY_INIT; 98 99 } 99 100 … … 108 109 if (TextManager_Use != NULL) { 109 110 result = TextManager_Use->init(); 110 if (result != INPUT_METHOD_SUCCESS) {111 if (result != TEXT_MANAGER_SUCCESS) { 111 112 TextManager_Use->quit(); 112 113 TextManager_Use = NULL; … … 115 116 } 116 117 } 117 TextManager_EventQue = NULL;118 TextManager_EventQue Number = 0;118 TextManager_EventQueue = NULL; 119 TextManager_EventQueueNumber = 0; 119 120 IsOriginalTextManager = SDL_FALSE; 120 121 IsValid = SDL_TRUE; 121 122 IsInited = SDL_TRUE; 122 123 return INPUT_METHOD_SUCCESS; 123 PreviousDeadChar = DEAD_CHAR_NON; 124 125 return TEXT_MANAGER_SUCCESS; 124 126 } 125 127 … … 140 142 } 141 143 142 event = TextManager_EventQue ;144 event = TextManager_EventQueue; 143 145 while (event != NULL) { 144 146 next = event->next; … … 149 151 event = next; 150 152 } 151 TextManager_EventQue = NULL;152 TextManager_EventQue Number = 0;153 TextManager_EventQueue = NULL; 154 TextManager_EventQueueNumber = 0; 153 155 IsOriginalTextManager = SDL_FALSE; 154 156 IsInited = SDL_FALSE; … … 200 202 201 203 if (IsInited == SDL_TRUE) { 202 return INPUT_METHOD_ERROR_ALREADY_INIT;204 return TEXT_MANAGER_ERROR_ALREADY_INIT; 203 205 } 204 206 … … 207 209 TextManager_Use = TextManager_BootStrap[num]; 208 210 } else { 209 return INPUT_METHOD_ERROR_NOT_AVAILABLE;211 return TEXT_MANAGER_ERROR_NOT_AVAILABLE; 210 212 } 211 213 } else { 212 return INPUT_METHOD_ERROR_INVALID_BOOTSTRAP;214 return TEXT_MANAGER_ERROR_INVALID_BOOTSTRAP; 213 215 } 214 216 215 217 result = TextManager_Use->init(); 216 if (result != INPUT_METHOD_SUCCESS) {218 if (result != TEXT_MANAGER_SUCCESS) { 217 219 TextManager_Use->quit(); 218 220 TextManager_Use = NULL; 219 221 return result; 220 222 } 221 TextManager_EventQue = NULL;222 TextManager_EventQue Number = 0;223 TextManager_EventQueue = NULL; 224 TextManager_EventQueueNumber = 0; 223 225 IsOriginalTextManager = SDL_FALSE; 224 226 IsValid = SDL_TRUE; 225 227 IsInited = SDL_TRUE; 226 228 227 return INPUT_METHOD_SUCCESS;229 return TEXT_MANAGER_SUCCESS; 228 230 } 229 231 … … 234 236 TextManager_Event *next; 235 237 236 event = TextManager_EventQue ;238 event = TextManager_EventQueue; 237 239 while (event != NULL) { 238 240 next = event->next; … … 243 245 event = next; 244 246 } 245 TextManager_EventQue = NULL;246 TextManager_EventQue Number = 0;247 TextManager_EventQueue = NULL; 248 TextManager_EventQueueNumber = 0; 247 249 248 250 if (TextManager_Use != NULL) { … … 260 262 if (TextManager_Use == NULL) { 261 263 SDL_SetError("Input method is no init"); 262 return INPUT_METHOD_ERROR_NO_INIT;264 return TEXT_MANAGER_ERROR_NO_INIT; 263 265 } 264 266 265 267 if (IsValid == SDL_TRUE) { 266 return INPUT_METHOD_ERROR_ALREADY_VALIDATED;268 return TEXT_MANAGER_ERROR_ALREADY_VALIDATED; 267 269 } 268 270 … … 270 272 if (TextManager_Use->validate != NULL) { 271 273 result = TextManager_Use->validate(); 272 if (result == INPUT_METHOD_SUCCESS) {274 if (result == TEXT_MANAGER_SUCCESS) { 273 275 IsValid = SDL_TRUE; 274 276 } … … 278 280 279 281 SDL_SetError("Input method is no init"); 280 return INPUT_METHOD_ERROR_NO_INIT;282 return TEXT_MANAGER_ERROR_NO_INIT; 281 283 } 282 284 … … 288 290 if (TextManager_Use == NULL) { 289 291 SDL_SetError("Input method is no init"); 290 return INPUT_METHOD_ERROR_NO_INIT;292 return TEXT_MANAGER_ERROR_NO_INIT; 291 293 } 292 294 293 295 if (IsValid == SDL_FALSE) { 294 return INPUT_METHOD_ERROR_ALREADY_INVALIDATED;296 return TEXT_MANAGER_ERROR_ALREADY_INVALIDATED; 295 297 } 296 298 … … 298 300 if (TextManager_Use->invalidate !=NULL) { 299 301 result = TextManager_Use->invalidate(); 300 if (result == INPUT_METHOD_SUCCESS) {302 if (result == TEXT_MANAGER_SUCCESS) { 301 303 IsValid = SDL_FALSE; 302 304 } … … 306 308 307 309 SDL_SetError("Input method is no init"); 308 return INPUT_METHOD_ERROR_NO_INIT;310 return TEXT_MANAGER_ERROR_NO_INIT; 309 311 } 310 312 … … 312 314 int TextManager_GetEventNumber(void) 313 315 { 314 return TextManager_EventQue Number;316 return TextManager_EventQueueNumber; 315 317 } 316 318 … … 320 322 TextManager_Event *next; 321 323 322 if (TextManager_EventQue Number > 0) {323 if (TextManager_EventQue ->editingString != NULL) {324 free(TextManager_EventQue ->editingString);324 if (TextManager_EventQueueNumber > 0) { 325 if (TextManager_EventQueue->editingString != NULL) { 326 free(TextManager_EventQueue->editingString); 325 327 } 326 328 327 if (TextManager_EventQue != NULL) {328 next = TextManager_EventQue ->next;329 free(TextManager_EventQue );330 TextManager_EventQue = next;329 if (TextManager_EventQueue != NULL) { 330 next = TextManager_EventQueue->next; 331 free(TextManager_EventQueue); 332 TextManager_EventQueue = next; 331 333 } 332 334 333 TextManager_EventQue Number--;335 TextManager_EventQueueNumber--; 334 336 } 335 337 } … … 338 340 TextManager_Message TextManager_GetCurrentMessage(void) 339 341 { 340 if (TextManager_EventQue == NULL) {342 if (TextManager_EventQueue == NULL) { 341 343 SDL_SetError("Message is not found"); 342 return INPUT_METHOD_MESSAGE_NO_EXIST;344 return TEXT_MANAGER_MESSAGE_NO_EXIST; 343 345 } else { 344 return TextManager_EventQue ->message;346 return TextManager_EventQueue->message; 345 347 } 346 348 } … … 349 351 Uint16 *TextManager_GetCurrentEditingString(void) 350 352 { 351 if (TextManager_EventQue == NULL) {353 if (TextManager_EventQueue == NULL) { 352 354 return NULL; 353 355 } 354 356 355 return TextManager_EventQue ->editingString;357 return TextManager_EventQueue->editingString; 356 358 } 357 359 … … 359 361 Uint16 TextManager_GetCurrentChar(void) 360 362 { 361 if (TextManager_EventQue == NULL) {363 if (TextManager_EventQueue == NULL) { 362 364 return 0x0000; 363 365 } 364 366 365 return TextManager_EventQue->character; 366 } 367 368 369 TextManager_DeadChar TextManager_GetCurrentDeadChar(void) 370 { 371 if (TextManager_EventQue == NULL) { 372 return 0x0000; 373 } 374 375 return TextManager_EventQue->deadCharacter; 376 } 377 378 379 struct DeadCharConbination 380 { 381 382 } 367 return TextManager_EventQueue->character; 368 } 369 370 371 typedef struct dead_char_combination 372 { 373 TextManager_DeadChar deadChar; 374 Uint16 character; 375 Uint16 combinedChar; 376 } DEAD_CHAR_COMBINATION; 377 378 379 static DEAD_CHAR_COMBINATION DeadCharCombinationList[] = 380 { 381 /* ^ */ 382 {DEAD_CHAR_CIRCUMFLEX, 0x0041/* A */, 0x00C2}, 383 {DEAD_CHAR_CIRCUMFLEX, 0x0045/* E */, 0x00CA}, 384 {DEAD_CHAR_CIRCUMFLEX, 0x0049/* I */, 0x00CE}, 385 {DEAD_CHAR_CIRCUMFLEX, 0x004F/* O */, 0x00D4}, 386 {DEAD_CHAR_CIRCUMFLEX, 0x0055/* U */, 0x00DB}, 387 {DEAD_CHAR_CIRCUMFLEX, 0x0061/* a */, 0x00E2}, 388 {DEAD_CHAR_CIRCUMFLEX, 0x0065/* e */, 0x00EA}, 389 {DEAD_CHAR_CIRCUMFLEX, 0x0069/* i */, 0x00EE}, 390 {DEAD_CHAR_CIRCUMFLEX, 0x006F/* o */, 0x00F4}, 391 {DEAD_CHAR_CIRCUMFLEX, 0x0075/* u */, 0x00FB}, 392 /* �N */ 393 {DEAD_CHAR_DIAERESIS, 0x0041/* A */, 0x00C4}, 394 {DEAD_CHAR_DIAERESIS, 0x004F/* O */, 0x00D6}, 395 {DEAD_CHAR_DIAERESIS, 0x0055/* U */, 0x00DC}, 396 {DEAD_CHAR_DIAERESIS, 0x0061/* a */, 0x00E4}, 397 {DEAD_CHAR_DIAERESIS, 0x006F/* o */, 0x00F6}, 398 {DEAD_CHAR_DIAERESIS, 0x0075/* u */, 0x00FC}, 399 }; 383 400 384 401 … … 386 403 TextManager_DeadChar deadChar, Uint16 character) 387 404 { 388 switch(deadChar) { 389 case DEAD_CHAR_CIRCUMFLEX: /* ^ */ 390 switch (character) { 391 case 0x0041: /* A */ 392 return 0x00C2; 393 case 0x0045: /* E */ 394 return 0x00CA; 395 case 0x0049: /* I */ 396 return 0x00CE; 397 case 0x004F: /* O */ 398 return 0x00D4; 399 case 0x0055: /* U */ 400 return 0x00DB; 401 case 0x0061: /* a */ 402 return 0x00E2; 403 case 0x0065: /* e */ 404 return 0x00EA; 405 case 0x0069: /* i */ 406 return 0x00EE; 407 case 0x006F: /* o */ 408 return 0x00F4; 409 case 0x0075: /* u */ 410 return 0x00FB; 411 default: 412 return 0x0000; 413 } 414 case DEAD_CHAR_DIAERESIS: /* �N */ 415 switch (character) { 416 case 0x0041: /* A */ 417 return 0x00C4; 418 case 0x004F: /* O */ 419 return 0x00D6; 420 case 0x0055: /* U */ 421 return 0x00DC; 422 case 0x0061: /* a */ 423 return 0x00E4; 424 case 0x006F: /* o */ 425 return 0x00F6; 426 case 0x0075: /* u */ 427 return 0x00FC; 428 default: 429 return 0x0000; 430 } 431 default: 432 return 0x0000; 433 } 405 int i; 406 int combinationListNum; 407 DEAD_CHAR_COMBINATION *combination; 408 409 combinationListNum = 410 sizeof(DeadCharCombinationList) / sizeof(DEAD_CHAR_COMBINATION); 411 for (i = 0; i < combinationListNum; i++) { 412 combination = &DeadCharCombinationList[i]; 413 if ( 414 combination->deadChar == deadChar && 415 combination->character == character 416 ) { 417 return combination->combinedChar; 418 } 419 } 420 421 return 0x0000; 434 422 } 435 423 … … 437 425 int TextManager_GetCurrentCursorPosition(void) 438 426 { 439 if (TextManager_EventQue == NULL) {427 if (TextManager_EventQueue == NULL) { 440 428 return 0; 441 429 } 442 430 443 return TextManager_EventQue ->cursorPosition;431 return TextManager_EventQueue->cursorPosition; 444 432 } 445 433 … … 447 435 int TextManager_GetCurrentCompositionPosition(void) 448 436 { 449 if (TextManager_EventQue == NULL) {437 if (TextManager_EventQueue == NULL) { 450 438 return 0; 451 439 } 452 440 453 return TextManager_EventQue ->compositionPosition;441 return TextManager_EventQueue->compositionPosition; 454 442 } 455 443 … … 457 445 int TextManager_GetCurrentCompositionLength(void) 458 446 { 459 if (TextManager_EventQue == NULL) {447 if (TextManager_EventQueue == NULL) { 460 448 return 0; 461 449 } 462 450 463 return TextManager_EventQue ->compositionLength;451 return TextManager_EventQueue->compositionLength; 464 452 } 465 453 … … 476 464 477 465 478 int TextManager_GetUnicodeStringLength(Uint16 *unicodeString)466 static int TextManager_GetUnicodeStringLength(Uint16 *unicodeString) 479 467 { 480 468 int i; … … 493 481 494 482 495 void TextManager_AddEventToQue(TextManager_Event *event)483 static void TextManager_AddEventToQueue(TextManager_Event *event) 496 484 { 497 485 TextManager_Event *lastEvent; 498 486 499 if (TextManager_EventQue == NULL) {500 TextManager_EventQue = event;487 if (TextManager_EventQueue == NULL) { 488 TextManager_EventQueue = event; 501 489 } else { 502 lastEvent = TextManager_EventQue ;490 lastEvent = TextManager_EventQueue; 503 491 while (lastEvent->next != NULL) { 504 492 lastEvent = lastEvent->next; … … 506 494 lastEvent->next = event; 507 495 } 508 TextManager_EventQueNumber++; 496 PreviousDeadChar = DEAD_CHAR_NON; 497 TextManager_EventQueueNumber++; 509 498 } 510 499 … … 522 511 if (event == NULL) { 523 512 SDL_SetError("Allocate memory failed"); 524 return INPUT_METHOD_ERROR_ALLOCATED_MEMORY;513 return TEXT_MANAGER_ERROR_ALLOCATED_MEMORY; 525 514 } 526 515 event->next = NULL; … … 529 518 free(event); 530 519 SDL_SetError( 531 "post INPUT_METHOD_MESSAGE_CHANGE: "520 "post TEXT_MANAGER_MESSAGE_CHANGE: " 532 521 "Editing string is NULL"); 533 return INPUT_METHOD_ERROR_NO_STRING;522 return TEXT_MANAGER_ERROR_NO_STRING; 534 523 } 535 524 size = … … 539 528 if (event->editingString == NULL) { 540 529 &n
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)