tech@mandoc.bsd.lv
 help / color / mirror / Atom feed
* [PATCH] TODO entries for `Ns' and `No' spacing.
@ 2010-09-30  9:21 Kristaps Dzonsons
  2010-10-01  0:23 ` Ingo Schwarze
  0 siblings, 1 reply; 4+ messages in thread
From: Kristaps Dzonsons @ 2010-09-30  9:21 UTC (permalink / raw)
  To: tech, jmc

[-- Attachment #1: Type: text/plain, Size: 663 bytes --]

Hi,

Can anybody Ok that this patch correctly handles the cases of `No' and 
`Ns' with respect to spacing and without fallout?  Cf. TODO items

- .No text No ) is "text )", not "text)"
   see the terrible example
     case word in [[(]  pattern [| pattern] ... ) list ;; ] ... esac
   in OpenBSD ksh(1)

- .It ${name Ns [ selector ] Ns }
   should be "${name[selector]}" not "${name [selector]}"
   This is parsed as
   text("${name") text("[") Ns() text(selector)...
   Opening punctuation should not fall out of .Ns.
   see for example OpenBSD csh(1)

Note that the ellipsis suppresses whitespace because of the trailing 
period.  This is a new TODO.

Kristaps

[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 3305 bytes --]

? .TODO.swp
? config.h
? config.log
? csh.1
? foo.1
? foo.1.html
? foo.3
? gcc.1
? ksh.1
? mandoc
? mandoc.core
? patch.txt
? regress/output
Index: mdoc_macro.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_macro.c,v
retrieving revision 1.94
diff -u -r1.94 mdoc_macro.c
--- mdoc_macro.c	26 Sep 2010 20:22:28 -0000	1.94
+++ mdoc_macro.c	30 Sep 2010 09:17:41 -0000
@@ -139,7 +139,7 @@
 	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Fx */
 	{ in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Ms */
 	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* No */
-	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Ns */
+	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED | MDOC_IGNDELIM }, /* Ns */
 	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Nx */
 	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Ox */
 	{ blk_exp_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Pc */
Index: mdoc_term.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_term.c,v
retrieving revision 1.191
diff -u -r1.191 mdoc_term.c
--- mdoc_term.c	27 Sep 2010 23:03:44 -0000	1.191
+++ mdoc_term.c	30 Sep 2010 09:17:41 -0000
@@ -75,11 +75,11 @@
 static	void	  termp_bx_post(DECL_ARGS);
 static	void	  termp_d1_post(DECL_ARGS);
 static	void	  termp_fo_post(DECL_ARGS);
+static	void	  termp_igndelim_post(DECL_ARGS);
 static	void	  termp_in_post(DECL_ARGS);
 static	void	  termp_it_post(DECL_ARGS);
 static	void	  termp_lb_post(DECL_ARGS);
 static	void	  termp_nm_post(DECL_ARGS);
-static	void	  termp_pf_post(DECL_ARGS);
 static	void	  termp_quote_post(DECL_ARGS);
 static	void	  termp_sh_post(DECL_ARGS);
 static	void	  termp_ss_post(DECL_ARGS);
@@ -102,6 +102,7 @@
 static	int	  termp_fn_pre(DECL_ARGS);
 static	int	  termp_fo_pre(DECL_ARGS);
 static	int	  termp_ft_pre(DECL_ARGS);
+static	int	  termp_igndelim_pre(DECL_ARGS);
 static	int	  termp_in_pre(DECL_ARGS);
 static	int	  termp_it_pre(DECL_ARGS);
 static	int	  termp_li_pre(DECL_ARGS);
@@ -109,7 +110,6 @@
 static	int	  termp_nd_pre(DECL_ARGS);
 static	int	  termp_nm_pre(DECL_ARGS);
 static	int	  termp_ns_pre(DECL_ARGS);
-static	int	  termp_pf_pre(DECL_ARGS);
 static	int	  termp_quote_pre(DECL_ARGS);
 static	int	  termp_rs_pre(DECL_ARGS);
 static	int	  termp_rv_pre(DECL_ARGS);
@@ -196,12 +196,12 @@
 	{ NULL, NULL }, /* Eo */
 	{ termp_xx_pre, NULL }, /* Fx */
 	{ termp_bold_pre, NULL }, /* Ms */
-	{ NULL, NULL }, /* No */
+	{ termp_igndelim_pre, termp_igndelim_post }, /* No */
 	{ termp_ns_pre, NULL }, /* Ns */
 	{ termp_xx_pre, NULL }, /* Nx */
 	{ termp_xx_pre, NULL }, /* Ox */
 	{ NULL, NULL }, /* Pc */
-	{ termp_pf_pre, termp_pf_post }, /* Pf */
+	{ termp_igndelim_pre, termp_igndelim_post }, /* Pf */
 	{ termp_quote_pre, termp_quote_post }, /* Po */
 	{ termp_quote_pre, termp_quote_post }, /* Pq */
 	{ NULL, NULL }, /* Qc */
@@ -1684,7 +1684,7 @@
 
 /* ARGSUSED */
 static int
-termp_pf_pre(DECL_ARGS)
+termp_igndelim_pre(DECL_ARGS)
 {
 
 	p->flags |= TERMP_IGNDELIM;
@@ -1694,11 +1694,12 @@
 
 /* ARGSUSED */
 static void
-termp_pf_post(DECL_ARGS)
+termp_igndelim_post(DECL_ARGS)
 {
 
 	p->flags &= ~TERMP_IGNDELIM;
-	p->flags |= TERMP_NOSPACE;
+	if (MDOC_Pf == n->tok)
+		p->flags |= TERMP_NOSPACE;
 }
 
 

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

* Re: [PATCH] TODO entries for `Ns' and `No' spacing.
  2010-09-30  9:21 [PATCH] TODO entries for `Ns' and `No' spacing Kristaps Dzonsons
