[Libreoffice-commits] core.git: Branch 'feature/highlighting' - 5 commits - include/xmloff sw/qa sw/source writerfilter/source xmloff/source

Zolnai Tamás zolnaitamas2000 at gmail.com
Sat Feb 21 02:09:00 PST 2015


 dev/null                                           |binary
 include/xmloff/txtprmap.hxx                        |    2 
 sw/qa/extras/globalfilter/data/char_highlight.docx |binary
 sw/qa/extras/globalfilter/globalfilter.cxx         |   99 +++++++++++++++++++++
 sw/qa/extras/ooxmlexport/ooxmlexport3.cxx          |   49 ----------
 sw/qa/extras/rtfexport/data/fdo79599.rtf           |   38 --------
 sw/qa/extras/rtfexport/rtfexport.cxx               |    9 -
 sw/qa/extras/rtfimport/data/fdo79599.rtf           |   38 --------
 sw/qa/extras/rtfimport/rtfimport.cxx               |   56 -----------
 sw/source/filter/ww8/rtfattributeoutput.cxx        |   11 ++
 sw/source/filter/ww8/rtfattributeoutput.hxx        |    2 
 sw/source/filter/ww8/rtfexport.cxx                 |    2 
 sw/source/filter/ww8/ww8atr.cxx                    |   11 ++
 sw/source/filter/ww8/ww8attributeoutput.hxx        |    2 
 sw/source/filter/ww8/ww8par.cxx                    |    1 
 sw/source/filter/ww8/ww8par.hxx                    |    1 
 sw/source/filter/ww8/ww8par2.cxx                   |    3 
 sw/source/filter/ww8/ww8par6.cxx                   |   21 ----
 writerfilter/source/dmapper/DomainMapper.cxx       |   21 ++--
 writerfilter/source/dmapper/DomainMapper.hxx       |    2 
 xmloff/source/text/txtexppr.cxx                    |   13 ++
 xmloff/source/text/txtprmap.cxx                    |    8 +
 22 files changed, 161 insertions(+), 228 deletions(-)

New commits:
commit 15e6af4f8703dc2e6ba59207799f1f43163aa954
Author: Zolnai Tamás <zolnaitamas2000 at gmail.com>
Date:   Sat Feb 21 10:50:18 2015 +0100

    Char highlight: ODT filters
    
    Export merges the two background attribute.
    
    Change-Id: I882321fbd5a7d24991fb01b8dc9d2cc0bd294051

diff --git a/include/xmloff/txtprmap.hxx b/include/xmloff/txtprmap.hxx
index a08915f..2562abb 100644
--- a/include/xmloff/txtprmap.hxx
+++ b/include/xmloff/txtprmap.hxx
@@ -196,6 +196,8 @@
 #define CTF_CHARBOTTOMBORDER                (XML_TEXT_CTF_START + 167)
 #define CTF_RELWIDTHREL                     (XML_TEXT_CTF_START + 168)
 #define CTF_RELHEIGHTREL                    (XML_TEXT_CTF_START + 169)
+#define CTF_CHAR_BACKGROUND                 (XML_TEXT_CTF_START + 170)
+#define CTF_CHAR_HIGHLIGHT                  (XML_TEXT_CTF_START + 171)
 
 
 enum class TextPropMap {
diff --git a/sw/qa/extras/globalfilter/data/char_highlight.docx b/sw/qa/extras/globalfilter/data/char_highlight.docx
index 841fc3e..e601bac 100644
Binary files a/sw/qa/extras/globalfilter/data/char_highlight.docx and b/sw/qa/extras/globalfilter/data/char_highlight.docx differ
diff --git a/sw/qa/extras/globalfilter/globalfilter.cxx b/sw/qa/extras/globalfilter/globalfilter.cxx
index 8ea45e1..83aec2a 100644
--- a/sw/qa/extras/globalfilter/globalfilter.cxx
+++ b/sw/qa/extras/globalfilter/globalfilter.cxx
@@ -355,10 +355,10 @@ void Test::testGraphicShape()
 void Test::testCharHighlight()
 {
     // MS Word has two kind of character background called character shading and highlight
-    // No we support these two background colors both in import and export code
+    // MS filters handle these attributes separately, but ODF export merges them into one background attribute
 
     const char* aFilterNames[] = {
-//        "writer8",
+        "writer8",
         "Rich Text Format",
         "MS Word 97",
         "Office Open XML Text",
@@ -412,20 +412,37 @@ void Test::testCharHighlight()
                 case 15: nHighlightColor = 0x808080; break; //dark gray
                 case 16: nHighlightColor = 0xC0C0C0; break; //light gray
             }
-            CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), nHighlightColor, getProperty<sal_Int32>(xRun,"CharHighlight"));
-            CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), nBackColor, getProperty<sal_Int32>(xRun,"CharBackColor"));
+
+            if( strcmp(aFilterNames[nFilter], "writer8") == 0 )
+            {
+                CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(COL_TRANSPARENT), getProperty<sal_Int32>(xRun,"CharHighlight"));
+                CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), nHighlightColor, getProperty<sal_Int32>(xRun,"CharBackColor"));
+            }
+            else // MS filters
+            {
+                CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), nHighlightColor, getProperty<sal_Int32>(xRun,"CharHighlight"));
+                CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), nBackColor, getProperty<sal_Int32>(xRun,"CharBackColor"));
+            }
         }
 
         // Only highlight
         {
-            const uno::Reference<beans::XPropertySet> xRun(getRun(xPara,17), uno::UNO_QUERY);
-            CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(0xC0C0C0), getProperty<sal_Int32>(xRun,"CharHighlight"));
-            CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(COL_TRANSPARENT), getProperty<sal_Int32>(xRun,"CharBackColor"));
+            const uno::Reference<beans::XPropertySet> xRun(getRun(xPara,18), uno::UNO_QUERY);
+            if( strcmp(aFilterNames[nFilter], "writer8") == 0 )
+            {
+                CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(COL_TRANSPARENT), getProperty<sal_Int32>(xRun,"CharHighlight"));
+                CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(0xff0000), getProperty<sal_Int32>(xRun,"CharBackColor"));
+            }
+            else
+            {
+                CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(0xff0000), getProperty<sal_Int32>(xRun,"CharHighlight"));
+                CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(COL_TRANSPARENT), getProperty<sal_Int32>(xRun,"CharBackColor"));
+            }
         }
 
         // Only background
         {
-            const uno::Reference<beans::XPropertySet> xRun(getRun(xPara,18), uno::UNO_QUERY);
+            const uno::Reference<beans::XPropertySet> xRun(getRun(xPara,19), uno::UNO_QUERY);
             CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(COL_TRANSPARENT), getProperty<sal_Int32>(xRun,"CharHighlight"));
             CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(0x0000ff), getProperty<sal_Int32>(xRun,"CharBackColor"));
         }
