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

Miklos Vajna vmiklos at collabora.co.uk
Sat Dec 28 01:01:13 PST 2013


 oox/source/shape/WpsContext.cxx                |  108 ++++++++++++-------------
 oox/source/shape/WpsContext.hxx                |    8 +
 sw/qa/extras/rtfimport/data/fdo65090.rtf       |    6 +
 sw/qa/extras/rtfimport/rtfimport.cxx           |   10 ++
 writerfilter/source/rtftok/rtfdocumentimpl.cxx |   12 ++
 5 files changed, 90 insertions(+), 54 deletions(-)

New commits:
commit 6eb02ac8a77f9f89f256b190281029f6cbd60d95
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Sat Dec 28 09:55:33 2013 +0100

    fdo#65090 RTF filter: import RTF_CLMGF and RTF_CLMRG
    
    These describe an explicit horizontal merge, that is not something Word
    itself creates, but it turns out the Calc RTF export does.
    
    Change-Id: I1b6ec10bb8e8bd40e24791ccc96f2f066dd0d5d5

diff --git a/sw/qa/extras/rtfimport/data/fdo65090.rtf b/sw/qa/extras/rtfimport/data/fdo65090.rtf
new file mode 100644
index 0000000..8a3eabd
--- /dev/null
+++ b/sw/qa/extras/rtfimport/data/fdo65090.rtf
@@ -0,0 +1,6 @@
+{\rtf\ansi
+{
+\trowd\trgaph30\trleft-30\trrh242\clmgf\clvertalc\cellx1280\clmrg\clvertalb\cellx2560\clvertalb\cellx3840\pard\plain\intbl
+\qc a\cell\cell\ql b\cell\row
+}
+}
diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx
index 4a9978e..2764730 100644
--- a/sw/qa/extras/rtfimport/rtfimport.cxx
+++ b/sw/qa/extras/rtfimport/rtfimport.cxx
@@ -1379,6 +1379,16 @@ DECLARE_RTFIMPORT_TEST(testCp1000016, "hello.rtf")
     CPPUNIT_ASSERT_EQUAL(false, bFound);
 }
 
+DECLARE_RTFIMPORT_TEST(testFdo65090, "fdo65090.rtf")
+{
+    uno::Reference<text::XTextTablesSupplier> xTablesSupplier(mxComponent, uno::UNO_QUERY);
+    uno::Reference<container::XIndexAccess> xTables(xTablesSupplier->getTextTables( ), uno::UNO_QUERY);
+    uno::Reference<text::XTextTable> xTextTable(xTables->getByIndex(0), uno::UNO_QUERY);
+    uno::Reference<table::XTableRows> xTableRows(xTextTable->getRows(), uno::UNO_QUERY);
+    // The first row had 3 cells, instead of a horizontally merged one and a normal one (2 -> 1 separator).
+    CPPUNIT_ASSERT_EQUAL(sal_Int32(1), getProperty< uno::Sequence<text::TableColumnSeparator> >(xTableRows->getByIndex(0), "TableColumnSeparators").getLength());
+}
+
 CPPUNIT_PLUGIN_IMPLEMENT();
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 810844f..2e56c62 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -2449,6 +2449,18 @@ int RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword)
                 m_aStates.top().nBorderState = BORDER_CHARACTER;
             }
             break;
+        case RTF_CLMGF:
+        {
+            RTFValue::Pointer_t pValue(new RTFValue(NS_ooxml::LN_Value_ST_Merge_restart));
+            m_aStates.top().aTableCellSprms.set(NS_ooxml::LN_CT_TcPrBase_hMerge, pValue);
+        }
+        break;
+        case RTF_CLMRG:
+        {
+            RTFValue::Pointer_t pValue(new RTFValue(NS_ooxml::LN_Value_ST_Merge_continue));
+            m_aStates.top().aTableCellSprms.set(NS_ooxml::LN_CT_TcPrBase_hMerge, pValue);
+        }
+        break;
         case RTF_CLVMGF:
             {
                 RTFValue::Pointer_t pValue(new RTFValue(NS_ooxml::LN_Value_ST_Merge_restart));
commit c7662eea858d4c1edc7f7600fa102cedc386417f
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Sat Dec 28 09:57:01 2013 +0100

    oox: whitespace fixes in WpsContext
    
    Change-Id: Idcd4409a02a5b0dc5f7b67d2a482bf4fe30f579c

diff --git a/oox/source/shape/WpsContext.cxx b/oox/source/shape/WpsContext.cxx
index c5d233e..44fc1e6 100644
--- a/oox/source/shape/WpsContext.cxx
+++ b/oox/source/shape/WpsContext.cxx
@@ -14,11 +14,14 @@
 
 using namespace com::sun::star;
 
-namespace oox { namespace shape {
+namespace oox
+{
+namespace shape
+{
 
 WpsContext::WpsContext(ContextHandler2Helper& rParent, uno::Reference<drawing::XShape> xShape)
     : ContextHandler2(rParent),
-    mxShape(xShape)
+      mxShape(xShape)
 {
     mpShape.reset(new oox::drawingml::Shape("com.sun.star.drawing.CustomShape"));
     mpShape->setWps(true);
@@ -37,64 +40,65 @@ oox::core::ContextHandlerRef WpsContext::onCreateContext(sal_Int32 nElementToken
 {
     switch (getBaseToken(nElementToken))
     {
-        case XML_wsp:
-            break;
-        case XML_cNvCnPr:
-            break;
-        case XML_cNvSpPr:
-            break;
-        case XML_spPr:
-            return new oox::drawingml::ShapePropertiesContext(*this, *mpShape);
-            break;
-        case XML_style:
-            return new oox::drawingml::ShapeStyleContext(*this, *mpShape);
-            break;
-        case XML_bodyPr:
-            if (mxShape.is())
+    case XML_wsp:
+        break;
+    case XML_cNvCnPr:
+        break;
+    case XML_cNvSpPr:
+        break;
+    case XML_spPr:
+        return new oox::drawingml::ShapePropertiesContext(*this, *mpShape);
+        break;
+    case XML_style:
+        return new oox::drawingml::ShapeStyleContext(*this, *mpShape);
+        break;
+    case XML_bodyPr:
+        if (mxShape.is())
+        {
+            OptValue<OUString> oVert = rAttribs.getString(XML_vert);
+            if (oVert.has() && oVert.get() == "vert270")
             {
-                OptValue<OUString> oVert = rAttribs.getString(XML_vert);
-                if (oVert.has() && oVert.get() == "vert270")
+                // No support for this in core, work around by char rotation, as we do so for table cells already.
+                uno::Reference<text::XText> xText(mxShape, uno::UNO_QUERY);
+                uno::Reference<text::XTextCursor> xTextCursor = xText->createTextCursor();
+                xTextCursor->gotoStart(false);
+                xTextCursor->gotoEnd(true);
+                uno::Reference<beans::XPropertyState> xPropertyState(xTextCursor, uno::UNO_QUERY);
+                beans::PropertyState aState = xPropertyState->getPropertyState("CharRotation");
+                if (aState == beans::PropertyState_DEFAULT_VALUE)
                 {
-                    // No support for this in core, work around by char rotation, as we do so for table cells already.
-                    uno::Reference<text::XText> xText(mxShape, uno::UNO_QUERY);
-                    uno::Reference<text::XTextCursor> xTextCursor = xText->createTextCursor();
-                    xTextCursor->gotoStart(false);
-                    xTextCursor->gotoEnd(true);
-                    uno::Reference<beans::XPropertyState> xPropertyState(xTextCursor, uno::UNO_QUERY);
-                    beans::PropertyState aState = xPropertyState->getPropertyState("CharRotation");
-                    if (aState == beans::PropertyState_DEFAULT_VALUE)
-                    {
-                        uno::Reference<beans::XPropertySet> xPropertySet(xTextCursor, uno::UNO_QUERY);
-                        xPropertySet->setPropertyValue("CharRotation", uno::makeAny(sal_Int16(900)));
-                    }
+                    uno::Reference<beans::XPropertySet> xPropertySet(xTextCursor, uno::UNO_QUERY);
+                    xPropertySet->setPropertyValue("CharRotation", uno::makeAny(sal_Int16(900)));
                 }
+            }
 
-                // Handle inset attributes for Writer textframes.
-                sal_Int32 aInsets[] = { XML_lIns, XML_tIns, XML_rIns, XML_bIns };
-                boost::optional<sal_Int32> oInsets[4];
-                for (size_t i = 0; i < SAL_N_ELEMENTS(aInsets); ++i)
-                {
-                    OptValue<OUString> oValue = rAttribs.getString(aInsets[i]);
-                    if (oValue.has())
-                        oInsets[i] = oox::drawingml::GetCoordinate(oValue.get());
-                }
-                OUString aProps[] = { OUString("LeftBorderDistance"), OUString("TopBorderDistance"), OUString("RightBorderDistance"), OUString("BottomBorderDistance") };
-                uno::Reference<beans::XPropertySet> xPropertySet(mxShape, uno::UNO_QUERY);
-                for (size_t i = 0; i < SAL_N_ELEMENTS(aProps); ++i)
-                    if (oInsets[i])
-                        xPropertySet->setPropertyValue(aProps[i], uno::makeAny(*oInsets[i]));
+            // Handle inset attributes for Writer textframes.
+            sal_Int32 aInsets[] = { XML_lIns, XML_tIns, XML_rIns, XML_bIns };
+            boost::optional<sal_Int32> oInsets[4];
+            for (size_t i = 0; i < SAL_N_ELEMENTS(aInsets); ++i)
+            {
+                OptValue<OUString> oValue = rAttribs.getString(aInsets[i]);
+                if (oValue.has())
+                    oInsets[i] = oox::drawingml::GetCoordinate(oValue.get());
             }
-            break;
-        case XML_txbx:
-            mpShape->setServiceName("com.sun.star.text.TextFrame");
-            break;
-        default:
-            SAL_WARN("oox", "WpsContext::createFastChildContext: unhandled element:" << getBaseToken(nElementToken));
-            break;
+            OUString aProps[] = { OUString("LeftBorderDistance"), OUString("TopBorderDistance"), OUString("RightBorderDistance"), OUString("BottomBorderDistance") };
+            uno::Reference<beans::XPropertySet> xPropertySet(mxShape, uno::UNO_QUERY);
+            for (size_t i = 0; i < SAL_N_ELEMENTS(aProps); ++i)
+                if (oInsets[i])
+                    xPropertySet->setPropertyValue(aProps[i], uno::makeAny(*oInsets[i]));
+        }
+        break;
+    case XML_txbx:
+        mpShape->setServiceName("com.sun.star.text.TextFrame");
+        break;
+    default:
+        SAL_WARN("oox", "WpsContext::createFastChildContext: unhandled element:" << getBaseToken(nElementToken));
+        break;
     }
     return 0;
 }
 
-} }
+}
+}
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/oox/source/shape/WpsContext.hxx b/oox/source/shape/WpsContext.hxx
index b7f97f8..aafc77a 100644
--- a/oox/source/shape/WpsContext.hxx
+++ b/oox/source/shape/WpsContext.hxx
@@ -13,7 +13,10 @@
 #include "oox/core/contexthandler2.hxx"
 #include "oox/drawingml/shape.hxx"
 
-namespace oox { namespace shape {
+namespace oox
+{
+namespace shape
+{
 
 /// Wps is the drawingML equivalent of v:shape.
 class WpsContext : public oox::core::ContextHandler2
@@ -32,7 +35,8 @@ protected:
 };
 
 
-} }
+}
+}
 
 #endif
 


More information about the Libreoffice-commits mailing list