diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2009-07-27 12:02:49 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2009-07-27 12:02:49 +0000 |
commit | 0441b4f4454e1e8fa3005d8b12b9731e24099509 (patch) | |
tree | fa9722aef313d84823a932a823613cff4c0b0fb3 /term.c | |
parent | 34c551bdd57e92ced941777217596e44b5b428c6 (diff) | |
download | mandoc-0441b4f4454e1e8fa3005d8b12b9731e24099509.tar.gz mandoc-0441b4f4454e1e8fa3005d8b12b9731e24099509.tar.zst mandoc-0441b4f4454e1e8fa3005d8b12b9731e24099509.zip |
Correct handling of \*(xx, \*[xxx], \*x versus \x, \(xx, \([xxx]: predefined strings and escape characters, respectively.
Diffstat (limited to 'term.c')
-rw-r--r-- | term.c | 31 |
1 files changed, 25 insertions, 6 deletions
@@ -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 <kristaps@kth.se> * @@ -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; } |