diff --git a/src/modal.c b/src/modal.c index 226e61b..41bcb1d 100644 --- a/src/modal.c +++ b/src/modal.c @@ -225,9 +225,13 @@ parse_frag(char **side, char *s) { char c, *cap; while((c = *s) && c == ' ') s++; - if(c == ')' || c == '<' || c == '>' || (c == '(' && s[1] == ')')) + if(c == ')') { *side = NULL; - else { + return s; + } else if((c == '<' && s[1] == '>') || (c == '>' && s[1] == '<') || (c == '(' && s[1] == ')')) { + *side = NULL; + return s + 2; + } else { cap = walk(s), *side = dict_; if(c == '(') dict_ = copy(s + 1, dict_, cap - s - 2); @@ -267,7 +271,7 @@ rewrite(void) while(*s == ' ') s++; cap = walk(s), r = find_rule(s, cap); if(r != NULL) { - if(!quiet) fprintf(stderr, ">< (%s) (%s)\n", r->a, r->b); + if(!quiet) fprintf(stderr, ">< (%s) (%s)\n", r->a ? r->a : "", r->b ? r->b : ""); r->a = 0; } while(*cap == ' ') cap++; @@ -278,7 +282,7 @@ rewrite(void) r = rules_, r->id = rules_ - rules; s = parse_frag(&r->b, parse_frag(&r->a, s + 2)); if(r->a != NULL) { - if(!quiet) fprintf(stderr, "<> (%s) (%s)\n", r->a, r->b); + if(!quiet) fprintf(stderr, "<> (%s) (%s)\n", r->a ? r->a : "", r->b ? r->b : ""); rules_++; } while(*s == ' ') s++;