diff --git a/xmloff/source/text/txtexppr.cxx b/xmloff/source/text/txtexppr.cxx
index 7e3cfc4..2925aec 100644
--- a/xmloff/source/text/txtexppr.cxx
+++ b/xmloff/source/text/txtexppr.cxx
@@ -658,6 +658,10 @@ void XMLTextExportPropertySetMapper::ContextFilter(
     XMLPropertyState* pRepeatOffsetX = NULL;
     XMLPropertyState* pRepeatOffsetY = NULL;
 
+    // character background and highlight
+    XMLPropertyState* pCharBackground = NULL;
+    XMLPropertyState* pCharHighlight = NULL;
+
     bool bNeedsAnchor = false;
 
     for( ::std::vector< XMLPropertyState >::iterator aIter = rProperties.begin();
@@ -816,6 +820,9 @@ void XMLTextExportPropertySetMapper::ContextFilter(
                     propertyState->mnIndex = -1;
             }
             break;
+
+        case CTF_CHAR_BACKGROUND: pCharBackground = propertyState; break;
+        case CTF_CHAR_HIGHLIGHT: pCharHighlight = propertyState; break;
         }
     }
 
@@ -1118,6 +1125,12 @@ void XMLTextExportPropertySetMapper::ContextFilter(
     if( pClipState != NULL && pClip11State != NULL  )
         pClip11State->mnIndex = -1;
 
+    // When both background attributes are available export only the highlight
+    if( pCharHighlight && pCharBackground )
+    {
+       pCharBackground->mnIndex = -1;
+    }
+
     SvXMLExportPropertyMapper::ContextFilter(bEnableFoFontFamily, rProperties, rPropSet);
 }
 
diff --git a/xmloff/source/text/txtprmap.cxx b/xmloff/source/text/txtprmap.cxx
index 3806625..19979c9 100644
--- a/xmloff/source/text/txtprmap.cxx
+++ b/xmloff/source/text/txtprmap.cxx
@@ -191,7 +191,7 @@ XMLPropertyMapEntry aXMLParaPropMap[] =
     // RES_CHRATR_NOLINEBREAK
     // TODO: not used?
     // RES_CHRATR_BACKGROUND
-    MT_E( "CharBackColor",  FO, BACKGROUND_COLOR, XML_TYPE_COLORTRANSPARENT|MID_FLAG_MULTI_PROPERTY, 0 ),
+    MT_E( "CharBackColor",  FO, BACKGROUND_COLOR, XML_TYPE_COLORTRANSPARENT|MID_FLAG_MULTI_PROPERTY, CTF_CHAR_BACKGROUND ),
     MT_E( "CharBackTransparent",    FO, BACKGROUND_COLOR, XML_TYPE_ISTRANSPARENT|MID_FLAG_MERGE_ATTRIBUTE, 0 ),
     MT_E( "CharBackColor",  FO, TEXT_BACKGROUND_COLOR, XML_TYPE_COLOR|MID_FLAG_SPECIAL_ITEM_EXPORT, CTF_OLDTEXTBACKGROUND ),
     // RES_CHRATR_CJK_FONT
@@ -291,6 +291,8 @@ XMLPropertyMapEntry aXMLParaPropMap[] =
     // RES_CHRATR_SHADOW
     MAP_EXT( "CharShadowFormat", XML_NAMESPACE_LO_EXT, XML_SHADOW, XML_TYPE_TEXT_SHADOW|XML_TYPE_PROP_TEXT, 0 ),
     MAP_EXT_I( "CharShadowFormat", XML_NAMESPACE_STYLE, XML_SHADOW, XML_TYPE_TEXT_SHADOW|XML_TYPE_PROP_TEXT, 0 ),
+    // RES_CHRATR_HIGHLIGHT
+    MT_E( "CharHighlight",  FO, BACKGROUND_COLOR, XML_TYPE_COLORTRANSPARENT|MID_FLAG_MULTI_PROPERTY| MID_FLAG_NO_PROPERTY_IMPORT, CTF_CHAR_HIGHLIGHT ),
     // RES_TXTATR_INETFMT
     // TODO
     // RES_TXTATR_REFMARK
@@ -531,7 +533,7 @@ XMLPropertyMapEntry aXMLTextPropMap[] =
     // RES_CHRATR_NOLINEBREAK
     // TODO: not used?
     // RES_CHRATR_BACKGROUND
-    MT_E( "CharBackColor",  FO, BACKGROUND_COLOR, XML_TYPE_COLORTRANSPARENT|MID_FLAG_MULTI_PROPERTY, 0 ),
+    MT_E( "CharBackColor",  FO, BACKGROUND_COLOR, XML_TYPE_COLORTRANSPARENT|MID_FLAG_MULTI_PROPERTY, CTF_CHAR_BACKGROUND ),
     MT_E( "CharBackTransparent",    FO, BACKGROUND_COLOR, XML_TYPE_ISTRANSPARENT|MID_FLAG_MERGE_ATTRIBUTE, 0 ),
     { "CharShadingValue", sizeof("CharShadingValue")-1, XML_NAMESPACE_LO_EXT, XML_CHAR_SHADING_VALUE, XML_TYPE_NUMBER|XML_TYPE_PROP_TEXT, 0, SvtSaveOptions::ODFVER_012_EXT_COMPAT, false },
     MT_E( "CharBackColor",  FO, TEXT_BACKGROUND_COLOR, XML_TYPE_COLOR|MID_FLAG_SPECIAL_ITEM_EXPORT, CTF_OLDTEXTBACKGROUND ),
@@ -634,6 +636,8 @@ XMLPropertyMapEntry aXMLTextPropMap[] =
     // RES_CHRATR_SHADOW
     MAP_EXT( "CharShadowFormat", XML_NAMESPACE_LO_EXT, XML_SHADOW, XML_TYPE_TEXT_SHADOW|XML_TYPE_PROP_TEXT, 0 ),
     MAP_EXT_I( "CharShadowFormat", XML_NAMESPACE_STYLE, XML_SHADOW, XML_TYPE_TEXT_SHADOW|XML_TYPE_PROP_TEXT, 0 ),
