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 38bab24446ca7967f604735a04452b4969758c8c Author: Caolán McNamara <caolan.mcnam...@collabora.com> AuthorDate: Sat Feb 8 19:46:50 2025 +0000 Commit: Caolán McNamara <caolan.mcnam...@collabora.com> CommitDate: Mon Feb 10 12:22:25 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/+/181304 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com> diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index b806e17b4a63..fb1e973c0aae 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -1709,23 +1709,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(u"urn:bails"_ustr, *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(u"urn:bails"_ustr, *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 a2b5897ff195..646ed67a955f 100644 --- a/sw/source/filter/ww8/wrtw8nds.cxx +++ b/sw/source/filter/ww8/wrtw8nds.cxx @@ -2565,7 +2565,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 43f142d24cfc..d13aa46e0b09 100644 --- a/sw/source/filter/ww8/wrtww8.cxx +++ b/sw/source/filter/ww8/wrtww8.cxx @@ -121,6 +121,7 @@ #include <fmtwrapinfluenceonobjpos.hxx> #include <officecfg/Office/Common.hxx> #include <fmtanchr.hxx> +#include <unotxdoc.hxx> using namespace css; using namespace sw::util; @@ -3981,12 +3982,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->GetBaseModel(), u"urn:bails"_ustr); } MSWordExportBase::~MSWordExportBase() diff --git a/sw/source/filter/ww8/wrtww8.hxx b/sw/source/filter/ww8/wrtww8.hxx index 20288160c1af..b9c524bed3d4 100644 --- a/sw/source/filter/ww8/wrtww8.hxx +++ b/sw/source/filter/ww8/wrtww8.hxx @@ -575,6 +575,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;