summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--eqn.c20
-rw-r--r--mandoc.h3
-rw-r--r--read.c3
3 files changed, 22 insertions, 4 deletions
diff --git a/eqn.c b/eqn.c
index 2ea4552d..66850466 100644
--- a/eqn.c
+++ b/eqn.c
@@ -54,11 +54,12 @@ eqn_read(struct eqn_node **epp, int ln,
return(ROFF_IGN);
if (6 == sz && 0 == strncmp("define", start, 6)) {
- /*
- * TODO: warn if key is quoted: groff doesn't seem to
- * like this (I don't know why).
- */
+ if (end && '"' == *end)
+ mandoc_msg(MANDOCERR_EQNQUOTE,
+ ep->parse, ln, pos, NULL);
+
start = eqn_nexttok(ep->parse, ln, pos, &end, &sz);
+
for (i = 0; i < (int)ep->defsz; i++) {
if (ep->defs[i].keysz != sz)
continue;
@@ -150,6 +151,12 @@ eqn_free(struct eqn_node *p)
free(p);
}
+/*
+ * Return the current equation token setting "next" on the next one,
+ * setting the token size in "sz".
+ * This does the Right Thing for quoted strings, too.
+ * Returns NULL if no more tokens exist.
+ */
static const char *
eqn_nexttok(struct mparse *mp, int ln, int pos,
const char **next, size_t *sz)
@@ -177,6 +184,11 @@ eqn_nexttok(struct mparse *mp, int ln, int pos,
while (' ' == **next)
(*next)++;
} else {
+ /*
+ * XXX: groff gets confused by this and doesn't always
+ * do the "right thing" (just terminate it and warn
+ * about it).
+ */
if (q)
mandoc_msg(MANDOCERR_BADQUOTE,
mp, ln, pos, NULL);
diff --git a/mandoc.h b/mandoc.h
index 8e1d26fe..f545be22 100644
--- a/mandoc.h
+++ b/mandoc.h
@@ -104,6 +104,9 @@ enum mandocerr {
MANDOCERR_BADESCAPE, /* unknown escape sequence */
MANDOCERR_BADQUOTE, /* unterminated quoted string */
+ /* related to equations */
+ MANDOCERR_EQNQUOTE, /* unexpected literal in equation */
+
MANDOCERR_ERROR, /* ===== start of errors ===== */
/* related to tables */
diff --git a/read.c b/read.c
index 6ca1fb1b..f8390552 100644
--- a/read.c
+++ b/read.c
@@ -146,6 +146,9 @@ static const char * const mandocerrs[MANDOCERR_MAX] = {
"bad comment style",
"bad escape sequence",
"unterminated quoted string",
+
+ /* related to equations */
+ "unexpected literal in equation",
"generic error",