/*====================================================================*
 *
 *   node.h - document node definitions and declarations;
 *
 *   Motley Tools by Charles Maier <cmaier@cmassoc.net>;
 *   Copyright 2001-2006 by Charles Maier Associates;
 *   Licensed under the Internet Software Consortium License;
 *
 *--------------------------------------------------------------------*/

#ifndef NODE_HEADER
#define NODE_HEADER

/*====================================================================*
 *   system headers;
 *--------------------------------------------------------------------*/

#include <unistd.h>
#include <stdint.h>

/*====================================================================*
 *   custom headers;
 *--------------------------------------------------------------------*/

#include "../tools/types.h"

/*====================================================================*
 *
 *--------------------------------------------------------------------*/

#define ISO_CHARSET "iso-8859-1"
#define ISO_CONTENT "text/html"

/*====================================================================*
 *
 *--------------------------------------------------------------------*/

#define W3C_STD "-//W3C//DTD XHTML 1.0 Strict//EN"
#define W3C_DTD "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"

/*====================================================================*
 *
 *--------------------------------------------------------------------*/

#define XML_VERSION "1.0"
#define XML_NAMESPACE "http://www.w3.org/2001/XMLSchema-instance"
#define XML_CHARSET ISO_CHARSET
#define XML_LANGUAGE "en-us"
#define XML_SCHEMA "http://www.w3.org/2001/XMLSchema"

/*====================================================================*
 *
 *--------------------------------------------------------------------*/

#define NODE_ELEM '<'
#define NODE_SGML '!'
#define NODE_INST '?'
#define NODE_ATTR ' '
#define NODE_VALU '='
#define NODE_ETAG '/'
#define NODE_DATA '>'

/*====================================================================*
 *
 *--------------------------------------------------------------------*/

#define DATA_SCHEMA "piboffset.xsd"
#define DATA_NAME "name"
#define DATA_TEXT "text"
#define DATA_OBJECT "pib"
#define DATA_MEMBER "object"
#define DATA_OFFSET "offset"
#define DATA_LENGTH "length"
#define DATA_STRUCT "array"
#define DATA_STRING "dataString"
#define DATA_MEMORY "dataHex"
#define DATA_HUGE "dataHuge"
#define DATA_LONG "dataLong"
#define DATA_WORD "dataWord"
#define DATA_BYTE "dataByte"

/*====================================================================*
 *   variables;
 *--------------------------------------------------------------------*/

typedef struct node

{
	struct node * above;
	struct node * prior;
	struct node * after;
	struct node * below;
	unsigned line;
	unsigned type;
	char * text;
}

NODE;

/*====================================================================*
 *   functions;
 *--------------------------------------------------------------------*/

char const * xmlselect (NODE const *, char const * element, char const * attribute);
signed xmlread (NODE *, char const * filename);
signed xmlscan (NODE *);
signed xmledit (NODE const *, void * memory, size_t extent);
NODE * xmlopen (char const * filename);
NODE * xmlnode (NODE *);
NODE const * xmlelement (NODE const *, char const * name);
NODE const * xmlattribute (NODE const *, char const * name);
NODE const * xmlvalue (NODE const *);
NODE const * xmldata (NODE const *);
void xmlschema ();
void xmltree (NODE const *);
void xmlfree (NODE *);

/*====================================================================*
 *
 *--------------------------------------------------------------------*/

#endif