1/*
2 * Summary: interface for the XML entities handling
3 * Description: this module provides some of the entity API needed
4 *              for the parser and applications.
5 *
6 * Copy: See Copyright for the status of this software.
7 *
8 * Author: Daniel Veillard
9 */
10
11#ifndef __XML_ENTITIES_H__
12#define __XML_ENTITIES_H__
13
14#include <libxml/xmlversion.h>
15#include <libxml/tree.h>
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
21/*
22 * The different valid entity types.
23 */
24typedef enum {
25    XML_INTERNAL_GENERAL_ENTITY = 1,
26    XML_EXTERNAL_GENERAL_PARSED_ENTITY = 2,
27    XML_EXTERNAL_GENERAL_UNPARSED_ENTITY = 3,
28    XML_INTERNAL_PARAMETER_ENTITY = 4,
29    XML_EXTERNAL_PARAMETER_ENTITY = 5,
30    XML_INTERNAL_PREDEFINED_ENTITY = 6
31} xmlEntityType;
32
33/*
34 * An unit of storage for an entity, contains the string, the value
35 * and the linkind data needed for the linking in the hash table.
36 */
37
38struct _xmlEntity {
39    void           *_private;	        /* application data */
40    xmlElementType          type;       /* XML_ENTITY_DECL, must be second ! */
41    const xmlChar          *name;	/* Entity name */
42    struct _xmlNode    *children;	/* First child link */
43    struct _xmlNode        *last;	/* Last child link */
44    struct _xmlDtd       *parent;	/* -> DTD */
45    struct _xmlNode        *next;	/* next sibling link  */
46    struct _xmlNode        *prev;	/* previous sibling link  */
47    struct _xmlDoc          *doc;       /* the containing document */
48
49    xmlChar                *orig;	/* content without ref substitution */
50    xmlChar             *content;	/* content or ndata if unparsed */
51    int                   length;	/* the content length */
52    xmlEntityType          etype;	/* The entity type */
53    const xmlChar    *ExternalID;	/* External identifier for PUBLIC */
54    const xmlChar      *SystemID;	/* URI for a SYSTEM or PUBLIC Entity */
55
56    struct _xmlEntity     *nexte;	/* unused */
57    const xmlChar           *URI;	/* the full URI as computed */
58    int                    owner;	/* does the entity own the childrens */
59    int			 checked;	/* was the entity content checked */
60					/* this is also used to count entites
61					 * references done from that entity */
62};
63
64/*
65 * All entities are stored in an hash table.
66 * There is 2 separate hash tables for global and parameter entities.
67 */
68
69typedef struct _xmlHashTable xmlEntitiesTable;
70typedef xmlEntitiesTable *xmlEntitiesTablePtr;
71
72/*
73 * External functions:
74 */
75
76#ifdef LIBXML_LEGACY_ENABLED
77XMLPUBFUN void XMLCALL
78		xmlInitializePredefinedEntities	(void);
79#endif /* LIBXML_LEGACY_ENABLED */
80
81XMLPUBFUN xmlEntityPtr XMLCALL
82			xmlNewEntity		(xmlDocPtr doc,
83						 const xmlChar *name,
84						 int type,
85						 const xmlChar *ExternalID,
86						 const xmlChar *SystemID,
87						 const xmlChar *content);
88XMLPUBFUN xmlEntityPtr XMLCALL
89			xmlAddDocEntity		(xmlDocPtr doc,
90						 const xmlChar *name,
91						 int type,
92						 const xmlChar *ExternalID,
93						 const xmlChar *SystemID,
94						 const xmlChar *content);
95XMLPUBFUN xmlEntityPtr XMLCALL
96			xmlAddDtdEntity		(xmlDocPtr doc,
97						 const xmlChar *name,
98						 int type,
99						 const xmlChar *ExternalID,
100						 const xmlChar *SystemID,
101						 const xmlChar *content);
102XMLPUBFUN xmlEntityPtr XMLCALL
103			xmlGetPredefinedEntity	(const xmlChar *name);
104XMLPUBFUN xmlEntityPtr XMLCALL
105			xmlGetDocEntity		(xmlDocPtr doc,
106						 const xmlChar *name);
107XMLPUBFUN xmlEntityPtr XMLCALL
108			xmlGetDtdEntity		(xmlDocPtr doc,
109						 const xmlChar *name);
110XMLPUBFUN xmlEntityPtr XMLCALL
111			xmlGetParameterEntity	(xmlDocPtr doc,
112						 const xmlChar *name);
113#ifdef LIBXML_LEGACY_ENABLED
114XMLPUBFUN const xmlChar * XMLCALL
115			xmlEncodeEntities	(xmlDocPtr doc,
116						 const xmlChar *input);
117#endif /* LIBXML_LEGACY_ENABLED */
118XMLPUBFUN xmlChar * XMLCALL
119			xmlEncodeEntitiesReentrant(xmlDocPtr doc,
120						 const xmlChar *input);
121XMLPUBFUN xmlChar * XMLCALL
122			xmlEncodeSpecialChars	(xmlDocPtr doc,
123						 const xmlChar *input);
124XMLPUBFUN xmlEntitiesTablePtr XMLCALL
125			xmlCreateEntitiesTable	(void);
126#ifdef LIBXML_TREE_ENABLED
127XMLPUBFUN xmlEntitiesTablePtr XMLCALL
128			xmlCopyEntitiesTable	(xmlEntitiesTablePtr table);
129#endif /* LIBXML_TREE_ENABLED */
130XMLPUBFUN void XMLCALL
131			xmlFreeEntitiesTable	(xmlEntitiesTablePtr table);
132#ifdef LIBXML_OUTPUT_ENABLED
133XMLPUBFUN void XMLCALL
134			xmlDumpEntitiesTable	(xmlBufferPtr buf,
135						 xmlEntitiesTablePtr table);
136XMLPUBFUN void XMLCALL
137			xmlDumpEntityDecl	(xmlBufferPtr buf,
138						 xmlEntityPtr ent);
139#endif /* LIBXML_OUTPUT_ENABLED */
140#ifdef LIBXML_LEGACY_ENABLED
141XMLPUBFUN void XMLCALL
142			xmlCleanupPredefinedEntities(void);
143#endif /* LIBXML_LEGACY_ENABLED */
144
145
146#ifdef __cplusplus
147}
148#endif
149
150# endif /* __XML_ENTITIES_H__ */
151