X-Git-Url: http://git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=utf8lib.h;h=4b8221f5f779da6d7ca6d9103c6a69173acb08fa;hp=35bd5a6fe91e40695cfc3ab14b55d7b13fbc53e2;hb=4be7d59693a1e9fb66852a4f279cfef85c1880a8;hpb=8216c759ec0c77afe2ff9264a3b35a85248c1fe6 diff --git a/utf8lib.h b/utf8lib.h index 35bd5a6f..4b8221f5 100644 --- a/utf8lib.h +++ b/utf8lib.h @@ -1,24 +1,38 @@ +/* +Copyright (C) 2009-2020 DarkPlaces contributors + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + /* * UTF-8 utility functions for DarkPlaces */ #ifndef UTF8LIB_H__ #define UTF8LIB_H__ +#include #include "qtypes.h" // types for unicode strings // let them be 32 bit for now // normally, whcar_t is 16 or 32 bit, 16 on linux I think, 32 on haiku and maybe windows -#ifdef _MSC_VER -typedef __int32 U_int32; -#else -#include -#include -typedef int32_t U_int32; -#endif // Uchar, a wide character -typedef U_int32 Uchar; +typedef int32_t Uchar; // Initialize UTF8, this registers cvars which allows for UTF8 to be disabled // completely. @@ -26,7 +40,7 @@ typedef U_int32 Uchar; // a non-utf8 version to work: u8_strlen() will wrap to strlen() // u8_byteofs() and u8_charidx() will simply return whatever is passed as index parameter // u8_getchar() will will just return the next byte, u8_fromchar will write one byte, ... -extern cvar_t utf8_enable; +extern struct cvar_s utf8_enable; void u8_Init(void); size_t u8_strlen(const char*); @@ -38,13 +52,15 @@ size_t u8_prevbyte(const char*, size_t); Uchar u8_getchar_utf8_enabled(const char*, const char**); Uchar u8_getnchar_utf8_enabled(const char*, const char**, size_t); int u8_fromchar(Uchar, char*, size_t); +size_t u8_mbstowcs(Uchar *, const char *, size_t); size_t u8_wcstombs(char*, const Uchar*, size_t); -size_t u8_COM_StringLengthNoColors(const char *s, size_t size_s, qboolean *valid); +size_t u8_COM_StringLengthNoColors(const char *s, size_t size_s, qbool *valid); // returns a static buffer, use this for inlining -char *u8_encodech(Uchar ch, size_t*); +char *u8_encodech(Uchar ch, size_t*, char*buf16); -size_t u8_strpad(char *out, size_t outsize, const char *in, qboolean leftalign, size_t minwidth, size_t maxwidth); +size_t u8_strpad(char *out, size_t outsize, const char *in, qbool leftalign, size_t minwidth, size_t maxwidth); +size_t u8_strpad_colorcodes(char *out, size_t outsize, const char *in, qbool leftalign, size_t minwidth, size_t maxwidth); /* Careful: if we disable utf8 but not freetype, we wish to see freetype chars * for normal letters. So use E000+x for special chars, but leave the freetype stuff for the @@ -52,11 +68,14 @@ size_t u8_strpad(char *out, size_t outsize, const char *in, qboolean leftalign, */ extern Uchar u8_quake2utf8map[256]; // these defines get a bit tricky, as c and e may be aliased to the same variable -#define u8_getchar(c,e) (utf8_enable.integer ? u8_getchar_utf8_enabled(c,e) : (u8_quake2utf8map[(*((unsigned char **)(e)) = ((unsigned char *)(c)) + 1)[-1]])) -#define u8_getchar_noendptr(c) (utf8_enable.integer ? u8_getchar_utf8_enabled(c,NULL) : (u8_quake2utf8map[*((unsigned char *)(c))])) +#define u8_getchar(c,e) (utf8_enable.integer ? u8_getchar_utf8_enabled(c,e) : (u8_quake2utf8map[(unsigned char)(*(e) = (c) + 1)[-1]])) +#define u8_getchar_noendptr(c) (utf8_enable.integer ? u8_getchar_utf8_enabled(c,NULL) : (u8_quake2utf8map[(unsigned char)*(c)])) #define u8_getchar_check(c,e) ((e) ? u8_getchar((c),(e)) : u8_getchar_noendptr((c))) -#define u8_getnchar(c,e,n) (utf8_enable.integer ? u8_getnchar_utf8_enabled(c,e,n) : ((n) <= 0 ? ((*(e) = c), 0) : (u8_quake2utf8map[(*((unsigned char **)(e)) = ((unsigned char *)(c)) + 1)[-1]]))) -#define u8_getnchar_noendptr(c,n) (utf8_enable.integer ? u8_getnchar_utf8_enabled(c,NULL,n) : ((n) <= 0 ? 0 : (u8_quake2utf8map[*((unsigned char *)(c))]))) +#define u8_getnchar(c,e,n) (utf8_enable.integer ? u8_getnchar_utf8_enabled(c,e,n) : ((n) <= 0 ? ((*(e) = c), 0) : (u8_quake2utf8map[(unsigned char)(*(e) = (c) + 1)[-1]]))) +#define u8_getnchar_noendptr(c,n) (utf8_enable.integer ? u8_getnchar_utf8_enabled(c,NULL,n) : ((n) <= 0 ? 0 : (u8_quake2utf8map[(unsigned char)*(c)]))) #define u8_getnchar_check(c,e,n) ((e) ? u8_getchar((c),(e),(n)) : u8_getchar_noendptr((c),(n))) +Uchar u8_toupper(Uchar ch); +Uchar u8_tolower(Uchar ch); + #endif // UTF8LIB_H__