+    // RES_CHRATR_HIGHLIGHT
+    MT_E( "CharHighlight",  FO, BACKGROUND_COLOR, XML_TYPE_COLORTRANSPARENT|MID_FLAG_MULTI_PROPERTY|MID_FLAG_NO_PROPERTY_IMPORT, CTF_CHAR_HIGHLIGHT ),
     // RES_TXTATR_INETFMT
     MT_E( "HyperLinkURL",           TEXT,       XMLNS,                      XML_TYPE_STRING|MID_FLAG_NO_PROPERTY_IMPORT,    CTF_HYPERLINK_URL ),
     // RES_TXTATR_REFMARK
commit b4badb824658ef7a58063e4c7bd9cdd88362b999
Author: Zolnai Tamás <zolnaitamas2000 at gmail.com>
Date:   Sat Feb 21 10:37:54 2015 +0100

    Char highlight: DOC filters
    
    Change-Id: Ia609425f6753796091d4dfdfae8e621c062e0c15

diff --git a/sw/qa/extras/globalfilter/globalfilter.cxx b/sw/qa/extras/globalfilter/globalfilter.cxx
index e3492d1..8ea45e1 100644
--- a/sw/qa/extras/globalfilter/globalfilter.cxx
+++ b/sw/qa/extras/globalfilter/globalfilter.cxx
@@ -360,7 +360,7 @@ void Test::testCharHighlight()
     const char* aFilterNames[] = {
 //        "writer8",
         "Rich Text Format",
-//        "MS Word 97",
+        "MS Word 97",
         "Office Open XML Text",
     };
 
@@ -371,6 +371,8 @@ void Test::testCharHighlight()
         mxComponent = loadFromDesktop(getURLFromSrc("/sw/qa/extras/globalfilter/data/char_highlight.docx"),
                                       "com.sun.star.text.TextDocument");
 
+        const OString sFailedMessage = OString("Failed on filter: ") + aFilterNames[nFilter];
+
         // Export the document and import again for a check
         uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
 
@@ -410,22 +412,22 @@ void Test::testCharHighlight()
                 case 15: nHighlightColor = 0x808080; break; //dark gray
                 case 16: nHighlightColor = 0xC0C0C0; break; //light gray
             }
-            CPPUNIT_ASSERT_EQUAL(nHighlightColor, getProperty<sal_Int32>(xRun,"CharHighlight"));
-            CPPUNIT_ASSERT_EQUAL(nBackColor, getProperty<sal_Int32>(xRun,"CharBackColor"));
+            CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), nHighlightColor, getProperty<sal_Int32>(xRun,"CharHighlight"));
+            CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), nBackColor, getProperty<sal_Int32>(xRun,"CharBackColor"));
         }
 
         // Only highlight
         {
             const uno::Reference<beans::XPropertySet> xRun(getRun(xPara,17), uno::UNO_QUERY);
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(0xC0C0C0), getProperty<sal_Int32>(xRun,"CharHighlight"));
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(COL_TRANSPARENT), getProperty<sal_Int32>(xRun,"CharBackColor"));
+            CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(0xC0C0C0), getProperty<sal_Int32>(xRun,"CharHighlight"));
+            CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(COL_TRANSPARENT), getProperty<sal_Int32>(xRun,"CharBackColor"));
         }
 
         // Only background
         {
             const uno::Reference<beans::XPropertySet> xRun(getRun(xPara,18), uno::UNO_QUERY);
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(COL_TRANSPARENT), getProperty<sal_Int32>(xRun,"CharHighlight"));
-            CPPUNIT_ASSERT_EQUAL(sal_Int32(0x0000ff), getProperty<sal_Int32>(xRun,"CharBackColor"));
+            CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(COL_TRANSPARENT), getProperty<sal_Int32>(xRun,"CharHighlight"));
+            CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailedMessage.getStr(), sal_Int32(0x0000ff), getProperty<sal_Int32>(xRun,"CharBackColor"));
         }
     }
 }
diff --git a/sw/source/filter/ww8/ww8atr.cxx b/sw/source/filter/ww8/ww8atr.cxx
index 9ef456e..baacf70 100644
--- a/sw/source/filter/ww8/ww8atr.cxx
+++ b/sw/source/filter/ww8/ww8atr.cxx
@@ -1281,6 +1281,17 @@ void WW8AttributeOutput::CharBorder( const SvxBorderLine* pAllBorder, const sal_
     m_rWW8Export.Out_BorderLine( *m_rWW8Export.pO, pAllBorder, 0, NS_sprm::LN_CBrc80, NS_sprm::LN_CBrc, bShadow );
 }
 
