App/Toponaming: Add base64 encoding to XML
This commit is contained in:
@@ -283,8 +283,17 @@ void Base::XMLReader::readEndElement(const char* ElementName, int level)
|
||||
|| (level>=0 && level!=Level))));
|
||||
}
|
||||
|
||||
void Base::XMLReader::readCharacters()
|
||||
void Base::XMLReader::readCharacters(const char* filename, CharStreamFormat format)
|
||||
{
|
||||
Base::FileInfo fi(filename);
|
||||
Base::ofstream to(fi, std::ios::out | std::ios::binary | std::ios::trunc);
|
||||
if (!to) {
|
||||
throw Base::FileException("XMLReader::readCharacters() Could not open file!");
|
||||
}
|
||||
|
||||
beginCharStream(format) >> to.rdbuf();
|
||||
to.close();
|
||||
endCharStream();
|
||||
}
|
||||
|
||||
std::streamsize Base::XMLReader::read(char_type* s, std::streamsize n)
|
||||
@@ -336,7 +345,7 @@ std::istream& Base::XMLReader::charStream()
|
||||
return *CharStream;
|
||||
}
|
||||
|
||||
std::istream& Base::XMLReader::beginCharStream()
|
||||
std::istream& Base::XMLReader::beginCharStream(CharStreamFormat format)
|
||||
{
|
||||
if (CharStream) {
|
||||
throw Base::XMLParseException("recursive character stream");
|
||||
@@ -362,6 +371,9 @@ std::istream& Base::XMLReader::beginCharStream()
|
||||
|
||||
CharStream = std::make_unique<boost::iostreams::filtering_istream>();
|
||||
auto* filteringStream = dynamic_cast<boost::iostreams::filtering_istream*>(CharStream.get());
|
||||
if(format == CharStreamFormat::Base64Encoded) {
|
||||
filteringStream->push(base64_decoder(Base::base64LineWidth, Base64ErrorHandling::silent));
|
||||
}
|
||||
filteringStream->push(boost::ref(*this));
|
||||
return *CharStream;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user