diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2010-07-21 20:35:03 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2010-07-21 20:35:03 +0000 |
commit | 1b939f3fc9a59c4dd5ac04a9c995a8457d4ee32a (patch) | |
tree | a3a2b528ee1e0f2ca5ccac1c1261a4a0683a01f3 /term.c | |
parent | 52a2d24a5977427830c9757b19fb36e1d1ac5307 (diff) | |
download | mandoc-1b939f3fc9a59c4dd5ac04a9c995a8457d4ee32a.tar.gz mandoc-1b939f3fc9a59c4dd5ac04a9c995a8457d4ee32a.tar.zst mandoc-1b939f3fc9a59c4dd5ac04a9c995a8457d4ee32a.zip |
Accomodate for groff's crappy behaviour wherein an unrecognised
single-character escape (and ONLY this type of escape) will map back
into itself:
"If a backslash is followed by a character that does not
constitute a defined escape sequence the backslash is silently
ignored and the character maps to itself."
(From groff.7.)
Found by Jason McIntyre.
Diffstat (limited to 'term.c')
-rw-r--r-- | term.c | 13 |
1 files changed, 9 insertions, 4 deletions
@@ -1,4 +1,4 @@ -/* $Id: term.c,v 1.162 2010/07/17 12:01:43 kristaps Exp $ */ +/* $Id: term.c,v 1.163 2010/07/21 20:35:03 kristaps Exp $ */ /* * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv> * Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org> @@ -34,7 +34,8 @@ #include "term.h" #include "main.h" -static void spec(struct termp *, const char *, size_t); +static void spec(struct termp *, enum roffdeco, + const char *, size_t); static void res(struct termp *, const char *, size_t); static void buffera(struct termp *, const char *, size_t); static void bufferc(struct termp *, char); @@ -360,7 +361,7 @@ term_vspace(struct termp *p) static void -spec(struct termp *p, const char *word, size_t len) +spec(struct termp *p, enum roffdeco d, const char *word, size_t len) { const char *rhs; size_t sz; @@ -368,6 +369,8 @@ spec(struct termp *p, const char *word, size_t len) rhs = chars_spec2str(p->symtab, word, len, &sz); if (rhs) encode(p, rhs, sz); + else if (DECO_SSPECIAL == d) + encode(p, word, len); } @@ -519,7 +522,9 @@ term_word(struct termp *p, const char *word) res(p, seq, ssz); break; case (DECO_SPECIAL): - spec(p, seq, ssz); + /* FALLTHROUGH */ + case (DECO_SSPECIAL): + spec(p, deco, seq, ssz); break; case (DECO_BOLD): term_fontrepl(p, TERMFONT_BOLD); |