diff options
author | Mike Buland <eichlan@xagasoft.com> | 2007-05-08 06:31:33 +0000 |
---|---|---|
committer | Mike Buland <eichlan@xagasoft.com> | 2007-05-08 06:31:33 +0000 |
commit | c17c4ebbab022de80a9f893115f2fd41e6a07c44 (patch) | |
tree | e2d49c6e96447b6046f5567fa897f4da56caf639 /src/xmlreader.cpp | |
parent | 0f0be6146dc711f8d44db0348e8fe0d010a31ca7 (diff) | |
download | libbu++-c17c4ebbab022de80a9f893115f2fd41e6a07c44.tar.gz libbu++-c17c4ebbab022de80a9f893115f2fd41e6a07c44.tar.bz2 libbu++-c17c4ebbab022de80a9f893115f2fd41e6a07c44.tar.xz libbu++-c17c4ebbab022de80a9f893115f2fd41e6a07c44.zip |
Added the TAF format structures and XML format structures, I'm making up TAF
(textual archive format), but named it wrong, this seemed easier than redoing
it all.
Diffstat (limited to '')
-rw-r--r-- | src/xmlreader.cpp | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/src/xmlreader.cpp b/src/xmlreader.cpp new file mode 100644 index 0000000..432ecc1 --- /dev/null +++ b/src/xmlreader.cpp | |||
@@ -0,0 +1,108 @@ | |||
1 | #include "xmlreader.h" | ||
2 | |||
3 | Bu::XmlReader::XmlReader( Bu::Stream &sIn ) : | ||
4 | sIn( sIn ) | ||
5 | { | ||
6 | } | ||
7 | |||
8 | Bu::XmlReader::~XmlReader() | ||
9 | { | ||
10 | } | ||
11 | |||
12 | const char *Bu::XmlReader::lookahead( int nAmnt ) | ||
13 | { | ||
14 | if( sBuf.getSize() >= nAmnt ) | ||
15 | return sBuf.getStr(); | ||
16 | |||
17 | int nNew = nAmnt - sBuf.getSize(); | ||
18 | char *buf = new char[nNew]; | ||
19 | sIn.read( buf, nNew ); | ||
20 | sBuf.append( buf ); | ||
21 | |||
22 | return sBuf.getStr(); | ||
23 | } | ||
24 | |||
25 | void Bu::XmlReader::burn( int nAmnt ) | ||
26 | { | ||
27 | if( sBuf.getSize() < nAmnt ) | ||
28 | { | ||
29 | lookahead( nAmnt ); | ||
30 | } | ||
31 | |||
32 | sBuf.remove( nAmnt ); | ||
33 | } | ||
34 | |||
35 | void Bu::XmlNode::checkString( const char *str, int nLen ) | ||
36 | { | ||
37 | if( !strncmp( str, lookahead( nLen ), nLen ) ) | ||
38 | { | ||
39 | burn( nLen ); | ||
40 | return; | ||
41 | } | ||
42 | |||
43 | throw Bu::ExceptionBase("Expected string '%s'", str ); | ||
44 | } | ||
45 | |||
46 | Bu::XmlNode *Bu::XmlReader::read() | ||
47 | { | ||
48 | prolog(); | ||
49 | } | ||
50 | |||
51 | void Bu::XmlReader::prolog() | ||
52 | { | ||
53 | XMLDecl(); | ||
54 | Misc(); | ||
55 | } | ||
56 | |||
57 | void Bu::XmlReader::XMLDecl() | ||
58 | { | ||
59 | checkString("<?xml", 5 ); | ||
60 | VersionInfo(); | ||
61 | EncodingDecl(); | ||
62 | SDDecl(); | ||
63 | S(); | ||
64 | } | ||
65 | |||
66 | void Bu::XmlReader::Misc() | ||
67 | { | ||
68 | } | ||
69 | |||
70 | void Bu::XmlReader::S() | ||
71 | { | ||
72 | for( int j = 0;; j++ ) | ||
73 | { | ||
74 | char c = *lookahead( 1 ); | ||
75 | if( c == 0x20 || c == 0x9 || c == 0xD || c == 0xA ) | ||
76 | continue; | ||
77 | if( j == 0 ) | ||
78 | printf("Error, expected whitespace!\n"); | ||
79 | return; | ||
80 | } | ||
81 | } | ||
82 | |||
83 | void Bu::XmlReader::S() | ||
84 | { | ||
85 | for(;;) | ||
86 | { | ||
87 | char c = *lookahead( 1 ); | ||
88 | if( c == 0x20 || c == 0x9 || c == 0xD || c == 0xA ) | ||
89 | continue; | ||
90 | return; | ||
91 | } | ||
92 | } | ||
93 | |||
94 | void Bu::XmlReader::VersionInfo() | ||
95 | { | ||
96 | S(); | ||
97 | checkString("version", 7 ); | ||
98 | |||
99 | } | ||
100 | |||
101 | void Bu::XmlReader::Eq() | ||
102 | { | ||
103 | Sq(); | ||
104 | checkString("=", 1 ); | ||
105 | Sq(); | ||
106 | } | ||
107 | |||
108 | |||