OpenLexocad  27.0
Reader.h
Go to the documentation of this file.
1 #ifndef __CA_Reader_H__
2 #define __CA_Reader_H__
3 
5 #include <Base/FileInfo.h>
6 #include <Base/String.h>
7 #include <Base/Writer.h>
8 #include <Base/base_defines.h>
9 
10 #include <map>
11 #include <string>
12 #include <xercesc/sax2/Attributes.hpp>
13 #include <xercesc/sax2/DefaultHandler.hpp>
14 #include <xercesc/sax2/SAX2XMLReader.hpp>
15 #include <xercesc/util/XMLString.hpp>
16 
17 
18 
19 XERCES_CPP_NAMESPACE_USE
20 
21 class QByteArray;
22 
23 #pragma warning(push)
24 #pragma warning(disable : 4275)
25 
26 namespace Base
27 {
28 class XMLReaderPUG_Pimp;
29 
31 {
32 public:
34  XMLReaderPUG(const Base::String& FileName, std::istream&);
35  XMLReaderPUG(const Base::String& FileName, const QByteArray& dat);
36  ~XMLReaderPUG();
37 
38  inline bool isValid() const;
39  inline void read(void);
40  inline const char* localName(void);
41  inline void readElement(const char* ElementName = 0);
42  inline void readEndElement(const char* ElementName = 0);
43  inline void readCharacters(void);
44  inline unsigned int getAttributeCount(void) const;
45  inline bool hasAttribute(const char* AttrName) const;
46  inline long getAttributeAsInteger(const char* AttrName) const;
47  inline long getAttributeAsInteger(const wchar_t* AttrName) const;
48  inline double getAttributeAsDouble(const char* AttrName) const;
49  inline double getAttributeAsDouble(const wchar_t* AttrName) const;
50  inline Base::String getAttribute(const char* AttrName) const;
51  inline Base::String getAttribute(const wchar_t* AttrName) const;
52  inline Base::String getText();
53  virtual bool readInline() { return false; }
54 
55 
56 private:
57  XMLReaderPUG_Pimp* _pimpl;
58 };
59 
60 
61 
62 class BASE_EXPORT XMLReader : public AbstractXMLReader, public DefaultHandler
63 {
64 public:
66  XMLReader(const Base::String& FileName, std::istream&);
67  ~XMLReader();
68 
69  inline bool isValid() const { return _valid; }
70 
73  // read the next element
74  inline void read(void);
76  inline const char* localName(void);
78  inline void readElement(const char* ElementName = 0);
80  inline void readEndElement(const char* ElementName = 0);
82  inline void readCharacters(void);
84 
87  inline unsigned int getAttributeCount(void) const;
90  inline bool hasAttribute(const char* AttrName) const;
92  inline long getAttributeAsInteger(const char* AttrName) const;
94  inline long getAttributeAsInteger(const wchar_t* AttrName) const;
96  inline double getAttributeAsDouble(const char* AttrName) const;
98  inline double getAttributeAsDouble(const wchar_t* AttrName) const;
100  inline Base::String getAttribute(const char* AttrName) const;
102  inline Base::String getAttribute(const wchar_t* AttrName) const;
104  inline Base::String getText();
106 
107  virtual bool readInline() { return false; }
108 
109 
110 
111 
112 private:
113 
114  virtual void setDocumentLocator(const Locator* const locator);
115 
116  // -----------------------------------------------------------------------
117  // Handlers for the SAX ContentHandler interface
118  // -----------------------------------------------------------------------
119  inline virtual void startElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname, const Attributes& attrs);
120  inline virtual void endElement(const XMLCh* const uri, const XMLCh* const localname, const XMLCh* const qname);
121  inline virtual void characters(const XMLCh* const chars, const unsigned int length);
122  inline virtual void ignorableWhitespace(const XMLCh* const chars, const unsigned int length);
123  inline virtual void resetDocument();
124 
125  inline virtual void startCDATA();
126  inline virtual void endCDATA();
127 
128 
129  // -----------------------------------------------------------------------
130  // Handlers for the SAX ErrorHandler interface
131  // -----------------------------------------------------------------------
132  void warning(const SAXParseException& exc);
133  void error(const SAXParseException& exc);
134  void fatalError(const SAXParseException& exc);
135  void resetErrors();
136 
137 
138  std::string LocalName;
139  Base::String Characters;
140  unsigned int CharacterCount;
141 
142  const Attributes* m_attr;
143  std::map<std::string, Base::String> AttrMap;
144  typedef std::map<std::string, Base::String> AttrMapType;
145 
146  enum
147  {
148  None = 0,
149  Chars,
150  StartElement,
151  StartEndElement,
152  EndElement
153  } ReadType;
154 
155 
156  FileInfo _File;
157  SAX2XMLReader* parser;
158  XMLPScanToken token;
159  bool _valid;
160  static bool isinit;
161  Base::String _currentText;
162  bool _CDATA_START;
163  bool _CDATA_END;
164  const Locator* m_locator = 0;
165 };
166 } // namespace Base
167 
168 #pragma warning(pop)
169 
170 #endif // __CA_Reader_H__
#define BASE_EXPORT
Definition: base_defines.h:12
virtual bool readInline()
Definition: Reader.h:107
A Utf-16 (windows) or ucs4 (unix) encoded string class.
Definition: String.h:29
Definition: AbstractXMLReader.h:10
virtual bool readInline()
Definition: Reader.h:53
Definition: Reader.h:30
bool isValid() const
Definition: Reader.h:69
Definition: Reader.h:62
Definition: AbstractXMLReader.h:8