]> git.cameronkatri.com Git - mandoc.git/blobdiff - man.c
Added default print of `~' with empty `Pa' (not documented with OpenBSD, but still...
[mandoc.git] / man.c
diff --git a/man.c b/man.c
index 7d197ff4905d842bde876ea022584640d9f51aec..c27ddaf8002c4e527f5984907d2f21be24a31858 100644 (file)
--- a/man.c
+++ b/man.c
@@ -1,4 +1,4 @@
-/*     $Id: man.c,v 1.22 2009/06/18 10:32:00 kristaps Exp $ */
+/*     $Id: man.c,v 1.27 2009/07/07 09:35:40 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
 
 #include "libman.h"
 
+const  char *const __man_merrnames[WERRMAX] = {                 
+       "invalid character", /* WNPRINT */
+       "system: malloc error", /* WNMEM */
+       "invalid manual section", /* WMSEC */
+       "invalid date format", /* WDATE */
+       "scope of prior line violated", /* WLNSCOPE */
+       "trailing whitespace", /* WTSPACE */
+       "unterminated quoted parameter", /* WTQUOTE */
+       "document has no body", /* WNODATA */
+       "document has no title/section", /* WNOTITLE */
+       "invalid escape sequence", /* WESCAPE */
+};
+
 const  char *const __man_macronames[MAN_MAX] = {                
        "br",           "TH",           "SH",           "SS",
        "TP",           "LP",           "PP",           "P",
@@ -252,6 +265,8 @@ man_node_free(struct man_node *p)
 
        if (p->string)
                free(p->string);
+       if (p->parent)
+               p->parent->nchild--;
        free(p);
 }
 
@@ -265,6 +280,7 @@ man_node_freelist(struct man_node *p)
        if (p->next)
                man_node_freelist(p->next);
 
+       assert(0 == p->nchild);
        man_node_free(p);
 }
 
@@ -434,3 +450,16 @@ man_vwarn(struct man *man, int ln, int pos, const char *fmt, ...)
 }
 
 
+int
+man_err(struct man *m, int line, int pos, int iserr, enum merr type)
+{
+       const char       *p;
+       
+       p = __man_merrnames[(int)type];
+       assert(p);
+
+       if (iserr)
+               return(man_verr(m, line, pos, p));
+
+       return(man_vwarn(m, line, pos, p));
+}