SF.net SVN: geany:[4522] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Tue Jan 12 21:10:46 UTC 2010


Revision: 4522
          http://geany.svn.sourceforge.net/geany/?rev=4522&view=rev
Author:   eht16
Date:     2010-01-12 21:10:46 +0000 (Tue, 12 Jan 2010)

Log Message:
-----------
Refactor templates_replace_all() into templates_replace_valist() to save some code duplication.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/editor.c
    trunk/src/templates.c
    trunk/src/templates.h

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2010-01-12 18:44:38 UTC (rev 4521)
+++ trunk/ChangeLog	2010-01-12 21:10:46 UTC (rev 4522)
@@ -1,3 +1,10 @@
+2010-01-12  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
+
+ * src/editor.c, src/templates.c, src/templates.h:
+   Refactor templates_replace_all() into templates_replace_valist()
+   to save some code duplication.
+
+
 2010-01-11  Frank Lanitz  <frank(at)frank(dot)uvena(dot)de>
 
  * plugins/geanyfunctions.h, src/editor.c, src/editor.h,

Modified: trunk/src/editor.c
===================================================================
--- trunk/src/editor.c	2010-01-12 18:44:38 UTC (rev 4521)
+++ trunk/src/editor.c	2010-01-12 21:10:46 UTC (rev 4522)
@@ -2135,15 +2135,12 @@
 
 static void snippets_replace_wildcards(GeanyEditor *editor, GString *text)
 {
-	gchar *year = utils_get_date_time(template_prefs.year_format, NULL);
-	gchar *date = utils_get_date_time(template_prefs.date_format, NULL);
-	gchar *datetime = utils_get_date_time(template_prefs.datetime_format, NULL);
 	gchar *basename = g_path_get_basename(DOC_FILENAME(editor->document));
 
-	templates_replace_all(text, year, date, datetime);
-	utils_string_replace_all(text, "{filename}", basename);
+	templates_replace_default_dates(text);
+	templates_replace_valist(text, "{filename}", basename, NULL);
 
-	utils_free_pointers(4, year, date, datetime, basename, NULL);
+	g_free(basename);
 }
 
 

Modified: trunk/src/templates.c
===================================================================
--- trunk/src/templates.c	2010-01-12 18:44:38 UTC (rev 4521)
+++ trunk/src/templates.c	2010-01-12 21:10:46 UTC (rev 4522)
@@ -167,7 +167,11 @@
 	str = g_string_new(text);
 
 	g_free(text);
-	templates_replace_all(str, year, date, datetime);
+	templates_replace_valist(str,
+		"{year}", year,
+		"{date}", date,
+		"{datetime}", datetime,
+		NULL);
 
 	return g_string_free(str, FALSE);
 }
@@ -288,18 +292,17 @@
 	if (content != NULL)
 	{
 		gchar *file_header;
-		gchar *year = utils_get_date_time(template_prefs.year_format, NULL);
-		gchar *date = utils_get_date_time(template_prefs.date_format, NULL);
-		gchar *datetime = utils_get_date_time(template_prefs.datetime_format, NULL);
 
 		template = g_string_new(content);
 
 		file_header = templates_get_template_fileheader(FILETYPE_ID(ft), doc_filename);
-		templates_replace_all(template, year, date, datetime);
-		utils_string_replace_all(template, "{filename}", doc_filename);
-		utils_string_replace_all(template, "{fileheader}", file_header);
+		templates_replace_valist(template,
+			"{filename}", doc_filename,
+			"{fileheader}", file_header,
+			NULL);
+		templates_replace_default_dates(template);
 
-		utils_free_pointers(5, year, date, datetime, file_header, content, NULL);
+		utils_free_pointers(2, file_header, content, NULL);
 		return g_string_free(template, FALSE);
 	}
 	return NULL;
@@ -660,12 +663,8 @@
 }
 
 
-void templates_replace_all(GString *text, const gchar *year, const gchar *date,
-						   const gchar *datetime)
+static void replace_static_values(GString *text)
 {
-	utils_string_replace_all(text, "{year}", year);
-	utils_string_replace_all(text, "{date}", date);
-	utils_string_replace_all(text, "{datetime}", datetime);
 	utils_string_replace_all(text, "{version}", template_prefs.version);
 	utils_string_replace_all(text, "{initial}", template_prefs.initials);
 	utils_string_replace_all(text, "{developer}", template_prefs.developer);
@@ -675,3 +674,52 @@
 	utils_string_replace_all(text, "{geanyversion}", "Geany " VERSION);
 }
 
+
+/* Replaces all static template wildcards (version, mail, company, name, ...)
+ * plus those wildcard, value pairs which are passed, e.g.
+ *
+ * templates_replace_valist(text, "{some_wildcard}", "some value",
+ *      "{another_wildcard}", "another value", NULL);
+ *
+ * The argument list must be terminated with NULL. */
+void templates_replace_valist(GString *text, const gchar *first_wildcard, ...)
+{
+	va_list args;
+	const gchar *key, *value;
+
+	g_return_if_fail(text != NULL);
+
+	va_start(args, first_wildcard);
+
+	key = first_wildcard;
+	value = va_arg(args, gchar*);
+
+	while (key != NULL)
+	{
+		utils_string_replace_all(text, key, value);
+
+		key = va_arg(args, gchar*);
+		if (text == NULL)
+			break;
+		value = va_arg(args, gchar*);
+	}
+	va_end(args);
+
+	replace_static_values(text);
+}
+
+
+void templates_replace_default_dates(GString *text)
+{
+	gchar *year = utils_get_date_time(template_prefs.year_format, NULL);
+	gchar *date = utils_get_date_time(template_prefs.date_format, NULL);
+	gchar *datetime = utils_get_date_time(template_prefs.datetime_format, NULL);
+
+	templates_replace_valist(text,
+		"{year}", year,
+		"{date}", date,
+		"{datetime}", datetime,
+		NULL);
+
+	utils_free_pointers(3, year, date, datetime, NULL);
+}

Modified: trunk/src/templates.h
===================================================================
--- trunk/src/templates.h	2010-01-12 18:44:38 UTC (rev 4521)
+++ trunk/src/templates.h	2010-01-12 21:10:46 UTC (rev 4522)
@@ -74,9 +74,10 @@
 
 gchar *templates_get_template_licence(gint filetype_idx, gint licence_type);
 
-void templates_replace_all(GString *source, const gchar *year, const gchar *date,
-						   const gchar *datetime);
+void templates_replace_default_dates(GString *text);
 
+void templates_replace_valist(GString *text, const gchar *first_wildcard, ...) G_GNUC_NULL_TERMINATED;
+
 void templates_free_templates(void);
 
 #endif


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Commits mailing list