@ 2010-10-01  0:23 ` Ingo Schwarze
  2010-10-01 20:49   ` Ingo Schwarze
  0 siblings, 1 reply; 4+ messages in thread
From: Ingo Schwarze @ 2010-10-01  0:23 UTC (permalink / raw)
  To: tech

Hi Kristaps,

Kristaps Dzonsons wrote on Thu, Sep 30, 2010 at 11:21:23AM +0200:

> Can anybody Ok that this patch correctly handles the cases of `No'
> and `Ns' with respect to spacing and without fallout?  Cf. TODO
> items
> 
> - .No text No ) is "text )", not "text)"
>   see the terrible example
>     case word in [[(]  pattern [| pattern] ... ) list ;; ] ... esac
>   in OpenBSD ksh(1)
> 
> - .It ${name Ns [ selector ] Ns }
>   should be "${name[selector]}" not "${name [selector]}"
>   This is parsed as
>   text("${name") text("[") Ns() text(selector)...
>   Opening punctuation should not fall out of .Ns.
>   see for example OpenBSD csh(1)

The .Ns part - i.e. the mdoc_macro.c patch - looks good and,
according to my tests, does the job.

The .No part - i.e. the mdoc_term.c patch - also looks good as far
as it goes, but does not seem to go far enough.  It doesn't
solve the problem for me, yet.

To get it working, i need to add the following elements to
the patch:
 - .No needs MDOC_IGNDELIM in mdoc_macro.c, too.
 - .No must be allowed to have one child
   (mdoc_macro.c and mdoc_validate.c).

With the updated patch included below, i do not see the two
problems any longer, and i see no regressions.  I'm not sure
that solution is ideal, though; the trick to get TERMP_IGNDELIM
to the right places by limiting .No to one argument looks
rather artificial.  But i'm too tired now to rethink that.

Yours,
  Ingo


Index: mdoc_macro.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/mdoc_macro.c,v
retrieving revision 1.56
diff -u -p -r1.56 mdoc_macro.c
--- mdoc_macro.c	26 Sep 2010 20:19:58 -0000	1.56
+++ mdoc_macro.c	1 Oct 2010 00:04:01 -0000
@@ -134,8 +134,8 @@ const	struct mdoc_macro __mdoc_macros[MD
 	{ blk_part_exp, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Eo */
 	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Fx */
 	{ in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Ms */
-	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* No */
-	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Ns */
+	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED | MDOC_IGNDELIM }, /* No */
+	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED | MDOC_IGNDELIM }, /* Ns */
 	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Nx */
 	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Ox */
 	{ blk_exp_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Pc */
@@ -1447,8 +1447,6 @@ in_line_argn(MACRO_PROT_ARGS)
 
 	switch (tok) {
 	case (MDOC_Ap):
-		/* FALLTHROUGH */
-	case (MDOC_No):
 		/* FALLTHROUGH */
 	case (MDOC_Ns):
 		/* FALLTHROUGH */
Index: mdoc_term.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/mdoc_term.c,v
retrieving revision 1.108
diff -u -p -r1.108 mdoc_term.c
--- mdoc_term.c	27 Sep 2010 21:25:28 -0000	1.108
+++ mdoc_term.c	1 Oct 2010 00:04:02 -0000
@@ -71,11 +71,11 @@ static	void	  termp_bl_post(DECL_ARGS);
 static	void	  termp_bx_post(DECL_ARGS);
 static	void	  termp_d1_post(DECL_ARGS);
 static	void	  termp_fo_post(DECL_ARGS);
+static	void	  termp_igndelim_post(DECL_ARGS);
 static	void	  termp_in_post(DECL_ARGS);
 static	void	  termp_it_post(DECL_ARGS);
 static	void	  termp_lb_post(DECL_ARGS);
 static	void	  termp_nm_post(DECL_ARGS);
-static	void	  termp_pf_post(DECL_ARGS);
 static	void	  termp_quote_post(DECL_ARGS);
 static	void	  termp_sh_post(DECL_ARGS);
 static	void	  termp_ss_post(DECL_ARGS);
@@ -98,6 +98,7 @@ static	int	  termp_fl_pre(DECL_ARGS);
 static	int	  termp_fn_pre(DECL_ARGS);
 static	int	  termp_fo_pre(DECL_ARGS);
 static	int	  termp_ft_pre(DECL_ARGS);
+static	int	  termp_igndelim_pre(DECL_ARGS);
 static	int	  termp_in_pre(DECL_ARGS);
 static	int	  termp_it_pre(DECL_ARGS);
 static	int	  termp_li_pre(DECL_ARGS);
@@ -105,7 +106,6 @@ static	int	  termp_lk_pre(DECL_ARGS);
 static	int	  termp_nd_pre(DECL_ARGS);
 static	int	  termp_nm_pre(DECL_ARGS);
 static	int	  termp_ns_pre(DECL_ARGS);
-static	int	  termp_pf_pre(DECL_ARGS);
 static	int	  termp_quote_pre(DECL_ARGS);
 static	int	  termp_rs_pre(DECL_ARGS);
 static	int	  termp_rv_pre(DECL_ARGS);
@@ -192,12 +192,12 @@ static	const struct termact termacts[MDO
 	{ NULL, NULL }, /* Eo */
 	{ termp_xx_pre, NULL }, /* Fx */
 	{ termp_bold_pre, NULL }, /* Ms */
-	{ NULL, NULL }, /* No */
+	{ termp_igndelim_pre, termp_igndelim_post }, /* No */
 	{ termp_ns_pre, NULL }, /* Ns */
 	{ termp_xx_pre, NULL }, /* Nx */
 	{ termp_xx_pre, NULL }, /* Ox */
 	{ NULL, NULL }, /* Pc */
-	{ termp_pf_pre, termp_pf_post }, /* Pf */
+	{ termp_igndelim_pre, termp_igndelim_post }, /* Pf */
 	{ termp_quote_pre, termp_quote_post }, /* Po */
 	{ termp_quote_pre, termp_quote_post }, /* Pq */
 	{ NULL, NULL }, /* Qc */
@@ -1680,7 +1680,7 @@ termp_xx_pre(DECL_ARGS)
 
 /* ARGSUSED */
 static int
-termp_pf_pre(DECL_ARGS)
+termp_igndelim_pre(DECL_ARGS)
 {
 
 	p->flags |= TERMP_IGNDELIM;
@@ -1690,11 +1690,12 @@ termp_pf_pre(DECL_ARGS)
 
 /* ARGSUSED */
 static void
-termp_pf_post(DECL_ARGS)
+termp_igndelim_post(DECL_ARGS)
 {
 
 	p->flags &= ~TERMP_IGNDELIM;
-	p->flags |= TERMP_NOSPACE;
+	if (MDOC_Pf == n->tok)
+		p->flags |= TERMP_NOSPACE;
 }
 
 
Index: mdoc_validate.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/mdoc_validate.c,v
retrieving revision 1.70
diff -u -p -r1.70 mdoc_validate.c
--- mdoc_validate.c	27 Sep 2010 21:25:28 -0000	1.70
+++ mdoc_validate.c	1 Oct 2010 00:04:03 -0000
@@ -214,7 +214,7 @@ const	struct valids mdoc_valids[MDOC_MAX
 	{ NULL, NULL },				/* Eo */
 	{ NULL, NULL },				/* Fx */
 	{ NULL, posts_text },			/* Ms */ 
-	{ NULL, posts_notext },			/* No */
+	{ NULL, NULL },				/* No */
 	{ NULL, posts_notext },			/* Ns */
 	{ NULL, NULL },				/* Nx */
 	{ NULL, NULL },				/* Ox */


--
 To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv

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

* Re: [PATCH] TODO entries for `Ns' and `No' spacing.
  2010-10-01  0:23 ` Ingo Schwarze
@ 2010-10-01 20:49   ` Ingo Schwarze
  2010-10-01 20:52     ` Kristaps Dzonsons
  0 siblings, 1 reply; 4+ messages in thread
From: Ingo Schwarze @ 2010-10-01 20:49 UTC (permalink / raw)
  To: tech

Replying to myself...

Ingo Schwarze wrote on Fri, Oct 01, 2010 at 02:23:12AM +0200:

> With the updated patch included below, i do not see the two
> problems any longer, and i see no regressions.  I'm not sure
> that solution is ideal, though; the trick to get TERMP_IGNDELIM
> to the right places by limiting .No to one argument looks
> rather artificial.  But i'm too tired now to rethink that.

It worked, but it was crap all the same.
Here is a better solution.

Observe that TERMP_IGNDELIM and HTML_IGNDELIM only act on the
beginning of one single word, since MDOC_Pf can only have one
argument.  Thus, make them follow the same logic as TERMP_NOSPACE:
clear after use.

That way, we can use the same *_igndelim_pre functions for .No and .Pf,
we can cut down the *_pf_post functions to half the amount of code
(wow! ;) and we don't need any post function for No.

Both .Pf and .No extensively tested manually, builds all OpenBSD
manuals, no regressions in src/bin and src/sbin, no regressions
in my test suites, fixes a few spacing issues in csh.1 and ksh.1.

OK to commit?
  Ingo


Index: html.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/html.c,v
retrieving revision 1.16
diff -u -p -r1.16 html.c
--- html.c	27 Sep 2010 21:25:28 -0000	1.16
+++ html.c	1 Oct 2010 20:32:26 -0000
@@ -548,6 +548,8 @@ print_text(struct html *h, const char *w
 		if ( ! (h->flags & HTML_NONOSPACE))
 			h->flags &= ~HTML_NOSPACE;
 
+	h->flags &= ~HTML_IGNDELIM;
+
 	/* 
 	 * Note that we don't process the pipe: the parser sees it as
 	 * punctuation, but we don't in terms of typography.
Index: mdoc_html.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/mdoc_html.c,v
retrieving revision 1.33
diff -u -p -r1.33 mdoc_html.c
--- mdoc_html.c	27 Sep 2010 21:25:28 -0000	1.33
+++ mdoc_html.c	1 Oct 2010 20:32:31 -0000
@@ -87,6 +87,7 @@ static	int		  mdoc_ex_pre(MDOC_ARGS);
 static	void		  mdoc_fo_post(MDOC_ARGS);
 static	int		  mdoc_fo_pre(MDOC_ARGS);
 static	int		  mdoc_ic_pre(MDOC_ARGS);
+static	int		  mdoc_igndelim_pre(MDOC_ARGS);
 static	int		  mdoc_in_pre(MDOC_ARGS);
 static	int		  mdoc_it_block_pre(MDOC_ARGS, enum mdoc_list,
 				int, struct roffsu *, struct roffsu *);
@@ -105,7 +106,6 @@ static	int		  mdoc_nm_pre(MDOC_ARGS);
 static	int		  mdoc_ns_pre(MDOC_ARGS);
 static	int		  mdoc_pa_pre(MDOC_ARGS);
 static	void		  mdoc_pf_post(MDOC_ARGS);
-static	int		  mdoc_pf_pre(MDOC_ARGS);
 static	void		  mdoc_quote_post(MDOC_ARGS);
 static	int		  mdoc_quote_pre(MDOC_ARGS);
 static	int		  mdoc_rs_pre(MDOC_ARGS);
@@ -195,12 +195,12 @@ static	const struct htmlmdoc mdocs[MDOC_
 	{NULL, NULL}, /* Eo */
 	{mdoc_xx_pre, NULL}, /* Fx */
 	{mdoc_ms_pre, NULL}, /* Ms */
-	{NULL, NULL}, /* No */
+	{mdoc_igndelim_pre, NULL}, /* No */
 	{mdoc_ns_pre, NULL}, /* Ns */
 	{mdoc_xx_pre, NULL}, /* Nx */
 	{mdoc_xx_pre, NULL}, /* Ox */
 	{NULL, NULL}, /* Pc */
-	{mdoc_pf_pre, mdoc_pf_post}, /* Pf */
+	{mdoc_igndelim_pre, mdoc_pf_post}, /* Pf */
 	{mdoc_quote_pre, mdoc_quote_post}, /* Po */
 	{mdoc_quote_pre, mdoc_quote_post}, /* Pq */
 	{NULL, NULL}, /* Qc */
@@ -1907,7 +1907,7 @@ mdoc_ms_pre(MDOC_ARGS)
 
 /* ARGSUSED */
 static int
-mdoc_pf_pre(MDOC_ARGS)
+mdoc_igndelim_pre(MDOC_ARGS)
 {
 
 	h->flags |= HTML_IGNDELIM;
@@ -1920,7 +1920,6 @@ static void
 mdoc_pf_post(MDOC_ARGS)
 {
 
-	h->flags &= ~HTML_IGNDELIM;
 	h->flags |= HTML_NOSPACE;
 }
 
Index: mdoc_macro.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/mdoc_macro.c,v
retrieving revision 1.56
diff -u -p -r1.56 mdoc_macro.c
--- mdoc_macro.c	26 Sep 2010 20:19:58 -0000	1.56
+++ mdoc_macro.c	1 Oct 2010 20:32:39 -0000
@@ -134,8 +134,8 @@ const	struct mdoc_macro __mdoc_macros[MD
 	{ blk_part_exp, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Eo */
 	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Fx */
 	{ in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Ms */
-	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* No */
-	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Ns */
+	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED | MDOC_IGNDELIM }, /* No */
+	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED | MDOC_IGNDELIM }, /* Ns */
 	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Nx */
 	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Ox */
 	{ blk_exp_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Pc */
Index: mdoc_term.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/mdoc_term.c,v
retrieving revision 1.108
diff -u -p -r1.108 mdoc_term.c
--- mdoc_term.c	27 Sep 2010 21:25:28 -0000	1.108
+++ mdoc_term.c	1 Oct 2010 20:32:43 -0000
@@ -98,6 +98,7 @@ static	int	  termp_fl_pre(DECL_ARGS);
 static	int	  termp_fn_pre(DECL_ARGS);
 static	int	  termp_fo_pre(DECL_ARGS);
 static	int	  termp_ft_pre(DECL_ARGS);
+static	int	  termp_igndelim_pre(DECL_ARGS);
 static	int	  termp_in_pre(DECL_ARGS);
 static	int	  termp_it_pre(DECL_ARGS);
 static	int	  termp_li_pre(DECL_ARGS);
@@ -105,7 +106,6 @@ static	int	  termp_lk_pre(DECL_ARGS);
 static	int	  termp_nd_pre(DECL_ARGS);
 static	int	  termp_nm_pre(DECL_ARGS);
 static	int	  termp_ns_pre(DECL_ARGS);
-static	int	  termp_pf_pre(DECL_ARGS);
 static	int	  termp_quote_pre(DECL_ARGS);
 static	int	  termp_rs_pre(DECL_ARGS);
 static	int	  termp_rv_pre(DECL_ARGS);
@@ -192,12 +192,12 @@ static	const struct termact termacts[MDO
 	{ NULL, NULL }, /* Eo */
 	{ termp_xx_pre, NULL }, /* Fx */
 	{ termp_bold_pre, NULL }, /* Ms */
-	{ NULL, NULL }, /* No */
+	{ termp_igndelim_pre, NULL }, /* No */
 	{ termp_ns_pre, NULL }, /* Ns */
 	{ termp_xx_pre, NULL }, /* Nx */
 	{ termp_xx_pre, NULL }, /* Ox */
 	{ NULL, NULL }, /* Pc */
-	{ termp_pf_pre, termp_pf_post }, /* Pf */
+	{ termp_igndelim_pre, termp_pf_post }, /* Pf */
 	{ termp_quote_pre, termp_quote_post }, /* Po */
 	{ termp_quote_pre, termp_quote_post }, /* Pq */
 	{ NULL, NULL }, /* Qc */
@@ -1680,7 +1680,7 @@ termp_xx_pre(DECL_ARGS)
 
 /* ARGSUSED */
 static int
-termp_pf_pre(DECL_ARGS)
+termp_igndelim_pre(DECL_ARGS)
 {
 
 	p->flags |= TERMP_IGNDELIM;
@@ -1693,7 +1693,6 @@ static void
 termp_pf_post(DECL_ARGS)
 {
 
-	p->flags &= ~TERMP_IGNDELIM;
 	p->flags |= TERMP_NOSPACE;
 }
 
Index: term.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/term.c,v
retrieving revision 1.51
diff -u -p -r1.51 term.c
--- term.c	23 Sep 2010 20:22:31 -0000	1.51
+++ term.c	1 Oct 2010 20:32:43 -0000
@@ -501,7 +501,7 @@ term_word(struct termp *p, const char *w
 	else
 		p->flags |= TERMP_NOSPACE;
 
-	p->flags &= ~TERMP_SENTENCE;
+	p->flags &= ~(TERMP_SENTENCE | TERMP_IGNDELIM);
 
 	while (*word) {
 		if ((ssz = strcspn(word, "\\")) > 0)
--
 To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv

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

* Re: [PATCH] TODO entries for `Ns' and `No' spacing.
  2010-10-01 20:49   ` Ingo Schwarze
@ 2010-10-01 20:52     ` Kristaps Dzonsons
  0 siblings, 0 replies; 4+ messages in thread
From: Kristaps Dzonsons @ 2010-10-01 20:52 UTC (permalink / raw)
  To: tech

>> With the updated patch included below, i do not see the two
>> problems any longer, and i see no regressions.  I'm not sure
>> that solution is ideal, though; the trick to get TERMP_IGNDELIM
>> to the right places by limiting .No to one argument looks
>> rather artificial.  But i'm too tired now to rethink that.
> 
> It worked, but it was crap all the same.
> Here is a better solution.
> 
> Observe that TERMP_IGNDELIM and HTML_IGNDELIM only act on the
> beginning of one single word, since MDOC_Pf can only have one
> argument.  Thus, make them follow the same logic as TERMP_NOSPACE:
> clear after use.
> 
> That way, we can use the same *_igndelim_pre functions for .No and .Pf,
> we can cut down the *_pf_post functions to half the amount of code
> (wow! ;) and we don't need any post function for No.
> 
> Both .Pf and .No extensively tested manually, builds all OpenBSD
> manuals, no regressions in src/bin and src/sbin, no regressions
> in my test suites, fixes a few spacing issues in csh.1 and ksh.1.
> 
> OK to commit?
>   Ingo
> 
> 
> Index: html.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/html.c,v
> retrieving revision 1.16
> diff -u -p -r1.16 html.c
> --- html.c	27 Sep 2010 21:25:28 -0000	1.16
> +++ html.c	1 Oct 2010 20:32:26 -0000
> @@ -548,6 +548,8 @@ print_text(struct html *h, const char *w
>  		if ( ! (h->flags & HTML_NONOSPACE))
>  			h->flags &= ~HTML_NOSPACE;
>  
> +	h->flags &= ~HTML_IGNDELIM;
> +
>  	/* 
>  	 * Note that we don't process the pipe: the parser sees it as
>  	 * punctuation, but we don't in terms of typography.
> Index: mdoc_html.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/mdoc_html.c,v
> retrieving revision 1.33
> diff -u -p -r1.33 mdoc_html.c
> --- mdoc_html.c	27 Sep 2010 21:25:28 -0000	1.33
> +++ mdoc_html.c	1 Oct 2010 20:32:31 -0000
> @@ -87,6 +87,7 @@ static	int		  mdoc_ex_pre(MDOC_ARGS);
>  static	void		  mdoc_fo_post(MDOC_ARGS);
>  static	int		  mdoc_fo_pre(MDOC_ARGS);
>  static	int		  mdoc_ic_pre(MDOC_ARGS);
> +static	int		  mdoc_igndelim_pre(MDOC_ARGS);
>  static	int		  mdoc_in_pre(MDOC_ARGS);
>  static	int		  mdoc_it_block_pre(MDOC_ARGS, enum mdoc_list,
>  				int, struct roffsu *, struct roffsu *);
> @@ -105,7 +106,6 @@ static	int		  mdoc_nm_pre(MDOC_ARGS);
>  static	int		  mdoc_ns_pre(MDOC_ARGS);
>  static	int		  mdoc_pa_pre(MDOC_ARGS);
>  static	void		  mdoc_pf_post(MDOC_ARGS);
> -static	int		  mdoc_pf_pre(MDOC_ARGS);
>  static	void		  mdoc_quote_post(MDOC_ARGS);
>  static	int		  mdoc_quote_pre(MDOC_ARGS);
>  static	int		  mdoc_rs_pre(MDOC_ARGS);
> @@ -195,12 +195,12 @@ static	const struct htmlmdoc mdocs[MDOC_
>  	{NULL, NULL}, /* Eo */
>  	{mdoc_xx_pre, NULL}, /* Fx */
>  	{mdoc_ms_pre, NULL}, /* Ms */
> -	{NULL, NULL}, /* No */
> +	{mdoc_igndelim_pre, NULL}, /* No */
>  	{mdoc_ns_pre, NULL}, /* Ns */
>  	{mdoc_xx_pre, NULL}, /* Nx */
>  	{mdoc_xx_pre, NULL}, /* Ox */
>  	{NULL, NULL}, /* Pc */
> -	{mdoc_pf_pre, mdoc_pf_post}, /* Pf */
> +	{mdoc_igndelim_pre, mdoc_pf_post}, /* Pf */
>  	{mdoc_quote_pre, mdoc_quote_post}, /* Po */
>  	{mdoc_quote_pre, mdoc_quote_post}, /* Pq */
>  	{NULL, NULL}, /* Qc */
> @@ -1907,7 +1907,7 @@ mdoc_ms_pre(MDOC_ARGS)
>  
>  /* ARGSUSED */
>  static int
> -mdoc_pf_pre(MDOC_ARGS)
> +mdoc_igndelim_pre(MDOC_ARGS)
>  {
>  
>  	h->flags |= HTML_IGNDELIM;
> @@ -1920,7 +1920,6 @@ static void
>  mdoc_pf_post(MDOC_ARGS)
>  {
>  
> -	h->flags &= ~HTML_IGNDELIM;
>  	h->flags |= HTML_NOSPACE;
>  }
>  
> Index: mdoc_macro.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/mdoc_macro.c,v
> retrieving revision 1.56
> diff -u -p -r1.56 mdoc_macro.c
> --- mdoc_macro.c	26 Sep 2010 20:19:58 -0000	1.56
> +++ mdoc_macro.c	1 Oct 2010 20:32:39 -0000
> @@ -134,8 +134,8 @@ const	struct mdoc_macro __mdoc_macros[MD
>  	{ blk_part_exp, MDOC_CALLABLE | MDOC_PARSED | MDOC_EXPLICIT }, /* Eo */
>  	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Fx */
>  	{ in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Ms */
> -	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* No */
> -	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Ns */
> +	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED | MDOC_IGNDELIM }, /* No */
> +	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED | MDOC_IGNDELIM }, /* Ns */
>  	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Nx */
>  	{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* Ox */
>  	{ blk_exp_close, MDOC_EXPLICIT | MDOC_CALLABLE | MDOC_PARSED }, /* Pc */
> Index: mdoc_term.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/mdoc_term.c,v
> retrieving revision 1.108
> diff -u -p -r1.108 mdoc_term.c
> --- mdoc_term.c	27 Sep 2010 21:25:28 -0000	1.108
> +++ mdoc_term.c	1 Oct 2010 20:32:43 -0000
> @@ -98,6 +98,7 @@ static	int	  termp_fl_pre(DECL_ARGS);
>  static	int	  termp_fn_pre(DECL_ARGS);
>  static	int	  termp_fo_pre(DECL_ARGS);
>  static	int	  termp_ft_pre(DECL_ARGS);
> +static	int	  termp_igndelim_pre(DECL_ARGS);
>  static	int	  termp_in_pre(DECL_ARGS);
>  static	int	  termp_it_pre(DECL_ARGS);
>  static	int	  termp_li_pre(DECL_ARGS);
> @@ -105,7 +106,6 @@ static	int	  termp_lk_pre(DECL_ARGS);
>  static	int	  termp_nd_pre(DECL_ARGS);
>  static	int	  termp_nm_pre(DECL_ARGS);
>  static	int	  termp_ns_pre(DECL_ARGS);
> -static	int	  termp_pf_pre(DECL_ARGS);
>  static	int	  termp_quote_pre(DECL_ARGS);
>  static	int	  termp_rs_pre(DECL_ARGS);
>  static	int	  termp_rv_pre(DECL_ARGS);
> @@ -192,12 +192,12 @@ static	const struct termact termacts[MDO
>  	{ NULL, NULL }, /* Eo */
>  	{ termp_xx_pre, NULL }, /* Fx */
>  	{ termp_bold_pre, NULL }, /* Ms */
> -	{ NULL, NULL }, /* No */
> +	{ termp_igndelim_pre, NULL }, /* No */
>  	{ termp_ns_pre, NULL }, /* Ns */
>  	{ termp_xx_pre, NULL }, /* Nx */
>  	{ termp_xx_pre, NULL }, /* Ox */
>  	{ NULL, NULL }, /* Pc */
> -	{ termp_pf_pre, termp_pf_post }, /* Pf */
> +	{ termp_igndelim_pre, termp_pf_post }, /* Pf */
>  	{ termp_quote_pre, termp_quote_post }, /* Po */
>  	{ termp_quote_pre, termp_quote_post }, /* Pq */
>  	{ NULL, NULL }, /* Qc */
> @@ -1680,7 +1680,7 @@ termp_xx_pre(DECL_ARGS)
>  
>  /* ARGSUSED */
>  static int
> -termp_pf_pre(DECL_ARGS)
> +termp_igndelim_pre(DECL_ARGS)
>  {
>  
>  	p->flags |= TERMP_IGNDELIM;
> @@ -1693,7 +1693,6 @@ static void
>  termp_pf_post(DECL_ARGS)
>  {
>  
> -	p->flags &= ~TERMP_IGNDELIM;
>  	p->flags |= TERMP_NOSPACE;
>  }
>  
> Index: term.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/mandoc/term.c,v
> retrieving revision 1.51
> diff -u -p -r1.51 term.c
> --- term.c	23 Sep 2010 20:22:31 -0000	1.51
> +++ term.c	1 Oct 2010 20:32:43 -0000
> @@ -501,7 +501,7 @@ term_word(struct termp *p, const char *w
>  	else
>  		p->flags |= TERMP_NOSPACE;
>  
> -	p->flags &= ~TERMP_SENTENCE;
> +	p->flags &= ~(TERMP_SENTENCE | TERMP_IGNDELIM);
>  
>  	while (*word) {
>  		if ((ssz = strcspn(word, "\\")) > 0)
> --
>  To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv
> 
> Received: from mx3.kth.se (130.237.48.97) by EXHUB2.ug.kth.se (130.237.32.137)
>  with Microsoft SMTP Server id 14.0.702.0; Fri, 1 Oct 2010 22:50:12 +0200
> X-KTH-mail-from: kristaps+caf_=kristaps=kth.se@bsd.lv
> X-KTH-rcpt-to: kristaps@ug.kth.se
> Received: from mx4.kth.se (mx4.kth.se [130.237.48.62])	by mx3.kth.se (Postfix)
>  with ESMTP id EE8B468135	for <kristaps@ug.kth.se>; Fri,  1 Oct 2010 22:50:11
>  +0200 (CEST)
> X-Virus-Scanned: by amavisd-new at kth.se
> X-Spam-Flag: NO
> X-Spam-Score: 0.001
> X-Spam-Level:
> X-Spam-Status: No, score=0.001 tagged_above=-200 required=5
> 	tests=[BAYES_50=0.001] autolearn=no
> Received: from mx3.kth.se ([130.237.48.97])	by mx4.kth.se (mx4.kth.se
>  [130.237.48.62]) (amavisd-new, port 10024)	with LMTP id LOSsZjDKi1hN for
>  <kristaps@ug.kth.se>;	Fri,  1 Oct 2010 22:50:09 +0200 (CEST)
> X-KTH-mail-from: kristaps+caf_=kristaps=kth.se@bsd.lv
> X-KTH-rcpt-to: kristaps@kth.se
> Received: from mail-px0-f173.google.com (mail-px0-f173.google.com
>  [209.85.212.173])	by mx3.kth.se (Postfix) with ESMTP id 7CC416970A	for
>  <kristaps@kth.se>; Fri,  1 Oct 2010 22:50:06 +0200 (CEST)
> Received: by pxi12 with SMTP id 12so1062665pxi.18        for
>  <kristaps@kth.se>; Fri, 01 Oct 2010 13:50:05 -0700 (PDT)
> Received: by 10.142.231.11 with SMTP id d11mr5236398wfh.222.1285966205370;
>         Fri, 01 Oct 2010 13:50:05 -0700 (PDT)
> X-Forwarded-To: kristaps@kth.se
> X-Forwarded-For: kristaps@bsd.lv kristaps@kth.se
> Delivered-To: kristaps@bsd.lv
> Received: by 10.142.203.10 with SMTP id a10cs55009wfg;        Fri, 1 Oct 2010
>  13:50:05 -0700 (PDT)
> Received: by 10.224.43.232 with SMTP id x40mr4225959qae.73.1285966203834;
>         Fri, 01 Oct 2010 13:50:03 -0700 (PDT)
> Received: from krisdoz.my.domain (66.111.2.196.static.nyinternet.net
>  [66.111.2.196])        by mx.google.com with ESMTP id
>  t34si3062683qco.81.2010.10.01.13.50.02;        Fri, 01 Oct 2010 13:50:03
>  -0700 (PDT)
> Received-SPF: neutral (google.com: 66.111.2.196 is neither permitted nor denied by best guess record for domain of tech+bounces-164-kristaps=bsd.lv@mdocml.bsd.lv) client-ip=66.111.2.196;
> Authentication-Results: mx.google.com; spf=neutral (google.com: 66.111.2.196 is neither permitted nor denied by best guess record for domain of tech+bounces-164-kristaps=bsd.lv@mdocml.bsd.lv) smtp.mail=tech+bounces-164-kristaps=bsd.lv@mdocml.bsd.lv
> Received: from krisdoz.my.domain (daemon@localhost [127.0.0.1])	by
>  krisdoz.my.domain (8.14.3/8.14.3) with SMTP id o91Ko1nq002554	for
>  <kristaps@bsd.lv>; Fri, 1 Oct 2010 16:50:01 -0400 (EDT)
> Received: from smtp1.rz.uni-karlsruhe.de
>  (Debian-exim@smtp1.rz.uni-karlsruhe.de [129.13.185.217])	by krisdoz.my.domain
>  (8.14.3/8.14.3) with ESMTP id o91KnwVL020030	for <tech@mdocml.bsd.lv>; Fri, 1
>  Oct 2010 16:50:01 -0400 (EDT)
> Received: from hekate.usta.de (asta-nat.asta.uni-karlsruhe.de [172.22.63.82])
> 	by smtp1.rz.uni-karlsruhe.de with esmtp (Exim 4.63 #1)	id 1P1mYG-0005H4-7b;
>  Fri, 01 Oct 2010 22:49:56 +0200
> Received: from donnerwolke.usta.de ([172.24.96.3])	by hekate.usta.de with
>  esmtp (Exim 4.71)	(envelope-from <schwarze@usta.de>)	id 1P1mYG-0006uz-6k	for
>  tech@mdocml.bsd.lv; Fri, 01 Oct 2010 22:49:56 +0200
> Received: from iris.usta.de ([172.24.96.5] helo=usta.de)	by
>  donnerwolke.usta.de with esmtp (Exim 4.69)	(envelope-from <schwarze@usta.de>)
> 	id 1P1mYG-0004CX-5e	for tech@mdocml.bsd.lv; Fri, 01 Oct 2010 22:49:56 +0200
> Received: from schwarze by usta.de with local (Exim 4.71)	(envelope-from
>  <schwarze@usta.de>)	id 1P1mYG-0005dl-0L	for tech@mdocml.bsd.lv; Fri, 01 Oct
>  2010 22:49:56 +0200
> Date: Fri, 1 Oct 2010 22:49:55 +0200
> From: Ingo Schwarze <schwarze@usta.de>
> To: <tech@mdocml.bsd.lv>
> Subject: Re: [PATCH] TODO entries for `Ns' and `No' spacing.
> Message-ID: <20101001204955.GA17696@iris.usta.de>
> References: <4CA45693.10809@bsd.lv>
>  <20101001002311.GB10250@iris.usta.de>
> X-Mailinglist: mdocml-tech
> Reply-To: <tech@mdocml.bsd.lv>
> Content-Type: text/plain; charset="us-ascii"
> Content-Disposition: inline
> In-Reply-To: <20101001002311.GB10250@iris.usta.de>
> User-Agent: Mutt/1.5.20 (2009-06-14)
> Return-Path: kristaps+caf_=kristaps=kth.se@bsd.lv
> X-MS-Exchange-Organization-AuthSource: EXHUB2.ug.kth.se
> X-MS-Exchange-Organization-AuthAs: Anonymous
> X-MS-Exchange-Organization-AVStamp-Mailbox: MSFTFF;1;0;0 0 0
> MIME-Version: 1.0
> 
> Replying to myself...
> 
> Ingo Schwarze wrote on Fri, Oct 01, 2010 at 02:23:12AM +0200:
> 
>> With the updated patch included below, i do not see the two
>> problems any longer, and i see no regressions.  I'm not sure
>> that solution is ideal, though; the trick to get TERMP_IGNDELIM
>> to the right places by limiting .No to one argument looks
>> rather artificial.  But i'm too tired now to rethink that.
> 
> It worked, but it was crap all the same.
> Here is a better solution.
> 
> Observe that TERMP_IGNDELIM and HTML_IGNDELIM only act on the
> beginning of one single word, since MDOC_Pf can only have one
> argument.  Thus, make them follow the same logic as TERMP_NOSPACE:
> clear after use.
> 
> That way, we can use the same *_igndelim_pre functions for .No and .Pf,
> we can cut down the *_pf_post functions to half the amount of code
> (wow! ;) and we don't need any post function for No.
> 
> Both .Pf and .No extensively tested manually, builds all OpenBSD
> manuals, no regressions in src/bin and src/sbin, no regressions
> in my test suites, fixes a few spacing issues in csh.1 and ksh.1.
> 
> OK to commit?
>   Ingo

Ingo, what the hell?  You beat me to the same solution!

Pop it in!

Kristaps
--
 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:[~2010-10-01 20:51 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-09-30  9:21 [PATCH] TODO entries for `Ns' and `No' spacing Kristaps Dzonsons
2010-10-01  0:23 ` Ingo Schwarze
2010-10-01 20:49   ` Ingo Schwarze
2010-10-01 20:52     ` Kristaps Dzonsons

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