stdlib: Export some Unicode functions to other SDL internals.
parent
9192485746
commit
810656962c
|
@ -28,6 +28,8 @@
|
||||||
#include <psp2/kernel/clib.h>
|
#include <psp2/kernel/clib.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "SDL_sysstdlib.h"
|
||||||
|
|
||||||
#include "SDL_casefolding.h"
|
#include "SDL_casefolding.h"
|
||||||
|
|
||||||
// this is the Unicode REPLACEMENT CHARACTER, used for invalid codepoint values.
|
// this is the Unicode REPLACEMENT CHARACTER, used for invalid codepoint values.
|
||||||
|
@ -44,7 +46,7 @@ SDL_COMPILE_TIME_ASSERT(sizeof_wchar_t, sizeof(wchar_t) == SDL_SIZEOF_WCHAR_T);
|
||||||
|
|
||||||
|
|
||||||
// this expects `from` and `to` to be UTF-32 encoding!
|
// this expects `from` and `to` to be UTF-32 encoding!
|
||||||
static int SDL_UnicodeCaseFold(const Uint32 from, Uint32 *to)
|
int SDL_CaseFoldUnicode(const Uint32 from, Uint32 *to)
|
||||||
{
|
{
|
||||||
// !!! FIXME: since the hashtable is static, maybe we should binary
|
// !!! FIXME: since the hashtable is static, maybe we should binary
|
||||||
// !!! FIXME: search it instead of walking the whole bucket.
|
// !!! FIXME: search it instead of walking the whole bucket.
|
||||||
|
@ -127,7 +129,7 @@ static int SDL_UnicodeCaseFold(const Uint32 from, Uint32 *to)
|
||||||
cp1 = folded1[tail1++]; \
|
cp1 = folded1[tail1++]; \
|
||||||
} else { \
|
} else { \
|
||||||
const Uint##bits *str1start = (const Uint##bits *) str1; \
|
const Uint##bits *str1start = (const Uint##bits *) str1; \
|
||||||
head1 = SDL_UnicodeCaseFold(SDL_StepUTF##bits(&str1, slen1), folded1); \
|
head1 = SDL_CaseFoldUnicode(SDL_StepUTF##bits(&str1, slen1), folded1); \
|
||||||
update_slen1; \
|
update_slen1; \
|
||||||
cp1 = folded1[0]; \
|
cp1 = folded1[0]; \
|
||||||
tail1 = 1; \
|
tail1 = 1; \
|
||||||
|
@ -136,7 +138,7 @@ static int SDL_UnicodeCaseFold(const Uint32 from, Uint32 *to)
|
||||||
cp2 = folded2[tail2++]; \
|
cp2 = folded2[tail2++]; \
|
||||||
} else { \
|
} else { \
|
||||||
const Uint##bits *str2start = (const Uint##bits *) str2; \
|
const Uint##bits *str2start = (const Uint##bits *) str2; \
|
||||||
head2 = SDL_UnicodeCaseFold(SDL_StepUTF##bits(&str2, slen2), folded2); \
|
head2 = SDL_CaseFoldUnicode(SDL_StepUTF##bits(&str2, slen2), folded2); \
|
||||||
update_slen2; \
|
update_slen2; \
|
||||||
cp2 = folded2[0]; \
|
cp2 = folded2[0]; \
|
||||||
tail2 = 1; \
|
tail2 = 1; \
|
||||||
|
@ -152,7 +154,7 @@ static int SDL_UnicodeCaseFold(const Uint32 from, Uint32 *to)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
static Uint32 SDL_StepUTF8(const char **_str, const size_t slen)
|
Uint32 SDL_StepUTF8(const char **_str, const size_t slen)
|
||||||
{
|
{
|
||||||
const char *str = *_str;
|
const char *str = *_str;
|
||||||
const Uint32 octet = (Uint32) (slen ? ((Uint8) *str) : 0);
|
const Uint32 octet = (Uint32) (slen ? ((Uint8) *str) : 0);
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SDL_sysstdlib_h_
|
||||||
|
#define SDL_sysstdlib_h_
|
||||||
|
|
||||||
|
// most things you might need internally in here are public APIs, this is
|
||||||
|
// just a few special pieces right now.
|
||||||
|
|
||||||
|
Uint32 SDL_StepUTF8(const char **_str, const size_t slen);
|
||||||
|
|
||||||
|
// this expects `from` to be a Unicode codepoint, and `to` to point to AT LEAST THREE Uint32s.
|
||||||
|
int SDL_CaseFoldUnicode(const Uint32 from, Uint32 *to);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue