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