sw/source/filter/ww8/docxattributeoutput.cxx | 37 ++++++++++++++------------- sw/source/filter/ww8/wrtw8nds.cxx | 2 - sw/source/filter/ww8/wrtww8.cxx | 4 ++ sw/source/filter/ww8/wrtww8.hxx | 1 4 files changed, 26 insertions(+), 18 deletions(-)
New commits: commit 76ac9281c4ea8d56d5777fa095801af33724e7d6 Author: Caolán McNamara <caolan.mcnam...@collabora.com> AuthorDate: Sat Feb 8 19:46:50 2025 +0000 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Tue Feb 11 08:51:30 2025 +0100 check once if there are any urn:bails metadata in the document for the common case that there are none at all, in which case we don't have to check every paragraph for its metadata. Change-Id: I65a59041d1eeb56db6e312c8b130fbd7d519306a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/181320 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Miklos Vajna <vmik...@collabora.com> diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 68e8e4f48489..da96e47b0611 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -1718,23 +1718,26 @@ void DocxAttributeOutput::EndParagraphProperties(const SfxItemSet& rParagraphMar m_pSerializer->endElementNS( XML_w, XML_pPr ); - // RDF metadata for this text node. - SwTextNode* pTextNode = m_rExport.m_pCurPam->GetPointNode().GetTextNode(); - std::map<OUString, OUString> aStatements; - if (pTextNode) - aStatements = SwRDFHelper::getTextNodeStatements("urn:bails", *pTextNode); - if (!aStatements.empty()) - { - m_pSerializer->startElementNS(XML_w, XML_smartTag, - FSNS(XML_w, XML_uri), "http://www.w3.org/1999/02/22-rdf-syntax-ns#", - FSNS(XML_w, XML_element), "RDF"); - m_pSerializer->startElementNS(XML_w, XML_smartTagPr); - for (const auto& rStatement : aStatements) - m_pSerializer->singleElementNS(XML_w, XML_attr, - FSNS(XML_w, XML_name), rStatement.first, - FSNS(XML_w, XML_val), rStatement.second); - m_pSerializer->endElementNS(XML_w, XML_smartTagPr); - m_pSerializer->endElementNS(XML_w, XML_smartTag); + if (m_rExport.m_bHasBailsMetaData) + { + // RDF metadata for this text node. + SwTextNode* pTextNode = m_rExport.m_pCurPam->GetPointNode().GetTextNode(); + std::map<OUString, OUString> aStatements; + if (pTextNode) + aStatements = SwRDFHelper::getTextNodeStatements("urn:bails", *pTextNode); + if (!aStatements.empty()) + { + m_pSerializer->startElementNS(XML_w, XML_smartTag, + FSNS(XML_w, XML_uri), "http://www.w3.org/1999/02/22-rdf-syntax-ns#", + FSNS(XML_w, XML_element), "RDF"); + m_pSerializer->startElementNS(XML_w, XML_smartTagPr); + for (const auto& rStatement : aStatements) + m_pSerializer->singleElementNS(XML_w, XML_attr, + FSNS(XML_w, XML_name), rStatement.first, + FSNS(XML_w, XML_val), rStatement.second); + m_pSerializer->endElementNS(XML_w, XML_smartTagPr); + m_pSerializer->endElementNS(XML_w, XML_smartTag); + } } if ((m_nColBreakStatus == COLBRK_WRITE || m_nColBreakStatus == COLBRK_WRITEANDPOSTPONE) diff --git a/sw/source/filter/ww8/wrtw8nds.cxx b/sw/source/filter/ww8/wrtw8nds.cxx index db93f406c356..d39c07e976e0 100644 --- a/sw/source/filter/ww8/wrtw8nds.cxx +++ b/sw/source/filter/ww8/wrtw8nds.cxx @@ -2540,7 +2540,7 @@ void MSWordExportBase::OutputTextNode( SwTextNode& rNode ) // At the moment smarttags are only written for paragraphs, at the // beginning of the paragraph. - if (nCurrentPos == 0) + if (nCurrentPos == 0 && m_bHasBailsMetaData) AppendSmartTags(rNode); bool bTextAtr = aAttrIter.IsTextAttr( nCurrentPos ); diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx index c13dcca8bd02..e2a7cf4d67d9 100644 --- a/sw/source/filter/ww8/wrtww8.cxx +++ b/sw/source/filter/ww8/wrtww8.cxx @@ -118,6 +118,7 @@ #include <fmtclbl.hxx> #include <iodetect.hxx> #include <fmtwrapinfluenceonobjpos.hxx> +#include <unotxdoc.hxx> using namespace css; using namespace sw::util; @@ -3965,12 +3966,15 @@ MSWordExportBase::MSWordExportBase( SwDoc& rDocument, std::shared_ptr<SwUnoCurso , m_bExportModeRTF(false) , m_bFontSizeWritten(false) , m_bAddFootnoteTab(false) + , m_bHasBailsMetaData(false) , m_rDoc(rDocument) , m_nCurStart(pCurrentPam->GetPoint()->GetNodeIndex()) , m_nCurEnd(pCurrentPam->GetMark()->GetNodeIndex()) , m_pCurPam(pCurrentPam) , m_pOrigPam(pOriginalPam) { + if (SwDocShell* pShell = rDocument.GetDocShell()) + m_bHasBailsMetaData = SwRDFHelper::hasMetadataGraph(pShell->GetXTextDocument(), u"urn:bails"_ustr); } MSWordExportBase::~MSWordExportBase() diff --git a/sw/source/filter/ww8/wrtww8.hxx b/sw/source/filter/ww8/wrtww8.hxx index 2ac5c5cf17dd..a6dff3d7aad3 100644 --- a/sw/source/filter/ww8/wrtww8.hxx +++ b/sw/source/filter/ww8/wrtww8.hxx @@ -573,6 +573,7 @@ public: /// Is font size written already as part of the current character properties? bool m_bFontSizeWritten; bool m_bAddFootnoteTab; // only one aesthetic spacing tab per footnote + bool m_bHasBailsMetaData; // false if there is no urn:bails metadata in the document SwDoc& m_rDoc; SwNodeOffset m_nCurStart, m_nCurEnd;