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
  18 extern "C" {
  19 #endif
  20 
  21 /*
  22  * The different valid entity types.
  23  */
  24 typedef 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 
  38 struct _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 
  69 typedef struct _xmlHashTable xmlEntitiesTable;
  70 typedef xmlEntitiesTable *xmlEntitiesTablePtr;
  71 
  72 /*
  73  * External functions:
  74  */
  75 
  76 #ifdef LIBXML_LEGACY_ENABLED
  77 XMLPUBFUN void XMLCALL
  78         xmlInitializePredefinedEntities (void);
  79 #endif /* LIBXML_LEGACY_ENABLED */
  80 
  81 XMLPUBFUN 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);
  88 XMLPUBFUN 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);
  95 XMLPUBFUN 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);
 102 XMLPUBFUN xmlEntityPtr XMLCALL
 103             xmlGetPredefinedEntity  (const xmlChar *name);
 104 XMLPUBFUN xmlEntityPtr XMLCALL
 105             xmlGetDocEntity     (xmlDocPtr doc,
 106                          const xmlChar *name);
 107 XMLPUBFUN xmlEntityPtr XMLCALL
 108             xmlGetDtdEntity     (xmlDocPtr doc,
 109                          const xmlChar *name);
 110 XMLPUBFUN xmlEntityPtr XMLCALL
 111             xmlGetParameterEntity   (xmlDocPtr doc,
 112                          const xmlChar *name);
 113 #ifdef LIBXML_LEGACY_ENABLED
 114 XMLPUBFUN const xmlChar * XMLCALL
 115             xmlEncodeEntities   (xmlDocPtr doc,
 116                          const xmlChar *input);
 117 #endif /* LIBXML_LEGACY_ENABLED */
 118 XMLPUBFUN xmlChar * XMLCALL
 119             xmlEncodeEntitiesReentrant(xmlDocPtr doc,
 120                          const xmlChar *input);
 121 XMLPUBFUN xmlChar * XMLCALL
 122             xmlEncodeSpecialChars   (xmlDocPtr doc,
 123                          const xmlChar *input);
 124 XMLPUBFUN xmlEntitiesTablePtr XMLCALL
 125             xmlCreateEntitiesTable  (void);
 126 #ifdef LIBXML_TREE_ENABLED
 127 XMLPUBFUN xmlEntitiesTablePtr XMLCALL
 128             xmlCopyEntitiesTable    (xmlEntitiesTablePtr table);
 129 #endif /* LIBXML_TREE_ENABLED */
 130 XMLPUBFUN void XMLCALL
 131             xmlFreeEntitiesTable    (xmlEntitiesTablePtr table);
 132 #ifdef LIBXML_OUTPUT_ENABLED
 133 XMLPUBFUN void XMLCALL
 134             xmlDumpEntitiesTable    (xmlBufferPtr buf,
 135                          xmlEntitiesTablePtr table);
 136 XMLPUBFUN void XMLCALL
 137             xmlDumpEntityDecl   (xmlBufferPtr buf,
 138                          xmlEntityPtr ent);
 139 #endif /* LIBXML_OUTPUT_ENABLED */
 140 #ifdef LIBXML_LEGACY_ENABLED
 141 XMLPUBFUN void XMLCALL
 142             xmlCleanupPredefinedEntities(void);
 143 #endif /* LIBXML_LEGACY_ENABLED */
 144 
 145 
 146 #ifdef __cplusplus
 147 }
 148 #endif
 149 
 150 # endif /* __XML_ENTITIES_H__ */