office-gobmx/writerperfect/source/writer/exp/XMLTextFrameContext.cxx
Miklos Vajna ac4ea366ec writerperfect: astyle -> clang-format
< vmiklos> dtardon: are you strongly attached to astyle usage in
core.git writerperfect/? my problem is that 1) when less regular
contributors touch it, they don't run astyle  2) core.git has git hooks
in place to enforce consistent style for selected files, but that uses
clang-format. i wonder if switching to the standard core.git
clang-format would be an option to stop this reformat game

<@dtardon> vmiklos, clang-format is okay. we started to use astyle years
ago, before there were even any serious talk about automatic formatting
for the whole libreoffice

Change-Id: I844fc9c2e8560e54a49f26064cc0b3c55a5f034c
Reviewed-on: https://gerrit.libreoffice.org/53184
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Jenkins <ci@libreoffice.org>
2018-04-20 11:16:34 +02:00

166 lines
5.2 KiB
C++

/* -*- 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 "XMLTextFrameContext.hxx"
#include "XMLBase64ImportContext.hxx"
#include "txtparai.hxx"
#include "xmlimp.hxx"
#include "xmltext.hxx"
using namespace com::sun::star;
namespace writerperfect
{
namespace exp
{
/// Handler for <draw:text-box>.
class XMLTextBoxContext : public XMLImportContext
{
public:
XMLTextBoxContext(XMLImport& rImport);
rtl::Reference<XMLImportContext>
CreateChildContext(const OUString& rName,
const css::uno::Reference<css::xml::sax::XAttributeList>& xAttribs) override;
void SAL_CALL
startElement(const OUString& rName,
const css::uno::Reference<css::xml::sax::XAttributeList>& xAttribs) override;
void SAL_CALL endElement(const OUString& rName) override;
};
XMLTextBoxContext::XMLTextBoxContext(XMLImport& rImport)
: XMLImportContext(rImport)
{
}
rtl::Reference<XMLImportContext> XMLTextBoxContext::CreateChildContext(
const OUString& rName, const css::uno::Reference<css::xml::sax::XAttributeList>& /*xAttribs*/)
{
return CreateTextChildContext(mrImport, rName);
}
void XMLTextBoxContext::startElement(
const OUString& /*rName*/,
const css::uno::Reference<css::xml::sax::XAttributeList>& /*xAttribs*/)
{
mrImport.GetGenerator().openTextBox(librevenge::RVNGPropertyList());
}
void XMLTextBoxContext::endElement(const OUString& /*rName*/)
{
mrImport.GetGenerator().closeTextBox();
}
/// Handler for <draw:image>.
class XMLTextImageContext : public XMLImportContext
{
public:
XMLTextImageContext(XMLImport& rImport);
rtl::Reference<XMLImportContext>
CreateChildContext(const OUString& rName,
const css::uno::Reference<css::xml::sax::XAttributeList>& xAttribs) override;
void SAL_CALL
startElement(const OUString& rName,
const css::uno::Reference<css::xml::sax::XAttributeList>& xAttribs) override;
void SAL_CALL endElement(const OUString& rName) override;
private:
OString m_aMimeType;
rtl::Reference<XMLBase64ImportContext> m_xBinaryData;
};
XMLTextImageContext::XMLTextImageContext(XMLImport& rImport)
: XMLImportContext(rImport)
{
}
rtl::Reference<XMLImportContext> XMLTextImageContext::CreateChildContext(
const OUString& rName, const css::uno::Reference<css::xml::sax::XAttributeList>& /*xAttribs*/)
{
if (rName == "office:binary-data")
{
m_xBinaryData = new XMLBase64ImportContext(mrImport);
return m_xBinaryData.get();
}
return nullptr;
}
void XMLTextImageContext::startElement(
const OUString& /*rName*/, const css::uno::Reference<css::xml::sax::XAttributeList>& xAttribs)
{
for (sal_Int16 i = 0; i < xAttribs->getLength(); ++i)
{
const OUString& rAttributeName = xAttribs->getNameByIndex(i);
if (rAttributeName == "loext:mime-type")
m_aMimeType = OUStringToOString(xAttribs->getValueByIndex(i), RTL_TEXTENCODING_UTF8);
}
}
void XMLTextImageContext::endElement(const OUString& /*rName*/)
{
librevenge::RVNGPropertyList aPropertyList;
aPropertyList.insert("librevenge:mime-type", m_aMimeType.getStr());
if (m_xBinaryData.is())
aPropertyList.insert("office:binary-data", m_xBinaryData->getBinaryData());
mrImport.GetGenerator().insertBinaryObject(aPropertyList);
}
XMLTextFrameContext::XMLTextFrameContext(XMLImport& rImport)
: XMLImportContext(rImport)
{
}
rtl::Reference<XMLImportContext> XMLTextFrameContext::CreateChildContext(
const OUString& rName, const css::uno::Reference<css::xml::sax::XAttributeList>& /*xAttribs*/)
{
if (rName == "draw:image")
return new XMLTextImageContext(mrImport);
if (rName == "draw:text-box")
return new XMLTextBoxContext(mrImport);
SAL_WARN("writerperfect", "XMLTextFrameContext::CreateChildContext: unhandled " << rName);
return nullptr;
}
void XMLTextFrameContext::startElement(
const OUString& /*rName*/, const css::uno::Reference<css::xml::sax::XAttributeList>& xAttribs)
{
librevenge::RVNGPropertyList aPropertyList;
for (sal_Int16 i = 0; i < xAttribs->getLength(); ++i)
{
const OUString& rAttributeName = xAttribs->getNameByIndex(i);
const OUString& rAttributeValue = xAttribs->getValueByIndex(i);
if (rAttributeName == "draw:style-name")
FillStyles(rAttributeValue, mrImport.GetAutomaticGraphicStyles(),
mrImport.GetGraphicStyles(), aPropertyList);
else
{
OString sName = OUStringToOString(rAttributeName, RTL_TEXTENCODING_UTF8);
OString sValue = OUStringToOString(rAttributeValue, RTL_TEXTENCODING_UTF8);
aPropertyList.insert(sName.getStr(), sValue.getStr());
}
}
mrImport.GetGenerator().openFrame(aPropertyList);
}
void XMLTextFrameContext::endElement(const OUString& /*rName*/)
{
mrImport.GetGenerator().closeFrame();
}
} // namespace exp
} // namespace writerperfect
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */