summaryrefslogtreecommitdiffstats
path: root/term.c
diff options
context:
space:
mode:
Diffstat (limited to 'term.c')
-rw-r--r--term.c29
1 files changed, 24 insertions, 5 deletions
diff --git a/term.c b/term.c
index 028d4f2a..68bc7823 100644
--- a/term.c
+++ b/term.c
@@ -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;
}