mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-11-23 11:35:19 +01:00
Update unicode_conversions
This commit is contained in:
parent
631a024373
commit
ff91406362
@ -35,10 +35,6 @@
|
|||||||
9A105B2624464A830006DE06 /* VectorGraphics.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A105B2224464A830006DE06 /* VectorGraphics.h */; };
|
9A105B2624464A830006DE06 /* VectorGraphics.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A105B2224464A830006DE06 /* VectorGraphics.h */; };
|
||||||
9A105B2724464A830006DE06 /* VectorGraphics.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A105B2224464A830006DE06 /* VectorGraphics.h */; };
|
9A105B2724464A830006DE06 /* VectorGraphics.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A105B2224464A830006DE06 /* VectorGraphics.h */; };
|
||||||
9A105B2824464A830006DE06 /* VectorGraphics.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A105B2224464A830006DE06 /* VectorGraphics.h */; };
|
9A105B2824464A830006DE06 /* VectorGraphics.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A105B2224464A830006DE06 /* VectorGraphics.h */; };
|
||||||
9A105B2924464A830006DE06 /* ftol.asm in Sources */ = {isa = PBXBuildFile; fileRef = 9A105B2324464A830006DE06 /* ftol.asm */; };
|
|
||||||
9A105B2A24464A830006DE06 /* ftol.asm in Sources */ = {isa = PBXBuildFile; fileRef = 9A105B2324464A830006DE06 /* ftol.asm */; };
|
|
||||||
9A105B2B24464A830006DE06 /* ftol.asm in Sources */ = {isa = PBXBuildFile; fileRef = 9A105B2324464A830006DE06 /* ftol.asm */; };
|
|
||||||
9A105B2C24464A830006DE06 /* ftol.asm in Sources */ = {isa = PBXBuildFile; fileRef = 9A105B2324464A830006DE06 /* ftol.asm */; };
|
|
||||||
9A105B2D24464A830006DE06 /* BmLib.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A105B2424464A830006DE06 /* BmLib.h */; };
|
9A105B2D24464A830006DE06 /* BmLib.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A105B2424464A830006DE06 /* BmLib.h */; };
|
||||||
9A105B2E24464A830006DE06 /* BmLib.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A105B2424464A830006DE06 /* BmLib.h */; };
|
9A105B2E24464A830006DE06 /* BmLib.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A105B2424464A830006DE06 /* BmLib.h */; };
|
||||||
9A105B2F24464A830006DE06 /* BmLib.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A105B2424464A830006DE06 /* BmLib.h */; };
|
9A105B2F24464A830006DE06 /* BmLib.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A105B2424464A830006DE06 /* BmLib.h */; };
|
||||||
@ -2121,7 +2117,6 @@
|
|||||||
9AC77FC224176C04005CDD5C /* XObjArray_tests.cpp in Sources */,
|
9AC77FC224176C04005CDD5C /* XObjArray_tests.cpp in Sources */,
|
||||||
9AC7808224176C04005CDD5C /* memory.cpp in Sources */,
|
9AC7808224176C04005CDD5C /* memory.cpp in Sources */,
|
||||||
9AC7803B24176C04005CDD5C /* cpu.cpp in Sources */,
|
9AC7803B24176C04005CDD5C /* cpu.cpp in Sources */,
|
||||||
9A105B2924464A830006DE06 /* ftol.asm in Sources */,
|
|
||||||
9AC7800124176C04005CDD5C /* LegacyBoot.cpp in Sources */,
|
9AC7800124176C04005CDD5C /* LegacyBoot.cpp in Sources */,
|
||||||
9AC7807524176C04005CDD5C /* REFIT_MENU_SCREEN.cpp in Sources */,
|
9AC7807524176C04005CDD5C /* REFIT_MENU_SCREEN.cpp in Sources */,
|
||||||
9AC7801F24176C04005CDD5C /* LegacyBiosThunk.cpp in Sources */,
|
9AC7801F24176C04005CDD5C /* LegacyBiosThunk.cpp in Sources */,
|
||||||
@ -2239,7 +2234,6 @@
|
|||||||
9ACFE6E924309AF80071CC93 /* XObjArray_tests.cpp in Sources */,
|
9ACFE6E924309AF80071CC93 /* XObjArray_tests.cpp in Sources */,
|
||||||
9ACFE6EB24309AF80071CC93 /* memory.cpp in Sources */,
|
9ACFE6EB24309AF80071CC93 /* memory.cpp in Sources */,
|
||||||
9ACFE6EC24309AF80071CC93 /* cpu.cpp in Sources */,
|
9ACFE6EC24309AF80071CC93 /* cpu.cpp in Sources */,
|
||||||
9A105B2C24464A830006DE06 /* ftol.asm in Sources */,
|
|
||||||
9ACFE6ED24309AF80071CC93 /* LegacyBoot.cpp in Sources */,
|
9ACFE6ED24309AF80071CC93 /* LegacyBoot.cpp in Sources */,
|
||||||
9ACFE6EE24309AF80071CC93 /* REFIT_MENU_SCREEN.cpp in Sources */,
|
9ACFE6EE24309AF80071CC93 /* REFIT_MENU_SCREEN.cpp in Sources */,
|
||||||
9ACFE6EF24309AF80071CC93 /* LegacyBiosThunk.cpp in Sources */,
|
9ACFE6EF24309AF80071CC93 /* LegacyBiosThunk.cpp in Sources */,
|
||||||
@ -2357,7 +2351,6 @@
|
|||||||
9AF41621242CD75C00D2644C /* memory.cpp in Sources */,
|
9AF41621242CD75C00D2644C /* memory.cpp in Sources */,
|
||||||
9AF41622242CD75C00D2644C /* cpu.cpp in Sources */,
|
9AF41622242CD75C00D2644C /* cpu.cpp in Sources */,
|
||||||
9AF41623242CD75C00D2644C /* LegacyBoot.cpp in Sources */,
|
9AF41623242CD75C00D2644C /* LegacyBoot.cpp in Sources */,
|
||||||
9A105B2A24464A830006DE06 /* ftol.asm in Sources */,
|
|
||||||
9AF41624242CD75C00D2644C /* REFIT_MENU_SCREEN.cpp in Sources */,
|
9AF41624242CD75C00D2644C /* REFIT_MENU_SCREEN.cpp in Sources */,
|
||||||
9AF41625242CD75C00D2644C /* LegacyBiosThunk.cpp in Sources */,
|
9AF41625242CD75C00D2644C /* LegacyBiosThunk.cpp in Sources */,
|
||||||
9A09863224389A6A00826276 /* menu.cpp in Sources */,
|
9A09863224389A6A00826276 /* menu.cpp in Sources */,
|
||||||
@ -2475,7 +2468,6 @@
|
|||||||
9AF416FE242CDA5800D2644C /* memory.cpp in Sources */,
|
9AF416FE242CDA5800D2644C /* memory.cpp in Sources */,
|
||||||
9AF416FF242CDA5800D2644C /* cpu.cpp in Sources */,
|
9AF416FF242CDA5800D2644C /* cpu.cpp in Sources */,
|
||||||
9AF41700242CDA5800D2644C /* LegacyBoot.cpp in Sources */,
|
9AF41700242CDA5800D2644C /* LegacyBoot.cpp in Sources */,
|
||||||
9A105B2B24464A830006DE06 /* ftol.asm in Sources */,
|
|
||||||
9AF41701242CDA5800D2644C /* REFIT_MENU_SCREEN.cpp in Sources */,
|
9AF41701242CDA5800D2644C /* REFIT_MENU_SCREEN.cpp in Sources */,
|
||||||
9AF41702242CDA5800D2644C /* LegacyBiosThunk.cpp in Sources */,
|
9AF41702242CDA5800D2644C /* LegacyBiosThunk.cpp in Sources */,
|
||||||
9A09863324389A6A00826276 /* menu.cpp in Sources */,
|
9A09863324389A6A00826276 /* menu.cpp in Sources */,
|
||||||
|
@ -85,7 +85,6 @@
|
|||||||
9ACAB117242623EE00BDB3CF /* printf_lite.c in Sources */ = {isa = PBXBuildFile; fileRef = 9ACAB116242623EE00BDB3CF /* printf_lite.c */; };
|
9ACAB117242623EE00BDB3CF /* printf_lite.c in Sources */ = {isa = PBXBuildFile; fileRef = 9ACAB116242623EE00BDB3CF /* printf_lite.c */; };
|
||||||
9ACAB1192426255C00BDB3CF /* printf_lite.c in Sources */ = {isa = PBXBuildFile; fileRef = 9ACAB116242623EE00BDB3CF /* printf_lite.c */; };
|
9ACAB1192426255C00BDB3CF /* printf_lite.c in Sources */ = {isa = PBXBuildFile; fileRef = 9ACAB116242623EE00BDB3CF /* printf_lite.c */; };
|
||||||
9ACAB11A2426255C00BDB3CF /* printf_lite.c in Sources */ = {isa = PBXBuildFile; fileRef = 9ACAB116242623EE00BDB3CF /* printf_lite.c */; };
|
9ACAB11A2426255C00BDB3CF /* printf_lite.c in Sources */ = {isa = PBXBuildFile; fileRef = 9ACAB116242623EE00BDB3CF /* printf_lite.c */; };
|
||||||
9AF41576242CBE7600D2644C /* poolprint-test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AF41571242CBE7600D2644C /* poolprint-test.cpp */; };
|
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXCopyFilesBuildPhase section */
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
@ -536,7 +535,6 @@
|
|||||||
9A0B08562402FF7700E2B470 /* XStringWArray.cpp in Sources */,
|
9A0B08562402FF7700E2B470 /* XStringWArray.cpp in Sources */,
|
||||||
9A28CD0C241B8DD400F3D247 /* strcmp_test.cpp in Sources */,
|
9A28CD0C241B8DD400F3D247 /* strcmp_test.cpp in Sources */,
|
||||||
9A28CD09241B8DD400F3D247 /* strncmp_test.cpp in Sources */,
|
9A28CD09241B8DD400F3D247 /* strncmp_test.cpp in Sources */,
|
||||||
9AF41576242CBE7600D2644C /* poolprint-test.cpp in Sources */,
|
|
||||||
9AC780AE2417DD2F005CDD5C /* panic.cpp in Sources */,
|
9AC780AE2417DD2F005CDD5C /* panic.cpp in Sources */,
|
||||||
9A0B085F240308E400E2B470 /* XStringW.cpp in Sources */,
|
9A0B085F240308E400E2B470 /* XStringW.cpp in Sources */,
|
||||||
9A0B08592402FF8200E2B470 /* all_tests.cpp in Sources */,
|
9A0B08592402FF8200E2B470 /* all_tests.cpp in Sources */,
|
||||||
|
@ -81,11 +81,11 @@ void PauseForKey(const wchar_t* msg)
|
|||||||
|
|
||||||
UINTN StrLen(const wchar_t* String)
|
UINTN StrLen(const wchar_t* String)
|
||||||
{
|
{
|
||||||
return wchar_len(String);
|
return size_of_utf_string(String);
|
||||||
}
|
}
|
||||||
UINTN StrLen(const char16_t* String)
|
UINTN StrLen(const char16_t* String)
|
||||||
{
|
{
|
||||||
return char16_len(String);
|
return size_of_utf_string(String);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -21,7 +21,6 @@
|
|||||||
// Macros that directly map functions to BaseLib, BaseMemoryLib, and DebugLib functions
|
// Macros that directly map functions to BaseLib, BaseMemoryLib, and DebugLib functions
|
||||||
// originally from OpensslLib
|
// originally from OpensslLib
|
||||||
|
|
||||||
#define memcpy(dest,source,count) CopyMem(dest,source,(UINTN)(count))
|
|
||||||
#define memset(dest,ch,count) SetMem(dest,(UINTN)(count),(UINT8)(ch))
|
#define memset(dest,ch,count) SetMem(dest,(UINTN)(count),(UINT8)(ch))
|
||||||
#define memchr(buf,ch,count) ScanMem8(buf,(UINTN)(count),(UINT8)ch)
|
#define memchr(buf,ch,count) ScanMem8(buf,(UINTN)(count),(UINT8)ch)
|
||||||
#define memcmp(buf1,buf2,count) (int)(CompareMem(buf1,buf2,(UINTN)(count)))
|
#define memcmp(buf1,buf2,count) (int)(CompareMem(buf1,buf2,(UINTN)(count)))
|
||||||
|
@ -10,4 +10,9 @@ inline void* memmove(void *dst, const void *src, size_t len)
|
|||||||
return CopyMem(dst, (void*)(src), len);
|
return CopyMem(dst, (void*)(src), len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void* memcpy(void *dst, const void *src, size_t len)
|
||||||
|
{
|
||||||
|
return CopyMem(dst,src,len);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -119,7 +119,7 @@ XStringW& XStringW::takeValueFrom(const wchar_t* S)
|
|||||||
|
|
||||||
XStringW& XStringW::takeValueFrom(const char* S)
|
XStringW& XStringW::takeValueFrom(const char* S)
|
||||||
{
|
{
|
||||||
xsize newLen = utf8_string_wchar_count(S);
|
xsize newLen = utf_size_of_utf_string(m_data, S);
|
||||||
Init(newLen);
|
Init(newLen);
|
||||||
wchar_string_from_utf8_string(m_data, m_allocatedSize+1, S); // m_size doesn't count the NULL terminator
|
wchar_string_from_utf8_string(m_data, m_allocatedSize+1, S); // m_size doesn't count the NULL terminator
|
||||||
SetLength(newLen);
|
SetLength(newLen);
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <wchar.h>
|
#include <wchar.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#ifndef __cplusplus
|
#ifndef __cplusplus
|
||||||
//typedef uint16_t wchar_t;
|
//typedef uint16_t wchar_t;
|
||||||
@ -16,34 +17,272 @@ typedef uint32_t char32_t;
|
|||||||
typedef uint16_t char16_t;
|
typedef uint16_t char16_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __WCHAR_MAX__
|
||||||
|
#error __WCHAR_MAX__
|
||||||
|
#endif
|
||||||
|
|
||||||
size_t char16_len(const char16_t* s);
|
#if __WCHAR_MAX__ <= 0xFFFFu
|
||||||
size_t char32_len(const char32_t* s);
|
#define wchar_cast char16_t
|
||||||
size_t wchar_len(const wchar_t* s);
|
#else
|
||||||
|
#define wchar_cast char32_t
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef wchar_cast
|
||||||
|
#error wchar_cast
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
char32_t get_char32_from_utf8(const char *s);
|
/*
|
||||||
|
* len means nb utf32 char
|
||||||
|
* size means nb of underlying native type (nb of char16_t, nb of char32_t, etc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/****** utility *****/
|
||||||
|
|
||||||
|
|
||||||
|
/****** utf8 - utf32 *****/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Size of an UTF32 char when represented in UTF8
|
||||||
|
* Return value : size
|
||||||
|
*/
|
||||||
|
size_t utf8_size_of_utf32_char(char32_t c);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Increment size and return a pointer to the next char
|
||||||
|
* Return value : pointer to the end of string or at the error
|
||||||
|
*/
|
||||||
|
const char32_t* utf8_size_of_utf32_char_ptr(const char32_t *s, size_t* size);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Store an utf32 char in dst, if there is enough room (dst_max_len is >= size of utf32 char)
|
||||||
|
* If there is enough room, dst_max_len is decrement and dst is increment and returned
|
||||||
|
* If there isn't enough room, dst_max_len is set to 0 and dst is returned
|
||||||
|
*/
|
||||||
|
char* get_utf8_from_char32(char* dst, size_t* dst_max_len, char32_t utf32_char);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* char32 will be set to 0 at the end of string or at error
|
||||||
|
* Return value : pointer to the end of string or at the error
|
||||||
|
*/
|
||||||
|
const char* get_char32_from_utf8_string(const char* s, char32_t* char32);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Size in bytes of an utf32 string if it were converted to utf8
|
||||||
|
* Return value : pointer to the end of string or at the error
|
||||||
|
*/
|
||||||
|
size_t utf8_size_of_utf32_string(const char32_t* s);
|
||||||
|
/*
|
||||||
|
* Size in bytes of an utf32 string of len char if it were converted to utf8
|
||||||
|
* Return value : pointer to the end of string or at the error
|
||||||
|
*/
|
||||||
|
size_t utf8_size_of_utf32_string_len(const char32_t* s, size_t len);
|
||||||
|
|
||||||
|
size_t utf32_size_of_utf8_string(const char* s);
|
||||||
|
size_t utf32_size_of_utf8_string_len(const char* s, size_t len);
|
||||||
|
|
||||||
|
size_t utf32_string_from_utf8_string(char32_t* dst, size_t dst_max_len, const char* s);
|
||||||
|
size_t utf8_string_from_utf32_string(char* dst, size_t dst_max_len, const char32_t *s);
|
||||||
|
|
||||||
|
|
||||||
|
/****** utf8 - utf16 *****/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Increment size
|
||||||
|
* Return value : pointer to the end of string or at the error
|
||||||
|
*/
|
||||||
|
const char16_t* utf8_size_of_utf16_char_ptr(const char16_t *s, size_t* size);
|
||||||
|
|
||||||
|
size_t utf8_size_of_utf16_string(const char16_t* s);
|
||||||
|
size_t utf8_size_of_utf16_string_len(const char16_t* s, size_t len);
|
||||||
|
|
||||||
|
size_t utf16_size_of_utf8_string(const char* s);
|
||||||
|
size_t utf16_size_of_utf8_string_len(const char* s, size_t len);
|
||||||
|
|
||||||
|
size_t utf8_string_from_utf16_string(char* dst, size_t dst_max_len, const char16_t *s);
|
||||||
|
size_t utf16_string_from_utf8_string(char16_t* dst, size_t dst_max_len, const char* s);
|
||||||
|
|
||||||
|
|
||||||
|
/****** utf16 - utf32 *****/
|
||||||
|
|
||||||
|
size_t utf16_size_of_utf32_char(char32_t c);
|
||||||
void get_char16_from_char32(char32_t char32, char16_t* char16_1, char16_t* char16_2);
|
void get_char16_from_char32(char32_t char32, char16_t* char16_1, char16_t* char16_2);
|
||||||
|
char32_t get_char32_from_char16(char16_t char16_1, char16_t char16_2);
|
||||||
size_t utf8_string_char16_count(const char *src);
|
const char16_t* get_char32_from_utf16_string(const char16_t* s, char32_t* char32);
|
||||||
size_t char16_string_from_utf8_string(char16_t* dst, size_t dst_max_len, const char *s);
|
|
||||||
size_t utf8_string_from_char16_string(char* dst, size_t dst_max_len, const char16_t *s);
|
|
||||||
|
|
||||||
size_t utf8_string_char32_count(const char *s);
|
|
||||||
size_t char32_string_from_utf8_string(char32_t* dst, size_t dst_max_len, const char *s);
|
|
||||||
size_t utf8_string_from_char32_string(char* dst, size_t dst_max_len, const char32_t *s);
|
|
||||||
|
|
||||||
|
|
||||||
size_t utf8_string_wchar_count(const char *src);
|
size_t utf16_size_of_utf32_string(const char32_t *s);
|
||||||
size_t wchar_string_from_utf8_string(wchar_t* dst, size_t dst_max_len, const char *s);
|
size_t utf16_size_of_utf32_string_len(const char32_t *s, size_t len);
|
||||||
|
size_t utf32_size_of_utf16_string(const char16_t *s);
|
||||||
|
size_t utf32_size_of_utf16_string_len(const char16_t *s, size_t len);
|
||||||
|
|
||||||
|
size_t utf16_string_from_utf32_string(char16_t* dst, size_t dst_max_len, const char32_t *s);
|
||||||
|
size_t utf32_string_from_utf16_string(char32_t* dst, size_t dst_max_len, const char16_t *s);
|
||||||
|
|
||||||
|
|
||||||
|
/****** utf8 - wchar_t *****/
|
||||||
|
|
||||||
|
size_t utf8_size_of_wchar_string(const wchar_t* s);
|
||||||
|
size_t utf8_size_of_wchar_string_len(const wchar_t* s, size_t len);
|
||||||
|
size_t wchar_size_of_utf8_string(const char* s);
|
||||||
|
size_t wchar_size_of_utf8_string_len(const char* s, size_t len);
|
||||||
|
|
||||||
size_t utf8_string_from_wchar_string(char* dst, size_t dst_max_len, const wchar_t* s);
|
size_t utf8_string_from_wchar_string(char* dst, size_t dst_max_len, const wchar_t* s);
|
||||||
|
size_t wchar_string_from_utf8_string(wchar_t* dst, size_t dst_max_len, const char* s);
|
||||||
|
|
||||||
|
|
||||||
size_t char16_string_char32_count(const char16_t *s);
|
/****** utf16 - wchar_t *****/
|
||||||
size_t utf32_string_to_char16_string(char32_t* dst, size_t dst_max_len, const char16_t *s);
|
size_t utf16_size_of_wchar_string(const wchar_t* s);
|
||||||
size_t utf16_string_to_char32_string(char16_t* dst, size_t dst_max_len, const char32_t *s);
|
size_t utf16_size_of_wchar_string_len(const wchar_t* s, size_t len);
|
||||||
|
size_t wchar_size_of_utf16_string(const char16_t *s);
|
||||||
|
size_t wchar_size_of_utf16_string_len(const char16_t *s, size_t len);
|
||||||
|
|
||||||
|
size_t utf16_string_from_wchar_string(char16_t* dst, size_t dst_max_len, const wchar_t* s);
|
||||||
|
size_t wchar_string_from_utf16_string(wchar_t* dst, size_t dst_max_len, const char16_t* s);
|
||||||
|
|
||||||
|
|
||||||
|
/****** utf32 - wchar_t *****/
|
||||||
|
size_t utf32_size_of_wchar_string(const wchar_t* s);
|
||||||
|
size_t utf32_size_of_wchar_string_len(const wchar_t* s, size_t len);
|
||||||
|
size_t wchar_size_of_utf32_string(const char32_t *s);
|
||||||
|
size_t wchar_size_of_utf32_string_len(const char32_t *s, size_t len);
|
||||||
|
|
||||||
|
size_t utf32_string_from_wchar_string(char32_t* dst, size_t dst_max_len, const wchar_t* s);
|
||||||
|
size_t wchar_string_from_utf32_string(wchar_t* dst, size_t dst_max_len, const char32_t* s);
|
||||||
|
|
||||||
|
|
||||||
|
/****** no conversion *****/
|
||||||
|
|
||||||
|
size_t utf8_size_of_utf8_string(const char* s);
|
||||||
|
size_t utf8_size_of_utf8_string_len(const char* s, size_t len);
|
||||||
|
size_t utf16_size_of_utf16_string(const char16_t* s);
|
||||||
|
size_t utf16_size_of_utf16_string_len(const char16_t* s, size_t len);
|
||||||
|
size_t utf32_size_of_utf32_string(const char32_t* s);
|
||||||
|
size_t utf32_size_of_utf32_string_len(const char32_t* s, size_t len);
|
||||||
|
size_t wchar_size_of_wchar_string(const wchar_t* s);
|
||||||
|
size_t wchar_size_of_wchar_string_len(const wchar_t* s, size_t len);
|
||||||
|
|
||||||
|
size_t utf8_string_from_utf8_string(char* dst, size_t dst_max_len, const char *s);
|
||||||
|
size_t utf16_string_from_utf16_string(char16_t* dst, size_t dst_max_len, const char16_t *s);
|
||||||
|
size_t utf32_string_from_utf32_string(char32_t* dst, size_t dst_max_len, const char32_t *s);
|
||||||
|
size_t wchar_string_from_wchar_string(wchar_t* dst, size_t dst_max_len, const wchar_t *s);
|
||||||
|
|
||||||
|
/****** convenience *****/
|
||||||
|
|
||||||
|
inline size_t length_of_utf8_string(const char* s) {return utf32_size_of_utf8_string(s); }
|
||||||
|
inline size_t length_of_utf16_string(const char16_t* s) {return utf32_size_of_utf16_string(s); }
|
||||||
|
inline size_t length_of_utf32_string(const char32_t* s) {return utf32_size_of_utf32_string(s); } // UTF32 length == size
|
||||||
|
size_t length_of_wchar_string(const wchar_t* s);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
|
||||||
|
inline const char* get_char32_from_string(const char* s, char32_t* char32) { return get_char32_from_utf8_string(s, char32); }
|
||||||
|
inline const char16_t* get_char32_from_string(const char16_t* s, char32_t* char32) { return get_char32_from_utf16_string(s, char32); }
|
||||||
|
inline const char32_t* get_char32_from_string(const char32_t* s, char32_t* char32) { *char32 = *s; return s+1; }
|
||||||
|
inline const wchar_t* get_char32_from_string(const wchar_t* s, char32_t* char32) { return (wchar_t*)get_char32_from_string((wchar_cast*)s, char32); }
|
||||||
|
|
||||||
|
|
||||||
|
inline size_t length_of_utf_string(const char* s) { return utf32_size_of_utf8_string(s); };
|
||||||
|
inline size_t length_of_utf_string(const char16_t* s) { return utf32_size_of_utf16_string(s); };
|
||||||
|
inline size_t length_of_utf_string(const char32_t* s) { return utf32_size_of_utf32_string(s); };
|
||||||
|
inline size_t length_of_utf_string(const wchar_t* s) { return length_of_utf_string((wchar_cast*)s); };
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
inline size_t size_of_utf_string(const char* s) { return utf8_size_of_utf8_string(s); }
|
||||||
|
inline size_t size_of_utf_string(const char16_t* s) { return utf16_size_of_utf16_string(s); }
|
||||||
|
inline size_t size_of_utf_string(const char32_t* s) { return utf32_size_of_utf32_string(s); } // for UTF32 size and length are equal
|
||||||
|
inline size_t size_of_utf_string(const wchar_t* s) { return size_of_utf_string((wchar_cast*)s); }
|
||||||
|
|
||||||
|
inline size_t utf_size_of_utf_string(const char*, const char* s) { return utf8_size_of_utf8_string(s); }
|
||||||
|
inline size_t utf_size_of_utf_string(const char16_t*, const char* s) { return utf16_size_of_utf8_string(s); }
|
||||||
|
inline size_t utf_size_of_utf_string(const char32_t*, const char* s) { return utf32_size_of_utf8_string(s); }
|
||||||
|
inline size_t utf_size_of_utf_string(const wchar_t* t, const char* s) { return utf_size_of_utf_string((wchar_cast*)t, s); }
|
||||||
|
|
||||||
|
inline size_t utf_size_of_utf_string(const char*, const char16_t* s) { return utf8_size_of_utf16_string(s); }
|
||||||
|
inline size_t utf_size_of_utf_string(const char16_t*, const char16_t* s) { return utf16_size_of_utf16_string(s); }
|
||||||
|
inline size_t utf_size_of_utf_string(const char32_t*, const char16_t* s) { return utf32_size_of_utf16_string(s); }
|
||||||
|
inline size_t utf_size_of_utf_string(const wchar_t* t, const char16_t* s) { return utf_size_of_utf_string((wchar_cast*)t, s); }
|
||||||
|
|
||||||
|
inline size_t utf_size_of_utf_string(const char*, const char32_t* s) { return utf8_size_of_utf32_string(s); }
|
||||||
|
inline size_t utf_size_of_utf_string(const char16_t*, const char32_t* s) { return utf16_size_of_utf32_string(s); }
|
||||||
|
inline size_t utf_size_of_utf_string(const char32_t*, const char32_t* s) { return utf32_size_of_utf32_string(s); }
|
||||||
|
inline size_t utf_size_of_utf_string(const wchar_t* t, const char32_t* s) { return utf_size_of_utf_string((wchar_cast*)t, s); }
|
||||||
|
|
||||||
|
inline size_t utf_size_of_utf_string(const char* t, const wchar_t* s) { return utf_size_of_utf_string(t, (wchar_cast*)s); }
|
||||||
|
inline size_t utf_size_of_utf_string(const char16_t* t, const wchar_t* s) { return utf_size_of_utf_string(t, (wchar_cast*)s); }
|
||||||
|
inline size_t utf_size_of_utf_string(const char32_t* t, const wchar_t* s) { return utf_size_of_utf_string(t, (wchar_cast*)s); }
|
||||||
|
inline size_t utf_size_of_utf_string(const wchar_t* t, const wchar_t* s) { return utf_size_of_utf_string(t, (wchar_cast*)s); }
|
||||||
|
|
||||||
|
|
||||||
|
inline size_t size_of_utf_string_len(const char* s, size_t len) { return utf8_size_of_utf8_string_len(s, len); }
|
||||||
|
inline size_t size_of_utf_string_len(const char16_t* s, size_t len) { return utf16_size_of_utf16_string_len(s, len); }
|
||||||
|
inline size_t size_of_utf_string_len(const char32_t* s, size_t len) { return utf32_size_of_utf32_string_len(s, len); } // for UTF32 size and length are equal
|
||||||
|
inline size_t size_of_utf_string_len(const wchar_t* s, size_t len) { return size_of_utf_string_len((wchar_cast*)s, len); }
|
||||||
|
|
||||||
|
inline size_t utf_size_of_utf_string_len(const char*, const char* s, size_t len) { return utf8_size_of_utf8_string_len(s, len); }
|
||||||
|
inline size_t utf_size_of_utf_string_len(const char16_t*, const char* s, size_t len) { return utf16_size_of_utf8_string_len(s, len); }
|
||||||
|
inline size_t utf_size_of_utf_string_len(const char32_t*, const char* s, size_t len) { return utf32_size_of_utf8_string_len(s, len); }
|
||||||
|
inline size_t utf_size_of_utf_string_len(const wchar_t* t, const char* s, size_t len) { return utf_size_of_utf_string_len((wchar_cast*)t, s, len); }
|
||||||
|
|
||||||
|
inline size_t utf_size_of_utf_string_len(const char*, const char16_t* s, size_t len) { return utf8_size_of_utf16_string_len(s, len); }
|
||||||
|
inline size_t utf_size_of_utf_string_len(const char16_t*, const char16_t* s, size_t len) { return utf16_size_of_utf16_string_len(s, len); }
|
||||||
|
inline size_t utf_size_of_utf_string_len(const char32_t*, const char16_t* s, size_t len) { return utf32_size_of_utf16_string_len(s, len); }
|
||||||
|
inline size_t utf_size_of_utf_string_len(const wchar_t* t, const char16_t* s, size_t len) { return utf_size_of_utf_string_len((wchar_cast*)t, s, len); }
|
||||||
|
|
||||||
|
inline size_t utf_size_of_utf_string_len(const char*, const char32_t* s, size_t len) { return utf8_size_of_utf32_string_len(s, len); }
|
||||||
|
inline size_t utf_size_of_utf_string_len(const char16_t*, const char32_t* s, size_t len) { return utf16_size_of_utf32_string_len(s, len); }
|
||||||
|
inline size_t utf_size_of_utf_string_len(const char32_t*, const char32_t* s, size_t len) { return utf32_size_of_utf32_string_len(s, len); }
|
||||||
|
inline size_t utf_size_of_utf_string_len(const wchar_t* t, const char32_t* s, size_t len) { return utf_size_of_utf_string_len((wchar_cast*)t, s, len); }
|
||||||
|
|
||||||
|
inline size_t utf_size_of_utf_string_len(const char* t, const wchar_t* s, size_t len) { return utf_size_of_utf_string_len((wchar_cast*)t, (wchar_cast*)s, len); }
|
||||||
|
inline size_t utf_size_of_utf_string_len(const char16_t* t, const wchar_t* s, size_t len) { return utf_size_of_utf_string_len((wchar_cast*)t, (wchar_cast*)s, len); }
|
||||||
|
inline size_t utf_size_of_utf_string_len(const char32_t* t, const wchar_t* s, size_t len) { return utf_size_of_utf_string_len((wchar_cast*)t, (wchar_cast*)s, len); }
|
||||||
|
inline size_t utf_size_of_utf_string_len(const wchar_t* t, const wchar_t* s, size_t len) { return utf_size_of_utf_string_len((wchar_cast*)t, (wchar_cast*)s, len); }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
inline size_t utf_string_from_utf_string(char* dst, size_t dst_max_len, const char* s) { return utf8_string_from_utf8_string(dst, dst_max_len, s); }
|
||||||
|
inline size_t utf_string_from_utf_string(char16_t* dst, size_t dst_max_len, const char* s) { return utf16_string_from_utf8_string(dst, dst_max_len, s); }
|
||||||
|
inline size_t utf_string_from_utf_string(char32_t* dst, size_t dst_max_len, const char* s) { return utf32_string_from_utf8_string(dst, dst_max_len, s); }
|
||||||
|
inline size_t utf_string_from_utf_string(wchar_t* dst, size_t dst_max_len, const char* s) { return utf_string_from_utf_string((wchar_cast*)dst, dst_max_len, s); }
|
||||||
|
|
||||||
|
inline size_t utf_string_from_utf_string(char* dst, size_t dst_max_len, const char16_t *s) { return utf8_string_from_utf16_string(dst, dst_max_len, s); }
|
||||||
|
inline size_t utf_string_from_utf_string(char16_t* dst, size_t dst_max_len, const char16_t *s) { return utf16_string_from_utf16_string(dst, dst_max_len, s); }
|
||||||
|
inline size_t utf_string_from_utf_string(char32_t* dst, size_t dst_max_len, const char16_t *s) { return utf32_string_from_utf16_string(dst, dst_max_len, s); }
|
||||||
|
inline size_t utf_string_from_utf_string(wchar_t* dst, size_t dst_max_len, const char16_t *s) { return utf_string_from_utf_string((wchar_cast*)dst, dst_max_len, s); }
|
||||||
|
|
||||||
|
inline size_t utf_string_from_utf_string(char* dst, size_t dst_max_len, const char32_t *s) { return utf8_string_from_utf32_string(dst, dst_max_len, s); }
|
||||||
|
inline size_t utf_string_from_utf_string(char16_t* dst, size_t dst_max_len, const char32_t *s) { return utf16_string_from_utf32_string(dst, dst_max_len, s); }
|
||||||
|
inline size_t utf_string_from_utf_string(char32_t* dst, size_t dst_max_len, const char32_t *s) { return utf32_string_from_utf32_string(dst, dst_max_len, s); }
|
||||||
|
inline size_t utf_string_from_utf_string(wchar_t* dst, size_t dst_max_len, const char32_t *s) { return utf_string_from_utf_string((wchar_cast*)dst, dst_max_len, s); }
|
||||||
|
|
||||||
|
inline size_t utf_string_from_utf_string(char* dst, size_t dst_max_len, const wchar_t *s) { return utf_string_from_utf_string(dst, dst_max_len, (wchar_cast*)s); }
|
||||||
|
inline size_t utf_string_from_utf_string(char16_t* dst, size_t dst_max_len, const wchar_t *s) { return utf_string_from_utf_string(dst, dst_max_len, (wchar_cast*)s); }
|
||||||
|
inline size_t utf_string_from_utf_string(char32_t* dst, size_t dst_max_len, const wchar_t *s) { return utf_string_from_utf_string(dst, dst_max_len, (wchar_cast*)s); }
|
||||||
|
inline size_t utf_string_from_utf_string(wchar_t* dst, size_t dst_max_len, const wchar_t *s) { return utf_string_from_utf_string(dst, dst_max_len, (wchar_cast*)s); }
|
||||||
|
|
||||||
|
#endif // __cplusplus
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#undef wchar_cast
|
||||||
|
|
||||||
#endif /* utf816Conversion_hpp */
|
#endif /* utf816Conversion_hpp */
|
||||||
|
@ -68,7 +68,7 @@ static int testWPrintf(const char* label, const wchar_t* expectResult, int expe
|
|||||||
wchar_t* wbuf = spc.Str;
|
wchar_t* wbuf = spc.Str;
|
||||||
va_end(valist);
|
va_end(valist);
|
||||||
//delay_ms(10);
|
//delay_ms(10);
|
||||||
if ( memcmp(wbuf, expectResult, wchar_len(expectResult)*sizeof(expectResult[0])) != 0 ) {
|
if ( memcmp(wbuf, expectResult, size_of_utf_string(expectResult)*sizeof(expectResult[0])) != 0 ) {
|
||||||
// loggf(F(" -> ERROR. Expect " PRILF " and get %ls\n"), expectResult, buf);
|
// loggf(F(" -> ERROR. Expect " PRILF " and get %ls\n"), expectResult, buf);
|
||||||
// not using wprintf, it crashes sometimes, it doesn't work for short-wchar
|
// not using wprintf, it crashes sometimes, it doesn't work for short-wchar
|
||||||
loggf(F("%s -> ERROR. Expect "), label);
|
loggf(F("%s -> ERROR. Expect "), label);
|
||||||
|
@ -75,7 +75,7 @@ static int testWPrintf(const char* label, const wchar_t* expectResult, int expe
|
|||||||
int vsnwprintf_ret = PRINTF_FUNCTION_NAME(PRINTF_CFUNCTION_PREFIX, vsnwprint, PRINTF_CFUNCTION_SUFFIX)(wbuf, sizeof(wbuf)/sizeof(wchar_t), format, valist);
|
int vsnwprintf_ret = PRINTF_FUNCTION_NAME(PRINTF_CFUNCTION_PREFIX, vsnwprint, PRINTF_CFUNCTION_SUFFIX)(wbuf, sizeof(wbuf)/sizeof(wchar_t), format, valist);
|
||||||
va_end(valist);
|
va_end(valist);
|
||||||
//delay_ms(10);
|
//delay_ms(10);
|
||||||
if ( memcmp(wbuf, expectResult, wchar_len(expectResult)*sizeof(expectResult[0])) != 0 ) {
|
if ( memcmp(wbuf, expectResult, size_of_utf_string(expectResult)*sizeof(expectResult[0])) != 0 ) {
|
||||||
// loggf(F(" -> ERROR. Expect " PRILF " and get %ls\n"), expectResult, buf);
|
// loggf(F(" -> ERROR. Expect " PRILF " and get %ls\n"), expectResult, buf);
|
||||||
// not using wprintf, it crashes sometimes, it doesn't work for short-wchar
|
// not using wprintf, it crashes sometimes, it doesn't work for short-wchar
|
||||||
loggf(F("%s -> ERROR. Expect "), label);
|
loggf(F("%s -> ERROR. Expect "), label);
|
||||||
|
@ -83,7 +83,7 @@ static int testWPrintf(const char* label, const wchar_t* expectResult, int expe
|
|||||||
UnicodeVSPrint(wbuf, sizeof(wbuf), format, valist);
|
UnicodeVSPrint(wbuf, sizeof(wbuf), format, valist);
|
||||||
va_end(valist);
|
va_end(valist);
|
||||||
//delay_ms(10);
|
//delay_ms(10);
|
||||||
if ( memcmp(wbuf, expectResult, wchar_len(expectResult)*sizeof(expectResult[0])) != 0 ) {
|
if ( memcmp(wbuf, expectResult, size_of_utf_string(expectResult)*sizeof(expectResult[0])) != 0 ) {
|
||||||
// loggf(F(" -> ERROR. Expect " PRILF " and get %ls\n"), expectResult, buf);
|
// loggf(F(" -> ERROR. Expect " PRILF " and get %ls\n"), expectResult, buf);
|
||||||
// not using wprintf, it crashes sometimes, it doesn't work for short-wchar
|
// not using wprintf, it crashes sometimes, it doesn't work for short-wchar
|
||||||
loggf(F("%s -> ERROR. Expect "), label);
|
loggf(F("%s -> ERROR. Expect "), label);
|
||||||
|
Loading…
Reference in New Issue
Block a user