Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/LibreOffice/writerperfect/source/writer/exp/   (Office von Apache Version 25.8.3.2©)  Datei vom 5.10.2025 mit Größe 10 kB image not shown  

Quelle  xmlfmt.cxx   Sprache: 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 "xmlfmt.hxx"

#include "XMLBase64ImportContext.hxx"
#include "txtstyli.hxx"
#include "xmlimp.hxx"

#include <sal/log.hxx>

using namespace com::sun::star;

namespace writerperfect::exp
{
XMLStylesContext::XMLStylesContext(XMLImport& rImport, StyleType eType)
    : XMLImportContext(rImport)
    , m_rParagraphStyles(eType == StyleType_AUTOMATIC ? GetImport().GetAutomaticParagraphStyles()
                                                      : GetImport().GetParagraphStyles())
    , m_rTextStyles(eType == StyleType_AUTOMATIC ? GetImport().GetAutomaticTextStyles()
                                                 : GetImport().GetTextStyles())
    , m_rCellStyles(eType == StyleType_AUTOMATIC ? GetImport().GetAutomaticCellStyles()
                                                 : GetImport().GetCellStyles())
    , m_rColumnStyles(eType == StyleType_AUTOMATIC ? GetImport().GetAutomaticColumnStyles()
                                                   : GetImport().GetColumnStyles())
    , m_rRowStyles(eType == StyleType_AUTOMATIC ? GetImport().GetAutomaticRowStyles()
                                                : GetImport().GetRowStyles())
    , m_rTableStyles(eType == StyleType_AUTOMATIC ? GetImport().GetAutomaticTableStyles()
                                                  : GetImport().GetTableStyles())
    , m_rGraphicStyles(eType == StyleType_AUTOMATIC ? GetImport().GetAutomaticGraphicStyles()
                                                    : GetImport().GetGraphicStyles())
    , m_rPageLayouts(GetImport().GetPageLayouts())
    , m_rMasterStyles(GetImport().GetMasterStyles())
{
}

rtl::Reference<XMLImportContext> XMLStylesContext::CreateChildContext(
    const OUString& rName, const css::uno::Reference<css::xml::sax::XAttributeList>&&nbsp;/*xAttribs*/)
{
    if (rName == "style:style" || rName == "style:page-layout" || rName == "style:master-page")
        return new XMLStyleContext(GetImport(), *this);
    return nullptr;
}

std::map<OUString, librevenge::RVNGPropertyList>& XMLStylesContext::GetCurrentParagraphStyles()
{
    return m_rParagraphStyles;
}

std::map<OUString, librevenge::RVNGPropertyList>& XMLStylesContext::GetCurrentTextStyles()
{
    return m_rTextStyles;
}

std::map<OUString, librevenge::RVNGPropertyList>& XMLStylesContext::GetCurrentCellStyles()
{
    return m_rCellStyles;
}

std::map<OUString, librevenge::RVNGPropertyList>& XMLStylesContext::GetCurrentColumnStyles()
{
    return m_rColumnStyles;
}

std::map<OUString, librevenge::RVNGPropertyList>& XMLStylesContext::GetCurrentRowStyles()
{
    return m_rRowStyles;
}

std::map<OUString, librevenge::RVNGPropertyList>& XMLStylesContext::GetCurrentTableStyles()
{
    return m_rTableStyles;
}

std::map<OUString, librevenge::RVNGPropertyList>& XMLStylesContext::GetCurrentGraphicStyles()
{
    return m_rGraphicStyles;
}

std::map<OUString, librevenge::RVNGPropertyList>& XMLStylesContext::GetCurrentPageLayouts()
{
    return m_rPageLayouts;
}

std::map<OUString, librevenge::RVNGPropertyList>& XMLStylesContext::GetCurrentMasterStyles()
{
    return m_rMasterStyles;
}

namespace
{
/// Handler for <style:font-face>.
class XMLFontFaceContext : public XMLImportContext
{
public:
    XMLFontFaceContext(XMLImport& rImport);
    void SAL_CALL
    startElement(const OUString& rName,
                 const css::uno::Reference<css::xml::sax::XAttributeList>& xAttribs) override;

