]> git.cameronkatri.com Git - mandoc.git/commitdiff
Unify some node handling functions that use TOKEN_NONE.
authorIngo Schwarze <schwarze@openbsd.org>
Sun, 19 Apr 2015 14:25:41 +0000 (14:25 +0000)
committerIngo Schwarze <schwarze@openbsd.org>
Sun, 19 Apr 2015 14:25:41 +0000 (14:25 +0000)
* mdoc_word_alloc(), man_word_alloc() -> roff_word_alloc()
* mdoc_word_append(), man_word_append() -> roff_word_append()
* mdoc_addspan(), man_addspan() -> roff_addtbl()
* mdoc_addeqn(), man_addeqn() -> roff_addeqn()
Minus 50 lines of code, no functional change.

libman.h
libmandoc.h
libmdoc.h
man.c
man_macro.c
mdoc.c
mdoc_macro.c
mdoc_validate.c
read.c
roff.c
roff_int.h

index ab407fc5f3e4ec70de4613d679bb4bb9d97f5daf..30b0a3268079adde811f8a0c186fdeaa8d4a0978 100644 (file)
--- a/libman.h
+++ b/libman.h
@@ -1,4 +1,4 @@
-/*     $Id: libman.h,v 1.74 2015/04/19 13:50:25 schwarze Exp $ */
+/*     $Id: libman.h,v 1.75 2015/04/19 14:25:41 schwarze Exp $ */
 /*
  * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -36,8 +36,6 @@ extern        const struct man_macro *const man_macros;
 
 __BEGIN_DECLS
 
-void             man_word_alloc(struct roff_man *, int, int, const char *);
-void             man_word_append(struct roff_man *, const char *);
 void             man_block_alloc(struct roff_man *, int, int, int);
 void             man_elem_alloc(struct roff_man *, int, int, int);
 int              man_hash_find(const char *);
index 2e8a58afbb69810de454a3966f9f1cbe5201674b..22dcb5e79496db9d22c864c539b435000c85950a 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: libmandoc.h,v 1.59 2015/04/19 13:50:25 schwarze Exp $ */
+/*     $Id: libmandoc.h,v 1.60 2015/04/19 14:25:41 schwarze Exp $ */
 /*
  * Copyright (c) 2009, 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -58,14 +58,10 @@ const char  *mandoc_a2msec(const char*);
 void            mdoc_hash_init(void);
 int             mdoc_parseln(struct roff_man *, int, char *, int);
 void            mdoc_endparse(struct roff_man *);
-void            mdoc_addspan(struct roff_man *, const struct tbl_span *);
-void            mdoc_addeqn(struct roff_man *, const struct eqn *);
 
 void            man_hash_init(void);
 int             man_parseln(struct roff_man *, int, char *, int);
 void            man_endparse(struct roff_man *);
-void            man_addspan(struct roff_man *, const struct tbl_span *);
-void            man_addeqn(struct roff_man *, const struct eqn *);
 
 int             preconv_cue(const struct buf *, size_t);
 int             preconv_encode(struct buf *, size_t *,
index abee09672217a999a89e8c9dcf7653c759fa5a45..3f9e3365d2a5ed3b4b5fe0281da16e18b0aa22f5 100644 (file)
--- a/libmdoc.h
+++ b/libmdoc.h
@@ -1,4 +1,4 @@
-/*     $Id: libmdoc.h,v 1.103 2015/04/19 13:50:25 schwarze Exp $ */
+/*     $Id: libmdoc.h,v 1.104 2015/04/19 14:25:41 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -67,8 +67,6 @@ extern        const struct mdoc_macro *const mdoc_macros;
 __BEGIN_DECLS
 
 void             mdoc_macro(MACRO_PROT_ARGS);
-void             mdoc_word_alloc(struct roff_man *, int, int, const char *);
-void             mdoc_word_append(struct roff_man *, const char *);
 void             mdoc_elem_alloc(struct roff_man *, int, int,
                        int, struct mdoc_arg *);
 struct roff_node *mdoc_block_alloc(struct roff_man *, int, int,
@@ -82,11 +80,8 @@ const char    *mdoc_a2att(const char *);
 const char      *mdoc_a2lib(const char *);
 const char      *mdoc_a2st(const char *);
 const char      *mdoc_a2arch(const char *);
-void             mdoc_valid_pre(struct roff_man *, struct roff_node *);
-void             mdoc_valid_post(struct roff_man *);
 void             mdoc_argv(struct roff_man *, int, int,
                        struct mdoc_arg **, int *, char *);
-void             mdoc_argv_free(struct mdoc_arg *);
 enum margserr    mdoc_args(struct roff_man *, int,
                        int *, char *, int, char **);
 void             mdoc_macroend(struct roff_man *);
diff --git a/man.c b/man.c
index cebe1b73f6fa54fc0b7a161c23543ed7f7a86a55..6c0b17875de06908cfe210c7c25dea5a59fe14d5 100644 (file)
--- a/man.c
+++ b/man.c
@@ -1,4 +1,4 @@
-/*     $Id: man.c,v 1.159 2015/04/19 14:00:19 schwarze Exp $ */
+/*     $Id: man.c,v 1.160 2015/04/19 14:25:41 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -50,7 +50,6 @@ const char *const __man_macronames[MAN_MAX] = {
 
 const  char * const *man_macronames = __man_macronames;
 
-static void             man_breakscope(struct roff_man *, int);
 static void             man_descope(struct roff_man *, int, int);
 static int              man_ptext(struct roff_man *, int, char *, int);
 static int              man_pmacro(struct roff_man *, int, char *, int);
@@ -95,61 +94,6 @@ man_block_alloc(struct roff_man *man, int line, int pos, int tok)
        man->next = ROFF_NEXT_CHILD;
 }
 
-void
-man_word_alloc(struct roff_man *man, int line, int pos, const char *word)
-{
-       struct roff_node *n;
-
-       n = roff_node_alloc(man, line, pos, ROFFT_TEXT, TOKEN_NONE);
-       n->string = roff_strdup(man->roff, word);
-       roff_node_append(man, n);
-       man_valid_post(man);
-       man->next = ROFF_NEXT_SIBLING;
-}
-
-void
-man_word_append(struct roff_man *man, const char *word)
-{
-       struct roff_node *n;
-       char            *addstr, *newstr;
-
-       n = man->last;
-       addstr = roff_strdup(man->roff, word);
-       mandoc_asprintf(&newstr, "%s %s", n->string, addstr);
-       free(addstr);
-       free(n->string);
-       n->string = newstr;
-       man->next = ROFF_NEXT_SIBLING;
-}
-
-void
-man_addeqn(struct roff_man *man, const struct eqn *ep)
-{
-       struct roff_node *n;
-
-       n = roff_node_alloc(man, ep->ln, ep->pos, ROFFT_EQN, TOKEN_NONE);
-       n->eqn = ep;
-       if (ep->ln > man->last->line)
-               n->flags |= MAN_LINE;
-       roff_node_append(man, n);
-       man->next = ROFF_NEXT_SIBLING;
-       man_descope(man, ep->ln, ep->pos);
-}
-
-void
-man_addspan(struct roff_man *man, const struct tbl_span *sp)
-{
-       struct roff_node *n;
-
-       man_breakscope(man, TOKEN_NONE);
-       n = roff_node_alloc(man, sp->line, 0, ROFFT_TBL, TOKEN_NONE);
-       n->span = sp;
-       roff_node_append(man, n);
-       man_valid_post(man);
-       man->next = ROFF_NEXT_SIBLING;
-       man_descope(man, sp->line, 0);
-}
-
 static void
 man_descope(struct roff_man *man, int line, int offs)
 {
@@ -178,7 +122,7 @@ man_ptext(struct roff_man *man, int line, char *buf, int offs)
        /* Literal free-form text whitespace is preserved. */
 
        if (man->flags & MAN_LITERAL) {
-               man_word_alloc(man, line, offs, buf + offs);
+               roff_word_alloc(man, line, offs, buf + offs);
                man_descope(man, line, offs);
                return(1);
        }
