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

Miklos Vajna vmiklos at collabora.co.uk
Mon Nov 4 12:43:12 CET 2013


 sw/qa/extras/ooxmlexport/data/calendar2.docx  |binary
 sw/qa/extras/ooxmlexport/ooxmlexport.cxx      |    4 ++++
 sw/source/filter/ww8/docxtablestyleexport.cxx |   16 +++++++++++++++-
 writerfilter/source/dmapper/DomainMapper.cxx  |    6 ++++++
 4 files changed, 25 insertions(+), 1 deletion(-)

New commits:
commit 832586588c3ed5f1686a4ecebc2ed198ce049b24
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Mon Nov 4 11:16:36 2013 +0100

    DOCX filter: more run properties table style roundtrip work
    
    Implement roundtrip of smallCaps, spacing, caps and color's themeColor
    attribute.
    
    Change-Id: I1ac88de030356a5ce08a28ac16cd159a426d2be9

diff --git a/sw/qa/extras/ooxmlexport/data/calendar2.docx b/sw/qa/extras/ooxmlexport/data/calendar2.docx
index e89222f..4e7d4ed 100644
Binary files a/sw/qa/extras/ooxmlexport/data/calendar2.docx and b/sw/qa/extras/ooxmlexport/data/calendar2.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index b4ecd7d..c7498d43 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -1332,6 +1332,10 @@ DECLARE_OOXML_TEST(testCalendar2, "calendar2.docx")
     // These run properties were missing
     assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar2']/w:rPr/w:lang", "val", "en-US");
     assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar2']/w:rPr/w:lang", "bidi", "ar-SA");
+    assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar2']/w:tblStylePr[@w:type='firstRow']/w:rPr/w:caps", 1);
+    assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar2']/w:tblStylePr[@w:type='firstRow']/w:rPr/w:smallCaps", "val", "0");
+    assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar2']/w:tblStylePr[@w:type='firstRow']/w:rPr/w:color", "themeColor", "accent1");
+    assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar2']/w:tblStylePr[@w:type='firstRow']/w:rPr/w:spacing", "val", "20");
 
     // Table borders were also missing
     assertXPath(pXmlStyles, "/w:styles/w:style[@w:styleId='Calendar2']/w:tblPr/w:tblBorders/w:insideV", "themeTint", "99");
