replace implementation for language code handling.
@@ -28,6 +28,9 @@ | ||
28 | 28 | |
29 | 29 | #include <bstdio.h> |
30 | 30 | |
31 | +#include <tad/tadfragment.h> | |
32 | +#include <tad/tadlangcode.h> | |
33 | + | |
31 | 34 | #ifdef BCHAN_CONFIG_DEBUG |
32 | 35 | # define DP(arg) printf arg |
33 | 36 | # define DP_ER(msg, err) printf("%s (%d/%x)\n", msg, err>>16, err) |
@@ -38,8 +41,8 @@ | ||
38 | 41 | |
39 | 42 | EXPORT W texteditor_charactorstate_input(texteditor_characterstate_t *state, tadfragment_cursor_segment *segment) |
40 | 43 | { |
41 | - TC ch; | |
42 | - W iter; | |
44 | + TC *str; | |
45 | + W len, err; | |
43 | 46 | UB segid, subid; |
44 | 47 | |
45 | 48 | if (segment->type == TADFRAGMENT_CURSOR_SEGMENTTYPE_VARIABLE) { |
@@ -56,13 +59,12 @@ | ||
56 | 59 | } |
57 | 60 | state->w_ratio = *(RATIO*)(segment->p + 8); |
58 | 61 | } else if (segment->type == TADFRAGMENT_CURSOR_SEGMENTTYPE_LANGCODE) { |
59 | - ch = *(TC*)(segment->p + segment->len - 2); | |
60 | - iter = segment->len - 2; | |
61 | - if ((ch & 0xFE00) == 0xFE00) { | |
62 | - iter++; | |
62 | + str = (TC*)segment->p; | |
63 | + len = segment->len / sizeof(TC); | |
64 | + err = TCtotadlangcode(str, len, &state->lang); | |
65 | + if (err < 0) { | |
66 | + return err; | |
63 | 67 | } |
64 | - state->lang.iter = iter - 1; | |
65 | - state->lang.code = 0x00FF & ch; | |
66 | 68 | } |
67 | 69 | return 0; |
68 | 70 | } |
@@ -82,44 +84,12 @@ | ||
82 | 84 | |
83 | 85 | EXPORT W texteditor_characterstate_getlang(texteditor_characterstate_t *state, TC *str, W len) |
84 | 86 | { |
85 | - W i, req_len; | |
86 | - | |
87 | - req_len = 2 + (state->lang.iter+1)/2*2; | |
88 | - | |
89 | - if (str == NULL || len < 0) { | |
90 | - return req_len / sizeof(TC); | |
91 | - } | |
92 | - | |
93 | - for (i = 0; i < (state->lang.iter + 1) / 2; i++) { | |
94 | - str[i] = 0xFEFE; | |
95 | - } | |
96 | - if (state->lang.iter % 2 == 1) { | |
97 | - str[i] = state->lang.code; | |
98 | - } else { | |
99 | - str[i] = 0xFE00 | state->lang.code; | |
100 | - } | |
101 | - | |
102 | - return req_len / sizeof(TC); | |
87 | + return tadlangcodetoTC(&state->lang, str, len); | |
103 | 88 | } |
104 | 89 | |
105 | 90 | EXPORT Bool texteditor_characterstate_islang(texteditor_characterstate_t *state, TC *str, W len) |
106 | 91 | { |
107 | - TC ch; | |
108 | - W iter; | |
109 | - UH code; | |
110 | - | |
111 | - ch = str[len - 1]; | |
112 | - iter = (len - 1) * 2; | |
113 | - if ((ch & 0xFE00) == 0xFE00) { | |
114 | - iter++; | |
115 | - } | |
116 | - iter--; | |
117 | - code = 0x00FF & ch; | |
118 | - | |
119 | - if ((state->lang.iter == iter)&&(state->lang.code == code)) { | |
120 | - return True; | |
121 | - } | |
122 | - return False; | |
92 | + return tadlangcodecmpTC(str, len, &state->lang); | |
123 | 93 | } |
124 | 94 | |
125 | 95 | EXPORT VOID texteditor_characterstate_initialize(texteditor_characterstate_t *state) |
@@ -27,6 +27,7 @@ | ||
27 | 27 | #include <basic.h> |
28 | 28 | |
29 | 29 | #include <tad/tadfragment.h> |
30 | +#include <tad/tadlangcode.h> | |
30 | 31 | |
31 | 32 | #ifndef __TEXTEDITOR_CHARACTERSTATE_H__ |
32 | 33 | #define __TEXTEDITOR_CHARACTERSTATE_H__ |
@@ -35,10 +36,7 @@ | ||
35 | 36 | /* Detail name: characterstate */ |
36 | 37 | struct texteditor_characterstate_t_ { |
37 | 38 | RATIO w_ratio; |
38 | - struct { | |
39 | - UW iter; | |
40 | - UB code; | |
41 | - } lang; | |
39 | + tadlangcode lang; | |
42 | 40 | }; |
43 | 41 | typedef struct texteditor_characterstate_t_ texteditor_characterstate_t; |
44 | 42 |