]> git.cameronkatri.com Git - mandoc.git/commitdiff
Support two-character font names (BI, CW, CR, CB, CI)
authorIngo Schwarze <schwarze@openbsd.org>
Tue, 10 Aug 2021 12:55:03 +0000 (12:55 +0000)
committerIngo Schwarze <schwarze@openbsd.org>
Tue, 10 Aug 2021 12:55:03 +0000 (12:55 +0000)
in the tbl(7) layout font modifier.

Get rid of the TBL_CELL_BOLD and TBL_CELL_ITALIC flags and use
the usual ESCAPE_FONT* enum mandoc_esc members from mandoc.h instead,
which simplifies and unifies some code.

While here, also support CB and CI in roff(7) \f escape sequences
and in roff(7) .ft requests for all output modes.  Using those is
certainly not recommended because portability is limited even with
groff, but supporting them makes some existing third-party manual
pages look better, in particular in HTML output mode.

Bug-compatible with groff as far as i'm aware, except that i consider
font names starting with the '\n' (ASCII 0x0a line feed) character
so insane that i decided to not support them.

Missing feature reported by nabijaczleweli dot xyz in
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=992002.
I used none of the code from the initial patch submitted by
nabijaczleweli, but some of their ideas.
Final patch tested by them, too.

27 files changed:
html.c
man_validate.c
mandoc.c
mandoc.h
mandoc_headers.3
mdoc_markdown.c
out.c
regress/roff/esc/f.out_html
regress/roff/ft/badargs.out_html
regress/tbl/mod/Makefile
regress/tbl/mod/badfont.in
regress/tbl/mod/badfont.out_ascii
regress/tbl/mod/badfont.out_lint
regress/tbl/mod/font-eol.in [new file with mode: 0644]
regress/tbl/mod/font-eol.out_ascii [new file with mode: 0644]
regress/tbl/mod/font-eol.out_lint [new file with mode: 0644]
regress/tbl/mod/font.out_lint
roff.c
roff_term.c
tbl.7
tbl.h
tbl_data.c
tbl_html.c
tbl_layout.c
tbl_term.c
term.c
tree.c

