#ifndef __CR_NODE_IFACE_H__
#define __CR_NODE_IFACE_H__

#include <glib/gmacros.h>
#include <glib/gtypes.h>

G_BEGIN_DECLS

typedef gconstpointer CRXMLNodePtr ;
typedef struct _CRNodeIface CRNodeIface ;

struct _CRNodeIface {
	/* Names based on DOM. */
	CRXMLNodePtr (*getParentNode)(CRXMLNodePtr);
	CRXMLNodePtr (*getFirstChild)(CRXMLNodePtr);
	CRXMLNodePtr (*getNextSibling)(CRXMLNodePtr);
	CRXMLNodePtr (*getPrevSibling)(CRXMLNodePtr);
	char const *(*getLocalName)(CRXMLNodePtr);
	char *(*getProp)(CRXMLNodePtr, char const *);

	/* Others. */
	void (*freePropVal)(void *);
	gboolean (*isElementNode)(CRXMLNodePtr);

#if 0
	char const *getLang(CRXMLNodePtr);
	/* todo: Make it easy to have the default xml rules for lang.  Maybe interpret NULL
	   like this.  Or provide a cr_get_xml_lang(CRNodeIface const *, CRXMLNodePtr) function. */
#endif
};

G_END_DECLS


#endif/*__CR_NODE_IFACE_H__*/