@@ -222,7 +166,7 @@ man_ptext(struct roff_man *man, int line, char *buf, int offs)
 
                buf[i] = '\0';
        }
-       man_word_alloc(man, line, offs, buf + offs);
+       roff_word_alloc(man, line, offs, buf + offs);
 
        /*
         * End-of-sentence check.  If the last character is an unescaped
index 55dc31cd6e1dd446553984ef5fb58086574d2c0e..d82811d44735f34cb9b11d854291b88a9c73acd6 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: man_macro.c,v 1.106 2015/04/19 13:50:25 schwarze Exp $ */
+/*     $Id: man_macro.c,v 1.107 2015/04/19 14:25:41 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2012, 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -264,7 +264,7 @@ blk_exp(MACRO_PROT_ARGS)
 
        la = *pos;
        if (man_args(man, line, pos, buf, &p))
-               man_word_alloc(man, line, la, p);
+               roff_word_alloc(man, line, la, p);
 
        if (buf[*pos] != '\0')
                mandoc_vmsg(MANDOCERR_ARG_EXCESS,
@@ -301,7 +301,7 @@ blk_imp(MACRO_PROT_ARGS)
                la = *pos;
                if ( ! man_args(man, line, pos, buf, &p))
                        break;
-               man_word_alloc(man, line, la, p);
+               roff_word_alloc(man, line, la, p);
        }
 
        /*
@@ -352,9 +352,9 @@ in_line_eoln(MACRO_PROT_ARGS)
                        break;
                if (man_macros[tok].flags & MAN_JOIN &&
                    man->last->type == ROFFT_TEXT)
-                       man_word_append(man, p);
+                       roff_word_append(man, p);
                else
-                       man_word_alloc(man, line, la, p);
+                       roff_word_alloc(man, line, la, p);
        }
 
        /*
diff --git a/mdoc.c b/mdoc.c
index 881355f997f98fb73c9487a384aa76286290d455..a397fafcfd64723534ab2fb2fc2d6083f285d4a4 100644 (file)
--- a/mdoc.c
+++ b/mdoc.c
@@ -1,4 +1,4 @@
-/*     $Id: mdoc.c,v 1.248 2015/04/19 14:00:19 schwarze Exp $ */
+/*     $Id: mdoc.c,v 1.249 2015/04/19 14:25:41 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2012-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -96,31 +96,6 @@ mdoc_endparse(struct roff_man *mdoc)
        mdoc_macroend(mdoc);
 }
 
-void
-mdoc_addeqn(struct roff_man *mdoc, const struct eqn *ep)
-{
-       struct roff_node *n;
-
-       n = roff_node_alloc(mdoc, ep->ln, ep->pos, ROFFT_EQN, TOKEN_NONE);
-       n->eqn = ep;
-       if (ep->ln > mdoc->last->line)
-               n->flags |= MDOC_LINE;
-       roff_node_append(mdoc, n);
-       mdoc->next = ROFF_NEXT_SIBLING;
-}
-
-void
-mdoc_addspan(struct roff_man *mdoc, const struct tbl_span *sp)
-{
-       struct roff_node *n;
-
-       n = roff_node_alloc(mdoc, sp->line, 0, ROFFT_TBL, TOKEN_NONE);
-       n->span = sp;
-       roff_node_append(mdoc, n);
-       mdoc_valid_post(mdoc);
-       mdoc->next = ROFF_NEXT_SIBLING;
-}
-
 /*
  * Main parse routine.  Parses a single line -- really just hands off to
  * the macro (mdoc_pmacro()) or text parser (mdoc_ptext()).
@@ -254,33 +229,6 @@ mdoc_elem_alloc(struct roff_man *mdoc, int line, int pos,
        mdoc->next = ROFF_NEXT_CHILD;
 }
 
-void
-mdoc_word_alloc(struct roff_man *mdoc, int line, int pos, const char *p)
-{
-       struct roff_node *n;
-
-       n = roff_node_alloc(mdoc, line, pos, ROFFT_TEXT, TOKEN_NONE);
-       n->string = roff_strdup(mdoc->roff, p);
-       roff_node_append(mdoc, n);
-       mdoc_valid_post(mdoc);
-       mdoc->next = ROFF_NEXT_SIBLING;
-}
-
-void
-mdoc_word_append(struct roff_man *mdoc, const char *p)
-{
-       struct roff_node        *n;
-       char                    *addstr, *newstr;
-
-       n = mdoc->last;
-       addstr = roff_strdup(mdoc->roff, p);
-       mandoc_asprintf(&newstr, "%s %s", n->string, addstr);
-       free(addstr);
-       free(n->string);
-       n->string = newstr;
-       mdoc->next = ROFF_NEXT_SIBLING;
-}
-
 void
 mdoc_node_relink(struct roff_man *mdoc, struct roff_node *p)
 {
@@ -387,7 +335,7 @@ mdoc_ptext(struct roff_man *mdoc, int line, char *buf, int offs)
                return(1);
        }
 
-       mdoc_word_alloc(mdoc, line, offs, buf+offs);
+       roff_word_alloc(mdoc, line, offs, buf+offs);
 
        if (mdoc->flags & MDOC_LITERAL)
                return(1);
index b19189e46708300671a78a4526b4207580511533..2f4bc6e1038111a3135c05213a8bd9852f10c45c 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_macro.c,v 1.191 2015/04/19 14:00:19 schwarze Exp $ */
+/*     $Id: mdoc_macro.c,v 1.192 2015/04/19 14:25:41 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2012-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -432,11 +432,11 @@ dword(struct roff_man *mdoc, int line, int col, const char *p,
            ! (mdoc->flags & (MDOC_SYNOPSIS | MDOC_KEEP | MDOC_SMOFF)) &&
            d == DELIM_NONE && mdoc->last->type == ROFFT_TEXT &&
            mdoc_isdelim(mdoc->last->string) == DELIM_NONE) {
-               mdoc_word_append(mdoc, p);
+               roff_word_append(mdoc, p);
                return;
        }
 
-       mdoc_word_alloc(mdoc, line, col, p);
+       roff_word_alloc(mdoc, line, col, p);
 
        /*
         * If the word consists of a bare delimiter,
index 4941865cf9cb5fe1a0ec594fb88e6a31ea7bf6a9..1df68760190c5c6f01f10b4b63d07e0f7143dd6e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_validate.c,v 1.288 2015/04/19 14:00:20 schwarze Exp $ */
+/*     $Id: mdoc_validate.c,v 1.289 2015/04/19 14:25:41 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -1051,13 +1051,13 @@ post_defaults(POST_ARGS)
 
        switch (nn->tok) {
        case MDOC_Ar:
-               mdoc_word_alloc(mdoc, nn->line, nn->pos, "file");
-               mdoc_word_alloc(mdoc, nn->line, nn->pos, "...");
+               roff_word_alloc(mdoc, nn->line, nn->pos, "file");
+               roff_word_alloc(mdoc, nn->line, nn->pos, "...");
                break;
        case MDOC_Pa:
                /* FALLTHROUGH */
        case MDOC_Mt:
