aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2007-05-08 06:31:33 +0000
committerMike Buland <eichlan@xagasoft.com>2007-05-08 06:31:33 +0000
commitc17c4ebbab022de80a9f893115f2fd41e6a07c44 (patch)
treee2d49c6e96447b6046f5567fa897f4da56caf639 /src
parent0f0be6146dc711f8d44db0348e8fe0d010a31ca7 (diff)
downloadlibbu++-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 'src')
-rw-r--r--src/tests/xml.cpp15
-rw-r--r--src/tsfdocument.cpp9
-rw-r--r--src/tsfdocument.h22
-rw-r--r--src/tsfnode.cpp9
-rw-r--r--src/tsfnode.h21
-rw-r--r--src/tsfreader.cpp9
-rw-r--r--src/tsfreader.h22
-rw-r--r--src/tsfwriter.cpp9
-rw-r--r--src/tsfwriter.h22
-rw-r--r--src/xmldocument.cpp9
-rw-r--r--src/xmldocument.h22
-rw-r--r--src/xmlnode.cpp9
-rw-r--r--src/xmlnode.h22
-rw-r--r--src/xmlreader.cpp108
-rw-r--r--src/xmlreader.h70
-rw-r--r--src/xmlwriter.cpp9
-rw-r--r--src/xmlwriter.h22
17 files changed, 409 insertions, 0 deletions
diff --git a/src/tests/xml.cpp b/src/tests/xml.cpp
new file mode 100644
index 0000000..9ef6a7e
--- /dev/null
+++ b/src/tests/xml.cpp
@@ -0,0 +1,15 @@
1#include "bu/xmlreader.h"
2#include "bu/xmlnode.h"
3#include "bu/xmldocument.h"
4#include "bu/file.h"
5
6int main()
7{
8 Bu::File f("test.xml", "r");
9 Bu::XmlReader xr( f );
10
11 xr.read();
12
13 return 0;
14}
15
diff --git a/src/tsfdocument.cpp b/src/tsfdocument.cpp
new file mode 100644
index 0000000..582f1b1
--- /dev/null
+++ b/src/tsfdocument.cpp
@@ -0,0 +1,9 @@
1#include "tsfdocument.h"
2
3Bu::TsfDocument::TsfDocument()
4{
5}
6
7Bu::TsfDocument::~TsfDocument()
8{
9}
diff --git a/src/tsfdocument.h b/src/tsfdocument.h
new file mode 100644
index 0000000..e324459
--- /dev/null
+++ b/src/tsfdocument.h
@@ -0,0 +1,22 @@
1#ifndef TSF_DOCUMENT_H
2#define TSF_DOCUMENT_H
3
4#include <stdint.h>
5
6namespace Bu
7{
8 /**
9 *
10 */
11 class TsfDocument
12 {
13 public:
14 TsfDocument();
15 virtual ~TsfDocument();
16
17 private:
18
19 };
20}
21
22#endif
diff --git a/src/tsfnode.cpp b/src/tsfnode.cpp
new file mode 100644
index 0000000..19df4ed
--- /dev/null
+++ b/src/tsfnode.cpp
@@ -0,0 +1,9 @@
1#include "tsfnode.h"
2
3Bu::TsfNode::TsfNode()
4{
5}
6
7Bu::TsfNode::~TsfNode()
8{
9}
diff --git a/src/tsfnode.h b/src/tsfnode.h
new file mode 100644
index 0000000..f58b825
--- /dev/null
+++ b/src/tsfnode.h
@@ -0,0 +1,21 @@
1#ifndef TSF_NODE_H
2#define TSF_NODE_H
3
4#include <stdint.h>
5
6namespace Bu
7{
8 /**
9 *
10 */
11 class TsfNode
12 {
13 public:
14 TsfNode();
15 virtual ~TsfNode();
16
17 private:
18
19 };
20}
21#endif
diff --git a/src/tsfreader.cpp b/src/tsfreader.cpp
new file mode 100644
index 0000000..58f4f78
--- /dev/null
+++ b/src/tsfreader.cpp
@@ -0,0 +1,9 @@
1#include "tsfreader.h"
2
3Bu::TsfReader::TsfReader()
4{
5}
6
7Bu::TsfReader::~TsfReader()
8{
9}
diff --git a/src/tsfreader.h b/src/tsfreader.h
new file mode 100644
index 0000000..cc8400a
--- /dev/null
+++ b/src/tsfreader.h
@@ -0,0 +1,22 @@
1#ifndef TSF_READER_H
2#define TSF_READER_H
3
4#include <stdint.h>
5
6namespace Bu
7{
8 /**
9 *
10 */
11 class TsfReader
12 {
13 public:
14 TsfReader();
15 virtual ~TsfReader();
16
17 private:
18
19 };
20}
21
22#endif
diff --git a/src/tsfwriter.cpp b/src/tsfwriter.cpp
new file mode 100644
index 0000000..6592996
--- /dev/null
+++ b/src/tsfwriter.cpp
@@ -0,0 +1,9 @@
1#include "tsfwriter.h"
2
3Bu::TsfWriter::TsfWriter()
4{
5}
6
7Bu::TsfWriter::~TsfWriter()
8{
9}
diff --git a/src/tsfwriter.h b/src/tsfwriter.h
new file mode 100644
index 0000000..18f19d6
--- /dev/null
+++ b/src/tsfwriter.h
@@ -0,0 +1,22 @@
1#ifndef TSF_WRITER_H
2#define TSF_WRITER_H
3
4#include <stdint.h>
5
6namespace Bu
7{
8 /**
9 *
10 */
11 class TsfWriter
12 {
13 public:
14 TsfWriter();
15 virtual ~TsfWriter();
16
17 private:
18
19 };
20}
21
22#endif
diff --git a/src/xmldocument.cpp b/src/xmldocument.cpp
new file mode 100644
index 0000000..cb21826
--- /dev/null
+++ b/src/xmldocument.cpp
@@ -0,0 +1,9 @@
1#include "xmldocument.h"
2
3Bu::XmlDocument::XmlDocument()
4{
5}
6
7Bu::XmlDocument::~XmlDocument()
8{
9}
diff --git a/src/xmldocument.h b/src/xmldocument.h
new file mode 100644
index 0000000..e16e3ea
--- /dev/null
+++ b/src/xmldocument.h
@@ -0,0 +1,22 @@
1#ifndef XML_DOCUMENT_H
2#define XML_DOCUMENT_H
3
4#include <stdint.h>
5
6namespace Bu
7{
8 /**
9 *
10 */
11 class XmlDocument
12 {
13 public:
14 XmlDocument();
15 virtual ~XmlDocument();
16
17 private:
18
19 };
20}
21
22#endif
diff --git a/src/xmlnode.cpp b/src/xmlnode.cpp
new file mode 100644
index 0000000..58ef5c5
--- /dev/null
+++ b/src/xmlnode.cpp
@@ -0,0 +1,9 @@
1#include "xmlnode.h"
2
3Bu::XmlNode::XmlNode()
4{
5}
6
7Bu::XmlNode::~XmlNode()
8{
9}
diff --git a/src/xmlnode.h b/src/xmlnode.h
new file mode 100644
index 0000000..cd9961a
--- /dev/null
+++ b/src/xmlnode.h
@@ -0,0 +1,22 @@
1#ifndef XML_NODE_H
2#define XML_NODE_H
3
4#include <stdint.h>
5
6namespace Bu
7{
8 /**
9 *
10 */
11 class XmlNode
12 {
13 public:
14 XmlNode();
15 virtual ~XmlNode();
16
17 private:
18
19 };
20}
21
22#endif
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
3Bu::XmlReader::XmlReader( Bu::Stream &sIn ) :
4 sIn( sIn )
5{
6}
7
8Bu::XmlReader::~XmlReader()
9{
10}
11
12const 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
25void Bu::XmlReader::burn( int nAmnt )
26{
27 if( sBuf.getSize() < nAmnt )
28 {
29 lookahead( nAmnt );
30 }
31
32 sBuf.remove( nAmnt );
33}
34
35void 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
46Bu::XmlNode *Bu::XmlReader::read()
47{
48 prolog();
49}
50
51void Bu::XmlReader::prolog()
52{
53 XMLDecl();
54 Misc();
55}
56
57void Bu::XmlReader::XMLDecl()
58{
59 checkString("<?xml", 5 );
60 VersionInfo();
61 EncodingDecl();
62 SDDecl();
63 S();
64}
65
66void Bu::XmlReader::Misc()
67{
68}
69
70void 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
83void 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
94void Bu::XmlReader::VersionInfo()
95{
96 S();
97 checkString("version", 7 );
98
99}
100
101void Bu::XmlReader::Eq()
102{
103 Sq();
104 checkString("=", 1 );
105 Sq();
106}
107
108
diff --git a/src/xmlreader.h b/src/xmlreader.h
new file mode 100644
index 0000000..19791c4
--- /dev/null
+++ b/src/xmlreader.h
@@ -0,0 +1,70 @@
1#ifndef XML_READER_H
2#define XML_READER_H
3
4#include <stdint.h>
5#include "bu/stream.h"
6#include "bu/fstring.h"
7#include "bu/xmlnode.h"
8
9namespace Bu
10{
11 /**
12 *
13 */
14 class XmlReader
15 {
16 public:
17 XmlReader( Bu::Stream &sIn );
18 virtual ~XmlReader();
19
20 XmlNode *read();
21
22 private:
23 Bu::Stream &sIn;
24 Bu::FString sBuf;
25
26 private: // Helpers
27 const char *lookahead( int nAmnt );
28 void burn( int nAmnt );
29 void checkString( const char *str, int nLen );
30
31 private: // States
32 /**
33 * The headers, etc.
34 */
35 void prolog();
36
37 /**
38 * The xml decleration (version, encoding, etc).
39 */
40 void XMLDecl();
41
42 /**
43 * Misc things...?
44 */
45 void Misc();
46
47 /**
48 * Whitespace eater.
49 */
50 void S();
51
52 /**
53 * Optional whitespace eater.
54 */
55 void Sq();
56
57 /**
58 * XML Version spec
59 */
60 void VersionInfo();
61
62 /**
63 * Your basic equals sign with surrounding whitespace.
64 */
65 void Eq();
66
67 };
68}
69
70#endif
diff --git a/src/xmlwriter.cpp b/src/xmlwriter.cpp
new file mode 100644
index 0000000..23a5175
--- /dev/null
+++ b/src/xmlwriter.cpp
@@ -0,0 +1,9 @@
1#include "xmlwriter.h"
2
3Bu::XmlWriter::XmlWriter()
4{
5}
6
7Bu::XmlWriter::~XmlWriter()
8{
9}
diff --git a/src/xmlwriter.h b/src/xmlwriter.h
new file mode 100644
index 0000000..796d6fb
--- /dev/null
+++ b/src/xmlwriter.h
@@ -0,0 +1,22 @@
1#ifndef XML_WRITER_H
2#define XML_WRITER_H
3
4#include <stdint.h>
5
6namespace Bu
7{
8 /**
9 *
10 */
11 class XmlWriter
12 {
13 public:
14 XmlWriter();
15 virtual ~XmlWriter();
16
17 private:
18
19 };
20}
21
22#endif