version 1.143, 2011/06/30 08:05:13 |
version 1.145, 2011/07/12 21:32:43 |
Line 596 roff_parse(struct roff *r, const char *buf, int *pos) |
|
Line 596 roff_parse(struct roff *r, const char *buf, int *pos) |
|
size_t maclen; |
size_t maclen; |
enum rofft t; |
enum rofft t; |
|
|
if ('\0' == buf[*pos] || '"' == buf[*pos]) |
if ('\0' == buf[*pos] || '"' == buf[*pos] || |
|
'\t' == buf[*pos] || ' ' == buf[*pos]) |
return(ROFF_MAX); |
return(ROFF_MAX); |
|
|
|
/* |
|
* We stop the macro parse at an escape, tab, space, or nil. |
|
* However, `\}' is also a valid macro, so make sure we don't |
|
* clobber it by seeing the `\' as the end of token. |
|
*/ |
|
|
mac = buf + *pos; |
mac = buf + *pos; |
maclen = strcspn(mac, " \\\t\0"); |
maclen = strcspn(mac + 1, " \\\t\0") + 1; |
|
|
t = (r->current_string = roff_getstrn(r, mac, maclen)) |
t = (r->current_string = roff_getstrn(r, mac, maclen)) |
? ROFF_USERDEF : roff_hash_find(mac, maclen); |
? ROFF_USERDEF : roff_hash_find(mac, maclen); |
Line 882 roff_cond_sub(ROFF_ARGS) |
|
Line 889 roff_cond_sub(ROFF_ARGS) |
|
ep++; |
ep++; |
if ('}' != *ep) |
if ('}' != *ep) |
continue; |
continue; |
*ep = '&'; |
|
|
/* |
|
* Make the \} go away. |
|
* This is a little haphazard, as it's not quite |
|
* clear how nroff does this. |
|
* If we're at the end of line, then just chop |
|
* off the \} and resize the buffer. |
|
* If we aren't, then conver it to spaces. |
|
*/ |
|
|
|
if ('\0' == *(ep + 1)) { |
|
*--ep = '\0'; |
|
*szp -= 2; |
|
} else |
|
*(ep - 1) = *ep = ' '; |
|
|
roff_ccond(r, ROFF_ccond, bufp, szp, |
roff_ccond(r, ROFF_ccond, bufp, szp, |
ln, pos, pos + 2, offs); |
ln, pos, pos + 2, offs); |
break; |
break; |
Line 1157 roff_EQ(ROFF_ARGS) |
|
Line 1179 roff_EQ(ROFF_ARGS) |
|
struct eqn_node *e; |
struct eqn_node *e; |
|
|
assert(NULL == r->eqn); |
assert(NULL == r->eqn); |
e = eqn_alloc(ppos, ln); |
e = eqn_alloc(ppos, ln, r->parse); |
|
|
if (r->last_eqn) |
if (r->last_eqn) |
r->last_eqn->next = e; |
r->last_eqn->next = e; |