liblcf
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
reader_xml.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014 liblcf authors
3  * This file is released under the MIT License
4  * http://opensource.org/licenses/MIT
5  */
6 
7 #ifndef LCF_READER_XML_H
8 #define LCF_READER_XML_H
9 
10 #include <string>
11 #include <vector>
12 #include <cstdio>
13 #if defined(LCF_SUPPORT_XML)
14 # include <expat.h>
15 #endif
16 #include "reader_types.h"
17 #include "reader_options.h"
18 #include "reader_util.h"
19 
23 class XmlHandler;
24 
28 class XmlReader {
29 
30 public:
36  XmlReader(const std::string& filename);
37 
41  ~XmlReader();
42 
43  /*
44  * Opens the file.
45  */
46  void Open();
47 
51  void Close();
52 
58  bool IsOk() const;
59 
63  void Error(const char* fmt, ...);
64 
68  void Parse();
69 
73  void SetHandler(XmlHandler* handler);
74 
78  template <class T>
79  static void Read(T& ref, const std::string& data);
80 
84  template <class T>
85  static void ReadVector(std::vector<T>& ref, const std::string& data);
86 
90  void StartElement(const char* name, const char** atts);
91 
95  void CharacterData(const char* s, int len);
96 
100  void EndElement(const char* name);
101 
102 protected:
104  std::string filename;
106  FILE* stream;
108 #if defined(LCF_SUPPORT_XML)
109  XML_Parser parser;
110 #else
111  void* parser;
112 #endif
113 
114  int nesting;
116  std::vector<XmlHandler*> handlers;
118  std::string buffer;
119 
120 };
121 
125 class XmlHandler {
126 
127 public:
128  virtual void StartElement(XmlReader& /* reader */, const char* /* name */, const char** /* atts */) {}
129  virtual void CharacterData(XmlReader& /* reader */, const std::string& /* data */) {}
130  virtual void EndElement(XmlReader& /* reader */, const char* /* name */) {}
132  virtual ~XmlHandler() {}
133 
134 };
135 
136 #endif
RPG::Database data
Definition: data.cpp:11
void SetHandler(XmlHandler *handler)
Definition: reader_xml.cpp:92
FILE * stream
Definition: reader_xml.h:106
virtual ~XmlHandler()
Definition: reader_xml.h:132
void Error(const char *fmt,...)
Definition: reader_xml.cpp:71
bool IsOk() const
Definition: reader_xml.cpp:67
virtual void CharacterData(XmlReader &, const std::string &)
Definition: reader_xml.h:129
virtual void StartElement(XmlReader &, const char *, const char **)
Definition: reader_xml.h:128
void Open()
Definition: reader_xml.cpp:42
std::string filename
Definition: reader_xml.h:104
static void ReadVector(std::vector< T > &ref, const std::string &data)
Definition: reader_xml.cpp:186
void Close()
Definition: reader_xml.cpp:55
std::string buffer
Definition: reader_xml.h:118
void StartElement(const char *name, const char **atts)
Definition: reader_xml.cpp:96
void CharacterData(const char *s, int len)
Definition: reader_xml.cpp:103
std::vector< XmlHandler * > handlers
Definition: reader_xml.h:116
void * parser
Definition: reader_xml.h:111
void EndElement(const char *name)
Definition: reader_xml.cpp:107
void Parse()
Definition: reader_xml.cpp:79
virtual void EndElement(XmlReader &, const char *)
Definition: reader_xml.h:130
int nesting
Definition: reader_xml.h:114
XmlReader(const std::string &filename)
Definition: reader_xml.cpp:30
static void Read(T &ref, const std::string &data)