=================================================================== RCS file: /cvs/docbook2mdoc/docbook2mdoc.c,v retrieving revision 1.114 retrieving revision 1.115 diff -u -p -r1.114 -r1.115 --- docbook2mdoc/docbook2mdoc.c 2019/04/12 19:14:50 1.114 +++ docbook2mdoc/docbook2mdoc.c 2019/04/12 21:37:07 1.115 @@ -1,4 +1,4 @@ -/* $Id: docbook2mdoc.c,v 1.114 2019/04/12 19:14:50 schwarze Exp $ */ +/* $Id: docbook2mdoc.c,v 1.115 2019/04/12 21:37:07 schwarze Exp $ */ /* * Copyright (c) 2014 Kristaps Dzonsons * Copyright (c) 2019 Ingo Schwarze @@ -198,7 +198,7 @@ pnode_printrefsynopsisdiv(struct format *f, struct pno static void pnode_printrefsect(struct format *f, struct pnode *n) { - struct pnode *nc; + struct pnode *nc, *ncc; const char *title; int flags, level; @@ -270,12 +270,24 @@ pnode_printrefsect(struct format *f, struct pnode *n) break; } - if (nc != NULL) { + if (nc != NULL) macro_addnode(f, nc, flags); - pnode_unlink(nc); - } else + else macro_addarg(f, title, flags | ARG_QUOTED); macro_close(f); + + /* + * DocBook has no equivalent for -split mode, + * so just switch the default in the AUTHORS section. + */ + + if (nc != NULL) { + ncc = TAILQ_FIRST(&nc->childq); + if (ncc != NULL && ncc->node == NODE_TEXT && + strcasecmp(ncc->b, "AUTHORS") == 0) + macro_line(f, "An -nosplit"); + pnode_unlink(nc); + } } /* @@ -581,7 +593,8 @@ pnode_printauthor(struct format *f, struct pnode *n) if ((nc = pnode_findfirst(n, NODE_EMAIL)) != NULL) { f->flags |= FMT_CHILD; - pnode_print(f, nc); + macro_open(f, "Aq Mt"); + macro_addnode(f, nc, ARG_SPACE); pnode_unlink(nc); } @@ -883,7 +896,12 @@ pnode_print(struct format *f, struct pnode *n) macro_open(f, "An"); break; case NODE_EMAIL: - macro_open(f, "Aq Mt"); + if (was_impl) + macro_open(f, "Ao Mt"); + else { + macro_open(f, "Aq Mt"); + f->flags |= FMT_IMPL; + } break; case NODE_EMPHASIS: case NODE_FIRSTTERM: @@ -1054,6 +1072,13 @@ pnode_print(struct format *f, struct pnode *n) pnode_print(f, nc); switch (n->node) { + case NODE_EMAIL: + if (was_impl) { + f->flags &= ~FMT_NOSPC; + macro_open(f, "Ac"); + } else + f->flags &= ~FMT_IMPL; + break; case NODE_ESCAPE: case NODE_TERM: case NODE_TEXT: @@ -1067,9 +1092,10 @@ pnode_print(struct format *f, struct pnode *n) macro_line(f, "EN"); break; case NODE_LITERAL: - if (was_impl) + if (was_impl) { + f->flags &= ~FMT_NOSPC; macro_open(f, "Sc"); - else + } else f->flags &= ~FMT_IMPL; break; case NODE_MEMBER: @@ -1099,9 +1125,10 @@ pnode_print(struct format *f, struct pnode *n) fputs(" } ", stdout); break; case NODE_QUOTE: - if (was_impl) + if (was_impl) { + f->flags &= ~FMT_NOSPC; macro_open(f, "Dc"); - else + } else f->flags &= ~FMT_IMPL; break; case NODE_PREFACE: