tech@mandoc.bsd.lv
 help / color / 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

* Re: MT and ME macros
  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
  0 siblings, 1 reply; 4+ messages in thread
From: Ingo Schwarze @ 2017-06-23 13:44 UTC (permalink / raw)
  To: Anthony J. Bentley; +Cc: tech

Hi Anthony,

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.


Anthony J. Bentley wrote on Thu, Jun 22, 2017 at 11:45:46PM -0600:

> - MT and ME are not supported.

Since you have found the first real page using it and since it has
long been documented in groff_man(7), i agree with adding it.

> - 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?

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?

> - The trailing period after UE is not displayed.

Yes, that looks like a missing feature.  It is not even parsed.

> Here's a diff that attempts to fix the first two points,

Please do not mix the two, do only the first point, and drop the
second for now.

> although maybe it contains needless duplication?

Yes it does, see below.

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

Yours,
  Ingo


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

Please use the existing man_UR_pre() rather than writing a duplicate
man_MT_pre().  All you need is one "if (n->tok == MAN_MT)" controlling
the last three lines above vs. the existing:
  print_otag(h, TAG_A, "cTh", "Lk", n->child->string);


[...]
> 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;
> +}
> +

Really, no need to have two identical functions.
Just use the existing pre_UR().

>  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");

No, don't mix that in here.

> +	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)
> +{

The two functions look identical as well, so just using post_UR
instead of defining post_MT may work.

> +
> +	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");

Just use the existing post_UR.  You don't even need a separate
MANDOCERR.  Just use roff_name[n->tok] for the final argment.

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

No different message needed, just mention with the existing message
that .MT can also cause it.

>  .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 */

No change needed to this file.

> 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 */

No change needed to this file.

> 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

* Re: MT and ME macros
  2017-06-23 13:44 ` Ingo Schwarze
@ 2017-06-24  7:31   ` Anthony J. Bentley
  2017-06-24 15:06     ` Ingo Schwarze
  0 siblings, 1 reply; 4+ messages in thread
From: Anthony J. Bentley @ 2017-06-24  7:31 UTC (permalink / raw)
  To: Ingo Schwarze; +Cc: tech

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

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

* Re: MT and ME macros
  2017-06-24  7:31   ` Anthony J. Bentley
@ 2017-06-24 15:06     ` Ingo Schwarze
  0 siblings, 0 replies; 4+ messages in thread
From: Ingo Schwarze @ 2017-06-24 15:06 UTC (permalink / raw)
  To: Anthony J. Bentley; +Cc: tech

Hi Anthony,

Anthony J. Bentley wrote on Sat, Jun 24, 2017 at 01:31:37AM -0600:

> Take 2:

OK schwarze@ with one nit in the mandoc(1) manual page,
see inline.

Please commit to OpenBSD, and i'll merge to bsd.lv.

Thanks,
  Ingo

> 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

This line should be

  +.Ic \&ME , \&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

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

end of thread, back to index

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

tech@mandoc.bsd.lv

Archives are clonable: git clone --mirror http://inbox.vuxu.org/mandoc-tech

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://inbox.vuxu.org/vuxu.archive.mandoc.tech


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git