mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-09 03:21:51 +00:00
lib: charset: upper/lower case conversion
Provide functions for upper and lower case conversion. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
5b2118a2ad
commit
b5130a8125
3 changed files with 73 additions and 0 deletions
|
@ -6,8 +6,18 @@
|
|||
*/
|
||||
|
||||
#include <charset.h>
|
||||
#include <capitalization.h>
|
||||
#include <malloc.h>
|
||||
|
||||
static struct capitalization_table capitalization_table[] =
|
||||
#ifdef CONFIG_EFI_UNICODE_CAPITALIZATION
|
||||
UNICODE_CAPITALIZATION_TABLE;
|
||||
#elif CONFIG_FAT_DEFAULT_CODEPAGE == 1250
|
||||
CP1250_CAPITALIZATION_TABLE;
|
||||
#else
|
||||
CP437_CAPITALIZATION_TABLE;
|
||||
#endif
|
||||
|
||||
s32 utf8_get(const char **src)
|
||||
{
|
||||
s32 code = 0;
|
||||
|
@ -241,6 +251,43 @@ int utf16_utf8_strncpy(char **dst, const u16 *src, size_t count)
|
|||
return 0;
|
||||
}
|
||||
|
||||
s32 utf_to_lower(const s32 code)
|
||||
{
|
||||
struct capitalization_table *pos = capitalization_table;
|
||||
s32 ret = code;
|
||||
|
||||
if (code <= 0x7f) {
|
||||
if (code >= 'A' && code <= 'Z')
|
||||
ret += 0x20;
|
||||
return ret;
|
||||
}
|
||||
for (; pos->upper; ++pos) {
|
||||
if (pos->upper == code) {
|
||||
ret = pos->lower;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
s32 utf_to_upper(const s32 code)
|
||||
{
|
||||
struct capitalization_table *pos = capitalization_table;
|
||||
s32 ret = code;
|
||||
|
||||
if (code <= 0x7f) {
|
||||
if (code >= 'a' && code <= 'z')
|
||||
ret -= 0x20;
|
||||
return ret;
|
||||
}
|
||||
for (; pos->lower; ++pos) {
|
||||
if (pos->lower == code) {
|
||||
ret = pos->upper;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
size_t u16_strlen(const u16 *in)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue