summaryrefslogtreecommitdiff
path: root/xmloff
diff options
context:
space:
mode:
authorNigel Hawkins <n.hawkins@gmx.com>2011-08-10 15:14:10 +0100
committerNigel Hawkins <n.hawkins@gmx.com>2011-08-11 22:18:38 +0100
commit40283f019e15e7e2fe2082653344067dce037892 (patch)
tree22384d89c89a102505c427d17c4f3641dc2383e6 /xmloff
parentf26117a5f4c78d9230b115ab88ed53b8ad45ccd5 (diff)
Replace SvArray stuff with vector in xmloff/xmlcnimp.hxx and refactor
LGPLv3+/MPL1.1
Diffstat (limited to 'xmloff')
-rw-r--r--xmloff/Library_xo.mk4
-rw-r--r--xmloff/inc/xmloff/xmlcnimp.hxx87
-rw-r--r--xmloff/source/core/SvXMLAttr.cxx72
-rw-r--r--xmloff/source/core/SvXMLAttr.hxx58
-rw-r--r--xmloff/source/core/SvXMLAttrCollection.cxx188
-rw-r--r--xmloff/source/core/SvXMLAttrCollection.hxx90
-rw-r--r--xmloff/source/core/unoatrcn.cxx1
-rw-r--r--xmloff/source/core/xmlcnimp.cxx148
-rw-r--r--xmloff/source/core/xmlcnitm.cxx221
9 files changed, 580 insertions, 289 deletions
diff --git a/xmloff/Library_xo.mk b/xmloff/Library_xo.mk
index 9f1cc21d2e6e..b8fec460bb8b 100644
--- a/xmloff/Library_xo.mk
+++ b/xmloff/Library_xo.mk
@@ -100,6 +100,8 @@ $(eval $(call gb_Library_add_exception_objects,xo,\
xmloff/source/core/RDFaExportHelper \
xmloff/source/core/RDFaImportHelper \
xmloff/source/core/SettingsExportHelper \
+ xmloff/source/core/SvXMLAttr \
+ xmloff/source/core/SvXMLAttrCollection \
xmloff/source/core/XMLBase64Export \
xmloff/source/core/XMLBase64ImportContext \
xmloff/source/core/XMLBasicExportFilter \
@@ -111,7 +113,7 @@ $(eval $(call gb_Library_add_exception_objects,xo,\
xmloff/source/core/nmspmap \
xmloff/source/core/unoatrcn \
xmloff/source/core/unointerfacetouniqueidentifiermapper \
- xmloff/source/core/xmlcnitm \
+ xmloff/source/core/xmlcnimp \
xmloff/source/core/xmlehelp \
xmloff/source/core/xmlerror \
xmloff/source/core/xmlexp \
diff --git a/xmloff/inc/xmloff/xmlcnimp.hxx b/xmloff/inc/xmloff/xmlcnimp.hxx
index 013dfb874733..b8b67bcec579 100644
--- a/xmloff/inc/xmloff/xmlcnimp.hxx
+++ b/xmloff/inc/xmloff/xmlcnimp.hxx
@@ -29,32 +29,21 @@
#ifndef _XMLOFF_XMLCNIMP_HXX
#define _XMLOFF_XMLCNIMP_HXX
-#include "sal/config.h"
-#include "xmloff/dllapi.h"
-#include "sal/types.h"
-#include <com/sun/star/container/XNameAccess.hpp>
-#include <svl/svarray.hxx>
-#include <xmloff/nmspmap.hxx>
-
-#define _SVSTDARR_USHORTS
-#include <svl/svstdarr.hxx>
+#include "xmloff/dllapi.h" //XMLOFF_DLLPUBLIC
+#include <sal/types.h> //sal_uInt16 and sal_Bool
+#include <boost/scoped_ptr.hpp>
namespace rtl { class OUString; }
-
-class SvXMLAttrContainerData_Impl;
+class SvXMLAttrCollection; //Forward declaration only.
class XMLOFF_DLLPUBLIC SvXMLAttrContainerData
{
- SvXMLNamespaceMap aNamespaceMap;
- SvUShorts aPrefixPoss;
- SvXMLAttrContainerData_Impl *pLNames;
- SvXMLAttrContainerData_Impl *pValues;
+private:
+ boost::scoped_ptr<SvXMLAttrCollection> pimpl;
- SAL_DLLPRIVATE inline sal_uInt16 GetPrefixPos( sal_uInt16 i ) const;
public:
-
- SvXMLAttrContainerData( const SvXMLAttrContainerData& rImpl );
SvXMLAttrContainerData();
+ SvXMLAttrContainerData(const SvXMLAttrContainerData &rCopy);
~SvXMLAttrContainerData();
int operator ==( const SvXMLAttrContainerData& rCmp ) const;
@@ -66,66 +55,30 @@ public:
const ::rtl::OUString& rLName,
const ::rtl::OUString& rValue );
- sal_uInt16 GetAttrCount() const;
- inline ::rtl::OUString GetAttrNamespace( sal_uInt16 i ) const;
- inline ::rtl::OUString GetAttrPrefix( sal_uInt16 i ) const;
- const ::rtl::OUString& GetAttrLName( sal_uInt16 i ) const;
- const ::rtl::OUString& GetAttrValue( sal_uInt16 i ) const;
+ size_t GetAttrCount() const;
+ const rtl::OUString GetAttrNamespace( size_t i ) const;
+ const rtl::OUString GetAttrPrefix( size_t i ) const;
+ const rtl::OUString& GetAttrLName( size_t i ) const;
+ const rtl::OUString& GetAttrValue( size_t i ) const;
- sal_uInt16 GetFirstNamespaceIndex() const { return aNamespaceMap.GetFirstIndex(); }
- sal_uInt16 GetNextNamespaceIndex( sal_uInt16 nIdx ) const { return aNamespaceMap.GetNextIndex( nIdx ); }
- inline const ::rtl::OUString& GetNamespace( sal_uInt16 i ) const;
- inline const ::rtl::OUString& GetPrefix( sal_uInt16 i ) const;
+ sal_uInt16 GetFirstNamespaceIndex() const;
+ sal_uInt16 GetNextNamespaceIndex( sal_uInt16 nIdx ) const;
+ const ::rtl::OUString& GetNamespace( sal_uInt16 i ) const;
+ const ::rtl::OUString& GetPrefix( sal_uInt16 i ) const;
- sal_Bool SetAt( sal_uInt16 i,
+ sal_Bool SetAt( size_t i,
const ::rtl::OUString& rLName, const rtl::OUString& rValue );
- sal_Bool SetAt( sal_uInt16 i,
+ sal_Bool SetAt( size_t i,
const ::rtl::OUString& rPrefix, const rtl::OUString& rNamespace,
const ::rtl::OUString& rLName, const rtl::OUString& rValue );
- sal_Bool SetAt( sal_uInt16 i,
+ sal_Bool SetAt( size_t i,
const ::rtl::OUString& rPrefix,
const ::rtl::OUString& rLName,
const ::rtl::OUString& rValue );
- void Remove( sal_uInt16 i );
+ void Remove( size_t i );
};
-inline sal_uInt16 SvXMLAttrContainerData::GetPrefixPos( sal_uInt16 i ) const
-{
-// DBG_ASSERT( i >= 0 && i < aPrefixPoss.Count(),
-// "SvXMLAttrContainerData::GetPrefixPos: illegal index" );
- return aPrefixPoss[i];
-}
-
-inline ::rtl::OUString SvXMLAttrContainerData::GetAttrNamespace( sal_uInt16 i ) const
-{
- ::rtl::OUString sRet;
- sal_uInt16 nPos = GetPrefixPos( i );
- if( USHRT_MAX != nPos )
- sRet = aNamespaceMap.GetNameByIndex( nPos );
- return sRet;
-}
-
-inline ::rtl::OUString SvXMLAttrContainerData::GetAttrPrefix( sal_uInt16 i ) const
-{
- ::rtl::OUString sRet;
- sal_uInt16 nPos = GetPrefixPos( i );
- if( USHRT_MAX != nPos )
- sRet = aNamespaceMap.GetPrefixByIndex( nPos );
- return sRet;
-}
-
-inline const ::rtl::OUString& SvXMLAttrContainerData::GetNamespace(
- sal_uInt16 i ) const
-{
- return aNamespaceMap.GetNameByIndex( i );
-}
-
-inline const ::rtl::OUString& SvXMLAttrContainerData::GetPrefix( sal_uInt16 i ) const
-{
- return aNamespaceMap.GetPrefixByIndex( i );
-}
-
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/core/SvXMLAttr.cxx b/xmloff/source/core/SvXMLAttr.cxx
new file mode 100644
index 000000000000..2a42dff11760
--- /dev/null
+++ b/xmloff/source/core/SvXMLAttr.cxx
@@ -0,0 +1,72 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License or as specified alternatively below. You may obtain a copy of
+ * the License at http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Initial Developer of the Original Code is
+ * Nigel Hawkins - n.hawkins@gmx.com
+ * Portions created by the Initial Developer are Copyright (C) 2011 the
+ * Initial Developer. All Rights Reserved.
+ *
+ * Major Contributor(s):
+ *
+ * For minor contributions see the git repository.
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+
+#include <limits.h> //USHRT_MAX
+#include "SvXMLAttr.hxx"
+
+SvXMLAttr::SvXMLAttr( const rtl::OUString& rLName,
+ const rtl::OUString& rValue ) :
+ aPrefixPos(USHRT_MAX),
+ aLName(rLName),
+ aValue(rValue)
+{
+}
+
+SvXMLAttr::SvXMLAttr( const sal_uInt16 nPos,
+ const rtl::OUString& rLName,
+ const rtl::OUString& rValue ) :
+ aPrefixPos(nPos),
+ aLName(rLName),
+ aValue(rValue)
+{
+}
+
+bool SvXMLAttr::operator== (const SvXMLAttr &rCmp) const
+{
+ return ( rCmp.aPrefixPos == aPrefixPos ) &&
+ ( rCmp.aLName == aLName ) &&
+ ( rCmp.aValue == aValue );
+}
+
+sal_uInt16 SvXMLAttr::getPrefixPos() const
+{
+ return aPrefixPos;
+}
+
+const rtl::OUString& SvXMLAttr::getLName() const
+{
+ return aLName;
+}
+
+const rtl::OUString& SvXMLAttr::getValue() const {
+ return aValue;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/core/SvXMLAttr.hxx b/xmloff/source/core/SvXMLAttr.hxx
new file mode 100644
index 000000000000..6ac9cd954ceb
--- /dev/null
+++ b/xmloff/source/core/SvXMLAttr.hxx
@@ -0,0 +1,58 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License or as specified alternatively below. You may obtain a copy of
+ * the License at http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Initial Developer of the Original Code is
+ * Nigel Hawkins - n.hawkins@gmx.com
+ * Portions created by the Initial Developer are Copyright (C) 2011 the
+ * Initial Developer. All Rights Reserved.
+ *
+ * Major Contributor(s):
+ *
+ * For minor contributions see the git repository.
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+
+#ifndef _XMLOFF_SVXMLATTR_HXX
+#define _XMLOFF_SVXMLATTR_HXX
+
+#include <rtl/ustring.hxx> //rtl::OUString
+
+class SvXMLAttr {
+private:
+ sal_uInt16 aPrefixPos;
+ rtl::OUString aLName;
+ rtl::OUString aValue;
+public:
+ // Assuming OUString is well behaved, the default copy constructor and
+ // assignment operator are fine.
+ SvXMLAttr( const rtl::OUString& rLName,
+ const rtl::OUString& rValue );
+ SvXMLAttr( const sal_uInt16 nPos,
+ const rtl::OUString& rLName,
+ const rtl::OUString& rValue );
+ bool operator== (const SvXMLAttr &rCmp) const;
+
+ sal_uInt16 getPrefixPos() const;
+ const rtl::OUString& getLName() const;
+ const rtl::OUString& getValue() const;
+};
+
+#endif /* _XMLOFF_SVXMLATTR_HXX */
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/core/SvXMLAttrCollection.cxx b/xmloff/source/core/SvXMLAttrCollection.cxx
new file mode 100644
index 000000000000..748ed5dff3a2
--- /dev/null
+++ b/xmloff/source/core/SvXMLAttrCollection.cxx
@@ -0,0 +1,188 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License or as specified alternatively below. You may obtain a copy of
+ * the License at http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Initial Developer of the Original Code is
+ * Nigel Hawkins - n.hawkins@gmx.com
+ * Portions created by the Initial Developer are Copyright (C) 2011 the
+ * Initial Developer. All Rights Reserved.
+ *
+ * Major Contributor(s):
+ *
+ * For minor contributions see the git repository.
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+
+#include "SvXMLAttrCollection.hxx"
+#include <limits.h> //USHRT_MAX
+
+bool SvXMLAttrCollection::operator ==( const SvXMLAttrCollection& rCmp ) const
+{
+ return (rCmp.aNamespaceMap == aNamespaceMap) &&
+ (rCmp.aAttrs == aAttrs);
+}
+
+sal_Bool SvXMLAttrCollection::AddAttr( const rtl::OUString& rLName,
+ const rtl::OUString& rValue )
+{
+ aAttrs.push_back( SvXMLAttr(rLName, rValue) );
+ return sal_True;
+}
+
+sal_Bool SvXMLAttrCollection::AddAttr( const rtl::OUString& rPrefix,
+ const rtl::OUString& rNamespace,
+ const rtl::OUString& rLName,
+ const rtl::OUString& rValue )
+{
+ sal_uInt16 nPos = aNamespaceMap.Add( rPrefix, rNamespace );
+ aAttrs.push_back( SvXMLAttr(nPos, rLName, rValue) );
+ return sal_True;
+}
+
+sal_Bool SvXMLAttrCollection::AddAttr( const rtl::OUString& rPrefix,
+ const rtl::OUString& rLName,
+ const rtl::OUString& rValue )
+{
+ sal_uInt16 nPos = aNamespaceMap.GetIndexByPrefix( rPrefix );
+ if( USHRT_MAX == nPos )
+ return sal_False;
+ aAttrs.push_back( SvXMLAttr(nPos, rLName, rValue) );
+ return sal_True;
+}
+
+sal_Bool SvXMLAttrCollection::SetAt( size_t i,
+ const rtl::OUString& rLName,
+ const rtl::OUString& rValue )
+{
+ if( i >= GetAttrCount() )
+ return sal_False;
+ aAttrs[i] = SvXMLAttr(rLName, rValue);
+ return sal_True;
+}
+
+sal_Bool SvXMLAttrCollection::SetAt( size_t i,
+ const rtl::OUString& rPrefix,
+ const rtl::OUString& rNamespace,
+ const rtl::OUString& rLName,
+ const rtl::OUString& rValue )
+{
+ if( i >= GetAttrCount() )
+ return sal_False;
+
+ sal_uInt16 nPos = aNamespaceMap.Add( rPrefix, rNamespace );
+ if( USHRT_MAX == nPos )
+ return sal_False;
+
+ aAttrs[i] = SvXMLAttr(nPos, rLName, rValue);
+ return sal_True;
+}
+
+sal_Bool SvXMLAttrCollection::SetAt( size_t i,
+ const rtl::OUString& rPrefix,
+ const rtl::OUString& rLName,
+ const rtl::OUString& rValue )
+{
+ if( i >= GetAttrCount() )
+ return sal_False;
+
+ sal_uInt16 nPos = aNamespaceMap.GetIndexByPrefix( rPrefix );
+ if( USHRT_MAX == nPos )
+ return sal_False;
+
+ aAttrs[i] = SvXMLAttr(nPos, rLName, rValue);
+ return sal_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 rtl::OUString& SvXMLAttrCollection::GetAttrLName(size_t i) const
+{
+ OSL_ENSURE( i < aAttrs.size(), "SvXMLAttrContainerData::GetLName: illegal index" );
+ return aAttrs[i].getLName();
+}
+
+const rtl::OUString& SvXMLAttrCollection::GetAttrValue(size_t i) const
+{
+ OSL_ENSURE( i < aAttrs.size(), "SvXMLAttrContainerData::GetValue: illegal index" );
+ return aAttrs[i].getValue();
+}
+
+const rtl::OUString SvXMLAttrCollection::GetAttrNamespace( size_t i ) const
+{
+ rtl::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;
+}
+
+const rtl::OUString SvXMLAttrCollection::GetAttrPrefix( size_t i ) const
+{
+ rtl::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 rtl::OUString& SvXMLAttrCollection::GetNamespace( sal_uInt16 i ) const
+{
+ return aNamespaceMap.GetNameByIndex( i );
+}
+
+const rtl::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
+{
+// DBG_ASSERT( i >= 0 && i < aAttrs.size(),
+// "SvXMLAttrCollection::GetPrefixPos: illegal index" );
+ return aAttrs[i].getPrefixPos();
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+
diff --git a/xmloff/source/core/SvXMLAttrCollection.hxx b/xmloff/source/core/SvXMLAttrCollection.hxx
new file mode 100644
index 000000000000..96fb88a5ace2
--- /dev/null
+++ b/xmloff/source/core/SvXMLAttrCollection.hxx
@@ -0,0 +1,90 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * Version: MPL 1.1 / GPLv3+ / LGPLv3+
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License or as specified alternatively below. You may obtain a copy of
+ * the License at http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Initial Developer of the Original Code is
+ * Nigel Hawkins - n.hawkins@gmx.com
+ * Portions created by the Initial Developer are Copyright (C) 2011 the
+ * Initial Developer. All Rights Reserved.
+ *
+ * Major Contributor(s):
+ *
+ * For minor contributions see the git repository.
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 3 or later (the "GPLv3+"), or
+ * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
+ * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
+ * instead of those above.
+ */
+
+#ifndef SVXMLATTRCOLLECTION_HXX_
+#define SVXMLATTRCOLLECTION_HXX_
+
+#include "SvXMLAttr.hxx"
+
+#include <xmloff/nmspmap.hxx> //SvXMLNamespaceMap
+#include <rtl/ustring.hxx> //rtl::OUString
+#include <sal/types.h> //sal_uInt16 and sal_Bool
+#include <vector>
+
+class SvXMLAttrCollection
+{
+public:
+ SvXMLNamespaceMap aNamespaceMap;
+ std::vector<SvXMLAttr> aAttrs;
+
+ bool operator==(const SvXMLAttrCollection &rCmp) const;
+ sal_Bool AddAttr( const rtl::OUString& rLName,
+ const rtl::OUString& rValue );
+ sal_Bool AddAttr( const rtl::OUString& rPrefix,
+ const rtl::OUString& rNamespace,
+ const rtl::OUString& rLName,
+ const rtl::OUString& rValue );
+ sal_Bool AddAttr( const rtl::OUString& rPrefix,
+ const rtl::OUString& rLName,
+ const rtl::OUString& rValue );
+
+ sal_Bool SetAt( size_t i,
+ const rtl::OUString& rLName,
+ const rtl::OUString& rValue );
+ sal_Bool SetAt( size_t i,
+ const rtl::OUString& rPrefix,
+ const rtl::OUString& rNamespace,
+ const rtl::OUString& rLName,
+ const rtl::OUString& rValue );
+ sal_Bool SetAt( size_t i,
+ const rtl::OUString& rPrefix,
+ const rtl::OUString& rLName,
+ const rtl::OUString& rValue );
+
+ void Remove( size_t i );
+
+ size_t GetAttrCount() const;
+ const rtl::OUString& GetAttrLName(size_t i) const;
+ const rtl::OUString& GetAttrValue(size_t i) const;
+ const rtl::OUString GetAttrNamespace( size_t i ) const;
+ const rtl::OUString GetAttrPrefix( size_t i ) const;
+ const rtl::OUString& GetNamespace( sal_uInt16 i ) const;
+ const rtl::OUString& GetPrefix( sal_uInt16 i ) const;
+ sal_uInt16 GetFirstNamespaceIndex() const;
+ sal_uInt16 GetNextNamespaceIndex( sal_uInt16 nIdx ) const;
+
+private:
+ sal_uInt16 GetPrefixPos( size_t i ) const;
+};
+
+#endif /* SVXMLATTRCOLLECTION_HXX_ */
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+
diff --git a/xmloff/source/core/unoatrcn.cxx b/xmloff/source/core/unoatrcn.cxx
index 38e0d4c53fd3..32b11dbdab3a 100644
--- a/xmloff/source/core/unoatrcn.cxx
+++ b/xmloff/source/core/unoatrcn.cxx
@@ -33,6 +33,7 @@
#include <rtl/ustrbuf.hxx>
#include <rtl/memory.h>
#include <comphelper/servicehelper.hxx>
+#include <limits.h>
#include <xmloff/xmlcnimp.hxx>
diff --git a/xmloff/source/core/xmlcnimp.cxx b/xmloff/source/core/xmlcnimp.cxx
new file mode 100644
index 000000000000..79f6ef6c6091
--- /dev/null
+++ b/xmloff/source/core/xmlcnimp.cxx
@@ -0,0 +1,148 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "SvXMLAttrCollection.hxx"
+#include <xmloff/xmlcnimp.hxx>
+#include <rtl/ustring.hxx> //rtl::OUString
+
+SvXMLAttrContainerData::SvXMLAttrContainerData() : pimpl( new SvXMLAttrCollection() )
+{
+}
+
+SvXMLAttrContainerData::SvXMLAttrContainerData(const SvXMLAttrContainerData &rCopy) :
+ pimpl( new SvXMLAttrCollection( *(rCopy.pimpl) ) )
+{
+}
+
+//Need destructor defined (despite it being empty) to avoid "checked_delete"
+//compiler errors.
+SvXMLAttrContainerData::~SvXMLAttrContainerData()
+{
+}
+
+int SvXMLAttrContainerData::operator ==( const SvXMLAttrContainerData& rCmp ) const
+{
+ return ( *(rCmp.pimpl) == *(pimpl) );
+}
+
+sal_Bool SvXMLAttrContainerData::AddAttr( const rtl::OUString& rLName,
+ const rtl::OUString& rValue )
+{
+ return pimpl->AddAttr(rLName, rValue);
+}
+
+sal_Bool SvXMLAttrContainerData::AddAttr( const rtl::OUString& rPrefix,
+ const rtl::OUString& rNamespace,
+ const rtl::OUString& rLName,
+ const rtl::OUString& rValue )
+{
+ return pimpl->AddAttr(rPrefix, rNamespace, rLName, rValue);
+}
+
+sal_Bool SvXMLAttrContainerData::AddAttr( const rtl::OUString& rPrefix,
+ const rtl::OUString& rLName,
+ const rtl::OUString& rValue )
+{
+ return pimpl->AddAttr(rPrefix, rLName, rValue);
+}
+
+sal_Bool SvXMLAttrContainerData::SetAt( size_t i,
+ const rtl::OUString& rLName,
+ const rtl::OUString& rValue )
+{
+ return pimpl->SetAt(i, rLName, rValue);
+}
+
+sal_Bool SvXMLAttrContainerData::SetAt( size_t i,
+ const rtl::OUString& rPrefix,
+ const rtl::OUString& rNamespace,
+ const rtl::OUString& rLName,
+ const rtl::OUString& rValue )
+{
+ return pimpl->SetAt(i, rPrefix, rNamespace, rLName, rValue);
+}
+
+sal_Bool SvXMLAttrContainerData::SetAt( size_t i,
+ const rtl::OUString& rPrefix,
+ const rtl::OUString& rLName,
+ const rtl::OUString& rValue )
+{
+ return pimpl->SetAt(i, rPrefix, rLName, rValue);
+}
+
+void SvXMLAttrContainerData::Remove( size_t i )
+{
+ pimpl->Remove(i);
+}
+
+size_t SvXMLAttrContainerData::GetAttrCount() const
+{
+ return pimpl->GetAttrCount();
+}
+
+const rtl::OUString& SvXMLAttrContainerData::GetAttrLName(size_t i) const
+{
+ return pimpl->GetAttrLName(i);
+}
+
+const rtl::OUString& SvXMLAttrContainerData::GetAttrValue(size_t i) const
+{
+ return pimpl->GetAttrValue(i);
+}
+
+const rtl::OUString SvXMLAttrContainerData::GetAttrNamespace( size_t i ) const
+{
+ return pimpl->GetAttrNamespace(i);
+}
+
+const rtl::OUString SvXMLAttrContainerData::GetAttrPrefix( size_t i ) const
+{
+ return pimpl->GetAttrPrefix(i);
+}
+
+const rtl::OUString& SvXMLAttrContainerData::GetNamespace( sal_uInt16 i ) const
+{
+ return pimpl->GetNamespace(i);
+}
+
+const rtl::OUString& SvXMLAttrContainerData::GetPrefix( sal_uInt16 i ) const
+{
+ return pimpl->GetPrefix(i);
+}
+
+sal_uInt16 SvXMLAttrContainerData::GetFirstNamespaceIndex() const
+{
+ return pimpl->GetFirstNamespaceIndex();
+}
+
+sal_uInt16 SvXMLAttrContainerData::GetNextNamespaceIndex( sal_uInt16 nIdx ) const
+{
+ return pimpl->GetNextNamespaceIndex( nIdx );
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/xmloff/source/core/xmlcnitm.cxx b/xmloff/source/core/xmlcnitm.cxx
deleted file mode 100644
index 7c7864b5df5f..000000000000
--- a/xmloff/source/core/xmlcnitm.cxx
+++ /dev/null
@@ -1,221 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_xmloff.hxx"
-#include <tools/debug.hxx>
-#include <com/sun/star/xml/AttributeData.hpp>
-#include <com/sun/star/lang/XUnoTunnel.hpp>
-
-#include <xmloff/xmlcnimp.hxx>
-#include "xmloff/unoatrcn.hxx"
-
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::xml;
-
-using ::rtl::OUString;
-
-typedef ::rtl::OUString *OUStringPtr;
-SV_DECL_PTRARR_DEL( SvXMLAttrContainerData_Impl, OUStringPtr, 5, 5 )
-SV_IMPL_PTRARR( SvXMLAttrContainerData_Impl, OUStringPtr )
-
-
-SvXMLAttrContainerData::SvXMLAttrContainerData(
- const SvXMLAttrContainerData& rImpl ) :
- aNamespaceMap( rImpl.aNamespaceMap ),
- pLNames( new SvXMLAttrContainerData_Impl ),
- pValues( new SvXMLAttrContainerData_Impl )
-{
- sal_uInt16 nCount = rImpl.pLNames->Count();
- for( sal_uInt16 i=0; i<nCount; i++ )
- {
- aPrefixPoss.Insert( rImpl.aPrefixPoss[i], i );
- pLNames->Insert( new OUString( *(*rImpl.pLNames)[i] ), i );
- pValues->Insert( new OUString( *(*rImpl.pValues)[i] ), i );
- }
-}
-
-SvXMLAttrContainerData::SvXMLAttrContainerData() :
- pLNames( new SvXMLAttrContainerData_Impl ),
- pValues( new SvXMLAttrContainerData_Impl )
-{
-}
-
-SvXMLAttrContainerData::~SvXMLAttrContainerData()
-{
- delete pLNames;
- delete pValues;
-}
-
-int SvXMLAttrContainerData::operator ==(
- const SvXMLAttrContainerData& rCmp ) const
-{
- sal_Bool bRet = pLNames->Count() == rCmp.pLNames->Count() &&
- aNamespaceMap == rCmp.aNamespaceMap;
- if( bRet )
- {
- sal_uInt16 nCount = pLNames->Count();
- sal_uInt16 i;
- for( i=0; bRet && i < nCount; i++ )
- bRet = aPrefixPoss[i] == rCmp.aPrefixPoss[i];
-
- if( bRet )
- {
- for( i=0; bRet && i < nCount; i++ )
- bRet = *(*pLNames)[i] == *(*rCmp.pLNames)[i] &&
- *(*pValues)[i] == *(*rCmp.pValues)[i];
- }
- }
-
- return (int)bRet;
-}
-
-sal_Bool SvXMLAttrContainerData::AddAttr( const OUString& rLName,
- const OUString& rValue )
-{
- aPrefixPoss.Insert( USHRT_MAX, aPrefixPoss.Count() );
- pLNames->Insert( new OUString(rLName), pLNames->Count() );
- pValues->Insert( new OUString(rValue), pValues->Count() );
-
- return sal_True;
-}
-
-sal_Bool SvXMLAttrContainerData::AddAttr( const OUString& rPrefix,
- const OUString& rNamespace,
- const OUString& rLName,
- const OUString& rValue )
-{
- sal_uInt16 nPos = aNamespaceMap.Add( rPrefix, rNamespace );
- aPrefixPoss.Insert( nPos, aPrefixPoss.Count() );
- pLNames->Insert( new OUString(rLName), pLNames->Count() );
- pValues->Insert( new OUString(rValue), pValues->Count() );
-
- return sal_True;
-}
-
-sal_Bool SvXMLAttrContainerData::AddAttr( const OUString& rPrefix,
- const OUString& rLName,
- const OUString& rValue )
-{
- sal_uInt16 nPos = aNamespaceMap.GetIndexByPrefix( rPrefix );
- if( USHRT_MAX == nPos )
- return sal_False;
-
- aPrefixPoss.Insert( nPos, aPrefixPoss.Count() );
- pLNames->Insert( new OUString(rLName), pLNames->Count() );
- pValues->Insert( new OUString(rValue), pValues->Count() );
-
- return sal_True;
-}
-
-sal_Bool SvXMLAttrContainerData::SetAt( sal_uInt16 i,
- const rtl::OUString& rLName, const rtl::OUString& rValue )
-{
- if( i >= GetAttrCount() )
- return sal_False;
-
- *(*pLNames)[i] = rLName;
- *(*pValues)[i] = rValue;
- aPrefixPoss[i] = USHRT_MAX;
-
- return sal_True;
-}
-
-sal_Bool SvXMLAttrContainerData::SetAt( sal_uInt16 i,
- const rtl::OUString& rPrefix, const rtl::OUString& rNamespace,
- const rtl::OUString& rLName, const rtl::OUString& rValue )
-{
- if( i >= GetAttrCount() )
- return sal_False;
-
- sal_uInt16 nPos = aNamespaceMap.Add( rPrefix, rNamespace );
- if( USHRT_MAX == nPos )
- return sal_False;
-
- *(*pLNames)[i] = rLName;
- *(*pValues)[i] = rValue;
- aPrefixPoss[i] = nPos;
-
- return sal_True;
-}
-
-sal_Bool SvXMLAttrContainerData::SetAt( sal_uInt16 i,
- const rtl::OUString& rPrefix,
- const rtl::OUString& rLName,
- const rtl::OUString& rValue )
-{
- if( i >= GetAttrCount() )
- return sal_False;
-
- sal_uInt16 nPos = aNamespaceMap.GetIndexByPrefix( rPrefix );
- if( USHRT_MAX == nPos )
- return sal_False;
-
- *(*pLNames)[i] = rLName;
- *(*pValues)[i] = rValue;
- aPrefixPoss[i] = nPos;
-
- return sal_True;
-}
-
-void SvXMLAttrContainerData::Remove( sal_uInt16 i )
-{
- if( i < GetAttrCount() )
- {
- delete (*pLNames)[i];
- pLNames->Remove( i );
- delete (*pValues)[i];
- pValues->Remove( i );
- aPrefixPoss.Remove( i );
- }
- else
- {
- OSL_FAIL( "illegal index" );
- }
-}
-
-sal_uInt16 SvXMLAttrContainerData::GetAttrCount() const
-{
- return pLNames->Count();
-}
-
-const ::rtl::OUString& SvXMLAttrContainerData::GetAttrLName(sal_uInt16 i) const
-{
- OSL_ENSURE( i < pLNames->Count(), "SvXMLAttrContainerData::GetLName: illegal index" );
- return *(*pLNames)[i];
-}
-
-const ::rtl::OUString& SvXMLAttrContainerData::GetAttrValue(sal_uInt16 i) const
-{
- OSL_ENSURE( i < pValues->Count(), "SvXMLAttrContainerData::GetValue: illegal index" );
- return *(*pValues)[i];
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */