From: "Anthony J. Bentley" <anthony@anjbe.name>
To: tech@mdocml.bsd.lv
Subject: MT and ME macros
Date: Thu, 22 Jun 2017 23:45:46 -0600 [thread overview]
Message-ID: <81293.1498196746@cathet.us> (raw)
Hi,
From wireguard.io's wg(8):
.B wg
was written by
.MT Jason@example.com
Jason A. Donenfeld
.ME .
For updates and more information, a project page is available on the
.UR https://\:www.wireguard.io/
World Wide Web
.UE .
There are three issues here:
- MT and ME are not supported.
- UR prints < >, not \(la \(ra. (Sigh...)
- The trailing period after UE is not displayed.
Here's a diff that attempts to fix the first two points, although maybe
it contains needless duplication?
Index: man.7
===================================================================
RCS file: /cvs/mdocml/man.7,v
retrieving revision 1.135
diff -u -p -r1.135 man.7
--- man.7 7 May 2017 21:44:49 -0000 1.135
+++ man.7 23 Jun 2017 05:42:49 -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: man_html.c
===================================================================
RCS file: /cvs/mdocml/man_html.c,v
retrieving revision 1.143
diff -u -p -r1.143 man_html.c
--- man_html.c 8 Jun 2017 12:54:58 -0000 1.143
+++ man_html.c 23 Jun 2017 05:42:49 -0000
@@ -57,6 +57,7 @@ static int man_B_pre(MAN_ARGS);
static int man_HP_pre(MAN_ARGS);
static int man_IP_pre(MAN_ARGS);
static int man_I_pre(MAN_ARGS);
+static int man_MT_pre(MAN_ARGS);
static int man_OP_pre(MAN_ARGS);
static int man_PP_pre(MAN_ARGS);
static int man_RS_pre(MAN_ARGS);
@@ -105,6 +106,8 @@ static const struct htmlman __mans[MAN_M
{ NULL, NULL }, /* EE */
{ man_UR_pre, NULL }, /* UR */
{ NULL, NULL }, /* UE */
+ { man_MT_pre, NULL }, /* MT */
+ { NULL, NULL }, /* ME */
};
static const struct htmlman *const mans = __mans - MAN_TH;
@@ -229,6 +232,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:
@@ -648,6 +652,28 @@ man_UR_pre(MAN_ARGS)
if (n->child != NULL) {
assert(n->child->type == ROFFT_TEXT);
print_otag(h, TAG_A, "cTh", "Lk", n->child->string);
+ }
+
+ assert(n->next->type == ROFFT_BODY);
+ if (n->next->child != NULL)
+ n = n->next;
+
+ print_man_nodelist(man, n->child, h);
+
+ return 0;
+}
+
+static int
+man_MT_pre(MAN_ARGS)
+{
+ char *cp;
+ n = n->child;
+ assert(n->type == ROFFT_HEAD);
+ if (n->child != NULL) {
+ assert(n->child->type == ROFFT_TEXT);
+ mandoc_asprintf(&cp, "mailto:%s", n->child->string);
+ print_otag(h, TAG_A, "cTh", "Mt", cp);
+ free(cp);
}
assert(n->next->type == ROFFT_BODY);
Index: man_macro.c
===================================================================
RCS file: /cvs/mdocml/man_macro.c,v
retrieving revision 1.122
diff -u -p -r1.122 man_macro.c
--- man_macro.c 17 Jun 2017 16:47:48 -0000 1.122
+++ man_macro.c 23 Jun 2017 05:42:50 -0000
@@ -75,6 +75,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;
@@ -216,6 +218,9 @@ blk_close(MACRO_PROT_ARGS)
break;
case MAN_UE:
ntok = MAN_UR;
+ break;
+ case MAN_ME:
+ ntok = MAN_MT;
break;
default:
abort();
Index: man_term.c
===================================================================
RCS file: /cvs/mdocml/man_term.c,v
retrieving revision 1.207
diff -u -p -r1.207 man_term.c
--- man_term.c 17 Jun 2017 13:06:16 -0000 1.207
+++ man_term.c 23 Jun 2017 05:42:50 -0000
@@ -72,6 +72,7 @@ static int pre_DT(DECL_ARGS);
static int pre_HP(DECL_ARGS);
static int pre_I(DECL_ARGS);
static int pre_IP(DECL_ARGS);
+static int pre_MT(DECL_ARGS);
static int pre_OP(DECL_ARGS);
static int pre_PD(DECL_ARGS);
static int pre_PP(DECL_ARGS);
@@ -87,6 +88,7 @@ static int pre_literal(DECL_ARGS);
static void post_IP(DECL_ARGS);
static void post_HP(DECL_ARGS);
+static void post_MT(DECL_ARGS);
static void post_RS(DECL_ARGS);
static void post_SH(DECL_ARGS);
static void post_SS(DECL_ARGS);
@@ -128,6 +130,8 @@ static const struct termact __termacts[M
{ pre_literal, NULL, 0 }, /* EE */
{ pre_UR, post_UR, 0 }, /* UR */
{ NULL, NULL, 0 }, /* UE */
+ { pre_MT, post_MT, 0 }, /* MT */
+ { NULL, NULL, 0 }, /* ME */
};
static const struct termact *termacts = __termacts - MAN_TH;
@@ -842,6 +846,13 @@ pre_UR(DECL_ARGS)
return n->type != ROFFT_HEAD;
}
+static int
+pre_MT(DECL_ARGS)
+{
+
+ return n->type != ROFFT_HEAD;
+}
+
static void
post_UR(DECL_ARGS)
{
@@ -849,14 +860,31 @@ post_UR(DECL_ARGS)
if (n->type != ROFFT_BLOCK)
return;
- term_word(p, "<");
+ term_word(p, "\\(la");
+ p->flags |= TERMP_NOSPACE;
+
+ if (NULL != n->child->child)
+ print_man_node(p, mt, n->child->child, meta);
+
+ p->flags |= TERMP_NOSPACE;
+ term_word(p, "\\(ra");
+}
+
+static void
+post_MT(DECL_ARGS)
+{
+
+ if (n->type != ROFFT_BLOCK)
+ return;
+
+ term_word(p, "\\(la");
p->flags |= TERMP_NOSPACE;
if (NULL != n->child->child)
print_man_node(p, mt, n->child->child, meta);
p->flags |= TERMP_NOSPACE;
- term_word(p, ">");
+ term_word(p, "\\(ra");
}
static void
Index: man_validate.c
===================================================================
RCS file: /cvs/mdocml/man_validate.c,v
retrieving revision 1.130
diff -u -p -r1.130 man_validate.c
--- man_validate.c 17 Jun 2017 22:43:14 -0000 1.130
+++ man_validate.c 23 Jun 2017 05:42:50 -0000
@@ -47,6 +47,7 @@ static void check_text(CHKARGS);
static void post_AT(CHKARGS);
static void post_IP(CHKARGS);
+static void post_MT(CHKARGS);
static void post_OP(CHKARGS);
static void post_TH(CHKARGS);
static void post_UC(CHKARGS);
@@ -89,6 +90,8 @@ static const v_check __man_valids[MAN_MA
NULL, /* EE */
post_UR, /* UR */
NULL, /* UE */
+ post_MT, /* MT */
+ NULL, /* ME */
};
static const v_check *man_valids = __man_valids - MAN_TH;
@@ -211,6 +214,16 @@ post_UR(CHKARGS)
if (n->type == ROFFT_HEAD && n->child == NULL)
mandoc_vmsg(MANDOCERR_UR_NOHEAD, man->parse,
n->line, n->pos, "UR");
+ check_part(man, n);
+}
+
+static void
+post_MT(CHKARGS)
+{
+
+ if (n->type == ROFFT_HEAD && n->child == NULL)
+ mandoc_vmsg(MANDOCERR_MT_NOHEAD, man->parse,
+ n->line, n->pos, "MT");
check_part(man, n);
}
Index: mandoc.1
===================================================================
RCS file: /cvs/mdocml/mandoc.1,v
retrieving revision 1.201
diff -u -p -r1.201 mandoc.1
--- mandoc.1 17 Jun 2017 23:07:00 -0000 1.201
+++ mandoc.1 23 Jun 2017 05:42:50 -0000
@@ -1225,6 +1225,7 @@ A
.Ic \&Bl ,
.Ic \&D1 ,
.Ic \&Dl ,
+.Ic \&MT ,
.Ic \&RS ,
or
.Ic \&UR
@@ -1363,6 +1364,12 @@ The
.Ic \&UR
macro is invoked without any argument.
An empty pair of angle brackets is shown.
+.It Sy "missing address, using \(dq\(dq"
+.Pq man
+The
+.Ic \&MT
+macro is invoked without any argument.
+An empty pair of angle brackets is shown.
.It Sy "missing eqn box, using \(dq\(dq"
.Pq eqn
A diacritic mark or a binary operator is found,
@@ -1712,7 +1719,7 @@ An
.Xr mdoc 7
block closing macro, a
.Xr man 7
-.Ic \&RE
+.Ic \&MT , \&RE
or
.Ic \&UE
macro, an
@@ -1746,7 +1753,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 +1925,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: mandoc.h
===================================================================
RCS file: /cvs/mdocml/mandoc.h,v
retrieving revision 1.232
diff -u -p -r1.232 mandoc.h
--- mandoc.h 17 Jun 2017 23:07:00 -0000 1.232
+++ mandoc.h 23 Jun 2017 05:42:50 -0000
@@ -129,6 +129,7 @@ enum mandocerr {
MANDOCERR_ARG_STD, /* missing -std argument, adding it: macro */
MANDOCERR_OP_EMPTY, /* missing option string, using "": OP */
MANDOCERR_UR_NOHEAD, /* missing resource identifier, using "": UR */
+ MANDOCERR_MT_NOHEAD, /* missing address, using "": MT */
MANDOCERR_EQN_NOBOX, /* missing eqn box, using "": op */
/* related to bad arguments */
Index: read.c
===================================================================
RCS file: /cvs/mdocml/read.c,v
retrieving revision 1.178
diff -u -p -r1.178 read.c
--- read.c 17 Jun 2017 23:07:00 -0000 1.178
+++ read.c 23 Jun 2017 05:42:50 -0000
@@ -171,6 +171,7 @@ static const char * const mandocerrs[MAN
"missing -std argument, adding it",
"missing option string, using \"\"",
"missing resource identifier, using \"\"",
+ "missing address, using \"\"",
"missing eqn box, using \"\"",
/* related to bad macro arguments */
Index: roff.c
===================================================================
RCS file: /cvs/mdocml/roff.c,v
retrieving revision 1.315
diff -u -p -r1.315 roff.c
--- roff.c 18 Jun 2017 17:36:03 -0000 1.315
+++ roff.c 23 Jun 2017 05:42:50 -0000
@@ -330,7 +330,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: roff.h
===================================================================
RCS file: /cvs/mdocml/roff.h,v
retrieving revision 1.55
diff -u -p -r1.55 roff.h
--- roff.h 17 Jun 2017 22:43:15 -0000 1.55
+++ roff.h 23 Jun 2017 05:42:50 -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@mdocml.bsd.lv
next reply other threads:[~2017-06-23 5:45 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-23 5:45 Anthony J. Bentley [this message]
2017-06-23 13:44 ` Ingo Schwarze
2017-06-24 7:31 ` Anthony J. Bentley
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=81293.1498196746@cathet.us \
--to=anthony@anjbe.name \
--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).