version 1.28, 2011/07/22 14:26:32 |
version 1.31, 2011/07/23 09:47:25 |
|
|
EQN_DEFINE = 0, |
EQN_DEFINE = 0, |
EQN_SET, |
EQN_SET, |
EQN_UNDEF, |
EQN_UNDEF, |
|
EQN_GFONT, |
|
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_gfont(struct eqn_node *); |
|
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 154 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 */ |
|
{ { "gfont", 5 }, eqn_do_gfont }, /* EQN_GFONT */ |
|
{ { "gsize", 5 }, eqn_do_gsize }, /* EQN_GSIZE */ |
}; |
}; |
|
|
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 305 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 338 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 355 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 524 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 556 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; |
|
|
if ('{' == *start || '}' == *start) |
if ('{' == *start || '}' == *start) |
ssz = 1; |
ssz = 1; |
else |
else |
ssz = strcspn(start + 1, " ~\"{}\t") + 1; |
ssz = strcspn(start + 1, " ^~\"{}\t") + 1; |
next = start + (int)ssz; |
next = start + (int)ssz; |
if ('\0' == *next) |
if ('\0' == *next) |
next = NULL; |
next = NULL; |
|
|
ep->cur++; |
ep->cur++; |
while (' ' == ep->data[(int)ep->cur] || |
while (' ' == ep->data[(int)ep->cur] || |
'\t' == ep->data[(int)ep->cur] || |
'\t' == ep->data[(int)ep->cur] || |
|
'^' == ep->data[(int)ep->cur] || |
'~' == ep->data[(int)ep->cur]) |
'~' == ep->data[(int)ep->cur]) |
ep->cur++; |
ep->cur++; |
} else { |
} else { |
Line 695 eqn_do_set(struct eqn_node *ep) |
|
Line 704 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 722 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 757 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 769 eqn_do_define(struct eqn_node *ep) |
|
} |
} |
|
|
static int |
static int |
|
eqn_do_gfont(struct eqn_node *ep) |
|
{ |
|
const char *start; |
|
|
|
if (NULL == (start = eqn_nextrawtok(ep, NULL))) { |
|
EQN_MSG(MANDOCERR_EQNEOF, ep); |
|
return(0); |
|
} |
|
return(1); |
|
} |
|
|
|
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 803 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; |