From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from krisdoz.my.domain (kristaps@localhost [127.0.0.1]) by krisdoz.my.domain (8.14.3/8.14.3) with ESMTP id p1995rVU000148 for ; Wed, 9 Feb 2011 04:05:54 -0500 (EST) Received: (from kristaps@localhost) by krisdoz.my.domain (8.14.3/8.14.3/Submit) id p1995rK1014964; Wed, 9 Feb 2011 04:05:53 -0500 (EST) Date: Wed, 9 Feb 2011 04:05:53 -0500 (EST) Message-Id: <201102090905.p1995rK1014964@krisdoz.my.domain> X-Mailinglist: mdocml-source Reply-To: source@mdocml.bsd.lv MIME-Version: 1.0 From: kristaps@mdocml.bsd.lv To: source@mdocml.bsd.lv Subject: mdocml: Allow EQN data to be pushed down into libmdoc via mdoc_addeqn(). X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Log Message: ----------- Allow EQN data to be pushed down into libmdoc via mdoc_addeqn(). Only the adding itself is implemented; equation data is not yet shown. Modified Files: -------------- mdocml: eqn.c libroff.h main.c mandoc.h mdoc.3 mdoc.c mdoc.h roff.c roff.h tree.c Revision Data ------------- Index: roff.h =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/roff.h,v retrieving revision 1.23 retrieving revision 1.24 diff -Lroff.h -Lroff.h -u -p -r1.23 -r1.24 --- roff.h +++ roff.h @@ -40,6 +40,7 @@ enum rofferr roff_parseln(struct roff 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 Index: mdoc.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc.c,v retrieving revision 1.180 retrieving revision 1.181 diff -Lmdoc.c -Lmdoc.c -u -p -r1.180 -r1.181 --- mdoc.c +++ mdoc.c @@ -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; Index: mandoc.h =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mandoc.h,v retrieving revision 1.56 retrieving revision 1.57 diff -Lmandoc.h -Lmandoc.h -u -p -r1.56 -r1.57 --- mandoc.h +++ mandoc.h @@ -271,6 +271,8 @@ struct tbl_span { struct eqn { size_t sz; char *data; + int line; /* invocation line */ + int pos; /* invocation position */ }; /* Index: roff.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/roff.c,v retrieving revision 1.125 retrieving revision 1.126 diff -Lroff.c -Lroff.c -u -p -r1.125 -r1.126 --- roff.c +++ roff.c @@ -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; } Index: libroff.h =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/libroff.h,v retrieving revision 1.18 retrieving revision 1.19 diff -Llibroff.h -Llibroff.h -u -p -r1.18 -r1.19 --- libroff.h +++ libroff.h @@ -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; }; Index: main.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/main.c,v retrieving revision 1.143 retrieving revision 1.144 diff -Lmain.c -Lmain.c -u -p -r1.143 -r1.144 --- main.c +++ main.c @@ -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, Index: eqn.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/eqn.c,v retrieving revision 1.1 retrieving revision 1.2 diff -Leqn.c -Leqn.c -u -p -r1.1 -r1.2 --- eqn.c +++ eqn.c @@ -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); } Index: mdoc.3 =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc.3,v retrieving revision 1.55 retrieving revision 1.56 diff -Lmdoc.3 -Lmdoc.3 -u -p -r1.55 -r1.56 --- mdoc.3 +++ mdoc.3 @@ -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. Index: mdoc.h =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc.h,v retrieving revision 1.116 retrieving revision 1.117 diff -Lmdoc.h -Lmdoc.h -u -p -r1.116 -r1.117 --- mdoc.h +++ mdoc.h @@ -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 int mdoc_endparse(struct mdoc *); int mdoc_addspan(struct mdoc *, const struct tbl_span *); +int mdoc_addeqn(struct mdoc *, + const struct eqn *); __END_DECLS Index: tree.c =================================================================== RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/tree.c,v retrieving revision 1.34 retrieving revision 1.35 diff -Ltree.c -Ltree.c -u -p -r1.34 -r1.35 --- tree.c +++ tree.c @@ -132,7 +132,7 @@ print_mdoc(const struct mdoc_node *n, in case (MDOC_TBL): break; case (MDOC_EQN): - p = "eqn"; + p = n->eqn->data; break; case (MDOC_ROOT): p = "root"; -- To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv