| /************************************************************** |
| * |
| * 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 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_xmloff.hxx" |
| |
| #include "xmloff/numehelp.hxx" |
| |
| #include <xmloff/nmspmap.hxx> |
| #include "xmloff/xmlnmspe.hxx" |
| #include <xmloff/xmluconv.hxx> |
| #include <xmloff/xmltoken.hxx> |
| #include <xmloff/xmlexp.hxx> |
| #include <com/sun/star/uno/Reference.h> |
| #include <rtl/ustring.hxx> |
| #include <svl/zforlist.hxx> |
| #include <com/sun/star/util/NumberFormat.hpp> |
| #include <rtl/math.hxx> |
| #include <tools/debug.hxx> |
| #include <rtl/ustrbuf.hxx> |
| |
| using namespace com::sun::star; |
| using namespace xmloff::token; |
| |
| #define XML_TYPE "Type" |
| #define XML_CURRENCYSYMBOL "CurrencySymbol" |
| #define XML_CURRENCYABBREVIATION "CurrencyAbbreviation" |
| #define XML_STANDARDFORMAT "StandardFormat" |
| |
| XMLNumberFormatAttributesExportHelper::XMLNumberFormatAttributesExportHelper( |
| ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier >& xTempNumberFormatsSupplier) |
| : xNumberFormats(xTempNumberFormatsSupplier.is() ? xTempNumberFormatsSupplier->getNumberFormats() : ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormats > ()), |
| pExport(NULL), |
| sStandardFormat(RTL_CONSTASCII_USTRINGPARAM(XML_STANDARDFORMAT)), |
| sType(RTL_CONSTASCII_USTRINGPARAM(XML_TYPE)), |
| msCurrencySymbol(RTL_CONSTASCII_USTRINGPARAM(XML_CURRENCYSYMBOL)), |
| msCurrencyAbbreviation(RTL_CONSTASCII_USTRINGPARAM(XML_CURRENCYABBREVIATION)), |
| aNumberFormats() |
| { |
| } |
| |
| XMLNumberFormatAttributesExportHelper::XMLNumberFormatAttributesExportHelper( |
| ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormatsSupplier >& xTempNumberFormatsSupplier, |
| SvXMLExport& rTempExport ) |
| : xNumberFormats(xTempNumberFormatsSupplier.is() ? xTempNumberFormatsSupplier->getNumberFormats() : ::com::sun::star::uno::Reference< ::com::sun::star::util::XNumberFormats > ()), |
| pExport(&rTempExport), |
| sStandardFormat(RTL_CONSTASCII_USTRINGPARAM(XML_STANDARDFORMAT)), |
| sType(RTL_CONSTASCII_USTRINGPARAM(XML_TYPE)), |
| sAttrValueType(rTempExport.GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_OFFICE, GetXMLToken(XML_VALUE_TYPE))), |
| sAttrValue(rTempExport.GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_OFFICE, GetXMLToken(XML_VALUE))), |
| sAttrDateValue(rTempExport.GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_OFFICE, GetXMLToken(XML_DATE_VALUE))), |
| sAttrTimeValue(rTempExport.GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_OFFICE, GetXMLToken(XML_TIME_VALUE))), |
| sAttrBooleanValue(rTempExport.GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_OFFICE, GetXMLToken(XML_BOOLEAN_VALUE))), |
| sAttrStringValue(rTempExport.GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_OFFICE, GetXMLToken(XML_STRING_VALUE))), |
| sAttrCurrency(rTempExport.GetNamespaceMap().GetQNameByKey( XML_NAMESPACE_OFFICE, GetXMLToken(XML_CURRENCY))), |
| msCurrencySymbol(RTL_CONSTASCII_USTRINGPARAM(XML_CURRENCYSYMBOL)), |
| msCurrencyAbbreviation(RTL_CONSTASCII_USTRINGPARAM(XML_CURRENCYABBREVIATION)), |
| aNumberFormats() |
| { |
| } |
| |
| XMLNumberFormatAttributesExportHelper::~XMLNumberFormatAttributesExportHelper() |
| { |
| } |
| |
| sal_Int16 XMLNumberFormatAttributesExportHelper::GetCellType(const sal_Int32 nNumberFormat, rtl::OUString& sCurrency, sal_Bool& bIsStandard) |
| { |
| XMLNumberFormat aFormat(sEmpty, nNumberFormat, 0); |
| XMLNumberFormatSet::iterator aItr(aNumberFormats.find(aFormat)); |
| XMLNumberFormatSet::iterator aEndItr(aNumberFormats.end()); |
| if (aItr != aEndItr) |
| { |
| bIsStandard = aItr->bIsStandard; |
| sCurrency = aItr->sCurrency; |
| return aItr->nType; |
| } |
| else |
| { |
| aFormat.nType = GetCellType(nNumberFormat, bIsStandard); |
| aFormat.bIsStandard = bIsStandard; |
| if ((aFormat.nType & ~util::NumberFormat::DEFINED) == util::NumberFormat::CURRENCY) |
| if (GetCurrencySymbol(nNumberFormat, aFormat.sCurrency)) |
| sCurrency = aFormat.sCurrency; |
| aNumberFormats.insert(aFormat); |
| return aFormat.nType; |
| } |
| } |
| |
| void XMLNumberFormatAttributesExportHelper::WriteAttributes(SvXMLExport& rXMLExport, |
| const sal_Int16 nTypeKey, |
| const double& rValue, |
| const rtl::OUString& rCurrency, |
| sal_Bool bExportValue) |
| { |
| sal_Bool bWasSetTypeAttribute = sal_False; |
| switch(nTypeKey & ~util::NumberFormat::DEFINED) |
| { |
| case 0: |
| case util::NumberFormat::NUMBER: |
| case util::NumberFormat::SCIENTIFIC: |
| case util::NumberFormat::FRACTION: |
| { |
| if (!bWasSetTypeAttribute) |
| { |
| rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE_TYPE, XML_FLOAT); |
| bWasSetTypeAttribute = sal_True; |
| } |
| } // No Break |
| case util::NumberFormat::PERCENT: |
| { |
| if (!bWasSetTypeAttribute) |
| { |
| rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE_TYPE, XML_PERCENTAGE); |
| bWasSetTypeAttribute = sal_True; |
| } |
| } // No Break |
| case util::NumberFormat::CURRENCY: |
| { |
| if (!bWasSetTypeAttribute) |
| { |
| rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE_TYPE, XML_CURRENCY); |
| if (rCurrency.getLength() > 0) |
| rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_CURRENCY, rCurrency); |
| bWasSetTypeAttribute = sal_True; |
| } |
| |
| if (bExportValue) |
| { |
| rtl::OUString sValue( ::rtl::math::doubleToUString( rValue, |
| rtl_math_StringFormat_Automatic, |
| rtl_math_DecimalPlaces_Max, '.', sal_True)); |
| rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE, sValue); |
| } |
| } |
| break; |
| case util::NumberFormat::DATE: |
| case util::NumberFormat::DATETIME: |
| { |
| if (!bWasSetTypeAttribute) |
| { |
| rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE_TYPE, XML_DATE); |
| bWasSetTypeAttribute = sal_True; |
| } |
| if (bExportValue) |
| { |
| if ( rXMLExport.SetNullDateOnUnitConverter() ) |
| { |
| rtl::OUStringBuffer sBuffer; |
| rXMLExport.GetMM100UnitConverter().convertDateTime(sBuffer, rValue); |
| rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_DATE_VALUE, sBuffer.makeStringAndClear()); |
| } |
| } |
| } |
| break; |
| case util::NumberFormat::TIME: |
| { |
| if (!bWasSetTypeAttribute) |
| { |
| rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE_TYPE, XML_TIME); |
| bWasSetTypeAttribute = sal_True; |
| } |
| if (bExportValue) |
| { |
| rtl::OUStringBuffer sBuffer; |
| rXMLExport.GetMM100UnitConverter().convertTime(sBuffer, rValue); |
| rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_TIME_VALUE, sBuffer.makeStringAndClear()); |
| } |
| } |
| break; |
| case util::NumberFormat::LOGICAL: |
| { |
| if (!bWasSetTypeAttribute) |
| { |
| rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE_TYPE, XML_BOOLEAN); |
| bWasSetTypeAttribute = sal_True; |
| } |
| if (bExportValue) |
| { |
| double fTempValue = rValue; |
| if (::rtl::math::approxEqual( fTempValue, 1.0 )) |
| { |
| rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_BOOLEAN_VALUE, XML_TRUE); |
| } |
| else |
| { |
| if (::rtl::math::approxEqual( rValue, 0.0 )) |
| { |
| rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_BOOLEAN_VALUE, XML_FALSE); |
| } |
| else |
| { |
| rtl::OUString sValue( ::rtl::math::doubleToUString( |
| fTempValue, |
| rtl_math_StringFormat_Automatic, |
| rtl_math_DecimalPlaces_Max, '.', |
| sal_True)); |
| rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_BOOLEAN_VALUE, sValue); |
| } |
| } |
| } |
| } |
| break; |
| case util::NumberFormat::TEXT: |
| { |
| if (!bWasSetTypeAttribute) |
| { |
| rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE_TYPE, XML_FLOAT); |
| bWasSetTypeAttribute = sal_True; |
| if (bExportValue) |
| { |
| rtl::OUString sValue( ::rtl::math::doubleToUString( rValue, |
| rtl_math_StringFormat_Automatic, |
| rtl_math_DecimalPlaces_Max, '.', sal_True)); |
| rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE, sValue); |
| } |
| } |
| } |
| break; |
| } |
| } |
| |
| sal_Bool XMLNumberFormatAttributesExportHelper::GetCurrencySymbol(const sal_Int32 nNumberFormat, rtl::OUString& sCurrencySymbol, |
| uno::Reference <util::XNumberFormatsSupplier>& xNumberFormatsSupplier) |
| { |
| if (xNumberFormatsSupplier.is()) |
| { |
| uno::Reference <util::XNumberFormats> xNumberFormats(xNumberFormatsSupplier->getNumberFormats()); |
| if (xNumberFormats.is()) |
| { |
| try |
| { |
| uno::Reference <beans::XPropertySet> xNumberPropertySet(xNumberFormats->getByKey(nNumberFormat)); |
| if ( xNumberPropertySet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(XML_CURRENCYSYMBOL))) >>= sCurrencySymbol) |
| { |
| rtl::OUString sCurrencyAbbreviation; |
| if ( xNumberPropertySet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(XML_CURRENCYABBREVIATION))) >>= sCurrencyAbbreviation) |
| { |
| if ( sCurrencyAbbreviation.getLength() != 0 ) |
| sCurrencySymbol = sCurrencyAbbreviation; |
| else |
| { |
| if ( sCurrencySymbol.getLength() == 1 && sCurrencySymbol.toChar() == NfCurrencyEntry::GetEuroSymbol() ) |
| sCurrencySymbol = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("EUR")); |
| } |
| } |
| return sal_True; |
| } |
| } |
| catch ( uno::Exception& ) |
| { |
| DBG_ERROR("Numberformat not found"); |
| } |
| } |
| } |
| return sal_False; |
| } |
| |
| |
| sal_Int16 XMLNumberFormatAttributesExportHelper::GetCellType(const sal_Int32 nNumberFormat, sal_Bool& bIsStandard, |
| uno::Reference <util::XNumberFormatsSupplier>& xNumberFormatsSupplier) |
| { |
| if (xNumberFormatsSupplier.is()) |
| { |
| uno::Reference <util::XNumberFormats> xNumberFormats(xNumberFormatsSupplier->getNumberFormats()); |
| if (xNumberFormats.is()) |
| { |
| try |
| { |
| uno::Reference <beans::XPropertySet> xNumberPropertySet(xNumberFormats->getByKey(nNumberFormat)); |
| xNumberPropertySet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(XML_STANDARDFORMAT))) >>= bIsStandard; |
| sal_Int16 nNumberType = sal_Int16(); |
| if ( xNumberPropertySet->getPropertyValue(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(XML_TYPE))) >>= nNumberType ) |
| { |
| return nNumberType; |
| } |
| } |
| catch ( uno::Exception& ) |
| { |
| DBG_ERROR("Numberformat not found"); |
| } |
| } |
| } |
| return 0; |
| } |
| |
| void XMLNumberFormatAttributesExportHelper::SetNumberFormatAttributes(SvXMLExport& rXMLExport, |
| const sal_Int32 nNumberFormat, const double& rValue, sal_Bool bExportValue) |
| { |
| sal_Bool bIsStandard; |
| sal_Int16 nTypeKey = GetCellType(nNumberFormat, bIsStandard, rXMLExport.GetNumberFormatsSupplier()); |
| rtl::OUString sCurrency; |
| if ((nTypeKey & ~util::NumberFormat::DEFINED) == util::NumberFormat::CURRENCY) |
| GetCurrencySymbol(nNumberFormat, sCurrency, rXMLExport.GetNumberFormatsSupplier()); |
| WriteAttributes(rXMLExport, nTypeKey, rValue, sCurrency, bExportValue); |
| } |
| |
| void XMLNumberFormatAttributesExportHelper::SetNumberFormatAttributes(SvXMLExport& rXMLExport, |
| const rtl::OUString& rValue, const rtl::OUString& rCharacters, |
| sal_Bool bExportValue, sal_Bool bExportTypeAttribute) |
| { |
| if (bExportTypeAttribute) |
| rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_VALUE_TYPE, XML_STRING); |
| if (bExportValue && rValue.getLength() && (rValue != rCharacters)) |
| rXMLExport.AddAttribute(XML_NAMESPACE_OFFICE, XML_STRING_VALUE, rValue); |
| } |
| |
| sal_Bool XMLNumberFormatAttributesExportHelper::GetCurrencySymbol(const sal_Int32 nNumberFormat, rtl::OUString& rCurrencySymbol) |
| { |
| if (!xNumberFormats.is() && pExport && pExport->GetNumberFormatsSupplier().is()) |
| xNumberFormats.set(pExport->GetNumberFormatsSupplier()->getNumberFormats()); |
| |
| if (xNumberFormats.is()) |
| { |
| try |
| { |
| uno::Reference <beans::XPropertySet> xNumberPropertySet(xNumberFormats->getByKey(nNumberFormat)); |
| if ( xNumberPropertySet->getPropertyValue(msCurrencySymbol) >>= rCurrencySymbol) |
| { |
| rtl::OUString sCurrencyAbbreviation; |
| if ( xNumberPropertySet->getPropertyValue(msCurrencyAbbreviation) >>= sCurrencyAbbreviation) |
| { |
| if ( sCurrencyAbbreviation.getLength() != 0 ) |
| rCurrencySymbol = sCurrencyAbbreviation; |
| else |
| { |
| if ( rCurrencySymbol.getLength() == 1 && rCurrencySymbol.toChar() == NfCurrencyEntry::GetEuroSymbol() ) |
| rCurrencySymbol = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("EUR")); |
| } |
| } |
| return sal_True; |
| } |
| } |
| catch ( uno::Exception& ) |
| { |
| DBG_ERROR("Numberformat not found"); |
| } |
| } |
| return sal_False; |
| } |
| |
| sal_Int16 XMLNumberFormatAttributesExportHelper::GetCellType(const sal_Int32 nNumberFormat, sal_Bool& bIsStandard) |
| { |
| if (!xNumberFormats.is() && pExport && pExport->GetNumberFormatsSupplier().is()) |
| xNumberFormats.set(pExport->GetNumberFormatsSupplier()->getNumberFormats()); |
| |
| if (xNumberFormats.is()) |
| { |
| try |
| { |
| uno::Reference <beans::XPropertySet> xNumberPropertySet(xNumberFormats->getByKey(nNumberFormat)); |
| if (xNumberPropertySet.is()) |
| { |
| xNumberPropertySet->getPropertyValue(sStandardFormat) >>= bIsStandard; |
| sal_Int16 nNumberType = sal_Int16(); |
| if ( xNumberPropertySet->getPropertyValue(sType) >>= nNumberType ) |
| { |
| return nNumberType; |
| } |
| } |
| } |
| catch ( uno::Exception& ) |
| { |
| DBG_ERROR("Numberformat not found"); |
| } |
| } |
| return 0; |
| } |
| |
| void XMLNumberFormatAttributesExportHelper::WriteAttributes( |
| const sal_Int16 nTypeKey, |
| const double& rValue, |
| const rtl::OUString& rCurrency, |
| sal_Bool bExportValue) |
| { |
| if (!pExport) |
| return; |
| |
| sal_Bool bWasSetTypeAttribute = sal_False; |
| switch(nTypeKey & ~util::NumberFormat::DEFINED) |
| { |
| case 0: |
| case util::NumberFormat::NUMBER: |
| case util::NumberFormat::SCIENTIFIC: |
| case util::NumberFormat::FRACTION: |
| { |
| if (!bWasSetTypeAttribute) |
| { |
| pExport->AddAttribute(sAttrValueType, XML_FLOAT); |
| bWasSetTypeAttribute = sal_True; |
| } |
| } // No Break |
| case util::NumberFormat::PERCENT: |
| { |
| if (!bWasSetTypeAttribute) |
| { |
| pExport->AddAttribute(sAttrValueType, XML_PERCENTAGE); |
| bWasSetTypeAttribute = sal_True; |
| } |
| } // No Break |
| case util::NumberFormat::CURRENCY: |
| { |
| if (!bWasSetTypeAttribute) |
| { |
| pExport->AddAttribute(sAttrValueType, XML_CURRENCY); |
| if (rCurrency.getLength() > 0) |
| pExport->AddAttribute(sAttrCurrency, rCurrency); |
| bWasSetTypeAttribute = sal_True; |
| } |
| |
| if (bExportValue) |
| { |
| rtl::OUString sValue( ::rtl::math::doubleToUString( rValue, |
| rtl_math_StringFormat_Automatic, |
| rtl_math_DecimalPlaces_Max, '.', sal_True)); |
| pExport->AddAttribute(sAttrValue, sValue); |
| } |
| } |
| break; |
| case util::NumberFormat::DATE: |
| case util::NumberFormat::DATETIME: |
| { |
| if (!bWasSetTypeAttribute) |
| { |
| pExport->AddAttribute(sAttrValueType, XML_DATE); |
| bWasSetTypeAttribute = sal_True; |
| } |
| if (bExportValue) |
| { |
| if ( pExport->SetNullDateOnUnitConverter() ) |
| { |
| rtl::OUStringBuffer sBuffer; |
| pExport->GetMM100UnitConverter().convertDateTime(sBuffer, rValue); |
| pExport->AddAttribute(sAttrDateValue, sBuffer.makeStringAndClear()); |
| } |
| } |
| } |
| break; |
| case util::NumberFormat::TIME: |
| { |
| if (!bWasSetTypeAttribute) |
| { |
| pExport->AddAttribute(sAttrValueType, XML_TIME); |
| bWasSetTypeAttribute = sal_True; |
| } |
| if (bExportValue) |
| { |
| rtl::OUStringBuffer sBuffer; |
| pExport->GetMM100UnitConverter().convertTime(sBuffer, rValue); |
| pExport->AddAttribute(sAttrTimeValue, sBuffer.makeStringAndClear()); |
| } |
| } |
| break; |
| case util::NumberFormat::LOGICAL: |
| { |
| if (!bWasSetTypeAttribute) |
| { |
| pExport->AddAttribute(sAttrValueType, XML_BOOLEAN); |
| bWasSetTypeAttribute = sal_True; |
| } |
| if (bExportValue) |
| { |
| double fTempValue = rValue; |
| if (::rtl::math::approxEqual( fTempValue, 1.0 )) |
| { |
| pExport->AddAttribute(sAttrBooleanValue, XML_TRUE); |
| } |
| else |
| { |
| if (::rtl::math::approxEqual( rValue, 0.0 )) |
| { |
| pExport->AddAttribute(sAttrBooleanValue, XML_FALSE); |
| } |
| else |
| { |
| rtl::OUString sValue( ::rtl::math::doubleToUString( |
| fTempValue, |
| rtl_math_StringFormat_Automatic, |
| rtl_math_DecimalPlaces_Max, '.', |
| sal_True)); |
| pExport->AddAttribute(sAttrBooleanValue, sValue); |
| } |
| } |
| } |
| } |
| break; |
| case util::NumberFormat::TEXT: |
| { |
| if (!bWasSetTypeAttribute) |
| { |
| pExport->AddAttribute(sAttrValueType, XML_FLOAT); |
| bWasSetTypeAttribute = sal_True; |
| if (bExportValue) |
| { |
| rtl::OUString sValue( ::rtl::math::doubleToUString( rValue, |
| rtl_math_StringFormat_Automatic, |
| rtl_math_DecimalPlaces_Max, '.', sal_True)); |
| pExport->AddAttribute(sAttrValue, sValue); |
| } |
| } |
| } |
| break; |
| } |
| } |
| |
| void XMLNumberFormatAttributesExportHelper::SetNumberFormatAttributes( |
| const sal_Int32 nNumberFormat, const double& rValue, sal_Bool bExportValue) |
| { |
| if (pExport) |
| { |
| sal_Bool bIsStandard; |
| rtl::OUString sCurrency; |
| sal_Int16 nTypeKey = GetCellType(nNumberFormat, sCurrency, bIsStandard); |
| WriteAttributes(nTypeKey, rValue, sCurrency, bExportValue); |
| } |
| else { |
| DBG_ERROR("no SvXMLExport given"); |
| } |
| } |
| |
| void XMLNumberFormatAttributesExportHelper::SetNumberFormatAttributes( |
| const rtl::OUString& rValue, const rtl::OUString& rCharacters, |
| sal_Bool bExportValue, sal_Bool bExportTypeAttribute) |
| { |
| if (pExport) |
| { |
| if (bExportTypeAttribute) |
| pExport->AddAttribute(sAttrValueType, XML_STRING); |
| if (bExportValue && rValue.getLength() && (rValue != rCharacters)) |
| pExport->AddAttribute(sAttrStringValue, rValue); |
| } |
| else { |
| DBG_ERROR("no SvXMLExport given"); |
| } |
| } |