source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mdocml: Allow EQN data to be pushed down into libmdoc via mdoc_addeqn().
@ 2011-02-09  9:05 kristaps
  0 siblings, 0 replies; only message in thread
From: kristaps @ 2011-02-09  9:05 UTC (permalink / raw)
  To: source

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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2011-02-09  9:05 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-02-09  9:05 mdocml: Allow EQN data to be pushed down into libmdoc via mdoc_addeqn() kristaps

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).