source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* docbook2mdoc: Work towards reducing the number of node IDs.
@ 2019-03-22 16:43 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2019-03-22 16:43 UTC (permalink / raw)
  To: source

Log Message:
-----------
Work towards reducing the number of node IDs.
    
Allow mapping several node names to the same node ID
and use that for chapter, part, refsect*, sect* -> NODE_SECTION.
Do not require the root to be of a specific type.
Delete the useless NODE_IGNTEXT.

Modified Files:
--------------
    docbook2mdoc:
        docbook2mdoc.c
        extern.h

Revision Data
-------------
Index: extern.h
===================================================================
RCS file: /home/cvs/mdocml/docbook2mdoc/extern.h,v
retrieving revision 1.28
retrieving revision 1.29
diff -Lextern.h -Lextern.h -u -p -r1.28 -r1.29
--- extern.h
+++ extern.h
@@ -33,7 +33,6 @@ enum	nodeid {
 	NODE_BOOK,
 	NODE_BOOKINFO,
 	NODE_CAUTION,
-	NODE_CHAPTER,
 	NODE_CITEREFENTRY,
 	NODE_CITETITLE,
 	NODE_CMDSYNOPSIS,
@@ -93,7 +92,6 @@ enum	nodeid {
 	NODE_PARA,
 	NODE_PARAMDEF,
 	NODE_PARAMETER,
-	NODE_PART,
 	NODE_PHRASE,
 	NODE_PREFACE,
 	NODE_PRIMARY,
@@ -111,10 +109,6 @@ enum	nodeid {
 	NODE_REFNAME,
 	NODE_REFNAMEDIV,
 	NODE_REFPURPOSE,
-	NODE_REFSECT1,
-	NODE_REFSECT2,
-	NODE_REFSECT3,
-	NODE_REFSECTION,
 	NODE_REFSYNOPSISDIV,
 	NODE_RELEASEINFO,
 	NODE_REPLACEABLE,
@@ -122,8 +116,6 @@ enum	nodeid {
 	NODE_SBR,
 	NODE_SCREEN,
 	NODE_SECONDARY,
-	NODE_SECT1,
-	NODE_SECT2,
 	NODE_SECTION,
 	NODE_SGMLTAG,
 	NODE_SIMPLELIST,
Index: docbook2mdoc.c
===================================================================
RCS file: /home/cvs/mdocml/docbook2mdoc/docbook2mdoc.c,v
retrieving revision 1.55
retrieving revision 1.56
diff -Ldocbook2mdoc.c -Ldocbook2mdoc.c -u -p -r1.55 -r1.56
--- docbook2mdoc.c
+++ docbook2mdoc.c
@@ -51,8 +51,7 @@ struct	parse {
 
 struct	node {
 	const char	*name; /* docbook element name */
-	unsigned int	 flags;
-#define	NODE_IGNTEXT	 1 /* ignore all contained text */
+	enum nodeid	 node; /* docbook element to generate */
 };
 
 TAILQ_HEAD(pnodeq, pnode);
@@ -92,137 +91,136 @@ static	const char *attrvals[ATTRVAL__MAX
 	"req"
 };
 
-static	const struct node nodes[NODE__MAX] = {
-	{ NULL, 0 },
-	{ "acronym", 0 },
-	{ "affiliation", NODE_IGNTEXT },
-	{ "anchor", NODE_IGNTEXT },
-	{ "application", 0 },
-	{ "arg", 0 },
-	{ "author", NODE_IGNTEXT },
-	{ "authorgroup", NODE_IGNTEXT },
-	{ "blockquote", NODE_IGNTEXT },
-	{ "book", NODE_IGNTEXT },
-	{ "bookinfo", NODE_IGNTEXT },
-	{ "caution", NODE_IGNTEXT },
-	{ "chapter", NODE_IGNTEXT },
-	{ "citerefentry", NODE_IGNTEXT },
-	{ "citetitle", 0 },
-	{ "cmdsynopsis", NODE_IGNTEXT },
-	{ "code", 0 },
-	{ "colspec", NODE_IGNTEXT },
-	{ "command", 0 },
-	{ "constant", 0 },
-	{ "copyright", NODE_IGNTEXT },
-	{ "date", 0 },
-	{ "editor", NODE_IGNTEXT },
-	{ "emphasis", 0 },
-	{ "entry", 0 },
-	{ "envar", 0 },
-	{ "fieldsynopsis", NODE_IGNTEXT },
-	{ "filename", 0 },
-	{ "firstname", 0 },
-	{ "firstterm", 0 },
-	{ "footnote", 0 },
-	{ "funcdef", 0 },
-	{ "funcprototype", NODE_IGNTEXT },
-	{ "funcsynopsis", NODE_IGNTEXT },
-	{ "funcsynopsisinfo", 0 },
-	{ "function", 0 },
-	{ "glossterm", 0 },
-	{ "group", NODE_IGNTEXT },
-	{ "holder", NODE_IGNTEXT },
-	{ "index", NODE_IGNTEXT },
-	{ "indexterm", NODE_IGNTEXT },
-	{ "info", NODE_IGNTEXT },
-	{ "informalequation", NODE_IGNTEXT },
-	{ "informaltable", NODE_IGNTEXT },
-	{ "inlineequation", NODE_IGNTEXT },
-	{ "itemizedlist", NODE_IGNTEXT },
-	{ "keysym", 0 },
-	{ "legalnotice", NODE_IGNTEXT },
-	{ "link", 0 },
-	{ "listitem", NODE_IGNTEXT },
-	{ "literal", 0 },
-	{ "literallayout", 0 },
-	{ "manvolnum", 0 },
-	{ "member", 0 },
-	{ "mml:math", NODE_IGNTEXT },
-	{ "mml:mfenced", 0 },
-	{ "mml:mfrac", 0 },
-	{ "mml:mi", 0 },
-	{ "mml:mn", 0 },
-	{ "mml:mo", 0 },
-	{ "mml:mrow", 0 },
-	{ "mml:msub", 0 },
-	{ "mml:msup", 0 },
-	{ "modifier", 0 },
-	{ "note", NODE_IGNTEXT },
-	{ "option", 0 },
-	{ "orderedlist", NODE_IGNTEXT },
-	{ "orgname", 0 },
-	{ "othername", 0 },
-	{ "para", 0 },
-	{ "paramdef", 0 },
-	{ "parameter", 0 },
-	{ "part", NODE_IGNTEXT },
-	{ "phrase", 0 },
-	{ "preface", NODE_IGNTEXT },
-	{ "primary", 0 },
-	{ "programlisting", 0 },
-	{ "prompt", 0 },
-	{ "quote", 0 },
-	{ "refclass", NODE_IGNTEXT },
-	{ "refdescriptor", NODE_IGNTEXT },
-	{ "refentry", NODE_IGNTEXT },
-	{ "refentryinfo", NODE_IGNTEXT },
-	{ "refentrytitle", 0 },
-	{ "refmeta", NODE_IGNTEXT },
-	{ "refmetainfo", NODE_IGNTEXT },
-	{ "refmiscinfo", NODE_IGNTEXT },
-	{ "refname", 0 },
-	{ "refnamediv", NODE_IGNTEXT },
-	{ "refpurpose", 0 },
-	{ "refsect1", NODE_IGNTEXT },
-	{ "refsect2", NODE_IGNTEXT },
-	{ "refsect3", NODE_IGNTEXT },
-	{ "refsection", NODE_IGNTEXT },
-	{ "refsynopsisdiv", NODE_IGNTEXT },
-	{ "releaseinfo", 0 },
-	{ "replaceable", 0 },
-	{ "row", NODE_IGNTEXT },
-	{ "sbr", NODE_IGNTEXT },
-	{ "screen", NODE_IGNTEXT },
-	{ "secondary", 0 },
-	{ "sect1", NODE_IGNTEXT },
-	{ "sect2", NODE_IGNTEXT },
-	{ "section", NODE_IGNTEXT },
-	{ "sgmltag", 0 },
-	{ "simplelist", NODE_IGNTEXT },
-	{ "spanspec", NODE_IGNTEXT },
-	{ "structname", 0 },
-	{ "subtitle", 0 },
-	{ "surname", 0 },
-	{ "synopsis", 0 },
-	{ "table", NODE_IGNTEXT },
-	{ "tbody", NODE_IGNTEXT },
-	{ "term", 0 },
-	{ NULL, 0 },
-	{ "tfoot", NODE_IGNTEXT },
-	{ "tgroup", NODE_IGNTEXT },
-	{ "thead", NODE_IGNTEXT },
-	{ "tip", NODE_IGNTEXT },
-	{ "title", 0 },
-	{ "trademark", 0 },
-	{ "type", 0 },
-	{ "ulink", 0 },
-	{ "userinput", 0 },
-	{ "variablelist", NODE_IGNTEXT },
-	{ "varlistentry", NODE_IGNTEXT },
-	{ "varname", 0 },
-	{ "warning", NODE_IGNTEXT },
-	{ "wordasword", 0 },
-	{ "year", NODE_IGNTEXT },
+static	const struct node nodes[] = {
+	{ "acronym",		NODE_ACRONYM },
+	{ "affiliation",	NODE_AFFILIATION },
+	{ "anchor",		NODE_ANCHOR },
+	{ "application",	NODE_APPLICATION },
+	{ "arg",		NODE_ARG },
+	{ "author",		NODE_AUTHOR },
+	{ "authorgroup",	NODE_AUTHORGROUP },
+	{ "blockquote",		NODE_BLOCKQUOTE },
+	{ "book",		NODE_BOOK },
+	{ "bookinfo",		NODE_BOOKINFO },
+	{ "caution",		NODE_CAUTION },
+	{ "chapter",		NODE_SECTION },
+	{ "citerefentry",	NODE_CITEREFENTRY },
+	{ "citetitle",		NODE_CITETITLE },
+	{ "cmdsynopsis",	NODE_CMDSYNOPSIS },
+	{ "code",		NODE_CODE },
+	{ "colspec",		NODE_COLSPEC },
+	{ "command",		NODE_COMMAND },
+	{ "constant",		NODE_CONSTANT },
+	{ "copyright",		NODE_COPYRIGHT },
+	{ "date",		NODE_DATE },
+	{ "editor",		NODE_EDITOR },
+	{ "emphasis",		NODE_EMPHASIS },
+	{ "entry",		NODE_ENTRY },
+	{ "envar",		NODE_ENVAR },
+	{ "fieldsynopsis",	NODE_FIELDSYNOPSIS },
+	{ "filename",		NODE_FILENAME },
+	{ "firstname",		NODE_FIRSTNAME },
+	{ "firstterm",		NODE_FIRSTTERM },
+	{ "footnote",		NODE_FOOTNOTE },
+	{ "funcdef",		NODE_FUNCDEF },
+	{ "funcprototype",	NODE_FUNCPROTOTYPE },
+	{ "funcsynopsis",	NODE_FUNCSYNOPSIS },
+	{ "funcsynopsisinfo",	NODE_FUNCSYNOPSISINFO },
+	{ "function",		NODE_FUNCTION },
+	{ "glossterm",		NODE_GLOSSTERM },
+	{ "group",		NODE_GROUP },
+	{ "holder",		NODE_HOLDER },
+	{ "index",		NODE_INDEX },
+	{ "indexterm",		NODE_INDEXTERM },
+	{ "info",		NODE_INFO },
+	{ "informalequation",	NODE_INFORMALEQUATION },
+	{ "informaltable",	NODE_INFORMALTABLE },
+	{ "inlineequation",	NODE_INLINEEQUATION },
+	{ "itemizedlist",	NODE_ITEMIZEDLIST },
+	{ "keysym",		NODE_KEYSYM },
+	{ "legalnotice",	NODE_LEGALNOTICE },
+	{ "link",		NODE_LINK },
+	{ "listitem",		NODE_LISTITEM },
+	{ "literal",		NODE_LITERAL },
+	{ "literallayout",	NODE_LITERALLAYOUT },
+	{ "manvolnum",		NODE_MANVOLNUM },
+	{ "member",		NODE_MEMBER },
+	{ "mml:math",		NODE_MML_MATH },
+	{ "mml:mfenced",	NODE_MML_MFENCED },
+	{ "mml:mfrac",		NODE_MML_MFRAC },
+	{ "mml:mi",		NODE_MML_MI },
+	{ "mml:mn",		NODE_MML_MN },
+	{ "mml:mo",		NODE_MML_MO },
+	{ "mml:mrow",		NODE_MML_MROW },
+	{ "mml:msub",		NODE_MML_MSUB },
+	{ "mml:msup",		NODE_MML_MSUP },
+	{ "modifier",		NODE_MODIFIER },
+	{ "note",		NODE_NOTE },
+	{ "option",		NODE_OPTION },
+	{ "orderedlist",	NODE_ORDEREDLIST },
+	{ "orgname",		NODE_ORGNAME },
+	{ "othername",		NODE_OTHERNAME },
+	{ "para",		NODE_PARA },
+	{ "paramdef",		NODE_PARAMDEF },
+	{ "parameter",		NODE_PARAMETER },
+	{ "part",		NODE_SECTION },
+	{ "phrase",		NODE_PHRASE },
+	{ "preface",		NODE_PREFACE },
+	{ "primary",		NODE_PRIMARY },
+	{ "programlisting",	NODE_PROGRAMLISTING },
+	{ "prompt",		NODE_PROMPT },
+	{ "quote",		NODE_QUOTE },
+	{ "refclass",		NODE_REFCLASS },
+	{ "refdescriptor",	NODE_REFDESCRIPTOR },
+	{ "refentry",		NODE_REFENTRY },
+	{ "refentryinfo",	NODE_REFENTRYINFO },
+	{ "refentrytitle",	NODE_REFENTRYTITLE },
+	{ "refmeta",		NODE_REFMETA },
+	{ "refmetainfo",	NODE_REFMETAINFO },
+	{ "refmiscinfo",	NODE_REFMISCINFO },
+	{ "refname",		NODE_REFNAME },
+	{ "refnamediv",		NODE_REFNAMEDIV },
+	{ "refpurpose",		NODE_REFPURPOSE },
+	{ "refsect1",		NODE_SECTION },
+	{ "refsect2",		NODE_SECTION },
+	{ "refsect3",		NODE_SECTION },
+	{ "refsection",		NODE_SECTION },
+	{ "refsynopsisdiv",	NODE_REFSYNOPSISDIV },
+	{ "releaseinfo",	NODE_RELEASEINFO },
+	{ "replaceable",	NODE_REPLACEABLE },
+	{ "row",		NODE_ROW },
+	{ "sbr",		NODE_SBR },
+	{ "screen",		NODE_SCREEN },
+	{ "secondary",		NODE_SECONDARY },
+	{ "sect1",		NODE_SECTION },
+	{ "sect2",		NODE_SECTION },
+	{ "section",		NODE_SECTION },
+	{ "sgmltag",		NODE_SGMLTAG },
+	{ "simplelist",		NODE_SIMPLELIST },
+	{ "spanspec",		NODE_SPANSPEC },
+	{ "structname",		NODE_STRUCTNAME },
+	{ "subtitle",		NODE_SUBTITLE },
+	{ "surname",		NODE_SURNAME },
+	{ "synopsis",		NODE_SYNOPSIS },
+	{ "table",		NODE_TABLE },
+	{ "tbody",		NODE_TBODY },
+	{ "term",		NODE_TERM },
+	{ "tfoot",		NODE_TFOOT },
+	{ "tgroup",		NODE_TGROUP },
+	{ "thead",		NODE_THEAD },
+	{ "tip",		NODE_TIP },
+	{ "title",		NODE_TITLE },
+	{ "trademark",		NODE_TRADEMARK },
+	{ "type",		NODE_TYPE },
+	{ "ulink",		NODE_ULINK },
+	{ "userinput",		NODE_USERINPUT },
+	{ "variablelist",	NODE_VARIABLELIST },
+	{ "varlistentry",	NODE_VARLISTENTRY },
+	{ "varname",		NODE_VARNAME },
+	{ "warning",		NODE_WARNING },
+	{ "wordasword",		NODE_WORDASWORD },
+	{ "year",		NODE_YEAR },
+	{ NULL,			NODE__MAX }
 };
 
 static	int warn = 0;
@@ -247,10 +245,7 @@ xml_char(void *arg, const XML_Char *p, i
 	if (ps->stop || NODE_ROOT == ps->node)
 		return;
 
-	/* Not supposed to be collecting text. */
 	assert(NULL != ps->cur);
-	if (NODE_IGNTEXT & nodes[ps->node].flags)
-		return;
 
 	/*
 	 * Are we in the midst of processing text?
@@ -323,7 +318,7 @@ static void
 xml_elem_start(void *arg, const XML_Char *name, const XML_Char **atts)
 {
 	struct parse	 *ps = arg;
-	enum nodeid	  node;
+	const struct node *node;
 	enum attrkey	  key;
 	enum attrval	  val;
 	struct pnode	 *dat;
@@ -343,15 +338,13 @@ xml_elem_start(void *arg, const XML_Char
 		ps->node = ps->cur->node;
 	}
 
-	for (node = 0; node < NODE__MAX; node++)
-		if (NULL == nodes[node].name)
-			continue;
-		else if (0 == strcmp(nodes[node].name, name))
+	for (node = nodes; NULL != node->name; node++)
+		if (0 == strcmp(node->name, name))
 			break;
 
-	if (NODE__MAX == node && NODE_ROOT == ps->node) {
-		return;
-	} else if (NODE__MAX == node) {
+	if (NULL == node->name) {
+		if (NODE_ROOT == ps->node)
+			return;
 		fprintf(stderr, "%s:%zu:%zu: unknown node \"%s\"\n",
 			ps->fname, XML_GetCurrentLineNumber(ps->xml),
 			XML_GetCurrentColumnNumber(ps->xml), name);
@@ -363,12 +356,9 @@ xml_elem_start(void *arg, const XML_Char
 			XML_GetCurrentColumnNumber(ps->xml));
 		ps->stop = 1;
 		return;
-	} else if (NODE_ROOT == ps->node && NODE_REFENTRY != node &&
-	    NODE_PART != node && NODE_BOOK != node) {
-		return;
 	}
 
-	if (NODE_INLINEEQUATION == node)
+	if (NODE_INLINEEQUATION == node->node)
 		ps->flags |= PARSE_EQN;
 
 	if (NULL == (dat = calloc(1, sizeof(struct pnode)))) {
@@ -376,7 +366,7 @@ xml_elem_start(void *arg, const XML_Char
 		exit(EXIT_FAILURE);
 	}
 
-	dat->node = ps->node = node;
+	dat->node = ps->node = node->node;
 	dat->parent = ps->cur;
 	TAILQ_INIT(&dat->childq);
 	TAILQ_INIT(&dat->attrq);
@@ -702,23 +692,9 @@ pnode_printpara(struct parse *p, struct 
 	pp = TAILQ_PREV(pn, pnodeq, child);
 	if (NULL == pp)
 		pp = pn->parent;
-	switch (pp->node) {
-	case (NODE_CHAPTER):
-	case (NODE_PREFACE):
-	case (NODE_REFSECT1):
-	case (NODE_REFSECT2):
-	case (NODE_REFSECT3):
-	case (NODE_REFSECTION):
-	case (NODE_SECT1):
-	case (NODE_SECT2):
-	case (NODE_SECTION):
-		if (2 > p->level)
-			return;
-		break;
-	default:
-		break;
-	}
-	puts(".Pp");
+	if ((NODE_SECTION != pp->node && NODE_PREFACE != pp->node) ||
+	    2 < p->level)
+		puts(".Pp");
 }
 
 /*
@@ -746,6 +722,9 @@ pnode_printrefsect(struct parse *p, stru
 	const char	*title;
 	int		 flags, level;
 
+	if (NULL == pn->parent)
+		return;
+
 	level = ++p->level;
 	flags = 1 == level ? MACROLINE_UPPER : 0;
 	if (3 > level) {
@@ -1465,13 +1444,6 @@ pnode_print(struct parse *p, struct pnod
 		puts(".Sh SYNOPSIS");
 		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):
@@ -1650,13 +1622,6 @@ pnode_print(struct parse *p, struct pnod
 		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):
--
 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:43 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:43 docbook2mdoc: Work towards reducing the number of node IDs 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).