static gint maxsize = 0;
static gint stacksize = 0;
static GHashTable *var_table = NULL;
+static GList *attachments = NULL;
typedef struct st_buffer
{
return current->buffer;
}
+GList *quote_fmt_get_attachments_list(void)
+{
+ return attachments;
+}
+
gint quote_fmt_get_line(void)
{
return line;
g_hash_table_destroy(var_table);
var_table = NULL;
}
+ if (attachments) {
+ GList *cur = attachments;
+ while (cur) {
+ g_free(cur->data);
+ cur = g_list_next(cur);
+ }
+ g_list_free(attachments);
+ attachments = NULL;
+ }
}
#ifdef USE_ASPELL
g_free(text);
}
+static void quote_fmt_attach_file(const gchar *filename)
+{
+ attachments = g_list_append(attachments, g_strdup(filename));
+}
+
static gchar *quote_fmt_complete_address(const gchar *addr)
{
gint count;
%token QUERY_NOT_TO_FOUND_IN_ADDRESSBOOK
/* other tokens */
%token INSERT_FILE INSERT_PROGRAMOUTPUT INSERT_USERINPUT
+%token ATTACH_FILE
%token OPARENT CPARENT
%token CHARACTER
%token SHOW_DATE_EXPR
character_or_special
| query
| query_not
- | insert ;
+ | insert
+ | attach ;
character_or_special:
special
}
| string CHARACTER
{
- int len;
+ size_t len;
strncpy($$, $1, sizeof($$));
$$[sizeof($$) - 1] = '\0';
}
| SET_CURSOR_POS
{
- cursor_pos = current->bufsize;
+ if (current->buffer)
+ cursor_pos = g_utf8_strlen(current->buffer, -1);
+ else
+ cursor_pos = 0;
}
| SHOW_ADDRESSBOOK_COMPLETION_FOR_CC
{
quote_fmt_insert_user_input(sub_expr.buffer);
}
};
+
+attach:
+ ATTACH_FILE
+ {
+ current = &sub_expr;
+ clear_buffer();
+ }
+ OPARENT sub_expr CPARENT
+ {
+ current = &main_expr;
+ if (!dry_run) {
+ quote_fmt_attach_file(sub_expr.buffer);
+ }
+ };