summaryrefslogtreecommitdiff
path: root/src/experimental/xmlreader.h
blob: 7cb44c9ad0e9bf196825df759c03fb05e0312b68 (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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
 * Copyright (C) 2007-2011 Xagasoft, All rights reserved.
 *
 * This file is part of the libbu++ library and is released under the
 * terms of the license contained in the file LICENSE.
 */

#ifndef BU_XML_READER_H
#define BU_XML_READER_H

#include "bu/string.h"
#include "bu/exceptionbase.h"

namespace Bu
{
	class Stream;

	subExceptionDecl( XmlException );

	class XmlReader
	{
	public:
		XmlReader( Stream &rInput );
		virtual ~XmlReader();

	private:
		Stream &rInput;
		int iCurToken;
		int iNextToken;
		Bu::String sBuf;
		Bu::String sStr;
		bool bIgnoreWS;
		typedef struct StreamPos
		{
			StreamPos() : iLine( 1 ), iChar( 1 ) { }
			int iLine;
			int iChar;
		} StreamPos;
		StreamPos spCurToken;
		StreamPos spNextToken;


		enum
		{
			tokXmlDeclHead	=	0x100,
			tokXmlDeclEnd,
			tokWS,
			tokIdent,
			tokString
		};

		void fillBuffer();
		void cleanupBuffer( int iUsed );
		int nextToken();

		void stDocument();
		void stProlog();
		void stXmlDecl();

		void error( const char *sMessage );
	};
};

#endif