blob: cefb97f780d5c2693cf14c4f6b7628c02af6de16 [file] [log] [blame]
rjw1f884582022-01-06 17:20:42 +08001/*
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__ */