X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=sympathy.git;a=blobdiff_plain;f=src%2Futf8.c;h=aaa5ffc69cb13d6a79c1a2e0e9a8f14eef937d75;hp=bffc9e408c18c8295010e4e1915ff228b734ba7a;hb=3e72a1f6fc28777c26e4fb109867bd2a3c7b89b0;hpb=8c545e672c902b0a6f1b0b525a6d568b2426b4ad diff --git a/src/utf8.c b/src/utf8.c index bffc9e4..aaa5ffc 100644 --- a/src/utf8.c +++ b/src/utf8.c @@ -10,6 +10,12 @@ static char rcsid[] = "$Id$"; /* * $Log$ + * Revision 1.9 2008/02/27 01:31:14 james + * *** empty log message *** + * + * Revision 1.8 2008/02/27 00:54:16 james + * *** empty log message *** + * * Revision 1.7 2008/02/26 23:56:12 james * *** empty log message *** * @@ -151,38 +157,47 @@ utf8_new (void) } - - -void -utf8_emit (TTY * t, int ch) +int +utf8_encode (char *ptr, int ch) { - uint8_t buf[4]; if (ch < 0x80) { - buf[0] = ch; - t->xmit (t, buf, 1); + ptr[0] = ch; + return 1; } else if (ch < 0x800) { - buf[0] = 0xc0 | (ch >> 6); - buf[1] = 0x80 | (ch & 0x3f); - - t->xmit (t, buf, 2); + ptr[0] = 0xc0 | (ch >> 6); + ptr[1] = 0x80 | (ch & 0x3f); + return 2; } else if (ch < 0x10000) { - buf[0] = 0xe0 | (ch >> 12); - buf[1] = 0x80 | ((ch >> 6) & 0x3f); - buf[2] = 0x80 | (ch & 0x3f); - t->xmit (t, buf, 3); + ptr[0] = 0xe0 | (ch >> 12); + ptr[1] = 0x80 | ((ch >> 6) & 0x3f); + ptr[2] = 0x80 | (ch & 0x3f); + return 3; } else if (ch < 0x1fffff) { - buf[0] = 0xf0 | (ch >> 18); - buf[1] = 0x80 | ((ch >> 12) & 0x3f); - buf[2] = 0x80 | ((ch >> 6) & 0x3f); - buf[3] = 0x80 | (ch & 0x3f); - t->xmit (t, buf, 4); + ptr[0] = 0xf0 | (ch >> 18); + ptr[1] = 0x80 | ((ch >> 12) & 0x3f); + ptr[2] = 0x80 | ((ch >> 6) & 0x3f); + ptr[3] = 0x80 | (ch & 0x3f); + return 4; } + return 0; +} + +void +utf8_emit (TTY * t, int ch) +{ + uint8_t buf[4]; + int i; + i = utf8_encode (buf, ch); + if (!i) + return; + + t->xmit (t, buf, i); }