From: Hoà Viêt Dinh Date: Mon, 9 Jul 2001 16:06:03 +0000 (+0000) Subject: bugfix of the config file parser X-Git-Tag: VERSION_0_5_0~10 X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=commitdiff_plain;h=11dd56825143bd34e795b51f2818a62e222d6111 bugfix of the config file parser --- diff --git a/ChangeLog.claws b/ChangeLog.claws index c321ef520..76cf17f3d 100644 --- a/ChangeLog.claws +++ b/ChangeLog.claws @@ -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 diff --git a/src/filtering.c b/src/filtering.c index 056c48774..6b19d8829 100644 --- a/src/filtering.c +++ b/src/filtering.c @@ -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); diff --git a/src/mainwindow.c b/src/mainwindow.c index daf353846..1d48030db 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -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; diff --git a/src/matcher.c b/src/matcher.c index b72ba743e..5fea39c53 100644 --- a/src/matcher.c +++ b/src/matcher.c @@ -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; diff --git a/src/matcher_parser_lex.l b/src/matcher_parser_lex.l index f3b7a559c..f869273f7 100644 --- a/src/matcher_parser_lex.l +++ b/src/matcher_parser_lex.l @@ -101,7 +101,9 @@ static void add_char(char ch) yylval.str = string_buf; return MATCHER_STRING; } -. add_char(yytext[0]); +. { +add_char(yytext[0]); +} \[[^\[\]]*\] { BEGIN(0); yylval.str = yytext + 1; diff --git a/src/matcher_parser_parse.y b/src/matcher_parser_parse.y index 5031a8ca3..c8c4db585 100644 --- a/src/matcher_parser_parse.y +++ b/src/matcher_parser_parse.y @@ -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: diff --git a/src/prefs_filtering.c b/src/prefs_filtering.c index 8a7faae80..911a195be 100644 --- a/src/prefs_filtering.c +++ b/src/prefs_filtering.c @@ -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) { diff --git a/src/prefs_scoring.c b/src/prefs_scoring.c index 31cee3bea..1c3102c85 100644 --- a/src/prefs_scoring.c +++ b/src/prefs_scoring.c @@ -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; diff --git a/src/scoring.c b/src/scoring.c index 9667df8a7..2f3ed24ac 100644 --- a/src/scoring.c +++ b/src/scoring.c @@ -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);