The branch stable/14 has been updated by ziaee:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=d0b23791c6677c3cc03d9e315beb66e8b4de717a

commit d0b23791c6677c3cc03d9e315beb66e8b4de717a
Author:     Alexander Ziaee <zi...@freebsd.org>
AuthorDate: 2025-06-25 17:50:25 +0000
Commit:     Alexander Ziaee <zi...@freebsd.org>
CommitDate: 2025-07-14 16:44:45 +0000

    mandoc: Vendor import of upstream at 2025-06-13
    
    Interesting changes:
    + Lb is now part of SNYOPSIS, the LIBRARY section is deprecated
    + Ft now takes multiple args, and no longer should be quoted
    + Fix a segfaut on malformed Tg markup
    
    (cherry picked from commit 4c07abdbacf49e4ba749b8720916d8cd340a50b8)
---
 contrib/mandoc/mandocdb.c      |  27 ++++++++--
 contrib/mandoc/mdoc.7          | 109 +++++++++++++++++++++++------------------
 contrib/mandoc/mdoc_macro.c    |   7 ++-
 contrib/mandoc/mdoc_validate.c |  37 +++++++++++---
 4 files changed, 117 insertions(+), 63 deletions(-)

diff --git a/contrib/mandoc/mandocdb.c b/contrib/mandoc/mandocdb.c
index c26a38a5f233..e8455588d225 100644
--- a/contrib/mandoc/mandocdb.c
+++ b/contrib/mandoc/mandocdb.c
@@ -1,6 +1,6 @@
-/* $Id: mandocdb.c,v 1.274 2024/05/14 21:19:12 schwarze Exp $ */
+/* $Id: mandocdb.c,v 1.275 2025/06/05 12:33:41 schwarze Exp $ */
 /*
- * Copyright (c) 2011-2021, 2024 Ingo Schwarze <schwa...@openbsd.org>
+ * Copyright (c) 2011-2021, 2024, 2025 Ingo Schwarze <schwa...@openbsd.org>
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <krist...@bsd.lv>
  * Copyright (c) 2016 Ed Maste <ema...@freebsd.org>
  *
@@ -151,6 +151,8 @@ static      int      parse_mdoc_Fn(struct mpage *, const 
struct roff_meta *,
                        const struct roff_node *);
 static int      parse_mdoc_Fo(struct mpage *, const struct roff_meta *,
                        const struct roff_node *);
+static int      parse_mdoc_Lb(struct mpage *, const struct roff_meta *,
+                       const struct roff_node *);
 static int      parse_mdoc_Nd(struct mpage *, const struct roff_meta *,
                        const struct roff_node *);
 static int      parse_mdoc_Nm(struct mpage *, const struct roff_meta *,
@@ -299,7 +301,7 @@ static      const struct mdoc_handler 
mdoc_handlers[MDOC_MAX - MDOC_Dd] = {
        { NULL, 0, 0 },  /* Hf */
        { NULL, 0, 0 },  /* Fr */
        { NULL, 0, 0 },  /* Ud */
-       { NULL, TYPE_Lb, NODE_NOSRC },  /* Lb */
+       { parse_mdoc_Lb, 0, 0 },  /* Lb */
        { NULL, 0, 0 },  /* Lp */
        { NULL, TYPE_Lk, 0 },  /* Lk */
        { NULL, TYPE_Mt, NODE_NOSRC },  /* Mt */
@@ -1753,6 +1755,25 @@ parse_mdoc_Fo(struct mpage *mpage, const struct 
roff_meta *meta,
        return 0;
 }
 
+static int
+parse_mdoc_Lb(struct mpage *mpage, const struct roff_meta *meta,
+       const struct roff_node *n)
+{
+       char *cp;
+
+       for (n = n->child; n != NULL; n = n->next) {
+               if (n->flags & NODE_NOSRC)
+                       continue;
+               cp = n->string;
+               if (n->sec == SEC_SYNOPSIS)
+                       mandoc_asprintf(&cp, "lib%s", cp);
+               putkey(mpage, cp, TYPE_Lb);
+               if (n->sec == SEC_SYNOPSIS)
+                       free(cp);
+       }
+       return 0;
+}
+
 static int
 parse_mdoc_Va(struct mpage *mpage, const struct roff_meta *meta,
        const struct roff_node *n)
