xref: /freebsd/contrib/expat/tests/handlers.h (revision fe9278888fd4414abe2d922e469cf608005f4c65)
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