=================================================================== RCS file: /cvs/docbook2mdoc/docbook2mdoc.c,v retrieving revision 1.112 retrieving revision 1.115 diff -u -p -r1.112 -r1.115 --- docbook2mdoc/docbook2mdoc.c 2019/04/12 12:07:26 1.112 +++ docbook2mdoc/docbook2mdoc.c 2019/04/12 21:37:07 1.115 @@ -1,4 +1,4 @@ -/* $Id: docbook2mdoc.c,v 1.112 2019/04/12 12:07:26 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 @@ -70,12 +70,18 @@ pnode_printtext(struct format *f, struct pnode *n) */ if (f->linestate != LINE_MACRO && - (nn = TAILQ_NEXT(n, child)) != NULL && nn->spc == 0 && - (nn->node != NODE_TEXT && nn->node != NODE_ESCAPE)) { - macro_open(f, "Pf"); - accept_arg = 1; - f->flags |= FMT_CHILD; - nn->spc = 1; + (nn = TAILQ_NEXT(n, child)) != NULL && nn->spc == 0) { + switch (pnode_class(nn->node)) { + case CLASS_LINE: + case CLASS_ENCL: + macro_open(f, "Pf"); + accept_arg = 1; + f->flags |= FMT_CHILD; + nn->spc = 1; + break; + default: + break; + } } switch (f->linestate) { @@ -192,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; @@ -264,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); + } } /* @@ -575,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); } @@ -877,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: @@ -1048,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: @@ -1061,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: @@ -1093,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: @@ -1127,7 +1160,7 @@ pnode_print(struct format *f, struct pnode *n) } void -ptree_print(struct ptree *tree) +ptree_print_mdoc(struct ptree *tree) { struct format formatter;