=================================================================== RCS file: /cvs/docbook2mdoc/docbook2mdoc.c,v retrieving revision 1.49 retrieving revision 1.50 diff -u -p -r1.49 -r1.50 --- docbook2mdoc/docbook2mdoc.c 2019/03/22 15:54:42 1.49 +++ docbook2mdoc/docbook2mdoc.c 2019/03/22 16:10:09 1.50 @@ -1,6 +1,7 @@ -/* $Id: docbook2mdoc.c,v 1.49 2019/03/22 15:54:42 schwarze Exp $ */ +/* $Id: docbook2mdoc.c,v 1.50 2019/03/22 16:10:09 schwarze Exp $ */ /* * Copyright (c) 2014 Kristaps Dzonsons + * Copyright (c) 2019 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -93,11 +94,19 @@ static const char *attrvals[ATTRVAL__MAX] = { static const struct node nodes[NODE__MAX] = { { NULL, 0 }, { "acronym", 0 }, + { "affiliation", NODE_IGNTEXT }, { "anchor", NODE_IGNTEXT }, { "application", 0 }, { "arg", 0 }, + { "author", NODE_IGNTEXT }, + { "authorgroup", NODE_IGNTEXT }, + { "blockquote", NODE_IGNTEXT }, + { "book", NODE_IGNTEXT }, + { "bookinfo", NODE_IGNTEXT }, { "caution", NODE_IGNTEXT }, + { "chapter", NODE_IGNTEXT }, { "citerefentry", NODE_IGNTEXT }, + { "citetitle", 0 }, { "cmdsynopsis", NODE_IGNTEXT }, { "code", 0 }, { "colspec", NODE_IGNTEXT }, @@ -105,27 +114,38 @@ static const struct node nodes[NODE__MAX] = { { "constant", 0 }, { "copyright", NODE_IGNTEXT }, { "date", 0 }, + { "editor", NODE_IGNTEXT }, { "emphasis", 0 }, { "entry", 0 }, { "envar", 0 }, { "fieldsynopsis", NODE_IGNTEXT }, { "filename", 0 }, + { "firstname", 0 }, + { "firstterm", 0 }, + { "footnote", 0 }, { "funcdef", 0 }, { "funcprototype", NODE_IGNTEXT }, { "funcsynopsis", NODE_IGNTEXT }, { "funcsynopsisinfo", 0 }, { "function", 0 }, + { "glossterm", 0 }, { "group", NODE_IGNTEXT }, { "holder", NODE_IGNTEXT }, + { "index", NODE_IGNTEXT }, + { "indexterm", NODE_IGNTEXT }, { "info", NODE_IGNTEXT }, { "informalequation", NODE_IGNTEXT }, { "informaltable", NODE_IGNTEXT }, { "inlineequation", NODE_IGNTEXT }, { "itemizedlist", NODE_IGNTEXT }, + { "keysym", 0 }, + { "legalnotice", NODE_IGNTEXT }, { "link", 0 }, { "listitem", NODE_IGNTEXT }, { "literal", 0 }, + { "literallayout", 0 }, { "manvolnum", 0 }, + { "member", 0 }, { "mml:math", NODE_IGNTEXT }, { "mml:mfenced", 0 }, { "mml:mfrac", 0 }, @@ -139,9 +159,15 @@ static const struct node nodes[NODE__MAX] = { { "note", NODE_IGNTEXT }, { "option", 0 }, { "orderedlist", NODE_IGNTEXT }, + { "orgname", 0 }, + { "othername", 0 }, { "para", 0 }, { "paramdef", 0 }, { "parameter", 0 }, + { "part", NODE_IGNTEXT }, + { "phrase", 0 }, + { "preface", NODE_IGNTEXT }, + { "primary", 0 }, { "programlisting", 0 }, { "prompt", 0 }, { "quote", 0 }, @@ -161,12 +187,21 @@ static const struct node nodes[NODE__MAX] = { { "refsect3", NODE_IGNTEXT }, { "refsection", NODE_IGNTEXT }, { "refsynopsisdiv", NODE_IGNTEXT }, + { "releaseinfo", 0 }, { "replaceable", 0 }, { "row", NODE_IGNTEXT }, { "sbr", NODE_IGNTEXT }, { "screen", NODE_IGNTEXT }, + { "secondary", 0 }, + { "sect1", NODE_IGNTEXT }, + { "sect2", NODE_IGNTEXT }, + { "section", NODE_IGNTEXT }, { "sgmltag", 0 }, + { "simplelist", NODE_IGNTEXT }, + { "spanspec", NODE_IGNTEXT }, { "structname", 0 }, + { "subtitle", 0 }, + { "surname", 0 }, { "synopsis", 0 }, { "table", NODE_IGNTEXT }, { "tbody", NODE_IGNTEXT }, @@ -327,8 +362,10 @@ xml_elem_start(void *arg, const XML_Char *name, const XML_GetCurrentColumnNumber(ps->xml)); ps->stop = 1; return; - } else if (NODE_ROOT == ps->node && NODE_REFENTRY != node) + } else if (NODE_ROOT == ps->node && NODE_REFENTRY != node && + NODE_PART != node && NODE_BOOK != node) { return; + } if (NODE_INLINEEQUATION == node) ps->flags |= PARSE_EQN; @@ -681,9 +718,15 @@ pnode_printrefsect(struct parse *p, struct pnode *pn) switch (pn->node) { case (NODE_REFSECT1): + /* FALLTHROUGH */ + case (NODE_SECT1): + /* FALLTHROUGH */ + case (NODE_CHAPTER): fputs(".Sh", stdout); break; case (NODE_REFSECT2): + /* FALLTHROUGH */ + case (NODE_SECT2): fputs(".Ss", stdout); break; case (NODE_REFSECT3): @@ -712,12 +755,12 @@ pnode_printrefsect(struct parse *p, struct pnode *pn) if (NULL != pp) { pnode_printmacrolinetext(p, pp, - NODE_REFSECT1 == pn->node ? + NODE_REFSECT1 == pn->node || NODE_SECT1 == pn->node ? MACROLINE_UPPER : 0); pnode_printmclose(p, 1); pnode_unlink(pp); } else { - puts(NODE_REFSECT1 == pn->node ? + puts(NODE_REFSECT1 == pn->node || NODE_SECT1 == pn->node ? "UNKNOWN" : "unknown"); p->newln = 1; } @@ -1191,6 +1234,7 @@ pnode_print(struct parse *p, struct pnode *pn) sv = p->newln; + /* XXX fprintf(stderr, "NODE %s\n", nodes[pn->node].name); */ switch (pn->node) { case (NODE_APPLICATION): pnode_printmopen(p); @@ -1203,6 +1247,18 @@ pnode_print(struct parse *p, struct pnode *pn) pnode_printarg(p, pn); pnode_unlinksub(pn); break; + case (NODE_AUTHOR): + pnode_printmopen(p); + fputs("An", stdout); + break; + case (NODE_AUTHORGROUP): + assert(p->newln); + puts(".An -split"); + break; + case (NODE_BOOKINFO): + assert(p->newln); + puts(".Sh NAME"); + break; case (NODE_CITEREFENTRY): pnode_printmopen(p); fputs("Xr", stdout); @@ -1221,6 +1277,11 @@ pnode_print(struct parse *p, struct pnode *pn) pnode_printmopen(p); fputs("Dv", stdout); break; + case (NODE_EDITOR): + puts("editor: "); + pnode_printmopen(p); + fputs("An", stdout); + break; case (NODE_EMPHASIS): pnode_printmopen(p); fputs("Em", stdout); @@ -1265,6 +1326,10 @@ pnode_print(struct parse *p, struct pnode *pn) pnode_printgroup(p, pn); pnode_unlinksub(pn); break; + case (NODE_LEGALNOTICE): + assert(p->newln); + puts(".Sh LEGAL NOTICE"); + break; case (NODE_LITERAL): pnode_printmopen(p); fputs("Li", stdout); @@ -1315,6 +1380,8 @@ pnode_print(struct parse *p, struct pnode *pn) pnode_printmopen(p); fputs("Qo", stdout); break; + case (NODE_LITERALLAYOUT): + /* FALLTHROUGH */ case (NODE_PROGRAMLISTING): /* FALLTHROUGH */ case (NODE_SCREEN): @@ -1358,6 +1425,12 @@ pnode_print(struct parse *p, struct pnode *pn) /* FALLTHROUGH */ case (NODE_REFSECTION): /* FALLTHROUGH */ + case (NODE_CHAPTER): + /* FALLTHROUGH */ + case (NODE_SECT1): + /* FALLTHROUGH */ + case (NODE_SECT2): + /* FALLTHROUGH */ case (NODE_NOTE): /* FALLTHROUGH */ case (NODE_TIP): @@ -1438,6 +1511,12 @@ pnode_print(struct parse *p, struct pnode *pn) } p->newln = 0; break; + case (NODE_TITLE): + if (pn->parent->node == NODE_BOOKINFO) { + pnode_printmopen(p); + fputs("Nd", stdout); + } + break; case (NODE_TYPE): pnode_printmopen(p); fputs("Vt", stdout); @@ -1487,10 +1566,12 @@ pnode_print(struct parse *p, struct pnode *pn) break; case (NODE_APPLICATION): case (NODE_ARG): + case (NODE_AUTHOR): case (NODE_CITEREFENTRY): case (NODE_CODE): case (NODE_COMMAND): case (NODE_CONSTANT): + case (NODE_EDITOR): case (NODE_EMPHASIS): case (NODE_ENVAR): case (NODE_FILENAME): @@ -1529,12 +1610,20 @@ pnode_print(struct parse *p, struct pnode *pn) fputs(" ,", stdout); pnode_printmclose(p, sv); break; + case (NODE_LITERALLAYOUT): + /* FALLTHROUGH */ case (NODE_PROGRAMLISTING): /* FALLTHROUGH */ case (NODE_SCREEN): assert(p->newln); puts(".Ed"); p->newln = 1; + break; + case (NODE_TITLE): + if (pn->parent->node == NODE_BOOKINFO) { + pnode_printmclose(p, 1); + puts(".Sh AUTHORS"); + } break; default: break;