summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--html.c20
-rw-r--r--man_validate.c4
-rw-r--r--mandoc.c8
-rw-r--r--mandoc.h4
-rw-r--r--mandoc_headers.38
-rw-r--r--mdoc_markdown.c4
-rw-r--r--out.c2
-rw-r--r--regress/roff/esc/f.out_html2
-rw-r--r--regress/roff/ft/badargs.out_html7
-rw-r--r--regress/tbl/mod/Makefile11
-rw-r--r--regress/tbl/mod/badfont.in12
-rw-r--r--regress/tbl/mod/badfont.out_ascii13
-rw-r--r--regress/tbl/mod/badfont.out_lint5
-rw-r--r--regress/tbl/mod/font-eol.in13
-rw-r--r--regress/tbl/mod/font-eol.out_ascii13
-rw-r--r--regress/tbl/mod/font-eol.out_lint1
-rw-r--r--regress/tbl/mod/font.out_lint1
-rw-r--r--roff.c4
-rw-r--r--roff_term.c4
-rw-r--r--tbl.75
-rw-r--r--tbl.h5
-rw-r--r--tbl_data.c1
-rw-r--r--tbl_html.c5
-rw-r--r--tbl_layout.c54
-rw-r--r--tbl_term.c24
-rw-r--r--term.c4
-rw-r--r--tree.c24
27 files changed, 174 insertions, 84 deletions
diff --git a/html.c b/html.c
index e111abf0..0570fc62 100644
--- a/html.c
+++ b/html.c
@@ -1,7 +1,7 @@
/* $Id$ */
/*
- * Copyright (c) 2011-2015, 2017-2020 Ingo Schwarze <schwarze@openbsd.org>
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
+ * Copyright (c) 2011-2015, 2017-2021 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -240,8 +240,10 @@ html_setfont(struct html *h, enum mandoc_esc font)
case ESCAPE_FONTITALIC:
case ESCAPE_FONTBOLD:
case ESCAPE_FONTBI:
- case ESCAPE_FONTCW:
case ESCAPE_FONTROMAN:
+ case ESCAPE_FONTCR:
+ case ESCAPE_FONTCB:
+ case ESCAPE_FONTCI:
break;
case ESCAPE_FONT:
font = ESCAPE_FONTROMAN;
@@ -272,9 +274,17 @@ print_metaf(struct html *h)
h->metaf = print_otag(h, TAG_B, "");
print_otag(h, TAG_I, "");
break;
- case ESCAPE_FONTCW:
+ case ESCAPE_FONTCR:
h->metaf = print_otag(h, TAG_SPAN, "c", "Li");
break;
+ case ESCAPE_FONTCB:
+ h->metaf = print_otag(h, TAG_SPAN, "c", "Li");
+ print_otag(h, TAG_B, "");
+ break;
+ case ESCAPE_FONTCI:
+ h->metaf = print_otag(h, TAG_SPAN, "c", "Li");
+ print_otag(h, TAG_I, "");
+ break;
default:
break;
}
@@ -503,8 +513,10 @@ print_encode(struct html *h, const char *p, const char *pend, int norecurse)
case ESCAPE_FONTBOLD:
case ESCAPE_FONTITALIC:
case ESCAPE_FONTBI:
- case ESCAPE_FONTCW:
case ESCAPE_FONTROMAN:
+ case ESCAPE_FONTCR:
+ case ESCAPE_FONTCB:
+ case ESCAPE_FONTCI:
if (0 == norecurse) {
h->flags |= HTML_NOSPACE;
if (html_setfont(h, esc))
diff --git a/man_validate.c b/man_validate.c
index 87f053b8..bc250a90 100644
--- a/man_validate.c
+++ b/man_validate.c
@@ -239,7 +239,9 @@ check_tag(struct roff_node *n, struct roff_node *nt)
case ESCAPE_FONTITALIC:
case ESCAPE_FONTBI:
case ESCAPE_FONTROMAN:
- case ESCAPE_FONTCW:
+ case ESCAPE_FONTCR:
+ case ESCAPE_FONTCB:
+ case ESCAPE_FONTCI:
case ESCAPE_FONTPREV:
case ESCAPE_IGNORE:
break;
diff --git a/mandoc.c b/mandoc.c
index dfd1b466..2d9398d9 100644
--- a/mandoc.c
+++ b/mandoc.c
@@ -1,7 +1,7 @@
/* $Id$ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2011-2015, 2017-2020 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2011-2015, 2017-2021 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -74,12 +74,12 @@ mandoc_font(const char *cp, int sz)
case 'C':
switch (cp[1]) {
case 'B':
- return ESCAPE_FONTBOLD;
+ return ESCAPE_FONTCB;
case 'I':
- return ESCAPE_FONTITALIC;
+ return ESCAPE_FONTCI;
case 'R':
case 'W':
- return ESCAPE_FONTCW;
+ return ESCAPE_FONTCR;
default:
return ESCAPE_ERROR;
}
diff --git a/mandoc.h b/mandoc.h
index ba14c8fb..1719eae0 100644
--- a/mandoc.h
+++ b/mandoc.h
@@ -291,7 +291,9 @@ enum mandoc_esc {
ESCAPE_FONTITALIC, /* italic font mode */
ESCAPE_FONTBI, /* bold italic font mode */
ESCAPE_FONTROMAN, /* roman font mode */
- ESCAPE_FONTCW, /* constant width font mode */
+ ESCAPE_FONTCR, /* constant width font mode */
+ ESCAPE_FONTCB, /* constant width bold font mode */
+ ESCAPE_FONTCI, /* constant width italic font mode */
ESCAPE_FONTPREV, /* previous font mode */
ESCAPE_NUMBERED, /* a numbered glyph */
ESCAPE_UNICODE, /* a unicode codepoint */
diff --git a/mandoc_headers.3 b/mandoc_headers.3
index f55d491d..d9e9b94f 100644
--- a/mandoc_headers.3
+++ b/mandoc_headers.3
@@ -1,6 +1,6 @@
.\" $Id$
.\"
-.\" Copyright (c) 2014-2020 Ingo Schwarze <schwarze@openbsd.org>
+.\" Copyright (c) 2014-2021 Ingo Schwarze <schwarze@openbsd.org>
.\"
.\" Permission to use, copy, modify, and distribute this software for any
.\" purpose with or without fee is hereby granted, provided that the above
@@ -167,7 +167,11 @@ parse tree; can be used everywhere.
Requires
.In sys/types.h
for
-.Vt size_t .
+.Vt size_t
+and
+.Qq Pa mandoc.h
+for
+.Vt enum mandoc_esc .
.Pp
Provides
.Vt enum tbl_cellt ,
diff --git a/mdoc_markdown.c b/mdoc_markdown.c
index 5e1d01cf..958b052f 100644
--- a/mdoc_markdown.c
+++ b/mdoc_markdown.c
@@ -603,16 +603,18 @@ md_word(const char *s)
md_rawword("markdown");
continue;
case ESCAPE_FONTBOLD:
+ case ESCAPE_FONTCB:
nextfont = "**";
break;
case ESCAPE_FONTITALIC:
+ case ESCAPE_FONTCI:
nextfont = "*";
break;
case ESCAPE_FONTBI:
nextfont = "***";
break;
case ESCAPE_FONT:
- case ESCAPE_FONTCW:
+ case ESCAPE_FONTCR:
case ESCAPE_FONTROMAN:
nextfont = "";
break;
diff --git a/out.c b/out.c
index 289c8192..56ca34b9 100644
--- a/out.c
+++ b/out.c
@@ -22,11 +22,13 @@
#include <assert.h>
#include <ctype.h>
#include <stdint.h>
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "mandoc_aux.h"
+#include "mandoc.h"
#include "tbl.h"
#include "out.h"
diff --git a/regress/roff/esc/f.out_html b/regress/roff/esc/f.out_html
index 887175f6..30f5c7e1 100644
--- a/regress/roff/esc/f.out_html
+++ b/regress/roff/esc/f.out_html
@@ -1,4 +1,4 @@
numbers: <b><i>bolditalic</i></b><b>bold</b><i>italic</i>roman
letters: <b>bold</b><i>italic</i><b>back</b><b><i>bolditalic</i></b>roman
multiletter: <b>bold</b>empty<i>italic</i>back<b><i>bolditalic</i></b>roman
-typewriter: <span class="Li">roman</span><b>bold</b><span class="Li">roman</span><i>italic</i>roman
+typewriter: <span class="Li">roman</span><span class="Li"><b>bold</b></span><span class="Li">roman</span><span class="Li"><i>italic</i></span>roman
diff --git a/regress/roff/ft/badargs.out_html b/regress/roff/ft/badargs.out_html
index a332e3a2..686ca476 100644
--- a/regress/roff/ft/badargs.out_html
+++ b/regress/roff/ft/badargs.out_html
@@ -1,6 +1,7 @@
<br/>
default font <i>italic</i> <b><i>bold italic</i></b>
- <span class="Li">typeqriter</span> <span class="Li">roman</span> <b>bold</b>
- <i>italic</i> <b>bold</b> <b>still bold</b> <i>italic</i> <i>back to
- bold</i> <i>back to italic</i>
+ <span class="Li">typeqriter</span> <span class="Li">roman</span>
+ <span class="Li"><b>bold</b></span> <span class="Li"><i>italic</i></span>
+ <b>bold</b> <b>still bold</b> <i>italic</i> <i>back to bold</i> <i>back to
+ italic</i>
<br/>
diff --git a/regress/tbl/mod/Makefile b/regress/tbl/mod/Makefile
index 96547d64..7bbf30e5 100644
--- a/regress/tbl/mod/Makefile
+++ b/regress/tbl/mod/Makefile
@@ -1,15 +1,16 @@
-# $OpenBSD: Makefile,v 1.2 2015/02/10 11:02:19 schwarze Exp $
+# $OpenBSD: Makefile,v 1.6 2021/08/10 12:36:42 schwarze Exp $
-REGRESS_TARGETS = badfont expand expand-toowide font misalign spacing width
-LINT_TARGETS = badfont font
+REGRESS_TARGETS = badfont expand expand-toowide font font-eol
+REGRESS_TARGETS += misalign spacing width
+LINT_TARGETS = badfont font font-eol
-# groff-1.22.3 defects:
+# groff-1.22.4 defects:
# - The "f" font modifier swallows a following newline character.
# - When space is insufficient (on either side) for properly aligning
# a number, GNU tbl(1) moves the number too much to the right,
# overflowing the column, even if space would be sufficient without
# left padding.
-SKIP_GROFF = badfont misalign
+SKIP_GROFF = font-eol misalign
.include <bsd.regress.mk>
diff --git a/regress/tbl/mod/badfont.in b/regress/tbl/mod/badfont.in
index 2a4f0d0a..12303149 100644
--- a/regress/tbl/mod/badfont.in
+++ b/regress/tbl/mod/badfont.in
@@ -1,15 +1,17 @@
-.\" $OpenBSD: badfont.in,v 1.2 2017/07/04 14:53:27 schwarze Exp $
-.TH TBL-MOD-BADFONT 1 "February 10, 2015"
+.\" $OpenBSD: badfont.in,v 1.3 2021/08/10 12:36:42 schwarze Exp $
+.TH TBL-MOD-BADFONT 1 "August 9, 2021"
.SH NAME
tbl-mod-badfont \- invalid font modifiers in table layouts
.SH DESCRIPTION
normal text
.TS
box tab(:);
-lfB lf
+lfI lfX
+lfB lfIB
lfI lf.
lfB lfI.
-bold:none
-italic:none
+italic:one char
+bold:two chars
+italic:dot
bold:italic
.TE
diff --git a/regress/tbl/mod/badfont.out_ascii b/regress/tbl/mod/badfont.out_ascii
index 43683330..4cd3bd3f 100644
--- a/regress/tbl/mod/badfont.out_ascii
+++ b/regress/tbl/mod/badfont.out_ascii
@@ -6,9 +6,10 @@ NNAAMMEE
DDEESSCCRRIIPPTTIIOONN
normal text
- +----------------+
- |bboolldd none |
- |_i_t_a_l_i_c none |
- |bboolldd _i_t_a_l_i_c |
- +----------------+
-OpenBSD February 10, 2015 TBL-MOD-BADFONT(1)
+ +-------------------+
+ |_i_t_a_l_i_c one char |
+ |bboolldd two chars |
+ |_i_t_a_l_i_c dot |
+ |bboolldd _i_t_a_l_i_c |
+ +-------------------+
+OpenBSD August 9, 2021 TBL-MOD-BADFONT(1)
diff --git a/regress/tbl/mod/badfont.out_lint b/regress/tbl/mod/badfont.out_lint
index c19bae82..7884ec88 100644
--- a/regress/tbl/mod/badfont.out_lint
+++ b/regress/tbl/mod/badfont.out_lint
@@ -1,2 +1,3 @@
-mandoc: badfont.in:9:7: WARNING: unknown font, skipping request: TS f
-mandoc: badfont.in:10:7: WARNING: unknown font, skipping request: TS f.
+mandoc: badfont.in:9:7: WARNING: unknown font, skipping request: TS fX
+mandoc: badfont.in:10:7: WARNING: unknown font, skipping request: TS fIB
+mandoc: badfont.in:11:7: WARNING: unknown font, skipping request: TS f.
diff --git a/regress/tbl/mod/font-eol.in b/regress/tbl/mod/font-eol.in
new file mode 100644
index 00000000..fadf66ec
--- /dev/null
+++ b/regress/tbl/mod/font-eol.in
@@ -0,0 +1,13 @@
+.\" $OpenBSD: font-eol.in,v 1.1 2021/08/10 12:36:42 schwarze Exp $
+.TH TBL-MOD-FONT-EOL 1 "August 9, 2021"
+.SH NAME
+tbl-mod-font-eol \- font modifier at eol in table layout
+.SH DESCRIPTION
+normal text
+.TS
+box tab(:);
+lfB lf
+lfB lfI.
+bold:none
+bold:italic
+.TE
diff --git a/regress/tbl/mod/font-eol.out_ascii b/regress/tbl/mod/font-eol.out_ascii
new file mode 100644
index 00000000..c87d5aba
--- /dev/null
+++ b/regress/tbl/mod/font-eol.out_ascii
@@ -0,0 +1,13 @@
+TBL-MOD-FONT-EOL(1) General Commands Manual TBL-MOD-FONT-EOL(1)
+
+NNAAMMEE
+ tbl-mod-font-eol - font modifier at eol in table layout
+
+DDEESSCCRRIIPPTTIIOONN
+ normal text
+
+ +--------------+
+ |bboolldd none |
+ |bboolldd _i_t_a_l_i_c |
+ +--------------+
+OpenBSD August 9, 2021 TBL-MOD-FONT-EOL(1)
diff --git a/regress/tbl/mod/font-eol.out_lint b/regress/tbl/mod/font-eol.out_lint
new file mode 100644
index 00000000..c7f83f34
--- /dev/null
+++ b/regress/tbl/mod/font-eol.out_lint
@@ -0,0 +1 @@
+mandoc: font-eol.in:9:7: WARNING: unknown font, skipping request: TS f
diff --git a/regress/tbl/mod/font.out_lint b/regress/tbl/mod/font.out_lint
index 06046a43..7ddd6280 100644
--- a/regress/tbl/mod/font.out_lint
+++ b/regress/tbl/mod/font.out_lint
@@ -1,4 +1,3 @@
-mandoc: font.in:9:6: WARNING: unknown font, skipping request: TS fCW|ci
mandoc: font.in:19:2: WARNING: tab in filled text
mandoc: font.in:19:4: WARNING: tab in filled text
mandoc: font.in:19:6: WARNING: tab in filled text
diff --git a/roff.c b/roff.c
index d7443d2a..2acb36ed 100644
--- a/roff.c
+++ b/roff.c
@@ -3667,7 +3667,9 @@ roff_char(ROFF_ARGS)
case ESCAPE_FONTITALIC:
case ESCAPE_FONTBOLD:
case ESCAPE_FONTBI:
- case ESCAPE_FONTCW:
+ case ESCAPE_FONTCR:
+ case ESCAPE_FONTCB:
+ case ESCAPE_FONTCI:
case ESCAPE_FONTPREV:
font++;
break;
diff --git a/roff_term.c b/roff_term.c
index 7f5058a4..771472d6 100644
--- a/roff_term.c
+++ b/roff_term.c
@@ -112,9 +112,11 @@ roff_term_pre_ft(ROFF_TERM_ARGS)
cp = n->child->string;
switch (mandoc_font(cp, (int)strlen(cp))) {
case ESCAPE_FONTBOLD:
+ case ESCAPE_FONTCB:
term_fontrepl(p, TERMFONT_BOLD);
break;
case ESCAPE_FONTITALIC:
+ case ESCAPE_FONTCI:
term_fontrepl(p, TERMFONT_UNDER);
break;
case ESCAPE_FONTBI:
@@ -124,7 +126,7 @@ roff_term_pre_ft(ROFF_TERM_ARGS)
term_fontlast(p);
break;
case ESCAPE_FONTROMAN:
- case ESCAPE_FONTCW:
+ case ESCAPE_FONTCR:
term_fontrepl(p, TERMFONT_NONE);
break;
default:
diff --git a/tbl.7 b/tbl.7
index 142d1ea0..116f4c7b 100644
--- a/tbl.7
+++ b/tbl.7
@@ -178,10 +178,11 @@ of any other column also having the
.Cm e
modifier.
.It Cm f
-The next character selects the font to use for this cell.
+The next one or two characters select the font to use for this cell.
+One-character font names must be followed by a blank or period.
See the
.Xr roff 7
-manual for supported one-character font names.
+manual for supported font names.
.It Cm i
Use an italic font for the contents of this cell.
.It Cm m
diff --git a/tbl.h b/tbl.h
index 8e5e83bc..b8a0177d 100644
--- a/tbl.h
+++ b/tbl.h
@@ -1,7 +1,7 @@
/* $Id$ */
/*
* Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2014, 2015, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2014,2015,2017,2018,2021 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -57,14 +57,13 @@ struct tbl_cell {
int vert; /* Width of subsequent vertical line. */
int col; /* Column number, starting from 0. */
int flags;
-#define TBL_CELL_BOLD (1 << 0) /* b, B, fB */
-#define TBL_CELL_ITALIC (1 << 1) /* i, I, fI */
#define TBL_CELL_TALIGN (1 << 2) /* t, T */
#define TBL_CELL_UP (1 << 3) /* u, U */
#define TBL_CELL_BALIGN (1 << 4) /* d, D */
#define TBL_CELL_WIGN (1 << 5) /* z, Z */
#define TBL_CELL_EQUAL (1 << 6) /* e, E */
#define TBL_CELL_WMAX (1 << 7) /* x, X */
+ enum mandoc_esc font;
enum tbl_cellt pos;
};
diff --git a/tbl_data.c b/tbl_data.c
index 15cad319..9edf864a 100644
--- a/tbl_data.c
+++ b/tbl_data.c
@@ -78,6 +78,7 @@ getdata(struct tbl_node *tbl, struct tbl_span *dp,
if (dp->layout->last->col + 1 < dp->opts->cols) {
cp = mandoc_calloc(1, sizeof(*cp));
cp->pos = TBL_CELL_LEFT;
+ cp->font = ESCAPE_FONTROMAN;
cp->spacing = SIZE_MAX;
dp->layout->last->next = cp;
cp->col = dp->layout->last->col + 1;
diff --git a/tbl_html.c b/tbl_html.c
index 0b18a1b0..a4463d2e 100644
--- a/tbl_html.c
+++ b/tbl_html.c
@@ -243,10 +243,7 @@ print_tbl(struct html *h, const struct tbl_span *sp)
"border-right-style", rborder);
if (dp->string != NULL) {
save_font = h->metac;
- if (dp->layout->flags & TBL_CELL_BOLD)
- html_setfont(h, ESCAPE_FONTBOLD);
- else if (dp->layout->flags & TBL_CELL_ITALIC)
- html_setfont(h, ESCAPE_FONTITALIC);
+ html_setfont(h, dp->layout->font);
if (dp->layout->pos == TBL_CELL_LONG)
print_text(h, "\\[u2003]"); /* em space */
print_text(h, dp->string);
diff --git a/tbl_layout.c b/tbl_layout.c
index 34952e06..7c8764e2 100644
--- a/tbl_layout.c
+++ b/tbl_layout.c
@@ -1,7 +1,8 @@
/* $Id$ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2012, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2012, 2014, 2015, 2017, 2020, 2021
+ * Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -67,6 +68,8 @@ mods(struct tbl_node *tbl, struct tbl_cell *cp,
char *endptr;
unsigned long spacing;
size_t sz;
+ int isz;
+ enum mandoc_esc fontesc;
mod:
while (p[*pos] == ' ' || p[*pos] == '\t')
@@ -105,7 +108,7 @@ mod:
switch (tolower((unsigned char)p[(*pos)++])) {
case 'b':
- cp->flags |= TBL_CELL_BOLD;
+ cp->font = ESCAPE_FONTBOLD;
goto mod;
case 'd':
cp->flags |= TBL_CELL_BALIGN;
@@ -116,7 +119,7 @@ mod:
case 'f':
break;
case 'i':
- cp->flags |= TBL_CELL_ITALIC;
+ cp->font = ESCAPE_FONTITALIC;
goto mod;
case 'm':
mandoc_msg(MANDOCERR_TBLLAYOUT_MOD, ln, *pos, "m");
@@ -170,40 +173,34 @@ mod:
goto mod;
}
+ while (p[*pos] == ' ' || p[*pos] == '\t')
+ (*pos)++;
+
/* Ignore parenthised font names for now. */
if (p[*pos] == '(')
goto mod;
- /* Support only one-character font-names for now. */
-
- if (p[*pos] == '\0' || (p[*pos + 1] != ' ' && p[*pos + 1] != '.')) {
+ isz = 0;
+ if (p[*pos] != '\0')
+ isz++;
+ if (strchr(" \t.", p[*pos + isz]) == NULL)
+ isz++;
+
+ fontesc = mandoc_font(p + *pos, isz);
+
+ switch (fontesc) {
+ case ESCAPE_FONTPREV:
+ case ESCAPE_ERROR:
mandoc_msg(MANDOCERR_FT_BAD,
ln, *pos, "TS %s", p + *pos - 1);
- if (p[*pos] != '\0')
- (*pos)++;
- if (p[*pos] != '\0')
- (*pos)++;
- goto mod;
- }
-
- switch (p[(*pos)++]) {
- case '3':
- case 'B':
- cp->flags |= TBL_CELL_BOLD;
- goto mod;
- case '2':
- case 'I':
- cp->flags |= TBL_CELL_ITALIC;
- goto mod;
- case '1':
- case 'R':
- goto mod;
+ break;
default:
- mandoc_msg(MANDOCERR_FT_BAD,
- ln, *pos - 1, "TS f%c", p[*pos - 1]);
- goto mod;
+ cp->font = fontesc;
+ break;
}
+ *pos += isz;
+ goto mod;
}
static void
@@ -362,6 +359,7 @@ cell_alloc(struct tbl_node *tbl, struct tbl_row *rp, enum tbl_cellt pos)
p = mandoc_calloc(1, sizeof(*p));
p->spacing = SIZE_MAX;
+ p->font = ESCAPE_FONTROMAN;
p->pos = pos;
if ((pp = rp->last) != NULL) {
diff --git a/tbl_term.c b/tbl_term.c
index 77808ea8..84ef06e0 100644
--- a/tbl_term.c
+++ b/tbl_term.c
@@ -1,7 +1,7 @@
/* $Id$ */
/*
* Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2011-2020 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2011-2021 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -923,10 +923,24 @@ tbl_word(struct termp *tp, const struct tbl_dat *dp)
int prev_font;
prev_font = tp->fonti;
- if (dp->layout->flags & TBL_CELL_BOLD)
- term_fontpush(tp, TERMFONT_BOLD);
- else if (dp->layout->flags & TBL_CELL_ITALIC)
- term_fontpush(tp, TERMFONT_UNDER);
+ switch (dp->layout->font) {
+ case ESCAPE_FONTBI:
+ term_fontpush(tp, TERMFONT_BI);
+ break;
+ case ESCAPE_FONTBOLD:
+ case ESCAPE_FONTCB:
+ term_fontpush(tp, TERMFONT_BOLD);
+ break;
+ case ESCAPE_FONTITALIC:
+ case ESCAPE_FONTCI:
+ term_fontpush(tp, TERMFONT_UNDER);
+ break;
+ case ESCAPE_FONTROMAN:
+ case ESCAPE_FONTCR:
+ break;
+ default:
+ abort();
+ }
term_word(tp, dp->string);
diff --git a/term.c b/term.c
index 2b18b480..71c5eb31 100644
--- a/term.c
+++ b/term.c
@@ -589,16 +589,18 @@ term_word(struct termp *p, const char *word)
uc = *seq;
break;
case ESCAPE_FONTBOLD:
+ case ESCAPE_FONTCB:
term_fontrepl(p, TERMFONT_BOLD);
continue;
case ESCAPE_FONTITALIC:
+ case ESCAPE_FONTCI:
term_fontrepl(p, TERMFONT_UNDER);
continue;
case ESCAPE_FONTBI:
term_fontrepl(p, TERMFONT_BI);
continue;
case ESCAPE_FONT:
- case ESCAPE_FONTCW:
+ case ESCAPE_FONTCR:
case ESCAPE_FONTROMAN:
term_fontrepl(p, TERMFONT_NONE);
continue;
diff --git a/tree.c b/tree.c
index 3c05617a..e1d6d877 100644
--- a/tree.c
+++ b/tree.c
@@ -1,7 +1,7 @@
/* $Id$ */
/*
- * Copyright (c) 2013-2015, 2017-2020 Ingo Schwarze <schwarze@openbsd.org>
* Copyright (c) 2008, 2009, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
+ * Copyright (c) 2013-2015, 2017-2021 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -471,10 +471,28 @@ print_span(const struct tbl_span *sp, int indent)
else {
printf("%d", cp->col);
print_cellt(dp->layout->pos);
- if (cp->flags & TBL_CELL_BOLD)
+ switch (cp->font) {
+ case ESCAPE_FONTBOLD:
putchar('b');
- if (cp->flags & TBL_CELL_ITALIC)
+ break;
+ case ESCAPE_FONTITALIC:
putchar('i');
+ break;
+ case ESCAPE_FONTBI:
+ fputs("bi", stdout);
+ break;
+ case ESCAPE_FONTCR:
+ putchar('c');
+ break;
+ case ESCAPE_FONTCB:
+ fputs("cb", stdout);
+ break;
+ case ESCAPE_FONTCI:
+ fputs("ci", stdout);
+ break;
+ default:
+ abort();
+ }
if (cp->flags & TBL_CELL_TALIGN)
putchar('t');
if (cp->flags & TBL_CELL_UP)