tech@mandoc.bsd.lv
 help / color / mirror / Atom feed
* MT and ME macros
@ 2017-06-23  5:45 Anthony J. Bentley
  2017-06-23 13:44 ` Ingo Schwarze
  0 siblings, 1 reply; 4+ messages in thread
From: Anthony J. Bentley @ 2017-06-23  5:45 UTC (permalink / raw)
  To: tech

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

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-06-24 15:06 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-23  5:45 MT and ME macros Anthony J. Bentley
2017-06-23 13:44 ` Ingo Schwarze
2017-06-24  7:31   ` Anthony J. Bentley
2017-06-24 15:06     ` Ingo Schwarze

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).