Workshop o mikrokontrolérech na SKSP 2024.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
1.9 KiB

2 months ago
/*
* The UniCode Character Categorizer
*
* (c) 1997--2004 Martin Mares <mj@ucw.cz>
*
* This software may be freely distributed and used according to the terms
* of the GNU Lesser General Public License.
*/
#ifndef _CHARSET_UNICAT_H
#define _CHARSET_UNICAT_H
#ifdef CONFIG_UCW_CLEAN_ABI
#define Uexpand_lig ucw_Uexpand_lig
#define _U_cat ucw__U_cat
#define _U_lower ucw__U_lower
#define _U_unaccent ucw__U_unaccent
#define _U_upper ucw__U_upper
#endif
extern const byte *_U_cat[];
extern const u16 *_U_upper[], *_U_lower[], *_U_unaccent[];
static inline uint Ucategory(uint x)
{
if (_U_cat[x >> 8U])
return _U_cat[x >> 8U][x & 0xff];
else
return 0;
}
static inline uint Utoupper(uint x)
{
uint w = (_U_upper[x >> 8U]) ? _U_upper[x >> 8U][x & 0xff] : 0;
return w ? w : x;
}
static inline uint Utolower(uint x)
{
uint w = (_U_lower[x >> 8U]) ? _U_lower[x >> 8U][x & 0xff] : 0;
return w ? w : x;
}
static inline uint Uunaccent(uint x)
{
uint w = (_U_unaccent[x >> 8U]) ? _U_unaccent[x >> 8U][x & 0xff] : 0;
return w ? w : x;
}
extern const u16 *Uexpand_lig(uint x);
enum unicode_char_type {
_U_LETTER = 1, /* Letters */
_U_UPPER = 2, /* Upper-case letters */
_U_LOWER = 4, /* Lower-case letters */
_U_CTRL = 8, /* Control characters */
_U_DIGIT = 16, /* Digits */
_U_XDIGIT = 32, /* Hexadecimal digits */
_U_SPACE = 64, /* White spaces (spaces, tabs, newlines) */
_U_LIGATURE = 128, /* Compatibility ligature (to be expanded) */
};
#define _U_LUPPER (_U_LETTER | _U_UPPER)
#define _U_LLOWER (_U_LETTER | _U_LOWER)
#define UCat(x,y) (Ucategory(x) & (y))
#define Ualpha(x) UCat(x, _U_LETTER)
#define Uupper(x) UCat(x, _U_UPPER)
#define Ulower(x) UCat(x, _U_LOWER)
#define Udigit(x) UCat(x, _U_DIGIT)
#define Uxdigit(x) UCat(x, (_U_DIGIT | _U_XDIGIT))
#define Ualnum(x) UCat(x, (_U_LETTER | _U_DIGIT))
#define Uctrl(x) UCat(x, _U_CTRL)
#define Uprint(x) !Uctrl(x)
#define Uspace(x) UCat(x, _U_SPACE)
#endif