diff options
Diffstat (limited to '')
| -rw-r--r-- | project/dclib/dclib-utf8.c | 78 |
1 files changed, 78 insertions, 0 deletions
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 @@ -1054,6 +1054,45 @@ char * PrintUTF8CharToCircBuf ( u32 code ) } /////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +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 ) { @@ -1088,6 +1127,45 @@ ccp AlignUTF8ToCircBuf ( ccp str, int fw, int prec ) } /////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////// + +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 ) { |
