1 // Created on: 2001-07-20 2 // Created by: Alexander GRIGORIEV 3 // Copyright (c) 2001-2014 OPEN CASCADE SAS 4 // 5 // This file is part of Open CASCADE Technology software library. 6 // 7 // This library is free software; you can redistribute it and/or modify it under 8 // the terms of the GNU Lesser General Public License version 2.1 as published 9 // by the Free Software Foundation, with special exception defined in the file 10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT 11 // distribution for complete text of the license and disclaimer of any warranty. 12 // 13 // Alternatively, this file may be used under the terms of Open CASCADE 14 // commercial license or contractual agreement. 15 16 //AGV 060302: Input from std::istream 17 // AGV 130302: bug corr: was error if strlen(root_elem_name) < 7 18 19 #ifndef LDOM_XmlReader_HeaderFile 20 #define LDOM_XmlReader_HeaderFile 21 22 //#define XML_BUFFER_SIZE 1000 23 #define XML_BUFFER_SIZE 20480 24 25 #include <LDOM_BasicElement.hxx> 26 #include <LDOM_OSStream.hxx> 27 28 class TCollection_AsciiString; 29 30 // Class LDOM_XmlReader 31 // 32 33 class LDOM_XmlReader 34 { 35 public: 36 enum RecordType { 37 XML_UNKNOWN, 38 XML_HEADER, 39 XML_DOCTYPE, 40 XML_COMMENT, 41 XML_START_ELEMENT, 42 XML_END_ELEMENT, 43 XML_FULL_ELEMENT, 44 XML_TEXT, 45 XML_CDATA, 46 XML_EOF 47 }; 48 49 // ---------- PUBLIC METHODS ---------- 50 LDOM_XmlReader (const Handle(LDOM_MemManager)& aDocument, 51 TCollection_AsciiString& anErrorString, 52 const Standard_Boolean theTagPerStep = Standard_False); 53 // Constructor - takes a file descriptor for input 54 // Constructor - takes an std::istream for input 55 56 RecordType ReadRecord (Standard_IStream& theIStream, 57 LDOM_OSStream& theData, 58 Standard_Boolean& theDocStart); 59 // reading a markup or other element of XML format 60 GetElement() const61 LDOM_BasicElement& GetElement() const { return * myElement; } 62 // get the last element retrieved from the stream 63 64 void CreateElement (const char *theName, const Standard_Integer theLen); 65 66 static Standard_Boolean getInteger (LDOMBasicString& theValue, 67 const char * theStart, 68 const char * theEnd); 69 // try convert string theStart to LDOM_AsciiInteger, return False on success 70 71 // Returns the byte order mask defined at the start of a stream GetBOM() const72 LDOM_OSStream::BOMType GetBOM() const { return myBOM; } 73 74 private: 75 // ---------- PRIVATE (PROHIBITED) METHODS ---------- 76 LDOM_XmlReader (const LDOM_XmlReader& theOther); 77 // Copy constructor 78 79 LDOM_XmlReader& operator = (const LDOM_XmlReader& theOther); 80 // Assignment 81 82 private: 83 // ---------- PRIVATE FIELDS ---------- 84 85 Standard_Boolean myEOF; 86 TCollection_AsciiString & myError; 87 Handle(LDOM_MemManager) myDocument; 88 LDOM_BasicElement * myElement; 89 const LDOM_BasicNode * myLastChild; // optim. reading attributes 90 const char * myPtr; 91 const char * myEndPtr; 92 char myBuffer [XML_BUFFER_SIZE+4]; 93 Standard_Boolean myTagPerStep; 94 LDOM_OSStream::BOMType myBOM; 95 }; 96 97 #endif 98