diff options
-rw-r--r-- | TODO | 3 | ||||
-rw-r--r-- | man_macro.c | 39 | ||||
-rw-r--r-- | man_term.c | 2 | ||||
-rw-r--r-- | regress/man/MT/args.in | 8 | ||||
-rw-r--r-- | regress/man/MT/args.out_ascii | 6 | ||||
-rw-r--r-- | regress/man/MT/args.out_lint | 10 | ||||
-rw-r--r-- | regress/man/UR/args.in | 8 | ||||
-rw-r--r-- | regress/man/UR/args.out_ascii | 7 | ||||
-rw-r--r-- | regress/man/UR/args.out_lint | 10 | ||||
-rw-r--r-- | tree.c | 2 |
10 files changed, 60 insertions, 35 deletions
@@ -172,9 +172,6 @@ are mere guesses, and some may be wrong. - .SY and .YS, used by many groff manual pages -- preserve punctuation following .ME, - see ditroff(7) for an example - - .TQ tagged paragraph continuation, see groff_diff(7) for examples diff --git a/man_macro.c b/man_macro.c index 58f647e4..22528219 100644 --- a/man_macro.c +++ b/man_macro.c @@ -1,7 +1,7 @@ /* $Id$ */ /* * 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 @@ -189,10 +189,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) { @@ -234,22 +234,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); } } @@ -884,6 +884,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; diff --git a/regress/man/MT/args.in b/regress/man/MT/args.in index c6ea1526..806e1a77 100644 --- a/regress/man/MT/args.in +++ b/regress/man/MT/args.in @@ -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" +.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 diff --git a/regress/man/MT/args.out_ascii b/regress/man/MT/args.out_ascii index 05939dcb..09dd4cd1 100644 --- a/regress/man/MT/args.out_ascii +++ b/regress/man/MT/args.out_ascii @@ -6,7 +6,9 @@ NNAAMMEE MT-args - argument handling of the man-ext mailto macro DDEESSCCRRIIPPTTIIOONN - 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 @@ DDEESSCCRRIIPPTTIIOONN -OpenBSD June 25, 2017 MT-ARGS(1) +OpenBSD August 13, 2018 MT-ARGS(1) diff --git a/regress/man/MT/args.out_lint b/regress/man/MT/args.out_lint index e94e63de..b06ec906 100644 --- a/regress/man/MT/args.out_lint +++ b/regress/man/MT/args.out_lint @@ -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 diff --git a/regress/man/UR/args.in b/regress/man/UR/args.in index 183269e8..9afbbee5 100644 --- a/regress/man/UR/args.in +++ b/regress/man/UR/args.in @@ -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" +.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/ diff --git a/regress/man/UR/args.out_ascii b/regress/man/UR/args.out_ascii index 9368974a..9b1d2ec3 100644 --- a/regress/man/UR/args.out_ascii +++ b/regress/man/UR/args.out_ascii @@ -6,7 +6,10 @@ NNAAMMEE UR-basic - argument handling of the man-ext URI macro DDEESSCCRRIIPPTTIIOONN - 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 @@ DDEESSCCRRIIPPTTIIOONN -OpenBSD October 17, 2013 UR-ARGS(1) +OpenBSD August 14, 2018 UR-ARGS(1) diff --git a/regress/man/UR/args.out_lint b/regress/man/UR/args.out_lint index 262c9886..b1525e0f 100644 --- a/regress/man/UR/args.out_lint +++ b/regress/man/UR/args.out_lint @@ -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 @@ -289,6 +289,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'); |