-               mdoc_word_alloc(mdoc, nn->line, nn->pos, "~");
+               roff_word_alloc(mdoc, nn->line, nn->pos, "~");
                break;
        default:
                abort();
@@ -1076,7 +1076,7 @@ post_at(POST_ARGS)
        n = mdoc->last;
        if (n->child == NULL) {
                mdoc->next = ROFF_NEXT_CHILD;
-               mdoc_word_alloc(mdoc, n->line, n->pos, "AT&T UNIX");
+               roff_word_alloc(mdoc, n->line, n->pos, "AT&T UNIX");
                mdoc->last = n;
                return;
        }
@@ -2315,7 +2315,7 @@ post_ex(POST_ARGS)
        }
 
        mdoc->next = ROFF_NEXT_CHILD;
-       mdoc_word_alloc(mdoc, n->line, n->pos, mdoc->meta.name);
+       roff_word_alloc(mdoc, n->line, n->pos, mdoc->meta.name);
        mdoc->last = n;
 }
 
diff --git a/read.c b/read.c
index b4b71b5d66818e27566ae175d7a6bcb46ff985da..11836f5cc8c1ab82cb552d7b29bc6b7cebd90c73 100644 (file)
--- a/read.c
+++ b/read.c
@@ -1,4 +1,4 @@
-/*     $Id: read.c,v 1.138 2015/04/19 14:00:20 schwarze Exp $ */
+/*     $Id: read.c,v 1.139 2015/04/19 14:25:41 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -43,6 +43,7 @@
 #include "mdoc.h"
 #include "man.h"
 #include "libmandoc.h"
+#include "roff_int.h"
 
 #define        REPARSE_LIMIT   1000
 
@@ -583,18 +584,12 @@ rerun:
                 * Do the same for ROFF_EQN.
                 */
 