diff --git a/contrib/mandoc/mdoc.7 b/contrib/mandoc/mdoc.7
index edd74eafa328..55cc7fae688d 100644
--- a/contrib/mandoc/mdoc.7
+++ b/contrib/mandoc/mdoc.7
@@ -1,7 +1,7 @@
-.\" $Id: mdoc.7,v 1.296 2025/01/27 03:17:33 schwarze Exp $
+.\" $Id: mdoc.7,v 1.299 2025/06/13 16:18:28 schwarze Exp $
 .\"
+.\" Copyright (c) 2010-2021, 2024, 2025 Ingo Schwarze <schwa...@openbsd.org>
 .\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <krist...@bsd.lv>
-.\" Copyright (c) 2010, 2011, 2013-2020 Ingo Schwarze <schwa...@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
@@ -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.
 .\"
-.Dd $Mdocdate: January 27 2025 $
+.Dd $Mdocdate: June 13 2025 $
 .Dt MDOC 7
 .Os
 .Sh NAME
@@ -195,15 +195,13 @@ See
 and
 .Ic \&Nd .
 .It Em LIBRARY
-The name of the library containing the documented material, which is
-assumed to be a function in a section 2, 3, or 9 manual.
-The syntax for this is as follows:
-.Bd -literal -offset indent
-\&.Lb libarm
-.Ed
-.Pp
-See
-.Ic \&Lb .
+The name of the library containing the documented functions.
+Using this section is no longer recommended.
+If any
+.Ic \&Lb
+macro is needed, put it at the beginning of the
+.Em SYNOPSIS
+section instead.
 .It Em SYNOPSIS
 Documents the utility invocation syntax, function call syntax, or device
 configuration.
@@ -225,11 +223,12 @@ Commands should be ordered alphabetically.
 .Pp
 For the second, function calls (sections 2, 3, 9):
 .Bd -literal -offset indent
+\&.Lb libname \e" unless the functions are in libc
 \&.In header.h
 \&.Vt extern const char *global;
-\&.Ft "char *"
+\&.Ft char *
 \&.Fn foo "const char *src"
-\&.Ft "char *"
+\&.Ft char *
 \&.Fn bar "const char *src"
 .Ed
 .Pp
@@ -467,7 +466,8 @@ in the alphabetical
 .Op Fl compact
 .It Ic \&D1 Ta indented display (one line)
 .It Ic \&Dl Ta indented literal display (one line)
-.It Ic \&Ql Ta in-line literal display: Ql text
+.It Ic \&Ql Ta normal in-line literal display: Ql text
+.It Ic \&Li Ta unquoted in-line literal display: Li text
 .It Ic \&Bl , \&El Ta list block:
 .Fl Ar type
 .Op Fl width Ar val
@@ -498,7 +498,7 @@ in the alphabetical
 .El
 .Ss Semantic markup for function libraries
 .Bl -column "Brq, Bro, Brc" description
-.It Ic \&Lb Ta function library (one argument)
+.It Ic \&Lb Ta function library (>0 arguments)
 .It Ic \&In Ta include file (one argument)
 .It Ic \&Fd Ta other preprocessor directive (>0 arguments)
 .It Ic \&Ft Ta function type (>0 arguments)
@@ -1277,9 +1277,9 @@ and
 .Ic \&Os .
 .Tg Dl
 .It Ic \&Dl Ar line
-One-line indented display.
-This is formatted as literal text and is useful for commands and
-invocations.
+One-line indented literal display.
+This is formatted using a constant-width font
+and is useful for commands and invocations.
 It is followed by a newline.
 .Pp
 Examples:
@@ -1867,34 +1867,45 @@ but not the whitespace before the semicolon.
 See also
 .Ic \&Bl .
 .Tg Lb
