diff options
-rw-r--r-- | include/xmloff/DashStyle.hxx | 4 | ||||
-rw-r--r-- | include/xmloff/GradientStyle.hxx | 4 | ||||
-rw-r--r-- | include/xmloff/HatchStyle.hxx | 4 | ||||
-rw-r--r-- | include/xmloff/ImageStyle.hxx | 4 | ||||
-rw-r--r-- | include/xmloff/MarkerStyle.hxx | 4 | ||||
-rw-r--r-- | svx/source/xml/xmlxtimp.cxx | 207 | ||||
-rw-r--r-- | xmloff/inc/TransGradientStyle.hxx | 4 | ||||
-rw-r--r-- | xmloff/source/style/DashStyle.cxx | 61 | ||||
-rw-r--r-- | xmloff/source/style/FillStyleContext.cxx | 55 | ||||
-rw-r--r-- | xmloff/source/style/FillStyleContext.hxx | 48 | ||||
-rw-r--r-- | xmloff/source/style/GradientStyle.cxx | 77 | ||||
-rw-r--r-- | xmloff/source/style/HatchStyle.cxx | 58 | ||||
-rw-r--r-- | xmloff/source/style/ImageStyle.cxx | 45 | ||||
-rw-r--r-- | xmloff/source/style/MarkerStyle.cxx | 46 | ||||
-rw-r--r-- | xmloff/source/style/TransGradientStyle.cxx | 67 | ||||
-rw-r--r-- | xmloff/source/style/xmlstyle.cxx | 64 |
16 files changed, 332 insertions, 420 deletions
diff --git a/include/xmloff/DashStyle.hxx b/include/xmloff/DashStyle.hxx index e9c5aac073c3..76bce512477a 100644 --- a/include/xmloff/DashStyle.hxx +++ b/include/xmloff/DashStyle.hxx @@ -28,7 +28,7 @@ class SvXMLImport; class SvXMLExport; namespace com::sun::star { namespace uno { template<class A> class Reference; } - namespace xml::sax { class XAttributeList; } + namespace xml::sax { class XFastAttributeList; } namespace uno { class Any; } } @@ -42,7 +42,7 @@ public: ~XMLDashStyleImport(); void importXML( - const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList, css::uno::Any& rValue, OUString& rStrName ); }; diff --git a/include/xmloff/GradientStyle.hxx b/include/xmloff/GradientStyle.hxx index 94f2fb2b9b28..5037505cc46a 100644 --- a/include/xmloff/GradientStyle.hxx +++ b/include/xmloff/GradientStyle.hxx @@ -29,7 +29,7 @@ class SvXMLImport; class SvXMLExport; namespace com::sun::star { namespace uno { template<class A> class Reference; } - namespace xml::sax { class XAttributeList; } + namespace xml::sax { class XFastAttributeList; } namespace uno { class Any; } } @@ -43,7 +43,7 @@ public: ~XMLGradientStyleImport(); void importXML( - const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList, css::uno::Any& rValue, OUString& rStrName ); }; diff --git a/include/xmloff/HatchStyle.hxx b/include/xmloff/HatchStyle.hxx index 17d69fcc825d..a08eede0c180 100644 --- a/include/xmloff/HatchStyle.hxx +++ b/include/xmloff/HatchStyle.hxx @@ -29,7 +29,7 @@ class SvXMLImport; class SvXMLExport; namespace com::sun::star { namespace uno { template<class A> class Reference; } - namespace xml::sax { class XAttributeList; } + namespace xml::sax { class XFastAttributeList; } namespace uno { class Any; } } @@ -43,7 +43,7 @@ public: ~XMLHatchStyleImport(); void importXML( - const css::uno::Reference< css::xml::sax::XAttributeList>& xAttrList, + const css::uno::Reference< css::xml::sax::XFastAttributeList>& xAttrList, css::uno::Any& rValue, OUString& rStrName ); }; diff --git a/include/xmloff/ImageStyle.hxx b/include/xmloff/ImageStyle.hxx index 3b017faa2120..b6e8cb8b0811 100644 --- a/include/xmloff/ImageStyle.hxx +++ b/include/xmloff/ImageStyle.hxx @@ -27,7 +27,7 @@ namespace com::sun::star::uno { class Any; } namespace com::sun::star::uno { template <typename > class Reference; } -namespace com::sun::star::xml::sax { class XAttributeList; } +namespace com::sun::star::xml::sax { class XFastAttributeList; } class SvXMLExport; class SvXMLImport; @@ -36,7 +36,7 @@ namespace XMLImageStyle { UNLESS_MERGELIBS(XMLOFF_DLLPUBLIC) void exportXML(OUString const & rStrName, css::uno::Any const & rValue, SvXMLExport& rExport); -UNLESS_MERGELIBS(XMLOFF_DLLPUBLIC) bool importXML(css::uno::Reference<css::xml::sax::XAttributeList> const & xAttrList, +UNLESS_MERGELIBS(XMLOFF_DLLPUBLIC) bool importXML(css::uno::Reference<css::xml::sax::XFastAttributeList> const & xAttrList, css::uno::Any& rValue, OUString& rStrName, SvXMLImport& rImport); } diff --git a/include/xmloff/MarkerStyle.hxx b/include/xmloff/MarkerStyle.hxx index 947039d435b3..b3b73b4ba6f2 100644 --- a/include/xmloff/MarkerStyle.hxx +++ b/include/xmloff/MarkerStyle.hxx @@ -29,7 +29,7 @@ class SvXMLImport; class SvXMLExport; namespace com::sun::star { namespace uno { template<class A> class Reference; } - namespace xml::sax { class XAttributeList; } + namespace xml::sax { class XFastAttributeList; } namespace uno { class Any; } } @@ -43,7 +43,7 @@ public: ~XMLMarkerStyleImport(); void importXML( - const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList, css::uno::Any& rValue, OUString& rStrName ); }; diff --git a/svx/source/xml/xmlxtimp.cxx b/svx/source/xml/xmlxtimp.cxx index 7e9ffe67443a..75e4b97e84a5 100644 --- a/svx/source/xml/xmlxtimp.cxx +++ b/svx/source/xml/xmlxtimp.cxx @@ -76,12 +76,12 @@ public: const css::uno::Reference< css::xml::sax::XFastAttributeList > & Attribs) override; protected: - void importColor( const uno::Reference< XAttributeList >& xAttrList, Any& rAny, OUString& rName ); - void importMarker( const uno::Reference< XAttributeList >& xAttrList, Any& rAny, OUString& rName ); - void importDash( const uno::Reference< XAttributeList >& xAttrList, Any& rAny, OUString& rName ); - void importHatch( const uno::Reference< XAttributeList >& xAttrList, Any& rAny, OUString& rName ); - void importGradient( const uno::Reference< XAttributeList >& xAttrList, Any& rAny, OUString& rName ); - void importBitmap( const uno::Reference< XAttributeList >& xAttrList, Any& rAny, OUString& rName ); + static void importColor( const uno::Reference< XFastAttributeList >& xAttrList, Any& rAny, OUString& rName ); + void importMarker( const uno::Reference< XFastAttributeList >& xAttrList, Any& rAny, OUString& rName ); + void importDash( const uno::Reference< XFastAttributeList >& xAttrList, Any& rAny, OUString& rName ); + void importHatch( const uno::Reference< XFastAttributeList >& xAttrList, Any& rAny, OUString& rName ); + void importGradient( const uno::Reference< XFastAttributeList >& xAttrList, Any& rAny, OUString& rName ); + void importBitmap( const uno::Reference< XFastAttributeList >& xAttrList, Any& rAny, OUString& rName ); private: uno::Reference< XNameContainer > mxTable; @@ -101,132 +101,123 @@ css::uno::Reference< css::xml::sax::XFastContextHandler > SvxXMLTableImportContext::createFastChildContext(sal_Int32 nElement, const css::uno::Reference< css::xml::sax::XFastAttributeList > & rAttrList) { - if( IsTokenInNamespace(nElement, XML_NAMESPACE_DRAW) || - IsTokenInNamespace(nElement, XML_NAMESPACE_DRAW_OOO) ) + if( !(IsTokenInNamespace(nElement, XML_NAMESPACE_DRAW) || + IsTokenInNamespace(nElement, XML_NAMESPACE_DRAW_OOO) )) + return nullptr; + + std::vector<std::pair<sal_Int32, OString>> aTmpAttrList; + for (auto& aIter : sax_fastparser::castToFastAttributeList( rAttrList )) + aTmpAttrList.push_back({aIter.getToken(), OString(aIter.toCString())}); + if( mbOOoFormat && + (SvxXMLTableImportContextEnum::Dash == meContext || SvxXMLTableImportContextEnum::Hatch == meContext || + SvxXMLTableImportContextEnum::Bitmap == meContext) ) { - SvXMLAttributeList *pAttrList = new SvXMLAttributeList; - for (auto& aIter : sax_fastparser::castToFastAttributeList( rAttrList )) - pAttrList->AddAttribute( - SvXMLImport::getNamespacePrefixFromToken(aIter.getToken(), nullptr) + ":" + - GetXMLToken(static_cast<XMLTokenEnum>(aIter.getToken() & TOKEN_MASK)), - aIter.toString()); - if( mbOOoFormat && - (SvxXMLTableImportContextEnum::Dash == meContext || SvxXMLTableImportContextEnum::Hatch == meContext || - SvxXMLTableImportContextEnum::Bitmap == meContext) ) + for( auto & aIter : aTmpAttrList ) { - sal_Int16 nAttrCount = pAttrList->getLength(); - for( sal_Int16 i=0; i < nAttrCount; i++ ) + sal_Int32 aLocalAttr = aIter.first & TOKEN_MASK; + if( aIter.first == XML_ELEMENT(XLINK, XML_HREF) && + SvxXMLTableImportContextEnum::Bitmap == meContext ) { - const OUString& rAttrName = pAttrList->getNameByIndex( i ); - OUString aLocalName; - sal_uInt16 nPrefix_ = - GetImport().GetNamespaceMap().GetKeyByAttrName( rAttrName, - &aLocalName ); - if( XML_NAMESPACE_XLINK == nPrefix_ && - SvxXMLTableImportContextEnum::Bitmap == meContext && - IsXMLToken( aLocalName, XML_HREF ) ) - { - const OUString rValue = pAttrList->getValueByIndex( i ); - if( !rValue.isEmpty() && '#' == rValue[0] ) - pAttrList->SetValueByIndex( i, rValue.copy( 1 ) ); - } - else if( (XML_NAMESPACE_DRAW == nPrefix_ || XML_NAMESPACE_DRAW_OOO == nPrefix_) && - ( ( SvxXMLTableImportContextEnum::Dash == meContext && - (IsXMLToken( aLocalName, XML_DOTS1_LENGTH ) || - IsXMLToken( aLocalName, XML_DOTS2_LENGTH ) || - IsXMLToken( aLocalName, XML_DISTANCE )) ) || - ( SvxXMLTableImportContextEnum::Hatch == meContext && - IsXMLToken( aLocalName, XML_DISTANCE ) ) ) ) + OString rValue = aIter.second; + if( !rValue.isEmpty() && '#' == rValue[0] ) + rValue = rValue.copy( 1 ); + } + else if( (IsTokenInNamespace(aIter.first, XML_NAMESPACE_DRAW) || IsTokenInNamespace(aIter.first, XML_NAMESPACE_DRAW_OOO)) && + ( ( SvxXMLTableImportContextEnum::Dash == meContext && + ( aLocalAttr == XML_DOTS1_LENGTH || + aLocalAttr == XML_DOTS2_LENGTH || + aLocalAttr == XML_DISTANCE ) ) || + ( SvxXMLTableImportContextEnum::Hatch == meContext && + ( aLocalAttr == XML_DISTANCE ) ) ) ) + { + OString& rValue = aIter.second; + sal_Int32 nPos = rValue.getLength(); + while( nPos && rValue[nPos-1] <= ' ' ) + --nPos; + if( nPos > 2 && + ('c'==rValue[nPos-2] || 'C'==rValue[nPos-2]) && + ('h'==rValue[nPos-1] || 'H'==rValue[nPos-1]) ) { - const OUString rValue = pAttrList->getValueByIndex( i ); - sal_Int32 nPos = rValue.getLength(); - while( nPos && rValue[nPos-1] <= ' ' ) - --nPos; - if( nPos > 2 && - ('c'==rValue[nPos-2] || 'C'==rValue[nPos-2]) && - ('h'==rValue[nPos-1] || 'H'==rValue[nPos-1]) ) - { - pAttrList->SetValueByIndex( i, rValue.copy( 0, nPos-2 ) ); - } + rValue = rValue.copy( 0, nPos-2 ); } } } - try + } + try + { + rtl::Reference<sax_fastparser::FastAttributeList> xFastList = new sax_fastparser::FastAttributeList(nullptr); + for (auto& aIter : aTmpAttrList) + xFastList->add(aIter.first, aIter.second); + + Any aAny; + OUString aName; + + switch( meContext ) { - Any aAny; - OUString aName; + case SvxXMLTableImportContextEnum::Color: + importColor( xFastList.get(), aAny, aName ); + break; + case SvxXMLTableImportContextEnum::Marker: + importMarker( xFastList.get(), aAny, aName ); + break; + case SvxXMLTableImportContextEnum::Dash: + importDash( xFastList.get(), aAny, aName ); + break; + case SvxXMLTableImportContextEnum::Hatch: + importHatch( xFastList.get(), aAny, aName ); + break; + case SvxXMLTableImportContextEnum::Gradient: + importGradient( xFastList.get(), aAny, aName ); + break; + case SvxXMLTableImportContextEnum::Bitmap: + importBitmap( xFastList.get(), aAny, aName ); + break; + } - switch( meContext ) + if( !aName.isEmpty() && aAny.hasValue() ) + { + if( mxTable->hasByName( aName ) ) { - case SvxXMLTableImportContextEnum::Color: - importColor( pAttrList, aAny, aName ); - break; - case SvxXMLTableImportContextEnum::Marker: - importMarker( pAttrList, aAny, aName ); - break; - case SvxXMLTableImportContextEnum::Dash: - importDash( pAttrList, aAny, aName ); - break; - case SvxXMLTableImportContextEnum::Hatch: - importHatch( pAttrList, aAny, aName ); - break; - case SvxXMLTableImportContextEnum::Gradient: - importGradient( pAttrList, aAny, aName ); - break; - case SvxXMLTableImportContextEnum::Bitmap: - importBitmap( pAttrList, aAny, aName ); - break; + mxTable->replaceByName( aName, aAny ); } - - if( !aName.isEmpty() && aAny.hasValue() ) + else { - if( mxTable->hasByName( aName ) ) - { - mxTable->replaceByName( aName, aAny ); - } - else - { - mxTable->insertByName( aName, aAny ); - } + mxTable->insertByName( aName, aAny ); } } - catch (const uno::Exception&) - { - DBG_UNHANDLED_EXCEPTION("svx"); - } - return new SvXMLImportContext( GetImport() ); } - return nullptr; + catch (const uno::Exception&) + { + DBG_UNHANDLED_EXCEPTION("svx"); + } + return new SvXMLImportContext( GetImport() ); } -void SvxXMLTableImportContext::importColor( const uno::Reference< XAttributeList >& xAttrList, Any& rAny, OUString& rName ) +void SvxXMLTableImportContext::importColor( const uno::Reference< XFastAttributeList >& xAttrList, Any& rAny, OUString& rName ) { - const sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; - for( sal_Int16 i=0; i < nAttrCount; i++ ) + for (auto& aIter : sax_fastparser::castToFastAttributeList( xAttrList )) { - const OUString& rFullAttrName = xAttrList->getNameByIndex( i ); - OUString aLocalName; - sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( rFullAttrName, &aLocalName ); - - - if( XML_NAMESPACE_DRAW == nPrefix || XML_NAMESPACE_DRAW_OOO == nPrefix ) + switch (aIter.getToken()) { - if( aLocalName == GetXMLToken(XML_NAME) ) - { - rName = xAttrList->getValueByIndex( i ); - } - else if( aLocalName == GetXMLToken(XML_COLOR) ) + case XML_ELEMENT(DRAW, XML_NAME): + case XML_ELEMENT(DRAW_OOO, XML_NAME): + rName = aIter.toString(); + break; + case XML_ELEMENT(DRAW, XML_COLOR): + case XML_ELEMENT(DRAW_OOO, XML_COLOR): { sal_Int32 nColor(0); - ::sax::Converter::convertColor(nColor, - xAttrList->getValueByIndex( i )); + ::sax::Converter::convertColor(nColor, aIter.toString()); rAny <<= nColor; + break; } + default: + SAL_WARN("xmloff", "unknown attribute " << SvXMLImport::getPrefixAndNameFromToken(aIter.getToken()) << "=" << aIter.toString()); } } } -void SvxXMLTableImportContext::importMarker( const uno::Reference< XAttributeList >& xAttrList, Any& rAny, OUString& rName ) +void SvxXMLTableImportContext::importMarker( const uno::Reference< XFastAttributeList >& xAttrList, Any& rAny, OUString& rName ) { try { @@ -239,7 +230,7 @@ void SvxXMLTableImportContext::importMarker( const uno::Reference< XAttributeLis } } -void SvxXMLTableImportContext::importDash( const uno::Reference< XAttributeList >& xAttrList, Any& rAny, OUString& rName ) +void SvxXMLTableImportContext::importDash( const uno::Reference< XFastAttributeList >& xAttrList, Any& rAny, OUString& rName ) { try { @@ -252,7 +243,7 @@ void SvxXMLTableImportContext::importDash( const uno::Reference< XAttributeList } } -void SvxXMLTableImportContext::importHatch( const uno::Reference< XAttributeList >& xAttrList, Any& rAny, OUString& rName ) +void SvxXMLTableImportContext::importHatch( const uno::Reference< XFastAttributeList >& xAttrList, Any& rAny, OUString& rName ) { try { @@ -265,7 +256,7 @@ void SvxXMLTableImportContext::importHatch( const uno::Reference< XAttributeList } } -void SvxXMLTableImportContext::importGradient( const uno::Reference< XAttributeList >& xAttrList, Any& rAny, OUString& rName ) +void SvxXMLTableImportContext::importGradient( const uno::Reference< XFastAttributeList >& xAttrList, Any& rAny, OUString& rName ) { try { @@ -278,7 +269,7 @@ void SvxXMLTableImportContext::importGradient( const uno::Reference< XAttributeL } } -void SvxXMLTableImportContext::importBitmap( const uno::Reference< XAttributeList >& xAttrList, Any& rAny, OUString& rName ) +void SvxXMLTableImportContext::importBitmap( const uno::Reference< XFastAttributeList >& xAttrList, Any& rAny, OUString& rName ) { try { diff --git a/xmloff/inc/TransGradientStyle.hxx b/xmloff/inc/TransGradientStyle.hxx index 6a1174c419d8..61637eac9ab0 100644 --- a/xmloff/inc/TransGradientStyle.hxx +++ b/xmloff/inc/TransGradientStyle.hxx @@ -27,7 +27,7 @@ class SvXMLImport; class SvXMLExport; namespace com::sun::star { namespace uno { template<class A> class Reference; } - namespace xml::sax { class XAttributeList; } + namespace xml::sax { class XFastAttributeList; } namespace uno { class Any; } } @@ -41,7 +41,7 @@ public: ~XMLTransGradientStyleImport(); void importXML( - const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList, css::uno::Any& rValue, OUString& rStrName ); }; diff --git a/xmloff/source/style/DashStyle.cxx b/xmloff/source/style/DashStyle.cxx index ee3bdfdd5dda..2fb258492cb4 100644 --- a/xmloff/source/style/DashStyle.cxx +++ b/xmloff/source/style/DashStyle.cxx @@ -89,7 +89,7 @@ XMLDashStyleImport::~XMLDashStyleImport() } void XMLDashStyleImport::importXML( - const uno::Reference< xml::sax::XAttributeList >& xAttrList, + const uno::Reference< xml::sax::XFastAttributeList >& xAttrList, uno::Any& rValue, OUString& rStrName ) { @@ -104,90 +104,83 @@ void XMLDashStyleImport::importXML( bool bIsRel = false; - SvXMLNamespaceMap& rNamespaceMap = rImport.GetNamespaceMap(); SvXMLUnitConverter& rUnitConverter = rImport.GetMM100UnitConverter(); - static const SvXMLTokenMap aTokenMap( aDashStyleAttrTokenMap ); - - sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; - for( sal_Int16 i=0; i < nAttrCount; i++ ) + for (auto &aIter : sax_fastparser::castToFastAttributeList( xAttrList )) { - const OUString& rFullAttrName = xAttrList->getNameByIndex( i ); - OUString aStrAttrName; - sal_uInt16 nPrefix = rNamespaceMap.GetKeyByAttrName( rFullAttrName, &aStrAttrName ); - const OUString& rStrValue = xAttrList->getValueByIndex( i ); + const OUString aStrValue = aIter.toString(); - switch( aTokenMap.Get( nPrefix, aStrAttrName ) ) + switch( aIter.getToken() ) { - case XML_TOK_DASH_NAME: + case XML_ELEMENT(DRAW, XML_NAME): { - rStrName = rStrValue; + rStrName = aStrValue; } break; - case XML_TOK_DASH_DISPLAY_NAME: + case XML_ELEMENT(DRAW, XML_DISPLAY_NAME): { - aDisplayName = rStrValue; + aDisplayName = aStrValue; } break; - case XML_TOK_DASH_STYLE: + case XML_ELEMENT(DRAW, XML_STYLE): { - SvXMLUnitConverter::convertEnum( aLineDash.Style, rStrValue, pXML_DashStyle_Enum ); + SvXMLUnitConverter::convertEnum( aLineDash.Style, aStrValue, pXML_DashStyle_Enum ); } break; - case XML_TOK_DASH_DOTS1: - aLineDash.Dots = static_cast<sal_Int16>(rStrValue.toInt32()); + case XML_ELEMENT(DRAW, XML_DOTS1): + aLineDash.Dots = static_cast<sal_Int16>(aStrValue.toInt32()); break; - case XML_TOK_DASH_DOTS1LEN: + case XML_ELEMENT(DRAW, XML_DOTS1_LENGTH): { - if( rStrValue.indexOf( '%' ) != -1 ) // it's a percentage + if( aStrValue.indexOf( '%' ) != -1 ) // it's a percentage { bIsRel = true; - ::sax::Converter::convertPercent(aLineDash.DotLen, rStrValue); + ::sax::Converter::convertPercent(aLineDash.DotLen, aStrValue); } else { rUnitConverter.convertMeasureToCore( aLineDash.DotLen, - rStrValue ); + aStrValue ); } } break; - case XML_TOK_DASH_DOTS2: - aLineDash.Dashes = static_cast<sal_Int16>(rStrValue.toInt32()); + case XML_ELEMENT(DRAW, XML_DOTS2): + aLineDash.Dashes = static_cast<sal_Int16>(aStrValue.toInt32()); break; - case XML_TOK_DASH_DOTS2LEN: + case XML_ELEMENT(DRAW, XML_DOTS2_LENGTH): { - if( rStrValue.indexOf( '%' ) != -1 ) // it's a percentage + if( aStrValue.indexOf( '%' ) != -1 ) // it's a percentage { bIsRel = true; - ::sax::Converter::convertPercent(aLineDash.DashLen, rStrValue); + ::sax::Converter::convertPercent(aLineDash.DashLen, aStrValue); } else { rUnitConverter.convertMeasureToCore( aLineDash.DashLen, - rStrValue ); + aStrValue ); } } break; - case XML_TOK_DASH_DISTANCE: + case XML_ELEMENT(DRAW, XML_DISTANCE): { - if( rStrValue.indexOf( '%' ) != -1 ) // it's a percentage + if( aStrValue.indexOf( '%' ) != -1 ) // it's a percentage { bIsRel = true; - ::sax::Converter::convertPercent(aLineDash.Distance, rStrValue); + ::sax::Converter::convertPercent(aLineDash.Distance, aStrValue); } else { rUnitConverter.convertMeasureToCore( aLineDash.Distance, - rStrValue ); + aStrValue ); } } break; default: - SAL_INFO("xmloff.style", "Unknown token at import dash style"); + SAL_WARN("xmloff.style", "unknown attribute " << SvXMLImport::getPrefixAndNameFromToken(aIter.getToken()) << "=" << aStrValue); } } diff --git a/xmloff/source/style/FillStyleContext.cxx b/xmloff/source/style/FillStyleContext.cxx index 9f0daa7ee4be..58ae6cd6786a 100644 --- a/xmloff/source/style/FillStyleContext.cxx +++ b/xmloff/source/style/FillStyleContext.cxx @@ -34,12 +34,10 @@ using namespace ::com::sun::star; -XMLGradientStyleContext::XMLGradientStyleContext( SvXMLImport& rImport, sal_uInt16 nPrfx, - const OUString& rLName, - const uno::Reference< xml::sax::XAttributeList >& xAttrList) -: SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList) +XMLGradientStyleContext::XMLGradientStyleContext( SvXMLImport& rImport, sal_Int32 , + const uno::Reference< xml::sax::XFastAttributeList >& xAttrList) +: SvXMLStyleContext(rImport) { - // start import XMLGradientStyleImport aGradientStyle( GetImport() ); aGradientStyle.importXML( xAttrList, maAny, maStrName ); @@ -49,7 +47,7 @@ XMLGradientStyleContext::~XMLGradientStyleContext() { } -void XMLGradientStyleContext::EndElement() +void XMLGradientStyleContext::endFastElement(sal_Int32 ) { uno::Reference< container::XNameContainer > xGradient( GetImport().GetGradientHelper() ); @@ -77,10 +75,9 @@ bool XMLGradientStyleContext::IsTransient() const } -XMLHatchStyleContext::XMLHatchStyleContext( SvXMLImport& rImport, sal_uInt16 nPrfx, - const OUString& rLName, - const uno::Reference< xml::sax::XAttributeList >& xAttrList) -: SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList) +XMLHatchStyleContext::XMLHatchStyleContext( SvXMLImport& rImport, sal_Int32 /*nElement*/, + const uno::Reference< xml::sax::XFastAttributeList >& xAttrList) +: SvXMLStyleContext(rImport) { // start import XMLHatchStyleImport aHatchStyle( GetImport() ); @@ -91,7 +88,7 @@ XMLHatchStyleContext::~XMLHatchStyleContext() { } -void XMLHatchStyleContext::EndElement() +void XMLHatchStyleContext::endFastElement(sal_Int32 ) { uno::Reference< container::XNameContainer > xHatch( GetImport().GetHatchHelper() ); @@ -119,10 +116,9 @@ bool XMLHatchStyleContext::IsTransient() const } -XMLBitmapStyleContext::XMLBitmapStyleContext( SvXMLImport& rImport, sal_uInt16 nPrfx, - const OUString& rLName, - const uno::Reference< xml::sax::XAttributeList >& xAttrList) -: SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList) +XMLBitmapStyleContext::XMLBitmapStyleContext( SvXMLImport& rImport, sal_Int32 /*nElement*/, + const uno::Reference< xml::sax::XFastAttributeList >& xAttrList) +: SvXMLStyleContext(rImport) { // start import XMLImageStyle::importXML( xAttrList, maAny, maStrName, rImport ); @@ -152,7 +148,7 @@ SvXMLImportContextRef XMLBitmapStyleContext::CreateChildContext( sal_uInt16 nPre return pContext; } -void XMLBitmapStyleContext::EndElement() +void XMLBitmapStyleContext::endFastElement(sal_Int32 ) { if (!maAny.has<uno::Reference<graphic::XGraphic>>() && mxBase64Stream.is()) { @@ -196,10 +192,9 @@ bool XMLBitmapStyleContext::IsTransient() const } -XMLTransGradientStyleContext::XMLTransGradientStyleContext( SvXMLImport& rImport, sal_uInt16 nPrfx, - const OUString& rLName, - const uno::Reference< xml::sax::XAttributeList >& xAttrList) -: SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList) +XMLTransGradientStyleContext::XMLTransGradientStyleContext( SvXMLImport& rImport, sal_Int32 /*nElement*/, + const uno::Reference< xml::sax::XFastAttributeList >& xAttrList) +: SvXMLStyleContext(rImport) { // start import XMLTransGradientStyleImport aTransGradientStyle( GetImport() ); @@ -210,7 +205,7 @@ XMLTransGradientStyleContext::~XMLTransGradientStyleContext() { } -void XMLTransGradientStyleContext::EndElement() +void XMLTransGradientStyleContext::endFastElement(sal_Int32 ) { uno::Reference< container::XNameContainer > xTransGradient( GetImport().GetTransGradientHelper() ); @@ -238,10 +233,9 @@ bool XMLTransGradientStyleContext::IsTransient() const } -XMLMarkerStyleContext::XMLMarkerStyleContext( SvXMLImport& rImport, sal_uInt16 nPrfx, - const OUString& rLName, - const uno::Reference< xml::sax::XAttributeList >& xAttrList) -: SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList) +XMLMarkerStyleContext::XMLMarkerStyleContext( SvXMLImport& rImport, sal_Int32 /*nElement*/, + const uno::Reference< xml::sax::XFastAttributeList >& xAttrList) +: SvXMLStyleContext(rImport) { // start import XMLMarkerStyleImport aMarkerStyle( GetImport() ); @@ -252,7 +246,7 @@ XMLMarkerStyleContext::~XMLMarkerStyleContext() { } -void XMLMarkerStyleContext::EndElement() +void XMLMarkerStyleContext::endFastElement(sal_Int32 ) { uno::Reference< container::XNameContainer > xMarker( GetImport().GetMarkerHelper() ); @@ -280,10 +274,9 @@ bool XMLMarkerStyleContext::IsTransient() const } -XMLDashStyleContext::XMLDashStyleContext( SvXMLImport& rImport, sal_uInt16 nPrfx, - const OUString& rLName, - const uno::Reference< xml::sax::XAttributeList >& xAttrList) -: SvXMLStyleContext(rImport, nPrfx, rLName, xAttrList) +XMLDashStyleContext::XMLDashStyleContext( SvXMLImport& rImport, sal_Int32 /*nElement*/, + const uno::Reference< xml::sax::XFastAttributeList >& xAttrList) +: SvXMLStyleContext(rImport) { // start import XMLDashStyleImport aDashStyle( GetImport() ); @@ -294,7 +287,7 @@ XMLDashStyleContext::~XMLDashStyleContext() { } -void XMLDashStyleContext::EndElement() +void XMLDashStyleContext::endFastElement(sal_Int32 ) { uno::Reference< container::XNameContainer > xDashes( GetImport().GetDashHelper() ); diff --git a/xmloff/source/style/FillStyleContext.hxx b/xmloff/source/style/FillStyleContext.hxx index d351f619de68..51e751075be4 100644 --- a/xmloff/source/style/FillStyleContext.hxx +++ b/xmloff/source/style/FillStyleContext.hxx @@ -34,11 +34,13 @@ private: public: - XMLGradientStyleContext( SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList ); + XMLGradientStyleContext( SvXMLImport& rImport, sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ); virtual ~XMLGradientStyleContext() 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 bool IsTransient() const override; }; @@ -53,11 +55,13 @@ private: public: - XMLHatchStyleContext( SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList ); + XMLHatchStyleContext( SvXMLImport& rImport, sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ); virtual ~XMLHatchStyleContext() 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 bool IsTransient() const override; }; @@ -73,8 +77,8 @@ private: public: - XMLBitmapStyleContext( SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList ); + XMLBitmapStyleContext( SvXMLImport& rImport, sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ); virtual ~XMLBitmapStyleContext() override; virtual SvXMLImportContextRef CreateChildContext( @@ -82,7 +86,9 @@ public: const OUString& rLocalName, const css::uno::Reference< css::xml::sax::XAttributeList > & 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 bool IsTransient() const override; }; @@ -97,11 +103,13 @@ private: public: - XMLTransGradientStyleContext( SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList ); + XMLTransGradientStyleContext( SvXMLImport& rImport, sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ); virtual ~XMLTransGradientStyleContext() 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 bool IsTransient() const override; }; @@ -116,11 +124,13 @@ private: public: - XMLMarkerStyleContext( SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList ); + XMLMarkerStyleContext( SvXMLImport& rImport, sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ); virtual ~XMLMarkerStyleContext() 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 bool IsTransient() const override; }; @@ -135,11 +145,13 @@ private: public: - XMLDashStyleContext( SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& rLName, - const css::uno::Reference< css::xml::sax::XAttributeList >& xAttrList ); + XMLDashStyleContext( SvXMLImport& rImport, sal_Int32 nElement, + const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList ); virtual ~XMLDashStyleContext() 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 bool IsTransient() const override; }; diff --git a/xmloff/source/style/GradientStyle.cxx b/xmloff/source/style/GradientStyle.cxx index 4b55f603ed1c..46567e5f8c11 100644 --- a/xmloff/source/style/GradientStyle.cxx +++ b/xmloff/source/style/GradientStyle.cxx @@ -83,26 +83,10 @@ XMLGradientStyleImport::~XMLGradientStyleImport() } void XMLGradientStyleImport::importXML( - const uno::Reference< xml::sax::XAttributeList >& xAttrList, + const uno::Reference< xml::sax::XFastAttributeList >& xAttrList, uno::Any& rValue, OUString& rStrName ) { - static const SvXMLTokenMapEntry aGradientAttrTokenMap[] = - { - { XML_NAMESPACE_DRAW, XML_NAME, XML_TOK_GRADIENT_NAME }, - { XML_NAMESPACE_DRAW, XML_DISPLAY_NAME, XML_TOK_GRADIENT_DISPLAY_NAME }, - { XML_NAMESPACE_DRAW, XML_STYLE, XML_TOK_GRADIENT_STYLE }, - { XML_NAMESPACE_DRAW, XML_CX, XML_TOK_GRADIENT_CX }, - { XML_NAMESPACE_DRAW, XML_CY, XML_TOK_GRADIENT_CY }, - { XML_NAMESPACE_DRAW, XML_START_COLOR, XML_TOK_GRADIENT_STARTCOLOR }, - { XML_NAMESPACE_DRAW, XML_END_COLOR, XML_TOK_GRADIENT_ENDCOLOR }, - { XML_NAMESPACE_DRAW, XML_START_INTENSITY, XML_TOK_GRADIENT_STARTINT }, - { XML_NAMESPACE_DRAW, XML_END_INTENSITY, XML_TOK_GRADIENT_ENDINT }, - { XML_NAMESPACE_DRAW, XML_GRADIENT_ANGLE, XML_TOK_GRADIENT_ANGLE }, - { XML_NAMESPACE_DRAW, XML_BORDER, XML_TOK_GRADIENT_BORDER, }, - XML_TOKEN_MAP_END - }; - OUString aDisplayName; awt::Gradient aGradient; @@ -113,57 +97,50 @@ void XMLGradientStyleImport::importXML( aGradient.Angle = 0; aGradient.Border = 0; - static const SvXMLTokenMap aTokenMap( aGradientAttrTokenMap ); - SvXMLNamespaceMap& rNamespaceMap = rImport.GetNamespaceMap(); - - sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; - for( sal_Int16 i=0; i < nAttrCount; i++ ) + for (auto &aIter : sax_fastparser::castToFastAttributeList( xAttrList )) { - const OUString& rFullAttrName = xAttrList->getNameByIndex( i ); - OUString aStrAttrName; - sal_uInt16 nPrefix = rNamespaceMap.GetKeyByAttrName( rFullAttrName, &aStrAttrName ); - const OUString& rStrValue = xAttrList->getValueByIndex( i ); + const OUString aStrValue = aIter.toString(); sal_Int32 nTmpValue; - switch( aTokenMap.Get( nPrefix, aStrAttrName ) ) + switch( aIter.getToken() ) { - case XML_TOK_GRADIENT_NAME: - rStrName = rStrValue; + case XML_ELEMENT(DRAW, XML_NAME): + rStrName = aStrValue; break; - case XML_TOK_GRADIENT_DISPLAY_NAME: - aDisplayName = rStrValue; + case XML_ELEMENT(DRAW, XML_DISPLAY_NAME): + aDisplayName = aStrValue; break; - case XML_TOK_GRADIENT_STYLE: - SvXMLUnitConverter::convertEnum( aGradient.Style, rStrValue, pXML_GradientStyle_Enum ); + case XML_ELEMENT(DRAW, XML_STYLE): + SvXMLUnitConverter::convertEnum( aGradient.Style, aStrValue, pXML_GradientStyle_Enum ); break; - case XML_TOK_GRADIENT_CX: - ::sax::Converter::convertPercent( nTmpValue, rStrValue ); + case XML_ELEMENT(DRAW, XML_CX): + ::sax::Converter::convertPercent( nTmpValue, aStrValue ); aGradient.XOffset = static_cast< sal_Int16 >( nTmpValue ); break; - case XML_TOK_GRADIENT_CY: - ::sax::Converter::convertPercent( nTmpValue, rStrValue ); + case XML_ELEMENT(DRAW, XML_CY): + ::sax::Converter::convertPercent( nTmpValue, aStrValue ); aGradient.YOffset = static_cast< sal_Int16 >( nTmpValue ); break; - case XML_TOK_GRADIENT_STARTCOLOR: - ::sax::Converter::convertColor(aGradient.StartColor, rStrValue); + case XML_ELEMENT(DRAW, XML_START_COLOR): + ::sax::Converter::convertColor(aGradient.StartColor, aStrValue); break; - case XML_TOK_GRADIENT_ENDCOLOR: - ::sax::Converter::convertColor(aGradient.EndColor, rStrValue); + case XML_ELEMENT(DRAW, XML_END_COLOR): + ::sax::Converter::convertColor(aGradient.EndColor, aStrValue); break; - case XML_TOK_GRADIENT_STARTINT: - ::sax::Converter::convertPercent( nTmpValue, rStrValue ); + case XML_ELEMENT(DRAW, XML_START_INTENSITY): + ::sax::Converter::convertPercent( nTmpValue, aStrValue ); aGradient.StartIntensity = static_cast< sal_Int16 >( nTmpValue ); break; - case XML_TOK_GRADIENT_ENDINT: - ::sax::Converter::convertPercent( nTmpValue, rStrValue ); + case XML_ELEMENT(DRAW, XML_END_INTENSITY): + ::sax::Converter::convertPercent( nTmpValue, aStrValue ); aGradient.EndIntensity = static_cast< sal_Int16 >( nTmpValue ); break; - case XML_TOK_GRADIENT_ANGLE: + case XML_ELEMENT(DRAW, XML_GRADIENT_ANGLE): { auto const cmp12(rImport.GetODFVersion().compareTo(ODFVER_012_TEXT)); bool const bSuccess = - ::sax::Converter::convertAngle(aGradient.Angle, rStrValue, + ::sax::Converter::convertAngle(aGradient.Angle, aStrValue, // tdf#89475 try to detect borked OOo angles (cmp12 < 0) || (cmp12 == 0 && (rImport.isGeneratorVersionOlderThan(SvXMLImport::AOO_4x, SvXMLImport::LO_7x) @@ -172,13 +149,13 @@ void XMLGradientStyleImport::importXML( SAL_INFO_IF(!bSuccess, "xmloff.style", "failed to import draw:angle"); } break; - case XML_TOK_GRADIENT_BORDER: - ::sax::Converter::convertPercent( nTmpValue, rStrValue ); + case XML_ELEMENT(DRAW, XML_BORDER): + ::sax::Converter::convertPercent( nTmpValue, aStrValue ); aGradient.Border = static_cast< sal_Int16 >( nTmpValue ); break; default: - SAL_INFO("xmloff.style", "Unknown token at import gradient style"); + SAL_WARN("xmloff.style", "unknown attribute " << SvXMLImport::getPrefixAndNameFromToken(aIter.getToken()) << "=" << aStrValue); } } diff --git a/xmloff/source/style/HatchStyle.cxx b/xmloff/source/style/HatchStyle.cxx index e4bb36068c00..61a51fbd7c02 100644 --- a/xmloff/source/style/HatchStyle.cxx +++ b/xmloff/source/style/HatchStyle.cxx @@ -74,21 +74,10 @@ XMLHatchStyleImport::~XMLHatchStyleImport() } void XMLHatchStyleImport::importXML( - const uno::Reference< xml::sax::XAttributeList >& xAttrList, + const uno::Reference< xml::sax::XFastAttributeList >& xAttrList, uno::Any& rValue, OUString& rStrName ) { - static const SvXMLTokenMapEntry aHatchAttrTokenMap[] = - { - { XML_NAMESPACE_DRAW, XML_NAME, XML_TOK_HATCH_NAME }, - { XML_NAMESPACE_DRAW, XML_DISPLAY_NAME, XML_TOK_HATCH_DISPLAY_NAME }, - { XML_NAMESPACE_DRAW, XML_STYLE, XML_TOK_HATCH_STYLE }, - { XML_NAMESPACE_DRAW, XML_COLOR, XML_TOK_HATCH_COLOR }, - { XML_NAMESPACE_DRAW, XML_DISTANCE, XML_TOK_HATCH_DISTANCE }, - { XML_NAMESPACE_DRAW, XML_ROTATION, XML_TOK_HATCH_ROTATION }, - XML_TOKEN_MAP_END - }; - OUString aDisplayName; drawing::Hatch aHatch; @@ -97,44 +86,43 @@ void XMLHatchStyleImport::importXML( aHatch.Distance = 0; aHatch.Angle = 0; - static const SvXMLTokenMap aTokenMap( aHatchAttrTokenMap ); - const SvXMLNamespaceMap& rNamespaceMap = rImport.GetNamespaceMap(); SvXMLUnitConverter& rUnitConverter = rImport.GetMM100UnitConverter(); - sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; - for( sal_Int16 i=0; i < nAttrCount; i++ ) + for (auto &aIter : sax_fastparser::castToFastAttributeList( xAttrList )) { - const OUString& rFullAttrName = xAttrList->getNameByIndex( i ); - OUString aStrAttrName; - sal_uInt16 nPrefix = rNamespaceMap.GetKeyByAttrName( rFullAttrName, &aStrAttrName ); - const OUString& rStrValue = xAttrList->getValueByIndex( i ); - - switch( aTokenMap.Get( nPrefix, aStrAttrName ) ) + const OUString aStrValue = aIter.toString(); + switch( aIter.getToken() ) { - case XML_TOK_HATCH_NAME: - rStrName = rStrValue; + case XML_ELEMENT(DRAW, XML_NAME): + case XML_ELEMENT(DRAW_OOO, XML_NAME): + rStrName = aStrValue; break; - case XML_TOK_HATCH_DISPLAY_NAME: - aDisplayName = rStrValue; + case XML_ELEMENT(DRAW, XML_DISPLAY_NAME): + case XML_ELEMENT(DRAW_OOO, XML_DISPLAY_NAME): + aDisplayName = aStrValue; break; - case XML_TOK_HATCH_STYLE: - SvXMLUnitConverter::convertEnum( aHatch.Style, rStrValue, pXML_HatchStyle_Enum ); + case XML_ELEMENT(DRAW, XML_STYLE): + case XML_ELEMENT(DRAW_OOO, XML_STYLE): + SvXMLUnitConverter::convertEnum( aHatch.Style, aStrValue, pXML_HatchStyle_Enum ); break; - case XML_TOK_HATCH_COLOR: - ::sax::Converter::convertColor(aHatch.Color, rStrValue); + case XML_ELEMENT(DRAW, XML_COLOR): + case XML_ELEMENT(DRAW_OOO, XML_COLOR): + ::sax::Converter::convertColor(aHatch.Color, aStrValue); break; - case XML_TOK_HATCH_DISTANCE: - rUnitConverter.convertMeasureToCore(aHatch.Distance, rStrValue); + case XML_ELEMENT(DRAW, XML_DISTANCE): + case XML_ELEMENT(DRAW_OOO, XML_DISTANCE): + rUnitConverter.convertMeasureToCore(aHatch.Distance, aStrValue); break; - case XML_TOK_HATCH_ROTATION: + case XML_ELEMENT(DRAW, XML_ROTATION): + case XML_ELEMENT(DRAW_OOO, XML_ROTATION): { sal_Int32 nValue; - if (::sax::Converter::convertNumber(nValue, rStrValue, 0, 3600)) + if (::sax::Converter::convertNumber(nValue, aStrValue, 0, 3600)) aHatch.Angle = sal_Int16(nValue); break; } default: - SAL_INFO("xmloff.style", "Unknown token at import hatch style"); + SAL_WARN("xmloff.style", "unknown attribute " << SvXMLImport::getPrefixAndNameFromToken(aIter.getToken()) << "=" << aStrValue); } } diff --git a/xmloff/source/style/ImageStyle.cxx b/xmloff/source/style/ImageStyle.cxx index 7acb976fec51..b9be2e5318d0 100644 --- a/xmloff/source/style/ImageStyle.cxx +++ b/xmloff/source/style/ImageStyle.cxx @@ -88,65 +88,48 @@ void XMLImageStyle::exportXML(OUString const & rStrName, uno::Any const & rValue } } -bool XMLImageStyle::importXML(uno::Reference<xml::sax::XAttributeList> const & xAttrList, +bool XMLImageStyle::importXML(uno::Reference<xml::sax::XFastAttributeList> const & xAttrList, uno::Any& rValue, OUString& rStrName, SvXMLImport& rImport) { - static const SvXMLTokenMapEntry aHatchAttrTokenMap[] = - { - { XML_NAMESPACE_DRAW, XML_NAME, XML_TOK_IMAGE_NAME }, - { XML_NAMESPACE_DRAW, XML_DISPLAY_NAME, XML_TOK_IMAGE_DISPLAY_NAME }, - { XML_NAMESPACE_XLINK, XML_HREF, XML_TOK_IMAGE_URL }, - { XML_NAMESPACE_XLINK, XML_TYPE, XML_TOK_IMAGE_TYPE }, - { XML_NAMESPACE_XLINK, XML_SHOW, XML_TOK_IMAGE_SHOW }, - { XML_NAMESPACE_XLINK, XML_ACTUATE, XML_TOK_IMAGE_ACTUATE }, - XML_TOKEN_MAP_END - }; - bool bHasHRef = false; bool bHasName = false; OUString aDisplayName; uno::Reference<graphic::XGraphic> xGraphic; - static const SvXMLTokenMap aTokenMap( aHatchAttrTokenMap ); - - sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; - for( sal_Int16 i=0; i < nAttrCount; i++ ) + for (auto &aIter : sax_fastparser::castToFastAttributeList( xAttrList )) { - const OUString& rFullAttrName = xAttrList->getNameByIndex( i ); - OUString aStrAttrName; - sal_uInt16 nPrefix = rImport.GetNamespaceMap().GetKeyByAttrName( rFullAttrName, &aStrAttrName ); - const OUString& rStrValue = xAttrList->getValueByIndex( i ); + const OUString aStrValue = aIter.toString(); - switch( aTokenMap.Get( nPrefix, aStrAttrName ) ) + switch( aIter.getToken() ) { - case XML_TOK_IMAGE_NAME: + case XML_ELEMENT(DRAW, XML_NAME): { - rStrName = rStrValue; + rStrName = aStrValue; bHasName = true; } break; - case XML_TOK_IMAGE_DISPLAY_NAME: + case XML_ELEMENT(DRAW, XML_DISPLAY_NAME): { - aDisplayName = rStrValue; + aDisplayName = aStrValue; } break; - case XML_TOK_IMAGE_URL: + case XML_ELEMENT(XLINK, XML_HREF): { - xGraphic = rImport.loadGraphicByURL(rStrValue); + xGraphic = rImport.loadGraphicByURL(aStrValue); bHasHRef = true; } break; - case XML_TOK_IMAGE_TYPE: + case XML_ELEMENT(XLINK, XML_TYPE): // ignore break; - case XML_TOK_IMAGE_SHOW: + case XML_ELEMENT(XLINK, XML_SHOW): // ignore break; - case XML_TOK_IMAGE_ACTUATE: + case XML_ELEMENT(XLINK, XML_ACTUATE): // ignore break; default: - SAL_WARN("xmloff.style", "Unknown token at import fill bitmap style"); + SAL_WARN("xmloff.style", "unknown attribute " << SvXMLImport::getPrefixAndNameFromToken(aIter.getToken()) << "=" << aStrValue); } } diff --git a/xmloff/source/style/MarkerStyle.cxx b/xmloff/source/style/MarkerStyle.cxx index e0ec8fdd1d97..ac19851fb3d6 100644 --- a/xmloff/source/style/MarkerStyle.cxx +++ b/xmloff/source/style/MarkerStyle.cxx @@ -26,6 +26,7 @@ #include <xmloff/xmltoken.hxx> #include <xmloff/xmlexp.hxx> #include <xmloff/xmlimp.hxx> +#include <sal/log.hxx> #include <rtl/ustring.hxx> #include <com/sun/star/drawing/PolyPolygonBezierCoords.hpp> #include <basegfx/polygon/b2dpolypolygon.hxx> @@ -48,7 +49,7 @@ XMLMarkerStyleImport::~XMLMarkerStyleImport() } void XMLMarkerStyleImport::importXML( - const uno::Reference< xml::sax::XAttributeList >& xAttrList, + const uno::Reference< xml::sax::XFastAttributeList >& xAttrList, uno::Any& rValue, OUString& rStrName ) { @@ -58,37 +59,32 @@ void XMLMarkerStyleImport::importXML( std::unique_ptr<SdXMLImExViewBox> xViewBox; - SvXMLNamespaceMap& rNamespaceMap = rImport.GetNamespaceMap(); SvXMLUnitConverter& rUnitConverter = rImport.GetMM100UnitConverter(); OUString strPathData; - sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; - for( sal_Int16 i = 0; i < nAttrCount; i++ ) + for (auto &aIter : sax_fastparser::castToFastAttributeList( xAttrList )) { - OUString aStrFullAttrName = xAttrList->getNameByIndex( i ); - OUString aStrAttrName; - rNamespaceMap.GetKeyByAttrName( aStrFullAttrName, &aStrAttrName ); - OUString aStrValue = xAttrList->getValueByIndex( i ); + OUString aStrValue = aIter.toString(); - if( IsXMLToken( aStrAttrName, XML_NAME ) ) + switch (aIter.getToken() & TOKEN_MASK) { - rStrName = aStrValue; - } - else if( IsXMLToken( aStrAttrName, XML_DISPLAY_NAME ) ) - { - aDisplayName = aStrValue; - } - else if( IsXMLToken( aStrAttrName, XML_VIEWBOX ) ) - { - xViewBox.reset(new SdXMLImExViewBox(aStrValue, rUnitConverter)); - bHasViewBox = true; - - } - else if( IsXMLToken( aStrAttrName, XML_D ) ) - { - strPathData = aStrValue; - bHasPathData = true; + case XML_NAME: + rStrName = aStrValue; + break; + case XML_DISPLAY_NAME: + aDisplayName = aStrValue; + break; + case XML_VIEWBOX: + xViewBox.reset(new SdXMLImExViewBox(aStrValue, rUnitConverter)); + bHasViewBox = true; + break; + case XML_D: + strPathData = aStrValue; + bHasPathData = true; + break; + default: + SAL_WARN("xmloff.style", "unknown attribute " << SvXMLImport::getPrefixAndNameFromToken(aIter.getToken()) << "=" << aStrValue); } } diff --git a/xmloff/source/style/TransGradientStyle.cxx b/xmloff/source/style/TransGradientStyle.cxx index 9e95ca5e4edf..811dc2e0ea0b 100644 --- a/xmloff/source/style/TransGradientStyle.cxx +++ b/xmloff/source/style/TransGradientStyle.cxx @@ -80,7 +80,7 @@ XMLTransGradientStyleImport::~XMLTransGradientStyleImport() } void XMLTransGradientStyleImport::importXML( - const uno::Reference< xml::sax::XAttributeList >& xAttrList, + const uno::Reference< xml::sax::XFastAttributeList >& xAttrList, uno::Any& rValue, OUString& rStrName ) { @@ -94,62 +94,41 @@ void XMLTransGradientStyleImport::importXML( aGradient.Angle = 0; aGradient.Border = 0; - static const SvXMLTokenMapEntry aTrGradientAttrTokenMap[] = + for (auto &aIter : sax_fastparser::castToFastAttributeList( xAttrList )) { - { XML_NAMESPACE_DRAW, XML_NAME, XML_TOK_GRADIENT_NAME }, - { XML_NAMESPACE_DRAW, XML_DISPLAY_NAME, XML_TOK_GRADIENT_DISPLAY_NAME }, - { XML_NAMESPACE_DRAW, XML_STYLE, XML_TOK_GRADIENT_STYLE }, - { XML_NAMESPACE_DRAW, XML_CX, XML_TOK_GRADIENT_CX }, - { XML_NAMESPACE_DRAW, XML_CY, XML_TOK_GRADIENT_CY }, - { XML_NAMESPACE_DRAW, XML_START, XML_TOK_GRADIENT_START }, - { XML_NAMESPACE_DRAW, XML_END, XML_TOK_GRADIENT_END }, - { XML_NAMESPACE_DRAW, XML_GRADIENT_ANGLE, XML_TOK_GRADIENT_ANGLE }, - { XML_NAMESPACE_DRAW, XML_BORDER, XML_TOK_GRADIENT_BORDER, }, - XML_TOKEN_MAP_END - }; - - static const SvXMLTokenMap aTokenMap( aTrGradientAttrTokenMap ); - SvXMLNamespaceMap& rNamespaceMap = rImport.GetNamespaceMap(); - - sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; - for( sal_Int16 i=0; i < nAttrCount; i++ ) - { - const OUString& rFullAttrName = xAttrList->getNameByIndex( i ); - OUString aStrAttrName; - sal_uInt16 nPrefix = rNamespaceMap.GetKeyByAttrName( rFullAttrName, &aStrAttrName ); - const OUString& rStrValue = xAttrList->getValueByIndex( i ); + const OUString aStrValue = aIter.toString(); sal_Int32 nTmpValue; - switch( aTokenMap.Get( nPrefix, aStrAttrName ) ) + switch( aIter.getToken() ) { - case XML_TOK_GRADIENT_NAME: + case XML_ELEMENT(DRAW, XML_NAME): { - rStrName = rStrValue; + rStrName = aStrValue; } break; - case XML_TOK_GRADIENT_DISPLAY_NAME: + case XML_ELEMENT(DRAW, XML_DISPLAY_NAME): { - aDisplayName = rStrValue; + aDisplayName = aStrValue; } break; - case XML_TOK_GRADIENT_STYLE: + case XML_ELEMENT(DRAW, XML_STYLE): { - SvXMLUnitConverter::convertEnum( aGradient.Style, rStrValue, pXML_GradientStyle_Enum ); + SvXMLUnitConverter::convertEnum( aGradient.Style, aStrValue, pXML_GradientStyle_Enum ); } break; - case XML_TOK_GRADIENT_CX: - ::sax::Converter::convertPercent( nTmpValue, rStrValue ); + case XML_ELEMENT(DRAW, XML_CX): + ::sax::Converter::convertPercent( nTmpValue, aStrValue ); aGradient.XOffset = sal::static_int_cast< sal_Int16 >(nTmpValue); break; - case XML_TOK_GRADIENT_CY: - ::sax::Converter::convertPercent( nTmpValue, rStrValue ); + case XML_ELEMENT(DRAW, XML_CY): + ::sax::Converter::convertPercent( nTmpValue, aStrValue ); aGradient.YOffset = sal::static_int_cast< sal_Int16 >(nTmpValue); break; - case XML_TOK_GRADIENT_START: + case XML_ELEMENT(DRAW, XML_START): { sal_Int32 aStartTransparency; - ::sax::Converter::convertPercent( aStartTransparency, rStrValue ); + ::sax::Converter::convertPercent( aStartTransparency, aStrValue ); sal_uInt8 n = sal::static_int_cast< sal_uInt8 >( ( (100 - aStartTransparency) * 255 ) / 100 ); @@ -158,10 +137,10 @@ void XMLTransGradientStyleImport::importXML( aGradient.StartColor = static_cast<sal_Int32>( aColor ); } break; - case XML_TOK_GRADIENT_END: + case XML_ELEMENT(DRAW, XML_END): { sal_Int32 aEndTransparency; - ::sax::Converter::convertPercent( aEndTransparency, rStrValue ); + ::sax::Converter::convertPercent( aEndTransparency, aStrValue ); sal_uInt8 n = sal::static_int_cast< sal_uInt8 >( ( (100 - aEndTransparency) * 255 ) / 100 ); @@ -170,11 +149,11 @@ void XMLTransGradientStyleImport::importXML( aGradient.EndColor = static_cast<sal_Int32>( aColor ); } break; - case XML_TOK_GRADIENT_ANGLE: + case XML_ELEMENT(DRAW, XML_GRADIENT_ANGLE): { auto const cmp12(rImport.GetODFVersion().compareTo(ODFVER_012_TEXT)); bool const bSuccess = - ::sax::Converter::convertAngle(aGradient.Angle, rStrValue, + ::sax::Converter::convertAngle(aGradient.Angle, aStrValue, // tdf#89475 try to detect borked OOo angles (cmp12 < 0) || (cmp12 == 0 && (rImport.isGeneratorVersionOlderThan(SvXMLImport::AOO_4x, SvXMLImport::LO_7x) @@ -183,13 +162,13 @@ void XMLTransGradientStyleImport::importXML( SAL_INFO_IF(!bSuccess, "xmloff.style", "failed to import draw:angle"); } break; - case XML_TOK_GRADIENT_BORDER: - ::sax::Converter::convertPercent( nTmpValue, rStrValue ); + case XML_ELEMENT(DRAW, XML_BORDER): + ::sax::Converter::convertPercent( nTmpValue, aStrValue ); aGradient.Border = sal::static_int_cast< sal_Int16 >(nTmpValue); break; default: - SAL_INFO("xmloff.style", "Unknown token at import transparency gradient style"); + SAL_WARN("xmloff.style", "unknown attribute " << SvXMLImport::getPrefixAndNameFromToken(aIter.getToken()) << "=" << aStrValue); } } diff --git a/xmloff/source/style/xmlstyle.cxx b/xmloff/source/style/xmlstyle.cxx index a4e3d158ccea..6c4fc1856c0a 100644 --- a/xmloff/source/style/xmlstyle.cxx +++ b/xmloff/source/style/xmlstyle.cxx @@ -429,6 +429,38 @@ SvXMLStyleContext *SvXMLStylesContext::CreateStyleChildContext( GetImport(), nElement, xAttrList); break; + // FillStyles + + case XML_ELEMENT(DRAW, XML_GRADIENT): + { + pStyle = new XMLGradientStyleContext( GetImport(), nElement, xAttrList ); + break; + } + case XML_ELEMENT(DRAW, XML_HATCH): + { + pStyle = new XMLHatchStyleContext( GetImport(), nElement, xAttrList ); + break; + } + case XML_ELEMENT(DRAW, XML_FILL_IMAGE): + { + pStyle = new XMLBitmapStyleContext( GetImport(), nElement, xAttrList ); + break; + } + case XML_ELEMENT(DRAW, XML_OPACITY): + { + pStyle = new XMLTransGradientStyleContext( GetImport(), nElement, xAttrList ); + break; + } + case XML_ELEMENT(DRAW, XML_MARKER): + { + pStyle = new XMLMarkerStyleContext( GetImport(), nElement, xAttrList ); + break; + } + case XML_ELEMENT(DRAW, XML_STROKE_DASH): + { + pStyle = new XMLDashStyleContext( GetImport(), nElement, xAttrList ); + break; + } } return pStyle; @@ -492,38 +524,6 @@ SvXMLStyleContext *SvXMLStylesContext::CreateStyleChildContext( sal_uInt16 p_nPr break; - // FillStyles - - case XML_TOK_STYLES_GRADIENTSTYLES: - { - pStyle = new XMLGradientStyleContext( GetImport(), p_nPrefix, rLocalName, xAttrList ); - break; - } - case XML_TOK_STYLES_HATCHSTYLES: - { - pStyle = new XMLHatchStyleContext( GetImport(), p_nPrefix, rLocalName, xAttrList ); - break; - } - case XML_TOK_STYLES_BITMAPSTYLES: - { - pStyle = new XMLBitmapStyleContext( GetImport(), p_nPrefix, rLocalName, xAttrList ); - break; - } - case XML_TOK_STYLES_TRANSGRADIENTSTYLES: - { - pStyle = new XMLTransGradientStyleContext( GetImport(), p_nPrefix, rLocalName, xAttrList ); - break; - } - case XML_TOK_STYLES_MARKERSTYLES: - { - pStyle = new XMLMarkerStyleContext( GetImport(), p_nPrefix, rLocalName, xAttrList ); - break; - } - case XML_TOK_STYLES_DASHSTYLES: - { - pStyle = new XMLDashStyleContext( GetImport(), p_nPrefix, rLocalName, xAttrList ); - break; - } } } |