/*
 * parserInternals.h : internals routines exported by the parser.
 *
 * See Copyright for the status of this software.
 *
 * Daniel.Veillard@w3.org
 */

#ifndef __XML_PARSER_INTERNALS_H__
#define __XML_PARSER_INTERNALS_H__

#include <libxml/parser.h>

#ifdef __cplusplus
extern "C" {
#endif

#define XML_MAX_NAMELEN 100

/************************************************************************
 *									*
 * UNICODE version of the macros.      					*
 *									*
 ************************************************************************/
/*
 * [2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD]
 *                  | [#x10000-#x10FFFF]
 * any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.
 */
#define IS_CHAR(c)							\
    (((c) == 0x09) || ((c) == 0x0A) || ((c) == 0x0D) ||			\
     (((c) >= 0x20) && ((c) <= 0xD7FF)) ||				\
     (((c) >= 0xE000) && ((c) <= 0xFFFD)) ||				\
     (((c) >= 0x10000) && ((c) <= 0x10FFFF)))

/*
 * [3] S ::= (#x20 | #x9 | #xD | #xA)+
 */
#define IS_BLANK(c) (((c) == 0x20) || ((c) == 0x09) || ((c) == 0xA) ||	\
                     ((c) == 0x0D))

/*
 * [85] BaseChar ::= ... long list see REC ...
 */
#define IS_BASECHAR(c) xmlIsBaseChar(c)

/*
 * [88] Digit ::= ... long list see REC ...
 */
#define IS_DIGIT(c) xmlIsDigit(c)

/*
 * [87] CombiningChar ::= ... long list see REC ...
 */
#define IS_COMBINING(c) xmlIsCombining(c)

/*
 * [89] Extender ::= #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 |
 *                   #x0E46 | #x0EC6 | #x3005 | [#x3031-#x3035] |
 *                   [#x309D-#x309E] | [#x30FC-#x30FE]
 */
#define IS_EXTENDER(c) xmlIsExtender(c)

/*
 * [86] Ideographic ::= [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]
 */
#define IS_IDEOGRAPHIC(c) xmlIsIdeographic(c)

/*
 * [84] Letter ::= BaseChar | Ideographic 
 */
#define IS_LETTER(c) (IS_BASECHAR(c) || IS_IDEOGRAPHIC(c))


/*
 * [13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]
 */
#define IS_PUBIDCHAR(c)	xmlIsPubidChar(c)

#define SKIP_EOL(p) 							\
    if (*(p) == 0x13) { p++ ; if (*(p) == 0x10) p++; }			\
    if (*(p) == 0x10) { p++ ; if (*(p) == 0x13) p++; }

#define MOVETO_ENDTAG(p)						\
    while ((*p) && (*(p) != '>')) (p)++

#define MOVETO_STARTTAG(p)						\
    while ((*p) && (*(p) != '<')) (p)++

/*
 * Function to finish teh work of the macros where needed
 */
int			xmlIsBaseChar	(int c);
int			xmlIsBlank	(int c);
int			xmlIsPubidChar	(int c);
int			xmlIsLetter	(int c);
int			xmlIsDigit	(int c);
int			xmlIsIdeographic(int c);
int			xmlIsCombining	(int c);
int			xmlIsExtender	(int c);
int			xmlIsCombining	(int c);
int			xmlIsChar	(int c);

/**
 * Not for the faint of heart
 */

extern int xmlParserDebugEntities;

/**
 * Parser context
 */
xmlParserCtxtPtr	xmlCreateDocParserCtxt	(xmlChar *cur);
xmlParserCtxtPtr	xmlCreateFileParserCtxt	(const char *filename);
xmlParserCtxtPtr	xmlCreateMemoryParserCtxt(char *buffer,
						 int size);
xmlParserCtxtPtr	xmlNewParserCtxt	(void);
xmlParserCtxtPtr	xmlCreateEntityParserCtxt(const xmlChar *URL,
						 const xmlChar *ID,
						 const xmlChar *base);
