From 357bf8984ada1259720903ad7c7c44c9a6551cc8 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Tue, 21 Jan 2020 21:44:49 +0200 Subject: Convert reportdesign to fastparser Change-Id: I0703344aad4ca6c72e494160b019c13e24cc843a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87160 Tested-by: Jenkins Reviewed-by: Noel Grandin --- reportdesign/source/filter/xml/xmlCell.cxx | 96 +++++++++++----------- reportdesign/source/filter/xml/xmlCell.hxx | 13 +-- reportdesign/source/filter/xml/xmlColumn.cxx | 54 +++++------- reportdesign/source/filter/xml/xmlColumn.hxx | 11 +-- reportdesign/source/filter/xml/xmlComponent.cxx | 32 ++------ reportdesign/source/filter/xml/xmlComponent.hxx | 4 +- reportdesign/source/filter/xml/xmlCondPrtExpr.cxx | 26 +++--- reportdesign/source/filter/xml/xmlCondPrtExpr.hxx | 6 +- .../source/filter/xml/xmlControlProperty.cxx | 54 +++++------- .../source/filter/xml/xmlControlProperty.hxx | 13 ++- reportdesign/source/filter/xml/xmlFixedContent.cxx | 63 ++++++-------- reportdesign/source/filter/xml/xmlFixedContent.hxx | 12 ++- .../source/filter/xml/xmlFormatCondition.cxx | 27 +++--- .../source/filter/xml/xmlFormatCondition.hxx | 7 +- .../source/filter/xml/xmlFormattedField.cxx | 25 +++--- .../source/filter/xml/xmlFormattedField.hxx | 4 +- reportdesign/source/filter/xml/xmlFunction.cxx | 35 +++----- reportdesign/source/filter/xml/xmlFunction.hxx | 6 +- reportdesign/source/filter/xml/xmlGroup.cxx | 68 +++++++-------- reportdesign/source/filter/xml/xmlGroup.hxx | 11 +-- reportdesign/source/filter/xml/xmlImage.cxx | 27 +++--- reportdesign/source/filter/xml/xmlImage.hxx | 5 +- reportdesign/source/filter/xml/xmlMasterFields.cxx | 43 ++++------ reportdesign/source/filter/xml/xmlMasterFields.hxx | 11 +-- reportdesign/source/filter/xml/xmlReport.cxx | 80 ++++++++---------- reportdesign/source/filter/xml/xmlReport.hxx | 14 ++-- .../source/filter/xml/xmlReportElement.cxx | 49 +++++------ .../source/filter/xml/xmlReportElement.hxx | 10 +-- .../source/filter/xml/xmlReportElementBase.cxx | 38 ++++----- .../source/filter/xml/xmlReportElementBase.hxx | 17 ++-- reportdesign/source/filter/xml/xmlSection.cxx | 46 +++++------ reportdesign/source/filter/xml/xmlSection.hxx | 9 +- reportdesign/source/filter/xml/xmlSubDocument.cxx | 54 ++++++------ reportdesign/source/filter/xml/xmlSubDocument.hxx | 13 +-- reportdesign/source/filter/xml/xmlTable.cxx | 69 +++++++--------- reportdesign/source/filter/xml/xmlTable.hxx | 11 +-- reportdesign/source/filter/xml/xmlfilter.cxx | 24 +++--- reportdesign/source/filter/xml/xmlfilter.hxx | 14 ++-- 38 files changed, 476 insertions(+), 625 deletions(-) (limited to 'reportdesign') diff --git a/reportdesign/source/filter/xml/xmlCell.cxx b/reportdesign/source/filter/xml/xmlCell.cxx index 0c6646d11934..74a23667863f 100644 --- a/reportdesign/source/filter/xml/xmlCell.cxx +++ b/reportdesign/source/filter/xml/xmlCell.cxx @@ -46,12 +46,10 @@ namespace rptxml OXMLCell::OXMLCell( ORptFilter& rImport - ,sal_uInt16 nPrfx - ,const OUString& _sLocalName - ,const Reference< XAttributeList > & _xAttrList + ,const Reference< XFastAttributeList > & _xAttrList ,OXMLTable* _pContainer ,OXMLCell* _pCell) : - SvXMLImportContext( rImport, nPrfx, _sLocalName ) + SvXMLImportContext( rImport ) ,m_pContainer(_pContainer) ,m_pCell(_pCell) ,m_nCurrentCount(0) @@ -60,27 +58,21 @@ OXMLCell::OXMLCell( ORptFilter& rImport if ( !m_pCell ) m_pCell = this; - OSL_ENSURE(_xAttrList.is(),"Attribute list is NULL!"); - const SvXMLNamespaceMap& rMap = rImport.GetNamespaceMap(); - const SvXMLTokenMap& rTokenMap = rImport.GetColumnTokenMap(); - - const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0; - for(sal_Int16 i = 0; i < nLength; ++i) + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList ); + for (auto &aIter : *pAttribList) { - OUString sLocalName; - const OUString sAttrName = _xAttrList->getNameByIndex( i ); - const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName ); - const OUString sValue = _xAttrList->getValueByIndex( i ); + OUString sValue = aIter.toString(); - switch( rTokenMap.Get( nPrefix, sLocalName ) ) + switch( aIter.getToken() ) { - case XML_TOK_COLUMN_STYLE_NAME: + case XML_ELEMENT(TABLE, XML_STYLE_NAME): m_sStyleName = sValue; break; - case XML_TOK_NUMBER_COLUMNS_SPANNED: + case XML_ELEMENT(TABLE, XML_NUMBER_COLUMNS_SPANNED): m_pContainer->setColumnSpanned(sValue.toInt32()); break; - case XML_TOK_NUMBER_ROWS_SPANNED: + case XML_ELEMENT(TABLE, XML_NUMBER_ROWS_SPANNED): m_pContainer->setRowSpanned(sValue.toInt32()); break; default: @@ -101,25 +93,48 @@ SvXMLImportContextRef OXMLCell::CreateChildContext( SvXMLImportContext *pContext = nullptr; ORptFilter& rImport = GetOwnImport(); const SvXMLTokenMap& rTokenMap = rImport.GetCellElemTokenMap(); + const sal_uInt16 nToken = rTokenMap.Get( _nPrefix, _rLocalName ); + switch( nToken ) + { + case XML_TOK_CUSTOM_SHAPE: + case XML_TOK_FRAME: + { + if ( !m_bContainsShape ) + m_nCurrentCount = m_pContainer->getSection()->getCount(); + rtl::Reference< XMLShapeImportHelper > xShapeImportHelper = rImport.GetShapeImport(); + uno::Reference< drawing::XShapes > xShapes = m_pContainer->getSection().get(); + pContext = xShapeImportHelper->CreateGroupChildContext(rImport,_nPrefix,_rLocalName,xAttrList,xShapes); + m_bContainsShape = true; + } + break; + } + return pContext; +} + +css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLCell::createFastChildContext( + sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) +{ + css::uno::Reference< css::xml::sax::XFastContextHandler > xContext; + ORptFilter& rImport = GetOwnImport(); Reference xFactor(rImport.GetModel(),uno::UNO_QUERY); static const char s_sStringConcat[] = " & "; - const sal_uInt16 nToken = rTokenMap.Get( _nPrefix, _rLocalName ); - switch( nToken ) + switch( nElement ) { - case XML_TOK_FIXED_CONTENT: + case XML_ELEMENT(REPORT, XML_FIXED_CONTENT): { rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = new OXMLFixedContent( rImport, _nPrefix, _rLocalName,*m_pCell,m_pContainer); + xContext = new OXMLFixedContent( rImport,*m_pCell,m_pContainer); } break; - case XML_TOK_PAGE_NUMBER: + case XML_ELEMENT(TEXT, XML_PAGE_NUMBER): m_sText += OUStringLiteral(s_sStringConcat) + " PageNumber()"; break; - case XML_TOK_PAGE_COUNT: + case XML_ELEMENT(TEXT, XML_PAGE_COUNT): m_sText += OUStringLiteral(s_sStringConcat) + " PageCount()"; break; - case XML_TOK_FORMATTED_TEXT: + case XML_ELEMENT(REPORT, XML_FORMATTED_TEXT): { rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); uno::Reference< uno::XInterface> xInt = xFactor->createInstance(SERVICE_FORMATTEDFIELD); @@ -128,10 +143,10 @@ SvXMLImportContextRef OXMLCell::CreateChildContext( OSL_ENSURE(xControl.is(),"Could not create FormattedField!"); setComponent(xControl.get()); if ( xControl.is() ) - pContext = new OXMLFormattedField( rImport, _nPrefix, _rLocalName,xAttrList,xControl.get(),m_pContainer,XML_TOK_PAGE_COUNT == nToken); + xContext = new OXMLFormattedField( rImport,xAttrList,xControl.get(),m_pContainer, false); } break; - case XML_TOK_IMAGE: + case XML_ELEMENT(REPORT, XML_IMAGE): { rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); Reference< XImageControl > xControl(xFactor->createInstance(SERVICE_IMAGECONTROL),uno::UNO_QUERY); @@ -139,33 +154,22 @@ SvXMLImportContextRef OXMLCell::CreateChildContext( OSL_ENSURE(xControl.is(),"Could not create ImageControl!"); setComponent(xControl.get()); if ( xControl.is() ) - pContext = new OXMLImage( rImport, _nPrefix, _rLocalName,xAttrList,xControl.get(),m_pContainer); + xContext = new OXMLImage( rImport,xAttrList,xControl.get(),m_pContainer); } break; - case XML_TOK_SUB_DOCUMENT: + case XML_ELEMENT(REPORT, XML_SUB_DOCUMENT): { rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); if ( !m_bContainsShape ) m_nCurrentCount = m_pContainer->getSection()->getCount(); uno::Reference< uno::XInterface> xInt = xFactor->createInstance(SERVICE_FORMATTEDFIELD); Reference< report::XFormattedField > xControl(xInt,uno::UNO_QUERY); - pContext = new OXMLSubDocument( rImport, _nPrefix, _rLocalName,xControl.get(),m_pContainer, this /* give the current cell as parent*/ ); + xContext = new OXMLSubDocument( rImport,xControl.get(),m_pContainer, this /* give the current cell as parent*/ ); } break; - case XML_TOK_P: - pContext = new OXMLCell( rImport, _nPrefix, _rLocalName,xAttrList ,m_pContainer,this); - break; - case XML_TOK_CUSTOM_SHAPE: - case XML_TOK_FRAME: - { - if ( !m_bContainsShape ) - m_nCurrentCount = m_pContainer->getSection()->getCount(); - rtl::Reference< XMLShapeImportHelper > xShapeImportHelper = rImport.GetShapeImport(); - uno::Reference< drawing::XShapes > xShapes = m_pContainer->getSection().get(); - pContext = xShapeImportHelper->CreateGroupChildContext(rImport,_nPrefix,_rLocalName,xAttrList,xShapes); - m_bContainsShape = true; - } + case XML_ELEMENT(TEXT, XML_P): + xContext = new OXMLCell( rImport,xAttrList ,m_pContainer,this); break; default: break; @@ -174,10 +178,10 @@ SvXMLImportContextRef OXMLCell::CreateChildContext( if ( m_xComponent.is() ) m_pContainer->addCell(m_xComponent); - return pContext; + return xContext; } -void OXMLCell::EndElement() +void OXMLCell::endFastElement(sal_Int32) { if ( m_bContainsShape ) { @@ -247,7 +251,7 @@ void OXMLCell::setComponent(const uno::Reference< report::XReportComponent >& _x m_xComponent = _xComponent; } -void OXMLCell::Characters( const OUString& rChars ) +void OXMLCell::characters( const OUString& rChars ) { if ( !rChars.isEmpty() ) { diff --git a/reportdesign/source/filter/xml/xmlCell.hxx b/reportdesign/source/filter/xml/xmlCell.hxx index 059d58f3636f..998e3a936f54 100644 --- a/reportdesign/source/filter/xml/xmlCell.hxx +++ b/reportdesign/source/filter/xml/xmlCell.hxx @@ -42,9 +42,7 @@ namespace rptxml public: OXMLCell( ORptFilter& rImport - ,sal_uInt16 nPrfx - ,const OUString& rLName - ,const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList + ,const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ,OXMLTable* _pContainer ,OXMLCell* _pCell = nullptr); virtual ~OXMLCell() override; @@ -53,8 +51,13 @@ namespace rptxml const OUString& rLocalName, const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ) override; - virtual void Characters( const OUString& rChars ) override; - virtual void EndElement() 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; + + virtual void SAL_CALL startFastElement( sal_Int32 /*nElement*/, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& ) override {} + virtual void SAL_CALL characters( const OUString& rChars ) override; + virtual void SAL_CALL endFastElement(sal_Int32 nElement) override; void setComponent(const css::uno::Reference< css::report::XReportComponent >& _xComponent); void setContainsShape(bool _bContainsShapes); diff --git a/reportdesign/source/filter/xml/xmlColumn.cxx b/reportdesign/source/filter/xml/xmlColumn.cxx index 6498296cc441..13e6b0767578 100644 --- a/reportdesign/source/filter/xml/xmlColumn.cxx +++ b/reportdesign/source/filter/xml/xmlColumn.cxx @@ -46,29 +46,21 @@ namespace rptxml OXMLRowColumn::OXMLRowColumn( ORptFilter& rImport - ,sal_uInt16 nPrfx - ,const OUString& _sLocalName - ,const Reference< XAttributeList > & _xAttrList + ,const Reference< XFastAttributeList > & _xAttrList ,OXMLTable* _pContainer ) : - SvXMLImportContext( rImport, nPrfx, _sLocalName ) + SvXMLImportContext( rImport ) ,m_pContainer(_pContainer) { - - const SvXMLNamespaceMap& rMap = rImport.GetNamespaceMap(); - const SvXMLTokenMap& rTokenMap = rImport.GetColumnTokenMap(); - - const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0; - for(sal_Int16 i = 0; i < nLength; ++i) + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList ); + for (auto &aIter : *pAttribList) { - OUString sLocalName; - const OUString sAttrName = _xAttrList->getNameByIndex( i ); - const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName ); - const OUString sValue = _xAttrList->getValueByIndex( i ); + OUString sValue = aIter.toString(); - switch( rTokenMap.Get( nPrefix, sLocalName ) ) + switch( aIter.getToken() ) { - case XML_TOK_COLUMN_STYLE_NAME: + case XML_ELEMENT(TABLE, XML_STYLE_NAME): fillStyle(sValue); break; default: @@ -82,32 +74,30 @@ OXMLRowColumn::~OXMLRowColumn() { } -SvXMLImportContextRef OXMLRowColumn::CreateChildContext( - sal_uInt16 nPrefix, - const OUString& rLocalName, - const Reference< XAttributeList > & xAttrList ) +css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLRowColumn::createFastChildContext( + sal_Int32 nElement, + const Reference< XFastAttributeList > & xAttrList ) { - SvXMLImportContext *pContext = nullptr; + css::uno::Reference< css::xml::sax::XFastContextHandler > xContext; ORptFilter& rImport = GetOwnImport(); - const SvXMLTokenMap& rTokenMap = rImport.GetColumnTokenMap(); - switch( rTokenMap.Get( nPrefix, rLocalName ) ) + switch( nElement ) { - case XML_TOK_COLUMN: + case XML_ELEMENT(TABLE, XML_TABLE_COLUMN): rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = new OXMLRowColumn( rImport, nPrefix, rLocalName,xAttrList,m_pContainer); + xContext = new OXMLRowColumn( rImport,xAttrList,m_pContainer); break; - case XML_TOK_ROW: + case XML_ELEMENT(TABLE, XML_TABLE_ROW): m_pContainer->incrementRowIndex(); rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = new OXMLRowColumn( rImport, nPrefix, rLocalName,xAttrList,m_pContainer); + xContext = new OXMLRowColumn( rImport,xAttrList,m_pContainer); break; - case XML_TOK_CELL: + case XML_ELEMENT(TABLE, XML_TABLE_CELL): m_pContainer->incrementColumnIndex(); rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = new OXMLCell( rImport, nPrefix, rLocalName,xAttrList,m_pContainer); + xContext = new OXMLCell( rImport,xAttrList,m_pContainer); break; - case XML_TOK_COV_CELL: + case XML_ELEMENT(TABLE, XML_COVERED_TABLE_CELL): m_pContainer->incrementColumnIndex(); m_pContainer->addCell(nullptr); break; @@ -115,7 +105,7 @@ SvXMLImportContextRef OXMLRowColumn::CreateChildContext( break; } - return pContext; + return xContext; } void OXMLRowColumn::fillStyle(const OUString& _sStyleName) @@ -174,7 +164,7 @@ ORptFilter& OXMLRowColumn::GetOwnImport() return static_cast(GetImport()); } -void OXMLRowColumn::EndElement() +void OXMLRowColumn::endFastElement(sal_Int32 ) { } diff --git a/reportdesign/source/filter/xml/xmlColumn.hxx b/reportdesign/source/filter/xml/xmlColumn.hxx index 0aa34130d8d1..16e739e9bca1 100644 --- a/reportdesign/source/filter/xml/xmlColumn.hxx +++ b/reportdesign/source/filter/xml/xmlColumn.hxx @@ -37,17 +37,14 @@ namespace rptxml public: OXMLRowColumn( ORptFilter& rImport - ,sal_uInt16 nPrfx - ,const OUString& rLName - ,const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList + ,const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ,OXMLTable* _pContainer ); virtual ~OXMLRowColumn() override; - virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ) override; - virtual void EndElement() 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; + virtual void SAL_CALL endFastElement(sal_Int32 nElement) override; }; } // namespace rptxml diff --git a/reportdesign/source/filter/xml/xmlComponent.cxx b/reportdesign/source/filter/xml/xmlComponent.cxx index 976a7393a448..d63ccd713853 100644 --- a/reportdesign/source/filter/xml/xmlComponent.cxx +++ b/reportdesign/source/filter/xml/xmlComponent.cxx @@ -38,41 +38,27 @@ namespace rptxml using namespace ::com::sun::star::report; using namespace ::com::sun::star::xml::sax; OXMLComponent::OXMLComponent( ORptFilter& _rImport - ,sal_uInt16 nPrfx - ,const OUString& _sLocalName - ,const Reference< XAttributeList > & _xAttrList + ,const Reference< XFastAttributeList > & _xAttrList ,const Reference< XReportComponent > & _xComponent ) : - SvXMLImportContext( _rImport, nPrfx, _sLocalName ) + SvXMLImportContext( _rImport ) ,m_xComponent(_xComponent) { - OSL_ENSURE(_xAttrList.is(),"Attribute list is NULL!"); OSL_ENSURE(m_xComponent.is(),"Component is NULL!"); - const SvXMLNamespaceMap& rMap = _rImport.GetNamespaceMap(); - const SvXMLTokenMap& rTokenMap = _rImport.GetComponentElemTokenMap(); - - const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0; - - for(sal_Int16 i = 0; i < nLength; ++i) + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList ); + for (auto &aIter : *pAttribList) { + OUString sValue = aIter.toString(); + try { - OUString sLocalName; - const OUString sAttrName = _xAttrList->getNameByIndex( i ); - const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName ); - const OUString sValue = _xAttrList->getValueByIndex( i ); - - switch( rTokenMap.Get( nPrefix, sLocalName ) ) + switch( aIter.getToken() ) { - case XML_TOK_NAME: + case XML_ELEMENT(DRAW, XML_NAME): m_xComponent->setName(sValue); break; - case XML_TOK_TEXT_STYLE_NAME: - case XML_TOK_TRANSFORM: - break; - default: - break; } } catch(const Exception&) diff --git a/reportdesign/source/filter/xml/xmlComponent.hxx b/reportdesign/source/filter/xml/xmlComponent.hxx index be6822fa9cd2..efe4849aa705 100644 --- a/reportdesign/source/filter/xml/xmlComponent.hxx +++ b/reportdesign/source/filter/xml/xmlComponent.hxx @@ -35,9 +35,7 @@ namespace rptxml public: OXMLComponent( ORptFilter& rImport - , sal_uInt16 nPrfx - ,const OUString& rLName - ,const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList + ,const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ,const css::uno::Reference< css::report::XReportComponent >& _xComponent ); virtual ~OXMLComponent() override; diff --git a/reportdesign/source/filter/xml/xmlCondPrtExpr.cxx b/reportdesign/source/filter/xml/xmlCondPrtExpr.cxx index 9a2ec9e1ad60..7826f121a57e 100644 --- a/reportdesign/source/filter/xml/xmlCondPrtExpr.cxx +++ b/reportdesign/source/filter/xml/xmlCondPrtExpr.cxx @@ -33,30 +33,24 @@ namespace rptxml using namespace uno; using namespace xml::sax; -OXMLCondPrtExpr::OXMLCondPrtExpr( ORptFilter& _rImport, - sal_uInt16 nPrfx - ,const OUString& rLName - ,const uno::Reference< xml::sax::XAttributeList > & _xAttrList +OXMLCondPrtExpr::OXMLCondPrtExpr( ORptFilter& _rImport + ,const uno::Reference< xml::sax::XFastAttributeList > & _xAttrList ,const Reference< XPropertySet > & _xComponent ) : - SvXMLImportContext( _rImport, nPrfx, rLName ) + SvXMLImportContext( _rImport ) ,m_xComponent(_xComponent) { OSL_ENSURE(m_xComponent.is(),"Component is NULL!"); - const SvXMLNamespaceMap& rMap = _rImport.GetNamespaceMap(); - const SvXMLTokenMap& rTokenMap = _rImport.GetFunctionElemTokenMap(); - const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0; try { - for(sal_Int16 i = 0; i < nLength; ++i) + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList ); + for (auto &aIter : *pAttribList) { - OUString sLocalName; - const OUString sAttrName = _xAttrList->getNameByIndex( i ); - const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName ); - const OUString sValue = _xAttrList->getValueByIndex( i ); + OUString sValue = aIter.toString(); - switch( rTokenMap.Get( nPrefix, sLocalName ) ) + switch( aIter.getToken() ) { - case XML_TOK_FUNCTION_FORMULA: + case XML_ELEMENT(REPORT, XML_FORMULA): m_xComponent->setPropertyValue(PROPERTY_CONDITIONALPRINTEXPRESSION,uno::makeAny(ORptFilter::convertFormula(sValue))); break; default: @@ -77,7 +71,7 @@ OXMLCondPrtExpr::~OXMLCondPrtExpr() } -void OXMLCondPrtExpr::Characters( const OUString& rChars ) +void OXMLCondPrtExpr::characters( const OUString& rChars ) { m_xComponent->setPropertyValue(PROPERTY_CONDITIONALPRINTEXPRESSION,makeAny(rChars)); } diff --git a/reportdesign/source/filter/xml/xmlCondPrtExpr.hxx b/reportdesign/source/filter/xml/xmlCondPrtExpr.hxx index 8d757bc0469f..426188efcc63 100644 --- a/reportdesign/source/filter/xml/xmlCondPrtExpr.hxx +++ b/reportdesign/source/filter/xml/xmlCondPrtExpr.hxx @@ -33,15 +33,13 @@ namespace rptxml public: OXMLCondPrtExpr( ORptFilter& _rImport - ,sal_uInt16 nPrfx - ,const OUString& rLName - ,const css::uno::Reference< css::xml::sax::XAttributeList > & _xAttrList + ,const css::uno::Reference< css::xml::sax::XFastAttributeList > & _xAttrList ,const css::uno::Reference< css::beans::XPropertySet >& _xComponent); virtual ~OXMLCondPrtExpr() override; // This method is called for all characters that are contained in the // current element. The default is to ignore them. - virtual void Characters( const OUString& rChars ) override; + virtual void SAL_CALL characters( const OUString& rChars ) override; }; } // namespace rptxml diff --git a/reportdesign/source/filter/xml/xmlControlProperty.cxx b/reportdesign/source/filter/xml/xmlControlProperty.cxx index 3f31577f842f..19b0c77aa67a 100644 --- a/reportdesign/source/filter/xml/xmlControlProperty.cxx +++ b/reportdesign/source/filter/xml/xmlControlProperty.cxx @@ -49,38 +49,30 @@ namespace rptxml using namespace ::com::sun::star::xml::sax; OXMLControlProperty::OXMLControlProperty( ORptFilter& rImport - ,sal_uInt16 nPrfx - ,const OUString& _sLocalName - ,const Reference< XAttributeList > & _xAttrList + ,const Reference< XFastAttributeList > & _xAttrList ,const Reference< XPropertySet >& _xControl ,OXMLControlProperty* _pContainer) : - SvXMLImportContext( rImport, nPrfx, _sLocalName ) + SvXMLImportContext( rImport ) ,m_xControl(_xControl) ,m_pContainer(_pContainer) ,m_bIsList(false) { m_aPropType = cppu::UnoType::get(); - OSL_ENSURE(_xAttrList.is(),"Attribute list is NULL!"); OSL_ENSURE(m_xControl.is(),"Control is NULL!"); - const SvXMLNamespaceMap& rMap = rImport.GetNamespaceMap(); - const SvXMLTokenMap& rTokenMap = rImport.GetControlPropertyElemTokenMap(); - - const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0; - for(sal_Int16 i = 0; i < nLength; ++i) + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList ); + for (auto &aIter : *pAttribList) { - OUString sLocalName; - const OUString sAttrName = _xAttrList->getNameByIndex( i ); - const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName ); - const OUString sValue = _xAttrList->getValueByIndex( i ); + OUString sValue = aIter.toString(); - switch( rTokenMap.Get( nPrefix, sLocalName ) ) + switch( aIter.getToken() ) { - case XML_TOK_LIST_PROPERTY: + case XML_ELEMENT(FORM, XML_LIST_PROPERTY): m_bIsList = sValue == "true"; break; - case XML_TOK_VALUE_TYPE: + case XML_ELEMENT(OOO, XML_VALUE_TYPE): { // needs to be translated into a css::uno::Type static std::map< OUString, css::uno::Type > const s_aTypeNameMap @@ -103,7 +95,7 @@ OXMLControlProperty::OXMLControlProperty( ORptFilter& rImport m_aPropType = aTypePos->second; } break; - case XML_TOK_PROPERTY_NAME: + case XML_ELEMENT(FORM, XML_PROPERTY_NAME): m_aSetting.Name = sValue; break; default: @@ -118,33 +110,31 @@ OXMLControlProperty::~OXMLControlProperty() { } -SvXMLImportContextRef OXMLControlProperty::CreateChildContext( - sal_uInt16 nPrefix, - const OUString& rLocalName, - const Reference< XAttributeList > & xAttrList ) +css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLControlProperty::createFastChildContext( + sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) { - SvXMLImportContext *pContext = nullptr; + css::uno::Reference< css::xml::sax::XFastContextHandler > xContext; ORptFilter& rImport = GetOwnImport(); - const SvXMLTokenMap& rTokenMap = rImport.GetControlPropertyElemTokenMap(); - switch( rTokenMap.Get( nPrefix, rLocalName ) ) + switch( nElement ) { - case XML_TOK_LIST_PROPERTY: + case XML_ELEMENT(FORM, XML_LIST_PROPERTY): rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = new OXMLControlProperty( rImport, nPrefix, rLocalName,xAttrList,m_xControl); + xContext = new OXMLControlProperty( rImport,xAttrList,m_xControl); break; - case XML_TOK_VALUE: + case XML_ELEMENT(OOO, XML_VALUE): rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = new OXMLControlProperty( rImport, nPrefix, rLocalName,xAttrList,m_xControl,this ); + xContext = new OXMLControlProperty( rImport,xAttrList,m_xControl,this ); break; default: break; } - return pContext; + return xContext; } -void OXMLControlProperty::EndElement() +void OXMLControlProperty::endFastElement(sal_Int32 ) { if ( !m_aSetting.Name.isEmpty() && m_xControl.is() ) { @@ -161,7 +151,7 @@ void OXMLControlProperty::EndElement() } } -void OXMLControlProperty::Characters( const OUString& rChars ) +void OXMLControlProperty::characters( const OUString& rChars ) { if ( m_pContainer ) m_pContainer->addValue(rChars); diff --git a/reportdesign/source/filter/xml/xmlControlProperty.hxx b/reportdesign/source/filter/xml/xmlControlProperty.hxx index 8b2bf6440be2..15379d27b720 100644 --- a/reportdesign/source/filter/xml/xmlControlProperty.hxx +++ b/reportdesign/source/filter/xml/xmlControlProperty.hxx @@ -45,20 +45,17 @@ namespace rptxml public: OXMLControlProperty( ORptFilter& rImport - ,sal_uInt16 nPrfx - ,const OUString& rLName - ,const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList + ,const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ,const css::uno::Reference< css::beans::XPropertySet >& _xControl ,OXMLControlProperty* _pContainer = nullptr); virtual ~OXMLControlProperty() override; - virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix, - 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; - virtual void EndElement() override; + virtual void SAL_CALL endFastElement(sal_Int32 nElement) override; - virtual void Characters( const OUString& rChars ) override; + virtual void SAL_CALL characters( const OUString& rChars ) override; /** adds value to property diff --git a/reportdesign/source/filter/xml/xmlFixedContent.cxx b/reportdesign/source/filter/xml/xmlFixedContent.cxx index 0f33f91e98a9..3836e7ab06b1 100644 --- a/reportdesign/source/filter/xml/xmlFixedContent.cxx +++ b/reportdesign/source/filter/xml/xmlFixedContent.cxx @@ -46,17 +46,12 @@ public: OXMLCharContent( SvXMLImport& rImport, OXMLFixedContent* _pFixedContent, - sal_uInt16 nPrfx, - const OUString& rLName, - const uno::Reference< xml::sax::XAttributeList > & xAttrList, + const uno::Reference< xml::sax::XFastAttributeList > & xAttrList, sal_Unicode c, bool bCount ); OXMLCharContent( SvXMLImport& rImport, OXMLFixedContent* _pFixedContent, - sal_uInt16 nPrfx, - const OUString& rLName, - const uno::Reference< xml::sax::XAttributeList > & xAttrList, sal_Int16 nControl ); OXMLCharContent(const OXMLCharContent&) = delete; OXMLCharContent& operator=(const OXMLCharContent&) = delete; @@ -70,12 +65,10 @@ public: OXMLCharContent::OXMLCharContent( SvXMLImport& rImport, OXMLFixedContent* _pFixedContent, - sal_uInt16 nPrfx, - const OUString& rLName, - const uno::Reference< xml::sax::XAttributeList > & xAttrList, + const uno::Reference< xml::sax::XFastAttributeList > & xAttrList, sal_Unicode c, bool bCount ) - : XMLCharContext(rImport,nPrfx,rLName,xAttrList,c,bCount) + : XMLCharContext(rImport,xAttrList,c,bCount) ,m_pFixedContent(_pFixedContent) { } @@ -83,11 +76,8 @@ OXMLCharContent::OXMLCharContent( OXMLCharContent::OXMLCharContent( SvXMLImport& rImport, OXMLFixedContent* _pFixedContent, - sal_uInt16 nPrfx, - const OUString& rLName, - const uno::Reference< xml::sax::XAttributeList > & xAttrList, sal_Int16 nControl ) - : XMLCharContext(rImport,nPrfx,rLName,xAttrList,nControl) + : XMLCharContext(rImport,nControl) ,m_pFixedContent(_pFixedContent) { } @@ -111,12 +101,11 @@ void OXMLCharContent::InsertString(const OUString& _sString) } -OXMLFixedContent::OXMLFixedContent( ORptFilter& rImport, - sal_uInt16 nPrfx, const OUString& rLName +OXMLFixedContent::OXMLFixedContent( ORptFilter& rImport ,OXMLCell& _rCell ,OXMLTable* _pContainer ,OXMLFixedContent* _pInP) : - OXMLReportElementBase( rImport, nPrfx, rLName,nullptr,_pContainer) + OXMLReportElementBase( rImport,nullptr,_pContainer) ,m_rCell(_rCell) ,m_pInP(_pInP) ,m_bFormattedField(false) @@ -130,47 +119,41 @@ OXMLFixedContent::~OXMLFixedContent() } -SvXMLImportContextRef OXMLFixedContent::CreateChildContext_( - sal_uInt16 nPrefix, - const OUString& rLocalName, - const Reference< XAttributeList > & xAttrList ) +css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLFixedContent::createFastChildContext_( + sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ) { - SvXMLImportContextRef xContext = OXMLReportElementBase::CreateChildContext_(nPrefix,rLocalName,xAttrList); + css::uno::Reference< css::xml::sax::XFastContextHandler > xContext = OXMLReportElementBase::createFastChildContext_(nElement,xAttrList); if (xContext) return xContext; static const char s_sStringConcat[] = " & "; - const SvXMLTokenMap& rTokenMap = m_rImport.GetCellElemTokenMap(); m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - const sal_uInt16 nToken = rTokenMap.Get( nPrefix, rLocalName ); - switch( nToken ) + switch( nElement ) { - case XML_TOK_P: - xContext = new OXMLFixedContent(m_rImport,nPrefix, rLocalName,m_rCell,m_pContainer,this); + case XML_ELEMENT(TEXT, XML_P): + xContext = new OXMLFixedContent(m_rImport,m_rCell,m_pContainer,this); break; - case XML_TOK_TEXT_TAB_STOP: - xContext = new OXMLCharContent( m_rImport, this,nPrefix, - rLocalName, xAttrList, + case XML_ELEMENT(TEXT, XML_TAB): + xContext = new OXMLCharContent( m_rImport, this, xAttrList, 0x0009, false ); break; - case XML_TOK_TEXT_LINE_BREAK: - xContext = new OXMLCharContent( m_rImport, this,nPrefix, - rLocalName, xAttrList, + case XML_ELEMENT(TEXT, XML_LINE_BREAK): + xContext = new OXMLCharContent( m_rImport, this, ControlCharacter::LINE_BREAK ); break; - case XML_TOK_TEXT_S: - xContext = new OXMLCharContent( m_rImport, this,nPrefix, - rLocalName, xAttrList, + case XML_ELEMENT(TEXT, XML_S): + xContext = new OXMLCharContent( m_rImport, this, xAttrList, 0x0020, true ); break; - case XML_TOK_PAGE_NUMBER: + case XML_ELEMENT(TEXT, XML_PAGE_NUMBER): m_sPageText += OUStringLiteral(s_sStringConcat) + " PageNumber()"; m_bFormattedField = true; break; - case XML_TOK_PAGE_COUNT: + case XML_ELEMENT(TEXT, XML_PAGE_COUNT): m_sPageText += OUStringLiteral(s_sStringConcat) + " PageCount()"; m_bFormattedField = true; break; @@ -180,7 +163,7 @@ SvXMLImportContextRef OXMLFixedContent::CreateChildContext_( return xContext; } -void OXMLFixedContent::EndElement() +void OXMLFixedContent::endFastElement(sal_Int32 ) { if ( m_pInP ) { @@ -210,7 +193,7 @@ void OXMLFixedContent::EndElement() } } -void OXMLFixedContent::Characters( const OUString& rChars ) +void OXMLFixedContent::characters( const OUString& rChars ) { m_sLabel += rChars; if ( !rChars.isEmpty() ) diff --git a/reportdesign/source/filter/xml/xmlFixedContent.hxx b/reportdesign/source/filter/xml/xmlFixedContent.hxx index 18bd802cfd3f..c4e1520be9a9 100644 --- a/reportdesign/source/filter/xml/xmlFixedContent.hxx +++ b/reportdesign/source/filter/xml/xmlFixedContent.hxx @@ -36,16 +36,14 @@ namespace rptxml bool m_bFormattedField; protected: - virtual SvXMLImportContextRef CreateChildContext_( sal_uInt16 nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ) override; + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > createFastChildContext_( sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ) override; private: OXMLFixedContent(const OXMLFixedContent&) = delete; OXMLFixedContent& operator =(const OXMLFixedContent&) = delete; public: - OXMLFixedContent( ORptFilter& rImport, sal_uInt16 nPrfx, - const OUString& rLName + OXMLFixedContent( ORptFilter& rImport ,OXMLCell& _rCell ,OXMLTable* _pContainer ,OXMLFixedContent* _pInP = nullptr); @@ -53,9 +51,9 @@ namespace rptxml // This method is called for all characters that are contained in the // current element. The default is to ignore them. - virtual void Characters( const OUString& rChars ) override; + virtual void SAL_CALL characters( const OUString& rChars ) override; - virtual void EndElement() override; + virtual void SAL_CALL endFastElement(sal_Int32 nElement) override; }; } // namespace rptxml diff --git a/reportdesign/source/filter/xml/xmlFormatCondition.cxx b/reportdesign/source/filter/xml/xmlFormatCondition.cxx index 676ee22896ae..580651197e9e 100644 --- a/reportdesign/source/filter/xml/xmlFormatCondition.cxx +++ b/reportdesign/source/filter/xml/xmlFormatCondition.cxx @@ -38,37 +38,32 @@ namespace rptxml using namespace ::com::sun::star::beans; OXMLFormatCondition::OXMLFormatCondition( ORptFilter& rImport, - sal_uInt16 nPrfx, const OUString& rLName, - const Reference< XAttributeList > & _xAttrList + const Reference< XFastAttributeList > & _xAttrList ,const Reference< XFormatCondition > & _xComponent ) : - SvXMLImportContext( rImport, nPrfx, rLName ) + SvXMLImportContext( rImport ) ,m_rImport(rImport) ,m_xComponent(_xComponent) { OSL_ENSURE(m_xComponent.is(),"Component is NULL!"); - const SvXMLNamespaceMap& rMap = rImport.GetNamespaceMap(); - const SvXMLTokenMap& rTokenMap = rImport.GetFormatElemTokenMap(); static const OUString s_sTRUE = ::xmloff::token::GetXMLToken(XML_TRUE); - const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0; try { - for(sal_Int16 i = 0; i < nLength; ++i) + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList ); + for (auto &aIter : *pAttribList) { - OUString sLocalName; - const OUString sAttrName = _xAttrList->getNameByIndex( i ); - const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName ); - const OUString sValue = _xAttrList->getValueByIndex( i ); + OUString sValue = aIter.toString(); - switch( rTokenMap.Get( nPrefix, sLocalName ) ) + switch( aIter.getToken() ) { - case XML_TOK_ENABLED: + case XML_ELEMENT(REPORT, XML_ENABLED): m_xComponent->setEnabled(sValue == s_sTRUE); break; - case XML_TOK_FORMULA: + case XML_ELEMENT(REPORT, XML_FORMULA): m_xComponent->setFormula(ORptFilter::convertFormula(sValue)); break; - case XML_TOK_FORMAT_STYLE_NAME: + case XML_ELEMENT(REPORT, XML_STYLE_NAME): m_sStyleName = sValue; break; default: @@ -87,7 +82,7 @@ OXMLFormatCondition::~OXMLFormatCondition() { } -void OXMLFormatCondition::EndElement() +void OXMLFormatCondition::endFastElement(sal_Int32 ) { OXMLHelper::copyStyleElements(m_rImport.isOldFormat(),m_sStyleName,GetImport().GetAutoStyles(),m_xComponent.get()); } diff --git a/reportdesign/source/filter/xml/xmlFormatCondition.hxx b/reportdesign/source/filter/xml/xmlFormatCondition.hxx index 2fb03360583c..56bd5602fb24 100644 --- a/reportdesign/source/filter/xml/xmlFormatCondition.hxx +++ b/reportdesign/source/filter/xml/xmlFormatCondition.hxx @@ -34,13 +34,12 @@ namespace rptxml void operator =(const OXMLFormatCondition&) = delete; public: - OXMLFormatCondition( ORptFilter& rImport, sal_uInt16 nPrfx, - const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList + OXMLFormatCondition( ORptFilter& rImport, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ,const css::uno::Reference< css::report::XFormatCondition >& _xComponent ); virtual ~OXMLFormatCondition() override; - virtual void EndElement() override; + virtual void SAL_CALL endFastElement(sal_Int32 nElement) override; }; } // namespace rptxml diff --git a/reportdesign/source/filter/xml/xmlFormattedField.cxx b/reportdesign/source/filter/xml/xmlFormattedField.cxx index 0e268a99565d..b5a646722d23 100644 --- a/reportdesign/source/filter/xml/xmlFormattedField.cxx +++ b/reportdesign/source/filter/xml/xmlFormattedField.cxx @@ -34,34 +34,29 @@ namespace rptxml using namespace ::com::sun::star; using namespace xml::sax; -OXMLFormattedField::OXMLFormattedField( ORptFilter& rImport, - sal_uInt16 nPrfx, const OUString& rLName - ,const uno::Reference< xml::sax::XAttributeList > & _xAttrList +OXMLFormattedField::OXMLFormattedField( ORptFilter& rImport + ,const uno::Reference< xml::sax::XFastAttributeList > & _xAttrList ,const uno::Reference< XFormattedField > & _xComponent ,OXMLTable* _pContainer ,bool _bPageCount) : - OXMLReportElementBase( rImport, nPrfx, rLName,_xComponent.get(),_pContainer) + OXMLReportElementBase( rImport,_xComponent.get(),_pContainer) { OSL_ENSURE(m_xReportComponent.is(),"Component is NULL!"); - const SvXMLNamespaceMap& rMap = rImport.GetNamespaceMap(); - const SvXMLTokenMap& rTokenMap = rImport.GetControlElemTokenMap(); - const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0; try { - for(sal_Int16 i = 0; i < nLength; ++i) + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList ); + for (auto &aIter : *pAttribList) { - OUString sLocalName; - const OUString sAttrName = _xAttrList->getNameByIndex( i ); - const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName ); - const OUString sValue = _xAttrList->getValueByIndex( i ); + OUString sValue = aIter.toString(); - switch( rTokenMap.Get( nPrefix, sLocalName ) ) + switch( aIter.getToken() ) { - case XML_TOK_DATA_FORMULA: + case XML_ELEMENT(REPORT, XML_FORMULA): _xComponent->setDataField(ORptFilter::convertFormula(sValue)); break; - case XML_TOK_SELECT_PAGE: + case XML_ELEMENT(REPORT, XML_SELECT_PAGE): _xComponent->setDataField("rpt:PageNumber()"); break; default: diff --git a/reportdesign/source/filter/xml/xmlFormattedField.hxx b/reportdesign/source/filter/xml/xmlFormattedField.hxx index 41a94a8204ee..b181810f267c 100644 --- a/reportdesign/source/filter/xml/xmlFormattedField.hxx +++ b/reportdesign/source/filter/xml/xmlFormattedField.hxx @@ -32,9 +32,7 @@ namespace rptxml public: OXMLFormattedField( ORptFilter& rImport - ,sal_uInt16 nPrfx - ,const OUString& rLName - ,const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList + ,const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ,const css::uno::Reference< css::report::XFormattedField >& _xComponent ,OXMLTable* _pContainer ,bool _bPageCount); diff --git a/reportdesign/source/filter/xml/xmlFunction.cxx b/reportdesign/source/filter/xml/xmlFunction.cxx index f2a5850eef0f..8bda678e3c91 100644 --- a/reportdesign/source/filter/xml/xmlFunction.cxx +++ b/reportdesign/source/filter/xml/xmlFunction.cxx @@ -34,13 +34,11 @@ namespace rptxml OXMLFunction::OXMLFunction( ORptFilter& _rImport - ,sal_uInt16 nPrfx - ,const OUString& _sLocalName - ,const Reference< XAttributeList > & _xAttrList + ,const Reference< XFastAttributeList > & _xAttrList ,const Reference< XFunctionsSupplier >& _xFunctions ,bool _bAddToReport ) : - SvXMLImportContext( _rImport, nPrfx, _sLocalName ) + SvXMLImportContext( _rImport ) ,m_xFunctions(_xFunctions->getFunctions()) ,m_bAddToReport(_bAddToReport) { @@ -48,38 +46,31 @@ OXMLFunction::OXMLFunction( ORptFilter& _rImport OSL_ENSURE(m_xFunctions.is(),"Functions is NULL!"); m_xFunction = m_xFunctions->createFunction(); - OSL_ENSURE(_xAttrList.is(),"Attribute list is NULL!"); - - const SvXMLNamespaceMap& rMap = _rImport.GetNamespaceMap(); - const SvXMLTokenMap& rTokenMap = _rImport.GetFunctionElemTokenMap(); - - const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0; static const OUString s_sTRUE = ::xmloff::token::GetXMLToken(XML_TRUE); - for(sal_Int16 i = 0; i < nLength; ++i) + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList ); + for (auto &aIter : *pAttribList) { - OUString sLocalName; - const OUString sAttrName = _xAttrList->getNameByIndex( i ); - const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName ); - const OUString sValue = _xAttrList->getValueByIndex( i ); + OUString sValue = aIter.toString(); try { - switch( rTokenMap.Get( nPrefix, sLocalName ) ) + switch( aIter.getToken() ) { - case XML_TOK_FUNCTION_NAME: + case XML_ELEMENT(REPORT, XML_NAME): m_xFunction->setName(sValue); break; - case XML_TOK_FUNCTION_FORMULA: + case XML_ELEMENT(REPORT, XML_FORMULA): m_xFunction->setFormula(ORptFilter::convertFormula(sValue)); break; - case XML_TOK_PRE_EVALUATED: + case XML_ELEMENT(REPORT, XML_PRE_EVALUATED): m_xFunction->setPreEvaluated(sValue == s_sTRUE); break; - case XML_TOK_INITIAL_FORMULA: + case XML_ELEMENT(REPORT, XML_INITIAL_FORMULA): if ( !sValue.isEmpty() ) m_xFunction->setInitialFormula(beans::Optional< OUString>(true,ORptFilter::convertFormula(sValue))); break; - case XML_TOK_DEEP_TRAVERSING: + case XML_ELEMENT(REPORT, XML_DEEP_TRAVERSING): m_xFunction->setDeepTraversing(sValue == s_sTRUE); break; default: @@ -103,7 +94,7 @@ ORptFilter& OXMLFunction::GetOwnImport() return static_cast(GetImport()); } -void OXMLFunction::EndElement() +void OXMLFunction::endFastElement(sal_Int32 ) { if ( m_bAddToReport ) { diff --git a/reportdesign/source/filter/xml/xmlFunction.hxx b/reportdesign/source/filter/xml/xmlFunction.hxx index 1f1fe3e94d30..da3f6ac118b6 100644 --- a/reportdesign/source/filter/xml/xmlFunction.hxx +++ b/reportdesign/source/filter/xml/xmlFunction.hxx @@ -41,15 +41,13 @@ namespace rptxml public: OXMLFunction( ORptFilter& rImport - , sal_uInt16 nPrfx - ,const OUString& rLName - ,const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList + ,const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ,const css::uno::Reference< css::report::XFunctionsSupplier >& _xFunctions ,bool _bAddToReport = false ); virtual ~OXMLFunction() override; - virtual void EndElement() override; + virtual void SAL_CALL endFastElement(sal_Int32 nElement) override; }; } // namespace rptxml diff --git a/reportdesign/source/filter/xml/xmlGroup.cxx b/reportdesign/source/filter/xml/xmlGroup.cxx index 69dfc393ed28..fdeb2b00f462 100644 --- a/reportdesign/source/filter/xml/xmlGroup.cxx +++ b/reportdesign/source/filter/xml/xmlGroup.cxx @@ -47,45 +47,37 @@ namespace rptxml } OXMLGroup::OXMLGroup( ORptFilter& _rImport - ,sal_uInt16 nPrfx - ,const OUString& _sLocalName - ,const Reference< XAttributeList > & _xAttrList + ,const Reference< XFastAttributeList > & _xAttrList ) : - SvXMLImportContext( _rImport, nPrfx, _sLocalName ) + SvXMLImportContext( _rImport ) { m_xGroups = _rImport.getReportDefinition()->getGroups(); OSL_ENSURE(m_xGroups.is(),"Groups is NULL!"); m_xGroup = m_xGroups->createGroup(); - OSL_ENSURE(_xAttrList.is(),"Attribute list is NULL!"); - - const SvXMLNamespaceMap& rMap = _rImport.GetNamespaceMap(); - const SvXMLTokenMap& rTokenMap = _rImport.GetGroupElemTokenMap(); m_xGroup->setSortAscending(false);// the default value has to be set - const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0; static const OUString s_sTRUE = ::xmloff::token::GetXMLToken(XML_TRUE); - for(sal_Int16 i = 0; i < nLength; ++i) + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList ); + for (auto &aIter : *pAttribList) { - OUString sLocalName; - const OUString sAttrName = _xAttrList->getNameByIndex( i ); - const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName ); - OUString sValue = _xAttrList->getValueByIndex( i ); + OUString sValue = aIter.toString(); try { - switch( rTokenMap.Get( nPrefix, sLocalName ) ) + switch( aIter.getToken() ) { - case XML_TOK_START_NEW_COLUMN: + case XML_ELEMENT(REPORT, XML_START_NEW_COLUMN): m_xGroup->setStartNewColumn(sValue == s_sTRUE); break; - case XML_TOK_RESET_PAGE_NUMBER: + case XML_ELEMENT(REPORT, XML_RESET_PAGE_NUMBER): m_xGroup->setResetPageNumber(sValue == s_sTRUE); break; - case XML_TOK_SORT_ASCENDING: + case XML_ELEMENT(REPORT, XML_SORT_ASCENDING): m_xGroup->setSortAscending(sValue == s_sTRUE); break; - case XML_TOK_GROUP_EXPRESSION: + case XML_ELEMENT(REPORT, XML_GROUP_EXPRESSION): { sal_Int32 nLen = sValue.getLength(); if ( nLen ) @@ -164,7 +156,7 @@ OXMLGroup::OXMLGroup( ORptFilter& _rImport } } break; - case XML_TOK_GROUP_KEEP_TOGETHER: + case XML_ELEMENT(REPORT, XML_KEEP_TOGETHER): m_xGroup->setKeepTogether(lcl_getKeepTogetherOption(sValue)); break; default: @@ -184,54 +176,52 @@ OXMLGroup::~OXMLGroup() } -SvXMLImportContextRef OXMLGroup::CreateChildContext( - sal_uInt16 nPrefix, - const OUString& rLocalName, - const Reference< XAttributeList > & xAttrList ) +css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLGroup::createFastChildContext( + sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) { - SvXMLImportContext *pContext = nullptr; + css::uno::Reference< css::xml::sax::XFastContextHandler > xContext; ORptFilter& rImport = GetOwnImport(); - const SvXMLTokenMap& rTokenMap = rImport.GetGroupElemTokenMap(); - switch( rTokenMap.Get( nPrefix, rLocalName ) ) + switch( nElement ) { - case XML_TOK_GROUP_FUNCTION: + case XML_ELEMENT(REPORT, XML_FUNCTION): { rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = new OXMLFunction( rImport, nPrefix, rLocalName,xAttrList,m_xGroup.get()); + xContext = new OXMLFunction( rImport,xAttrList,m_xGroup.get()); } break; - case XML_TOK_GROUP_HEADER: + case XML_ELEMENT(REPORT, XML_GROUP_HEADER): { rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); m_xGroup->setHeaderOn(true); - pContext = new OXMLSection( rImport, nPrefix, rLocalName,xAttrList,m_xGroup->getHeader()); + xContext = new OXMLSection( rImport,xAttrList,m_xGroup->getHeader()); } break; - case XML_TOK_GROUP_GROUP: + case XML_ELEMENT(REPORT, XML_GROUP): rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = new OXMLGroup( rImport, nPrefix, rLocalName,xAttrList); + xContext = new OXMLGroup( rImport,xAttrList); break; - case XML_TOK_GROUP_DETAIL: + case XML_ELEMENT(REPORT, XML_DETAIL): { rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); Reference xComponent = rImport.getReportDefinition(); - pContext = new OXMLSection( rImport, nPrefix, rLocalName,xAttrList, xComponent->getDetail()); + xContext = new OXMLSection( rImport,xAttrList, xComponent->getDetail()); } break; - case XML_TOK_GROUP_FOOTER: + case XML_ELEMENT(REPORT, XML_GROUP_FOOTER): { rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); m_xGroup->setFooterOn(true); - pContext = new OXMLSection( rImport, nPrefix, rLocalName,xAttrList,m_xGroup->getFooter()); + xContext = new OXMLSection( rImport,xAttrList,m_xGroup->getFooter()); } break; default: break; } - return pContext; + return xContext; } ORptFilter& OXMLGroup::GetOwnImport() @@ -239,7 +229,7 @@ ORptFilter& OXMLGroup::GetOwnImport() return static_cast(GetImport()); } -void OXMLGroup::EndElement() +void OXMLGroup::endFastElement(sal_Int32 ) { try { diff --git a/reportdesign/source/filter/xml/xmlGroup.hxx b/reportdesign/source/filter/xml/xmlGroup.hxx index ba1fc508dece..ea1b97602aaf 100644 --- a/reportdesign/source/filter/xml/xmlGroup.hxx +++ b/reportdesign/source/filter/xml/xmlGroup.hxx @@ -38,17 +38,14 @@ namespace rptxml public: OXMLGroup( ORptFilter& rImport - , sal_uInt16 nPrfx - ,const OUString& rLName - ,const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList + ,const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ); virtual ~OXMLGroup() override; - virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix, - 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; - virtual void EndElement() override; + virtual void SAL_CALL endFastElement(sal_Int32 nElement) override; }; } // namespace rptxml diff --git a/reportdesign/source/filter/xml/xmlImage.cxx b/reportdesign/source/filter/xml/xmlImage.cxx index 0c4f8b2137fc..a0b559730e68 100644 --- a/reportdesign/source/filter/xml/xmlImage.cxx +++ b/reportdesign/source/filter/xml/xmlImage.cxx @@ -40,41 +40,36 @@ namespace rptxml OXMLImage::OXMLImage( ORptFilter& rImport, - sal_uInt16 nPrfx, const OUString& rLName, - const Reference< XAttributeList > & _xAttrList + const Reference< XFastAttributeList > & _xAttrList ,const Reference< XImageControl > & _xComponent ,OXMLTable* _pContainer) : - OXMLReportElementBase( rImport, nPrfx, rLName,_xComponent.get(),_pContainer) + OXMLReportElementBase( rImport,_xComponent.get(),_pContainer) { OSL_ENSURE(m_xReportComponent.is(),"Component is NULL!"); - const SvXMLNamespaceMap& rMap = m_rImport.GetNamespaceMap(); - const SvXMLTokenMap& rTokenMap = m_rImport.GetControlElemTokenMap(); static const OUString s_sTRUE = ::xmloff::token::GetXMLToken(XML_TRUE); - const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0; try { - for(sal_Int16 i = 0; i < nLength; ++i) + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList ); + for (auto &aIter : *pAttribList) { - OUString sLocalName; - const OUString sAttrName = _xAttrList->getNameByIndex( i ); - const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName ); - /* const */ OUString sValue = _xAttrList->getValueByIndex( i ); + OUString sValue = aIter.toString(); - switch( rTokenMap.Get( nPrefix, sLocalName ) ) + switch( aIter.getToken() ) { - case XML_TOK_IMAGE_DATA: + case XML_ELEMENT(FORM, XML_IMAGE_DATA): { SvtPathOptions aPathOptions; sValue = aPathOptions.SubstituteVariable(sValue); _xComponent->setImageURL(rImport.GetAbsoluteReference( sValue )); break; } - case XML_TOK_PRESERVE_IRI: + case XML_ELEMENT(REPORT, XML_PRESERVE_IRI): _xComponent->setPreserveIRI(s_sTRUE == sValue); break; - case XML_TOK_SCALE: + case XML_ELEMENT(REPORT, XML_SCALE): { sal_Int16 nRet = awt::ImageScaleMode::NONE; if ( s_sTRUE == sValue ) @@ -90,7 +85,7 @@ OXMLImage::OXMLImage( ORptFilter& rImport, _xComponent->setScaleMode( nRet ); break; } - case XML_TOK_DATA_FORMULA: + case XML_ELEMENT(REPORT, XML_FORMULA): _xComponent->setDataField(ORptFilter::convertFormula(sValue)); break; default: diff --git a/reportdesign/source/filter/xml/xmlImage.hxx b/reportdesign/source/filter/xml/xmlImage.hxx index af90f820e727..32be8a8ac1c5 100644 --- a/reportdesign/source/filter/xml/xmlImage.hxx +++ b/reportdesign/source/filter/xml/xmlImage.hxx @@ -31,9 +31,8 @@ namespace rptxml void operator =(const OXMLImage&) = delete; public: - OXMLImage( ORptFilter& rImport, sal_uInt16 nPrfx, - const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList + OXMLImage( ORptFilter& rImport, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ,const css::uno::Reference< css::report::XImageControl >& _xComponent ,OXMLTable* _pContainer); virtual ~OXMLImage() override; diff --git a/reportdesign/source/filter/xml/xmlMasterFields.cxx b/reportdesign/source/filter/xml/xmlMasterFields.cxx index 49df6b004de2..2816be32cbe2 100644 --- a/reportdesign/source/filter/xml/xmlMasterFields.cxx +++ b/reportdesign/source/filter/xml/xmlMasterFields.cxx @@ -33,32 +33,25 @@ namespace rptxml using namespace ::com::sun::star::xml::sax; OXMLMasterFields::OXMLMasterFields( ORptFilter& rImport, - sal_uInt16 nPrfx, const OUString& rLName, - const Reference< XAttributeList > & _xAttrList + const Reference< XFastAttributeList > & _xAttrList ,IMasterDetailFieds* _pReport ) : - SvXMLImportContext( rImport, nPrfx, rLName) + SvXMLImportContext( rImport ) ,m_pReport(_pReport) { - - const SvXMLNamespaceMap& rMap = rImport.GetNamespaceMap(); - const SvXMLTokenMap& rTokenMap = rImport.GetSubDocumentElemTokenMap(); - OUString sMasterField,sDetailField; - const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0; - for(sal_Int16 i = 0; i < nLength; ++i) + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList ); + for (auto &aIter : *pAttribList) { - OUString sLocalName; - const OUString sAttrName = _xAttrList->getNameByIndex( i ); - const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName ); - const OUString sValue = _xAttrList->getValueByIndex( i ); + OUString sValue = aIter.toString(); - switch( rTokenMap.Get( nPrefix, sLocalName ) ) + switch( aIter.getToken() ) { - case XML_TOK_MASTER: + case XML_ELEMENT(REPORT, XML_MASTER): sMasterField = sValue; break; - case XML_TOK_SUB_DETAIL: + case XML_ELEMENT(REPORT, XML_DETAIL): sDetailField = sValue; break; default: @@ -76,27 +69,25 @@ OXMLMasterFields::~OXMLMasterFields() { } -SvXMLImportContextRef OXMLMasterFields::CreateChildContext( - sal_uInt16 _nPrefix, - const OUString& _rLocalName, - const Reference< XAttributeList > & xAttrList ) +css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLMasterFields::createFastChildContext( + sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) { - SvXMLImportContext *pContext = nullptr; - const SvXMLTokenMap& rTokenMap = static_cast(GetImport()).GetSubDocumentElemTokenMap(); + css::uno::Reference< css::xml::sax::XFastContextHandler > xContext; - switch( rTokenMap.Get( _nPrefix, _rLocalName ) ) + switch( nElement ) { - case XML_TOK_MASTER_DETAIL_FIELD: + case XML_ELEMENT(REPORT, XML_MASTER_DETAIL_FIELD): { GetImport().GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = new OXMLMasterFields(static_cast(GetImport()), _nPrefix, _rLocalName,xAttrList ,m_pReport); + xContext = new OXMLMasterFields(static_cast(GetImport()),xAttrList ,m_pReport); } break; default: break; } - return pContext; + return xContext; } diff --git a/reportdesign/source/filter/xml/xmlMasterFields.hxx b/reportdesign/source/filter/xml/xmlMasterFields.hxx index 1e0d70eae156..e8e212827e60 100644 --- a/reportdesign/source/filter/xml/xmlMasterFields.hxx +++ b/reportdesign/source/filter/xml/xmlMasterFields.hxx @@ -31,16 +31,13 @@ namespace rptxml void operator =(const OXMLMasterFields&) = delete; public: - OXMLMasterFields( ORptFilter& rImport, sal_uInt16 nPrfx, - const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList + OXMLMasterFields( ORptFilter& rImport, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ,IMasterDetailFieds* _pReport); virtual ~OXMLMasterFields() override; - virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix, - 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; }; } // namespace rptxml diff --git a/reportdesign/source/filter/xml/xmlReport.cxx b/reportdesign/source/filter/xml/xmlReport.cxx index 5b7a7bfaf740..96d08acb4f58 100644 --- a/reportdesign/source/filter/xml/xmlReport.cxx +++ b/reportdesign/source/filter/xml/xmlReport.cxx @@ -41,33 +41,27 @@ namespace rptxml OXMLReport::OXMLReport( ORptFilter& rImport, - sal_uInt16 nPrfx, const OUString& rLName, - const Reference< XAttributeList > & _xAttrList + const Reference< css::xml::sax::XFastAttributeList > & _xAttrList ,const uno::Reference< report::XReportDefinition >& _xComponent) : - OXMLReportElementBase( rImport, nPrfx, rLName,_xComponent.get(),nullptr) + OXMLReportElementBase( rImport, _xComponent.get(),nullptr) ,m_xReportDefinition(_xComponent) { OSL_ENSURE(m_xReportDefinition.is(),"No Report definition!"); impl_initRuntimeDefaults(); - const SvXMLNamespaceMap& rMap = m_rImport.GetNamespaceMap(); - const SvXMLTokenMap& rTokenMap = m_rImport.GetReportElemTokenMap(); - - const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0; static const OUString s_sTRUE = ::xmloff::token::GetXMLToken(XML_TRUE); try { - for(sal_Int16 i = 0; i < nLength; ++i) + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList ); + for (auto &aIter : *pAttribList) { - OUString sLocalName; - const OUString sAttrName = _xAttrList->getNameByIndex( i ); - const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName ); - const OUString sValue = _xAttrList->getValueByIndex( i ); + OUString sValue = aIter.toString(); - switch( rTokenMap.Get( nPrefix, sLocalName ) ) + switch( aIter.getToken() ) { - case XML_TOK_COMMAND_TYPE: + case XML_ELEMENT(REPORT, XML_COMMAND_TYPE): { sal_Int32 nRet = sdb::CommandType::COMMAND; const SvXMLEnumMapEntry* aXML_EnumMap = OXMLHelper::GetCommandTypeOptions(); @@ -76,22 +70,22 @@ OXMLReport::OXMLReport( ORptFilter& rImport, m_xReportDefinition->setCommandType(nRet); } break; - case XML_TOK_COMMAND: + case XML_ELEMENT(REPORT, XML_COMMAND): m_xReportDefinition->setCommand(sValue); break; - case XML_TOK_FILTER: + case XML_ELEMENT(REPORT, XML_FILTER): m_xReportDefinition->setFilter(sValue); break; - case XML_TOK_CAPTION: + case XML_ELEMENT(REPORT, XML_CAPTION): m_xReportDefinition->setCaption(sValue); break; - case XML_TOK_ESCAPE_PROCESSING: + case XML_ELEMENT(REPORT, XML_ESCAPE_PROCESSING): m_xReportDefinition->setEscapeProcessing(sValue == s_sTRUE); break; - case XML_TOK_REPORT_MIMETYPE: + case XML_ELEMENT(OFFICE, XML_MIMETYPE): m_xReportDefinition->setMimeType(sValue); break; - case XML_TOK_REPORT_NAME: + case XML_ELEMENT(DRAW, XML_NAME): m_xReportDefinition->setName(sValue); break; default: @@ -128,64 +122,62 @@ void OXMLReport::impl_initRuntimeDefaults() const } -SvXMLImportContextRef OXMLReport::CreateChildContext( - sal_uInt16 nPrefix, - const OUString& rLocalName, - const Reference< XAttributeList > & xAttrList ) +css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLReport::createFastChildContext( + sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) { - SvXMLImportContextRef xContext = CreateChildContext_(nPrefix,rLocalName,xAttrList); + css::uno::Reference< css::xml::sax::XFastContextHandler > xContext = createFastChildContext_(nElement,xAttrList); if (xContext) return xContext; - const SvXMLTokenMap& rTokenMap = m_rImport.GetReportElemTokenMap(); - switch( rTokenMap.Get( nPrefix, rLocalName ) ) + switch( nElement ) { - case XML_TOK_REPORT_FUNCTION: + case XML_ELEMENT(REPORT, XML_FUNCTION): { m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - xContext = new OXMLFunction( m_rImport, nPrefix, rLocalName,xAttrList,m_xReportDefinition.get(),true); + xContext = new OXMLFunction( m_rImport,xAttrList,m_xReportDefinition.get(),true); } break; - case XML_TOK_MASTER_DETAIL_FIELDS: + case XML_ELEMENT(REPORT, XML_MASTER_DETAIL_FIELDS): m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - xContext = new OXMLMasterFields(m_rImport, nPrefix, rLocalName,xAttrList ,this); + xContext = new OXMLMasterFields(m_rImport,xAttrList ,this); break; - case XML_TOK_REPORT_HEADER: + case XML_ELEMENT(REPORT, XML_REPORT_HEADER): { m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); m_xReportDefinition->setReportHeaderOn(true); - xContext = new OXMLSection( m_rImport, nPrefix, rLocalName,xAttrList, m_xReportDefinition->getReportHeader()); + xContext = new OXMLSection( m_rImport,xAttrList, m_xReportDefinition->getReportHeader()); } break; - case XML_TOK_PAGE_HEADER: + case XML_ELEMENT(REPORT, XML_PAGE_HEADER): { m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); m_xReportDefinition->setPageHeaderOn(true); - xContext = new OXMLSection( m_rImport, nPrefix, rLocalName,xAttrList, m_xReportDefinition->getPageHeader()); + xContext = new OXMLSection( m_rImport,xAttrList, m_xReportDefinition->getPageHeader()); } break; - case XML_TOK_GROUP: + case XML_ELEMENT(REPORT, XML_GROUP): m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - xContext = new OXMLGroup( m_rImport, nPrefix, rLocalName,xAttrList); + xContext = new OXMLGroup( m_rImport,xAttrList); break; - case XML_TOK_DETAIL: + case XML_ELEMENT(REPORT, XML_DETAIL): { m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - xContext = new OXMLSection( m_rImport, nPrefix, rLocalName,xAttrList, m_xReportDefinition->getDetail()); + xContext = new OXMLSection( m_rImport,xAttrList, m_xReportDefinition->getDetail()); } break; - case XML_TOK_PAGE_FOOTER: + case XML_ELEMENT(REPORT, XML_PAGE_FOOTER): { m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); m_xReportDefinition->setPageFooterOn(true); - xContext = new OXMLSection( m_rImport, nPrefix, rLocalName,xAttrList, m_xReportDefinition->getPageFooter(),false); + xContext = new OXMLSection( m_rImport,xAttrList, m_xReportDefinition->getPageFooter(),false); } break; - case XML_TOK_REPORT_FOOTER: + case XML_ELEMENT(REPORT, XML_REPORT_FOOTER): { m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); m_xReportDefinition->setReportFooterOn(true); - xContext = new OXMLSection( m_rImport, nPrefix, rLocalName,xAttrList, m_xReportDefinition->getReportFooter()); + xContext = new OXMLSection( m_rImport, xAttrList, m_xReportDefinition->getReportFooter()); } break; default: @@ -195,7 +187,7 @@ SvXMLImportContextRef OXMLReport::CreateChildContext( return xContext; } -void OXMLReport::EndElement() +void OXMLReport::endFastElement(sal_Int32) { Reference< XFunctions > xFunctions = m_xReportDefinition->getFunctions(); const ORptFilter::TGroupFunctionMap& aFunctions = m_rImport.getFunctions(); diff --git a/reportdesign/source/filter/xml/xmlReport.hxx b/reportdesign/source/filter/xml/xmlReport.hxx index ba5702c0bdc6..e6d4627e3297 100644 --- a/reportdesign/source/filter/xml/xmlReport.hxx +++ b/reportdesign/source/filter/xml/xmlReport.hxx @@ -34,17 +34,17 @@ namespace rptxml void operator =(const OXMLReport&) = delete; public: - OXMLReport( ORptFilter& rImport, sal_uInt16 nPrfx, - const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList + OXMLReport( ORptFilter& rImport, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ,const css::uno::Reference< css::report::XReportDefinition >& _xComponent); virtual ~OXMLReport() override; - virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix, - 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; - virtual void EndElement() override; + virtual void SAL_CALL startFastElement( sal_Int32 /*nElement*/, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& ) override {} + virtual void SAL_CALL endFastElement(sal_Int32 nElement) override; virtual void addMasterDetailPair(const ::std::pair< OUString,OUString >& _aPair) override; diff --git a/reportdesign/source/filter/xml/xmlReportElement.cxx b/reportdesign/source/filter/xml/xmlReportElement.cxx index c01ae393dd56..f3740970b84a 100644 --- a/reportdesign/source/filter/xml/xmlReportElement.cxx +++ b/reportdesign/source/filter/xml/xmlReportElement.cxx @@ -36,34 +36,29 @@ namespace rptxml using namespace xml::sax; OXMLReportElement::OXMLReportElement( ORptFilter& rImport, - sal_uInt16 nPrfx, const OUString& rLName, - const Reference< XAttributeList > & _xAttrList + const Reference< XFastAttributeList > & _xAttrList ,const Reference< XReportControlModel > & _xComponent) : - SvXMLImportContext( rImport, nPrfx, rLName ) + SvXMLImportContext( rImport ) ,m_xComponent(_xComponent) { OSL_ENSURE(m_xComponent.is(),"Component is NULL!"); - const SvXMLNamespaceMap& rMap = rImport.GetNamespaceMap(); - const SvXMLTokenMap& rTokenMap = rImport.GetReportElementElemTokenMap(); static const OUString s_sTRUE = ::xmloff::token::GetXMLToken(XML_TRUE); - const sal_Int16 nLength = (_xAttrList.is()) ? _xAttrList->getLength() : 0; try { - for(sal_Int16 i = 0; i < nLength; ++i) + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList ); + for (auto &aIter : *pAttribList) { - OUString sLocalName; - const OUString sAttrName = _xAttrList->getNameByIndex( i ); - const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName ); - const OUString sValue = _xAttrList->getValueByIndex( i ); + OUString sValue = aIter.toString(); - switch( rTokenMap.Get( nPrefix, sLocalName ) ) + switch( aIter.getToken() ) { - case XML_TOK_PRINT_WHEN_GROUP_CHANGE: + case XML_ELEMENT(REPORT, XML_PRINT_WHEN_GROUP_CHANGE): m_xComponent->setPrintWhenGroupChange(s_sTRUE == sValue); break; - case XML_TOK_PRINT_REPEATED_VALUES: + case XML_ELEMENT(REPORT, XML_PRINT_REPEATED_VALUES): m_xComponent->setPrintRepeatedValues(sValue == s_sTRUE); break; default: @@ -82,38 +77,36 @@ OXMLReportElement::~OXMLReportElement() { } -SvXMLImportContextRef OXMLReportElement::CreateChildContext( - sal_uInt16 _nPrefix, - const OUString& _rLocalName, - const Reference< XAttributeList > & xAttrList ) +css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLReportElement::createFastChildContext( + sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) { - SvXMLImportContext *pContext = nullptr; + css::uno::Reference< css::xml::sax::XFastContextHandler > xContext; ORptFilter& rImport = GetOwnImport(); - const SvXMLTokenMap& rTokenMap = rImport.GetReportElementElemTokenMap(); - switch( rTokenMap.Get( _nPrefix, _rLocalName ) ) + switch( nElement ) { - case XML_TOK_COMPONENT: + case XML_ELEMENT(REPORT, XML_REPORT_COMPONENT): rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = new OXMLComponent( rImport, _nPrefix, _rLocalName,xAttrList,m_xComponent.get()); + xContext = new OXMLComponent( rImport,xAttrList,m_xComponent.get()); break; - case XML_TOK_REP_CONDITIONAL_PRINT_EXPRESSION: + case XML_ELEMENT(REPORT, XML_CONDITIONAL_PRINT_EXPRESSION): rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = new OXMLCondPrtExpr( rImport, _nPrefix, _rLocalName,xAttrList,m_xComponent.get()); + xContext = new OXMLCondPrtExpr( rImport,xAttrList,m_xComponent.get()); break; - case XML_TOK_FORMATCONDITION: + case XML_ELEMENT(REPORT, XML_FORMAT_CONDITION): { uno::Reference< report::XFormatCondition > xNewCond = m_xComponent->createFormatCondition(); m_xComponent->insertByIndex(m_xComponent->getCount(),uno::makeAny(xNewCond)); rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = new OXMLFormatCondition( rImport, _nPrefix, _rLocalName,xAttrList,xNewCond); + xContext = new OXMLFormatCondition( rImport,xAttrList,xNewCond); } break; default: break; } - return pContext; + return xContext; } ORptFilter& OXMLReportElement::GetOwnImport() diff --git a/reportdesign/source/filter/xml/xmlReportElement.hxx b/reportdesign/source/filter/xml/xmlReportElement.hxx index a5d11ac73605..5f64dbe732e8 100644 --- a/reportdesign/source/filter/xml/xmlReportElement.hxx +++ b/reportdesign/source/filter/xml/xmlReportElement.hxx @@ -33,15 +33,13 @@ namespace rptxml void operator =(const OXMLReportElement&) = delete; public: - OXMLReportElement( ORptFilter& rImport, sal_uInt16 nPrfx, - const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList + OXMLReportElement( ORptFilter& rImport, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ,const css::uno::Reference< css::report::XReportControlModel >& _xComponent); virtual ~OXMLReportElement() override; - virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix, - 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; }; } // namespace rptxml diff --git a/reportdesign/source/filter/xml/xmlReportElementBase.cxx b/reportdesign/source/filter/xml/xmlReportElementBase.cxx index 0963b2732439..122395abc6a5 100644 --- a/reportdesign/source/filter/xml/xmlReportElementBase.cxx +++ b/reportdesign/source/filter/xml/xmlReportElementBase.cxx @@ -17,6 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ #include +#include #include "xmlReportElementBase.hxx" #include "xmlfilter.hxx" #include "xmlControlProperty.hxx" @@ -32,11 +33,9 @@ namespace rptxml using namespace ::com::sun::star::xml::sax; OXMLReportElementBase::OXMLReportElementBase( ORptFilter& rImport - ,sal_uInt16 nPrfx - , const OUString& rLName ,const Reference< XReportComponent > & _xComponent ,OXMLTable* _pContainer) : - SvXMLImportContext( rImport, nPrfx, rLName ) + SvXMLImportContext( rImport ) ,m_rImport(rImport) ,m_pContainer(_pContainer) ,m_xReportComponent(_xComponent) @@ -48,47 +47,44 @@ OXMLReportElementBase::~OXMLReportElementBase() { } -SvXMLImportContextRef OXMLReportElementBase::CreateChildContext( - sal_uInt16 nPrefix, - const OUString& rLocalName, - const Reference< XAttributeList > & xAttrList ) +css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLReportElementBase::createFastChildContext( + sal_Int32 nElement, + const Reference< XFastAttributeList > & xAttrList ) { - SvXMLImportContextRef xContext = CreateChildContext_(nPrefix,rLocalName,xAttrList); + css::uno::Reference< css::xml::sax::XFastContextHandler > xContext = createFastChildContext_(nElement,xAttrList); return xContext; } -SvXMLImportContextRef OXMLReportElementBase::CreateChildContext_( - sal_uInt16 nPrefix, - const OUString& rLocalName, - const Reference< XAttributeList > & xAttrList ) +css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLReportElementBase::createFastChildContext_( + sal_Int32 nElement, + const Reference< XFastAttributeList > & xAttrList ) { - SvXMLImportContext *pContext = nullptr; - const SvXMLTokenMap& rTokenMap = m_rImport.GetControlElemTokenMap(); + css::uno::Reference< css::xml::sax::XFastContextHandler > xContext; - switch( rTokenMap.Get( nPrefix, rLocalName ) ) + switch( nElement ) { - case XML_TOK_REPORT_ELEMENT: + case XML_ELEMENT(REPORT, XML_REPORT_ELEMENT): { uno::Reference xReportModel(m_xReportComponent,uno::UNO_QUERY); if ( xReportModel.is() ) { m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = new OXMLReportElement( m_rImport, nPrefix, rLocalName,xAttrList,xReportModel); + xContext = new OXMLReportElement( m_rImport,xAttrList,xReportModel); } } break; - case XML_TOK_PROPERTIES: + case XML_ELEMENT(FORM, XML_PROPERTIES): m_rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = new OXMLControlProperty( m_rImport, nPrefix, rLocalName,xAttrList,m_xReportComponent.get()); + xContext = new OXMLControlProperty( m_rImport,xAttrList,m_xReportComponent.get()); break; default: break; } - return pContext; + return xContext; } -void OXMLReportElementBase::EndElement() +void OXMLReportElementBase::endFastElement(sal_Int32 ) { try { diff --git a/reportdesign/source/filter/xml/xmlReportElementBase.hxx b/reportdesign/source/filter/xml/xmlReportElementBase.hxx index b8fc8361c9b1..ab60557e0b2a 100644 --- a/reportdesign/source/filter/xml/xmlReportElementBase.hxx +++ b/reportdesign/source/filter/xml/xmlReportElementBase.hxx @@ -46,23 +46,22 @@ namespace rptxml OXMLTable* m_pContainer; css::uno::Reference< css::report::XReportComponent > m_xReportComponent; - virtual SvXMLImportContextRef CreateChildContext_( sal_uInt16 nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ); + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > createFastChildContext_( sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ); public: OXMLReportElementBase( ORptFilter& rImport - ,sal_uInt16 nPrfx - ,const OUString& rLName ,const css::uno::Reference< css::report::XReportComponent >& _xComponent ,OXMLTable* _pContainer); virtual ~OXMLReportElementBase() override; - virtual SvXMLImportContextRef 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 >& ) override {} - virtual void EndElement() 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; + + virtual void SAL_CALL endFastElement(sal_Int32 nElement) override; }; } // namespace rptxml diff --git a/reportdesign/source/filter/xml/xmlSection.cxx b/reportdesign/source/filter/xml/xmlSection.cxx index 0c5a647f8662..07646370ea29 100644 --- a/reportdesign/source/filter/xml/xmlSection.cxx +++ b/reportdesign/source/filter/xml/xmlSection.cxx @@ -50,39 +50,33 @@ namespace rptxml OXMLSection::OXMLSection( ORptFilter& rImport, - sal_uInt16 nPrfx, const OUString& _sLocalName, - const uno::Reference< xml::sax::XAttributeList > & _xAttrList + const uno::Reference< xml::sax::XFastAttributeList > & _xAttrList ,const uno::Reference< report::XSection >& _xSection ,bool _bPageHeader) -:SvXMLImportContext( rImport, nPrfx, _sLocalName ) +:SvXMLImportContext( rImport ) ,m_xSection(_xSection) { - OSL_ENSURE(_xAttrList.is(),"Attribute list is NULL!"); - const SvXMLNamespaceMap& rMap = rImport.GetNamespaceMap(); - const SvXMLTokenMap& rTokenMap = rImport.GetSectionElemTokenMap(); - - const sal_Int16 nLength = (m_xSection.is() && _xAttrList.is()) ? _xAttrList->getLength() : 0; + if (!m_xSection.is()) + return; static const OUString s_sTRUE = ::xmloff::token::GetXMLToken(XML_TRUE); try { - for(sal_Int16 i = 0; i < nLength; ++i) + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList ); + for (auto &aIter : *pAttribList) { - OUString sLocalName; - const OUString sAttrName = _xAttrList->getNameByIndex( i ); - const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName ); - const OUString sValue = _xAttrList->getValueByIndex( i ); + OUString sValue = aIter.toString(); - switch( rTokenMap.Get( nPrefix, sLocalName ) ) + switch( aIter.getToken() ) { - - case XML_TOK_PAGE_PRINT_OPTION: + case XML_ELEMENT(REPORT, XML_PAGE_PRINT_OPTION): if ( _bPageHeader ) m_xSection->getReportDefinition()->setPageHeaderOption(lcl_getReportPrintOption(sValue)); else m_xSection->getReportDefinition()->setPageFooterOption(lcl_getReportPrintOption(sValue)); break; - case XML_TOK_REPEAT_SECTION: + case XML_ELEMENT(REPORT, XML_REPEAT_SECTION): m_xSection->setRepeatSection(sValue == s_sTRUE ); break; @@ -101,25 +95,23 @@ OXMLSection::~OXMLSection() { } -SvXMLImportContextRef OXMLSection::CreateChildContext( - sal_uInt16 _nPrefix, - const OUString& _rLocalName, - const uno::Reference< xml::sax::XAttributeList > & xAttrList ) +css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLSection::createFastChildContext( + sal_Int32 nElement, + const Reference< XFastAttributeList > & xAttrList ) { - SvXMLImportContext *pContext = nullptr; + css::uno::Reference< css::xml::sax::XFastContextHandler > xContext; ORptFilter& rImport = GetOwnImport(); - const SvXMLTokenMap& rTokenMap = rImport.GetSectionElemTokenMap(); - switch( rTokenMap.Get( _nPrefix, _rLocalName ) ) + switch( nElement ) { - case XML_TOK_TABLE: - pContext = new OXMLTable( rImport, _nPrefix, _rLocalName, xAttrList, m_xSection); + case XML_ELEMENT(TABLE, XML_TABLE): + xContext = new OXMLTable( rImport, xAttrList, m_xSection); break; default: break; } - return pContext; + return xContext; } ORptFilter& OXMLSection::GetOwnImport() diff --git a/reportdesign/source/filter/xml/xmlSection.hxx b/reportdesign/source/filter/xml/xmlSection.hxx index b677d3cb5cfb..26e8517232ff 100644 --- a/reportdesign/source/filter/xml/xmlSection.hxx +++ b/reportdesign/source/filter/xml/xmlSection.hxx @@ -37,16 +37,13 @@ namespace rptxml public: OXMLSection( ORptFilter& rImport - ,sal_uInt16 nPrfx - ,const OUString& rLName - ,const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList + ,const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ,const css::uno::Reference< css::report::XSection >& _xSection ,bool _bPageHeader = true); virtual ~OXMLSection() override; - virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix, - 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; }; } // namespace rptxml diff --git a/reportdesign/source/filter/xml/xmlSubDocument.cxx b/reportdesign/source/filter/xml/xmlSubDocument.cxx index ff97c749656b..7b09d5a1b6b7 100644 --- a/reportdesign/source/filter/xml/xmlSubDocument.cxx +++ b/reportdesign/source/filter/xml/xmlSubDocument.cxx @@ -36,13 +36,11 @@ namespace rptxml using namespace ::com::sun::star::uno; using namespace ::com::sun::star::xml::sax; -OXMLSubDocument::OXMLSubDocument( ORptFilter& rImport, - sal_uInt16 nPrfx - ,const OUString& rLName +OXMLSubDocument::OXMLSubDocument( ORptFilter& rImport ,const Reference< XReportComponent > & _xComponent ,OXMLTable* _pContainer ,OXMLCell* _pCellParent) : - OXMLReportElementBase( rImport, nPrfx, rLName,_xComponent.get(),_pContainer) + OXMLReportElementBase( rImport,_xComponent.get(),_pContainer) ,m_xFake(_xComponent) ,m_pCellParent(_pCellParent) ,m_nCurrentCount(0) @@ -55,31 +53,21 @@ OXMLSubDocument::~OXMLSubDocument() { } -SvXMLImportContextRef OXMLSubDocument::CreateChildContext_( - sal_uInt16 _nPrefix, - const OUString& _rLocalName, - const Reference< XAttributeList > & xAttrList ) +SvXMLImportContextRef OXMLSubDocument::CreateChildContext( sal_uInt16 nPrefix, + const OUString& rLocalName, + const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ) { - SvXMLImportContextRef xContext = OXMLReportElementBase::CreateChildContext_(_nPrefix,_rLocalName,xAttrList); - if (xContext) - return xContext; + SvXMLImportContextRef xContext; const SvXMLTokenMap& rTokenMap = static_cast(GetImport()).GetReportElemTokenMap(); - - switch( rTokenMap.Get( _nPrefix, _rLocalName ) ) + switch( rTokenMap.Get( nPrefix, rLocalName ) ) { - case XML_TOK_MASTER_DETAIL_FIELDS: - { - GetImport().GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - xContext = new OXMLMasterFields(static_cast(GetImport()), _nPrefix, _rLocalName,xAttrList ,this); - } - break; case XML_TOK_SUB_FRAME: { if ( !m_bContainsShape ) m_nCurrentCount = m_pContainer->getSection()->getCount(); rtl::Reference< XMLShapeImportHelper > xShapeImportHelper = GetImport().GetShapeImport(); uno::Reference< drawing::XShapes > xShapes = m_pContainer->getSection().get(); - xContext = xShapeImportHelper->CreateGroupChildContext(GetImport(),_nPrefix,_rLocalName,xAttrList,xShapes); + xContext = xShapeImportHelper->CreateGroupChildContext(GetImport(),nPrefix,rLocalName,xAttrList,xShapes); m_bContainsShape = true; if (m_pCellParent) { @@ -88,11 +76,31 @@ SvXMLImportContextRef OXMLSubDocument::CreateChildContext_( } } break; + } + return xContext; +} + +css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLSubDocument::createFastChildContext_( + sal_Int32 nElement, + const Reference< XFastAttributeList > & xAttrList ) +{ + css::uno::Reference< css::xml::sax::XFastContextHandler > xContext = OXMLReportElementBase::createFastChildContext_(nElement,xAttrList); + if (xContext) + return xContext; + + switch( nElement ) + { + case XML_ELEMENT(REPORT, XML_MASTER_DETAIL_FIELDS): + { + GetImport().GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); + xContext = new OXMLMasterFields(static_cast(GetImport()),xAttrList ,this); + } + break; // FIXME: is it *intentional* that this is supported? // ORptExport::exportContainer() can export this but the import // used to be rather accidental previously - case XML_TOK_SUB_BODY: - xContext = new RptXMLDocumentBodyContext(GetImport(), _nPrefix, _rLocalName); + case XML_ELEMENT(OFFICE, XML_BODY): + xContext = new RptXMLDocumentBodyContext(GetImport()); break; default: break; @@ -101,7 +109,7 @@ SvXMLImportContextRef OXMLSubDocument::CreateChildContext_( return xContext; } -void OXMLSubDocument::EndElement() +void OXMLSubDocument::endFastElement(sal_Int32 ) { if ( m_bContainsShape ) { diff --git a/reportdesign/source/filter/xml/xmlSubDocument.hxx b/reportdesign/source/filter/xml/xmlSubDocument.hxx index 3c0a0d33c6d4..38a4007ea5f8 100644 --- a/reportdesign/source/filter/xml/xmlSubDocument.hxx +++ b/reportdesign/source/filter/xml/xmlSubDocument.hxx @@ -39,20 +39,21 @@ namespace rptxml OXMLSubDocument(const OXMLSubDocument&) = delete; void operator =(const OXMLSubDocument&) = delete; - virtual SvXMLImportContextRef CreateChildContext_( sal_uInt16 nPrefix, - const OUString& rLocalName, - const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList ) override; + virtual css::uno::Reference< css::xml::sax::XFastContextHandler > createFastChildContext_( sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ) override; public: OXMLSubDocument( ORptFilter& rImport - ,sal_uInt16 nPrfx - ,const OUString& rLName ,const css::uno::Reference< css::report::XReportComponent >& _xComponent ,OXMLTable* _pContainer ,OXMLCell* _pCellParent); virtual ~OXMLSubDocument() override; - virtual void EndElement() override; + virtual SvXMLImportContextRef 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 addMasterDetailPair(const ::std::pair< OUString,OUString >& _aPair) override; }; diff --git a/reportdesign/source/filter/xml/xmlTable.cxx b/reportdesign/source/filter/xml/xmlTable.cxx index 7bf8e57123d2..5c400a33512d 100644 --- a/reportdesign/source/filter/xml/xmlTable.cxx +++ b/reportdesign/source/filter/xml/xmlTable.cxx @@ -57,51 +57,46 @@ namespace rptxml } OXMLTable::OXMLTable( ORptFilter& rImport - ,sal_uInt16 nPrfx - ,const OUString& _sLocalName - ,const Reference< XAttributeList > & _xAttrList + ,const Reference< XFastAttributeList > & _xAttrList ,const uno::Reference< report::XSection >& _xSection ) -:SvXMLImportContext( rImport, nPrfx, _sLocalName ) +:SvXMLImportContext( rImport ) ,m_xSection(_xSection) ,m_nColSpan(1) ,m_nRowSpan(0) ,m_nRowIndex(0) ,m_nColumnIndex(0) { - OSL_ENSURE(_xAttrList.is(),"Attribute list is NULL!"); - const SvXMLNamespaceMap& rMap = rImport.GetNamespaceMap(); - const SvXMLTokenMap& rTokenMap = rImport.GetSectionElemTokenMap(); - const sal_Int16 nLength = (m_xSection.is() && _xAttrList.is()) ? _xAttrList->getLength() : 0; + if (!m_xSection.is()) + return; static const OUString s_sTRUE = ::xmloff::token::GetXMLToken(XML_TRUE); try { - for(sal_Int16 i = 0; i < nLength; ++i) + sax_fastparser::FastAttributeList *pAttribList = + sax_fastparser::FastAttributeList::castToFastAttributeList( _xAttrList ); + for (auto &aIter : *pAttribList) { - OUString sLocalName; - const OUString sAttrName = _xAttrList->getNameByIndex( i ); - const sal_uInt16 nPrefix = rMap.GetKeyByAttrName( sAttrName,&sLocalName ); - const OUString sValue = _xAttrList->getValueByIndex( i ); + OUString sValue = aIter.toString(); - switch( rTokenMap.Get( nPrefix, sLocalName ) ) + switch( aIter.getToken() ) { - case XML_TOK_VISIBLE: + case XML_ELEMENT(REPORT, XML_VISIBLE): m_xSection->setVisible(sValue == s_sTRUE); break; - case XML_TOK_FORCE_NEW_PAGE: + case XML_ELEMENT(REPORT, XML_FORCE_NEW_PAGE): m_xSection->setForceNewPage(lcl_getForceNewPageOption(sValue)); break; - case XML_TOK_FORCE_NEW_COLUMN: + case XML_ELEMENT(REPORT, XML_FORCE_NEW_COLUMN): m_xSection->setNewRowOrCol(lcl_getForceNewPageOption(sValue)); break; - case XML_TOK_KEEP_TOGETHER: + case XML_ELEMENT(REPORT, XML_KEEP_TOGETHER): m_xSection->setKeepTogether(sValue == s_sTRUE); break; - case XML_TOK_SECTION_NAME: + case XML_ELEMENT(TABLE, XML_NAME): m_xSection->setName(sValue); break; - case XML_TOK_SECT_STYLE_NAME: + case XML_ELEMENT(TABLE, XML_STYLE_NAME): m_sStyleName = sValue; break; default: @@ -119,38 +114,36 @@ OXMLTable::~OXMLTable() { } -SvXMLImportContextRef OXMLTable::CreateChildContext( - sal_uInt16 _nPrefix, - const OUString& _rLocalName, - const Reference< XAttributeList > & xAttrList ) +css::uno::Reference< css::xml::sax::XFastContextHandler > OXMLTable::createFastChildContext( + sal_Int32 nElement, + const Reference< XFastAttributeList > & xAttrList ) { - SvXMLImportContext *pContext = nullptr; + css::uno::Reference< css::xml::sax::XFastContextHandler > xContext; ORptFilter& rImport = GetOwnImport(); - const SvXMLTokenMap& rTokenMap = rImport.GetColumnTokenMap(); - switch( rTokenMap.Get( _nPrefix, _rLocalName ) ) + switch( nElement ) { - case XML_TOK_TABLE_COLUMNS: - case XML_TOK_TABLE_ROWS: - pContext = new OXMLRowColumn( rImport, _nPrefix, _rLocalName,xAttrList ,this); + case XML_ELEMENT(TABLE, XML_TABLE_COLUMNS): + case XML_ELEMENT(TABLE, XML_TABLE_ROWS): + xContext = new OXMLRowColumn( rImport,xAttrList ,this); break; - case XML_TOK_ROW: + case XML_ELEMENT(TABLE, XML_TABLE_ROW): incrementRowIndex(); rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = new OXMLRowColumn( rImport, _nPrefix, _rLocalName,xAttrList,this); + xContext = new OXMLRowColumn( rImport,xAttrList,this); break; - case XML_TOK_COLUMN: + case XML_ELEMENT(TABLE, XML_TABLE_COLUMN): rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); - pContext = new OXMLRowColumn( rImport, _nPrefix, _rLocalName,xAttrList,this); + xContext = new OXMLRowColumn( rImport,xAttrList,this); break; - case XML_TOK_CONDITIONAL_PRINT_EXPRESSION: - pContext = new OXMLCondPrtExpr( rImport, _nPrefix, _rLocalName,xAttrList,m_xSection.get()); + case XML_ELEMENT(REPORT, XML_CONDITIONAL_PRINT_EXPRESSION): + xContext = new OXMLCondPrtExpr( rImport,xAttrList,m_xSection.get()); break; default: break; } - return pContext; + return xContext; } ORptFilter& OXMLTable::GetOwnImport() @@ -158,7 +151,7 @@ ORptFilter& OXMLTable::GetOwnImport() return static_cast(GetImport()); } -void OXMLTable::EndElement() +void OXMLTable::endFastElement(sal_Int32 ) { try { diff --git a/reportdesign/source/filter/xml/xmlTable.hxx b/reportdesign/source/filter/xml/xmlTable.hxx index cf377ffd0323..508ad5087166 100644 --- a/reportdesign/source/filter/xml/xmlTable.hxx +++ b/reportdesign/source/filter/xml/xmlTable.hxx @@ -57,18 +57,15 @@ namespace rptxml public: OXMLTable( ORptFilter& rImport - ,sal_uInt16 nPrfx - ,const OUString& rLName - ,const css::uno::Reference< css::xml::sax::XAttributeList > & xAttrList + ,const css::uno::Reference< css::xml::sax::XFastAttributeList > & xAttrList ,const css::uno::Reference< css::report::XSection >& _xSection ); virtual ~OXMLTable() override; - virtual SvXMLImportContextRef CreateChildContext( sal_uInt16 nPrefix, - 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; - virtual void EndElement() override; + virtual void SAL_CALL endFastElement(sal_Int32 nElement) override; void addHeight(sal_Int32 _nHeight) { m_aHeight.push_back(_nHeight); } void addAutoHeight(bool _bAutoHeight) { m_aAutoHeight.push_back(_bAutoHeight); } diff --git a/reportdesign/source/filter/xml/xmlfilter.cxx b/reportdesign/source/filter/xml/xmlfilter.cxx index 768a68753265..fcd130727dae 100644 --- a/reportdesign/source/filter/xml/xmlfilter.cxx +++ b/reportdesign/source/filter/xml/xmlfilter.cxx @@ -665,14 +665,12 @@ public: } -SvXMLImportContextRef RptXMLDocumentBodyContext::CreateChildContext( - sal_uInt16 const nPrefix, - const OUString& rLocalName, - const uno::Reference & xAttrList) +css::uno::Reference< css::xml::sax::XFastContextHandler > RptXMLDocumentBodyContext::createFastChildContext( + sal_Int32 nElement, + const uno::Reference & xAttrList) { ORptFilter & rImport(static_cast(GetImport())); - if ((XML_NAMESPACE_OFFICE == nPrefix || XML_NAMESPACE_OOO == nPrefix) - && IsXMLToken(rLocalName, XML_REPORT)) + if (nElement == XML_ELEMENT(OFFICE, XML_REPORT) || nElement == XML_ELEMENT(OOO, XML_REPORT)) { rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); const SvXMLStylesContext* pAutoStyles = rImport.GetAutoStyles(); @@ -684,7 +682,7 @@ SvXMLImportContextRef RptXMLDocumentBodyContext::CreateChildContext( pAutoStyle->FillPropertySet(rImport.getReportDefinition().get()); } } - return new OXMLReport(rImport, nPrefix, rLocalName, xAttrList, rImport.getReportDefinition()); + return new OXMLReport(rImport, xAttrList, rImport.getReportDefinition()); } return nullptr; } @@ -703,8 +701,15 @@ public: const css::uno::Reference< css::xml::sax::XFastAttributeList >& ) 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 + sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList >& /*xAttrList*/ ) override { + ORptFilter & rImport(static_cast(GetImport())); + switch (nElement) + { + case XML_ELEMENT(OFFICE, XML_BODY): + return new RptXMLDocumentBodyContext(rImport); + break; + } return nullptr; } @@ -726,9 +731,6 @@ public: rImport.GetProgressBarHelper()->Increment( PROGRESS_BAR_STEP ); pContext = rImport.CreateFontDeclsContext(rLocalName, xAttrList); break; - case XML_TOK_CONTENT_BODY: - pContext = new RptXMLDocumentBodyContext(rImport, nPrefix, rLocalName); - break; default: break; } diff --git a/reportdesign/source/filter/xml/xmlfilter.hxx b/reportdesign/source/filter/xml/xmlfilter.hxx index 041dda702c4e..6257832567fa 100644 --- a/reportdesign/source/filter/xml/xmlfilter.hxx +++ b/reportdesign/source/filter/xml/xmlfilter.hxx @@ -229,16 +229,16 @@ public: class RptXMLDocumentBodyContext : public SvXMLImportContext { public: - RptXMLDocumentBodyContext(SvXMLImport & rImport, - sal_uInt16 const nPrefix, - const OUString& rLocalName) - : SvXMLImportContext(rImport, nPrefix, rLocalName) + RptXMLDocumentBodyContext(SvXMLImport & rImport) + : SvXMLImportContext(rImport) { } - virtual SvXMLImportContextRef CreateChildContext(sal_uInt16 const nPrefix, - const OUString& rLocalName, - const css::uno::Reference & xAttrList) override; + virtual void SAL_CALL startFastElement( sal_Int32 /*nElement*/, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& ) 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; }; } // rptxml -- cgit