From 7fad9e9383d01cce3ac17176404e1ab4e738736c Mon Sep 17 00:00:00 2001 From: Wiimm Date: Sat, 6 Aug 2022 16:20:07 +0200 Subject: SZS v2.28a.beta2 --- project/dclib/dclib-utf8.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) (limited to 'project/dclib/dclib-utf8.c') diff --git a/project/dclib/dclib-utf8.c b/project/dclib/dclib-utf8.c index 1ad06ce..e998ac7 100644 --- a/project/dclib/dclib-utf8.c +++ b/project/dclib/dclib-utf8.c @@ -1053,6 +1053,45 @@ char * PrintUTF8CharToCircBuf ( u32 code ) return buf; } +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +exmem_t AlignUTF8 ( exmem_dest_t *dest, ccp str, int str_len, int fw, int prec ) +{ + int slen = str_len < 0 + ? ScanUTF8Length(str) + : ScanUTF8LengthE(str,str+str_len); + + if ( prec >= 0 && slen > prec ) + slen = prec; + + const int align_left = fw < 0; + if (align_left) + fw = -fw; + if ( fw < slen ) + fw = slen; + int spaces = fw - slen; + + ccp end = SkipUTF8Char(str,slen); + const int copy_len = end - str; + + exmem_t res = GetExmemDestBuf(dest,copy_len+spaces); + char *buf = (char*)res.data.ptr; + + DASSERT(buf); + if (align_left) + { + memcpy(buf,str,copy_len); + memset(buf+copy_len,' ',spaces); + } + else + { + memset(buf,' ',spaces); + memcpy(buf+spaces,str,copy_len); + } + return res; +} + /////////////////////////////////////////////////////////////////////////////// ccp AlignUTF8ToCircBuf ( ccp str, int fw, int prec ) @@ -1087,6 +1126,45 @@ ccp AlignUTF8ToCircBuf ( ccp str, int fw, int prec ) return buf; } +/////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +exmem_t AlignEUTF8 ( exmem_dest_t *dest, ccp str, int str_len, int fw, int prec ) +{ + int slen = str_len < 0 + ? ScanUTF8Length(str) + : ScanUTF8LengthE(str,str+str_len); + + if ( prec >= 0 && slen > prec ) + slen = prec; + + const int align_left = fw < 0; + if (align_left) + fw = -fw; + if ( fw < slen ) + fw = slen; + int spaces = fw - slen; + + ccp end = SkipEUTF8Char(str,slen); + const int copy_len = end - str; + + exmem_t res = GetExmemDestBuf(dest,copy_len+spaces); + char *buf = (char*)res.data.ptr; + + DASSERT(buf); + if (align_left) + { + memcpy(buf,str,copy_len); + memset(buf+copy_len,' ',spaces); + } + else + { + memset(buf,' ',spaces); + memcpy(buf+spaces,str,copy_len); + } + return res; +} + /////////////////////////////////////////////////////////////////////////////// ccp AlignEUTF8ToCircBuf ( ccp str, int fw, int prec ) -- cgit v1.3.1