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

Ravindra Vidhate ravindra.vidhate at synerzip.com
Thu May 22 01:19:44 PDT 2014


 sw/qa/extras/ooxmlexport/data/fdo78887.docx  |binary
 sw/qa/extras/ooxmlexport/ooxmlexport.cxx     |   11 +++++++++++
 sw/source/filter/ww8/docxattributeoutput.cxx |   11 ++++++++++-
 3 files changed, 21 insertions(+), 1 deletion(-)

New commits:
commit 8555c24e069dc00071eaad23c711f1d1375e5afc
Author: Ravindra Vidhate <ravindra.vidhate at synerzip.com>
Date:   Wed May 21 14:54:35 2014 +0530

    fdo#78887 <w:br> tag is not being preserved after export.
    
    When we have <w:br> tag continuous like in the following cases...
    
        "Title: Superstition\v\vComposer: Stevie Wonder\v\v"
        or "\vLyrics: \v"
    
        where "\n" is internally replaced by "\v" LO.
    
        Before text "\v" or after text multiple "\v" is not preserved.
    
    Conflicts:
    	sw/qa/extras/ooxmlexport/ooxmlexport.cxx
    Reviewed on:
    	https://gerrit.libreoffice.org/9420
    
    Change-Id: I2a6d0a7d2382dfbc2f0ab04f150653c9b17bbfd1

diff --git a/sw/qa/extras/ooxmlexport/data/fdo78887.docx b/sw/qa/extras/ooxmlexport/data/fdo78887.docx
new file mode 100644
index 0000000..db92fe4
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo78887.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index a039e0b..a82f810 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -3446,6 +3446,17 @@ DECLARE_OOXMLEXPORT_TEST(testfdo78886, "fdo78886.docx")
     assertXPath(pXmlDoc, "/w:document[1]/w:body[1]/w:tbl[2]/w:tr[1]/w:tc[1]/w:p[1]/w:hyperlink[1]/w:r[2]/w:fldChar[1]", 0);
 }
 
+DECLARE_OOXMLEXPORT_TEST(testFDO78887, "fdo78887.docx")
+{
+    xmlDocPtr pXmlDoc = parseExport("word/document.xml");
+    if (!pXmlDoc)
+        return;
+
+    assertXPath(pXmlDoc, "/w:document[1]/w:body[1]/w:p[1]/w:r[1]/w:br[1]", 1);
+    assertXPathContent(pXmlDoc, "/w:document[1]/w:body[1]/w:p[1]/w:r[1]/w:t[1]", "Lyrics: ");
+    assertXPath(pXmlDoc, "/w:document[1]/w:body[1]/w:p[1]/w:r[1]/w:br[2]", 1);
+}
+
 DECLARE_OOXMLEXPORT_TEST(testFdo78651, "fdo78651.docx")
 {
     xmlDocPtr pXmlDoc = parseExport("word/document.xml");
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index aafb31c..91562d7 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -1726,6 +1726,8 @@ void DocxAttributeOutput::RunText( const OUString& rText, rtl_TextEncoding /*eCh
     if ( m_pRedlineData && m_pRedlineData->GetType() == nsRedlineType_t::REDLINE_DELETE )
         nTextToken = XML_delText;
 
+    sal_Unicode prevUnicode = *pBegin;
+
     for ( const sal_Unicode *pIt = pBegin; pIt < pEnd; ++pIt )
     {
         switch ( *pIt )
@@ -1733,20 +1735,26 @@ void DocxAttributeOutput::RunText( const OUString& rText, rtl_TextEncoding /*eCh
             case 0x09: // tab
                 impl_WriteRunText( m_pSerializer, nTextToken, pBegin, pIt );
                 m_pSerializer->singleElementNS( XML_w, XML_tab, FSEND );
+                prevUnicode = *pIt;
                 break;
             case 0x0b: // line break
                 {
-                    if (impl_WriteRunText( m_pSerializer, nTextToken, pBegin, pIt ))
+                    if (impl_WriteRunText( m_pSerializer, nTextToken, pBegin, pIt ) || (prevUnicode == *pIt))
+                    {
                         m_pSerializer->singleElementNS( XML_w, XML_br, FSEND );
+                        prevUnicode = *pIt;
+                    }
                 }
                 break;
             case 0x1E: //non-breaking hyphen
                 impl_WriteRunText( m_pSerializer, nTextToken, pBegin, pIt );
                 m_pSerializer->singleElementNS( XML_w, XML_noBreakHyphen, FSEND );
+                prevUnicode = *pIt;
                 break;
             case 0x1F: //soft (on demand) hyphen
                 impl_WriteRunText( m_pSerializer, nTextToken, pBegin, pIt );
                 m_pSerializer->singleElementNS( XML_w, XML_softHyphen, FSEND );
+                prevUnicode = *pIt;
                 break;
             default:
                 if ( *pIt < 0x0020 ) // filter out the control codes
@@ -1754,6 +1762,7 @@ void DocxAttributeOutput::RunText( const OUString& rText, rtl_TextEncoding /*eCh
                     impl_WriteRunText( m_pSerializer, nTextToken, pBegin, pIt );
                     OSL_TRACE( "Ignored control code %x in a text run.", *pIt );
                 }
+                prevUnicode = *pIt;
                 break;
         }
     }


More information about the Libreoffice-commits mailing list