summaryrefslogtreecommitdiffstats
path: root/xmloff/source/core/SvXMLAttrCollection.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'xmloff/source/core/SvXMLAttrCollection.cxx')
-rw-r--r--xmloff/source/core/SvXMLAttrCollection.cxx180
1 files changed, 180 insertions, 0 deletions
diff --git a/xmloff/source/core/SvXMLAttrCollection.cxx b/xmloff/source/core/SvXMLAttrCollection.cxx
new file mode 100644
index 000000000..466008b9f
--- /dev/null
+++ b/xmloff/source/core/SvXMLAttrCollection.cxx
@@ -0,0 +1,180 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "SvXMLAttrCollection.hxx"
+#include <limits.h>
+#include <osl/diagnose.h>
+
+bool SvXMLAttrCollection::operator ==( const SvXMLAttrCollection& rCmp ) const
+{
+ return (rCmp.aNamespaceMap == aNamespaceMap) &&
+ (rCmp.aAttrs == aAttrs);
+}
+
+bool SvXMLAttrCollection::AddAttr( const OUString& rLName,
+ const OUString& rValue )
+{
+ assert(!rLName.isEmpty());
+ aAttrs.emplace_back(rLName, rValue );
+ return true;
+}
+
+bool SvXMLAttrCollection::AddAttr( const OUString& rPrefix,
+ const OUString& rNamespace,
+ const OUString& rLName,
+ const OUString& rValue )
+{
+ assert(!rPrefix.isEmpty());
+ assert(!rNamespace.isEmpty());
+ assert(!rLName.isEmpty());
+ sal_uInt16 nPos = aNamespaceMap.Add( rPrefix, rNamespace );
+ aAttrs.emplace_back(nPos, rLName, rValue );
+ return true;
+}
+
+bool SvXMLAttrCollection::AddAttr( const OUString& rPrefix,
+ const OUString& rLName,
+ const OUString& rValue )
+{
+ assert(!rPrefix.isEmpty());
+ assert(!rLName.isEmpty());
+ sal_uInt16 nPos = aNamespaceMap.GetIndexByPrefix( rPrefix );
+ if( USHRT_MAX == nPos )
+ return false;
+ aAttrs.emplace_back(nPos, rLName, rValue );
+ return true;
+}
+
+bool SvXMLAttrCollection::SetAt( size_t i,
+ const OUString& rLName,
+ const OUString& rValue )
+{
+ assert(!rLName.isEmpty());
+ if( i >= GetAttrCount() )
+ return false;
+ aAttrs[i] = SvXMLAttr(rLName, rValue);
+ return true;
+}
+
+bool SvXMLAttrCollection::SetAt( size_t i,
+ const OUString& rPrefix,
+ const OUString& rNamespace,
+ const OUString& rLName,
+ const OUString& rValue )
+{
+ assert(!rPrefix.isEmpty());
+ assert(!rNamespace.isEmpty());
+ assert(!rLName.isEmpty());
+ if( i >= GetAttrCount() )
+ return false;
+
+ sal_uInt16 nPos = aNamespaceMap.Add( rPrefix, rNamespace );
+ if( USHRT_MAX == nPos )
+ return false;
+
+ aAttrs[i] = SvXMLAttr(nPos, rLName, rValue);
+ return true;
+}
+
+bool SvXMLAttrCollection::SetAt( size_t i,
+ const OUString& rPrefix,
+ const OUString& rLName,
+ const OUString& rValue )
+{
+ assert(!rPrefix.isEmpty());
+ assert(!rLName.isEmpty());
+ if( i >= GetAttrCount() )
+ return false;
+
+ sal_uInt16 nPos = aNamespaceMap.GetIndexByPrefix( rPrefix );
+ if( USHRT_MAX == nPos )
+ return false;
+
+ aAttrs[i] = SvXMLAttr(nPos, rLName, rValue);
+ return true;
+}
+
+void SvXMLAttrCollection::Remove( size_t i )
+{
+ if( i < GetAttrCount() )
+ {
+ aAttrs.erase( aAttrs.begin() + i );
+ }
+ else
+ {
+ OSL_FAIL( "illegal index" );
+ }
+}
+
+size_t SvXMLAttrCollection::GetAttrCount() const
+{
+ return aAttrs.size();
+}
+
+const OUString& SvXMLAttrCollection::GetAttrLName(size_t i) const
+{
+ OSL_ENSURE( i < aAttrs.size(), "SvXMLAttrContainerData::GetLName: illegal index" );
+ return aAttrs[i].getLName();
+}
+
+const OUString& SvXMLAttrCollection::GetAttrValue(size_t i) const
+{
+ OSL_ENSURE( i < aAttrs.size(), "SvXMLAttrContainerData::GetValue: illegal index" );
+ return aAttrs[i].getValue();
+}
+
+OUString SvXMLAttrCollection::GetAttrNamespace( size_t i ) const
+{
+ OUString sRet;
+ sal_uInt16 nPos = GetPrefixPos( i );
+ //Does this point to a valid namespace entry?
+ if( USHRT_MAX != nPos )
+ sRet = aNamespaceMap.GetNameByIndex( nPos );
+ return sRet;
+}
+
+OUString SvXMLAttrCollection::GetAttrPrefix( size_t i ) const
+{
+ OUString sRet;
+ sal_uInt16 nPos = GetPrefixPos( i );
+ //Does this point to a valid namespace entry?
+ if( USHRT_MAX != nPos )
+ sRet = aNamespaceMap.GetPrefixByIndex( nPos );
+ return sRet;
+}
+
+const OUString& SvXMLAttrCollection::GetNamespace( sal_uInt16 i ) const
+{
+ return aNamespaceMap.GetNameByIndex( i );
+}
+
+const OUString& SvXMLAttrCollection::GetPrefix( sal_uInt16 i ) const
+{
+ return aNamespaceMap.GetPrefixByIndex( i );
+}
+
+sal_uInt16 SvXMLAttrCollection::GetFirstNamespaceIndex() const
+{
+ return aNamespaceMap.GetFirstIndex();
+}
+
+sal_uInt16 SvXMLAttrCollection::GetNextNamespaceIndex( sal_uInt16 nIdx ) const
+{
+ return aNamespaceMap.GetNextIndex( nIdx );
+}
+
+sal_uInt16 SvXMLAttrCollection::GetPrefixPos( size_t i ) const
+{
+// SAL_WARN_IF( i < 0 || i >= aAttrs.size()), "xmloff",
+// "SvXMLAttrCollection::GetPrefixPos: illegal index" );
+ return aAttrs[i].getPrefixPos();
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+