1bd8f1dc3Sbluhm /* XML handler functions for the Expat test suite 2bd8f1dc3Sbluhm __ __ _ 3bd8f1dc3Sbluhm ___\ \/ /_ __ __ _| |_ 4bd8f1dc3Sbluhm / _ \\ /| '_ \ / _` | __| 5bd8f1dc3Sbluhm | __// \| |_) | (_| | |_ 6bd8f1dc3Sbluhm \___/_/\_\ .__/ \__,_|\__| 7bd8f1dc3Sbluhm |_| XML parser 8bd8f1dc3Sbluhm 9bd8f1dc3Sbluhm Copyright (c) 2001-2006 Fred L. Drake, Jr. <fdrake@users.sourceforge.net> 10bd8f1dc3Sbluhm Copyright (c) 2003 Greg Stein <gstein@users.sourceforge.net> 11bd8f1dc3Sbluhm Copyright (c) 2005-2007 Steven Solie <steven@solie.ca> 12bd8f1dc3Sbluhm Copyright (c) 2005-2012 Karl Waclawek <karl@waclawek.net> 13bd8f1dc3Sbluhm Copyright (c) 2016-2024 Sebastian Pipping <sebastian@pipping.org> 14bd8f1dc3Sbluhm Copyright (c) 2017-2022 Rhodri James <rhodri@wildebeest.org.uk> 15bd8f1dc3Sbluhm Copyright (c) 2017 Joe Orton <jorton@redhat.com> 16bd8f1dc3Sbluhm Copyright (c) 2017 José Gutiérrez de la Concha <jose@zeroc.com> 17bd8f1dc3Sbluhm Copyright (c) 2018 Marco Maggi <marco.maggi-ipsu@poste.it> 18bd8f1dc3Sbluhm Copyright (c) 2019 David Loffredo <loffredo@steptools.com> 19bd8f1dc3Sbluhm Copyright (c) 2020 Tim Gates <tim.gates@iress.com> 20bd8f1dc3Sbluhm Copyright (c) 2021 Donghee Na <donghee.na@python.org> 21bd8f1dc3Sbluhm Copyright (c) 2023 Sony Corporation / Snild Dolkow <snild@sony.com> 22bd8f1dc3Sbluhm Licensed under the MIT license: 23bd8f1dc3Sbluhm 24bd8f1dc3Sbluhm Permission is hereby granted, free of charge, to any person obtaining 25bd8f1dc3Sbluhm a copy of this software and associated documentation files (the 26bd8f1dc3Sbluhm "Software"), to deal in the Software without restriction, including 27bd8f1dc3Sbluhm without limitation the rights to use, copy, modify, merge, publish, 28bd8f1dc3Sbluhm distribute, sublicense, and/or sell copies of the Software, and to permit 29bd8f1dc3Sbluhm persons to whom the Software is furnished to do so, subject to the 30bd8f1dc3Sbluhm following conditions: 31bd8f1dc3Sbluhm 32bd8f1dc3Sbluhm The above copyright notice and this permission notice shall be included 33bd8f1dc3Sbluhm in all copies or substantial portions of the Software. 34bd8f1dc3Sbluhm 35bd8f1dc3Sbluhm THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 36bd8f1dc3Sbluhm EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 37bd8f1dc3Sbluhm MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 38bd8f1dc3Sbluhm NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 39bd8f1dc3Sbluhm DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 40bd8f1dc3Sbluhm OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 41bd8f1dc3Sbluhm USE OR OTHER DEALINGS IN THE SOFTWARE. 42bd8f1dc3Sbluhm */ 43bd8f1dc3Sbluhm 44bd8f1dc3Sbluhm #ifdef __cplusplus 45bd8f1dc3Sbluhm extern "C" { 46bd8f1dc3Sbluhm #endif 47bd8f1dc3Sbluhm 48bd8f1dc3Sbluhm #ifndef XML_HANDLERS_H 49bd8f1dc3Sbluhm # define XML_HANDLERS_H 50bd8f1dc3Sbluhm 51bd8f1dc3Sbluhm # include "expat_config.h" 52bd8f1dc3Sbluhm 53bd8f1dc3Sbluhm # include "expat.h" 54bd8f1dc3Sbluhm 55bd8f1dc3Sbluhm /* Variable holding the expected handler userData */ 56bd8f1dc3Sbluhm extern const void *g_handler_data; 57bd8f1dc3Sbluhm /* Count of the number of times the comment handler has been invoked */ 58bd8f1dc3Sbluhm extern int g_comment_count; 59bd8f1dc3Sbluhm /* Count of the number of skipped entities */ 60bd8f1dc3Sbluhm extern int g_skip_count; 61bd8f1dc3Sbluhm /* Count of the number of times the XML declaration handler is invoked */ 62bd8f1dc3Sbluhm extern int g_xdecl_count; 63bd8f1dc3Sbluhm 64bd8f1dc3Sbluhm /* Start/End Element Handlers */ 65bd8f1dc3Sbluhm 66bd8f1dc3Sbluhm extern void XMLCALL start_element_event_handler(void *userData, 67bd8f1dc3Sbluhm const XML_Char *name, 68bd8f1dc3Sbluhm const XML_Char **atts); 69bd8f1dc3Sbluhm 70bd8f1dc3Sbluhm extern void XMLCALL end_element_event_handler(void *userData, 71bd8f1dc3Sbluhm const XML_Char *name); 72bd8f1dc3Sbluhm 73bd8f1dc3Sbluhm # define STRUCT_START_TAG 0 74bd8f1dc3Sbluhm # define STRUCT_END_TAG 1 75bd8f1dc3Sbluhm 76bd8f1dc3Sbluhm extern void XMLCALL start_element_event_handler2(void *userData, 77bd8f1dc3Sbluhm const XML_Char *name, 78bd8f1dc3Sbluhm const XML_Char **attr); 79bd8f1dc3Sbluhm 80bd8f1dc3Sbluhm extern void XMLCALL end_element_event_handler2(void *userData, 81bd8f1dc3Sbluhm const XML_Char *name); 82bd8f1dc3Sbluhm 83bd8f1dc3Sbluhm typedef struct attrInfo { 84bd8f1dc3Sbluhm const XML_Char *name; 85bd8f1dc3Sbluhm const XML_Char *value; 86bd8f1dc3Sbluhm } AttrInfo; 87bd8f1dc3Sbluhm 88bd8f1dc3Sbluhm typedef struct elementInfo { 89bd8f1dc3Sbluhm const XML_Char *name; 90bd8f1dc3Sbluhm int attr_count; 91bd8f1dc3Sbluhm const XML_Char *id_name; 92bd8f1dc3Sbluhm AttrInfo *attributes; 93bd8f1dc3Sbluhm } ElementInfo; 94bd8f1dc3Sbluhm 95*aa071e6eSbluhm typedef struct StructParserAndElementInfo { 96*aa071e6eSbluhm XML_Parser parser; 97*aa071e6eSbluhm ElementInfo *info; 98*aa071e6eSbluhm } ParserAndElementInfo; 99*aa071e6eSbluhm 100bd8f1dc3Sbluhm extern void XMLCALL counting_start_element_handler(void *userData, 101bd8f1dc3Sbluhm const XML_Char *name, 102bd8f1dc3Sbluhm const XML_Char **atts); 103bd8f1dc3Sbluhm 104bd8f1dc3Sbluhm extern void XMLCALL suspending_end_handler(void *userData, const XML_Char *s); 105bd8f1dc3Sbluhm 106bd8f1dc3Sbluhm extern void XMLCALL start_element_suspender(void *userData, 107bd8f1dc3Sbluhm const XML_Char *name, 108bd8f1dc3Sbluhm const XML_Char **atts); 109bd8f1dc3Sbluhm 110bd8f1dc3Sbluhm extern int g_triplet_start_flag; 111bd8f1dc3Sbluhm extern int g_triplet_end_flag; 112bd8f1dc3Sbluhm 113bd8f1dc3Sbluhm extern void XMLCALL triplet_start_checker(void *userData, const XML_Char *name, 114bd8f1dc3Sbluhm const XML_Char **atts); 115bd8f1dc3Sbluhm 116bd8f1dc3Sbluhm extern void XMLCALL triplet_end_checker(void *userData, const XML_Char *name); 117bd8f1dc3Sbluhm 118bd8f1dc3Sbluhm extern void XMLCALL overwrite_start_checker(void *userData, 119bd8f1dc3Sbluhm const XML_Char *name, 120bd8f1dc3Sbluhm const XML_Char **atts); 121bd8f1dc3Sbluhm 122bd8f1dc3Sbluhm extern void XMLCALL overwrite_end_checker(void *userData, const XML_Char *name); 123bd8f1dc3Sbluhm 124bd8f1dc3Sbluhm extern void XMLCALL start_element_fail(void *userData, const XML_Char *name, 125bd8f1dc3Sbluhm const XML_Char **atts); 126bd8f1dc3Sbluhm 127bd8f1dc3Sbluhm extern void XMLCALL start_ns_clearing_start_element(void *userData, 128bd8f1dc3Sbluhm const XML_Char *prefix, 129bd8f1dc3Sbluhm const XML_Char *uri); 130bd8f1dc3Sbluhm 131bd8f1dc3Sbluhm typedef struct { 132bd8f1dc3Sbluhm XML_Parser parser; 133bd8f1dc3Sbluhm int deep; 134bd8f1dc3Sbluhm } DataIssue240; 135bd8f1dc3Sbluhm 136bd8f1dc3Sbluhm extern void XMLCALL start_element_issue_240(void *userData, 137bd8f1dc3Sbluhm const XML_Char *name, 138bd8f1dc3Sbluhm const XML_Char **atts); 139bd8f1dc3Sbluhm 140bd8f1dc3Sbluhm extern void XMLCALL end_element_issue_240(void *userData, const XML_Char *name); 141bd8f1dc3Sbluhm 142bd8f1dc3Sbluhm /* Text encoding handlers */ 143bd8f1dc3Sbluhm 144bd8f1dc3Sbluhm extern int XMLCALL UnknownEncodingHandler(void *data, const XML_Char *encoding, 145bd8f1dc3Sbluhm XML_Encoding *info); 146bd8f1dc3Sbluhm 147bd8f1dc3Sbluhm extern int XMLCALL UnrecognisedEncodingHandler(void *data, 148bd8f1dc3Sbluhm const XML_Char *encoding, 149bd8f1dc3Sbluhm XML_Encoding *info); 150bd8f1dc3Sbluhm 151bd8f1dc3Sbluhm extern int XMLCALL unknown_released_encoding_handler(void *data, 152bd8f1dc3Sbluhm const XML_Char *encoding, 153bd8f1dc3Sbluhm XML_Encoding *info); 154bd8f1dc3Sbluhm 155bd8f1dc3Sbluhm extern int XMLCALL MiscEncodingHandler(void *data, const XML_Char *encoding, 156bd8f1dc3Sbluhm XML_Encoding *info); 157bd8f1dc3Sbluhm 158bd8f1dc3Sbluhm extern int XMLCALL long_encoding_handler(void *userData, 159bd8f1dc3Sbluhm const XML_Char *encoding, 160bd8f1dc3Sbluhm XML_Encoding *info); 161bd8f1dc3Sbluhm 162bd8f1dc3Sbluhm /* External Entity Handlers */ 163bd8f1dc3Sbluhm 164bd8f1dc3Sbluhm typedef struct ExtOption { 165bd8f1dc3Sbluhm const XML_Char *system_id; 166bd8f1dc3Sbluhm const char *parse_text; 167bd8f1dc3Sbluhm } ExtOption; 168bd8f1dc3Sbluhm 169bd8f1dc3Sbluhm extern int XMLCALL external_entity_optioner(XML_Parser parser, 170bd8f1dc3Sbluhm const XML_Char *context, 171bd8f1dc3Sbluhm const XML_Char *base, 172bd8f1dc3Sbluhm const XML_Char *systemId, 173bd8f1dc3Sbluhm const XML_Char *publicId); 174bd8f1dc3Sbluhm 175bd8f1dc3Sbluhm extern int XMLCALL external_entity_loader(XML_Parser parser, 176bd8f1dc3Sbluhm const XML_Char *context, 177bd8f1dc3Sbluhm const XML_Char *base, 178bd8f1dc3Sbluhm const XML_Char *systemId, 179bd8f1dc3Sbluhm const XML_Char *publicId); 180bd8f1dc3Sbluhm 181bd8f1dc3Sbluhm typedef struct ext_faults { 182bd8f1dc3Sbluhm const char *parse_text; 183bd8f1dc3Sbluhm const char *fail_text; 184bd8f1dc3Sbluhm const XML_Char *encoding; 185bd8f1dc3Sbluhm enum XML_Error error; 186bd8f1dc3Sbluhm } ExtFaults; 187bd8f1dc3Sbluhm 188bd8f1dc3Sbluhm extern int XMLCALL external_entity_faulter(XML_Parser parser, 189bd8f1dc3Sbluhm const XML_Char *context, 190bd8f1dc3Sbluhm const XML_Char *base, 191bd8f1dc3Sbluhm const XML_Char *systemId, 192bd8f1dc3Sbluhm const XML_Char *publicId); 193bd8f1dc3Sbluhm extern int XMLCALL external_entity_failer__if_not_xml_ge( 194bd8f1dc3Sbluhm XML_Parser parser, const XML_Char *context, const XML_Char *base, 195bd8f1dc3Sbluhm const XML_Char *systemId, const XML_Char *publicId); 196bd8f1dc3Sbluhm extern int XMLCALL external_entity_null_loader(XML_Parser parser, 197bd8f1dc3Sbluhm const XML_Char *context, 198bd8f1dc3Sbluhm const XML_Char *base, 199bd8f1dc3Sbluhm const XML_Char *systemId, 200bd8f1dc3Sbluhm const XML_Char *publicId); 201bd8f1dc3Sbluhm 202bd8f1dc3Sbluhm extern int XMLCALL external_entity_resetter(XML_Parser parser, 203bd8f1dc3Sbluhm const XML_Char *context, 204bd8f1dc3Sbluhm const XML_Char *base, 205bd8f1dc3Sbluhm const XML_Char *systemId, 206bd8f1dc3Sbluhm const XML_Char *publicId); 207bd8f1dc3Sbluhm 208bd8f1dc3Sbluhm extern int XMLCALL external_entity_suspender(XML_Parser parser, 209bd8f1dc3Sbluhm const XML_Char *context, 210bd8f1dc3Sbluhm const XML_Char *base, 211bd8f1dc3Sbluhm const XML_Char *systemId, 212bd8f1dc3Sbluhm const XML_Char *publicId); 213bd8f1dc3Sbluhm 214bd8f1dc3Sbluhm extern int XMLCALL external_entity_suspend_xmldecl(XML_Parser parser, 215bd8f1dc3Sbluhm const XML_Char *context, 216bd8f1dc3Sbluhm const XML_Char *base, 217bd8f1dc3Sbluhm const XML_Char *systemId, 218bd8f1dc3Sbluhm const XML_Char *publicId); 219bd8f1dc3Sbluhm 220bd8f1dc3Sbluhm extern int XMLCALL external_entity_suspending_faulter(XML_Parser parser, 221bd8f1dc3Sbluhm const XML_Char *context, 222bd8f1dc3Sbluhm const XML_Char *base, 223bd8f1dc3Sbluhm const XML_Char *systemId, 224bd8f1dc3Sbluhm const XML_Char *publicId); 225bd8f1dc3Sbluhm 226bd8f1dc3Sbluhm extern int XMLCALL external_entity_cr_catcher(XML_Parser parser, 227bd8f1dc3Sbluhm const XML_Char *context, 228bd8f1dc3Sbluhm const XML_Char *base, 229bd8f1dc3Sbluhm const XML_Char *systemId, 230bd8f1dc3Sbluhm const XML_Char *publicId); 231bd8f1dc3Sbluhm 232bd8f1dc3Sbluhm extern int XMLCALL external_entity_bad_cr_catcher(XML_Parser parser, 233bd8f1dc3Sbluhm const XML_Char *context, 234bd8f1dc3Sbluhm const XML_Char *base, 235bd8f1dc3Sbluhm const XML_Char *systemId, 236bd8f1dc3Sbluhm const XML_Char *publicId); 237bd8f1dc3Sbluhm 238bd8f1dc3Sbluhm extern int XMLCALL external_entity_rsqb_catcher(XML_Parser parser, 239bd8f1dc3Sbluhm const XML_Char *context, 240bd8f1dc3Sbluhm const XML_Char *base, 241bd8f1dc3Sbluhm const XML_Char *systemId, 242bd8f1dc3Sbluhm const XML_Char *publicId); 243bd8f1dc3Sbluhm 244bd8f1dc3Sbluhm extern int XMLCALL external_entity_good_cdata_ascii(XML_Parser parser, 245bd8f1dc3Sbluhm const XML_Char *context, 246bd8f1dc3Sbluhm const XML_Char *base, 247bd8f1dc3Sbluhm const XML_Char *systemId, 248bd8f1dc3Sbluhm const XML_Char *publicId); 249bd8f1dc3Sbluhm 250bd8f1dc3Sbluhm /* Entity declaration handlers */ 251bd8f1dc3Sbluhm 252bd8f1dc3Sbluhm extern void XMLCALL entity_suspending_decl_handler(void *userData, 253bd8f1dc3Sbluhm const XML_Char *name, 254bd8f1dc3Sbluhm XML_Content *model); 255bd8f1dc3Sbluhm 256bd8f1dc3Sbluhm extern void XMLCALL entity_suspending_xdecl_handler(void *userData, 257bd8f1dc3Sbluhm const XML_Char *version, 258bd8f1dc3Sbluhm const XML_Char *encoding, 259bd8f1dc3Sbluhm int standalone); 260bd8f1dc3Sbluhm 261bd8f1dc3Sbluhm extern int XMLCALL external_entity_param_checker(XML_Parser parser, 262bd8f1dc3Sbluhm const XML_Char *context, 263bd8f1dc3Sbluhm const XML_Char *base, 264bd8f1dc3Sbluhm const XML_Char *systemId, 265bd8f1dc3Sbluhm const XML_Char *publicId); 266bd8f1dc3Sbluhm 267bd8f1dc3Sbluhm extern int XMLCALL external_entity_ref_param_checker(XML_Parser parameter, 268bd8f1dc3Sbluhm const XML_Char *context, 269bd8f1dc3Sbluhm const XML_Char *base, 270bd8f1dc3Sbluhm const XML_Char *systemId, 271bd8f1dc3Sbluhm const XML_Char *publicId); 272bd8f1dc3Sbluhm 273bd8f1dc3Sbluhm extern int XMLCALL external_entity_param(XML_Parser parser, 274bd8f1dc3Sbluhm const XML_Char *context, 275bd8f1dc3Sbluhm const XML_Char *base, 276bd8f1dc3Sbluhm const XML_Char *systemId, 277bd8f1dc3Sbluhm const XML_Char *publicId); 278bd8f1dc3Sbluhm 279bd8f1dc3Sbluhm extern int XMLCALL external_entity_load_ignore(XML_Parser parser, 280bd8f1dc3Sbluhm const XML_Char *context, 281bd8f1dc3Sbluhm const XML_Char *base, 282bd8f1dc3Sbluhm const XML_Char *systemId, 283bd8f1dc3Sbluhm const XML_Char *publicId); 284bd8f1dc3Sbluhm 285bd8f1dc3Sbluhm extern int XMLCALL external_entity_load_ignore_utf16(XML_Parser parser, 286bd8f1dc3Sbluhm const XML_Char *context, 287bd8f1dc3Sbluhm const XML_Char *base, 288bd8f1dc3Sbluhm const XML_Char *systemId, 289bd8f1dc3Sbluhm const XML_Char *publicId); 290bd8f1dc3Sbluhm 291bd8f1dc3Sbluhm extern int XMLCALL external_entity_load_ignore_utf16_be( 292bd8f1dc3Sbluhm XML_Parser parser, const XML_Char *context, const XML_Char *base, 293bd8f1dc3Sbluhm const XML_Char *systemId, const XML_Char *publicId); 294bd8f1dc3Sbluhm 295bd8f1dc3Sbluhm extern int XMLCALL external_entity_valuer(XML_Parser parser, 296bd8f1dc3Sbluhm const XML_Char *context, 297bd8f1dc3Sbluhm const XML_Char *base, 298bd8f1dc3Sbluhm const XML_Char *systemId, 299bd8f1dc3Sbluhm const XML_Char *publicId); 300bd8f1dc3Sbluhm 301bd8f1dc3Sbluhm extern int XMLCALL external_entity_not_standalone(XML_Parser parser, 302bd8f1dc3Sbluhm const XML_Char *context, 303bd8f1dc3Sbluhm const XML_Char *base, 304bd8f1dc3Sbluhm const XML_Char *systemId, 305bd8f1dc3Sbluhm const XML_Char *publicId); 306bd8f1dc3Sbluhm 307bd8f1dc3Sbluhm extern int XMLCALL external_entity_value_aborter(XML_Parser parser, 308bd8f1dc3Sbluhm const XML_Char *context, 309bd8f1dc3Sbluhm const XML_Char *base, 310bd8f1dc3Sbluhm const XML_Char *systemId, 311bd8f1dc3Sbluhm const XML_Char *publicId); 312bd8f1dc3Sbluhm 313bd8f1dc3Sbluhm extern int XMLCALL external_entity_public(XML_Parser parser, 314bd8f1dc3Sbluhm const XML_Char *context, 315bd8f1dc3Sbluhm const XML_Char *base, 316bd8f1dc3Sbluhm const XML_Char *systemId, 317bd8f1dc3Sbluhm const XML_Char *publicId); 318bd8f1dc3Sbluhm 319bd8f1dc3Sbluhm extern int XMLCALL external_entity_devaluer(XML_Parser parser, 320bd8f1dc3Sbluhm const XML_Char *context, 321bd8f1dc3Sbluhm const XML_Char *base, 322bd8f1dc3Sbluhm const XML_Char *systemId, 323bd8f1dc3Sbluhm const XML_Char *publicId); 324bd8f1dc3Sbluhm 325bd8f1dc3Sbluhm typedef struct ext_hdlr_data { 326bd8f1dc3Sbluhm const char *parse_text; 327bd8f1dc3Sbluhm XML_ExternalEntityRefHandler handler; 328bd8f1dc3Sbluhm } ExtHdlrData; 329bd8f1dc3Sbluhm 330bd8f1dc3Sbluhm extern int XMLCALL external_entity_oneshot_loader(XML_Parser parser, 331bd8f1dc3Sbluhm const XML_Char *context, 332bd8f1dc3Sbluhm const XML_Char *base, 333bd8f1dc3Sbluhm const XML_Char *systemId, 334bd8f1dc3Sbluhm const XML_Char *publicId); 335bd8f1dc3Sbluhm 336bd8f1dc3Sbluhm typedef struct ExtTest2 { 337bd8f1dc3Sbluhm const char *parse_text; 338bd8f1dc3Sbluhm int parse_len; 339bd8f1dc3Sbluhm const XML_Char *encoding; 340bd8f1dc3Sbluhm CharData *storage; 341bd8f1dc3Sbluhm } ExtTest2; 342bd8f1dc3Sbluhm 343bd8f1dc3Sbluhm extern int XMLCALL external_entity_loader2(XML_Parser parser, 344bd8f1dc3Sbluhm const XML_Char *context, 345bd8f1dc3Sbluhm const XML_Char *base, 346bd8f1dc3Sbluhm const XML_Char *systemId, 347bd8f1dc3Sbluhm const XML_Char *publicId); 348bd8f1dc3Sbluhm 349bd8f1dc3Sbluhm typedef struct ExtFaults2 { 350bd8f1dc3Sbluhm const char *parse_text; 351bd8f1dc3Sbluhm int parse_len; 352bd8f1dc3Sbluhm const char *fail_text; 353bd8f1dc3Sbluhm const XML_Char *encoding; 354bd8f1dc3Sbluhm enum XML_Error error; 355bd8f1dc3Sbluhm } ExtFaults2; 356bd8f1dc3Sbluhm 357bd8f1dc3Sbluhm extern int XMLCALL external_entity_faulter2(XML_Parser parser, 358bd8f1dc3Sbluhm const XML_Char *context, 359bd8f1dc3Sbluhm const XML_Char *base, 360bd8f1dc3Sbluhm const XML_Char *systemId, 361bd8f1dc3Sbluhm const XML_Char *publicId); 362bd8f1dc3Sbluhm 363bd8f1dc3Sbluhm extern int XMLCALL external_entity_unfinished_attlist(XML_Parser parser, 364bd8f1dc3Sbluhm const XML_Char *context, 365bd8f1dc3Sbluhm const XML_Char *base, 366bd8f1dc3Sbluhm const XML_Char *systemId, 367bd8f1dc3Sbluhm const XML_Char *publicId); 368bd8f1dc3Sbluhm 369bd8f1dc3Sbluhm extern int XMLCALL external_entity_handler(XML_Parser parser, 370bd8f1dc3Sbluhm const XML_Char *context, 371bd8f1dc3Sbluhm const XML_Char *base, 372bd8f1dc3Sbluhm const XML_Char *systemId, 373bd8f1dc3Sbluhm const XML_Char *publicId); 374bd8f1dc3Sbluhm 375bd8f1dc3Sbluhm extern int XMLCALL external_entity_duff_loader(XML_Parser parser, 376bd8f1dc3Sbluhm const XML_Char *context, 377bd8f1dc3Sbluhm const XML_Char *base, 378bd8f1dc3Sbluhm const XML_Char *systemId, 379bd8f1dc3Sbluhm const XML_Char *publicId); 380bd8f1dc3Sbluhm 381bd8f1dc3Sbluhm extern int XMLCALL external_entity_dbl_handler(XML_Parser parser, 382bd8f1dc3Sbluhm const XML_Char *context, 383bd8f1dc3Sbluhm const XML_Char *base, 384bd8f1dc3Sbluhm const XML_Char *systemId, 385bd8f1dc3Sbluhm const XML_Char *publicId); 386bd8f1dc3Sbluhm 387bd8f1dc3Sbluhm extern int XMLCALL external_entity_dbl_handler_2(XML_Parser parser, 388bd8f1dc3Sbluhm const XML_Char *context, 389bd8f1dc3Sbluhm const XML_Char *base, 390bd8f1dc3Sbluhm const XML_Char *systemId, 391bd8f1dc3Sbluhm const XML_Char *publicId); 392bd8f1dc3Sbluhm 393bd8f1dc3Sbluhm extern int XMLCALL external_entity_alloc_set_encoding(XML_Parser parser, 394bd8f1dc3Sbluhm const XML_Char *context, 395bd8f1dc3Sbluhm const XML_Char *base, 396bd8f1dc3Sbluhm const XML_Char *systemId, 397bd8f1dc3Sbluhm const XML_Char *publicId); 398bd8f1dc3Sbluhm 399bd8f1dc3Sbluhm extern int XMLCALL external_entity_reallocator(XML_Parser parser, 400bd8f1dc3Sbluhm const XML_Char *context, 401bd8f1dc3Sbluhm const XML_Char *base, 402bd8f1dc3Sbluhm const XML_Char *systemId, 403bd8f1dc3Sbluhm const XML_Char *publicId); 404bd8f1dc3Sbluhm 405bd8f1dc3Sbluhm extern int XMLCALL external_entity_alloc(XML_Parser parser, 406bd8f1dc3Sbluhm const XML_Char *context, 407bd8f1dc3Sbluhm const XML_Char *base, 408bd8f1dc3Sbluhm const XML_Char *systemId, 409bd8f1dc3Sbluhm const XML_Char *publicId); 410bd8f1dc3Sbluhm 411bd8f1dc3Sbluhm extern int XMLCALL external_entity_parser_create_alloc_fail_handler( 412bd8f1dc3Sbluhm XML_Parser parser, const XML_Char *context, const XML_Char *base, 413bd8f1dc3Sbluhm const XML_Char *systemId, const XML_Char *publicId); 414bd8f1dc3Sbluhm 415bd8f1dc3Sbluhm struct AccountingTestCase { 416bd8f1dc3Sbluhm const char *primaryText; 417bd8f1dc3Sbluhm const char *firstExternalText; /* often NULL */ 418bd8f1dc3Sbluhm const char *secondExternalText; /* often NULL */ 419bd8f1dc3Sbluhm const unsigned long long expectedCountBytesIndirectExtra; 420bd8f1dc3Sbluhm }; 421bd8f1dc3Sbluhm 422bd8f1dc3Sbluhm extern int accounting_external_entity_ref_handler(XML_Parser parser, 423bd8f1dc3Sbluhm const XML_Char *context, 424bd8f1dc3Sbluhm const XML_Char *base, 425bd8f1dc3Sbluhm const XML_Char *systemId, 426bd8f1dc3Sbluhm const XML_Char *publicId); 427bd8f1dc3Sbluhm 428bd8f1dc3Sbluhm /* NotStandalone handlers */ 429bd8f1dc3Sbluhm 430bd8f1dc3Sbluhm extern int XMLCALL reject_not_standalone_handler(void *userData); 431bd8f1dc3Sbluhm 432bd8f1dc3Sbluhm extern int XMLCALL accept_not_standalone_handler(void *userData); 433bd8f1dc3Sbluhm 434bd8f1dc3Sbluhm /* Attribute List handlers */ 435bd8f1dc3Sbluhm 436bd8f1dc3Sbluhm typedef struct AttTest { 437bd8f1dc3Sbluhm const char *definition; 438bd8f1dc3Sbluhm const XML_Char *element_name; 439bd8f1dc3Sbluhm const XML_Char *attr_name; 440bd8f1dc3Sbluhm const XML_Char *attr_type; 441bd8f1dc3Sbluhm const XML_Char *default_value; 442bd8f1dc3Sbluhm int is_required; 443bd8f1dc3Sbluhm } AttTest; 444bd8f1dc3Sbluhm 445bd8f1dc3Sbluhm extern void XMLCALL verify_attlist_decl_handler( 446bd8f1dc3Sbluhm void *userData, const XML_Char *element_name, const XML_Char *attr_name, 447bd8f1dc3Sbluhm const XML_Char *attr_type, const XML_Char *default_value, int is_required); 448bd8f1dc3Sbluhm 449bd8f1dc3Sbluhm /* Character data handlers */ 450bd8f1dc3Sbluhm 451bd8f1dc3Sbluhm extern void XMLCALL clearing_aborting_character_handler(void *userData, 452bd8f1dc3Sbluhm const XML_Char *s, 453bd8f1dc3Sbluhm int len); 454bd8f1dc3Sbluhm 455bd8f1dc3Sbluhm extern void XMLCALL parser_stop_character_handler(void *userData, 456bd8f1dc3Sbluhm const XML_Char *s, int len); 457bd8f1dc3Sbluhm 458bd8f1dc3Sbluhm extern void XMLCALL cr_cdata_handler(void *userData, const XML_Char *s, 459bd8f1dc3Sbluhm int len); 460bd8f1dc3Sbluhm 461bd8f1dc3Sbluhm extern void XMLCALL rsqb_handler(void *userData, const XML_Char *s, int len); 462bd8f1dc3Sbluhm 463bd8f1dc3Sbluhm typedef struct ByteTestData { 464bd8f1dc3Sbluhm int start_element_len; 465bd8f1dc3Sbluhm int cdata_len; 466bd8f1dc3Sbluhm int total_string_len; 467bd8f1dc3Sbluhm } ByteTestData; 468bd8f1dc3Sbluhm 469bd8f1dc3Sbluhm extern void XMLCALL byte_character_handler(void *userData, const XML_Char *s, 470bd8f1dc3Sbluhm int len); 471bd8f1dc3Sbluhm 472bd8f1dc3Sbluhm extern void XMLCALL ext2_accumulate_characters(void *userData, 473bd8f1dc3Sbluhm const XML_Char *s, int len); 474bd8f1dc3Sbluhm 475bd8f1dc3Sbluhm /* Handlers that record their `len` arg and a single identifying character */ 476bd8f1dc3Sbluhm 477bd8f1dc3Sbluhm struct handler_record_entry { 478bd8f1dc3Sbluhm const char *name; 479bd8f1dc3Sbluhm int arg; 480bd8f1dc3Sbluhm }; 481bd8f1dc3Sbluhm struct handler_record_list { 482bd8f1dc3Sbluhm int count; 483bd8f1dc3Sbluhm struct handler_record_entry entries[50]; // arbitrary big-enough max count 484bd8f1dc3Sbluhm }; 485bd8f1dc3Sbluhm 486bd8f1dc3Sbluhm extern void XMLCALL record_default_handler(void *userData, const XML_Char *s, 487bd8f1dc3Sbluhm int len); 488bd8f1dc3Sbluhm 489bd8f1dc3Sbluhm extern void XMLCALL record_cdata_handler(void *userData, const XML_Char *s, 490bd8f1dc3Sbluhm int len); 491bd8f1dc3Sbluhm 492bd8f1dc3Sbluhm extern void XMLCALL record_cdata_nodefault_handler(void *userData, 493bd8f1dc3Sbluhm const XML_Char *s, int len); 494bd8f1dc3Sbluhm 495bd8f1dc3Sbluhm extern void XMLCALL record_skip_handler(void *userData, 496bd8f1dc3Sbluhm const XML_Char *entityName, 497bd8f1dc3Sbluhm int is_parameter_entity); 498bd8f1dc3Sbluhm 499bd8f1dc3Sbluhm extern void XMLCALL record_element_start_handler(void *userData, 500bd8f1dc3Sbluhm const XML_Char *name, 501bd8f1dc3Sbluhm const XML_Char **atts); 502bd8f1dc3Sbluhm 503bd8f1dc3Sbluhm extern void XMLCALL record_element_end_handler(void *userData, 504bd8f1dc3Sbluhm const XML_Char *name); 505bd8f1dc3Sbluhm 506bd8f1dc3Sbluhm extern const struct handler_record_entry * 507bd8f1dc3Sbluhm _handler_record_get(const struct handler_record_list *storage, int index, 508bd8f1dc3Sbluhm const char *file, int line); 509bd8f1dc3Sbluhm 510bd8f1dc3Sbluhm # define handler_record_get(storage, index) \ 511bd8f1dc3Sbluhm _handler_record_get((storage), (index), __FILE__, __LINE__) 512bd8f1dc3Sbluhm 513bd8f1dc3Sbluhm # define assert_record_handler_called(storage, index, expected_name, \ 514bd8f1dc3Sbluhm expected_arg) \ 515bd8f1dc3Sbluhm do { \ 516bd8f1dc3Sbluhm const struct handler_record_entry *e \ 517bd8f1dc3Sbluhm = handler_record_get(storage, index); \ 518bd8f1dc3Sbluhm assert_true(strcmp(e->name, expected_name) == 0); \ 519bd8f1dc3Sbluhm assert_true(e->arg == (expected_arg)); \ 520bd8f1dc3Sbluhm } while (0) 521bd8f1dc3Sbluhm 522bd8f1dc3Sbluhm /* Entity Declaration Handlers */ 523bd8f1dc3Sbluhm # define ENTITY_MATCH_FAIL (-1) 524bd8f1dc3Sbluhm # define ENTITY_MATCH_NOT_FOUND (0) 525bd8f1dc3Sbluhm # define ENTITY_MATCH_SUCCESS (1) 526bd8f1dc3Sbluhm 527bd8f1dc3Sbluhm extern void XMLCALL param_entity_match_handler( 528bd8f1dc3Sbluhm void *userData, const XML_Char *entityName, int is_parameter_entity, 529bd8f1dc3Sbluhm const XML_Char *value, int value_length, const XML_Char *base, 530bd8f1dc3Sbluhm const XML_Char *systemId, const XML_Char *publicId, 531bd8f1dc3Sbluhm const XML_Char *notationName); 532bd8f1dc3Sbluhm 533bd8f1dc3Sbluhm extern void param_entity_match_init(const XML_Char *name, 534bd8f1dc3Sbluhm const XML_Char *value); 535bd8f1dc3Sbluhm 536bd8f1dc3Sbluhm extern int get_param_entity_match_flag(void); 537bd8f1dc3Sbluhm 538bd8f1dc3Sbluhm /* Misc handlers */ 539bd8f1dc3Sbluhm 540bd8f1dc3Sbluhm extern void XMLCALL xml_decl_handler(void *userData, const XML_Char *version, 541bd8f1dc3Sbluhm const XML_Char *encoding, int standalone); 542bd8f1dc3Sbluhm 543bd8f1dc3Sbluhm extern void XMLCALL param_check_skip_handler(void *userData, 544bd8f1dc3Sbluhm const XML_Char *entityName, 545bd8f1dc3Sbluhm int is_parameter_entity); 546bd8f1dc3Sbluhm 547bd8f1dc3Sbluhm extern void XMLCALL data_check_comment_handler(void *userData, 548bd8f1dc3Sbluhm const XML_Char *data); 549bd8f1dc3Sbluhm 550bd8f1dc3Sbluhm extern void XMLCALL selective_aborting_default_handler(void *userData, 551bd8f1dc3Sbluhm const XML_Char *s, 552bd8f1dc3Sbluhm int len); 553bd8f1dc3Sbluhm 554bd8f1dc3Sbluhm extern void XMLCALL suspending_comment_handler(void *userData, 555bd8f1dc3Sbluhm const XML_Char *data); 556bd8f1dc3Sbluhm 557bd8f1dc3Sbluhm extern void XMLCALL element_decl_suspender(void *userData, const XML_Char *name, 558bd8f1dc3Sbluhm XML_Content *model); 559bd8f1dc3Sbluhm 560bd8f1dc3Sbluhm extern void XMLCALL accumulate_pi_characters(void *userData, 561bd8f1dc3Sbluhm const XML_Char *target, 562bd8f1dc3Sbluhm const XML_Char *data); 563bd8f1dc3Sbluhm 564bd8f1dc3Sbluhm extern void XMLCALL accumulate_comment(void *userData, const XML_Char *data); 565bd8f1dc3Sbluhm 566bd8f1dc3Sbluhm extern void XMLCALL accumulate_entity_decl( 567bd8f1dc3Sbluhm void *userData, const XML_Char *entityName, int is_parameter_entity, 568bd8f1dc3Sbluhm const XML_Char *value, int value_length, const XML_Char *base, 569bd8f1dc3Sbluhm const XML_Char *systemId, const XML_Char *publicId, 570bd8f1dc3Sbluhm const XML_Char *notationName); 571bd8f1dc3Sbluhm 572bd8f1dc3Sbluhm extern void XMLCALL accumulate_start_element(void *userData, 573bd8f1dc3Sbluhm const XML_Char *name, 574bd8f1dc3Sbluhm const XML_Char **atts); 575bd8f1dc3Sbluhm 576*aa071e6eSbluhm extern void XMLCALL accumulate_characters(void *userData, const XML_Char *s, 577*aa071e6eSbluhm int len); 578*aa071e6eSbluhm 579*aa071e6eSbluhm extern void XMLCALL accumulate_attribute(void *userData, const XML_Char *name, 580*aa071e6eSbluhm const XML_Char **atts); 581*aa071e6eSbluhm 582*aa071e6eSbluhm extern void XMLCALL ext_accumulate_characters(void *userData, const XML_Char *s, 583*aa071e6eSbluhm int len); 584*aa071e6eSbluhm 585bd8f1dc3Sbluhm typedef struct default_check { 586bd8f1dc3Sbluhm const XML_Char *expected; 587bd8f1dc3Sbluhm const int expectedLen; 588bd8f1dc3Sbluhm XML_Bool seen; 589bd8f1dc3Sbluhm } DefaultCheck; 590bd8f1dc3Sbluhm 591bd8f1dc3Sbluhm void XMLCALL checking_default_handler(void *userData, const XML_Char *s, 592bd8f1dc3Sbluhm int len); 593bd8f1dc3Sbluhm 594bd8f1dc3Sbluhm typedef struct { 595bd8f1dc3Sbluhm XML_Parser parser; 596bd8f1dc3Sbluhm CharData *storage; 597bd8f1dc3Sbluhm } ParserPlusStorage; 598bd8f1dc3Sbluhm 599bd8f1dc3Sbluhm extern void XMLCALL 600bd8f1dc3Sbluhm accumulate_and_suspend_comment_handler(void *userData, const XML_Char *data); 601bd8f1dc3Sbluhm 602bd8f1dc3Sbluhm #endif /* XML_HANDLERS_H */ 603bd8f1dc3Sbluhm 604bd8f1dc3Sbluhm #ifdef __cplusplus 605bd8f1dc3Sbluhm } 606bd8f1dc3Sbluhm #endif 607