aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/eqn.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2011-07-21 14:13:00 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2011-07-21 14:13:00 +0000
commit610da288ad1c36332f5bc333692f49e2326fa30d (patch)
tree41428bda139fbccd0a81dd5648fefa91a1813b46 /eqn.c
parent460878425b46952fed9a61e74b53e8ecd243a9c2 (diff)
downloadmandoc-610da288ad1c36332f5bc333692f49e2326fa30d.tar.gz
mandoc-610da288ad1c36332f5bc333692f49e2326fa30d.tar.zst
mandoc-610da288ad1c36332f5bc333692f49e2326fa30d.zip
Full support for eqn positionals (above, over, sup, sub, etc.).
Diffstat (limited to 'eqn.c')
-rw-r--r--eqn.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/eqn.c b/eqn.c
index d10156b0..23dd934e 100644
--- a/eqn.c
+++ b/eqn.c
@@ -1,4 +1,4 @@
-/* $Id: eqn.c,v 1.17 2011/07/21 13:37:04 kristaps Exp $ */
+/* $Id: eqn.c,v 1.18 2011/07/21 14:13:00 kristaps Exp $ */
/*
* Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -80,11 +80,22 @@ static const struct eqnstr eqnmarks[EQNMARK__MAX] = {
};
static const struct eqnstr eqnfonts[EQNFONT__MAX] = {
+ { "", 0 },
{ "roman", 5 },
{ "bold", 4 },
{ "italic", 6 },
};
+static const struct eqnstr eqnposs[EQNPOS__MAX] = {
+ { "", 0 },
+ { "over", 4 },
+ { "sup", 3 },
+ { "sub", 3 },
+ { "to", 2 },
+ { "from", 4 },
+ { "above", 5 },
+};
+
/* ARGSUSED */
enum rofferr
eqn_read(struct eqn_node **epp, int ln,
@@ -189,8 +200,7 @@ eqn_box(struct eqn_node *ep, struct eqn_box *last, struct eqn_box **sv)
*sv = last;
nextc = 1;
- font = EQNFONT_NONE;
-
+ font = EQNFONT_NONE;
again:
if (NULL == (start = eqn_nexttok(ep, &sz)))
return(0);
@@ -204,6 +214,15 @@ again:
goto again;
}
+ for (i = 0; i < (int)EQNFONT__MAX; i++) {
+ if (eqnposs[i].sz != sz)
+ continue;
+ if (strncmp(eqnposs[i].name, start, sz))
+ continue;
+ last->pos = (enum eqn_post)i;
+ goto again;
+ }
+
for (i = 0; i < (int)EQN__MAX; i++) {
if (eqnparts[i].str.sz != sz)
continue;