App/Toponaming: Add base64 encoding to XML

This commit is contained in:
Chris Hennes
2023-10-01 16:15:47 -05:00
parent ddf2a3723b
commit 33abb7b5b1
9 changed files with 634 additions and 136 deletions

View File

@@ -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;
}