]> git.cameronkatri.com Git - mandoc.git/blobdiff - main.c
Make -T[x]html for tables structure cells with a width. I don't
[mandoc.git] / main.c
diff --git a/main.c b/main.c
index 79a252e96d35803e4de703b4ad3fca5b981c2d3e..2be68a9350b9a64dfbb761eb75061221ed1f3da3 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1,6 +1,6 @@
-/*     $Id: main.c,v 1.123 2010/12/15 23:39:40 kristaps Exp $ */
+/*     $Id: main.c,v 1.135 2011/01/04 15:02:00 kristaps Exp $ */
 /*
 /*
- * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
+ * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
@@ -145,6 +145,7 @@ static      const char * const      mandocerrs[MANDOCERR_MAX] = {
 
        /* related to macros and nesting */
        "skipping obsolete macro",
 
        /* related to macros and nesting */
        "skipping obsolete macro",
+       "skipping paragraph macro",
        "blocks badly nested",
        "child violates parent syntax",
        "nested displays are not portable",
        "blocks badly nested",
        "child violates parent syntax",
        "nested displays are not portable",
@@ -152,6 +153,7 @@ static      const char * const      mandocerrs[MANDOCERR_MAX] = {
 
        /* related to missing macro arguments */
        "skipping empty macro",
 
        /* related to missing macro arguments */
        "skipping empty macro",
+       "argument count wrong",
        "missing display type",
        "list type must come first",
        "tag lists require a width argument",
        "missing display type",
        "list type must come first",
        "tag lists require a width argument",
@@ -175,14 +177,25 @@ static    const char * const      mandocerrs[MANDOCERR_MAX] = {
        "bad comment style",
        "unknown escape sequence",
        "unterminated quoted string",
        "bad comment style",
        "unknown escape sequence",
        "unterminated quoted string",
+       
+       /* related to tables */
+       "extra data cells",
 
        "generic error",
 
 
        "generic error",
 
+       /* related to tables */
+       "bad table syntax",
+       "bad table option",
+       "bad table layout",
+       "no table layout cells specified",
+       "no table data cells specified",
+       "ignore data in cell",
+       "data block still open",
+
        "input stack limit exceeded, infinite loop?",
        "skipping bad character",
        "skipping text before the first section header",
        "skipping unknown macro",
        "input stack limit exceeded, infinite loop?",
        "skipping bad character",
        "skipping text before the first section header",
        "skipping unknown macro",
-       "skipping paragraph macro",
        "NOT IMPLEMENTED: skipping request",
        "line scope broken",
        "argument count wrong",
        "NOT IMPLEMENTED: skipping request",
        "line scope broken",
        "argument count wrong",
@@ -389,7 +402,7 @@ static void
 resize_buf(struct buf *buf, size_t initial)
 {
 
 resize_buf(struct buf *buf, size_t initial)
 {
 
-       buf->sz = buf->sz ? 2 * buf->sz : initial;
+       buf->sz = buf->sz > initial/2 ? 2 * buf->sz : initial;
        buf->buf = realloc(buf->buf, buf->sz);
        if (NULL == buf->buf) {
                perror(NULL);
        buf->buf = realloc(buf->buf, buf->sz);
        if (NULL == buf->buf) {
                perror(NULL);
@@ -522,10 +535,7 @@ fdesc(struct curparse *curp)
        }
 
        assert(curp->roff);
        }
 
        assert(curp->roff);
-       if ( ! roff_endparse(curp->roff)) {
-               assert(MANDOCLEVEL_FATAL <= file_status);
-               goto cleanup;
-       }
+       roff_endparse(curp->roff);
 
        /*
         * With -Wstop and warnings or errors of at least
 
        /*
         * With -Wstop and warnings or errors of at least
@@ -794,10 +804,18 @@ rerun:
                                continue;
                        } else
                                break;
                                continue;
                        } else
                                break;
-               case (ROFF_CONT):
+               default:
                        break;
                }
 
                        break;
                }
 
+               /*
+                * If we encounter errors in the recursive parsebuf()
+                * call, make sure we don't continue parsing.
+                */
+
+               if (MANDOCLEVEL_FATAL <= file_status)
+                       break;
+
                /*
                 * If input parsers have not been allocated, do so now.
                 * We keep these instanced betwen parsers, but set them
                /*
                 * If input parsers have not been allocated, do so now.
                 * We keep these instanced betwen parsers, but set them
@@ -812,9 +830,20 @@ rerun:
                 * Lastly, push down into the parsers themselves.  One
                 * of these will have already been set in the pset()
                 * routine.
                 * Lastly, push down into the parsers themselves.  One
                 * of these will have already been set in the pset()
                 * routine.
+                * If libroff returns ROFF_TBL, then add it to the
+                * currently open parse.  Since we only get here if
+                * there does exist data (see tbl_data.c), we're
+                * guaranteed that something's been allocated.
                 */
 
                 */
 
-               if (curp->man || curp->mdoc) {
+               if (ROFF_TBL == rr) {
+                       assert(curp->man || curp->mdoc);
+                       if (curp->man)
+                               man_addspan(curp->man, roff_span(curp->roff));
+                       else
+                               mdoc_addspan(curp->mdoc, roff_span(curp->roff));
+
+               } else if (curp->man || curp->mdoc) {
                        rc = curp->man ?
                                man_parseln(curp->man, 
                                        curp->line, ln.buf, of) :
                        rc = curp->man ?
                                man_parseln(curp->man, 
                                        curp->line, ln.buf, of) :