Revision: 4843 http://geany.svn.sourceforge.net/geany/?rev=4843&view=rev Author: ntrel Date: 2010-04-21 16:47:54 +0000 (Wed, 21 Apr 2010)
Log Message: ----------- Support {ob} and {cb} in fileheader and file templates; they are replaced last with { and }. This allows 'escaping' of wildcard strings (fixes #2937008).
Modified Paths: -------------- trunk/doc/geany.html trunk/doc/geany.txt trunk/src/templates.c
Modified: trunk/doc/geany.html =================================================================== --- trunk/doc/geany.html 2010-04-19 21:20:15 UTC (rev 4842) +++ trunk/doc/geany.html 2010-04-21 16:47:54 UTC (rev 4843) @@ -6,7 +6,7 @@ <meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" /> <title>Geany</title> <meta name="authors" content="Enrico Tröger Nick Treleaven Frank Lanitz" /> -<meta name="date" content="2010-04-17" /> +<meta name="date" content="2010-04-19" /> <style type="text/css">
/* @@ -139,7 +139,7 @@ <br />Nick Treleaven <br />Frank Lanitz</td></tr> <tr><th class="docinfo-name">Date:</th> -<td>2010-04-17</td></tr> +<td>2010-04-19</td></tr> <tr><th class="docinfo-name">Version:</th> <td>0.19</td></tr> </tbody> @@ -435,7 +435,7 @@ </li> <li><a class="reference" href="#customizing-templates" id="id200" name="id200">Customizing templates</a><ul> <li><a class="reference" href="#template-wildcards" id="id201" name="id201">Template wildcards</a><ul> -<li><a class="reference" href="#special-command-wilcard" id="id202" name="id202">Special {command:} wilcard</a></li> +<li><a class="reference" href="#special-command-wildcard" id="id202" name="id202">Special {command:} wildcard</a></li> </ul> </li> </ul> @@ -4886,6 +4886,15 @@ </tr> </thead> <tbody valign="top"> +<tr><td>ob</td> +<td>Opening Brace (used to prevent other +wildcards being expanded).</td> +<td>file templates, file header</td> +</tr> +<tr><td>cb</td> +<td>Closing Brace.</td> +<td>file templates, file header</td> +</tr> <tr><td>developer</td> <td>The name of the developer.</td> <td>filetype templates, file header, @@ -4912,7 +4921,7 @@ bsd, gpl, snippets</td> </tr> <tr><td>year <a class="footnote-reference" href="#id10" id="id7" name="id7">[1]</a></td> -<td>The current year. Default format is: YYYY</td> +<td>The current year. Default format is: YYYY.</td> <td>filetype templates, file header, function description, ChangeLog entry, bsd, gpl, snippets</td> @@ -4924,7 +4933,8 @@ bsd, gpl, snippets</td> </tr> <tr><td>date <a class="footnote-reference" href="#id10" id="id8" name="id8">[1]</a></td> -<td>The current date. Default format: YYYY-MM-DD.</td> +<td>The current date. Default format: +YYYY-MM-DD.</td> <td>filetype templates, file header, function description, ChangeLog entry, bsd, gpl, snippets</td> @@ -4974,13 +4984,13 @@ <td>The file header template. This wildcard will only be replaced in filetype templates.</td> -<td>file header, snippets, custom filetype +<td>file header, snippets, file templates</td> </tr> <tr><td>command:path</td> <td>Executes the specified command and replace the wildcard with the command's standard -output. See <a class="reference" href="#special-command-wilcard">Special {command:} wilcard</a> +output. See <a class="reference" href="#special-command-wildcard">Special {command:} wildcard</a> for details.</td> <td>filetype templates, file header, function description, ChangeLog entry, @@ -4998,8 +5008,8 @@ </tbody> </table> <div class="section"> -<h5><a class="toc-backref" href="#id202" id="special-command-wilcard" name="special-command-wilcard">Special {command:} wilcard</a></h5> -<p>The {command:} wilcard is a special one because it can execute +<h5><a class="toc-backref" href="#id202" id="special-command-wildcard" name="special-command-wildcard">Special {command:} wildcard</a></h5> +<p>The {command:} wildcard is a special one because it can execute a specified command and put the command's output (stdout) into the template.</p> <p>Example:</p> @@ -5986,7 +5996,7 @@ <div class="footer"> <hr class="footer" /> <a class="reference" href="geany.txt">View document source</a>. -Generated on: 2010-04-19 12:32 UTC. +Generated on: 2010-04-21 16:38 UTC. Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
</div>
Modified: trunk/doc/geany.txt =================================================================== --- trunk/doc/geany.txt 2010-04-19 21:20:15 UTC (rev 4842) +++ trunk/doc/geany.txt 2010-04-21 16:47:54 UTC (rev 4843) @@ -4230,6 +4230,10 @@ ============== ============================================= ======================================= Wildcard Description Available in ============== ============================================= ======================================= +ob Opening Brace (used to prevent other file templates, file header + wildcards being expanded). +cb Closing Brace. file templates, file header + developer The name of the developer. filetype templates, file header, function description, ChangeLog entry, bsd, gpl, snippets @@ -4246,7 +4250,7 @@ function description, ChangeLog entry, bsd, gpl, snippets
-year [1]_ The current year. Default format is: YYYY filetype templates, file header, +year [1]_ The current year. Default format is: YYYY. filetype templates, file header, function description, ChangeLog entry, bsd, gpl, snippets
@@ -4254,8 +4258,8 @@ function description, ChangeLog entry, bsd, gpl, snippets
-date [1]_ The current date. Default format: YYYY-MM-DD. filetype templates, file header, - function description, ChangeLog entry, +date [1]_ The current date. Default format: filetype templates, file header, + YYYY-MM-DD. function description, ChangeLog entry, bsd, gpl, snippets
untitled The string "untitled" (this will be filetype templates, file header, @@ -4281,13 +4285,13 @@ replaced in the function description template.
-fileheader The file header template. This wildcard file header, snippets, custom filetype +fileheader The file header template. This wildcard file header, snippets, file will only be replaced in filetype templates templates.
command:path Executes the specified command and replace filetype templates, file header, the wildcard with the command's standard function description, ChangeLog entry, - output. See `Special {command:} wilcard`_ bsd, gpl, snippets + output. See `Special {command:} wildcard`_ bsd, gpl, snippets for details. ============== ============================================= =======================================
@@ -4298,10 +4302,10 @@ For details please see http://man.cx/strftime.
-Special {command:} wilcard -************************** +Special {command:} wildcard +***************************
-The {command:} wilcard is a special one because it can execute +The {command:} wildcard is a special one because it can execute a specified command and put the command's output (stdout) into the template.
Modified: trunk/src/templates.c =================================================================== --- trunk/src/templates.c 2010-04-19 21:20:15 UTC (rev 4842) +++ trunk/src/templates.c 2010-04-21 16:47:54 UTC (rev 4843) @@ -127,6 +127,7 @@
static void replace_static_values(GString *text); +static gchar *get_template_fileheader(GeanyFiletype *ft);
/* some simple macros to reduce code size and make the code readable */ @@ -284,6 +285,37 @@ }
+static void templates_replace_common(GString *template, const gchar *fname, + GeanyFiletype *ft, const gchar *func_name) +{ + gchar *shortname; + + if (fname == NULL) + { + if (!ft->extension) + shortname = g_strdup(GEANY_STRING_UNTITLED); + else + shortname = g_strconcat(GEANY_STRING_UNTITLED, ".", ft->extension, NULL); + } + else + shortname = g_path_get_basename(fname); + + templates_replace_valist(template, + "{filename}", shortname, + NULL); + g_free(shortname); + + templates_replace_default_dates(template); + templates_replace_command(template, fname, ft->name, func_name); + /* Bug: command results could have {ob} {cb} strings in! */ + /* replace braces last */ + templates_replace_valist(template, + "{ob}", "{", + "{cb}", "}", + NULL); +} + + static gchar *get_template_from_file(const gchar *locale_fname, const gchar *doc_filename, GeanyFiletype *ft) { @@ -298,13 +330,11 @@
template = g_string_new(content);
- file_header = templates_get_template_fileheader(FILETYPE_ID(ft), doc_filename); + file_header = get_template_fileheader(ft); templates_replace_valist(template, - "{filename}", doc_filename, "{fileheader}", file_header, NULL); - templates_replace_default_dates(template); - templates_replace_command(template, doc_filename, ft->name, NULL); + templates_replace_common(template, doc_filename, ft, NULL);
utils_free_pointers(2, file_header, content, NULL); return g_string_free(template, FALSE); @@ -552,43 +582,38 @@ }
-/* TODO change the signature to take a GeanyDocument although this would break plugin API/ABI */ -gchar *templates_get_template_fileheader(gint filetype_idx, const gchar *fname) +static gchar *get_template_fileheader(GeanyFiletype *ft) { GString *template = g_string_new(templates[GEANY_TEMPLATE_FILEHEADER]); - gchar *shortname; gchar *result; - filetype_id ft_id = filetype_idx; - GeanyFiletype *ft = filetypes[ft_id];
- filetypes_load_config(ft_id, FALSE); /* load any user extension setting */ + filetypes_load_config(ft->id, FALSE); /* load any user extension setting */
- if (fname == NULL) - { - if (!ft->extension) - shortname = g_strdup(GEANY_STRING_UNTITLED); - else - shortname = g_strconcat(GEANY_STRING_UNTITLED, ".", ft->extension, NULL); - } - else - shortname = g_path_get_basename(fname); - templates_replace_valist(template, - "{filename}", shortname, "{gpl}", templates[GEANY_TEMPLATE_GPL], "{bsd}", templates[GEANY_TEMPLATE_BSD], NULL); - templates_replace_default_dates(template); - templates_replace_command(template, fname, ft->name, NULL);
- result = make_comment_block(template->str, ft_id, 8); - + /* 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); - g_free(shortname); return result; }
+/* TODO change the signature to take a GeanyDocument? this would break plugin API/ABI */ +gchar *templates_get_template_fileheader(gint filetype_idx, const gchar *fname) +{ + GeanyFiletype *ft = filetypes[filetype_idx]; + gchar *str = get_template_fileheader(ft); + GString *template = g_string_new(str); + + g_free(str); + templates_replace_common(template, fname, ft, NULL); + return g_string_free(template, FALSE); +} + + gchar *templates_get_template_new_file(GeanyFiletype *ft) { GString *ft_template; @@ -604,11 +629,10 @@ } else { /* file template only used for new files */ - file_header = templates_get_template_fileheader(ft->id, NULL); + file_header = get_template_fileheader(ft); templates_replace_valist(ft_template, "{fileheader}", file_header, NULL); } - templates_replace_default_dates(ft_template); - templates_replace_command(ft_template, NULL, ft->name, NULL); + templates_replace_common(ft_template, NULL, ft, NULL);
g_free(file_header); return g_string_free(ft_template, FALSE);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.