Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <xmlscript/xmllib_imexp.hxx>
21 :
22 : #include <cppuhelper/implbase1.hxx>
23 :
24 : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
25 : #include <com/sun/star/container/XNameContainer.hpp>
26 : #include <com/sun/star/beans/XPropertySet.hpp>
27 :
28 : #include <com/sun/star/awt/XControlModel.hpp>
29 : #include <com/sun/star/awt/FontDescriptor.hpp>
30 :
31 : #include <com/sun/star/xml/input/XRoot.hpp>
32 :
33 : #include <vector>
34 :
35 :
36 : using namespace ::rtl;
37 : using namespace ::std;
38 : using namespace ::com::sun::star;
39 : using namespace ::com::sun::star::uno;
40 :
41 : namespace xmlscript
42 : {
43 : inline sal_Int32 toInt32( OUString const & rStr ) SAL_THROW(())
44 : {
45 : sal_Int32 nVal;
46 : if (rStr.getLength() > 2 && rStr[ 0 ] == '0' && rStr[ 1 ] == 'x')
47 : {
48 : nVal = rStr.copy( 2 ).toInt32( 16 );
49 : }
50 : else
51 : {
52 : nVal = rStr.toInt32();
53 : }
54 : return nVal;
55 : }
56 0 : inline bool getBoolAttr(
57 : sal_Bool * pRet, OUString const & rAttrName,
58 : Reference< xml::input::XAttributes > const & xAttributes, sal_Int32 uid )
59 : {
60 : OUString aValue(
61 0 : xAttributes->getValueByUidName( uid, rAttrName ) );
62 0 : if (!aValue.isEmpty())
63 : {
64 0 : if ( aValue == "true" )
65 : {
66 0 : *pRet = sal_True;
67 0 : return true;
68 : }
69 0 : else if ( aValue == "false" )
70 : {
71 0 : *pRet = sal_False;
72 0 : return true;
73 : }
74 : else
75 : {
76 0 : throw xml::sax::SAXException(rAttrName + ": no boolean value (true|false)!", Reference< XInterface >(), Any() );
77 : }
78 : }
79 0 : return false;
80 : }
81 :
82 : inline bool getStringAttr(
83 : OUString * pRet, OUString const & rAttrName,
84 : Reference< xml::input::XAttributes > const & xAttributes, sal_Int32 uid )
85 : {
86 : *pRet = xAttributes->getValueByUidName( uid, rAttrName );
87 : return (!pRet->isEmpty());
88 : }
89 :
90 : inline bool getLongAttr(
91 : sal_Int32 * pRet, OUString const & rAttrName,
92 : Reference< xml::input::XAttributes > const & xAttributes,
93 : sal_Int32 uid )
94 : {
95 : OUString aValue(
96 : xAttributes->getValueByUidName( uid, rAttrName ) );
97 : if (!aValue.isEmpty())
98 : {
99 : *pRet = toInt32( aValue );
100 : return true;
101 : }
102 : return false;
103 : }
104 :
105 : //==================================================================================================
106 : // Library import
107 :
108 : //==================================================================================================
109 : struct LibraryImport
110 : : public ::cppu::WeakImplHelper1< xml::input::XRoot >
111 : {
112 : friend class LibrariesElement;
113 : friend class LibraryElement;
114 :
115 : LibDescriptorArray* mpLibArray;
116 : LibDescriptor* mpLibDesc; // Single library mode
117 :
118 : sal_Int32 XMLNS_LIBRARY_UID;
119 : sal_Int32 XMLNS_XLINK_UID;
120 :
121 : public:
122 0 : inline LibraryImport( LibDescriptorArray* pLibArray )
123 : SAL_THROW(())
124 : : mpLibArray( pLibArray )
125 0 : , mpLibDesc( NULL ) {}
126 : // Single library mode
127 0 : inline LibraryImport( LibDescriptor* pLibDesc )
128 : SAL_THROW(())
129 : : mpLibArray( NULL )
130 0 : , mpLibDesc( pLibDesc ) {}
131 : virtual ~LibraryImport()
132 : SAL_THROW(());
133 :
134 : // XRoot
135 : virtual void SAL_CALL startDocument(
136 : Reference< xml::input::XNamespaceMapping > const & xNamespaceMapping )
137 : throw (xml::sax::SAXException, RuntimeException);
138 : virtual void SAL_CALL endDocument()
139 : throw (xml::sax::SAXException, RuntimeException);
140 : virtual void SAL_CALL processingInstruction(
141 : OUString const & rTarget, OUString const & rData )
142 : throw (xml::sax::SAXException, RuntimeException);
143 : virtual void SAL_CALL setDocumentLocator(
144 : Reference< xml::sax::XLocator > const & xLocator )
145 : throw (xml::sax::SAXException, RuntimeException);
146 : virtual Reference< xml::input::XElement > SAL_CALL startRootElement(
147 : sal_Int32 nUid, OUString const & rLocalName,
148 : Reference< xml::input::XAttributes > const & xAttributes )
149 : throw (xml::sax::SAXException, RuntimeException);
150 : };
151 :
152 : //==================================================================================================
153 : class LibElementBase
154 : : public ::cppu::WeakImplHelper1< xml::input::XElement >
155 : {
156 : protected:
157 : LibraryImport * _pImport;
158 : LibElementBase * _pParent;
159 :
160 : OUString _aLocalName;
161 : Reference< xml::input::XAttributes > _xAttributes;
162 :
163 : public:
164 : LibElementBase(
165 : OUString const & rLocalName,
166 : Reference< xml::input::XAttributes > const & xAttributes,
167 : LibElementBase * pParent, LibraryImport * pImport )
168 : SAL_THROW(());
169 : virtual ~LibElementBase()
170 : SAL_THROW(());
171 :
172 : // XElement
173 : virtual Reference< xml::input::XElement > SAL_CALL getParent()
174 : throw (RuntimeException);
175 : virtual OUString SAL_CALL getLocalName()
176 : throw (RuntimeException);
177 : virtual sal_Int32 SAL_CALL getUid()
178 : throw (RuntimeException);
179 : virtual Reference< xml::input::XAttributes > SAL_CALL getAttributes()
180 : throw (RuntimeException);
181 : virtual void SAL_CALL ignorableWhitespace(
182 : OUString const & rWhitespaces )
183 : throw (xml::sax::SAXException, RuntimeException);
184 : virtual void SAL_CALL characters( OUString const & rChars )
185 : throw (xml::sax::SAXException, RuntimeException);
186 : virtual void SAL_CALL processingInstruction(
187 : OUString const & rTarget, OUString const & rData )
188 : throw (xml::sax::SAXException, RuntimeException);
189 : virtual void SAL_CALL endElement()
190 : throw (xml::sax::SAXException, RuntimeException);
191 : virtual Reference< xml::input::XElement > SAL_CALL startChildElement(
192 : sal_Int32 nUid, OUString const & rLocalName,
193 : Reference< xml::input::XAttributes > const & xAttributes )
194 : throw (xml::sax::SAXException, RuntimeException);
195 : };
196 :
197 : //==================================================================================================
198 :
199 0 : class LibrariesElement : public LibElementBase
200 : {
201 : friend class LibraryElement;
202 :
203 : protected:
204 : vector< LibDescriptor > mLibDescriptors;
205 :
206 : public:
207 : virtual Reference< xml::input::XElement > SAL_CALL startChildElement(
208 : sal_Int32 nUid, OUString const & rLocalName,
209 : Reference< xml::input::XAttributes > const & xAttributes )
210 : throw (xml::sax::SAXException, RuntimeException);
211 : virtual void SAL_CALL endElement()
212 : throw (xml::sax::SAXException, RuntimeException);
213 :
214 0 : LibrariesElement(
215 : OUString const & rLocalName,
216 : Reference< xml::input::XAttributes > const & xAttributes,
217 : LibElementBase * pParent, LibraryImport * pImport )
218 : SAL_THROW(())
219 0 : : LibElementBase( rLocalName, xAttributes, pParent, pImport )
220 0 : {}
221 : };
222 :
223 : //==================================================================================================
224 :
225 0 : class LibraryElement : public LibElementBase
226 : {
227 : protected:
228 : vector< OUString > mElements;
229 :
230 : public:
231 :
232 : virtual Reference< xml::input::XElement > SAL_CALL startChildElement(
233 : sal_Int32 nUid, OUString const & rLocalName,
234 : Reference< xml::input::XAttributes > const & xAttributes )
235 : throw (xml::sax::SAXException, RuntimeException);
236 : virtual void SAL_CALL endElement()
237 : throw (xml::sax::SAXException, RuntimeException);
238 :
239 0 : LibraryElement(
240 : OUString const & rLocalName,
241 : Reference< xml::input::XAttributes > const & xAttributes,
242 : LibElementBase * pParent, LibraryImport * pImport )
243 : SAL_THROW(())
244 0 : : LibElementBase( rLocalName, xAttributes, pParent, pImport )
245 0 : {}
246 : };
247 :
248 : }
249 :
250 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|