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;

Reply via email to