diff --git a/html.c b/html.c
index 6ce204bbbf8060982f47307931881e6031027049..7cd694f1b1fffd466a8c8bc259cae4a712714f8e 100644 (file)
--- a/html.c
+++ b/html.c
@@ -1,7 +1,7 @@
-/* $Id: html.c,v 1.273 2021/06/02 17:51:38 schwarze Exp $ */
+/* $Id: html.c,v 1.274 2021/08/10 12:55:03 schwarze Exp $ */
 /*
 /*
- * Copyright (c) 2011-2015, 2017-2020 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * 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
  *
  * 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_FONTITALIC:
        case ESCAPE_FONTBOLD:
        case ESCAPE_FONTBI:
-       case ESCAPE_FONTCW:
        case ESCAPE_FONTROMAN:
        case ESCAPE_FONTROMAN:
+       case ESCAPE_FONTCR:
+       case ESCAPE_FONTCB:
+       case ESCAPE_FONTCI:
                break;
        case ESCAPE_FONT:
                font = ESCAPE_FONTROMAN;
                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;
                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;
                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;
        }
        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_FONTBOLD:
                case ESCAPE_FONTITALIC:
                case ESCAPE_FONTBI:
-               case ESCAPE_FONTCW:
                case ESCAPE_FONTROMAN:
                case ESCAPE_FONTROMAN:
+               case ESCAPE_FONTCR:
+               case ESCAPE_FONTCB:
+               case ESCAPE_FONTCI:
                        if (0 == norecurse) {
                                h->flags |= HTML_NOSPACE;
                                if (html_setfont(h, esc))
                        if (0 == norecurse) {
                                h->flags |= HTML_NOSPACE;
                                if (html_setfont(h, esc))
index 57f05b25e8ff9b47f8dde98d98986805513231fd..404b223f2b5435c133294eea12cb79bccf2a3cd3 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: man_validate.c,v 1.155 2020/10/30 13:24:33 schwarze Exp $ */
+/* $Id: man_validate.c,v 1.156 2021/08/10 12:55:03 schwarze Exp $ */
 /*
  * Copyright (c) 2010, 2012-2020 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
 /*
  * Copyright (c) 2010, 2012-2020 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
@@ -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_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;
                        case ESCAPE_FONTPREV:
                        case ESCAPE_IGNORE:
                                break;
index 302f4fa1425c02252a5e24b61702c17b8a720e6c..6adf1a4318b29f852c11ba9272a5d1953f554412 100644 (file)
--- a/mandoc.c
+++ b/mandoc.c
@@ -1,7 +1,7 @@
-/*     $Id: mandoc.c,v 1.118 2020/10/24 22:57:39 schwarze Exp $ */
+/*     $Id: mandoc.c,v 1.119 2021/08/10 12:55:03 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
 /*
  * 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
  *
  * 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':
                case 'C':
                        switch (cp[1]) {
                        case 'B':
-                               return ESCAPE_FONTBOLD;
+                               return ESCAPE_FONTCB;
                        case 'I':
                        case 'I':
-                               return ESCAPE_FONTITALIC;
+                               return ESCAPE_FONTCI;
                        case 'R':
                        case 'W':
                        case 'R':
                        case 'W':
-                               return ESCAPE_FONTCW;
+                               return ESCAPE_FONTCR;
                        default:
                                return ESCAPE_ERROR;
                        }
                        default:
                                return ESCAPE_ERROR;
                        }
index 8f4895b2a7f3f40c94e0dc2451f145ca9fbccb0f..ff76e71f9a95033fd95e09b2bf5c8bedb3594863 100644 (file)
--- a/mandoc.h
+++ b/mandoc.h
@@ -1,4 +1,4 @@
-/* $Id: mandoc.h,v 1.272 2021/07/04 15:38:26 schwarze Exp $ */
+/* $Id: mandoc.h,v 1.273 2021/08/10 12:55:03 schwarze Exp $ */
 /*
  * Copyright (c) 2012-2021 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2010, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
 /*
  * Copyright (c) 2012-2021 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2010, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
@@ -291,7 +291,9 @@ enum        mandoc_esc {
        ESCAPE_FONTITALIC, /* italic font mode */
        ESCAPE_FONTBI, /* bold italic font mode */
        ESCAPE_FONTROMAN, /* roman font mode */
        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 */
        ESCAPE_FONTPREV, /* previous font mode */
        ESCAPE_NUMBERED, /* a numbered glyph */
        ESCAPE_UNICODE, /* a unicode codepoint */
index 36a8a58d3d9b687634e6de6467ab0c14a82142c4..7fe6d379f864894d41d5fe2318a80a5c206925e8 100644 (file)
@@ -1,6 +1,6 @@
-.\"    $Id: mandoc_headers.3,v 1.33 2020/03/13 15:32:28 schwarze Exp $
+.\"    $Id: mandoc_headers.3,v 1.34 2021/08/10 12:55:03 schwarze Exp $
 .\"
 .\"
-.\" 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
 .\"
 .\" Permission to use, copy, modify, and distribute this software for any
 .\" purpose with or without fee is hereby granted, provided that the above
@@ -14,7 +14,7 @@
 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .\"
 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .\"
-.Dd $Mdocdate: March 13 2020 $
+.Dd $Mdocdate: August 10 2021 $
 .Dt MANDOC_HEADERS 3
 .Os
 .Sh NAME
 .Dt MANDOC_HEADERS 3
 .Os
 .Sh NAME
@@ -167,7 +167,11 @@ parse tree; can be used everywhere.
 Requires
 .In sys/types.h
 for
 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 ,
 .Pp
 Provides
 .Vt enum tbl_cellt ,
