From 7e1515051811beb532cd49dfdf82f778dde90e81 Mon Sep 17 00:00:00 2001 From: Kristaps Dzonsons Date: Wed, 9 Feb 2011 09:05:52 +0000 Subject: Allow EQN data to be pushed down into libmdoc via mdoc_addeqn(). Only the adding itself is implemented; equation data is not yet shown. --- eqn.c | 6 +++--- libroff.h | 4 +--- main.c | 5 ++++- mandoc.h | 4 +++- mdoc.3 | 13 +++++++++++-- mdoc.c | 26 +++++++++++++++++++++++++- mdoc.h | 5 ++++- roff.c | 4 ++-- roff.h | 3 ++- tree.c | 4 ++-- 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 * @@ -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 * @@ -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 * Copyright (c) 2010, 2011 Ingo Schwarze @@ -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 * @@ -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 .\" Copyright (c) 2010 Ingo Schwarze @@ -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 * Copyright (c) 2010 Ingo Schwarze @@ -221,6 +221,30 @@ mdoc_endparse(struct mdoc *m) return(0); } +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) { 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 * @@ -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 * Copyright (c) 2010, 2011 Ingo Schwarze @@ -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 * @@ -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 * @@ -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"; -- cgit v1.2.3-56-ge451