summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2011-07-22 00:16:37 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2011-07-22 00:16:37 +0000
commit85ad7222c5fd305322c7aa679840eedd807ef942 (patch)
tree2eefc978a7cccecf46cca22e3e6387891166e240
parent4a9b3b91ed883201108726196caa6825d5df0914 (diff)
downloadmandoc-85ad7222c5fd305322c7aa679840eedd807ef942.tar.gz
Accomodate for hard-spaces with tildes. For now, consider them regular
spaces. Also allow for tabs. Finally, have the parser correctly handle open and close brackets smooshed against other terms. All of these handle "details" noted in the CACM paper.
-rw-r--r--eqn.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/eqn.c b/eqn.c
index 4eb3f3ca..453bf931 100644
--- a/eqn.c
+++ b/eqn.c
@@ -453,11 +453,11 @@ eqn_next(struct eqn_node *ep, char quote, size_t *sz, int repl)
{
char *start, *next;
int q, diff, lim;
- size_t ssz;
+ size_t ssz, dummy;
struct eqn_def *def;
if (NULL == sz)
- sz = &ssz;
+ sz = &dummy;
lim = 0;
ep->rew = ep->cur;
@@ -482,14 +482,26 @@ again:
}
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) {
*sz = (size_t)(next - start);
ep->cur += *sz;
if (q)
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++;
} else {
if (q)