34 #include <com/sun/star/frame/XModel.hpp>
35 #include <com/sun/star/text/SetVariableType.hpp>
36 #include <com/sun/star/text/XDependentTextField.hpp>
37 #include <com/sun/star/text/XTextFieldsSupplier.hpp>
38 #include <com/sun/star/beans/XPropertySet.hpp>
39 #include <com/sun/star/beans/XPropertySetInfo.hpp>
40 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
41 #include <com/sun/star/xml/sax/XAttributeList.hpp>
42 #include <com/sun/star/style/NumberingType.hpp>
43 #include <com/sun/star/container/XIndexReplace.hpp>
47 #include <rtl/ustring.hxx>
48 #include <osl/diagnose.h>
60 constexpr OUStringLiteral
sAPI_database =
u"com.sun.star.text.TextField.Database";
83 const OUString& pServiceName,
84 bool bFormula,
bool bFormulaDefault,
85 bool bDescription,
bool bHelp,
bool bHint,
bool bVisible,
86 bool bIsDisplayFormula,
87 bool bType,
bool bStyle,
bool bValue,
90 aValueHelper(rImport, rHlp, bType, bStyle, bValue, false),
91 bDisplayFormula(false),
94 bDescriptionOK(false),
98 bSetFormula(bFormula),
99 bSetFormulaDefault(bFormulaDefault),
100 bSetDescription(bDescription),
103 bSetVisible(bVisible),
104 bSetDisplayFormula(bIsDisplayFormula),
105 bSetPresentation(bPresentation)
110 sal_Int32 nAttrToken,
111 std::string_view sAttrValue )
116 sName = OUString::fromUtf8(sAttrValue);
124 sHelp = OUString::fromUtf8(sAttrValue);
128 sHint = OUString::fromUtf8(sAttrValue);
135 GetKeyByAttrValueQName(OUString::fromUtf8(sAttrValue), &sTmp);
142 sFormula = OUString::fromUtf8(sAttrValue);
165 "illegal display values");
200 xPropertySet->setPropertyValue(
"Help",
Any(
sHelp));
205 xPropertySet->setPropertyValue(
"Tooltip",
Any(
sHint));
215 if (xPropertySet->getPropertySetInfo()->
216 hasPropertyByName(
"IsShowFormula") &&
227 xPropertySet->setPropertyValue(
"IsShowFormula",
Any(bTmp));
249 const OUString& pServiceName,
VarType eVarType,
250 bool bFormula,
bool bFormulaDefault,
251 bool bDescription,
bool bHelp,
bool bHint,
bool bVisible,
bool bIsDisplayFormula,
252 bool bType,
bool bStyle,
bool bValue,
bool bPresentation) :
254 bFormula, bFormulaDefault,
255 bDescription, bHelp, bHint, bVisible, bIsDisplayFormula,
256 bType, bStyle, bValue, bPresentation),
283 Reference<XDependentTextField> xDepTextField(xPropSet, UNO_QUERY);
284 if (xDepTextField.is())
287 xDepTextField->attachTextFieldMaster(xMaster);
290 Reference<XTextContent> xTextContent(xPropSet, UNO_QUERY);
291 if (xTextContent.is())
297 }
catch (lang::IllegalArgumentException & )
335 false, false, false, false,
337 false, false, false, true),
339 sNumFormat(OUString(
'1')),
346 sal_Int32 nAttrToken, std::string_view sAttrValue )
357 sRefName = OUString::fromUtf8(sAttrValue);
375 sal_Int16
nNumType = NumberingType::ARABIC;
382 Any aAny = xPropertySet->getPropertyValue(
"SequenceValue");
412 aAny <<= (
IsStringValue()? SetVariableType::STRING : SetVariableType::VAR);
442 xPropertySet->setPropertyValue(
"Input",
Any(
true));
445 aAny <<= (
IsStringValue()? SetVariableType::STRING : SetVariableType::VAR);
462 false, false, false, true,
542 xPropertySet->setPropertyValue(
sAPI_sub_type,
Any(sal_Int16(SetVariableType::FORMULA)));
581 aValueHelper(rImport, rHlp, false, true, false, true),
582 bIsShowFormula(false)
587 sal_Int32 nAttrToken,
588 std::string_view sAttrValue )
601 if ( sAttrValue ==
"formula" )
623 xPropertySet->setPropertyValue(
"CurrentPresentation", aAny );
638 eVarDeclsContextType(eVarType),
645 const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList )
664 OSL_FAIL(
"unknown field type!");
688 const Reference<xml::sax::XFastAttributeList> & xAttrList,
709 switch (aIter.getToken())
712 sName = aIter.toString();
718 nLevel, aIter.toView(), 0,
723 nNumLevel =
static_cast< sal_Int8 >( nLevel-1 );
729 static_cast<char>(aIter.toString().toChar());
750 xFieldMaster->setPropertyValue(
"ChapterNumberingLevel",
Any(nNumLevel));
754 OUString sStr(&cSeparationChar, 1);
755 xFieldMaster->setPropertyValue(
756 "NumberingSeparator",
Any(sStr));
765 ? SetVariableType::STRING : SetVariableType::VAR;
772 xFieldMaster->setPropertyValue(
"IsExpression",
Any(bTmp));
777 OSL_FAIL(
"unknown varfield type");
785 const OUString& sVarName,
enum VarType eVarType)
787 static sal_Int32 nCollisionCount = 0;
792 sal::static_int_cast< sal_uInt16 >(eVarType), sVarName);
795 Reference<XTextFieldsSupplier> xTextFieldsSupp(rImport.
GetModel(),
798 xTextFieldsSupp->getTextFieldMasters();
800 OUString sVarServiceName =
806 OUString sUserServiceName =
812 if (xFieldMasterNameAccess->hasByName(sVarServiceName)) {
815 Any aAny = xFieldMasterNameAccess->getByName(sVarServiceName);
823 (SetVariableType::SEQUENCE == nType) ?
826 if (eFMVarType != eVarType)
829 OUString sNew(sName +
"_renamed_" + OUString::number(nCollisionCount));
834 sal::static_int_cast< sal_uInt16 >(eVarType), sName, sNew);
840 }
else if (xFieldMasterNameAccess->hasByName(sUserServiceName)) {
842 Any aAny = xFieldMasterNameAccess->getByName(sUserServiceName);
848 OUString sNew(sName +
"_renamed_" + OUString::number(nCollisionCount));
853 sal::static_int_cast< sal_uInt16 >(eVarType), sName, sNew);
863 Reference<lang::XMultiServiceFactory>
867 OUStringBuffer sService;
871 Reference<XInterface> xIfc =
872 xFactory->createInstance( sService.makeStringAndClear() );
878 xMaster->setPropertyValue(
"Name",
Any(sName));
884 SetVariableType::VAR :
885 SetVariableType::SEQUENCE);
897 DBG_ASSERT(xMaster.is(),
"no field master found!?!");
908 aValueHelper(rImport, rHlp, false, true, false, false),
916 sal_Int32 nAttrToken, std::string_view sAttrValue )
963 "com.sun.star.text.FieldMaster.Database"))
977 Reference<XDependentTextField> xDepField(xField, UNO_QUERY);
981 xDepField->attachTextFieldMaster(xMaster);
984 Reference<XTextContent> xTextContent(xField, UNO_QUERY);
985 if (xTextContent.is())
994 xField->setPropertyValue(
"DataBaseFormat",
Any(bTmp));
1012 catch (
const lang::IllegalArgumentException&)
1034 XML_VALUE_TYPE_STRING,
1035 XML_VALUE_TYPE_FLOAT,
1036 XML_VALUE_TYPE_CURRENCY,
1037 XML_VALUE_TYPE_PERCENTAGE,
1038 XML_VALUE_TYPE_DATE,
1039 XML_VALUE_TYPE_TIME,
1040 XML_VALUE_TYPE_BOOLEAN
1060 bool bType,
bool bStyle,
bool bValue,
bool bFormula) :
1067 bIsDefaultLanguage(true),
1071 bStringValueOK(false),
1077 bSetFormula(bFormula)
1082 sal_Int32 nAttrToken, std::string_view sAttrValue )
1090 ValueType eValueType = XML_VALUE_TYPE_STRING;
1092 eValueType, sAttrValue, aValueTypeMap);
1097 case XML_VALUE_TYPE_STRING:
1100 case XML_VALUE_TYPE_FLOAT:
1101 case XML_VALUE_TYPE_CURRENCY:
1102 case XML_VALUE_TYPE_PERCENTAGE:
1103 case XML_VALUE_TYPE_DATE:
1104 case XML_VALUE_TYPE_TIME:
1105 case XML_VALUE_TYPE_BOOLEAN:
1110 OSL_FAIL(
"unknown value type");
1144 convertDateTime(fTmp,sAttrValue);
1156 fValue = (bTmp ? 1.0 : 0.0);
1171 sValue = OUString::fromUtf8(sAttrValue);
1179 GetKeyByAttrValueQName(OUString::fromUtf8(sAttrValue), &sTmp);
1186 sFormula = OUString::fromUtf8(sAttrValue);
1227 if( xPropertySet->getPropertySetInfo()->
1228 hasPropertyByName(
"IsFixedLanguage" ) )
1231 xPropertySet->setPropertyValue(
"IsFixedLanguage",
Any(bIsFixedLanguage) );
1245 xPropertySet->setPropertyValue(
"Value",
Any(
fValue));
bool FindFieldMaster(css::uno::Reference< css::beans::XPropertySet > &xMaster)
find appropriate field master
double fValue
string value (only valid if bStringValueOK)
XMLValueImportHelper aValueHelper
XMLValueImportHelper aValueHelper
hint
void SetDefault(const OUString &sStr)
XMLVariableDeclsImportContext(SvXMLImport &rImport, XMLTextImportHelper &rHlp, enum VarType eVarType)
bool bSetDisplayFormula
set IsVisible
const bool bSetType
have we read the formula attribute?
virtual void PrepareField(const css::uno::Reference< css::beans::XPropertySet > &xPropertySet) override
Text import helper.
enum VarType eVarDeclsContextType
const bool bSetFormula
should PrepareField set NumberFormat?
superclass for database fields: handle database and table names
virtual void PrepareField(const css::uno::Reference< css::beans::XPropertySet > &xPropertySet) override
Text import helper.
constexpr OUStringLiteral sAPI_is_visible
XMLVariableInputFieldImportContext(SvXMLImport &rImport, XMLTextImportHelper &rHlp)
const OUString & Get(sal_uInt16 nKind, const OUString &rName) const
sal_Int32 nFormatKey
double value (only valid if bFloatValueOK)
constexpr char16_t sAPI_fieldmaster_prefix[]
#file
XMLTextInputFieldImportContext(SvXMLImport &rImport, XMLTextImportHelper &rHlp)
constexpr OUStringLiteral sAPI_current_presentation
SvXMLImport & GetImport()
XMLUserFieldInputImportContext(SvXMLImport &rImport, XMLTextImportHelper &rHlp)
virtual void ProcessAttribute(sal_Int32 nAttrToken, std::string_view sAttrValue) override
set presentation from elem. content
#define XMLOFF_WARN_UNKNOWN_ATTR(area, token, value)
bool bDescriptionOK
sFormula was set
abstract class for text field import
virtual void SAL_CALL endFastElement(sal_Int32 nElement) override
create, prepare and insert database field master and database field
SvXMLNamespaceMap & GetNamespaceMap()
bool IsXMLToken(std::u16string_view rString, enum XMLTokenEnum eToken)
compare eToken to the string
XMLVariableSetFieldImportContext(SvXMLImport &rImport, XMLTextImportHelper &rHlp)
FastAttributeList & castToFastAttributeList(const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList)
SvI18NMap & GetRenameMap()
bool bSetPresentation
set DisplayFormula (sub type???)
upperclass for variable/user-set, var/user-input, and sequence fields inds field master of appropriat...
rtl::Reference< XMLTextImportHelper > const & GetTextImport()
virtual void PrepareField(const css::uno::Reference< css::beans::XPropertySet > &xPropertySet) override
prepare XTextField for insertion into document
VarType
variable type (for XMLSetVarFieldImportContext)
virtual void PrepareField(const css::uno::Reference< css::beans::XPropertySet > &xPropertySet) override
Text import helper.
const OUString & GetServiceName() const
virtual void ProcessAttribute(sal_Int32 nAttrToken, std::string_view sAttrValue) override
process attribute values
OUString sDescription
formula attribute
bool CreateField(css::uno::Reference< css::beans::XPropertySet > &xField, const OUString &sServiceName)
create field from ServiceName
abstract parent class for all variable related fields
XMLTextImportHelper & rHelper
constexpr OUStringLiteral sAPI_set_expression
static void convertDouble(OUStringBuffer &rBuffer, double fNumber, bool bWriteUnits, sal_Int16 nSourceUnit, sal_Int16 nTargetUnit)
constexpr OUStringLiteral sAPI_number_format
bool IsFormatOK() const
has format been read?
void ProcessAttribute(sal_Int32 nAttrToken, std::string_view sAttrValue)
process formula (Prep.F.)
OUString sFormula
format key (only valid of bFormatOK)
void InsertString(const OUString &rChars)
constexpr OUStringLiteral sAPI_get_expression
bool bSetFormulaDefault
set Formula property
bool bDisplayFormula
value, value-type, and style
virtual void PrepareField(const css::uno::Reference< css::beans::XPropertySet > &xPropertySet) override
Text import helper.
XMLSequenceFieldImportContext(SvXMLImport &rImport, XMLTextImportHelper &rHlp)
constexpr OUStringLiteral sAPI_user
void PrepareField(const css::uno::Reference< css::beans::XPropertySet > &xPropertySet)
prepare XTextField for insertion into document
bool IsStringValue() const
virtual void ProcessAttribute(sal_Int32 nAttrToken, std::string_view sAttrValue) override
Text import helper.
virtual void ProcessAttribute(sal_Int32 nAttrToken, std::string_view sAttrValue) override
text import helper
XMLTokenEnum
The enumeration of all XML tokens.
bool convertNumFormat(sal_Int16 &rType, const OUString &rNumFormat, std::u16string_view rNumLetterSync, bool bNumberNone=false) const
convert num-format and num-letter-sync values to NumberingType
constexpr OUStringLiteral sAPI_database
OUString sHelp
description
XMLTextImportHelper & rImportHelper
virtual void ProcessAttribute(sal_Int32 nAttrToken, std::string_view sAttrValue) override
text import helper
bool bDisplayNone
display formula?(rather than value)
XMLValueImportHelper aValueHelper
#define TOOLS_WARN_EXCEPTION(area, stream)
bool bSetFormula
sDisplayFormula/-None were set
virtual void PrepareField(const css::uno::Reference< css::beans::XPropertySet > &xPropertySet) override
prepare XTextField for insertion into document
#define DBG_ASSERT(sCon, aError)
bool bDisplayOK
sHint was set
constexpr sal_uInt16 XML_NAMESPACE_TEXT
void Add(sal_uInt16 nKind, const OUString &rName, const OUString &rNewName)
XMLTextImportHelper & GetImportHelper()
get helper
OUString sFormula
name attribute
bool bSetDescription
use content as default for formula
virtual void PrepareField(const css::uno::Reference< css::beans::XPropertySet > &xPropertySet) override
Text import helper.
bool bFormatOK
is this a string (or a float) type?
static void convertDuration(OUStringBuffer &rBuffer, const double fTime)
const bool bSetValue
should PrepareField set the SetExp subtype?
const OUString & GetName() const
static bool convertBool(bool &rBool, std::u16string_view rString)
bool bHelpOK
sDescription was set
constexpr OUStringLiteral sAPI_sub_type
bool bIsDefaultLanguage
default (see bStringDefault/bFormulaDef.)
This class deliberately does not support XWeak, to improve performance when loading large documents...
bool bStringType
format (of nFormatKey) has system language?
void InsertTextContent(css::uno::Reference< css::text::XTextContent > const &xContent)
bool bSetHelp
set sDescription with Hint-property
Map an XMLTokenEnum to an enum value.
OUString const & GetContent()
XMLUserFieldImportContext(SvXMLImport &rImport, XMLTextImportHelper &rHlp)
constexpr bool IsTokenInNamespace(sal_Int32 nToken, sal_uInt16 nNamespacePrefix)
static bool FindFieldMaster(css::uno::Reference< css::beans::XPropertySet > &xMaster, SvXMLImport &rImport, XMLTextImportHelper &rHelper, const OUString &sVarName, enum VarType eVarType)
variable type
const OUString & GetXMLToken(enum XMLTokenEnum eToken)
return the OUString representation for eToken
virtual void PrepareField(const css::uno::Reference< css::beans::XPropertySet > &xPropertySet) override
Text import helper.
void InsertSequenceID(const OUString &sXMLId, const OUString &sName, sal_Int16 nAPIId)
insert new sequence ID Also fixup open references from backpatch list to this ID. ...
Handling of tokens in XML:
const bool bSetStyle
should PrepareField set content/value?
XMLExpressionFieldImportContext(SvXMLImport &rImport, XMLTextImportHelper &rHlp)
#define XML_ELEMENT(prefix, name)
static bool convertEnum(EnumT &rEnum, std::u16string_view rValue, const SvXMLEnumMapEntry< EnumT > *pMap)
convert string to enum using given enum map, if the enum is not found in the map, this method will re...
const SvXMLUnitConverter & GetMM100UnitConverter() const
const css::uno::Reference< css::frame::XModel > & GetModel() const
XMLVariableDeclImportContext(SvXMLImport &rImport, XMLTextImportHelper &rHlp, sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList > &xAttrList, enum VarType eVarType)
variable field declarations (variable-decl, user-field-decl, sequence-decl)
bool bHintOK
sHelp was set
bool bFormulaOK
have we read a string-value attr.?
constexpr OUStringLiteral sAPI_content
virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext(sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList > &AttrList) override
variable type
Reference< XSingleServiceFactory > xFactory
OUString sDefault
formula string
XMLSetVarFieldImportContext(SvXMLImport &rImport, XMLTextImportHelper &rHlp, const OUString &pServiceName, VarType eVarType, bool bFormula, bool bFormulaDefault, bool bDescription, bool bHelp, bool bHint, bool bVisible, bool bDisplayFormula, bool bType, bool bStyle, bool bValue, bool bPresentation)
virtual void SAL_CALL endFastElement(sal_Int32 nElement) override
see XMLTextFieldImportContext
bool bStringValueOK
have we read a style:data-style-name attr.?
XMLTableFormulaImportContext(SvXMLImport &rImport, XMLTextImportHelper &rHlp)
XMLDatabaseDisplayImportContext(SvXMLImport &rImport, XMLTextImportHelper &rHlp)
SvXMLEnumMapEntry< ValueType > const aValueTypeMap[]
bool bFormulaOK
hide field?
constexpr sal_uInt16 XML_NAMESPACE_OOOW
virtual void PrepareField(const css::uno::Reference< css::beans::XPropertySet > &xPropertySet) override
prepare XTextField for insertion into document
XMLVarFieldImportContext(SvXMLImport &rImport, XMLTextImportHelper &rHlp, const OUString &pServiceName, bool bFormula, bool bFormulaDefault, bool bDescription, bool bHelp, bool bHint, bool bVisible, bool bDisplayFormula, bool bType, bool bStyle, bool bValue, bool bPresentation)
set presentation frm elem. content?
bool IsStringValue() const
is value a string (rather than double)?
virtual void PrepareField(const css::uno::Reference< css::beans::XPropertySet > &xPropertySet) override
prepare XTextField for insertion into document
XMLValueImportHelper(SvXMLImport &rImprt, XMLTextImportHelper &rHlp, bool bType, bool bStyle, bool bValue, bool bFormula)
should PrepareField set Formula?
XMLVariableGetFieldImportContext(SvXMLImport &rImport, XMLTextImportHelper &rHlp)
static bool convertNumber(sal_Int32 &rValue, std::u16string_view aString, sal_Int32 nMin=SAL_MIN_INT32, sal_Int32 nMax=SAL_MAX_INT32)
sal_Int32 GetDataStyleKey(const OUString &sStyleName, bool *pIsSystemLanguage=nullptr)
return key appropriate for use with NumberFormat property return -1 if style is not found (may return...