version 1.334, 2018/08/18 21:37:01 |
version 1.336, 2018/08/19 17:46:14 |
Line 1214 roff_res(struct roff *r, struct buf *buf, int ln, int |
|
Line 1214 roff_res(struct roff *r, struct buf *buf, int ln, int |
|
|
|
/* Discard normal comments. */ |
/* Discard normal comments. */ |
|
|
while (stesc > start && stesc[-1] == ' ') |
while (stesc > start && stesc[-1] == ' ' && |
|
(stesc == start + 1 || stesc[-2] != '\\')) |
stesc--; |
stesc--; |
*stesc = '\0'; |
*stesc = '\0'; |
break; |
break; |
|
|
static int |
static int |
roff_evalcond(struct roff *r, int ln, char *v, int *pos) |
roff_evalcond(struct roff *r, int ln, char *v, int *pos) |
{ |
{ |
char *cp, *name; |
const char *start, *end; |
size_t sz; |
char *cp, *name; |
int deftype, number, savepos, istrue, wanttrue; |
size_t sz; |
|
int deftype, len, number, savepos, istrue, wanttrue; |
|
|
if ('!' == v[*pos]) { |
if ('!' == v[*pos]) { |
wanttrue = 0; |
wanttrue = 0; |
Line 2184 roff_evalcond(struct roff *r, int ln, char *v, int *po |
|
Line 2186 roff_evalcond(struct roff *r, int ln, char *v, int *po |
|
case 'o': |
case 'o': |
(*pos)++; |
(*pos)++; |
return wanttrue; |
return wanttrue; |
case 'c': |
|
case 'e': |
case 'e': |
case 't': |
case 't': |
case 'v': |
case 'v': |
(*pos)++; |
(*pos)++; |
return !wanttrue; |
return !wanttrue; |
|
case 'c': |
|
do { |
|
(*pos)++; |
|
} while (v[*pos] == ' '); |
|
|
|
/* |
|
* Quirk for groff compatibility: |
|
* The horizontal tab is neither available nor unavailable. |
|
*/ |
|
|
|
if (v[*pos] == '\t') { |
|
(*pos)++; |
|
return 0; |
|
} |
|
|
|
/* Printable ASCII characters are available. */ |
|
|
|
if (v[*pos] != '\\') { |
|
(*pos)++; |
|
return wanttrue; |
|
} |
|
|
|
end = v + ++*pos; |
|
switch (mandoc_escape(&end, &start, &len)) { |
|
case ESCAPE_SPECIAL: |
|
istrue = mchars_spec2cp(start, len) != -1; |
|
break; |
|
case ESCAPE_UNICODE: |
|
istrue = 1; |
|
break; |
|
case ESCAPE_NUMBERED: |
|
istrue = mchars_num2char(start, len) != -1; |
|
break; |
|
default: |
|
istrue = !wanttrue; |
|
break; |
|
} |
|
*pos = end - v; |
|
return istrue == wanttrue; |
case 'd': |
case 'd': |
case 'r': |
case 'r': |
cp = v + *pos + 1; |
cp = v + *pos + 1; |