UTF-8 combined character fixes.

Thai can have treble combinations (1 x width=1 then 2 x width=0) so bump the
UTF-8 cell data size to 9 and alter the code to allow this.

Also break off the combining code into a separate function, handle any further
combining beyond the buffer size by replacing the character with _s, and when
redrawing the UTF-8 character don't assume the first part has just been
printed, redraw the entire line.
This commit is contained in:
Nicholas Marriott
2009-10-20 17:33:33 +00:00
parent 387f4d42cc
commit 62f234ce3b
3 changed files with 73 additions and 36 deletions

13
tty.c
View File

@ -874,14 +874,13 @@ tty_cmd_cell(struct tty *tty, const struct tty_ctx *ctx)
void
tty_cmd_utf8character(struct tty *tty, const struct tty_ctx *ctx)
{
u_char *ptr = ctx->ptr;
size_t i;
struct window_pane *wp = ctx->wp;
for (i = 0; i < UTF8_SIZE; i++) {
if (ptr[i] == 0xff)
break;
tty_putc(tty, ptr[i]);
}
/*
* Cannot rely on not being a partial character, so just redraw the
* whole line.
*/
tty_draw_line(tty, wp->screen, ctx->ocy, wp->xoff, wp->yoff);
}
void