version 1.17, 2009/10/13 15:23:13 |
version 1.18, 2009/10/20 19:18:28 |
|
|
void |
void |
input_state_utf8(u_char ch, struct input_ctx *ictx) |
input_state_utf8(u_char ch, struct input_ctx *ictx) |
{ |
{ |
log_debug2("-- un %zu: %hhu (%c)", ictx->off, ch, ch); |
log_debug2("-- utf8 next: %zu: %hhu (%c)", ictx->off, ch, ch); |
|
|
ictx->utf8_buf[ictx->utf8_off++] = ch; |
if (utf8_append(&ictx->utf8data, ch)) |
if (--ictx->utf8_len != 0) |
return; /* more to come */ |
return; |
|
input_state(ictx, input_state_first); |
input_state(ictx, input_state_first); |
|
|
ictx->cell.flags |= GRID_FLAG_UTF8; |
ictx->cell.flags |= GRID_FLAG_UTF8; |
screen_write_cell(&ictx->ctx, &ictx->cell, ictx->utf8_buf); |
screen_write_cell(&ictx->ctx, &ictx->cell, &ictx->utf8data); |
ictx->cell.flags &= ~GRID_FLAG_UTF8; |
ictx->cell.flags &= ~GRID_FLAG_UTF8; |
} |
} |
|
|
|
|
struct window_pane *wp = ictx->wp; |
struct window_pane *wp = ictx->wp; |
|
|
if (ch > 0x7f && options_get_number(&wp->window->options, "utf8")) { |
if (ch > 0x7f && options_get_number(&wp->window->options, "utf8")) { |
/* |
if (utf8_open(&ictx->utf8data, ch)) { |
* UTF-8 sequence. |
log_debug2("-- utf8 size %u: %zu: %hhu (%c)", |
* |
ictx->utf8data.size, ictx->off, ch, ch); |
* 11000010-11011111 C2-DF start of 2-byte sequence |
|
* 11100000-11101111 E0-EF start of 3-byte sequence |
|
* 11110000-11110100 F0-F4 start of 4-byte sequence |
|
*/ |
|
memset(ictx->utf8_buf, 0xff, sizeof ictx->utf8_buf); |
|
ictx->utf8_buf[0] = ch; |
|
ictx->utf8_off = 1; |
|
|
|
if (ch >= 0xc2 && ch <= 0xdf) { |
|
log_debug2("-- u2 %zu: %hhu (%c)", ictx->off, ch, ch); |
|
input_state(ictx, input_state_utf8); |
input_state(ictx, input_state_utf8); |
ictx->utf8_len = 1; |
|
return; |
return; |
} |
} |
if (ch >= 0xe0 && ch <= 0xef) { |
|
log_debug2("-- u3 %zu: %hhu (%c)", ictx->off, ch, ch); |
|
input_state(ictx, input_state_utf8); |
|
ictx->utf8_len = 2; |
|
return; |
|
} |
|
if (ch >= 0xf0 && ch <= 0xf4) { |
|
log_debug2("-- u4 %zu: %hhu (%c)", ictx->off, ch, ch); |
|
input_state(ictx, input_state_utf8); |
|
ictx->utf8_len = 3; |
|
return; |
|
} |
|
} |
} |
log_debug2("-- ch %zu: %hhu (%c)", ictx->off, ch, ch); |
log_debug2("-- ch %zu: %hhu (%c)", ictx->off, ch, ch); |
|
|
ictx->cell.data = ch; |
ictx->cell.data = ch; |
screen_write_cell(&ictx->ctx, &ictx->cell, ictx->utf8_buf); |
screen_write_cell(&ictx->ctx, &ictx->cell, NULL); |
} |
} |
|
|
void |
void |