2017-08-17 11:03:53 -05:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
|
|
/*
|
|
|
|
* This file is part of the LibreOffice project.
|
|
|
|
*
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "XMLBase64ImportContext.hxx"
|
|
|
|
|
2017-11-28 02:06:07 -06:00
|
|
|
#include <comphelper/base64.hxx>
|
|
|
|
|
2017-08-17 11:03:53 -05:00
|
|
|
using namespace com::sun::star;
|
|
|
|
|
|
|
|
namespace writerperfect
|
|
|
|
{
|
|
|
|
namespace exp
|
|
|
|
{
|
2018-04-20 02:07:25 -05:00
|
|
|
XMLBase64ImportContext::XMLBase64ImportContext(XMLImport& rImport)
|
2017-08-17 11:03:53 -05:00
|
|
|
: XMLImportContext(rImport)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2018-04-20 02:07:25 -05:00
|
|
|
void XMLBase64ImportContext::startElement(
|
|
|
|
const OUString& /*rName*/,
|
|
|
|
const css::uno::Reference<css::xml::sax::XAttributeList>& /*xAttribs*/)
|
2017-08-17 11:03:53 -05:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2018-04-20 02:07:25 -05:00
|
|
|
void XMLBase64ImportContext::endElement(const OUString& /*rName*/)
|
2017-08-17 11:03:53 -05:00
|
|
|
{
|
2018-04-20 02:07:25 -05:00
|
|
|
m_aBinaryData.append(static_cast<const unsigned char*>(m_aStream.GetBuffer()),
|
|
|
|
m_aStream.GetSize());
|
2017-08-17 11:03:53 -05:00
|
|
|
}
|
|
|
|
|
2018-04-20 02:07:25 -05:00
|
|
|
void XMLBase64ImportContext::characters(const OUString& rChars)
|
2017-08-17 11:03:53 -05:00
|
|
|
{
|
2017-11-28 02:06:07 -06:00
|
|
|
OUString aTrimmedChars(rChars.trim());
|
|
|
|
|
|
|
|
if (!aTrimmedChars.isEmpty())
|
|
|
|
{
|
|
|
|
OUString aChars;
|
|
|
|
if (!m_aBase64CharsLeft.isEmpty())
|
|
|
|
{
|
|
|
|
aChars = m_aBase64CharsLeft;
|
|
|
|
aChars += aTrimmedChars;
|
|
|
|
m_aBase64CharsLeft.clear();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
aChars = aTrimmedChars;
|
|
|
|
|
|
|
|
uno::Sequence<sal_Int8> aBuffer((aChars.getLength() / 4) * 3);
|
|
|
|
const sal_Int32 nCharsDecoded = comphelper::Base64::decodeSomeChars(aBuffer, aChars);
|
|
|
|
m_aStream.WriteBytes(aBuffer.getArray(), aBuffer.getLength());
|
|
|
|
if (nCharsDecoded != aChars.getLength())
|
|
|
|
m_aBase64CharsLeft = aChars.copy(nCharsDecoded);
|
|
|
|
}
|
2017-08-17 11:03:53 -05:00
|
|
|
}
|
|
|
|
|
2018-04-20 02:07:25 -05:00
|
|
|
const librevenge::RVNGBinaryData& XMLBase64ImportContext::getBinaryData() const
|
2017-08-17 11:03:53 -05:00
|
|
|
{
|
|
|
|
return m_aBinaryData;
|
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace exp
|
|
|
|
} // namespace writerperfect
|
|
|
|
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|