=================================================================== RCS file: /cvs/docbook2mdoc/docbook2mdoc.c,v retrieving revision 1.51 retrieving revision 1.52 diff -u -p -r1.51 -r1.52 --- docbook2mdoc/docbook2mdoc.c 2019/03/22 16:14:52 1.51 +++ docbook2mdoc/docbook2mdoc.c 2019/03/22 16:21:23 1.52 @@ -1,4 +1,4 @@ -/* $Id: docbook2mdoc.c,v 1.51 2019/03/22 16:14:52 schwarze Exp $ */ +/* $Id: docbook2mdoc.c,v 1.52 2019/03/22 16:21:23 schwarze Exp $ */ /* * Copyright (c) 2014 Kristaps Dzonsons * Copyright (c) 2019 Ingo Schwarze @@ -45,6 +45,7 @@ struct parse { char *b; /* NUL-terminated buffer for pre-print */ size_t bsz; /* current length of b */ size_t mbsz; /* max bsz allocation */ + int level; /* header level, starting at 1 */ int newln; /* output: are we on a fresh line */ }; @@ -711,59 +712,71 @@ static void pnode_printrefsect(struct parse *p, struct pnode *pn) { struct pnode *pp; + const char *title; + int flags, level; + level = ++p->level; + flags = 1 == level ? MACROLINE_UPPER : 0; + if (3 > level) { + switch (pn->node) { + case (NODE_CAUTION): + case (NODE_NOTE): + case (NODE_TIP): + case (NODE_WARNING): + level = 3; + break; + default: + break; + } + } + TAILQ_FOREACH(pp, &pn->childq, child) if (NODE_TITLE == pp->node) break; - switch (pn->node) { - case (NODE_REFSECT1): - /* FALLTHROUGH */ - case (NODE_SECT1): - /* FALLTHROUGH */ - case (NODE_CHAPTER): + if (NULL == pp) { + switch (pn->node) { + case (NODE_PREFACE): + title = "Preface"; + break; + case (NODE_CAUTION): + title = "Caution"; + break; + case (NODE_NOTE): + title = "Note"; + break; + case (NODE_TIP): + title = "Tip"; + break; + case (NODE_WARNING): + title = "Warning"; + break; + default: + title = "Unknown"; + break; + } + } + + switch (level) { + case (1): fputs(".Sh", stdout); break; - case (NODE_REFSECT2): - /* FALLTHROUGH */ - case (NODE_SECT2): + case (2): fputs(".Ss", stdout); break; - case (NODE_REFSECT3): + default: puts(".Pp"); fputs(".Sy", stdout); break; - case (NODE_NOTE): - /* FALLTHROUGH */ - case (NODE_REFSECTION): - /* FALLTHROUGH */ - case (NODE_TIP): - /* FALLTHROUGH */ - case (NODE_CAUTION): - /* FALLTHROUGH */ - case (NODE_WARNING): - puts(".Pp"); - if (NULL == pp) - return; - fputs(".Em", stdout); - break; - default: - break; } - p->newln = 0; - if (NULL != pp) { - pnode_printmacrolinetext(p, pp, - NODE_REFSECT1 == pn->node || NODE_SECT1 == pn->node ? - MACROLINE_UPPER : 0); + p->newln = 0; + pnode_printmacrolinetext(p, pp, flags); pnode_printmclose(p, 1); pnode_unlink(pp); - } else { - puts(NODE_REFSECT1 == pn->node || NODE_SECT1 == pn->node ? - "UNKNOWN" : "unknown"); - p->newln = 1; - } + } else + printf(" %s\n", title); } /* @@ -1422,26 +1435,18 @@ pnode_print(struct parse *p, struct pnode *pn) pnode_printrefsynopsisdiv(p, pn); puts(".Sh SYNOPSIS"); break; + case (NODE_PREFACE): case (NODE_REFSECT1): - /* FALLTHROUGH */ case (NODE_REFSECT2): - /* FALLTHROUGH */ case (NODE_REFSECT3): - /* FALLTHROUGH */ case (NODE_REFSECTION): - /* FALLTHROUGH */ case (NODE_CHAPTER): - /* FALLTHROUGH */ case (NODE_SECT1): - /* FALLTHROUGH */ case (NODE_SECT2): - /* FALLTHROUGH */ + case (NODE_SECTION): case (NODE_NOTE): - /* FALLTHROUGH */ case (NODE_TIP): - /* FALLTHROUGH */ case (NODE_CAUTION): - /* FALLTHROUGH */ case (NODE_WARNING): assert(p->newln); pnode_printrefsect(p, pn); @@ -1614,6 +1619,21 @@ pnode_print(struct parse *p, struct pnode *pn) NODE_REFNAME == TAILQ_NEXT(pn, child)->node) fputs(" ,", stdout); pnode_printmclose(p, sv); + break; + case (NODE_PREFACE): + case (NODE_REFSECT1): + case (NODE_REFSECT2): + case (NODE_REFSECT3): + case (NODE_REFSECTION): + case (NODE_CHAPTER): + case (NODE_SECT1): + case (NODE_SECT2): + case (NODE_SECTION): + case (NODE_NOTE): + case (NODE_TIP): + case (NODE_CAUTION): + case (NODE_WARNING): + p->level--; break; case (NODE_LITERALLAYOUT): /* FALLTHROUGH */