bugfix of the config file parser
authorHoà Viêt Dinh <dinh.viet.hoa@free.fr>
Mon, 9 Jul 2001 16:06:03 +0000 (16:06 +0000)
committerHoà Viêt Dinh <dinh.viet.hoa@free.fr>
Mon, 9 Jul 2001 16:06:03 +0000 (16:06 +0000)
ChangeLog.claws
src/filtering.c
src/mainwindow.c
src/matcher.c
src/matcher_parser_lex.l
src/matcher_parser_parse.y
src/prefs_filtering.c
src/prefs_scoring.c
src/scoring.c

index c321ef5..76cf17f 100644 (file)
@@ -1,3 +1,15 @@
+2001-07-08 [hoa]
+
+       * src/filtering.c
+       * src/mainwindow.c
+       * src/matcher.c
+       * src/matcher_parser_lex.l
+       * src/matcher_parser_parse.y
+       * src/prefs_filtering.c
+       * src/prefs_scoring.c
+       * src/scoring.c
+               bugfix of the config file parser
+
 2001-07-08 [alfons]
 
        * src/Makefile.am
@@ -9,12 +21,9 @@
        * src/.cvsignore
                added new config file parser
 
-       * src/scoring.c
-       * src/scoring.h
-       * src/filtering.c
-       * src/filtering.h
-       * src/matcher.c
-       * src/matcher.h
+       * src/scoring.[ch]
+       * src/filtering.[ch]
+       * src/matcher.[ch]
        * src/prefs_filtering.c
        * src/prefs_matcher.c
        * src/prefs_scoring.c
index 056c487..6b19d88 100644 (file)
@@ -647,9 +647,9 @@ void prefs_filtering_read_config(void)
        }
 
        matcher_parserlineno = 1;
-       matcher_parserin = fp;
+
+       matcher_parserrestart(fp);
        if (matcher_parserparse() != 0) {
-               printf("%s\n", rcpath);
                prefs_filtering_clear();
        }
        g_free(rcpath);
index daf3538..1d48030 100644 (file)
@@ -1695,11 +1695,11 @@ static void main_window_toolbar_create(MainWindow *mainwin,
                mainwin);
 
        gtk_signal_connect(GTK_OBJECT(compose_mail_btn), "clicked",
-               GTK_SIGNAL_FUNC(toolbar_compose_cb),
+               GTK_SIGNAL_FUNC(toolbar_compose_mail_cb),
                mainwin);
 
        gtk_signal_connect(GTK_OBJECT(compose_news_btn), "clicked",
-               GTK_SIGNAL_FUNC(toolbar_compose_cb),
+               GTK_SIGNAL_FUNC(toolbar_compose_news_cb),
                mainwin);
 
        mainwin->toolbar         = toolbar;
index b72ba74..5fea39c 100644 (file)
@@ -1178,7 +1178,7 @@ gchar * matcherprop_to_string(MatcherProp * matcher)
 
        count = 0;
        for(p = matcher->expr; *p != 0 ; p++)
-               if (*p == '\"') count ++;
+               if ((*p == '\"') || (*p == '\\')) count ++;
        
        expr_str = g_new(char, strlen(matcher->expr) + count + 1);
        
@@ -1187,7 +1187,7 @@ gchar * matcherprop_to_string(MatcherProp * matcher)
                case '\"':
                case '\\':
                        *out = '\\'; out++;
-                       *out = '\"';
+                       *out = *p;
                        break;
                default:
                        *out = *p;
index f3b7a55..f869273 100644 (file)
@@ -101,7 +101,9 @@ static void add_char(char ch)
                yylval.str = string_buf;
                return MATCHER_STRING;
                }
-<string>.      add_char(yytext[0]);
+<string>.      {
+add_char(yytext[0]);
+}
 \[[^\[\]]*\]   {
                        BEGIN(0);
                        yylval.str = yytext + 1;
index 5031a8c..c8c4db5 100644 (file)
@@ -28,41 +28,42 @@ static GSList ** prefs_filtering = NULL;
 
 static int matcher_parser_dialog = 0;
 
-/*
-void matcher_parser_init()
-{
-       prefs_filtering_clear();
-       prefs_scoring_clear();
-}
-*/
-
 FilteringProp * matcher_parser_get_filtering(gchar * str)
 {
+       void * bufstate;
+
        matcher_parserlineno = 1;
        matcher_parser_dialog = 1;
-       matcher_parser_scan_string(str);
+       bufstate = matcher_parser_scan_string(str);
        matcher_parserparse();
        matcher_parser_dialog = 0;
+       matcher_parser_delete_buffer(bufstate);
        return filtering;
 }
 
 ScoringProp * matcher_parser_get_scoring(gchar * str)
 {
+       void * bufstate;
+
        matcher_parserlineno = 1;
        matcher_parser_dialog = 1;
-       matcher_parser_scan_string(str);
+       bufstate = matcher_parser_scan_string(str);
        matcher_parserparse();
        matcher_parser_dialog = 0;
+       matcher_parser_delete_buffer(bufstate);
        return scoring;
 }
 
 MatcherList * matcher_parser_get_cond(gchar * str)
 {
+       void * bufstate;
+
        matcher_parserlineno = 1;
        matcher_parser_dialog = 1;
-       matcher_parser_scan_string(str);
+       bufstate = matcher_parser_scan_string(str);
        matcher_parserparse();
        matcher_parser_dialog = 0;
+       matcher_parser_delete_buffer(bufstate);
        return cond;
 }
 
@@ -71,8 +72,6 @@ MatcherProp * matcher_parser_get_prop(gchar * str)
        MatcherList * list;
        MatcherProp * prop;
 
-       printf("get matcher\n");
-
        matcher_parserlineno = 1;
        list = matcher_parser_get_cond(str);
        if (list == NULL)
@@ -88,8 +87,6 @@ MatcherProp * matcher_parser_get_prop(gchar * str)
 
        g_slist_free(list->matchers);
        g_free(list);
-
-       printf("prop: %p\n", prop);
 }
 
 void matcher_parsererror(char * str)
@@ -190,15 +187,19 @@ MATCHER_SECTION MATCHER_EOL
 ;
 
 instruction:
-condition filtering_or_scoring MATCHER_EOL
-| condition
+condition end_instr_opt
+| MATCHER_EOL
+;
+
+end_instr_opt:
+filtering_or_scoring MATCHER_EOL
+|
 {
        if (!matcher_parser_dialog) {
                yyerror("parse error");
                return 1;
        }
 }
-| MATCHER_EOL
 ;
 
 filtering_or_scoring:
index 8a7faae..911a195 100644 (file)
@@ -573,7 +573,6 @@ static void prefs_filtering_set_list(void)
        FilteringProp *prop;
        GSList * cur;
        gchar * filtering_str;
-       gchar * tmp;
 
        for(cur = global_filtering ; cur != NULL ; cur = g_slist_next(cur))
                filteringprop_free((FilteringProp *) cur->data);
@@ -663,7 +662,6 @@ static FilteringProp * prefs_filtering_dialog_to_filtering(void)
        gchar * cond_str;
        FilteringProp * prop;
        FilteringAction * action;
-       gchar * tmp;
        gint list_id;
        gint action_id;
        gint action_type;
@@ -873,7 +871,6 @@ static void prefs_filtering_select(GtkCList *clist, gint row, gint column,
                                GdkEvent *event)
 {
        FilteringProp * prop;
-       gchar * tmp;
        gchar * filtering_str;
 
        if (row == 0) {
index 31cee3b..1c3102c 100644 (file)
@@ -441,7 +441,6 @@ static void prefs_scoring_set_list(void)
        ScoringProp *prop;
        GSList * cur;
        gchar * scoring_str;
-       gchar * tmp;
        GSList * prefs_scoring;
 
        if (cur_item == NULL)
@@ -591,7 +590,6 @@ static void prefs_scoring_substitute_cb(void)
        gchar * score_str;
        ScoringProp * prop;
        gint score;
-       gchar * tmp;
 
        if (!clist->selection) return;
 
@@ -696,7 +694,6 @@ static void prefs_scoring_select(GtkCList *clist, gint row, gint column,
                                GdkEvent *event)
 {
        ScoringProp * prop;
-       gchar * tmp;
 
        gchar * scoring_str;
 
index 9667df8..2f3ed24 100644 (file)
@@ -301,9 +301,8 @@ void prefs_scoring_read_config(void)
        }
 
        matcher_parserlineno = 1;
-       matcher_parserin = fp;
+       matcher_parserrestart(fp);
        if (matcher_parserparse() != 0) {
-               printf("%s\n", rcpath);
                prefs_scoring_clear();
        }
        g_free(rcpath);