summaryrefslogtreecommitdiff
path: root/src/runtime/c/gu/utf8.c
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2012-12-12 11:25:58 +0000
committerkr.angelov <kr.angelov@gmail.com>2012-12-12 11:25:58 +0000
commitaa13090b66d7ee1ffc68ad242c6419a83cf364d9 (patch)
treed36bacbc5f4e0990aae925da31ddeaf2a465a003 /src/runtime/c/gu/utf8.c
parent5e091d2e3dc428daa1d4b0d8df6e7b613adc22a9 (diff)
started an official API to the C runtime
Diffstat (limited to 'src/runtime/c/gu/utf8.c')
-rw-r--r--src/runtime/c/gu/utf8.c32
1 files changed, 25 insertions, 7 deletions
diff --git a/src/runtime/c/gu/utf8.c b/src/runtime/c/gu/utf8.c
index b1d5996c2..fb0f2c150 100644
--- a/src/runtime/c/gu/utf8.c
+++ b/src/runtime/c/gu/utf8.c
@@ -1,6 +1,6 @@
#include <gu/assert.h>
#include <gu/utf8.h>
-#include <config.h>
+#include "config.h"
GuUCS
gu_utf8_decode(const uint8_t** src_inout)
@@ -73,7 +73,6 @@ fail:
return 0;
}
-
size_t
gu_advance_utf8(GuUCS ucs, uint8_t* buf)
{
@@ -105,6 +104,19 @@ gu_in_utf8_char_(GuIn* in, GuExn* err)
return gu_ucs_char(gu_in_utf8(in, err), err);
}
+char
+gu_in_utf8_char(GuIn* in, GuExn* err)
+{
+#ifdef CHAR_ASCII
+ int i = gu_in_peek_u8(in);
+ if (i >= 0 && i < 0x80) {
+ gu_in_consume(in, 1);
+ return (char) i;
+ }
+#endif
+ return gu_in_utf8_char_(in, err);
+}
+
void
gu_out_utf8_long_(GuUCS ucs, GuOut* out, GuExn* err)
{
@@ -210,11 +222,17 @@ void gu_str_out_utf8_(const char* str, GuOut* out, GuExn* err)
#endif
-extern inline void
-gu_str_out_utf8(const char* str, GuOut* out, GuExn* err);
-
extern inline GuUCS
gu_in_utf8(GuIn* in, GuExn* err);
-extern inline char
-gu_in_utf8_char(GuIn* in, GuExn* err);
+void
+gu_str_out_utf8(const char* str, GuOut* out, GuExn* err)
+{
+#ifdef CHAR_ASCII
+ gu_out_bytes(out, (const uint8_t*) str, strlen(str), err);
+#else
+ extern void
+ gu_str_out_utf8_(const char* str, GuOut* out, GuExn* err);
+ gu_str_out_utf8_(str, out, err);
+#endif
+}