14543ef51SXin LI /* XML handler functions for the Expat test suite 24543ef51SXin LI __ __ _ 34543ef51SXin LI ___\ \/ /_ __ __ _| |_ 44543ef51SXin LI / _ \\ /| '_ \ / _` | __| 54543ef51SXin LI | __// \| |_) | (_| | |_ 64543ef51SXin LI \___/_/\_\ .__/ \__,_|\__| 74543ef51SXin LI |_| XML parser 84543ef51SXin LI 94543ef51SXin LI Copyright (c) 2001-2006 Fred L. Drake, Jr. <fdrake@users.sourceforge.net> 104543ef51SXin LI Copyright (c) 2003 Greg Stein <gstein@users.sourceforge.net> 114543ef51SXin LI Copyright (c) 2005-2007 Steven Solie <steven@solie.ca> 124543ef51SXin LI Copyright (c) 2005-2012 Karl Waclawek <karl@waclawek.net> 134543ef51SXin LI Copyright (c) 2016-2024 Sebastian Pipping <sebastian@pipping.org> 144543ef51SXin LI Copyright (c) 2017-2022 Rhodri James <rhodri@wildebeest.org.uk> 154543ef51SXin LI Copyright (c) 2017 Joe Orton <jorton@redhat.com> 164543ef51SXin LI Copyright (c) 2017 José Gutiérrez de la Concha <jose@zeroc.com> 174543ef51SXin LI Copyright (c) 2018 Marco Maggi <marco.maggi-ipsu@poste.it> 184543ef51SXin LI Copyright (c) 2019 David Loffredo <loffredo@steptools.com> 194543ef51SXin LI Copyright (c) 2020 Tim Gates <tim.gates@iress.com> 204543ef51SXin LI Copyright (c) 2021 Donghee Na <donghee.na@python.org> 214543ef51SXin LI Copyright (c) 2023 Sony Corporation / Snild Dolkow <snild@sony.com> 224543ef51SXin LI Licensed under the MIT license: 234543ef51SXin LI 244543ef51SXin LI Permission is hereby granted, free of charge, to any person obtaining 254543ef51SXin LI a copy of this software and associated documentation files (the 264543ef51SXin LI "Software"), to deal in the Software without restriction, including 274543ef51SXin LI without limitation the rights to use, copy, modify, merge, publish, 284543ef51SXin LI distribute, sublicense, and/or sell copies of the Software, and to permit 294543ef51SXin LI persons to whom the Software is furnished to do so, subject to the 304543ef51SXin LI following conditions: 314543ef51SXin LI 324543ef51SXin LI The above copyright notice and this permission notice shall be included 334543ef51SXin LI in all copies or substantial portions of the Software. 344543ef51SXin LI 354543ef51SXin LI THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 364543ef51SXin LI EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 374543ef51SXin LI MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 384543ef51SXin LI NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 394543ef51SXin LI DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 404543ef51SXin LI OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 414543ef51SXin LI USE OR OTHER DEALINGS IN THE SOFTWARE. 424543ef51SXin LI */ 434543ef51SXin LI 444543ef51SXin LI #ifdef __cplusplus 454543ef51SXin LI extern "C" { 464543ef51SXin LI #endif 474543ef51SXin LI 484543ef51SXin LI #ifndef XML_HANDLERS_H 494543ef51SXin LI # define XML_HANDLERS_H 504543ef51SXin LI 514543ef51SXin LI # include "expat_config.h" 524543ef51SXin LI 534543ef51SXin LI # include "expat.h" 544543ef51SXin LI 554543ef51SXin LI /* Variable holding the expected handler userData */ 564543ef51SXin LI extern const void *g_handler_data; 574543ef51SXin LI /* Count of the number of times the comment handler has been invoked */ 584543ef51SXin LI extern int g_comment_count; 594543ef51SXin LI /* Count of the number of skipped entities */ 604543ef51SXin LI extern int g_skip_count; 614543ef51SXin LI /* Count of the number of times the XML declaration handler is invoked */ 624543ef51SXin LI extern int g_xdecl_count; 634543ef51SXin LI 644543ef51SXin LI /* Start/End Element Handlers */ 654543ef51SXin LI 664543ef51SXin LI extern void XMLCALL start_element_event_handler(void *userData, 674543ef51SXin LI const XML_Char *name, 684543ef51SXin LI const XML_Char **atts); 694543ef51SXin LI 704543ef51SXin LI extern void XMLCALL end_element_event_handler(void *userData, 714543ef51SXin LI const XML_Char *name); 724543ef51SXin LI 734543ef51SXin LI # define STRUCT_START_TAG 0 744543ef51SXin LI # define STRUCT_END_TAG 1 754543ef51SXin LI 764543ef51SXin LI extern void XMLCALL start_element_event_handler2(void *userData, 774543ef51SXin LI const XML_Char *name, 784543ef51SXin LI const XML_Char **attr); 794543ef51SXin LI 804543ef51SXin LI extern void XMLCALL end_element_event_handler2(void *userData, 814543ef51SXin LI const XML_Char *name); 824543ef51SXin LI 834543ef51SXin LI typedef struct attrInfo { 844543ef51SXin LI const XML_Char *name; 854543ef51SXin LI const XML_Char *value; 864543ef51SXin LI } AttrInfo; 874543ef51SXin LI 884543ef51SXin LI typedef struct elementInfo { 894543ef51SXin LI const XML_Char *name; 904543ef51SXin LI int attr_count; 914543ef51SXin LI const XML_Char *id_name; 924543ef51SXin LI AttrInfo *attributes; 934543ef51SXin LI } ElementInfo; 944543ef51SXin LI 95908f215eSXin LI typedef struct StructParserAndElementInfo { 96908f215eSXin LI XML_Parser parser; 97908f215eSXin LI ElementInfo *info; 98908f215eSXin LI } ParserAndElementInfo; 99908f215eSXin LI 1004543ef51SXin LI extern void XMLCALL counting_start_element_handler(void *userData, 1014543ef51SXin LI const XML_Char *name, 1024543ef51SXin LI const XML_Char **atts); 1034543ef51SXin LI 1044543ef51SXin LI extern void XMLCALL suspending_end_handler(void *userData, const XML_Char *s); 1054543ef51SXin LI 1064543ef51SXin LI extern void XMLCALL start_element_suspender(void *userData, 1074543ef51SXin LI const XML_Char *name, 1084543ef51SXin LI const XML_Char **atts); 1094543ef51SXin LI 1104543ef51SXin LI extern int g_triplet_start_flag; 1114543ef51SXin LI extern int g_triplet_end_flag; 1124543ef51SXin LI 1134543ef51SXin LI extern void XMLCALL triplet_start_checker(void *userData, const XML_Char *name, 1144543ef51SXin LI const XML_Char **atts); 1154543ef51SXin LI 1164543ef51SXin LI extern void XMLCALL triplet_end_checker(void *userData, const XML_Char *name); 1174543ef51SXin LI 1184543ef51SXin LI extern void XMLCALL overwrite_start_checker(void *userData, 1194543ef51SXin LI const XML_Char *name, 1204543ef51SXin LI const XML_Char **atts); 1214543ef51SXin LI 1224543ef51SXin LI extern void XMLCALL overwrite_end_checker(void *userData, const XML_Char *name); 1234543ef51SXin LI 1244543ef51SXin LI extern void XMLCALL start_element_fail(void *userData, const XML_Char *name, 1254543ef51SXin LI const XML_Char **atts); 1264543ef51SXin LI 1274543ef51SXin LI extern void XMLCALL start_ns_clearing_start_element(void *userData, 1284543ef51SXin LI const XML_Char *prefix, 1294543ef51SXin LI const XML_Char *uri); 1304543ef51SXin LI 1314543ef51SXin LI typedef struct { 1324543ef51SXin LI XML_Parser parser; 1334543ef51SXin LI int deep; 1344543ef51SXin LI } DataIssue240; 1354543ef51SXin LI 1364543ef51SXin LI extern void XMLCALL start_element_issue_240(void *userData, 1374543ef51SXin LI const XML_Char *name, 1384543ef51SXin LI const XML_Char **atts); 1394543ef51SXin LI 1404543ef51SXin LI extern void XMLCALL end_element_issue_240(void *userData, const XML_Char *name); 1414543ef51SXin LI 1424543ef51SXin LI /* Text encoding handlers */ 1434543ef51SXin LI 1444543ef51SXin LI extern int XMLCALL UnknownEncodingHandler(void *data, const XML_Char *encoding, 1454543ef51SXin LI XML_Encoding *info); 1464543ef51SXin LI 1474543ef51SXin LI extern int XMLCALL UnrecognisedEncodingHandler(void *data, 1484543ef51SXin LI const XML_Char *encoding, 1494543ef51SXin LI XML_Encoding *info); 1504543ef51SXin LI 1514543ef51SXin LI extern int XMLCALL unknown_released_encoding_handler(void *data, 1524543ef51SXin LI const XML_Char *encoding, 1534543ef51SXin LI XML_Encoding *info); 1544543ef51SXin LI 1554543ef51SXin LI extern int XMLCALL MiscEncodingHandler(void *data, const XML_Char *encoding, 1564543ef51SXin LI XML_Encoding *info); 1574543ef51SXin LI 1584543ef51SXin LI extern int XMLCALL long_encoding_handler(void *userData, 1594543ef51SXin LI const XML_Char *encoding, 1604543ef51SXin LI XML_Encoding *info); 1614543ef51SXin LI 1624543ef51SXin LI /* External Entity Handlers */ 1634543ef51SXin LI 1644543ef51SXin LI typedef struct ExtOption { 1654543ef51SXin LI const XML_Char *system_id; 1664543ef51SXin LI const char *parse_text; 1674543ef51SXin LI } ExtOption; 1684543ef51SXin LI 1694543ef51SXin LI extern int XMLCALL external_entity_optioner(XML_Parser parser, 1704543ef51SXin LI const XML_Char *context, 1714543ef51SXin LI const XML_Char *base, 1724543ef51SXin LI const XML_Char *systemId, 1734543ef51SXin LI const XML_Char *publicId); 1744543ef51SXin LI 1754543ef51SXin LI extern int XMLCALL external_entity_loader(XML_Parser parser, 1764543ef51SXin LI const XML_Char *context, 1774543ef51SXin LI const XML_Char *base, 1784543ef51SXin LI const XML_Char *systemId, 1794543ef51SXin LI const XML_Char *publicId); 1804543ef51SXin LI 1814543ef51SXin LI typedef struct ext_faults { 1824543ef51SXin LI const char *parse_text; 1834543ef51SXin LI const char *fail_text; 1844543ef51SXin LI const XML_Char *encoding; 1854543ef51SXin LI enum XML_Error error; 1864543ef51SXin LI } ExtFaults; 1874543ef51SXin LI 1884543ef51SXin LI extern int XMLCALL external_entity_faulter(XML_Parser parser, 1894543ef51SXin LI const XML_Char *context, 1904543ef51SXin LI const XML_Char *base, 1914543ef51SXin LI const XML_Char *systemId, 1924543ef51SXin LI const XML_Char *publicId); 1934543ef51SXin LI extern int XMLCALL external_entity_failer__if_not_xml_ge( 1944543ef51SXin LI XML_Parser parser, const XML_Char *context, const XML_Char *base, 1954543ef51SXin LI const XML_Char *systemId, const XML_Char *publicId); 1964543ef51SXin LI extern int XMLCALL external_entity_null_loader(XML_Parser parser, 1974543ef51SXin LI const XML_Char *context, 1984543ef51SXin LI const XML_Char *base, 1994543ef51SXin LI const XML_Char *systemId, 2004543ef51SXin LI const XML_Char *publicId); 2014543ef51SXin LI 2024543ef51SXin LI extern int XMLCALL external_entity_resetter(XML_Parser parser, 2034543ef51SXin LI const XML_Char *context, 2044543ef51SXin LI const XML_Char *base, 2054543ef51SXin LI const XML_Char *systemId, 2064543ef51SXin LI const XML_Char *publicId); 2074543ef51SXin LI 2084543ef51SXin LI extern int XMLCALL external_entity_suspender(XML_Parser parser, 2094543ef51SXin LI const XML_Char *context, 2104543ef51SXin LI const XML_Char *base, 2114543ef51SXin LI const XML_Char *systemId, 2124543ef51SXin LI const XML_Char *publicId); 2134543ef51SXin LI 2144543ef51SXin LI extern int XMLCALL external_entity_suspend_xmldecl(XML_Parser parser, 2154543ef51SXin LI const XML_Char *context, 2164543ef51SXin LI const XML_Char *base, 2174543ef51SXin LI const XML_Char *systemId, 2184543ef51SXin LI const XML_Char *publicId); 2194543ef51SXin LI 2204543ef51SXin LI extern int XMLCALL external_entity_suspending_faulter(XML_Parser parser, 2214543ef51SXin LI const XML_Char *context, 2224543ef51SXin LI const XML_Char *base, 2234543ef51SXin LI const XML_Char *systemId, 2244543ef51SXin LI const XML_Char *publicId); 2254543ef51SXin LI 2264543ef51SXin LI extern int XMLCALL external_entity_cr_catcher(XML_Parser parser, 2274543ef51SXin LI const XML_Char *context, 2284543ef51SXin LI const XML_Char *base, 2294543ef51SXin LI const XML_Char *systemId, 2304543ef51SXin LI const XML_Char *publicId); 2314543ef51SXin LI 2324543ef51SXin LI extern int XMLCALL external_entity_bad_cr_catcher(XML_Parser parser, 2334543ef51SXin LI const XML_Char *context, 2344543ef51SXin LI const XML_Char *base, 2354543ef51SXin LI const XML_Char *systemId, 2364543ef51SXin LI const XML_Char *publicId); 2374543ef51SXin LI 2384543ef51SXin LI extern int XMLCALL external_entity_rsqb_catcher(XML_Parser parser, 2394543ef51SXin LI const XML_Char *context, 2404543ef51SXin LI const XML_Char *base, 2414543ef51SXin LI const XML_Char *systemId, 2424543ef51SXin LI const XML_Char *publicId); 2434543ef51SXin LI 2444543ef51SXin LI extern int XMLCALL external_entity_good_cdata_ascii(XML_Parser parser, 2454543ef51SXin LI const XML_Char *context, 2464543ef51SXin LI const XML_Char *base, 2474543ef51SXin LI const XML_Char *systemId, 2484543ef51SXin LI const XML_Char *publicId); 2494543ef51SXin LI 2504543ef51SXin LI /* Entity declaration handlers */ 2514543ef51SXin LI 2524543ef51SXin LI extern void XMLCALL entity_suspending_decl_handler(void *userData, 2534543ef51SXin LI const XML_Char *name, 2544543ef51SXin LI XML_Content *model); 2554543ef51SXin LI 2564543ef51SXin LI extern void XMLCALL entity_suspending_xdecl_handler(void *userData, 2574543ef51SXin LI const XML_Char *version, 2584543ef51SXin LI const XML_Char *encoding, 2594543ef51SXin LI int standalone); 2604543ef51SXin LI 2614543ef51SXin LI extern int XMLCALL external_entity_param_checker(XML_Parser parser, 2624543ef51SXin LI const XML_Char *context, 2634543ef51SXin LI const XML_Char *base, 2644543ef51SXin LI const XML_Char *systemId, 2654543ef51SXin LI const XML_Char *publicId); 2664543ef51SXin LI 2674543ef51SXin LI extern int XMLCALL external_entity_ref_param_checker(XML_Parser parameter, 2684543ef51SXin LI const XML_Char *context, 2694543ef51SXin LI const XML_Char *base, 2704543ef51SXin LI const XML_Char *systemId, 2714543ef51SXin LI const XML_Char *publicId); 2724543ef51SXin LI 2734543ef51SXin LI extern int XMLCALL external_entity_param(XML_Parser parser, 2744543ef51SXin LI const XML_Char *context, 2754543ef51SXin LI const XML_Char *base, 2764543ef51SXin LI const XML_Char *systemId, 2774543ef51SXin LI const XML_Char *publicId); 2784543ef51SXin LI 2794543ef51SXin LI extern int XMLCALL external_entity_load_ignore(XML_Parser parser, 2804543ef51SXin LI const XML_Char *context, 2814543ef51SXin LI const XML_Char *base, 2824543ef51SXin LI const XML_Char *systemId, 2834543ef51SXin LI const XML_Char *publicId); 2844543ef51SXin LI 2854543ef51SXin LI extern int XMLCALL external_entity_load_ignore_utf16(XML_Parser parser, 2864543ef51SXin LI const XML_Char *context, 2874543ef51SXin LI const XML_Char *base, 2884543ef51SXin LI const XML_Char *systemId, 2894543ef51SXin LI const XML_Char *publicId); 2904543ef51SXin LI 2914543ef51SXin LI extern int XMLCALL external_entity_load_ignore_utf16_be( 2924543ef51SXin LI XML_Parser parser, const XML_Char *context, const XML_Char *base, 2934543ef51SXin LI const XML_Char *systemId, const XML_Char *publicId); 2944543ef51SXin LI 2954543ef51SXin LI extern int XMLCALL external_entity_valuer(XML_Parser parser, 2964543ef51SXin LI const XML_Char *context, 2974543ef51SXin LI const XML_Char *base, 2984543ef51SXin LI const XML_Char *systemId, 2994543ef51SXin LI const XML_Char *publicId); 3004543ef51SXin LI 3014543ef51SXin LI extern int XMLCALL external_entity_not_standalone(XML_Parser parser, 3024543ef51SXin LI const XML_Char *context, 3034543ef51SXin LI const XML_Char *base, 3044543ef51SXin LI const XML_Char *systemId, 3054543ef51SXin LI const XML_Char *publicId); 3064543ef51SXin LI 3074543ef51SXin LI extern int XMLCALL external_entity_value_aborter(XML_Parser parser, 3084543ef51SXin LI const XML_Char *context, 3094543ef51SXin LI const XML_Char *base, 3104543ef51SXin LI const XML_Char *systemId, 3114543ef51SXin LI const XML_Char *publicId); 3124543ef51SXin LI 3134543ef51SXin LI extern int XMLCALL external_entity_public(XML_Parser parser, 3144543ef51SXin LI const XML_Char *context, 3154543ef51SXin LI const XML_Char *base, 3164543ef51SXin LI const XML_Char *systemId, 3174543ef51SXin LI const XML_Char *publicId); 3184543ef51SXin LI 3194543ef51SXin LI extern int XMLCALL external_entity_devaluer(XML_Parser parser, 3204543ef51SXin LI const XML_Char *context, 3214543ef51SXin LI const XML_Char *base, 3224543ef51SXin LI const XML_Char *systemId, 3234543ef51SXin LI const XML_Char *publicId); 3244543ef51SXin LI 3254543ef51SXin LI typedef struct ext_hdlr_data { 3264543ef51SXin LI const char *parse_text; 3274543ef51SXin LI XML_ExternalEntityRefHandler handler; 328*fe927888SPhilip Paeps CharData *storage; 3294543ef51SXin LI } ExtHdlrData; 3304543ef51SXin LI 3314543ef51SXin LI extern int XMLCALL external_entity_oneshot_loader(XML_Parser parser, 3324543ef51SXin LI const XML_Char *context, 3334543ef51SXin LI const XML_Char *base, 3344543ef51SXin LI const XML_Char *systemId, 3354543ef51SXin LI const XML_Char *publicId); 3364543ef51SXin LI 3374543ef51SXin LI typedef struct ExtTest2 { 3384543ef51SXin LI const char *parse_text; 3394543ef51SXin LI int parse_len; 3404543ef51SXin LI const XML_Char *encoding; 3414543ef51SXin LI CharData *storage; 3424543ef51SXin LI } ExtTest2; 3434543ef51SXin LI 3444543ef51SXin LI extern int XMLCALL external_entity_loader2(XML_Parser parser, 3454543ef51SXin LI const XML_Char *context, 3464543ef51SXin LI const XML_Char *base, 3474543ef51SXin LI const XML_Char *systemId, 3484543ef51SXin LI const XML_Char *publicId); 3494543ef51SXin LI 3504543ef51SXin LI typedef struct ExtFaults2 { 3514543ef51SXin LI const char *parse_text; 3524543ef51SXin LI int parse_len; 3534543ef51SXin LI const char *fail_text; 3544543ef51SXin LI const XML_Char *encoding; 3554543ef51SXin LI enum XML_Error error; 3564543ef51SXin LI } ExtFaults2; 3574543ef51SXin LI 3584543ef51SXin LI extern int XMLCALL external_entity_faulter2(XML_Parser parser, 3594543ef51SXin LI const XML_Char *context, 3604543ef51SXin LI const XML_Char *base, 3614543ef51SXin LI const XML_Char *systemId, 3624543ef51SXin LI const XML_Char *publicId); 3634543ef51SXin LI 3644543ef51SXin LI extern int XMLCALL external_entity_unfinished_attlist(XML_Parser parser, 3654543ef51SXin LI const XML_Char *context, 3664543ef51SXin LI const XML_Char *base, 3674543ef51SXin LI const XML_Char *systemId, 3684543ef51SXin LI const XML_Char *publicId); 3694543ef51SXin LI 3704543ef51SXin LI extern int XMLCALL external_entity_handler(XML_Parser parser, 3714543ef51SXin LI const XML_Char *context, 3724543ef51SXin LI const XML_Char *base, 3734543ef51SXin LI const XML_Char *systemId, 3744543ef51SXin LI const XML_Char *publicId); 3754543ef51SXin LI 3764543ef51SXin LI extern int XMLCALL external_entity_duff_loader(XML_Parser parser, 3774543ef51SXin LI const XML_Char *context, 3784543ef51SXin LI const XML_Char *base, 3794543ef51SXin LI const XML_Char *systemId, 3804543ef51SXin LI const XML_Char *publicId); 3814543ef51SXin LI 3824543ef51SXin LI extern int XMLCALL external_entity_dbl_handler(XML_Parser parser, 3834543ef51SXin LI const XML_Char *context, 3844543ef51SXin LI const XML_Char *base, 3854543ef51SXin LI const XML_Char *systemId, 3864543ef51SXin LI const XML_Char *publicId); 3874543ef51SXin LI 3884543ef51SXin LI extern int XMLCALL external_entity_dbl_handler_2(XML_Parser parser, 3894543ef51SXin LI const XML_Char *context, 3904543ef51SXin LI const XML_Char *base, 3914543ef51SXin LI const XML_Char *systemId, 3924543ef51SXin LI const XML_Char *publicId); 3934543ef51SXin LI 3944543ef51SXin LI extern int XMLCALL external_entity_alloc_set_encoding(XML_Parser parser, 3954543ef51SXin LI const XML_Char *context, 3964543ef51SXin LI const XML_Char *base, 3974543ef51SXin LI const XML_Char *systemId, 3984543ef51SXin LI const XML_Char *publicId); 3994543ef51SXin LI 4004543ef51SXin LI extern int XMLCALL external_entity_reallocator(XML_Parser parser, 4014543ef51SXin LI const XML_Char *context, 4024543ef51SXin LI const XML_Char *base, 4034543ef51SXin LI const XML_Char *systemId, 4044543ef51SXin LI const XML_Char *publicId); 4054543ef51SXin LI 4064543ef51SXin LI extern int XMLCALL external_entity_alloc(XML_Parser parser, 4074543ef51SXin LI const XML_Char *context, 4084543ef51SXin LI const XML_Char *base, 4094543ef51SXin LI const XML_Char *systemId, 4104543ef51SXin LI const XML_Char *publicId); 4114543ef51SXin LI 4124543ef51SXin LI extern int XMLCALL external_entity_parser_create_alloc_fail_handler( 4134543ef51SXin LI XML_Parser parser, const XML_Char *context, const XML_Char *base, 4144543ef51SXin LI const XML_Char *systemId, const XML_Char *publicId); 4154543ef51SXin LI 4164543ef51SXin LI struct AccountingTestCase { 4174543ef51SXin LI const char *primaryText; 4184543ef51SXin LI const char *firstExternalText; /* often NULL */ 4194543ef51SXin LI const char *secondExternalText; /* often NULL */ 4204543ef51SXin LI const unsigned long long expectedCountBytesIndirectExtra; 4214543ef51SXin LI }; 4224543ef51SXin LI 4234543ef51SXin LI extern int accounting_external_entity_ref_handler(XML_Parser parser, 4244543ef51SXin LI const XML_Char *context, 4254543ef51SXin LI const XML_Char *base, 4264543ef51SXin LI const XML_Char *systemId, 4274543ef51SXin LI const XML_Char *publicId); 4284543ef51SXin LI 4294543ef51SXin LI /* NotStandalone handlers */ 4304543ef51SXin LI 4314543ef51SXin LI extern int XMLCALL reject_not_standalone_handler(void *userData); 4324543ef51SXin LI 4334543ef51SXin LI extern int XMLCALL accept_not_standalone_handler(void *userData); 4344543ef51SXin LI 4354543ef51SXin LI /* Attribute List handlers */ 4364543ef51SXin LI 4374543ef51SXin LI typedef struct AttTest { 4384543ef51SXin LI const char *definition; 4394543ef51SXin LI const XML_Char *element_name; 4404543ef51SXin LI const XML_Char *attr_name; 4414543ef51SXin LI const XML_Char *attr_type; 4424543ef51SXin LI const XML_Char *default_value; 4434543ef51SXin LI int is_required; 4444543ef51SXin LI } AttTest; 4454543ef51SXin LI 4464543ef51SXin LI extern void XMLCALL verify_attlist_decl_handler( 4474543ef51SXin LI void *userData, const XML_Char *element_name, const XML_Char *attr_name, 4484543ef51SXin LI const XML_Char *attr_type, const XML_Char *default_value, int is_required); 4494543ef51SXin LI 4504543ef51SXin LI /* Character data handlers */ 4514543ef51SXin LI 4524543ef51SXin LI extern void XMLCALL clearing_aborting_character_handler(void *userData, 4534543ef51SXin LI const XML_Char *s, 4544543ef51SXin LI int len); 4554543ef51SXin LI 4564543ef51SXin LI extern void XMLCALL parser_stop_character_handler(void *userData, 4574543ef51SXin LI const XML_Char *s, int len); 4584543ef51SXin LI 4594543ef51SXin LI extern void XMLCALL cr_cdata_handler(void *userData, const XML_Char *s, 4604543ef51SXin LI int len); 4614543ef51SXin LI 4624543ef51SXin LI extern void XMLCALL rsqb_handler(void *userData, const XML_Char *s, int len); 4634543ef51SXin LI 4644543ef51SXin LI typedef struct ByteTestData { 4654543ef51SXin LI int start_element_len; 4664543ef51SXin LI int cdata_len; 4674543ef51SXin LI int total_string_len; 4684543ef51SXin LI } ByteTestData; 4694543ef51SXin LI 4704543ef51SXin LI extern void XMLCALL byte_character_handler(void *userData, const XML_Char *s, 4714543ef51SXin LI int len); 4724543ef51SXin LI 4734543ef51SXin LI extern void XMLCALL ext2_accumulate_characters(void *userData, 4744543ef51SXin LI const XML_Char *s, int len); 4754543ef51SXin LI 4764543ef51SXin LI /* Handlers that record their `len` arg and a single identifying character */ 4774543ef51SXin LI 4784543ef51SXin LI struct handler_record_entry { 4794543ef51SXin LI const char *name; 4804543ef51SXin LI int arg; 4814543ef51SXin LI }; 4824543ef51SXin LI struct handler_record_list { 4834543ef51SXin LI int count; 4844543ef51SXin LI struct handler_record_entry entries[50]; // arbitrary big-enough max count 4854543ef51SXin LI }; 4864543ef51SXin LI 4874543ef51SXin LI extern void XMLCALL record_default_handler(void *userData, const XML_Char *s, 4884543ef51SXin LI int len); 4894543ef51SXin LI 4904543ef51SXin LI extern void XMLCALL record_cdata_handler(void *userData, const XML_Char *s, 4914543ef51SXin LI int len); 4924543ef51SXin LI 4934543ef51SXin LI extern void XMLCALL record_cdata_nodefault_handler(void *userData, 4944543ef51SXin LI const XML_Char *s, int len); 4954543ef51SXin LI 4964543ef51SXin LI extern void XMLCALL record_skip_handler(void *userData, 4974543ef51SXin LI const XML_Char *entityName, 4984543ef51SXin LI int is_parameter_entity); 4994543ef51SXin LI 5004543ef51SXin LI extern void XMLCALL record_element_start_handler(void *userData, 5014543ef51SXin LI const XML_Char *name, 5024543ef51SXin LI const XML_Char **atts); 5034543ef51SXin LI 5044543ef51SXin LI extern void XMLCALL record_element_end_handler(void *userData, 5054543ef51SXin LI const XML_Char *name); 5064543ef51SXin LI 5074543ef51SXin LI extern const struct handler_record_entry * 5084543ef51SXin LI _handler_record_get(const struct handler_record_list *storage, int index, 5094543ef51SXin LI const char *file, int line); 5104543ef51SXin LI 5114543ef51SXin LI # define handler_record_get(storage, index) \ 5124543ef51SXin LI _handler_record_get((storage), (index), __FILE__, __LINE__) 5134543ef51SXin LI 5144543ef51SXin LI # define assert_record_handler_called(storage, index, expected_name, \ 5154543ef51SXin LI expected_arg) \ 5164543ef51SXin LI do { \ 5174543ef51SXin LI const struct handler_record_entry *e \ 5184543ef51SXin LI = handler_record_get(storage, index); \ 5194543ef51SXin LI assert_true(strcmp(e->name, expected_name) == 0); \ 5204543ef51SXin LI assert_true(e->arg == (expected_arg)); \ 5214543ef51SXin LI } while (0) 5224543ef51SXin LI 5234543ef51SXin LI /* Entity Declaration Handlers */ 5244543ef51SXin LI # define ENTITY_MATCH_FAIL (-1) 5254543ef51SXin LI # define ENTITY_MATCH_NOT_FOUND (0) 5264543ef51SXin LI # define ENTITY_MATCH_SUCCESS (1) 5274543ef51SXin LI 5284543ef51SXin LI extern void XMLCALL param_entity_match_handler( 5294543ef51SXin LI void *userData, const XML_Char *entityName, int is_parameter_entity, 5304543ef51SXin LI const XML_Char *value, int value_length, const XML_Char *base, 5314543ef51SXin LI const XML_Char *systemId, const XML_Char *publicId, 5324543ef51SXin LI const XML_Char *notationName); 5334543ef51SXin LI 5344543ef51SXin LI extern void param_entity_match_init(const XML_Char *name, 5354543ef51SXin LI const XML_Char *value); 5364543ef51SXin LI 5374543ef51SXin LI extern int get_param_entity_match_flag(void); 5384543ef51SXin LI 5394543ef51SXin LI /* Misc handlers */ 5404543ef51SXin LI 5414543ef51SXin LI extern void XMLCALL xml_decl_handler(void *userData, const XML_Char *version, 5424543ef51SXin LI const XML_Char *encoding, int standalone); 5434543ef51SXin LI 5444543ef51SXin LI extern void XMLCALL param_check_skip_handler(void *userData, 5454543ef51SXin LI const XML_Char *entityName, 5464543ef51SXin LI int is_parameter_entity); 5474543ef51SXin LI 5484543ef51SXin LI extern void XMLCALL data_check_comment_handler(void *userData, 5494543ef51SXin LI const XML_Char *data); 5504543ef51SXin LI 5514543ef51SXin LI extern void XMLCALL selective_aborting_default_handler(void *userData, 5524543ef51SXin LI const XML_Char *s, 5534543ef51SXin LI int len); 5544543ef51SXin LI 5554543ef51SXin LI extern void XMLCALL suspending_comment_handler(void *userData, 5564543ef51SXin LI const XML_Char *data); 5574543ef51SXin LI 5584543ef51SXin LI extern void XMLCALL element_decl_suspender(void *userData, const XML_Char *name, 5594543ef51SXin LI XML_Content *model); 5604543ef51SXin LI 561*fe927888SPhilip Paeps extern void XMLCALL suspend_after_element_declaration(void *userData, 562*fe927888SPhilip Paeps const XML_Char *name, 563*fe927888SPhilip Paeps XML_Content *model); 564*fe927888SPhilip Paeps 5654543ef51SXin LI extern void XMLCALL accumulate_pi_characters(void *userData, 5664543ef51SXin LI const XML_Char *target, 5674543ef51SXin LI const XML_Char *data); 5684543ef51SXin LI 5694543ef51SXin LI extern void XMLCALL accumulate_comment(void *userData, const XML_Char *data); 5704543ef51SXin LI 5714543ef51SXin LI extern void XMLCALL accumulate_entity_decl( 5724543ef51SXin LI void *userData, const XML_Char *entityName, int is_parameter_entity, 5734543ef51SXin LI const XML_Char *value, int value_length, const XML_Char *base, 5744543ef51SXin LI const XML_Char *systemId, const XML_Char *publicId, 5754543ef51SXin LI const XML_Char *notationName); 5764543ef51SXin LI 577*fe927888SPhilip Paeps extern void XMLCALL accumulate_char_data_and_suspend(void *userData, 578*fe927888SPhilip Paeps const XML_Char *s, 579*fe927888SPhilip Paeps int len); 580*fe927888SPhilip Paeps 5814543ef51SXin LI extern void XMLCALL accumulate_start_element(void *userData, 5824543ef51SXin LI const XML_Char *name, 5834543ef51SXin LI const XML_Char **atts); 5844543ef51SXin LI 585908f215eSXin LI extern void XMLCALL accumulate_characters(void *userData, const XML_Char *s, 586908f215eSXin LI int len); 587908f215eSXin LI 588908f215eSXin LI extern void XMLCALL accumulate_attribute(void *userData, const XML_Char *name, 589908f215eSXin LI const XML_Char **atts); 590908f215eSXin LI 591908f215eSXin LI extern void XMLCALL ext_accumulate_characters(void *userData, const XML_Char *s, 592908f215eSXin LI int len); 593908f215eSXin LI 5944543ef51SXin LI typedef struct default_check { 5954543ef51SXin LI const XML_Char *expected; 5964543ef51SXin LI const int expectedLen; 5974543ef51SXin LI XML_Bool seen; 5984543ef51SXin LI } DefaultCheck; 5994543ef51SXin LI 6004543ef51SXin LI void XMLCALL checking_default_handler(void *userData, const XML_Char *s, 6014543ef51SXin LI int len); 6024543ef51SXin LI 6034543ef51SXin LI typedef struct { 6044543ef51SXin LI XML_Parser parser; 6054543ef51SXin LI CharData *storage; 6064543ef51SXin LI } ParserPlusStorage; 6074543ef51SXin LI 6084543ef51SXin LI extern void XMLCALL 6094543ef51SXin LI accumulate_and_suspend_comment_handler(void *userData, const XML_Char *data); 6104543ef51SXin LI 6114543ef51SXin LI #endif /* XML_HANDLERS_H */ 6124543ef51SXin LI 6134543ef51SXin LI #ifdef __cplusplus 6144543ef51SXin LI } 6154543ef51SXin LI #endif 616