[BACK]Return to rules.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / docbook2mdoc

File: [cvsweb.bsd.lv] / docbook2mdoc / Attic / rules.c (download)

Revision 1.7, Sun Mar 30 16:57:06 2014 UTC (10 years, 1 month ago) by kristaps
Branch: MAIN
Changes since 1.6: +17 -0 lines

Add <refsect2>.

#include <stdlib.h>

#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_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_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_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_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_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_ARG):
		case (NODE_CODE):
		case (NODE_COMMAND):
		case (NODE_EMPHASIS):
		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_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_PARA):
		switch (parent) {
		case (NODE_ITEMIZEDLIST):
		case (NODE_LISTITEM):
		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_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_ARG):
		case (NODE_CODE):
		case (NODE_COMMAND):
		case (NODE_EMPHASIS):
		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_REFSYNOPSISDIV):
		case (NODE_REFSECT1):
		case (NODE_REFSECT2):
			return(1);
		default:
			break;
		}
		return(0);
	case (NODE_TITLE):
		switch (parent) {
		case (NODE_ITEMIZEDLIST):
		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_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);
}