Revision: 5112 http://geany.svn.sourceforge.net/geany/?rev=5112&view=rev Author: eht16 Date: 2010-07-31 15:31:30 +0000 (Sat, 31 Jul 2010)
Log Message: ----------- Make make_comment_block() work with a GString. This is not yet perfect but a bit better than before.
Modified Paths: -------------- trunk/ChangeLog trunk/src/templates.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2010-07-31 14:38:46 UTC (rev 5111) +++ trunk/ChangeLog 2010-07-31 15:31:30 UTC (rev 5112) @@ -3,6 +3,9 @@ * src/vte.c: Fix build with GTK 2.8, use the stock icon name directly instead of the macro. Though, the icon is still missing for GTK 2.8. + * src/templates.c: + Make make_comment_block() work with a GString. This is not yet + perfect but a bit better than before.
2010-07-29 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
Modified: trunk/src/templates.c =================================================================== --- trunk/src/templates.c 2010-07-31 14:38:46 UTC (rev 5111) +++ trunk/src/templates.c 2010-07-31 15:31:30 UTC (rev 5112) @@ -430,27 +430,31 @@ * e.g. indent = 8 prints " * here comes the text of the line" * indent is meant to be the whole amount of characters before the real line content follows, i.e. * 6 characters are filled with whitespace when the comment characters include " *" */ -/* TODO make this function operating on a GString */ -static gchar *make_comment_block(const gchar *comment_text, gint filetype_idx, guint indent) +static void make_comment_block(GString *comment_text, gint filetype_idx, guint indent) { gchar *frame_start; /* to add before comment_text */ gchar *frame_end; /* to add after comment_text */ const gchar *line_prefix; /* to add before every line in comment_text */ - gchar *result; gchar *tmp; gchar *prefix; gchar **lines; guint i, len; + gint template_eol_mode; + const gchar *template_eol_char; GeanyFiletype *ft = filetypes_index(filetype_idx);
- g_return_val_if_fail(ft != NULL, NULL); + g_return_if_fail(comment_text != NULL); + g_return_if_fail(ft != NULL);
+ template_eol_mode = utils_get_line_endings(comment_text->str, comment_text->len); + template_eol_char = utils_get_eol_char(template_eol_mode); + if (NZV(ft->comment_open)) { if (NZV(ft->comment_close)) { - frame_start = g_strconcat(ft->comment_open, "\n", NULL); - frame_end = g_strconcat(ft->comment_close, "\n", NULL); + frame_start = g_strconcat(ft->comment_open, template_eol_char, NULL); + frame_end = g_strconcat(ft->comment_close, template_eol_char, NULL); line_prefix = ""; } else @@ -462,8 +466,8 @@ } else { /* use C-like multi-line comments as fallback */ - frame_start = g_strdup("/*\n"); - frame_end = g_strdup("*/\n"); + frame_start = g_strconcat("/*", template_eol_char, NULL); + frame_end = g_strconcat("*/", template_eol_char, NULL); line_prefix = ""; }
@@ -482,7 +486,7 @@ g_free(tmp);
/* add line_prefix to every line of comment_text */ - lines = g_strsplit(comment_text, "\n", -1); + lines = g_strsplit(comment_text->str, template_eol_char, -1); len = g_strv_length(lines) - 1; for (i = 0; i < len; i++) { @@ -490,24 +494,28 @@ lines[i] = g_strconcat(prefix, tmp, NULL); g_free(tmp); } - tmp = g_strjoinv("\n", lines); + tmp = g_strjoinv(template_eol_char, lines);
- /* add frame_start and frame_end */ + /* clear old contents */ + g_string_erase(comment_text, 0, -1); + + /* add frame_end */ if (frame_start != NULL) - result = g_strconcat(frame_start, tmp, frame_end, NULL); - else - result = g_strconcat(tmp, frame_end, NULL); + g_string_append(comment_text, frame_start); + /* add the new main content */ + g_string_append(comment_text, tmp); + /* add frame_start */ + if (frame_end != NULL) + g_string_append(comment_text, frame_end);
utils_free_pointers(4, prefix, tmp, frame_start, frame_end, NULL); g_strfreev(lines); - return result; }
gchar *templates_get_template_licence(GeanyDocument *doc, gint licence_type) { GString *template; - gchar *result = NULL;
g_return_val_if_fail(doc != NULL, NULL); g_return_val_if_fail(licence_type == GEANY_TEMPLATE_GPL || licence_type == GEANY_TEMPLATE_BSD, NULL); @@ -517,18 +525,15 @@ templates_replace_default_dates(template); templates_replace_command(template, DOC_FILENAME(doc), doc->file_type->name, NULL);
- result = make_comment_block(template->str, FILETYPE_ID(doc->file_type), 8); + make_comment_block(template, FILETYPE_ID(doc->file_type), 8);
- g_string_free(template, TRUE); - - return result; + return g_string_free(template, FALSE); }
static gchar *get_template_fileheader(GeanyFiletype *ft) { GString *template = g_string_new(templates[GEANY_TEMPLATE_FILEHEADER]); - gchar *result;
filetypes_load_config(ft->id, FALSE); /* load any user extension setting */
@@ -538,9 +543,8 @@ NULL);
/* we don't replace other wildcards here otherwise they would get done twice for files */ - result = make_comment_block(template->str, ft->id, 8); - g_string_free(template, TRUE); - return result; + make_comment_block(template, ft->id, 8); + return g_string_free(template, FALSE); }
@@ -584,7 +588,6 @@
gchar *templates_get_template_function(GeanyDocument *doc, const gchar *func_name) { - gchar *result; GString *text;
func_name = (func_name != NULL) ? func_name : ""; @@ -594,10 +597,9 @@ templates_replace_default_dates(text); templates_replace_command(text, DOC_FILENAME(doc), doc->file_type->name, func_name);
- result = make_comment_block(text->str, doc->file_type->id, 3); + make_comment_block(text, doc->file_type->id, 3);
- g_string_free(text, TRUE); - return result; + return g_string_free(text, FALSE); }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.