163bba73cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
363bba73cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
463bba73cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
563bba73cSAndrew Rist  * distributed with this work for additional information
663bba73cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
763bba73cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
863bba73cSAndrew Rist  * "License"); you may not use this file except in compliance
963bba73cSAndrew Rist  * with the License.  You may obtain a copy of the License at
1063bba73cSAndrew Rist  *
1163bba73cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
1263bba73cSAndrew Rist  *
1363bba73cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
1463bba73cSAndrew Rist  * software distributed under the License is distributed on an
1563bba73cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1663bba73cSAndrew Rist  * KIND, either express or implied.  See the License for the
1763bba73cSAndrew Rist  * specific language governing permissions and limitations
1863bba73cSAndrew Rist  * under the License.
1963bba73cSAndrew Rist  *
2063bba73cSAndrew Rist  *************************************************************/
2163bba73cSAndrew Rist 
2263bba73cSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_xmloff.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir 
28cdf0e10cSrcweir #include <com/sun/star/util/XStringSubstitution.hpp>
29cdf0e10cSrcweir #include <xmloff/DocumentSettingsContext.hxx>
30cdf0e10cSrcweir #include <xmloff/xmlimp.hxx>
31cdf0e10cSrcweir #include <xmloff/xmltoken.hxx>
32cdf0e10cSrcweir #include "xmloff/xmlnmspe.hxx"
33cdf0e10cSrcweir #include <xmloff/nmspmap.hxx>
34cdf0e10cSrcweir #include <xmloff/xmluconv.hxx>
35cdf0e10cSrcweir #include <tools/debug.hxx>
36cdf0e10cSrcweir 
37cdf0e10cSrcweir #ifndef __SGI_STL_LIST
38cdf0e10cSrcweir #include <list>
39cdf0e10cSrcweir #endif
40cdf0e10cSrcweir #include <com/sun/star/i18n/XForbiddenCharacters.hpp>
41cdf0e10cSrcweir #include <com/sun/star/container/XIndexContainer.hpp>
42cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp>
43cdf0e10cSrcweir #include <com/sun/star/formula/SymbolDescriptor.hpp>
44cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
45cdf0e10cSrcweir #include <com/sun/star/util/DateTime.hpp>
46cdf0e10cSrcweir #include <com/sun/star/document/XViewDataSupplier.hpp>
47cdf0e10cSrcweir #include <com/sun/star/document/PrinterIndependentLayout.hpp>
48cdf0e10cSrcweir #include <comphelper/configurationhelper.hxx>
49cdf0e10cSrcweir #include <rtl/ustrbuf.hxx>
50cdf0e10cSrcweir #include <xmlenums.hxx>
51cdf0e10cSrcweir 
52cdf0e10cSrcweir using namespace com::sun::star;
53cdf0e10cSrcweir using namespace ::xmloff::token;
54cdf0e10cSrcweir 
55cdf0e10cSrcweir #define C2U(cChar) ::rtl::OUString::createFromAscii(cChar)
56cdf0e10cSrcweir 
57cdf0e10cSrcweir //------------------------------------------------------------------
58cdf0e10cSrcweir 
59cdf0e10cSrcweir class XMLMyList
60cdf0e10cSrcweir {
61cdf0e10cSrcweir 	std::list<beans::PropertyValue>	aProps;
62cdf0e10cSrcweir 	sal_uInt32						nCount;
63cdf0e10cSrcweir 
64cdf0e10cSrcweir 	// #110680#
65cdf0e10cSrcweir 	::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxServiceFactory;
66cdf0e10cSrcweir 
67cdf0e10cSrcweir public:
68cdf0e10cSrcweir 	// #110680#
69cdf0e10cSrcweir 	XMLMyList(const uno::Reference<lang::XMultiServiceFactory>& xServiceFactory);
70cdf0e10cSrcweir 	~XMLMyList();
71cdf0e10cSrcweir 
push_back(beans::PropertyValue & aProp)72cdf0e10cSrcweir 	void push_back(beans::PropertyValue& aProp) { aProps.push_back(aProp); nCount++; }
73cdf0e10cSrcweir 	uno::Sequence<beans::PropertyValue> GetSequence();
74cdf0e10cSrcweir 	uno::Reference<container::XNameContainer> GetNameContainer();
75cdf0e10cSrcweir 	uno::Reference<container::XIndexContainer> GetIndexContainer();
76cdf0e10cSrcweir };
77cdf0e10cSrcweir 
78cdf0e10cSrcweir // #110680#
XMLMyList(const uno::Reference<lang::XMultiServiceFactory> & xServiceFactory)79cdf0e10cSrcweir XMLMyList::XMLMyList(const uno::Reference<lang::XMultiServiceFactory>& xServiceFactory)
80cdf0e10cSrcweir :	nCount(0),
81cdf0e10cSrcweir 	mxServiceFactory(xServiceFactory)
82cdf0e10cSrcweir {
83cdf0e10cSrcweir 	DBG_ASSERT( mxServiceFactory.is(), "got no service manager" );
84cdf0e10cSrcweir }
85cdf0e10cSrcweir 
86cdf0e10cSrcweir // #110680#
~XMLMyList()87cdf0e10cSrcweir XMLMyList::~XMLMyList()
88cdf0e10cSrcweir {
89cdf0e10cSrcweir }
90cdf0e10cSrcweir 
GetSequence()91cdf0e10cSrcweir uno::Sequence<beans::PropertyValue> XMLMyList::GetSequence()
92cdf0e10cSrcweir {
93cdf0e10cSrcweir 	uno::Sequence<beans::PropertyValue> aSeq;
94cdf0e10cSrcweir 	if(nCount)
95cdf0e10cSrcweir 	{
96cdf0e10cSrcweir 		DBG_ASSERT(nCount == aProps.size(), "wrong count of PropertyValue");
97cdf0e10cSrcweir 		aSeq.realloc(nCount);
98cdf0e10cSrcweir 		beans::PropertyValue* pProps = aSeq.getArray();
99cdf0e10cSrcweir 		std::list<beans::PropertyValue>::iterator aItr = aProps.begin();
100cdf0e10cSrcweir 		while (aItr != aProps.end())
101cdf0e10cSrcweir 		{
102cdf0e10cSrcweir 			*pProps = *aItr;
103cdf0e10cSrcweir 			pProps++;
104cdf0e10cSrcweir 			aItr++;
105cdf0e10cSrcweir 		}
106cdf0e10cSrcweir 	}
107cdf0e10cSrcweir 	return aSeq;
108cdf0e10cSrcweir }
109cdf0e10cSrcweir 
GetNameContainer()110cdf0e10cSrcweir uno::Reference<container::XNameContainer> XMLMyList::GetNameContainer()
111cdf0e10cSrcweir {
112cdf0e10cSrcweir 	uno::Reference<container::XNameContainer> xNameContainer;
113cdf0e10cSrcweir 
114cdf0e10cSrcweir 	// #110680#
115cdf0e10cSrcweir 	// uno::Reference<lang::XMultiServiceFactory> xServiceFactory = comphelper::getProcessServiceFactory();
116cdf0e10cSrcweir 	// DBG_ASSERT( xServiceFactory.is(), "got no service manager" );
117cdf0e10cSrcweir 
118cdf0e10cSrcweir 	if( mxServiceFactory.is() )
119cdf0e10cSrcweir 	{
120cdf0e10cSrcweir 		rtl::OUString sName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.NamedPropertyValues"));
121cdf0e10cSrcweir 		xNameContainer = uno::Reference<container::XNameContainer>(mxServiceFactory->createInstance(sName), uno::UNO_QUERY);
122cdf0e10cSrcweir 		if (xNameContainer.is())
123cdf0e10cSrcweir 		{
124cdf0e10cSrcweir 			std::list<beans::PropertyValue>::iterator aItr = aProps.begin();
125cdf0e10cSrcweir 			while (aItr != aProps.end())
126cdf0e10cSrcweir 			{
127cdf0e10cSrcweir 				xNameContainer->insertByName(aItr->Name, aItr->Value);
128cdf0e10cSrcweir 				aItr++;
129cdf0e10cSrcweir 			}
130cdf0e10cSrcweir 		}
131cdf0e10cSrcweir 	}
132cdf0e10cSrcweir 	return xNameContainer;
133cdf0e10cSrcweir }
134cdf0e10cSrcweir 
GetIndexContainer()135cdf0e10cSrcweir uno::Reference<container::XIndexContainer> XMLMyList::GetIndexContainer()
136cdf0e10cSrcweir {
137cdf0e10cSrcweir 	uno::Reference<container::XIndexContainer> xIndexContainer;
138cdf0e10cSrcweir 	// #110680#
139cdf0e10cSrcweir 	// uno::Reference<lang::XMultiServiceFactory> xServiceFactory = comphelper::getProcessServiceFactory();
140cdf0e10cSrcweir 	// DBG_ASSERT( xServiceFactory.is(), "got no service manager" );
141cdf0e10cSrcweir 
142cdf0e10cSrcweir 	if( mxServiceFactory.is() )
143cdf0e10cSrcweir 	{
144cdf0e10cSrcweir 		rtl::OUString sName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.IndexedPropertyValues"));
145cdf0e10cSrcweir 		xIndexContainer = uno::Reference<container::XIndexContainer>(mxServiceFactory->createInstance(sName), uno::UNO_QUERY);
146cdf0e10cSrcweir 		if (xIndexContainer.is())
147cdf0e10cSrcweir 		{
148cdf0e10cSrcweir 			std::list<beans::PropertyValue>::iterator aItr = aProps.begin();
149cdf0e10cSrcweir 			sal_uInt32 i(0);
150cdf0e10cSrcweir 			while (aItr != aProps.end())
151cdf0e10cSrcweir 			{
152cdf0e10cSrcweir 				xIndexContainer->insertByIndex(i, aItr->Value);
153cdf0e10cSrcweir 				aItr++;
154cdf0e10cSrcweir 				i++;
155cdf0e10cSrcweir 			}
156cdf0e10cSrcweir 		}
157cdf0e10cSrcweir 	}
158cdf0e10cSrcweir 	return xIndexContainer;
159cdf0e10cSrcweir }
160cdf0e10cSrcweir 
161cdf0e10cSrcweir //=============================================================================
162cdf0e10cSrcweir 
163cdf0e10cSrcweir class XMLConfigBaseContext : public SvXMLImportContext
164cdf0e10cSrcweir {
165cdf0e10cSrcweir protected:
166cdf0e10cSrcweir 	XMLMyList					maProps;
167cdf0e10cSrcweir 	beans::PropertyValue		maProp;
168cdf0e10cSrcweir 	com::sun::star::uno::Any&	mrAny;
169cdf0e10cSrcweir 	XMLConfigBaseContext*		mpBaseContext;
170cdf0e10cSrcweir public:
171cdf0e10cSrcweir 	XMLConfigBaseContext(SvXMLImport& rImport, sal_uInt16 nPrfx, const rtl::OUString& rLName,
172cdf0e10cSrcweir 									com::sun::star::uno::Any& rAny,
173cdf0e10cSrcweir 									XMLConfigBaseContext* pBaseContext);
174cdf0e10cSrcweir 	virtual ~XMLConfigBaseContext();
175cdf0e10cSrcweir 
AddPropertyValue()176cdf0e10cSrcweir 	void AddPropertyValue() { maProps.push_back(maProp); }
177cdf0e10cSrcweir };
178cdf0e10cSrcweir 
179cdf0e10cSrcweir //=============================================================================
180cdf0e10cSrcweir 
181cdf0e10cSrcweir class XMLConfigItemContext : public SvXMLImportContext
182cdf0e10cSrcweir {
183cdf0e10cSrcweir 	rtl::OUString				msType;
184cdf0e10cSrcweir 	rtl::OUString				msValue;
185cdf0e10cSrcweir 	uno::Sequence<sal_Int8>		maDecoded;
186cdf0e10cSrcweir 	com::sun::star::uno::Any&	mrAny;
187cdf0e10cSrcweir     const rtl::OUString         mrItemName;
188cdf0e10cSrcweir 	XMLConfigBaseContext*		mpBaseContext;
189cdf0e10cSrcweir 
190cdf0e10cSrcweir public:
191cdf0e10cSrcweir 	XMLConfigItemContext(SvXMLImport& rImport, sal_uInt16 nPrfx, const rtl::OUString& rLName,
192cdf0e10cSrcweir 									const ::com::sun::star::uno::Reference<
193cdf0e10cSrcweir 									::com::sun::star::xml::sax::XAttributeList>& xAttrList,
194cdf0e10cSrcweir 									com::sun::star::uno::Any& rAny,
195cdf0e10cSrcweir                                     const rtl::OUString& rItemName,
196cdf0e10cSrcweir 									XMLConfigBaseContext* pBaseContext);
197cdf0e10cSrcweir 	virtual ~XMLConfigItemContext();
198cdf0e10cSrcweir 
199cdf0e10cSrcweir 	virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
200cdf0e10cSrcweir 													const rtl::OUString& rLocalName,
201cdf0e10cSrcweir 													const ::com::sun::star::uno::Reference<
202cdf0e10cSrcweir 									  	::com::sun::star::xml::sax::XAttributeList>& xAttrList );
203cdf0e10cSrcweir 	virtual void Characters( const ::rtl::OUString& rChars );
204cdf0e10cSrcweir 
205cdf0e10cSrcweir 	virtual void EndElement();
206cdf0e10cSrcweir 
207cdf0e10cSrcweir     virtual void ManipulateConfigItem();
208cdf0e10cSrcweir };
209cdf0e10cSrcweir 
210cdf0e10cSrcweir //=============================================================================
211cdf0e10cSrcweir 
212cdf0e10cSrcweir class XMLConfigItemSetContext : public XMLConfigBaseContext
213cdf0e10cSrcweir {
214cdf0e10cSrcweir public:
215cdf0e10cSrcweir 	XMLConfigItemSetContext(SvXMLImport& rImport, sal_uInt16 nPrfx, const rtl::OUString& rLName,
216cdf0e10cSrcweir 									const ::com::sun::star::uno::Reference<
217cdf0e10cSrcweir 									::com::sun::star::xml::sax::XAttributeList>& xAttrList,
218cdf0e10cSrcweir 									com::sun::star::uno::Any& rAny,
219cdf0e10cSrcweir 									XMLConfigBaseContext* pBaseContext);
220cdf0e10cSrcweir 	virtual ~XMLConfigItemSetContext();
221cdf0e10cSrcweir 
222cdf0e10cSrcweir 	virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
223cdf0e10cSrcweir 													const rtl::OUString& rLocalName,
224cdf0e10cSrcweir 													const ::com::sun::star::uno::Reference<
225cdf0e10cSrcweir 									  	::com::sun::star::xml::sax::XAttributeList>& xAttrList );
226cdf0e10cSrcweir 
227cdf0e10cSrcweir 	virtual void EndElement();
228cdf0e10cSrcweir };
229cdf0e10cSrcweir 
230cdf0e10cSrcweir //=============================================================================
231cdf0e10cSrcweir 
232cdf0e10cSrcweir class XMLConfigItemMapNamedContext : public XMLConfigBaseContext
233cdf0e10cSrcweir {
234cdf0e10cSrcweir public:
235cdf0e10cSrcweir 	XMLConfigItemMapNamedContext(SvXMLImport& rImport, sal_uInt16 nPrfx, const rtl::OUString& rLName,
236cdf0e10cSrcweir 									const ::com::sun::star::uno::Reference<
237cdf0e10cSrcweir 									::com::sun::star::xml::sax::XAttributeList>& xAttrList,
238cdf0e10cSrcweir 									com::sun::star::uno::Any& rAny,
239cdf0e10cSrcweir 									XMLConfigBaseContext* pBaseContext);
240cdf0e10cSrcweir 	virtual ~XMLConfigItemMapNamedContext();
241cdf0e10cSrcweir 
242cdf0e10cSrcweir 	virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
243cdf0e10cSrcweir 													const rtl::OUString& rLocalName,
244cdf0e10cSrcweir 													const ::com::sun::star::uno::Reference<
245cdf0e10cSrcweir 									  	::com::sun::star::xml::sax::XAttributeList>& xAttrList );
246cdf0e10cSrcweir 
247cdf0e10cSrcweir 	virtual void EndElement();
248cdf0e10cSrcweir };
249cdf0e10cSrcweir 
250cdf0e10cSrcweir //=============================================================================
251cdf0e10cSrcweir 
252cdf0e10cSrcweir class XMLConfigItemMapIndexedContext : public XMLConfigBaseContext
253cdf0e10cSrcweir {
254cdf0e10cSrcweir private:
255cdf0e10cSrcweir 	rtl::OUString maConfigItemName;
256cdf0e10cSrcweir 
257cdf0e10cSrcweir public:
258cdf0e10cSrcweir 	XMLConfigItemMapIndexedContext(SvXMLImport& rImport, sal_uInt16 nPrfx,
259cdf0e10cSrcweir 									const rtl::OUString& rLName,
260cdf0e10cSrcweir 									const ::com::sun::star::uno::Reference<
261cdf0e10cSrcweir 									::com::sun::star::xml::sax::XAttributeList>& xAttrList,
262cdf0e10cSrcweir 									com::sun::star::uno::Any& rAny,
263cdf0e10cSrcweir 									const rtl::OUString& rConfigItemName,
264cdf0e10cSrcweir 									XMLConfigBaseContext* pBaseContext);
265cdf0e10cSrcweir 	virtual ~XMLConfigItemMapIndexedContext();
266cdf0e10cSrcweir 
267cdf0e10cSrcweir 	virtual SvXMLImportContext *CreateChildContext( sal_uInt16 nPrefix,
268cdf0e10cSrcweir 													const rtl::OUString& rLocalName,
269cdf0e10cSrcweir 													const ::com::sun::star::uno::Reference<
270cdf0e10cSrcweir 										::com::sun::star::xml::sax::XAttributeList>& xAttrList );
271cdf0e10cSrcweir 
272cdf0e10cSrcweir 	virtual void EndElement();
273cdf0e10cSrcweir };
274cdf0e10cSrcweir 
275cdf0e10cSrcweir //=============================================================================
276cdf0e10cSrcweir 
CreateSettingsContext(SvXMLImport & rImport,sal_uInt16 p_nPrefix,const rtl::OUString & rLocalName,const uno::Reference<xml::sax::XAttributeList> & xAttrList,beans::PropertyValue & rProp,XMLConfigBaseContext * pBaseContext)277cdf0e10cSrcweir SvXMLImportContext *CreateSettingsContext(SvXMLImport& rImport, sal_uInt16 p_nPrefix,
278cdf0e10cSrcweir 						const rtl::OUString& rLocalName,
279cdf0e10cSrcweir 						const uno::Reference<xml::sax::XAttributeList>& xAttrList,
280cdf0e10cSrcweir 						beans::PropertyValue& rProp, XMLConfigBaseContext* pBaseContext)
281cdf0e10cSrcweir {
282cdf0e10cSrcweir 	SvXMLImportContext *pContext = 0;
283cdf0e10cSrcweir 
284cdf0e10cSrcweir 	rProp.Name = rtl::OUString();
285cdf0e10cSrcweir 	sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
286cdf0e10cSrcweir 	for( sal_Int16 i=0; i < nAttrCount; i++ )
287cdf0e10cSrcweir 	{
288cdf0e10cSrcweir 		rtl::OUString sAttrName = xAttrList->getNameByIndex( i );
289cdf0e10cSrcweir 		rtl::OUString aLocalName;
290cdf0e10cSrcweir 		sal_uInt16 nPrefix = rImport.GetNamespaceMap().GetKeyByAttrName(
291cdf0e10cSrcweir 											sAttrName, &aLocalName );
292cdf0e10cSrcweir 		rtl::OUString sValue = xAttrList->getValueByIndex( i );
293cdf0e10cSrcweir 
294cdf0e10cSrcweir 		if (nPrefix == XML_NAMESPACE_CONFIG)
295cdf0e10cSrcweir 		{
296cdf0e10cSrcweir 			if (IsXMLToken(aLocalName, XML_NAME))
297cdf0e10cSrcweir 				rProp.Name = sValue;
298cdf0e10cSrcweir 		}
299cdf0e10cSrcweir 	}
300cdf0e10cSrcweir 
301cdf0e10cSrcweir 	if (p_nPrefix == XML_NAMESPACE_CONFIG)
302cdf0e10cSrcweir 	{
303cdf0e10cSrcweir 		if (IsXMLToken(rLocalName, XML_CONFIG_ITEM))
304cdf0e10cSrcweir 			pContext = new XMLConfigItemContext(rImport, p_nPrefix, rLocalName, xAttrList, rProp.Value, rProp.Name, pBaseContext);
305cdf0e10cSrcweir 		else if((IsXMLToken(rLocalName, XML_CONFIG_ITEM_SET)) ||
306cdf0e10cSrcweir 				(IsXMLToken(rLocalName, XML_CONFIG_ITEM_MAP_ENTRY)) )
307cdf0e10cSrcweir 			pContext = new XMLConfigItemSetContext(rImport, p_nPrefix, rLocalName, xAttrList, rProp.Value, pBaseContext);
308cdf0e10cSrcweir 		else if(IsXMLToken(rLocalName, XML_CONFIG_ITEM_MAP_NAMED))
309cdf0e10cSrcweir 			pContext = new XMLConfigItemMapNamedContext(rImport, p_nPrefix, rLocalName, xAttrList, rProp.Value, pBaseContext);
310cdf0e10cSrcweir 		else if(IsXMLToken(rLocalName, XML_CONFIG_ITEM_MAP_INDEXED))
311cdf0e10cSrcweir 			pContext = new XMLConfigItemMapIndexedContext(rImport, p_nPrefix, rLocalName, xAttrList, rProp.Value, rProp.Name, pBaseContext);
312cdf0e10cSrcweir 	}
313cdf0e10cSrcweir 
314cdf0e10cSrcweir 	if( !pContext )
315cdf0e10cSrcweir 		pContext = new SvXMLImportContext( rImport, p_nPrefix, rLocalName );
316cdf0e10cSrcweir 
317cdf0e10cSrcweir 	return pContext;
318cdf0e10cSrcweir }
319cdf0e10cSrcweir 
320cdf0e10cSrcweir //=============================================================================
321cdf0e10cSrcweir namespace
322cdf0e10cSrcweir {
323cdf0e10cSrcweir     struct SettingsGroup
324cdf0e10cSrcweir     {
325cdf0e10cSrcweir         ::rtl::OUString sGroupName;
326cdf0e10cSrcweir         uno::Any        aSettings;
327cdf0e10cSrcweir 
SettingsGroup__anona11987400111::SettingsGroup328cdf0e10cSrcweir         SettingsGroup()
329cdf0e10cSrcweir             :sGroupName()
330cdf0e10cSrcweir             ,aSettings()
331cdf0e10cSrcweir         {
332cdf0e10cSrcweir         }
333cdf0e10cSrcweir 
SettingsGroup__anona11987400111::SettingsGroup334cdf0e10cSrcweir         SettingsGroup( const ::rtl::OUString& _rGroupName, const uno::Any& _rSettings )
335cdf0e10cSrcweir             :sGroupName( _rGroupName )
336cdf0e10cSrcweir             ,aSettings( _rSettings )
337cdf0e10cSrcweir         {
338cdf0e10cSrcweir         }
339cdf0e10cSrcweir     };
340cdf0e10cSrcweir }
341cdf0e10cSrcweir 
342cdf0e10cSrcweir struct XMLDocumentSettingsContext_Data
343cdf0e10cSrcweir {
344cdf0e10cSrcweir 	com::sun::star::uno::Any	    aViewProps;
345cdf0e10cSrcweir 	com::sun::star::uno::Any	    aConfigProps;
346cdf0e10cSrcweir     ::std::list< SettingsGroup >    aDocSpecificSettings;
347cdf0e10cSrcweir };
348cdf0e10cSrcweir 
349cdf0e10cSrcweir //=============================================================================
350cdf0e10cSrcweir 
XMLDocumentSettingsContext(SvXMLImport & rImport,sal_uInt16 nPrfx,const rtl::OUString & rLName,const uno::Reference<xml::sax::XAttributeList> &)351cdf0e10cSrcweir XMLDocumentSettingsContext::XMLDocumentSettingsContext(SvXMLImport& rImport, sal_uInt16 nPrfx, const rtl::OUString& rLName,
352cdf0e10cSrcweir 					const uno::Reference<xml::sax::XAttributeList>& )
353cdf0e10cSrcweir 	: SvXMLImportContext( rImport, nPrfx, rLName )
354cdf0e10cSrcweir     , m_pData( new XMLDocumentSettingsContext_Data )
355cdf0e10cSrcweir {
356cdf0e10cSrcweir 	// here are no attributes
357cdf0e10cSrcweir }
358cdf0e10cSrcweir 
~XMLDocumentSettingsContext()359cdf0e10cSrcweir XMLDocumentSettingsContext::~XMLDocumentSettingsContext()
360cdf0e10cSrcweir {
361cdf0e10cSrcweir }
362cdf0e10cSrcweir 
CreateChildContext(sal_uInt16 p_nPrefix,const rtl::OUString & rLocalName,const::com::sun::star::uno::Reference<::com::sun::star::xml::sax::XAttributeList> & xAttrList)363cdf0e10cSrcweir SvXMLImportContext *XMLDocumentSettingsContext::CreateChildContext( sal_uInt16 p_nPrefix,
364cdf0e10cSrcweir 									 const rtl::OUString& rLocalName,
365cdf0e10cSrcweir 									 const ::com::sun::star::uno::Reference<
366cdf0e10cSrcweir 									  	::com::sun::star::xml::sax::XAttributeList>& xAttrList )
367cdf0e10cSrcweir {
368cdf0e10cSrcweir 	SvXMLImportContext *pContext = 0;
369cdf0e10cSrcweir 	rtl::OUString sName;
370cdf0e10cSrcweir 
371cdf0e10cSrcweir 	sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
372cdf0e10cSrcweir 	for( sal_Int16 i=0; i < nAttrCount; i++ )
373cdf0e10cSrcweir 	{
374cdf0e10cSrcweir 		rtl::OUString sAttrName = xAttrList->getNameByIndex( i );
375cdf0e10cSrcweir 		rtl::OUString aLocalName;
376cdf0e10cSrcweir 		sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName(
377cdf0e10cSrcweir 											sAttrName, &aLocalName );
378cdf0e10cSrcweir 		rtl::OUString sValue = xAttrList->getValueByIndex( i );
379cdf0e10cSrcweir 
380cdf0e10cSrcweir 		if (nPrefix == XML_NAMESPACE_CONFIG)
381cdf0e10cSrcweir 		{
382cdf0e10cSrcweir 			if (IsXMLToken(aLocalName, XML_NAME))
383cdf0e10cSrcweir 				sName = sValue;
384cdf0e10cSrcweir 		}
385cdf0e10cSrcweir 	}
386cdf0e10cSrcweir 
387cdf0e10cSrcweir 	if (p_nPrefix == XML_NAMESPACE_CONFIG)
388cdf0e10cSrcweir 	{
389cdf0e10cSrcweir 		if (IsXMLToken(rLocalName, XML_CONFIG_ITEM_SET))
390cdf0e10cSrcweir 		{
391cdf0e10cSrcweir 			::rtl::OUString aLocalConfigName;
392cdf0e10cSrcweir 			sal_uInt16 nConfigPrefix =
393cdf0e10cSrcweir 				GetImport().GetNamespaceMap().GetKeyByAttrName(
394cdf0e10cSrcweir 											sName, &aLocalConfigName );
395cdf0e10cSrcweir 
396cdf0e10cSrcweir 			if( XML_NAMESPACE_OOO == nConfigPrefix )
397cdf0e10cSrcweir 			{
398cdf0e10cSrcweir 				if (IsXMLToken(aLocalConfigName, XML_VIEW_SETTINGS))
399cdf0e10cSrcweir 					pContext = new XMLConfigItemSetContext(GetImport(),
400cdf0e10cSrcweir 										p_nPrefix, rLocalName, xAttrList,
401cdf0e10cSrcweir 										m_pData->aViewProps, NULL);
402cdf0e10cSrcweir 				else if (IsXMLToken(aLocalConfigName,
403cdf0e10cSrcweir 												XML_CONFIGURATION_SETTINGS))
404cdf0e10cSrcweir 					pContext = new XMLConfigItemSetContext(GetImport(),
405cdf0e10cSrcweir 										p_nPrefix, rLocalName, xAttrList,
406cdf0e10cSrcweir 										m_pData->aConfigProps, NULL);
407cdf0e10cSrcweir                 else
408cdf0e10cSrcweir                 {
409cdf0e10cSrcweir                     m_pData->aDocSpecificSettings.push_back( SettingsGroup( aLocalConfigName, uno::Any() ) );
410cdf0e10cSrcweir 
411cdf0e10cSrcweir                     ::std::list< SettingsGroup >::reverse_iterator settingsPos =
412cdf0e10cSrcweir                         m_pData->aDocSpecificSettings.rbegin();
413cdf0e10cSrcweir 
414cdf0e10cSrcweir                     pContext = new XMLConfigItemSetContext(GetImport(),
415cdf0e10cSrcweir 										p_nPrefix, rLocalName, xAttrList,
416cdf0e10cSrcweir 										settingsPos->aSettings, NULL);
417cdf0e10cSrcweir                 }
418cdf0e10cSrcweir 			}
419cdf0e10cSrcweir 		}
420cdf0e10cSrcweir 	}
421cdf0e10cSrcweir 
422cdf0e10cSrcweir 	if( !pContext )
423cdf0e10cSrcweir 		pContext = new SvXMLImportContext( GetImport(), p_nPrefix, rLocalName );
424cdf0e10cSrcweir 
425cdf0e10cSrcweir 	return pContext;
426cdf0e10cSrcweir }
427cdf0e10cSrcweir 
EndElement()428cdf0e10cSrcweir void XMLDocumentSettingsContext::EndElement()
429cdf0e10cSrcweir {
430cdf0e10cSrcweir 	uno::Sequence<beans::PropertyValue> aSeqViewProps;
431cdf0e10cSrcweir 	if (m_pData->aViewProps >>= aSeqViewProps)
432cdf0e10cSrcweir 	{
433cdf0e10cSrcweir 		GetImport().SetViewSettings(aSeqViewProps);
434cdf0e10cSrcweir 		sal_Int32 i(aSeqViewProps.getLength() - 1);
435cdf0e10cSrcweir 		sal_Bool bFound(sal_False);
436cdf0e10cSrcweir 		while((i >= 0) && !bFound)
437cdf0e10cSrcweir 		{
438cdf0e10cSrcweir 			if (aSeqViewProps[i].Name.compareToAscii("Views") == 0)
439cdf0e10cSrcweir 			{
440cdf0e10cSrcweir 				bFound = sal_True;
441cdf0e10cSrcweir 				uno::Reference<container::XIndexAccess> xIndexAccess;
442cdf0e10cSrcweir 				if (aSeqViewProps[i].Value >>= xIndexAccess)
443cdf0e10cSrcweir 				{
444cdf0e10cSrcweir 					uno::Reference<document::XViewDataSupplier> xViewDataSupplier(GetImport().GetModel(), uno::UNO_QUERY);
445cdf0e10cSrcweir 					if (xViewDataSupplier.is())
446cdf0e10cSrcweir 						xViewDataSupplier->setViewData(xIndexAccess);
447cdf0e10cSrcweir 				}
448cdf0e10cSrcweir 			}
449cdf0e10cSrcweir 			else
450cdf0e10cSrcweir 				i--;
451cdf0e10cSrcweir 		}
452cdf0e10cSrcweir 	}
453cdf0e10cSrcweir 
454cdf0e10cSrcweir     sal_Bool bLoadDocPrinter( sal_True );
455cdf0e10cSrcweir     ::comphelper::ConfigurationHelper::readDirectKey(
456cdf0e10cSrcweir         ::comphelper::getProcessServiceFactory(),
457cdf0e10cSrcweir         C2U("org.openoffice.Office.Common/"), C2U("Save/Document"), C2U("LoadPrinter"),
458cdf0e10cSrcweir         ::comphelper::ConfigurationHelper::E_READONLY ) >>= bLoadDocPrinter;
459cdf0e10cSrcweir     uno::Sequence<beans::PropertyValue> aSeqConfigProps;
460cdf0e10cSrcweir     if ( m_pData->aConfigProps >>= aSeqConfigProps )
461cdf0e10cSrcweir     {
462cdf0e10cSrcweir         if ( !bLoadDocPrinter )
463cdf0e10cSrcweir         {
464cdf0e10cSrcweir             sal_Int32 i = aSeqConfigProps.getLength() - 1;
465cdf0e10cSrcweir             int nFound = 0;
466cdf0e10cSrcweir 
467cdf0e10cSrcweir             while ( ( i >= 0 ) && nFound < 2 )
468cdf0e10cSrcweir             {
469cdf0e10cSrcweir                 rtl::OUString sProp( aSeqConfigProps[i].Name );
470cdf0e10cSrcweir 
471cdf0e10cSrcweir                 if ( sProp.compareToAscii("PrinterName") == 0 )
472cdf0e10cSrcweir                 {
473cdf0e10cSrcweir                     rtl::OUString sEmpty;
474cdf0e10cSrcweir                     aSeqConfigProps[i].Value = uno::makeAny( sEmpty );
475cdf0e10cSrcweir                     nFound++;
476cdf0e10cSrcweir                 }
477cdf0e10cSrcweir                 else if ( sProp.compareToAscii("PrinterSetup") == 0 )
478cdf0e10cSrcweir                 {
479cdf0e10cSrcweir                     uno::Sequence< sal_Int8 > aEmpty;
480cdf0e10cSrcweir                     aSeqConfigProps[i].Value = uno::makeAny( aEmpty );
481cdf0e10cSrcweir                     nFound++;
482cdf0e10cSrcweir                 }
483cdf0e10cSrcweir 
484cdf0e10cSrcweir                 i--;
485cdf0e10cSrcweir             }
486cdf0e10cSrcweir         }
487cdf0e10cSrcweir 
488cdf0e10cSrcweir         GetImport().SetConfigurationSettings( aSeqConfigProps );
489cdf0e10cSrcweir     }
490cdf0e10cSrcweir 
491cdf0e10cSrcweir     for (   ::std::list< SettingsGroup >::const_iterator settings = m_pData->aDocSpecificSettings.begin();
492cdf0e10cSrcweir             settings != m_pData->aDocSpecificSettings.end();
493cdf0e10cSrcweir             ++settings
494cdf0e10cSrcweir         )
495cdf0e10cSrcweir     {
496cdf0e10cSrcweir         uno::Sequence< beans::PropertyValue > aDocSettings;
497cdf0e10cSrcweir         OSL_VERIFY( settings->aSettings >>= aDocSettings );
498cdf0e10cSrcweir         GetImport().SetDocumentSpecificSettings( settings->sGroupName, aDocSettings );
499cdf0e10cSrcweir     }
500cdf0e10cSrcweir }
501cdf0e10cSrcweir 
502cdf0e10cSrcweir //=============================================================================
503cdf0e10cSrcweir 
XMLConfigBaseContext(SvXMLImport & rImport,sal_uInt16 nPrfx,const rtl::OUString & rLName,com::sun::star::uno::Any & rTempAny,XMLConfigBaseContext * pTempBaseContext)504cdf0e10cSrcweir XMLConfigBaseContext::XMLConfigBaseContext(SvXMLImport& rImport, sal_uInt16 nPrfx,
505cdf0e10cSrcweir 		const rtl::OUString& rLName, com::sun::star::uno::Any& rTempAny,
506cdf0e10cSrcweir 		XMLConfigBaseContext* pTempBaseContext)
507cdf0e10cSrcweir 	: SvXMLImportContext( rImport, nPrfx, rLName ),
508cdf0e10cSrcweir 	// #110680#
509cdf0e10cSrcweir 	maProps(rImport.getServiceFactory()),
510cdf0e10cSrcweir 	maProp(),
511cdf0e10cSrcweir 	mrAny(rTempAny),
512cdf0e10cSrcweir 	mpBaseContext(pTempBaseContext)
513cdf0e10cSrcweir {
514cdf0e10cSrcweir }
515cdf0e10cSrcweir 
~XMLConfigBaseContext()516cdf0e10cSrcweir XMLConfigBaseContext::~XMLConfigBaseContext()
517cdf0e10cSrcweir {
518cdf0e10cSrcweir }
519cdf0e10cSrcweir 
520cdf0e10cSrcweir //=============================================================================
521cdf0e10cSrcweir 
XMLConfigItemSetContext(SvXMLImport & rImport,sal_uInt16 nPrfx,const rtl::OUString & rLName,const::com::sun::star::uno::Reference<::com::sun::star::xml::sax::XAttributeList> &,com::sun::star::uno::Any & rAny,XMLConfigBaseContext * pBaseContext)522cdf0e10cSrcweir XMLConfigItemSetContext::XMLConfigItemSetContext(SvXMLImport& rImport, sal_uInt16 nPrfx,
523cdf0e10cSrcweir 									const rtl::OUString& rLName,
524cdf0e10cSrcweir 									const ::com::sun::star::uno::Reference<
525cdf0e10cSrcweir 									::com::sun::star::xml::sax::XAttributeList>&,
526cdf0e10cSrcweir 									com::sun::star::uno::Any& rAny,
527cdf0e10cSrcweir 									XMLConfigBaseContext* pBaseContext)
528cdf0e10cSrcweir 	: XMLConfigBaseContext( rImport, nPrfx, rLName, rAny, pBaseContext )
529cdf0e10cSrcweir {
530cdf0e10cSrcweir 	// here are no attributes
531cdf0e10cSrcweir }
532cdf0e10cSrcweir 
~XMLConfigItemSetContext()533cdf0e10cSrcweir XMLConfigItemSetContext::~XMLConfigItemSetContext()
534cdf0e10cSrcweir {
535cdf0e10cSrcweir }
536cdf0e10cSrcweir 
CreateChildContext(sal_uInt16 nPrefix,const rtl::OUString & rLocalName,const::com::sun::star::uno::Reference<::com::sun::star::xml::sax::XAttributeList> & xAttrList)537cdf0e10cSrcweir SvXMLImportContext *XMLConfigItemSetContext::CreateChildContext( sal_uInt16 nPrefix,
538cdf0e10cSrcweir 									 const rtl::OUString& rLocalName,
539cdf0e10cSrcweir 									 const ::com::sun::star::uno::Reference<
540cdf0e10cSrcweir 									  	::com::sun::star::xml::sax::XAttributeList>& xAttrList )
541cdf0e10cSrcweir {
542cdf0e10cSrcweir 	return CreateSettingsContext(GetImport(), nPrefix, rLocalName, xAttrList, maProp, this);
543cdf0e10cSrcweir }
544cdf0e10cSrcweir 
EndElement()545cdf0e10cSrcweir void XMLConfigItemSetContext::EndElement()
546cdf0e10cSrcweir {
547cdf0e10cSrcweir 	mrAny <<= maProps.GetSequence();
548cdf0e10cSrcweir 	if (mpBaseContext)
549cdf0e10cSrcweir 		mpBaseContext->AddPropertyValue();
550cdf0e10cSrcweir }
551cdf0e10cSrcweir 
552cdf0e10cSrcweir //=============================================================================
553cdf0e10cSrcweir 
XMLConfigItemContext(SvXMLImport & rImport,sal_uInt16 nPrfx,const rtl::OUString & rLName,const::com::sun::star::uno::Reference<::com::sun::star::xml::sax::XAttributeList> & xAttrList,com::sun::star::uno::Any & rTempAny,const rtl::OUString & rTempItemName,XMLConfigBaseContext * pTempBaseContext)554cdf0e10cSrcweir XMLConfigItemContext::XMLConfigItemContext(SvXMLImport& rImport, sal_uInt16 nPrfx, const rtl::OUString& rLName,
555cdf0e10cSrcweir 									const ::com::sun::star::uno::Reference<
556cdf0e10cSrcweir 									::com::sun::star::xml::sax::XAttributeList>& xAttrList,
557cdf0e10cSrcweir 									com::sun::star::uno::Any& rTempAny,
558cdf0e10cSrcweir                                     const rtl::OUString& rTempItemName,
559cdf0e10cSrcweir 									XMLConfigBaseContext* pTempBaseContext)
560cdf0e10cSrcweir 	: SvXMLImportContext(rImport, nPrfx, rLName),
561cdf0e10cSrcweir 	mrAny(rTempAny),
562cdf0e10cSrcweir     mrItemName(rTempItemName),
563cdf0e10cSrcweir 	mpBaseContext(pTempBaseContext)
564cdf0e10cSrcweir {
565cdf0e10cSrcweir 	sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
566cdf0e10cSrcweir 	for( sal_Int16 i=0; i < nAttrCount; i++ )
567cdf0e10cSrcweir 	{
568cdf0e10cSrcweir 		rtl::OUString sAttrName = xAttrList->getNameByIndex( i );
569cdf0e10cSrcweir 		rtl::OUString aLocalName;
570cdf0e10cSrcweir 		sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName(
571cdf0e10cSrcweir 											sAttrName, &aLocalName );
572cdf0e10cSrcweir 		rtl::OUString sValue = xAttrList->getValueByIndex( i );
573cdf0e10cSrcweir 
574cdf0e10cSrcweir 		if (nPrefix == XML_NAMESPACE_CONFIG)
575cdf0e10cSrcweir 		{
576cdf0e10cSrcweir 			if (IsXMLToken(aLocalName, XML_TYPE))
577cdf0e10cSrcweir 				msType = sValue;
578cdf0e10cSrcweir 		}
579cdf0e10cSrcweir 	}
580cdf0e10cSrcweir }
581cdf0e10cSrcweir 
~XMLConfigItemContext()582cdf0e10cSrcweir XMLConfigItemContext::~XMLConfigItemContext()
583cdf0e10cSrcweir {
584cdf0e10cSrcweir }
585cdf0e10cSrcweir 
CreateChildContext(sal_uInt16 nPrefix,const rtl::OUString & rLocalName,const::com::sun::star::uno::Reference<::com::sun::star::xml::sax::XAttributeList> &)586cdf0e10cSrcweir SvXMLImportContext *XMLConfigItemContext::CreateChildContext( sal_uInt16 nPrefix,
587cdf0e10cSrcweir 													const rtl::OUString& rLocalName,
588cdf0e10cSrcweir 													const ::com::sun::star::uno::Reference<
589cdf0e10cSrcweir 									  	::com::sun::star::xml::sax::XAttributeList>& )
590cdf0e10cSrcweir {
591cdf0e10cSrcweir 	SvXMLImportContext* pContext = new SvXMLImportContext(GetImport(), nPrefix, rLocalName);
592cdf0e10cSrcweir 	return pContext;
593cdf0e10cSrcweir }
594cdf0e10cSrcweir 
Characters(const::rtl::OUString & rChars)595cdf0e10cSrcweir void XMLConfigItemContext::Characters( const ::rtl::OUString& rChars )
596cdf0e10cSrcweir {
597cdf0e10cSrcweir 	if (IsXMLToken(msType, XML_BASE64BINARY))
598cdf0e10cSrcweir 	{
599cdf0e10cSrcweir 		rtl::OUString sTrimmedChars( rChars.trim() );
600cdf0e10cSrcweir 		if( sTrimmedChars.getLength() )
601cdf0e10cSrcweir 		{
602cdf0e10cSrcweir 			rtl::OUString sChars;
603*24c56ab9SHerbert Dürr 			if( !msValue.isEmpty() )
604cdf0e10cSrcweir 			{
605cdf0e10cSrcweir 				sChars = msValue;
606cdf0e10cSrcweir 				sChars += sTrimmedChars;
607cdf0e10cSrcweir 				msValue = rtl::OUString();
608cdf0e10cSrcweir 			}
609cdf0e10cSrcweir 			else
610cdf0e10cSrcweir 			{
611cdf0e10cSrcweir 				sChars = sTrimmedChars;
612cdf0e10cSrcweir 			}
613cdf0e10cSrcweir 			uno::Sequence<sal_Int8> aBuffer((sChars.getLength() / 4) * 3 );
614cdf0e10cSrcweir 			sal_Int32 nCharsDecoded =
615cdf0e10cSrcweir 				GetImport().GetMM100UnitConverter().
616cdf0e10cSrcweir 					decodeBase64SomeChars( aBuffer, sChars );
617cdf0e10cSrcweir 			sal_uInt32 nStartPos(maDecoded.getLength());
618cdf0e10cSrcweir 			sal_uInt32 nCount(aBuffer.getLength());
619cdf0e10cSrcweir 			maDecoded.realloc(nStartPos + nCount);
620cdf0e10cSrcweir 			sal_Int8* pDecoded = maDecoded.getArray();
621cdf0e10cSrcweir 			sal_Int8* pBuffer = aBuffer.getArray();
622cdf0e10cSrcweir 			for (sal_uInt32 i = 0; i < nCount; i++, pBuffer++)
623cdf0e10cSrcweir 				pDecoded[nStartPos + i] = *pBuffer;
624cdf0e10cSrcweir 			if( nCharsDecoded != sChars.getLength() )
625cdf0e10cSrcweir 				msValue = sChars.copy( nCharsDecoded );
626cdf0e10cSrcweir 		}
627cdf0e10cSrcweir 	}
628cdf0e10cSrcweir 	else
629cdf0e10cSrcweir 		msValue += rChars;
630cdf0e10cSrcweir }
631cdf0e10cSrcweir 
632cdf0e10cSrcweir 
EndElement()633cdf0e10cSrcweir void XMLConfigItemContext::EndElement()
634cdf0e10cSrcweir {
635cdf0e10cSrcweir 	if (mpBaseContext)
636cdf0e10cSrcweir 	{
637cdf0e10cSrcweir 		if (IsXMLToken(msType, XML_BOOLEAN))
638cdf0e10cSrcweir 		{
639cdf0e10cSrcweir 			sal_Bool bValue(sal_False);
640cdf0e10cSrcweir 			if (IsXMLToken(msValue, XML_TRUE))
641cdf0e10cSrcweir 				bValue = sal_True;
642cdf0e10cSrcweir 			mrAny <<= bValue;
643cdf0e10cSrcweir 		}
644cdf0e10cSrcweir 		else if (IsXMLToken(msType, XML_BYTE))
645cdf0e10cSrcweir 		{
646cdf0e10cSrcweir 			sal_Int32 nValue(0);
647cdf0e10cSrcweir 			SvXMLUnitConverter::convertNumber(nValue, msValue);
648cdf0e10cSrcweir 			mrAny <<= static_cast<sal_Int8>(nValue);
649cdf0e10cSrcweir 		}
650cdf0e10cSrcweir 		else if (IsXMLToken(msType, XML_SHORT))
651cdf0e10cSrcweir 		{
652cdf0e10cSrcweir 			sal_Int32 nValue(0);
653cdf0e10cSrcweir 			SvXMLUnitConverter::convertNumber(nValue, msValue);
654cdf0e10cSrcweir 			mrAny <<= static_cast<sal_Int16>(nValue);
655cdf0e10cSrcweir 		}
656cdf0e10cSrcweir 		else if (IsXMLToken(msType, XML_INT))
657cdf0e10cSrcweir 		{
658cdf0e10cSrcweir 			sal_Int32 nValue(0);
659cdf0e10cSrcweir 			SvXMLUnitConverter::convertNumber(nValue, msValue);
660cdf0e10cSrcweir 			mrAny <<= nValue;
661cdf0e10cSrcweir 		}
662cdf0e10cSrcweir 		else if (IsXMLToken(msType, XML_LONG))
663cdf0e10cSrcweir 		{
664cdf0e10cSrcweir 			sal_Int64 nValue(msValue.toInt64());
665cdf0e10cSrcweir 			mrAny <<= nValue;
666cdf0e10cSrcweir 		}
667cdf0e10cSrcweir 		else if (IsXMLToken(msType, XML_DOUBLE))
668cdf0e10cSrcweir 		{
669cdf0e10cSrcweir 			double fValue(0.0);
670cdf0e10cSrcweir 			SvXMLUnitConverter::convertDouble(fValue, msValue);
671cdf0e10cSrcweir 			mrAny <<= fValue;
672cdf0e10cSrcweir 		}
673cdf0e10cSrcweir 		else if (IsXMLToken(msType, XML_STRING))
674cdf0e10cSrcweir 		{
675cdf0e10cSrcweir 			mrAny <<= msValue;
676cdf0e10cSrcweir 		}
677cdf0e10cSrcweir 		else if (IsXMLToken(msType, XML_DATETIME))
678cdf0e10cSrcweir 		{
679cdf0e10cSrcweir 			util::DateTime aDateTime;
680cdf0e10cSrcweir 			SvXMLUnitConverter::convertDateTime(aDateTime, msValue);
681cdf0e10cSrcweir 			mrAny <<= aDateTime;
682cdf0e10cSrcweir 		}
683cdf0e10cSrcweir 		else if (IsXMLToken(msType, XML_BASE64BINARY))
684cdf0e10cSrcweir 		{
685cdf0e10cSrcweir 			mrAny <<= maDecoded;
686cdf0e10cSrcweir 		}
687cdf0e10cSrcweir 		else {
688cdf0e10cSrcweir 			DBG_ERROR("wrong type");
689cdf0e10cSrcweir         }
690cdf0e10cSrcweir 
691cdf0e10cSrcweir         ManipulateConfigItem();
692cdf0e10cSrcweir 
693cdf0e10cSrcweir 		mpBaseContext->AddPropertyValue();
694cdf0e10cSrcweir 	}
695cdf0e10cSrcweir 	else {
696cdf0e10cSrcweir 		DBG_ERROR("no BaseContext");
697cdf0e10cSrcweir     }
698cdf0e10cSrcweir }
699cdf0e10cSrcweir 
700cdf0e10cSrcweir /** There are some instances where there is a mismatch between API and
701cdf0e10cSrcweir  * XML mapping of a setting. In this case, this method allows us to
702cdf0e10cSrcweir  * manipulate the values accordingly. */
ManipulateConfigItem()703cdf0e10cSrcweir void XMLConfigItemContext::ManipulateConfigItem()
704cdf0e10cSrcweir {
705cdf0e10cSrcweir     if( mrItemName.equalsAsciiL(
706cdf0e10cSrcweir             RTL_CONSTASCII_STRINGPARAM( "PrinterIndependentLayout" ) ) )
707cdf0e10cSrcweir     {
708cdf0e10cSrcweir         rtl::OUString sValue;
709cdf0e10cSrcweir         mrAny >>= sValue;
710cdf0e10cSrcweir 
711cdf0e10cSrcweir         sal_Int16 nTmp = document::PrinterIndependentLayout::HIGH_RESOLUTION;
712cdf0e10cSrcweir 
713cdf0e10cSrcweir         if( sValue.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("enabled")) ||
714cdf0e10cSrcweir             sValue.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("low-resolution")) )
715cdf0e10cSrcweir         {
716cdf0e10cSrcweir             nTmp = document::PrinterIndependentLayout::LOW_RESOLUTION;
717cdf0e10cSrcweir         }
718cdf0e10cSrcweir         else if( sValue.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("disabled")) )
719cdf0e10cSrcweir         {
720cdf0e10cSrcweir             nTmp = document::PrinterIndependentLayout::DISABLED;
721cdf0e10cSrcweir         }
722cdf0e10cSrcweir         // else: default to high_resolution
723cdf0e10cSrcweir 
724cdf0e10cSrcweir         mrAny <<= nTmp;
725cdf0e10cSrcweir     }
726cdf0e10cSrcweir 	else if( (mrItemName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "ColorTableURL" ) ) ) ||
727cdf0e10cSrcweir 			 (mrItemName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "LineEndTableURL" ) ) ) ||
728cdf0e10cSrcweir 			 (mrItemName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "HatchTableURL" ) ) ) ||
729cdf0e10cSrcweir 			 (mrItemName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "DashTableURL" ) ) ) ||
730cdf0e10cSrcweir 			 (mrItemName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "GradientTableURL") ) ) ||
731cdf0e10cSrcweir 			 (mrItemName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "BitmapTableURL" ) ) ) )
732cdf0e10cSrcweir 	{
733cdf0e10cSrcweir 		if( GetImport().getServiceFactory().is() ) try
734cdf0e10cSrcweir 		{
735cdf0e10cSrcweir 			uno::Reference< util::XStringSubstitution > xStringSubsitution(
736cdf0e10cSrcweir 				GetImport().getServiceFactory()->
737cdf0e10cSrcweir 					createInstance(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.util.PathSubstitution" ) ) ), uno::UNO_QUERY );
738cdf0e10cSrcweir 
739cdf0e10cSrcweir 			if( xStringSubsitution.is() )
740cdf0e10cSrcweir 			{
741cdf0e10cSrcweir 				rtl::OUString aURL;
742cdf0e10cSrcweir 				mrAny >>= aURL;
743cdf0e10cSrcweir 				aURL = xStringSubsitution->substituteVariables( aURL, sal_False );
744cdf0e10cSrcweir 				mrAny <<= aURL;
745cdf0e10cSrcweir 			}
746cdf0e10cSrcweir 		}
747cdf0e10cSrcweir 		catch( uno::Exception& )
748cdf0e10cSrcweir 		{
749cdf0e10cSrcweir 		}
750cdf0e10cSrcweir 	}
751cdf0e10cSrcweir }
752cdf0e10cSrcweir 
753cdf0e10cSrcweir 
754cdf0e10cSrcweir //=============================================================================
755cdf0e10cSrcweir 
XMLConfigItemMapNamedContext(SvXMLImport & rImport,sal_uInt16 nPrfx,const rtl::OUString & rLName,const::com::sun::star::uno::Reference<::com::sun::star::xml::sax::XAttributeList> &,com::sun::star::uno::Any & rAny,XMLConfigBaseContext * pBaseContext)756cdf0e10cSrcweir XMLConfigItemMapNamedContext::XMLConfigItemMapNamedContext(SvXMLImport& rImport, sal_uInt16 nPrfx, const rtl::OUString& rLName,
757cdf0e10cSrcweir 									const ::com::sun::star::uno::Reference<
758cdf0e10cSrcweir 									::com::sun::star::xml::sax::XAttributeList>&,
759cdf0e10cSrcweir 									com::sun::star::uno::Any& rAny,
760cdf0e10cSrcweir 									XMLConfigBaseContext* pBaseContext)
761cdf0e10cSrcweir 	: XMLConfigBaseContext(rImport, nPrfx, rLName, rAny, pBaseContext)
762cdf0e10cSrcweir {
763cdf0e10cSrcweir }
764cdf0e10cSrcweir 
~XMLConfigItemMapNamedContext()765cdf0e10cSrcweir XMLConfigItemMapNamedContext::~XMLConfigItemMapNamedContext()
766cdf0e10cSrcweir {
767cdf0e10cSrcweir }
768cdf0e10cSrcweir 
CreateChildContext(sal_uInt16 nPrefix,const rtl::OUString & rLocalName,const::com::sun::star::uno::Reference<::com::sun::star::xml::sax::XAttributeList> & xAttrList)769cdf0e10cSrcweir SvXMLImportContext *XMLConfigItemMapNamedContext::CreateChildContext( sal_uInt16 nPrefix,
770cdf0e10cSrcweir 													const rtl::OUString& rLocalName,
771cdf0e10cSrcweir 													const ::com::sun::star::uno::Reference<
772cdf0e10cSrcweir 									  	::com::sun::star::xml::sax::XAttributeList>& xAttrList )
773cdf0e10cSrcweir {
774cdf0e10cSrcweir 	return CreateSettingsContext(GetImport(), nPrefix, rLocalName, xAttrList, maProp, this);
775cdf0e10cSrcweir }
776cdf0e10cSrcweir 
EndElement()777cdf0e10cSrcweir void XMLConfigItemMapNamedContext::EndElement()
778cdf0e10cSrcweir {
779cdf0e10cSrcweir 	if (mpBaseContext)
780cdf0e10cSrcweir 	{
781cdf0e10cSrcweir 		mrAny <<= maProps.GetNameContainer();
782cdf0e10cSrcweir 		mpBaseContext->AddPropertyValue();
783cdf0e10cSrcweir 	}
784cdf0e10cSrcweir 	else {
785cdf0e10cSrcweir 		DBG_ERROR("no BaseContext");
786cdf0e10cSrcweir     }
787cdf0e10cSrcweir }
788cdf0e10cSrcweir 
789cdf0e10cSrcweir //=============================================================================
790cdf0e10cSrcweir 
XMLConfigItemMapIndexedContext(SvXMLImport & rImport,sal_uInt16 nPrfx,const rtl::OUString & rLName,const::com::sun::star::uno::Reference<::com::sun::star::xml::sax::XAttributeList> &,com::sun::star::uno::Any & rAny,const::rtl::OUString & rConfigItemName,XMLConfigBaseContext * pBaseContext)791cdf0e10cSrcweir XMLConfigItemMapIndexedContext::XMLConfigItemMapIndexedContext(SvXMLImport& rImport, sal_uInt16 nPrfx,
792cdf0e10cSrcweir 									const rtl::OUString& rLName,
793cdf0e10cSrcweir 									const ::com::sun::star::uno::Reference<
794cdf0e10cSrcweir 									::com::sun::star::xml::sax::XAttributeList>&,
795cdf0e10cSrcweir 									com::sun::star::uno::Any& rAny,
796cdf0e10cSrcweir 									const ::rtl::OUString& rConfigItemName,
797cdf0e10cSrcweir 									XMLConfigBaseContext* pBaseContext)
798cdf0e10cSrcweir 	: XMLConfigBaseContext(rImport, nPrfx, rLName, rAny, pBaseContext),
799cdf0e10cSrcweir 	  maConfigItemName( rConfigItemName )
800cdf0e10cSrcweir {
801cdf0e10cSrcweir }
802cdf0e10cSrcweir 
~XMLConfigItemMapIndexedContext()803cdf0e10cSrcweir XMLConfigItemMapIndexedContext::~XMLConfigItemMapIndexedContext()
804cdf0e10cSrcweir {
805cdf0e10cSrcweir }
806cdf0e10cSrcweir 
CreateChildContext(sal_uInt16 nPrefix,const rtl::OUString & rLocalName,const::com::sun::star::uno::Reference<::com::sun::star::xml::sax::XAttributeList> & xAttrList)807cdf0e10cSrcweir SvXMLImportContext *XMLConfigItemMapIndexedContext::CreateChildContext( sal_uInt16 nPrefix,
808cdf0e10cSrcweir 													const rtl::OUString& rLocalName,
809cdf0e10cSrcweir 													const ::com::sun::star::uno::Reference<
810cdf0e10cSrcweir 										::com::sun::star::xml::sax::XAttributeList>& xAttrList )
811cdf0e10cSrcweir {
812cdf0e10cSrcweir 	return CreateSettingsContext(GetImport(), nPrefix, rLocalName, xAttrList, maProp, this);
813cdf0e10cSrcweir }
814cdf0e10cSrcweir 
EndElement()815cdf0e10cSrcweir void XMLConfigItemMapIndexedContext::EndElement()
816cdf0e10cSrcweir {
817cdf0e10cSrcweir 	if (mpBaseContext)
818cdf0e10cSrcweir 	{
819cdf0e10cSrcweir 		if( maConfigItemName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "ForbiddenCharacters" ) ) )
820cdf0e10cSrcweir 		{
821cdf0e10cSrcweir 			uno::Reference< i18n::XForbiddenCharacters > xForbChars;
822cdf0e10cSrcweir 
823cdf0e10cSrcweir 			// get the forbidden characters from the document
824cdf0e10cSrcweir 			uno::Reference< lang::XMultiServiceFactory > xFac( GetImport().GetModel(), uno::UNO_QUERY );
825cdf0e10cSrcweir 			if( xFac.is() )
826cdf0e10cSrcweir 			{
827cdf0e10cSrcweir 				uno::Reference< beans::XPropertySet > xProps( xFac->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.document.Settings" ) ) ), uno::UNO_QUERY );
828cdf0e10cSrcweir 				if( xProps.is() && xProps->getPropertySetInfo()->hasPropertyByName( maConfigItemName ) )
829cdf0e10cSrcweir 				{
830cdf0e10cSrcweir 					xProps->getPropertyValue( maConfigItemName ) >>= xForbChars;
831cdf0e10cSrcweir 				}
832cdf0e10cSrcweir 			}
833cdf0e10cSrcweir 
834cdf0e10cSrcweir 			if( xForbChars.is() )
835cdf0e10cSrcweir 			{
836cdf0e10cSrcweir 
837cdf0e10cSrcweir 				uno::Reference< container::XIndexAccess > xIndex( maProps.GetIndexContainer(), uno::UNO_QUERY );
838cdf0e10cSrcweir 
839cdf0e10cSrcweir 				const sal_Int32 nCount = xIndex->getCount();
840cdf0e10cSrcweir 				uno::Sequence < beans::PropertyValue > aProps;
841cdf0e10cSrcweir 				for (sal_Int32 i = 0; i < nCount; i++)
842cdf0e10cSrcweir 				{
843cdf0e10cSrcweir 					if ((xIndex->getByIndex( i ) >>= aProps) && (aProps.getLength() == XML_FORBIDDEN_CHARACTER_MAX ) )
844cdf0e10cSrcweir 					{
845cdf0e10cSrcweir 						beans::PropertyValue *pForChar = aProps.getArray();
846cdf0e10cSrcweir 						i18n::ForbiddenCharacters aForbid;
847cdf0e10cSrcweir 						lang::Locale aLocale;
848cdf0e10cSrcweir 						const rtl::OUString sLanguage  ( RTL_CONSTASCII_USTRINGPARAM ( "Language" ) );
849cdf0e10cSrcweir 						const rtl::OUString sCountry   ( RTL_CONSTASCII_USTRINGPARAM ( "Country" ) );
850cdf0e10cSrcweir 						const rtl::OUString sVariant   ( RTL_CONSTASCII_USTRINGPARAM ( "Variant" ) );
851cdf0e10cSrcweir 						const rtl::OUString sBeginLine ( RTL_CONSTASCII_USTRINGPARAM ( "BeginLine" ) );
852cdf0e10cSrcweir 						const rtl::OUString sEndLine   ( RTL_CONSTASCII_USTRINGPARAM ( "EndLine" ) );
853cdf0e10cSrcweir 						sal_Bool bHaveLanguage = sal_False, bHaveCountry = sal_False, bHaveVariant = sal_False,
854cdf0e10cSrcweir 								 bHaveBegin = sal_False, bHaveEnd = sal_False;
855cdf0e10cSrcweir 
856cdf0e10cSrcweir 						for ( sal_Int32 j = 0 ; j < XML_FORBIDDEN_CHARACTER_MAX ; j++ )
857cdf0e10cSrcweir 						{
858cdf0e10cSrcweir 							if (pForChar->Name.equals (sLanguage ) )
859cdf0e10cSrcweir 							{
860cdf0e10cSrcweir 								pForChar->Value >>= aLocale.Language;
861cdf0e10cSrcweir 								bHaveLanguage = sal_True;
862cdf0e10cSrcweir 							}
863cdf0e10cSrcweir 							else if (pForChar->Name.equals (sCountry ) )
864cdf0e10cSrcweir 							{
865cdf0e10cSrcweir 								pForChar->Value >>= aLocale.Country;
866cdf0e10cSrcweir 								bHaveCountry = sal_True;
867cdf0e10cSrcweir 							}
868cdf0e10cSrcweir 							else if (pForChar->Name.equals (sVariant ) )
869cdf0e10cSrcweir 							{
870cdf0e10cSrcweir 								pForChar->Value >>= aLocale.Variant;
871cdf0e10cSrcweir 								bHaveVariant = sal_True;
872cdf0e10cSrcweir 							}
873cdf0e10cSrcweir 							else if (pForChar->Name.equals (sBeginLine ) )
874cdf0e10cSrcweir 							{
875cdf0e10cSrcweir 								pForChar->Value >>= aForbid.beginLine;
876cdf0e10cSrcweir 								bHaveBegin = sal_True;
877cdf0e10cSrcweir 							}
878cdf0e10cSrcweir 							else if (pForChar->Name.equals (sEndLine ) )
879cdf0e10cSrcweir 							{
880cdf0e10cSrcweir 								pForChar->Value >>= aForbid.endLine;
881cdf0e10cSrcweir 								bHaveEnd = sal_True;
882cdf0e10cSrcweir 							}
883cdf0e10cSrcweir 							pForChar++;
884cdf0e10cSrcweir 						}
885cdf0e10cSrcweir 
886cdf0e10cSrcweir 						if ( bHaveLanguage && bHaveCountry && bHaveVariant && bHaveBegin && bHaveEnd )
887cdf0e10cSrcweir 						{
888cdf0e10cSrcweir 							try
889cdf0e10cSrcweir 							{
890cdf0e10cSrcweir 								xForbChars->setForbiddenCharacters( aLocale, aForbid );
891cdf0e10cSrcweir 							}
892cdf0e10cSrcweir 							catch( uno::Exception& )
893cdf0e10cSrcweir 							{
894cdf0e10cSrcweir 								DBG_ERROR( "Exception while importing forbidden characters" );
895cdf0e10cSrcweir 							}
896cdf0e10cSrcweir 						}
897cdf0e10cSrcweir 					}
898cdf0e10cSrcweir 				}
899cdf0e10cSrcweir 			}
900cdf0e10cSrcweir 			else
901cdf0e10cSrcweir 			{
902cdf0e10cSrcweir 				DBG_ERROR( "could not get the XForbiddenCharacters from document!" );
903cdf0e10cSrcweir 				mrAny <<= maProps.GetIndexContainer();
904cdf0e10cSrcweir 			}
905cdf0e10cSrcweir 		}
906cdf0e10cSrcweir 		else if( maConfigItemName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Symbols" ) ) )
907cdf0e10cSrcweir 		{
908cdf0e10cSrcweir 			uno::Reference< container::XIndexAccess > xIndex( maProps.GetIndexContainer(), uno::UNO_QUERY );
909cdf0e10cSrcweir 
910cdf0e10cSrcweir 			const sal_Int32 nCount = xIndex->getCount();
911cdf0e10cSrcweir 			uno::Sequence < beans::PropertyValue > aProps;
912cdf0e10cSrcweir 			uno::Sequence < formula::SymbolDescriptor > aSymbolList ( nCount );
913cdf0e10cSrcweir 
914cdf0e10cSrcweir 			formula::SymbolDescriptor *pDescriptor = aSymbolList.getArray();
915cdf0e10cSrcweir 
916cdf0e10cSrcweir 			const rtl::OUString sName     ( RTL_CONSTASCII_USTRINGPARAM ( "Name" ) );
917cdf0e10cSrcweir 			const rtl::OUString sExportName ( RTL_CONSTASCII_USTRINGPARAM ( "ExportName" ) );
918cdf0e10cSrcweir 			const rtl::OUString sFontName ( RTL_CONSTASCII_USTRINGPARAM ( "FontName" ) );
919cdf0e10cSrcweir 			const rtl::OUString sSymbolSet ( RTL_CONSTASCII_USTRINGPARAM ( "SymbolSet" ) );
920cdf0e10cSrcweir 			const rtl::OUString sCharacter ( RTL_CONSTASCII_USTRINGPARAM ( "Character" ) );
921cdf0e10cSrcweir 			const rtl::OUString sCharSet  ( RTL_CONSTASCII_USTRINGPARAM ( "CharSet" ) );
922cdf0e10cSrcweir 			const rtl::OUString sFamily   ( RTL_CONSTASCII_USTRINGPARAM ( "Family" ) );
923cdf0e10cSrcweir 			const rtl::OUString sPitch    ( RTL_CONSTASCII_USTRINGPARAM ( "Pitch" ) );
924cdf0e10cSrcweir 			const rtl::OUString sWeight   ( RTL_CONSTASCII_USTRINGPARAM ( "Weight" ) );
925cdf0e10cSrcweir 			const rtl::OUString sItalic   ( RTL_CONSTASCII_USTRINGPARAM ( "Italic" ) );
926cdf0e10cSrcweir 			sal_Int16 nNumFullEntries = 0;
927cdf0e10cSrcweir 
928cdf0e10cSrcweir 			for ( sal_Int32 i = 0; i < nCount; i++ )
929cdf0e10cSrcweir 			{
930cdf0e10cSrcweir 				if ((xIndex->getByIndex( i ) >>= aProps) && (aProps.getLength() == XML_SYMBOL_DESCRIPTOR_MAX ) )
931cdf0e10cSrcweir 				{
932cdf0e10cSrcweir 					sal_Bool bHaveName = sal_False, bHaveExportName = sal_False, bHaveCharSet = sal_False,
933cdf0e10cSrcweir 					 		 bHaveFontName = sal_False, bHaveFamily = sal_False, bHavePitch = sal_False,
934cdf0e10cSrcweir 					 		 bHaveWeight = sal_False, bHaveItalic = sal_False, bHaveSymbolSet = sal_False,
935cdf0e10cSrcweir 							 bHaveCharacter = sal_False;
936cdf0e10cSrcweir 					beans::PropertyValue *pSymbol = aProps.getArray();
937cdf0e10cSrcweir 
938cdf0e10cSrcweir 					for ( sal_Int32 j = 0 ; j < XML_SYMBOL_DESCRIPTOR_MAX ; j++ )
939cdf0e10cSrcweir 					{
940cdf0e10cSrcweir 						if (pSymbol->Name.equals ( sName ) )
941cdf0e10cSrcweir 						{
942cdf0e10cSrcweir 							pSymbol->Value >>= pDescriptor[nNumFullEntries].sName;
943cdf0e10cSrcweir 							bHaveName = sal_True;
944cdf0e10cSrcweir 						}
945cdf0e10cSrcweir 						else if (pSymbol->Name.equals (sExportName ) )
946cdf0e10cSrcweir 						{
947cdf0e10cSrcweir 							pSymbol->Value >>= pDescriptor[nNumFullEntries].sExportName;
948cdf0e10cSrcweir 							bHaveExportName = sal_True;
949cdf0e10cSrcweir 						}
950cdf0e10cSrcweir 						else if (pSymbol->Name.equals (sFontName ) )
951cdf0e10cSrcweir 						{
952cdf0e10cSrcweir 							pSymbol->Value >>= pDescriptor[nNumFullEntries].sFontName;
953cdf0e10cSrcweir 							bHaveFontName = sal_True;
954cdf0e10cSrcweir 						}
955cdf0e10cSrcweir 						else if (pSymbol->Name.equals (sCharSet ) )
956cdf0e10cSrcweir 						{
957cdf0e10cSrcweir 							pSymbol->Value >>= pDescriptor[nNumFullEntries].nCharSet;
958cdf0e10cSrcweir 							bHaveCharSet = sal_True;
959cdf0e10cSrcweir 						}
960cdf0e10cSrcweir 						else if (pSymbol->Name.equals (sFamily ) )
961cdf0e10cSrcweir 						{
962cdf0e10cSrcweir 							pSymbol->Value >>= pDescriptor[nNumFullEntries].nFamily;
963cdf0e10cSrcweir 							bHaveFamily = sal_True;
964cdf0e10cSrcweir 						}
965cdf0e10cSrcweir 						else if (pSymbol->Name.equals (sPitch ) )
966cdf0e10cSrcweir 						{
967cdf0e10cSrcweir 							pSymbol->Value >>= pDescriptor[nNumFullEntries].nPitch;
968cdf0e10cSrcweir 							bHavePitch = sal_True;
969cdf0e10cSrcweir 						}
970cdf0e10cSrcweir 						else if (pSymbol->Name.equals (sWeight ) )
971cdf0e10cSrcweir 						{
972cdf0e10cSrcweir 							pSymbol->Value >>= pDescriptor[nNumFullEntries].nWeight;
973cdf0e10cSrcweir 							bHaveWeight = sal_True;
974cdf0e10cSrcweir 						}
975cdf0e10cSrcweir 						else if (pSymbol->Name.equals (sItalic ) )
976cdf0e10cSrcweir 						{
977cdf0e10cSrcweir 							pSymbol->Value >>= pDescriptor[nNumFullEntries].nItalic;
978cdf0e10cSrcweir 							bHaveItalic = sal_True;
979cdf0e10cSrcweir 						}
980cdf0e10cSrcweir 						else if (pSymbol->Name.equals (sSymbolSet ) )
981cdf0e10cSrcweir 						{
982cdf0e10cSrcweir 							pSymbol->Value >>= pDescriptor[nNumFullEntries].sSymbolSet;
983cdf0e10cSrcweir 							bHaveSymbolSet = sal_True;
984cdf0e10cSrcweir 						}
985cdf0e10cSrcweir 						else if (pSymbol->Name.equals (sCharacter ) )
986cdf0e10cSrcweir 						{
987cdf0e10cSrcweir 							pSymbol->Value >>= pDescriptor[nNumFullEntries].nCharacter;
988cdf0e10cSrcweir 							bHaveCharacter = sal_True;
989cdf0e10cSrcweir 						}
990cdf0e10cSrcweir 						pSymbol++;
991cdf0e10cSrcweir 					}
992cdf0e10cSrcweir 					if ( bHaveName && bHaveExportName && bHaveCharSet && bHaveFontName && bHaveCharacter
993cdf0e10cSrcweir 						 && bHaveFamily && bHavePitch && bHaveWeight && bHaveItalic && bHaveSymbolSet)
994cdf0e10cSrcweir 						nNumFullEntries++;
995cdf0e10cSrcweir 				}
996cdf0e10cSrcweir 			}
997cdf0e10cSrcweir 			aSymbolList.realloc (nNumFullEntries);
998cdf0e10cSrcweir 			mrAny <<= aSymbolList;
999cdf0e10cSrcweir 		}
1000cdf0e10cSrcweir 		else
1001cdf0e10cSrcweir 		{
1002cdf0e10cSrcweir 			mrAny <<= maProps.GetIndexContainer();
1003cdf0e10cSrcweir 		}
1004cdf0e10cSrcweir 		mpBaseContext->AddPropertyValue();
1005cdf0e10cSrcweir 	}
1006cdf0e10cSrcweir 	else {
1007cdf0e10cSrcweir 		DBG_ERROR("no BaseContext");
1008cdf0e10cSrcweir     }
1009cdf0e10cSrcweir }
1010cdf0e10cSrcweir 
1011