source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mdocml: Do not skip data after horizontal lines in the layout.
@ 2011-01-25 12:16 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2011-01-25 12:16 UTC (permalink / raw)
  To: source

Log Message:
-----------
Do not skip data after horizontal lines in the layout.
Instead, let one line of input data add two new spans
to the tbl tree during one single call of tbl_data().
Note that this causes the horizontal line to get parsed
into the tbl tree, but not yet used in the output, 
which will be fixed next.
Avoids data loss in cpu(4/hppa). 
ok kristaps@

Modified Files:
--------------
    mdocml:
        tbl_data.c

Revision Data
-------------
Index: tbl_data.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/tbl_data.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -Ltbl_data.c -Ltbl_data.c -u -p -r1.19 -r1.20
--- tbl_data.c
+++ tbl_data.c
@@ -1,6 +1,7 @@
 /*	$Id$ */
 /*
- * Copyright (c) 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
+ * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
+ * Copyright (c) 2011 Ingo Schwarze <schwarze@openbsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -30,6 +31,8 @@
 
 static	int	data(struct tbl_node *, struct tbl_span *, 
 			int, const char *, int *);
+static	struct tbl_span	*newspan(struct tbl_node *, struct tbl_row *);
+
 
 static int
 data(struct tbl_node *tbl, struct tbl_span *dp, 
@@ -172,6 +175,27 @@ tbl_cdata(struct tbl_node *tbl, int ln, 
 	return(0);
 }
 
+static struct tbl_span *
+newspan(struct tbl_node *tbl, struct tbl_row *rp)
+{
+	struct tbl_span	*dp;
+
+	dp = mandoc_calloc(1, sizeof(struct tbl_span));
+	dp->tbl = &tbl->opts;
+	dp->layout = rp;
+	dp->head = tbl->first_head;
+
+	if (tbl->last_span) {
+		tbl->last_span->next = dp;
+		tbl->last_span = dp;
+	} else {
+		tbl->last_span = tbl->first_span = dp;
+		dp->flags |= TBL_SPAN_FIRST;
+	}
+
+	return(dp);
+}
+
 int
 tbl_data(struct tbl_node *tbl, int ln, const char *p)
 {
@@ -196,9 +220,24 @@ tbl_data(struct tbl_node *tbl, int ln, c
 
 	if (tbl->last_span) {
 		assert(tbl->last_span->layout);
-		if (tbl->last_span->pos == TBL_SPAN_DATA)
-			rp = tbl->last_span->layout->next;
-		else
+		if (tbl->last_span->pos == TBL_SPAN_DATA) {
+			for (rp = tbl->last_span->layout->next;
+					rp && rp->first; rp = rp->next) {
+				switch (rp->first->pos) {
+				case (TBL_CELL_HORIZ):
+					dp = newspan(tbl, rp);
+					dp->pos = TBL_SPAN_HORIZ;
+					continue;
+				case (TBL_CELL_DHORIZ):
+					dp = newspan(tbl, rp);
+					dp->pos = TBL_SPAN_DHORIZ;
+					continue;
+				default:
+					break;
+				}
+				break;
+			}
+		} else
 			rp = tbl->last_span->layout;
 
 		if (NULL == rp)
@@ -208,18 +247,7 @@ tbl_data(struct tbl_node *tbl, int ln, c
 
 	assert(rp);
 
-	dp = mandoc_calloc(1, sizeof(struct tbl_span));
-	dp->tbl = &tbl->opts;
-	dp->layout = rp;
-	dp->head = tbl->first_head;
-
-	if (tbl->last_span) {
-		tbl->last_span->next = dp;
-		tbl->last_span = dp;
-	} else {
-		tbl->last_span = tbl->first_span = dp;
-		dp->flags |= TBL_SPAN_FIRST;
-	}
+	dp = newspan(tbl, rp);
 
 	if ( ! strcmp(p, "_")) {
 		dp->pos = TBL_SPAN_HORIZ;
--
 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-01-25 12:16 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-25 12:16 mdocml: Do not skip data after horizontal lines in the layout schwarze

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).