-               if (rr == ROFF_TBL) {
+               if (rr == ROFF_TBL)
                        while ((span = roff_span(curp->roff)) != NULL)
-                               if (curp->man->macroset == MACROSET_MDOC)
-                                       mdoc_addspan(curp->man, span);
-                               else
-                                       man_addspan(curp->man, span);
-               } else if (rr == ROFF_EQN) {
-                       if (curp->man->macroset == MACROSET_MDOC)
-                               mdoc_addeqn(curp->man, roff_eqn(curp->roff));
-                       else
-                               man_addeqn(curp->man, roff_eqn(curp->roff));
-               } else if ((curp->man->macroset == MACROSET_MDOC ?
+                               roff_addtbl(curp->man, span);
+               else if (rr == ROFF_EQN)
+                       roff_addeqn(curp->man, roff_eqn(curp->roff));
+               else if ((curp->man->macroset == MACROSET_MDOC ?
                    mdoc_parseln(curp->man, curp->line, ln.buf, of) :
                    man_parseln(curp->man, curp->line, ln.buf, of)) == 2)
                                break;
diff --git a/roff.c b/roff.c
index d671e5cd9ba72ed4aac20bcf6e30e5c31330ed2c..6995bbd3208da0f142e7e1703ba6a5268520f537 100644 (file)
--- a/roff.c
+++ b/roff.c
@@ -1,6 +1,6 @@
-/*     $Id: roff.c,v 1.266 2015/04/19 13:50:26 schwarze Exp $ */
+/*     $Id: roff.c,v 1.267 2015/04/19 14:25:41 schwarze Exp $ */
 /*
- * Copyright (c) 2009-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
+ * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
@@ -32,7 +32,6 @@
 #include "libmandoc.h"
 #include "roff_int.h"
 #include "libroff.h"
-#include "libmdoc.h"
 
 /* Maximum number of nested if-else conditionals. */
 #define        RSTACK_MAX      128
@@ -1067,6 +1066,36 @@ roff_node_append(struct roff_man *man, struct roff_node *n)
        man->last = n;
 }
 
+void
+roff_word_alloc(struct roff_man *man, int line, int pos, const char *word)
+{
+       struct roff_node        *n;
+
+       n = roff_node_alloc(man, line, pos, ROFFT_TEXT, TOKEN_NONE);
+       n->string = roff_strdup(man->roff, word);
+       roff_node_append(man, n);
+       if (man->macroset == MACROSET_MDOC)
+               mdoc_valid_post(man);
+       else
+               man_valid_post(man);
+       man->next = ROFF_NEXT_SIBLING;
+}
+
+void
+roff_word_append(struct roff_man *man, const char *word)
+{
+       struct roff_node        *n;
+       char                    *addstr, *newstr;
+
+       n = man->last;
+       addstr = roff_strdup(man->roff, word);
+       mandoc_asprintf(&newstr, "%s %s", n->string, addstr);
+       free(addstr);
+       free(n->string);
+       n->string = newstr;
+       man->next = ROFF_NEXT_SIBLING;
+}
+
 struct roff_node *
 roff_head_alloc(struct roff_man *man, int line, int pos, int tok)
 {
@@ -1089,6 +1118,36 @@ roff_body_alloc(struct roff_man *man, int line, int pos, int tok)
        return(n);
 }
 
+void
+roff_addeqn(struct roff_man *man, const struct eqn *eqn)
+{
+       struct roff_node        *n;
+
+       n = roff_node_alloc(man, eqn->ln, eqn->pos, ROFFT_EQN, TOKEN_NONE);
+       n->eqn = eqn;
+       if (eqn->ln > man->last->line)
+               n->flags |= MDOC_LINE;
+       roff_node_append(man, n);
+       man->next = ROFF_NEXT_SIBLING;
+}
+
+void
+roff_addtbl(struct roff_man *man, const struct tbl_span *tbl)
+{
+       struct roff_node        *n;
+
+       if (man->macroset == MACROSET_MAN)
+               man_breakscope(man, TOKEN_NONE);
+       n = roff_node_alloc(man, tbl->line, 0, ROFFT_TBL, TOKEN_NONE);
+       n->span = tbl;
+       roff_node_append(man, n);
+       if (man->macroset == MACROSET_MDOC)
+               mdoc_valid_post(man);
+       else
+               man_valid_post(man);
+       man->next = ROFF_NEXT_SIBLING;
+}
+
 void
 roff_node_unlink(struct roff_man *man, struct roff_node *n)
 {
index 4d3386282551748478a016758aec761b0db1da81..41cb4d938c48702ca709ff6ab9cb68a676c7097f 100644 (file)
@@ -1,7 +1,7 @@
-/*     $OpenBSD$       */
+/*     $Id: roff_int.h,v 1.2 2015/04/19 14:25:41 schwarze Exp $        */
 /*
  * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -21,10 +21,27 @@ __BEGIN_DECLS
 struct roff_node *roff_node_alloc(struct roff_man *, int, int,
                        enum roff_type, int);
 void             roff_node_append(struct roff_man *, struct roff_node *);
+void             roff_word_alloc(struct roff_man *, int, int, const char *);
+void             roff_word_append(struct roff_man *, const char *);
 struct roff_node *roff_head_alloc(struct roff_man *, int, int, int);
 struct roff_node *roff_body_alloc(struct roff_man *, int, int, int);
+void             roff_addeqn(struct roff_man *, const struct eqn *);
+void             roff_addtbl(struct roff_man *, const struct tbl_span *);
 void             roff_node_unlink(struct roff_man *, struct roff_node *);
 void             roff_node_free(struct roff_node *);
 void             roff_node_delete(struct roff_man *, struct roff_node *);
 
+/*
+ * Functions called from roff.c need to be declared here,
+ * not in libmdoc.h or libman.h, even if they are specific
+ * to either the mdoc(7) or the man(7) parser.
+ */
+
+void             man_breakscope(struct roff_man *, int);
+void             man_valid_post(struct roff_man *);
+
+void             mdoc_valid_pre(struct roff_man *, struct roff_node *);
+void             mdoc_valid_post(struct roff_man *);
+void             mdoc_argv_free(struct mdoc_arg *);
+
 __END_DECLS