[nautilus/ellipsization-truncation-a-united-nation: 2/3] eel: string: add _end_truncate()



commit a5bbc4fbcc44df81e7f9d860cd245346c41e1c8b
Author: Ernestas Kulik <ernestask gnome org>
Date:   Mon Feb 19 21:31:49 2018 +0200

    eel: string: add _end_truncate()
    
    This is useful for truncating GIO error messages that can be potentially
    extremely long.

 eel/eel-string.c | 23 +++++++++++++++++++++++
 eel/eel-string.h |  3 ++-
 2 files changed, 25 insertions(+), 1 deletion(-)
---
diff --git a/eel/eel-string.c b/eel/eel-string.c
index 30e09808e..904dffa5b 100644
--- a/eel/eel-string.c
+++ b/eel/eel-string.c
@@ -141,6 +141,29 @@ eel_str_middle_truncate (const char *string,
     return g_strconcat (left_substring, ellipsis, right_substring, NULL);
 }
 
+char *
+eel_str_end_truncate (const char *string,
+                      size_t      truncate_length)
+{
+    const char ellipsis[] = "…";
+    const size_t min_truncate_length = G_N_ELEMENTS (ellipsis) + 1;
+    g_autofree char *substring = NULL;
+
+    g_return_val_if_fail (string != NULL, NULL);
+    g_return_val_if_fail (truncate_length > 0, NULL);
+    g_return_val_if_fail (truncate_length <= G_MAXLONG, NULL);
+
+    if (truncate_length < min_truncate_length ||
+        g_utf8_strlen (string, -1) <= min_truncate_length)
+    {
+        return g_strdup (string);
+    }
+
+    substring = g_utf8_substring (string, 0, truncate_length - G_N_ELEMENTS (ellipsis));
+
+    return g_strconcat (substring, ellipsis, NULL);
+}
+
 char *
 eel_str_strip_substring_and_after (const char *string,
                                    const char *substring)
diff --git a/eel/eel-string.h b/eel/eel-string.h
index 206815360..df0cc452d 100644
--- a/eel/eel-string.h
+++ b/eel/eel-string.h
@@ -52,7 +52,8 @@ char *   eel_str_capitalize                (const char    *str);
  */
 char    *eel_str_middle_truncate           (const char    *string,
                                             size_t         truncate_length);
-
+char    *eel_str_end_truncate              (const char    *string,
+                                            size_t         truncate_length);
 
 /* Remove all characters after the passed-in substring. */
 char *   eel_str_strip_substring_and_after (const char    *str,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]