index 1d80ccf7f85b5e3c174d65ef6f8f427ef2bab9de..63d8e17055804b043f01f0fb89807ab98ee12b31 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: mdoc_markdown.c,v 1.36 2020/06/22 19:20:40 schwarze Exp $ */
+/* $Id: mdoc_markdown.c,v 1.37 2021/08/10 12:55:03 schwarze Exp $ */
 /*
  * Copyright (c) 2017, 2018, 2020 Ingo Schwarze <schwarze@openbsd.org>
  *
 /*
  * Copyright (c) 2017, 2018, 2020 Ingo Schwarze <schwarze@openbsd.org>
  *
@@ -603,16 +603,18 @@ md_word(const char *s)
                                md_rawword("markdown");
                                continue;
                        case ESCAPE_FONTBOLD:
                                md_rawword("markdown");
                                continue;
                        case ESCAPE_FONTBOLD:
+                       case ESCAPE_FONTCB:
                                nextfont = "**";
                                break;
                        case ESCAPE_FONTITALIC:
                                nextfont = "**";
                                break;
                        case ESCAPE_FONTITALIC:
+                       case ESCAPE_FONTCI:
                                nextfont = "*";
                                break;
                        case ESCAPE_FONTBI:
                                nextfont = "***";
                                break;
                        case ESCAPE_FONT:
                                nextfont = "*";
                                break;
                        case ESCAPE_FONTBI:
                                nextfont = "***";
                                break;
                        case ESCAPE_FONT:
-                       case ESCAPE_FONTCW:
+                       case ESCAPE_FONTCR:
                        case ESCAPE_FONTROMAN:
                                nextfont = "";
                                break;
                        case ESCAPE_FONTROMAN:
                                nextfont = "";
                                break;
diff --git a/out.c b/out.c
index 4529d5b1d358125eda0acd26d22c9ee09a9c568a..bf7342ecaca59bb29c94c6aaeb3150b482f65cef 100644 (file)
--- a/out.c
+++ b/out.c
@@ -1,4 +1,4 @@
-/*     $Id: out.c,v 1.79 2019/12/31 22:58:41 schwarze Exp $ */
+/*     $Id: out.c,v 1.80 2021/08/10 12:55:03 schwarze Exp $ */
 /*
  * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011,2014,2015,2017,2018 Ingo Schwarze <schwarze@openbsd.org>
 /*
  * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011,2014,2015,2017,2018 Ingo Schwarze <schwarze@openbsd.org>
 #include <assert.h>
 #include <ctype.h>
 #include <stdint.h>
 #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 <stdlib.h>
 #include <string.h>
 #include <time.h>
 
 #include "mandoc_aux.h"
+#include "mandoc.h"
 #include "tbl.h"
 #include "out.h"
 
 #include "tbl.h"
 #include "out.h"
 
index 887175f66fde67faade854ea9d84bccf48bff09b..30f5c7e16be68f36e55fb55688cb07d9c6f6dcdf 100644 (file)
@@ -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
 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
index a332e3a2fe49fa8cb59df87858a75a1d75eccc21..686ca47600cc8cd758edaa75a2e7a36e7bcdb8a2 100644 (file)
@@ -1,6 +1,7 @@
   <br/>
   default font <i>italic</i> <b><i>bold italic</i></b>
   <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/>
   <br/>
index 96547d645f6e71dc78256db66d1d59d3533a78b4..7bbf30e5841d9e5ea2223eb4fd3f55b01b844057 100644 (file)
@@ -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.
 
 # - 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>
 
 .include <bsd.regress.mk>
index 2a4f0d0a8e7486dacff402e6dcbf8aaa1813bffb..12303149da2621287fd7d18ae2bdb6b17d76f7ea 100644 (file)
@@ -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(:);
 .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.
 lfI lf.
 lfB lfI.
-bold:none
-italic:none
+italic:one char
+bold:two chars
+italic:dot
 bold:italic
 .TE
 bold:italic
 .TE
index 436833303a51453cea889b6c0982d9e018e91463..4cd3bd3f2aefa312014d81666266bc873e9eed42 100644 (file)
@@ -6,9 +6,10 @@ N\bNA\bAM\bME\bE
 D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
        normal text
 
 D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
        normal text
 
-       +----------------+
-       |b\bbo\bol\bld\bd     none   |
-       |_\bi_\bt_\ba_\bl_\bi_\bc   none   |
-       |b\bbo\bol\bld\bd     _\bi_\bt_\ba_\bl_\bi_\bc |
-       +----------------+
-OpenBSD                        February 10, 2015            TBL-MOD-BADFONT(1)
+       +-------------------+
+       |_\bi_\bt_\ba_\bl_\bi_\bc   one char  |
+       |b\bbo\bol\bld\bd     two chars |
+       |_\bi_\bt_\ba_\bl_\bi_\bc   dot       |
+       |b\bbo\bol\bld\bd     _\bi_\bt_\ba_\bl_\bi_\bc    |
+       +-------------------+
+OpenBSD                         August 9, 2021              TBL-MOD-BADFONT(1)
index c19bae82420112412669d01abcfb5cf2e0d8d282..7884ec88a089a0db6144fd52db33d0d69dfe7129 100644 (file)
@@ -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 (file)
index 0000000..fadf66e
--- /dev/null
@@ -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 (file)
index 0000000..c87d5ab
--- /dev/null
@@ -0,0 +1,13 @@
+TBL-MOD-FONT-EOL(1)         General Commands Manual        TBL-MOD-FONT-EOL(1)
+
+N\bNA\bAM\bME\bE
+       tbl-mod-font-eol - font modifier at eol in table layout
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+       normal text
+
+       +--------------+
+       |b\bbo\bol\bld\bd   none   |
+       |b\bbo\bol\bld\bd   _\bi_\bt_\ba_\bl_\bi_\bc |
+       +--------------+
+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 (file)
index 0000000..c7f83f3
--- /dev/null
@@ -0,0 +1 @@
+mandoc: font-eol.in:9:7: WARNING: unknown font, skipping request: TS f
index 06046a4380ea35cf5a5035f3e3a41c65908ffbfc..7ddd6280e964f16d6ec37a8068e944ec374d3e96 100644 (file)
@@ -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
 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 ed4f31b698d6779025c963ca3e6f99f3a80835d7..de75a260f5a769a571c5b077e14aea8ebe590b0f 100644 (file)
--- a/roff.c
+++ b/roff.c
@@ -1,4 +1,4 @@
-/* $Id: roff.c,v 1.377 2021/06/27 17:57:55 schwarze Exp $ */
+/* $Id: roff.c,v 1.378 2021/08/10 12:55:04 schwarze Exp $ */
 /*
  * Copyright (c) 2010-2015, 2017-2020 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
 /*
  * Copyright (c) 2010-2015, 2017-2020 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
@@ -3667,7 +3667,9 @@ roff_char(ROFF_ARGS)
                case ESCAPE_FONTITALIC:
                case ESCAPE_FONTBOLD:
                case ESCAPE_FONTBI:
                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;
                case ESCAPE_FONTPREV:
                        font++;
                        break;
index 7f5058a43707161ef93ce6413b276a1d8c1a6257..771472d6336d1a3b4aee1eb239c4030a3eba86fe 100644 (file)
@@ -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:
        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:
                term_fontrepl(p, TERMFONT_BOLD);
                break;
        case ESCAPE_FONTITALIC:
+       case ESCAPE_FONTCI:
                term_fontrepl(p, TERMFONT_UNDER);
                break;
        case ESCAPE_FONTBI:
                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:
                term_fontlast(p);
                break;
        case ESCAPE_FONTROMAN:
-       case ESCAPE_FONTCW:
+       case ESCAPE_FONTCR:
                term_fontrepl(p, TERMFONT_NONE);
                break;
        default:
                term_fontrepl(p, TERMFONT_NONE);
                break;
        default:
diff --git a/tbl.7 b/tbl.7
index e7953ea0a4e831001159b779b9796f32e755579b..d9d7dda7e9c528b6a7cab27129021747fe0af121 100644 (file)
--- a/tbl.7
+++ b/tbl.7
@@ -1,4 +1,4 @@
-.\"    $Id: tbl.7,v 1.34 2019/03/02 21:03:02 schwarze Exp $
+.\"    $Id: tbl.7,v 1.35 2021/08/10 12:55:04 schwarze Exp $
 .\"
 .\" Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
 .\" Copyright (c) 2014,2015,2017,2018,2019 Ingo Schwarze <schwarze@openbsd.org>
 .\"
 .\" Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
 .\" Copyright (c) 2014,2015,2017,2018,2019 Ingo Schwarze <schwarze@openbsd.org>
@@ -15,7 +15,7 @@
 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .\"
 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .\"
-.Dd $Mdocdate: March 2 2019 $
+.Dd $Mdocdate: August 10 2021 $
 .Dt TBL 7
 .Os
 .Sh NAME
 .Dt TBL 7
 .Os
 .Sh NAME
@@ -178,10 +178,11 @@ of any other column also having the
 .Cm e
 modifier.
 .It Cm f
 .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
 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
 .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 365ae929edf4548709505c7724839ac8969f86a4..0fccb440551c02619d04701112a01ac0075efa58 100644 (file)
--- a/tbl.h
+++ b/tbl.h
@@ -1,7 +1,7 @@
-/*     $Id: tbl.h,v 1.1 2018/12/12 21:54:35 schwarze Exp $ */
+/*     $Id: tbl.h,v 1.2 2021/08/10 12:55:04 schwarze Exp $ */
 /*
  * Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
 /*
  * 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
  *
  * 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;
        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 */
 #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;
 };
 
        enum tbl_cellt    pos;
 };
 
