[Libreoffice-commits] core.git: Branch 'distro/vector/vector-5.4' - sw/qa sw/source

Miklos Vajna (via logerrit) logerrit at kemper.freedesktop.org
Tue Jan 14 09:53:50 UTC 2020


 sw/qa/extras/htmlexport/data/reqif-chinese.odt |binary
 sw/qa/extras/htmlexport/htmlexport.cxx         |   22 ++++++++++++++++++++++
 sw/source/filter/html/htmlatr.cxx              |   10 +++++-----
 sw/source/filter/html/htmlbas.cxx              |    3 ++-
 sw/source/filter/html/htmlfldw.cxx             |    5 ++---
 sw/source/filter/html/htmlflywriter.cxx        |    2 +-
 sw/source/filter/html/htmlforw.cxx             |    6 +++---
 sw/source/filter/html/htmlftn.cxx              |    4 ++--
 sw/source/filter/html/wrthtml.cxx              |    4 ++--
 sw/source/filter/html/wrthtml.hxx              |    2 +-
 10 files changed, 40 insertions(+), 18 deletions(-)

New commits:
commit ed3d2080f011a934541d7e6202b76fec3ddcac61
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Mon Jan 13 17:07:34 2020 +0100
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Tue Jan 14 10:44:53 2020 +0100

    sw reqif-xhtml export: fix non-well-formed output on Chinese text
    
    And also search for the '"<" OOO_something' pattern, and fix up all
    cases where we forgot to call GetNamespace() when opening an element.
    
    (cherry picked from commit 186ef501a305d452da1f36aa51106dba181dc324)
    
    Conflicts:
            sw/source/filter/html/htmlbas.cxx
            sw/source/filter/html/htmlfldw.cxx
            sw/source/filter/html/htmlflywriter.cxx
            sw/source/filter/html/htmlforw.cxx
            sw/source/filter/html/htmlftn.cxx
            sw/source/filter/html/wrthtml.cxx
    
    Change-Id: I015e807c1ad0f96c7c4aaa97f7f61ae134cf3754

diff --git a/sw/qa/extras/htmlexport/data/reqif-chinese.odt b/sw/qa/extras/htmlexport/data/reqif-chinese.odt
new file mode 100644
index 000000000000..b99c57caee10
Binary files /dev/null and b/sw/qa/extras/htmlexport/data/reqif-chinese.odt differ
diff --git a/sw/qa/extras/htmlexport/htmlexport.cxx b/sw/qa/extras/htmlexport/htmlexport.cxx
index 91a20f9c0ab1..47288ae65ced 100644
--- a/sw/qa/extras/htmlexport/htmlexport.cxx
+++ b/sw/qa/extras/htmlexport/htmlexport.cxx
@@ -781,6 +781,28 @@ CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testRTFOLEMimeType)
                 aType);
 }
 
