]> git.cameronkatri.com Git - mandoc.git/blobdiff - eqn.c
Warn if equation `define' key is quoted (groff-ism).
[mandoc.git] / eqn.c
diff --git a/eqn.c b/eqn.c
index 3d58d8e687c98cacd548a81043abe09391b90e0e..ca7b14d27e96048a1e4070fb08c55a16ba963f1c 100644 (file)
--- 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);