1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: xmlcnimp.hxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #ifndef _SVTOOLS_XMLCNIMP_HXX
32 #define _SVTOOLS_XMLCNIMP_HXX
34 #include <com/sun/star/container/XNameAccess.hpp>
35 #include <svtools/svarray.hxx>
37 #ifndef _SVTOOLS_NMSPMAP_HXX
38 #include <xmloff/nmspmap.hxx>
41 namespace rtl
{ class OUString
; }
43 typedef ::rtl::OUString
*OUStringPtr
;
44 SV_DECL_PTRARR_DEL( OUStringsDtor2_Impl
, OUStringPtr
, 5, 5 )
46 class SvXMLAttrContainerItem_Impl
48 SvXMLNamespaceMap aNamespaceMap
;
49 SvUShorts aPrefixPoss
;
50 OUStringsDtor2_Impl aLNames
;
51 OUStringsDtor2_Impl aValues
;
53 inline sal_uInt16
GetPrefixPos( sal_uInt16 i
) const;
56 SvXMLAttrContainerItem_Impl( const SvXMLAttrContainerItem_Impl
& rImpl
);
57 SvXMLAttrContainerItem_Impl();
59 int operator ==( const SvXMLAttrContainerItem_Impl
& rCmp
) const;
61 BOOL
AddAttr( const ::rtl::OUString
& rLName
, const ::rtl::OUString
& rValue
);
62 BOOL
AddAttr( const ::rtl::OUString
& rPrefix
, const ::rtl::OUString
& rNamespace
,
63 const ::rtl::OUString
& rLName
, const ::rtl::OUString
& rValue
);
64 BOOL
AddAttr( const ::rtl::OUString
& rPrefix
,
65 const ::rtl::OUString
& rLName
,
66 const ::rtl::OUString
& rValue
);
68 sal_uInt16
GetAttrCount() const { return aLNames
.Count(); }
69 inline ::rtl::OUString
GetAttrNamespace( sal_uInt16 i
) const;
70 inline ::rtl::OUString
GetAttrPrefix( sal_uInt16 i
) const;
71 inline const ::rtl::OUString
& GetAttrLName( sal_uInt16 i
) const;
72 inline const ::rtl::OUString
& GetAttrValue( sal_uInt16 i
) const;
74 sal_uInt16
GetFirstNamespaceIndex() const { return aNamespaceMap
.GetFirstIndex(); }
75 sal_uInt16
GetNextNamespaceIndex( sal_uInt16 nIdx
) const { return aNamespaceMap
.GetNextIndex( nIdx
); }
76 inline const ::rtl::OUString
& GetNamespace( sal_uInt16 i
) const;
77 inline const ::rtl::OUString
& GetPrefix( sal_uInt16 i
) const;
79 BOOL
SetAt( sal_uInt16 i
,
80 const ::rtl::OUString
& rLName
, const ::rtl::OUString
& rValue
);
81 BOOL
SetAt( sal_uInt16 i
,
82 const ::rtl::OUString
& rPrefix
, const ::rtl::OUString
& rNamespace
,
83 const ::rtl::OUString
& rLName
, const ::rtl::OUString
& rValue
);
84 BOOL
SetAt( sal_uInt16 i
,
85 const ::rtl::OUString
& rPrefix
,
86 const ::rtl::OUString
& rLName
,
87 const ::rtl::OUString
& rValue
);
89 void Remove( sal_uInt16 i
);
92 inline sal_uInt16
SvXMLAttrContainerItem_Impl::GetPrefixPos( sal_uInt16 i
) const
94 // DBG_ASSERT( i >= 0 && i < aPrefixPoss.Count(),
95 // "SvXMLAttrContainerItem_Impl::GetPrefixPos: illegal index" );
96 return aPrefixPoss
[i
];
99 inline ::rtl::OUString
SvXMLAttrContainerItem_Impl::GetAttrNamespace( sal_uInt16 i
) const
101 ::rtl::OUString sRet
;
102 sal_uInt16 nPos
= GetPrefixPos( i
);
103 if( USHRT_MAX
!= nPos
)
104 sRet
= aNamespaceMap
.GetNameByIndex( nPos
);
108 inline ::rtl::OUString
SvXMLAttrContainerItem_Impl::GetAttrPrefix( sal_uInt16 i
) const
110 ::rtl::OUString sRet
;
111 sal_uInt16 nPos
= GetPrefixPos( i
);
112 if( USHRT_MAX
!= nPos
)
113 sRet
= aNamespaceMap
.GetPrefixByIndex( nPos
);
117 inline const ::rtl::OUString
& SvXMLAttrContainerItem_Impl::GetAttrLName(sal_uInt16 i
) const
119 DBG_ASSERT( i
>= 0 && i
< aLNames
.Count(),
120 "SvXMLAttrContainerItem_Impl::GetLName: illegal index" );
124 inline const ::rtl::OUString
& SvXMLAttrContainerItem_Impl::GetAttrValue(sal_uInt16 i
) const
126 DBG_ASSERT( i
>= 0 && i
< aValues
.Count(),
127 "SvXMLAttrContainerItem_Impl::GetValue: illegal index" );
131 inline const ::rtl::OUString
& SvXMLAttrContainerItem_Impl::GetNamespace(
134 return aNamespaceMap
.GetNameByIndex( i
);
137 inline const ::rtl::OUString
& SvXMLAttrContainerItem_Impl::GetPrefix( sal_uInt16 i
) const
139 return aNamespaceMap
.GetPrefixByIndex( i
);