diff --git a/src/modal.c b/src/modal.c index 6d962e7..62b1191 100644 --- a/src/modal.c +++ b/src/modal.c @@ -167,12 +167,11 @@ compile_rule(Rule *r, int id, char *src) /* left ==================================== */ - r->a = dict_; + r->a = r->b = dict_; s2 = src; while((c = *s2) && c == ' ') s2++; if(c == ')' || (c == '<' && s2[1] == '>')) { - r->b = dict_; *dict_++ = 0; return s2; } @@ -210,21 +209,19 @@ compile_rule(Rule *r, int id, char *src) wrapped = c == '('; if(wrapped) s2++, cap--; while(s2 < cap) { - *dict_++ = *s2++; + if(*s2 == '?') { + *dict_++ = *s2++; + reg = find_register(r, *s2); + *dict_++ = reg >= 0 ? ('0' + reg) : *s2; + s2++; + } else + *dict_++ = *s2++; } s2 += wrapped; *dict_++ = 0; src = s2; - s2 = r->b; - while((c = *s2++)) { /* right */ - if(c == '?') { - reg = find_register(r, *s2); - if(reg >= 0) - *s2 = '0' + reg; - } - } return src; }