aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/eqn.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2014-10-16 01:11:20 +0000
committerIngo Schwarze <schwarze@openbsd.org>2014-10-16 01:11:20 +0000
commit5ed742dc63b34ff435a2b04d4e14fcb6081d49b0 (patch)
treefa3b2b20e34566f744745409e53d12cb65f8bc37 /eqn.c
parent191186556e8df468bec99ae47cd09817e9d288a0 (diff)
downloadmandoc-5ed742dc63b34ff435a2b04d4e14fcb6081d49b0.tar.gz
mandoc-5ed742dc63b34ff435a2b04d4e14fcb6081d49b0.tar.zst
mandoc-5ed742dc63b34ff435a2b04d4e14fcb6081d49b0.zip
Implement in-line equations, much needed by Xenocara manuals.
Put the steering into the roff parser rather than into the mdoc parser such that it works for all macro languages and on both text and macro lines. Line breaks and blank characters generated before and after in-line equations are not perfect yet, but let's do one thing at a time.
Diffstat (limited to 'eqn.c')
-rw-r--r--eqn.c28
1 files changed, 27 insertions, 1 deletions
diff --git a/eqn.c b/eqn.c
index 1cc0874a..e36df60a 100644
--- a/eqn.c
+++ b/eqn.c
@@ -1,4 +1,4 @@
-/* $Id: eqn.c,v 1.53 2014/10/12 20:08:58 schwarze Exp $ */
+/* $Id: eqn.c,v 1.54 2014/10/16 01:11:20 schwarze Exp $ */
/*
* Copyright (c) 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -588,6 +588,30 @@ eqn_box_makebinary(struct eqn_node *ep,
}
/*
+ * Parse the "delim" control statement.
+ */
+static void
+eqn_delim(struct eqn_node *ep)
+{
+ const char *start;
+ size_t sz;
+
+ if ((start = eqn_nextrawtok(ep, &sz)) == NULL)
+ mandoc_msg(MANDOCERR_REQ_EMPTY, ep->parse,
+ ep->eqn.ln, ep->eqn.pos, "delim");
+ else if (strncmp(start, "off", 3) == 0)
+ ep->delim = 0;
+ else if (strncmp(start, "on", 2) == 0) {
+ if (ep->odelim && ep->cdelim)
+ ep->delim = 1;
+ } else if (start[1] != '\0') {
+ ep->odelim = start[0];
+ ep->cdelim = start[1];
+ ep->delim = 1;
+ }
+}
+
+/*
* Undefine a previously-defined string.
*/
static int
@@ -698,6 +722,8 @@ this_tok:
EQN_MSG(MANDOCERR_EQNEOF, ep);
break;
case (EQN_TOK_DELIM):
+ eqn_delim(ep);
+ break;
case (EQN_TOK_GFONT):
if (eqn_nextrawtok(ep, NULL) == NULL)
mandoc_msg(MANDOCERR_REQ_EMPTY, ep->parse,