include/oox/export/vmlexport.hxx | 2 include/sax/fastattribs.hxx | 21 - include/sax/fshelper.hxx | 4 oox/source/export/vmlexport.cxx | 6 sax/qa/cppunit/attributes.cxx | 14 sax/source/fastparser/fastparser.cxx | 57 +-- sax/source/tools/fastattribs.cxx | 41 -- sax/source/tools/fastserializer.cxx | 4 sax/source/tools/fastserializer.hxx | 2 sw/source/filter/ww8/docxattributeoutput.cxx | 505 ++++++++++----------------- sw/source/filter/ww8/docxattributeoutput.hxx | 27 - sw/source/filter/ww8/docxsdrexport.cxx | 45 +- sw/source/filter/ww8/docxtableexport.cxx | 45 +- 13 files changed, 319 insertions(+), 454 deletions(-)
New commits: commit d856be879e0b94b36c8f87817de74189a8a04121 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Thu Apr 6 07:29:56 2023 +0300 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Thu Apr 6 23:02:16 2023 +0200 Use more *string_view Change-Id: Ic82bbb1b8d6b03066e66f5eb93e9a94b16b1a9f2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150072 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/include/oox/export/vmlexport.hxx b/include/oox/export/vmlexport.hxx index fb53ec099f7a..f6b9869dae7a 100644 --- a/include/oox/export/vmlexport.hxx +++ b/include/oox/export/vmlexport.hxx @@ -158,7 +158,7 @@ protected: /// /// This should be called from within StartShape() to ensure that the /// added attribute is preserved. - void AddShapeAttribute( sal_Int32 nAttribute, const OString& sValue ); + void AddShapeAttribute(sal_Int32 nAttribute, std::string_view sValue); using EscherEx::StartShape; using EscherEx::EndShape; diff --git a/include/sax/fastattribs.hxx b/include/sax/fastattribs.hxx index 2dc7c3d72420..61eb048e881a 100644 --- a/include/sax/fastattribs.hxx +++ b/include/sax/fastattribs.hxx @@ -62,14 +62,13 @@ class SAX_DLLPUBLIC FastTokenHandlerBase : /** * Client method to attempt the use of this interface if possible. * @xTokenHandler - the token lookup interface - * @pStr - string buffer to lookup - * @nLength - optional length of chars in that buffer + * @str - string buffer to lookup * - * @return Tokenized form of pStr + * @return Tokenized form of str */ static sal_Int32 getTokenFromChars( const FastTokenHandlerBase *pTokenHandler, - const char *pStr, size_t nLength ); + std::string_view str ); }; @@ -88,11 +87,17 @@ public: } void add( const FastAttributeList& ); void add( const css::uno::Reference<css::xml::sax::XFastAttributeList>& ); - void add( sal_Int32 nToken, const char* pValue ); - void add( sal_Int32 nToken, const char* pValue, size_t nValueLength ); - void add( sal_Int32 nToken, const OString& rValue ); + void add( sal_Int32 nToken, std::string_view value ); void add( sal_Int32 nToken, std::u16string_view sValue ); // Converts to UTF-8 - void addNS( sal_Int32 nNamespaceToken, sal_Int32 nToken, const OString& rValue ); + template <typename C, typename T1, typename T2> + void add( sal_Int32 nToken, rtl::StringConcat<C, T1, T2>&& value) { add(nToken, Concat2View(value)); } + template <typename Val, typename... Rest, std::enable_if_t<(sizeof...(Rest) > 0), int> = 0> + void add( sal_Int32 nToken, Val&& val, Rest&&... rest ) + { + add(nToken, std::forward<Val>(val)); + add(std::forward<Rest>(rest)...); + } + void addNS( sal_Int32 nNamespaceToken, sal_Int32 nToken, std::string_view sValue ); void addNS( sal_Int32 nNamespaceToken, sal_Int32 nToken, std::u16string_view sValue ); // note: rQName is *namespace-prefixed* void addUnknown( const OUString& rNamespaceURL, const OString& rQName, const OString& value ); diff --git a/include/sax/fshelper.hxx b/include/sax/fshelper.hxx index 338260861132..74e2ed4e3254 100644 --- a/include/sax/fshelper.hxx +++ b/include/sax/fshelper.hxx @@ -126,12 +126,8 @@ public: { endElement( FSNS( namespaceTokenId, elementTokenId ) ); } void singleElement(sal_Int32 elementTokenId, const rtl::Reference<FastAttributeList>& xAttrList); - void singleElementNS(sal_Int32 namespaceTokenId, sal_Int32 elementTokenId, rtl::Reference<FastAttributeList> const & xAttrList) - { singleElement(FSNS( namespaceTokenId, elementTokenId), xAttrList); } void startElement(sal_Int32 elementTokenId, const rtl::Reference<FastAttributeList>& xAttrList); - void startElementNS(sal_Int32 namespaceTokenId, sal_Int32 elementTokenId, rtl::Reference<FastAttributeList> const & xAttrList) - { startElement( FSNS( namespaceTokenId, elementTokenId ), xAttrList ); } FastSerializerHelper* write(const char* value); FastSerializerHelper* write(const OString& value); diff --git a/oox/source/export/vmlexport.cxx b/oox/source/export/vmlexport.cxx index 7cbfe1f14bfa..38d3b9feacd1 100644 --- a/oox/source/export/vmlexport.cxx +++ b/oox/source/export/vmlexport.cxx @@ -158,7 +158,7 @@ sal_uInt32 VMLExport::EnterGroup( const OUString& rShapeName, const tools::Recta AddRectangleDimensions( aStyle, *pRect, rbAbsolutePos ); if ( !aStyle.isEmpty() ) - pAttrList->add( XML_style, aStyle.makeStringAndClear() ); + pAttrList->add( XML_style, aStyle ); // coordorigin/coordsize if ( pRect && ( mnGroupLevel == 1 ) ) @@ -335,7 +335,7 @@ static void impl_AddInt( sax_fastparser::FastAttributeList *pAttrList, sal_Int32 if ( !pAttrList ) return; - pAttrList->add( nElement, OString::number( nValue ).getStr() ); + pAttrList->add( nElement, OString::number( nValue ) ); } static sal_uInt16 impl_GetUInt16( const sal_uInt8* &pVal ) @@ -1188,7 +1188,7 @@ void VMLExport::AddRectangleDimensions( OStringBuffer& rBuffer, const tools::Rec AddFlipXY(); } -void VMLExport::AddShapeAttribute( sal_Int32 nAttribute, const OString& rValue ) +void VMLExport::AddShapeAttribute( sal_Int32 nAttribute, std::string_view rValue ) { m_pShapeAttrList->add( nAttribute, rValue ); } diff --git a/sax/qa/cppunit/attributes.cxx b/sax/qa/cppunit/attributes.cxx index 6c71e9aa182a..5b45876e3e96 100644 --- a/sax/qa/cppunit/attributes.cxx +++ b/sax/qa/cppunit/attributes.cxx @@ -35,7 +35,9 @@ void AttributesTest::test() { rtl::Reference<sax_fastparser::FastAttributeList> xAttributeList( new sax_fastparser::FastAttributeList(nullptr) ); xAttributeList->add(1, "1"); - xAttributeList->add(2, OString("2")); + xAttributeList->add(2, OString::Concat("2")); + xAttributeList->add(3, u"3"); + xAttributeList->add(4, OUString::Concat("4")); // We can't test getValueToken() and getOptionalValueToken() // without XFastTokenHandler :-( @@ -44,20 +46,22 @@ void AttributesTest::test() // xAttributeList->getValueToken(2); CPPUNIT_ASSERT( xAttributeList->hasAttribute(1) ); - CPPUNIT_ASSERT( !xAttributeList->hasAttribute(3) ); + CPPUNIT_ASSERT( !xAttributeList->hasAttribute(5) ); CPPUNIT_ASSERT_EQUAL( OUString("2"), xAttributeList->getOptionalValue(2) ); - CPPUNIT_ASSERT_EQUAL( OUString(), xAttributeList->getOptionalValue(3) ); + CPPUNIT_ASSERT_EQUAL( OUString("3"), xAttributeList->getOptionalValue(3) ); + CPPUNIT_ASSERT_EQUAL( OUString("4"), xAttributeList->getOptionalValue(4) ); + CPPUNIT_ASSERT_EQUAL( OUString(), xAttributeList->getOptionalValue(5) ); CPPUNIT_ASSERT_EQUAL( OUString("1"), xAttributeList->getValue(1) ); - CPPUNIT_ASSERT_THROW( xAttributeList->getValue(3), xml::sax::SAXException ); + CPPUNIT_ASSERT_THROW( xAttributeList->getValue(5), xml::sax::SAXException ); xAttributeList->addUnknown("a", "a"); xAttributeList->addUnknown("b", "b", "b"); xAttributeList->addUnknown("c", "c"); CPPUNIT_ASSERT_EQUAL( sal_Int32(3), xAttributeList->getUnknownAttributes().getLength() ); - CPPUNIT_ASSERT_EQUAL( sal_Int32(2), xAttributeList->getFastAttributes().getLength() ); + CPPUNIT_ASSERT_EQUAL( sal_Int32(4), xAttributeList->getFastAttributes().getLength() ); xAttributeList->clear(); CPPUNIT_ASSERT( !xAttributeList->hasAttribute(1) ); diff --git a/sax/source/fastparser/fastparser.cxx b/sax/source/fastparser/fastparser.cxx index 06e2fb1e3e92..344dda9cd63e 100644 --- a/sax/source/fastparser/fastparser.cxx +++ b/sax/source/fastparser/fastparser.cxx @@ -278,13 +278,13 @@ private: void sendPendingCharacters(); void addUnknownElementWithPrefix(const xmlChar **attributes, int i, rtl::Reference< FastAttributeList > const & xAttributes); - sal_Int32 GetToken( const xmlChar* pName, sal_Int32 nameLen ); + sal_Int32 GetToken( const xmlChar* pName ); /// @throws css::xml::sax::SAXException - sal_Int32 GetTokenWithPrefix( const xmlChar* pPrefix, int prefixLen, const xmlChar* pName, int nameLen ); + sal_Int32 GetTokenWithPrefix( const xmlChar* pPrefix, const xmlChar* pName ); /// @throws css::xml::sax::SAXException OUString const & GetNamespaceURL( std::string_view rPrefix ); sal_Int32 GetNamespaceToken( const OUString& rNamespaceURL ); - sal_Int32 GetTokenWithContextNamespace( sal_Int32 nNamespaceToken, const xmlChar* pName, int nNameLen ); + sal_Int32 GetTokenWithContextNamespace( sal_Int32 nNamespaceToken, const xmlChar* pName ); void DefineNamespace( const OString& rPrefix, const OUString& namespaceURL ); private: @@ -693,43 +693,30 @@ void FastSaxParserImpl::DefineNamespace( const OString& rPrefix, const OUString& rEntity.maNamespaceDefines[nOffset] = NamespaceDefine( rPrefix, GetNamespaceToken( namespaceURL ), namespaceURL ); } -sal_Int32 FastSaxParserImpl::GetToken( const xmlChar* pName, sal_Int32 nameLen /* = 0 */ ) +sal_Int32 FastSaxParserImpl::GetToken(const xmlChar* pName) { return FastTokenHandlerBase::getTokenFromChars( getEntity(). mxTokenHandler.get(), - XML_CAST( pName ), nameLen ); // uses utf-8 + XML_CAST( pName ) ); // uses utf-8 } -sal_Int32 FastSaxParserImpl::GetTokenWithPrefix( const xmlChar* pPrefix, int nPrefixLen, const xmlChar* pName, int nNameLen ) +sal_Int32 FastSaxParserImpl::GetTokenWithPrefix( const xmlChar* pPrefix, const xmlChar* pName ) { - sal_Int32 nNamespaceToken = FastToken::DONTKNOW; - Entity& rEntity = getEntity(); if (rEntity.maNamespaceCount.empty()) - return nNamespaceToken; + return FastToken::DONTKNOW; + std::string_view sPrefix(XML_CAST(pPrefix)); sal_uInt32 nNamespace = rEntity.maNamespaceCount.top(); while( nNamespace-- ) { const auto & rNamespaceDefine = rEntity.maNamespaceDefines[nNamespace]; - const OString& rPrefix( rNamespaceDefine.maPrefix ); - if( (rPrefix.getLength() == nPrefixLen) && - rtl_str_reverseCompare_WithLength(rPrefix.pData->buffer, rPrefix.pData->length, XML_CAST( pPrefix ), nPrefixLen ) == 0 ) - { - nNamespaceToken = rNamespaceDefine.mnToken; - break; - } - - if( !nNamespace && !m_bIgnoreMissingNSDecl ) - throw SAXException("No namespace defined for " + OUString(XML_CAST(pPrefix), - nPrefixLen, RTL_TEXTENCODING_UTF8), Reference< XInterface >(), Any()); + if( rNamespaceDefine.maPrefix == sPrefix ) + return GetTokenWithContextNamespace(rNamespaceDefine.mnToken, pName); } - if( nNamespaceToken != FastToken::DONTKNOW ) - { - sal_Int32 nNameToken = GetToken( pName, nNameLen ); - if( nNameToken != FastToken::DONTKNOW ) - return nNamespaceToken | nNameToken; - } + if (!m_bIgnoreMissingNSDecl) + throw SAXException("No namespace defined for " + OStringToOUString(sPrefix, + RTL_TEXTENCODING_UTF8), {}, {}); return FastToken::DONTKNOW; } @@ -758,11 +745,11 @@ OUString const & FastSaxParserImpl::GetNamespaceURL( std::string_view rPrefix ) Reference< XInterface >(), Any()); } -sal_Int32 FastSaxParserImpl::GetTokenWithContextNamespace( sal_Int32 nNamespaceToken, const xmlChar* pName, int nNameLen ) +sal_Int32 FastSaxParserImpl::GetTokenWithContextNamespace( sal_Int32 nNamespaceToken, const xmlChar* pName ) { if( nNamespaceToken != FastToken::DONTKNOW ) { - sal_Int32 nNameToken = GetToken( pName, nNameLen ); + sal_Int32 nNameToken = GetToken( pName ); if( nNameToken != FastToken::DONTKNOW ) return nNamespaceToken | nNameToken; } @@ -1231,17 +1218,17 @@ void FastSaxParserImpl::callbackStartElement(const xmlChar *localName , const xm // attributes[] is ( localname / prefix / nsURI / valueBegin / valueEnd ) if( attributes[ i + 1 ] != nullptr ) { - sal_Int32 nAttributeToken = GetTokenWithPrefix( attributes[ i + 1 ], strlen( XML_CAST( attributes[ i + 1 ] )), attributes[ i ], strlen( XML_CAST( attributes[ i ] ))); + sal_Int32 nAttributeToken = GetTokenWithPrefix(attributes[ i + 1 ], attributes[ i ]); if( nAttributeToken != FastToken::DONTKNOW ) - rEvent.mxAttributes->add( nAttributeToken, XML_CAST( attributes[ i + 3 ] ), attributes[ i + 4 ] - attributes[ i + 3 ] ); + rEvent.mxAttributes->add( nAttributeToken, std::string_view(XML_CAST( attributes[ i + 3 ] ), attributes[ i + 4 ] - attributes[ i + 3 ]) ); else addUnknownElementWithPrefix(attributes, i, rEvent.mxAttributes); } else { - sal_Int32 nAttributeToken = GetToken( attributes[ i ], strlen( XML_CAST( attributes[ i ] ))); + sal_Int32 nAttributeToken = GetToken(attributes[ i ]); if( nAttributeToken != FastToken::DONTKNOW ) - rEvent.mxAttributes->add( nAttributeToken, XML_CAST( attributes[ i + 3 ] ), attributes[ i + 4 ] - attributes[ i + 3 ] ); + rEvent.mxAttributes->add( nAttributeToken, std::string_view(XML_CAST( attributes[ i + 3 ] ), attributes[ i + 4 ] - attributes[ i + 3 ]) ); else { SAL_WARN("xmloff", "unknown attribute " << XML_CAST( attributes[ i ] ) << "=" << @@ -1253,11 +1240,11 @@ void FastSaxParserImpl::callbackStartElement(const xmlChar *localName , const xm } if( prefix != nullptr ) - rEvent.mnElementToken = GetTokenWithPrefix( prefix, strlen( XML_CAST( prefix )), localName, strlen( XML_CAST( localName ))); + rEvent.mnElementToken = GetTokenWithPrefix(prefix, localName); else if( !sNamespace.isEmpty() ) - rEvent.mnElementToken = GetTokenWithContextNamespace( nNamespaceToken, localName, strlen( XML_CAST( localName ))); + rEvent.mnElementToken = GetTokenWithContextNamespace(nNamespaceToken, localName); else - rEvent.mnElementToken = GetToken( localName, strlen( XML_CAST( localName ))); + rEvent.mnElementToken = GetToken(localName); } else { diff --git a/sax/source/tools/fastattribs.cxx b/sax/source/tools/fastattribs.cxx index 27d7e57f8ad5..917e9c8ab048 100644 --- a/sax/source/tools/fastattribs.cxx +++ b/sax/source/tools/fastattribs.cxx @@ -94,14 +94,14 @@ void FastAttributeList::clear() maUnknownAttributes.clear(); } -void FastAttributeList::add( sal_Int32 nToken, const char* pValue, size_t nValueLength ) +void FastAttributeList::add( sal_Int32 nToken, std::string_view value ) { assert(nToken != -1); assert(nToken != 0); - assert(nValueLength < SAL_MAX_INT32); // protect against absurd values + assert(value.length() < SAL_MAX_INT32); // protect against absurd values maAttributeTokens.push_back( nToken ); sal_Int32 nWritePosition = maAttributeValues.back(); - maAttributeValues.push_back( maAttributeValues.back() + nValueLength + 1 ); + maAttributeValues.push_back( maAttributeValues.back() + value.length() + 1 ); if (maAttributeValues.back() > mnChunkLength) { const sal_Int32 newLen = std::max(mnChunkLength * 2, maAttributeValues.back()); @@ -113,18 +113,8 @@ void FastAttributeList::add( sal_Int32 nToken, const char* pValue, size_t nValue mpChunk = p; } - memcpy(mpChunk + nWritePosition, pValue, nValueLength); - mpChunk[nWritePosition + nValueLength] = '\0'; -} - -void FastAttributeList::add( sal_Int32 nToken, const char* pValue ) -{ - add( nToken, pValue, strlen( pValue )); -} - -void FastAttributeList::add( sal_Int32 nToken, const OString& rValue ) -{ - add( nToken, rValue.getStr(), rValue.getLength() ); + memcpy(mpChunk + nWritePosition, value.data(), value.length()); + mpChunk[nWritePosition + value.length()] = '\0'; } void FastAttributeList::add(sal_Int32 nToken, std::u16string_view sValue) @@ -132,7 +122,7 @@ void FastAttributeList::add(sal_Int32 nToken, std::u16string_view sValue) add(nToken, OUStringToOString(sValue, RTL_TEXTENCODING_UTF8)); } -void FastAttributeList::addNS( sal_Int32 nNamespaceToken, sal_Int32 nToken, const OString& rValue ) +void FastAttributeList::addNS( sal_Int32 nNamespaceToken, sal_Int32 nToken, std::string_view rValue ) { sal_Int32 nCombinedToken = (nNamespaceToken << 16) | nToken; add( nCombinedToken, rValue ); @@ -164,7 +154,7 @@ void FastAttributeList::add( const css::uno::Reference<css::xml::sax::XFastAttri void FastAttributeList::add( const FastAttributeList& rOther ) { for (size_t i=0; i < rOther.maAttributeTokens.size(); ++i) - add(rOther.maAttributeTokens[i], rOther.getFastAttributeValue(i), rOther.AttributeValueLength(i)); + add(rOther.maAttributeTokens[i], rOther.getAsViewByIndex(i)); for (const auto & i : rOther.maUnknownAttributes) addUnknown(i.maNamespaceURL, i.maName, i.maValue); } @@ -185,8 +175,7 @@ sal_Int32 FastAttributeList::getValueToken( ::sal_Int32 Token ) if (maAttributeTokens[i] == Token) return FastTokenHandlerBase::getTokenFromChars( mpTokenHandler, - getFastAttributeValue(i), - AttributeValueLength( i ) ); + getAsViewByIndex(i) ); throw SAXException("FastAttributeList::getValueToken: unknown token " + OUString::number(Token), nullptr, Any()); } @@ -197,8 +186,7 @@ sal_Int32 FastAttributeList::getOptionalValueToken( ::sal_Int32 Token, ::sal_Int if (maAttributeTokens[i] == Token) return FastTokenHandlerBase::getTokenFromChars( mpTokenHandler, - getFastAttributeValue(i), - AttributeValueLength( i ) ); + getAsViewByIndex(i) ); return Default; } @@ -293,16 +281,9 @@ FastAttributeList::FastAttributeIter FastAttributeList::find( sal_Int32 nToken ) sal_Int32 FastTokenHandlerBase::getTokenFromChars( const FastTokenHandlerBase *pTokenHandler, - const char *pToken, size_t nLen /* = 0 */ ) + std::string_view token ) { - sal_Int32 nRet; - - if( !nLen ) - nLen = strlen( pToken ); - - nRet = pTokenHandler->getTokenDirect( pToken, static_cast<sal_Int32>(nLen) ); - - return nRet; + return pTokenHandler->getTokenDirect(token.data(), token.size()); } } diff --git a/sax/source/tools/fastserializer.cxx b/sax/source/tools/fastserializer.cxx index b4b9de8fb9c6..9461e784ca4a 100644 --- a/sax/source/tools/fastserializer.cxx +++ b/sax/source/tools/fastserializer.cxx @@ -99,9 +99,9 @@ namespace sax_fastparser { } - void FastSaxSerializer::write( const OString& sOutput, bool bEscape ) + void FastSaxSerializer::write( std::string_view sOutput, bool bEscape ) { - write( sOutput.getStr(), sOutput.getLength(), bEscape ); + write( sOutput.data(), sOutput.length(), bEscape ); } /** Characters not allowed in XML 1.0 diff --git a/sax/source/tools/fastserializer.hxx b/sax/source/tools/fastserializer.hxx index c849e201872b..8d97caf305a4 100644 --- a/sax/source/tools/fastserializer.hxx +++ b/sax/source/tools/fastserializer.hxx @@ -113,7 +113,7 @@ public: void write( double value ); void write( std::u16string_view s, bool bEscape = false ); - void write( const OString& s, bool bEscape = false ); + void write( std::string_view s, bool bEscape = false ); void write( const char* pStr, sal_Int32 nLen, bool bEscape = false ); // strings with _xHHHH_ are escaped with _x005F unless this is disabled diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 2283c398f94f..ce6e28e26407 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -284,6 +284,11 @@ OUString NumberToHexBinary(sal_Int32 n) return aBuf.makeStringAndClear(); } +// Returns a new reference with the previous content of src; src is empty after this +auto detachFrom(rtl::Reference<sax_fastparser::FastAttributeList>& src) +{ + return rtl::Reference(std::move(src)); +} } void DocxAttributeOutput::RTLAndCJKState( bool bIsRTL, sal_uInt16 /*nScript*/ ) @@ -298,28 +303,6 @@ static bool lcl_isOnelinerSdt(std::u16string_view rName) return rName == u"Title" || rName == u"Subtitle" || rName == u"Company"; } -void DocxAttributeOutput::AddToAttrList(rtl::Reference<sax_fastparser::FastAttributeList>& pAttrList, sal_Int32 nAttrs, ...) -{ - if (!pAttrList.is()) - pAttrList = FastSerializerHelper::createAttrList(); - - va_list args; - va_start(args, nAttrs); - for (sal_Int32 i = 0; i < nAttrs; i++) - { - sal_Int32 nName = va_arg(args, sal_Int32); - const char* pValue = va_arg(args, const char*); - if (pValue) - pAttrList->add(nName, pValue); - } - va_end(args); -} - -void DocxAttributeOutput::AddToAttrList(rtl::Reference<sax_fastparser::FastAttributeList>& pAttrList, sal_Int32 nAttrName, const char* sAttrValue) -{ - AddToAttrList(pAttrList, 1, nAttrName, sAttrValue); -} - // write a floating table directly to docx without the surrounding frame void DocxAttributeOutput::WriteFloatingTable(ww8::Frame const* pParentFrame) { @@ -636,8 +619,7 @@ void SdtBlockHelper::WriteSdtBlock(const ::sax_fastparser::FSHelperPtr& pSeriali pSerializer->startElement(m_nSdtPrToken); else { - rtl::Reference<FastAttributeList> xAttrList = std::move(m_pTokenAttributes); - pSerializer->startElement(m_nSdtPrToken, xAttrList); + pSerializer->startElement(m_nSdtPrToken, detachFrom(m_pTokenAttributes)); } if (m_nSdtPrToken == FSNS(XML_w, XML_date) || m_nSdtPrToken == FSNS(XML_w, XML_docPartObj) || m_nSdtPrToken == FSNS(XML_w, XML_docPartList) || m_nSdtPrToken == FSNS(XML_w14, XML_checkbox)) { @@ -654,8 +636,7 @@ void SdtBlockHelper::WriteSdtBlock(const ::sax_fastparser::FSHelperPtr& pSeriali pSerializer->singleElement(m_nSdtPrToken); else { - rtl::Reference<FastAttributeList> xAttrList = std::move(m_pTokenAttributes); - pSerializer->singleElement(m_nSdtPrToken, xAttrList); + pSerializer->singleElement(m_nSdtPrToken, detachFrom(m_pTokenAttributes)); } } @@ -686,14 +667,12 @@ void SdtBlockHelper::WriteExtraParams(const ::sax_fastparser::FSHelperPtr& pSeri if (m_pDataBindingAttrs.is()) { - rtl::Reference<FastAttributeList> xAttrList = std::move(m_pDataBindingAttrs); - pSerializer->singleElementNS(XML_w, XML_dataBinding, xAttrList); + pSerializer->singleElementNS(XML_w, XML_dataBinding, detachFrom(m_pDataBindingAttrs)); } if (m_pTextAttrs.is()) { - rtl::Reference<FastAttributeList> xAttrList = std::move(m_pTextAttrs); - pSerializer->singleElementNS(XML_w, XML_text, xAttrList); + pSerializer->singleElementNS(XML_w, XML_text, detachFrom(m_pTextAttrs)); } if (!m_aPlaceHolderDocPart.isEmpty()) @@ -746,42 +725,34 @@ void SdtBlockHelper::GetSdtParamsFromGrabBag(const uno::Sequence<beans::Property m_nSdtPrToken = FSNS(XML_w14, XML_checkbox); uno::Sequence<beans::PropertyValue> aGrabBag; aPropertyValue.Value >>= aGrabBag; - for (const auto& rProp : std::as_const(aGrabBag)) + for (const auto& rProp : aGrabBag) { - OUString sValue = rProp.Value.get<OUString>(); if (rProp.Name == "ooxml:CT_SdtCheckbox_checked") DocxAttributeOutput::AddToAttrList(m_pTokenChildren, - FSNS(XML_w14, XML_checked), - OUStringToOString(sValue, RTL_TEXTENCODING_UTF8).getStr()); + FSNS(XML_w14, XML_checked), rProp.Value.get<OUString>()); else if (rProp.Name == "ooxml:CT_SdtCheckbox_checkedState") DocxAttributeOutput::AddToAttrList(m_pTokenChildren, - FSNS(XML_w14, XML_checkedState), - OUStringToOString(sValue, RTL_TEXTENCODING_UTF8).getStr()); + FSNS(XML_w14, XML_checkedState), rProp.Value.get<OUString>()); else if (rProp.Name == "ooxml:CT_SdtCheckbox_uncheckedState") DocxAttributeOutput::AddToAttrList(m_pTokenChildren, - FSNS(XML_w14, XML_uncheckedState), - OUStringToOString(sValue, RTL_TEXTENCODING_UTF8).getStr()); + FSNS(XML_w14, XML_uncheckedState), rProp.Value.get<OUString>()); } } else if (aPropertyValue.Name == "ooxml:CT_SdtPr_dataBinding" && !m_pDataBindingAttrs.is()) { uno::Sequence<beans::PropertyValue> aGrabBag; aPropertyValue.Value >>= aGrabBag; - for (const auto& rProp : std::as_const(aGrabBag)) + for (const auto& rProp : aGrabBag) { - OUString sValue = rProp.Value.get<OUString>(); if (rProp.Name == "ooxml:CT_DataBinding_prefixMappings") DocxAttributeOutput::AddToAttrList( m_pDataBindingAttrs, - FSNS( XML_w, XML_prefixMappings ), - OUStringToOString( sValue, RTL_TEXTENCODING_UTF8 ).getStr() ); + FSNS( XML_w, XML_prefixMappings ), rProp.Value.get<OUString>()); else if (rProp.Name == "ooxml:CT_DataBinding_xpath") DocxAttributeOutput::AddToAttrList( m_pDataBindingAttrs, - FSNS( XML_w, XML_xpath ), - OUStringToOString( sValue, RTL_TEXTENCODING_UTF8 ).getStr() ); + FSNS( XML_w, XML_xpath ), rProp.Value.get<OUString>()); else if (rProp.Name == "ooxml:CT_DataBinding_storeItemID") DocxAttributeOutput::AddToAttrList( m_pDataBindingAttrs, - FSNS( XML_w, XML_storeItemID ), - OUStringToOString( sValue, RTL_TEXTENCODING_UTF8 ).getStr() ); + FSNS( XML_w, XML_storeItemID ), rProp.Value.get<OUString>()); } } else if (aPropertyValue.Name == "ooxml:CT_SdtPr_text") @@ -790,13 +761,11 @@ void SdtBlockHelper::GetSdtParamsFromGrabBag(const uno::Sequence<beans::Property aPropertyValue.Value >>= aGrabBag; if (aGrabBag.hasElements()) { - for (const auto& rProp : std::as_const(aGrabBag)) + for (const auto& rProp : aGrabBag) { - OUString sValue = rProp.Value.get<OUString>(); if (rProp.Name == "ooxml:CT_SdtText_multiLine") DocxAttributeOutput::AddToAttrList(m_pTextAttrs, - FSNS(XML_w, XML_multiLine), - OUStringToOString(sValue, RTL_TEXTENCODING_UTF8).getStr()); + FSNS(XML_w, XML_multiLine), rProp.Value.get<OUString>()); } } else @@ -874,23 +843,21 @@ void SdtBlockHelper::GetSdtParamsFromGrabBag(const uno::Sequence<beans::Property uno::Sequence<beans::PropertyValue> aGrabBag; aPropertyValue.Value >>= aGrabBag; - for (const auto& rProp : std::as_const(aGrabBag)) + for (const auto& rProp : aGrabBag) { - OUString sValue = rProp.Value.get<OUString>(); if (rProp.Name == "ooxml:CT_SdtDocPart_docPartGallery") DocxAttributeOutput::AddToAttrList(m_pTokenChildren, - FSNS(XML_w, XML_docPartGallery), - OUStringToOString(sValue, RTL_TEXTENCODING_UTF8).getStr()); + FSNS(XML_w, XML_docPartGallery), rProp.Value.get<OUString>()); else if (rProp.Name == "ooxml:CT_SdtDocPart_docPartCategory") DocxAttributeOutput::AddToAttrList(m_pTokenChildren, - FSNS(XML_w, XML_docPartCategory), - OUStringToOString(sValue, RTL_TEXTENCODING_UTF8).getStr()); + FSNS(XML_w, XML_docPartCategory), rProp.Value.get<OUString>()); else if (rProp.Name == "ooxml:CT_SdtDocPart_docPartUnique") { + OUString sValue = rProp.Value.get<OUString>(); if (sValue.isEmpty()) sValue = "true"; DocxAttributeOutput::AddToAttrList(m_pTokenChildren, FSNS(XML_w, XML_docPartUnique), - OUStringToOString(sValue, RTL_TEXTENCODING_UTF8).getStr()); + sValue); } } } @@ -1372,28 +1339,23 @@ void DocxAttributeOutput::WriteCollectedParagraphProperties() { if ( m_rExport.SdrExporter().getFlyAttrList().is() ) { - rtl::Reference<FastAttributeList> xAttrList( m_rExport.SdrExporter().getFlyAttrList() ); - m_rExport.SdrExporter().getFlyAttrList().clear(); - - m_pSerializer->singleElementNS( XML_w, XML_framePr, xAttrList ); + m_pSerializer->singleElementNS( XML_w, XML_framePr, + detachFrom(m_rExport.SdrExporter().getFlyAttrList() ) ); } if (m_pLRSpaceAttrList.is()) { - rtl::Reference<FastAttributeList> xAttrList = std::move(m_pLRSpaceAttrList); - m_pSerializer->singleElementNS(XML_w, XML_ind, xAttrList); + m_pSerializer->singleElementNS(XML_w, XML_ind, detachFrom(m_pLRSpaceAttrList)); } if ( m_pParagraphSpacingAttrList.is() ) { - rtl::Reference<FastAttributeList> xAttrList = std::move( m_pParagraphSpacingAttrList ); - m_pSerializer->singleElementNS( XML_w, XML_spacing, xAttrList ); + m_pSerializer->singleElementNS( XML_w, XML_spacing, detachFrom( m_pParagraphSpacingAttrList ) ); } if ( m_pBackgroundAttrList.is() ) { - rtl::Reference<FastAttributeList> xAttrList = std::move( m_pBackgroundAttrList ); - m_pSerializer->singleElementNS( XML_w, XML_shd, xAttrList ); + m_pSerializer->singleElementNS( XML_w, XML_shd, detachFrom( m_pBackgroundAttrList ) ); } } @@ -1486,12 +1448,9 @@ void DocxAttributeOutput::EndParagraphProperties(const SfxItemSet& rParagraphMar // to the DOCX when the function 'WriteCollectedRunProperties' gets called. // So we need to store the current status of these lists, so that we can revert back to them when // we are done exporting the redline attributes. - rtl::Reference<sax_fastparser::FastAttributeList> pFontsAttrList_Original(m_pFontsAttrList); - m_pFontsAttrList.clear(); - rtl::Reference<sax_fastparser::FastAttributeList> pEastAsianLayoutAttrList_Original(m_pEastAsianLayoutAttrList); - m_pEastAsianLayoutAttrList.clear(); - rtl::Reference<sax_fastparser::FastAttributeList> pCharLangAttrList_Original(m_pCharLangAttrList); - m_pCharLangAttrList.clear(); + auto pFontsAttrList_Original(detachFrom(m_pFontsAttrList)); + auto pEastAsianLayoutAttrList_Original(detachFrom(m_pEastAsianLayoutAttrList)); + auto pCharLangAttrList_Original(detachFrom(m_pCharLangAttrList)); lcl_writeParagraphMarkerProperties(*this, rParagraphMarkerProperties); @@ -1499,9 +1458,9 @@ void DocxAttributeOutput::EndParagraphProperties(const SfxItemSet& rParagraphMar WriteCollectedRunProperties(); // Revert back the original values that were stored in 'm_pFontsAttrList', 'm_pEastAsianLayoutAttrList', 'm_pCharLangAttrList' - m_pFontsAttrList = pFontsAttrList_Original.get(); - m_pEastAsianLayoutAttrList = pEastAsianLayoutAttrList_Original.get(); - m_pCharLangAttrList = pCharLangAttrList_Original.get(); + m_pFontsAttrList = std::move(pFontsAttrList_Original); + m_pEastAsianLayoutAttrList = std::move(pEastAsianLayoutAttrList_Original); + m_pCharLangAttrList = std::move(pCharLangAttrList_Original); if ( pRedlineParagraphMarkerDeleted ) { @@ -1765,9 +1724,7 @@ void DocxAttributeOutput::EndRun(const SwTextNode* pNode, sal_Int32 nPos, sal_In } newStartedHyperlink = true; - rtl::Reference<FastAttributeList> xAttrList = std::move( m_pHyperlinkAttrList ); - - m_pSerializer->startElementNS( XML_w, XML_hyperlink, xAttrList ); + m_pSerializer->startElementNS( XML_w, XML_hyperlink, detachFrom( m_pHyperlinkAttrList ) ); m_startedHyperlink = true; m_nHyperLinkCount.top()++; } @@ -1984,7 +1941,7 @@ void DocxAttributeOutput::DoWriteBookmarkTagEnd(sal_Int32 const nId) FSNS(XML_w, XML_id), OString::number(nId)); } -void DocxAttributeOutput::DoWriteMoveRangeTagStart(const OString & bookmarkName, +void DocxAttributeOutput::DoWriteMoveRangeTagStart(std::u16string_view bookmarkName, bool bFrom, const SwRedlineData* pRedlineData) { bool bRemovePersonalInfo = SvtSecurityOptions::IsOptionSet( @@ -2031,7 +1988,7 @@ void DocxAttributeOutput::DoWriteBookmarkStartIfExist(sal_Int32 nRunPos) { DoWriteBookmarkTagStart(aIter->second); m_rOpenedBookmarksIds[aIter->second] = m_nNextBookmarkId; - m_sLastOpenedBookmark = OUStringToOString(BookmarkToWord(aIter->second), RTL_TEXTENCODING_UTF8); + m_sLastOpenedBookmark = BookmarkToWord(aIter->second); m_nNextBookmarkId++; } } @@ -2060,8 +2017,7 @@ void DocxAttributeOutput::DoWriteBookmarksStart(std::vector<OUString>& rStarts, // Output the bookmark (including MoveBookmark of the tracked moving) bool bMove = false; bool bFrom = false; - OString sBookmarkName = OUStringToOString( - BookmarkToWord(bookmarkName, &bMove, &bFrom), RTL_TEXTENCODING_UTF8); + OUString sBookmarkName = BookmarkToWord(bookmarkName, &bMove, &bFrom); if ( bMove ) { // TODO: redline data of MoveBookmark is restored from the first redline of the bookmark @@ -2214,7 +2170,7 @@ void DocxAttributeOutput::DoWriteAnnotationMarks() for ( const auto & rName : m_rAnnotationMarksEnd ) { // Get the id of the annotation mark - std::map< OString, sal_Int32 >::iterator pPos = m_rOpenedAnnotationMarksIds.find( rName ); + auto pPos = m_rOpenedAnnotationMarksIds.find( rName ); if ( pPos != m_rOpenedAnnotationMarksIds.end( ) ) { const sal_Int32 nId = ( *pPos ).second; @@ -2574,7 +2530,7 @@ void DocxAttributeOutput::WriteContentControlEnd() } void DocxAttributeOutput::WriteSdtDropDownStart( - std::u16string_view rName, + OUString const& rName, OUString const& rSelected, uno::Sequence<OUString> const& rListItems) { @@ -2582,7 +2538,7 @@ void DocxAttributeOutput::WriteSdtDropDownStart( m_pSerializer->startElementNS(XML_w, XML_sdtPr); m_pSerializer->singleElementNS(XML_w, XML_alias, - FSNS(XML_w, XML_val), OUStringToOString(rName, RTL_TEXTENCODING_UTF8)); + FSNS(XML_w, XML_val), rName); sal_Int32 nId = comphelper::findValue(rListItems, rSelected); if (nId == -1) @@ -3302,27 +3258,23 @@ void DocxAttributeOutput::WriteCollectedRunProperties() // Write all differed properties if ( m_pFontsAttrList.is() ) { - rtl::Reference<FastAttributeList> xAttrList = std::move( m_pFontsAttrList ); - m_pSerializer->singleElementNS( XML_w, XML_rFonts, xAttrList ); + m_pSerializer->singleElementNS( XML_w, XML_rFonts, detachFrom( m_pFontsAttrList ) ); } if ( m_pColorAttrList.is() ) { - rtl::Reference<FastAttributeList> xAttrList( m_pColorAttrList ); - - m_pSerializer->singleElementNS( XML_w, XML_color, xAttrList ); + m_pSerializer->singleElementNS( XML_w, XML_color, m_pColorAttrList ); } if ( m_pEastAsianLayoutAttrList.is() ) { - rtl::Reference<FastAttributeList> xAttrList = std::move( m_pEastAsianLayoutAttrList ); - m_pSerializer->singleElementNS( XML_w, XML_eastAsianLayout, xAttrList ); + m_pSerializer->singleElementNS( XML_w, XML_eastAsianLayout, + detachFrom(m_pEastAsianLayoutAttrList ) ); } if ( m_pCharLangAttrList.is() ) { - rtl::Reference<FastAttributeList> xAttrList = std::move( m_pCharLangAttrList ); - m_pSerializer->singleElementNS( XML_w, XML_lang, xAttrList ); + m_pSerializer->singleElementNS( XML_w, XML_lang, detachFrom( m_pCharLangAttrList ) ); } if (m_nCharTransparence != 0 && m_pColorAttrList && m_aTextEffectsGrabBag.empty()) @@ -3701,16 +3653,15 @@ bool DocxAttributeOutput::StartURL( const OUString& rUrl, const OUString& rTarge if ( !bBookmarkOnly ) { - OString sId = OUStringToOString( GetExport().GetFilter().addRelation( m_pSerializer->getOutputStream(), + OUString sId = GetExport().GetFilter().addRelation( m_pSerializer->getOutputStream(), oox::getRelationship(Relationship::HYPERLINK), - sUrl, true ), RTL_TEXTENCODING_UTF8 ); + sUrl, true ); m_pHyperlinkAttrList->add(FSNS(XML_r, XML_id), sId); if (!sMark.isEmpty()) { sMark = sMark.replace(' ', '_'); - m_pHyperlinkAttrList->add(FSNS(XML_w, XML_anchor), - OUStringToOString(sMark, RTL_TEXTENCODING_UTF8)); + m_pHyperlinkAttrList->add(FSNS(XML_w, XML_anchor), sMark); } } else @@ -3727,13 +3678,13 @@ bool DocxAttributeOutput::StartURL( const OUString& rUrl, const OUString& rTarge OUString aSequenceName = sMark.copy(0, nPos); // Extract <index>. sal_uInt32 nIndex = o3tl::toUInt32(sMark.subView(nPos + 1, sMark.getLength() - nPos - sizeof("|sequence"))); - std::map<OUString, std::vector<OString> >::iterator it = m_aSeqBookmarksNames.find(aSequenceName); + auto it = m_aSeqBookmarksNames.find(aSequenceName); if (it != m_aSeqBookmarksNames.end()) { - std::vector<OString>& rNames = it->second; + std::vector<OUString>& rNames = it->second; if (rNames.size() > nIndex) // We know the bookmark name for this sequence and this index, do the replacement. - sMark = OStringToOUString(rNames[nIndex], RTL_TEXTENCODING_UTF8); + sMark = rNames[nIndex]; } } } @@ -3747,14 +3698,12 @@ bool DocxAttributeOutput::StartURL( const OUString& rUrl, const OUString& rTarge } // Spaces are prohibited in bookmark name. sMark = sMark.replace(' ', '_'); - m_pHyperlinkAttrList->add( FSNS( XML_w, XML_anchor ), - OUStringToOString( sMark, RTL_TEXTENCODING_UTF8 ) ); + m_pHyperlinkAttrList->add( FSNS( XML_w, XML_anchor ), sMark ); } if ( !rTarget.isEmpty() ) { - OString soTarget = OUStringToOString( rTarget, RTL_TEXTENCODING_UTF8 ); - m_pHyperlinkAttrList->add(FSNS(XML_w, XML_tgtFrame), soTarget); + m_pHyperlinkAttrList->add(FSNS(XML_w, XML_tgtFrame), rTarget); } } @@ -3897,12 +3846,9 @@ void DocxAttributeOutput::Redline( const SwRedlineData* pRedlineData) // to the DOCX when the function 'WriteCollectedParagraphProperties' gets called. // So we need to store the current status of these lists, so that we can revert back to them when // we are done exporting the redline attributes. - rtl::Reference<sax_fastparser::FastAttributeList> pFlyAttrList_Original(m_rExport.SdrExporter().getFlyAttrList()); - m_rExport.SdrExporter().getFlyAttrList().clear(); - rtl::Reference<sax_fastparser::FastAttributeList> pLRSpaceAttrList_Original(m_pLRSpaceAttrList); - m_pLRSpaceAttrList.clear(); - rtl::Reference<sax_fastparser::FastAttributeList> pParagraphSpacingAttrList_Original(m_pParagraphSpacingAttrList); - m_pParagraphSpacingAttrList.clear(); + auto pFlyAttrList_Original(detachFrom(m_rExport.SdrExporter().getFlyAttrList())); + auto pLRSpaceAttrList_Original(detachFrom(m_pLRSpaceAttrList)); + auto pParagraphSpacingAttrList_Original(detachFrom(m_pParagraphSpacingAttrList)); // Output the redline item set if (pChangesSet) @@ -3912,9 +3858,9 @@ void DocxAttributeOutput::Redline( const SwRedlineData* pRedlineData) WriteCollectedParagraphProperties(); // Revert back the original values that were stored in 'm_rExport.SdrExporter().getFlyAttrList()', 'm_pParagraphSpacingAttrList' - m_rExport.SdrExporter().getFlyAttrList() = pFlyAttrList_Original; - m_pLRSpaceAttrList = pLRSpaceAttrList_Original; - m_pParagraphSpacingAttrList = pParagraphSpacingAttrList_Original; + m_rExport.SdrExporter().getFlyAttrList() = std::move(pFlyAttrList_Original); + m_pLRSpaceAttrList = std::move(pLRSpaceAttrList_Original); + m_pParagraphSpacingAttrList = std::move(pParagraphSpacingAttrList_Original); m_pSerializer->endElementNS( XML_w, XML_pPr ); @@ -4115,7 +4061,7 @@ static void impl_borderLine( FSHelperPtr const & pSerializer, sal_Int32 elementT return; rtl::Reference<FastAttributeList> pAttr = FastSerializerHelper::createAttrList(); - pAttr->add( FSNS( XML_w, XML_val ), OString( pVal ) ); + pAttr->add( FSNS( XML_w, XML_val ), pVal ); if ( pBorderLine && !pBorderLine->isEmpty() ) { @@ -4587,13 +4533,12 @@ void DocxAttributeOutput::LatentStyles() for (const auto& rLatentStyle : std::as_const(aLatentStyles)) { if (sal_Int32 nToken = DocxStringGetToken(aDefaultTokens, rLatentStyle.Name)) - pAttributeList->add(FSNS(XML_w, nToken), OUStringToOString(rLatentStyle.Value.get<OUString>(), RTL_TEXTENCODING_UTF8)); + pAttributeList->add(FSNS(XML_w, nToken), rLatentStyle.Value.get<OUString>()); else if (rLatentStyle.Name == "lsdExceptions") rLatentStyle.Value >>= aLsdExceptions; } - m_pSerializer->startElementNS(XML_w, XML_latentStyles, pAttributeList); - pAttributeList = nullptr; + m_pSerializer->startElementNS(XML_w, XML_latentStyles, detachFrom(pAttributeList)); // Then handle the exceptions. for (const auto& rLsdException : std::as_const(aLsdExceptions)) @@ -4604,10 +4549,9 @@ void DocxAttributeOutput::LatentStyles() rLsdException.Value >>= aAttributes; for (const auto& rAttribute : std::as_const(aAttributes)) if (sal_Int32 nToken = DocxStringGetToken(aExceptionTokens, rAttribute.Name)) - pAttributeList->add(FSNS(XML_w, nToken), OUStringToOString(rAttribute.Value.get<OUString>(), RTL_TEXTENCODING_UTF8)); + pAttributeList->add(FSNS(XML_w, nToken), rAttribute.Value.get<OUString>()); - m_pSerializer->singleElementNS(XML_w, XML_lsdException, pAttributeList); - pAttributeList = nullptr; + m_pSerializer->singleElementNS(XML_w, XML_lsdException, detachFrom(pAttributeList)); } m_pSerializer->endElementNS(XML_w, XML_latentStyles); @@ -4905,12 +4849,12 @@ static rtl::Reference<::sax_fastparser::FastAttributeList> CreateDocPrAttrList( std::u16string_view const& rTitle, std::u16string_view const& rDescription) { rtl::Reference<::sax_fastparser::FastAttributeList> const pAttrs(FastSerializerHelper::createAttrList()); - pAttrs->add(XML_id, OString::number(nAnchorId).getStr()); - pAttrs->add(XML_name, OUStringToOString(rName, RTL_TEXTENCODING_UTF8)); + pAttrs->add(XML_id, OString::number(nAnchorId)); + pAttrs->add(XML_name, rName); if (rExport.GetFilter().getVersion() != oox::core::ECMA_376_1ST_EDITION) { - pAttrs->add(XML_descr, OUStringToOString(rDescription, RTL_TEXTENCODING_UTF8)); - pAttrs->add(XML_title, OUStringToOString(rTitle, RTL_TEXTENCODING_UTF8)); + pAttrs->add(XML_descr, rDescription); + pAttrs->add(XML_title, rTitle); } else { // tdf#148952 no title attribute, merge it into descr @@ -4918,8 +4862,8 @@ static rtl::Reference<::sax_fastparser::FastAttributeList> CreateDocPrAttrList( ? OUString(rDescription) : rDescription.empty() ? OUString(rTitle) - : OUString::Concat(rTitle) + OUString::Concat("\n") + OUString::Concat(rDescription)); - pAttrs->add(XML_descr, OUStringToOString(value, RTL_TEXTENCODING_UTF8)); + : OUString::Concat(rTitle) + "\n" + rDescription); + pAttrs->add(XML_descr, value); } return pAttrs; } @@ -5055,7 +4999,6 @@ void DocxAttributeOutput::FlyFrameGraphic( const SwGrfNode* pGrfNode, const Size m_pSerializer->startElementNS(XML_a, XML_ext, // Word uses this "URI" which is obviously not a URI XML_uri, "{C183D7F6-B498-43B3-948B-1728B52AA6E4}"); - rtl::Reference<::sax_fastparser::FastAttributeList> pAttrs(FastSerializerHelper::createAttrList()); m_pSerializer->singleElementNS(XML_adec, XML_decorative, FSNS(XML_xmlns, XML_adec), "http://schemas.microsoft.com/office/drawing/2017/decorative", XML_val, "1"); @@ -5347,7 +5290,7 @@ void DocxAttributeOutput::WritePostponedFormControl(const SdrObject* pObject) bHasDate = true; Date aDate(aUNODate.Day, aUNODate.Month, aUNODate.Year); sDate = DateToOString(aDate); - aContentText = OUString::createFromAscii(DateToDDMMYYYYOString(aDate).getStr()); + aContentText = OUString::createFromAscii(DateToDDMMYYYYOString(aDate)); sDateFormat = "dd/MM/yyyy"; } else @@ -5650,7 +5593,7 @@ void DocxAttributeOutput::WriteOLE( SwOLENode& rNode, const Size& rSize, const S m_pSerializer->singleElementNS(XML_o, XML_OLEObject, XML_Type, "Embed", XML_ProgID, sProgID, - XML_ShapeID, sShapeId.getStr(), + XML_ShapeID, sShapeId, XML_DrawAspect, sDrawAspect, XML_ObjectID, "_" + OString::number(comphelper::rng::uniform_int_distribution(0, std::numeric_limits<int>::max())), FSNS( XML_r, XML_id ), sId ); @@ -5659,7 +5602,7 @@ void DocxAttributeOutput::WriteOLE( SwOLENode& rNode, const Size& rSize, const S } void DocxAttributeOutput::WriteOLEShape(const SwFlyFrameFormat& rFrameFormat, const Size& rSize, - const OString& rShapeId, const OUString& rImageId) + std::string_view rShapeId, const OUString& rImageId) { assert(m_pSerializer); @@ -5669,7 +5612,7 @@ void DocxAttributeOutput::WriteOLEShape(const SwFlyFrameFormat& rFrameFormat, co //export the fixed shape type for picture frame m_pSerializer->write(vml::VMLExport::GetVMLShapeTypeDefinition(rShapeId, true)); - pAttr->add(XML_type, "_x0000_t" + rShapeId); + pAttr->add(XML_type, OString::Concat("_x0000_t") + rShapeId); //Export the style attribute for position and size pAttr->add(XML_style, GetOLEStyle(rFrameFormat, rSize)); @@ -6724,8 +6667,7 @@ void DocxAttributeOutput::EndSection() // Write the section properties if ( m_pSectionSpacingAttrList.is() ) { - rtl::Reference<FastAttributeList> xAttrList = std::move( m_pSectionSpacingAttrList ); - m_pSerializer->singleElementNS( XML_w, XML_pgMar, xAttrList ); + m_pSerializer->singleElementNS( XML_w, XML_pgMar, detachFrom( m_pSectionSpacingAttrList ) ); } // Order the elements @@ -6790,13 +6732,13 @@ void DocxAttributeOutput::WriteLineBreak() void DocxAttributeOutput::SectionLineNumbering( sal_uLong nRestartNo, const SwLineNumberInfo& rLnNumInfo ) { rtl::Reference<FastAttributeList> pAttr = FastSerializerHelper::createAttrList(); - pAttr->add( FSNS( XML_w, XML_countBy ), OString::number(rLnNumInfo.GetCountBy()).getStr()); + pAttr->add( FSNS( XML_w, XML_countBy ), OString::number(rLnNumInfo.GetCountBy())); pAttr->add( FSNS( XML_w, XML_restart ), rLnNumInfo.IsRestartEachPage() ? "newPage" : "continuous" ); if( rLnNumInfo.GetPosFromLeft()) - pAttr->add( FSNS( XML_w, XML_distance ), OString::number(rLnNumInfo.GetPosFromLeft()).getStr()); + pAttr->add( FSNS( XML_w, XML_distance ), OString::number(rLnNumInfo.GetPosFromLeft())); if (nRestartNo > 0) // Writer is 1-based, Word is 0-based. - pAttr->add(FSNS(XML_w, XML_start), OString::number(nRestartNo - 1).getStr()); + pAttr->add(FSNS(XML_w, XML_start), OString::number(nRestartNo - 1)); m_pSerializer->singleElementNS( XML_w, XML_lnNumType, pAttr ); } @@ -7542,7 +7484,7 @@ void DocxAttributeOutput::CharColor( const SvxColorItem& rColor ) return; } - AddToAttrList( m_pColorAttrList, FSNS( XML_w, XML_val ), aColorString.getStr() ); + AddToAttrList( m_pColorAttrList, FSNS( XML_w, XML_val ), aColorString ); m_nCharTransparence = 255 - aColor.GetAlpha(); } @@ -7633,8 +7575,7 @@ void DocxAttributeOutput::CharFont( const SvxFontItem& rFont) { GetExport().GetId( rFont ); // ensure font info is written to fontTable.xml const OUString& sFontName(rFont.GetFamilyName()); - const OString sFontNameUtf8 = OUStringToOString(sFontName, RTL_TEXTENCODING_UTF8); - if (sFontNameUtf8.isEmpty()) + if (sFontName.isEmpty()) return; if (m_pFontsAttrList && @@ -7648,9 +7589,9 @@ void DocxAttributeOutput::CharFont( const SvxFontItem& rFont) return; } - AddToAttrList( m_pFontsAttrList, 2, - FSNS( XML_w, XML_ascii ), sFontNameUtf8.getStr(), - FSNS( XML_w, XML_hAnsi ), sFontNameUtf8.getStr() ); + AddToAttrList( m_pFontsAttrList, + FSNS( XML_w, XML_ascii ), sFontName, + FSNS( XML_w, XML_hAnsi ), sFontName ); } void DocxAttributeOutput::CharFontSize( const SvxFontHeightItem& rFontSize) @@ -7677,20 +7618,18 @@ void DocxAttributeOutput::CharKerning( const SvxKerningItem& rKerning ) void DocxAttributeOutput::CharLanguage( const SvxLanguageItem& rLanguage ) { - OString aLanguageCode( OUStringToOString( - LanguageTag( rLanguage.GetLanguage()).getBcp47MS(), - RTL_TEXTENCODING_UTF8)); + OUString aLanguageCode(LanguageTag( rLanguage.GetLanguage()).getBcp47MS()); switch ( rLanguage.Which() ) { case RES_CHRATR_LANGUAGE: - AddToAttrList( m_pCharLangAttrList, FSNS( XML_w, XML_val ), aLanguageCode.getStr() ); + AddToAttrList( m_pCharLangAttrList, FSNS( XML_w, XML_val ), aLanguageCode ); break; case RES_CHRATR_CJK_LANGUAGE: - AddToAttrList( m_pCharLangAttrList, FSNS( XML_w, XML_eastAsia ), aLanguageCode.getStr() ); + AddToAttrList( m_pCharLangAttrList, FSNS( XML_w, XML_eastAsia ), aLanguageCode ); break; case RES_CHRATR_CTL_LANGUAGE: - AddToAttrList( m_pCharLangAttrList, FSNS( XML_w, XML_bidi ), aLanguageCode.getStr() ); + AddToAttrList( m_pCharLangAttrList, FSNS( XML_w, XML_bidi ), aLanguageCode ); break; } } @@ -7809,9 +7748,7 @@ void DocxAttributeOutput::CharFontCJK( const SvxFontItem& rFont ) return; } - const OUString& sFontName(rFont.GetFamilyName()); - OString sFontNameUtf8 = OUStringToOString(sFontName, RTL_TEXTENCODING_UTF8); - AddToAttrList( m_pFontsAttrList, FSNS( XML_w, XML_eastAsia ), sFontNameUtf8.getStr() ); + AddToAttrList( m_pFontsAttrList, FSNS( XML_w, XML_eastAsia ), rFont.GetFamilyName() ); } void DocxAttributeOutput::CharPostureCJK( const SvxPostureItem& rPosture ) @@ -7840,9 +7777,7 @@ void DocxAttributeOutput::CharFontCTL( const SvxFontItem& rFont ) return; } - const OUString& sFontName(rFont.GetFamilyName()); - OString sFontNameUtf8 = OUStringToOString(sFontName, RTL_TEXTENCODING_UTF8); - AddToAttrList( m_pFontsAttrList, FSNS( XML_w, XML_cs ), sFontNameUtf8.getStr() ); + AddToAttrList( m_pFontsAttrList, FSNS( XML_w, XML_cs ), rFont.GetFamilyName() ); } void DocxAttributeOutput::CharPostureCTL( const SvxPostureItem& rPosture) @@ -7913,7 +7848,7 @@ void DocxAttributeOutput::CharTwoLines( const SvxTwoLinesItem& rTwoLines ) if (!cStart && !cEnd) return; - const char* sBracket; + std::string_view sBracket; if ((cStart == '{') || (cEnd == '}')) sBracket = "curly"; else if ((cStart == '<') || (cEnd == '>')) @@ -8030,9 +7965,8 @@ void DocxAttributeOutput::PostitField( const SwField* pField ) { assert( dynamic_cast< const SwPostItField* >( pField )); const SwPostItField* pPostItField = static_cast<const SwPostItField*>(pField); - OString aName = OUStringToOString(pPostItField->GetName(), RTL_TEXTENCODING_UTF8); sal_Int32 nId = 0; - std::map< OString, sal_Int32 >::iterator it = m_rOpenedAnnotationMarksIds.find(aName); + auto it = m_rOpenedAnnotationMarksIds.find(pPostItField->GetName()); if (it != m_rOpenedAnnotationMarksIds.end()) // If the postit field has an annotation mark associated, we already have an id. nId = it->second; @@ -8050,8 +7984,8 @@ void DocxAttributeOutput::WritePostitFieldReference() // In case this file is inside annotation marks, we want to write the // comment reference after the annotation mark is closed, not here. - OString idname = OUStringToOString(m_postitFields[m_postitFieldsMaxId].first->GetName(), RTL_TEXTENCODING_UTF8); - std::map< OString, sal_Int32 >::iterator it = m_rOpenedAnnotationMarksIds.find( idname ); + const OUString& idname = m_postitFields[m_postitFieldsMaxId].first->GetName(); + auto it = m_rOpenedAnnotationMarksIds.find( idname ); if ( it == m_rOpenedAnnotationMarksIds.end( ) ) m_pSerializer->singleElementNS(XML_w, XML_commentReference, FSNS(XML_w, XML_id), idstr); ++m_postitFieldsMaxId; @@ -8083,7 +8017,6 @@ DocxAttributeOutput::hasProperties DocxAttributeOutput::WritePostitFields() } for (auto& [f, data] : m_postitFields) { - OString idstr = OString::number(data.id); const DateTime aDateTime = f->GetDateTime(); bool bNoDate = bRemovePersonalInfo || ( aDateTime.GetYear() == 1970 && aDateTime.GetMonth() == 1 && aDateTime.GetDay() == 1 ); @@ -8091,7 +8024,7 @@ DocxAttributeOutput::hasProperties DocxAttributeOutput::WritePostitFields() rtl::Reference<sax_fastparser::FastAttributeList> pAttributeList = sax_fastparser::FastSerializerHelper::createAttrList(); - pAttributeList->add(FSNS( XML_w, XML_id ), idstr); + pAttributeList->add(FSNS( XML_w, XML_id ), OString::number(data.id)); pAttributeList->add(FSNS( XML_w, XML_author ), bRemovePersonalInfo ? "Author" + OString::number( GetExport().GetInfoID(f->GetPar1()) ) : f->GetPar1().toUtf8()); @@ -8328,18 +8261,10 @@ void DocxAttributeOutput::WriteFinalBookmarks_Impl( std::vector< OUString >& rSt void DocxAttributeOutput::WriteAnnotationMarks_Impl( std::vector< OUString >& rStarts, std::vector< OUString >& rEnds ) { - for ( const auto & rAnnotationName : rStarts ) - { - OString rName = OUStringToOString(rAnnotationName, RTL_TEXTENCODING_UTF8 ).getStr( ); - m_rAnnotationMarksStart.push_back( rName ); - } + m_rAnnotationMarksStart.insert(m_rAnnotationMarksStart.end(), rStarts.begin(), rStarts.end()); rStarts.clear(); - for ( const auto & rAnnotationName : rEnds ) - { - OString rName = OUStringToOString( rAnnotationName, RTL_TEXTENCODING_UTF8 ).getStr( ); - m_rAnnotationMarksEnd.push_back( rName ); - } + m_rAnnotationMarksEnd.insert(m_rAnnotationMarksEnd.end(), rEnds.begin(), rEnds.end()); rEnds.clear(); } @@ -8536,21 +8461,21 @@ void DocxAttributeOutput::ParaLineSpacing_Impl( short nSpace, short nMulti ) { if ( nSpace < 0 ) { - AddToAttrList( m_pParagraphSpacingAttrList, 2, + AddToAttrList( m_pParagraphSpacingAttrList, FSNS( XML_w, XML_lineRule ), "exact", - FSNS( XML_w, XML_line ), OString::number( -nSpace ).getStr() ); + FSNS( XML_w, XML_line ), OString::number( -nSpace ) ); } else if( nSpace > 0 && nMulti ) { - AddToAttrList( m_pParagraphSpacingAttrList, 2, + AddToAttrList( m_pParagraphSpacingAttrList, FSNS( XML_w, XML_lineRule ), "auto", - FSNS( XML_w, XML_line ), OString::number( nSpace ).getStr() ); + FSNS( XML_w, XML_line ), OString::number( nSpace ) ); } else { - AddToAttrList( m_pParagraphSpacingAttrList, 2, + AddToAttrList( m_pParagraphSpacingAttrList, FSNS( XML_w, XML_lineRule ), "atLeast", - FSNS( XML_w, XML_line ), OString::number( nSpace ).getStr() ); + FSNS( XML_w, XML_line ), OString::number( nSpace ) ); } } @@ -8639,18 +8564,18 @@ static void impl_WriteTabElement( FSHelperPtr const & pSerializer, switch (rTab.GetAdjustment()) { case SvxTabAdjust::Right: - pTabElementAttrList->add( FSNS( XML_w, XML_val ), OString( "right" ) ); + pTabElementAttrList->add( FSNS( XML_w, XML_val ), "right" ); break; case SvxTabAdjust::Decimal: - pTabElementAttrList->add( FSNS( XML_w, XML_val ), OString( "decimal" ) ); + pTabElementAttrList->add( FSNS( XML_w, XML_val ), "decimal" ); break; case SvxTabAdjust::Center: - pTabElementAttrList->add( FSNS( XML_w, XML_val ), OString( "center" ) ); + pTabElementAttrList->add( FSNS( XML_w, XML_val ), "center" ); break; case SvxTabAdjust::Default: case SvxTabAdjust::Left: default: - pTabElementAttrList->add( FSNS( XML_w, XML_val ), OString( "left" ) ); + pTabElementAttrList->add( FSNS( XML_w, XML_val ), "left" ); break; } @@ -8663,15 +8588,15 @@ static void impl_WriteTabElement( FSHelperPtr const & pSerializer, sal_Unicode cFillChar = rTab.GetFill(); if ('.' == cFillChar ) - pTabElementAttrList->add( FSNS( XML_w, XML_leader ), OString( "dot" ) ); + pTabElementAttrList->add( FSNS( XML_w, XML_leader ), "dot" ); else if ( '-' == cFillChar ) - pTabElementAttrList->add( FSNS( XML_w, XML_leader ), OString( "hyphen" ) ); + pTabElementAttrList->add( FSNS( XML_w, XML_leader ), "hyphen" ); else if ( u'\x00B7' == cFillChar ) // middle dot - pTabElementAttrList->add( FSNS( XML_w, XML_leader ), OString( "middleDot" ) ); + pTabElementAttrList->add( FSNS( XML_w, XML_leader ), "middleDot" ); else if ( '_' == cFillChar ) - pTabElementAttrList->add( FSNS( XML_w, XML_leader ), OString( "underscore" ) ); + pTabElementAttrList->add( FSNS( XML_w, XML_leader ), "underscore" ); else - pTabElementAttrList->add( FSNS( XML_w, XML_leader ), OString( "none" ) ); + pTabElementAttrList->add( FSNS( XML_w, XML_leader ), "none" ); pSerializer->singleElementNS(XML_w, XML_tab, pTabElementAttrList); } @@ -8837,16 +8762,16 @@ void DocxAttributeOutput::FormatFrameSize( const SwFormatFrameSize& rSize ) { if ( rSize.GetWidth() && rSize.GetWidthSizeType() == SwFrameSize::Fixed ) AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), - FSNS( XML_w, XML_w ), OString::number( rSize.GetWidth( ) ).getStr() ); + FSNS( XML_w, XML_w ), OString::number( rSize.GetWidth( ) ) ); if ( rSize.GetHeight() ) { - OString sRule( "exact" ); + std::string_view sRule( "exact" ); if ( rSize.GetHeightSizeType() == SwFrameSize::Minimum ) - sRule = OString( "atLeast" ); - AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), 2, - FSNS( XML_w, XML_hRule ), sRule.getStr(), - FSNS( XML_w, XML_h ), OString::number( rSize.GetHeight( ) ).getStr() ); + sRule = "atLeast"; + AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), + FSNS( XML_w, XML_hRule ), sRule, + FSNS( XML_w, XML_h ), OString::number( rSize.GetHeight( ) ) ); } } else if ( m_rExport.m_bOutPageDescs ) @@ -8872,13 +8797,13 @@ void DocxAttributeOutput::FormatFirstLineIndent(SvxFirstLineIndentItem const& rF sal_Int32 const nFirstLineAdjustment(rFirstLine.GetTextFirstLineOffset()); if (nFirstLineAdjustment > 0) { - AddToAttrList(m_pLRSpaceAttrList, 1, FSNS(XML_w, XML_firstLine), - OString::number(nFirstLineAdjustment).getStr()); + AddToAttrList(m_pLRSpaceAttrList, FSNS(XML_w, XML_firstLine), + OString::number(nFirstLineAdjustment)); } else { - AddToAttrList(m_pLRSpaceAttrList, 1, FSNS(XML_w, XML_hanging), - OString::number(- nFirstLineAdjustment).getStr()); + AddToAttrList(m_pLRSpaceAttrList, FSNS(XML_w, XML_hanging), + OString::number(- nFirstLineAdjustment)); } } @@ -8906,9 +8831,9 @@ void DocxAttributeOutput::FormatTextLeftMargin(SvxTextLeftMarginItem const& rTex } } bool const bEcma1st(m_rExport.GetFilter().getVersion() == oox::core::ECMA_376_1ST_EDITION); - AddToAttrList(m_pLRSpaceAttrList, 1, + AddToAttrList(m_pLRSpaceAttrList, FSNS(XML_w, (bEcma1st ? XML_left : XML_start)), - OString::number(pTextLeftMargin->GetTextLeft()).getStr()); + OString::number(pTextLeftMargin->GetTextLeft())); } void DocxAttributeOutput::FormatRightMargin(SvxRightMarginItem const& rRightMargin) @@ -8919,9 +8844,9 @@ void DocxAttributeOutput::FormatRightMargin(SvxRightMarginItem const& rRightMarg #endif { bool const bEcma1st(m_rExport.GetFilter().getVersion() == oox::core::ECMA_376_1ST_EDITION); - AddToAttrList(m_pLRSpaceAttrList, 1, + AddToAttrList(m_pLRSpaceAttrList, FSNS(XML_w, (bEcma1st ? XML_right : XML_end)), - OString::number(rRightMargin.GetRight()).getStr()); + OString::number(rRightMargin.GetRight())); } } @@ -8940,7 +8865,7 @@ void DocxAttributeOutput::FormatLRSpace( const SvxLRSpaceItem& rLRSpace ) { AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), FSNS( XML_w, XML_hSpace ), OString::number( - ( rLRSpace.GetLeft() + rLRSpace.GetRight() ) / 2 ).getStr() ); + ( rLRSpace.GetLeft() + rLRSpace.GetRight() ) / 2 ) ); } else if ( m_rExport.m_bOutPageDescs ) { @@ -8958,10 +8883,10 @@ void DocxAttributeOutput::FormatLRSpace( const SvxLRSpaceItem& rLRSpace ) m_pageMargins.nRight += sal::static_int_cast<sal_uInt16>(rLRSpace.GetRight()); sal_uInt16 nGutter = rLRSpace.GetGutterMargin(); - AddToAttrList( m_pSectionSpacingAttrList, 3, - FSNS( XML_w, XML_left ), OString::number( m_pageMargins.nLeft ).getStr(), - FSNS( XML_w, XML_right ), OString::number( m_pageMargins.nRight ).getStr(), - FSNS( XML_w, XML_gutter ), OString::number( nGutter ).getStr() ); + AddToAttrList( m_pSectionSpacingAttrList, + FSNS( XML_w, XML_left ), OString::number( m_pageMargins.nLeft ), + FSNS( XML_w, XML_right ), OString::number( m_pageMargins.nRight ), + FSNS( XML_w, XML_gutter ), OString::number( nGutter ) ); } else { @@ -9002,7 +8927,7 @@ void DocxAttributeOutput::FormatULSpace( const SvxULSpaceItem& rULSpace ) { AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), FSNS( XML_w, XML_vSpace ), OString::number( - ( rULSpace.GetLower() + rULSpace.GetUpper() ) / 2 ).getStr() ); + ( rULSpace.GetLower() + rULSpace.GetUpper() ) / 2 ) ); } else if (m_rExport.m_bOutPageDescs ) { @@ -9048,11 +8973,11 @@ void DocxAttributeOutput::FormatULSpace( const SvxULSpaceItem& rULSpace ) // Page Bottom m_pageMargins.nBottom = aDistances.m_DyaBottom; - AddToAttrList( m_pSectionSpacingAttrList, 4, - FSNS( XML_w, XML_header ), OString::number( nHeader ).getStr(), - FSNS( XML_w, XML_top ), OString::number( m_pageMargins.nTop ).getStr(), - FSNS( XML_w, XML_footer ), OString::number( nFooter ).getStr(), - FSNS( XML_w, XML_bottom ), OString::number( m_pageMargins.nBottom ).getStr() ); + AddToAttrList( m_pSectionSpacingAttrList, + FSNS( XML_w, XML_header ), OString::number( nHeader ), + FSNS( XML_w, XML_top ), OString::number( m_pageMargins.nTop ), + FSNS( XML_w, XML_footer ), OString::number( nFooter ), + FSNS( XML_w, XML_bottom ), OString::number( m_pageMargins.nBottom ) ); } else { @@ -9067,14 +8992,13 @@ void DocxAttributeOutput::FormatULSpace( const SvxULSpaceItem& rULSpace ) else if (m_bParaBeforeAutoSpacing && m_nParaBeforeSpacing == -1) { AddToAttrList( m_pParagraphSpacingAttrList, - FSNS( XML_w, XML_beforeAutospacing ), "0" ); - AddToAttrList( m_pParagraphSpacingAttrList, - FSNS( XML_w, XML_before ), OString::number( rULSpace.GetUpper() ).getStr() ); + FSNS( XML_w, XML_beforeAutospacing ), "0", + FSNS( XML_w, XML_before ), OString::number( rULSpace.GetUpper() ) ); } else { AddToAttrList( m_pParagraphSpacingAttrList, - FSNS( XML_w, XML_before ), OString::number( rULSpace.GetUpper() ).getStr() ); + FSNS( XML_w, XML_before ), OString::number( rULSpace.GetUpper() ) ); } m_bParaBeforeAutoSpacing = false; // check if after auto spacing was set during import and spacing we get from actual object is same @@ -9087,14 +9011,13 @@ void DocxAttributeOutput::FormatULSpace( const SvxULSpaceItem& rULSpace ) else if (m_bParaAfterAutoSpacing && m_nParaAfterSpacing == -1) { AddToAttrList( m_pParagraphSpacingAttrList, - FSNS( XML_w, XML_afterAutospacing ), "0" ); - AddToAttrList( m_pParagraphSpacingAttrList, - FSNS( XML_w, XML_after ), OString::number( rULSpace.GetLower()).getStr() ); + FSNS( XML_w, XML_afterAutospacing ), "0", + FSNS( XML_w, XML_after ), OString::number( rULSpace.GetLower()) ); } else { AddToAttrList( m_pParagraphSpacingAttrList, - FSNS( XML_w, XML_after ), OString::number( rULSpace.GetLower()).getStr() ); + FSNS( XML_w, XML_after ), OString::number( rULSpace.GetLower()) ); } m_bParaAfterAutoSpacing = false; @@ -9119,9 +9042,8 @@ namespace docx { rtl::Reference<FastAttributeList> SurroundToVMLWrap(SwFormatSurround const& rSurround) { - rtl::Reference<FastAttributeList> pAttrList; - OString sType; - OString sSide; + std::string_view sType; + std::string_view sSide; switch (rSurround.GetSurround()) { case css::text::WrapTextMode_NONE: @@ -9148,18 +9070,11 @@ rtl::Reference<FastAttributeList> SurroundToVMLWrap(SwFormatSurround const& rSur sType = "none"; break; } - if (!sType.isEmpty() || !sSide.isEmpty()) - { - pAttrList = FastSerializerHelper::createAttrList(); - if (!sType.isEmpty()) - { - pAttrList->add(XML_type, sType); - } - if (!sSide.isEmpty()) - { - pAttrList->add(XML_side, sSide); - } - } + rtl::Reference<FastAttributeList> pAttrList; + if (!sType.empty()) + DocxAttributeOutput::AddToAttrList(pAttrList, XML_type, sType); + if (!sSide.empty()) + DocxAttributeOutput::AddToAttrList(pAttrList, XML_side, sSide); return pAttrList; } @@ -9180,7 +9095,7 @@ void DocxAttributeOutput::FormatSurround( const SwFormatSurround& rSurround ) } else if ( m_rExport.m_bOutFlyFrameAttrs ) { - const char* sWrap; + std::string_view sWrap; switch ( rSurround.GetSurround( ) ) { case css::text::WrapTextMode_NONE: @@ -9219,11 +9134,11 @@ void DocxAttributeOutput::FormatVertOrientation( const SwFormatVertOrient& rFlyV else if ( m_rExport.m_bOutFlyFrameAttrs ) { if ( !sAlign.isEmpty() ) - AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), FSNS( XML_w, XML_yAlign ), sAlign.getStr() ); + AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), FSNS( XML_w, XML_yAlign ), sAlign ); else AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), FSNS( XML_w, XML_y ), - OString::number( rFlyVert.GetPos() ).getStr() ); - AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), FSNS( XML_w, XML_vAnchor ), sVAnchor.getStr() ); + OString::number( rFlyVert.GetPos() ) ); + AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), FSNS( XML_w, XML_vAnchor ), sVAnchor ); } } @@ -9245,11 +9160,11 @@ void DocxAttributeOutput::FormatHorizOrientation( const SwFormatHoriOrient& rFly else if ( m_rExport.m_bOutFlyFrameAttrs ) { if ( !sAlign.isEmpty() ) - AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), FSNS( XML_w, XML_xAlign ), sAlign.getStr() ); + AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), FSNS( XML_w, XML_xAlign ), sAlign ); else AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), FSNS( XML_w, XML_x ), - OString::number( rFlyHori.GetPos() ).getStr() ); - AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), FSNS( XML_w, XML_hAnchor ), sHAnchor.getStr() ); + OString::number( rFlyHori.GetPos() ) ); + AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), FSNS( XML_w, XML_hAnchor ), sHAnchor ); } } @@ -9288,13 +9203,11 @@ void DocxAttributeOutput::FormatBackground( const SvxBrushItem& rBrush ) // Calculate opacity value // Consider oox/source/vml/vmlformatting.cxx : decodeColor() function. double fOpacity = static_cast<double>(*oAlpha) * 65535 / ::oox::drawingml::MAX_PERCENT; - OString sOpacity = OString::number(fOpacity) + "f"; - AddToAttrList( m_rExport.SdrExporter().getFlyFillAttrList(), XML_opacity, sOpacity.getStr() ); + AddToAttrList( m_rExport.SdrExporter().getFlyFillAttrList(), XML_opacity, OString::number(fOpacity) + "f" ); } - sColor = "#" + sColor; - AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), XML_fillcolor, sColor.getStr() ); + AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), XML_fillcolor, "#" + sColor ); } else if (m_rExport.SdrExporter().getDMLTextFrameSyntax()) { @@ -9376,7 +9289,7 @@ void DocxAttributeOutput::FormatFillGradient( const XFillGradientItem& rFillGrad nReverseAngle = (270 - nReverseAngle) % 360; if (nReverseAngle != 0) AddToAttrList( m_rExport.SdrExporter().getFlyFillAttrList(), - XML_angle, OString::number( nReverseAngle ).getStr() ); + XML_angle, OString::number( nReverseAngle ) ); OString sColor1 = sStartColor; OString sColor2 = sEndColor; @@ -9399,10 +9312,8 @@ void DocxAttributeOutput::FormatFillGradient( const XFillGradientItem& rFillGrad break; } - sColor1 = "#" + sColor1; - sColor2 = "#" + sColor2; - AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), XML_fillcolor, sColor1.getStr() ); - AddToAttrList( m_rExport.SdrExporter().getFlyFillAttrList(), XML_color2, sColor2.getStr() ); + AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), XML_fillcolor, "#" + sColor1 ); + AddToAttrList( m_rExport.SdrExporter().getFlyFillAttrList(), XML_color2, "#" + sColor2 ); } else if (m_oFillStyle && *m_oFillStyle == drawing::FillStyle_GRADIENT && m_rExport.SdrExporter().getDMLTextFrameSyntax()) { @@ -9465,7 +9376,7 @@ void DocxAttributeOutput::FormatBox( const SvxBoxItem& rBox ) { if (m_rExport.SdrExporter().getTextFrameSyntax()) { - AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), 2, + AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), XML_stroked, "f", XML_strokeweight, "0pt" ); } } @@ -9476,12 +9387,10 @@ void DocxAttributeOutput::FormatBox( const SvxBoxItem& rBox ) if (m_rExport.SdrExporter().getTextFrameSyntax()) { - sColor = "#" + sColor; sal_Int32 nWidth = sal_Int32(fConverted / 20); - OString sWidth = OString::number(nWidth) + "pt"; - AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), 2, - XML_strokecolor, sColor.getStr(), - XML_strokeweight, sWidth.getStr() ); + AddToAttrList( m_rExport.SdrExporter().getFlyAttrList(), + XML_strokecolor, "#" + sColor, + XML_strokeweight, OString::number(nWidth) + "pt" ); if( SvxBorderLineStyle::DASHED == pTop->GetBorderLineStyle() ) // Line Style is Dash type AddToAttrList( m_rExport.SdrExporter().getDashLineStyle(), XML_dashstyle, "dash" ); @@ -9530,7 +9439,7 @@ void DocxAttributeOutput::FormatBox( const SvxBoxItem& rBox ) aInset.insert(0, Concat2View(OString::number(fDistanceLeftInch) + "in")); if (!aInset.isEmpty()) - m_rExport.SdrExporter().getTextboxAttrList()->add(XML_inset, aInset.makeStringAndClear()); + m_rExport.SdrExporter().getTextboxAttrList()->add(XML_inset, aInset); return; } @@ -9578,15 +9487,13 @@ void DocxAttributeOutput::FormatColumns_Impl( sal_uInt16 nCols, const SwFormatCo // Get the columns attributes rtl::Reference<FastAttributeList> pColsAttrList = FastSerializerHelper::createAttrList(); - pColsAttrList->add( FSNS( XML_w, XML_num ), - OString::number( nCols ). getStr( ) ); + pColsAttrList->add( FSNS( XML_w, XML_num ), OString::number( nCols ) ); - const char* pEquals = "false"; + std::string_view pEquals = "false"; if ( bEven ) { sal_uInt16 nWidth = rCol.GetGutterWidth( true ); - pColsAttrList->add( FSNS( XML_w, XML_space ), - OString::number( nWidth ).getStr( ) ); + pColsAttrList->add( FSNS( XML_w, XML_space ), OString::number( nWidth ) ); pEquals = "true"; } @@ -9608,14 +9515,12 @@ void DocxAttributeOutput::FormatColumns_Impl( sal_uInt16 nCols, const SwFormatCo { rtl::Reference<FastAttributeList> pColAttrList = FastSerializerHelper::createAttrList(); sal_uInt16 nWidth = rCol.CalcPrtColWidth( n, o3tl::narrowing<sal_uInt16>(nPageSize) ); - pColAttrList->add( FSNS( XML_w, XML_w ), - OString::number( nWidth ).getStr( ) ); + pColAttrList->add( FSNS( XML_w, XML_w ), OString::number( nWidth ) ); if ( n + 1 != nCols ) { sal_uInt16 nSpacing = rColumns[n].GetRight( ) + rColumns[n + 1].GetLeft( ); - pColAttrList->add( FSNS( XML_w, XML_space ), - OString::number( nSpacing ).getStr( ) ); + pColAttrList->add( FSNS( XML_w, XML_space ), OString::number( nSpacing ) ); } m_pSerializer->singleElementNS( XML_w, XML_col, pColAttrList ); @@ -9635,31 +9540,31 @@ void DocxAttributeOutput::FormatTextGrid( const SwTextGridItem& rGrid ) { rtl::Reference<FastAttributeList> pGridAttrList = FastSerializerHelper::createAttrList(); - OString sGridType; + std::string_view sGridType; switch ( rGrid.GetGridType( ) ) { default: case GRID_NONE: - sGridType = OString( "default" ); + sGridType = "default"; break; case GRID_LINES_ONLY: - sGridType = OString( "lines" ); + sGridType = "lines"; break; case GRID_LINES_CHARS: if ( rGrid.IsSnapToChars( ) ) - sGridType = OString( "snapToChars" ); + sGridType = "snapToChars"; else - sGridType = OString( "linesAndChars" ); + sGridType = "linesAndChars"; break; } pGridAttrList->add(FSNS(XML_w, XML_type), sGridType); sal_uInt16 nHeight = rGrid.GetBaseHeight() + rGrid.GetRubyHeight(); pGridAttrList->add( FSNS( XML_w, XML_linePitch ), - OString::number( nHeight ).getStr( ) ); + OString::number( nHeight ) ); pGridAttrList->add( FSNS( XML_w, XML_charSpace ), - OString::number( GridCharacterPitch( rGrid ) ).getStr( ) ); + OString::number( GridCharacterPitch( rGrid ) ) ); m_pSerializer->singleElementNS( XML_w, XML_docGrid, pGridAttrList ); } @@ -9748,29 +9653,29 @@ void DocxAttributeOutput::ParaGrabBag(const SfxGrabBagItem& rItem) for (const auto& rProp : std::as_const(aGrabBagSeq)) { - OString sVal = OUStringToOString(rProp.Value.get<OUString>(), RTL_TEXTENCODING_UTF8); + OUString sVal = rProp.Value.get<OUString>(); if (sVal.isEmpty()) continue; if (rProp.Name == "val") - AddToAttrList(m_pBackgroundAttrList, FSNS(XML_w, XML_val), sVal.getStr()); + AddToAttrList(m_pBackgroundAttrList, FSNS(XML_w, XML_val), sVal); else if (rProp.Name == "color") - AddToAttrList(m_pBackgroundAttrList, FSNS(XML_w, XML_color), sVal.getStr()); + AddToAttrList(m_pBackgroundAttrList, FSNS(XML_w, XML_color), sVal); else if (rProp.Name == "themeColor") - AddToAttrList(m_pBackgroundAttrList, FSNS(XML_w, XML_themeColor), sVal.getStr()); + AddToAttrList(m_pBackgroundAttrList, FSNS(XML_w, XML_themeColor), sVal); else if (rProp.Name == "themeTint") - AddToAttrList(m_pBackgroundAttrList, FSNS(XML_w, XML_themeTint), sVal.getStr()); + AddToAttrList(m_pBackgroundAttrList, FSNS(XML_w, XML_themeTint), sVal); else if (rProp.Name == "themeShade") - AddToAttrList(m_pBackgroundAttrList, FSNS(XML_w, XML_themeShade), sVal.getStr()); + AddToAttrList(m_pBackgroundAttrList, FSNS(XML_w, XML_themeShade), sVal); else if (rProp.Name == "fill") - AddToAttrList(m_pBackgroundAttrList, FSNS(XML_w, XML_fill), sVal.getStr()); + AddToAttrList(m_pBackgroundAttrList, FSNS(XML_w, XML_fill), sVal); else if (rProp.Name == "themeFill") - AddToAttrList(m_pBackgroundAttrList, FSNS(XML_w, XML_themeFill), sVal.getStr()); + AddToAttrList(m_pBackgroundAttrList, FSNS(XML_w, XML_themeFill), sVal); else if (rProp.Name == "themeFillTint") - AddToAttrList(m_pBackgroundAttrList, FSNS(XML_w, XML_themeFillTint), sVal.getStr()); + AddToAttrList(m_pBackgroundAttrList, FSNS(XML_w, XML_themeFillTint), sVal); else if (rProp.Name == "themeFillShade") - AddToAttrList(m_pBackgroundAttrList, FSNS(XML_w, XML_themeFillShade), sVal.getStr()); + AddToAttrList(m_pBackgroundAttrList, FSNS(XML_w, XML_themeFillShade), sVal); else if (rProp.Name == "originalColor") rProp.Value >>= m_sOriginalBackgroundColor; } @@ -9844,46 +9749,39 @@ void DocxAttributeOutput::CharGrabBag( const SfxGrabBagItem& rItem ) if ( rGrabBagElement.first == "CharThemeNameAscii" && bWriteAsciiTheme ) { rGrabBagElement.second >>= str; - AddToAttrList( m_pFontsAttrList, FSNS( XML_w, XML_asciiTheme ), - OUStringToOString( str, RTL_TEXTENCODING_UTF8 ).getStr() ); + AddToAttrList( m_pFontsAttrList, FSNS( XML_w, XML_asciiTheme ), str ); } else if ( rGrabBagElement.first == "CharThemeNameCs" && bWriteCSTheme ) { rGrabBagElement.second >>= str; - AddToAttrList( m_pFontsAttrList, FSNS( XML_w, XML_cstheme ), - OUStringToOString( str, RTL_TEXTENCODING_UTF8 ).getStr() ); + AddToAttrList( m_pFontsAttrList, FSNS( XML_w, XML_cstheme ), str ); } else if ( rGrabBagElement.first == "CharThemeNameEastAsia" && bWriteEastAsiaTheme ) { rGrabBagElement.second >>= str; - AddToAttrList( m_pFontsAttrList, FSNS( XML_w, XML_eastAsiaTheme ), - OUStringToOString( str, RTL_TEXTENCODING_UTF8 ).getStr() ); + AddToAttrList( m_pFontsAttrList, FSNS( XML_w, XML_eastAsiaTheme ), str ); } else if ( rGrabBagElement.first == "CharThemeNameHAnsi" && bWriteAsciiTheme ) // this is not a mistake: in LibO we don't directly support the hAnsi family // of attributes so we save the same value from ascii attributes instead { rGrabBagElement.second >>= str; - AddToAttrList( m_pFontsAttrList, FSNS( XML_w, XML_hAnsiTheme ), - OUStringToOString( str, RTL_TEXTENCODING_UTF8 ).getStr() ); + AddToAttrList( m_pFontsAttrList, FSNS( XML_w, XML_hAnsiTheme ), str ); } else if ( rGrabBagElement.first == "CharThemeColor" && bWriteThemeFontColor ) { rGrabBagElement.second >>= str; - AddToAttrList( m_pColorAttrList, FSNS( XML_w, XML_themeColor ), - OUStringToOString( str, RTL_TEXTENCODING_UTF8 ).getStr() ); + AddToAttrList( m_pColorAttrList, FSNS( XML_w, XML_themeColor ), str ); } else if ( rGrabBagElement.first == "CharThemeColorShade" ) { rGrabBagElement.second >>= str; - AddToAttrList( m_pColorAttrList, FSNS( XML_w, XML_themeShade ), - OUStringToOString( str, RTL_TEXTENCODING_UTF8 ).getStr() ); + AddToAttrList( m_pColorAttrList, FSNS( XML_w, XML_themeShade ), str ); } else if ( rGrabBagElement.first == "CharThemeColorTint" ) { rGrabBagElement.second >>= str; - AddToAttrList( m_pColorAttrList, FSNS( XML_w, XML_themeTint ), - OUStringToOString( str, RTL_TEXTENCODING_UTF8 ).getStr() ); + AddToAttrList( m_pColorAttrList, FSNS( XML_w, XML_themeTint ), str ); } else if( rGrabBagElement.first == "CharThemeFontNameCs" || rGrabBagElement.first == "CharThemeFontNameAscii" || @@ -10013,18 +9911,17 @@ void DocxAttributeOutput::BulletDefinition(int nId, const Graphic& rGraphic, Siz m_pSerializer->startElementNS(XML_w, XML_numPicBullet, FSNS(XML_w, XML_numPicBulletId), OString::number(nId)); - OStringBuffer aStyle; // Size is in twips, we need it in points. - aStyle.append("width:" + OString::number(double(aSize.Width()) / 20)); - aStyle.append("pt;height:" + OString::number(double(aSize.Height()) / 20) + "pt"); + OString aStyle = "width:" + OString::number(double(aSize.Width()) / 20)+ "pt;" + "height:" + OString::number(double(aSize.Height()) / 20) + "pt"; m_pSerializer->startElementNS(XML_w, XML_pict); m_pSerializer->startElementNS( XML_v, XML_shape, - XML_style, aStyle.getStr(), + XML_style, aStyle, FSNS(XML_o, XML_bullet), "t"); OUString aRelId = m_rDrawingML.WriteImage(rGraphic); m_pSerializer->singleElementNS( XML_v, XML_imagedata, - FSNS(XML_r, XML_id), OUStringToOString(aRelId, RTL_TEXTENCODING_UTF8), + FSNS(XML_r, XML_id), aRelId, FSNS(XML_o, XML_title), ""); m_pSerializer->endElementNS(XML_v, XML_shape); diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx index 16d2ebc65029..1d44240be9e5 100644 --- a/sw/source/filter/ww8/docxattributeoutput.hxx +++ b/sw/source/filter/ww8/docxattributeoutput.hxx @@ -453,7 +453,7 @@ private: void PostponeOLE( SwOLENode& rNode, const Size& rSize, const SwFlyFrameFormat* pFlyFrameFormat ); void WriteOLE( SwOLENode& rNode, const Size& rSize, const SwFlyFrameFormat* rFlyFrameFormat ); void WriteOLEShape(const SwFlyFrameFormat& rFrameFormat, const Size& rSize, - const OString& rShapeId, const OUString& rImageId); + std::string_view rShapeId, const OUString& rImageId); static OString GetOLEStyle(const SwFlyFrameFormat& rFormat, const Size& rSize); void ExportOLESurround(const SwFormatSurround& rWrap); @@ -741,7 +741,7 @@ private: void DoWriteBookmarkTagStart(std::u16string_view bookmarkName); void DoWriteBookmarkTagEnd(sal_Int32 nId); - void DoWriteMoveRangeTagStart(const OString & bookmarkName, + void DoWriteMoveRangeTagStart(std::u16string_view bookmarkName, bool bFrom, const SwRedlineData* pRedlineData); void DoWriteMoveRangeTagEnd(sal_Int32 nId, bool bFrom); void DoWriteBookmarksStart(std::vector<OUString>& rStarts, const SwRedlineData* pRedlineData = nullptr); @@ -768,7 +768,7 @@ private: void WriteFormDateStart(const OUString& sFullDate, const OUString& sDateFormat, const OUString& sLang, const uno::Sequence<beans::PropertyValue>& aGrabBagSdt); void WriteSdtPlainText(const OUString& sValue, const uno::Sequence<beans::PropertyValue>& aGrabBagSdt); - void WriteSdtDropDownStart(std::u16string_view rName, OUString const& rSelected, uno::Sequence<OUString> const& rListItems); + void WriteSdtDropDownStart(const OUString& rName, OUString const& rSelected, uno::Sequence<OUString> const& rListItems); void WriteSdtDropDownEnd(OUString const& rSelected, uno::Sequence<OUString> const& rListItems); void WriteContentControlStart(); void WriteContentControlEnd(); @@ -872,27 +872,27 @@ private: std::vector<OUString> m_rPermissionsEnd; /// Annotation marks to output - std::vector<OString> m_rAnnotationMarksStart; - std::vector<OString> m_rAnnotationMarksEnd; + std::vector<OUString> m_rAnnotationMarksStart; + std::vector<OUString> m_rAnnotationMarksEnd; /// Maps of the bookmarks ids std::map<OUString, sal_Int32> m_rOpenedBookmarksIds; /// Name of the last opened bookmark. - OString m_sLastOpenedBookmark; + OUString m_sLastOpenedBookmark; /// Set of ids of the saved bookmarks (used only for moveRange, yet) std::unordered_set<sal_Int32> m_rSavedBookmarksIds; /// Maps of the annotation marks ids - std::map<OString, sal_Int32> m_rOpenedAnnotationMarksIds; + std::map<OUString, sal_Int32> m_rOpenedAnnotationMarksIds; /// Name of the last opened annotation mark. - OString m_sLastOpenedAnnotationMark; + OUString m_sLastOpenedAnnotationMark; /// If there are bookmarks around sequence fields, this map contains the /// names of these bookmarks for each sequence. - std::map<OUString, std::vector<OString> > m_aSeqBookmarksNames; + std::map<OUString, std::vector<OUString> > m_aSeqBookmarksNames; /// GrabBag for text effects like glow, shadow, ... std::vector<css::beans::PropertyValue> m_aTextEffectsGrabBag; @@ -1111,8 +1111,13 @@ public: static OString convertToOOXMLVertOrientRel(sal_Int16 nOrientRel); static OString convertToOOXMLHoriOrientRel(sal_Int16 nOrientRel); static void ImplCellMargins( sax_fastparser::FSHelperPtr const & pSerializer, const SvxBoxItem& rBox, sal_Int32 tag, bool bUseStartEnd, const SvxBoxItem* pDefaultMargins = nullptr); - static void AddToAttrList(rtl::Reference<sax_fastparser::FastAttributeList>& pAttrList, sal_Int32 nAttrs, ...); - static void AddToAttrList(rtl::Reference<sax_fastparser::FastAttributeList>& pAttrList, sal_Int32 nAttrName, const char* sAttrValue); + template <class... Args> + static void AddToAttrList(rtl::Reference<sax_fastparser::FastAttributeList>& pAttrList, Args&&... args) + { + if (!pAttrList) + pAttrList = sax_fastparser::FastSerializerHelper::createAttrList(); + pAttrList->add(std::forward<Args>(args)...); + } static const sal_Int32 Tag_StartParagraph_1 = 1; static const sal_Int32 Tag_StartParagraph_2 = 2; diff --git a/sw/source/filter/ww8/docxsdrexport.cxx b/sw/source/filter/ww8/docxsdrexport.cxx index 95f7957db5e1..fa6cd25bbb7e 100644 --- a/sw/source/filter/ww8/docxsdrexport.cxx +++ b/sw/source/filter/ww8/docxsdrexport.cxx @@ -853,10 +853,10 @@ void DocxSdrExport::startDMLAnchorInline(const SwFrameFormat* pFrameFormat, cons } attrList->add(XML_behindDoc, bOpaque ? "0" : "1"); - attrList->add(XML_distT, OString::number(TwipsToEMU(nDistT)).getStr()); - attrList->add(XML_distB, OString::number(TwipsToEMU(nDistB)).getStr()); - attrList->add(XML_distL, OString::number(TwipsToEMU(nDistL)).getStr()); - attrList->add(XML_distR, OString::number(TwipsToEMU(nDistR)).getStr()); + attrList->add(XML_distT, OString::number(TwipsToEMU(nDistT))); + attrList->add(XML_distB, OString::number(TwipsToEMU(nDistB))); + attrList->add(XML_distL, OString::number(TwipsToEMU(nDistL))); + attrList->add(XML_distR, OString::number(TwipsToEMU(nDistR))); attrList->add(XML_simplePos, "0"); attrList->add(XML_locked, "0"); @@ -889,8 +889,7 @@ void DocxSdrExport::startDMLAnchorInline(const SwFrameFormat* pFrameFormat, cons { OUString sAnchorId = lclGetAnchorIdFromGrabBag(pObj); if (!sAnchorId.isEmpty()) - attrList->addNS(XML_wp14, XML_anchorId, - OUStringToOString(sAnchorId, RTL_TEXTENCODING_UTF8)); + attrList->addNS(XML_wp14, XML_anchorId, sAnchorId); } m_pImpl->getSerializer()->startElementNS(XML_wp, XML_anchor, attrList); @@ -1097,16 +1096,15 @@ void DocxSdrExport::startDMLAnchorInline(const SwFrameFormat* pFrameFormat, cons // nDist is forced to zero above and ignored by Word anyway, so write 0 directly. rtl::Reference<sax_fastparser::FastAttributeList> aAttrList = sax_fastparser::FastSerializerHelper::createAttrList(); - aAttrList->add(XML_distT, OString::number(0).getStr()); - aAttrList->add(XML_distB, OString::number(0).getStr()); - aAttrList->add(XML_distL, OString::number(0).getStr()); - aAttrList->add(XML_distR, OString::number(0).getStr()); + aAttrList->add(XML_distT, OString::number(0)); + aAttrList->add(XML_distB, OString::number(0)); + aAttrList->add(XML_distL, OString::number(0)); + aAttrList->add(XML_distR, OString::number(0)); if (pObj) { OUString sAnchorId = lclGetAnchorIdFromGrabBag(pObj); if (!sAnchorId.isEmpty()) - aAttrList->addNS(XML_wp14, XML_anchorId, - OUStringToOString(sAnchorId, RTL_TEXTENCODING_UTF8)); + aAttrList->addNS(XML_wp14, XML_anchorId, sAnchorId); } m_pImpl->getSerializer()->startElementNS(XML_wp, XML_inline, aAttrList); } @@ -1392,18 +1390,16 @@ void DocxSdrExport::writeDMLDrawing(const SdrObject* pSdrObject, const SwFrameFo rtl::Reference<sax_fastparser::FastAttributeList> pDocPrAttrList = sax_fastparser::FastSerializerHelper::createAttrList(); - pDocPrAttrList->add(XML_id, OString::number(nAnchorId).getStr()); - pDocPrAttrList->add(XML_name, OUStringToOString(pSdrObject->GetName(), RTL_TEXTENCODING_UTF8)); + pDocPrAttrList->add(XML_id, OString::number(nAnchorId)); + pDocPrAttrList->add(XML_name, pSdrObject->GetName()); if (!pSdrObject->GetTitle().isEmpty()) - pDocPrAttrList->add(XML_title, - OUStringToOString(pSdrObject->GetTitle(), RTL_TEXTENCODING_UTF8)); + pDocPrAttrList->add(XML_title, pSdrObject->GetTitle()); if (!pSdrObject->GetDescription().isEmpty()) - pDocPrAttrList->add(XML_descr, - OUStringToOString(pSdrObject->GetDescription(), RTL_TEXTENCODING_UTF8)); + pDocPrAttrList->add(XML_descr, pSdrObject->GetDescription()); if (!pSdrObject->IsVisible() && pFrameFormat->GetAnchor().GetAnchorId() != RndStdIds::FLY_AS_CHAR) - pDocPrAttrList->add(XML_hidden, OString::number(1).getStr()); + pDocPrAttrList->add(XML_hidden, OString::number(1)); pFS->startElementNS(XML_wp, XML_docPr, pDocPrAttrList); OUString sHyperlink = pSdrObject->getHyperlink(); @@ -1796,9 +1792,8 @@ void DocxSdrExport::writeDMLTextFrame(ww8::Frame const* pParentFrame, int nAncho rtl::Reference<sax_fastparser::FastAttributeList> pDocPrAttrList = sax_fastparser::FastSerializerHelper::createAttrList(); - pDocPrAttrList->add(XML_id, OString::number(nAnchorId).getStr()); - pDocPrAttrList->add(XML_name, - OUStringToOString(rFrameFormat.GetName(), RTL_TEXTENCODING_UTF8)); + pDocPrAttrList->add(XML_id, OString::number(nAnchorId)); + pDocPrAttrList->add(XML_name, rFrameFormat.GetName()); pFS->startElementNS(XML_wp, XML_docPr, pDocPrAttrList); @@ -2094,8 +2089,7 @@ void DocxSdrExport::writeVMLTextFrame(ww8::Frame const* pParentFrame, bool bText { OUString sAnchorId = lclGetAnchorIdFromGrabBag(pObject); if (!sAnchorId.isEmpty()) - m_pImpl->getFlyAttrList()->addNS(XML_w14, XML_anchorId, - OUStringToOString(sAnchorId, RTL_TEXTENCODING_UTF8)); + m_pImpl->getFlyAttrList()->addNS(XML_w14, XML_anchorId, sAnchorId); uno::Reference<drawing::XShape> xShape(const_cast<SdrObject*>(pObject)->getUnoShape(), uno::UNO_QUERY); @@ -2104,8 +2098,7 @@ void DocxSdrExport::writeVMLTextFrame(ww8::Frame const* pParentFrame, bool bText if (xShapeProps.is()) xShapeProps->getPropertyValue("HyperLinkURL") >>= sHyperlink; if (!sHyperlink.isEmpty()) - m_pImpl->getFlyAttrList()->add(XML_href, - OUStringToOString(sHyperlink, RTL_TEXTENCODING_UTF8)); + m_pImpl->getFlyAttrList()->add(XML_href, sHyperlink); } rtl::Reference<FastAttributeList> xFlyAttrList(m_pImpl->getFlyAttrList()); m_pImpl->getFlyAttrList().clear(); diff --git a/sw/source/filter/ww8/docxtableexport.cxx b/sw/source/filter/ww8/docxtableexport.cxx index 2ac6e2db0597..5915caa2a9ab 100644 --- a/sw/source/filter/ww8/docxtableexport.cxx +++ b/sw/source/filter/ww8/docxtableexport.cxx @@ -422,7 +422,6 @@ void DocxAttributeOutput::TableDefinition( { m_pSerializer->singleElementNS(XML_w, XML_tblpPr, attrListTablePos); } - attrListTablePos = nullptr; } else SAL_WARN("sw.ww8", "DocxAttributeOutput::TableDefinition: unhandled property: " @@ -586,33 +585,31 @@ void DocxAttributeOutput::TableBackgrounds( { rtl::Reference<sax_fastparser::FastAttributeList> pAttrList; - for (const auto& rGrabBagElement : rGrabBag) + for (const auto & [ name, val ] : rGrabBag) { - if (!rGrabBagElement.second.has<OUString>()) + if (!val.has<OUString>()) continue; - OString sValue - = OUStringToOString(rGrabBagElement.second.get<OUString>(), RTL_TEXTENCODING_UTF8); - if (rGrabBagElement.first == "themeFill") - AddToAttrList(pAttrList, FSNS(XML_w, XML_themeFill), sValue.getStr()); - else if (rGrabBagElement.first == "themeFillTint") - AddToAttrList(pAttrList, FSNS(XML_w, XML_themeFillTint), sValue.getStr()); - else if (rGrabBagElement.first == "themeFillShade") - AddToAttrList(pAttrList, FSNS(XML_w, XML_themeFillShade), sValue.getStr()); - else if (rGrabBagElement.first == "fill") - AddToAttrList(pAttrList, FSNS(XML_w, XML_fill), sValue.getStr()); - else if (rGrabBagElement.first == "themeColor") - AddToAttrList(pAttrList, FSNS(XML_w, XML_themeColor), sValue.getStr()); - else if (rGrabBagElement.first == "themeTint") - AddToAttrList(pAttrList, FSNS(XML_w, XML_themeTint), sValue.getStr()); - else if (rGrabBagElement.first == "themeShade") - AddToAttrList(pAttrList, FSNS(XML_w, XML_themeShade), sValue.getStr()); - else if (rGrabBagElement.first == "color") - AddToAttrList(pAttrList, FSNS(XML_w, XML_color), sValue.getStr()); - else if (rGrabBagElement.first == "val") - AddToAttrList(pAttrList, FSNS(XML_w, XML_val), sValue.getStr()); + if (name == "themeFill") + AddToAttrList(pAttrList, FSNS(XML_w, XML_themeFill), val.get<OUString>()); + else if (name == "themeFillTint") + AddToAttrList(pAttrList, FSNS(XML_w, XML_themeFillTint), val.get<OUString>()); + else if (name == "themeFillShade") + AddToAttrList(pAttrList, FSNS(XML_w, XML_themeFillShade), val.get<OUString>()); + else if (name == "fill") + AddToAttrList(pAttrList, FSNS(XML_w, XML_fill), val.get<OUString>()); ... etc. - the rest is truncated