+static regex_t *summary_compile_simplify_regexp(gchar *simplify_subject_regexp)
+{
+ int err;
+ gchar buf[BUFFSIZE];
+ regex_t *preg = NULL;
+
+ preg = g_new0(regex_t, 1);
+
+ err = string_match_precompile(simplify_subject_regexp,
+ preg, REG_EXTENDED);
+ if (err) {
+ regerror(err, preg, buf, BUFFSIZE);
+ g_free(preg);
+ preg = NULL;
+ }
+
+ return preg;
+}
+
+static void folder_regexp_test_cb(GtkWidget *widget, gpointer data)
+{
+ static GdkColor red;
+ static gboolean colors_initialised = FALSE;
+ static gchar buf[BUFFSIZE];
+ FolderItemGeneralPage *page = (FolderItemGeneralPage *)data;
+ gchar *test_string, *regexp;
+ regex_t *preg;
+
+ regexp = g_strdup(gtk_entry_get_text(GTK_ENTRY(page->entry_simplify_subject)));
+ test_string = g_strdup(gtk_entry_get_text(GTK_ENTRY(page->entry_regexp_test_string)));
+
+ if (!regexp || !regexp[0]) {
+ if (test_string) {
+ gtk_entry_set_text(GTK_ENTRY(page->entry_regexp_test_result), test_string);
+ g_free(test_string);
+ }
+ return;
+ }
+
+ if (!test_string || !test_string[0]) {
+ g_free(regexp);
+ return;
+ }
+
+ if (!colors_initialised) {
+ gdk_color_parse("#ff7070", &red);
+ colors_initialised = gdk_colormap_alloc_color(
+ gdk_colormap_get_system(), &red, FALSE, TRUE);
+ }
+
+ preg = summary_compile_simplify_regexp(regexp);
+ if (colors_initialised) {
+ gtk_widget_modify_base(page->entry_simplify_subject,
+ GTK_STATE_NORMAL, preg ? NULL : &red);
+ }
+
+ if (preg != NULL) {
+ string_remove_match(buf, BUFFSIZE, test_string, preg);
+
+ gtk_entry_set_text(GTK_ENTRY(page->entry_regexp_test_result), buf);
+
+ regfree(preg);
+ g_free(preg);
+ }
+
+ g_free(test_string);
+ g_free(regexp);
+}
+
+static gchar *folder_regexp_get_subject_example(void)
+{
+ MsgInfo *msginfo_selected;
+ SummaryView *summaryview = NULL;
+
+ if (!mainwindow_get_mainwindow())
+ return NULL;
+ summaryview = mainwindow_get_mainwindow()->summaryview;
+
+ msginfo_selected = summary_get_selected_msg(summaryview);
+ return msginfo_selected ? g_strdup(msginfo_selected->subject) : NULL;
+}
+
+static void folder_regexp_set_subject_example_cb(GtkWidget *widget, gpointer data)
+{
+ FolderItemGeneralPage *page = (FolderItemGeneralPage *)data;
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->checkbtn_simplify_subject))) {
+ gchar *subject = folder_regexp_get_subject_example();
+ if (subject) {
+ gtk_entry_set_text(GTK_ENTRY(page->entry_regexp_test_string), subject);
+ g_free(subject);
+ }
+ }
+}