//////////////////////////////////////////////////////////// //~ Utf8 types Struct(Utf8DecodeResult) { u32 advance8; u32 codepoint; }; Struct(Utf8EncodeResult) { u32 count8; u8 chars8[4]; }; //////////////////////////////////////////////////////////// //~ Utf16 types Struct(Utf16DecodeResult) { u32 advance16; u32 codepoint; }; Struct(Utf16EncodeResult) { u32 count16; u16 chars16[2]; }; //////////////////////////////////////////////////////////// //~ Utf32 types Struct(Utf32DecodeResult) { u32 advance32; u32 codepoint; }; Struct(Utf32EncodeResult) { u32 chars32; }; //////////////////////////////////////////////////////////// //~ Utf8 Utf8DecodeResult DecodeUtf8(String str); Utf8EncodeResult EncodeUtf8(u32 codepoint); //////////////////////////////////////////////////////////// //~ Utf16 Utf16DecodeResult DecodeUtf16(String16 str); Utf16EncodeResult EncodeUtf16(u32 codepoint); b32 IsUtf16HighSurrogate(u16 c); b32 IsUtf16LowSurrogate(u16 c); //////////////////////////////////////////////////////////// //~ Utf32 Utf32DecodeResult DecodeUtf32(String32 str); Utf32EncodeResult EncodeUtf32(u32 codepoint);