/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * 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 . */ #include "XMLAutoTextEventExport.hxx" #include "facreg.hxx" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace ::com::sun::star; using namespace ::xmloff::token; using ::std::set; using ::com::sun::star::beans::XPropertySet; using ::com::sun::star::beans::PropertyValue; using ::com::sun::star::container::XNameAccess; using ::com::sun::star::container::XNameReplace; using ::com::sun::star::document::XEventsSupplier; using ::com::sun::star::frame::XModel; using ::com::sun::star::lang::XMultiServiceFactory; using ::com::sun::star::uno::Any; using ::com::sun::star::uno::Exception; using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::Sequence; using ::com::sun::star::uno::XInterface; using ::com::sun::star::uno::UNO_QUERY; using ::com::sun::star::xml::sax::XDocumentHandler; XMLAutoTextEventExport::XMLAutoTextEventExport( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& xContext, OUString const & implementationName, sal_uInt16 nFlags ) : SvXMLExport(util::MeasureUnit::INCH, xContext, implementationName, XML_AUTO_TEXT, nFlags) , sEventType("EventType"), sNone("None") { } XMLAutoTextEventExport::~XMLAutoTextEventExport() { } void XMLAutoTextEventExport::initialize( const Sequence & rArguments ) throw(uno::Exception, uno::RuntimeException, std::exception) { if (rArguments.getLength() > 1) { Reference xSupplier; rArguments[1] >>= xSupplier; if (xSupplier.is()) { Reference xAccess(xSupplier->getEvents(), UNO_QUERY); xEvents = xAccess; } else { Reference xReplace; rArguments[1] >>= xReplace; if (xReplace.is()) { xEvents = xReplace; } else { rArguments[1] >>= xEvents; } } } // call super class (for XHandler) SvXMLExport::initialize(rArguments); } sal_uInt32 XMLAutoTextEventExport::exportDoc( enum XMLTokenEnum ) { if( (getExportFlags() & EXPORT_OASIS) == 0 ) { Reference< uno::XComponentContext> xContext = getComponentContext(); try { Sequence aArgs( 1 ); aArgs[0] <<= GetDocHandler(); // get filter component Reference< xml::sax::XDocumentHandler > xTmpDocHandler( xContext->getServiceManager()->createInstanceWithArgumentsAndContext( "com.sun.star.comp.Oasis2OOoTransformer", aArgs, xContext), UNO_QUERY); OSL_ENSURE( xTmpDocHandler.is(), "can't instantiate OASIS transformer component" ); if( xTmpDocHandler.is() ) { SetDocHandler( xTmpDocHandler ); } } catch( com::sun::star::uno::Exception& ) { } } if (hasEvents()) { GetDocHandler()->startDocument(); addChaffWhenEncryptedStorage(); addNamespaces(); { // container element SvXMLElementExport aContainerElement( *this, XML_NAMESPACE_OOO, XML_AUTO_TEXT_EVENTS, true, true); exportEvents(); } // and close document again GetDocHandler()->endDocument(); } return 0; } bool XMLAutoTextEventExport::hasEvents() { // TODO: provide full implementation that check for presence of events return xEvents.is(); } void XMLAutoTextEventExport::addNamespaces() { // namespaces for office:, text: and script: GetAttrList().AddAttribute( GetNamespaceMap().GetAttrNameByIndex( XML_NAMESPACE_OFFICE ), GetNamespaceMap().GetNameByIndex( XML_NAMESPACE_OFFICE ) ); GetAttrList().AddAttribute( GetNamespaceMap().GetAttrNameByIndex( XML_NAMESPACE_TEXT ), GetNamespaceMap().GetNameByIndex( XML_NAMESPACE_TEXT ) ); GetAttrList().AddAttribute( GetNamespaceMap().GetAttrNameByIndex( XML_NAMESPACE_SCRIPT ), GetNamespaceMap().GetNameByIndex( XML_NAMESPACE_SCRIPT ) ); GetAttrList().AddAttribute( GetNamespaceMap().GetAttrNameByIndex( XML_NAMESPACE_DOM ), GetNamespaceMap().GetNameByIndex( XML_NAMESPACE_DOM ) ); GetAttrList().AddAttribute( GetNamespaceMap().GetAttrNameByIndex( XML_NAMESPACE_OOO ), GetNamespaceMap().GetNameByIndex( XML_NAMESPACE_OOO ) ); GetAttrList().AddAttribute( GetNamespaceMap().GetAttrNameByIndex( XML_NAMESPACE_XLINK ), GetNamespaceMap().GetNameByIndex( XML_NAMESPACE_XLINK ) ); } void XMLAutoTextEventExport::exportEvents() { DBG_ASSERT(hasEvents(), "no events to export!"); GetEventExport().Export(xEvents, true); } // methods without content: void XMLAutoTextEventExport::_ExportMeta() {} void XMLAutoTextEventExport::_ExportScripts() {} void XMLAutoTextEventExport::_ExportFontDecls() {} void XMLAutoTextEventExport::_ExportStyles( bool ) {} void XMLAutoTextEventExport::_ExportAutoStyles() {} void XMLAutoTextEventExport::_ExportMasterStyles() {} void XMLAutoTextEventExport::_ExportContent() {} // methods to support the component registration Sequence< OUString > SAL_CALL XMLAutoTextEventExport_getSupportedServiceNames() throw() { Sequence< OUString > aSeq( 1 ); aSeq[0] = XMLAutoTextEventExport_getImplementationName(); return aSeq; } OUString SAL_CALL XMLAutoTextEventExport_getImplementationName() throw() { return OUString( "com.sun.star.comp.Writer.XMLOasisAutotextEventsExporter" ); } Reference< XInterface > SAL_CALL XMLAutoTextEventExport_createInstance( const Reference< XMultiServiceFactory > & rSMgr) throw( Exception ) { return (cppu::OWeakObject*)new XMLAutoTextEventExport( comphelper::getComponentContext(rSMgr), XMLAutoTextEventExport_getImplementationName(), EXPORT_ALL|EXPORT_OASIS); } // methods to support the component registration Sequence< OUString > SAL_CALL XMLAutoTextEventExportOOO_getSupportedServiceNames() throw() { Sequence< OUString > aSeq( 1 ); aSeq[0] = XMLAutoTextEventExportOOO_getImplementationName(); return aSeq; } OUString SAL_CALL XMLAutoTextEventExportOOO_getImplementationName() throw() { return OUString( "com.sun.star.comp.Writer.XMLAutotextEventsExporter" ); } Reference< XInterface > SAL_CALL XMLAutoTextEventExportOOO_createInstance( const Reference< XMultiServiceFactory > & rSMgr) throw( Exception ) { return (cppu::OWeakObject*)new XMLAutoTextEventExport( comphelper::getComponentContext(rSMgr), XMLAutoTextEventExportOOO_getImplementationName(), EXPORT_ALL); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */