=================================================================== RCS file: /cvs/mandoc/tbl_layout.c,v retrieving revision 1.11 retrieving revision 1.13 diff -u -p -r1.11 -r1.13 --- mandoc/tbl_layout.c 2011/01/07 13:03:48 1.11 +++ mandoc/tbl_layout.c 2011/01/09 05:38:23 1.13 @@ -1,4 +1,4 @@ -/* $Id: tbl_layout.c,v 1.11 2011/01/07 13:03:48 kristaps Exp $ */ +/* $Id: tbl_layout.c,v 1.13 2011/01/09 05:38:23 joerg Exp $ */ /* * Copyright (c) 2009, 2010 Kristaps Dzonsons * @@ -90,6 +90,20 @@ mod: break; } + /* Throw away parenthesised expression. */ + + if ('(' == p[*pos]) { + (*pos)++; + while (p[*pos] && ')' != p[*pos]) + (*pos)++; + if (')' == p[*pos]) { + (*pos)++; + goto mod; + } + TBL_MSG(tbl, MANDOCERR_TBLLAYOUT, ln, *pos); + return(0); + } + /* Parse numerical spacing from modifier string. */ if (isdigit((unsigned char)p[*pos])) { @@ -116,7 +130,7 @@ mod: /* TODO: GNU has many more extensions. */ - switch (tolower(p[(*pos)++])) { + switch (tolower((unsigned char)p[(*pos)++])) { case ('z'): cp->flags |= TBL_CELL_WIGN; goto mod; @@ -146,7 +160,7 @@ mod: return(0); } - switch (tolower(p[(*pos)++])) { + switch (tolower((unsigned char)p[(*pos)++])) { case ('b'): cp->flags |= TBL_CELL_BOLD; goto mod; @@ -171,7 +185,7 @@ cell(struct tbl_node *tbl, struct tbl_row *rp, /* Parse the column position (`r', `R', `|', ...). */ for (i = 0; i < KEYS_MAX; i++) - if (tolower(p[*pos]) == keys[i].name) + if (tolower((unsigned char)p[*pos]) == keys[i].name) break; if (KEYS_MAX == i) {