22 #include <string_view>
23 #include <com/sun/star/container/XNameContainer.hpp>
24 #include <com/sun/star/xml/AttributeData.hpp>
25 #include <com/sun/star/beans/XPropertySet.hpp>
26 #include <com/sun/star/beans/XPropertyState.hpp>
27 #include <com/sun/star/beans/XMultiPropertySet.hpp>
28 #include <com/sun/star/beans/XTolerantMultiPropertySet.hpp>
29 #include <com/sun/star/beans/TolerantPropertySetResultType.hpp>
30 #include <rtl/ustrbuf.hxx>
33 #include <osl/diagnose.h>
49 using namespace ::
std;
56 #define GET_PROP_TYPE( f ) static_cast<sal_uInt16>((f & XML_TYPE_PROP_MASK) >> XML_TYPE_PROP_SHIFT)
57 #define ENTRY(t) { GET_PROP_TYPE(XML_TYPE_PROP_##t), XML_##t##_PROPERTIES }
61 struct XMLPropTokens_Impl
96 struct ComparePropertyState
103 class XMLPropertyStates_Impl
107 XMLPropertyStates_Impl();
109 void FillPropertyStateVector(std::vector<XMLPropertyState>& rVector);
112 XMLPropertyStates_Impl::XMLPropertyStates_Impl()
116 void XMLPropertyStates_Impl::AddPropertyState(
119 aPropStates.insert(rPropState);
122 void XMLPropertyStates_Impl::FillPropertyStateVector(
123 std::vector<XMLPropertyState>& rVector)
125 rVector.insert( rVector.begin(), aPropStates.begin(), aPropStates.end() );
128 class FilterPropertyInfo_Impl
131 std::vector<sal_uInt32> maIndexes;
135 FilterPropertyInfo_Impl(
const OUString& rApiName,
138 const OUString& GetApiName()
const {
return msApiName; }
139 std::vector<sal_uInt32>& GetIndexes() {
return maIndexes; }
142 bool operator< (
const FilterPropertyInfo_Impl& rArg )
const
144 return (GetApiName() < rArg.GetApiName());
148 FilterPropertyInfo_Impl::FilterPropertyInfo_Impl(
149 const OUString& rApiName,
150 const sal_uInt32
nIndex ) :
151 msApiName( rApiName )
153 maIndexes.push_back(nIndex);
156 typedef std::list<FilterPropertyInfo_Impl> FilterPropertyInfoList_Impl;
158 class FilterPropertiesInfo_Impl
160 FilterPropertyInfoList_Impl aPropInfos;
162 std::optional<Sequence<OUString>> mxApiNames;
165 FilterPropertiesInfo_Impl();
167 void AddProperty(
const OUString& rApiName,
const sal_uInt32 nIndex);
168 const uno::Sequence<OUString>& GetApiNames();
169 void FillPropertyStateArray(
170 vector< XMLPropertyState >& rPropStates,
173 const bool bDefault);
174 sal_uInt32 GetPropertyCount()
const {
return aPropInfos.size(); }
177 FilterPropertiesInfo_Impl::FilterPropertiesInfo_Impl()
181 void FilterPropertiesInfo_Impl::AddProperty(
182 const OUString& rApiName,
const sal_uInt32 nIndex)
184 aPropInfos.emplace_back(rApiName, nIndex);
186 OSL_ENSURE( !mxApiNames,
"performance warning: API names already retrieved" );
190 const uno::Sequence<OUString>& FilterPropertiesInfo_Impl::GetApiNames()
203 if ( aPropInfos.size() > 1 )
205 FilterPropertyInfoList_Impl::iterator aOld = aPropInfos.begin();
206 FilterPropertyInfoList_Impl::iterator aEnd = aPropInfos.end();
207 FilterPropertyInfoList_Impl::iterator aCurrent = aOld;
210 while ( aCurrent != aEnd )
213 if ( aOld->GetApiName() == aCurrent->GetApiName() )
216 std::vector<sal_uInt32> aMerged;
217 std::merge(aOld->GetIndexes().begin(), aOld->GetIndexes().end(),
218 aCurrent->GetIndexes().begin(), aCurrent->GetIndexes().end(),
219 std::back_inserter(aMerged));
220 aOld->GetIndexes() = std::move(aMerged);
221 aCurrent->GetIndexes().clear();
223 aCurrent = aPropInfos.erase( aCurrent );
235 mxApiNames.emplace( aPropInfos.size() );
236 OUString *pNames = mxApiNames->getArray();
238 for (
auto const& propInfo : aPropInfos)
240 *pNames = propInfo.GetApiName();
248 void FilterPropertiesInfo_Impl::FillPropertyStateArray(
249 vector< XMLPropertyState >& rPropStates,
252 const bool bDefault )
254 XMLPropertyStates_Impl aPropStates;
256 const uno::Sequence<OUString>& rApiNames = GetApiNames();
258 Reference < XTolerantMultiPropertySet > xTolPropSet( rPropSet, UNO_QUERY );
259 if (xTolPropSet.is())
263 Sequence < beans::GetDirectPropertyTolerantResult > aResults(xTolPropSet->getDirectPropertyValuesTolerant(rApiNames));
264 sal_Int32 nResultCount(aResults.getLength());
265 if (nResultCount > 0)
267 const beans::GetDirectPropertyTolerantResult *pResults = aResults.getConstArray();
268 FilterPropertyInfoList_Impl::iterator aPropIter(aPropInfos.begin());
270 while (nResultCount > 0 && aPropIter != aPropInfos.end())
272 if (pResults->Name == aPropIter->GetApiName())
274 aNewProperty.mnIndex = -1;
275 aNewProperty.maValue = pResults->Value;
277 for (
auto const&
index : aPropIter->GetIndexes())
279 aNewProperty.mnIndex =
index;
280 aPropStates.AddPropertyState( aNewProperty );
291 const Sequence < beans::GetPropertyTolerantResult > aResults(xTolPropSet->getPropertyValuesTolerant(rApiNames));
292 OSL_ENSURE( rApiNames.getLength() == aResults.getLength(),
"wrong implemented XTolerantMultiPropertySet" );
293 FilterPropertyInfoList_Impl::iterator aPropIter(aPropInfos.begin());
295 OSL_ENSURE( aPropInfos.size() ==
static_cast<sal_uInt32
>(aResults.getLength()),
"wrong implemented XTolerantMultiPropertySet??" );
296 for(
const auto& rResult : aResults )
298 if ((rResult.Result == beans::TolerantPropertySetResultType::SUCCESS) &&
299 ((rResult.State == PropertyState_DIRECT_VALUE) || (rResult.State == PropertyState_DEFAULT_VALUE)))
301 aNewProperty.mnIndex = -1;
302 aNewProperty.maValue = rResult.Value;
304 for (
auto const&
index : aPropIter->GetIndexes())
306 aNewProperty.mnIndex =
index;
307 aPropStates.AddPropertyState( aNewProperty );
316 Sequence < PropertyState > aStates;
317 const PropertyState *pStates =
nullptr;
318 Reference< XPropertyState > xPropState( rPropSet, UNO_QUERY );
319 if( xPropState.is() )
321 aStates = xPropState->getPropertyStates( rApiNames );
322 pStates = aStates.getConstArray();
325 Reference < XMultiPropertySet > xMultiPropSet( rPropSet, UNO_QUERY );
326 if( xMultiPropSet.is() && !bDefault )
328 Sequence < Any > aValues;
332 sal_uInt32 nValueCount = 0;
334 for (
size_t i = 0;
i < aPropInfos.size(); ++
i, ++pStates)
336 if( *pStates == PropertyState_DIRECT_VALUE )
344 OUString *pAPINames = aAPINames.getArray();
346 ::std::vector< FilterPropertyInfoList_Impl::iterator > aPropIters;
347 aPropIters.reserve( nValueCount );
349 FilterPropertyInfoList_Impl::iterator aItr = aPropInfos.begin();
350 OSL_ENSURE(aItr != aPropInfos.end(),
"Invalid iterator!");
352 pStates = aStates.getConstArray();
354 while( i < nValueCount )
356 if( *pStates == PropertyState_DIRECT_VALUE )
358 *pAPINames++ = aItr->GetApiName();
359 aPropIters.push_back( aItr );
366 aValues = xMultiPropSet->getPropertyValues( aAPINames );
369 ::std::vector< FilterPropertyInfoList_Impl::iterator >::const_iterator
370 pPropIter = aPropIters.begin();
373 for( i = 0; i < nValueCount; ++i )
376 aNewProperty.
maValue = *pValues;
378 for (
auto const&
index : (*pPropIter)->GetIndexes())
381 aPropStates.AddPropertyState( aNewProperty );
391 aValues = xMultiPropSet->getPropertyValues( rApiNames );
394 FilterPropertyInfoList_Impl::iterator aItr = aPropInfos.begin();
395 for (
size_t i = 0;
i < aPropInfos.size(); ++
i)
399 aNewProperty.
maValue = *pValues;
401 for (
auto const&
index : aItr->GetIndexes())
404 aPropStates.AddPropertyState( aNewProperty );
412 FilterPropertyInfoList_Impl::iterator aItr = aPropInfos.begin();
413 for (
size_t i = 0;
i < aPropInfos.size(); ++
i)
416 !pStates || *pStates == PropertyState_DIRECT_VALUE;
417 if( bDirectValue || bDefault )
420 bool bGotValue =
false;
422 for (
auto const&
index : aItr->GetIndexes())
425 (rPropMapper->GetEntryFlags(
index) &
433 rPropSet->getPropertyValue( aItr->GetApiName() );
437 aPropStates.AddPropertyState( aNewProperty );
439 catch( UnknownPropertyException& )
442 OSL_ENSURE(
false,
"unknown property in getPropertyValue" );
455 aPropStates.FillPropertyStateVector(rPropStates);
462 typedef std::map<css::uno::Reference<css::beans::XPropertySetInfo>, std::unique_ptr<FilterPropertiesInfo_Impl>>
CacheType;
477 mpImpl->mxPropMapper = rMapper;
488 mpImpl->mxPropMapper->AddMapperEntry( rMapper->getPropertySetMapper() );
490 rMapper->mpImpl->mxPropMapper =
mpImpl->mxPropMapper;
496 while (xNext->mpImpl->mxNextMapper.is())
497 xNext = xNext->mpImpl->mxNextMapper;
498 xNext->mpImpl->mxNextMapper = rMapper;
501 mpImpl->mxNextMapper = rMapper;
507 while (xNext->mpImpl->mxNextMapper.is())
509 xNext = xNext->mpImpl->mxNextMapper;
510 xNext->mpImpl->mxPropMapper =
mpImpl->mxPropMapper;
516 const uno::Reference<beans::XPropertySet>& rPropSet,
bool bEnableFoFontFamily )
const
518 return Filter_(rExport, rPropSet,
false, bEnableFoFontFamily);
523 const uno::Reference<beans::XPropertySet>& rPropSet )
const
525 return Filter_(rExport, rPropSet,
true,
false);
532 vector< XMLPropertyState > aPropStateArray;
535 Reference< XPropertySetInfo > xInfo( xPropSet->getPropertySetInfo() );
537 return aPropStateArray;
539 sal_Int32 nProps =
mpImpl->mxPropMapper->GetEntryCount();
541 FilterPropertiesInfo_Impl *pFilterInfo =
nullptr;
543 Impl::CacheType::iterator aIter =
mpImpl->maCache.find(xInfo);
544 if (aIter !=
mpImpl->maCache.end())
545 pFilterInfo = (*aIter).second.get();
547 bool bDelInfo =
false;
552 pFilterInfo =
new FilterPropertiesInfo_Impl;
553 for( sal_Int32
i=0;
i < nProps;
i++ )
557 const OUString& rAPIName =
mpImpl->mxPropMapper->GetEntryAPIName(
i );
558 const sal_Int32 nFlags =
mpImpl->mxPropMapper->GetEntryFlags(
i );
561 xInfo->hasPropertyByName( rAPIName ) ) )
564 mpImpl->mxPropMapper->GetEarliestODFVersionForExport(
i));
571 static sal_uInt16 s_OdfNs[] = {
598 static bool s_Assert(
false);
601 assert(std::is_sorted(std::begin(s_OdfNs), std::end(s_OdfNs)));
605 auto const ns(
mpImpl->mxPropMapper->GetEntryNameSpace(
i));
606 auto const iter(std::lower_bound(std::begin(s_OdfNs), std::end(s_OdfNs),
608 bool const isExtension(iter == std::end(s_OdfNs) || *iter !=
ns
613 ? ((nCurrentVersion & SvtSaveOptions::ODFSVER_EXTENDED)
615 && (nCurrentVersion < nEarliestODFVersionForExport))
616 : (nEarliestODFVersionForExport <= nCurrentVersion))
618 pFilterInfo->AddProperty(rAPIName,
i);
627 WeakReference < XPropertySetInfo > xWeakInfo( xInfo );
632 mpImpl->maCache.emplace(xInfo, std::unique_ptr<FilterPropertiesInfo_Impl>(pFilterInfo));
638 if( pFilterInfo->GetPropertyCount() )
642 pFilterInfo->FillPropertyStateArray(
643 aPropStateArray, xPropSet,
mpImpl->mxPropMapper, bDefault);
645 catch( UnknownPropertyException& )
648 OSL_ENSURE(
false,
"unknown property in getPropertyStates" );
653 if( !aPropStateArray.empty() )
654 ContextFilter(bEnableFoFontFamily, aPropStateArray, xPropSet);
661 return aPropStateArray;
665 bool bEnableFoFontFamily,
666 vector< XMLPropertyState >& rProperties,
670 if (
mpImpl->mxNextMapper.is())
671 mpImpl->mxNextMapper->ContextFilter(bEnableFoFontFamily, rProperties, rPropSet);
679 const vector< XMLPropertyState >& aProperties1,
680 const vector< XMLPropertyState >& aProperties2 )
const
682 if (aProperties1.size() < aProperties2.size())
684 if (aProperties1.size() > aProperties2.size())
687 sal_uInt32
nCount = aProperties1.size();
713 if (!
mpImpl->mxPropMapper->GetPropertyHandler(
729 const vector< XMLPropertyState >& aProperties1,
730 const vector< XMLPropertyState >& aProperties2 )
const
732 if (aProperties1.size() < aProperties2.size())
734 if (aProperties1.size() > aProperties2.size())
737 sal_uInt32
nCount = aProperties1.size();
793 const ::std::vector< XMLPropertyState >& rProperties,
795 bool bUseExtensionNamespaceForGraphicProperties)
const
797 exportXML(rExport, rProperties, -1, -1, nFlags, bUseExtensionNamespaceForGraphicProperties);
803 const ::std::vector< XMLPropertyState >& rProperties,
804 sal_Int32 nPropMapStartIdx, sal_Int32 nPropMapEndIdx,
805 SvXmlExportFlags nFlags,
bool bUseExtensionNamespaceForGraphicProperties)
const
807 sal_uInt16 nPropTypeFlags = 0;
811 if( 0==
i || (nPropTypeFlags & (1 << nPropType)) != 0 )
814 if (bUseExtensionNamespaceForGraphicProperties &&
824 std::vector<sal_uInt16> aIndexArray;
831 nPropMapStartIdx, nPropMapEndIdx );
834 !aIndexArray.empty() )
854 const ::std::vector< XMLPropertyState > *pProperties,
855 sal_uInt32 nIdx )
const
857 OSL_ENSURE(
mpImpl->mxNextMapper.is(),
"special item not handled in xml export");
858 if (
mpImpl->mxNextMapper.is())
859 mpImpl->mxNextMapper->handleSpecialItem(
860 rAttrList, rProperty, rUnitConverter, rNamespaceMap, pProperties, nIdx);
869 const ::std::vector< XMLPropertyState > *pProperties,
870 sal_uInt32 nIdx )
const
872 OSL_ENSURE(
mpImpl->mxNextMapper.is(),
"element item not handled in xml export");
873 if (
mpImpl->mxNextMapper.is())
874 mpImpl->mxNextMapper->handleElementItem(rExport, rProperty, nFlags, pProperties, nIdx);
881 sal_uInt16 nPropType, sal_uInt16& rPropTypeFlags,
883 const ::std::vector< XMLPropertyState >& rProperties,
886 std::vector<sal_uInt16>* pIndexArray,
887 sal_Int32 nPropMapStartIdx, sal_Int32 nPropMapEndIdx )
const
889 const sal_uInt32
nCount = rProperties.size();
892 if( -1 == nPropMapStartIdx )
893 nPropMapStartIdx = 0;
894 if( -1 == nPropMapEndIdx )
895 nPropMapEndIdx =
mpImpl->mxPropMapper->GetEntryCount();
897 while( nIndex < nCount )
899 sal_Int32 nPropMapIdx = rProperties[nIndex].mnIndex;
900 if( nPropMapIdx >= nPropMapStartIdx &&
901 nPropMapIdx < nPropMapEndIdx )
903 sal_uInt32 nEFlags =
mpImpl->mxPropMapper->GetEntryFlags(nPropMapIdx);
906 "no prop type specified");
907 rPropTypeFlags |= (1 << nEPType);
908 if( nEPType == nPropType )
917 pIndexArray->push_back( static_cast<sal_uInt16>(nIndex) );
922 _exportXML( rAttrList, rProperties[nIndex], rUnitConverter,
923 rNamespaceMap, &rProperties, nIndex );
937 const ::std::vector< XMLPropertyState > *pProperties,
938 sal_uInt32 nIdx )
const
942 uno::Reference< container::XNameContainer > xAttrContainer;
943 if( (rProperty.
maValue >>= xAttrContainer) && xAttrContainer.is() )
945 std::unique_ptr<SvXMLNamespaceMap> pNewNamespaceMap;
948 const uno::Sequence< OUString > aAttribNames( xAttrContainer->getElementNames() );
950 OUStringBuffer sNameBuffer;
951 xml::AttributeData
aData;
952 for(
const auto& rAttribName : aAttribNames )
954 xAttrContainer->getByName( rAttribName ) >>= aData;
955 OUString sAttribName( rAttribName );
959 const sal_Int32 nColonPos =
960 rAttribName.indexOf(
':' );
961 if( nColonPos != -1 )
962 sPrefix = rAttribName.copy( 0, nColonPos );
964 if( !sPrefix.isEmpty() )
966 OUString sNamespace( aData.Namespace );
971 if( USHRT_MAX == nKey || pNamespaceMap->
GetNameByKey( nKey ) != sNamespace )
973 bool bAddNamespace =
false;
974 if( USHRT_MAX == nKey )
978 bAddNamespace =
true;
990 OUString sOrigPrefix( sPrefix );
993 sNameBuffer.append( sOrigPrefix );
994 sNameBuffer.append( ++n );
995 sPrefix = sNameBuffer.makeStringAndClear();
998 while( nKey != USHRT_MAX );
1000 bAddNamespace =
true;
1009 sNameBuffer.append(sPrefix +
":" + rAttribName.subView(nColonPos+1));
1010 sAttribName = sNameBuffer.makeStringAndClear();
1015 if( !pNewNamespaceMap )
1018 pNamespaceMap = pNewNamespaceMap.get();
1020 pNewNamespaceMap->
Add( sPrefix, sNamespace );
1027 OSL_ENSURE( sOldValue.isEmpty(),
"alien attribute exists already" );
1028 OSL_ENSURE(aData.Type ==
GetXMLToken(
XML_CDATA),
"different type to our default type which should be written out");
1029 if( sOldValue.isEmpty() )
1036 rNamespaceMap, pProperties, nIdx );
1046 bool bRemove =
false;
1053 if (
mpImpl->mxPropMapper->exportXML(aValue, rProperty, rUnitConverter))
1092 const ::std::vector< XMLPropertyState >& rProperties,
1094 const std::vector<sal_uInt16>& rIndexArray )
const
1096 bool bItemsExported =
false;
1097 for (
const sal_uInt16 nElement : rIndexArray)
1099 OSL_ENSURE( 0 != (
mpImpl->mxPropMapper->GetEntryFlags(
1101 "wrong mid flag!" );
1105 nFlags, &rProperties, nElement );
1106 bItemsExported =
true;
1109 if( bItemsExported )
1115 return mpImpl->mxPropMapper;
1120 mpImpl->maStyleName = rStyleName;
1125 return mpImpl->maStyleName;
void exportElementItems(SvXMLExport &rExport, const ::std::vector< XMLPropertyState > &rProperties, SvXmlExportFlags nFlags, const std::vector< sal_uInt16 > &rIndexArray) const
constexpr sal_uInt16 XML_NAMESPACE_MATH
constexpr sal_uInt16 XML_NAMESPACE_ANIMATION
sal_uInt16 GetKeyByPrefix(const OUString &rPrefix) const
#define MID_FLAG_ELEMENT_ITEM_EXPORT
constexpr sal_uInt16 XML_NAMESPACE_OFFICE
virtual void handleElementItem(SvXMLExport &rExport, const XMLPropertyState &rProperty, SvXmlExportFlags nFlags, const ::std::vector< XMLPropertyState > *pProperties, sal_uInt32 nIdx) const
this method is called for every item that has the MID_FLAG_ELEMENT_EXPORT flag set ...
bool operator<(const tSchXMLIndexWithPart &rFirst, const tSchXMLIndexWithPart &rSecond)
bool LessPartial(const ::std::vector< XMLPropertyState > &aProperties1, const ::std::vector< XMLPropertyState > &aProperties2) const
Provides a partial ordering over two arrays of XMLPropertyState, Partial because implementing a full ...
constexpr sal_uInt16 XML_NAMESPACE_XFORMS
constexpr sal_uInt16 XML_NAMESPACE_CHART
constexpr sal_uInt16 XML_NAMESPACE_DR3D
const OUString & GetStyleName() const
the SvXMLTypeConverter converts values of various types from their internal representation to the tex...
constexpr sal_uInt16 XML_NAMESPACE_SCRIPT
virtual OUString SAL_CALL getValueByName(const OUString &aName) override
const SvXMLUnitConverter & GetMM100UnitConverter() const
void exportXML(SvXMLExport &rExport, const ::std::vector< XMLPropertyState > &rProperties, SvXmlExportFlags nFlags, bool bUseExtensionNamespaceForGraphicProperties=false) const
fills the given attribute list with the items in the given set void SvXMLExportPropertyMapper::export...
constexpr sal_uInt16 XML_NAMESPACE_XLINK
#define XML_TYPE_PROP_END
constexpr sal_uInt16 XML_NAMESPACE_LO_EXT
bool IsXMLToken(std::u16string_view rString, enum XMLTokenEnum eToken)
compare eToken to the string
virtual void handleSpecialItem(SvXMLAttributeList &rAttrList, const XMLPropertyState &rProperty, const SvXMLUnitConverter &rUnitConverter, const SvXMLNamespaceMap &rNamespaceMap, const ::std::vector< XMLPropertyState > *pProperties, sal_uInt32 nIdx) const
this method is called for every item that has the MID_FLAG_SPECIAL_ITEM_EXPORT flag set ...
constexpr sal_uInt16 XML_NAMESPACE_DB
constexpr sal_uInt16 XML_NAMESPACE_NUMBER
const sal_uInt16 XML_NAMESPACE_UNKNOWN
#define MID_FLAG_MERGE_ATTRIBUTE
SvXMLAttributeList & GetAttrList()
bool anyLess(css::uno::Any const &lhs, css::uno::Any const &rhs)
SvXMLExportPropertyMapper(const rtl::Reference< XMLPropertySetMapper > &rMapper)
virtual void ContextFilter(bool bEnableFoFontFamily,::std::vector< XMLPropertyState > &rProperties, const css::uno::Reference< css::beans::XPropertySet > &rPropSet) const
Application-specific filter.
std::vector< XMLPropertyState > Filter(SvXMLExport const &rExport, const css::uno::Reference< css::beans::XPropertySet > &rPropSet, bool bEnableFoFontFamily=false) const
Filter all properties we don't want to export: Take all properties of the XPropertySet which are also...
constexpr sal_uInt16 XML_NAMESPACE_FORM
virtual ~SvXMLExportPropertyMapper() override
const XMLTokenEnum aPropTokens[XML_PROP_TYPE_END]
constexpr sal_uInt16 XML_NAMESPACE_DRAW
constexpr OUStringLiteral aData
SvtSaveOptions::ODFDefaultVersion GetODFDefaultVersion()
constexpr sal_uInt16 XML_NAMESPACE_CONFIG
rtl::Reference< SvXMLExportPropertyMapper > mxNextMapper
std::vector< XMLPropertyState > Filter_(SvXMLExport const &rExport, const css::uno::Reference< css::beans::XPropertySet > &rPropSet, bool bDefault, bool bDisableFoFontFamily) const
Filter all properties we don't want to export: Take all properties of the XPropertySet which are also...
constexpr sal_uInt16 XML_NAMESPACE_XML
SvtSaveOptions::ODFSaneDefaultVersion getSaneDefaultVersion() const
returns the deterministic version for odf export
rtl::Reference< XMLPropertySetMapper > mxPropMapper
bool Equals(const ::std::vector< XMLPropertyState > &aProperties1, const ::std::vector< XMLPropertyState > &aProperties2) const
Compare two arrays of XMLPropertyState.
#define XML_TYPE_PROP_SHIFT
constexpr sal_uInt16 XML_NAMESPACE_SVG
void RemoveAttribute(const OUString &sName)
constexpr sal_uInt16 XML_NAMESPACE_FO
#define MID_FLAG_SPECIAL_ITEM_EXPORT
constexpr sal_uInt16 XML_NAMESPACE_TEXT
void SetStyleName(const OUString &rStyleName)
virtual sal_Int16 SAL_CALL getLength() override
std::unique_ptr< Impl > mpImpl
std::map< css::uno::Reference< css::beans::XPropertySetInfo >, std::unique_ptr< FilterPropertiesInfo_Impl > > CacheType
#define MID_FLAG_NO_PROPERTY_EXPORT
constexpr sal_uInt16 XML_NAMESPACE_GRDDL
constexpr sal_uInt16 XML_NAMESPACE_XHTML
const sal_uInt16 MAX_PROP_TYPES
#define MID_FLAG_DEFAULT_ITEM_EXPORT
OUString GetQNameByKey(sal_uInt16 nKey, const OUString &rLocalName, bool bCache=true) const
constexpr sal_uInt16 XML_NAMESPACE_DC
void ChainExportMapper(const rtl::Reference< SvXMLExportPropertyMapper > &rMapper)
const SvXMLNamespaceMap & GetNamespaceMap() const
const OUString & GetNameByKey(sal_uInt16 nKey) const
constexpr sal_uInt16 XML_NAMESPACE_PRESENTATION
void IgnorableWhitespace()
const PropertyValue * pValues
#define XML_TYPE_BUILDIN_CMP
constexpr sal_uInt16 XML_NAMESPACE_TABLE
const OUString & GetXMLToken(enum XMLTokenEnum eToken)
return the OUString representation for eToken
constexpr sal_uInt16 XML_NAMESPACE_SMIL
Handling of tokens in XML:
OReadImagesDocumentHandler::Image_XML_Namespace nNamespace
Smart struct to transport an Any with an index to the appropriate property-name.
sal_uInt16 Add(const OUString &rPrefix, const OUString &rName, sal_uInt16 nKey=XML_NAMESPACE_UNKNOWN)
XMLTokenEnum
The enumeration of all XML tokens.
#define XML_TYPE_PROP_START
sal_uInt16 GetKeyByName(const OUString &rName) const
void AddAttribute(const OUString &sName, const OUString &sValue)
std::vector< XMLPropertyState > FilterDefaults(SvXMLExport const &rExport, const css::uno::Reference< css::beans::XPropertySet > &rPropSet) const
Like Filter(), except that:
constexpr sal_uInt16 XML_NAMESPACE_META
#define MID_FLAG_MUST_EXIST
const OUString & GetPrefixByKey(sal_uInt16 nKey) const
void _exportXML(sal_uInt16 nPropType, sal_uInt16 &rPropTypeFlags, SvXMLAttributeList &rAttrList, const ::std::vector< XMLPropertyState > &rProperties, const SvXMLUnitConverter &rUnitConverter, const SvXMLNamespaceMap &rNamespaceMap, std::vector< sal_uInt16 > *pIndexArray, sal_Int32 nPropMapStartIdx, sal_Int32 nPropMapEndIdx) const
fills the given attribute list with the items in the given set
constexpr sal_uInt16 XML_NAMESPACE_STYLE
const rtl::Reference< XMLPropertySetMapper > & getPropertySetMapper() const