index cfc489bb4547ca4818327f31399d85237e2d5e1f..71768426e0b0a9a7f76d9ff1e0a0bcab8ac61eb5 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: tbl_data.c,v 1.55 2021/05/18 13:22:43 schwarze Exp $ */
+/*     $Id: tbl_data.c,v 1.56 2021/08/10 12:55:04 schwarze Exp $ */
 /*
  * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011,2015,2017-2019,2021 Ingo Schwarze <schwarze@openbsd.org>
 /*
  * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011,2015,2017-2019,2021 Ingo Schwarze <schwarze@openbsd.org>
@@ -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;
                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;
                        cp->spacing = SIZE_MAX;
                        dp->layout->last->next = cp;
                        cp->col = dp->layout->last->col + 1;
index 6e500dc598bee27700e1b36ba4090c7799e39a4f..ce03c6ac7f2c2075ea2ec4d6ec35d1a2d0a54e3f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: tbl_html.c,v 1.35 2021/05/16 23:18:35 schwarze Exp $ */
+/*     $Id: tbl_html.c,v 1.36 2021/08/10 12:55:04 schwarze Exp $ */
 /*
  * Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014,2015,2017,2018,2021 Ingo Schwarze <schwarze@openbsd.org>
 /*
  * Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014,2015,2017,2018,2021 Ingo Schwarze <schwarze@openbsd.org>
@@ -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;
                    "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);
                        if (dp->layout->pos == TBL_CELL_LONG)
                                print_text(h, "\\[u2003]");  /* em space */
                        print_text(h, dp->string);
