top: some minor tweaks to the utf-8 multi-byte support
Translatable column headers are supposed to be limited to no more than 7 characters, even though some columns are wider than that or even variable width. That value of 7 is dictated by the Fields Management screen which will otherwise truncate a column header longer than 7. Our new utf-8 support did not adequately deal with the potential need for truncation of column headers should that limit of 7 be exceeded. This patch corrects that. [ a few comments were also tweaked just a little bit ] Signed-off-by: Jim Warner <james.warner@comcast.net>
This commit is contained in:
parent
0902221b95
commit
d002bdc455
13
top/top.c
13
top/top.c
@ -643,7 +643,7 @@ static void sig_resize (int dont_care_sig) {
|
||||
|
||||
/*###### Special UTF-8 Multi-Byte support ##############################*/
|
||||
|
||||
/* Support for NLS translated 'string' length */
|
||||
/* Support for NLS translated multi-byte strings */
|
||||
static char UTF8_tab[] = {
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x00 - 0x0F
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x10 - 0x1F
|
||||
@ -682,7 +682,7 @@ static int utf8_delta (const char *str) {
|
||||
|
||||
|
||||
/*
|
||||
* Determine a logical end within a potential multi-byte string
|
||||
* Determine a physical end within a potential multi-byte string
|
||||
* where maximum printable chars could be accommodated in width */
|
||||
static int utf8_embody (const char *str, int width) {
|
||||
const unsigned char *p = (const unsigned char *)str;
|
||||
@ -691,9 +691,8 @@ static int utf8_embody (const char *str, int width) {
|
||||
while (*p) {
|
||||
// -1 represents a decoding error, pretend it's untranslated ...
|
||||
if (0 > (clen = UTF8_tab[*p])) return width;
|
||||
if (cnum + 1 >= width) break;
|
||||
p += clen;
|
||||
++cnum;
|
||||
if (++cnum >= width) break;
|
||||
}
|
||||
return (int)((const char *)p - str);
|
||||
} // end: utf8_embody
|
||||
@ -705,9 +704,11 @@ static int utf8_embody (const char *str, int width) {
|
||||
static const char *utf8_justify (const char *str, int width, int justr) {
|
||||
static char l_fmt[] = "%-*.*s%s", r_fmt[] = "%*.*s%s";
|
||||
static char buf[SCREENMAX];
|
||||
const char *p;
|
||||
|
||||
width += utf8_delta(str);
|
||||
snprintf(buf, sizeof(buf), justr ? r_fmt : l_fmt, width, width, str, COLPADSTR);
|
||||
p = fmtmk("%.*s", utf8_embody(str, width), str);
|
||||
width += utf8_delta(p);
|
||||
snprintf(buf, sizeof(buf), justr ? r_fmt : l_fmt, width, width, p, COLPADSTR);
|
||||
return buf;
|
||||
} // end: utf8_justify
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user