    rtl::Reference<XMLImportContext>
    CreateChildContext(const OUString& rName,
                       const css::uno::Reference<css::xml::sax::XAttributeList>& xAttribs) override;

    OUString const& GetName() const { return maName; }

private:
    OUString maName;
};

/// Handler for <svg:font-face-src>.
class XMLFontFaceSrcContext : public XMLImportContext
{
public:
    XMLFontFaceSrcContext(XMLImport& rImport, XMLFontFaceContext& rFontFace);

    rtl::Reference<XMLImportContext>
    CreateChildContext(const OUString& rName,
                       const css::uno::Reference<css::xml::sax::XAttributeList>& xAttribs) override;

private:
    XMLFontFaceContext& mrFontFace;
};

/// Handler for <svg:font-face-uri>.
class XMLFontFaceUriContext : public XMLImportContext
{
public:
    XMLFontFaceUriContext(XMLImport& rImport, XMLFontFaceContext const& rFontFace);
    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;

    rtl::Reference<XMLImportContext>
    CreateChildContext(const OUString& rName,
                       const css::uno::Reference<css::xml::sax::XAttributeList>& xAttribs) override;

    librevenge::RVNGPropertyList& GetPropertyList() { return maPropertyList; }

private:
    librevenge::RVNGPropertyList maPropertyList;
    rtl::Reference<XMLBase64ImportContext> mxBinaryData;
};

/// Handler for <svg:font-face-format>.
class XMLFontFaceFormatContext : public XMLImportContext
{
public:
    XMLFontFaceFormatContext(XMLImport& rImport, XMLFontFaceUriContext& rFontFaceUri);
    void SAL_CALL
    startElement(const OUString& rName,
                 const css::uno::Reference<css::xml::sax::XAttributeList>& xAttribs) override;

private:
    XMLFontFaceUriContext& mrFontFaceUri;
};
}

XMLFontFaceFormatContext::XMLFontFaceFormatContext(XMLImport& rImport,
                                                   XMLFontFaceUriContext& rFontFaceUri)
    : XMLImportContext(rImport)
    , mrFontFaceUri(rFontFaceUri)
{
}

void XMLFontFaceFormatContext::startElement(
    const OUString& /*rName*/, const css::uno::Reference<css::xml::sax::XAttributeList>& xAttribs)
{
    for (sal_Int16 i = 0; i < xAttribs->getLength(); ++i)
    {
        const OUString aAttributeName = xAttribs->getNameByIndex(i);
        const OUString aAttributeValue = xAttribs->getValueByIndex(i);
        if (aAttributeName == "svg:string")
        {
            OString aAttributeValueU8 = OUStringToOString(aAttributeValue, RTL_TEXTENCODING_UTF8);
            mrFontFaceUri.GetPropertyList().insert("librevenge:mime-type",
                                                   aAttributeValueU8.getStr());
        }
    }
}

XMLFontFaceUriContext::XMLFontFaceUriContext(XMLImport& rImport,
                                             XMLFontFaceContext const& rFontFace)
    : XMLImportContext(rImport)
{
    OString aNameU8 = OUStringToOString(rFontFace.GetName(), RTL_TEXTENCODING_UTF8);
    maPropertyList.insert("librevenge:name", aNameU8.getStr());
}

void XMLFontFaceUriContext::startElement(
    const OUString& /*rName*/, const css::uno::Reference<css::xml::sax::XAttributeList>& xAttribs)
{
    for (sal_Int16 i = 0; i < xAttribs->getLength(); ++i)
    {
        const OUString aAttributeName = xAttribs->getNameByIndex(i);
        const OUString aAttributeValue = xAttribs->getValueByIndex(i);
        if (aAttributeName == "loext:font-style")
        {
            OString aAttributeValueU8 = OUStringToOString(aAttributeValue, RTL_TEXTENCODING_UTF8);
            maPropertyList.insert("librevenge:font-style", aAttributeValueU8.getStr());
        }
        else if (aAttributeName == "loext:font-weight")
        {
            OString aAttributeValueU8 = OUStringToOString(aAttributeValue, RTL_TEXTENCODING_UTF8);
            maPropertyList.insert("librevenge:font-weight", aAttributeValueU8.getStr());
        }
    }
}

void XMLFontFaceUriContext::endElement(const OUString& /*rName*/)
{
    if (mxBinaryData.is())
        maPropertyList.insert("office:binary-data", mxBinaryData->getBinaryData());
    GetImport().GetGenerator().defineEmbeddedFont(maPropertyList);
}

rtl::Reference<XMLImportContext> XMLFontFaceUriContext::CreateChildContext(
    const OUString& rName, const css::uno::Reference<css::xml::sax::XAttributeList>&&nbsp;/*xAttribs*/)
{
    if (rName == "office:binary-data")
    {
        mxBinaryData = new XMLBase64ImportContext(GetImport());
        return mxBinaryData;
    }
    if (rName == "svg:font-face-format")
        return new XMLFontFaceFormatContext(GetImport(), *this);

    SAL_WARN("writerperfect""XMLFontFaceUriContext::CreateChildContext: unhandled " << rName);
    return nullptr;
}

XMLFontFaceSrcContext::XMLFontFaceSrcContext(XMLImport& rImport, XMLFontFaceContext& rFontFace)
    : XMLImportContext(rImport)
    , mrFontFace(rFontFace)
{
}

rtl::Reference<XMLImportContext> XMLFontFaceSrcContext::CreateChildContext(
    const OUString& rName, const css::uno::Reference<css::xml::sax::XAttributeList>&&nbsp;/*xAttribs*/)
{
    if (rName == "svg:font-face-uri")
        return new XMLFontFaceUriContext(GetImport(), mrFontFace);
    SAL_WARN("writerperfect""XMLFontFaceSrcContext::CreateChildContext: unhandled " << rName);
    return nullptr;
}

XMLFontFaceContext::XMLFontFaceContext(XMLImport& rImport)
    : XMLImportContext(rImport)
{
}

void XMLFontFaceContext::startElement(
    const OUString& /*rName*/, const css::uno::Reference<css::xml::sax::XAttributeList>& xAttribs)
{
    for (sal_Int16 i = 0; i < xAttribs->getLength(); ++i)
    {
        const OUString aAttributeName = xAttribs->getNameByIndex(i);
        const OUString aAttributeValue = xAttribs->getValueByIndex(i);
        if (aAttributeName == "style:name")
            maName = aAttributeValue;
    }
}

rtl::Reference<XMLImportContext> XMLFontFaceContext::CreateChildContext(
    const OUString& rName, const css::uno::Reference<css::xml::sax::XAttributeList>&&nbsp;/*xAttribs*/)
{
    if (rName == "svg:font-face-src")
        return new XMLFontFaceSrcContext(GetImport(), *this);
    SAL_WARN("writerperfect""XMLFontFaceContext::CreateChildContext: unhandled " << rName);
    return nullptr;
}

XMLFontFaceDeclsContext::XMLFontFaceDeclsContext(XMLImport& rImport)
    : XMLImportContext(rImport)
{
}

rtl::Reference<XMLImportContext> XMLFontFaceDeclsContext::CreateChildContext(
    const OUString& rName, const css::uno::Reference<css::xml::sax::XAttributeList>&&nbsp;/*xAttribs*/)
{
    if (rName == "style:font-face")
        return new XMLFontFaceContext(GetImport());
    return nullptr;
}

// namespace writerperfect::exp

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Messung V0.5
C=43 H=97 G=74

¤ Dauer der Verarbeitung: 0.4 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.