From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from localhost (fantadrom.bsd.lv [local]) by fantadrom.bsd.lv (OpenSMTPD) with ESMTPA id c45abf41 for ; Sat, 13 Apr 2019 08:07:05 -0500 (EST) Date: Sat, 13 Apr 2019 08:07:05 -0500 (EST) X-Mailinglist: mandoc-source Reply-To: source@mandoc.bsd.lv MIME-Version: 1.0 From: schwarze@mandoc.bsd.lv To: source@mandoc.bsd.lv Subject: docbook2mdoc: Improve the proplogue: * Use or for .Dd. X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Message-ID: Log Message: ----------- Improve the proplogue: * Use or for .Dd. * Clean up the way how from <bookinfo> is used for .Nd. * Treat <articleinfo> just like <bookinfo>. Modified Files: -------------- docbook2mdoc: docbook2mdoc.c node.c node.h parse.c statistics.c Revision Data ------------- Index: node.h =================================================================== RCS file: /home/cvs/mdocml/docbook2mdoc/node.h,v retrieving revision 1.21 retrieving revision 1.22 diff -Lnode.h -Lnode.h -u -p -r1.21 -r1.22 --- node.h +++ node.h @@ -113,6 +113,7 @@ enum nodeid { NODE_PREFACE, NODE_PROGRAMLISTING, NODE_PROMPT, + NODE_PUBDATE, NODE_QUOTE, NODE_REFCLASS, NODE_REFDESCRIPTOR, @@ -251,3 +252,4 @@ void pnode_unlinksub(struct pnode *); enum attrval pnode_getattr(struct pnode *, enum attrkey); const char *pnode_getattr_raw(struct pnode *, enum attrkey, const char *); struct pnode *pnode_findfirst(struct pnode *, enum nodeid); +struct pnode *pnode_takefirst(struct pnode *, enum nodeid); Index: parse.c =================================================================== RCS file: /home/cvs/mdocml/docbook2mdoc/parse.c,v retrieving revision 1.40 retrieving revision 1.41 diff -Lparse.c -Lparse.c -u -p -r1.40 -r1.41 --- parse.c +++ parse.c @@ -72,6 +72,7 @@ static const struct alias aliases[] = { { "acronym", NODE_IGNORE }, { "anchor", NODE_DELETE }, { "article", NODE_SECTION }, + { "articleinfo", NODE_BOOKINFO }, { "book", NODE_SECTION }, { "chapter", NODE_SECTION }, { "code", NODE_LITERAL }, Index: docbook2mdoc.c =================================================================== RCS file: /home/cvs/mdocml/docbook2mdoc/docbook2mdoc.c,v retrieving revision 1.115 retrieving revision 1.116 diff -Ldocbook2mdoc.c -Ldocbook2mdoc.c -u -p -r1.115 -r1.116 --- docbook2mdoc.c +++ docbook2mdoc.c @@ -318,32 +318,6 @@ pnode_printciterefentry(struct format *f } static void -pnode_printrefmeta(struct format *f, struct pnode *n) -{ - struct pnode *nc, *title, *manvol; - - title = manvol = NULL; - TAILQ_FOREACH(nc, &n->childq, child) { - if (nc->node == NODE_MANVOLNUM) - manvol = nc; - else if (nc->node == NODE_REFENTRYTITLE) - title = nc; - } - macro_close(f); - macro_open(f, "Dt"); - if (title == NULL) - macro_addarg(f, "UNKNOWN", ARG_SPACE); - else - macro_addnode(f, title, ARG_SPACE | ARG_SINGLE | ARG_UPPER); - if (manvol == NULL) - macro_addarg(f, "1", ARG_SPACE); - else - macro_addnode(f, manvol, ARG_SPACE | ARG_SINGLE); - macro_close(f); - pnode_unlink(n); -} - -static void pnode_printfuncdef(struct format *f, struct pnode *n) { struct pnode *nc; @@ -658,24 +632,73 @@ pnode_printlink(struct format *f, struct } static void -pnode_printprologue(struct format *f, struct ptree *tree) +pnode_printprologue(struct format *f, struct pnode *root) { - struct pnode *refmeta; + struct pnode *date, *refmeta, *name, *vol, *descr, *nc; + const char *sname; - refmeta = tree->root == NULL ? NULL : - pnode_findfirst(tree->root, NODE_REFMETA); + /* Collect information. */ - macro_line(f, "Dd $Mdocdate" "$"); - if (refmeta == NULL) { - macro_open(f, "Dt"); - macro_addarg(f, - pnode_getattr_raw(tree->root, ATTRKEY_ID, "UNKNOWN"), - ARG_SPACE | ARG_SINGLE | ARG_UPPER); - macro_addarg(f, "1", ARG_SPACE); - macro_close(f); + if ((date = pnode_takefirst(root, NODE_PUBDATE)) == NULL) + date = pnode_takefirst(root, NODE_DATE); + + name = vol = NULL; + if ((refmeta = pnode_takefirst(root, NODE_REFMETA)) != NULL) { + TAILQ_FOREACH(nc, &refmeta->childq, child) { + switch (nc->node) { + case NODE_REFENTRYTITLE: + name = nc; + break; + case NODE_MANVOLNUM: + vol = nc; + break; + default: + break; + } + } + } + + if (pnode_findfirst(root, NODE_REFNAMEDIV) == NULL && + ((nc = pnode_findfirst(root, NODE_BOOKINFO)) != NULL || + (nc = pnode_findfirst(root, NODE_REFENTRYINFO)) != NULL)) + descr = pnode_takefirst(nc, NODE_TITLE); + else + descr = NULL; + + /* Print prologue. */ + + if (date == NULL) + macro_line(f, "Dd $Mdocdate" "$"); + else + macro_nodeline(f, "Dd", date, 0); + + macro_open(f, "Dt"); + if (name == NULL) { + sname = pnode_getattr_raw(root, ATTRKEY_ID, "UNKNOWN"); + macro_addarg(f, sname, ARG_SPACE | ARG_SINGLE | ARG_UPPER); } else - pnode_printrefmeta(f, refmeta); + macro_addnode(f, name, ARG_SPACE | ARG_SINGLE | ARG_UPPER); + if (vol == NULL) + macro_addarg(f, "1", ARG_SPACE); + else + macro_addnode(f, vol, ARG_SPACE | ARG_SINGLE); + macro_line(f, "Os"); + + if (descr != NULL) { + macro_line(f, "Sh NAME"); + if (name == NULL) + macro_argline(f, "Nm", sname); + else + macro_nodeline(f, "Nm", name, ARG_SINGLE); + macro_nodeline(f, "Nd", descr, 0); + } + + /* Clean up. */ + + pnode_unlink(date); + pnode_unlink(refmeta); + pnode_unlink(descr); } /* @@ -876,9 +899,6 @@ pnode_print(struct format *f, struct pno case NODE_BLOCKQUOTE: macro_line(f, "Bd -ragged -offset indent"); break; - case NODE_BOOKINFO: - macro_line(f, "Sh NAME"); - break; case NODE_CITEREFENTRY: pnode_printciterefentry(f, n); break; @@ -1046,11 +1066,6 @@ pnode_print(struct format *f, struct pno pnode_printtgroup(f, n); break; case NODE_TITLE: - if (n->parent != NULL && - n->parent->node == NODE_BOOKINFO) { - macro_open(f, "Nd"); - break; - } pnode_printpara(f, n); macro_nodeline(f, "Sy", n, 0); pnode_unlinksub(n); @@ -1148,11 +1163,6 @@ pnode_print(struct format *f, struct pno case NODE_SYNOPSIS: macro_line(f, "Ed"); break; - case NODE_TITLE: - if (n->parent != NULL && - n->parent->node == NODE_BOOKINFO) - macro_line(f, "Sh AUTHORS"); - break; default: break; } @@ -1166,7 +1176,7 @@ ptree_print_mdoc(struct ptree *tree) formatter.level = 0; formatter.linestate = LINE_NEW; - pnode_printprologue(&formatter, tree); + pnode_printprologue(&formatter, tree->root); pnode_print(&formatter, tree->root); if (formatter.linestate != LINE_NEW) putchar('\n'); Index: node.c =================================================================== RCS file: /home/cvs/mdocml/docbook2mdoc/node.c,v retrieving revision 1.11 retrieving revision 1.12 diff -Lnode.c -Lnode.c -u -p -r1.11 -r1.12 --- node.c +++ node.c @@ -105,6 +105,7 @@ static const struct nodeprop properties[ { "preface", CLASS_BLOCK }, { "programlisting", CLASS_BLOCK }, { "prompt", CLASS_TRANS }, + { "pubdate", CLASS_TRANS }, { "quote", CLASS_ENCL }, { "refclass", CLASS_TRANS }, { "refdescriptor", CLASS_TRANS }, @@ -340,10 +341,25 @@ pnode_findfirst(struct pnode *n, enum no { struct pnode *nc, *res; + if (n == NULL) + return NULL; if (n->node == node) return n; TAILQ_FOREACH(nc, &n->childq, child) if ((res = pnode_findfirst(nc, node)) != NULL) return res; return NULL; +} + +/* + * Like pnode_findfirst(), but also take the node out of the tree. + */ +struct pnode * +pnode_takefirst(struct pnode *n, enum nodeid node) +{ + struct pnode *nc; + + if ((nc = pnode_findfirst(n, node)) != NULL && nc->parent != NULL) + TAILQ_REMOVE(&nc->parent->childq, nc, child); + return nc; } Index: statistics.c =================================================================== RCS file: /home/cvs/mdocml/docbook2mdoc/statistics.c,v retrieving revision 1.20 retrieving revision 1.21 diff -Lstatistics.c -Lstatistics.c -u -p -r1.20 -r1.21 --- statistics.c +++ statistics.c @@ -352,6 +352,8 @@ main(int argc, char *argv[]) table_add("acronym", "TEXT"); table_add("appendix", NULL); table_add("article", NULL); + table_add("articleinfo", "pubdate"); + table_add("articleinfo", "title"); table_add("author", "contrib"); table_add("author", "email"); table_add("author", "firstname"); @@ -359,10 +361,13 @@ main(int argc, char *argv[]) table_add("author", "surname"); table_add("blockquote", NULL); table_add("book", NULL); + table_add("bookinfo", "pubdate"); + table_add("bookinfo", "title"); table_add("chapter", NULL); table_add("code", "TEXT"); table_add("computeroutput", "TEXT"); table_add("constant", "TEXT"); + table_add("date", "TEXT"); table_add("emphasis", "TEXT"); table_add("entry", NULL); table_add("errorname", "TEXT"); @@ -408,6 +413,7 @@ main(int argc, char *argv[]) table_add("parameter", "TEXT"); table_add("primary", NULL); table_add("programlisting", NULL); + table_add("pubdate", "TEXT"); table_add("refentry", "refmeta"); table_add("refentry", "refnamediv"); table_add("refentry", "refsect1"); -- To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv