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>
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 }
61struct XMLPropTokens_Impl
96struct ComparePropertyState
103class XMLPropertyStates_Impl
107 XMLPropertyStates_Impl();
109 void FillPropertyStateVector(std::vector<XMLPropertyState>& rVector);
112XMLPropertyStates_Impl::XMLPropertyStates_Impl()
116void XMLPropertyStates_Impl::AddPropertyState(
119 aPropStates.insert(rPropState);
122void XMLPropertyStates_Impl::FillPropertyStateVector(
123 std::vector<XMLPropertyState>& rVector)
125 rVector.insert( rVector.begin(), aPropStates.begin(), aPropStates.end() );
128class FilterPropertyInfo_Impl
131 std::vector<sal_uInt32> maIndexes;
135 FilterPropertyInfo_Impl( OUString aApiName,
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());
148FilterPropertyInfo_Impl::FilterPropertyInfo_Impl(
150 const sal_uInt32
nIndex ) :
151 msApiName(std::move( aApiName ))
153 maIndexes.push_back(
nIndex);
156typedef std::list<FilterPropertyInfo_Impl> FilterPropertyInfoList_Impl;
158class 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,
171 const Reference< XPropertySet >& xPropSet,
174 const uno::Sequence<OUString>* pOnlyTheseProps);
175 sal_uInt32 GetPropertyCount()
const {
return aPropInfos.size(); }
178FilterPropertiesInfo_Impl::FilterPropertiesInfo_Impl()
182void FilterPropertiesInfo_Impl::AddProperty(
183 const OUString& rApiName,
const sal_uInt32
nIndex)
185 aPropInfos.emplace_back(rApiName,
nIndex);
187 OSL_ENSURE( !mxApiNames,
"performance warning: API names already retrieved" );
191const uno::Sequence<OUString>& FilterPropertiesInfo_Impl::GetApiNames()
204 if ( aPropInfos.size() > 1 )
206 FilterPropertyInfoList_Impl::iterator aOld = aPropInfos.begin();
207 FilterPropertyInfoList_Impl::iterator aEnd = aPropInfos.end();
208 FilterPropertyInfoList_Impl::iterator aCurrent = aOld;
211 while ( aCurrent != aEnd )
214 if ( aOld->GetApiName() == aCurrent->GetApiName() )
217 std::vector<sal_uInt32> aMerged;
218 std::merge(aOld->GetIndexes().begin(), aOld->GetIndexes().end(),
219 aCurrent->GetIndexes().begin(), aCurrent->GetIndexes().end(),
220 std::back_inserter(aMerged));
221 aOld->GetIndexes() = std::move(aMerged);
222 aCurrent->GetIndexes().clear();
224 aCurrent = aPropInfos.erase( aCurrent );
236 mxApiNames.emplace( aPropInfos.size() );
237 OUString *pNames = mxApiNames->getArray();
239 for (
auto const& propInfo : aPropInfos)
241 *pNames = propInfo.GetApiName();
249void FilterPropertiesInfo_Impl::FillPropertyStateArray(
250 vector< XMLPropertyState >& rPropStates,
251 const Reference< XPropertySet >& rPropSet,
254 const uno::Sequence<OUString>* pOnlyTheseProps )
257 XMLPropertyStates_Impl aPropStates;
259 const uno::Sequence<OUString>* pApiNames = pOnlyTheseProps;
261 pApiNames = &GetApiNames();
263 Reference < XTolerantMultiPropertySet > xTolPropSet( rPropSet, UNO_QUERY );
264 if (xTolPropSet.is())
268 Sequence < beans::GetDirectPropertyTolerantResult > aResults(xTolPropSet->getDirectPropertyValuesTolerant(*pApiNames));
269 sal_Int32 nResultCount(aResults.getLength());
270 if (nResultCount > 0)
272 const beans::GetDirectPropertyTolerantResult *pResults = aResults.getConstArray();
273 FilterPropertyInfoList_Impl::iterator aPropIter(aPropInfos.begin());
275 while (nResultCount > 0 && aPropIter != aPropInfos.end())
277 if (pResults->Name == aPropIter->GetApiName())
280 aNewProperty.
maValue = pResults->Value;
282 for (
auto const&
index : aPropIter->GetIndexes())
285 aPropStates.AddPropertyState( aNewProperty );
296 const Sequence < beans::GetPropertyTolerantResult > aResults(xTolPropSet->getPropertyValuesTolerant(*pApiNames));
297 OSL_ENSURE( pApiNames->getLength() == aResults.getLength(),
"wrong implemented XTolerantMultiPropertySet" );
298 FilterPropertyInfoList_Impl::iterator aPropIter(aPropInfos.begin());
300 OSL_ENSURE( aPropInfos.size() ==
static_cast<sal_uInt32
>(aResults.getLength()),
"wrong implemented XTolerantMultiPropertySet??" );
301 for(
const auto& rResult : aResults )
303 if ((rResult.Result == beans::TolerantPropertySetResultType::SUCCESS) &&
304 ((rResult.State == PropertyState_DIRECT_VALUE) || (rResult.State == PropertyState_DEFAULT_VALUE)))
307 aNewProperty.
maValue = rResult.Value;
309 for (
auto const&
index : aPropIter->GetIndexes())
312 aPropStates.AddPropertyState( aNewProperty );
321 Sequence < PropertyState > aStates;
322 const PropertyState *pStates =
nullptr;
323 Reference< XPropertyState > xPropState( rPropSet, UNO_QUERY );
324 if( xPropState.is() )
326 aStates = xPropState->getPropertyStates( *pApiNames );
327 pStates = aStates.getConstArray();
330 Reference < XMultiPropertySet > xMultiPropSet( rPropSet, UNO_QUERY );
331 if( xMultiPropSet.is() && !bDefault )
333 Sequence < Any > aValues;
337 sal_uInt32 nValueCount = 0;
339 for (
size_t i = 0;
i < aPropInfos.size(); ++
i, ++pStates)
341 if( *pStates == PropertyState_DIRECT_VALUE )
348 Sequence < OUString > aAPINames( nValueCount );
349 OUString *pAPINames = aAPINames.getArray();
351 ::std::vector< FilterPropertyInfoList_Impl::iterator > aPropIters;
352 aPropIters.reserve( nValueCount );
354 FilterPropertyInfoList_Impl::iterator aItr = aPropInfos.begin();
355 OSL_ENSURE(aItr != aPropInfos.end(),
"Invalid iterator!");
357 pStates = aStates.getConstArray();
359 while(
i < nValueCount )
361 if( *pStates == PropertyState_DIRECT_VALUE )
363 *pAPINames++ = aItr->GetApiName();
364 aPropIters.push_back( aItr );
371 aValues = xMultiPropSet->getPropertyValues( aAPINames );
374 ::std::vector< FilterPropertyInfoList_Impl::iterator >::const_iterator
375 pPropIter = aPropIters.begin();
378 for(
i = 0;
i < nValueCount; ++
i )
383 for (
auto const&
index : (*pPropIter)->GetIndexes())
386 aPropStates.AddPropertyState( aNewProperty );
396 aValues = xMultiPropSet->getPropertyValues( *pApiNames );
399 FilterPropertyInfoList_Impl::iterator aItr = aPropInfos.begin();
400 for (
size_t i = 0;
i < aPropInfos.size(); ++
i)
406 for (
auto const&
index : aItr->GetIndexes())
409 aPropStates.AddPropertyState( aNewProperty );
417 FilterPropertyInfoList_Impl::iterator aItr = aPropInfos.begin();
418 for (
size_t i = 0;
i < aPropInfos.size(); ++
i)
421 !pStates || *pStates == PropertyState_DIRECT_VALUE;
422 if( bDirectValue || bDefault )
425 bool bGotValue =
false;
427 for (
auto const&
index : aItr->GetIndexes())
430 (rPropMapper->GetEntryFlags(
index) &
438 rPropSet->getPropertyValue( aItr->GetApiName() );
442 aPropStates.AddPropertyState( aNewProperty );
444 catch( UnknownPropertyException& )
447 OSL_ENSURE(
false,
"unknown property in getPropertyValue" );
460 aPropStates.FillPropertyStateVector(rPropStates);
467 typedef std::map<css::uno::Reference<css::beans::XPropertySetInfo>, std::unique_ptr<FilterPropertiesInfo_Impl>>
CacheType;
482 mpImpl->mxPropMapper = rMapper;
493 mpImpl->mxPropMapper->AddMapperEntry( rMapper->getPropertySetMapper() );
495 rMapper->mpImpl->mxPropMapper =
mpImpl->mxPropMapper;
501 while (xNext->mpImpl->mxNextMapper.is())
502 xNext = xNext->mpImpl->mxNextMapper;
503 xNext->mpImpl->mxNextMapper = rMapper;
506 mpImpl->mxNextMapper = rMapper;
512 while (xNext->mpImpl->mxNextMapper.is())
514 xNext = xNext->mpImpl->mxNextMapper;
515 xNext->mpImpl->mxPropMapper =
mpImpl->mxPropMapper;
521 const uno::Reference<beans::XPropertySet>& rPropSet,
522 bool bEnableFoFontFamily,
523 const uno::Sequence<OUString>* pOnlyTheseProps )
const
525 return Filter_(rExport, rPropSet,
false, bEnableFoFontFamily, pOnlyTheseProps);
530 const uno::Reference<beans::XPropertySet>& rPropSet )
const
532 return Filter_(rExport, rPropSet,
true,
false,
nullptr);
537 const Reference<XPropertySet>& xPropSet,
bool bDefault,
bool bEnableFoFontFamily,
538 const uno::Sequence<OUString>* pOnlyTheseProps )
const
540 vector< XMLPropertyState > aPropStateArray;
543 Reference< XPropertySetInfo > xInfo( xPropSet->getPropertySetInfo() );
545 return aPropStateArray;
547 sal_Int32 nProps =
mpImpl->mxPropMapper->GetEntryCount();
549 FilterPropertiesInfo_Impl *pFilterInfo =
nullptr;
551 Impl::CacheType::iterator aIter =
mpImpl->maCache.find(xInfo);
552 if (aIter !=
mpImpl->maCache.end())
553 pFilterInfo = (*aIter).second.get();
555 bool bDelInfo =
false;
560 pFilterInfo =
new FilterPropertiesInfo_Impl;
561 for( sal_Int32
i=0;
i < nProps;
i++ )
565 const OUString& rAPIName =
mpImpl->mxPropMapper->GetEntryAPIName(
i );
566 const sal_Int32 nFlags =
mpImpl->mxPropMapper->GetEntryFlags(
i );
569 xInfo->hasPropertyByName( rAPIName ) ) )
572 mpImpl->mxPropMapper->GetEarliestODFVersionForExport(
i));
579 static sal_uInt16 s_OdfNs[] = {
606 static bool s_Assert(
false);
609 assert(std::is_sorted(std::begin(s_OdfNs), std::end(s_OdfNs)));
613 auto const ns(
mpImpl->mxPropMapper->GetEntryNameSpace(
i));
614 auto const iter(std::lower_bound(std::begin(s_OdfNs), std::end(s_OdfNs),
616 bool const isExtension(iter == std::end(s_OdfNs) || *iter !=
ns
623 && (nCurrentVersion < nEarliestODFVersionForExport))
624 : (nEarliestODFVersionForExport <= nCurrentVersion))
626 pFilterInfo->AddProperty(rAPIName,
i);
635 WeakReference < XPropertySetInfo > xWeakInfo( xInfo );
640 mpImpl->maCache.emplace(xInfo, std::unique_ptr<FilterPropertiesInfo_Impl>(pFilterInfo));
646 if( pFilterInfo->GetPropertyCount() )
650 pFilterInfo->FillPropertyStateArray(
651 aPropStateArray, xPropSet,
mpImpl->mxPropMapper, bDefault, pOnlyTheseProps);
653 catch( UnknownPropertyException& )
656 OSL_ENSURE(
false,
"unknown property in getPropertyStates" );
661 if( !aPropStateArray.empty() )
662 ContextFilter(bEnableFoFontFamily, aPropStateArray, xPropSet);
669 return aPropStateArray;
673 bool bEnableFoFontFamily,
674 vector< XMLPropertyState >& rProperties,
675 const Reference< XPropertySet >& rPropSet )
const
678 if (
mpImpl->mxNextMapper.is())
679 mpImpl->mxNextMapper->ContextFilter(bEnableFoFontFamily, rProperties, rPropSet);
687 const vector< XMLPropertyState >& aProperties1,
688 const vector< XMLPropertyState >& aProperties2 )
const
690 if (aProperties1.size() < aProperties2.size())
692 if (aProperties1.size() > aProperties2.size())
695 sal_uInt32
nCount = aProperties1.size();
721 if (!
mpImpl->mxPropMapper->GetPropertyHandler(
737 const vector< XMLPropertyState >& aProperties1,
738 const vector< XMLPropertyState >& aProperties2 )
const
740 if (aProperties1.size() < aProperties2.size())
742 if (aProperties1.size() > aProperties2.size())
745 sal_uInt32
nCount = aProperties1.size();
801 const ::std::vector< XMLPropertyState >& rProperties,
803 bool bUseExtensionNamespaceForGraphicProperties)
const
805 exportXML(rExport, rProperties, -1, -1, nFlags, bUseExtensionNamespaceForGraphicProperties);
811 const ::std::vector< XMLPropertyState >& rProperties,
812 sal_Int32 nPropMapStartIdx, sal_Int32 nPropMapEndIdx,
813 SvXmlExportFlags nFlags,
bool bUseExtensionNamespaceForGraphicProperties)
const
815 sal_uInt16 nPropTypeFlags = 0;
819 if( 0==
i || (nPropTypeFlags & (1 << nPropType)) != 0 )
822 if (bUseExtensionNamespaceForGraphicProperties &&
832 std::vector<sal_uInt16> aIndexArray;
839 nPropMapStartIdx, nPropMapEndIdx );
842 !aIndexArray.empty() )
862 const ::std::vector< XMLPropertyState > *pProperties,
863 sal_uInt32 nIdx )
const
865 OSL_ENSURE(
mpImpl->mxNextMapper.is(),
"special item not handled in xml export");
866 if (
mpImpl->mxNextMapper.is())
867 mpImpl->mxNextMapper->handleSpecialItem(
868 rAttrList, rProperty, rUnitConverter, rNamespaceMap, pProperties, nIdx);
877 const ::std::vector< XMLPropertyState > *pProperties,
878 sal_uInt32 nIdx )
const
880 OSL_ENSURE(
mpImpl->mxNextMapper.is(),
"element item not handled in xml export");
881 if (
mpImpl->mxNextMapper.is())
882 mpImpl->mxNextMapper->handleElementItem(rExport, rProperty, nFlags, pProperties, nIdx);
889 sal_uInt16 nPropType, sal_uInt16& rPropTypeFlags,
891 const ::std::vector< XMLPropertyState >& rProperties,
894 std::vector<sal_uInt16>* pIndexArray,
895 sal_Int32 nPropMapStartIdx, sal_Int32 nPropMapEndIdx )
const
897 const sal_uInt32
nCount = rProperties.size();
900 if( -1 == nPropMapStartIdx )
901 nPropMapStartIdx = 0;
902 if( -1 == nPropMapEndIdx )
903 nPropMapEndIdx =
mpImpl->mxPropMapper->GetEntryCount();
907 sal_Int32 nPropMapIdx = rProperties[
nIndex].mnIndex;
908 if( nPropMapIdx >= nPropMapStartIdx &&
909 nPropMapIdx < nPropMapEndIdx )
911 sal_uInt32 nEFlags =
mpImpl->mxPropMapper->GetEntryFlags(nPropMapIdx);
914 "no prop type specified");
915 rPropTypeFlags |= (1 << nEPType);
916 if( nEPType == nPropType )
925 pIndexArray->push_back(
static_cast<sal_uInt16
>(
nIndex) );
931 rNamespaceMap, &rProperties,
nIndex );
945sal_Int8 CheckExtendedNamespace(std::u16string_view sXMLAttributeName, std::u16string_view sValue,
964 const ::std::vector< XMLPropertyState > *pProperties,
965 sal_uInt32 nIdx )
const
969 uno::Reference< container::XNameContainer > xAttrContainer;
970 if( (rProperty.
maValue >>= xAttrContainer) && xAttrContainer.is() )
972 std::unique_ptr<SvXMLNamespaceMap> pNewNamespaceMap;
975 const uno::Sequence< OUString > aAttribNames( xAttrContainer->getElementNames() );
977 OUStringBuffer sNameBuffer;
978 xml::AttributeData
aData;
979 for(
const auto& rAttribName : aAttribNames )
981 xAttrContainer->getByName( rAttribName ) >>=
aData;
982 OUString sAttribName( rAttribName );
986 const sal_Int32 nColonPos =
987 rAttribName.indexOf(
':' );
988 if( nColonPos != -1 )
989 sPrefix = rAttribName.copy( 0, nColonPos );
993 OUString sNamespace(
aData.Namespace );
998 if( USHRT_MAX == nKey || pNamespaceMap->
GetNameByKey( nKey ) != sNamespace )
1000 bool bAddNamespace =
false;
1001 if( USHRT_MAX == nKey )
1005 bAddNamespace =
true;
1017 OUString sOrigPrefix(
sPrefix );
1020 sNameBuffer.append( sOrigPrefix );
1021 sNameBuffer.append( ++
n );
1022 sPrefix = sNameBuffer.makeStringAndClear();
1025 while( nKey != USHRT_MAX );
1027 bAddNamespace =
true;
1036 sNameBuffer.append(
sPrefix +
":" + rAttribName.subView(nColonPos+1));
1037 sAttribName = sNameBuffer.makeStringAndClear();
1042 if( !pNewNamespaceMap )
1045 pNamespaceMap = pNewNamespaceMap.get();
1047 pNewNamespaceMap->
Add(
sPrefix, sNamespace );
1054 OSL_ENSURE( sOldValue.isEmpty(),
"alien attribute exists already" );
1056 if( sOldValue.isEmpty() )
1063 rNamespaceMap, pProperties, nIdx );
1073 bool bRemove =
false;
1080 if (
mpImpl->mxPropMapper->exportXML(aValue, rProperty, rUnitConverter))
1088 = CheckExtendedNamespace(
mpImpl->mxPropMapper->GetEntryXMLName(rProperty.
mnIndex),
1090 if (nExtendedStatus == -1)
1092 if (nExtendedStatus == 1)
1102 const ::std::vector< XMLPropertyState >& rProperties,
1104 const std::vector<sal_uInt16>& rIndexArray )
const
1106 bool bItemsExported =
false;
1107 for (
const sal_uInt16 nElement : rIndexArray)
1109 OSL_ENSURE( 0 != (
mpImpl->mxPropMapper->GetEntryFlags(
1111 "wrong mid flag!" );
1115 nFlags, &rProperties, nElement );
1116 bItemsExported =
true;
1119 if( bItemsExported )
1125 return mpImpl->mxPropMapper;
1130 mpImpl->maStyleName = rStyleName;
1135 return mpImpl->maStyleName;
1140 mpImpl->mxPropMapper->GetEntryAPINames(rNames);
const PropertyValue * pValues
const XMLTokenEnum aPropTokens[XML_PROP_TYPE_END]
const sal_uInt16 MAX_PROP_TYPES
const OUString & GetStyleName() const
std::unique_ptr< Impl > mpImpl
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
void ChainExportMapper(const rtl::Reference< SvXMLExportPropertyMapper > &rMapper)
bool Equals(const ::std::vector< XMLPropertyState > &aProperties1, const ::std::vector< XMLPropertyState > &aProperties2) const
Compare two arrays of XMLPropertyState.
void SetStyleName(const OUString &rStyleName)
virtual void handleSpecialItem(comphelper::AttributeList &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
SvXMLExportPropertyMapper(const rtl::Reference< XMLPropertySetMapper > &rMapper)
void GetEntryAPINames(o3tl::sorted_vector< OUString > &rNames) const
std::vector< XMLPropertyState > FilterDefaults(SvXMLExport const &rExport, const css::uno::Reference< css::beans::XPropertySet > &rPropSet) const
Like Filter(), except that:
virtual ~SvXMLExportPropertyMapper() override
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...
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 bDefault, bool bDisableFoFontFamily, const css::uno::Sequence< OUString > *pOnlyTheseProps) const
Filter all properties we don't want to export: Take all properties of the XPropertySet which are also...
void _exportXML(sal_uInt16 nPropType, sal_uInt16 &rPropTypeFlags, comphelper::AttributeList &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
std::vector< XMLPropertyState > Filter(SvXMLExport const &rExport, const css::uno::Reference< css::beans::XPropertySet > &rPropSet, bool bEnableFoFontFamily=false, const css::uno::Sequence< OUString > *pOnlyTheseProps=nullptr) const
Filter all properties we don't want to export: Take all properties of the XPropertySet which are also...
const rtl::Reference< XMLPropertySetMapper > & getPropertySetMapper() const
void exportElementItems(SvXMLExport &rExport, const ::std::vector< XMLPropertyState > &rProperties, SvXmlExportFlags nFlags, const std::vector< sal_uInt16 > &rIndexArray) const
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 ...
const SvXMLNamespaceMap & GetNamespaceMap() const
SvtSaveOptions::ODFSaneDefaultVersion getSaneDefaultVersion() const
returns the deterministic version for odf export
void IgnorableWhitespace()
const SvXMLUnitConverter & GetMM100UnitConverter() const
comphelper::AttributeList & GetAttrList()
OUString GetQNameByKey(sal_uInt16 nKey, const OUString &rLocalName, bool bCache=true) const
const OUString & GetNameByKey(sal_uInt16 nKey) const
sal_uInt16 GetKeyByPrefix(const OUString &rPrefix) const
sal_uInt16 Add(const OUString &rPrefix, const OUString &rName, sal_uInt16 nKey=XML_NAMESPACE_UNKNOWN)
sal_uInt16 GetKeyByName(const OUString &rName) const
const OUString & GetPrefixByKey(sal_uInt16 nKey) const
the SvXMLTypeConverter converts values of various types from their internal representation to the tex...
SvtSaveOptions::ODFSaneDefaultVersion getSaneDefaultVersion() const
ODF version, only when exporting.
virtual OUString SAL_CALL getValueByName(const OUString &aName) override
void AddAttribute(const OUString &sName, const OUString &sValue)
virtual sal_Int16 SAL_CALL getLength() override
void RemoveAttribute(const OUString &sName)
constexpr OUStringLiteral aData
bool anyLess(css::uno::Any const &lhs, css::uno::Any const &rhs)
const sal_uInt16 XML_NAMESPACE_UNKNOWN
Handling of tokens in XML:
XMLTokenEnum
The enumeration of all XML tokens.
@ XML_PAGE_CONTENT_BOTTOM
bool IsXMLToken(std::u16string_view rString, enum XMLTokenEnum eToken)
compare eToken to the string
const OUString & GetXMLToken(enum XMLTokenEnum eToken)
return the OUString representation for eToken
UNOTOOLS_DLLPUBLIC SvtSaveOptions::ODFDefaultVersion GetODFDefaultVersion()
OReadStatusBarDocumentHandler::StatusBar_XML_Namespace nNamespace
rtl::Reference< XMLPropertySetMapper > mxPropMapper
std::map< css::uno::Reference< css::beans::XPropertySetInfo >, std::unique_ptr< FilterPropertiesInfo_Impl > > CacheType
rtl::Reference< SvXMLExportPropertyMapper > mxNextMapper
Smart struct to transport an Any with an index to the appropriate property-name.
bool operator<(const tSchXMLIndexWithPart &rFirst, const tSchXMLIndexWithPart &rSecond)
constexpr sal_uInt16 XML_NAMESPACE_DRAW
constexpr sal_uInt16 XML_NAMESPACE_XHTML
constexpr sal_uInt16 XML_NAMESPACE_META
constexpr sal_uInt16 XML_NAMESPACE_SMIL
constexpr sal_uInt16 XML_NAMESPACE_DC
constexpr sal_uInt16 XML_NAMESPACE_DB
constexpr sal_uInt16 XML_NAMESPACE_XLINK
constexpr sal_uInt16 XML_NAMESPACE_ANIMATION
constexpr sal_uInt16 XML_NAMESPACE_SVG
constexpr sal_uInt16 XML_NAMESPACE_TEXT
constexpr sal_uInt16 XML_NAMESPACE_FORM
constexpr sal_uInt16 XML_NAMESPACE_XFORMS
constexpr sal_uInt16 XML_NAMESPACE_DR3D
constexpr sal_uInt16 XML_NAMESPACE_CHART
constexpr sal_uInt16 XML_NAMESPACE_XML
constexpr sal_uInt16 XML_NAMESPACE_TABLE
constexpr sal_uInt16 XML_NAMESPACE_LO_EXT
constexpr sal_uInt16 XML_NAMESPACE_OFFICE
constexpr sal_uInt16 XML_NAMESPACE_PRESENTATION
constexpr sal_uInt16 XML_NAMESPACE_CONFIG
constexpr sal_uInt16 XML_NAMESPACE_MATH
constexpr sal_uInt16 XML_NAMESPACE_GRDDL
constexpr sal_uInt16 XML_NAMESPACE_STYLE
constexpr sal_uInt16 XML_NAMESPACE_SCRIPT
constexpr sal_uInt16 XML_NAMESPACE_FO
constexpr sal_uInt16 XML_NAMESPACE_NUMBER
#define XML_TYPE_PROP_SHIFT
#define MID_FLAG_ELEMENT_ITEM_EXPORT
#define MID_FLAG_DEFAULT_ITEM_EXPORT
#define MID_FLAG_SPECIAL_ITEM_EXPORT
#define XML_TYPE_BUILDIN_CMP
#define MID_FLAG_NO_PROPERTY_EXPORT
#define MID_FLAG_MUST_EXIST
#define XML_TYPE_PROP_END
#define MID_FLAG_MERGE_ATTRIBUTE
#define XML_TYPE_PROP_START