]> git.mxchange.org Git - simgear.git/blob - simgear/xml/easyxml.hxx
1697fd354ccdb23d5ffcdf93eb9112f81347e70e
[simgear.git] / simgear / xml / easyxml.hxx
1 #ifndef __EASYXML_HXX
2 #define __EASYXML_HXX
3
4 #ifdef HAVE_CONFIG_H
5 #  include <config.h>
6 #endif
7
8 #include <simgear/compiler.h>
9
10 #include STL_IOSTREAM
11 #include STL_STRING
12 #include <vector>
13
14 #if !defined(SG_HAVE_NATIVE_SGI_COMPILERS)
15 SG_USING_STD(istream);
16 #endif
17 SG_USING_STD(string);
18 SG_USING_STD(vector);
19
20
21 /**
22  * Interface for XML attributes.
23  */
24 class XMLAttributes
25 {
26 public:
27   XMLAttributes ();
28   virtual ~ XMLAttributes ();
29
30   virtual int size () const = 0;
31   virtual const char * getName (int i) const = 0;
32   virtual const char * getValue (int i) const = 0;
33
34   virtual int findAttribute (const char * name) const;
35   virtual bool hasAttribute (const char * name) const;
36   virtual const char * getValue (const char * name) const;
37 };
38
39
40 /**
41  * Default mutable attributes implementation.
42  */
43 class XMLAttributesDefault : public XMLAttributes
44 {
45 public:
46   XMLAttributesDefault ();
47   XMLAttributesDefault (const XMLAttributes & atts);
48   virtual ~XMLAttributesDefault ();
49
50   virtual int size () const;
51   virtual const char * getName (int i) const;
52   virtual const char * getValue (int i) const;
53
54   virtual void addAttribute (const char * name, const char * value);
55   virtual void setName (int i, const char * name);
56   virtual void setValue (int i, const char * value);
57   virtual void setValue (const char * name, const char * value);
58
59 private:
60   vector<string> _atts;
61 };
62
63
64 /**
65  * Visitor class for an XML document.
66  *
67  * To read an XML document, a module must subclass the visitor to do
68  * something useful for the different XML events.
69  */
70 class XMLVisitor
71 {
72 public:
73                                 // start an XML document
74   virtual void startXML () {}
75                                 // end an XML document
76   virtual void endXML () {}
77                                 // start an element
78   virtual void startElement (const char * name, const XMLAttributes &atts) {}
79                                 // end an element
80   virtual void endElement (const char * name) {}
81                                 // character data
82   virtual void data (const char * s, int length) {}
83                                 // processing instruction
84   virtual void pi (const char * target, const char * data) {}
85                                 // non-fatal warning
86   virtual void warning (const char * message, int line, int column) {}
87                                 // fatal error
88   virtual void error (const char * message, int line, int column) = 0;
89 };
90
91
92 /**
93  * Read an XML document.
94  */
95 extern bool readXML (istream &input, XMLVisitor &visitor);
96
97
98 #endif // __EASYXML_HXX
99