version 1.54, 2014/10/16 01:11:20 |
version 1.56, 2014/10/25 15:06:30 |
|
|
#define EQN_NEST_MAX 128 /* maximum nesting of defines */ |
#define EQN_NEST_MAX 128 /* maximum nesting of defines */ |
#define STRNEQ(p1, sz1, p2, sz2) \ |
#define STRNEQ(p1, sz1, p2, sz2) \ |
((sz1) == (sz2) && 0 == strncmp((p1), (p2), (sz1))) |
((sz1) == (sz2) && 0 == strncmp((p1), (p2), (sz1))) |
#define EQNSTREQ(x, p, sz) \ |
|
STRNEQ((x)->name, (x)->sz, (p), (sz)) |
|
|
|
enum eqn_tok { |
enum eqn_tok { |
EQN_TOK_DYAD = 0, |
EQN_TOK_DYAD = 0, |
Line 315 eqn_read(struct eqn_node **epp, int ln, |
|
Line 313 eqn_read(struct eqn_node **epp, int ln, |
|
} |
} |
|
|
struct eqn_node * |
struct eqn_node * |
eqn_alloc(const char *name, int pos, int line, struct mparse *parse) |
eqn_alloc(int pos, int line, struct mparse *parse) |
{ |
{ |
struct eqn_node *p; |
struct eqn_node *p; |
size_t sz; |
|
const char *end; |
|
|
|
p = mandoc_calloc(1, sizeof(struct eqn_node)); |
p = mandoc_calloc(1, sizeof(struct eqn_node)); |
|
|
if (name && '\0' != *name) { |
|
sz = strlen(name); |
|
assert(sz); |
|
do { |
|
sz--; |
|
end = name + (int)sz; |
|
} while (' ' == *end || '\t' == *end); |
|
p->eqn.name = mandoc_strndup(name, sz + 1); |
|
} |
|
|
|
p->parse = parse; |
p->parse = parse; |
p->eqn.ln = line; |
p->eqn.ln = line; |
p->eqn.pos = pos; |
p->eqn.pos = pos; |
Line 698 eqn_parse(struct eqn_node *ep, struct eqn_box *parent) |
|
Line 684 eqn_parse(struct eqn_node *ep, struct eqn_box *parent) |
|
char sym[64]; |
char sym[64]; |
const char *start; |
const char *start; |
|
|
assert(NULL != parent); |
assert(parent != NULL); |
|
if (ep->data == NULL) |
|
return(-1); |
|
|
next_tok: |
next_tok: |
tok = eqn_tok_parse(ep, &p); |
tok = eqn_tok_parse(ep, &p); |
Line 1108 eqn_free(struct eqn_node *p) |
|
Line 1096 eqn_free(struct eqn_node *p) |
|
free(p->defs[i].val); |
free(p->defs[i].val); |
} |
} |
|
|
free(p->eqn.name); |
|
free(p->data); |
free(p->data); |
free(p->defs); |
free(p->defs); |
free(p); |
free(p); |