[tepl] Utils: add str_replace()



commit 93ac626fe9d543da10406209de4171736aff02ec
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Mon Nov 18 14:29:39 2019 +0100

    Utils: add str_replace()
    
    Copied from gnome-latex, it will be used there.

 docs/reference/tepl-4.0-sections.txt |  1 +
 tepl/tepl-utils.c                    | 37 ++++++++++++++++++++++++++++++++++++
 tepl/tepl-utils.h                    |  4 ++++
 testsuite/test-utils.c               | 23 ++++++++++++++++++++++
 4 files changed, 65 insertions(+)
---
diff --git a/docs/reference/tepl-4.0-sections.txt b/docs/reference/tepl-4.0-sections.txt
index 76a0828..bcc24a4 100644
--- a/docs/reference/tepl-4.0-sections.txt
+++ b/docs/reference/tepl-4.0-sections.txt
@@ -389,6 +389,7 @@ tepl_notebook_get_type
 <FILE>utils</FILE>
 tepl_utils_str_middle_truncate
 tepl_utils_str_end_truncate
+tepl_utils_str_replace
 tepl_utils_get_file_extension
 tepl_utils_get_file_shortname
 tepl_utils_replace_home_dir_with_tilde
diff --git a/tepl/tepl-utils.c b/tepl/tepl-utils.c
index 81ab2e5..019163e 100644
--- a/tepl/tepl-utils.c
+++ b/tepl/tepl-utils.c
@@ -131,6 +131,43 @@ tepl_utils_str_end_truncate (const gchar *str,
        return str_truncate (str, truncate_length, FALSE);
 }
 
+/**
+ * tepl_utils_str_replace:
+ * @string: a string
+ * @search: the search string
+ * @replacement: the replacement string
+ *
+ * Replaces all occurences of @search by @replacement.
+ *
+ * Returns: A newly allocated string with the replacements. Free with g_free().
+ * Since: 4.4
+ */
+gchar *
+tepl_utils_str_replace (const gchar *string,
+                       const gchar *search,
+                       const gchar *replacement)
+{
+       gchar **chunks;
+       gchar *ret;
+
+       g_return_val_if_fail (string != NULL, NULL);
+       g_return_val_if_fail (search != NULL, NULL);
+       g_return_val_if_fail (replacement != NULL, NULL);
+
+       chunks = g_strsplit (string, search, -1);
+       if (chunks != NULL && chunks[0] != NULL)
+       {
+               ret = g_strjoinv (replacement, chunks);
+       }
+       else
+       {
+               ret = g_strdup (string);
+       }
+
+       g_strfreev (chunks);
+       return ret;
+}
+
 static gint
 get_extension_position (const gchar *filename)
 {
diff --git a/tepl/tepl-utils.h b/tepl/tepl-utils.h
index 093ce05..fe569ba 100644
--- a/tepl/tepl-utils.h
+++ b/tepl/tepl-utils.h
@@ -36,6 +36,10 @@ gchar *              tepl_utils_str_middle_truncate                  (const gchar *str,
 gchar *                tepl_utils_str_end_truncate                     (const gchar *str,
                                                                 guint        truncate_length);
 
+gchar *                tepl_utils_str_replace                          (const gchar *string,
+                                                                const gchar *search,
+                                                                const gchar *replacement);
+
 /* File utilities */
 
 gchar *                tepl_utils_get_file_extension                   (const gchar *filename);
diff --git a/testsuite/test-utils.c b/testsuite/test-utils.c
index 4832cee..7a7f2d4 100644
--- a/testsuite/test-utils.c
+++ b/testsuite/test-utils.c
@@ -39,6 +39,28 @@ test_str_end_truncate (void)
        g_free (truncated_str);
 }
 
+static void
+test_str_replace (void)
+{
+       gchar *result;
+
+       result = tepl_utils_str_replace ("$filename", "$filename", "blah");
+       g_assert_cmpstr (result, ==, "blah");
+       g_free (result);
+
+       result = tepl_utils_str_replace ("$shortname.pdf", "$shortname", "blah");
+       g_assert_cmpstr (result, ==, "blah.pdf");
+       g_free (result);
+
+       result = tepl_utils_str_replace ("abcdabcd", "ab", "r");
+       g_assert_cmpstr (result, ==, "rcdrcd");
+       g_free (result);
+
+       result = tepl_utils_str_replace ("abcd", "ef", "r");
+       g_assert_cmpstr (result, ==, "abcd");
+       g_free (result);
+}
+
 static void
 test_get_file_extension (void)
 {
@@ -178,6 +200,7 @@ main (gint    argc,
 
        g_test_add_func ("/utils/str-middle-truncate", test_str_middle_truncate);
        g_test_add_func ("/utils/str-end-truncate", test_str_end_truncate);
+       g_test_add_func ("/utils/str-replace", test_str_replace);
        g_test_add_func ("/utils/get-file-extension", test_get_file_extension);
        g_test_add_func ("/utils/get-file-shortname", test_get_file_shortname);
        g_test_add_func ("/utils/replace-home-dir-with-tilde", test_replace_home_dir_with_tilde);


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