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