2006-07-07 [colin] 2.3.1cvs70
authorColin Leroy <colin@colino.net>
Fri, 7 Jul 2006 18:03:21 +0000 (18:03 +0000)
committerColin Leroy <colin@colino.net>
Fri, 7 Jul 2006 18:03:21 +0000 (18:03 +0000)
* po/POTFILES.in
* src/quote_fmt.c
* src/quote_fmt_lex.l
* src/quote_fmt_parse.y
Add |i{var}, a way to insert user-entered
text in a template

ChangeLog
PATCHSETS
configure.ac
po/POTFILES.in
src/quote_fmt.c
src/quote_fmt_lex.l
src/quote_fmt_parse.y

index f202a3c..a5d8610 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2006-07-07 [colin]     2.3.1cvs70
+
+       * po/POTFILES.in
+       * src/quote_fmt.c
+       * src/quote_fmt_lex.l
+       * src/quote_fmt_parse.y
+               Add |i{var}, a way to insert user-entered
+               text in a template
+
 2006-07-07 [colin]
 
        * 2.4.0-rc3 released
index e99112e..2d78eb0 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.12.2.35 -r 1.12.2.36 src/action.c;  cvs diff -u -r 1.83.2.75 -r 1.83.2.76 src/mimeview.c;  cvs diff -u -r 1.20.2.10 -r 1.20.2.11 src/mimeview.h;  cvs diff -u -r 1.96.2.123 -r 1.96.2.124 src/textview.c;  cvs diff -u -r 1.36.2.71 -r 1.36.2.72 src/common/utils.c;  ) > 2.3.1cvs67.patchset
 ( cvs diff -u -r 1.96.2.124 -r 1.96.2.125 src/textview.c;  ) > 2.3.1cvs68.patchset
 ( cvs diff -u -r 1.213.2.104 -r 1.213.2.105 src/folder.c;  ) > 2.3.1cvs69.patchset
+( cvs diff -u -r 1.53.2.18 -r 1.53.2.19 po/POTFILES.in;  cvs diff -u -r 1.8.2.7 -r 1.8.2.8 src/quote_fmt.c;  cvs diff -u -r 1.8.2.4 -r 1.8.2.5 src/quote_fmt_lex.l;  cvs diff -u -r 1.22.2.21 -r 1.22.2.22 src/quote_fmt_parse.y;  ) > 2.3.1cvs70.patchset
index bd386d8..98db165 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=3
 MICRO_VERSION=1
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=69
+EXTRA_VERSION=70
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index b3915c1..9730dd5 100644 (file)
@@ -121,6 +121,7 @@ src/privacy.c
 src/procmime.c
 src/procmsg.c
 src/quote_fmt.c
+src/quote_fmt_parse.y
 src/send_message.c
 src/setup.c
 src/sourcewindow.c
index 881f7be..3b58e83 100644 (file)
@@ -69,10 +69,11 @@ static gchar *quote_desc_strings[] = {
        "!x{expr}\n",   N_("insert expr if x is not set\n(where x is one of the dfNFLIstcnri characters)"),
        "|f{sub_expr}\n",       N_("insert file:\nsub_expr is evaluated as a filename to insert"), /* insert file */
        "|p{sub_expr}\n\n",     N_("insert program output:\nsub_expr is evaluated as a command-line to get\nthe output from"), /* insert program output */
+       "|i{sub_expr}\n\n",     N_("insert user input:\nsub_expr is a variable to be replaced by\nuser-entered text"), /* insert user input */
        "",             NULL,
        "terms definition:",    NULL,
        "expr",                 "text that can contain any of the symbols above",
-       "sub_expr\n",   "text that can contain any of the symbols above\nbut ?x{}, !x{}, |f{} and |p{}",
+       "sub_expr\n",   "text that can contain any of the symbols above\nbut ?x{}, !x{}, |f{}, |p{} and |i{}",
        NULL,NULL
 };
 
