=================================================================== RCS file: /cvs/docbook2mdoc/node.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -p -r1.9 -r1.10 --- docbook2mdoc/node.c 2019/04/12 04:39:24 1.9 +++ docbook2mdoc/node.c 2019/04/12 16:40:53 1.10 @@ -1,4 +1,4 @@ -/* $Id: node.c,v 1.9 2019/04/12 04:39:24 schwarze Exp $ */ +/* $Id: node.c,v 1.10 2019/04/12 16:40:53 schwarze Exp $ */ /* * Copyright (c) 2014 Kristaps Dzonsons * Copyright (c) 2019 Ingo Schwarze @@ -15,6 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include #include #include @@ -24,6 +25,129 @@ * The implementation of the DocBook syntax tree. */ +struct nodeprop { + const char *name; + enum nodeclass class; +}; + +static const struct nodeprop properties[] = { + { "affiliation", CLASS_TRANS }, + { "appendix", CLASS_BLOCK }, + { "application", CLASS_LINE }, + { "arg", CLASS_ENCL }, + { "author", CLASS_LINE }, + { "authorgroup", CLASS_BLOCK }, + { "blockquote", CLASS_BLOCK }, + { "bookinfo", CLASS_BLOCK }, + { "caution", CLASS_BLOCK }, + { "citerefentry", CLASS_LINE }, + { "citetitle", CLASS_LINE }, + { "cmdsynopsis", CLASS_TRANS }, + { "colspec", CLASS_VOID }, + { "command", CLASS_LINE }, + { "constant", CLASS_LINE }, + { "contrib", CLASS_TRANS }, + { "copyright", CLASS_TRANS }, + { "date", CLASS_TRANS }, + { "!DOCTYPE", CLASS_VOID }, + { "editor", CLASS_LINE }, + { "email", CLASS_ENCL }, + { "emphasis", CLASS_LINE }, + { "!ENTITY", CLASS_VOID }, + { "entry", CLASS_ENCL }, + { "envar", CLASS_LINE }, + { "errorname", CLASS_LINE }, + { "fieldsynopsis", CLASS_TRANS }, + { "filename", CLASS_LINE }, + { "firstterm", CLASS_LINE }, + { "footnote", CLASS_TRANS }, + { "funcdef", CLASS_BLOCK }, + { "funcprototype", CLASS_BLOCK }, + { "funcsynopsis", CLASS_TRANS }, + { "funcsynopsisinfo", CLASS_LINE }, + { "function", CLASS_LINE }, + { "glossterm", CLASS_LINE }, + { "group", CLASS_ENCL }, + { "holder", CLASS_TRANS }, + { "xi:include", CLASS_VOID }, + { "index", CLASS_TRANS }, + { "info", CLASS_TRANS }, + { "informalequation", CLASS_BLOCK }, + { "inlineequation", CLASS_BLOCK }, + { "itemizedlist", CLASS_BLOCK }, + { "keysym", CLASS_LINE }, + { "legalnotice", CLASS_BLOCK }, + { "link", CLASS_ENCL }, + { "listitem", CLASS_TRANS }, + { "literal", CLASS_ENCL }, + { "literallayout", CLASS_BLOCK }, + { "manvolnum", CLASS_TRANS }, + { "markup", CLASS_LINE }, + { "member", CLASS_LINE }, + { "mml:math", CLASS_LINE }, + { "mml:mfenced", CLASS_LINE }, + { "mml:mfrac", CLASS_LINE }, + { "mml:mi", CLASS_LINE }, + { "mml:mn", CLASS_LINE }, + { "mml:mo", CLASS_LINE }, + { "mml:mrow", CLASS_LINE }, + { "mml:msub", CLASS_LINE }, + { "mml:msup", CLASS_LINE }, + { "modifier", CLASS_LINE }, + { "note", CLASS_BLOCK }, + { "option", CLASS_LINE }, + { "orderedlist", CLASS_BLOCK }, + { "orgname", CLASS_TRANS }, + { "para", CLASS_BLOCK }, + { "paramdef", CLASS_LINE }, + { "parameter", CLASS_LINE }, + { "personname", CLASS_TRANS }, + { "preface", CLASS_BLOCK }, + { "programlisting", CLASS_BLOCK }, + { "prompt", CLASS_TRANS }, + { "quote", CLASS_ENCL }, + { "refclass", CLASS_TRANS }, + { "refdescriptor", CLASS_TRANS }, + { "refentry", CLASS_TRANS }, + { "refentryinfo", CLASS_VOID }, + { "refentrytitle", CLASS_TRANS }, + { "refmeta", CLASS_TRANS }, + { "refmetainfo", CLASS_TRANS }, + { "refmiscinfo", CLASS_TRANS }, + { "refname", CLASS_LINE }, + { "refnamediv", CLASS_BLOCK }, + { "refpurpose", CLASS_LINE }, + { "refsynopsisdiv", CLASS_BLOCK }, + { "releaseinfo", CLASS_TRANS }, + { "replaceable", CLASS_LINE }, + { "row", CLASS_BLOCK }, + { "sbr", CLASS_BLOCK }, + { "screen", CLASS_BLOCK }, + { "section", CLASS_BLOCK }, + { "simplelist", CLASS_TRANS }, + { "spanspec", CLASS_TRANS }, + { "subtitle", CLASS_TRANS }, + { "synopsis", CLASS_BLOCK }, + { "table", CLASS_TRANS }, + { "tbody", CLASS_TRANS }, + { "term", CLASS_LINE }, + { "tfoot", CLASS_TRANS }, + { "tgroup", CLASS_BLOCK }, + { "thead", CLASS_TRANS }, + { "tip", CLASS_BLOCK }, + { "title", CLASS_BLOCK }, + { "type", CLASS_LINE }, + { "variablelist", CLASS_BLOCK }, + { "varlistentry", CLASS_BLOCK }, + { "varname", CLASS_LINE }, + { "warning", CLASS_BLOCK }, + { "wordasword", CLASS_TRANS }, + { "year", CLASS_TRANS }, + { "[UNKNOWN]", CLASS_VOID }, + { "[TEXT]", CLASS_TEXT }, + { "[ESCAPE]", CLASS_TEXT } +}; + static const char *const attrkeys[ATTRKEY__MAX] = { "choice", "class", @@ -72,6 +196,31 @@ attrval_parse(const char *name) if (strcmp(name, attrvals[val]) == 0) break; return val; +} + +enum nodeid +pnode_parse(const char *name) +{ + enum nodeid node; + + for (node = 0; node < NODE_UNKNOWN; node++) + if (strcmp(name, properties[node].name) == 0) + break; + return node; +} + +const char * +pnode_name(enum nodeid node) +{ + assert(node < NODE_IGNORE); + return properties[node].name; +} + +enum nodeclass +pnode_class(enum nodeid node) +{ + assert(node < NODE_IGNORE); + return properties[node].class; } struct pnode *