28 #include <boost/functional/hash.hpp>
30 #include <osl/diagnose.h>
33 #include <unordered_map>
40 #define FORM_SINGLE_PROPERTY( id, att ) \
41 PropertyDescription( PROPERTY_##id, XML_NAMESPACE_FORM, att, &FormHandlerFactory::getFormPropertyHandler, PID_##id )
46 const PropertyDescription* lcl_getPropertyMetaData()
48 static const PropertyDescription s_propertyMetaData[] =
61 return s_propertyMetaData;
74 typedef std::unordered_map< OUString, const PropertyDescription* > DescriptionsByName;
76 const DescriptionsByName& lcl_getPropertyDescriptions()
79 static DescriptionsByName s_propertyDescriptionsByName;
80 if ( s_propertyDescriptionsByName.empty() )
82 const PropertyDescription* desc = lcl_getPropertyMetaData();
83 while ( !desc->propertyName.isEmpty() )
85 s_propertyDescriptionsByName[ desc->propertyName ] = desc;
89 return s_propertyDescriptionsByName;
92 typedef std::unordered_map< OUString, XMLTokenEnum > ReverseTokenLookup;
96 size_t operator()(
const AttributeDescription& i_attribute )
const
99 boost::hash_combine(seed, i_attribute.attributeToken);
100 boost::hash_combine(seed, i_attribute.namespacePrefix);
105 typedef std::unordered_map< AttributeDescription, PropertyGroups, AttributeHash > AttributesWithoutGroup;
107 const AttributesWithoutGroup& lcl_getAttributesWithoutGroups()
110 static AttributesWithoutGroup s_attributesWithoutGroup;
111 if ( s_attributesWithoutGroup.empty() )
113 const PropertyDescription* desc = lcl_getPropertyMetaData();
114 while ( !desc->propertyName.isEmpty() )
117 singleElementList.push_back( desc );
119 s_attributesWithoutGroup[ desc->attribute ].push_back( singleElementList );
123 return s_attributesWithoutGroup;
129 const DescriptionsByName& rAllDescriptions( lcl_getPropertyDescriptions() );
130 DescriptionsByName::const_iterator
pos = rAllDescriptions.find( i_propertyName );
131 if ( pos != rAllDescriptions.end() )
140 const AttributesWithoutGroup& attributesWithoutGroups( lcl_getAttributesWithoutGroups() );
141 const AttributesWithoutGroup::const_iterator
pos = attributesWithoutGroups.find( i_attribute );
142 if ( pos != attributesWithoutGroups.end() )
143 o_propertyGroups = pos->second;
::std::vector< PropertyDescriptionList > PropertyGroups
::std::vector< const PropertyDescription * > PropertyDescriptionList
sal_uInt16 namespacePrefix
XMLTokenEnum
The enumeration of all XML tokens.
::xmloff::token::XMLTokenEnum attributeToken
constexpr size_t NMSP_SHIFT
Handling of tokens in XML:
constexpr sal_Int32 TOKEN_MASK
#define DBG_TESTSOLARMUTEX()