14 #ifndef OSGDB_XML_PARSER
15 #define OSGDB_XML_PARSER 1
17 #include <osgDB/Registry>
57 typedef std::vector< osg::ref_ptr<XmlNode> >
Children;
77 void addControlToCharacter(
const std::string& control,
int c);
84 void setUpControlMappings();
99 void open(
const std::string& filename);
100 void attach(std::istream& istream);
102 void readAllDataIntoBuffer();
104 operator bool ()
const {
return _currentPos<_buffer.size(); }
108 int get() {
if (_currentPos<_buffer.size())
return _buffer[_currentPos++];
else return -1; }
110 int operator [] (size_type i)
const {
if ((_currentPos+i)<_buffer.size())
return _buffer[_currentPos+i];
else return -1; }
112 void operator ++ () {
if (_currentPos<_buffer.size()) ++_currentPos; }
114 void operator += (size_type n) {
if ((_currentPos+n)<_buffer.size()) _currentPos+=n;
else _currentPos = _buffer.size(); }
116 void skipWhiteSpace();
118 std::string
substr(size_type pos, size_type n=std::string::npos) {
return (_currentPos<_buffer.size()) ? _buffer.substr(_currentPos+pos,n) : std::string(); }
120 size_type
find(
const std::string& str)
122 if (_currentPos<_buffer.size())
124 size_type pos = _buffer.find(str, _currentPos);
125 if (pos==std::string::npos)
return std::string::npos;
126 else return pos-_currentPos;
127 }
else return std::string::npos;
130 bool match(
const std::string& str) {
return (_currentPos<_buffer.size()) ? _buffer.compare(_currentPos, str.size(), str)==0 :
false; }
134 size_type _currentPos;
141 bool read(
Input& input);
142 bool write(std::ostream& fout,
const std::string& indent =
"")
const;
144 bool write(
const ControlMap& controlMap, std::ostream& fout,
const std::string& indent =
"")
const;
145 bool writeString(
const ControlMap& controlMap, std::ostream& fout,
const std::string& str)
const;
149 bool writeChildren(
const ControlMap& controlMap, std::ostream& fout,
const std::string& indent)
const;
150 bool writeProperties(
const ControlMap& controlMap, std::ostream& fout)
const;
152 bool readAndReplaceControl(std::string& contents,
Input& input);
std::map< std::string, std::string > Properties
void OSGDB_EXPORT open(std::fstream &fs, const char *filename, std::ios_base::openmode mode)
OSGDB_EXPORT XmlNode * readXmlFile(const std::string &filename, const Options *options)
std::vector< osg::ref_ptr< XmlNode > > Children
std::map< int, std::string > CharacterToControlMap
ControlToCharacterMap _controlToCharacterMap
OSGDB_EXPORT std::string trimEnclosingSpaces(const std::string &str)
std::map< std::string, int > ControlToCharacterMap
static Registry * instance(bool erase=false)
OSGDB_EXPORT XmlNode * readXmlStream(std::istream &fin)
CharacterToControlMap _characterToControlMap
std::string getTrimmedContents() const