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 95*908f215eSXin LI typedef struct StructParserAndElementInfo { 96*908f215eSXin LI XML_Parser parser; 97*908f215eSXin LI ElementInfo *info; 98*908f215eSXin LI } ParserAndElementInfo; 99*908f215eSXin 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; 3284543ef51SXin LI } ExtHdlrData; 3294543ef51SXin LI 3304543ef51SXin LI extern int XMLCALL external_entity_oneshot_loader(XML_Parser parser, 3314543ef51SXin LI const XML_Char *context, 3324543ef51SXin LI const XML_Char *base, 3334543ef51SXin LI const XML_Char *systemId, 3344543ef51SXin LI const XML_Char *publicId); 3354543ef51SXin LI 3364543ef51SXin LI typedef struct ExtTest2 { 3374543ef51SXin LI const char *parse_text; 3384543ef51SXin LI int parse_len; 3394543ef51SXin LI const XML_Char *encoding; 3404543ef51SXin LI CharData *storage; 3414543ef51SXin LI } ExtTest2; 3424543ef51SXin LI 3434543ef51SXin LI extern int XMLCALL external_entity_loader2(XML_Parser parser, 3444543ef51SXin LI const XML_Char *context, 3454543ef51SXin LI const XML_Char *base, 3464543ef51SXin LI const XML_Char *systemId, 3474543ef51SXin LI const XML_Char *publicId); 3484543ef51SXin LI 3494543ef51SXin LI typedef struct ExtFaults2 { 3504543ef51SXin LI const char *parse_text; 3514543ef51SXin LI int parse_len; 3524543ef51SXin LI const char *fail_text; 3534543ef51SXin LI const XML_Char *encoding; 3544543ef51SXin LI enum XML_Error error; 3554543ef51SXin LI } ExtFaults2; 3564543ef51SXin LI 3574543ef51SXin LI extern int XMLCALL external_entity_faulter2(XML_Parser parser, 3584543ef51SXin LI const XML_Char *context, 3594543ef51SXin LI const XML_Char *base, 3604543ef51SXin LI const XML_Char *systemId, 3614543ef51SXin LI const XML_Char *publicId); 3624543ef51SXin LI 3634543ef51SXin LI extern int XMLCALL external_entity_unfinished_attlist(XML_Parser parser, 3644543ef51SXin LI const XML_Char *context, 3654543ef51SXin LI const XML_Char *base, 3664543ef51SXin LI const XML_Char *systemId, 3674543ef51SXin LI const XML_Char *publicId); 3684543ef51SXin LI 3694543ef51SXin LI extern int XMLCALL external_entity_handler(XML_Parser parser, 3704543ef51SXin LI const XML_Char *context, 3714543ef51SXin LI const XML_Char *base, 3724543ef51SXin LI const XML_Char *systemId, 3734543ef51SXin LI const XML_Char *publicId); 3744543ef51SXin LI 3754543ef51SXin LI extern int XMLCALL external_entity_duff_loader(XML_Parser parser, 3764543ef51SXin LI const XML_Char *context, 3774543ef51SXin LI const XML_Char *base, 3784543ef51SXin LI const XML_Char *systemId, 3794543ef51SXin LI const XML_Char *publicId); 3804543ef51SXin LI 3814543ef51SXin LI extern int XMLCALL external_entity_dbl_handler(XML_Parser parser, 3824543ef51SXin LI const XML_Char *context, 3834543ef51SXin LI const XML_Char *base, 3844543ef51SXin LI const XML_Char *systemId, 3854543ef51SXin LI const XML_Char *publicId); 3864543ef51SXin LI 3874543ef51SXin LI extern int XMLCALL external_entity_dbl_handler_2(XML_Parser parser, 3884543ef51SXin LI const XML_Char *context, 3894543ef51SXin LI const XML_Char *base, 3904543ef51SXin LI const XML_Char *systemId, 3914543ef51SXin LI const XML_Char *publicId); 3924543ef51SXin LI 3934543ef51SXin LI extern int XMLCALL external_entity_alloc_set_encoding(XML_Parser parser, 3944543ef51SXin LI const XML_Char *context, 3954543ef51SXin LI const XML_Char *base, 3964543ef51SXin LI const XML_Char *systemId, 3974543ef51SXin LI const XML_Char *publicId); 3984543ef51SXin LI 3994543ef51SXin LI extern int XMLCALL external_entity_reallocator(XML_Parser parser, 4004543ef51SXin LI const XML_Char *context, 4014543ef51SXin LI const XML_Char *base, 4024543ef51SXin LI const XML_Char *systemId, 4034543ef51SXin LI const XML_Char *publicId); 4044543ef51SXin LI 4054543ef51SXin LI extern int XMLCALL external_entity_alloc(XML_Parser parser, 4064543ef51SXin LI const XML_Char *context, 4074543ef51SXin LI const XML_Char *base, 4084543ef51SXin LI const XML_Char *systemId, 4094543ef51SXin LI const XML_Char *publicId); 4104543ef51SXin LI 4114543ef51SXin LI extern int XMLCALL external_entity_parser_create_alloc_fail_handler( 4124543ef51SXin LI XML_Parser parser, const XML_Char *context, const XML_Char *base, 4134543ef51SXin LI const XML_Char *systemId, const XML_Char *publicId); 4144543ef51SXin LI 4154543ef51SXin LI struct AccountingTestCase { 4164543ef51SXin LI const char *primaryText; 4174543ef51SXin LI const char *firstExternalText; /* often NULL */ 4184543ef51SXin LI const char *secondExternalText; /* often NULL */ 4194543ef51SXin LI const unsigned long long expectedCountBytesIndirectExtra; 4204543ef51SXin LI }; 4214543ef51SXin LI 4224543ef51SXin LI extern int accounting_external_entity_ref_handler(XML_Parser parser, 4234543ef51SXin LI const XML_Char *context, 4244543ef51SXin LI const XML_Char *base, 4254543ef51SXin LI const XML_Char *systemId, 4264543ef51SXin LI const XML_Char *publicId); 4274543ef51SXin LI 4284543ef51SXin LI /* NotStandalone handlers */ 4294543ef51SXin LI 4304543ef51SXin LI extern int XMLCALL reject_not_standalone_handler(void *userData); 4314543ef51SXin LI 4324543ef51SXin LI extern int XMLCALL accept_not_standalone_handler(void *userData); 4334543ef51SXin LI 4344543ef51SXin LI /* Attribute List handlers */ 4354543ef51SXin LI 4364543ef51SXin LI typedef struct AttTest { 4374543ef51SXin LI const char *definition; 4384543ef51SXin LI const XML_Char *element_name; 4394543ef51SXin LI const XML_Char *attr_name; 4404543ef51SXin LI const XML_Char *attr_type; 4414543ef51SXin LI const XML_Char *default_value; 4424543ef51SXin LI int is_required; 4434543ef51SXin LI } AttTest; 4444543ef51SXin LI 4454543ef51SXin LI extern void XMLCALL verify_attlist_decl_handler( 4464543ef51SXin LI void *userData, const XML_Char *element_name, const XML_Char *attr_name, 4474543ef51SXin LI const XML_Char *attr_type, const XML_Char *default_value, int is_required); 4484543ef51SXin LI 4494543ef51SXin LI /* Character data handlers */ 4504543ef51SXin LI 4514543ef51SXin LI extern void XMLCALL clearing_aborting_character_handler(void *userData, 4524543ef51SXin LI const XML_Char *s, 4534543ef51SXin LI int len); 4544543ef51SXin LI 4554543ef51SXin LI extern void XMLCALL parser_stop_character_handler(void *userData, 4564543ef51SXin LI const XML_Char *s, int len); 4574543ef51SXin LI 4584543ef51SXin LI extern void XMLCALL cr_cdata_handler(void *userData, const XML_Char *s, 4594543ef51SXin LI int len); 4604543ef51SXin LI 4614543ef51SXin LI extern void XMLCALL rsqb_handler(void *userData, const XML_Char *s, int len); 4624543ef51SXin LI 4634543ef51SXin LI typedef struct ByteTestData { 4644543ef51SXin LI int start_element_len; 4654543ef51SXin LI int cdata_len; 4664543ef51SXin LI int total_string_len; 4674543ef51SXin LI } ByteTestData; 4684543ef51SXin LI 4694543ef51SXin LI extern void XMLCALL byte_character_handler(void *userData, const XML_Char *s, 4704543ef51SXin LI int len); 4714543ef51SXin LI 4724543ef51SXin LI extern void XMLCALL ext2_accumulate_characters(void *userData, 4734543ef51SXin LI const XML_Char *s, int len); 4744543ef51SXin LI 4754543ef51SXin LI /* Handlers that record their `len` arg and a single identifying character */ 4764543ef51SXin LI 4774543ef51SXin LI struct handler_record_entry { 4784543ef51SXin LI const char *name; 4794543ef51SXin LI int arg; 4804543ef51SXin LI }; 4814543ef51SXin LI struct handler_record_list { 4824543ef51SXin LI int count; 4834543ef51SXin LI struct handler_record_entry entries[50]; // arbitrary big-enough max count 4844543ef51SXin LI }; 4854543ef51SXin LI 4864543ef51SXin LI extern void XMLCALL record_default_handler(void *userData, const XML_Char *s, 4874543ef51SXin LI int len); 4884543ef51SXin LI 4894543ef51SXin LI extern void XMLCALL record_cdata_handler(void *userData, const XML_Char *s, 4904543ef51SXin LI int len); 4914543ef51SXin LI 4924543ef51SXin LI extern void XMLCALL record_cdata_nodefault_handler(void *userData, 4934543ef51SXin LI const XML_Char *s, int len); 4944543ef51SXin LI 4954543ef51SXin LI extern void XMLCALL record_skip_handler(void *userData, 4964543ef51SXin LI const XML_Char *entityName, 4974543ef51SXin LI int is_parameter_entity); 4984543ef51SXin LI 4994543ef51SXin LI extern void XMLCALL record_element_start_handler(void *userData, 5004543ef51SXin LI const XML_Char *name, 5014543ef51SXin LI const XML_Char **atts); 5024543ef51SXin LI 5034543ef51SXin LI extern void XMLCALL record_element_end_handler(void *userData, 5044543ef51SXin LI const XML_Char *name); 5054543ef51SXin LI 5064543ef51SXin LI extern const struct handler_record_entry * 5074543ef51SXin LI _handler_record_get(const struct handler_record_list *storage, int index, 5084543ef51SXin LI const char *file, int line); 5094543ef51SXin LI 5104543ef51SXin LI # define handler_record_get(storage, index) \ 5114543ef51SXin LI _handler_record_get((storage), (index), __FILE__, __LINE__) 5124543ef51SXin LI 5134543ef51SXin LI # define assert_record_handler_called(storage, index, expected_name, \ 5144543ef51SXin LI expected_arg) \ 5154543ef51SXin LI do { \ 5164543ef51SXin LI const struct handler_record_entry *e \ 5174543ef51SXin LI = handler_record_get(storage, index); \ 5184543ef51SXin LI assert_true(strcmp(e->name, expected_name) == 0); \ 5194543ef51SXin LI assert_true(e->arg == (expected_arg)); \ 5204543ef51SXin LI } while (0) 5214543ef51SXin LI 5224543ef51SXin LI /* Entity Declaration Handlers */ 5234543ef51SXin LI # define ENTITY_MATCH_FAIL (-1) 5244543ef51SXin LI # define ENTITY_MATCH_NOT_FOUND (0) 5254543ef51SXin LI # define ENTITY_MATCH_SUCCESS (1) 5264543ef51SXin LI 5274543ef51SXin LI extern void XMLCALL param_entity_match_handler( 5284543ef51SXin LI void *userData, const XML_Char *entityName, int is_parameter_entity, 5294543ef51SXin LI const XML_Char *value, int value_length, const XML_Char *base, 5304543ef51SXin LI const XML_Char *systemId, const XML_Char *publicId, 5314543ef51SXin LI const XML_Char *notationName); 5324543ef51SXin LI 5334543ef51SXin LI extern void param_entity_match_init(const XML_Char *name, 5344543ef51SXin LI const XML_Char *value); 5354543ef51SXin LI 5364543ef51SXin LI extern int get_param_entity_match_flag(void); 5374543ef51SXin LI 5384543ef51SXin LI /* Misc handlers */ 5394543ef51SXin LI 5404543ef51SXin LI extern void XMLCALL xml_decl_handler(void *userData, const XML_Char *version, 5414543ef51SXin LI const XML_Char *encoding, int standalone); 5424543ef51SXin LI 5434543ef51SXin LI extern void XMLCALL param_check_skip_handler(void *userData, 5444543ef51SXin LI const XML_Char *entityName, 5454543ef51SXin LI int is_parameter_entity); 5464543ef51SXin LI 5474543ef51SXin LI extern void XMLCALL data_check_comment_handler(void *userData, 5484543ef51SXin LI const XML_Char *data); 5494543ef51SXin LI 5504543ef51SXin LI extern void XMLCALL selective_aborting_default_handler(void *userData, 5514543ef51SXin LI const XML_Char *s, 5524543ef51SXin LI int len); 5534543ef51SXin LI 5544543ef51SXin LI extern void XMLCALL suspending_comment_handler(void *userData, 5554543ef51SXin LI const XML_Char *data); 5564543ef51SXin LI 5574543ef51SXin LI extern void XMLCALL element_decl_suspender(void *userData, const XML_Char *name, 5584543ef51SXin LI XML_Content *model); 5594543ef51SXin LI 5604543ef51SXin LI extern void XMLCALL accumulate_pi_characters(void *userData, 5614543ef51SXin LI const XML_Char *target, 5624543ef51SXin LI const XML_Char *data); 5634543ef51SXin LI 5644543ef51SXin LI extern void XMLCALL accumulate_comment(void *userData, const XML_Char *data); 5654543ef51SXin LI 5664543ef51SXin LI extern void XMLCALL accumulate_entity_decl( 5674543ef51SXin LI void *userData, const XML_Char *entityName, int is_parameter_entity, 5684543ef51SXin LI const XML_Char *value, int value_length, const XML_Char *base, 5694543ef51SXin LI const XML_Char *systemId, const XML_Char *publicId, 5704543ef51SXin LI const XML_Char *notationName); 5714543ef51SXin LI 5724543ef51SXin LI extern void XMLCALL accumulate_start_element(void *userData, 5734543ef51SXin LI const XML_Char *name, 5744543ef51SXin LI const XML_Char **atts); 5754543ef51SXin LI 576*908f215eSXin LI extern void XMLCALL accumulate_characters(void *userData, const XML_Char *s, 577*908f215eSXin LI int len); 578*908f215eSXin LI 579*908f215eSXin LI extern void XMLCALL accumulate_attribute(void *userData, const XML_Char *name, 580*908f215eSXin LI const XML_Char **atts); 581*908f215eSXin LI 582*908f215eSXin LI extern void XMLCALL ext_accumulate_characters(void *userData, const XML_Char *s, 583*908f215eSXin LI int len); 584*908f215eSXin LI 5854543ef51SXin LI typedef struct default_check { 5864543ef51SXin LI const XML_Char *expected; 5874543ef51SXin LI const int expectedLen; 5884543ef51SXin LI XML_Bool seen; 5894543ef51SXin LI } DefaultCheck; 5904543ef51SXin LI 5914543ef51SXin LI void XMLCALL checking_default_handler(void *userData, const XML_Char *s, 5924543ef51SXin LI int len); 5934543ef51SXin LI 5944543ef51SXin LI typedef struct { 5954543ef51SXin LI XML_Parser parser; 5964543ef51SXin LI CharData *storage; 5974543ef51SXin LI } ParserPlusStorage; 5984543ef51SXin LI 5994543ef51SXin LI extern void XMLCALL 6004543ef51SXin LI accumulate_and_suspend_comment_handler(void *userData, const XML_Char *data); 6014543ef51SXin LI 6024543ef51SXin LI #endif /* XML_HANDLERS_H */ 6034543ef51SXin LI 6044543ef51SXin LI #ifdef __cplusplus 6054543ef51SXin LI } 6064543ef51SXin LI #endif 607