diff mcabber/src/utf8.c @ 24:e88b15cbf2de

[/trunk] Changeset 40 by mikael * Change structure -> src directory for mcabber source code...
author mikael
date Sun, 27 Mar 2005 20:16:02 +0000
parents
children f78ffe7ce43d
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mcabber/src/utf8.c	Sun Mar 27 20:16:02 2005 +0000
@@ -0,0 +1,58 @@
+#include <stdlib.h>
+#include <string.h>
+
+#include "utf8.h"
+
+
+/* Desc: convert UTF8 -> ASCII
+ * 
+ * In  : UTF8 string
+ * Out : ASCII string
+ *
+ * Note: it is up to the caller to free the returned string
+ */
+char *utf8_decode(const char *src)
+{
+  char *ret = calloc(1, strlen(src) + 1);
+  char *aux = ret;
+
+  while (*src) {
+    unsigned char lead = *src++;
+    if ((lead & 0xe0) == 0xc0) {
+      unsigned char ch2 = *src++;
+      *aux = ((lead & 0x1f) << 6) | (ch2 & 0x3f);
+    } else {
+      *aux = lead;
+    }
+    aux++;
+  }
+
+  return ret;
+}
+
+
+/* Desc: convert ASCII -> UTF8
+ * 
+ * In  : ASCII string
+ * Out : UTF8 string
+ *
+ * Note: it is up to the caller to free the returned string
+ */
+char *utf8_encode(const char *src)
+{
+  char *ret = calloc(1, (strlen(src) * 2) + 1);
+  char *aux = ret;
+
+  while (*src) {
+    unsigned char ch = *src++;
+    if (ch < 0x80) {
+      *aux = ch;
+    } else {			/* if (ch < 0x800) { */
+      *aux++ = 0xc0 | (ch >> 6 & 0x1f);
+      *aux = 0xc0 | (0x80 | (ch & 0x3f));
+    }
+    aux++;
+  }
+
+  return ret;
+}