| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_xmlscript.hxx" |
| #include "imp_share.hxx" |
| |
| #include <osl/diagnose.h> |
| |
| #include <rtl/ustrbuf.hxx> |
| |
| #include <xmlscript/xml_import.hxx> |
| #include <comphelper/processfactory.hxx> |
| |
| |
| namespace xmlscript |
| { |
| |
| //################################################################################################## |
| |
| //__________________________________________________________________________________________________ |
| Reference< xml::input::XElement > ModuleElement::getParent() |
| throw (RuntimeException) |
| { |
| return static_cast< xml::input::XElement * >( _pParent ); |
| } |
| //__________________________________________________________________________________________________ |
| OUString ModuleElement::getLocalName() |
| throw (RuntimeException) |
| { |
| return _aLocalName; |
| } |
| //__________________________________________________________________________________________________ |
| sal_Int32 ModuleElement::getUid() |
| throw (RuntimeException) |
| { |
| return _pImport->XMLNS_SCRIPT_UID; |
| } |
| //__________________________________________________________________________________________________ |
| Reference< xml::input::XAttributes > ModuleElement::getAttributes() |
| throw (RuntimeException) |
| { |
| return _xAttributes; |
| } |
| //__________________________________________________________________________________________________ |
| void ModuleElement::ignorableWhitespace( |
| OUString const & /*rWhitespaces*/ ) |
| throw (xml::sax::SAXException, RuntimeException) |
| { |
| // not used |
| } |
| //__________________________________________________________________________________________________ |
| void ModuleElement::characters( OUString const & rChars ) |
| throw (xml::sax::SAXException, RuntimeException) |
| { |
| _StrBuffer.append( rChars ); |
| } |
| //__________________________________________________________________________________________________ |
| void ModuleElement::processingInstruction( |
| OUString const & /*rTarget*/, OUString const & /*rData*/ ) |
| throw (xml::sax::SAXException, RuntimeException) |
| { |
| } |
| //__________________________________________________________________________________________________ |
| void ModuleElement::endElement() |
| throw (xml::sax::SAXException, RuntimeException) |
| { |
| _pImport->mrModuleDesc.aCode = _StrBuffer.makeStringAndClear(); |
| } |
| //__________________________________________________________________________________________________ |
| Reference< xml::input::XElement > ModuleElement::startChildElement( |
| sal_Int32 /*nUid*/, OUString const & /*rLocalName*/, |
| Reference< xml::input::XAttributes > const & /*xAttributes*/ ) |
| throw (xml::sax::SAXException, RuntimeException) |
| { |
| throw xml::sax::SAXException( |
| OUString( RTL_CONSTASCII_USTRINGPARAM("unexpected element!") ), |
| Reference< XInterface >(), Any() ); |
| } |
| |
| //__________________________________________________________________________________________________ |
| ModuleElement::ModuleElement( |
| OUString const & rLocalName, |
| Reference< xml::input::XAttributes > const & xAttributes, |
| ModuleElement * pParent, ModuleImport * pImport ) |
| SAL_THROW( () ) |
| : _pImport( pImport ) |
| , _pParent( pParent ) |
| , _aLocalName( rLocalName ) |
| , _xAttributes( xAttributes ) |
| { |
| _pImport->acquire(); |
| |
| if (_pParent) |
| { |
| _pParent->acquire(); |
| } |
| } |
| //__________________________________________________________________________________________________ |
| ModuleElement::~ModuleElement() |
| SAL_THROW( () ) |
| { |
| _pImport->release(); |
| |
| if (_pParent) |
| { |
| _pParent->release(); |
| } |
| |
| #if OSL_DEBUG_LEVEL > 1 |
| OString aStr( OUStringToOString( _aLocalName, RTL_TEXTENCODING_ASCII_US ) ); |
| OSL_TRACE( "ModuleElement::~ModuleElement(): %s\n", aStr.getStr() ); |
| #endif |
| } |
| |
| //################################################################################################## |
| |
| // XRoot |
| |
| //______________________________________________________________________________ |
| void ModuleImport::startDocument( |
| Reference< xml::input::XNamespaceMapping > const & xNamespaceMapping ) |
| throw (xml::sax::SAXException, RuntimeException) |
| { |
| XMLNS_SCRIPT_UID = xNamespaceMapping->getUidByUri( |
| OUSTR(XMLNS_SCRIPT_URI) ); |
| XMLNS_LIBRARY_UID = xNamespaceMapping->getUidByUri( |
| OUSTR(XMLNS_LIBRARY_URI) ); |
| XMLNS_XLINK_UID = xNamespaceMapping->getUidByUri( |
| OUSTR(XMLNS_XLINK_URI) ); |
| } |
| |
| //__________________________________________________________________________________________________ |
| void ModuleImport::endDocument() |
| throw (xml::sax::SAXException, RuntimeException) |
| { |
| // ignored |
| } |
| //__________________________________________________________________________________________________ |
| void ModuleImport::processingInstruction( |
| OUString const & /*rTarget*/, OUString const & /*rData*/ ) |
| throw (xml::sax::SAXException, RuntimeException) |
| { |
| } |
| //__________________________________________________________________________________________________ |
| void ModuleImport::setDocumentLocator( |
| Reference< xml::sax::XLocator > const & /*xLocator*/ ) |
| throw (xml::sax::SAXException, RuntimeException) |
| { |
| } |
| //__________________________________________________________________________________________________ |
| Reference< xml::input::XElement > ModuleImport::startRootElement( |
| sal_Int32 nUid, OUString const & rLocalName, |
| Reference< xml::input::XAttributes > const & xAttributes ) |
| throw (xml::sax::SAXException, RuntimeException) |
| { |
| if (XMLNS_SCRIPT_UID != nUid) |
| { |
| throw xml::sax::SAXException( |
| OUString( RTL_CONSTASCII_USTRINGPARAM("illegal namespace!") ), |
| Reference< XInterface >(), Any() ); |
| } |
| // window |
| else if (rLocalName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("module") )) |
| { |
| mrModuleDesc.aName = xAttributes->getValueByUidName( |
| XMLNS_SCRIPT_UID, |
| OUString( RTL_CONSTASCII_USTRINGPARAM("name") ) ); |
| mrModuleDesc.aLanguage = xAttributes->getValueByUidName( |
| XMLNS_SCRIPT_UID, |
| OUString( RTL_CONSTASCII_USTRINGPARAM("language") ) ); |
| mrModuleDesc.aModuleType = xAttributes->getValueByUidName( |
| XMLNS_SCRIPT_UID, |
| OUString( RTL_CONSTASCII_USTRINGPARAM("moduleType") ) ); |
| |
| return new ModuleElement( rLocalName, xAttributes, 0, this ); |
| } |
| else |
| { |
| throw xml::sax::SAXException( |
| OUString( RTL_CONSTASCII_USTRINGPARAM( |
| "illegal root element (expected module) given: ") ) + |
| rLocalName, Reference< XInterface >(), Any() ); |
| } |
| } |
| //__________________________________________________________________________________________________ |
| ModuleImport::~ModuleImport() |
| SAL_THROW( () ) |
| { |
| #if OSL_DEBUG_LEVEL > 1 |
| OSL_TRACE( "ModuleImport::~ModuleImport().\n" ); |
| #endif |
| } |
| |
| //################################################################################################## |
| |
| Reference< xml::sax::XDocumentHandler > |
| SAL_CALL importScriptModule( ModuleDescriptor& rMod ) |
| SAL_THROW( (Exception) ) |
| { |
| return ::xmlscript::createDocumentHandler( |
| static_cast< xml::input::XRoot * >( new ModuleImport( rMod ) ) ); |
| } |
| |
| } |
| |