]> git.cameronkatri.com Git - mandoc.git/commitdiff
Ignore double-`Pp' and `Pp' before `Bd' and `Bl' (unless -compact is
authorKristaps Dzonsons <kristaps@bsd.lv>
Mon, 27 Sep 2010 09:26:27 +0000 (09:26 +0000)
committerKristaps Dzonsons <kristaps@bsd.lv>
Mon, 27 Sep 2010 09:26:27 +0000 (09:26 +0000)
specified).

TODO
main.c
mandoc.h
mdoc_validate.c

diff --git a/TODO b/TODO
index 9b549ebcb2e3249bd8a48cd2b4b8d2bf7d6d5ef7..be89eb691dcdf9af040001a3e6e2de18637974a8 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,6 +1,6 @@
 ************************************************************************
 * Official mandoc TODO.
-* $Id: TODO,v 1.52 2010/09/25 16:52:15 kristaps Exp $
+* $Id: TODO,v 1.53 2010/09/27 09:26:27 kristaps Exp $
 ************************************************************************
 
 ************************************************************************
   on the next line, it must be indented by -width, not width+1;
   see "rule block|pass" in OpenBSD ifconfig(8).
 
-- Bogus .Pp before .Bl should not cause a double blank line,
-  see "The route utility provides the following simple commands:"
-  in OpenBSD route(8).
-
 ************************************************************************
 * performance issues
 ************************************************************************
diff --git a/main.c b/main.c
index f1d6406248d24f9d57e4801e3c24d2a91980cfd5..97c3390b5ae681cd02ecb28ff585a6b95d788500 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/*     $Id: main.c,v 1.106 2010/09/26 20:22:28 schwarze Exp $ */
+/*     $Id: main.c,v 1.107 2010/09/27 09:26:27 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
@@ -174,6 +174,7 @@ static      const char * const      mandocerrs[MANDOCERR_MAX] = {
        "missing font type",
        "line argument(s) will be lost",
        "body argument(s) will be lost",
+       "paragraph macro ignored",
 
        "generic fatal error",
 
index ec603ace8b95acc6ead72386b624b5e35668fae5..aeda6494d6a336501aa4d8ef3902b77fe4f3896d 100644 (file)
--- a/mandoc.h
+++ b/mandoc.h
@@ -1,4 +1,4 @@
-/*     $Id: mandoc.h,v 1.19 2010/09/26 20:22:28 schwarze Exp $ */
+/*     $Id: mandoc.h,v 1.20 2010/09/27 09:26:27 kristaps Exp $ */
 /*
  * Copyright (c) 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  *
@@ -99,6 +99,7 @@ enum  mandocerr {
        MANDOCERR_FONTTYPE, /* missing font type */
        MANDOCERR_ARGSLOST, /* line argument(s) will be lost */
        MANDOCERR_BODYLOST, /* body argument(s) will be lost */
+       MANDOCERR_IGNPAR, /* paragraph macro ignored */
 
        MANDOCERR_FATAL, /* ===== end of fatal errors ===== */
 
index 617ee6e83ffb2bf441964f0e0a2610a1d3d4d7d0..783f2c7811af6e8ba1d50ada8822fb4686deb930 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_validate.c,v 1.116 2010/08/29 10:30:58 kristaps Exp $ */
+/*     $Id: mdoc_validate.c,v 1.117 2010/09/27 09:26:27 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  *
@@ -100,6 +100,7 @@ static      int      pre_display(PRE_ARGS);
 static int      pre_dt(PRE_ARGS);
 static int      pre_it(PRE_ARGS);
 static int      pre_os(PRE_ARGS);
+static int      pre_pp(PRE_ARGS);
 static int      pre_rv(PRE_ARGS);
 static int      pre_sh(PRE_ARGS);
 static int      pre_ss(PRE_ARGS);
@@ -129,8 +130,8 @@ static      v_post   posts_vt[] = { post_vt, NULL };
 static v_post   posts_wline[] = { bwarn_ge1, herr_eq0, NULL };
 static v_post   posts_wtext[] = { ewarn_ge1, NULL };
 static v_pre    pres_an[] = { pre_an, NULL };
-static v_pre    pres_bd[] = { pre_display, pre_bd, NULL };
-static v_pre    pres_bl[] = { pre_bl, NULL };
+static v_pre    pres_bd[] = { pre_display, pre_bd, pre_pp, NULL };
+static v_pre    pres_bl[] = { pre_bl, pre_pp, NULL };
 static v_pre    pres_d1[] = { pre_display, NULL };
 static v_pre    pres_dd[] = { pre_dd, NULL };
 static v_pre    pres_dt[] = { pre_dt, NULL };
@@ -139,6 +140,7 @@ static      v_pre    pres_ex[] = { NULL, NULL };
 static v_pre    pres_fd[] = { NULL, NULL };
 static v_pre    pres_it[] = { pre_it, NULL };
 static v_pre    pres_os[] = { pre_os, NULL };
+static v_pre    pres_pp[] = { pre_pp, NULL };
 static v_pre    pres_rv[] = { pre_rv, NULL };
 static v_pre    pres_sh[] = { pre_sh, NULL };
 static v_pre    pres_ss[] = { pre_ss, NULL };
@@ -150,7 +152,7 @@ const       struct valids mdoc_valids[MDOC_MAX] = {
        { pres_os, NULL },                      /* Os */
        { pres_sh, posts_sh },                  /* Sh */ 
        { pres_ss, posts_ss },                  /* Ss */ 
-       { NULL, posts_notext },                 /* Pp */ 
+       { pres_pp, posts_notext },              /* Pp */ 
        { pres_d1, posts_wline },               /* D1 */
        { pres_d1, posts_wline },               /* Dl */
        { pres_bd, posts_bd_bk },               /* Bd */
@@ -1465,3 +1467,21 @@ post_sh_head(POST_ARGS)
 
        return(1);
 }
+
+
+static int
+pre_pp(PRE_ARGS)
+{
+
+       if (NULL == mdoc->last || MDOC_Pp != mdoc->last->tok)
+               return(1);
+
+       if (MDOC_Bl == n->tok && n->data.Bl->comp)
+               return(1);
+       if (MDOC_Bd == n->tok && n->data.Bd->comp)
+               return(1);
+
+       mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_IGNPAR);
+       mdoc_node_delete(mdoc, mdoc->last);
+       return(1);
+}