ATLAS Offline Software
Loading...
Searching...
No Matches
ExpatCoreParser.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef XMLCOREPARSER_EXPATCOREPARSER_H
6#define XMLCOREPARSER_EXPATCOREPARSER_H
7
10
11#include <expat.h>
12#include <iosfwd>
13#include <map>
14#include <string>
15#include <string_view>
16#include <mutex>
17#include <memory>
18
19
21{
22public:
23
24 typedef std::map <std::string, std::string> ExternalEntityMap;
25
26 static std::unique_ptr<XMLCoreNode> parse (std::string_view file_name);
27 static std::unique_ptr<XMLCoreNode> parse_string (const std::string& text);
28
29 static void register_external_entity (const std::string& name, const std::string& file_name);
30 static void register_text_entity (const std::string& name, const std::string& text);
31
32private:
33
34 ExpatCoreParser (const std::string& prefix);
35 void configure_parser(XML_Parser p);
36 XMLCoreNode* add_node (std::unique_ptr<XMLCoreNode> node);
37 void do_start (const char* el, const char** attr);
38 void do_end (const char* el);
39 void do_char_data (const XML_Char* s, int len);
40 void do_default_handler (const XML_Char* s, int len);
41 void do_comment (const XML_Char* s);
42 int generic_parse (XML_Parser p, const std::string& file_name);
43 int generic_text_parse (XML_Parser p, const std::string& text);
44 int stream_parse(XML_Parser p, std::istream& is, const std::string & source_name = {});
45 int do_external_entity (XML_Parser parser, const XML_Char* context, const XML_Char* systemId);
46 static void start (void* /*user_data*/, const char* el, const char** attr);
47 static void end (void* /*user_data*/, const char* el);
48 static void char_data (void* /*user_data*/, const XML_Char* s, int len);
49 static void default_handler (void* /*user_data*/, const XML_Char* s, int len);
50 static void comment (void* /*userData*/, const XML_Char* s);
51 static int external_entity (XML_Parser parser, const XML_Char* context,
52 const XML_Char* /*base*/, const XML_Char* systemId,
53 const XML_Char* /*publicId*/);
54 std::unique_ptr<XMLCoreNode> get_document ();
55 std::string find_external_entity (const std::string& name);
56 std::string find_text_entity (const std::string& name);
57 std::string find_entity (const std::string& name, const ExternalEntityMap & mapChoice);
58 void clean ();
59 std::unique_ptr<XMLCoreNode> m_top;
61 std::string m_prefix;
62 static std::mutex s_mutex;
63 typedef std::lock_guard<std::mutex> lock_t;
65 static ExternalEntityMap s_text_entities ATLAS_THREAD_SAFE;
66};
67
68#endif
69
Simple DOM-like node structure to hold the result of XML parsing.
Define macros for attributes used to control the static checker.
int generic_text_parse(XML_Parser p, const std::string &text)
std::string find_text_entity(const std::string &name)
void do_start(const char *el, const char **attr)
static void register_text_entity(const std::string &name, const std::string &text)
void do_default_handler(const XML_Char *s, int len)
std::string find_external_entity(const std::string &name)
std::string m_prefix
XMLCoreNode * add_node(std::unique_ptr< XMLCoreNode > node)
static void char_data(void *, const XML_Char *s, int len)
static int external_entity(XML_Parser parser, const XML_Char *context, const XML_Char *, const XML_Char *systemId, const XML_Char *)
void configure_parser(XML_Parser p)
std::lock_guard< std::mutex > lock_t
int generic_parse(XML_Parser p, const std::string &file_name)
static void start(void *, const char *el, const char **attr)
std::string find_entity(const std::string &name, const ExternalEntityMap &mapChoice)
void do_end(const char *el)
static void default_handler(void *, const XML_Char *s, int len)
std::unique_ptr< XMLCoreNode > get_document()
void do_comment(const XML_Char *s)
static std::unique_ptr< XMLCoreNode > parse(std::string_view file_name)
void do_char_data(const XML_Char *s, int len)
XMLCoreNode * m_last
static std::unique_ptr< XMLCoreNode > parse_string(const std::string &text)
static void register_external_entity(const std::string &name, const std::string &file_name)
int stream_parse(XML_Parser p, std::istream &is, const std::string &source_name={})
std::unique_ptr< XMLCoreNode > m_top
static void comment(void *, const XML_Char *s)
std::map< std::string, std::string > ExternalEntityMap
int do_external_entity(XML_Parser parser, const XML_Char *context, const XML_Char *systemId)
static ExternalEntityMap s_entities ATLAS_THREAD_SAFE
static void end(void *, const char *el)
ExpatCoreParser(const std::string &prefix)
static std::mutex s_mutex
Simple DOM-like node structure to hold the result of XML parsing.
Definition XMLCoreNode.h:45
Definition node.h:24