summaryrefslogtreecommitdiff
path: root/include/xml.hpp
blob: cc593a3c4f6ddfdb4b06532dc3b0c8c27c596752 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#ifndef XML_HPP_INCLUDED
#define XML_HPP_INCLUDED

// Standard C++
#include <iostream>
#include <string>
#include <vector>

class XML {
	public:
		void parse(std::istream& in);

	protected:
		virtual void handle_start(const std::string& name, const std::vector<std::pair<std::string, std::string>>& attr) = 0;
		virtual void handle_end(const std::string& name) = 0;
		virtual void handle_cdata_start() {}
		virtual void handle_cdata_end() {}
		virtual void handle_data(const std::vector<char>&) {}

	private:
		static void tag_start(void* me, const char* name, const char* attr[]);
		static void tag_end(void* me, const char* name);
		static void cdata_start(void* me);
		static void cdata_end(void* me);
		static void data(void* me, const char* dat, int len);
};

#endif