[tepl] Utils: add str_replace()
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tepl] Utils: add str_replace()
- Date: Mon, 18 Nov 2019 13:41:08 +0000 (UTC)
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]