summaryrefslogtreecommitdiffstats
path: root/term.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-11-05 08:40:16 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-11-05 08:40:16 +0000
commit54c1839bf6facda8803778f0b1a0f625de1b7e03 (patch)
tree7e80afdb9690f796aeb191e2e71713c307a4c77a /term.c
parentb53b23e2ebb55ef38b0b972ae0cf4f246e20a5cb (diff)
downloadmandoc-54c1839bf6facda8803778f0b1a0f625de1b7e03.tar.gz
Correct support for `\fX' font modes in -Tascii.
Diffstat (limited to 'term.c')
-rw-r--r--term.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/term.c b/term.c
index de3f2326..79132211 100644
--- a/term.c
+++ b/term.c
@@ -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);
}