string-util: tweak ellipsation a bit

This primarily changes to things:

1. Ellipsation to 0, 1 or 2 characters is now supported. Previously we'd
   hit an assert if the new lengths was < 3, this is now permitted. The
   result strings won't show too much info still of course, but the code
   becomes a bit more generic and robust to use.

2. If a UTF-8 mode is disabled and the input string is pure ASCII, then
   "..." is used for ellipsation, otherwise (as before) "…". This means
   on a pure-ASCII system we should remain pure-ASCII, matching
   behaviour otherwise exposed with special_glyph() and friends. Note
   that we'll use "…" for ellipsiation as soon as either the locale
   settings indicate an UTF-8 mode or the input string already contains
   non-ASCII unicode characters.

Testing for these special cases is improved.
This commit is contained in:
Lennart Poettering
2018-04-18 12:35:45 +02:00
parent adea407d11
commit c30a49b2d0
2 changed files with 92 additions and 25 deletions
+24
View File
@@ -17,6 +17,30 @@ static void test_one(const char *p) {
_cleanup_free_ char *t;
t = ellipsize(p, columns(), 70);
puts(t);
free(t);
t = ellipsize(p, columns(), 0);
puts(t);
free(t);
t = ellipsize(p, columns(), 100);
puts(t);
free(t);
t = ellipsize(p, 0, 50);
puts(t);
free(t);
t = ellipsize(p, 1, 50);
puts(t);
free(t);
t = ellipsize(p, 2, 50);
puts(t);
free(t);
t = ellipsize(p, 3, 50);
puts(t);
free(t);
t = ellipsize(p, 4, 50);
puts(t);
free(t);
t = ellipsize(p, 5, 50);
puts(t);
}
int main(int argc, char *argv[]) {