source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* docbook2mdoc: automatic assignment of header levels
@ 2019-03-22 16:21 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2019-03-22 16:21 UTC (permalink / raw)
  To: source

Log Message:
-----------
automatic assignment of header levels

Modified Files:
--------------
    docbook2mdoc:
        docbook2mdoc.c

Revision Data
-------------
Index: docbook2mdoc.c
===================================================================
RCS file: /home/cvs/mdocml/docbook2mdoc/docbook2mdoc.c,v
retrieving revision 1.51
retrieving revision 1.52
diff -Ldocbook2mdoc.c -Ldocbook2mdoc.c -u -p -r1.51 -r1.52
--- docbook2mdoc.c
+++ docbook2mdoc.c
@@ -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 pnod
 		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 pnod
 			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 */
--
 To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-03-22 16:21 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-22 16:21 docbook2mdoc: automatic assignment of header levels schwarze

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).