index b25677a2c0469f7fb3143db3d94d8b92580c940c..171a8dbb1b4904e834be975d0c3eeabef105c92b 100644 (file)
@@ -1,7 +1,8 @@
-/*     $Id: tbl_layout.c,v 1.49 2020/09/01 18:25:28 schwarze Exp $ */
+/*     $Id: tbl_layout.c,v 1.50 2021/08/10 12:55:04 schwarze Exp $ */
 /*
  * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
 /*
  * 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
  *
  * 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;
        char            *endptr;
        unsigned long    spacing;
        size_t           sz;
+       int              isz;
+       enum mandoc_esc  fontesc;
 
 mod:
        while (p[*pos] == ' ' || p[*pos] == '\t')
 
 mod:
        while (p[*pos] == ' ' || p[*pos] == '\t')
@@ -105,7 +108,7 @@ mod:
 
        switch (tolower((unsigned char)p[(*pos)++])) {
        case 'b':
 
        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;
                goto mod;
        case 'd':
                cp->flags |= TBL_CELL_BALIGN;
@@ -116,7 +119,7 @@ mod:
        case 'f':
                break;
        case 'i':
        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");
                goto mod;
        case 'm':
                mandoc_msg(MANDOCERR_TBLLAYOUT_MOD, ln, *pos, "m");
@@ -170,40 +173,34 @@ mod:
                goto mod;
        }
 
                goto mod;
        }
 
+       while (p[*pos] == ' ' || p[*pos] == '\t')
+               (*pos)++;
+
        /* Ignore parenthised font names for now. */
 
        if (p[*pos] == '(')
                goto mod;
 
        /* 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);
                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:
        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
 }
 
 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 = mandoc_calloc(1, sizeof(*p));
        p->spacing = SIZE_MAX;
+       p->font = ESCAPE_FONTROMAN;
        p->pos = pos;
 
        if ((pp = rp->last) != NULL) {
        p->pos = pos;
 
        if ((pp = rp->last) != NULL) {
index 476d182e0af0454e040acfddadb2fc2f5b499a41..eac125586c4ddf4b2007ee16d9d027fb1607eb93 100644 (file)
@@ -1,7 +1,7 @@
-/*     $Id: tbl_term.c,v 1.74 2020/10/25 18:28:23 schwarze Exp $ */
+/*     $Id: tbl_term.c,v 1.75 2021/08/10 12:55:04 schwarze Exp $ */
 /*
  * Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
 /*
  * 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
  *
  * 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;
        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);
 
 
        term_word(tp, dp->string);
 
diff --git a/term.c b/term.c
index 3aa07694ea29ebf2a05a64d36f440470a002779a..fb0351d91f1d693c28ee0bcebaa2712a4f2d1a18 100644 (file)
--- a/term.c
+++ b/term.c
@@ -1,4 +1,4 @@
-/* $Id: term.c,v 1.282 2020/09/02 16:40:36 schwarze Exp $ */
+/* $Id: term.c,v 1.283 2021/08/10 12:55:04 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2020 Ingo Schwarze <schwarze@openbsd.org>
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2020 Ingo Schwarze <schwarze@openbsd.org>
@@ -589,16 +589,18 @@ term_word(struct termp *p, const char *word)
                        uc = *seq;
                        break;
                case ESCAPE_FONTBOLD:
                        uc = *seq;
                        break;
                case ESCAPE_FONTBOLD:
+               case ESCAPE_FONTCB:
                        term_fontrepl(p, TERMFONT_BOLD);
                        continue;
                case ESCAPE_FONTITALIC:
                        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:
                        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;
                case ESCAPE_FONTROMAN:
                        term_fontrepl(p, TERMFONT_NONE);
                        continue;
diff --git a/tree.c b/tree.c
index fb9df9d7d66b50f42197f1c756ff2a08d238b79e..961fc0828a5d553add1753cf4b57471eb3f43825 100644 (file)
--- a/tree.c
+++ b/tree.c
@@ -1,7 +1,7 @@
-/* $Id: tree.c,v 1.89 2020/04/08 11:56:04 schwarze Exp $ */
+/* $Id: tree.c,v 1.90 2021/08/10 12:55:04 schwarze Exp $ */
 /*
 /*
- * Copyright (c) 2013-2015, 2017-2020 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2008, 2009, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * 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
  *
  * 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);
                        else {
                                printf("%d", cp->col);
                                print_cellt(dp->layout->pos);
-                               if (cp->flags & TBL_CELL_BOLD)
+                               switch (cp->font) {
+                               case ESCAPE_FONTBOLD:
                                        putchar('b');
                                        putchar('b');
-                               if (cp->flags & TBL_CELL_ITALIC)
+                                       break;
+                               case ESCAPE_FONTITALIC:
                                        putchar('i');
                                        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)
                                if (cp->flags & TBL_CELL_TALIGN)
                                        putchar('t');
                                if (cp->flags & TBL_CELL_UP)