From 9f9e861c6d168e8318b9cdc761a387b0d650e5c0 Mon Sep 17 00:00:00 2001 From: Mohammed Abdul Azeem Date: Wed, 15 Mar 2017 10:20:06 +0530 Subject: Old-to-new mapping of attributes is moved into a Module: This should make it easy to reuse the mapping code wherever necessary and restores the loading of writerperfect documents. Change-Id: I505bffa47fe37270b0430d9ae5afec5072762b4c Reviewed-on: https://gerrit.libreoffice.org/35263 Tested-by: Jenkins Reviewed-by: David Tardon --- xmloff/source/transform/TransformerBase.cxx | 59 +++-------------------------- 1 file changed, 5 insertions(+), 54 deletions(-) (limited to 'xmloff/source/transform/TransformerBase.cxx') diff --git a/xmloff/source/transform/TransformerBase.cxx b/xmloff/source/transform/TransformerBase.cxx index cafbc9ac265a..5707f9ddd338 100644 --- a/xmloff/source/transform/TransformerBase.cxx +++ b/xmloff/source/transform/TransformerBase.cxx @@ -174,14 +174,10 @@ XMLTransformerActions *XMLTransformerBase::GetUserDefinedActions( sal_uInt16 ) XMLTransformerBase::XMLTransformerBase( XMLTransformerActionInit *pInit, ::xmloff::token::XMLTokenEnum *pTKMapInit ) throw () : - m_xTokenHandler( new FastTokenHandler() ), m_pNamespaceMap( new SvXMLNamespaceMap ), m_pReplaceNamespaceMap( new SvXMLNamespaceMap ), m_pElemActions( new XMLTransformerActions( pInit ) ), - m_pTokenMap( new XMLTransformerTokenMap( pTKMapInit ) ), - m_nElement(0), - m_xFastAttributes( new sax_fastparser::FastAttributeList( m_xTokenHandler.get(), - dynamic_cast< sax_fastparser::FastTokenHandlerBase *>( m_xTokenHandler.get() ) ) ) + m_pTokenMap( new XMLTransformerTokenMap( pTKMapInit ) ) { GetNamespaceMap().Add( GetXMLToken(XML_NP_XLINK), GetXMLToken(XML_N_XLINK), XML_NAMESPACE_XLINK ); GetNamespaceMap().Add( GetXMLToken(XML_NP_DC), GetXMLToken(XML_N_DC), XML_NAMESPACE_DC ); @@ -413,9 +409,10 @@ void SAL_CALL XMLTransformerBase::initialize( const Sequence< Any >& aArguments if( cppu::UnoType::get().isAssignableFrom( pAny->getValueType() ) ) { m_xHandler.set( *pAny, UNO_QUERY ); - m_xFastHandler.set( m_xHandler.get(), UNO_QUERY ); - if (SvXMLImport *pFastHandler = dynamic_cast(m_xFastHandler.get())) - m_xNamespaceHandler = pFastHandler->getNamespaceHandler(); + // Type change to avoid crashing of dynamic_cast + if (SvXMLImport *pFastHandler = dynamic_cast( + uno::Reference< XFastDocumentHandler >( m_xHandler, uno::UNO_QUERY ).get() ) ) + m_xHandler.set( new SvXMLLegacyToFastDocHandler( pFastHandler ) ); } // property set to transport data across @@ -1442,50 +1439,4 @@ bool XMLTransformerBase::isWriter() const xSI->supportsService("com.sun.star.text.GlobalDocument") ); } -void XMLTransformerBase::startFastElement( const OUString& rName, - const uno::Reference< xml::sax::XAttributeList >& xAttrList ) -{ - if( m_xFastHandler.is() ) - { - OUString aLocalName; - sal_uInt16 nPrefix = m_pNamespaceMap->GetKeyByAttrName( rName, &aLocalName ); - m_nElement = NAMESPACE_TOKEN( nPrefix ) | m_xTokenHandler->getTokenDirect( - OUStringToOString( aLocalName, RTL_TEXTENCODING_ASCII_US ).getStr(), aLocalName.getLength() ) ; - m_xFastAttributes->clear(); - - sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; - for( sal_Int16 i=0; i < nAttrCount; i++ ) - { - OUString aLocalAttrName; - const OUString& rAttrName = xAttrList->getNameByIndex( i ); - const OUString& rAttrValue = xAttrList->getValueByIndex( i ); - sal_uInt16 nAttrPrefix = m_pNamespaceMap->GetKeyByAttrName( rAttrName, &aLocalAttrName ); - if( XML_NAMESPACE_XMLNS == nAttrPrefix ) - { - if ( m_xNamespaceHandler.is() ) - m_xNamespaceHandler->registerNamespace( aLocalAttrName, rAttrValue ); - } - else - { - sal_Int32 nAttr = NAMESPACE_TOKEN( nAttrPrefix ) | m_xTokenHandler->getTokenDirect( - OUStringToOString( aLocalAttrName, RTL_TEXTENCODING_ASCII_US ).getStr(), aLocalAttrName.getLength() ) ; - m_xFastAttributes->add( nAttr, OUStringToOString( rAttrValue, RTL_TEXTENCODING_ASCII_US ).getStr() ); - } - } - m_xFastHandler->startFastElement( m_nElement, m_xFastAttributes.get() ); - } - else - m_xHandler->startElement( rName, xAttrList ); -} - -void XMLTransformerBase::endFastElement( const OUString& rName ) -{ - if( m_xFastHandler.is() ) - m_xFastHandler->endFastElement( m_nElement ); - else - m_xHandler->endElement( rName ); -} - - - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit