mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-29 23:33:00 +00:00
- re-added the UTF-8 char formatter which is needed for ZScript.
This commit is contained in:
parent
fdad3186a6
commit
a46c0a52b6
2 changed files with 42 additions and 0 deletions
1
src/common/thirdparty/stb/stb_sprintf.c
vendored
1
src/common/thirdparty/stb/stb_sprintf.c
vendored
|
@ -1,4 +1,5 @@
|
||||||
#define STB_SPRINTF_IMPLEMENTATION
|
#define STB_SPRINTF_IMPLEMENTATION
|
||||||
|
#define STB_SPRINTF_UTF8_CHARS
|
||||||
#include "stb_sprintf.h"
|
#include "stb_sprintf.h"
|
||||||
|
|
||||||
// We still need our own wrappers because they use a size_t for count, not an int.
|
// We still need our own wrappers because they use a size_t for count, not an int.
|
||||||
|
|
41
src/common/thirdparty/stb/stb_sprintf.h
vendored
41
src/common/thirdparty/stb/stb_sprintf.h
vendored
|
@ -271,6 +271,42 @@ static struct
|
||||||
"75767778798081828384858687888990919293949596979899"
|
"75767778798081828384858687888990919293949596979899"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef STB_SPRINTF_UTF8_CHARS
|
||||||
|
static int stbsp_utf8_encode(int codepoint, char* buffer)
|
||||||
|
{
|
||||||
|
if (codepoint < -0x80 || codepoint > 0x10FFFF)
|
||||||
|
{
|
||||||
|
codepoint = 0xfffd;
|
||||||
|
}
|
||||||
|
if (codepoint < 0x80)
|
||||||
|
{
|
||||||
|
buffer[0] = (char)codepoint;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if (codepoint < 0x800)
|
||||||
|
{
|
||||||
|
buffer[0] = 0xC0 + ((codepoint & 0x7C0) >> 6);
|
||||||
|
buffer[1] = 0x80 + ((codepoint & 0x03F));
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
else if (codepoint < 0x10000)
|
||||||
|
{
|
||||||
|
buffer[0] = 0xE0 + ((codepoint & 0xF000) >> 12);
|
||||||
|
buffer[1] = 0x80 + ((codepoint & 0x0FC0) >> 6);
|
||||||
|
buffer[2] = 0x80 + ((codepoint & 0x003F));
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buffer[0] = 0xF0 + ((codepoint & 0x1C0000) >> 18);
|
||||||
|
buffer[1] = 0x80 + ((codepoint & 0x03F000) >> 12);
|
||||||
|
buffer[2] = 0x80 + ((codepoint & 0x000FC0) >> 6);
|
||||||
|
buffer[3] = 0x80 + ((codepoint & 0x00003F));
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
STBSP__PUBLICDEF void STB_SPRINTF_DECORATE(set_separators)(char pcomma, char pperiod)
|
STBSP__PUBLICDEF void STB_SPRINTF_DECORATE(set_separators)(char pcomma, char pperiod)
|
||||||
{
|
{
|
||||||
stbsp__period = pperiod;
|
stbsp__period = pperiod;
|
||||||
|
@ -602,9 +638,14 @@ STBSP__PUBLICDEF int STB_SPRINTF_DECORATE(vsprintfcb)(STBSP_SPRINTFCB *callback,
|
||||||
|
|
||||||
case 'c': // char
|
case 'c': // char
|
||||||
// get the character
|
// get the character
|
||||||
|
#ifndef STB_SPRINTF_UTF8_CHARS
|
||||||
s = num + STBSP__NUMSZ - 1;
|
s = num + STBSP__NUMSZ - 1;
|
||||||
*s = (char)va_arg(va, int);
|
*s = (char)va_arg(va, int);
|
||||||
l = 1;
|
l = 1;
|
||||||
|
#else
|
||||||
|
s = num + STBSP__NUMSZ - 4; // UTF-8 needs 4 bytes at most.
|
||||||
|
l = stbsp_utf8_encode(va_arg(va, int), s);
|
||||||
|
#endif
|
||||||
lead[0] = 0;
|
lead[0] = 0;
|
||||||
tail[0] = 0;
|
tail[0] = 0;
|
||||||
pr = 0;
|
pr = 0;
|
||||||
|
|
Loading…
Reference in a new issue