diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2009-11-05 08:40:16 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2009-11-05 08:40:16 +0000 |
commit | 54c1839bf6facda8803778f0b1a0f625de1b7e03 (patch) | |
tree | 7e80afdb9690f796aeb191e2e71713c307a4c77a /term.c | |
parent | b53b23e2ebb55ef38b0b972ae0cf4f246e20a5cb (diff) | |
download | mandoc-54c1839bf6facda8803778f0b1a0f625de1b7e03.tar.gz |
Correct support for `\fX' font modes in -Tascii.
Diffstat (limited to 'term.c')
-rw-r--r-- | term.c | 28 |
1 files changed, 21 insertions, 7 deletions
@@ -15,6 +15,7 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include <assert.h> +#include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -373,7 +374,7 @@ do_reserved(struct termp *p, const char *word, size_t len) static void do_escaped(struct termp *p, const char **word) { - int j, type; + int j, type, sv; const char *wp; wp = *word; @@ -428,16 +429,29 @@ do_escaped(struct termp *p, const char **word) } switch (*wp) { + case ('3'): + /* FALLTHROUGH */ case ('B'): - p->bold++; + p->metamask = p->metafont; + p->metafont |= METAF_BOLD; break; + case ('2'): + /* FALLTHROUGH */ case ('I'): - p->under++; + p->metamask = p->metafont; + p->metafont |= METAF_UNDER; break; case ('P'): + sv = p->metamask; + p->metamask = p->metafont; + p->metafont = sv; + break; + case ('1'): /* FALLTHROUGH */ case ('R'): - p->bold = p->under = 0; + p->metamask = p->metafont; + p->metafont &= ~METAF_UNDER; + p->metafont &= ~METAF_BOLD; break; default: break; @@ -563,12 +577,12 @@ static void encode(struct termp *p, char c) { - if (' ' != c) { - if (p->under) { + if (isgraph((u_char)c)) { + if (p->under || METAF_UNDER & p->metafont) { buffer(p, '_'); buffer(p, 8); } - if (p->bold) { + if (p->bold || METAF_BOLD & p->metafont) { buffer(p, c); buffer(p, 8); } |