index 320ac10..cabf1f9 100644 (file)
@@ -87,6 +87,7 @@ int quote_fmt_firsttime = 1;
 "?r" /* query references */ return QUERY_REFERENCES;
 "|f" /* insert file */ return INSERT_FILE;
 "|p" /* insert program output */ return INSERT_PROGRAMOUTPUT;
+"|i" /* insert user input */ return INSERT_USERINPUT;
 "!d" /* query date */ return QUERY_NOT_DATE;
 "!f" /* query from */ return QUERY_NOT_FROM;
 "!N"|"!F"|"!L"|"!I" /* query not(from name) */ return QUERY_NOT_FULLNAME;
index ab0427e..5d46814 100644 (file)
@@ -22,6 +22,8 @@
 #include "defs.h"
 
 #include <glib.h>
+#include <glib/gi18n.h>
+
 #include <ctype.h>
 
 #include "procmsg.h"
@@ -29,6 +31,7 @@
 #include "utils.h"
 #include "codeconv.h"
 #include "procheader.h"
+#include "gtk/inputdialog.h"
 
 #include "quote_fmt.h"
 #include "quote_fmt_lex.h"
@@ -46,6 +49,7 @@ static gboolean *visible = NULL;
 static gboolean dry_run = FALSE;
 static gint maxsize = 0;
 static gint stacksize = 0;
+static GHashTable *var_table = NULL;
 
 typedef struct st_buffer
 {
@@ -156,6 +160,12 @@ void quote_fmt_init(MsgInfo *info, const gchar *my_quote_str,
        current = &main_expr;
        clear_buffer();
        error = 0;
+       if (var_table) {
+               g_hash_table_destroy(var_table);
+               var_table = NULL;
+       }
+       var_table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
+
         /*
          * force LEX initialization
          */
@@ -429,6 +439,32 @@ static void quote_fmt_insert_program_output(const gchar *progname)
        }
 }
 
+static void quote_fmt_insert_user_input(const gchar *varname)
+{
+       gchar *buf = NULL;
+       gchar *text = NULL;
+       
+       if (dry_run) 
+               return;
+
+       if ((text = g_hash_table_lookup(var_table, varname)) == NULL) {
+               buf = g_strdup_printf(_("Enter text to replace '%s'"), varname);
+               text = input_dialog(_("Enter variable"), buf, "");
+               g_free(buf);
+               if (!text)
+                       return;
+               g_hash_table_insert(var_table, g_strdup(varname), g_strdup(text));
+       } else {
+               /* don't free the one in hashtable at the end */
+               text = g_strdup(text);
+       }
+
+       if (!text)
+               return;
+       INSERT(text);
+       g_free(text);
+}
+
 %}
 
 %union {
@@ -449,7 +485,7 @@ static void quote_fmt_insert_program_output(const gchar *progname)
 %token QUERY_NOT_DATE QUERY_NOT_FROM
 %token QUERY_NOT_FULLNAME QUERY_NOT_SUBJECT QUERY_NOT_TO QUERY_NOT_NEWSGROUPS
 %token QUERY_NOT_MESSAGEID QUERY_NOT_CC QUERY_NOT_REFERENCES
-%token INSERT_FILE INSERT_PROGRAMOUTPUT
+%token INSERT_FILE INSERT_PROGRAMOUTPUT INSERT_USERINPUT
 %token OPARENT CPARENT
 %token CHARACTER
 %token SHOW_DATE_EXPR
@@ -822,4 +858,16 @@ insert:
                if (!dry_run) {
                        quote_fmt_insert_program_output(sub_expr.buffer);
                }
+       }
+       | INSERT_USERINPUT
+       {
+               current = &sub_expr;
+               clear_buffer();
+       }
+       OPARENT sub_expr CPARENT
+       {
+               current = &main_expr;
+               if (!dry_run) {
+                       quote_fmt_insert_user_input(sub_expr.buffer);
+               }
        };