1#ifndef LIBRARIES_EXPAT_H 2#define LIBRARIES_EXPAT_H 3 4/* 5** Copyright (c) 2001-2007 Expat maintainers. 6** 7** Permission is hereby granted, free of charge, to any person obtaining 8** a copy of this software and associated documentation files (the 9** "Software"), to deal in the Software without restriction, including 10** without limitation the rights to use, copy, modify, merge, publish, 11** distribute, sublicense, and/or sell copies of the Software, and to 12** permit persons to whom the Software is furnished to do so, subject to 13** the following conditions: 14** 15** The above copyright notice and this permission notice shall be included 16** in all copies or substantial portions of the Software. 17** 18** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 22** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25*/ 26 27 28/****************************************************************************/ 29 30#ifdef __cplusplus 31extern "C" { 32#endif 33 34#ifdef __GNUC__ 35 #ifdef __PPC__ 36 #pragma pack(2) 37 #endif 38#elif defined(__VBCC__) 39 #pragma amiga-align 40#endif 41 42/****************************************************************************/ 43 44 45#include <stdlib.h> 46 47#ifndef XMLCALL 48#define XMLCALL 49#endif 50 51typedef char XML_Char; 52typedef char XML_LChar; 53typedef long XML_Index; 54typedef unsigned long XML_Size; 55 56struct XML_ParserStruct; 57typedef struct XML_ParserStruct *XML_Parser; 58 59typedef unsigned char XML_Bool; 60#define XML_TRUE ((XML_Bool) 1) 61#define XML_FALSE ((XML_Bool) 0) 62 63enum XML_Status { 64 XML_STATUS_ERROR = 0, 65#define XML_STATUS_ERROR XML_STATUS_ERROR 66 XML_STATUS_OK = 1, 67#define XML_STATUS_OK XML_STATUS_OK 68 XML_STATUS_SUSPENDED = 2, 69#define XML_STATUS_SUSPENDED XML_STATUS_SUSPENDED 70}; 71 72enum XML_Error { 73 XML_ERROR_NONE, 74 XML_ERROR_NO_MEMORY, 75 XML_ERROR_SYNTAX, 76 XML_ERROR_NO_ELEMENTS, 77 XML_ERROR_INVALID_TOKEN, 78 XML_ERROR_UNCLOSED_TOKEN, 79 XML_ERROR_PARTIAL_CHAR, 80 XML_ERROR_TAG_MISMATCH, 81 XML_ERROR_DUPLICATE_ATTRIBUTE, 82 XML_ERROR_JUNK_AFTER_DOC_ELEMENT, 83 XML_ERROR_PARAM_ENTITY_REF, 84 XML_ERROR_UNDEFINED_ENTITY, 85 XML_ERROR_RECURSIVE_ENTITY_REF, 86 XML_ERROR_ASYNC_ENTITY, 87 XML_ERROR_BAD_CHAR_REF, 88 XML_ERROR_BINARY_ENTITY_REF, 89 XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, 90 XML_ERROR_MISPLACED_XML_PI, 91 XML_ERROR_UNKNOWN_ENCODING, 92 XML_ERROR_INCORRECT_ENCODING, 93 XML_ERROR_UNCLOSED_CDATA_SECTION, 94 XML_ERROR_EXTERNAL_ENTITY_HANDLING, 95 XML_ERROR_NOT_STANDALONE, 96 XML_ERROR_UNEXPECTED_STATE, 97 XML_ERROR_ENTITY_DECLARED_IN_PE, 98 XML_ERROR_FEATURE_REQUIRES_XML_DTD, 99 XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING, 100 XML_ERROR_UNBOUND_PREFIX, 101 XML_ERROR_UNDECLARING_PREFIX, 102 XML_ERROR_INCOMPLETE_PE, 103 XML_ERROR_XML_DECL, 104 XML_ERROR_TEXT_DECL, 105 XML_ERROR_PUBLICID, 106 XML_ERROR_SUSPENDED, 107 XML_ERROR_NOT_SUSPENDED, 108 XML_ERROR_ABORTED, 109 XML_ERROR_FINISHED, 110 XML_ERROR_SUSPEND_PE, 111 XML_ERROR_RESERVED_PREFIX_XML, 112 XML_ERROR_RESERVED_PREFIX_XMLNS, 113 XML_ERROR_RESERVED_NAMESPACE_URI 114}; 115 116enum XML_Content_Type { 117 XML_CTYPE_EMPTY = 1, 118 XML_CTYPE_ANY, 119 XML_CTYPE_MIXED, 120 XML_CTYPE_NAME, 121 XML_CTYPE_CHOICE, 122 XML_CTYPE_SEQ 123}; 124 125enum XML_Content_Quant { 126 XML_CQUANT_NONE, 127 XML_CQUANT_OPT, 128 XML_CQUANT_REP, 129 XML_CQUANT_PLUS 130}; 131 132typedef struct XML_cp XML_Content; 133 134struct XML_cp { 135 enum XML_Content_Type type; 136 enum XML_Content_Quant quant; 137 XML_Char * name; 138 unsigned int numchildren; 139 XML_Content * children; 140}; 141 142 143typedef void (*XML_ElementDeclHandler) (void *userData, 144 const XML_Char *name, 145 XML_Content *model); 146 147void 148XML_SetElementDeclHandler(XML_Parser parser, 149 XML_ElementDeclHandler eldecl); 150 151typedef void (*XML_AttlistDeclHandler) ( 152 void *userData, 153 const XML_Char *elname, 154 const XML_Char *attname, 155 const XML_Char *att_type, 156 const XML_Char *dflt, 157 int isrequired); 158 159void 160XML_SetAttlistDeclHandler(XML_Parser parser, 161 XML_AttlistDeclHandler attdecl); 162 163typedef void (*XML_XmlDeclHandler) (void *userData, 164 const XML_Char *version, 165 const XML_Char *encoding, 166 int standalone); 167 168void 169XML_SetXmlDeclHandler(XML_Parser parser, 170 XML_XmlDeclHandler xmldecl); 171 172 173typedef struct { 174 void *(*malloc_fcn)(size_t size); 175 void *(*realloc_fcn)(void *ptr, size_t size); 176 void (*free_fcn)(void *ptr); 177} XML_Memory_Handling_Suite; 178 179XML_Parser 180XML_ParserCreate(const XML_Char *encoding); 181 182XML_Parser 183XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator); 184 185 186XML_Parser 187XML_ParserCreate_MM(const XML_Char *encoding, 188 const XML_Memory_Handling_Suite *memsuite, 189 const XML_Char *namespaceSeparator); 190 191XML_Bool 192XML_ParserReset(XML_Parser parser, const XML_Char *encoding); 193 194typedef void (*XML_StartElementHandler) (void *userData, 195 const XML_Char *name, 196 const XML_Char **atts); 197 198typedef void (*XML_EndElementHandler) (void *userData, 199 const XML_Char *name); 200 201 202typedef void (*XML_CharacterDataHandler) (void *userData, 203 const XML_Char *s, 204 int len); 205 206typedef void (*XML_ProcessingInstructionHandler) ( 207 void *userData, 208 const XML_Char *target, 209 const XML_Char *data); 210 211typedef void (*XML_CommentHandler) (void *userData, 212 const XML_Char *data); 213 214typedef void (*XML_StartCdataSectionHandler) (void *userData); 215typedef void (*XML_EndCdataSectionHandler) (void *userData); 216 217typedef void (*XML_DefaultHandler) (void *userData, 218 const XML_Char *s, 219 int len); 220 221typedef void (*XML_StartDoctypeDeclHandler) ( 222 void *userData, 223 const XML_Char *doctypeName, 224 const XML_Char *sysid, 225 const XML_Char *pubid, 226 int has_internal_subset); 227 228typedef void (*XML_EndDoctypeDeclHandler)(void *userData); 229 230typedef void (*XML_EntityDeclHandler) ( 231 void *userData, 232 const XML_Char *entityName, 233 int is_parameter_entity, 234 const XML_Char *value, 235 int value_length, 236 const XML_Char *base, 237 const XML_Char *systemId, 238 const XML_Char *publicId, 239 const XML_Char *notationName); 240 241void 242XML_SetEntityDeclHandler(XML_Parser parser, 243 XML_EntityDeclHandler handler); 244 245typedef void (*XML_UnparsedEntityDeclHandler) ( 246 void *userData, 247 const XML_Char *entityName, 248 const XML_Char *base, 249 const XML_Char *systemId, 250 const XML_Char *publicId, 251 const XML_Char *notationName); 252 253typedef void (*XML_NotationDeclHandler) ( 254 void *userData, 255 const XML_Char *notationName, 256 const XML_Char *base, 257 const XML_Char *systemId, 258 const XML_Char *publicId); 259 260typedef void (*XML_StartNamespaceDeclHandler) ( 261 void *userData, 262 const XML_Char *prefix, 263 const XML_Char *uri); 264 265typedef void (*XML_EndNamespaceDeclHandler) ( 266 void *userData, 267 const XML_Char *prefix); 268 269typedef int (*XML_NotStandaloneHandler) (void *userData); 270 271typedef int (*XML_ExternalEntityRefHandler) ( 272 XML_Parser parser, 273 const XML_Char *context, 274 const XML_Char *base, 275 const XML_Char *systemId, 276 const XML_Char *publicId); 277 278typedef void (*XML_SkippedEntityHandler) ( 279 void *userData, 280 const XML_Char *entityName, 281 int is_parameter_entity); 282 283typedef struct { 284 int map[256]; 285 void *data; 286 int (*convert)(void *data, const char *s); 287 void (*release)(void *data); 288} XML_Encoding; 289 290typedef int (*XML_UnknownEncodingHandler) ( 291 void *encodingHandlerData, 292 const XML_Char *name, 293 XML_Encoding *info); 294 295void 296XML_SetElementHandler(XML_Parser parser, 297 XML_StartElementHandler start, 298 XML_EndElementHandler end); 299 300void 301XML_SetStartElementHandler(XML_Parser parser, 302 XML_StartElementHandler handler); 303 304void 305XML_SetEndElementHandler(XML_Parser parser, 306 XML_EndElementHandler handler); 307 308void 309XML_SetCharacterDataHandler(XML_Parser parser, 310 XML_CharacterDataHandler handler); 311 312void 313XML_SetProcessingInstructionHandler(XML_Parser parser, 314 XML_ProcessingInstructionHandler handler); 315void 316XML_SetCommentHandler(XML_Parser parser, 317 XML_CommentHandler handler); 318 319void 320XML_SetCdataSectionHandler(XML_Parser parser, 321 XML_StartCdataSectionHandler start, 322 XML_EndCdataSectionHandler end); 323 324void 325XML_SetStartCdataSectionHandler(XML_Parser parser, 326 XML_StartCdataSectionHandler start); 327 328void 329XML_SetEndCdataSectionHandler(XML_Parser parser, 330 XML_EndCdataSectionHandler end); 331 332void 333XML_SetDefaultHandler(XML_Parser parser, 334 XML_DefaultHandler handler); 335 336void 337XML_SetDefaultHandlerExpand(XML_Parser parser, 338 XML_DefaultHandler handler); 339 340void 341XML_SetDoctypeDeclHandler(XML_Parser parser, 342 XML_StartDoctypeDeclHandler start, 343 XML_EndDoctypeDeclHandler end); 344 345void 346XML_SetStartDoctypeDeclHandler(XML_Parser parser, 347 XML_StartDoctypeDeclHandler start); 348 349void 350XML_SetEndDoctypeDeclHandler(XML_Parser parser, 351 XML_EndDoctypeDeclHandler end); 352 353void 354XML_SetUnparsedEntityDeclHandler(XML_Parser parser, 355 XML_UnparsedEntityDeclHandler handler); 356 357void 358XML_SetNotationDeclHandler(XML_Parser parser, 359 XML_NotationDeclHandler handler); 360 361void 362XML_SetNamespaceDeclHandler(XML_Parser parser, 363 XML_StartNamespaceDeclHandler start, 364 XML_EndNamespaceDeclHandler end); 365 366void 367XML_SetStartNamespaceDeclHandler(XML_Parser parser, 368 XML_StartNamespaceDeclHandler start); 369 370void 371XML_SetEndNamespaceDeclHandler(XML_Parser parser, 372 XML_EndNamespaceDeclHandler end); 373 374void 375XML_SetNotStandaloneHandler(XML_Parser parser, 376 XML_NotStandaloneHandler handler); 377 378void 379XML_SetExternalEntityRefHandler(XML_Parser parser, 380 XML_ExternalEntityRefHandler handler); 381 382void 383XML_SetExternalEntityRefHandlerArg(XML_Parser parser, 384 void *arg); 385 386void 387XML_SetSkippedEntityHandler(XML_Parser parser, 388 XML_SkippedEntityHandler handler); 389 390void 391XML_SetUnknownEncodingHandler(XML_Parser parser, 392 XML_UnknownEncodingHandler handler, 393 void *encodingHandlerData); 394 395void 396XML_DefaultCurrent(XML_Parser parser); 397 398void 399XML_SetReturnNSTriplet(XML_Parser parser, int do_nst); 400 401void 402XML_SetUserData(XML_Parser parser, void *userData); 403 404#define XML_GetUserData(parser) (*(void **)(parser)) 405 406enum XML_Status 407XML_SetEncoding(XML_Parser parser, const XML_Char *encoding); 408 409void 410XML_UseParserAsHandlerArg(XML_Parser parser); 411 412enum XML_Error 413XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD); 414 415 416enum XML_Status 417XML_SetBase(XML_Parser parser, const XML_Char *base); 418 419const XML_Char * 420XML_GetBase(XML_Parser parser); 421 422int 423XML_GetSpecifiedAttributeCount(XML_Parser parser); 424 425int 426XML_GetIdAttributeIndex(XML_Parser parser); 427 428enum XML_Status 429XML_Parse(XML_Parser parser, const char *s, int len, int isFinal); 430 431void * 432XML_GetBuffer(XML_Parser parser, int len); 433 434enum XML_Status 435XML_ParseBuffer(XML_Parser parser, int len, int isFinal); 436 437enum XML_Status 438XML_StopParser(XML_Parser parser, XML_Bool resumable); 439 440enum XML_Status 441XML_ResumeParser(XML_Parser parser); 442 443enum XML_Parsing { 444 XML_INITIALIZED, 445 XML_PARSING, 446 XML_FINISHED, 447 XML_SUSPENDED 448}; 449 450typedef struct { 451 enum XML_Parsing parsing; 452 XML_Bool finalBuffer; 453} XML_ParsingStatus; 454 455void 456XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status); 457 458XML_Parser 459XML_ExternalEntityParserCreate(XML_Parser parser, 460 const XML_Char *context, 461 const XML_Char *encoding); 462 463enum XML_ParamEntityParsing { 464 XML_PARAM_ENTITY_PARSING_NEVER, 465 XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE, 466 XML_PARAM_ENTITY_PARSING_ALWAYS 467}; 468 469int 470XML_SetParamEntityParsing(XML_Parser parser, 471 enum XML_ParamEntityParsing parsing); 472 473enum XML_Error 474XML_GetErrorCode(XML_Parser parser); 475 476int XML_GetCurrentLineNumber(XML_Parser parser); 477int XML_GetCurrentColumnNumber(XML_Parser parser); 478long XML_GetCurrentByteIndex(XML_Parser parser); 479 480int 481XML_GetCurrentByteCount(XML_Parser parser); 482 483const char * 484XML_GetInputContext(XML_Parser parser, 485 int *offset, 486 int *size); 487 488#define XML_GetErrorLineNumber XML_GetCurrentLineNumber 489#define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber 490#define XML_GetErrorByteIndex XML_GetCurrentByteIndex 491 492void 493XML_FreeContentModel(XML_Parser parser, XML_Content *model); 494 495void * 496XML_MemMalloc(XML_Parser parser, size_t size); 497 498void * 499XML_MemRealloc(XML_Parser parser, void *ptr, size_t size); 500 501void 502XML_MemFree(XML_Parser parser, void *ptr); 503 504void 505XML_ParserFree(XML_Parser parser); 506 507const XML_LChar * 508XML_ErrorString(enum XML_Error code); 509 510const XML_LChar * 511XML_ExpatVersion(void); 512 513typedef struct { 514 int major; 515 int minor; 516 int micro; 517} XML_Expat_Version; 518 519XML_Expat_Version 520XML_ExpatVersionInfo(void); 521 522enum XML_FeatureEnum { 523 XML_FEATURE_END = 0, 524 XML_FEATURE_UNICODE, 525 XML_FEATURE_UNICODE_WCHAR_T, 526 XML_FEATURE_DTD, 527 XML_FEATURE_CONTEXT_BYTES, 528 XML_FEATURE_MIN_SIZE, 529 XML_FEATURE_SIZEOF_XML_CHAR, 530 XML_FEATURE_SIZEOF_XML_LCHAR, 531 XML_FEATURE_NS, 532 XML_FEATURE_LARGE_SIZE 533}; 534 535typedef struct { 536 enum XML_FeatureEnum feature; 537 const XML_LChar *name; 538 long int value; 539} XML_Feature; 540 541const XML_Feature * 542XML_GetFeatureList(void); 543 544 545#define XML_MAJOR_VERSION 2 546#define XML_MINOR_VERSION 0 547#define XML_MICRO_VERSION 1 548 549 550/****************************************************************************/ 551 552#ifdef __GNUC__ 553 #ifdef __PPC__ 554 #pragma pack() 555 #endif 556#elif defined(__VBCC__) 557 #pragma default-align 558#endif 559 560#ifdef __cplusplus 561} 562#endif 563 564/****************************************************************************/ 565 566#endif /* EXPAT_EXPAT_H */ 567