int			xmlSwitchEncoding	(xmlParserCtxtPtr ctxt,
						 xmlCharEncoding enc);
int			xmlSwitchToEncoding	(xmlParserCtxtPtr ctxt,
					     xmlCharEncodingHandlerPtr handler);
void			xmlFreeParserCtxt	(xmlParserCtxtPtr ctxt);

/**
 * Entities
 */
void			xmlHandleEntity		(xmlParserCtxtPtr ctxt,
						 xmlEntityPtr entity);

/**
 * Input Streams
 */
xmlParserInputPtr	xmlNewEntityInputStream	(xmlParserCtxtPtr ctxt,
						 xmlEntityPtr entity);
void			xmlPushInput		(xmlParserCtxtPtr ctxt,
						 xmlParserInputPtr input);
xmlChar			xmlPopInput		(xmlParserCtxtPtr ctxt);
void			xmlFreeInputStream	(xmlParserInputPtr input);
xmlParserInputPtr	xmlNewInputFromFile	(xmlParserCtxtPtr ctxt,
						 const char *filename);

/**
 * Namespaces.
 */
xmlChar *		xmlSplitQName		(xmlParserCtxtPtr ctxt,
						 const xmlChar *name,
						 xmlChar **prefix);
xmlChar *		xmlNamespaceParseNCName	(xmlParserCtxtPtr ctxt);
xmlChar *		xmlNamespaceParseQName	(xmlParserCtxtPtr ctxt,
						 xmlChar **prefix);
xmlChar *		xmlNamespaceParseNSDef	(xmlParserCtxtPtr ctxt);
xmlChar *		xmlParseQuotedString	(xmlParserCtxtPtr ctxt);
void			xmlParseNamespace	(xmlParserCtxtPtr ctxt);

/**
 * Generic production rules
 */
xmlChar *		xmlScanName		(xmlParserCtxtPtr ctxt);
xmlChar *		xmlParseName		(xmlParserCtxtPtr ctxt);
xmlChar *		xmlParseNmtoken		(xmlParserCtxtPtr ctxt);
xmlChar *		xmlParseEntityValue	(xmlParserCtxtPtr ctxt,
						 xmlChar **orig);
xmlChar *		xmlParseAttValue	(xmlParserCtxtPtr ctxt);
xmlChar *		xmlParseSystemLiteral	(xmlParserCtxtPtr ctxt);
xmlChar *		xmlParsePubidLiteral	(xmlParserCtxtPtr ctxt);
void			xmlParseCharData	(xmlParserCtxtPtr ctxt,
						 int cdata);
xmlChar *		xmlParseExternalID	(xmlParserCtxtPtr ctxt,
						 xmlChar **publicID,
						 int strict);
void			xmlParseComment		(xmlParserCtxtPtr ctxt);
xmlChar *		xmlParsePITarget	(xmlParserCtxtPtr ctxt);
void			xmlParsePI		(xmlParserCtxtPtr ctxt);
void			xmlParseNotationDecl	(xmlParserCtxtPtr ctxt);
void			xmlParseEntityDecl	(xmlParserCtxtPtr ctxt);
int			xmlParseDefaultDecl	(xmlParserCtxtPtr ctxt,
						 xmlChar **value);
xmlEnumerationPtr	xmlParseNotationType	(xmlParserCtxtPtr ctxt);
xmlEnumerationPtr	xmlParseEnumerationType	(xmlParserCtxtPtr ctxt);
int			xmlParseEnumeratedType	(xmlParserCtxtPtr ctxt,
						 xmlEnumerationPtr *tree);
int			xmlParseAttributeType	(xmlParserCtxtPtr ctxt,
						 xmlEnumerationPtr *tree);
void			xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt);
xmlElementContentPtr	xmlParseElementMixedContentDecl
						(xmlParserCtxtPtr ctxt);
