sc/source/filter/xml/XMLCellRangeSourceContext.cxx | 109 +++----- sc/source/filter/xml/XMLCellRangeSourceContext.hxx | 12 sc/source/filter/xml/XMLDetectiveContext.cxx | 145 ++++------ sc/source/filter/xml/XMLDetectiveContext.hxx | 36 -- sc/source/filter/xml/celltextparacontext.cxx | 284 ++++++++------------- sc/source/filter/xml/celltextparacontext.hxx | 74 ++--- sc/source/filter/xml/xmlcelli.cxx | 73 +++-- sc/source/filter/xml/xmlcelli.hxx | 3 8 files changed, 309 insertions(+), 427 deletions(-)
New commits: commit b6076ea5ce60bc1c971db502af3c963da51d8f82 Author: Mohammed Abdul Azeem <azeemmys...@gmail.com> Date: Sat Jul 29 22:24:20 2017 +0530 Moving legacy contexts to FastContexts: ScXMLCellRangeSourceContext ScXMLDetectiveHighlightedContext ScXMLDetectiveOperationContext ScXMLCellTextParaContext ScXMLCellTextSpanContext ScXMLCellFieldSheetNameContext ScXMLCellFieldDateContext ScXMLCellFieldTitleContext ScXMLCellFieldURLContext ScXMLCellFieldSContext Change-Id: I605e83064a7c0ec8dc0c78a93d2fec0ebdbce565 Reviewed-on: https://gerrit.libreoffice.org/40553 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> diff --git a/sc/source/filter/xml/XMLCellRangeSourceContext.cxx b/sc/source/filter/xml/XMLCellRangeSourceContext.cxx index 624d6f902af3..60a718196f1c 100644 --- a/sc/source/filter/xml/XMLCellRangeSourceContext.cxx +++ b/sc/source/filter/xml/XMLCellRangeSourceContext.cxx @@ -23,8 +23,10 @@ #include <xmloff/nmspmap.hxx> #include "xmlimprt.hxx" +#include <xmloff/xmlnmspe.hxx> using namespace ::com::sun::star; +using namespace xmloff::token; ScMyImpCellRangeSource::ScMyImpCellRangeSource() : nColumns( 0 ), @@ -35,63 +37,58 @@ ScMyImpCellRangeSource::ScMyImpCellRangeSource() : ScXMLCellRangeSourceContext::ScXMLCellRangeSourceContext( ScXMLImport& rImport, - sal_uInt16 nPrfx, - const OUString& rLName, - const uno::Reference< xml::sax::XAttributeList >& xAttrList, + sal_Int32 /*nElement*/, + const uno::Reference< xml::sax::XFastAttributeList >& xAttrList, ScMyImpCellRangeSource* pCellRangeSource ) : - ScXMLImportContext( rImport, nPrfx, rLName ) + ScXMLImportContext( rImport ) { - if( !xAttrList.is() ) return; - - sal_Int16 nAttrCount = xAttrList->getLength(); - const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetTableCellRangeSourceAttrTokenMap(); - - for( sal_Int16 nIndex = 0; nIndex < nAttrCount; ++nIndex ) + if ( xAttrList.is() ) { - const OUString& sAttrName(xAttrList->getNameByIndex( nIndex )); - const OUString& sValue(xAttrList->getValueByIndex( nIndex )); - OUString aLocalName; - sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName ); + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList ); - switch( rAttrTokenMap.Get( nPrefix, aLocalName ) ) + for (auto &aIter : *pAttribList) { - case XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_NAME: - pCellRangeSource->sSourceStr = sValue; - break; - case XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_FILTER_NAME: - pCellRangeSource->sFilterName = sValue; - break; - case XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_FILTER_OPTIONS: - pCellRangeSource->sFilterOptions = sValue; - break; - case XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_HREF: - pCellRangeSource->sURL = GetScImport().GetAbsoluteReference(sValue); - break; - case XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_LAST_COLUMN: - { - sal_Int32 nValue; - if (::sax::Converter::convertNumber( nValue, sValue, 1 )) - pCellRangeSource->nColumns = nValue; - else - pCellRangeSource->nColumns = 1; - } - break; - case XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_LAST_ROW: - { - sal_Int32 nValue; - if (::sax::Converter::convertNumber( nValue, sValue, 1 )) - pCellRangeSource->nRows = nValue; - else - pCellRangeSource->nRows = 1; - } - break; - case XML_TOK_TABLE_CELL_RANGE_SOURCE_ATTR_REFRESH_DELAY: + switch (aIter.getToken()) { - double fTime; - if (::sax::Converter::convertDuration( fTime, sValue )) - pCellRangeSource->nRefresh = std::max( (sal_Int32)(fTime * 86400.0), (sal_Int32)0 ); + case XML_ELEMENT( TABLE, XML_NAME ): + pCellRangeSource->sSourceStr = aIter.toString(); + break; + case XML_ELEMENT( TABLE, XML_FILTER_NAME ): + pCellRangeSource->sFilterName = aIter.toString(); + break; + case XML_ELEMENT( TABLE, XML_FILTER_OPTIONS ): + pCellRangeSource->sFilterOptions = aIter.toString(); + break; + case XML_ELEMENT( XLINK, XML_HREF ): + pCellRangeSource->sURL = GetScImport().GetAbsoluteReference(aIter.toString()); + break; + case XML_ELEMENT( TABLE, XML_LAST_COLUMN_SPANNED ): + { + sal_Int32 nValue; + if (::sax::Converter::convertNumber( nValue, aIter.toString(), 1 )) + pCellRangeSource->nColumns = nValue; + else + pCellRangeSource->nColumns = 1; + } + break; + case XML_ELEMENT( TABLE, XML_LAST_ROW_SPANNED ): + { + sal_Int32 nValue; + if (::sax::Converter::convertNumber( nValue, aIter.toString(), 1 )) + pCellRangeSource->nRows = nValue; + else + pCellRangeSource->nRows = 1; + } + break; + case XML_ELEMENT( TABLE, XML_REFRESH_DELAY ): + { + double fTime; + if (::sax::Converter::convertDuration( fTime, aIter.toString() )) + pCellRangeSource->nRefresh = std::max( (sal_Int32)(fTime * 86400.0), (sal_Int32)0 ); + } + break; } - break; } } } @@ -100,16 +97,4 @@ ScXMLCellRangeSourceContext::~ScXMLCellRangeSourceContext() { } -SvXMLImportContext *ScXMLCellRangeSourceContext::CreateChildContext( - sal_uInt16 nPrefix, - const OUString& rLName, - const uno::Reference< xml::sax::XAttributeList>& /* xAttrList */ ) -{ - return new SvXMLImportContext( GetImport(), nPrefix, rLName ); -} - -void ScXMLCellRangeSourceContext::EndElement() -{ -} - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/filter/xml/XMLCellRangeSourceContext.hxx b/sc/source/filter/xml/XMLCellRangeSourceContext.hxx index 8d0c40998e8e..a7725601b73f 100644 --- a/sc/source/filter/xml/XMLCellRangeSourceContext.hxx +++ b/sc/source/filter/xml/XMLCellRangeSourceContext.hxx @@ -43,19 +43,11 @@ class ScXMLCellRangeSourceContext : public ScXMLImportContext public: ScXMLCellRangeSourceContext( ScXMLImport& rImport, - sal_uInt16 nPrfx, - const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList, + sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList, ScMyImpCellRangeSource* pCellRangeSource ); virtual ~ScXMLCellRangeSourceContext() override; - - virtual SvXMLImportContext* CreateChildContext( - sal_uInt16 nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList - ) override; - virtual void EndElement() override; }; #endif diff --git a/sc/source/filter/xml/XMLDetectiveContext.cxx b/sc/source/filter/xml/XMLDetectiveContext.cxx index 976beb55b6b7..f326f605d9e0 100644 --- a/sc/source/filter/xml/XMLDetectiveContext.cxx +++ b/sc/source/filter/xml/XMLDetectiveContext.cxx @@ -22,6 +22,7 @@ #include <sax/tools/converter.hxx> #include <xmloff/nmspmap.hxx> #include <xmloff/xmltoken.hxx> +#include <xmloff/xmlnmspe.hxx> #include "convuno.hxx" #include "xmlimprt.hxx" #include "XMLConverter.hxx" @@ -61,10 +62,9 @@ bool ScMyImpDetectiveOpArray::GetFirstOp( ScMyImpDetectiveOp& rDetOp ) ScXMLDetectiveContext::ScXMLDetectiveContext( ScXMLImport& rImport, - sal_uInt16 nPrfx, - const OUString& rLName, + sal_Int32 /*nElement*/, ScMyImpDetectiveObjVec* pNewDetectiveObjVec ) : - ScXMLImportContext( rImport, nPrfx, rLName ), + ScXMLImportContext( rImport ), pDetectiveObjVec( pNewDetectiveObjVec ) { } @@ -73,77 +73,65 @@ ScXMLDetectiveContext::~ScXMLDetectiveContext() { } -SvXMLImportContext *ScXMLDetectiveContext::CreateChildContext( - sal_uInt16 nPrefix, - const OUString& rLName, - const uno::Reference< xml::sax::XAttributeList>& xAttrList ) +uno::Reference< xml::sax::XFastContextHandler > SAL_CALL ScXMLDetectiveContext::createFastChildContext( + sal_Int32 nElement, const uno::Reference< xml::sax::XFastAttributeList >& xAttrList ) { SvXMLImportContext* pContext = nullptr; - const SvXMLTokenMap& rTokenMap = GetScImport().GetDetectiveElemTokenMap(); - switch( rTokenMap.Get( nPrefix, rLName ) ) + switch (nElement) { - case XML_TOK_DETECTIVE_ELEM_HIGHLIGHTED: - pContext = new ScXMLDetectiveHighlightedContext( GetScImport(), nPrefix, rLName, xAttrList, pDetectiveObjVec ); + case XML_ELEMENT( TABLE, XML_HIGHLIGHTED_RANGE ): + pContext = new ScXMLDetectiveHighlightedContext( GetScImport(), nElement, xAttrList, pDetectiveObjVec ); break; - case XML_TOK_DETECTIVE_ELEM_OPERATION: - pContext = new ScXMLDetectiveOperationContext( GetScImport(), nPrefix, rLName, xAttrList ); + case XML_ELEMENT( TABLE, XML_OPERATION ): + pContext = new ScXMLDetectiveOperationContext( GetScImport(), nElement, xAttrList ); break; } if( !pContext ) - pContext = new SvXMLImportContext( GetImport(), nPrefix, rLName ); + pContext = new SvXMLImportContext( GetImport() ); return pContext; } -void ScXMLDetectiveContext::EndElement() -{ -} - ScXMLDetectiveHighlightedContext::ScXMLDetectiveHighlightedContext( ScXMLImport& rImport, - sal_uInt16 nPrfx, - const OUString& rLName, - const uno::Reference< xml::sax::XAttributeList >& xAttrList, + sal_Int32 /*nElement*/, + const uno::Reference< xml::sax::XFastAttributeList >& xAttrList, ScMyImpDetectiveObjVec* pNewDetectiveObjVec ): - ScXMLImportContext( rImport, nPrfx, rLName ), + ScXMLImportContext( rImport ), pDetectiveObjVec( pNewDetectiveObjVec ), aDetectiveObj(), bValid( false ) { - if( !xAttrList.is() ) return; - - sal_Int16 nAttrCount = xAttrList->getLength(); - const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDetectiveHighlightedAttrTokenMap(); - - for( sal_Int16 nIndex = 0; nIndex < nAttrCount; ++nIndex ) + if ( xAttrList.is() ) { - const OUString& sAttrName (xAttrList->getNameByIndex( nIndex )); - const OUString& sValue (xAttrList->getValueByIndex( nIndex )); - OUString aLocalName; - sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName ); + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList ); - switch( rAttrTokenMap.Get( nPrefix, aLocalName ) ) + for (auto &aIter : *pAttribList) { - case XML_TOK_DETECTIVE_HIGHLIGHTED_ATTR_CELL_RANGE: + switch (aIter.getToken()) { - sal_Int32 nOffset(0); - ScXMLImport::MutexGuard aGuard(GetScImport()); - bValid = ScRangeStringConverter::GetRangeFromString( aDetectiveObj.aSourceRange, sValue, GetScImport().GetDocument(), ::formula::FormulaGrammar::CONV_OOO, nOffset ); - } - break; - case XML_TOK_DETECTIVE_HIGHLIGHTED_ATTR_DIRECTION: - aDetectiveObj.eObjType = ScXMLConverter::GetDetObjTypeFromString( sValue ); - break; - case XML_TOK_DETECTIVE_HIGHLIGHTED_ATTR_CONTAINS_ERROR: - aDetectiveObj.bHasError = IsXMLToken(sValue, XML_TRUE); - break; - case XML_TOK_DETECTIVE_HIGHLIGHTED_ATTR_MARKED_INVALID: + case XML_ELEMENT( TABLE, XML_CELL_RANGE_ADDRESS ): + { + sal_Int32 nOffset(0); + ScXMLImport::MutexGuard aGuard(GetScImport()); + bValid = ScRangeStringConverter::GetRangeFromString( aDetectiveObj.aSourceRange, aIter.toString(), GetScImport().GetDocument(), ::formula::FormulaGrammar::CONV_OOO, nOffset ); + } + break; + case XML_ELEMENT( TABLE, XML_DIRECTION ): + aDetectiveObj.eObjType = ScXMLConverter::GetDetObjTypeFromString( aIter.toString() ); + break; + case XML_ELEMENT( TABLE, XML_CONTAINS_ERROR ): + aDetectiveObj.bHasError = IsXMLToken(aIter, XML_TRUE); + break; + case XML_ELEMENT( TABLE, XML_MARKED_INVALID ): { - if (IsXMLToken(sValue, XML_TRUE)) + if (IsXMLToken(aIter, XML_TRUE)) aDetectiveObj.eObjType = SC_DETOBJ_CIRCLE; } - break; + break; + } } } } @@ -152,15 +140,7 @@ ScXMLDetectiveHighlightedContext::~ScXMLDetectiveHighlightedContext() { } -SvXMLImportContext *ScXMLDetectiveHighlightedContext::CreateChildContext( - sal_uInt16 nPrefix, - const OUString& rLName, - const uno::Reference< xml::sax::XAttributeList>& /* xAttrList */ ) -{ - return new SvXMLImportContext( GetImport(), nPrefix, rLName ); -} - -void ScXMLDetectiveHighlightedContext::EndElement() +void SAL_CALL ScXMLDetectiveHighlightedContext::endFastElement( sal_Int32 /*nElement*/ ) { switch( aDetectiveObj.eObjType ) { @@ -180,37 +160,32 @@ void ScXMLDetectiveHighlightedContext::EndElement() ScXMLDetectiveOperationContext::ScXMLDetectiveOperationContext( ScXMLImport& rImport, - sal_uInt16 nPrfx, - const OUString& rLName, - const uno::Reference< xml::sax::XAttributeList >& xAttrList ) : - ScXMLImportContext( rImport, nPrfx, rLName ), + sal_Int32 /*nElement*/, + const uno::Reference< xml::sax::XFastAttributeList >& xAttrList ) : + ScXMLImportContext( rImport ), aDetectiveOp(), bHasType( false ) { - if( !xAttrList.is() ) return; - - sal_Int16 nAttrCount = xAttrList->getLength(); - const SvXMLTokenMap& rAttrTokenMap = GetScImport().GetDetectiveOperationAttrTokenMap(); - - for( sal_Int16 nIndex = 0; nIndex < nAttrCount; ++nIndex ) + if ( xAttrList.is() ) { - const OUString& sAttrName (xAttrList->getNameByIndex( nIndex )); - const OUString& sValue (xAttrList->getValueByIndex( nIndex )); - OUString aLocalName; - sal_uInt16 nPrefix = GetScImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName ); + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList ); - switch( rAttrTokenMap.Get( nPrefix, aLocalName ) ) + for (auto &aIter : *pAttribList) { - case XML_TOK_DETECTIVE_OPERATION_ATTR_NAME: - bHasType = ScXMLConverter::GetDetOpTypeFromString( aDetectiveOp.eOpType, sValue ); - break; - case XML_TOK_DETECTIVE_OPERATION_ATTR_INDEX: + switch (aIter.getToken()) { - sal_Int32 nValue; - if (::sax::Converter::convertNumber( nValue, sValue, 0 )) - aDetectiveOp.nIndex = nValue; + case XML_ELEMENT( TABLE, XML_NAME ): + bHasType = ScXMLConverter::GetDetOpTypeFromString( aDetectiveOp.eOpType, aIter.toString() ); + break; + case XML_ELEMENT( TABLE, XML_INDEX ): + { + sal_Int32 nValue; + if (::sax::Converter::convertNumber( nValue, aIter.toString(), 0 )) + aDetectiveOp.nIndex = nValue; + } + break; } - break; } } aDetectiveOp.aPosition = rImport.GetTables().GetCurrentCellPos(); @@ -220,15 +195,7 @@ ScXMLDetectiveOperationContext::~ScXMLDetectiveOperationContext() { } -SvXMLImportContext *ScXMLDetectiveOperationContext::CreateChildContext( - sal_uInt16 nPrefix, - const OUString& rLName, - const uno::Reference< xml::sax::XAttributeList>& /* xAttrList */ ) -{ - return new SvXMLImportContext( GetImport(), nPrefix, rLName ); -} - -void ScXMLDetectiveOperationContext::EndElement() +void SAL_CALL ScXMLDetectiveOperationContext::endFastElement( sal_Int32 /*nElement*/ ) { if( bHasType && (aDetectiveOp.nIndex >= 0) ) GetScImport().GetDetectiveOpArray()->AddDetectiveOp( aDetectiveOp ); diff --git a/sc/source/filter/xml/XMLDetectiveContext.hxx b/sc/source/filter/xml/XMLDetectiveContext.hxx index a90f6975ed1f..7f8a834c3e94 100644 --- a/sc/source/filter/xml/XMLDetectiveContext.hxx +++ b/sc/source/filter/xml/XMLDetectiveContext.hxx @@ -80,18 +80,16 @@ private: public: ScXMLDetectiveContext( ScXMLImport& rImport, - sal_uInt16 nPrfx, - const OUString& rLName, + sal_Int32 nElement, ScMyImpDetectiveObjVec* pNewDetectiveObjVec ); virtual ~ScXMLDetectiveContext() override; - virtual SvXMLImportContext* CreateChildContext( - sal_uInt16 nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL + createFastChildContext( + sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override; - virtual void EndElement() override; }; class ScXMLDetectiveHighlightedContext : public ScXMLImportContext @@ -104,19 +102,13 @@ private: public: ScXMLDetectiveHighlightedContext( ScXMLImport& rImport, - sal_uInt16 nPrfx, - const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList, + sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList, ScMyImpDetectiveObjVec* pNewDetectiveObjVec ); virtual ~ScXMLDetectiveHighlightedContext() override; - virtual SvXMLImportContext* CreateChildContext( - sal_uInt16 nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList - ) override; - virtual void EndElement() override; + virtual void SAL_CALL endFastElement( sal_Int32 nElement ) override; }; class ScXMLDetectiveOperationContext : public ScXMLImportContext @@ -128,18 +120,12 @@ private: public: ScXMLDetectiveOperationContext( ScXMLImport& rImport, - sal_uInt16 nPrfx, - const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList + sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ); virtual ~ScXMLDetectiveOperationContext() override; - virtual SvXMLImportContext* CreateChildContext( - sal_uInt16 nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList - ) override; - virtual void EndElement() override; + virtual void SAL_CALL endFastElement( sal_Int32 nElement ) override; }; #endif diff --git a/sc/source/filter/xml/celltextparacontext.cxx b/sc/source/filter/xml/celltextparacontext.cxx index dc89e141fbf4..ea4349011fae 100644 --- a/sc/source/filter/xml/celltextparacontext.cxx +++ b/sc/source/filter/xml/celltextparacontext.cxx @@ -13,23 +13,21 @@ #include <xmloff/nmspmap.hxx> #include <comphelper/string.hxx> +#include <xmloff/xmlnmspe.hxx> #include <com/sun/star/xml/sax/XAttributeList.hpp> using namespace com::sun::star; +using namespace xmloff::token; ScXMLCellTextParaContext::ScXMLCellTextParaContext( - ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLTableRowCellContext& rParent) : - ScXMLImportContext(rImport, nPrefix, rLName), + ScXMLImport& rImport, sal_Int32 /*nElement*/, ScXMLTableRowCellContext& rParent) : + ScXMLImportContext(rImport), mrParentCxt(rParent) { } -void ScXMLCellTextParaContext::StartElement(const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/) -{ -} - -void ScXMLCellTextParaContext::EndElement() +void SAL_CALL ScXMLCellTextParaContext::endFastElement( sal_Int32 /*nElement*/ ) { if (!maContent.isEmpty()) mrParentCxt.PushParagraphSpan(maContent, OUString()); @@ -37,13 +35,13 @@ void ScXMLCellTextParaContext::EndElement() mrParentCxt.PushParagraphEnd(); } -void ScXMLCellTextParaContext::Characters(const OUString& rChars) +void SAL_CALL ScXMLCellTextParaContext::characters( const OUString& rChars ) { maContent += rChars; } -SvXMLImportContext* ScXMLCellTextParaContext::CreateChildContext( - sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/) +uno::Reference< xml::sax::XFastContextHandler > SAL_CALL ScXMLCellTextParaContext::createFastChildContext( + sal_Int32 nElement, const uno::Reference< xml::sax::XFastAttributeList >& /*xAttrList*/ ) { if (!maContent.isEmpty()) { @@ -51,26 +49,25 @@ SvXMLImportContext* ScXMLCellTextParaContext::CreateChildContext( maContent.clear(); } - const SvXMLTokenMap& rTokenMap = GetScImport().GetCellTextParaElemTokenMap(); - switch (rTokenMap.Get(nPrefix, rLocalName)) + switch (nElement) { - case XML_TOK_CELL_TEXT_S: - return new ScXMLCellFieldSContext(GetScImport(), nPrefix, rLocalName, *this); - case XML_TOK_CELL_TEXT_SPAN: - return new ScXMLCellTextSpanContext(GetScImport(), nPrefix, rLocalName, *this); - case XML_TOK_CELL_TEXT_SHEET_NAME: - return new ScXMLCellFieldSheetNameContext(GetScImport(), nPrefix, rLocalName, *this); - case XML_TOK_CELL_TEXT_DATE: - return new ScXMLCellFieldDateContext(GetScImport(), nPrefix, rLocalName, *this); - case XML_TOK_CELL_TEXT_TITLE: - return new ScXMLCellFieldTitleContext(GetScImport(), nPrefix, rLocalName, *this); - case XML_TOK_CELL_TEXT_URL: - return new ScXMLCellFieldURLContext(GetScImport(), nPrefix, rLocalName, *this); + case XML_ELEMENT( TEXT, XML_S ): + return new ScXMLCellFieldSContext(GetScImport(), nElement, *this); + case XML_ELEMENT( TEXT, XML_SPAN ): + return new ScXMLCellTextSpanContext(GetScImport(), nElement, *this); + case XML_ELEMENT( TEXT, XML_SHEET_NAME ): + return new ScXMLCellFieldSheetNameContext(GetScImport(), nElement, *this); + case XML_ELEMENT( TEXT, XML_DATE ): + return new ScXMLCellFieldDateContext(GetScImport(), nElement, *this); + case XML_ELEMENT( TEXT, XML_TITLE ): + return new ScXMLCellFieldTitleContext(GetScImport(), nElement, *this); + case XML_ELEMENT( TEXT, XML_A ): + return new ScXMLCellFieldURLContext(GetScImport(), nElement, *this); default: ; } - return new SvXMLImportContext(GetImport(), nPrefix, rLocalName); + return new SvXMLImportContext(GetImport()); } void ScXMLCellTextParaContext::PushSpan(const OUString& rSpan, const OUString& rStyleName) @@ -100,40 +97,35 @@ void ScXMLCellTextParaContext::PushFieldURL( } ScXMLCellTextSpanContext::ScXMLCellTextSpanContext( - ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLCellTextParaContext& rParent) : - ScXMLImportContext(rImport, nPrefix, rLName), + ScXMLImport& rImport, sal_Int32 /*nElement*/, ScXMLCellTextParaContext& rParent) : + ScXMLImportContext(rImport), mrParentCxt(rParent) { } -void ScXMLCellTextSpanContext::StartElement(const uno::Reference<xml::sax::XAttributeList>& xAttrList) +void SAL_CALL ScXMLCellTextSpanContext::startFastElement( sal_Int32 /*nElement*/, + const uno::Reference< xml::sax::XFastAttributeList >& xAttrList ) { - if (!xAttrList.is()) - return; - - OUString aLocalName; - sal_Int16 nAttrCount = xAttrList->getLength(); - - const SvXMLTokenMap& rTokenMap = GetScImport().GetCellTextSpanAttrTokenMap(); - for (sal_Int16 i = 0; i < nAttrCount; ++i) + if ( xAttrList.is() ) { - sal_uInt16 nAttrPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( - xAttrList->getNameByIndex(i), &aLocalName); + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList ); - const OUString& rAttrValue = xAttrList->getValueByIndex(i); - sal_uInt16 nToken = rTokenMap.Get(nAttrPrefix, aLocalName); - switch (nToken) + for (auto &aIter : *pAttribList) { - case XML_TOK_CELL_TEXT_SPAN_ATTR_STYLE_NAME: - maStyleName = rAttrValue; - break; - default: - ; + switch (aIter.getToken()) + { + case XML_ELEMENT( TEXT, XML_STYLE_NAME ): + maStyleName = aIter.toString(); + break; + default: + ; + } } } } -void ScXMLCellTextSpanContext::EndElement() +void SAL_CALL ScXMLCellTextSpanContext::endFastElement( sal_Int32 /*nElement*/ ) { if (!maContent.isEmpty()) { @@ -141,13 +133,13 @@ void ScXMLCellTextSpanContext::EndElement() } } -void ScXMLCellTextSpanContext::Characters(const OUString& rChars) +void SAL_CALL ScXMLCellTextSpanContext::characters( const OUString& rChars ) { maContent += rChars; } -SvXMLImportContext* ScXMLCellTextSpanContext::CreateChildContext( - sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/) +uno::Reference< xml::sax::XFastContextHandler > SAL_CALL ScXMLCellTextSpanContext::createFastChildContext( + sal_Int32 nElement, const uno::Reference< xml::sax::XFastAttributeList >& /*xAttrList*/ ) { if (!maContent.isEmpty()) { @@ -155,36 +147,35 @@ SvXMLImportContext* ScXMLCellTextSpanContext::CreateChildContext( maContent.clear(); } - const SvXMLTokenMap& rTokenMap = GetScImport().GetCellTextSpanElemTokenMap(); - switch (rTokenMap.Get(nPrefix, rLocalName)) + switch (nElement) { - case XML_TOK_CELL_TEXT_SPAN_ELEM_SHEET_NAME: + case XML_ELEMENT( TEXT, XML_SHEET_NAME ): { - ScXMLCellFieldSheetNameContext* p = new ScXMLCellFieldSheetNameContext(GetScImport(), nPrefix, rLocalName, mrParentCxt); + ScXMLCellFieldSheetNameContext* p = new ScXMLCellFieldSheetNameContext(GetScImport(), nElement, mrParentCxt); p->SetStyleName(maStyleName); return p; } - case XML_TOK_CELL_TEXT_SPAN_ELEM_DATE: + case XML_ELEMENT( TEXT, XML_DATE ): { - ScXMLCellFieldDateContext* p = new ScXMLCellFieldDateContext(GetScImport(), nPrefix, rLocalName, mrParentCxt); + ScXMLCellFieldDateContext* p = new ScXMLCellFieldDateContext(GetScImport(), nElement, mrParentCxt); p->SetStyleName(maStyleName); return p; } - case XML_TOK_CELL_TEXT_SPAN_ELEM_TITLE: + case XML_ELEMENT( TEXT, XML_TITLE ): { - ScXMLCellFieldTitleContext* p = new ScXMLCellFieldTitleContext(GetScImport(), nPrefix, rLocalName, mrParentCxt); + ScXMLCellFieldTitleContext* p = new ScXMLCellFieldTitleContext(GetScImport(), nElement, mrParentCxt); p->SetStyleName(maStyleName); return p; } - case XML_TOK_CELL_TEXT_SPAN_ELEM_URL: + case XML_ELEMENT( TEXT, XML_A ): { - ScXMLCellFieldURLContext* p = new ScXMLCellFieldURLContext(GetScImport(), nPrefix, rLocalName, mrParentCxt); + ScXMLCellFieldURLContext* p = new ScXMLCellFieldURLContext(GetScImport(), nElement, mrParentCxt); p->SetStyleName(maStyleName); return p; } - case XML_TOK_CELL_TEXT_SPAN_ELEM_S: + case XML_ELEMENT( TEXT, XML_S ): { - ScXMLCellFieldSContext* p = new ScXMLCellFieldSContext(GetScImport(), nPrefix, rLocalName, mrParentCxt); + ScXMLCellFieldSContext* p = new ScXMLCellFieldSContext(GetScImport(), nElement, mrParentCxt); p->SetStyleName(maStyleName); return p; } @@ -192,12 +183,12 @@ SvXMLImportContext* ScXMLCellTextSpanContext::CreateChildContext( ; } - return new SvXMLImportContext(GetImport(), nPrefix, rLocalName); + return new SvXMLImportContext(GetImport()); } ScXMLCellFieldSheetNameContext::ScXMLCellFieldSheetNameContext( - ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLCellTextParaContext& rParent) : - ScXMLImportContext(rImport, nPrefix, rLName), + ScXMLImport& rImport, sal_Int32 /*nElement*/, ScXMLCellTextParaContext& rParent) : + ScXMLImportContext(rImport), mrParentCxt(rParent) { } @@ -207,29 +198,20 @@ void ScXMLCellFieldSheetNameContext::SetStyleName(const OUString& rStyleName) maStyleName = rStyleName; } -void ScXMLCellFieldSheetNameContext::StartElement(const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/) +void SAL_CALL ScXMLCellFieldSheetNameContext::startFastElement( sal_Int32 /*nElement*/, + const uno::Reference< xml::sax::XFastAttributeList >& /*xAttrList*/ ) { // <text:sheet-name> has no attributes (that I'm aware of). } -void ScXMLCellFieldSheetNameContext::EndElement() +void SAL_CALL ScXMLCellFieldSheetNameContext::endFastElement( sal_Int32 /*nElement*/ ) { mrParentCxt.PushFieldSheetName(maStyleName); } -void ScXMLCellFieldSheetNameContext::Characters(const OUString& /*rChars*/) -{ -} - -SvXMLImportContext* ScXMLCellFieldSheetNameContext::CreateChildContext( - sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/) -{ - return new SvXMLImportContext(GetImport(), nPrefix, rLocalName); -} - ScXMLCellFieldDateContext::ScXMLCellFieldDateContext( - ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLCellTextParaContext& rParent) : - ScXMLImportContext(rImport, nPrefix, rLName), + ScXMLImport& rImport, sal_Int32 /*nElement*/, ScXMLCellTextParaContext& rParent) : + ScXMLImportContext(rImport), mrParentCxt(rParent) { } @@ -239,28 +221,14 @@ void ScXMLCellFieldDateContext::SetStyleName(const OUString& rStyleName) maStyleName = rStyleName; } -void ScXMLCellFieldDateContext::StartElement(const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/) -{ -} - -void ScXMLCellFieldDateContext::EndElement() +void SAL_CALL ScXMLCellFieldDateContext::endFastElement( sal_Int32 /*nElement*/ ) { mrParentCxt.PushFieldDate(maStyleName); } -void ScXMLCellFieldDateContext::Characters(const OUString& /*rChars*/) -{ -} - -SvXMLImportContext* ScXMLCellFieldDateContext::CreateChildContext( - sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/) -{ - return new SvXMLImportContext(GetImport(), nPrefix, rLocalName); -} - ScXMLCellFieldTitleContext::ScXMLCellFieldTitleContext( - ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLCellTextParaContext& rParent) : - ScXMLImportContext(rImport, nPrefix, rLName), + ScXMLImport& rImport, sal_Int32 /*nElement*/, ScXMLCellTextParaContext& rParent) : + ScXMLImportContext(rImport), mrParentCxt(rParent) { } @@ -270,28 +238,14 @@ void ScXMLCellFieldTitleContext::SetStyleName(const OUString& rStyleName) maStyleName = rStyleName; } -void ScXMLCellFieldTitleContext::StartElement(const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/) -{ -} - -void ScXMLCellFieldTitleContext::EndElement() +void SAL_CALL ScXMLCellFieldTitleContext::endFastElement( sal_Int32 /*nElement*/ ) { mrParentCxt.PushFieldTitle(maStyleName); } -void ScXMLCellFieldTitleContext::Characters(const OUString& /*rChars*/) -{ -} - -SvXMLImportContext* ScXMLCellFieldTitleContext::CreateChildContext( - sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/) -{ - return new SvXMLImportContext(GetImport(), nPrefix, rLocalName); -} - ScXMLCellFieldURLContext::ScXMLCellFieldURLContext( - ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLCellTextParaContext& rParent) : - ScXMLImportContext(rImport, nPrefix, rLName), + ScXMLImport& rImport, sal_Int32 /*nElement*/, ScXMLCellTextParaContext& rParent) : + ScXMLImportContext(rImport), mrParentCxt(rParent) { } @@ -301,58 +255,47 @@ void ScXMLCellFieldURLContext::SetStyleName(const OUString& rStyleName) maStyleName = rStyleName; } -void ScXMLCellFieldURLContext::StartElement(const uno::Reference<xml::sax::XAttributeList>& xAttrList) +void SAL_CALL ScXMLCellFieldURLContext::startFastElement( sal_Int32 /*nElement*/, + const uno::Reference< xml::sax::XFastAttributeList >& xAttrList ) { - if (!xAttrList.is()) - return; - - OUString aLocalName; - sal_Int16 nAttrCount = xAttrList->getLength(); - - const SvXMLTokenMap& rTokenMap = GetScImport().GetCellTextURLAttrTokenMap(); - for (sal_Int16 i = 0; i < nAttrCount; ++i) + if ( xAttrList.is() ) { - sal_uInt16 nAttrPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( - xAttrList->getNameByIndex(i), &aLocalName); + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList ); - const OUString& rAttrValue = xAttrList->getValueByIndex(i); - sal_uInt16 nToken = rTokenMap.Get(nAttrPrefix, aLocalName); - switch (nToken) + for (auto &aIter : *pAttribList) { - case XML_TOK_CELL_TEXT_URL_ATTR_UREF: - maURL = rAttrValue; - break; - case XML_TOK_CELL_TEXT_URL_ATTR_TYPE: - // Ignored for now. - break; - case XML_TOK_CELL_TEXT_URL_TARGET_FRAME: - maTargetFrame = rAttrValue; - break; - default: - ; + switch (aIter.getToken()) + { + case XML_ELEMENT( XLINK, XML_HREF ): + maURL = aIter.toString(); + break; + case XML_ELEMENT( XLINK, XML_TYPE ): + // Ignored for now. + break; + case XML_ELEMENT( OFFICE, XML_TARGET_FRAME_NAME ): + maTargetFrame = aIter.toString(); + break; + default: + ; + } } } } -void ScXMLCellFieldURLContext::EndElement() +void SAL_CALL ScXMLCellFieldURLContext::endFastElement( sal_Int32 /*nElement*/ ) { mrParentCxt.PushFieldURL(maURL, maRep, maStyleName, maTargetFrame); } -void ScXMLCellFieldURLContext::Characters(const OUString& rChars) +void SAL_CALL ScXMLCellFieldURLContext::characters( const OUString& rChars ) { maRep += rChars; } -SvXMLImportContext* ScXMLCellFieldURLContext::CreateChildContext( - sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/) -{ - return new SvXMLImportContext(GetImport(), nPrefix, rLocalName); -} - ScXMLCellFieldSContext::ScXMLCellFieldSContext( - ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLCellTextParaContext& rParent) : - ScXMLImportContext(rImport, nPrefix, rLName), + ScXMLImport& rImport, sal_Int32 /*nElement*/, ScXMLCellTextParaContext& rParent) : + ScXMLImportContext(rImport), mrParentCxt(rParent), mnCount(1) { @@ -363,43 +306,38 @@ void ScXMLCellFieldSContext::SetStyleName(const OUString& rStyleName) maStyleName = rStyleName; } -void ScXMLCellFieldSContext::StartElement(const uno::Reference<xml::sax::XAttributeList>& xAttrList) +void SAL_CALL ScXMLCellFieldSContext::startFastElement( sal_Int32 /*nElement*/, + const uno::Reference< xml::sax::XFastAttributeList >& xAttrList ) { - if (!xAttrList.is()) - return; - - OUString aLocalName; - sal_Int16 nAttrCount = xAttrList->getLength(); - - const SvXMLTokenMap& rTokenMap = GetScImport().GetCellTextSAttrTokenMap(); - for (sal_Int16 i = 0; i < nAttrCount; ++i) + if ( xAttrList.is() ) { - sal_uInt16 nAttrPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( - xAttrList->getNameByIndex(i), &aLocalName); + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( xAttrList ); - const OUString& rAttrValue = xAttrList->getValueByIndex(i); - sal_uInt16 nToken = rTokenMap.Get(nAttrPrefix, aLocalName); - switch (nToken) + for (auto &aIter : *pAttribList) { - case XML_TOK_CELL_TEXT_S_ATTR_C: - mnCount = rAttrValue.toInt32(); - if (mnCount <= 0) - mnCount = 1; // worth a warning? - break; - default: - ; + switch (aIter.getToken()) + { + case XML_ELEMENT( TEXT, XML_C ): + mnCount = aIter.toInt32(); + if (mnCount <= 0) + mnCount = 1; // worth a warning? + break; + default: + ; + } } } } -void ScXMLCellFieldSContext::EndElement() +void SAL_CALL ScXMLCellFieldSContext::endFastElement( sal_Int32 /*nElement*/ ) { if (mnCount) PushSpaces(); } -SvXMLImportContext* ScXMLCellFieldSContext::CreateChildContext( - sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference<xml::sax::XAttributeList>& /*xAttrList*/) +uno::Reference< xml::sax::XFastContextHandler > SAL_CALL ScXMLCellFieldSContext::createFastChildContext( + sal_Int32 /*nElement*/, const uno::Reference< xml::sax::XFastAttributeList >& /*xAttrList*/ ) { // <text:s> does not have child elements, but ... if (mnCount) @@ -408,7 +346,7 @@ SvXMLImportContext* ScXMLCellFieldSContext::CreateChildContext( mnCount = 0; } - return new SvXMLImportContext(GetImport(), nPrefix, rLocalName); + return new SvXMLImportContext(GetImport()); } void ScXMLCellFieldSContext::PushSpaces() diff --git a/sc/source/filter/xml/celltextparacontext.hxx b/sc/source/filter/xml/celltextparacontext.hxx index f6b8e2c2060e..fed9ac9dab54 100644 --- a/sc/source/filter/xml/celltextparacontext.hxx +++ b/sc/source/filter/xml/celltextparacontext.hxx @@ -23,13 +23,12 @@ class ScXMLCellTextParaContext : public ScXMLImportContext ScXMLTableRowCellContext& mrParentCxt; OUString maContent; public: - ScXMLCellTextParaContext(ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLTableRowCellContext& rParent); + ScXMLCellTextParaContext(ScXMLImport& rImport, sal_Int32 nElement, ScXMLTableRowCellContext& rParent); - virtual void StartElement(const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList) override; - virtual void EndElement() override; - virtual void Characters(const OUString& rChars) override; - virtual SvXMLImportContext* CreateChildContext( - sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList) override; + virtual void SAL_CALL endFastElement( sal_Int32 nElement ) override; + virtual void SAL_CALL characters( const OUString& aChars ) override; + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( + sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override; void PushSpan(const OUString& rSpan, const OUString& rStyleName); void PushFieldSheetName(const OUString& rStyleName); @@ -47,13 +46,14 @@ class ScXMLCellTextSpanContext : public ScXMLImportContext OUString maStyleName; OUString maContent; public: - ScXMLCellTextSpanContext(ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLCellTextParaContext& rParent); - - virtual void StartElement(const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList) override; - virtual void EndElement() override; - virtual void Characters(const OUString& rChars) override; - virtual SvXMLImportContext* CreateChildContext( - sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList) override; + ScXMLCellTextSpanContext(ScXMLImport& rImport, sal_Int32 nElement, ScXMLCellTextParaContext& rParent); + + virtual void SAL_CALL startFastElement( sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override; + virtual void SAL_CALL endFastElement( sal_Int32 nElement ) override; + virtual void SAL_CALL characters( const OUString& aChars ) override; + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( + sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override; }; /** @@ -64,15 +64,13 @@ class ScXMLCellFieldSheetNameContext : public ScXMLImportContext ScXMLCellTextParaContext& mrParentCxt; OUString maStyleName; public: - ScXMLCellFieldSheetNameContext(ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLCellTextParaContext& rParent); + ScXMLCellFieldSheetNameContext(ScXMLImport& rImport, sal_Int32 nElement, ScXMLCellTextParaContext& rParent); void SetStyleName(const OUString& rStyleName); - virtual void StartElement(const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList) override; - virtual void EndElement() override; - virtual void Characters(const OUString& rChars) override; - virtual SvXMLImportContext* CreateChildContext( - sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList) override; + virtual void SAL_CALL startFastElement( sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override; + virtual void SAL_CALL endFastElement( sal_Int32 nElement ) override; }; /** @@ -83,15 +81,11 @@ class ScXMLCellFieldDateContext : public ScXMLImportContext ScXMLCellTextParaContext& mrParentCxt; OUString maStyleName; public: - ScXMLCellFieldDateContext(ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLCellTextParaContext& rParent); + ScXMLCellFieldDateContext(ScXMLImport& rImport, sal_Int32 nElement, ScXMLCellTextParaContext& rParent); void SetStyleName(const OUString& rStyleName); - virtual void StartElement(const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList) override; - virtual void EndElement() override; - virtual void Characters(const OUString& rChars) override; - virtual SvXMLImportContext* CreateChildContext( - sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList) override; + virtual void SAL_CALL endFastElement( sal_Int32 nElement ) override; }; /** @@ -102,15 +96,11 @@ class ScXMLCellFieldTitleContext : public ScXMLImportContext ScXMLCellTextParaContext& mrParentCxt; OUString maStyleName; public: - ScXMLCellFieldTitleContext(ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLCellTextParaContext& rParent); + ScXMLCellFieldTitleContext(ScXMLImport& rImport, sal_Int32 nElement, ScXMLCellTextParaContext& rParent); void SetStyleName(const OUString& rStyleName); - virtual void StartElement(const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList) override; - virtual void EndElement() override; - virtual void Characters(const OUString& rChars) override; - virtual SvXMLImportContext* CreateChildContext( - sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList) override; + virtual void SAL_CALL endFastElement( sal_Int32 nElement ) override; }; /** @@ -124,15 +114,14 @@ class ScXMLCellFieldURLContext : public ScXMLImportContext OUString maRep; OUString maTargetFrame; public: - ScXMLCellFieldURLContext(ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLCellTextParaContext& rParent); + ScXMLCellFieldURLContext(ScXMLImport& rImport, sal_Int32 nElement, ScXMLCellTextParaContext& rParent); void SetStyleName(const OUString& rStyleName); - virtual void StartElement(const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList) override; - virtual void EndElement() override; - virtual void Characters(const OUString& rChars) override; - virtual SvXMLImportContext* CreateChildContext( - sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList) override; + virtual void SAL_CALL startFastElement( sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override; + virtual void SAL_CALL endFastElement( sal_Int32 nElement ) override; + virtual void SAL_CALL characters( const OUString& aChars ) override; }; /** @@ -146,14 +135,15 @@ class ScXMLCellFieldSContext : public ScXMLImportContext void PushSpaces(); public: - ScXMLCellFieldSContext(ScXMLImport& rImport, sal_uInt16 nPrefix, const OUString& rLName, ScXMLCellTextParaContext& rParent); + ScXMLCellFieldSContext(ScXMLImport& rImport, sal_Int32 nElement, ScXMLCellTextParaContext& rParent); void SetStyleName(const OUString& rStyleName); - virtual void StartElement(const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList) override; - virtual void EndElement() override; - virtual SvXMLImportContext* CreateChildContext( - sal_uInt16 nPrefix, const OUString& rLocalName, const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList) override; + virtual void SAL_CALL startFastElement( sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override; + virtual void SAL_CALL endFastElement( sal_Int32 nElement ) override; + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( + sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override; }; #endif diff --git a/sc/source/filter/xml/xmlcelli.cxx b/sc/source/filter/xml/xmlcelli.cxx index 8989827d4c2d..043190f41bbf 100644 --- a/sc/source/filter/xml/xmlcelli.cxx +++ b/sc/source/filter/xml/xmlcelli.cxx @@ -654,15 +654,7 @@ SvXMLImportContext *ScXMLTableRowCellContext::CreateChildContext( sal_uInt16 nPr { case XML_TOK_TABLE_ROW_CELL_P: { - bIsEmpty = false; bTextP = true; - - pContext = new ScXMLCellTextParaContext(rXMLImport, nPrefix, rLName, *this); - } - break; - case XML_TOK_TABLE_ROW_CELL_TABLE: - { - SAL_WARN("sc", "ScXMLTableRowCellContext::CreateChildContext: subtables are not supported"); } break; case XML_TOK_TABLE_ROW_CELL_ANNOTATION: @@ -674,24 +666,6 @@ SvXMLImportContext *ScXMLTableRowCellContext::CreateChildContext( sal_uInt16 nPr xAttrList, *mxAnnotationData); } break; - case XML_TOK_TABLE_ROW_CELL_DETECTIVE: - { - bIsEmpty = false; - if (!pDetectiveObjVec) - pDetectiveObjVec = new ScMyImpDetectiveObjVec; - pContext = new ScXMLDetectiveContext( - rXMLImport, nPrefix, rLName, pDetectiveObjVec ); - } - break; - case XML_TOK_TABLE_ROW_CELL_CELL_RANGE_SOURCE: - { - bIsEmpty = false; - if (!pCellRangeSource) - pCellRangeSource = new ScMyImpCellRangeSource(); - pContext = new ScXMLCellRangeSourceContext( - rXMLImport, nPrefix, rLName, xAttrList, pCellRangeSource ); - } - break; } if (!pContext && !bTextP) @@ -724,6 +698,53 @@ SvXMLImportContext *ScXMLTableRowCellContext::CreateChildContext( sal_uInt16 nPr return pContext; } +uno::Reference< xml::sax::XFastContextHandler > SAL_CALL ScXMLTableRowCellContext::createFastChildContext( + sal_Int32 nElement, const uno::Reference< xml::sax::XFastAttributeList >& xAttrList ) +{ + SvXMLImportContext *pContext = nullptr; + + // bool bTextP(false); + switch (nElement) + { + case XML_ELEMENT( TEXT, XML_P ): + { + bIsEmpty = false; + // bTextP = true; + + pContext = new ScXMLCellTextParaContext(rXMLImport, nElement, *this); + } + break; + case XML_ELEMENT( TABLE, XML_SUB_TABLE ): + { + SAL_WARN("sc", "ScXMLTableRowCellContext::createFastChildContext: subtables are not supported"); + } + break; + case XML_ELEMENT( TABLE, XML_DETECTIVE ): + { + bIsEmpty = false; + if (!pDetectiveObjVec) + pDetectiveObjVec = new ScMyImpDetectiveObjVec; + pContext = new ScXMLDetectiveContext( + rXMLImport, nElement, pDetectiveObjVec ); + } + break; + case XML_ELEMENT( TABLE, XML_CELL_RANGE_SOURCE ): + { + bIsEmpty = false; + if (!pCellRangeSource) + pCellRangeSource = new ScMyImpCellRangeSource(); + pContext = new ScXMLCellRangeSourceContext( + rXMLImport, nElement, xAttrList, pCellRangeSource ); + } + break; + } + + if( !pContext ) + pContext = new SvXMLImportContext( GetImport() ); + + return pContext; +} + void ScXMLTableRowCellContext::DoMerge( const ScAddress& rScAddress, const SCCOL nCols, const SCROW nRows ) { SCCOL mergeToCol = rScAddress.Col() + nCols; diff --git a/sc/source/filter/xml/xmlcelli.hxx b/sc/source/filter/xml/xmlcelli.hxx index d7a706388a5c..0a859f6b2c6e 100644 --- a/sc/source/filter/xml/xmlcelli.hxx +++ b/sc/source/filter/xml/xmlcelli.hxx @@ -139,6 +139,9 @@ public: const OUString& rLocalName, const css::uno::Reference<css::xml::sax::XAttributeList>& xAttrList ) override; + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( + sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override; + void PushParagraphSpan(const OUString& rSpan, const OUString& rStyleName); void PushParagraphFieldDate(const OUString& rStyleName); void PushParagraphFieldSheetName(const OUString& rStyleName); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits