implement the GNU man-ext .SY/.YS (synopsis block) macro in man,
authorschwarze <schwarze@openbsd.org>
Sat, 18 Aug 2018 02:03:41 +0000 (02:03 +0000)
committerschwarze <schwarze@openbsd.org>
Sat, 18 Aug 2018 02:03:41 +0000 (02:03 +0000)
used in most manual pages of the groff package

share/man/man7/man.7
usr.bin/mandoc/man_html.c
usr.bin/mandoc/man_macro.c
usr.bin/mandoc/man_term.c
usr.bin/mandoc/man_validate.c
usr.bin/mandoc/roff.c
usr.bin/mandoc/roff.h

index db98800..faaaeca 100644 (file)
@@ -1,7 +1,8 @@
-.\"    $OpenBSD: man.7,v 1.50 2018/08/16 23:40:19 schwarze Exp $
+.\"    $OpenBSD: man.7,v 1.51 2018/08/18 02:03:41 schwarze Exp $
 .\"
 .\" Copyright (c) 2009, 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
-.\" Copyright (c) 2011-2015 Ingo Schwarze <schwarze@openbsd.org>
+.\" Copyright (c) 2011-2015, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
+.\" Copyright (c) 2017 Anthony Bentley <bentley@openbsd.org>
 .\" Copyright (c) 2010 Joerg Sonnenberger <joerg@netbsd.org>
 .\"
 .\" Permission to use, copy, modify, and distribute this software for any
@@ -16,7 +17,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: August 16 2018 $
+.Dd $Mdocdate: August 18 2018 $
 .Dt MAN 7
 .Os
 .Sh NAME
@@ -630,6 +631,18 @@ Begin a sub-section.
 The scope of a sub-section is closed by a subsequent sub-section,
 section, or end of file.
 The paragraph left-margin width is reset to the default.
+.Ss \&SY
+Begin a synopsis block with the following syntax:
+.Bd -unfilled -offset indent
+.Pf \. Sx \&SY Ar command
+.Ar arguments
+.Pf \. Sx \&YS
+.Ed
+.Pp
+This is a non-standard GNU extension
+and very rarely used even in GNU manual pages.
+Formatting is similar to
+.Sx \&IP .
 .Ss \&TH
 Sets the title of the manual page for use in the page header
 and footer with the following syntax:
@@ -718,6 +731,10 @@ It has the following syntax:
 link description to be shown
 .Pf \. Sx UE
 .Ed
+.Ss \&YS
+End a synopsis block started by
+.Pf \. Sx SY .
+This is a non-standard GNU extension.
 .Ss \&fi
 End literal mode begun by
 .Sx \&nf .
index 9f18670..a0ef1f7 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: man_html.c,v 1.108 2018/08/17 20:31:52 schwarze Exp $ */
+/*     $OpenBSD: man_html.c,v 1.109 2018/08/18 02:03:41 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2013,2014,2015,2017,2018 Ingo Schwarze <schwarze@openbsd.org>
@@ -59,6 +59,7 @@ static        int               man_RS_pre(MAN_ARGS);
 static int               man_SH_pre(MAN_ARGS);
 static int               man_SM_pre(MAN_ARGS);
 static int               man_SS_pre(MAN_ARGS);
+static int               man_SY_pre(MAN_ARGS);
 static int               man_UR_pre(MAN_ARGS);
 static int               man_alt_pre(MAN_ARGS);
 static int               man_ign_pre(MAN_ARGS);
@@ -99,6 +100,8 @@ static       const struct man_html_act man_html_acts[MAN_MAX - MAN_TH] = {
        { man_ign_pre, NULL }, /* PD */
        { man_ign_pre, NULL }, /* AT */
        { man_in_pre, NULL }, /* in */
+       { man_SY_pre, NULL }, /* SY */
+       { NULL, NULL }, /* YS */
        { man_OP_pre, NULL }, /* OP */
        { NULL, NULL }, /* EX */
        { NULL, NULL }, /* EE */
@@ -619,6 +622,27 @@ man_RS_pre(MAN_ARGS)
        return 1;
 }
 
+static int
+man_SY_pre(MAN_ARGS)
+{
+       switch (n->type) {
+       case ROFFT_BLOCK:
+               print_otag(h, TAG_TABLE, "c", "Nm");
+               print_otag(h, TAG_TR, "");
+               break;
+       case ROFFT_HEAD:
+               print_otag(h, TAG_TD, "");
+               print_otag(h, TAG_CODE, "cT", "Nm");
+               break;
+       case ROFFT_BODY:
+               print_otag(h, TAG_TD, "");
+               break;
+       default:
+               abort();
+       }
+       return 1;
+}
+
 static int
 man_UR_pre(MAN_ARGS)
 {
index 30c26ba..7e760ad 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: man_macro.c,v 1.89 2018/08/17 20:31:52 schwarze Exp $ */
+/*     $OpenBSD: man_macro.c,v 1.90 2018/08/18 02:03:41 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2012-2015, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
@@ -69,6 +69,8 @@ static const struct man_macro man_macros[MAN_MAX - MAN_TH] = {
        { in_line_eoln, MAN_NSCOPED }, /* PD */
        { in_line_eoln, 0 }, /* AT */
        { in_line_eoln, MAN_NSCOPED }, /* in */
+       { blk_exp, MAN_BSCOPE }, /* SY */
+       { blk_close, MAN_BSCOPE }, /* YS */
        { in_line_eoln, 0 }, /* OP */
        { in_line_eoln, MAN_BSCOPE }, /* EX */
        { in_line_eoln, MAN_BSCOPE }, /* EE */
@@ -221,6 +223,9 @@ blk_close(MACRO_PROT_ARGS)
                        return;
                }
                break;
