version 1.143, 2011/06/30 08:05:13 |
version 1.146, 2011/07/17 12:13:37 |
Line 519 roff_parseln(struct roff *r, int ln, char **bufp, |
|
Line 519 roff_parseln(struct roff *r, int ln, char **bufp, |
|
if (ROFF_CONT != e) |
if (ROFF_CONT != e) |
return(e); |
return(e); |
if (r->eqn) |
if (r->eqn) |
return(eqn_read(&r->eqn, ln, *bufp, pos)); |
return(eqn_read(&r->eqn, ln, *bufp, pos, offs)); |
if (r->tbl) |
if (r->tbl) |
return(tbl_read(r->tbl, ln, *bufp, pos)); |
return(tbl_read(r->tbl, ln, *bufp, pos)); |
return(ROFF_CONT); |
return(ROFF_CONT); |
} else if ( ! ctl) { |
} else if ( ! ctl) { |
if (r->eqn) |
if (r->eqn) |
return(eqn_read(&r->eqn, ln, *bufp, pos)); |
return(eqn_read(&r->eqn, ln, *bufp, pos, offs)); |
if (r->tbl) |
if (r->tbl) |
return(tbl_read(r->tbl, ln, *bufp, pos)); |
return(tbl_read(r->tbl, ln, *bufp, pos)); |
return(ROFF_CONT); |
return(ROFF_CONT); |
} else if (r->eqn) |
} else if (r->eqn) |
return(eqn_read(&r->eqn, ln, *bufp, ppos)); |
return(eqn_read(&r->eqn, ln, *bufp, ppos, offs)); |
|
|
/* |
/* |
* If a scope is open, go to the child handler for that macro, |
* If a scope is open, go to the child handler for that macro, |
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; |