]> git.cameronkatri.com Git - mandoc.git/blobdiff - tbl_layout.c
Correctly handle constructs like
[mandoc.git] / tbl_layout.c
index 936685c1760811f5d056bc04cae31e6a489c1b07..7601f146cad60fd627cc7fcb69d4cbf2e070d590 100644 (file)
@@ -1,6 +1,6 @@
-/*     $Id: tbl_layout.c,v 1.19 2011/04/07 01:08:42 joerg Exp $ */
+/*     $Id: tbl_layout.c,v 1.22 2011/09/18 14:14:15 schwarze Exp $ */
 /*
- * Copyright (c) 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
+ * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -72,6 +72,23 @@ mods(struct tbl_node *tbl, struct tbl_cell *cp,
        char             buf[5];
        int              i;
 
+       /* Not all types accept modifiers. */
+
+       switch (cp->pos) {
+       case (TBL_CELL_DOWN):
+               /* FALLTHROUGH */
+       case (TBL_CELL_HORIZ):
+               /* FALLTHROUGH */
+       case (TBL_CELL_DHORIZ):
+               /* FALLTHROUGH */
+       case (TBL_CELL_VERT):
+               /* FALLTHROUGH */
+       case (TBL_CELL_DVERT):
+               return(1);
+       default:
+               break;
+       }
+
 mod:
        /* 
         * XXX: since, at least for now, modifiers are non-conflicting
@@ -156,6 +173,8 @@ mod:
                goto mod;
        case ('f'):
                break;
+       case ('r'):
+               /* FALLTHROUGH */
        case ('b'):
                /* FALLTHROUGH */
        case ('i'):
@@ -168,12 +187,20 @@ mod:
        }
 
        switch (tolower((unsigned char)p[(*pos)++])) {
+       case ('3'):
+               /* FALLTHROUGH */
        case ('b'):
                cp->flags |= TBL_CELL_BOLD;
                goto mod;
+       case ('2'):
+               /* FALLTHROUGH */
        case ('i'):
                cp->flags |= TBL_CELL_ITALIC;
                goto mod;
+       case ('1'):
+               /* FALLTHROUGH */
+       case ('r'):
+               goto mod;
        default:
                break;
        }