libsmartcols: use symbols for title wrap

Signed-off-by: Igor Gnatenko <i.gnatenko.brain@gmail.com>
This commit is contained in:
Igor Gnatenko 2016-01-21 17:09:16 +01:00
parent b3256efff2
commit cd32dc248c
6 changed files with 37 additions and 6 deletions

View File

@ -115,6 +115,7 @@ extern struct libscols_symbols *scols_copy_symbols(const struct libscols_symbols
extern int scols_symbols_set_branch(struct libscols_symbols *sb, const char *str);
extern int scols_symbols_set_vertical(struct libscols_symbols *sb, const char *str);
extern int scols_symbols_set_right(struct libscols_symbols *sb, const char *str);
extern int scols_symbols_set_title_wrap(struct libscols_symbols *sb, const char *str);
/* cell.c */
extern int scols_reset_cell(struct libscols_cell *ce);

View File

@ -126,6 +126,7 @@ SMARTCOLS_2.28 {
global:
scols_line_refer_column_data;
scols_line_set_column_data;
scols_symbols_set_title_wrap;
scols_table_enable_nowrap;
scols_table_set_title;
} SMARTCOLS_2.27;

View File

@ -52,6 +52,7 @@ struct libscols_symbols {
char *branch;
char *vert;
char *right;
char *title_wrap;
};
/*

View File

@ -2,6 +2,7 @@
* symbols.c - routines for symbol handling
*
* Copyright (C) 2014 Ondrej Oprala <ooprala@redhat.com>
* Copyright (C) 2016 Igor Gnatenko <i.gnatenko.brain@gmail.com>
*
* This file may be redistributed under the terms of the
* GNU Lesser General Public License.
@ -61,6 +62,7 @@ void scols_unref_symbols(struct libscols_symbols *sy)
free(sy->branch);
free(sy->vert);
free(sy->right);
free(sy->title_wrap);
free(sy);
}
}
@ -140,6 +142,31 @@ int scols_symbols_set_right(struct libscols_symbols *sb, const char *str)
return 0;
}
/**
* scols_symbols_set_title_wrap:
* @sb: a pointer to a struct libscols_symbols instance
* @str: a string which will represent the symbols which wraps title output
*
* Returns: 0, a negative value in case of an error.
*/
int scols_symbols_set_title_wrap(struct libscols_symbols *sb, const char *str)
{
char *p = NULL;
assert(sb);
if (!sb)
return -EINVAL;
if (str) {
p = strdup(str);
if (!p)
return -ENOMEM;
}
free(sb->title_wrap);
sb->title_wrap = p;
return 0;
}
/**
* scols_copy_symbols:
* @sb: a pointer to a struct libscols_symbols instance
@ -164,6 +191,8 @@ struct libscols_symbols *scols_copy_symbols(const struct libscols_symbols *sb)
rc = scols_symbols_set_vertical(ret, sb->vert);
if (!rc)
rc = scols_symbols_set_right(ret, sb->right);
if (!rc)
rc = scols_symbols_set_title_wrap(ret, sb->title_wrap);
if (!rc)
return ret;
@ -171,5 +200,3 @@ struct libscols_symbols *scols_copy_symbols(const struct libscols_symbols *sb)
return NULL;
}

View File

@ -737,6 +737,7 @@ int scols_table_set_symbols(struct libscols_table *tb,
scols_symbols_set_vertical(tb->symbols, "| ");
scols_symbols_set_right(tb->symbols, "`-");
}
scols_symbols_set_title_wrap(tb->symbols, " ");
}
return 0;

View File

@ -567,23 +567,23 @@ static void print_title(struct libscols_table *tb)
fputs(tb->title, tb->out);
for (i = len; i < tb->termwidth; i++)
fputs(" ", tb->out);
fputs(tb->symbols->title_wrap, tb->out);
break;
case SCOLS_TITLE_CENTER:
for (i = 0; i <= (tb->termwidth - len) / 2; i++)
fputs(" ", tb->out);
fputs(tb->symbols->title_wrap, tb->out);
fputs(tb->title, tb->out);
i += len;
for (; i < tb->termwidth; i++)
fputs(" ", tb->out);
fputs(tb->symbols->title_wrap, tb->out);
break;
case SCOLS_TITLE_RIGHT:
for (i = 0; i < tb->termwidth - len; i++)
fputs(" ", tb->out);
fputs(tb->symbols->title_wrap, tb->out);
fputs(tb->title, tb->out);