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
next prev parent 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).