#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)
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) {
}
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;
}
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)