1 // =================================
 2 // Copyright (c) 2021 Seppo Laakko
 3 // Distributed under the MIT license
 4 // =================================
 5 
 6 // ==========================================================
 7 // Interface to a non-validating XML parser with SAX-like API
 8 // Author: S. Laakko
 9 // ==========================================================
10 
11 #ifndef SNGXML_XML_XML_PARSER
12 #define SNGXML_XML_XML_PARSER
13 #include <sngxml/xml/XmlContentHandler.hpp>
14 
15 namespace sngxml { namespace xml {
16 
17 enum class Flags : int 
18 {
19     none=  0debug=  1 << 0
20 };
21 
22 inline Flags operator&(Flags flagsFlags flag)
23 {
24     return static_cast<Flags>(static_cast<int>(flags) & static_cast<int>(flag));
25 }
26 
27 inline Flags operator|(Flags flagsFlags flag)
28 {
29     return static_cast<Flags>(static_cast<int>(flags) | static_cast<int>(flag));
30 }
31 
32 inline Flags operator~(Flags flags)
33 {
34     return static_cast<Flags>(~static_cast<int>(flags));
35 }
36 
37 //  ==================================================================================
38 //  ParseXmlFile parses given UTF-8 encoded XML file using given content handler.
39 //  ==================================================================================
40 
41 void ParseXmlFile(const std::string& xmlFileNameXmlContentHandler* contentHandler);
42 void ParseXmlFile(const std::string& xmlFileNameXmlContentHandler* contentHandlerFlags flags);
43 
44 //  ==================================================================================
45 //  ParseXmlContent parses given UTF-8 encoded XML string using given content handler.
46 //  systemId is used for error messages only. It can be for example a file name or URL 
47 //  that identifies the XML string to parse.
48 //  ===================================================================================
49 
50 void ParseXmlContent(const std::string& xmlContentconst std::string& systemIdXmlContentHandler* contentHandler);
51 void ParseXmlContent(const std::string& xmlContentconst std::string& systemIdXmlContentHandler* contentHandlerFlags flags);
52 
53 //  ===================================================================================
54 //  ParseXmlContent parses given UTF-32 encoded XML string using given content handler.
55 //  systemId is used for error messages only. It can be for example a file name or URL 
56 //  that identifies the XML string to parse.
57 //  ===================================================================================
58 
59 void ParseXmlContent(const std::u32string& xmlContentconst std::string& systemIdXmlContentHandler* contentHandler);
60 void ParseXmlContent(const std::u32string& xmlContentconst std::string& systemIdXmlContentHandler* contentHandlerFlags flags);
61 
62 } } // namespace sngxml::xml
63 
64 #endif // SNGXML_XML_XML_PARSER