* 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).