version 1.28, 2011/07/22 14:26:32 |
version 1.29, 2011/07/22 14:55:07 |
|
|
EQN_DEFINE = 0, |
EQN_DEFINE = 0, |
EQN_SET, |
EQN_SET, |
EQN_UNDEF, |
EQN_UNDEF, |
|
EQN_GSIZE, |
EQN__MAX |
EQN__MAX |
}; |
}; |
|
|
static enum eqn_rest eqn_box(struct eqn_node *, struct eqn_box *); |
static enum eqn_rest eqn_box(struct eqn_node *, struct eqn_box *); |
static struct eqn_box *eqn_box_alloc(struct eqn_box *); |
static struct eqn_box *eqn_box_alloc(struct eqn_node *, |
|
struct eqn_box *); |
static void eqn_box_free(struct eqn_box *); |
static void eqn_box_free(struct eqn_box *); |
static struct eqn_def *eqn_def_find(struct eqn_node *, |
static struct eqn_def *eqn_def_find(struct eqn_node *, |
const char *, size_t); |
const char *, size_t); |
|
static int eqn_do_gsize(struct eqn_node *); |
static int eqn_do_define(struct eqn_node *); |
static int eqn_do_define(struct eqn_node *); |
static int eqn_do_set(struct eqn_node *); |
static int eqn_do_set(struct eqn_node *); |
static int eqn_do_undef(struct eqn_node *); |
static int eqn_do_undef(struct eqn_node *); |
Line 149 static const struct eqnpart eqnparts[EQN__MAX] = { |
|
Line 152 static const struct eqnpart eqnparts[EQN__MAX] = { |
|
{ { "define", 6 }, eqn_do_define }, /* EQN_DEFINE */ |
{ { "define", 6 }, eqn_do_define }, /* EQN_DEFINE */ |
{ { "set", 3 }, eqn_do_set }, /* EQN_SET */ |
{ { "set", 3 }, eqn_do_set }, /* EQN_SET */ |
{ { "undef", 5 }, eqn_do_undef }, /* EQN_UNDEF */ |
{ { "undef", 5 }, eqn_do_undef }, /* EQN_UNDEF */ |
|
{ { "gsize", 5 }, eqn_do_gsize }, /* EQN_UNDEF */ |
}; |
}; |
|
|
static const struct eqnstr eqnmarks[EQNMARK__MAX] = { |
static const struct eqnstr eqnmarks[EQNMARK__MAX] = { |
Line 298 eqn_alloc(int pos, int line, struct mparse *parse) |
|
Line 302 eqn_alloc(int pos, int line, struct mparse *parse) |
|
p->parse = parse; |
p->parse = parse; |
p->eqn.ln = line; |
p->eqn.ln = line; |
p->eqn.pos = pos; |
p->eqn.pos = pos; |
|
p->gsize = EQN_DEFSIZE; |
|
|
return(p); |
return(p); |
} |
} |
Line 330 eqn_eqn(struct eqn_node *ep, struct eqn_box *last) |
|
Line 335 eqn_eqn(struct eqn_node *ep, struct eqn_box *last) |
|
struct eqn_box *bp; |
struct eqn_box *bp; |
enum eqn_rest c; |
enum eqn_rest c; |
|
|
bp = eqn_box_alloc(last); |
bp = eqn_box_alloc(ep, last); |
bp->type = EQN_SUBEXPR; |
bp->type = EQN_SUBEXPR; |
|
|
while (EQN_OK == (c = eqn_box(ep, bp))) |
while (EQN_OK == (c = eqn_box(ep, bp))) |
Line 347 eqn_list(struct eqn_node *ep, struct eqn_box *last) |
|
Line 352 eqn_list(struct eqn_node *ep, struct eqn_box *last) |
|
size_t sz; |
size_t sz; |
enum eqn_rest c; |
enum eqn_rest c; |
|
|
bp = eqn_box_alloc(last); |
bp = eqn_box_alloc(ep, last); |
bp->type = EQN_LIST; |
bp->type = EQN_LIST; |
|
|
if (NULL == (start = eqn_nexttok(ep, &sz))) { |
if (NULL == (start = eqn_nexttok(ep, &sz))) { |
Line 516 eqn_box(struct eqn_node *ep, struct eqn_box *last) |
|
Line 521 eqn_box(struct eqn_node *ep, struct eqn_box *last) |
|
last->last->size = size; |
last->last->size = size; |
} |
} |
|
|
bp = eqn_box_alloc(last); |
bp = eqn_box_alloc(ep, last); |
bp->type = EQN_TEXT; |
bp->type = EQN_TEXT; |
for (i = 0; i < (int)EQNSYM__MAX; i++) |
for (i = 0; i < (int)EQNSYM__MAX; i++) |
if (EQNSTREQ(&eqnsyms[i].str, start, sz)) { |
if (EQNSTREQ(&eqnsyms[i].str, start, sz)) { |
Line 548 eqn_free(struct eqn_node *p) |
|
Line 553 eqn_free(struct eqn_node *p) |
|
} |
} |
|
|
static struct eqn_box * |
static struct eqn_box * |
eqn_box_alloc(struct eqn_box *parent) |
eqn_box_alloc(struct eqn_node *ep, struct eqn_box *parent) |
{ |
{ |
struct eqn_box *bp; |
struct eqn_box *bp; |
|
|
bp = mandoc_calloc(1, sizeof(struct eqn_box)); |
bp = mandoc_calloc(1, sizeof(struct eqn_box)); |
bp->parent = parent; |
bp->parent = parent; |
bp->size = EQN_DEFSIZE; |
bp->size = ep->gsize; |
|
|
if (NULL == parent->first) |
if (NULL == parent->first) |
parent->first = bp; |
parent->first = bp; |
Line 695 eqn_do_set(struct eqn_node *ep) |
|
Line 700 eqn_do_set(struct eqn_node *ep) |
|
const char *start; |
const char *start; |
|
|
if (NULL == (start = eqn_nextrawtok(ep, NULL))) |
if (NULL == (start = eqn_nextrawtok(ep, NULL))) |
EQN_MSG(MANDOCERR_EQNARGS, ep); |
EQN_MSG(MANDOCERR_EQNEOF, ep); |
else if (NULL == (start = eqn_nextrawtok(ep, NULL))) |
else if (NULL == (start = eqn_nextrawtok(ep, NULL))) |
EQN_MSG(MANDOCERR_EQNARGS, ep); |
EQN_MSG(MANDOCERR_EQNEOF, ep); |
else |
else |
return(1); |
return(1); |
|
|
Line 713 eqn_do_define(struct eqn_node *ep) |
|
Line 718 eqn_do_define(struct eqn_node *ep) |
|
int i; |
int i; |
|
|
if (NULL == (start = eqn_nextrawtok(ep, &sz))) { |
if (NULL == (start = eqn_nextrawtok(ep, &sz))) { |
EQN_MSG(MANDOCERR_EQNARGS, ep); |
EQN_MSG(MANDOCERR_EQNEOF, ep); |
return(0); |
return(0); |
} |
} |
|
|
Line 748 eqn_do_define(struct eqn_node *ep) |
|
Line 753 eqn_do_define(struct eqn_node *ep) |
|
start = eqn_next(ep, ep->data[(int)ep->cur], &sz, 0); |
start = eqn_next(ep, ep->data[(int)ep->cur], &sz, 0); |
|
|
if (NULL == start) { |
if (NULL == start) { |
EQN_MSG(MANDOCERR_EQNARGS, ep); |
EQN_MSG(MANDOCERR_EQNEOF, ep); |
return(0); |
return(0); |
} |
} |
|
|
Line 760 eqn_do_define(struct eqn_node *ep) |
|
Line 765 eqn_do_define(struct eqn_node *ep) |
|
} |
} |
|
|
static int |
static int |
|
eqn_do_gsize(struct eqn_node *ep) |
|
{ |
|
const char *start; |
|
size_t sz; |
|
|
|
if (NULL == (start = eqn_nextrawtok(ep, &sz))) { |
|
EQN_MSG(MANDOCERR_EQNEOF, ep); |
|
return(0); |
|
} |
|
|
|
ep->gsize = mandoc_strntoi(start, sz, 10); |
|
return(1); |
|
} |
|
|
|
static int |
eqn_do_undef(struct eqn_node *ep) |
eqn_do_undef(struct eqn_node *ep) |
{ |
{ |
const char *start; |
const char *start; |
Line 767 eqn_do_undef(struct eqn_node *ep) |
|
Line 787 eqn_do_undef(struct eqn_node *ep) |
|
size_t sz; |
size_t sz; |
|
|
if (NULL == (start = eqn_nextrawtok(ep, &sz))) { |
if (NULL == (start = eqn_nextrawtok(ep, &sz))) { |
EQN_MSG(MANDOCERR_EQNARGS, ep); |
EQN_MSG(MANDOCERR_EQNEOF, ep); |
return(0); |
return(0); |
} else if (NULL != (def = eqn_def_find(ep, start, sz))) |
} else if (NULL != (def = eqn_def_find(ep, start, sz))) |
def->keysz = 0; |
def->keysz = 0; |