include/svtools/HtmlWriter.hxx          |    1 +
 svtools/qa/unit/testHtmlWriter.cxx      |    2 +-
 svtools/source/svhtml/HtmlWriter.cxx    |    8 ++------
 sw/source/filter/html/htmlatr.cxx       |    8 ++++----
 sw/source/filter/html/htmlflywriter.cxx |    4 ++--
 sw/source/filter/html/htmlftn.cxx       |    2 +-
 sw/source/filter/html/htmlplug.cxx      |    2 +-
 sw/source/filter/html/htmltabw.cxx      |    2 +-
 sw/source/filter/html/wrthtml.cxx       |   10 ++--------
 sw/source/filter/html/wrthtml.hxx       |    7 ++++---
 10 files changed, 19 insertions(+), 27 deletions(-)

New commits:
commit edaa5c608548ec2878abc5a9dc88f7867a1429a9
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Mon May 12 11:36:05 2025 +0200
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Mon May 12 17:29:57 2025 +0200

    Simplify namespace handling in SwHTMLWriter
    
    Previously, it stored the namespace alone; and added ":" each time
    the value was used, when it was non-empty (either in GetNamespace,
    or when passed to svt's HtmlWriter).
    
    This change only adds the colon once, when maNamespace is set.
    
    Change-Id: Ib16586ebbf99bea7d301d3ac7a870ff4e68ee50b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/185203
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/include/svtools/HtmlWriter.hxx b/include/svtools/HtmlWriter.hxx
index a53b41d0522e..208d309a6b63 100644
--- a/include/svtools/HtmlWriter.hxx
+++ b/include/svtools/HtmlWriter.hxx
@@ -31,6 +31,7 @@ private:
     OString maNamespace;
 
 public:
+    // rNamespace, when non-empty, must include trailing colon
     HtmlWriter(SvStream& rStream, std::string_view rNamespace = 
std::string_view());
     ~HtmlWriter();
 
diff --git a/svtools/qa/unit/testHtmlWriter.cxx 
b/svtools/qa/unit/testHtmlWriter.cxx
index 513978b1f525..5466d4e49f09 100644
--- a/svtools/qa/unit/testHtmlWriter.cxx
+++ b/svtools/qa/unit/testHtmlWriter.cxx
@@ -139,7 +139,7 @@ CPPUNIT_TEST_FIXTURE(Test, testNamespace)
 {
     SvMemoryStream aStream;
 
-    HtmlWriter aHtml(aStream, "reqif-xhtml");
+    HtmlWriter aHtml(aStream, "reqif-xhtml:");
     aHtml.prettyPrint(false);
     aHtml.single("br"_ostr);
 
diff --git a/svtools/source/svhtml/HtmlWriter.cxx 
b/svtools/source/svhtml/HtmlWriter.cxx
index cd73bad074da..984681976fbe 100644
--- a/svtools/source/svhtml/HtmlWriter.cxx
+++ b/svtools/source/svhtml/HtmlWriter.cxx
@@ -15,13 +15,9 @@
 
 HtmlWriter::HtmlWriter(SvStream& rStream, std::string_view rNamespace) :
     mrStream(rStream),
-    mbPrettyPrint(true)
+    mbPrettyPrint(true),
+    maNamespace(rNamespace)
 {
-    if (!rNamespace.empty())
-    {
-        // Convert namespace alias to a prefix.
-        maNamespace = OString::Concat(rNamespace) + ":";
-    }
 }
 
 HtmlWriter::~HtmlWriter()
diff --git a/sw/source/filter/html/htmlatr.cxx 
b/sw/source/filter/html/htmlatr.cxx
index 4e6256172642..3a15d00a8c3a 100644
--- a/sw/source/filter/html/htmlatr.cxx
+++ b/sw/source/filter/html/htmlatr.cxx
@@ -2085,7 +2085,7 @@ SwHTMLWriter& OutHTML_SwTextNode( SwHTMLWriter& rWrt, 
const SwContentNode& rNode
 
         rWrt.SetLFPossible(true);
 
-        HtmlWriter aHtml(rWrt.Strm(), rWrt.maNamespace);
+        HtmlWriter aHtml(rWrt.Strm(), rWrt.GetNamespace());
         aHtml.prettyPrint(rWrt.IsPrettyPrint());
         aHtml.start(OOO_STRING_SVTOOLS_HTML_horzrule ""_ostr);
 
@@ -2539,7 +2539,7 @@ SwHTMLWriter& OutHTML_SwTextNode( SwHTMLWriter& rWrt, 
const SwContentNode& rNode
                     if( 0x0a == c )
                     {
                         HTMLOutFuncs::FlushToAscii( rWrt.Strm() );
-                        HtmlWriter aHtml(rWrt.Strm(), rWrt.maNamespace);
+                        HtmlWriter aHtml(rWrt.Strm(), rWrt.GetNamespace());
                         aHtml.prettyPrint(rWrt.IsPrettyPrint());
                         aHtml.single(OOO_STRING_SVTOOLS_HTML_linebreak 
""_ostr);
                     }
@@ -2618,7 +2618,7 @@ SwHTMLWriter& OutHTML_SwTextNode( SwHTMLWriter& rWrt, 
const SwContentNode& rNode
         }
         else
         {
-            HtmlWriter aHtml(rWrt.Strm(), rWrt.maNamespace);
+            HtmlWriter aHtml(rWrt.Strm(), rWrt.GetNamespace());
             aHtml.prettyPrint(rWrt.IsPrettyPrint());
             aHtml.single(OOO_STRING_SVTOOLS_HTML_linebreak ""_ostr);
             const SvxULSpaceItem& rULSpace = 
pNd->GetSwAttrSet().Get(RES_UL_SPACE);
@@ -2645,7 +2645,7 @@ SwHTMLWriter& OutHTML_SwTextNode( SwHTMLWriter& rWrt, 
const SwContentNode& rNode
             pString = OOO_STRING_SVTOOLS_HTML_AL_right;
         }
 
-        HtmlWriter aHtml(rWrt.Strm(), rWrt.maNamespace);
+        HtmlWriter aHtml(rWrt.Strm(), rWrt.GetNamespace());
         aHtml.prettyPrint(rWrt.IsPrettyPrint());
         aHtml.start(OOO_STRING_SVTOOLS_HTML_linebreak ""_ostr);
         aHtml.attribute(OOO_STRING_SVTOOLS_HTML_O_clear, pString);
diff --git a/sw/source/filter/html/htmlflywriter.cxx 
b/sw/source/filter/html/htmlflywriter.cxx
index 9b8941f7e91e..1b6440ccc7f9 100644
--- a/sw/source/filter/html/htmlflywriter.cxx
+++ b/sw/source/filter/html/htmlflywriter.cxx
@@ -1907,7 +1907,7 @@ static SwHTMLWriter & OutHTML_FrameFormatAsImage( 
SwHTMLWriter& rWrt, const SwFr
 
     OutHTML_ImageOLEStart(rWrt, aGraphic, rFrameFormat);
 
-    HtmlWriter aHtml(rWrt.Strm(), rWrt.maNamespace);
+    HtmlWriter aHtml(rWrt.Strm(), rWrt.GetNamespace());
     OutHTML_ImageStart( aHtml, rWrt, rFrameFormat, GraphicURL, aGraphic, 
rFrameFormat.GetName().toString(), aSz,
                     HtmlFrmOpts::GenImgMask, "frame",
                     aIMap.GetIMapObjectCount() ? &aIMap : nullptr, aMimeType, 
true);
@@ -2055,7 +2055,7 @@ static SwHTMLWriter& OutHTML_FrameFormatGrfNode( 
SwHTMLWriter& rWrt, const SwFra
 
     OutHTML_ImageOLEStart(rWrt, aGraphic, rFrameFormat);
 
-    HtmlWriter aHtml(rWrt.Strm(), rWrt.maNamespace);
+    HtmlWriter aHtml(rWrt.Strm(), rWrt.GetNamespace());
     OutHTML_ImageStart( aHtml, rWrt, rFrameFormat, aGraphicURL, aGraphic, 
pGrfNd->GetTitle(),
                   pGrfNd->GetTwipSize(), nFrameFlags, "graphic", nullptr, 
aMimeType, bOwn );
 
diff --git a/sw/source/filter/html/htmlftn.cxx 
b/sw/source/filter/html/htmlftn.cxx
index caa72fa21e0c..5160914e2ee5 100644
--- a/sw/source/filter/html/htmlftn.cxx
+++ b/sw/source/filter/html/htmlftn.cxx
@@ -249,7 +249,7 @@ SwHTMLWriter& OutHTML_SwFormatLineBreak(SwHTMLWriter& rWrt, 
const SfxPoolItem& r
 {
     const auto& rLineBreak = static_cast<const SwFormatLineBreak&>(rHt);
 
-    HtmlWriter aWriter(rWrt.Strm(), rWrt.maNamespace);
+    HtmlWriter aWriter(rWrt.Strm(), rWrt.GetNamespace());
     aWriter.start(OOO_STRING_SVTOOLS_HTML_linebreak ""_ostr);
     switch (rLineBreak.GetValue())
     {
diff --git a/sw/source/filter/html/htmlplug.cxx 
b/sw/source/filter/html/htmlplug.cxx
index b68b3afd75a9..2ff7fbbc5945 100644
--- a/sw/source/filter/html/htmlplug.cxx
+++ b/sw/source/filter/html/htmlplug.cxx
@@ -1523,7 +1523,7 @@ static void OutHTMLGraphic(SwHTMLWriter& rWrt, const 
SwFrameFormat& rFrameFormat
     HtmlFrmOpts nFlags = bInCntnr ? HtmlFrmOpts::GenImgAllMask : 
HtmlFrmOpts::GenImgMask;
     if (bObjectOpened)
         nFlags |= HtmlFrmOpts::Replacement;
-    HtmlWriter aHtml(rWrt.Strm(), rWrt.maNamespace);
+    HtmlWriter aHtml(rWrt.Strm(), rWrt.GetNamespace());
     OutHTML_ImageStart(aHtml, rWrt, rFrameFormat, aGraphicURL, rGraphic, 
pOLENd->GetTitle(),
                        pOLENd->GetTwipSize(), nFlags, "ole", nullptr, 
aMimeType, true);
     OutHTML_ImageEnd(aHtml, rWrt);
diff --git a/sw/source/filter/html/htmltabw.cxx 
b/sw/source/filter/html/htmltabw.cxx
index 94b91692faa0..26b07c024557 100644
--- a/sw/source/filter/html/htmltabw.cxx
+++ b/sw/source/filter/html/htmltabw.cxx
@@ -738,7 +738,7 @@ void SwHTMLWrtTable::Write( SwHTMLWriter& rWrt, sal_Int16 
eAlign,
 
             const SwWriteTableCol *pColumn = m_aCols[nCol].get();
 
-            HtmlWriter html(rWrt.Strm(), rWrt.maNamespace);
+            HtmlWriter html(rWrt.Strm(), rWrt.GetNamespace());
             html.prettyPrint(false); // We add newlines ourself
             html.start(OOO_STRING_SVTOOLS_HTML_col ""_ostr);
 
diff --git a/sw/source/filter/html/wrthtml.cxx 
b/sw/source/filter/html/wrthtml.cxx
index 956641333222..aaf5c41f2e0a 100644
--- a/sw/source/filter/html/wrthtml.cxx
+++ b/sw/source/filter/html/wrthtml.cxx
@@ -340,6 +340,8 @@ void SwHTMLWriter::SetupFilterFromPropertyValues(
             // XHTML is always just a fragment inside ReqIF.
             mbSkipHeaderFooter = true;
         }
+        if (!maNamespace.isEmpty())
+            maNamespace += ":";
         // XHTML namespace implies XHTML.
         mbXHTML = true;
     }
@@ -1608,14 +1610,6 @@ sal_Int32 SwHTMLWriter::indexOfDotLeaders( sal_uInt16 
nPoolId, std::u16string_vi
     return -1;
 }
 
-OString SwHTMLWriter::GetNamespace() const
-{
-    if (maNamespace.isEmpty())
-        return OString();
-
-    return maNamespace + ":";
-}
-
 OUString SwHTMLWriter::normalizeURL(const OUString& url, bool own) const
 {
     OUString ret(url);
diff --git a/sw/source/filter/html/wrthtml.hxx 
b/sw/source/filter/html/wrthtml.hxx
index 717e45610f46..61368a485b91 100644
--- a/sw/source/filter/html/wrthtml.hxx
+++ b/sw/source/filter/html/wrthtml.hxx
@@ -271,6 +271,9 @@ enum class Css1Background
 
 class SwHTMLWriter : public Writer
 {
+    /// XML namespace, in case of XHTML.
+    OString maNamespace;
+
     SwHTMLPosFlyFrames m_aHTMLPosFlyFrames;
     std::unique_ptr<SwHTMLNumRuleInfo> m_pNumRuleInfo;// current numbering
     std::unique_ptr<SwHTMLNumRuleInfo> m_pNextNumRuleInfo;
@@ -415,8 +418,6 @@ public:
     std::unique_ptr<utl::TempFileNamed> mpTempBaseURL;
     /// If XHTML markup should be written instead of HTML.
     bool mbXHTML = false;
-    /// XML namespace, in case of XHTML.
-    OString maNamespace;
     /// If the ReqIF subset of XHTML should be written.
     bool mbReqIF = false;
 
@@ -626,7 +627,7 @@ public:
     sal_Int32 indexOfDotLeaders( sal_uInt16 nPoolId, std::u16string_view rText 
);
 
     /// Determines the prefix string needed to respect the requested namespace 
alias.
-    OString GetNamespace() const;
+    OString GetNamespace() const { return maNamespace; }
 
     bool IsPrettyPrint() const { return !m_bSpacePreserve && m_bPrettyPrint; }
     bool IsLFPossible() const { return !m_bSpacePreserve && m_bLFPossible; }

Reply via email to