From 0441b4f4454e1e8fa3005d8b12b9731e24099509 Mon Sep 17 00:00:00 2001 From: Kristaps Dzonsons Date: Mon, 27 Jul 2009 12:02:49 +0000 Subject: Correct handling of \*(xx, \*[xxx], \*x versus \x, \(xx, \([xxx]: predefined strings and escape characters, respectively. --- term.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) (limited to 'term.c') diff --git a/term.c b/term.c index 89a4a34f..fa9d8d68 100644 --- a/term.c +++ b/term.c @@ -1,4 +1,4 @@ -/* $Id: term.c,v 1.93 2009/07/24 11:54:25 kristaps Exp $ */ +/* $Id: term.c,v 1.94 2009/07/27 12:02:49 kristaps Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -34,6 +34,8 @@ static void term_free(struct termp *); static void term_pescape(struct termp *, const char **); static void term_nescape(struct termp *, const char *, size_t); +static void term_sescape(struct termp *, + const char *, size_t); static void term_chara(struct termp *, char); static void term_encodea(struct termp *, char); static int term_isopendelim(const char *); @@ -399,9 +401,26 @@ term_nescape(struct termp *p, const char *word, size_t len) rhs = term_a2ascii(p->symtab, word, len, &sz); - if (rhs) - for (i = 0; i < (int)sz; i++) - term_encodea(p, rhs[i]); + if (NULL == rhs) + return; + for (i = 0; i < (int)sz; i++) + term_encodea(p, rhs[i]); +} + + +static void +term_sescape(struct termp *p, const char *word, size_t len) +{ + const char *rhs; + size_t sz; + int i; + + rhs = term_a2res(p->symtab, word, len, &sz); + + if (NULL == rhs) + return; + for (i = 0; i < (int)sz; i++) + term_encodea(p, rhs[i]); } @@ -448,13 +467,13 @@ term_pescape(struct termp *p, const char **word) return; } - term_nescape(p, wp, 2); + term_sescape(p, wp, 2); *word = ++wp; return; case ('['): break; default: - term_nescape(p, wp, 1); + term_sescape(p, wp, 1); *word = wp; return; } -- cgit v1.2.3