xmlElementContentPtr	xmlParseElementChildrenContentDecl
						(xmlParserCtxtPtr ctxt);
int			xmlParseElementContentDecl(xmlParserCtxtPtr ctxt,
						 xmlChar *name,
						 xmlElementContentPtr *result);
int			xmlParseElementDecl	(xmlParserCtxtPtr ctxt);
void			xmlParseMarkupDecl	(xmlParserCtxtPtr ctxt);
int			xmlParseCharRef		(xmlParserCtxtPtr ctxt);
xmlEntityPtr		xmlParseEntityRef	(xmlParserCtxtPtr ctxt);
void			xmlParseReference	(xmlParserCtxtPtr ctxt);
void			xmlParsePEReference	(xmlParserCtxtPtr ctxt);
void			xmlParseDocTypeDecl	(xmlParserCtxtPtr ctxt);
xmlChar *		xmlParseAttribute	(xmlParserCtxtPtr ctxt,
						 xmlChar **value);
xmlChar *		xmlParseStartTag	(xmlParserCtxtPtr ctxt);
void			xmlParseEndTag		(xmlParserCtxtPtr ctxt);
void			xmlParseCDSect		(xmlParserCtxtPtr ctxt);
void			xmlParseContent		(xmlParserCtxtPtr ctxt);
void			xmlParseElement		(xmlParserCtxtPtr ctxt);
xmlChar *		xmlParseVersionNum	(xmlParserCtxtPtr ctxt);
xmlChar *		xmlParseVersionInfo	(xmlParserCtxtPtr ctxt);
xmlChar *		xmlParseEncName		(xmlParserCtxtPtr ctxt);
xmlChar *		xmlParseEncodingDecl	(xmlParserCtxtPtr ctxt);
int			xmlParseSDDecl		(xmlParserCtxtPtr ctxt);
void			xmlParseXMLDecl		(xmlParserCtxtPtr ctxt);
void			xmlParseTextDecl	(xmlParserCtxtPtr ctxt);
void			xmlParseMisc		(xmlParserCtxtPtr ctxt);
void			xmlParseExternalSubset	(xmlParserCtxtPtr ctxt,
						 const xmlChar *ExternalID,
						 const xmlChar *SystemID); 
/*
 * Entities substitution
 */
#define XML_SUBSTITUTE_NONE	0
#define XML_SUBSTITUTE_REF	1
#define XML_SUBSTITUTE_PEREF	2
#define XML_SUBSTITUTE_BOTH 	3

xmlChar *		xmlDecodeEntities	(xmlParserCtxtPtr ctxt,
						 int len,
						 int what,
						 xmlChar end,
						 xmlChar  end2,
						 xmlChar end3);
xmlChar *		xmlStringDecodeEntities	(xmlParserCtxtPtr ctxt,
						 const xmlChar *str,
						 int what,
						 xmlChar end,
						 xmlChar  end2,
						 xmlChar end3);

/*
 * Generated by MACROS on top of parser.c c.f. PUSH_AND_POP
 */
int			nodePush		(xmlParserCtxtPtr ctxt,
						 xmlNodePtr value);
xmlNodePtr		nodePop			(xmlParserCtxtPtr ctxt);
int			inputPush		(xmlParserCtxtPtr ctxt,
						 xmlParserInputPtr value);
xmlParserInputPtr	inputPop		(xmlParserCtxtPtr ctxt);

/*
 * Really core function shared with HTML parser
 */
int			xmlCurrentChar		(xmlParserCtxtPtr ctxt,
						 int *len);
int			xmlCopyChar		(int len,
						 xmlChar *out,
						 int val);
void			xmlNextChar		(xmlParserCtxtPtr ctxt);
void			xmlParserInputShrink	(xmlParserInputPtr in);
#ifdef __cplusplus
}
#endif
#endif /* __XML_PARSER_INTERNALS_H__ */
