=================================================================== RCS file: /cvs/docbook2mdoc/docbook2mdoc.c,v retrieving revision 1.121 retrieving revision 1.125 diff -u -p -r1.121 -r1.125 --- docbook2mdoc/docbook2mdoc.c 2019/04/14 18:07:35 1.121 +++ docbook2mdoc/docbook2mdoc.c 2019/04/14 21:11:04 1.125 @@ -1,4 +1,4 @@ -/* $Id: docbook2mdoc.c,v 1.121 2019/04/14 18:07:35 schwarze Exp $ */ +/* $Id: docbook2mdoc.c,v 1.125 2019/04/14 21:11:04 schwarze Exp $ */ /* * Copyright (c) 2014 Kristaps Dzonsons * Copyright (c) 2019 Ingo Schwarze @@ -140,6 +140,7 @@ pnode_printpara(struct format *f, struct pnode *n) switch (np->node) { case NODE_ENTRY: + case NODE_FOOTNOTE: case NODE_GLOSSTERM: case NODE_LISTITEM: case NODE_TERM: @@ -1083,7 +1084,9 @@ pnode_print(struct format *f, struct pnode *n) case NODE_EMPHASIS: case NODE_FIRSTTERM: case NODE_GLOSSTERM: - macro_open(f, "Em"); + if ((nc = TAILQ_FIRST(&n->childq)) != NULL && + pnode_class(nc->node) < CLASS_LINE) + macro_open(f, "Em"); break; case NODE_ENVAR: macro_open(f, "Ev"); @@ -1094,6 +1097,9 @@ pnode_print(struct format *f, struct pnode *n) case NODE_FILENAME: macro_open(f, "Pa"); break; + case NODE_FOOTNOTE: + macro_line(f, "Bo"); + break; case NODE_FUNCTION: macro_open(f, "Fn"); break; @@ -1122,8 +1128,10 @@ pnode_print(struct format *f, struct pnode *n) pnode_printlink(f, n); break; case NODE_LITERAL: - if (was_impl) - macro_open(f, "So"); + if (n->parent != NULL && n->parent->node == NODE_QUOTE) + macro_open(f, "Li"); + else if (was_impl) + macro_open(f, "So Li"); else { macro_open(f, "Ql"); f->flags |= FMT_IMPL; @@ -1154,7 +1162,9 @@ pnode_print(struct format *f, struct pnode *n) pnode_printmath(f, n); break; case NODE_OPTION: - macro_open(f, "Fl"); + if ((nc = TAILQ_FIRST(&n->childq)) != NULL && + pnode_class(nc->node) < CLASS_LINE) + macro_open(f, "Fl"); break; case NODE_ORDEREDLIST: pnode_printlist(f, n); @@ -1218,6 +1228,19 @@ pnode_print(struct format *f, struct pnode *n) case NODE_SBR: macro_line(f, "br"); break; + case NODE_SUBSCRIPT: + if (f->linestate == LINE_MACRO) + macro_addarg(f, "_", 0); + else + print_text(f, "_", 0); + if ((nc = TAILQ_FIRST(&n->childq)) != NULL) + nc->spc = 0; + break; + case NODE_SUPERSCRIPT: + fputs("\\(ha", stdout); + if ((nc = TAILQ_FIRST(&n->childq)) != NULL) + nc->spc = 0; + break; case NODE_TEXT: case NODE_ESCAPE: pnode_printtext(f, n); @@ -1260,6 +1283,9 @@ pnode_print(struct format *f, struct pnode *n) case NODE_TEXT: /* Accept more arguments to the previous macro. */ return; + case NODE_FOOTNOTE: + macro_line(f, "Bc"); + break; case NODE_INFORMALEQUATION: macro_line(f, "EN"); macro_line(f, "Ed"); @@ -1268,7 +1294,9 @@ pnode_print(struct format *f, struct pnode *n) macro_line(f, "EN"); break; case NODE_LITERAL: - if (was_impl) { + if (n->parent != NULL && n->parent->node == NODE_QUOTE) + /* nothing */; + else if (was_impl) { f->flags &= ~FMT_NOSPC; macro_open(f, "Sc"); } else