summaryrefslogtreecommitdiffstatshomepage
path: root/term.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-07-27 12:02:49 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-07-27 12:02:49 +0000
commit0441b4f4454e1e8fa3005d8b12b9731e24099509 (patch)
treefa9722aef313d84823a932a823613cff4c0b0fb3 /term.c
parent34c551bdd57e92ced941777217596e44b5b428c6 (diff)
downloadmandoc-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.c31
1 files changed, 25 insertions, 6 deletions
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 <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;
}