+void WW8AttributeOutput::CharHighlight( const SvxBrushItem& rBrush )
+{
+    if( m_rWW8Export.bWrtWW8 )
+    {
+        sal_uInt8 nColor = m_rWW8Export.TransCol( rBrush.GetColor() );
+        // sprmCHighlight
+        m_rWW8Export.InsUInt16( NS_sprm::LN_CHighlight );
+        m_rWW8Export.pO->push_back( nColor );
+    }
+}
+
 void WW8AttributeOutput::CharUnderline( const SvxUnderlineItem& rUnderline )
 {
     if ( m_rWW8Export.bWrtWW8 )
diff --git a/sw/source/filter/ww8/ww8attributeoutput.hxx b/sw/source/filter/ww8/ww8attributeoutput.hxx
index 8e7041b..c3df0a6 100644
--- a/sw/source/filter/ww8/ww8attributeoutput.hxx
+++ b/sw/source/filter/ww8/ww8attributeoutput.hxx
@@ -309,7 +309,7 @@ protected:
     virtual void CharBorder( const ::editeng::SvxBorderLine* pAllBorder, const sal_uInt16 nDist, const bool bShadow ) SAL_OVERRIDE;
 
     /// Sfx item RES_CHRATR_HIGHLIGHT
-    virtual void CharHighlight( const SvxBrushItem& ) SAL_OVERRIDE {};
+    virtual void CharHighlight( const SvxBrushItem& ) SAL_OVERRIDE;
 
     /// Sfx item RES_TXTATR_INETFMT
     virtual void TextINetFormat( const SwFmtINetFmt& ) SAL_OVERRIDE;
diff --git a/sw/source/filter/ww8/ww8par6.cxx b/sw/source/filter/ww8/ww8par6.cxx
index 29f2a9c..027e96a 100644
--- a/sw/source/filter/ww8/ww8par6.cxx
+++ b/sw/source/filter/ww8/ww8par6.cxx
@@ -3822,7 +3822,7 @@ void SwWW8ImplReader::Read_CharHighlight(sal_uInt16, const sal_uInt8* pData, sho
 {
     if( nLen <= 0 )
     {
-        pCtrlStck->SetAttr( *pPaM->GetPoint(), RES_CHRATR_BACKGROUND );
+        pCtrlStck->SetAttr( *pPaM->GetPoint(), RES_CHRATR_HIGHLIGHT );
     }
     else
     {
@@ -3832,7 +3832,7 @@ void SwWW8ImplReader::Read_CharHighlight(sal_uInt16, const sal_uInt8* pData, sho
             b = 0;                  // Auto -> Black
 
         Color aCol(GetCol(b));
-        NewAttr( SvxBrushItem( aCol , RES_CHRATR_BACKGROUND ));
+        NewAttr( SvxBrushItem( aCol , RES_CHRATR_HIGHLIGHT ));
     }
 }
 
commit d0c98cf213eef7042b38fbf22a92e6435793a414
Author: Zolnai Tamás <zolnaitamas2000 at gmail.com>
Date:   Sun Feb 8 10:26:26 2015 +0100

    WW8: bCharShdTxtCol is always false
    
    Change-Id: Ib62a4f5dcd7e41cd8c8e82f23efebb468e2e7c91

diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx
index 58d1c79..6418f52 100644
--- a/sw/source/filter/ww8/ww8par.cxx
+++ b/sw/source/filter/ww8/ww8par.cxx
@@ -4202,7 +4202,6 @@ SwWW8ImplReader::SwWW8ImplReader(sal_uInt8 nVersionPara, SvStorage* pStorage,
     , bWasTabRowEnd(false)
     , bWasTabCellEnd(false)
     , bShdTxtCol(false)
-    , bCharShdTxtCol(false)
     , bAnl(false)
     , bHdFtFtnEdn(false)
     , bFtnEdn(false)
diff --git a/sw/source/filter/ww8/ww8par.hxx b/sw/source/filter/ww8/ww8par.hxx
index af6301d..6b5d4e2 100644
--- a/sw/source/filter/ww8/ww8par.hxx
+++ b/sw/source/filter/ww8/ww8par.hxx
@@ -1315,7 +1315,6 @@ private:
     bool bWasTabCellEnd;    // table: Cell End Mark
 
     bool bShdTxtCol;        // Textfarbe indirekt gesetzt ( Hintergrund sw )
-    bool bCharShdTxtCol;    // Textfarbe indirekt gesetzt ( Zeichenhintergrund sw )
     bool bAnl;              // Nummerierung in Bearbeitung
                                 // Anl heisst Autonumber level
 
diff --git a/sw/source/filter/ww8/ww8par2.cxx b/sw/source/filter/ww8/ww8par2.cxx
index c9f965c..376de19 100644
--- a/sw/source/filter/ww8/ww8par2.cxx
+++ b/sw/source/filter/ww8/ww8par2.cxx
@@ -3818,8 +3818,7 @@ void WW8RStyle::PostStyle(SwWW8StyInf &rSI, bool bOldNoImp)
 {
     // Reset attribute flags, because there are no style-ends.
 
-    pIo->bHasBorder = pIo->bShdTxtCol = pIo->bCharShdTxtCol
-        = pIo->bSpec = pIo->bObj = pIo->bSymbol = false;
+    pIo->bHasBorder = pIo->bShdTxtCol = pIo->bSpec = pIo->bObj = pIo->bSymbol = false;
     pIo->nCharFmt = -1;
 
     // If Style basiert auf Nichts oder Basis ignoriert
diff --git a/sw/source/filter/ww8/ww8par6.cxx b/sw/source/filter/ww8/ww8par6.cxx
index 2d63bfa..29f2a9c 100644
--- a/sw/source/filter/ww8/ww8par6.cxx
+++ b/sw/source/filter/ww8/ww8par6.cxx
@@ -3791,12 +3791,6 @@ void SwWW8ImplReader::Read_CharShadow(  sal_uInt16, const sal_uInt8* pData, shor
     if( nLen <= 0 )
     {
         pCtrlStck->SetAttr( *pPaM->GetPoint(), RES_CHRATR_BACKGROUND );
-        if( bCharShdTxtCol )
-        {
-            // Zeichenfarbe auch
-            pCtrlStck->SetAttr( *pPaM->GetPoint(), RES_CHRATR_COLOR );
-            bCharShdTxtCol = false;
-        }
     }
     else
     {
@@ -3813,12 +3807,6 @@ void SwWW8ImplReader::Read_TxtBackColor(sal_uInt16, const sal_uInt8* pData, shor
     if( nLen <= 0 )
     {
         pCtrlStck->SetAttr( *pPaM->GetPoint(), RES_CHRATR_BACKGROUND );
-        if( bCharShdTxtCol )
-        {
-            // Zeichenfarbe auch
-            pCtrlStck->SetAttr( *pPaM->GetPoint(), RES_CHRATR_COLOR );
-            bCharShdTxtCol = false;
-        }
     }
     else
     {
@@ -3835,11 +3823,6 @@ void SwWW8ImplReader::Read_CharHighlight(sal_uInt16, const sal_uInt8* pData, sho
     if( nLen <= 0 )
     {
         pCtrlStck->SetAttr( *pPaM->GetPoint(), RES_CHRATR_BACKGROUND );
-        if( bCharShdTxtCol )
-        {
-            pCtrlStck->SetAttr( *pPaM->GetPoint(), RES_CHRATR_COLOR );  // Zeichenfarbe auch
-            bCharShdTxtCol = false;
-        }
     }
     else
     {
commit b3877bcecbe1934eed467d6a6b321d1765a924d2
Author: Zolnai Tamás <zolnaitamas2000 at gmail.com>
Date:   Sat Feb 21 10:32:45 2015 +0100

    Char highlight: RTF filters
    
    Handle \highlightN and \chcbpatN separately.
    
    Change-Id: I20546bd4c26154e8b1168f87dcb4ab44a192ad83

diff --git a/sw/qa/extras/ooxmlexport/data/char_highlight.docx b/sw/qa/extras/globalfilter/data/char_highlight.docx
similarity index 100%
rename from sw/qa/extras/ooxmlexport/data/char_highlight.docx
rename to sw/qa/extras/globalfilter/data/char_highlight.docx
diff --git a/sw/qa/extras/globalfilter/globalfilter.cxx b/sw/qa/extras/globalfilter/globalfilter.cxx
index ae87472..e3492d1 100644
--- a/sw/qa/extras/globalfilter/globalfilter.cxx
+++ b/sw/qa/extras/globalfilter/globalfilter.cxx
@@ -28,12 +28,14 @@ public:
     void testLinkedGraphicRT();
     void testImageWithSpecialID();
     void testGraphicShape();
+    void testCharHighlight();
 
     CPPUNIT_TEST_SUITE(Test);
     CPPUNIT_TEST(testSwappedOutImageExport);
     CPPUNIT_TEST(testLinkedGraphicRT);
     CPPUNIT_TEST(testImageWithSpecialID);
     CPPUNIT_TEST(testGraphicShape);
+    CPPUNIT_TEST(testCharHighlight);
     CPPUNIT_TEST_SUITE_END();
 };
 
@@ -350,6 +352,84 @@ void Test::testGraphicShape()
     }
 }
 
+void Test::testCharHighlight()
+{
+    // MS Word has two kind of character background called character shading and highlight
+    // No we support these two background colors both in import and export code
+
+    const char* aFilterNames[] = {
+//        "writer8",
+        "Rich Text Format",
+//        "MS Word 97",
+        "Office Open XML Text",
+    };
+
+    for( size_t nFilter = 0; nFilter < SAL_N_ELEMENTS(aFilterNames); ++nFilter )
+    {
+        if (mxComponent.is())
+            mxComponent->dispose();
+        mxComponent = loadFromDesktop(getURLFromSrc("/sw/qa/extras/globalfilter/data/char_highlight.docx"),
+                                      "com.sun.star.text.TextDocument");
+
+        // Export the document and import again for a check
+        uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
+
+        utl::MediaDescriptor aMediaDescriptor;
+        aMediaDescriptor["FilterName"] <<= OUString::createFromAscii(aFilterNames[nFilter]);
+
+        utl::TempFile aTempFile;
+        aTempFile.EnableKillingFile();
+        xStorable->storeToURL(aTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList());
+        uno::Reference< lang::XComponent > xComponent(xStorable, uno::UNO_QUERY);
+        xComponent->dispose();
+        mxComponent = loadFromDesktop(aTempFile.GetURL(), "com.sun.star.text.TextDocument");
+
+        const uno::Reference< text::XTextRange > xPara = getParagraph(1);
+        // Both highlight and background
+        const sal_Int32 nBackColor(0x4F81BD);
+        for( int nRun = 1; nRun <= 16; ++nRun )
+        {
+            const uno::Reference<beans::XPropertySet> xRun(getRun(xPara,nRun), uno::UNO_QUERY);
+            sal_Int32 nHighlightColor = 0;
+            switch( nRun )
+            {
+                case 1: nHighlightColor = 0x000000; break; //black
+                case 2: nHighlightColor = 0x0000ff; break; //blue
+                case 3: nHighlightColor = 0x00ffff; break; //cyan
+                case 4: nHighlightColor = 0x00ff00; break; //green
+                case 5: nHighlightColor = 0xff00ff; break; //magenta
+                case 6: nHighlightColor = 0xff0000; break; //red
+                case 7: nHighlightColor = 0xffff00; break; //yellow
+                case 8: nHighlightColor = 0xffffff; break; //white
+                case 9: nHighlightColor = 0x000080;  break;//dark blue
+                case 10: nHighlightColor = 0x008080; break; //dark cyan
+                case 11: nHighlightColor = 0x008000; break; //dark green
+                case 12: nHighlightColor = 0x800080; break; //dark magenta
+                case 13: nHighlightColor = 0x800000; break; //dark red
+                case 14: nHighlightColor = 0x808000; break; //dark yellow
+                case 15: nHighlightColor = 0x808080; break; //dark gray
+                case 16: nHighlightColor = 0xC0C0C0; break; //light gray
+            }
+            CPPUNIT_ASSERT_EQUAL(nHighlightColor, getProperty<sal_Int32>(xRun,"CharHighlight"));
+            CPPUNIT_ASSERT_EQUAL(nBackColor, getProperty<sal_Int32>(xRun,"CharBackColor"));
+        }
+
+        // Only highlight
+        {
+            const uno::Reference<beans::XPropertySet> xRun(getRun(xPara,17), uno::UNO_QUERY);
+            CPPUNIT_ASSERT_EQUAL(sal_Int32(0xC0C0C0), getProperty<sal_Int32>(xRun,"CharHighlight"));
+            CPPUNIT_ASSERT_EQUAL(sal_Int32(COL_TRANSPARENT), getProperty<sal_Int32>(xRun,"CharBackColor"));
+        }
+
+        // Only background
+        {
+            const uno::Reference<beans::XPropertySet> xRun(getRun(xPara,18), uno::UNO_QUERY);
+            CPPUNIT_ASSERT_EQUAL(sal_Int32(COL_TRANSPARENT), getProperty<sal_Int32>(xRun,"CharHighlight"));
+            CPPUNIT_ASSERT_EQUAL(sal_Int32(0x0000ff), getProperty<sal_Int32>(xRun,"CharBackColor"));
+        }
+    }
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(Test);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx
index 0036db9..19c079e 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx
@@ -469,55 +469,6 @@ DECLARE_OOXMLEXPORT_TEST(testSmartart, "smartart.docx")
     CPPUNIT_ASSERT_EQUAL(OUString("RenderedShapes"), nValue); // Rendered bitmap has the proper name
 }
 
-
-DECLARE_OOXMLEXPORT_TEST(testCharHighlight, "char_highlight.docx")
-{
-    const uno::Reference< text::XTextRange > xPara = getParagraph(1);
-    // Both highlight and background
-    const sal_Int32 nBackColor(0x4F81BD);
-    for( int nRun = 1; nRun <= 16; ++nRun )
-    {
-        const uno::Reference<beans::XPropertySet> xRun(getRun(xPara,nRun), uno::UNO_QUERY);
-        sal_Int32 nHighlightColor = 0;
-        switch( nRun )
-        {
-            case 1: nHighlightColor = 0x000000; break; //black
-            case 2: nHighlightColor = 0x0000ff; break; //blue
-            case 3: nHighlightColor = 0x00ffff; break; //cyan
-            case 4: nHighlightColor = 0x00ff00; break; //green
-            case 5: nHighlightColor = 0xff00ff; break; //magenta
-            case 6: nHighlightColor = 0xff0000; break; //red
-            case 7: nHighlightColor = 0xffff00; break; //yellow
-            case 8: nHighlightColor = 0xffffff; break; //white
-            case 9: nHighlightColor = 0x000080;  break;//dark blue
-            case 10: nHighlightColor = 0x008080; break; //dark cyan
-            case 11: nHighlightColor = 0x008000; break; //dark green
-            case 12: nHighlightColor = 0x800080; break; //dark magenta
-            case 13: nHighlightColor = 0x800000; break; //dark red
-            case 14: nHighlightColor = 0x808000; break; //dark yellow
-            case 15: nHighlightColor = 0x808080; break; //dark gray
-            case 16: nHighlightColor = 0xC0C0C0; break; //light gray
-        }
-        CPPUNIT_ASSERT_EQUAL(nHighlightColor, getProperty<sal_Int32>(xRun,"CharHighlight"));
-        CPPUNIT_ASSERT_EQUAL(nBackColor, getProperty<sal_Int32>(xRun,"CharBackColor"));
-    }
-
-    // Only highlight
-    {
-        const uno::Reference<beans::XPropertySet> xRun(getRun(xPara,17), uno::UNO_QUERY);
-        CPPUNIT_ASSERT_EQUAL(sal_Int32(0xC0C0C0), getProperty<sal_Int32>(xRun,"CharHighlight"));
-        CPPUNIT_ASSERT_EQUAL(sal_Int32(COL_TRANSPARENT), getProperty<sal_Int32>(xRun,"CharBackColor"));
-    }
-
-    // Only background
-    {
-        const uno::Reference<beans::XPropertySet> xRun(getRun(xPara,18), uno::UNO_QUERY);
-        CPPUNIT_ASSERT_EQUAL(sal_Int32(COL_TRANSPARENT), getProperty<sal_Int32>(xRun,"CharHighlight"));
-        CPPUNIT_ASSERT_EQUAL(sal_Int32(0x0000ff), getProperty<sal_Int32>(xRun,"CharBackColor"));
-    }
-}
-
-
 DECLARE_OOXMLEXPORT_TEST(testFontNameIsEmpty, "font-name-is-empty.docx")
 {
     // Check no empty font name is exported
diff --git a/sw/qa/extras/rtfexport/data/fdo79599.rtf b/sw/qa/extras/rtfexport/data/fdo79599.rtf
deleted file mode 100644
index f908709..0000000
--- a/sw/qa/extras/rtfexport/data/fdo79599.rtf
+++ /dev/null
@@ -1,38 +0,0 @@
-{\rtf1\deff0
-{\fonttbl
-{\f000 Courier New;}
-}
-{\colortbl;
-\red0\green0\blue0;
-\red255\green255\blue0;
-\red0\green255\blue0;
-\red0\green255\blue255;
-\red255\green0\blue255;
-\red0\green0\blue255;
-\red255\green0\blue0;
-\red0\green0\blue128;
-\red0\green128\blue128;
-\red0\green128\blue0;
-\red128\green0\blue128;
-\red128\green0\blue0;
-\red128\green128\blue0;
-\red128\green128\blue128;
-\red192\green192\blue192;
-}
-\highlight0 Should be ignored\par
-\highlight2 #FFFF00 = Yellow\par
-\highlight3 #00FF00 = Green\par
-\highlight4 #00FFFF = Cyan\par
-\highlight5 #FF00FF = Magenta\par
-\highlight6 #0000FF = Blue\par
-\highlight7 #FF0000 = Red\par
-\highlight8 #000080 = Dark blue\par
-\highlight9 #008080 = Dark cyan\par
-\highlight10 #008000 = Dark green\par
-\highlight11 #800080 = Dark magenta\par
-\highlight12 #800000 = Dark red\par
-\highlight13 #808000 = Dark yellow\par
-\highlight14 #808080 = Dark gray\par
-\highlight15 #C0C0C0 = Light gray\par
-\highlight1 #000000 = Black\par
-}
diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx
index f056208..d14d951 100644
--- a/sw/qa/extras/rtfexport/rtfexport.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport.cxx
@@ -670,15 +670,6 @@ DECLARE_RTFEXPORT_TEST(testFdo77600, "fdo77600.rtf")
     CPPUNIT_ASSERT_EQUAL(OUString("Arial"), getProperty<OUString>(getRun(getParagraph(1), 3), "CharFontName"));
 }
 
-DECLARE_RTFEXPORT_TEST(testFdo79599, "fdo79599.rtf")
-{
-    // test for \highlightNN, document has full \colortbl (produced in MS Word 2003 or 2007)
-
-    // test \highlight11 = dark magenta
-    uno::Reference<beans::XPropertySet> xRun(getRun(getParagraph(11),1), uno::UNO_QUERY);
-    CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x800080), getProperty<sal_uInt32>(xRun, "CharBackColor"));
-}
-
 DECLARE_RTFEXPORT_TEST(testFdo80167, "fdo80167.rtf")
 {
     // Problem was that after export, the page break was missing, so this was 1.
diff --git a/sw/qa/extras/rtfimport/data/fdo79599.rtf b/sw/qa/extras/rtfimport/data/fdo79599.rtf
deleted file mode 100644
index f908709..0000000
--- a/sw/qa/extras/rtfimport/data/fdo79599.rtf
+++ /dev/null
@@ -1,38 +0,0 @@
-{\rtf1\deff0
-{\fonttbl
-{\f000 Courier New;}
-}
-{\colortbl;
-\red0\green0\blue0;
-\red255\green255\blue0;
-\red0\green255\blue0;
-\red0\green255\blue255;
-\red255\green0\blue255;
-\red0\green0\blue255;
-\red255\green0\blue0;
-\red0\green0\blue128;
-\red0\green128\blue128;
-\red0\green128\blue0;
-\red128\green0\blue128;
-\red128\green0\blue0;
-\red128\green128\blue0;
-\red128\green128\blue128;
-\red192\green192\blue192;
-}
-\highlight0 Should be ignored\par
-\highlight2 #FFFF00 = Yellow\par
-\highlight3 #00FF00 = Green\par
-\highlight4 #00FFFF = Cyan\par
-\highlight5 #FF00FF = Magenta\par
-\highlight6 #0000FF = Blue\par
-\highlight7 #FF0000 = Red\par
-\highlight8 #000080 = Dark blue\par
-\highlight9 #008080 = Dark cyan\par
-\highlight10 #008000 = Dark green\par
-\highlight11 #800080 = Dark magenta\par
-\highlight12 #800000 = Dark red\par
-\highlight13 #808000 = Dark yellow\par
-\highlight14 #808080 = Dark gray\par
-\highlight15 #C0C0C0 = Light gray\par
-\highlight1 #000000 = Black\par
-}
diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx
index 90ef8d3..71e5095 100644
--- a/sw/qa/extras/rtfimport/rtfimport.cxx
+++ b/sw/qa/extras/rtfimport/rtfimport.cxx
@@ -604,59 +604,6 @@ DECLARE_RTFIMPORT_TEST(testFdo50539, "fdo50539.rtf")
     CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), getProperty<sal_Int32>(getRun(getParagraph(1), 1), "CharBackColor"));
 }
 
-DECLARE_RTFIMPORT_TEST(testFdo79599, "fdo79599.rtf")
-{
-    // test for \highlightNN, document has full \colortbl (produced in MS Word 2003 or 2007)
-
-    // ignore \highlight0
-    CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), getProperty<sal_Int32>(getRun(getParagraph(1), 1), "CharBackColor"));
-
-    // test \highlight2 = yellow
-    CPPUNIT_ASSERT_EQUAL(sal_uInt32(0xFFFF00), getProperty<sal_uInt32>(getRun(getParagraph(2), 1), "CharBackColor"));
-
-    // test \highlight3 = green
-    CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x00FF00), getProperty<sal_uInt32>(getRun(getParagraph(3), 1), "CharBackColor"));
-
-    // test \highlight4 = cyan
-    CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x00FFFF), getProperty<sal_uInt32>(getRun(getParagraph(4), 1), "CharBackColor"));
-
-    // test \highlight5 = magenta
-    CPPUNIT_ASSERT_EQUAL(sal_uInt32(0xFF00FF), getProperty<sal_uInt32>(getRun(getParagraph(5), 1), "CharBackColor"));
-
-    // test \highlight6 = blue
-    CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x0000FF), getProperty<sal_uInt32>(getRun(getParagraph(6), 1), "CharBackColor"));
-
-    // test \highlight7 = red
-    CPPUNIT_ASSERT_EQUAL(sal_uInt32(0xFF0000), getProperty<sal_uInt32>(getRun(getParagraph(7), 1), "CharBackColor"));
-
-    // test \highlight8 = dark blue
-    CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x000080), getProperty<sal_uInt32>(getRun(getParagraph(8), 1), "CharBackColor"));
-
-    // test \highlight9 = dark cyan
-    CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x008080), getProperty<sal_uInt32>(getRun(getParagraph(9), 1), "CharBackColor"));
-
-    // test \highlight10 = dark green
-    CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x008000), getProperty<sal_uInt32>(getRun(getParagraph(10), 1), "CharBackColor"));
-
-    // test \highlight11 = dark magenta
-    CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x800080), getProperty<sal_uInt32>(getRun(getParagraph(11), 1), "CharBackColor"));
-
-    // test \highlight12 = dark red
-    CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x800000), getProperty<sal_uInt32>(getRun(getParagraph(12), 1), "CharBackColor"));
-
-    // test \highlight13 = dark yellow
-    CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x808000), getProperty<sal_uInt32>(getRun(getParagraph(13), 1), "CharBackColor"));
-
-    // test \highlight14 = dark gray
-    CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x808080), getProperty<sal_uInt32>(getRun(getParagraph(14), 1), "CharBackColor"));
-
-    // test \highlight15 = light gray
-    CPPUNIT_ASSERT_EQUAL(sal_uInt32(0xC0C0C0), getProperty<sal_uInt32>(getRun(getParagraph(15), 1), "CharBackColor"));
-
-    // test \highlight1 = black
-    CPPUNIT_ASSERT_EQUAL(sal_uInt32(0x000000), getProperty<sal_uInt32>(getRun(getParagraph(16), 1), "CharBackColor"));
-}
-
 DECLARE_RTFIMPORT_TEST(testFdo50665, "fdo50665.rtf")
 {
     // Access the second run, which is a textfield
@@ -1211,8 +1158,7 @@ DECLARE_RTFIMPORT_TEST(testFdo61909, "fdo61909.rtf")
     uno::Reference<text::XTextRange> xTextRange = getRun(getParagraph(1), 1);
     // Was the Writer default font.
     CPPUNIT_ASSERT_EQUAL(OUString("Courier New"), getProperty<OUString>(xTextRange, "CharFontName"));
-    // It is white (0xFFFFFF) in document
-    CPPUNIT_ASSERT_EQUAL(sal_uInt32(0xFFFFFF), getProperty<sal_uInt32>(xTextRange, "CharBackColor"));
+    CPPUNIT_ASSERT_EQUAL(COL_AUTO, getProperty<sal_uInt32>(xTextRange, "CharBackColor"));
 }
 
 DECLARE_RTFIMPORT_TEST(testFdo62288, "fdo62288.rtf")