+CPPUNIT_TEST_FIXTURE(SwHtmlDomExportTest, testChinese)
+{
+    // Load a document with Chinese text in it.
+    OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "reqif-chinese.odt";
+    mxComponent = loadFromDesktop(aURL, "com.sun.star.text.TextDocument", {});
+
+    // Export it.
+    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);
+    SvMemoryStream aStream;
+    HtmlExportTest::wrapFragment(maTempFile, aStream);
+    xmlDocPtr pDoc = parseXmlStream(&aStream);
+
+    // Without the accompanying fix in place, this test would have failed as the output was not
+    // well-formed.
+    CPPUNIT_ASSERT(pDoc);
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/html/htmlatr.cxx b/sw/source/filter/html/htmlatr.cxx
index e9764e79c0b5..807396ace498 100644
--- a/sw/source/filter/html/htmlatr.cxx
+++ b/sw/source/filter/html/htmlatr.cxx
@@ -780,7 +780,7 @@ void OutHTML_SwFormat( Writer& rWrt, const SwFormat& rFormat,
         // The align=... attribute does behave strange in netscape
         // if there are controls in a paragraph, because the control and
         // all text behind the control does not recognize this attribute.
-        OString sOut = "<" OOO_STRING_SVTOOLS_HTML_division;
+        OString sOut = "<" + rHWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_division;
         rWrt.Strm().WriteOString( sOut );
 
         rHWrt.m_bTextAttr = false;
@@ -2652,7 +2652,7 @@ static Writer& OutHTML_SvxColor( Writer& rWrt, const SfxPoolItem& rHt )
         }
         else
         {
-            OString sOut = "<" OOO_STRING_SVTOOLS_HTML_font " "
+            OString sOut = "<" + rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_font " "
                 OOO_STRING_SVTOOLS_HTML_O_color "=";
             rWrt.Strm().WriteOString( sOut );
             HTMLOutFuncs::Out_Color( rWrt.Strm(), aColor ).WriteChar( '>' );
@@ -2712,7 +2712,7 @@ static Writer& OutHTML_SvxFont( Writer& rWrt, const SfxPoolItem& rHt )
         }
         else
         {
-            OString sOut = "<" OOO_STRING_SVTOOLS_HTML_font " "
+            OString sOut = "<" + rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_font " "
                 OOO_STRING_SVTOOLS_HTML_O_face "=\"";
             rWrt.Strm().WriteOString( sOut );
             HTMLOutFuncs::Out_String( rWrt.Strm(), aNames, rHTMLWrt.m_eDestEnc, &rHTMLWrt.m_aNonConvertableCharacters )
@@ -2752,7 +2752,7 @@ static Writer& OutHTML_SvxFontHeight( Writer& rWrt, const SfxPoolItem& rHt )
         }
         else
         {
-            OString sOut = "<" OOO_STRING_SVTOOLS_HTML_font;
+            OString sOut = "<" + rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_font;
 
             sal_uInt32 nHeight = static_cast<const SvxFontHeightItem&>(rHt).GetHeight();
             sal_uInt16 nSize = rHTMLWrt.GetHTMLFontSize( nHeight );
@@ -2792,7 +2792,7 @@ static Writer& OutHTML_SvxLanguage( Writer& rWrt, const SfxPoolItem& rHt )
 
     if( rHTMLWrt.m_bTagOn )
     {
-        OString sOut = "<" OOO_STRING_SVTOOLS_HTML_span;
+        OString sOut = "<" + rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_span;
         rWrt.Strm().WriteOString( sOut );
         rHTMLWrt.OutLanguage( static_cast<const SvxLanguageItem &>(rHt).GetLanguage() );
         rWrt.Strm().WriteChar( '>' );
diff --git a/sw/source/filter/html/htmlbas.cxx b/sw/source/filter/html/htmlbas.cxx
index 2626291fb236..b7aa565dfac0 100644
--- a/sw/source/filter/html/htmlbas.cxx
+++ b/sw/source/filter/html/htmlbas.cxx
@@ -254,7 +254,7 @@ void SwHTMLParser::InsertBasicDocEvent( const OUString& aEvent, const OUString&
                            pDocSh );
 }
 
-void SwHTMLWriter::OutBasic()
+void SwHTMLWriter::OutBasic(SwHTMLWriter & rHTMLWrt)
 {
 #if HAVE_FEATURE_SCRIPTING
     if( !m_bCfgStarBasic )
@@ -285,6 +285,7 @@ void SwHTMLWriter::OutBasic()
                 OutNewLine();
                 OStringBuffer sOut;
                 sOut.append('<').append(OOO_STRING_SVTOOLS_HTML_meta)
+                    .append(rHTMLWrt.GetNamespace())
                     .append(' ').append(OOO_STRING_SVTOOLS_HTML_O_httpequiv)
                     .append("=\"")
                     .append(OOO_STRING_SVTOOLS_HTML_META_content_script_type)
diff --git a/sw/source/filter/html/htmlfldw.cxx b/sw/source/filter/html/htmlfldw.cxx
index dfa4ae71bb3a..68527d90807a 100644
--- a/sw/source/filter/html/htmlfldw.cxx
+++ b/sw/source/filter/html/htmlfldw.cxx
@@ -443,6 +443,7 @@ static Writer& OutHTML_SwField( Writer& rWrt, const SwField* pField,
 
 Writer& OutHTML_SwFormatField( Writer& rWrt, const SfxPoolItem& rHt )
 {
+    SwHTMLWriter& rHTMLWrt = static_cast<SwHTMLWriter&>(rWrt);
     const SwFormatField & rField = static_cast<const SwFormatField&>(rHt);
     const SwField* pField = rField.GetField();
     const SwFieldType* pFieldTyp = pField->GetTyp();
@@ -510,7 +511,7 @@ Writer& OutHTML_SwFormatField( Writer& rWrt, const SfxPoolItem& rHt )
             OUString sComment(convertLineEnd(rComment, GetSystemLineEnd()));
             OStringBuffer sOut;
             // TODO: ???
-            sOut.append('<').append(OOO_STRING_SVTOOLS_HTML_comment)
+            sOut.append('<').append(rHTMLWrt.GetNamespace()).append(OOO_STRING_SVTOOLS_HTML_comment)
                 .append(' ').append(OUStringToOString(sComment,
                     static_cast<SwHTMLWriter&>(rWrt).m_eDestEnc)).append(" -->");
             rWrt.Strm().WriteCharPtr( sOut.getStr() );
@@ -518,7 +519,6 @@ Writer& OutHTML_SwFormatField( Writer& rWrt, const SfxPoolItem& rHt )
     }
     else if( SwFieldIds::Script == pFieldTyp->Which() )
     {
-        SwHTMLWriter& rHTMLWrt = static_cast<SwHTMLWriter&>(rWrt);
         if( rHTMLWrt.m_bLFPossible )
             rHTMLWrt.OutNewLine( true );
 
@@ -544,7 +544,6 @@ Writer& OutHTML_SwFormatField( Writer& rWrt, const SfxPoolItem& rHt )
         OSL_ENSURE( pTextField, "Where is the txt fld?" );
         if( pTextField )
         {
-            SwHTMLWriter& rHTMLWrt = static_cast<SwHTMLWriter&>(rWrt);
             // ReqIF-XHTML doesn't allow specifying a background color.
             bool bFieldShadings = SwViewOption::IsFieldShadings() && !rHTMLWrt.mbReqIF;
             if (bFieldShadings)
diff --git a/sw/source/filter/html/htmlflywriter.cxx b/sw/source/filter/html/htmlflywriter.cxx
index 6725f12cd809..60cb3ebe311d 100644
--- a/sw/source/filter/html/htmlflywriter.cxx
+++ b/sw/source/filter/html/htmlflywriter.cxx
@@ -1659,7 +1659,7 @@ static Writer& OutHTML_FrameFormatAsSpacer( Writer& rWrt, const SwFrameFormat& r
         rHTMLWrt.OutNewLine( true );
 
     OStringBuffer sOut;
-    sOut.append('<').append(OOO_STRING_SVTOOLS_HTML_spacer).append(' ')
+    sOut.append('<').append(rHTMLWrt.GetNamespace()).append(OOO_STRING_SVTOOLS_HTML_spacer).append(' ')
         .append(OOO_STRING_SVTOOLS_HTML_O_type).append("=\"")
         .append(OOO_STRING_SVTOOLS_HTML_SPTYPE_block).append("\"");
     rWrt.Strm().WriteCharPtr( sOut.makeStringAndClear().getStr() );
diff --git a/sw/source/filter/html/htmlforw.cxx b/sw/source/filter/html/htmlforw.cxx
index 97cf96ef90cc..b1e1bd5db0ac 100644
--- a/sw/source/filter/html/htmlforw.cxx
+++ b/sw/source/filter/html/htmlforw.cxx
@@ -449,7 +449,7 @@ void SwHTMLWriter::OutForm( bool bOn,
     // die neue Form wird geoeffnet
     if( m_bLFPossible )
         OutNewLine();
-    OString sOut = "<" OOO_STRING_SVTOOLS_HTML_form;
+    OString sOut = "<" + GetNamespace() + OOO_STRING_SVTOOLS_HTML_form;
 
     uno::Reference< beans::XPropertySet > xFormPropSet( rFormComps, uno::UNO_QUERY );
 
@@ -578,7 +578,7 @@ void SwHTMLWriter::OutHiddenControls(
         {
             if( m_bLFPossible )
                 OutNewLine( true );
-            OString sOut = "<" OOO_STRING_SVTOOLS_HTML_input " "
+            OString sOut = "<" + GetNamespace() + OOO_STRING_SVTOOLS_HTML_input " "
                 OOO_STRING_SVTOOLS_HTML_O_type "=\""
                 OOO_STRING_SVTOOLS_HTML_IT_hidden "\"";
 
@@ -1207,7 +1207,7 @@ Writer& OutHTML_DrawFrameFormatAsControl( Writer& rWrt,
                     nSel++;
 
                 rHTMLWrt.OutNewLine(); // jede Option bekommt eine eigene Zeile
-                sOut = "<" OOO_STRING_SVTOOLS_HTML_option;
+                sOut = "<" + rHTMLWrt.GetNamespace() + OOO_STRING_SVTOOLS_HTML_option;
                 if( !sVal.isEmpty() || bEmptyVal )
                 {
                     sOut += " " OOO_STRING_SVTOOLS_HTML_O_value "=\"";
diff --git a/sw/source/filter/html/htmlftn.cxx b/sw/source/filter/html/htmlftn.cxx
index 614505f8416e..82dfb51cdb63 100644
--- a/sw/source/filter/html/htmlftn.cxx
+++ b/sw/source/filter/html/htmlftn.cxx
@@ -352,7 +352,7 @@ void SwHTMLWriter::OutFootEndNotes()
         if( m_bLFPossible )
             OutNewLine();
         OStringBuffer sOut;
-        sOut.append('<').append(OOO_STRING_SVTOOLS_HTML_division)
+        sOut.append('<').append(GetNamespace()).append(OOO_STRING_SVTOOLS_HTML_division)
             .append(' ').append(OOO_STRING_SVTOOLS_HTML_O_id).append("=\"");
         Strm().WriteCharPtr( sOut.makeStringAndClear().getStr() );
         HTMLOutFuncs::Out_String( Strm(), sFootnoteName, m_eDestEnc, &m_aNonConvertableCharacters );
@@ -530,7 +530,7 @@ static void lcl_html_outFootEndNoteInfo( Writer& rWrt, OUString *pParts,
 
     rHTMLWrt.OutNewLine();
     OStringBuffer sOut;
-    sOut.append('<').append(OOO_STRING_SVTOOLS_HTML_meta).append(' ')
+    sOut.append('<').append(rHTMLWrt.GetNamespace()).append(OOO_STRING_SVTOOLS_HTML_meta).append(' ')
         .append(OOO_STRING_SVTOOLS_HTML_O_name).append("=\"").append(pName)
         .append("\" ").append(OOO_STRING_SVTOOLS_HTML_O_content).append("=\"");
     rWrt.Strm().WriteCharPtr( sOut.makeStringAndClear().getStr() );
diff --git a/sw/source/filter/html/wrthtml.cxx b/sw/source/filter/html/wrthtml.cxx
index 79f7e0822c14..492eced82a07 100644
--- a/sw/source/filter/html/wrthtml.cxx
+++ b/sw/source/filter/html/wrthtml.cxx
@@ -420,7 +420,7 @@ sal_uLong SwHTMLWriter::WriteStream()
                     &m_aNonConvertableCharacters );
 
                 OStringBuffer sOut;
-                sOut.append('<').append(OOO_STRING_SVTOOLS_HTML_division)
+                sOut.append('<').append(GetNamespace()).append(OOO_STRING_SVTOOLS_HTML_division)
                     .append(' ').append(OOO_STRING_SVTOOLS_HTML_O_id)
                     .append("=\"").append(aName).append('\"').append('>')
                     .append(aStartTags);
@@ -1072,7 +1072,7 @@ const SwPageDesc *SwHTMLWriter::MakeHeader( sal_uInt16 &rHeaderAttrs )
 
         // and now ... the BASIC and JavaScript!
         if( pDoc->GetDocShell() )   // only with DocShell BASIC is possible
-            OutBasic();
+            OutBasic(*this);
 
         DecIndentLevel();   // indent content of <HEAD>
         OutNewLine();
diff --git a/sw/source/filter/html/wrthtml.hxx b/sw/source/filter/html/wrthtml.hxx
index ed81edd7be62..a3fc7a115b34 100644
--- a/sw/source/filter/html/wrthtml.hxx
+++ b/sw/source/filter/html/wrthtml.hxx
@@ -447,7 +447,7 @@ public:
     void OutFootEndNoteSym( const SwFormatFootnote& rFormatFootnote, const OUString& rNum,
                              sal_uInt16 nScript );
 
-    void OutBasic();
+    void OutBasic(SwHTMLWriter& rHTMLWrt);
 
     void OutAndSetDefList( sal_uInt16 nNewLvl );
 


More information about the Libreoffice-commits mailing list