1 /* libxml2 - Library for parsing XML documents 2 * Copyright (C) 2006-2019 Free Software Foundation, Inc. 3 * 4 * This file is not part of the GNU gettext program, but is used with 5 * GNU gettext. 6 * 7 * The original copyright notice is as follows: 8 */ 9 10 /* 11 * Copyright (C) 1998-2012 Daniel Veillard. All Rights Reserved. 12 * 13 * Permission is hereby granted, free of charge, to any person obtaining a copy 14 * of this software and associated documentation files (the "Software"), to deal 15 * in the Software without restriction, including without limitation the rights 16 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 17 * copies of the Software, and to permit persons to whom the Software is fur- 18 * nished to do so, subject to the following conditions: 19 * 20 * The above copyright notice and this permission notice shall be included in 21 * all copies or substantial portions of the Software. 22 * 23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 24 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT- 25 * NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 26 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 27 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 28 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 29 * THE SOFTWARE. 30 * 31 * Author: Daniel Veillard 32 */ 33 34 /* 35 * Summary: interface for the XML entities handling 36 * Description: this module provides some of the entity API needed 37 * for the parser and applications. 38 */ 39 40 #ifndef __XML_ENTITIES_H__ 41 #define __XML_ENTITIES_H__ 42 43 #include <libxml/xmlversion.h> 44 #include <libxml/tree.h> 45 46 #ifdef __cplusplus 47 extern "C" { 48 #endif 49 50 /* 51 * The different valid entity types. 52 */ 53 typedef enum { 54 XML_INTERNAL_GENERAL_ENTITY = 1, 55 XML_EXTERNAL_GENERAL_PARSED_ENTITY = 2, 56 XML_EXTERNAL_GENERAL_UNPARSED_ENTITY = 3, 57 XML_INTERNAL_PARAMETER_ENTITY = 4, 58 XML_EXTERNAL_PARAMETER_ENTITY = 5, 59 XML_INTERNAL_PREDEFINED_ENTITY = 6 60 } xmlEntityType; 61 62 /* 63 * An unit of storage for an entity, contains the string, the value 64 * and the linkind data needed for the linking in the hash table. 65 */ 66 67 struct _xmlEntity { 68 void *_private; /* application data */ 69 xmlElementType type; /* XML_ENTITY_DECL, must be second ! */ 70 const xmlChar *name; /* Entity name */ 71 struct _xmlNode *children; /* First child link */ 72 struct _xmlNode *last; /* Last child link */ 73 struct _xmlDtd *parent; /* -> DTD */ 74 struct _xmlNode *next; /* next sibling link */ 75 struct _xmlNode *prev; /* previous sibling link */ 76 struct _xmlDoc *doc; /* the containing document */ 77 78 xmlChar *orig; /* content without ref substitution */ 79 xmlChar *content; /* content or ndata if unparsed */ 80 int length; /* the content length */ 81 xmlEntityType etype; /* The entity type */ 82 const xmlChar *ExternalID; /* External identifier for PUBLIC */ 83 const xmlChar *SystemID; /* URI for a SYSTEM or PUBLIC Entity */ 84 85 struct _xmlEntity *nexte; /* unused */ 86 const xmlChar *URI; /* the full URI as computed */ 87 int owner; /* does the entity own the childrens */ 88 int checked; /* was the entity content checked */ 89 /* this is also used to count entities 90 * references done from that entity 91 * and if it contains '<' */ 92 }; 93 94 /* 95 * All entities are stored in an hash table. 96 * There is 2 separate hash tables for global and parameter entities. 97 */ 98 99 typedef struct _xmlHashTable xmlEntitiesTable; 100 typedef xmlEntitiesTable *xmlEntitiesTablePtr; 101 102 /* 103 * External functions: 104 */ 105 106 #ifdef LIBXML_LEGACY_ENABLED 107 XMLPUBFUN void XMLCALL 108 xmlInitializePredefinedEntities (void); 109 #endif /* LIBXML_LEGACY_ENABLED */ 110 111 XMLPUBFUN xmlEntityPtr XMLCALL 112 xmlNewEntity (xmlDocPtr doc, 113 const xmlChar *name, 114 int type, 115 const xmlChar *ExternalID, 116 const xmlChar *SystemID, 117 const xmlChar *content); 118 XMLPUBFUN xmlEntityPtr XMLCALL 119 xmlAddDocEntity (xmlDocPtr doc, 120 const xmlChar *name, 121 int type, 122 const xmlChar *ExternalID, 123 const xmlChar *SystemID, 124 const xmlChar *content); 125 XMLPUBFUN xmlEntityPtr XMLCALL 126 xmlAddDtdEntity (xmlDocPtr doc, 127 const xmlChar *name, 128 int type, 129 const xmlChar *ExternalID, 130 const xmlChar *SystemID, 131 const xmlChar *content); 132 XMLPUBFUN xmlEntityPtr XMLCALL 133 xmlGetPredefinedEntity (const xmlChar *name); 134 XMLPUBFUN xmlEntityPtr XMLCALL 135 xmlGetDocEntity (const xmlDoc *doc, 136 const xmlChar *name); 137 XMLPUBFUN xmlEntityPtr XMLCALL 138 xmlGetDtdEntity (xmlDocPtr doc, 139 const xmlChar *name); 140 XMLPUBFUN xmlEntityPtr XMLCALL 141 xmlGetParameterEntity (xmlDocPtr doc, 142 const xmlChar *name); 143 #ifdef LIBXML_LEGACY_ENABLED 144 XMLPUBFUN const xmlChar * XMLCALL 145 xmlEncodeEntities (xmlDocPtr doc, 146 const xmlChar *input); 147 #endif /* LIBXML_LEGACY_ENABLED */ 148 XMLPUBFUN xmlChar * XMLCALL 149 xmlEncodeEntitiesReentrant(xmlDocPtr doc, 150 const xmlChar *input); 151 XMLPUBFUN xmlChar * XMLCALL 152 xmlEncodeSpecialChars (const xmlDoc *doc, 153 const xmlChar *input); 154 XMLPUBFUN xmlEntitiesTablePtr XMLCALL 155 xmlCreateEntitiesTable (void); 156 #ifdef LIBXML_TREE_ENABLED 157 XMLPUBFUN xmlEntitiesTablePtr XMLCALL 158 xmlCopyEntitiesTable (xmlEntitiesTablePtr table); 159 #endif /* LIBXML_TREE_ENABLED */ 160 XMLPUBFUN void XMLCALL 161 xmlFreeEntitiesTable (xmlEntitiesTablePtr table); 162 #ifdef LIBXML_OUTPUT_ENABLED 163 XMLPUBFUN void XMLCALL 164 xmlDumpEntitiesTable (xmlBufferPtr buf, 165 xmlEntitiesTablePtr table); 166 XMLPUBFUN void XMLCALL 167 xmlDumpEntityDecl (xmlBufferPtr buf, 168 xmlEntityPtr ent); 169 #endif /* LIBXML_OUTPUT_ENABLED */ 170 #ifdef LIBXML_LEGACY_ENABLED 171 XMLPUBFUN void XMLCALL 172 xmlCleanupPredefinedEntities(void); 173 #endif /* LIBXML_LEGACY_ENABLED */ 174 175 176 #ifdef __cplusplus 177 } 178 #endif 179 180 # endif /* __XML_ENTITIES_H__ */ 181