aef40e7388
xmlhelp, xmloff, xmlsecurity Change-Id: I80c6fa806387f3dcba8be7f93fe2fef146b033e3 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112050 Tested-by: Jenkins Reviewed-by: Ilmari Lauhakangas <ilmari.lauhakangas@libreoffice.org>
1122 lines
36 KiB
C++
1122 lines
36 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/.
|
|
*
|
|
* This file incorporates work covered by the following license notice:
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
* with this work for additional information regarding copyright
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
*/
|
|
|
|
/** @#file
|
|
*
|
|
* import of all text fields
|
|
* (except variable related + database display field: see txtvfldi.hxx)
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <com/sun/star/uno/Reference.h>
|
|
#include <com/sun/star/beans/PropertyValue.hpp>
|
|
#include <com/sun/star/text/PageNumberType.hpp>
|
|
#include <com/sun/star/util/DateTime.hpp>
|
|
#include <xmloff/xmlictxt.hxx>
|
|
#include <xmloff/txtimp.hxx>
|
|
#include <xmloff/xmltkmap.hxx>
|
|
#include <rtl/ustrbuf.hxx>
|
|
#include <vector>
|
|
|
|
namespace com::sun::star {
|
|
namespace xml::sax { class XAttributeList; }
|
|
namespace text { class XTextField; }
|
|
namespace beans { class XPropertySet; struct PropertyValue; }
|
|
}
|
|
|
|
class SvXMLImport;
|
|
class XMLTextImportHelper;
|
|
class SvXMLTokenMap;
|
|
|
|
/// abstract class for text field import
|
|
class XMLTextFieldImportContext : public SvXMLImportContext
|
|
{
|
|
// data members
|
|
OUStringBuffer sContentBuffer; /// collect character data
|
|
OUString sContent; /// character data after collection
|
|
OUString sServiceName; /// service name for text field
|
|
XMLTextImportHelper& rTextImportHelper; /// the import helper
|
|
|
|
protected:
|
|
OUString sServicePrefix;
|
|
|
|
// data members for use in subclasses
|
|
bool bValid; /// whether this field is valid ?
|
|
|
|
public:
|
|
|
|
XMLTextFieldImportContext(
|
|
SvXMLImport& rImport, /// XML Import
|
|
XMLTextImportHelper& rHlp, /// Text import helper
|
|
const OUString& pService); /// name of SO API service
|
|
|
|
/// process character data: will be collected in member sContentBuffer
|
|
virtual void SAL_CALL characters( const OUString& sContent ) override;
|
|
|
|
/// parses attributes and calls ProcessAttribute
|
|
virtual void SAL_CALL startFastElement(
|
|
sal_Int32 nElement,
|
|
const css::uno::Reference<css::xml::sax::XFastAttributeList> & xAttrList) override;
|
|
|
|
/// create XTextField and insert into document; calls PrepareTextField
|
|
virtual void SAL_CALL endFastElement(sal_Int32 nElement) override;
|
|
|
|
/// create the appropriate field context from
|
|
/// (for use in paragraph import)
|
|
static XMLTextFieldImportContext* CreateTextFieldImportContext(
|
|
SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp,
|
|
sal_Int32 nElement);
|
|
|
|
protected:
|
|
/// get helper
|
|
XMLTextImportHelper& GetImportHelper() { return rTextImportHelper; }
|
|
|
|
const OUString& GetServiceName() const { return sServiceName; }
|
|
void SetServiceName(const OUString& sStr) { sServiceName = sStr; }
|
|
|
|
OUString const & GetContent();
|
|
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) = 0;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference< css::beans::XPropertySet> & xPropertySet) = 0;
|
|
|
|
/// create field from ServiceName
|
|
bool CreateField(css::uno::Reference< css::beans::XPropertySet> & xField,
|
|
const OUString& sServiceName);
|
|
|
|
/// force an update of the field's value
|
|
/// call update on optional XUpdatable interface; (disable Fixed property)
|
|
static void ForceUpdate(
|
|
const css::uno::Reference< css::beans::XPropertySet> & rPropertySet);
|
|
};
|
|
|
|
class XMLSenderFieldImportContext : public XMLTextFieldImportContext
|
|
{
|
|
|
|
sal_Int16 nSubType; /// API subtype for ExtUser field
|
|
|
|
const OUString sPropertyFixed;
|
|
const OUString sPropertyContent;
|
|
|
|
protected:
|
|
// variables for access in subclass
|
|
bool bFixed;
|
|
|
|
public:
|
|
|
|
XMLSenderFieldImportContext(
|
|
SvXMLImport& rImport, /// XML Import
|
|
XMLTextImportHelper& rHlp); /// Text import helper
|
|
|
|
protected:
|
|
/// start element
|
|
virtual void SAL_CALL startFastElement(
|
|
sal_Int32 nElement,
|
|
const css::uno::Reference<css::xml::sax::XFastAttributeList> & xAttrList) override;
|
|
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference< css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** inherit sender field because of fixed attribute in ProcessAttributes */
|
|
class XMLAuthorFieldImportContext final : public XMLSenderFieldImportContext
|
|
{
|
|
bool bAuthorFullName;
|
|
const OUString sPropertyFixed;
|
|
const OUString sPropertyContent;
|
|
|
|
public:
|
|
|
|
XMLAuthorFieldImportContext(
|
|
SvXMLImport& rImport, /// XML Import
|
|
XMLTextImportHelper& rHlp); /// Text import helper
|
|
|
|
private:
|
|
/// start element
|
|
virtual void SAL_CALL startFastElement(
|
|
sal_Int32 nElement,
|
|
const css::uno::Reference<css::xml::sax::XFastAttributeList> & xAttrList) override;
|
|
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference< css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
class XMLPlaceholderFieldImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
const OUString sPropertyHint;
|
|
|
|
OUString sDescription;
|
|
|
|
sal_Int16 nPlaceholderType;
|
|
|
|
public:
|
|
|
|
XMLPlaceholderFieldImportContext(
|
|
SvXMLImport& rImport, /// XML Import
|
|
XMLTextImportHelper& rHlp); /// Text import helper
|
|
|
|
private:
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference< css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
class XMLTimeFieldImportContext : public XMLTextFieldImportContext
|
|
{
|
|
protected:
|
|
const OUString sPropertyNumberFormat;
|
|
const OUString sPropertyFixed;
|
|
const OUString sPropertyDateTimeValue;
|
|
const OUString sPropertyDateTime;
|
|
const OUString sPropertyIsDate;
|
|
const OUString sPropertyIsFixedLanguage;
|
|
|
|
css::util::DateTime aDateTimeValue;
|
|
sal_Int32 nAdjust;
|
|
sal_Int32 nFormatKey;
|
|
bool bTimeOK;
|
|
bool bFormatOK;
|
|
bool bFixed;
|
|
bool bIsDate; // is this a date?
|
|
// (for XMLDateFieldImportContext, really)
|
|
bool bIsDefaultLanguage;
|
|
|
|
public:
|
|
|
|
XMLTimeFieldImportContext(
|
|
SvXMLImport& rImport, /// XML Import
|
|
XMLTextImportHelper& rHlp); /// Text import helper
|
|
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference< css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import date fields (<text:date>);
|
|
inherit from TimeField to reuse implementation */
|
|
class XMLDateFieldImportContext final : public XMLTimeFieldImportContext
|
|
{
|
|
public:
|
|
|
|
XMLDateFieldImportContext(
|
|
SvXMLImport& rImport, /// XML Import
|
|
XMLTextImportHelper& rHlp); /// Text import helper
|
|
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
};
|
|
|
|
/** import page continuation fields (<text:page-continuation-string>) */
|
|
class XMLPageContinuationImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
const OUString sPropertySubType;
|
|
const OUString sPropertyNumberingType;
|
|
|
|
OUString sString; /// continuation string
|
|
css::text::PageNumberType eSelectPage; /// previous, current
|
|
/// or next page
|
|
bool sStringOK; /// continuation string encountered?
|
|
|
|
public:
|
|
|
|
XMLPageContinuationImportContext(
|
|
SvXMLImport& rImport, /// XML Import
|
|
XMLTextImportHelper& rHlp); /// Text import helper
|
|
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference< css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import page number fields (<text:page-number>) */
|
|
class XMLPageNumberImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
const OUString sPropertySubType;
|
|
const OUString sPropertyNumberingType;
|
|
const OUString sPropertyOffset;
|
|
|
|
OUString sNumberFormat;
|
|
OUString sNumberSync;
|
|
sal_Int16 nPageAdjust;
|
|
css::text::PageNumberType eSelectPage; /// previous, current
|
|
/// or next page
|
|
bool sNumberFormatOK;
|
|
|
|
public:
|
|
|
|
XMLPageNumberImportContext(
|
|
SvXMLImport& rImport, /// XML Import
|
|
XMLTextImportHelper& rHlp); /// Text import helper
|
|
|
|
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference< css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** superclass for database fields: handle database and table names */
|
|
class XMLDatabaseFieldImportContext : public XMLTextFieldImportContext
|
|
{
|
|
OUString m_sDatabaseName;
|
|
OUString m_sDatabaseURL;
|
|
OUString m_sTableName;
|
|
|
|
sal_Int32 m_nCommandType;
|
|
bool m_bCommandTypeOK;
|
|
|
|
bool m_bDisplay;
|
|
bool m_bDisplayOK;
|
|
bool m_bUseDisplay;
|
|
|
|
protected:
|
|
bool m_bDatabaseOK;
|
|
bool m_bDatabaseNameOK;
|
|
bool m_bDatabaseURLOK;
|
|
bool m_bTableOK;
|
|
|
|
/// protected constructor: only for subclasses
|
|
XMLDatabaseFieldImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp,
|
|
const OUString& pServiceName,
|
|
bool bUseDisplay );
|
|
|
|
public:
|
|
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference< css::beans::XPropertySet> & xPropertySet) override;
|
|
|
|
/// handle database-location children
|
|
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
|
|
sal_Int32 nElement,
|
|
const css::uno::Reference< css::xml::sax::XFastAttributeList >& AttrList ) override;
|
|
};
|
|
|
|
/** import database name fields (<text:database-name>) */
|
|
class XMLDatabaseNameImportContext final : public XMLDatabaseFieldImportContext
|
|
{
|
|
public:
|
|
|
|
XMLDatabaseNameImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp);
|
|
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
};
|
|
|
|
/** import database next fields (<text:database-next>) */
|
|
class XMLDatabaseNextImportContext : public XMLDatabaseFieldImportContext
|
|
{
|
|
const OUString sPropertyCondition;
|
|
const OUString sTrue;
|
|
OUString sCondition;
|
|
bool bConditionOK;
|
|
|
|
protected:
|
|
// for use in child classes
|
|
XMLDatabaseNextImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp,
|
|
const OUString& pServiceName);
|
|
|
|
public:
|
|
|
|
XMLDatabaseNextImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp);
|
|
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference< css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import database select fields (<text:database-select>) */
|
|
class XMLDatabaseSelectImportContext final : public XMLDatabaseNextImportContext
|
|
{
|
|
const OUString sPropertySetNumber;
|
|
sal_Int32 nNumber;
|
|
bool bNumberOK;
|
|
|
|
public:
|
|
|
|
XMLDatabaseSelectImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp);
|
|
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<
|
|
css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import database display number fields (<text:database-row-number>) */
|
|
class XMLDatabaseNumberImportContext final : public XMLDatabaseFieldImportContext
|
|
{
|
|
const OUString sPropertyNumberingType;
|
|
const OUString sPropertySetNumber;
|
|
OUString sNumberFormat;
|
|
OUString sNumberSync;
|
|
sal_Int32 nValue;
|
|
bool bValueOK;
|
|
|
|
public:
|
|
|
|
XMLDatabaseNumberImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp);
|
|
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference< css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import docinfo fields with only fixed attribute */
|
|
class XMLSimpleDocInfoImportContext : public XMLTextFieldImportContext
|
|
{
|
|
const OUString sPropertyFixed;
|
|
const OUString sPropertyContent;
|
|
const OUString sPropertyAuthor;
|
|
const OUString sPropertyCurrentPresentation;
|
|
|
|
protected:
|
|
bool bFixed;
|
|
bool bHasAuthor;
|
|
bool bHasContent;
|
|
|
|
public:
|
|
|
|
XMLSimpleDocInfoImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp,
|
|
sal_Int32 nElementToken,
|
|
bool bContent,
|
|
bool bAuthor);
|
|
|
|
protected:
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference< css::beans::XPropertySet> & xPropertySet) override;
|
|
|
|
static OUString MapTokenToServiceName(sal_Int32 nElementToken);
|
|
};
|
|
|
|
/** import docinfo fields with date or time attributes and numberformats */
|
|
class XMLDateTimeDocInfoImportContext final : public XMLSimpleDocInfoImportContext
|
|
{
|
|
const OUString sPropertyNumberFormat;
|
|
const OUString sPropertyIsDate;
|
|
const OUString sPropertyIsFixedLanguage;
|
|
|
|
sal_Int32 nFormat;
|
|
bool bFormatOK;
|
|
bool bIsDate;
|
|
bool bHasDateTime;
|
|
bool bIsDefaultLanguage;
|
|
|
|
public:
|
|
|
|
XMLDateTimeDocInfoImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp,
|
|
sal_Int32 nElement);
|
|
|
|
private:
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference< css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import revision field (<text:editing-cycles>) */
|
|
class XMLRevisionDocInfoImportContext final : public XMLSimpleDocInfoImportContext
|
|
{
|
|
public:
|
|
|
|
XMLRevisionDocInfoImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp,
|
|
sal_Int32 nElement);
|
|
|
|
private:
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import user docinfo field (<text:user-defined>) */
|
|
class XMLUserDocInfoImportContext final : public XMLSimpleDocInfoImportContext
|
|
{
|
|
OUString aName;
|
|
const OUString sPropertyName;
|
|
const OUString sPropertyNumberFormat;
|
|
const OUString sPropertyIsFixedLanguage;
|
|
sal_Int32 nFormat;
|
|
bool bFormatOK;
|
|
bool bIsDefaultLanguage;
|
|
|
|
public:
|
|
|
|
XMLUserDocInfoImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp,
|
|
sal_Int32 nElement);
|
|
|
|
private:
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import hidden paragraph fields (<text:hidden-paragraph>) */
|
|
class XMLHiddenParagraphImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
const OUString sPropertyCondition;
|
|
const OUString sPropertyIsHidden;
|
|
|
|
OUString sCondition;
|
|
bool bIsHidden;
|
|
|
|
public:
|
|
|
|
XMLHiddenParagraphImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp);
|
|
|
|
private:
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import conditional text fields (<text:conditional-text>) */
|
|
class XMLConditionalTextImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
const OUString sPropertyCondition;
|
|
const OUString sPropertyCurrentPresentation;
|
|
|
|
OUString sCondition;
|
|
OUString sTrueContent;
|
|
OUString sFalseContent;
|
|
|
|
bool bConditionOK;
|
|
bool bTrueOK;
|
|
bool bFalseOK;
|
|
bool bCurrentValue;
|
|
|
|
public:
|
|
|
|
XMLConditionalTextImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp);
|
|
|
|
private:
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import conditional text fields (<text:hidden-text>) */
|
|
class XMLHiddenTextImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
const OUString sPropertyCondition;
|
|
const OUString sPropertyContent;
|
|
const OUString sPropertyIsHidden;
|
|
|
|
OUString sCondition;
|
|
OUString sString;
|
|
|
|
bool bConditionOK;
|
|
bool bStringOK;
|
|
bool bIsHidden;
|
|
|
|
public:
|
|
|
|
XMLHiddenTextImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp);
|
|
|
|
private:
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import file name fields (<text:file-name>) */
|
|
class XMLFileNameImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
const OUString sPropertyFixed;
|
|
const OUString sPropertyFileFormat;
|
|
const OUString sPropertyCurrentPresentation;
|
|
|
|
sal_Int16 nFormat;
|
|
bool bFixed;
|
|
|
|
public:
|
|
|
|
XMLFileNameImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp);
|
|
|
|
private:
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import document template name fields (<text:template-name>) */
|
|
class XMLTemplateNameImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
const OUString sPropertyFileFormat;
|
|
|
|
sal_Int16 nFormat;
|
|
|
|
public:
|
|
|
|
XMLTemplateNameImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp);
|
|
|
|
private:
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import chapter fields (<text:chapter>) */
|
|
class XMLChapterImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
sal_Int16 nFormat;
|
|
sal_Int8 nLevel;
|
|
|
|
public:
|
|
|
|
XMLChapterImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp);
|
|
|
|
private:
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import count fields (<text:[XXX]-count>) */
|
|
class XMLCountFieldImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
const OUString sPropertyNumberingType;
|
|
|
|
OUString sNumberFormat;
|
|
OUString sLetterSync;
|
|
|
|
bool bNumberFormatOK;
|
|
|
|
public:
|
|
|
|
XMLCountFieldImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp,
|
|
sal_Int32 nElement);
|
|
|
|
private:
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
|
|
static OUString MapTokenToServiceName(sal_Int32 nElement);
|
|
};
|
|
|
|
/** import page variable fields (<text:get-page-variable>) */
|
|
class XMLPageVarGetFieldImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
OUString sNumberFormat;
|
|
OUString sLetterSync;
|
|
|
|
bool bNumberFormatOK;
|
|
|
|
public:
|
|
|
|
XMLPageVarGetFieldImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp);
|
|
|
|
private:
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import page variable fields (<text:get-page-variable>) */
|
|
class XMLPageVarSetFieldImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
sal_Int16 nAdjust;
|
|
bool bActive;
|
|
|
|
public:
|
|
|
|
XMLPageVarSetFieldImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp);
|
|
|
|
private:
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import macro fields (<text:execute-macro>) */
|
|
class XMLMacroFieldImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
OUString sDescription;
|
|
rtl::Reference<XMLEventsImportContext> xEventContext;
|
|
|
|
OUString sMacro; // macro for old documents (pre 638i)
|
|
|
|
bool bDescriptionOK;
|
|
|
|
public:
|
|
|
|
XMLMacroFieldImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp);
|
|
|
|
private:
|
|
/// for <office:events> children
|
|
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
|
|
sal_Int32 nElement,
|
|
const css::uno::Reference< css::xml::sax::XFastAttributeList >& AttrList ) override;
|
|
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import reference fields (<text:reference-get>) */
|
|
class XMLReferenceFieldImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
OUString sName;
|
|
OUString sLanguage;
|
|
sal_Int32 nElementToken;
|
|
sal_Int16 nSource;
|
|
sal_Int16 nType;
|
|
|
|
bool bNameOK;
|
|
bool bTypeOK;
|
|
|
|
public:
|
|
|
|
XMLReferenceFieldImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp,
|
|
sal_Int32 nToken);
|
|
|
|
private:
|
|
/// start element
|
|
virtual void SAL_CALL startFastElement(
|
|
sal_Int32 nElement,
|
|
const css::uno::Reference<css::xml::sax::XFastAttributeList> & xAttrList) override;
|
|
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import dde field declaration container (<text:dde-connection-decls>) */
|
|
class XMLDdeFieldDeclsImportContext final : public SvXMLImportContext
|
|
{
|
|
public:
|
|
|
|
XMLDdeFieldDeclsImportContext(SvXMLImport& rImport);
|
|
|
|
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
|
|
sal_Int32 nElement,
|
|
const css::uno::Reference< css::xml::sax::XFastAttributeList >& AttrList ) override;
|
|
};
|
|
|
|
/** import dde field declaration (<text:dde-connection-decl>) */
|
|
class XMLDdeFieldDeclImportContext final : public SvXMLImportContext
|
|
{
|
|
public:
|
|
|
|
XMLDdeFieldDeclImportContext(SvXMLImport& rImport);
|
|
|
|
// create fieldmaster
|
|
virtual void SAL_CALL startFastElement(
|
|
sal_Int32 nElement,
|
|
const css::uno::Reference<css::xml::sax::XFastAttributeList> & xAttrList) override;
|
|
};
|
|
|
|
/** import dde fields (<text:dde-connection>) */
|
|
class XMLDdeFieldImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
OUString sName;
|
|
OUString sPropertyContent;
|
|
|
|
public:
|
|
|
|
XMLDdeFieldImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp);
|
|
|
|
private:
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// create textfield, attach master, and insert into document
|
|
virtual void SAL_CALL endFastElement(sal_Int32 nElement) override;
|
|
|
|
/// empty method
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import sheet name fields (Calc) dde fields (<text:sheet-name>) */
|
|
class XMLSheetNameImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
|
|
public:
|
|
|
|
XMLSheetNameImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp);
|
|
|
|
private:
|
|
/// no attributes -> empty method
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// no attributes -> empty method
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import page|slide name fields (<text:page-name>) */
|
|
class XMLPageNameFieldImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
public:
|
|
|
|
XMLPageNameFieldImportContext(
|
|
SvXMLImport& rImport, /// XML Import
|
|
XMLTextImportHelper& rHlp); /// Text import helper
|
|
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import hyperlinks as URL fields (Calc, Impress, Draw) (<office:a>) */
|
|
class XMLUrlFieldImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
OUString sURL;
|
|
OUString sFrame;
|
|
bool bFrameOK;
|
|
|
|
public:
|
|
|
|
XMLUrlFieldImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp);
|
|
|
|
private:
|
|
/// no attributes -> empty method
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// no attributes -> empty method
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import bibliography info fields (<text:bibliography-mark>) */
|
|
class XMLBibliographyFieldImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
::std::vector< css::beans::PropertyValue> aValues;
|
|
|
|
public:
|
|
|
|
XMLBibliographyFieldImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp);
|
|
|
|
private:
|
|
/// process attributes (fill aValues)
|
|
virtual void SAL_CALL startFastElement(
|
|
sal_Int32 nElement,
|
|
const css::uno::Reference< css::xml::sax::XFastAttributeList>& xAttrList) override;
|
|
|
|
/// empty method; all attributes are handled in StartElement
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// convert aValues into sequence and set property
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
|
|
static const char* MapBibliographyFieldName(sal_Int32 nElement);
|
|
};
|
|
|
|
/** Import an annotation field (<text:annotation>) */
|
|
class XMLAnnotationImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
OUStringBuffer aAuthorBuffer;
|
|
OUStringBuffer aInitialsBuffer;
|
|
OUString aName;
|
|
OUStringBuffer aTextBuffer;
|
|
OUStringBuffer aDateBuffer;
|
|
OUString aResolved;
|
|
|
|
css::uno::Reference < css::beans::XPropertySet > mxField;
|
|
css::uno::Reference < css::text::XTextCursor > mxCursor;
|
|
css::uno::Reference < css::text::XTextCursor > mxOldCursor;
|
|
|
|
sal_Int32 mnElement;
|
|
|
|
public:
|
|
|
|
XMLAnnotationImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp,
|
|
sal_Int32 nElement);
|
|
|
|
private:
|
|
/// process attributes
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// set properties
|
|
virtual void PrepareField(
|
|
const css::uno::Reference< css::beans::XPropertySet > & xPropertySet) override;
|
|
|
|
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
|
|
sal_Int32 nElement,
|
|
const css::uno::Reference< css::xml::sax::XFastAttributeList >& AttrList ) override;
|
|
virtual void SAL_CALL endFastElement(sal_Int32 nElement) override;
|
|
};
|
|
|
|
/** Import a script field (<text:script>) */
|
|
class XMLScriptImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
OUString sContent;
|
|
OUString sScriptType;
|
|
|
|
bool bContentOK;
|
|
|
|
public:
|
|
|
|
XMLScriptImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp);
|
|
|
|
private:
|
|
/// process attributes
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// set properties
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import measure fields (<text:measure>) */
|
|
class XMLMeasureFieldImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
sal_Int16 mnKind;
|
|
|
|
public:
|
|
|
|
XMLMeasureFieldImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp);
|
|
|
|
private:
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** dropdown field (filter legacy) */
|
|
class XMLDropDownFieldImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
std::vector<OUString> aLabels;
|
|
OUString sName;
|
|
OUString sHelp;
|
|
OUString sHint;
|
|
sal_Int32 nSelected;
|
|
bool bNameOK;
|
|
bool bHelpOK;
|
|
bool bHintOK;
|
|
|
|
public:
|
|
|
|
XMLDropDownFieldImportContext(SvXMLImport& rImport,
|
|
XMLTextImportHelper& rHlp);
|
|
|
|
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(
|
|
sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList >& AttrList ) override;
|
|
|
|
private:
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import header fields (<draw:header>) */
|
|
class XMLHeaderFieldImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
public:
|
|
|
|
XMLHeaderFieldImportContext(
|
|
SvXMLImport& rImport, /// XML Import
|
|
XMLTextImportHelper& rHlp); /// Text import helper
|
|
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import footer fields (<draw:footer>) */
|
|
class XMLFooterFieldImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
public:
|
|
|
|
XMLFooterFieldImportContext(
|
|
SvXMLImport& rImport, /// XML Import
|
|
XMLTextImportHelper& rHlp); /// Text import helper
|
|
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/** import footer fields (<draw:date-and-time>) */
|
|
class XMLDateTimeFieldImportContext final : public XMLTextFieldImportContext
|
|
{
|
|
public:
|
|
|
|
XMLDateTimeFieldImportContext(
|
|
SvXMLImport& rImport, /// XML Import
|
|
XMLTextImportHelper& rHlp); /// Text import helper
|
|
|
|
/// process attribute values
|
|
virtual void ProcessAttribute( sal_Int32 nAttrToken,
|
|
std::string_view sAttrValue ) override;
|
|
|
|
/// prepare XTextField for insertion into document
|
|
virtual void PrepareField(
|
|
const css::uno::Reference<css::beans::XPropertySet> & xPropertySet) override;
|
|
};
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|