#include #include "extern.h" int isattrkey(enum nodeid node, enum attrkey key) { switch (key) { case (ATTRKEY_CHOICE): return(node == NODE_ARG); case (ATTRKEY_ID): /* Common to all. */ return(1); case (ATTRKEY_REP): return(node == NODE_ARG); default: break; } abort(); return(0); } int isattrval(enum attrkey key, enum attrval val) { switch (val) { case (ATTRVAL_OPT): case (ATTRVAL_PLAIN): case (ATTRVAL_REQ): return(key == ATTRKEY_CHOICE); case (ATTRVAL_REPEAT): case (ATTRVAL_NOREPEAT): return(key == ATTRKEY_REP); default: break; } abort(); return(0); } /* * Look up whether "parent" is a valid parent for "node". * This is sucked directly from the DocBook specification: look at the * "children" and "parent" sections of each node. */ int isparent(enum nodeid node, enum nodeid parent) { switch (node) { case (NODE_ROOT): return(0); case (NODE_ACRONYM): switch (parent) { case (NODE_EMPHASIS): case (NODE_FUNCSYNOPSISINFO): case (NODE_PROGRAMLISTING): case (NODE_REFDESCRIPTOR): case (NODE_REFENTRYTITLE): case (NODE_REFNAME): case (NODE_REFPURPOSE): case (NODE_SYNOPSIS): case (NODE_TERM): case (NODE_TITLE): return(1); default: break; } return(0); case (NODE_ARG): switch (parent) { case (NODE_ARG): case (NODE_CMDSYNOPSIS): return(1); default: break; } return(0); case (NODE_CITEREFENTRY): switch (parent) { case (NODE_EMPHASIS): case (NODE_FUNCSYNOPSISINFO): case (NODE_LINK): case (NODE_PARA): case (NODE_PROGRAMLISTING): case (NODE_REFDESCRIPTOR): case (NODE_REFENTRYTITLE): case (NODE_REFNAME): case (NODE_REFPURPOSE): case (NODE_SYNOPSIS): case (NODE_TERM): case (NODE_TITLE): case (NODE_ULINK): return(1); default: break; } return(0); case (NODE_CMDSYNOPSIS): switch (parent) { case (NODE_ITEMIZEDLIST): case (NODE_LISTITEM): case (NODE_ORDEREDLIST): case (NODE_PARA): case (NODE_REFSECT1): case (NODE_REFSECT2): case (NODE_REFSYNOPSISDIV): case (NODE_VARIABLELIST): return(1); default: break; } return(0); case (NODE_CODE): switch (parent) { case (NODE_EMPHASIS): case (NODE_FUNCSYNOPSISINFO): case (NODE_LINK): case (NODE_PARA): case (NODE_PROGRAMLISTING): case (NODE_REFDESCRIPTOR): case (NODE_REFENTRYTITLE): case (NODE_REFNAME): case (NODE_REFPURPOSE): case (NODE_SYNOPSIS): case (NODE_TERM): case (NODE_TITLE): case (NODE_ULINK): return(1); default: break; } return(0); case (NODE_COMMAND): switch (parent) { case (NODE_CMDSYNOPSIS): case (NODE_EMPHASIS): case (NODE_FUNCSYNOPSISINFO): case (NODE_LINK): case (NODE_PARA): case (NODE_PROGRAMLISTING): case (NODE_REFDESCRIPTOR): case (NODE_REFENTRYTITLE): case (NODE_REFNAME): case (NODE_REFPURPOSE): case (NODE_SYNOPSIS): case (NODE_TERM): case (NODE_TITLE): case (NODE_ULINK): return(1); default: break; } return(0); case (NODE_DATE): switch (parent) { case (NODE_EMPHASIS): case (NODE_FUNCSYNOPSISINFO): case (NODE_LINK): case (NODE_PARA): case (NODE_PROGRAMLISTING): case (NODE_REFDESCRIPTOR): case (NODE_REFENTRYINFO): case (NODE_REFENTRYTITLE): case (NODE_REFNAME): case (NODE_REFPURPOSE): case (NODE_SYNOPSIS): case (NODE_TITLE): case (NODE_ULINK): return(1); default: break; } return(0); case (NODE_EMPHASIS): switch (parent) { case (NODE_EMPHASIS): case (NODE_FUNCSYNOPSISINFO): case (NODE_LINK): case (NODE_PARA): case (NODE_PROGRAMLISTING): case (NODE_REFDESCRIPTOR): case (NODE_REFENTRYTITLE): case (NODE_REFNAME): case (NODE_REFPURPOSE): case (NODE_SYNOPSIS): case (NODE_TERM): case (NODE_TITLE): case (NODE_ULINK): return(1); default: break; } return(0); case (NODE_ENVAR): switch (parent) { case (NODE_EMPHASIS): case (NODE_FUNCSYNOPSISINFO): case (NODE_LINK): case (NODE_PARA): case (NODE_PROGRAMLISTING): case (NODE_REFDESCRIPTOR): case (NODE_REFENTRYTITLE): case (NODE_REFNAME): case (NODE_REFPURPOSE): case (NODE_SYNOPSIS): case (NODE_TERM): case (NODE_TITLE): case (NODE_ULINK): return(1); default: break; } return(0); case (NODE_FILENAME): switch (parent) { case (NODE_EMPHASIS): case (NODE_FUNCSYNOPSISINFO): case (NODE_LINK): case (NODE_PARA): case (NODE_PROGRAMLISTING): case (NODE_REFDESCRIPTOR): case (NODE_REFENTRYTITLE): case (NODE_REFNAME): case (NODE_REFPURPOSE): case (NODE_SYNOPSIS): case (NODE_TERM): case (NODE_TITLE): case (NODE_ULINK): return(1); default: break; } return(0); case (NODE_FUNCDEF): return(NODE_FUNCPROTOTYPE == parent); case (NODE_FUNCPROTOTYPE): return(NODE_FUNCSYNOPSIS == parent); case (NODE_FUNCSYNOPSIS): switch (parent) { case (NODE_ITEMIZEDLIST): case (NODE_LISTITEM): case (NODE_ORDEREDLIST): case (NODE_PARA): case (NODE_REFSECT1): case (NODE_REFSECT2): case (NODE_REFSYNOPSISDIV): case (NODE_VARIABLELIST): return(1); default: break; } return(0); case (NODE_FUNCSYNOPSISINFO): return(NODE_FUNCSYNOPSIS == parent); case (NODE_FUNCTION): switch (parent) { case (NODE_CODE): case (NODE_EMPHASIS): case (NODE_FUNCDEF): case (NODE_FUNCSYNOPSISINFO): case (NODE_LINK): case (NODE_PARA): case (NODE_PROGRAMLISTING): case (NODE_REFDESCRIPTOR): case (NODE_REFENTRYTITLE): case (NODE_REFNAME): case (NODE_REFPURPOSE): case (NODE_SYNOPSIS): case (NODE_TERM): case (NODE_TITLE): case (NODE_ULINK): return(1); default: break; } return(0); case (NODE_ITEMIZEDLIST): switch (parent) { case (NODE_ITEMIZEDLIST): case (NODE_LISTITEM): case (NODE_ORDEREDLIST): case (NODE_REFSECT1): case (NODE_REFSECT2): case (NODE_REFSYNOPSISDIV): case (NODE_VARIABLELIST): return(1); default: break; } return(0); case (NODE_LINK): case (NODE_ULINK): /* Synonyms. */ switch (parent) { case (NODE_ACRONYM): case (NODE_ARG): case (NODE_CODE): case (NODE_COMMAND): case (NODE_EMPHASIS): case (NODE_ENVAR): case (NODE_FILENAME): case (NODE_FUNCDEF): case (NODE_FUNCSYNOPSISINFO): case (NODE_FUNCTION): case (NODE_LINK): case (NODE_LITERAL): case (NODE_MANVOLNUM): case (NODE_OPTION): case (NODE_PARA): case (NODE_PARAMDEF): case (NODE_PARAMETER): case (NODE_PROGRAMLISTING): case (NODE_REFDESCRIPTOR): case (NODE_REFENTRYTITLE): case (NODE_REFMISCINFO): case (NODE_REFNAME): case (NODE_REPLACEABLE): case (NODE_SYNOPSIS): case (NODE_TERM): case (NODE_ULINK): return(1); default: break; } return(0); case (NODE_LISTITEM): switch (parent) { case (NODE_ITEMIZEDLIST): case (NODE_ORDEREDLIST): case (NODE_VARLISTENTRY): return(1); default: break; } return(0); case (NODE_LITERAL): switch (parent) { case (NODE_EMPHASIS): case (NODE_FUNCSYNOPSISINFO): case (NODE_LINK): case (NODE_PARA): case (NODE_PROGRAMLISTING): case (NODE_REFDESCRIPTOR): case (NODE_REFENTRYTITLE): case (NODE_REFNAME): case (NODE_REFPURPOSE): case (NODE_SYNOPSIS): case (NODE_TERM): case (NODE_TITLE): case (NODE_ULINK): return(1); default: break; } return(0); case (NODE_MANVOLNUM): switch (parent) { case (NODE_CITEREFENTRY): case (NODE_REFMETA): return(1); default: break; } return(0); case (NODE_OPTION): switch (parent) { case (NODE_ARG): case (NODE_EMPHASIS): case (NODE_FUNCSYNOPSISINFO): case (NODE_LINK): case (NODE_PARA): case (NODE_PROGRAMLISTING): case (NODE_REFDESCRIPTOR): case (NODE_REFENTRYTITLE): case (NODE_REFNAME): case (NODE_REFPURPOSE): case (NODE_SYNOPSIS): case (NODE_TERM): case (NODE_TITLE): case (NODE_ULINK): return(1); default: break; } return(0); case (NODE_ORDEREDLIST): switch (parent) { case (NODE_ITEMIZEDLIST): case (NODE_LISTITEM): case (NODE_ORDEREDLIST): case (NODE_PARA): case (NODE_REFSECT1): case (NODE_REFSECT2): case (NODE_REFSYNOPSISDIV): case (NODE_VARIABLELIST): return(1); default: break; } return(0); case (NODE_PARA): switch (parent) { case (NODE_ITEMIZEDLIST): case (NODE_LISTITEM): case (NODE_ORDEREDLIST): case (NODE_REFSECT1): case (NODE_REFSECT2): case (NODE_REFSYNOPSISDIV): case (NODE_VARIABLELIST): return(1); default: break; } return(0); case (NODE_PARAMDEF): return(NODE_FUNCPROTOTYPE == parent); case (NODE_PARAMETER): switch (parent) { case (NODE_CODE): case (NODE_FUNCSYNOPSISINFO): case (NODE_LINK): case (NODE_PARA): case (NODE_PARAMDEF): case (NODE_PROGRAMLISTING): case (NODE_REFDESCRIPTOR): case (NODE_REFENTRYTITLE): case (NODE_REFNAME): case (NODE_REFPURPOSE): case (NODE_SYNOPSIS): case (NODE_TERM): case (NODE_TITLE): case (NODE_ULINK): return(1); default: break; } return(0); case (NODE_PROGRAMLISTING): switch (parent) { case (NODE_ITEMIZEDLIST): case (NODE_LISTITEM): case (NODE_ORDEREDLIST): case (NODE_PARA): case (NODE_REFSECT1): case (NODE_REFSECT2): case (NODE_REFSYNOPSISDIV): return(1); default: break; } return(0); case (NODE_REFCLASS): return(parent == NODE_REFNAMEDIV); case (NODE_REFDESCRIPTOR): return(parent == NODE_REFNAMEDIV); case (NODE_REFENTRY): return(parent == NODE_ROOT); case (NODE_REFENTRYINFO): return(parent == NODE_REFENTRY); case (NODE_REFENTRYTITLE): switch (parent) { case (NODE_CITEREFENTRY): case (NODE_REFMETA): return(1); default: break; } case (NODE_REFMETA): return(parent == NODE_REFENTRY); case (NODE_REFMISCINFO): return(parent == NODE_REFMETA); case (NODE_REFNAME): return(parent == NODE_REFNAMEDIV); case (NODE_REFNAMEDIV): return(parent == NODE_REFENTRY); case (NODE_REFPURPOSE): return(parent == NODE_REFNAMEDIV); case (NODE_REFSECT1): return(parent == NODE_REFENTRY); case (NODE_REFSECT2): switch (parent) { case (NODE_REFSYNOPSISDIV): case (NODE_REFSECT1): return(1); default: break; } return(0); case (NODE_REFSYNOPSISDIV): return(parent == NODE_REFENTRY); case (NODE_REPLACEABLE): switch (parent) { case (NODE_ACRONYM): case (NODE_ARG): case (NODE_CODE): case (NODE_COMMAND): case (NODE_EMPHASIS): case (NODE_ENVAR): case (NODE_FILENAME): case (NODE_FUNCDEF): case (NODE_FUNCSYNOPSISINFO): case (NODE_FUNCTION): case (NODE_LINK): case (NODE_LITERAL): case (NODE_MANVOLNUM): case (NODE_OPTION): case (NODE_PARA): case (NODE_PARAMDEF): case (NODE_PARAMETER): case (NODE_PROGRAMLISTING): case (NODE_REFDESCRIPTOR): case (NODE_REFENTRYTITLE): case (NODE_REFMISCINFO): case (NODE_REFNAME): case (NODE_REFPURPOSE): case (NODE_REPLACEABLE): case (NODE_SYNOPSIS): case (NODE_TERM): case (NODE_TITLE): case (NODE_ULINK): default: return(1); } return(0); case (NODE_SBR): switch (parent) { case (NODE_ARG): case (NODE_CMDSYNOPSIS): return(1); default: break; } return(0); case (NODE_STRUCTNAME): switch (parent) { case (NODE_CODE): case (NODE_FUNCSYNOPSISINFO): case (NODE_FUNCTION): case (NODE_OPTION): case (NODE_PARA): case (NODE_PARAMETER): case (NODE_PROGRAMLISTING): case (NODE_REFDESCRIPTOR): case (NODE_REFENTRYTITLE): case (NODE_REFNAME): case (NODE_REFPURPOSE): case (NODE_SYNOPSIS): case (NODE_TITLE): return(1); default: break; } return(0); case (NODE_SYNOPSIS): switch (parent) { case (NODE_ITEMIZEDLIST): case (NODE_LISTITEM): case (NODE_ORDEREDLIST): case (NODE_REFSYNOPSISDIV): case (NODE_REFSECT1): case (NODE_REFSECT2): return(1); default: break; } return(0); case (NODE_TITLE): switch (parent) { case (NODE_ITEMIZEDLIST): case (NODE_ORDEREDLIST): case (NODE_REFENTRYINFO): case (NODE_REFSECT1): case (NODE_REFSECT2): case (NODE_REFSYNOPSISDIV): case (NODE_VARIABLELIST): return(1); default: break; } return(0); case (NODE_TERM): return(NODE_VARLISTENTRY == parent); case (NODE_TEXT): return(1); case (NODE_VARIABLELIST): switch (parent) { case (NODE_ITEMIZEDLIST): case (NODE_ORDEREDLIST): case (NODE_PARA): case (NODE_REFSECT1): case (NODE_REFSECT2): case (NODE_REFSYNOPSISDIV): case (NODE_VARIABLELIST): return(1); default: break; } return(0); case (NODE_VARLISTENTRY): return (NODE_VARIABLELIST == parent); case (NODE__MAX): break; } abort(); return(0); }