diff --git a/sw/source/filter/ww8/rtfattributeoutput.cxx b/sw/source/filter/ww8/rtfattributeoutput.cxx
index d65c450..256eb46 100644
--- a/sw/source/filter/ww8/rtfattributeoutput.cxx
+++ b/sw/source/filter/ww8/rtfattributeoutput.cxx
@@ -2302,7 +2302,7 @@ void RtfAttributeOutput::CharBackground(const SvxBrushItem& rBrush)
 {
     if (!rBrush.GetColor().GetTransparency())
     {
-        m_aStyles.append(OOO_STRING_SVTOOLS_RTF_HIGHLIGHT);
+        m_aStyles.append(OOO_STRING_SVTOOLS_RTF_CHCBPAT);
         m_aStyles.append((sal_Int32)m_rExport.GetColor(rBrush.GetColor()));
     }
 }
@@ -2467,6 +2467,15 @@ void RtfAttributeOutput::CharBorder(const SvxBorderLine* pAllBorder, const sal_u
     m_aStyles.append(OutBorderLine(m_rExport, pAllBorder, OOO_STRING_SVTOOLS_RTF_CHBRDR, nDist, bShadow ? SVX_SHADOW_BOTTOMRIGHT : SVX_SHADOW_NONE));
 }
 
+void RtfAttributeOutput::CharHighlight(const SvxBrushItem& rBrush)
+{
+    if (!rBrush.GetColor().GetTransparency())
+    {
+        m_aStyles.append(OOO_STRING_SVTOOLS_RTF_HIGHLIGHT);
+        m_aStyles.append((sal_Int32)m_rExport.GetColor(rBrush.GetColor()));
+    }
+}
+
 void RtfAttributeOutput::TextINetFormat(const SwFmtINetFmt& rURL)
 {
     if (!rURL.GetValue().isEmpty())
diff --git a/sw/source/filter/ww8/rtfattributeoutput.hxx b/sw/source/filter/ww8/rtfattributeoutput.hxx
index a056849..b63ab3c 100644
--- a/sw/source/filter/ww8/rtfattributeoutput.hxx
+++ b/sw/source/filter/ww8/rtfattributeoutput.hxx
@@ -328,7 +328,7 @@ protected:
     virtual void CharBorder(const ::editeng::SvxBorderLine* pAllBorder, const sal_uInt16 nDist, const bool bShadow) SAL_OVERRIDE;
 
     /// Sfx item RES_CHRATR_HIGHLIGHT
-    virtual void CharHighlight(const SvxBrushItem&) SAL_OVERRIDE {};
+    virtual void CharHighlight(const SvxBrushItem&) SAL_OVERRIDE;
 
     /// Sfx item RES_TXTATR_INETFMT
     virtual void TextINetFormat(const SwFmtINetFmt&) SAL_OVERRIDE;
diff --git a/sw/source/filter/ww8/rtfexport.cxx b/sw/source/filter/ww8/rtfexport.cxx
index a8b991b..8b1ae6d 100644
--- a/sw/source/filter/ww8/rtfexport.cxx
+++ b/sw/source/filter/ww8/rtfexport.cxx
@@ -976,7 +976,7 @@ void RtfExport::OutColorTable()
     // background color
     static const sal_uInt16 aBrushIds[] =
     {
-        RES_BACKGROUND, RES_CHRATR_BACKGROUND, 0
+        RES_BACKGROUND, RES_CHRATR_BACKGROUND, RES_CHRATR_HIGHLIGHT, 0
     };
 
     for (const sal_uInt16* pIds = aBrushIds; *pIds; ++pIds)
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 6ac1ef2..588b24c 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -102,7 +102,7 @@ LoggedProperties(dmapper_logger, "DomainMapper"),
 LoggedTable(dmapper_logger, "DomainMapper"),
 LoggedStream(dmapper_logger, "DomainMapper"),
     m_pImpl( new DomainMapper_Impl( *this, xContext, xModel, eDocumentType, xInsertTextRange, !rMediaDesc.getUnpackedValueOrDefault("InsertMode", false))),
-    mnBackgroundColor(0), mbIsHighlightSet(false), mbIsSplitPara(false)
+    mbIsSplitPara(false)
 {
     // #i24363# tab stops relative to indent
     m_pImpl->SetDocumentSettingsProperty(
@@ -1412,13 +1412,18 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext )
         break;
     case NS_ooxml::LN_EG_RPrBase_highlight:
         {
-            sal_Int32 nColor = 0;
-            if( (mbIsHighlightSet = getColorFromId(nIntValue, nColor)) )
-                rContext->Insert(PROP_CHAR_HIGHLIGHT, uno::makeAny( nColor ));
-            else if (mnBackgroundColor)
-                rContext->Insert(PROP_CHAR_BACK_COLOR, uno::makeAny( mnBackgroundColor ));
-            else
-                rContext->Insert(PROP_CHAR_BACK_COLOR, uno::makeAny( nIntValue ));
+            // OOXML import uses an ID
+            if( IsOOXMLImport() )
+            {
+                sal_Int32 nColor = 0;
+                if( getColorFromId(nIntValue, nColor) )
+                    rContext->Insert(PROP_CHAR_HIGHLIGHT, uno::makeAny( nColor ));
+            }
+            // RTF import uses the actual color value
+            else if( IsRTFImport() )
+            {
+                rContext->Insert(PROP_CHAR_HIGHLIGHT, uno::makeAny( nIntValue ));
+            }
         }
         break;
     case NS_ooxml::LN_EG_RPrBase_em:
diff --git a/writerfilter/source/dmapper/DomainMapper.hxx b/writerfilter/source/dmapper/DomainMapper.hxx
index 2c20658..08c295b 100644
--- a/writerfilter/source/dmapper/DomainMapper.hxx
+++ b/writerfilter/source/dmapper/DomainMapper.hxx
@@ -170,8 +170,6 @@ private:
     OUString getBracketStringFromEnum(const sal_Int32 nIntValue, const bool bIsPrefix = true);
     com::sun::star::style::TabAlign getTabAlignFromValue(const sal_Int32 nIntValue);
     sal_Unicode getFillCharFromValue(const sal_Int32 nIntValue);
-    sal_Int32 mnBackgroundColor;
-    bool mbIsHighlightSet;
     bool mbIsSplitPara;
     boost::scoped_ptr< GraphicZOrderHelper > zOrderHelper;
 };
commit 7e1739ca5d973a3534304afadb21edbcd1cc5fef
Author: Zolnai Tamás <zolnaitamas2000 at gmail.com>
Date:   Sat Feb 21 10:14:26 2015 +0100

    Char highlight: enable DOCX import
    
    Change-Id: Ifde33d53198306eac845db6c269d337fa051f6ab

diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx
index b5e3ff4..0036db9 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport3.cxx
@@ -469,7 +469,7 @@ DECLARE_OOXMLEXPORT_TEST(testSmartart, "smartart.docx")
     CPPUNIT_ASSERT_EQUAL(OUString("RenderedShapes"), nValue); // Rendered bitmap has the proper name
 }
 
