From 93ebddfba301f6f9e5f67cfaad9e527711c8fec6 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 2 Feb 2025 02:31:20 +0300 Subject: [PATCH] public: utflib: simplify Q_EncodeUTF8 --- public/utflib.c | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/public/utflib.c b/public/utflib.c index 80d2f1f8..74652b70 100644 --- a/public/utflib.c +++ b/public/utflib.c @@ -114,27 +114,35 @@ uint32_t Q_DecodeUTF16( utfstate_t *s, uint32_t in ) return 0; } -size_t Q_EncodeUTF8( char dst[4], uint32_t ch ) +static size_t Q_CodepointLength( uint32_t ch ) { if( ch <= 0x7fu ) + return 1; + else if( ch <= 0x7ffu ) + return 2; + else if( ch <= 0xffffu ) + return 3; + + return 4; +} + +size_t Q_EncodeUTF8( char dst[4], uint32_t ch ) +{ + switch( Q_CodepointLength( ch )) { + case 1: dst[0] = ch; return 1; - } - else if( ch <= 0x7ffu ) - { + case 2: dst[0] = 0xc0u | (( ch >> 6 ) & 0x1fu ); dst[1] = 0x80u | (( ch ) & 0x3fu ); return 2; - } - else if( ch <= 0xffffu ) - { + case 3: dst[0] = 0xe0u | (( ch >> 12 ) & 0x0fu ); dst[1] = 0x80u | (( ch >> 6 ) & 0x3fu ); dst[2] = 0x80u | (( ch ) & 0x3fu ); return 3; } - dst[0] = 0xf0u | (( ch >> 18 ) & 0x07u ); dst[1] = 0x80u | (( ch >> 12 ) & 0x3fu ); dst[2] = 0x80u | (( ch >> 6 ) & 0x3fu ); @@ -163,18 +171,6 @@ size_t Q_UTF8Length( const char *s ) return len; } -static size_t Q_CodepointLength( uint32_t ch ) -{ - if( ch <= 0x7fu ) - return 1; - else if( ch <= 0x7ffu ) - return 2; - else if( ch <= 0xffffu ) - return 3; - - return 4; -} - size_t Q_UTF16ToUTF8( char *dst, size_t dstsize, const uint16_t *src, size_t srcsize ) { utfstate_t state = { 0 };