tech@mandoc.bsd.lv
 help / color / mirror / Atom feed
From: "Anthony J. Bentley" <anthony@anjbe.name>
To: Ingo Schwarze <schwarze@usta.de>
Cc: tech@mdocml.bsd.lv
Subject: Re: MT and ME macros
Date: Sat, 24 Jun 2017 01:31:37 -0600	[thread overview]
Message-ID: <61002.1498289497@cathet.us> (raw)
In-Reply-To: <20170623134418.GA89450@athene.usta.de>

Hi Ingo,

Ingo Schwarze writes:
> you have OpenBSD but not bsd.lv commit access, right?
> So you should better send patches against OpenBSD, such that
> i can provide proper OKs.

Sure. I only diffed against bsd.lv since man(7) is in the same
directory there.

> > - UR prints < >, not \(la \(ra. (Sigh...)
> 
> Admittedly, groff prints \(la and \(ra for both .UR and .MT.
> For .MT, that is clearly wrong.  The SMTP RFC syntax for the
> SMTP From:, To:, etc. lines requires the ASCII characters for
> enclosing the email address.  So we should send a patch to groff.
> Do you agree?

Yes.

> Regarding .UR, i'm on the fence.  The is no formal syntax of any
> kind for enclosing URIs in angle brackets, or is there?  If there
> isn't, then maybe typographic angle brackets look nicer than ASCII
> ones.  Then again, i tend to value consistency with .MT more than
> that, so maybe i'd rather move .UR to ASCII delimiters in groff.
> But that should be a separate patch sent to groff because it's
> maybe more contentious.  Do you agree?

I don't think typographic angle brackets necessarily look nicer. With
typographic double quotes, there are literally centuries of precedent,
and ASCII's limitations were a step backward in terms of print quality.
But I'm not aware of any precedent for using typographic angle brackets
around URIs.

RFC 2396 and https://www.w3.org/Addressing/URL/5.1_Wrappers.html both
make passing reference to angle brackets, but are clearly referring only
to < >.

So I would prefer this to be changed in groff as well. It shouldn't be
contentious, as UR and MT are clearly related macros.

> Do you want to rework your patch according to the hints below,
> in order to ultimately commit it yourself?

Yes. Take 2:

Index: share/man/man7/man.7
===================================================================
RCS file: /cvs/src/share/man/man7/man.7,v
retrieving revision 1.47
diff -u -p -r1.47 man.7
--- share/man/man7/man.7	7 May 2017 21:44:33 -0000	1.47
+++ share/man/man7/man.7	24 Jun 2017 07:24:38 -0000
@@ -466,6 +466,20 @@ See also
 .Sx \&PP ,
 and
 .Sx \&TP .
+.Ss \&ME
+End a mailto block.
+This is a non-standard GNU extension, included only for compatibility.
+See
+.Sx \&MT .
+.Ss \&MT
+Begin a mailto block.
+This is a non-standard GNU extension, included only for compatibility.
+It has the following syntax:
+.Bd -literal -offset indent
+.Pf \. Sx \&MT Ar address
+link description to be shown
+.Pf \. Sx ME
+.Ed
 .Ss \&OP
 Optional command-line argument.
 This is a non-standard GNU extension, included only for compatibility.
Index: usr.bin/mandoc/man_html.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/man_html.c,v
retrieving revision 1.96
diff -u -p -r1.96 man_html.c
--- usr.bin/mandoc/man_html.c	8 Jun 2017 12:54:40 -0000	1.96
+++ usr.bin/mandoc/man_html.c	24 Jun 2017 07:24:38 -0000
@@ -103,6 +103,8 @@ static	const struct htmlman __mans[MAN_M
 	{ NULL, NULL }, /* EE */
 	{ man_UR_pre, NULL }, /* UR */
 	{ NULL, NULL }, /* UE */
+	{ man_UR_pre, NULL }, /* MT */
+	{ NULL, NULL }, /* ME */
 };
 static	const struct htmlman *const mans = __mans - MAN_TH;
 
@@ -227,6 +229,7 @@ print_man_node(MAN_ARGS)
 		case MAN_P:   /* reopen .nf in the body.	*/
 		case MAN_RS:
 		case MAN_UR:
+		case MAN_MT:
 			fillmode(h, MAN_fi);
 			break;
 		default:
@@ -641,11 +644,17 @@ man_RS_pre(MAN_ARGS)
 static int
 man_UR_pre(MAN_ARGS)
 {
+	char *cp;
 	n = n->child;
 	assert(n->type == ROFFT_HEAD);
 	if (n->child != NULL) {
 		assert(n->child->type == ROFFT_TEXT);
-		print_otag(h, TAG_A, "cTh", "Lk", n->child->string);
+		if (n->tok == MAN_MT) {
+			mandoc_asprintf(&cp, "mailto:%s", n->child->string);
+			print_otag(h, TAG_A, "cTh", "Mt", cp);
+			free(cp);
+		} else
+			print_otag(h, TAG_A, "cTh", "Lk", n->child->string);
 	}
 
 	assert(n->next->type == ROFFT_BODY);
Index: usr.bin/mandoc/man_macro.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/man_macro.c,v
retrieving revision 1.84
diff -u -p -r1.84 man_macro.c
--- usr.bin/mandoc/man_macro.c	17 Jun 2017 16:47:29 -0000	1.84
+++ usr.bin/mandoc/man_macro.c	24 Jun 2017 07:24:38 -0000
@@ -73,6 +73,8 @@ const	struct man_macro __man_macros[MAN_
 	{ in_line_eoln, MAN_BSCOPE }, /* EE */
 	{ blk_exp, MAN_BSCOPE }, /* UR */
 	{ blk_close, MAN_BSCOPE }, /* UE */
+	{ blk_exp, MAN_BSCOPE }, /* MT */
+	{ blk_close, MAN_BSCOPE }, /* ME */
 };
 const	struct man_macro *const man_macros = __man_macros - MAN_TH;
 
@@ -214,6 +216,9 @@ blk_close(MACRO_PROT_ARGS)
 		break;
 	case MAN_UE:
 		ntok = MAN_UR;
+		break;
+	case MAN_ME:
+		ntok = MAN_MT;
 		break;
 	default:
 		abort();
Index: usr.bin/mandoc/man_term.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/man_term.c,v
retrieving revision 1.160
diff -u -p -r1.160 man_term.c
--- usr.bin/mandoc/man_term.c	17 Jun 2017 13:05:47 -0000	1.160
+++ usr.bin/mandoc/man_term.c	24 Jun 2017 07:24:38 -0000
@@ -126,6 +126,8 @@ static	const struct termact __termacts[M
 	{ pre_literal, NULL, 0 }, /* EE */
 	{ pre_UR, post_UR, 0 }, /* UR */
 	{ NULL, NULL, 0 }, /* UE */
+	{ pre_UR, post_UR, 0 }, /* MT */
+	{ NULL, NULL, 0 }, /* ME */
 };
 static	const struct termact *termacts = __termacts - MAN_TH;
 
Index: usr.bin/mandoc/man_validate.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/man_validate.c,v
retrieving revision 1.101
diff -u -p -r1.101 man_validate.c
--- usr.bin/mandoc/man_validate.c	17 Jun 2017 22:40:27 -0000	1.101
+++ usr.bin/mandoc/man_validate.c	24 Jun 2017 07:24:38 -0000
@@ -87,6 +87,8 @@ static	const v_check __man_valids[MAN_MA
 	NULL,       /* EE */
 	post_UR,    /* UR */
 	NULL,       /* UE */
+	post_UR,    /* MT */
+	NULL,       /* ME */
 };
 static	const v_check *man_valids = __man_valids - MAN_TH;
 
@@ -208,7 +210,7 @@ post_UR(CHKARGS)
 
 	if (n->type == ROFFT_HEAD && n->child == NULL)
 		mandoc_vmsg(MANDOCERR_UR_NOHEAD, man->parse,
-		    n->line, n->pos, "UR");
+		    n->line, n->pos, roff_name[n->tok]);
 	check_part(man, n);
 }
 
Index: usr.bin/mandoc/mandoc.1
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/mandoc.1,v
retrieving revision 1.125
diff -u -p -r1.125 mandoc.1
--- usr.bin/mandoc/mandoc.1	17 Jun 2017 23:06:43 -0000	1.125
+++ usr.bin/mandoc/mandoc.1	24 Jun 2017 07:24:38 -0000
@@ -1225,6 +1225,7 @@ A
 .Ic \&Bl ,
 .Ic \&D1 ,
 .Ic \&Dl ,
+.Ic \&MT ,
 .Ic \&RS ,
 or
 .Ic \&UR
@@ -1360,6 +1361,8 @@ An empty pair of square brackets is show
 .It Sy "missing resource identifier, using \(dq\(dq"
 .Pq man
 The
+.Ic \&MT
+or
 .Ic \&UR
 macro is invoked without any argument.
 An empty pair of angle brackets is shown.
@@ -1712,7 +1715,7 @@ An
 .Xr mdoc 7
 block closing macro, a
 .Xr man 7
-.Ic \&RE
+.Ic \&MT , \&RE
 or
 .Ic \&UE
 macro, an
@@ -1746,7 +1749,7 @@ At the end of the document, an explicit
 block, a
 .Xr man 7
 next-line scope or
-.Ic \&RS
+.Ic \&MT , \&RS
 or
 .Ic \&UR
 block, an equation, table, or
@@ -1918,6 +1921,7 @@ A macro or request is invoked with too m
 .Bl -dash -offset 2n -width 2n -compact
 .It
 .Ic \&Fo ,
+.Ic \&MT ,
 .Ic \&PD ,
 .Ic \&RS ,
 .Ic \&UR ,
Index: usr.bin/mandoc/roff.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/roff.c,v
retrieving revision 1.187
diff -u -p -r1.187 roff.c
--- usr.bin/mandoc/roff.c	18 Jun 2017 17:35:40 -0000	1.187
+++ usr.bin/mandoc/roff.c	24 Jun 2017 07:24:39 -0000
@@ -328,7 +328,7 @@ const char *__roff_name[MAN_MAX + 1] = {
 	"RE",		"RS",		"DT",		"UC",
 	"PD",		"AT",		"in",
 	"OP",		"EX",		"EE",		"UR",
-	"UE",		NULL
+	"UE",		"MT",		"ME",		NULL
 };
 const	char *const *roff_name = __roff_name;
 
Index: usr.bin/mandoc/roff.h
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/roff.h,v
retrieving revision 1.37
diff -u -p -r1.37 roff.h
--- usr.bin/mandoc/roff.h	17 Jun 2017 22:40:27 -0000	1.37
+++ usr.bin/mandoc/roff.h	24 Jun 2017 07:24:39 -0000
@@ -473,6 +473,8 @@ enum	roff_tok {
 	MAN_EE,
 	MAN_UR,
 	MAN_UE,
+	MAN_MT,
+	MAN_ME,
 	MAN_MAX
 };
 
--
 To unsubscribe send an email to tech+unsubscribe@mandoc.bsd.lv

  reply	other threads:[~2017-06-24 13:28 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-23  5:45 Anthony J. Bentley
2017-06-23 13:44 ` Ingo Schwarze
2017-06-24  7:31   ` Anthony J. Bentley [this message]
2017-06-24 15:06     ` Ingo Schwarze

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=61002.1498289497@cathet.us \
    --to=anthony@anjbe.name \
    --cc=schwarze@usta.de \
    --cc=tech@mandoc.bsd.lv \
    --cc=tech@mdocml.bsd.lv \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).