=================================================================== RCS file: /cvs/mandoc/roff.c,v retrieving revision 1.309 retrieving revision 1.310 diff -u -p -r1.309 -r1.310 --- mandoc/roff.c 2017/06/14 13:00:31 1.309 +++ mandoc/roff.c 2017/06/14 14:02:39 1.310 @@ -1,4 +1,4 @@ -/* $Id: roff.c,v 1.309 2017/06/14 13:00:31 schwarze Exp $ */ +/* $Id: roff.c,v 1.310 2017/06/14 14:02:39 schwarze Exp $ */ /* * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons * Copyright (c) 2010-2015, 2017 Ingo Schwarze @@ -2065,7 +2065,7 @@ roff_evalcond(struct roff *r, int ln, char *v, int *po { char *cp, *name; size_t sz; - int number, savepos, wanttrue; + int number, savepos, istrue, wanttrue; if ('!' == v[*pos]) { wanttrue = 0; @@ -2081,17 +2081,23 @@ roff_evalcond(struct roff *r, int ln, char *v, int *po (*pos)++; return wanttrue; case 'c': - case 'd': case 'e': case 't': case 'v': (*pos)++; return !wanttrue; + case 'd': case 'r': - cp = name = v + ++*pos; - sz = roff_getname(r, &cp, ln, *pos); + cp = v + *pos + 1; + while (*cp == ' ') + cp++; + name = cp; + sz = roff_getname(r, &cp, ln, cp - v); + istrue = sz && (v[*pos] == 'r' ? roff_hasregn(r, name, sz) : + (roff_getstrn(r, name, sz) != NULL || + roff_getrenn(r, name, sz) != NULL)); *pos = cp - v; - return (sz && roff_hasregn(r, name, sz)) == wanttrue; + return istrue == wanttrue; default: break; }