diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2012-12-12 11:25:58 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2012-12-12 11:25:58 +0000 |
| commit | aa13090b66d7ee1ffc68ad242c6419a83cf364d9 (patch) | |
| tree | d36bacbc5f4e0990aae925da31ddeaf2a465a003 /src/runtime/c/gu/utf8.c | |
| parent | 5e091d2e3dc428daa1d4b0d8df6e7b613adc22a9 (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.c | 32 |
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 +} |