diff --git a/sw/source/filter/ww8/docxtablestyleexport.cxx b/sw/source/filter/ww8/docxtablestyleexport.cxx
index cc92461..f909876 100644
--- a/sw/source/filter/ww8/docxtablestyleexport.cxx
+++ b/sw/source/filter/ww8/docxtablestyleexport.cxx
@@ -174,6 +174,8 @@ void lcl_TableStyleRColor(sax_fastparser::FSHelperPtr pSerializer, uno::Sequence
     {
         if (rColor[i].Name == "val")
             pAttributeList->add(FSNS(XML_w, XML_val), OUStringToOString(rColor[i].Value.get<OUString>(), RTL_TEXTENCODING_UTF8).getStr());
+        else if (rColor[i].Name == "themeColor")
+            pAttributeList->add(FSNS(XML_w, XML_themeColor), OUStringToOString(rColor[i].Value.get<OUString>(), RTL_TEXTENCODING_UTF8).getStr());
     }
     sax_fastparser::XFastAttributeListRef xAttributeList(pAttributeList);
     pSerializer->singleElementNS(XML_w, XML_color, xAttributeList);
@@ -285,7 +287,7 @@ void lcl_TableStyleRPr(sax_fastparser::FSHelperPtr pSerializer, uno::Sequence<be
     pSerializer->startElementNS(XML_w, XML_rPr, FSEND);
 
     uno::Sequence<beans::PropertyValue> aRFonts, aLang, aColor;
-    OUString aB, aI, aSz, aSzCs;
+    OUString aB, aI, aSz, aSzCs, aCaps, aSmallCaps, aSpacing;
     for (sal_Int32 i = 0; i < rRPr.getLength(); ++i)
     {
         if (rRPr[i].Name == "rFonts")
@@ -302,12 +304,24 @@ void lcl_TableStyleRPr(sax_fastparser::FSHelperPtr pSerializer, uno::Sequence<be
             aSz = rRPr[i].Value.get<OUString>();
         else if (rRPr[i].Name == "szCs")
             aSzCs = rRPr[i].Value.get<OUString>();
+        else if (rRPr[i].Name == "caps")
+            aCaps = rRPr[i].Value.get<OUString>();
+        else if (rRPr[i].Name == "smallCaps")
+            aSmallCaps = rRPr[i].Value.get<OUString>();
+        else if (rRPr[i].Name == "spacing")
+            aSpacing = rRPr[i].Value.get<OUString>();
     }
     lcl_TableStyleRRFonts(pSerializer, aRFonts);
     lcl_TableStyleRLang(pSerializer, aLang);
     lcl_handleBoolean(aB, XML_b, pSerializer);
     lcl_handleBoolean(aI, XML_i, pSerializer);
+    lcl_handleBoolean(aCaps, XML_caps, pSerializer);
+    lcl_handleBoolean(aSmallCaps, XML_smallCaps, pSerializer);
     lcl_TableStyleRColor(pSerializer, aColor);
+    if (!aSpacing.isEmpty())
+        pSerializer->singleElementNS(XML_w, XML_spacing,
+                FSNS(XML_w, XML_val), OUStringToOString(aSpacing, RTL_TEXTENCODING_UTF8).getStr(),
+                FSEND);
     if (!aSz.isEmpty())
         pSerializer->singleElementNS(XML_w, XML_sz,
                 FSNS(XML_w, XML_val), OUStringToOString(aSz, RTL_TEXTENCODING_UTF8).getStr(),
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index 0d48d99..d026fa5 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -20,6 +20,7 @@
 
 #include <resourcemodel/ResourceModelHelper.hxx>
 #include <SdtHelper.hxx>
+#include <TDefTableHandler.hxx>
 #include <DomainMapper_Impl.hxx>
 #include <ConversionHelper.hxx>
 #include <ModelEventListener.hxx>
@@ -1440,6 +1441,8 @@ void DomainMapper::lcl_attribute(Id nName, Value & val)
         case NS_ooxml::LN_CT_FtnEdnRef_id:
             // footnote or endnote reference id - not needed
         case NS_ooxml::LN_CT_Color_themeColor:
+            m_pImpl->appendGrabBag(m_pImpl->m_aSubInteropGrabBag, "themeColor", TDefTableHandler::getThemeColorTypeString(nIntValue));
+        break;
         case NS_ooxml::LN_CT_Color_themeTint:
         case NS_ooxml::LN_CT_Color_themeShade:
             //unsupported
@@ -2196,10 +2199,12 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType
                     case NS_sprm::LN_CFSmallCaps: /*sprmCFSmallCaps*/
                         rContext->Insert(ePropertyId,
                                          uno::makeAny( nIntValue ? style::CaseMap::SMALLCAPS : style::CaseMap::NONE));
+                        m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "smallCaps", OUString::number(nIntValue));
                     break;
                     case NS_sprm::LN_CFCaps: /*sprmCFCaps*/
                         rContext->Insert(ePropertyId,
                                          uno::makeAny( nIntValue ? style::CaseMap::UPPERCASE : style::CaseMap::NONE));
+                        m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "caps", OUString::number(nIntValue));
                     break;
                     case NS_sprm::LN_CFEmboss: /*sprmCFEmboss*/
                         rContext->Insert(ePropertyId,
@@ -2305,6 +2310,7 @@ void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType
                 nResult = static_cast<sal_Int16>(nIntValue);
             }
             rContext->Insert(PROP_CHAR_CHAR_KERNING, uno::makeAny(nResult));
+            m_pImpl->appendGrabBag(m_pImpl->m_aInteropGrabBag, "spacing", OUString::number(nIntValue));
         }
         break;
     case NS_sprm::LN_CHpsKern:  // sprmCHpsKern    auto kerning is bound to a minimum font size in Word - but not in Writer :-(


More information about the Libreoffice-commits mailing list