+       case MAN_YS:
+               ntok = MAN_SY;
+               break;
        case MAN_UE:
                ntok = MAN_UR;
                break;
index d4a7708..bdcd51a 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: man_term.c,v 1.167 2018/08/17 20:31:52 schwarze Exp $ */
+/*     $OpenBSD: man_term.c,v 1.168 2018/08/18 02:03:41 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2015, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
@@ -76,6 +76,7 @@ static        int               pre_PP(DECL_ARGS);
 static int               pre_RS(DECL_ARGS);
 static int               pre_SH(DECL_ARGS);
 static int               pre_SS(DECL_ARGS);
+static int               pre_SY(DECL_ARGS);
 static int               pre_TP(DECL_ARGS);
 static int               pre_UR(DECL_ARGS);
 static int               pre_alternate(DECL_ARGS);
@@ -88,6 +89,7 @@ static        void              post_HP(DECL_ARGS);
 static void              post_RS(DECL_ARGS);
 static void              post_SH(DECL_ARGS);
 static void              post_SS(DECL_ARGS);
+static void              post_SY(DECL_ARGS);
 static void              post_TP(DECL_ARGS);
 static void              post_UR(DECL_ARGS);
 
@@ -122,6 +124,8 @@ static const struct man_term_act man_term_acts[MAN_MAX - MAN_TH] = {
        { pre_PD, NULL, MAN_NOTEXT }, /* PD */
        { pre_ign, NULL, 0 }, /* AT */
        { pre_in, NULL, MAN_NOTEXT }, /* in */
+       { pre_SY, post_SY, 0 }, /* SY */
+       { NULL, NULL, 0 }, /* YS */
        { pre_OP, NULL, 0 }, /* OP */
        { pre_literal, NULL, 0 }, /* EX */
        { pre_literal, NULL, 0 }, /* EE */
@@ -846,6 +850,62 @@ post_RS(DECL_ARGS)
                mt->lmargincur = mt->lmarginsz;
 }
 
+static int
+pre_SY(DECL_ARGS)
+{
+       const struct roff_node  *nn;
+       int                      len;
+
+       switch (n->type) {
+       case ROFFT_BLOCK:
+               print_bvspace(p, n, mt->pardist);
+               return 1;
+       case ROFFT_HEAD:
+       case ROFFT_BODY:
+               break;
+       default:
+               abort();
+       }
+
+       nn = n->parent->head->child;
+       len = nn == NULL ? 0 : term_strlen(p, nn->string) + 1;
+
+       switch (n->type) {
+       case ROFFT_HEAD:
+               p->tcol->offset = mt->offset;
+               p->tcol->rmargin = mt->offset + len;
+               p->flags |= TERMP_NOBREAK;
+               term_fontrepl(p, TERMFONT_BOLD);
+               break;
+       case ROFFT_BODY:
+               mt->lmargin[mt->lmargincur] = len;
+               p->tcol->offset = mt->offset + len;
+               p->tcol->rmargin = p->maxrmargin;
+               p->flags |= TERMP_NOSPACE;
+               break;
+       default:
+               abort();
+       }
+       return 1;
+}
+
+static void
+post_SY(DECL_ARGS)
+{
+       switch (n->type) {
+       case ROFFT_HEAD:
+               term_flushln(p);
+               p->flags &= ~TERMP_NOBREAK;
+               break;
+       case ROFFT_BODY:
+               term_newln(p);
+               p->tcol->offset = mt->offset;
+               break;
+       default:
+               break;
+       }
+}
+
 static int
 pre_UR(DECL_ARGS)
 {
index 01e38bc..c0d1a6f 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: man_validate.c,v 1.107 2018/08/16 23:40:19 schwarze Exp $ */
+/*     $OpenBSD: man_validate.c,v 1.108 2018/08/18 02:03:41 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2012-2018 Ingo Schwarze <schwarze@openbsd.org>
@@ -83,6 +83,8 @@ static        const v_check man_valids[MAN_MAX - MAN_TH] = {
        NULL,       /* PD */
        post_AT,    /* AT */
        post_in,    /* in */
+       NULL,       /* SY */
+       NULL,       /* YS */
        post_OP,    /* OP */
        NULL,       /* EX */
        NULL,       /* EE */
index c2f6f98..364c6b1 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: roff.c,v 1.204 2018/08/16 23:40:19 schwarze Exp $ */
+/*     $OpenBSD: roff.c,v 1.205 2018/08/18 02:03:41 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2015, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
@@ -333,7 +333,8 @@ const char *__roff_name[MAN_MAX + 1] = {
        "nf",           "fi",
        "RE",           "RS",           "DT",           "UC",
        "PD",           "AT",           "in",
-       "OP",           "EX",           "EE",           "UR",
+       "SY",           "YS",           "OP",
+       "EX",           "EE",           "UR",
        "UE",           "MT",           "ME",           NULL
 };
 const  char *const *roff_name = __roff_name;
index 1c5fd05..3fa3536 100644 (file)
@@ -1,7 +1,7 @@
-/*     $OpenBSD: roff.h,v 1.42 2018/08/16 23:40:19 schwarze Exp $      */
+/*     $OpenBSD: roff.h,v 1.43 2018/08/18 02:03:41 schwarze Exp $      */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2013,2014,2015,2017,2018 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
@@ -464,6 +464,8 @@ enum        roff_tok {
        MAN_PD,
        MAN_AT,
        MAN_in,
+       MAN_SY,
+       MAN_YS,
        MAN_OP,
        MAN_EX,
        MAN_EE,