[Libreoffice-commits] core.git: sw/qa sw/source

Miklos Vajna (via logerrit) logerrit at kemper.freedesktop.org
Wed Jul 29 09:18:31 UTC 2020


 sw/qa/extras/htmlexport/htmlexport.cxx |   28 ++++++++++++++++++++++++++++
 sw/source/filter/html/css1atr.cxx      |   15 +++++++++++----
 sw/source/filter/html/htmlatr.cxx      |    4 ++--
 sw/source/filter/html/wrthtml.hxx      |    4 +++-
 4 files changed, 44 insertions(+), 7 deletions(-)

New commits:
commit d19a21a81bea24cdcfc8618ed3d37b825e638f65
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Wed Jul 29 10:23:06 2020 +0200
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Wed Jul 29 11:17:49 2020 +0200

    sw reqif-xhtml export: avoid writing text-decoration:none
    
    This CSS key is allowed, but only the underline and line-through values
    are allowed in reqif mode, according to the top of page 66 of
    "01_OMG_Requirements Interchange Format (ReqIF)_Version
    1.2_formal-16-07-01.pdf".
    
    Change-Id: Ide64344f58bde4569fe499d8514dab36a055bda9
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99662
    Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
    Tested-by: Jenkins

diff --git a/sw/qa/extras/htmlexport/htmlexport.cxx b/sw/qa/extras/htmlexport/htmlexport.cxx
index aa92fd90ddd6..ec08d491e64f 100644
--- a/sw/qa/extras/htmlexport/htmlexport.cxx
+++ b/sw/qa/extras/htmlexport/htmlexport.cxx
@@ -17,6 +17,7 @@
 #include <com/sun/star/frame/XDispatchHelper.hpp>
 #include <com/sun/star/frame/DispatchHelper.hpp>
 #include <com/sun/star/style/ParagraphAdjust.hpp>
+#include <com/sun/star/awt/FontUnderline.hpp>
 
 #include <svtools/htmlcfg.hxx>
 #include <swmodule.hxx>
@@ -1106,6 +1107,33 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testMultiParaListItem)
     assertXPathContent(pXmlDoc, "//reqif-xhtml:ol/reqif-xhtml:li[3]/reqif-xhtml:p", "D");
 }
 
+CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testUnderlineNone)
+{
+    // Create a document with a single paragraph: its underlying is set to an explicit 'none' value.
+    loadURL("private:factory/swriter", nullptr);
+    uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+    uno::Reference<text::XText> xText = xTextDocument->getText();
+    xText->insertString(xText->getEnd(), "x", /*bAbsorb=*/false);
+    uno::Reference<beans::XPropertySet> xParagraph(getParagraph(1), uno::UNO_QUERY);
+    xParagraph->setPropertyValue("CharUnderline", uno::makeAny(sal_Int16(awt::FontUnderline::NONE)));
+
+    // Export to reqif-xhtml.
+    uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
+    uno::Sequence<beans::PropertyValue> aStoreProperties = {
+        comphelper::makePropertyValue("FilterName", OUString("HTML (StarWriter)")),
+        comphelper::makePropertyValue("FilterOptions", OUString("xhtmlns=reqif-xhtml")),
+    };
+    xStorable->storeToURL(maTempFile.GetURL(), aStoreProperties);
+
+    // Make sure that the paragraph has no explicit style, because "text-decoration: none" is
+    // filtered out.
+    SvMemoryStream aStream;
+    HtmlExportTest::wrapFragment(maTempFile, aStream);
+    xmlDocUniquePtr pXmlDoc = parseXmlStream(&aStream);
+    CPPUNIT_ASSERT(pXmlDoc);
+    assertXPathNoAttribute(pXmlDoc, "//reqif-xhtml:div/reqif-xhtml:p", "style");
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/html/css1atr.cxx b/sw/source/filter/html/css1atr.cxx
index a4a11df97ac6..3bf645b5ddcf 100644
--- a/sw/source/filter/html/css1atr.cxx
+++ b/sw/source/filter/html/css1atr.cxx
@@ -184,15 +184,22 @@ OString lclConvToHex(sal_uInt16 nHex)
 }
 }
 
-/// Determines if rProperty has to be suppressed due to ReqIF mode.
-bool IgnorePropertyForReqIF(bool bReqIF, const OString& rProperty)
+bool IgnorePropertyForReqIF(bool bReqIF, const OString& rProperty, const OString& rValue)
 {
     if (!bReqIF)
         return false;
 
     // Only allow these two keys, nothing else in ReqIF mode.
     if (rProperty == sCSS1_P_text_decoration)
-        return false;
+    {
+        // Deny other text-decoration values (e.g. "none").
+        if (rValue == "underline" || rValue == "line-through")
+        {
+            return false;
+        }
+
+        return true;
+    }
 
     if (rProperty == sCSS1_P_color)
         return false;
@@ -237,7 +244,7 @@ void SwHTMLWriter::OutCSS1_Property( const char *pProp,
                                      const char *pVal,
                                      const OUString *pSVal )
 {
-    if (IgnorePropertyForReqIF(mbReqIF, pProp))
+    if (IgnorePropertyForReqIF(mbReqIF, pProp, pVal))
         return;
 
     OStringBuffer sOut;
diff --git a/sw/source/filter/html/htmlatr.cxx b/sw/source/filter/html/htmlatr.cxx
index 83a02160b6ef..e7997b56f5e5 100644
--- a/sw/source/filter/html/htmlatr.cxx
+++ b/sw/source/filter/html/htmlatr.cxx
@@ -2687,7 +2687,7 @@ static Writer& OutHTML_SvxFont( Writer& rWrt, const SfxPoolItem& rHt )
     if( rHTMLWrt.m_bOutOpts )
         return rWrt;
 
-    if (IgnorePropertyForReqIF(rHTMLWrt.mbReqIF, "font-family"))
+    if (IgnorePropertyForReqIF(rHTMLWrt.mbReqIF, "font-family", OString()))
     {
         return rWrt;
     }
@@ -2733,7 +2733,7 @@ static Writer& OutHTML_SvxFontHeight( Writer& rWrt, const SfxPoolItem& rHt )
     if( rHTMLWrt.m_bOutOpts )
         return rWrt;
 
-    if (IgnorePropertyForReqIF(rHTMLWrt.mbReqIF, "font-size"))
+    if (IgnorePropertyForReqIF(rHTMLWrt.mbReqIF, "font-size", OString()))
     {
         return rWrt;
     }
diff --git a/sw/source/filter/html/wrthtml.hxx b/sw/source/filter/html/wrthtml.hxx
index fe50f51498d3..ffc416f22662 100644
--- a/sw/source/filter/html/wrthtml.hxx
+++ b/sw/source/filter/html/wrthtml.hxx
@@ -696,7 +696,9 @@ Writer& OutHTML_NumberBulletListEnd( SwHTMLWriter& rWrt,
 Writer& OutCSS1_SvxBox( Writer& rWrt, const SfxPoolItem& rHt );
 
 OString GetCSS1_Color(const Color& rColor);
-bool IgnorePropertyForReqIF(bool bReqIF, const OString& rProperty);
+
+/// Determines if rProperty with a given rValue has to be suppressed due to ReqIF mode.
+bool IgnorePropertyForReqIF(bool bReqIF, const OString& rProperty, const OString& rValue);
 
 #endif // INCLUDED_SW_SOURCE_FILTER_HTML_WRTHTML_HXX
 


More information about the Libreoffice-commits mailing list