OSDN Git Service

replace implementation for language code handling.
authorornse01 <ornse01@users.sourceforge.jp>
Thu, 5 Dec 2013 17:02:27 +0000 (17:02 +0000)
committerornse01 <ornse01@users.sourceforge.jp>
Thu, 5 Dec 2013 17:02:27 +0000 (17:02 +0000)
git-svn-id: http://svn.sourceforge.jp/svnroot/bchan/bchanf/trunk@594 20a0b8eb-f62a-4a12-8fe1-b598822500fb

src/control/texteditor_characterstate.c
src/control/texteditor_characterstate.h

index 7cbea56..3d505b1 100644 (file)
@@ -28,6 +28,9 @@
 
 #include       <bstdio.h>
 
+#include       <tad/tadfragment.h>
+#include       <tad/tadlangcode.h>
+
 #ifdef BCHAN_CONFIG_DEBUG
 # define DP(arg) printf arg
 # define DP_ER(msg, err) printf("%s (%d/%x)\n", msg, err>>16, err)
@@ -38,8 +41,8 @@
 
 EXPORT W texteditor_charactorstate_input(texteditor_characterstate_t *state, tadfragment_cursor_segment *segment)
 {
-       TC ch;
-       W iter;
+       TC *str;
+       W len, err;
        UB segid, subid;
 
        if (segment->type == TADFRAGMENT_CURSOR_SEGMENTTYPE_VARIABLE) {
@@ -56,13 +59,12 @@ EXPORT W texteditor_charactorstate_input(texteditor_characterstate_t *state, tad
                }
                state->w_ratio = *(RATIO*)(segment->p + 8);
        } else if (segment->type == TADFRAGMENT_CURSOR_SEGMENTTYPE_LANGCODE) {
-               ch = *(TC*)(segment->p + segment->len - 2);
-               iter = segment->len - 2;
-               if ((ch & 0xFE00) == 0xFE00) {
-                       iter++;
+               str = (TC*)segment->p;
+               len = segment->len / sizeof(TC);
+               err = TCtotadlangcode(str, len, &state->lang);
+               if (err < 0) {
+                       return err;
                }
-               state->lang.iter = iter - 1;
-               state->lang.code = 0x00FF & ch;
        }
        return 0;
 }
@@ -82,44 +84,12 @@ EXPORT Bool texteditor_characterstate_ishankaku(texteditor_characterstate_t *sta
 
 EXPORT W texteditor_characterstate_getlang(texteditor_characterstate_t *state, TC *str, W len)
 {
-       W i, req_len;
-
-       req_len = 2 + (state->lang.iter+1)/2*2;
-
-       if (str == NULL || len < 0) {
-               return req_len / sizeof(TC);
-       }
-
-       for (i = 0; i < (state->lang.iter + 1) / 2; i++) {
-               str[i] = 0xFEFE;
-       }
-       if (state->lang.iter % 2 == 1) {
-               str[i] = state->lang.code;
-       } else {
-               str[i] = 0xFE00 | state->lang.code;
-       }
-
-       return req_len / sizeof(TC);
+       return tadlangcodetoTC(&state->lang, str, len);
 }
 
 EXPORT Bool texteditor_characterstate_islang(texteditor_characterstate_t *state, TC *str, W len)
 {
-       TC ch;
-       W iter;
-       UH code;
-
-       ch = str[len - 1];
-       iter = (len - 1) * 2;
-       if ((ch & 0xFE00) == 0xFE00) {
-               iter++;
-       }
-       iter--;
-       code = 0x00FF & ch;
-
-       if ((state->lang.iter == iter)&&(state->lang.code == code)) {
-               return True;
-       }
-       return False;
+       return tadlangcodecmpTC(str, len, &state->lang);
 }
 
 EXPORT VOID texteditor_characterstate_initialize(texteditor_characterstate_t *state)
index e242a88..77769ff 100644 (file)
@@ -27,6 +27,7 @@
 #include    <basic.h>
 
 #include       <tad/tadfragment.h>
+#include       <tad/tadlangcode.h>
 
 #ifndef __TEXTEDITOR_CHARACTERSTATE_H__
 #define __TEXTEDITOR_CHARACTERSTATE_H__
 /* Detail name: characterstate */
 struct texteditor_characterstate_t_ {
        RATIO w_ratio;
-       struct {
-               UW iter;
-               UB code;
-       } lang;
+       tadlangcode lang;
 };
 typedef struct texteditor_characterstate_t_ texteditor_characterstate_t;