-/* $Id: eqn.c,v 1.6 2011/07/17 12:13:37 kristaps Exp $ */
+/* $Id: eqn.c,v 1.7 2011/07/17 12:52:54 kristaps Exp $ */
/*
* Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
*
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;
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)
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);