version 1.20, 2011/07/21 23:30:39 |
version 1.22, 2011/07/22 00:16:37 |
Line 259 eqn_box(struct eqn_node *ep, struct eqn_box *last) |
|
Line 259 eqn_box(struct eqn_node *ep, struct eqn_box *last) |
|
EQN_MSG(MANDOCERR_EQNSYNT, ep); |
EQN_MSG(MANDOCERR_EQNSYNT, ep); |
return(EQN_ERR); |
return(EQN_ERR); |
} |
} |
if (EQN_DESCOPE != (c = eqn_eqn(ep, last))) { |
|
if (EQN_ERR != c) |
while (EQN_DESCOPE == (c = eqn_eqn(ep, last))) { |
EQN_MSG(MANDOCERR_EQNSCOPE, ep); |
assert(last->last); |
return(EQN_ERR); |
last->last->pile = (enum eqn_pilet)i; |
|
eqn_rewind(ep); |
|
start = eqn_nexttok(ep, &sz); |
|
assert(start); |
|
if (5 != sz || strncmp("above", start, 5)) |
|
break; |
|
last->last->above = 1; |
} |
} |
assert(last->last); |
|
last->last->pile = (enum eqn_pilet)i; |
if (EQN_DESCOPE != c) { |
eqn_rewind(ep); |
|
start = eqn_nexttok(ep, &sz); |
|
assert(start); |
|
if (1 == sz && 0 == strncmp("}", start, 1)) |
|
return(EQN_OK); |
|
if (5 != sz || strncmp("above", start, 5)) { |
|
EQN_MSG(MANDOCERR_EQNSYNT, ep); |
|
return(EQN_ERR); |
|
} |
|
last->last->above = 1; |
|
if (EQN_DESCOPE != (c = eqn_eqn(ep, last))) { |
|
if (EQN_ERR != c) |
if (EQN_ERR != c) |
EQN_MSG(MANDOCERR_EQNSCOPE, ep); |
EQN_MSG(MANDOCERR_EQNSCOPE, ep); |
return(EQN_ERR); |
return(EQN_ERR); |
} |
} |
|
|
eqn_rewind(ep); |
eqn_rewind(ep); |
start = eqn_nexttok(ep, &sz); |
start = eqn_nexttok(ep, &sz); |
assert(start); |
assert(start); |
if (1 == sz && 0 == strncmp("}", start, 1)) |
if (1 == sz && 0 == strncmp("}", start, 1)) |
return(EQN_OK); |
return(EQN_OK); |
|
|
EQN_MSG(MANDOCERR_EQNBADSCOPE, ep); |
EQN_MSG(MANDOCERR_EQNBADSCOPE, ep); |
return(EQN_ERR); |
return(EQN_ERR); |
} |
} |
Line 456 eqn_next(struct eqn_node *ep, char quote, size_t *sz, |
|
Line 453 eqn_next(struct eqn_node *ep, char quote, size_t *sz, |
|
{ |
{ |
char *start, *next; |
char *start, *next; |
int q, diff, lim; |
int q, diff, lim; |
size_t ssz; |
size_t ssz, dummy; |
struct eqn_def *def; |
struct eqn_def *def; |
|
|
if (NULL == sz) |
if (NULL == sz) |
sz = &ssz; |
sz = &dummy; |
|
|
lim = 0; |
lim = 0; |
ep->rew = ep->cur; |
ep->rew = ep->cur; |
|
|
} |
} |
|
|
start = &ep->data[(int)ep->cur]; |
start = &ep->data[(int)ep->cur]; |
next = q ? strchr(start, quote) : strchr(start, ' '); |
|
|
|
|
if ( ! q) { |
|
if ('{' == *start || '}' == *start) |
|
ssz = 1; |
|
else |
|
ssz = strcspn(start + 1, " ~\"{}\t") + 1; |
|
next = start + (int)ssz; |
|
if ('\0' == *next) |
|
next = NULL; |
|
} else |
|
next = strchr(start, quote); |
|
|
if (NULL != next) { |
if (NULL != next) { |
*sz = (size_t)(next - start); |
*sz = (size_t)(next - start); |
ep->cur += *sz; |
ep->cur += *sz; |
if (q) |
if (q) |
ep->cur++; |
ep->cur++; |
while (' ' == ep->data[(int)ep->cur]) |
while (' ' == ep->data[(int)ep->cur] || |
|
'\t' == ep->data[(int)ep->cur] || |
|
'~' == ep->data[(int)ep->cur]) |
ep->cur++; |
ep->cur++; |
} else { |
} else { |
if (q) |
if (q) |