version 1.221, 2014/07/07 21:36:20 |
version 1.223, 2014/08/01 15:08:46 |
Line 106 struct roffreg { |
|
Line 106 struct roffreg { |
|
|
|
struct roff { |
struct roff { |
struct mparse *parse; /* parse point */ |
struct mparse *parse; /* parse point */ |
int options; /* parse options */ |
|
struct roffnode *last; /* leaf of stack */ |
struct roffnode *last; /* leaf of stack */ |
int rstack[RSTACK_MAX]; /* stack of !`ie' rules */ |
int *rstack; /* stack of inverted `ie' values */ |
char control; /* control character */ |
|
int rstackpos; /* position in rstack */ |
|
struct roffreg *regtab; /* number registers */ |
struct roffreg *regtab; /* number registers */ |
struct roffkv *strtab; /* user-defined strings & macros */ |
struct roffkv *strtab; /* user-defined strings & macros */ |
struct roffkv *xmbtab; /* multi-byte trans table (`tr') */ |
struct roffkv *xmbtab; /* multi-byte trans table (`tr') */ |
|
|
struct eqn_node *last_eqn; /* last equation parsed */ |
struct eqn_node *last_eqn; /* last equation parsed */ |
struct eqn_node *first_eqn; /* first equation parsed */ |
struct eqn_node *first_eqn; /* first equation parsed */ |
struct eqn_node *eqn; /* current equation being parsed */ |
struct eqn_node *eqn; /* current equation being parsed */ |
|
int options; /* parse options */ |
|
int rstacksz; /* current size limit of rstack */ |
|
int rstackpos; /* position in rstack */ |
|
char control; /* control character */ |
}; |
}; |
|
|
struct roffnode { |
struct roffnode { |
Line 420 roff_free1(struct roff *r) |
|
Line 421 roff_free1(struct roff *r) |
|
r->first_tbl = tbl->next; |
r->first_tbl = tbl->next; |
tbl_free(tbl); |
tbl_free(tbl); |
} |
} |
|
|
r->first_tbl = r->last_tbl = r->tbl = NULL; |
r->first_tbl = r->last_tbl = r->tbl = NULL; |
|
|
while (NULL != (e = r->first_eqn)) { |
while (NULL != (e = r->first_eqn)) { |
r->first_eqn = e->next; |
r->first_eqn = e->next; |
eqn_free(e); |
eqn_free(e); |
} |
} |
|
|
r->first_eqn = r->last_eqn = r->eqn = NULL; |
r->first_eqn = r->last_eqn = r->eqn = NULL; |
|
|
while (r->last) |
while (r->last) |
roffnode_pop(r); |
roffnode_pop(r); |
|
|
roff_freestr(r->strtab); |
free (r->rstack); |
roff_freestr(r->xmbtab); |
r->rstack = NULL; |
|
r->rstacksz = 0; |
|
r->rstackpos = -1; |
|
|
r->strtab = r->xmbtab = NULL; |
|
|
|
roff_freereg(r->regtab); |
roff_freereg(r->regtab); |
|
|
r->regtab = NULL; |
r->regtab = NULL; |
|
|
|
roff_freestr(r->strtab); |
|
roff_freestr(r->xmbtab); |
|
r->strtab = r->xmbtab = NULL; |
|
|
if (r->xtab) |
if (r->xtab) |
for (i = 0; i < 128; i++) |
for (i = 0; i < 128; i++) |
free(r->xtab[i].p); |
free(r->xtab[i].p); |
|
|
free(r->xtab); |
free(r->xtab); |
r->xtab = NULL; |
r->xtab = NULL; |
} |
} |
Line 1283 roff_cond(ROFF_ARGS) |
|
Line 1284 roff_cond(ROFF_ARGS) |
|
*/ |
*/ |
|
|
if (ROFF_ie == tok) { |
if (ROFF_ie == tok) { |
if (r->rstackpos == RSTACK_MAX - 1) { |
if (r->rstackpos + 1 == r->rstacksz) { |
mandoc_msg(MANDOCERR_MEM, |
r->rstacksz += 16; |
r->parse, ln, ppos, NULL); |
r->rstack = mandoc_reallocarray(r->rstack, |
return(ROFF_ERR); |
r->rstacksz, sizeof(int)); |
} |
} |
r->rstack[++r->rstackpos] = !r->last->rule; |
r->rstack[++r->rstackpos] = !r->last->rule; |
} |
} |
Line 1758 roff_it(ROFF_ARGS) |
|
Line 1759 roff_it(ROFF_ARGS) |
|
len = strcspn(cp, " \t"); |
len = strcspn(cp, " \t"); |
cp[len] = '\0'; |
cp[len] = '\0'; |
if ((iv = mandoc_strntoi(cp, len, 10)) <= 0) { |
if ((iv = mandoc_strntoi(cp, len, 10)) <= 0) { |
mandoc_msg(MANDOCERR_NUMERIC, r->parse, |
mandoc_msg(MANDOCERR_IT_NONUM, r->parse, |
ln, ppos, *bufp + 1); |
ln, ppos, *bufp + 1); |
return(ROFF_IGN); |
return(ROFF_IGN); |
} |
} |