diff options
Diffstat (limited to '')
-rw-r--r-- | xmloff/inc/txtfldi.hxx | 1122 |
1 files changed, 1122 insertions, 0 deletions
diff --git a/xmloff/inc/txtfldi.hxx b/xmloff/inc/txtfldi.hxx new file mode 100644 index 000000000..f6f27d633 --- /dev/null +++ b/xmloff/inc/txtfldi.hxx @@ -0,0 +1,1122 @@ +/* -*- 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: */ |