aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/eqn.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2011-07-17 12:52:54 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2011-07-17 12:52:54 +0000
commit7be5fc75543838241bb32d119197e65ad64e15f8 (patch)
treef6af5aeba36670e10cca79dcdd65d6b8b0fd247b /eqn.c
parentda302548a58ff17d53b0d3e89bf0739d9ce61f10 (diff)
downloadmandoc-7be5fc75543838241bb32d119197e65ad64e15f8.tar.gz
mandoc-7be5fc75543838241bb32d119197e65ad64e15f8.tar.zst
mandoc-7be5fc75543838241bb32d119197e65ad64e15f8.zip
Warn if equation `define' key is quoted (groff-ism).
Diffstat (limited to 'eqn.c')
-rw-r--r--eqn.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/eqn.c b/eqn.c
index 3d58d8e6..ca7b14d2 100644
--- a/eqn.c
+++ b/eqn.c
@@ -1,4 +1,4 @@
-/* $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>
*
@@ -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);