]> git.cameronkatri.com Git - mandoc.git/blobdiff - tbl_layout.c
POSIX make(1) does not support prerequisites on suffix rules.
[mandoc.git] / tbl_layout.c
index b25677a2c0469f7fb3143db3d94d8b92580c940c..171a8dbb1b4904e834be975d0c3eeabef105c92b 100644 (file)
@@ -1,7 +1,8 @@
-/*     $Id: tbl_layout.c,v 1.49 2020/09/01 18:25:28 schwarze Exp $ */
+/*     $Id: tbl_layout.c,v 1.50 2021/08/10 12:55:04 schwarze Exp $ */
 /*
  * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2012, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2012, 2014, 2015, 2017, 2020, 2021
+ *               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
@@ -67,6 +68,8 @@ mods(struct tbl_node *tbl, struct tbl_cell *cp,
        char            *endptr;
        unsigned long    spacing;
        size_t           sz;
+       int              isz;
+       enum mandoc_esc  fontesc;
 
 mod:
        while (p[*pos] == ' ' || p[*pos] == '\t')
@@ -105,7 +108,7 @@ mod:
 
        switch (tolower((unsigned char)p[(*pos)++])) {
        case 'b':
-               cp->flags |= TBL_CELL_BOLD;
+               cp->font = ESCAPE_FONTBOLD;
                goto mod;
        case 'd':
                cp->flags |= TBL_CELL_BALIGN;
@@ -116,7 +119,7 @@ mod:
        case 'f':
                break;
        case 'i':
-               cp->flags |= TBL_CELL_ITALIC;
+               cp->font = ESCAPE_FONTITALIC;
                goto mod;
        case 'm':
                mandoc_msg(MANDOCERR_TBLLAYOUT_MOD, ln, *pos, "m");
@@ -170,40 +173,34 @@ mod:
                goto mod;
        }
 
+       while (p[*pos] == ' ' || p[*pos] == '\t')
+               (*pos)++;
+
        /* Ignore parenthised font names for now. */
 
        if (p[*pos] == '(')
                goto mod;
 
-       /* Support only one-character font-names for now. */
-
-       if (p[*pos] == '\0' || (p[*pos + 1] != ' ' && p[*pos + 1] != '.')) {
+       isz = 0;
+       if (p[*pos] != '\0')
+               isz++;
+       if (strchr(" \t.", p[*pos + isz]) == NULL)
+               isz++;
+       
+       fontesc = mandoc_font(p + *pos, isz);
+
+       switch (fontesc) {
+       case ESCAPE_FONTPREV:
+       case ESCAPE_ERROR:
                mandoc_msg(MANDOCERR_FT_BAD,
                    ln, *pos, "TS %s", p + *pos - 1);
-               if (p[*pos] != '\0')
-                       (*pos)++;
-               if (p[*pos] != '\0')
-                       (*pos)++;
-               goto mod;
-       }
-
-       switch (p[(*pos)++]) {
-       case '3':
-       case 'B':
-               cp->flags |= TBL_CELL_BOLD;
-               goto mod;
-       case '2':
-       case 'I':
-               cp->flags |= TBL_CELL_ITALIC;
-               goto mod;
-       case '1':
-       case 'R':
-               goto mod;
+               break;
        default:
-               mandoc_msg(MANDOCERR_FT_BAD,
-                   ln, *pos - 1, "TS f%c", p[*pos - 1]);
-               goto mod;
+               cp->font = fontesc;
+               break;
        }
+       *pos += isz;
+       goto mod;
 }
 
 static void
@@ -362,6 +359,7 @@ cell_alloc(struct tbl_node *tbl, struct tbl_row *rp, enum tbl_cellt pos)
 
        p = mandoc_calloc(1, sizeof(*p));
        p->spacing = SIZE_MAX;
+       p->font = ESCAPE_FONTROMAN;
        p->pos = pos;
 
        if ((pp = rp->last) != NULL) {