-.It Ic \&Lb Cm lib Ns Ar name
-Specify a library.
-.Pp
-The
-.Ar name
-parameter may be a system library, such as
-.Cm z
-or
-.Cm pam ,
-in which case a small library description is printed next to the linker
-invocation; or a custom library, in which case the library name is
-printed in quotes.
-This is most commonly used in the
+.It Ic \&Lb Cm lib Ns Ar name Op Cm lib Ns Ar name ...
+Specify one or more libraries to link against.
+Putting this macro at the beginning of the
 .Em SYNOPSIS
-section as described in
-.Sx MANUAL STRUCTURE .
+section is recommended, in which case it prints this comment:
+.D1 /* Fl l Ns Ar name Oo Fl l Ns Ar name ... Oc */
 .Pp
-Examples:
-.Dl \&.Lb libz
-.Dl \&.Lb libmandoc
+If used outside the
+.Em SYNOPSIS ,
+this macro prints
+.D1 library Dq Cm lib Ns Ar name
+instead.
+For system libraries, some operating systems
+print a short library description.
+.Pp
+Example:
+.Bd -literal -offset indent -compact
+\&.Sh SYNOPSIS
+\&.Lb libtls libssl libcrypto
+\&.In tls.h
+\&.Ft int
+\&.Fn tls_init void
+.Ed
 .Tg Li
 .It Ic \&Li Ar word ...
-Request a typewriter (literal) font.
-Deprecated because on terminal output devices, this is usually
-indistinguishable from normal text.
-For literal displays, use
-.Ic \&Ql Pq in-line ,
-.Ic \&Dl Pq single line ,
+Unquoted in-line literal display, always set in a constant-width font.
+In most cases, use
+.Ic \&Ql
+instead because on terminal output devices,
+.Ic \&Li
+is usually indistinguishable from normal text.
+This macro is only useful when enclosing the argument in quotes
+is explicitly not desired, for example because it already stands out
+due to being wrapped in another macro, e.g. in an
+.Ic \&It
+head.
+.Pp
+For longer literal displays, use
+.Ic \&Dl Pq single line
 or
 .Ic \&Bd Fl literal Pq multi-line
 instead.
@@ -2207,15 +2218,17 @@ Close quoted context opened by
 .Ic \&Qo .
 .Tg Ql
 .It Ic \&Ql Ar line
-In-line literal display.
+Normal in-line literal display, always set in constant-width font and
+additionally enclosed in quotes by many formatters in many cases.
 This can be used for complete command invocations and for multi-word
 code examples when an indented display is not desired.
 .Pp
 See also
-.Ic \&Dl
-and
+.Ic \&Dl ,
 .Ic \&Bd
-.Fl literal .
+.Fl literal ,
+and
+.Ic \&Li .
 .It Ic \&Qo Ar block
 Multi-line version of
 .Ic \&Qq .
@@ -3031,7 +3044,7 @@ then the macro accepts an arbitrary number of arguments.
 .It Ic \&Hf  Ta    \&No     Ta    \&No     Ta    n
 .It Ic \&Ic  Ta    Yes      Ta    Yes      Ta    >0
 .It Ic \&In  Ta    Yes      Ta    Yes      Ta    1
-.It Ic \&Lb  Ta    \&No     Ta    \&No     Ta    1
+.It Ic \&Lb  Ta    \&No     Ta    \&No     Ta    >0
 .It Ic \&Li  Ta    Yes      Ta    Yes      Ta    >0
 .It Ic \&Lk  Ta    Yes      Ta    Yes      Ta    >0
 .It Ic \&Lp  Ta    \&No     Ta    \&No     Ta    0