-/*
+
 DECLARE_OOXMLEXPORT_TEST(testCharHighlight, "char_highlight.docx")
 {
     const uno::Reference< text::XTextRange > xPara = getParagraph(1);
@@ -516,7 +516,7 @@ DECLARE_OOXMLEXPORT_TEST(testCharHighlight, "char_highlight.docx")
         CPPUNIT_ASSERT_EQUAL(sal_Int32(0x0000ff), getProperty<sal_Int32>(xRun,"CharBackColor"));
     }
 }
-*/
+
 
 DECLARE_OOXMLEXPORT_TEST(testFontNameIsEmpty, "font-name-is-empty.docx")
 {
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 4e2bf14..6ac1ef2 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -1414,7 +1414,7 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext )
         {
             sal_Int32 nColor = 0;
             if( (mbIsHighlightSet = getColorFromId(nIntValue, nColor)) )
-                rContext->Insert(PROP_CHAR_BACK_COLOR, uno::makeAny( nColor ));
+                rContext->Insert(PROP_CHAR_HIGHLIGHT, uno::makeAny( nColor ));
             else if (mnBackgroundColor)
                 rContext->Insert(PROP_CHAR_BACK_COLOR, uno::makeAny( mnBackgroundColor ));
             else


More information about the Libreoffice-commits mailing list