source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* docbook2mdoc: Initial support for tables.
@ 2014-04-02  7:48 kristaps
  0 siblings, 0 replies; only message in thread
From: kristaps @ 2014-04-02  7:48 UTC (permalink / raw)
  To: source

Log Message:
-----------
Initial support for tables.
Because docbook table entries are blocks (not columns), write them out as
lists (rows) of lists (elements).

Modified Files:
--------------
    docbook2mdoc:
        docbook2mdoc.c
        extern.h
        rules.c

Revision Data
-------------
Index: extern.h
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/docbook2mdoc/extern.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -Lextern.h -Lextern.h -u -p -r1.11 -r1.12
--- extern.h
+++ extern.h
@@ -15,6 +15,7 @@ enum	nodeid {
 	NODE_COMMAND,
 	NODE_DATE,
 	NODE_EMPHASIS,
+	NODE_ENTRY,
 	NODE_ENVAR,
 	NODE_FILENAME,
 	NODE_FUNCDEF,
@@ -49,12 +50,18 @@ enum	nodeid {
 	NODE_REFSECT2,
 	NODE_REFSYNOPSISDIV,
 	NODE_REPLACEABLE,
+	NODE_ROW,
 	NODE_SBR,
 	NODE_SCREEN,
 	NODE_STRUCTNAME,
 	NODE_SYNOPSIS,
+	NODE_TABLE,
+	NODE_TBODY,
 	NODE_TERM, 
 	NODE_TEXT, 
+	NODE_TFOOT,
+	NODE_TGROUP,
+	NODE_THEAD,
 	NODE_TITLE,
 	NODE_ULINK,
 	NODE_USERINPUT,
Index: docbook2mdoc.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/docbook2mdoc/docbook2mdoc.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -Ldocbook2mdoc.c -Ldocbook2mdoc.c -u -p -r1.24 -r1.25
--- docbook2mdoc.c
+++ docbook2mdoc.c
@@ -95,6 +95,7 @@ static	const struct node nodes[NODE__MAX
 	{ "command", 0 }, 
 	{ "date", 0 }, 
 	{ "emphasis", 0 },
+	{ "entry", 0 },
 	{ "envar", 0 },
 	{ "filename", 0 },
 	{ "funcdef", 0 },
@@ -129,12 +130,18 @@ static	const struct node nodes[NODE__MAX
 	{ "refsect2", NODE_IGNTEXT }, 
 	{ "refsynopsisdiv", NODE_IGNTEXT }, 
 	{ "replaceable", 0 }, 
+	{ "row", NODE_IGNTEXT }, 
 	{ "sbr", NODE_IGNTEXT }, 
 	{ "screen", NODE_IGNTEXT }, 
 	{ "structname", 0 }, 
 	{ "synopsis", 0 }, 
+	{ "table", NODE_IGNTEXT }, 
+	{ "tbody", NODE_IGNTEXT }, 
 	{ "term", 0 }, 
 	{ NULL, 0 }, 
+	{ "tfoot", NODE_IGNTEXT }, 
+	{ "tgroup", NODE_IGNTEXT }, 
+	{ "thead", NODE_IGNTEXT }, 
 	{ "title", 0 }, 
 	{ "ulink", 0 }, 
 	{ "userinput", 0 }, 
@@ -478,6 +485,25 @@ bufappend_r(struct parse *p, struct pnod
 		bufappend_r(p, pp);
 }
 
+/* 
+ * Recursively search and return the first instance of "node".
+ */
+static struct pnode *
+pnode_findfirst(struct pnode *pn, enum nodeid node)
+{
+	struct pnode	*pp, *res;
+
+	res = NULL;
+	TAILQ_FOREACH(pp, &pn->childq, child) {
+		res = pp->node == node ? pp :
+			pnode_findfirst(pp, node);
+		if (NULL != res)
+			break;
+	}
+
+	return(res);
+}
+
 #define MACROLINE_NORM	0
 #define MACROLINE_UPPER	1
 /*
@@ -845,25 +871,6 @@ pnode_printgroup(struct parse *p, struct
 	pnode_printmclose(p, sv);
 }
 
-/* 
- * Recursively search and return the first instance of "node".
- */
-static struct pnode *
-pnode_findfirst(struct pnode *pn, enum nodeid node)
-{
-	struct pnode	*pp, *res;
-
-	res = NULL;
-	TAILQ_FOREACH(pp, &pn->childq, child) {
-		res = pp->node == node ? pp :
-			pnode_findfirst(pp, node);
-		if (NULL != res)
-			break;
-	}
-
-	return(res);
-}
-
 static void
 pnode_printprologue(struct parse *p, struct pnode *pn)
 {
@@ -904,7 +911,24 @@ pnode_printvarlistentry(struct parse *p,
 }
 
 static void
-pnode_printitemizedlist(struct parse *p, struct pnode *pn)
+pnode_printrow(struct parse *p, struct pnode *pn)
+{
+	struct pnode	*pp;
+
+	puts(".Bl -dash -compact");
+
+	TAILQ_FOREACH(pp, &pn->childq, child) {
+		assert(p->newln);
+		puts(".It");
+		pnode_print(p, pp);
+		pnode_printmclose(p, 1);
+	}
+	assert(p->newln);
+	puts(".El");
+}
+
+static void
+pnode_printtable(struct parse *p, struct pnode *pn)
 {
 	struct pnode	*pp;
 
@@ -915,8 +939,31 @@ pnode_printitemizedlist(struct parse *p,
 			pnode_print(p, pp);
 			pnode_unlink(pp);
 		}
+	assert(p->newln);
+	puts(".Bl -ohang");
+	while (NULL != (pp = pnode_findfirst(pn, NODE_ROW))) {
+		puts(".It Table Row");
+		pnode_printrow(p, pp);
+		pnode_printmclose(p, 1);
+		pnode_unlink(pp);
+	}
+	assert(p->newln);
+	puts(".El");
+}
+
+static void
+pnode_printlist(struct parse *p, struct pnode *pn)
+{
+	struct pnode	*pp;
 
 	assert(p->newln);
+	TAILQ_FOREACH(pp, &pn->childq, child)
+		if (NODE_TITLE == pp->node) {
+			puts(".Pp");
+			pnode_print(p, pp);
+			pnode_unlink(pp);
+		}
+	assert(p->newln);
 
 	if (NODE_ORDEREDLIST == pn->node)
 		puts(".Bl -enum");
@@ -1023,10 +1070,9 @@ pnode_print(struct parse *p, struct pnod
 		fputs("Fd", stdout);
 		break;
 	case (NODE_ITEMIZEDLIST):
-		/* FALLTHROUGH */
-	case (NODE_ORDEREDLIST):
 		assert(p->newln);
-		pnode_printitemizedlist(p, pn);
+		pnode_printlist(p, pn);
+		pnode_unlinksub(pn);
 		break;
 	case (NODE_GROUP):
 		pnode_printgroup(p, pn);
@@ -1040,6 +1086,11 @@ pnode_print(struct parse *p, struct pnod
 		pnode_printmopen(p);
 		fputs("Fl", stdout);
 		break;
+	case (NODE_ORDEREDLIST):
+		assert(p->newln);
+		pnode_printlist(p, pn);
+		pnode_unlinksub(pn);
+		break;
 	case (NODE_PARA):
 		assert(p->newln);
 		if (NULL != pn->parent && 
@@ -1107,6 +1158,11 @@ pnode_print(struct parse *p, struct pnod
 	case (NODE_STRUCTNAME):
 		pnode_printmopen(p);
 		fputs("Vt", stdout);
+		break;
+	case (NODE_TABLE):
+		assert(p->newln);
+		pnode_printtable(p, pn);
+		pnode_unlinksub(pn);
 		break;
 	case (NODE_TEXT):
 		if (0 == p->newln)
Index: rules.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/docbook2mdoc/rules.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -Lrules.c -Lrules.c -u -p -r1.11 -r1.12
--- rules.c
+++ rules.c
@@ -69,7 +69,9 @@ isparent(enum nodeid node, enum nodeid p
 	case (NODE_ACRONYM):
 		switch (parent) {
 		case (NODE_EMPHASIS):
+		case (NODE_ENTRY):
 		case (NODE_FUNCSYNOPSISINFO):
+		case (NODE_PARA):
 		case (NODE_PROGRAMLISTING):
 		case (NODE_REFDESCRIPTOR):
 		case (NODE_REFENTRYTITLE):
@@ -97,6 +99,7 @@ isparent(enum nodeid node, enum nodeid p
 	case (NODE_CITEREFENTRY):
 		switch (parent) {
 		case (NODE_EMPHASIS):
+		case (NODE_ENTRY):
 		case (NODE_FUNCSYNOPSISINFO):
 		case (NODE_LINK):
 		case (NODE_PARA):
@@ -117,6 +120,7 @@ isparent(enum nodeid node, enum nodeid p
 		return(0);
 	case (NODE_CMDSYNOPSIS):
 		switch (parent) {
+		case (NODE_ENTRY):
 		case (NODE_ITEMIZEDLIST):
 		case (NODE_LISTITEM):
 		case (NODE_ORDEREDLIST):
@@ -133,6 +137,7 @@ isparent(enum nodeid node, enum nodeid p
 	case (NODE_CODE):
 		switch (parent) {
 		case (NODE_EMPHASIS):
+		case (NODE_ENTRY):
 		case (NODE_FUNCSYNOPSISINFO):
 		case (NODE_LINK):
 		case (NODE_PARA):
@@ -156,6 +161,7 @@ isparent(enum nodeid node, enum nodeid p
 		switch (parent) {
 		case (NODE_CMDSYNOPSIS):
 		case (NODE_EMPHASIS):
+		case (NODE_ENTRY):
 		case (NODE_FUNCSYNOPSISINFO):
 		case (NODE_LINK):
 		case (NODE_PARA):
@@ -178,6 +184,7 @@ isparent(enum nodeid node, enum nodeid p
 	case (NODE_DATE):
 		switch (parent) {
 		case (NODE_EMPHASIS):
+		case (NODE_ENTRY):
 		case (NODE_FUNCSYNOPSISINFO):
 		case (NODE_LINK):
 		case (NODE_PARA):
@@ -199,6 +206,7 @@ isparent(enum nodeid node, enum nodeid p
 	case (NODE_EMPHASIS):
 		switch (parent) {
 		case (NODE_EMPHASIS):
+		case (NODE_ENTRY):
 		case (NODE_FUNCSYNOPSISINFO):
 		case (NODE_LINK):
 		case (NODE_PARA):
@@ -217,9 +225,12 @@ isparent(enum nodeid node, enum nodeid p
 			break;
 		}
 		return(0);
+	case (NODE_ENTRY):
+		return(NODE_ROW == parent);
 	case (NODE_ENVAR):
 		switch (parent) {
 		case (NODE_EMPHASIS):
+		case (NODE_ENTRY):
 		case (NODE_FUNCSYNOPSISINFO):
 		case (NODE_LINK):
 		case (NODE_PARA):
@@ -242,6 +253,7 @@ isparent(enum nodeid node, enum nodeid p
 	case (NODE_FILENAME):
 		switch (parent) {
 		case (NODE_EMPHASIS):
+		case (NODE_ENTRY):
 		case (NODE_FUNCSYNOPSISINFO):
 		case (NODE_LINK):
 		case (NODE_PARA):
@@ -267,6 +279,7 @@ isparent(enum nodeid node, enum nodeid p
 		return(NODE_FUNCSYNOPSIS == parent);
 	case (NODE_FUNCSYNOPSIS):
 		switch (parent) {
+		case (NODE_ENTRY):
 		case (NODE_ITEMIZEDLIST):
 		case (NODE_LISTITEM):
 		case (NODE_ORDEREDLIST):
@@ -286,6 +299,7 @@ isparent(enum nodeid node, enum nodeid p
 		switch (parent) {
 		case (NODE_CODE):
 		case (NODE_EMPHASIS):
+		case (NODE_ENTRY):
 		case (NODE_FUNCDEF):
 		case (NODE_FUNCSYNOPSISINFO):
 		case (NODE_LINK):
@@ -307,6 +321,7 @@ isparent(enum nodeid node, enum nodeid p
 		return(0);
 	case (NODE_ITEMIZEDLIST):
 		switch (parent) {
+		case (NODE_ENTRY):
 		case (NODE_ITEMIZEDLIST):
 		case (NODE_LISTITEM):
 		case (NODE_ORDEREDLIST):
@@ -337,6 +352,7 @@ isparent(enum nodeid node, enum nodeid p
 		case (NODE_CODE):
 		case (NODE_COMMAND):
 		case (NODE_EMPHASIS):
+		case (NODE_ENTRY):
 		case (NODE_ENVAR):	
 		case (NODE_FILENAME):
 		case (NODE_FUNCDEF):
@@ -379,6 +395,7 @@ isparent(enum nodeid node, enum nodeid p
 	case (NODE_LITERAL):
 		switch (parent) {
 		case (NODE_EMPHASIS):
+		case (NODE_ENTRY):
 		case (NODE_FUNCSYNOPSISINFO):
 		case (NODE_LINK):
 		case (NODE_PARA):
@@ -411,6 +428,7 @@ isparent(enum nodeid node, enum nodeid p
 		switch (parent) {
 		case (NODE_ARG):
 		case (NODE_EMPHASIS):
+		case (NODE_ENTRY):
 		case (NODE_FUNCSYNOPSISINFO):
 		case (NODE_GROUP):
 		case (NODE_LINK):
@@ -433,6 +451,7 @@ isparent(enum nodeid node, enum nodeid p
 		return(0);
 	case (NODE_ORDEREDLIST):
 		switch (parent) {
+		case (NODE_ENTRY):
 		case (NODE_ITEMIZEDLIST):
 		case (NODE_LISTITEM):
 		case (NODE_ORDEREDLIST):
@@ -448,6 +467,7 @@ isparent(enum nodeid node, enum nodeid p
 		return(0);
 	case (NODE_PARA):
 		switch (parent) {
+		case (NODE_ENTRY):
 		case (NODE_ITEMIZEDLIST):
 		case (NODE_LISTITEM):
 		case (NODE_ORDEREDLIST):
@@ -465,6 +485,7 @@ isparent(enum nodeid node, enum nodeid p
 	case (NODE_PARAMETER):
 		switch (parent) {
 		case (NODE_CODE):
+		case (NODE_ENTRY):
 		case (NODE_FUNCSYNOPSISINFO):
 		case (NODE_LINK):
 		case (NODE_PARA):
@@ -487,6 +508,7 @@ isparent(enum nodeid node, enum nodeid p
 		return(0);
 	case (NODE_PROGRAMLISTING):
 		switch (parent) {
+		case (NODE_ENTRY):
 		case (NODE_ITEMIZEDLIST):
 		case (NODE_LISTITEM):
 		case (NODE_ORDEREDLIST):
@@ -503,6 +525,7 @@ isparent(enum nodeid node, enum nodeid p
 	case (NODE_PROMPT):
 		switch (parent) {
 		case (NODE_EMPHASIS):
+		case (NODE_ENTRY):
 		case (NODE_FUNCSYNOPSISINFO):
 		case (NODE_LINK):
 		case (NODE_PARA):
@@ -568,6 +591,7 @@ isparent(enum nodeid node, enum nodeid p
 		case (NODE_CODE):
 		case (NODE_COMMAND):
 		case (NODE_EMPHASIS):
+		case (NODE_ENTRY):
 		case (NODE_ENVAR):	
 		case (NODE_FILENAME):
 		case (NODE_FUNCDEF):
@@ -599,6 +623,16 @@ isparent(enum nodeid node, enum nodeid p
 			return(1);
 		}
 		return(0);
+	case (NODE_ROW):
+		switch (parent) {
+		case (NODE_TBODY):
+		case (NODE_TFOOT):
+		case (NODE_THEAD):
+			return(1);
+		default:
+			break;
+		}
+		return(0);
 	case (NODE_SBR):
 		switch (parent) {
 		case (NODE_ARG):
@@ -611,6 +645,7 @@ isparent(enum nodeid node, enum nodeid p
 		return(0);
 	case (NODE_SCREEN):
 		switch (parent) {
+		case (NODE_ENTRY):
 		case (NODE_ITEMIZEDLIST):
 		case (NODE_LISTITEM):
 		case (NODE_ORDEREDLIST):
@@ -646,6 +681,7 @@ isparent(enum nodeid node, enum nodeid p
 		return(0);
 	case (NODE_SYNOPSIS):
 		switch (parent) {
+		case (NODE_ENTRY):
 		case (NODE_ITEMIZEDLIST):
 		case (NODE_LISTITEM):
 		case (NODE_ORDEREDLIST):
@@ -657,6 +693,29 @@ isparent(enum nodeid node, enum nodeid p
 			break;
 		}
 		return(0);
+	case (NODE_TABLE):
+		switch (parent) {
+		case (NODE_ENTRY):
+		case (NODE_ITEMIZEDLIST):
+		case (NODE_LISTITEM):
+		case (NODE_ORDEREDLIST):
+		case (NODE_PARA):
+		case (NODE_REFSECT1):
+		case (NODE_REFSYNOPSISDIV):
+		case (NODE_VARIABLELIST):
+			return(1);
+		default:
+			break;
+		}
+		return(0);
+	case (NODE_TBODY):
+		return(NODE_TGROUP == parent);
+	case (NODE_TFOOT):
+		return(NODE_TGROUP == parent);
+	case (NODE_TGROUP):
+		return(NODE_TABLE == parent);
+	case (NODE_THEAD):
+		return(NODE_TGROUP == parent);
 	case (NODE_TITLE):
 		switch (parent) {
 		case (NODE_ITEMIZEDLIST):
@@ -665,6 +724,7 @@ isparent(enum nodeid node, enum nodeid p
 		case (NODE_REFSECT1):
 		case (NODE_REFSECT2):
 		case (NODE_REFSYNOPSISDIV):
+		case (NODE_TABLE):
 		case (NODE_VARIABLELIST):
 			return(1);
 		default:
@@ -678,6 +738,7 @@ isparent(enum nodeid node, enum nodeid p
 	case (NODE_USERINPUT):
 		switch (parent) {
 		case (NODE_EMPHASIS):
+		case (NODE_ENTRY):
 		case (NODE_FUNCSYNOPSISINFO):
 		case (NODE_LINK):
 		case (NODE_PARA):
@@ -699,6 +760,7 @@ isparent(enum nodeid node, enum nodeid p
 		return(0);
 	case (NODE_VARIABLELIST):
 		switch (parent) {
+		case (NODE_ENTRY):
 		case (NODE_ITEMIZEDLIST):
 		case (NODE_ORDEREDLIST):
 		case (NODE_PARA):
--
 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:[~2014-04-02  7:48 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-04-02  7:48 docbook2mdoc: Initial support for tables 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).