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