mirror of https://github.com/AxioDL/nod.git
Fix OSUTF32To8 and OSUTF16To32
This commit is contained in:
parent
72893dcacb
commit
258076c298
20
lib/OSUTF.c
20
lib/OSUTF.c
|
@ -3033,7 +3033,7 @@ char16_t* OSUTF32To16(char32_t utf32, char16_t* utf16) {
|
||||||
}
|
}
|
||||||
|
|
||||||
char8_t* OSUTF32To8(char32_t utf32, char8_t* utf8) {
|
char8_t* OSUTF32To8(char32_t utf32, char8_t* utf8) {
|
||||||
char32_t len = 4;
|
char32_t len = 0;
|
||||||
if (utf32 < 0xd800 || utf32 > 0xdfff) {
|
if (utf32 < 0xd800 || utf32 > 0xdfff) {
|
||||||
if (utf32 < 0x80) {
|
if (utf32 < 0x80) {
|
||||||
utf8[0] = utf32;
|
utf8[0] = utf32;
|
||||||
|
@ -3059,7 +3059,7 @@ char8_t* OSUTF32To8(char32_t utf32, char8_t* utf8) {
|
||||||
|
|
||||||
while (len > 0) {
|
while (len > 0) {
|
||||||
--len;
|
--len;
|
||||||
*utf8 = ((utf32 >> (len * 6)) & 0x3f) | 0x80;
|
*utf8 = ((utf32 >> (len * 6 & 0x3fU)) & 0x3f) | 0x80;
|
||||||
++utf8;
|
++utf8;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -3070,26 +3070,26 @@ char8_t* OSUTF32To8(char32_t utf32, char8_t* utf8) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const char16_t* OSUTF16To32(const char16_t* utf16, char32_t* utf32) {
|
const char16_t* OSUTF16To32(const char16_t* utf16, char32_t* utf32) {
|
||||||
char16_t chr1 = *utf16;
|
uint32_t outChr = 0;
|
||||||
char16_t chr2 = 0;
|
uint16_t chr1 = *utf16;
|
||||||
char32_t outChr = 0;
|
|
||||||
if (chr1 != 0) {
|
if (chr1 != 0) {
|
||||||
++utf16;
|
++utf16;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chr1 < 0xd800 || chr1 > 0xdfff) {
|
if (chr1 < 0xd800 || chr1 > 0xdfff) {
|
||||||
outChr = chr1;
|
outChr = chr1;
|
||||||
} else if (chr1 > 0xdbff) {
|
|
||||||
return NULL;
|
|
||||||
} else {
|
} else {
|
||||||
chr2 = *utf16;
|
if (chr1 > 0xdbff) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
uint16_t chr2 = *utf16;
|
||||||
++utf16;
|
++utf16;
|
||||||
if (chr2 < 0xdc00 || chr2 > 0xdfff) {
|
if (chr2 < 0xdc00 || chr2 > 0xdfff) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
outChr = (((chr1 & 0x3ff) << 10) | (chr2 & 0x3ff)) + 0x10000;
|
||||||
outChr = ((chr1 & 0x3ff) << 10 | (chr2 & 0x3ff)) + 0x10000;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*utf32 = outChr;
|
*utf32 = outChr;
|
||||||
return utf16;
|
return utf16;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue