=================================================================== RCS file: /cvs/mandoc/term.c,v retrieving revision 1.92 retrieving revision 1.94 diff -u -p -r1.92 -r1.94 --- mandoc/term.c 2009/07/23 08:35:22 1.92 +++ mandoc/term.c 2009/07/27 12:02:49 1.94 @@ -1,4 +1,4 @@ -/* $Id: term.c,v 1.92 2009/07/23 08:35:22 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 *); @@ -259,7 +261,7 @@ term_flushln(struct termp *p) /* LINTED */ for (j = i, vsz = 0; j < (int)p->col; j++) { - if (' ' == p->buf[j]) + if (j && ' ' == p->buf[j]) break; else if (8 == p->buf[j]) vsz--; @@ -399,12 +401,29 @@ term_nescape(struct termp *p, const char *word, size_t 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]); +} + + /* * Handle an escape sequence: determine its length and pass it to the * escape-symbol look table. Note that we assume mdoc(3) has validated @@ -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; }