version 1.15, 2011/07/21 12:30:44 |
version 1.16, 2011/07/21 13:18:24 |
|
|
int (*fp)(struct eqn_node *); |
int (*fp)(struct eqn_node *); |
}; |
}; |
|
|
|
struct eqnmark { |
|
const char *name; |
|
size_t sz; |
|
}; |
|
|
enum eqnpartt { |
enum eqnpartt { |
EQN_DEFINE = 0, |
EQN_DEFINE = 0, |
EQN_SET, |
EQN_SET, |
Line 63 static const struct eqnpart eqnparts[EQN__MAX] = { |
|
Line 68 static const struct eqnpart eqnparts[EQN__MAX] = { |
|
{ "undef", 5, eqn_do_undef }, /* EQN_UNDEF */ |
{ "undef", 5, eqn_do_undef }, /* EQN_UNDEF */ |
}; |
}; |
|
|
|
static const struct eqnmark eqnmarks[EQNMARK__MAX] = { |
|
{ "", 0 }, /* EQNMARK_NONE */ |
|
{ "dot", 3 }, /* EQNMARK_DOT */ |
|
{ "dotdot", 6 }, /* EQNMARK_DOTDOT */ |
|
{ "hat", 3 }, /* EQNMARK_HAT */ |
|
{ "tilde", 5 }, /* EQNMARK_TILDE */ |
|
{ "vec", 3 }, /* EQNMARK_VEC */ |
|
{ "dyad", 4 }, /* EQNMARK_DYAD */ |
|
{ "bar", 3 }, /* EQNMARK_BAR */ |
|
{ "under", 5 }, /* EQNMARK_UNDER */ |
|
}; |
|
|
/* ARGSUSED */ |
/* ARGSUSED */ |
enum rofferr |
enum rofferr |
eqn_read(struct eqn_node **epp, int ln, |
eqn_read(struct eqn_node **epp, int ln, |
Line 139 eqn_end(struct eqn_node *ep) |
|
Line 156 eqn_end(struct eqn_node *ep) |
|
* Otherwise, return the equation. |
* Otherwise, return the equation. |
*/ |
*/ |
|
|
if ((c = eqn_box(ep, root, &last)) > 0) { |
if (0 == (c = eqn_box(ep, root, &last))) { |
|
if (last != root) { |
|
EQN_MSG(MANDOCERR_EQNSCOPE, ep); |
|
c = 0; |
|
} |
|
} else if (c > 0) |
EQN_MSG(MANDOCERR_EQNNSCOPE, ep); |
EQN_MSG(MANDOCERR_EQNNSCOPE, ep); |
c = 0; |
|
} else if (0 == c && last != root) |
|
EQN_MSG(MANDOCERR_EQNSCOPE, ep); |
|
|
|
return(1 == c ? ROFF_EQN : ROFF_IGN); |
return(0 == c ? ROFF_EQN : ROFF_IGN); |
} |
} |
|
|
static int |
static int |
|
|
|
|
goto again; |
goto again; |
} |
} |
|
|
|
for (i = 0; i < (int)EQNMARK__MAX; i++) { |
|
if (eqnmarks[i].sz != sz) |
|
continue; |
|
if (strncmp(eqnmarks[i].name, start, sz)) |
|
continue; |
|
last->mark = (enum eqn_markt)i; |
|
goto again; |
|
} |
|
|
/* Exit this [hopefully] subexpression. */ |
/* Exit this [hopefully] subexpression. */ |
|
|