aboutsummaryrefslogtreecommitdiffstats
path: root/src/utf8.c
diff options
context:
space:
mode:
authorjames <>2008-02-27 00:54:16 +0000
committerjames <>2008-02-27 00:54:16 +0000
commit74feb0db53bf6ed2d53ca59e3aed001f1160e62a (patch)
tree5344087602e010d1677a647656121b3713470410 /src/utf8.c
parentdd068f2faaa044fbcef7a430650a221f210cba40 (diff)
downloadsympathy-74feb0db53bf6ed2d53ca59e3aed001f1160e62a.tar.gz
sympathy-74feb0db53bf6ed2d53ca59e3aed001f1160e62a.tar.bz2
sympathy-74feb0db53bf6ed2d53ca59e3aed001f1160e62a.zip
*** empty log message ***
Diffstat (limited to 'src/utf8.c')
-rw-r--r--src/utf8.c50
1 files changed, 30 insertions, 20 deletions
diff --git a/src/utf8.c b/src/utf8.c
index bffc9e4..7512c43 100644
--- a/src/utf8.c
+++ b/src/utf8.c
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
/*
* $Log$
+ * 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 +154,45 @@ 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);
}