00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00028 #ifndef __vtkXMLParser_h
00029 #define __vtkXMLParser_h
00030
00031 #include "vtkObject.h"
00032
00033 extern "C"
00034 {
00035 void vtkXMLParserStartElement(void*, const char*, const char**);
00036 void vtkXMLParserEndElement(void*, const char*);
00037 void vtkXMLParserCharacterDataHandler(void*, const char*, int);
00038 }
00039
00040 class VTK_IO_EXPORT vtkXMLParser : public vtkObject
00041 {
00042 public:
00043 vtkTypeMacro(vtkXMLParser,vtkObject);
00044 void PrintSelf(ostream& os, vtkIndent indent);
00045
00046 static vtkXMLParser* New();
00047
00048
00050
00051 vtkSetMacro(Stream, istream*);
00052 vtkGetMacro(Stream, istream*);
00053
00055
00057
00060 long TellG();
00061 void SeekG(long position);
00063
00065 virtual int Parse();
00066
00068
00070 virtual int Parse(const char* inputString);
00071 virtual int Parse(const char* inputString, unsigned int length);
00073
00075
00080 virtual int InitializeParser();
00081 virtual int ParseChunk(const char* inputString, unsigned int length);
00082 virtual int CleanupParser();
00084
00086
00087 vtkSetStringMacro(FileName);
00088 vtkGetStringMacro(FileName);
00090
00092
00095 vtkSetMacro(IgnoreCharacterData, int);
00096 vtkGetMacro(IgnoreCharacterData, int);
00098
00100
00104 vtkSetStringMacro(Encoding);
00105 vtkGetStringMacro(Encoding);
00107
00108 protected:
00109 vtkXMLParser();
00110 ~vtkXMLParser();
00111
00112
00113 istream* Stream;
00114
00115
00116 char* FileName;
00117
00118
00119 char* Encoding;
00120
00121
00122
00123 int ParseError;
00124
00125
00126 const char* InputString;
00127 int InputStringLength;
00128
00129
00130 void* Parser;
00131
00132
00133 virtual int CreateParser();
00134
00135
00136
00137 virtual int ParseXML();
00138
00139
00140
00141
00142
00143 virtual int ParsingComplete();
00144
00145
00146
00147
00148
00149
00150 virtual void StartElement(const char* name, const char** atts);
00151
00152
00153
00154 virtual void EndElement(const char* name);
00155
00156
00157 virtual void CharacterDataHandler(const char* data, int length);
00158
00159
00160 virtual void ReportStrayAttribute(const char* element, const char* attr,
00161 const char* value);
00162
00163
00164 virtual void ReportMissingAttribute(const char* element, const char* attr);
00165
00166
00167 virtual void ReportBadAttribute(const char* element, const char* attr,
00168 const char* value);
00169
00170
00171 virtual void ReportUnknownElement(const char* element);
00172
00173
00174 virtual void ReportXmlParseError();
00175
00176
00177 unsigned long GetXMLByteIndex();
00178
00179
00180 virtual int ParseBuffer(const char* buffer, unsigned int count);
00181
00182
00183 int ParseBuffer(const char* buffer);
00184
00185
00186
00187 static int IsSpace(char c);
00188
00189
00190 friend void vtkXMLParserStartElement(void*, const char*, const char**);
00191 friend void vtkXMLParserEndElement(void*, const char*);
00192 friend void vtkXMLParserCharacterDataHandler(void*, const char*, int);
00193
00194
00195 int IgnoreCharacterData;
00196
00197 private:
00198 vtkXMLParser(const vtkXMLParser&);
00199 void operator=(const vtkXMLParser&);
00200 };
00201
00202
00203 inline
00204 void vtkXMLParserCharacterDataHandler(
00205 void* parser,
00206 const char* data,
00207 int length)
00208 {
00209
00210
00211
00212 static_cast<vtkXMLParser*>(parser)->CharacterDataHandler(data, length);
00213 }
00214
00215 #endif