support tail arguments on the .ME and .UE macros,
authorschwarze <schwarze@openbsd.org>
Tue, 14 Aug 2018 01:26:12 +0000 (01:26 +0000)
committerschwarze <schwarze@openbsd.org>
Tue, 14 Aug 2018 01:26:12 +0000 (01:26 +0000)
used for example in the ditroff(7) manual of the groff package

regress/usr.bin/mandoc/man/MT/args.in
regress/usr.bin/mandoc/man/MT/args.out_ascii
regress/usr.bin/mandoc/man/MT/args.out_lint
regress/usr.bin/mandoc/man/UR/args.in
regress/usr.bin/mandoc/man/UR/args.out_ascii
regress/usr.bin/mandoc/man/UR/args.out_lint
usr.bin/mandoc/man_macro.c
usr.bin/mandoc/man_term.c
usr.bin/mandoc/tree.c

index c6ea152..591464f 100644 (file)
@@ -1,13 +1,19 @@
-.\" $OpenBSD: args.in,v 1.2 2017/07/04 14:53:23 schwarze Exp $
-.TH MT-ARGS 1 "June 25, 2017"
+.\" $OpenBSD: args.in,v 1.3 2018/08/14 01:26:12 schwarze Exp $
+.TH MT-ARGS 1 "August 13, 2018"
 .SH NAME
 MT-args \- argument handling of the man-ext mailto macro
 .SH DESCRIPTION
+argument, text, and tail:
+.MT test@example.com
+text
+.ME tail args
+.PP
 argument plus text:
 .MT test@example.com
 invalid
 address
 .ME
+next line
 .PP
 argument but no text:
 .MT test@example.com
index 05939dc..09dd4cd 100644 (file)
@@ -6,7 +6,9 @@ N\bNA\bAM\bME\bE
        MT-args - argument handling of the man-ext mailto macro
 
 D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
-       argument plus text: invalid address <test@example.com>
+       argument, text, and tail: text <test@example.com>tail args
+
+       argument plus text: invalid address <test@example.com> next line
 
        argument but no text: <test@example.com>
 
@@ -20,4 +22,4 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
 
 
 
-OpenBSD                          June 25, 2017                      MT-ARGS(1)
+OpenBSD                         August 13, 2018                     MT-ARGS(1)
index e94e63d..b06ec90 100644 (file)
@@ -1,5 +1,5 @@
-mandoc: args.in:22:11: ERROR: skipping excess arguments: MT ... second
-mandoc: args.in:27:11: ERROR: skipping excess arguments: MT ... second
-mandoc: args.in:13:2: WARNING: empty block: MT
-mandoc: args.in:17:2: WARNING: missing resource identifier, using "": MT
-mandoc: args.in:27:2: WARNING: empty block: MT
+mandoc: args.in:28:11: ERROR: skipping excess arguments: MT ... second
+mandoc: args.in:33:11: ERROR: skipping excess arguments: MT ... second
+mandoc: args.in:19:2: WARNING: empty block: MT
+mandoc: args.in:23:2: WARNING: missing resource identifier, using "": MT
+mandoc: args.in:33:2: WARNING: empty block: MT
index 183269e..16330b9 100644 (file)
@@ -1,13 +1,19 @@
-.\" $OpenBSD: args.in,v 1.2 2017/07/04 14:53:24 schwarze Exp $
-.TH UR-ARGS 1 "October 17, 2013"
+.\" $OpenBSD: args.in,v 1.3 2018/08/14 01:26:12 schwarze Exp $
+.TH UR-ARGS 1 "August 14, 2018"
 .SH NAME
 UR-basic \- argument handling of the man-ext URI macro
 .SH DESCRIPTION
+argument, text, and tail:
+.UR http://www.openbsd.org/
+text
+.UE tail argument
+.PP
 argument plus text:
 .UR http://www.openbsd.org/
 OpenBSD
 homepage
 .UE
+next line
 .PP
 argument but no text:
 .UR http://www.netbsd.org/
index 9368974..9b1d2ec 100644 (file)
@@ -6,7 +6,10 @@ N\bNA\bAM\bME\bE
        UR-basic - argument handling of the man-ext URI macro
 
 D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
-       argument plus text: OpenBSD homepage <http://www.openbsd.org/>
+       argument, text, and tail: text <http://www.openbsd.org/>tail argument
+
+       argument plus text: OpenBSD homepage <http://www.openbsd.org/> next
+       line
 
        argument but no text: <http://www.netbsd.org/>
 
@@ -20,4 +23,4 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
 
 
 
