aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2011-02-09 09:18:15 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2011-02-09 09:18:15 +0000
commitdfc3c322d2d9553a0f7c08a28a772b13beec5e7f (patch)
tree9f45d0bb1130a5791c96e9accdc1069bd14bc4d3
parent7e1515051811beb532cd49dfdf82f778dde90e81 (diff)
downloadmandoc-dfc3c322d2d9553a0f7c08a28a772b13beec5e7f.tar.gz
mandoc-dfc3c322d2d9553a0f7c08a28a772b13beec5e7f.tar.zst
mandoc-dfc3c322d2d9553a0f7c08a28a772b13beec5e7f.zip
Allow -man to process EQN as well. Also fix a segfault in missing case
statements in the post-handler for EQN in -mdoc and -man.
-rw-r--r--main.c9
-rw-r--r--man.315
-rw-r--r--man.c18
-rw-r--r--man.h4
-rw-r--r--man_validate.c4
-rw-r--r--mdoc.34
-rw-r--r--mdoc_validate.c4
-rw-r--r--tree.c4
8 files changed, 50 insertions, 12 deletions
diff --git a/main.c b/main.c
index 306fdadb..b11ad041 100644
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/* $Id: main.c,v 1.144 2011/02/09 09:05:52 kristaps Exp $ */
+/* $Id: main.c,v 1.145 2011/02/09 09:18:15 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -866,8 +866,11 @@ rerun:
} else if (ROFF_EQN == rr) {
assert(curp->man || curp->mdoc);
assert(roff_eqn(curp->roff));
- if (curp->mdoc)
- mdoc_addeqn(curp->mdoc, roff_eqn(curp->roff));
+ rc = curp->mdoc ?
+ mdoc_addeqn(curp->mdoc,
+ roff_eqn(curp->roff)) :
+ man_addeqn(curp->man,
+ roff_eqn(curp->roff));
} else if (curp->man || curp->mdoc) {
rc = curp->man ?
man_parseln(curp->man,
diff --git a/man.3 b/man.3
index 2b2d0a91..2f1ae508 100644
--- a/man.3
+++ b/man.3
@@ -1,4 +1,4 @@
-.\" $Id: man.3,v 1.29 2011/01/03 11:31:26 kristaps Exp $
+.\" $Id: man.3,v 1.30 2011/02/09 09:18:15 kristaps Exp $
.\"
.\" Copyright (c) 2009-2010 Kristaps Dzonsons <kristaps@bsd.lv>
.\"
@@ -14,11 +14,13 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: January 3 2011 $
+.Dd $Mdocdate: February 9 2011 $
.Dt MAN 3
.Os
.Sh NAME
.Nm man ,
+.Nm man_addeqn ,
+.Nm man_addspan ,
.Nm man_alloc ,
.Nm man_endparse ,
.Nm man_free ,
@@ -32,6 +34,11 @@
.In man.h
.Vt extern const char * const * man_macronames;
.Ft int
+.Fo man_addeqn
+.Fa "struct man *man"
+.Fa "const struct eqn *eqn"
+.Fc
+.Ft int
.Fo man_addspan
.Fa "struct man *man"
.Fa "const struct tbl_span *span"
@@ -106,6 +113,7 @@ for details.
.El
.Ss Functions
If
+.Fn man_addeqn ,
.Fn man_addspan ,
.Fn man_parseln ,
or
@@ -116,6 +124,9 @@ or
.Fn man_free
will raise an assertion.
.Bl -ohang
+.It Fn man_addeqn
+Add an equation to the parsing stream.
+Returns 0 on failure, 1 on success.
.It Fn man_addspan
Add a table span to the parsing stream.
Returns 0 on failure, 1 on success.
diff --git a/man.c b/man.c
index 3a217af3..1ee3e1ff 100644
--- a/man.c
+++ b/man.c
@@ -1,4 +1,4 @@
-/* $Id: man.c,v 1.100 2011/02/08 07:40:23 kristaps Exp $ */
+/* $Id: man.c,v 1.101 2011/02/09 09:18:15 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -346,6 +346,22 @@ man_node_delete(struct man *m, struct man_node *p)
man_node_free(p);
}
+int
+man_addeqn(struct man *m, const struct eqn *ep)
+{
+ struct man_node *n;
+
+ assert( ! (MAN_HALT & m->flags));
+
+ n = man_node_alloc(m, ep->line, ep->pos, MAN_EQN, MAN_MAX);
+ n->eqn = ep;
+
+ if ( ! man_node_append(m, n))
+ return(0);
+
+ m->next = MAN_NEXT_SIBLING;
+ return(man_descope(m, ep->line, ep->pos));
+}
int
man_addspan(struct man *m, const struct tbl_span *sp)
diff --git a/man.h b/man.h
index 6d9f3ced..04d50929 100644
--- a/man.h
+++ b/man.h
@@ -1,4 +1,4 @@
-/* $Id: man.h,v 1.52 2011/02/06 21:44:36 kristaps Exp $ */
+/* $Id: man.h,v 1.53 2011/02/09 09:18:15 kristaps Exp $ */
/*
* Copyright (c) 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -104,6 +104,7 @@ struct man_node {
struct man_node *head; /* BLOCK node HEAD ptr */
struct man_node *body; /* BLOCK node BODY ptr */
const struct tbl_span *span; /* TBL */
+ const struct eqn *eqn; /* EQN */
};
/*
@@ -123,6 +124,7 @@ int man_parseln(struct man *, int, char *, int);
int man_endparse(struct man *);
int man_addspan(struct man *,
const struct tbl_span *);
+int man_addeqn(struct man *, const struct eqn *);
const struct man_node *man_node(const struct man *);
const struct man_meta *man_meta(const struct man *);
diff --git a/man_validate.c b/man_validate.c
index ee174d45..d98862e9 100644
--- a/man_validate.c
+++ b/man_validate.c
@@ -1,4 +1,4 @@
-/* $Id: man_validate.c,v 1.61 2011/02/06 21:44:36 kristaps Exp $ */
+/* $Id: man_validate.c,v 1.62 2011/02/09 09:18:15 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -152,6 +152,8 @@ man_valid_post(struct man *m)
return(check_text(m, m->last));
case (MAN_ROOT):
return(check_root(m, m->last));
+ case (MAN_EQN):
+ /* FALLTHROUGH */
case (MAN_TBL):
return(1);
default:
diff --git a/mdoc.3 b/mdoc.3
index 3c2a02bb..82edecc7 100644
--- a/mdoc.3
+++ b/mdoc.3
@@ -1,4 +1,4 @@
-.\" $Id: mdoc.3,v 1.56 2011/02/09 09:05:52 kristaps Exp $
+.\" $Id: mdoc.3,v 1.57 2011/02/09 09:18:15 kristaps Exp $
.\"
.\" Copyright (c) 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
.\" Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
@@ -20,6 +20,8 @@
.Os
.Sh NAME
.Nm mdoc ,
+.Nm mdoc_addeqn ,
+.Nm mdoc_addspan ,
.Nm mdoc_alloc ,
.Nm mdoc_endparse ,
.Nm mdoc_free ,
diff --git a/mdoc_validate.c b/mdoc_validate.c
index 56b249f0..31002d99 100644
--- a/mdoc_validate.c
+++ b/mdoc_validate.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_validate.c,v 1.156 2011/02/06 21:44:36 kristaps Exp $ */
+/* $Id: mdoc_validate.c,v 1.157 2011/02/09 09:18:15 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -369,6 +369,8 @@ mdoc_valid_post(struct mdoc *mdoc)
switch (mdoc->last->type) {
case (MDOC_TEXT):
/* FALLTHROUGH */
+ case (MDOC_EQN):
+ /* FALLTHROUGH */
case (MDOC_TBL):
return(1);
case (MDOC_ROOT):
diff --git a/tree.c b/tree.c
index fd2e6268..21bd8daf 100644
--- a/tree.c
+++ b/tree.c
@@ -1,4 +1,4 @@
-/* $Id: tree.c,v 1.35 2011/02/09 09:05:52 kristaps Exp $ */
+/* $Id: tree.c,v 1.36 2011/02/09 09:18:15 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -233,7 +233,7 @@ print_man(const struct man_node *n, int indent)
case (MAN_TBL):
break;
case (MAN_EQN):
- p = "eqn";
+ p = n->eqn->data;
break;
default:
abort();