Start refactor, restructure basic
This commit is contained in:
60
src/basic/basic_unicode.h
Normal file
60
src/basic/basic_unicode.h
Normal file
@@ -0,0 +1,60 @@
|
||||
#pragma once
|
||||
|
||||
struct UTF32Result {
|
||||
uint32_t out_str;
|
||||
int64_t advance;
|
||||
int64_t error;
|
||||
};
|
||||
|
||||
struct UTF8Result {
|
||||
uint8_t out_str[4];
|
||||
int64_t len;
|
||||
int64_t error;
|
||||
};
|
||||
|
||||
struct UTF16Result {
|
||||
uint16_t out_str[2];
|
||||
int64_t len;
|
||||
int64_t error;
|
||||
};
|
||||
|
||||
struct UTF8Iter {
|
||||
char *data;
|
||||
int64_t len;
|
||||
int64_t utf8_codepoint_byte_size;
|
||||
int64_t i;
|
||||
uint32_t item;
|
||||
|
||||
UTF8Iter &operator++() {
|
||||
void Advance(UTF8Iter * iter);
|
||||
Advance(this);
|
||||
return *this;
|
||||
}
|
||||
friend bool operator!=(const UTF8Iter &a, const UTF8Iter &b) { return a.item != b.item; }
|
||||
UTF8Iter &operator*() { return *this; }
|
||||
UTF8Iter begin() {
|
||||
UTF8Iter IterateUTF8Ex(char *data, int64_t len);
|
||||
return {IterateUTF8Ex(data, len)};
|
||||
}
|
||||
UTF8Iter end() { return {}; }
|
||||
};
|
||||
|
||||
API UTF32Result UTF16ToUTF32(uint16_t *c, int64_t max_advance);
|
||||
API UTF8Result UTF32ToUTF8(uint32_t codepoint);
|
||||
API UTF32Result UTF8ToUTF32(uint8_t *c, int64_t max_advance);
|
||||
API UTF16Result UTF32ToUTF16(uint32_t codepoint);
|
||||
|
||||
API int64_t CreateCharFromWidechar(char *buffer, int64_t buffer_size, char16_t *in, int64_t inlen);
|
||||
API int64_t CreateWidecharFromChar(char16_t *buffer, int64_t buffer_size, char *in, int64_t inlen);
|
||||
API char16_t *ToWidechar(Allocator allocator, String string);
|
||||
API String16 ToString16(Allocator allocator, String string);
|
||||
API String ToString(Allocator allocator, String16 string);
|
||||
API String ToString(Allocator allocator, char16_t *string, int64_t len);
|
||||
API String ToString(Allocator allocator, char16_t *wstring);
|
||||
|
||||
API bool IsValid(UTF8Iter &iter);
|
||||
API void Advance(UTF8Iter *iter);
|
||||
API UTF8Iter IterateUTF8Ex(char *data, int64_t len);
|
||||
API UTF8Iter IterateUTF8(char *data);
|
||||
API UTF8Iter IterateUTF8(String string);
|
||||
API bool IsUTF8ContinuationByte(char c);
|
||||
Reference in New Issue
Block a user