-OpenBSD                        October 17, 2013                     UR-ARGS(1)
+OpenBSD                         August 14, 2018                     UR-ARGS(1)
index 262c988..b1525e0 100644 (file)
@@ -1,5 +1,5 @@
-mandoc: args.in:22:11: ERROR: skipping excess arguments: UR ... second
-mandoc: args.in:27:11: ERROR: skipping excess arguments: UR ... second
-mandoc: args.in:13:2: WARNING: empty block: UR
-mandoc: args.in:17:2: WARNING: missing resource identifier, using "": UR
-mandoc: args.in:27:2: WARNING: empty block: UR
+mandoc: args.in:28:11: ERROR: skipping excess arguments: UR ... second
+mandoc: args.in:33:11: ERROR: skipping excess arguments: UR ... second
+mandoc: args.in:19:2: WARNING: empty block: UR
+mandoc: args.in:23:2: WARNING: missing resource identifier, using "": UR
+mandoc: args.in:33:2: WARNING: empty block: UR
index 8ee22eb..737f393 100644 (file)
@@ -1,7 +1,7 @@
-/*     $OpenBSD: man_macro.c,v 1.85 2017/06/25 07:23:53 bentley Exp $ */
+/*     $OpenBSD: man_macro.c,v 1.86 2018/08/14 01:26:12 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2012-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2012-2015, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2013 Franco Fichtner <franco@lastsummer.de>
  *
  * Permission to use, copy, modify, and distribute this software for any
@@ -187,10 +187,10 @@ rew_scope(struct roff_man *man, enum roff_tok tok)
 void
 blk_close(MACRO_PROT_ARGS)
 {
-       enum roff_tok            ntok;
+       enum roff_tok            ctok, ntok;
        const struct roff_node  *nn;
        char                    *p;
-       int                      nrew, target;
+       int                      cline, cpos, nrew, target;
 
        nrew = 1;
        switch (tok) {
@@ -232,22 +232,29 @@ blk_close(MACRO_PROT_ARGS)
                mandoc_msg(MANDOCERR_BLK_NOTOPEN, man->parse,
                    line, ppos, roff_name[tok]);
                rew_scope(man, MAN_PP);
-       } else {
-               line = man->last->line;
-               ppos = man->last->pos;
-               ntok = man->last->tok;
-               man_unscope(man, nn);
+               return;
+       }
 
-               if (tok == MAN_RE && nn->head->aux > 0)
-                       roff_setreg(man->roff, "an-margin",
-                           nn->head->aux, '-');
+       cline = man->last->line;
+       cpos = man->last->pos;
+       ctok = man->last->tok;
+       man_unscope(man, nn);
 
-               /* Move a trailing paragraph behind the block. */
+       if (tok == MAN_RE && nn->head->aux > 0)
+               roff_setreg(man->roff, "an-margin", nn->head->aux, '-');
 
-               if (ntok == MAN_LP || ntok == MAN_PP || ntok == MAN_P) {
-                       *pos = strlen(buf);
-                       blk_imp(man, ntok, line, ppos, pos, buf);
-               }
+       /* Trailing text. */
+
+       if (buf[*pos] != '\0') {
+               roff_word_alloc(man, line, ppos, buf + *pos);
+               man->last->flags |= NODE_DELIMC;
+       }
+
+       /* Move a trailing paragraph behind the block. */
+
+       if (ctok == MAN_LP || ctok == MAN_PP || ctok == MAN_P) {
+               *pos = strlen(buf);
+               blk_imp(man, ctok, line, ppos, pos, buf);
        }
 }
 
index aff828f..6197f65 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: man_term.c,v 1.164 2018/06/10 15:12:32 schwarze Exp $ */
+/*     $OpenBSD: man_term.c,v 1.165 2018/08/14 01:26:12 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2015, 2017, 2018 Ingo Schwarze <schwarze@openbsd.org>
@@ -882,6 +882,8 @@ print_man_node(DECL_ARGS)
                } else if (*n->string == ' ' && n->flags & NODE_LINE &&
                    (p->flags & TERMP_NONEWLINE) == 0)
                        term_newln(p);
+               else if (n->flags & NODE_DELIMC)
+                       p->flags |= TERMP_NOSPACE;
 
                term_word(p, n->string);
                goto out;
index 65c23c8..00f7cb1 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: tree.c,v 1.45 2018/04/11 17:10:35 schwarze Exp $ */
+/*     $OpenBSD: tree.c,v 1.46 2018/08/14 01:26:12 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2013,2014,2015,2017,2018 Ingo Schwarze <schwarze@openbsd.org>
@@ -287,6 +287,8 @@ print_man(const struct roff_node *n, int indent)
                if (NODE_LINE & n->flags)
                        putchar('*');
                printf("%d:%d", n->line, n->pos + 1);
+               if (NODE_DELIMC & n->flags)
+                       putchar(')');
                if (NODE_EOS & n->flags)
                        putchar('.');
                putchar('\n');