From 2e73fb21318813da05267d46329bb901ca2d9939 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 13 May 2009 15:05:23 +0000 Subject: [PATCH] Fixed handling of space after = in options set up. --- include/osgDB/XmlParser | 2 ++ src/osgDB/XmlParser.cpp | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/include/osgDB/XmlParser b/include/osgDB/XmlParser index 4d8a30435..1c1a47456 100644 --- a/include/osgDB/XmlParser +++ b/include/osgDB/XmlParser @@ -80,6 +80,8 @@ class OSGDB_EXPORT XmlNode : public osg::Referenced operator bool () const { return _currentPos<_buffer.size(); } + size_type currentPosition() const { return _currentPos; } + int get() { if (_currentPos<_buffer.size()) return _buffer[_currentPos++]; else return -1; } int operator [] (size_type i) const { if ((_currentPos+i)<_buffer.size()) return _buffer[_currentPos+i]; else return -1; } diff --git a/src/osgDB/XmlParser.cpp b/src/osgDB/XmlParser.cpp index 78e6e1580..20a50d9af 100644 --- a/src/osgDB/XmlParser.cpp +++ b/src/osgDB/XmlParser.cpp @@ -120,7 +120,12 @@ void XmlNode::Input::readAllDataIntoBuffer() void XmlNode::Input::skipWhiteSpace() { - while(_currentPos<_buffer.size() && _buffer[_currentPos]==' ') ++_currentPos; + while(_currentPos<_buffer.size() && _buffer[_currentPos]==' ') + { + // osg::notify(osg::NOTICE)<<"_currentPos="<<_currentPos<<"_buffer.size()="<<_buffer.size()<<" v="<<_buffer[_currentPos]<=0 && c!='>') { + Input::size_type prev_pos = input.currentPosition(); + input.skipWhiteSpace(); std::string option; std::string value; @@ -227,6 +234,9 @@ bool XmlNode::read(Input& input) if (input[0]=='=') { ++input; + + input.skipWhiteSpace(); + if (input[0]=='"') { ++input; @@ -258,6 +268,12 @@ bool XmlNode::read(Input& input) } } + if (prev_pos == input.currentPosition()) + { + osg::notify(osg::NOTICE)<<"Error, parser iterator note advanced, position: "<