version 1.110, 2010/12/28 10:59:07 |
version 1.116, 2011/01/01 16:10:40 |
|
|
ROFF_tr, |
ROFF_tr, |
ROFF_TS, |
ROFF_TS, |
ROFF_TE, |
ROFF_TE, |
|
ROFF_T_, |
ROFF_cblock, |
ROFF_cblock, |
ROFF_ccond, /* FIXME: remove this. */ |
ROFF_ccond, /* FIXME: remove this. */ |
ROFF_USERDEF, |
ROFF_USERDEF, |
|
|
struct regset *regs; /* read/writable registers */ |
struct regset *regs; /* read/writable registers */ |
struct roffstr *first_string; /* user-defined strings & macros */ |
struct roffstr *first_string; /* user-defined strings & macros */ |
const char *current_string; /* value of last called user macro */ |
const char *current_string; /* value of last called user macro */ |
struct tbl *tbl; |
struct tbl *first_tbl; /* first table parsed */ |
|
struct tbl *last_tbl; /* last table parsed */ |
|
struct tbl *tbl; /* current table being parsed */ |
}; |
}; |
|
|
struct roffnode { |
struct roffnode { |
Line 143 static void roff_setstr(struct roff *, |
|
Line 146 static void roff_setstr(struct roff *, |
|
static enum rofferr roff_so(ROFF_ARGS); |
static enum rofferr roff_so(ROFF_ARGS); |
static enum rofferr roff_TE(ROFF_ARGS); |
static enum rofferr roff_TE(ROFF_ARGS); |
static enum rofferr roff_TS(ROFF_ARGS); |
static enum rofferr roff_TS(ROFF_ARGS); |
|
static enum rofferr roff_T_(ROFF_ARGS); |
static enum rofferr roff_userdef(ROFF_ARGS); |
static enum rofferr roff_userdef(ROFF_ARGS); |
|
|
/* See roff_hash_find() */ |
/* See roff_hash_find() */ |
Line 175 static struct roffmac roffs[ROFF_MAX] = { |
|
Line 179 static struct roffmac roffs[ROFF_MAX] = { |
|
{ "tr", roff_line_ignore, NULL, NULL, 0, NULL }, |
{ "tr", roff_line_ignore, NULL, NULL, 0, NULL }, |
{ "TS", roff_TS, NULL, NULL, 0, NULL }, |
{ "TS", roff_TS, NULL, NULL, 0, NULL }, |
{ "TE", roff_TE, NULL, NULL, 0, NULL }, |
{ "TE", roff_TE, NULL, NULL, 0, NULL }, |
|
{ "T&", roff_T_, NULL, NULL, 0, NULL }, |
{ ".", roff_cblock, NULL, NULL, 0, NULL }, |
{ ".", roff_cblock, NULL, NULL, 0, NULL }, |
{ "\\}", roff_ccond, NULL, NULL, 0, NULL }, |
{ "\\}", roff_ccond, NULL, NULL, 0, NULL }, |
{ NULL, roff_userdef, NULL, NULL, 0, NULL }, |
{ NULL, roff_userdef, NULL, NULL, 0, NULL }, |
Line 296 roffnode_push(struct roff *r, enum rofft tok, const ch |
|
Line 301 roffnode_push(struct roff *r, enum rofft tok, const ch |
|
static void |
static void |
roff_free1(struct roff *r) |
roff_free1(struct roff *r) |
{ |
{ |
|
struct tbl *t; |
|
|
if (r->tbl) { |
while (r->first_tbl) { |
tbl_free(r->tbl); |
t = r->first_tbl; |
r->tbl = NULL; |
r->first_tbl = t->next; |
|
tbl_free(t); |
} |
} |
|
|
|
r->first_tbl = r->last_tbl = r->tbl = NULL; |
|
|
while (r->last) |
while (r->last) |
roffnode_pop(r); |
roffnode_pop(r); |
|
|
Line 1115 roff_TE(ROFF_ARGS) |
|
Line 1124 roff_TE(ROFF_ARGS) |
|
if (NULL == r->tbl) |
if (NULL == r->tbl) |
(*r->msg)(MANDOCERR_NOSCOPE, r->data, ln, ppos, NULL); |
(*r->msg)(MANDOCERR_NOSCOPE, r->data, ln, ppos, NULL); |
else |
else |
tbl_free(r->tbl); |
tbl_end(r->tbl); |
|
|
r->tbl = NULL; |
r->tbl = NULL; |
return(ROFF_IGN); |
return(ROFF_IGN); |
Line 1123 roff_TE(ROFF_ARGS) |
|
Line 1132 roff_TE(ROFF_ARGS) |
|
|
|
/* ARGSUSED */ |
/* ARGSUSED */ |
static enum rofferr |
static enum rofferr |
|
roff_T_(ROFF_ARGS) |
|
{ |
|
|
|
if (NULL == r->tbl) |
|
(*r->msg)(MANDOCERR_NOSCOPE, r->data, ln, ppos, NULL); |
|
else |
|
tbl_restart(ppos, ln, r->tbl); |
|
|
|
return(ROFF_IGN); |
|
} |
|
|
|
/* ARGSUSED */ |
|
static enum rofferr |
roff_TS(ROFF_ARGS) |
roff_TS(ROFF_ARGS) |
{ |
{ |
|
struct tbl *t; |
|
|
if (r->tbl) { |
if (r->tbl) { |
(*r->msg)(MANDOCERR_SCOPEBROKEN, r->data, ln, ppos, NULL); |
(*r->msg)(MANDOCERR_SCOPEBROKEN, r->data, ln, ppos, NULL); |
tbl_reset(r->tbl); |
tbl_end(r->tbl); |
} else |
} |
r->tbl = tbl_alloc(); |
|
|
|
|
t = tbl_alloc(ppos, ln, r->data, r->msg); |
|
|
|
if (r->last_tbl) |
|
r->last_tbl->next = t; |
|
else |
|
r->first_tbl = r->last_tbl = t; |
|
|
|
r->tbl = r->last_tbl = t; |
return(ROFF_IGN); |
return(ROFF_IGN); |
} |
} |
|
|
Line 1348 roff_freestr(struct roff *r) |
|
Line 1378 roff_freestr(struct roff *r) |
|
} |
} |
|
|
r->first_string = NULL; |
r->first_string = NULL; |
|
} |
|
|
|
const struct tbl_span * |
|
roff_span(const struct roff *r) |
|
{ |
|
|
|
return(r->tbl ? tbl_span(r->tbl) : NULL); |
} |
} |