diff options
author | Noel Grandin <noelgrandin@gmail.com> | 2020-11-15 20:12:51 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2020-11-15 21:15:58 +0100 |
commit | 89a571ee1d08dc1e1c77ff647be36263325f23af (patch) | |
tree | d5c1f4e5f7e331d847417eb455bfb4fc68df5f7e /xmloff | |
parent | f7bc285caf741eed0305a7c6e0a15e4a6b83ca6c (diff) |
fastparser in SchXMLAxisContext
Change-Id: Ia4d0f55ea3cf4845386dacc0e30ee7d949e6f501
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/105901
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'xmloff')
-rw-r--r-- | xmloff/source/chart/SchXMLAxisContext.cxx | 133 | ||||
-rw-r--r-- | xmloff/source/chart/SchXMLAxisContext.hxx | 3 |
2 files changed, 37 insertions, 99 deletions
diff --git a/xmloff/source/chart/SchXMLAxisContext.cxx b/xmloff/source/chart/SchXMLAxisContext.cxx index e7e059af7a7d..ff4bd8d1066c 100644 --- a/xmloff/source/chart/SchXMLAxisContext.cxx +++ b/xmloff/source/chart/SchXMLAxisContext.cxx @@ -81,7 +81,8 @@ private: public: SchXMLCategoriesContext( SvXMLImport& rImport, OUString& rAddress ); - virtual void StartElement( const Reference< css::xml::sax::XAttributeList >& xAttrList ) override; + virtual void SAL_CALL startFastElement( sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override; }; class DateScaleContext : public SvXMLImportContext @@ -90,7 +91,8 @@ public: DateScaleContext( SvXMLImport& rImport, const Reference< beans::XPropertySet >& rAxisProps ); - virtual void StartElement( const Reference< css::xml::sax::XAttributeList >& xAttrList ) override; + virtual void SAL_CALL startFastElement( sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override; private: Reference< beans::XPropertySet > m_xAxisProps; @@ -227,65 +229,27 @@ void SchXMLAxisContext::CreateGrid( const OUString& sAutoStyleName, bool bIsMajo } } -namespace -{ -enum AxisAttributeTokens -{ - XML_TOK_AXIS_DIMENSION, - XML_TOK_AXIS_NAME, - XML_TOK_AXIS_STYLE_NAME, - XML_TOK_AXIS_TYPE, - XML_TOK_AXIS_TYPE_EXT -}; - -const SvXMLTokenMapEntry aAxisAttributeTokenMap[] = -{ - { XML_NAMESPACE_CHART, XML_DIMENSION, XML_TOK_AXIS_DIMENSION }, - { XML_NAMESPACE_CHART, XML_NAME, XML_TOK_AXIS_NAME }, - { XML_NAMESPACE_CHART, XML_STYLE_NAME, XML_TOK_AXIS_STYLE_NAME }, - { XML_NAMESPACE_CHART, XML_AXIS_TYPE, XML_TOK_AXIS_TYPE }, - { XML_NAMESPACE_CHART_EXT, XML_AXIS_TYPE, XML_TOK_AXIS_TYPE_EXT }, - XML_TOKEN_MAP_END -}; - -class AxisAttributeTokenMap : public SvXMLTokenMap -{ -public: - AxisAttributeTokenMap(): SvXMLTokenMap( aAxisAttributeTokenMap ) {} - virtual ~AxisAttributeTokenMap() {} -}; - -//a AxisAttributeTokenMap Singleton -struct theAxisAttributeTokenMap : public rtl::Static< AxisAttributeTokenMap, theAxisAttributeTokenMap > {}; -} - -void SchXMLAxisContext::StartElement( const Reference< xml::sax::XAttributeList >& xAttrList ) +void SchXMLAxisContext::startFastElement( sal_Int32 /*nElement*/, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) { // parse attributes - sal_Int16 nAttrCount = xAttrList.is()? xAttrList->getLength(): 0; - const SvXMLTokenMap& rAttrTokenMap = theAxisAttributeTokenMap::get(); - - for( sal_Int16 i = 0; i < nAttrCount; i++ ) + for( auto& aIter : sax_fastparser::castToFastAttributeList(xAttrList) ) { - OUString sAttrName = xAttrList->getNameByIndex( i ); - OUString aLocalName; - OUString aValue = xAttrList->getValueByIndex( i ); - sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName ); - - switch( rAttrTokenMap.Get( nPrefix, aLocalName )) + OUString aValue = aIter.toString(); + switch(aIter.getToken()) { - case XML_TOK_AXIS_DIMENSION: + case XML_ELEMENT(CHART, XML_DIMENSION): { SchXMLAxisDimension nEnumVal; if( SvXMLUnitConverter::convertEnum( nEnumVal, aValue, aXMLAxisDimensionMap )) m_aCurrentAxis.eDimension = nEnumVal; } break; - case XML_TOK_AXIS_NAME: + case XML_ELEMENT(CHART, XML_NAME): m_aCurrentAxis.aName = aValue; break; - case XML_TOK_AXIS_TYPE: - case XML_TOK_AXIS_TYPE_EXT: + case XML_ELEMENT(CHART, XML_AXIS_TYPE): + case XML_ELEMENT(CHART_EXT, XML_AXIS_TYPE): sal_uInt16 nEnumVal; if( SvXMLUnitConverter::convertEnum( nEnumVal, aValue, aXMLAxisTypeMap )) { @@ -293,9 +257,11 @@ void SchXMLAxisContext::StartElement( const Reference< xml::sax::XAttributeList m_bAxisTypeImported = true; } break; - case XML_TOK_AXIS_STYLE_NAME: + case XML_ELEMENT(CHART, XML_STYLE_NAME): m_aAutoStyleName = aValue; break; + default: + XMLOFF_WARN_UNKNOWN("xmloff", aIter); } } @@ -831,21 +797,15 @@ SchXMLCategoriesContext::SchXMLCategoriesContext( { } -void SchXMLCategoriesContext::StartElement( const Reference< xml::sax::XAttributeList >& xAttrList ) +void SchXMLCategoriesContext::startFastElement( sal_Int32 /*nElement*/, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) { - sal_Int16 nAttrCount = xAttrList.is()? xAttrList->getLength(): 0; - - for( sal_Int16 i = 0; i < nAttrCount; i++ ) + for( auto& aIter : sax_fastparser::castToFastAttributeList(xAttrList) ) { - OUString sAttrName = xAttrList->getNameByIndex( i ); - OUString aLocalName; - sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName ); - - if( nPrefix == XML_NAMESPACE_TABLE && - IsXMLToken( aLocalName, XML_CELL_RANGE_ADDRESS ) ) - { - mrAddress = xAttrList->getValueByIndex( i ); - } + if( aIter.getToken() == XML_ELEMENT(TABLE, XML_CELL_RANGE_ADDRESS) ) + mrAddress = aIter.toString(); + else + XMLOFF_WARN_UNKNOWN("xmloff", aIter); } } @@ -868,25 +828,6 @@ enum DateScaleAttributeTokens XML_TOK_DATESCALE_MINOR_INTERVAL_UNIT }; -const SvXMLTokenMapEntry aDateScaleAttributeTokenMap[] = -{ - { XML_NAMESPACE_CHART, XML_BASE_TIME_UNIT, XML_TOK_DATESCALE_BASE_TIME_UNIT }, - { XML_NAMESPACE_CHART, XML_MAJOR_INTERVAL_VALUE, XML_TOK_DATESCALE_MAJOR_INTERVAL_VALUE }, - { XML_NAMESPACE_CHART, XML_MAJOR_INTERVAL_UNIT, XML_TOK_DATESCALE_MAJOR_INTERVAL_UNIT }, - { XML_NAMESPACE_CHART, XML_MINOR_INTERVAL_VALUE, XML_TOK_DATESCALE_MINOR_INTERVAL_VALUE }, - { XML_NAMESPACE_CHART, XML_MINOR_INTERVAL_UNIT, XML_TOK_DATESCALE_MINOR_INTERVAL_UNIT }, - XML_TOKEN_MAP_END -}; - -class DateScaleAttributeTokenMap : public SvXMLTokenMap -{ -public: - DateScaleAttributeTokenMap(): SvXMLTokenMap( aDateScaleAttributeTokenMap ) {} - virtual ~DateScaleAttributeTokenMap() {} -}; - -struct theDateScaleAttributeTokenMap : public rtl::Static< DateScaleAttributeTokenMap, theDateScaleAttributeTokenMap > {}; - sal_Int32 lcl_getTimeUnit( const OUString& rValue ) { sal_Int32 nTimeUnit = css::chart::TimeUnit::DAY; @@ -901,35 +842,29 @@ sal_Int32 lcl_getTimeUnit( const OUString& rValue ) } -void DateScaleContext::StartElement( const Reference< xml::sax::XAttributeList >& xAttrList ) +void DateScaleContext::startFastElement( sal_Int32 /*nElement*/, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) { if( !m_xAxisProps.is() ) return; // parse attributes - sal_Int16 nAttrCount = xAttrList.is()? xAttrList->getLength(): 0; - const SvXMLTokenMap& rAttrTokenMap = theDateScaleAttributeTokenMap::get(); - bool bSetNewIncrement=false; chart::TimeIncrement aIncrement; m_xAxisProps->getPropertyValue("TimeIncrement") >>= aIncrement; - for( sal_Int16 i = 0; i < nAttrCount; i++ ) + for( auto& aIter : sax_fastparser::castToFastAttributeList(xAttrList) ) { - OUString sAttrName = xAttrList->getNameByIndex( i ); - OUString aLocalName; - OUString aValue = xAttrList->getValueByIndex( i ); - sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName ); - - switch( rAttrTokenMap.Get( nPrefix, aLocalName )) + OUString aValue = aIter.toString(); + switch( aIter.getToken() ) { - case XML_TOK_DATESCALE_BASE_TIME_UNIT: + case XML_ELEMENT(CHART, XML_BASE_TIME_UNIT): { aIncrement.TimeResolution <<= lcl_getTimeUnit(aValue); bSetNewIncrement = true; } break; - case XML_TOK_DATESCALE_MAJOR_INTERVAL_VALUE: + case XML_ELEMENT(CHART, XML_MAJOR_INTERVAL_VALUE): { chart::TimeInterval aInterval(1,0); aIncrement.MajorTimeInterval >>= aInterval; @@ -938,7 +873,7 @@ void DateScaleContext::StartElement( const Reference< xml::sax::XAttributeList > bSetNewIncrement = true; } break; - case XML_TOK_DATESCALE_MAJOR_INTERVAL_UNIT: + case XML_ELEMENT(CHART, XML_MAJOR_INTERVAL_UNIT): { chart::TimeInterval aInterval(1,0); aIncrement.MajorTimeInterval >>= aInterval; @@ -947,7 +882,7 @@ void DateScaleContext::StartElement( const Reference< xml::sax::XAttributeList > bSetNewIncrement = true; } break; - case XML_TOK_DATESCALE_MINOR_INTERVAL_VALUE: + case XML_ELEMENT(CHART, XML_MINOR_INTERVAL_VALUE): { chart::TimeInterval aInterval(1,0); aIncrement.MinorTimeInterval >>= aInterval; @@ -956,7 +891,7 @@ void DateScaleContext::StartElement( const Reference< xml::sax::XAttributeList > bSetNewIncrement = true; } break; - case XML_TOK_DATESCALE_MINOR_INTERVAL_UNIT: + case XML_ELEMENT(CHART, XML_MINOR_INTERVAL_UNIT): { chart::TimeInterval aInterval(1,0); aIncrement.MinorTimeInterval >>= aInterval; @@ -965,6 +900,8 @@ void DateScaleContext::StartElement( const Reference< xml::sax::XAttributeList > bSetNewIncrement = true; } break; + default: + XMLOFF_WARN_UNKNOWN("xmloff", aIter); } } diff --git a/xmloff/source/chart/SchXMLAxisContext.hxx b/xmloff/source/chart/SchXMLAxisContext.hxx index 5706c564f1f3..4c2ab3d07539 100644 --- a/xmloff/source/chart/SchXMLAxisContext.hxx +++ b/xmloff/source/chart/SchXMLAxisContext.hxx @@ -41,7 +41,8 @@ public: bool& rbAxisPositionAttributeImported ); virtual ~SchXMLAxisContext() override; - virtual void StartElement( const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList ) override; + virtual void SAL_CALL startFastElement( sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ) override; virtual void SAL_CALL endFastElement(sal_Int32 nElement) override; virtual css::uno::Reference< css::xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( sal_Int32 nElement, |