]> git.cameronkatri.com Git - mandoc.git/commitdiff
Suppress whitespace following Pp, Lp, sp, and the other newline-emitting
authorKristaps Dzonsons <kristaps@bsd.lv>
Mon, 27 Sep 2010 11:21:39 +0000 (11:21 +0000)
committerKristaps Dzonsons <kristaps@bsd.lv>
Mon, 27 Sep 2010 11:21:39 +0000 (11:21 +0000)
macros within an unfilled or literal `Bd'.

TODO
mdoc.7
mdoc_html.c
mdoc_term.c

diff --git a/TODO b/TODO
index 71cb89aca7dfbdb8432efa3936ab78334e64a3ff..0e05360625e219e54cc4e68fe951f3b78319684f 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,6 +1,6 @@
 ************************************************************************
 * Official mandoc TODO.
-* $Id: TODO,v 1.54 2010/09/27 10:47:48 kristaps Exp $
+* $Id: TODO,v 1.55 2010/09/27 11:21:39 kristaps Exp $
 ************************************************************************
 
 ************************************************************************
   In -unfilled, tabs are 5 spaces, just like in -filled and -ragged.
   See the CCDF_* display in OpenBSD ccdconfig(8).
 
-- In .Bd -unfilled, .Pp should produce one blank line, not two;
-  see the ccd.conf display in OpenBSD ccdconfig(8).
-
 - .Nx 1.0a
   should be "NetBSD 1.0A", not "NetBSD 1.0a",
   see OpenBSD ccdconfig(8).
diff --git a/mdoc.7 b/mdoc.7
index b66829cb3a28b73786f1791269e4145f8b96c4b2..e116e7485ef0ffbe5be8b9ba8e7124e36fbb380c 100644 (file)
--- a/mdoc.7
+++ b/mdoc.7
@@ -1,4 +1,4 @@
-.\"    $Id: mdoc.7,v 1.160 2010/09/27 06:56:44 kristaps Exp $
+.\"    $Id: mdoc.7,v 1.161 2010/09/27 11:21:39 kristaps Exp $
 .\"
 .\" Copyright (c) 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
 .\" Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
@@ -1076,7 +1076,8 @@ implementations render it poorly.
 Left- and right-justify the block.
 .It Fl literal
 Do not justify the block at all.
-Preserve white space as it appears in the input.
+Preserve white space and newlines as they appear in the input, including
+if it follows a macro.
 .It Fl ragged
 Only left-justify the block.
 .It Fl unfilled
index 08f34133b3f8397636cf9e11e982bc1e19fc5fb3..a621936a5ecfeb20d1788bc6d9a5d69d074291de 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_html.c,v 1.107 2010/09/26 10:32:14 kristaps Exp $ */
+/*     $Id: mdoc_html.c,v 1.108 2010/09/27 11:21:39 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  *
@@ -1316,6 +1316,26 @@ mdoc_bd_pre(MDOC_ARGS)
 
        for (nn = n->child; nn; nn = nn->next) {
                print_mdoc_node(m, nn, h);
+               /*
+                * If the printed node flushes its own line, then we
+                * needn't do it here as well.  This is hacky, but the
+                * notion of selective eoln whitespace is pretty dumb
+                * anyway, so don't sweat it.
+                */
+               switch (nn->tok) {
+               case (MDOC_br):
+                       /* FALLTHROUGH */
+               case (MDOC_sp):
+                       /* FALLTHROUGH */
+               case (MDOC_Bl):
+                       /* FALLTHROUGH */
+               case (MDOC_Lp):
+                       /* FALLTHROUGH */
+               case (MDOC_Pp):
+                       continue;
+               default:
+                       break;
+               }
                if (nn->next && nn->next->line == nn->line)
                        continue;
                print_text(h, "\n");
index 5df90460b78c13356ebb77b71a1d4591beb983c1..d57eacd9dbc7dccc060e84cd11cc0aaebdaa11f6 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_term.c,v 1.189 2010/09/26 10:00:42 kristaps Exp $ */
+/*     $Id: mdoc_term.c,v 1.190 2010/09/27 11:21:39 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
@@ -1578,6 +1578,26 @@ termp_bd_pre(DECL_ARGS)
 
        for (nn = n->child; nn; nn = nn->next) {
                print_mdoc_node(p, pair, m, nn);
+               /*
+                * If the printed node flushes its own line, then we
+                * needn't do it here as well.  This is hacky, but the
+                * notion of selective eoln whitespace is pretty dumb
+                * anyway, so don't sweat it.
+                */
+               switch (nn->tok) {
+               case (MDOC_br):
+                       /* FALLTHROUGH */
+               case (MDOC_sp):
+                       /* FALLTHROUGH */
+               case (MDOC_Bl):
+                       /* FALLTHROUGH */
+               case (MDOC_Lp):
+                       /* FALLTHROUGH */
+               case (MDOC_Pp):
+                       continue;
+               default:
+                       break;
+               }
                if (nn->next && nn->next->line == nn->line)
                        continue;
                term_flushln(p);