aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2011-02-09 09:05:52 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2011-02-09 09:05:52 +0000
commit7e1515051811beb532cd49dfdf82f778dde90e81 (patch)
tree167361db4dfd08c4d04082b1b45294ae5c0146b3
parentc4585f51e1879dba09462098517aec738f246342 (diff)
downloadmandoc-7e1515051811beb532cd49dfdf82f778dde90e81.tar.gz
mandoc-7e1515051811beb532cd49dfdf82f778dde90e81.tar.zst
mandoc-7e1515051811beb532cd49dfdf82f778dde90e81.zip
Allow EQN data to be pushed down into libmdoc via mdoc_addeqn(). Only
the adding itself is implemented; equation data is not yet shown.
-rw-r--r--eqn.c6
-rw-r--r--libroff.h4
-rw-r--r--main.c5
-rw-r--r--mandoc.h4
-rw-r--r--mdoc.313
-rw-r--r--mdoc.c26
-rw-r--r--mdoc.h5
-rw-r--r--roff.c4
-rw-r--r--roff.h3
-rw-r--r--tree.c4
10 files changed, 57 insertions, 17 deletions
diff --git a/eqn.c b/eqn.c
index 64511a8b..3e668563 100644
--- a/eqn.c
+++ b/eqn.c
@@ -1,4 +1,4 @@
-/* $Id: eqn.c,v 1.1 2011/02/06 20:36:36 kristaps Exp $ */
+/* $Id: eqn.c,v 1.2 2011/02/09 09:05:52 kristaps Exp $ */
/*
* Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -59,8 +59,8 @@ eqn_alloc(int pos, int line)
struct eqn_node *p;
p = mandoc_calloc(1, sizeof(struct eqn_node));
- p->line = line;
- p->pos = pos;
+ p->eqn.line = line;
+ p->eqn.pos = pos;
return(p);
}
diff --git a/libroff.h b/libroff.h
index b03873a2..558ae0f1 100644
--- a/libroff.h
+++ b/libroff.h
@@ -1,4 +1,4 @@
-/* $Id: libroff.h,v 1.18 2011/02/06 20:36:36 kristaps Exp $ */
+/* $Id: libroff.h,v 1.19 2011/02/09 09:05:52 kristaps Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -44,8 +44,6 @@ struct tbl_node {
};
struct eqn_node {
- int pos; /* invocation column */
- int line; /* invocation line */
struct eqn eqn;
struct eqn_node *next;
};
diff --git a/main.c b/main.c
index 2daea890..306fdadb 100644
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/* $Id: main.c,v 1.143 2011/02/06 20:36:36 kristaps Exp $ */
+/* $Id: main.c,v 1.144 2011/02/09 09:05:52 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -865,6 +865,9 @@ 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));
} else if (curp->man || curp->mdoc) {
rc = curp->man ?
man_parseln(curp->man,
diff --git a/mandoc.h b/mandoc.h
index 845c85a5..7cb37f35 100644
--- a/mandoc.h
+++ b/mandoc.h
@@ -1,4 +1,4 @@
-/* $Id: mandoc.h,v 1.56 2011/02/06 22:02:58 kristaps Exp $ */
+/* $Id: mandoc.h,v 1.57 2011/02/09 09:05:52 kristaps Exp $ */
/*
* Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -271,6 +271,8 @@ struct tbl_span {
struct eqn {
size_t sz;
char *data;
+ int line; /* invocation line */
+ int pos; /* invocation position */
};
/*
diff --git a/mdoc.3 b/mdoc.3
index 1a2fc9ba..3c2a02bb 100644
--- a/mdoc.3
+++ b/mdoc.3
@@ -1,4 +1,4 @@
-.\" $Id: mdoc.3,v 1.55 2011/01/07 15:07:21 kristaps Exp $
+.\" $Id: mdoc.3,v 1.56 2011/02/09 09:05:52 kristaps Exp $
.\"
.\" Copyright (c) 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
.\" Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
@@ -15,7 +15,7 @@
.\" 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 7 2011 $
+.Dd $Mdocdate: February 9 2011 $
.Dt MDOC 3
.Os
.Sh NAME
@@ -34,6 +34,11 @@
.Vt extern const char * const * mdoc_macronames;
.Vt extern const char * const * mdoc_argnames;
.Ft int
+.Fo mdoc_addeqn
+.Fa "struct mdoc *mdoc"
+.Fa "const struct eqn *eqn"
+.Fc
+.Ft int
.Fo mdoc_addspan
.Fa "struct mdoc *mdoc"
.Fa "const struct tbl_span *span"
@@ -97,6 +102,7 @@ for details.
.El
.Ss Functions
If
+.Fn mdoc_addeqn ,
.Fn mdoc_addspan ,
.Fn mdoc_parseln ,
or
@@ -107,6 +113,9 @@ or
.Fn mdoc_free
will raise an assertion.
.Bl -ohang
+.It Fn mdoc_addeqn
+Add an equation to the parsing stream.
+Returns 0 on failure, 1 on success.
.It Fn mdoc_addspan
Add a table span to the parsing stream.
Returns 0 on failure, 1 on success.
diff --git a/mdoc.c b/mdoc.c
index a1d3db3d..7e8e8bec 100644
--- a/mdoc.c
+++ b/mdoc.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc.c,v 1.180 2011/02/08 07:40:23 kristaps Exp $ */
+/* $Id: mdoc.c,v 1.181 2011/02/09 09:05:52 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
@@ -222,6 +222,30 @@ mdoc_endparse(struct mdoc *m)
}
int
+mdoc_addeqn(struct mdoc *m, const struct eqn *ep)
+{
+ struct mdoc_node *n;
+
+ assert( ! (MDOC_HALT & m->flags));
+
+ /* No text before an initial macro. */
+
+ if (SEC_NONE == m->lastnamed) {
+ mdoc_pmsg(m, ep->line, ep->pos, MANDOCERR_NOTEXT);
+ return(1);
+ }
+
+ n = node_alloc(m, ep->line, ep->pos, MDOC_MAX, MDOC_EQN);
+ n->eqn = ep;
+
+ if ( ! node_append(m, n))
+ return(0);
+
+ m->next = MDOC_NEXT_SIBLING;
+ return(1);
+}
+
+int
mdoc_addspan(struct mdoc *m, const struct tbl_span *sp)
{
struct mdoc_node *n;
diff --git a/mdoc.h b/mdoc.h
index d772cb72..071ce31d 100644
--- a/mdoc.h
+++ b/mdoc.h
@@ -1,4 +1,4 @@
-/* $Id: mdoc.h,v 1.116 2011/02/06 21:44:36 kristaps Exp $ */
+/* $Id: mdoc.h,v 1.117 2011/02/09 09:05:52 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -402,6 +402,7 @@ struct mdoc_node {
struct mdoc_node *tail; /* BLOCK */
char *string; /* TEXT */
const struct tbl_span *span; /* TBL */
+ const struct eqn *eqn; /* EQN */
enum mdoc_endbody end; /* BODY */
};
@@ -431,6 +432,8 @@ const struct mdoc_meta *mdoc_meta(const struct mdoc *);
int mdoc_endparse(struct mdoc *);
int mdoc_addspan(struct mdoc *,
const struct tbl_span *);
+int mdoc_addeqn(struct mdoc *,
+ const struct eqn *);
__END_DECLS
diff --git a/roff.c b/roff.c
index 7d76fb56..6162bb2c 100644
--- a/roff.c
+++ b/roff.c
@@ -1,4 +1,4 @@
-/* $Id: roff.c,v 1.125 2011/02/06 20:36:36 kristaps Exp $ */
+/* $Id: roff.c,v 1.126 2011/02/09 09:05:52 kristaps Exp $ */
/*
* Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -560,7 +560,7 @@ roff_endparse(struct roff *r)
if (r->eqn) {
(*r->msg)(MANDOCERR_SCOPEEXIT, r->data,
- r->eqn->line, r->eqn->pos, NULL);
+ r->eqn->eqn.line, r->eqn->eqn.pos, NULL);
eqn_end(r->eqn);
r->eqn = NULL;
}
diff --git a/roff.h b/roff.h
index baa1361f..923d56d7 100644
--- a/roff.h
+++ b/roff.h
@@ -1,4 +1,4 @@
-/* $Id: roff.h,v 1.23 2011/02/06 20:36:36 kristaps Exp $ */
+/* $Id: roff.h,v 1.24 2011/02/09 09:05:52 kristaps Exp $ */
/*
* Copyright (c) 2010 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -40,6 +40,7 @@ enum rofferr roff_parseln(struct roff *, int,
char **, size_t *, int, int *);
void roff_endparse(struct roff *);
const struct tbl_span *roff_span(const struct roff *);
+const struct eqn *roff_eqn(const struct roff *);
__END_DECLS
diff --git a/tree.c b/tree.c
index 65652adb..fd2e6268 100644
--- a/tree.c
+++ b/tree.c
@@ -1,4 +1,4 @@
-/* $Id: tree.c,v 1.34 2011/02/06 22:02:58 kristaps Exp $ */
+/* $Id: tree.c,v 1.35 2011/02/09 09:05:52 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -132,7 +132,7 @@ print_mdoc(const struct mdoc_node *n, int indent)
case (MDOC_TBL):
break;
case (MDOC_EQN):
- p = "eqn";
+ p = n->eqn->data;
break;
case (MDOC_ROOT):
p = "root";