diff --git a/contrib/mandoc/mdoc_macro.c b/contrib/mandoc/mdoc_macro.c
index 889b80a64a68..14b1ba0d228a 100644
--- a/contrib/mandoc/mdoc_macro.c
+++ b/contrib/mandoc/mdoc_macro.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_macro.c,v 1.235 2022/04/14 16:43:44 schwarze Exp $ */
+/* $Id: mdoc_macro.c,v 1.237 2025/06/13 14:24:56 schwarze Exp $ */
 /*
  * Copyright (c) 2010, 2012-2021 Ingo Schwarze <schwa...@openbsd.org>
  * Copyright (c) 2008-2012 Kristaps Dzonsons <krist...@bsd.lv>
@@ -92,7 +92,7 @@ static const struct mdoc_macro mdoc_macros[MDOC_MAX - 
MDOC_Dd] = {
        { in_line_eoln, 0 }, /* Fd */
        { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Fl */
        { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Fn */
-       { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Ft */
+       { in_line, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Ft */
        { in_line, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Ic */
        { in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* In */
        { in_line, MDOC_CALLABLE | MDOC_PARSED | MDOC_JOIN }, /* Li */
@@ -448,8 +448,7 @@ dword(struct roff_man *mdoc, int line, int col, const char 
*p,
        if (d == DELIM_MAX)
                d = mdoc_isdelim(p);
 
-       if (may_append &&
-           ! (mdoc->flags & (MDOC_SYNOPSIS | MDOC_KEEP | MDOC_SMOFF)) &&
+       if (may_append && ! (mdoc->flags & (MDOC_KEEP | MDOC_SMOFF)) &&
            d == DELIM_NONE && mdoc->last->type == ROFFT_TEXT &&
            mdoc_isdelim(mdoc->last->string) == DELIM_NONE) {
                roff_word_append(mdoc, p);
diff --git a/contrib/mandoc/mdoc_validate.c b/contrib/mandoc/mdoc_validate.c
index 5271dfb523b9..4ca1253e4b70 100644
--- a/contrib/mandoc/mdoc_validate.c
+++ b/contrib/mandoc/mdoc_validate.c
@@ -1,6 +1,6 @@
-/* $Id: mdoc_validate.c,v 1.391 2022/06/08 16:31:46 schwarze Exp $ */
+/* $Id: mdoc_validate.c,v 1.393 2025/06/05 12:38:26 schwarze Exp $ */
 /*
- * Copyright (c) 2010-2021 Ingo Schwarze <schwa...@openbsd.org>
+ * Copyright (c) 2010-2022, 2025 Ingo Schwarze <schwa...@openbsd.org>
  * Copyright (c) 2008-2012 Kristaps Dzonsons <krist...@bsd.lv>
  * Copyright (c) 2010 Joerg Sonnenberger <jo...@netbsd.org>
  *
@@ -991,18 +991,39 @@ post_ex(POST_ARGS)
 static void
 post_lb(POST_ARGS)
 {
-       struct roff_node        *n;
-       const char              *p;
+       struct roff_node        *n, *nch;
+       const char              *ccp;
+       char                    *cp;
 
        post_delim_nb(mdoc);
 
        n = mdoc->last;
-       assert(n->child->type == ROFFT_TEXT);
+       nch = n->child;
+       assert(nch->type == ROFFT_TEXT);
        mdoc->next = ROFF_NEXT_CHILD;
 
-       if ((p = mdoc_a2lib(n->child->string)) != NULL) {
+       if (n->sec == SEC_SYNOPSIS) {
+               roff_word_alloc(mdoc, n->line, n->pos, "/*");
+               mdoc->last->flags = NODE_NOSRC;
+               while (nch != NULL) {
+                       roff_word_alloc(mdoc, n->line, n->pos, "-l");
+                       mdoc->last->flags = NODE_DELIMO | NODE_NOSRC;
+                       mdoc->last = nch;
+                       assert(nch->type == ROFFT_TEXT);
+                       cp = nch->string;
+                       if (strncmp(cp, "lib", 3) == 0)
+                               memmove(cp, cp + 3, strlen(cp) - 3 + 1);
+                       nch = nch->next;
+               }
+               roff_word_alloc(mdoc, n->line, n->pos, "*/");
+               mdoc->last->flags = NODE_NOSRC;
+               mdoc->last = n;
+               return;
+       }
+
+       if ((ccp = mdoc_a2lib(n->child->string)) != NULL) {
                n->child->flags |= NODE_NOPRT;
-               roff_word_alloc(mdoc, n->line, n->pos, p);
+               roff_word_alloc(mdoc, n->line, n->pos, ccp);
                mdoc->last->flags = NODE_NOSRC;
                mdoc->last = n;
                return;
@@ -3101,6 +3122,6 @@ macro2len(enum roff_tok macro)
                return 10;
        default:
                break;
-       };
+       }
        return 0;
 }

Reply via email to