Use LF line endings for templates internally instead of default

pref because the default can change. This fixes missing line
endings sometimes when changing default setting.



git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@5390 ea778897-0a13-0410-b9d1-a72fbfd435f5
This commit is contained in:
Nick Treleaven 2010-11-10 13:13:28 +00:00
parent cf6d15239e
commit 9aa94483b6
3 changed files with 33 additions and 16 deletions

View File

@ -1,3 +1,11 @@
2010-11-10 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
* src/templates.c, src/document.c:
Use LF line endings for templates internally instead of default
pref because the default can change. This fixes missing line
endings sometimes when changing default setting.
2010-11-09 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
* src/templates.c, src/filetypes.c:

View File

@ -719,6 +719,7 @@ GeanyDocument *document_new_file_if_non_open(void)
/**
* Creates a new document.
* Line endings in @a text will be converted to the default setting.
* Afterwards, the @c "document-new" signal is emitted for plugins.
*
* @param utf8_filename The file name in UTF-8 encoding, or @c NULL to open a file as "untitled".

View File

@ -69,8 +69,22 @@ static void templates_replace_command(GString *text, const gchar *file_name,
g_strconcat(app->configdir, \
G_DIR_SEPARATOR_S GEANY_TEMPLATES_SUBDIR G_DIR_SEPARATOR_S, shortname, NULL)
#define TEMPLATES_READ_FILE(fname, contents_ptr) \
g_file_get_contents(fname, contents_ptr, NULL, NULL);
static gchar *read_file(const gchar *locale_fname)
{
gchar *contents;
GString *str;
if (!g_file_get_contents(locale_fname, &contents, NULL, NULL))
return NULL;
str = g_string_new(contents);
g_free(contents);
/* convert to LF endings for consistency in mixing templates */
utils_ensure_same_eol_characters(str, SC_EOL_LF);
return g_string_free(str, FALSE);
}
static void read_template(const gchar *name, gint id)
@ -82,17 +96,7 @@ static void read_template(const gchar *name, gint id)
setptr(fname, g_strconcat(app->datadir,
G_DIR_SEPARATOR_S GEANY_TEMPLATES_SUBDIR G_DIR_SEPARATOR_S, name, NULL));
TEMPLATES_READ_FILE(fname, &templates[id]);
{
GString *tmp = g_string_new(templates[id]);
/* Convert to default line endings e.g. for file header use in a file template.
* When inserting separately we replace line endings with the document setting. */
utils_ensure_same_eol_characters(tmp, file_prefs.default_eol_character);
setptr(templates[id], tmp->str);
g_string_free(tmp, FALSE);
}
templates[id] = read_file(fname);
g_free(fname);
}
@ -118,6 +122,7 @@ static gchar *replace_all(gchar *text, const gchar *year, const gchar *date, con
}
/* called when inserting templates into an existing document */
static void convert_eol_characters(GString *template, GeanyDocument *doc)
{
gint doc_eol_mode;
@ -160,7 +165,7 @@ static void init_ft_templates(const gchar *year, const gchar *date, const gchar
gchar *shortname = g_strconcat("filetype.", ext, NULL);
gchar *fname = TEMPLATES_GET_FILENAME(shortname);
TEMPLATES_READ_FILE(fname, &ft_templates[ft_id]);
ft_templates[ft_id] = read_file(fname);
ft_templates[ft_id] = replace_all(ft_templates[ft_id], year, date, datetime);
g_free(fname);
@ -253,14 +258,13 @@ static gchar *get_template_from_file(const gchar *locale_fname, const gchar *doc
gchar *content;
GString *template = NULL;
g_file_get_contents(locale_fname, &content, NULL, NULL);
content = read_file(locale_fname);
if (content != NULL)
{
gchar *file_header;
template = g_string_new(content);
utils_ensure_same_eol_characters(template, file_prefs.default_eol_character);
file_header = get_template_fileheader(ft);
templates_replace_valist(template,
@ -301,7 +305,10 @@ on_new_with_file_template(GtkMenuItem *menuitem, G_GNUC_UNUSED gpointer user_dat
template = get_template_from_file(path, new_filename, ft);
}
if (template)
{
/* line endings will be converted */
document_new_file(new_filename, ft, template);
}
else
{
setptr(fname, utils_get_utf8_from_locale(fname));
@ -577,6 +584,7 @@ gchar *templates_get_template_fileheader(gint filetype_idx, const gchar *fname)
}
/* old filetype templates - use file templates instead */
gchar *templates_get_template_new_file(GeanyFiletype *ft)
{
GString *ft_template;