]> git.cameronkatri.com Git - mandoc.git/blobdiff - tbl_layout.c
Correct an embarrassing spelling mistake:
[mandoc.git] / tbl_layout.c
index 5357d80871690293c0aac70776e2160453c59b70..b25677a2c0469f7fb3143db3d94d8b92580c940c 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: tbl_layout.c,v 1.43 2017/06/13 16:12:01 schwarze Exp $ */
+/*     $Id: tbl_layout.c,v 1.49 2020/09/01 18:25:28 schwarze Exp $ */
 /*
  * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2012, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
 #include <sys/types.h>
 
 #include <ctype.h>
+#include <stdint.h>
+#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <time.h>
 
-#include "mandoc.h"
 #include "mandoc_aux.h"
+#include "mandoc.h"
+#include "tbl.h"
 #include "libmandoc.h"
-#include "libroff.h"
+#include "tbl_int.h"
 
 struct tbl_phrase {
        char             name;
@@ -62,6 +65,7 @@ mods(struct tbl_node *tbl, struct tbl_cell *cp,
                int ln, const char *p, int *pos)
 {
        char            *endptr;
+       unsigned long    spacing;
        size_t           sz;
 
 mod:
@@ -83,15 +87,18 @@ mod:
                        (*pos)++;
                        goto mod;
                }
-               mandoc_msg(MANDOCERR_TBLLAYOUT_PAR, tbl->parse,
-                   ln, *pos, NULL);
+               mandoc_msg(MANDOCERR_TBLLAYOUT_PAR, ln, *pos, NULL);
                return;
        }
 
        /* Parse numerical spacing from modifier string. */
 
        if (isdigit((unsigned char)p[*pos])) {
-               cp->spacing = strtoull(p + *pos, &endptr, 10);
+               if ((spacing = strtoul(p + *pos, &endptr, 10)) > 9)
+                       mandoc_msg(MANDOCERR_TBLLAYOUT_SPC, ln, *pos,
+                           "%lu", spacing);
+               else
+                       cp->spacing = spacing;
                *pos = endptr - p;
                goto mod;
        }
@@ -112,8 +119,7 @@ mod:
                cp->flags |= TBL_CELL_ITALIC;
                goto mod;
        case 'm':
-               mandoc_msg(MANDOCERR_TBLLAYOUT_MOD, tbl->parse,
-                   ln, *pos, "m");
+               mandoc_msg(MANDOCERR_TBLLAYOUT_MOD, ln, *pos, "m");
                goto mod;
        case 'p':
        case 'v':
@@ -156,10 +162,10 @@ mod:
                        cp->vert++;
                else
                        mandoc_msg(MANDOCERR_TBLLAYOUT_VERT,
-                           tbl->parse, ln, *pos - 1, NULL);
+                           ln, *pos - 1, NULL);
                goto mod;
        default:
-               mandoc_vmsg(MANDOCERR_TBLLAYOUT_CHAR, tbl->parse,
+               mandoc_msg(MANDOCERR_TBLLAYOUT_CHAR,
                    ln, *pos - 1, "%c", p[*pos - 1]);
                goto mod;
        }
@@ -172,7 +178,7 @@ mod:
        /* Support only one-character font-names for now. */
 
        if (p[*pos] == '\0' || (p[*pos + 1] != ' ' && p[*pos + 1] != '.')) {
-               mandoc_vmsg(MANDOCERR_FT_BAD, tbl->parse,
+               mandoc_msg(MANDOCERR_FT_BAD,
                    ln, *pos, "TS %s", p + *pos - 1);
                if (p[*pos] != '\0')
                        (*pos)++;
@@ -194,7 +200,7 @@ mod:
        case 'R':
                goto mod;
        default:
-               mandoc_vmsg(MANDOCERR_FT_BAD, tbl->parse,
+               mandoc_msg(MANDOCERR_FT_BAD,
                    ln, *pos - 1, "TS f%c", p[*pos - 1]);
                goto mod;
        }
@@ -215,7 +221,7 @@ cell(struct tbl_node *tbl, struct tbl_row *rp,
                                rp->vert++;
                        else
                                mandoc_msg(MANDOCERR_TBLLAYOUT_VERT,
-                                   tbl->parse, ln, *pos, NULL);
+                                   ln, *pos, NULL);
                }
                (*pos)++;
        }
@@ -234,7 +240,7 @@ again:
                        break;
 
        if (i == KEYS_MAX) {
-               mandoc_vmsg(MANDOCERR_TBLLAYOUT_CHAR, tbl->parse,
+               mandoc_msg(MANDOCERR_TBLLAYOUT_CHAR,
                    ln, *pos, "%c", p[*pos]);
                (*pos)++;
                goto again;
@@ -245,14 +251,12 @@ again:
 
        if (c == TBL_CELL_SPAN) {
                if (rp->last == NULL)
-                       mandoc_msg(MANDOCERR_TBLLAYOUT_SPAN,
-                           tbl->parse, ln, *pos, NULL);
+                       mandoc_msg(MANDOCERR_TBLLAYOUT_SPAN, ln, *pos, NULL);
                else if (rp->last->pos == TBL_CELL_HORIZ ||
                    rp->last->pos == TBL_CELL_DHORIZ)
                        c = rp->last->pos;
        } else if (c == TBL_CELL_DOWN && rp == tbl->first_row)
-               mandoc_msg(MANDOCERR_TBLLAYOUT_DOWN,
-                   tbl->parse, ln, *pos, NULL);
+               mandoc_msg(MANDOCERR_TBLLAYOUT_DOWN, ln, *pos, NULL);
 
        (*pos)++;
 
@@ -295,7 +299,7 @@ tbl_layout(struct tbl_node *tbl, int ln, const char *p, int pos)
                        }
                        if (tbl->first_row->first == NULL) {
                                mandoc_msg(MANDOCERR_TBLLAYOUT_NONE,
-                                   tbl->parse, ln, pos, NULL);
+                                   ln, pos, NULL);
                                cell_alloc(tbl, tbl->first_row,
                                    TBL_CELL_LEFT);
                                if (tbl->opts.lvert < tbl->first_row->vert)
@@ -357,6 +361,7 @@ cell_alloc(struct tbl_node *tbl, struct tbl_row *rp, enum tbl_cellt pos)
        struct tbl_cell *p, *pp;
 
        p = mandoc_calloc(1, sizeof(*p));
+       p->spacing = SIZE_MAX;
        p->pos = pos;
 
        if ((pp = rp->last) != NULL) {