source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mdocml: For now, it can't be helped that mandoc tbl(7) ignores
@ 2015-01-28 15:04 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2015-01-28 15:04 UTC (permalink / raw)
  To: source

Log Message:
-----------
For now, it can't be helped that mandoc tbl(7) ignores high-level macros,
but stop throwing away their arguments.  This fixes information loss in a
handful of Xenocara manuals, at the price of a small amount of formatting
noise creeping through.

Modified Files:
--------------
    mdocml:
        libroff.h
        roff.c
        tbl.c
        tbl_data.c
        tbl_layout.c
        tbl_opts.c

Revision Data
-------------
Index: tbl_layout.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/tbl_layout.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -Ltbl_layout.c -Ltbl_layout.c -u -p -r1.33 -r1.34
--- tbl_layout.c
+++ tbl_layout.c
@@ -234,14 +234,11 @@ again:
 }
 
 void
-tbl_layout(struct tbl_node *tbl, int ln, const char *p)
+tbl_layout(struct tbl_node *tbl, int ln, const char *p, int pos)
 {
 	struct tbl_row	*rp;
-	int		 pos;
 
-	pos = 0;
 	rp = NULL;
-
 	for (;;) {
 		/* Skip whitespace before and after each cell. */
 
Index: tbl_opts.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/tbl_opts.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -Ltbl_opts.c -Ltbl_opts.c -u -p -r1.18 -r1.19
--- tbl_opts.c
+++ tbl_opts.c
@@ -120,17 +120,19 @@ arg(struct tbl_node *tbl, int ln, const 
  * and some options are followed by arguments.
  */
 void
-tbl_option(struct tbl_node *tbl, int ln, const char *p)
+tbl_option(struct tbl_node *tbl, int ln, const char *p, int *offs)
 {
 	int		 i, pos, len;
 
-	pos = 0;
+	pos = *offs;
 	for (;;) {
 		while (p[pos] == ' ' || p[pos] == '\t' || p[pos] == ',')
 			pos++;
 
-		if (p[pos] == ';')
+		if (p[pos] == ';') {
+			*offs = pos + 1;
 			return;
+		}
 
 		/* Parse one option name. */
 
Index: tbl_data.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/tbl_data.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -Ltbl_data.c -Ltbl_data.c -u -p -r1.34 -r1.35
--- tbl_data.c
+++ tbl_data.c
@@ -138,13 +138,10 @@ getdata(struct tbl_node *tbl, struct tbl
 }
 
 int
-tbl_cdata(struct tbl_node *tbl, int ln, const char *p)
+tbl_cdata(struct tbl_node *tbl, int ln, const char *p, int pos)
 {
 	struct tbl_dat	*dat;
 	size_t		 sz;
-	int		 pos;
-
-	pos = 0;
 
 	dat = tbl->last_span->last;
 
@@ -204,11 +201,10 @@ newspan(struct tbl_node *tbl, int line, 
 }
 
 void
-tbl_data(struct tbl_node *tbl, int ln, const char *p)
+tbl_data(struct tbl_node *tbl, int ln, const char *p, int pos)
 {
 	struct tbl_span	*dp;
 	struct tbl_row	*rp;
-	int		 pos;
 
 	/*
 	 * Choose a layout row: take the one following the last parsed
@@ -259,7 +255,6 @@ tbl_data(struct tbl_node *tbl, int ln, c
 
 	dp->pos = TBL_SPAN_DATA;
 
-	pos = 0;
 	while ('\0' != p[pos])
 		getdata(tbl, dp, ln, p, &pos);
 }
Index: tbl.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/tbl.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -Ltbl.c -Ltbl.c -u -p -r1.34 -r1.35
--- tbl.c
+++ tbl.c
@@ -32,7 +32,7 @@
 
 
 enum rofferr
-tbl_read(struct tbl_node *tbl, int ln, const char *p, int offs)
+tbl_read(struct tbl_node *tbl, int ln, const char *p, int pos)
 {
 	const char	*cp;
 	int		 active;
@@ -46,7 +46,7 @@ tbl_read(struct tbl_node *tbl, int ln, c
 	if (tbl->part == TBL_PART_OPTS) {
 		tbl->part = TBL_PART_LAYOUT;
 		active = 1;
-		for (cp = p; *cp != '\0'; cp++) {
+		for (cp = p + pos; *cp != '\0'; cp++) {
 			switch (*cp) {
 			case '(':
 				active = 0;
@@ -64,8 +64,8 @@ tbl_read(struct tbl_node *tbl, int ln, c
 			break;
 		}
 		if (*cp == ';') {
-			tbl_option(tbl, ln, p);
-			if (*(p = cp + 1) == '\0')
+			tbl_option(tbl, ln, p, &pos);
+			if (p[pos] == '\0')
 				return(ROFF_IGN);
 		}
 	}
@@ -74,15 +74,15 @@ tbl_read(struct tbl_node *tbl, int ln, c
 
 	switch (tbl->part) {
 	case TBL_PART_LAYOUT:
-		tbl_layout(tbl, ln, p);
+		tbl_layout(tbl, ln, p, pos);
 		return(ROFF_IGN);
 	case TBL_PART_CDATA:
-		return(tbl_cdata(tbl, ln, p) ? ROFF_TBL : ROFF_IGN);
+		return(tbl_cdata(tbl, ln, p, pos) ? ROFF_TBL : ROFF_IGN);
 	default:
 		break;
 	}
 
-	tbl_data(tbl, ln, p);
+	tbl_data(tbl, ln, p, pos);
 	return(ROFF_TBL);
 }
 
Index: roff.c
===================================================================
RCS file: /home/cvs/mdocml/mdocml/roff.c,v
retrieving revision 1.256
retrieving revision 1.257
diff -Lroff.c -Lroff.c -u -p -r1.256 -r1.257
--- roff.c
+++ roff.c
@@ -1237,7 +1237,13 @@ roff_parseln(struct roff *r, int ln, str
 	if (r->tbl != NULL && (t == ROFF_MAX || t == ROFF_TS)) {
 		mandoc_msg(MANDOCERR_TBLMACRO, r->parse,
 		    ln, pos, buf->buf + spos);
-		return(ROFF_IGN);
+		if (t == ROFF_TS)
+			return(ROFF_IGN);
+		while (buf->buf[pos] != '\0' && buf->buf[pos] != ' ')
+			pos++;
+		while (buf->buf[pos] != '\0' && buf->buf[pos] == ' ')
+			pos++;
+		return(tbl_read(r->tbl, ln, buf->buf, pos));
 	}
 
 	/*
Index: libroff.h
===================================================================
RCS file: /home/cvs/mdocml/mdocml/libroff.h,v
retrieving revision 1.35
retrieving revision 1.36
diff -Llibroff.h -Llibroff.h -u -p -r1.35 -r1.36
--- libroff.h
+++ libroff.h
@@ -1,7 +1,7 @@
 /*	$Id$ */
 /*
  * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2014, 2015 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
@@ -69,10 +69,10 @@ void		 tbl_restart(int, int, struct tbl_
 void		 tbl_free(struct tbl_node *);
 void		 tbl_reset(struct tbl_node *);
 enum rofferr	 tbl_read(struct tbl_node *, int, const char *, int);
-void		 tbl_option(struct tbl_node *, int, const char *);
-void		 tbl_layout(struct tbl_node *, int, const char *);
-void		 tbl_data(struct tbl_node *, int, const char *);
-int		 tbl_cdata(struct tbl_node *, int, const char *);
+void		 tbl_option(struct tbl_node *, int, const char *, int *);
+void		 tbl_layout(struct tbl_node *, int, const char *, int);
+void		 tbl_data(struct tbl_node *, int, const char *, int);
+int		 tbl_cdata(struct tbl_node *, int, const char *, int);
 const struct tbl_span	*tbl_span(struct tbl_node *);
 void		 tbl_end(struct tbl_node **);
 struct eqn_node	*eqn_alloc(int, int, struct mparse *);
--
 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:[~2015-01-28 15:04 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-28 15:04 mdocml: For now, it can't be helped that mandoc tbl(7) ignores 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).