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

Miklos Vajna vmiklos at collabora.co.uk
Sun Apr 6 09:14:41 PDT 2014


 sw/qa/extras/rtfexport/data/linenumbering.rtf  |    8 +++
 sw/qa/extras/rtfexport/rtfexport.cxx           |    8 +++
 writerfilter/source/rtftok/rtfdocumentimpl.cxx |   65 ++++++++++++-------------
 writerfilter/source/rtftok/rtfsprm.cxx         |    8 +--
 writerfilter/source/rtftok/rtfsprm.hxx         |   16 +++---
 5 files changed, 61 insertions(+), 44 deletions(-)

New commits:
commit dcb88d170b6ced0ee805b787c1e9be820ff90d25
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Sun Apr 6 18:05:43 2014 +0200

    Testcase for RtfAttributeOutput::SectionLineNumbering()
    
    lcov pointed out this method wasn't ever invoked in any of the tests.
    
    Change-Id: I6cccf4fc1d870938a2f218bedc0b8d195a299cd1

diff --git a/sw/qa/extras/rtfexport/data/linenumbering.rtf b/sw/qa/extras/rtfexport/data/linenumbering.rtf
new file mode 100644
index 0000000..7cafe2a
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/linenumbering.rtf
@@ -0,0 +1,8 @@
+{\rtf1
+\linemod5\linex283\linecont
+1\par
+2\par
+3\par
+4\par
+5\par
+}
diff --git a/sw/qa/extras/rtfexport/rtfexport.cxx b/sw/qa/extras/rtfexport/rtfexport.cxx
index 0aba10b..3f277cb 100644
--- a/sw/qa/extras/rtfexport/rtfexport.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport.cxx
@@ -611,6 +611,14 @@ DECLARE_RTFEXPORT_TEST(testRelsize, "relsize.rtf")
     CPPUNIT_ASSERT_EQUAL(text::RelOrientation::FRAME, getProperty<sal_Int16>(xShape, "RelativeHeightRelation"));
 }
 
+DECLARE_RTFEXPORT_TEST(testLineNumbering, "linenumbering.rtf")
+{
+    uno::Reference<text::XLineNumberingProperties> xLineNumberingProperties(mxComponent, uno::UNO_QUERY_THROW);
+    uno::Reference<beans::XPropertySet> xPropertySet = xLineNumberingProperties->getLineNumberingProperties();
+    CPPUNIT_ASSERT_EQUAL(true, bool(getProperty<sal_Bool>(xPropertySet, "IsOn")));
+    CPPUNIT_ASSERT_EQUAL(sal_Int32(5), getProperty<sal_Int32>(xPropertySet, "Interval"));
+}
+
 #endif
 
 CPPUNIT_PLUGIN_IMPLEMENT();
commit 69c950ae862f9ea9c5f56d8bdba895fb9a07ff0f
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Sun Apr 6 17:19:03 2014 +0200

    RTFSprms::set: replace two bool arguments with an enum
    
    The primary motivation is that the two bools allow 4 combinations, but
    we only handle 3 of them. Also, caller code is much more readable, now
    that a non-default overwrite mode is written explicitly.
    
    Change-Id: Iedf7dee1ab2d33de849aef6d7a51138d35048e5a

diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 287fb03..39da5cc 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -75,7 +75,7 @@ static Id lcl_getParagraphBorder(sal_uInt32 nIndex)
 }
 
 static void lcl_putNestedAttribute(RTFSprms& rSprms, Id nParent, Id nId, RTFValue::Pointer_t pValue,
-        bool bOverwrite = true, bool bAttribute = true, bool bAppend = true)
+        RTFOverwrite eOverwrite = OVERWRITE_YES, bool bAttribute = true)
 {
     RTFValue::Pointer_t pParent = rSprms.find(nParent);
     if (!pParent.get())
@@ -88,16 +88,16 @@ static void lcl_putNestedAttribute(RTFSprms& rSprms, Id nParent, Id nId, RTFValu
             aAttributes.set(NS_ooxml::LN_CT_Shd_fill, RTFValue::Pointer_t(new RTFValue(0x0a)));
         }
         RTFValue::Pointer_t pParentValue(new RTFValue(aAttributes));
-        rSprms.set(nParent, pParentValue, bOverwrite, bAppend);
+        rSprms.set(nParent, pParentValue, eOverwrite);
         pParent = pParentValue;
     }
     RTFSprms& rAttributes = (bAttribute ? pParent->getAttributes() : pParent->getSprms());
-    rAttributes.set(nId, pValue, bOverwrite, bAppend);
+    rAttributes.set(nId, pValue, eOverwrite);
 }
 
-static void lcl_putNestedSprm(RTFSprms& rSprms, Id nParent, Id nId, RTFValue::Pointer_t pValue, bool bOverwrite = false)
+static void lcl_putNestedSprm(RTFSprms& rSprms, Id nParent, Id nId, RTFValue::Pointer_t pValue, RTFOverwrite eOverwrite = OVERWRITE_NO_APPEND)
 {
-    lcl_putNestedAttribute(rSprms, nParent, nId, pValue, bOverwrite, false);
+    lcl_putNestedAttribute(rSprms, nParent, nId, pValue, eOverwrite, false);
 }
 
 static RTFValue::Pointer_t lcl_getNestedAttribute(RTFSprms& rSprms, Id nParent, Id nId)
@@ -2247,7 +2247,7 @@ void RTFDocumentImpl::restoreTableRowProperties()
 void RTFDocumentImpl::resetTableRowProperties()
 {
     m_aStates.top().aTableRowSprms = m_aDefaultState.aTableRowSprms;
-    m_aStates.top().aTableRowSprms.set(NS_ooxml::LN_CT_TblGridBase_gridCol, RTFValue::Pointer_t(new RTFValue(-1)), false);
+    m_aStates.top().aTableRowSprms.set(NS_ooxml::LN_CT_TblGridBase_gridCol, RTFValue::Pointer_t(new RTFValue(-1)), OVERWRITE_NO_APPEND);
     m_aStates.top().aTableRowAttributes = m_aDefaultState.aTableRowAttributes;
     if (DESTINATION_NESTEDTABLEPROPERTIES == m_aStates.top().nDestinationState)
         m_nNestedCurrentCellX = 0;
@@ -3542,7 +3542,7 @@ int RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam)
 
                 rCurrentCellX = nParam;
                 RTFValue::Pointer_t pXValue(new RTFValue(nCellX));
-                m_aStates.top().aTableRowSprms.set(NS_ooxml::LN_CT_TblGridBase_gridCol, pXValue, false);
+                m_aStates.top().aTableRowSprms.set(NS_ooxml::LN_CT_TblGridBase_gridCol, pXValue, OVERWRITE_NO_APPEND);
                 if (DESTINATION_NESTEDTABLEPROPERTIES == m_aStates.top().nDestinationState)
                 {
                     m_nNestedCells++;
@@ -3622,53 +3622,53 @@ int RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam)
             break;
         case RTF_PAPERH: // fall through: set the default + current value
             lcl_putNestedAttribute(m_aDefaultState.aSectionSprms,
-                    NS_ooxml::LN_EG_SectPrContents_pgSz, NS_ooxml::LN_CT_PageSz_h, pIntValue, true);
+                    NS_ooxml::LN_EG_SectPrContents_pgSz, NS_ooxml::LN_CT_PageSz_h, pIntValue, OVERWRITE_YES);
         case RTF_PGHSXN:
             lcl_putNestedAttribute(m_aStates.top().aSectionSprms,
-                    NS_ooxml::LN_EG_SectPrContents_pgSz, NS_ooxml::LN_CT_PageSz_h, pIntValue, true);
+                    NS_ooxml::LN_EG_SectPrContents_pgSz, NS_ooxml::LN_CT_PageSz_h, pIntValue, OVERWRITE_YES);
             break;
         case RTF_PAPERW: // fall through: set the default + current value
             lcl_putNestedAttribute(m_aDefaultState.aSectionSprms,
-                    NS_ooxml::LN_EG_SectPrContents_pgSz, NS_ooxml::LN_CT_PageSz_w, pIntValue, true);
+                    NS_ooxml::LN_EG_SectPrContents_pgSz, NS_ooxml::LN_CT_PageSz_w, pIntValue, OVERWRITE_YES);
         case RTF_PGWSXN:
             lcl_putNestedAttribute(m_aStates.top().aSectionSprms,
-                    NS_ooxml::LN_EG_SectPrContents_pgSz, NS_ooxml::LN_CT_PageSz_w, pIntValue, true);
+                    NS_ooxml::LN_EG_SectPrContents_pgSz, NS_ooxml::LN_CT_PageSz_w, pIntValue, OVERWRITE_YES);
             break;
         case RTF_MARGL: // fall through: set the default + current value
             lcl_putNestedAttribute(m_aDefaultState.aSectionSprms,
-                    NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_left, pIntValue, true);
+                    NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_left, pIntValue, OVERWRITE_YES);
         case RTF_MARGLSXN:
             lcl_putNestedAttribute(m_aStates.top().aSectionSprms,
-                    NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_left, pIntValue, true);
+                    NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_left, pIntValue, OVERWRITE_YES);
             break;
         case RTF_MARGR: // fall through: set the default + current value
             lcl_putNestedAttribute(m_aDefaultState.aSectionSprms,
-                    NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_right, pIntValue, true);
+                    NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_right, pIntValue, OVERWRITE_YES);
         case RTF_MARGRSXN:
             lcl_putNestedAttribute(m_aStates.top().aSectionSprms,
-                    NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_right, pIntValue, true);
+                    NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_right, pIntValue, OVERWRITE_YES);
             break;
         case RTF_MARGT: // fall through: set the default + current value
             lcl_putNestedAttribute(m_aDefaultState.aSectionSprms,
-                    NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_top, pIntValue, true);
+                    NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_top, pIntValue, OVERWRITE_YES);
         case RTF_MARGTSXN:
             lcl_putNestedAttribute(m_aStates.top().aSectionSprms,
-                    NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_top, pIntValue, true);
+                    NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_top, pIntValue, OVERWRITE_YES);
             break;
         case RTF_MARGB: // fall through: set the default + current value
             lcl_putNestedAttribute(m_aDefaultState.aSectionSprms,
-                    NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_bottom, pIntValue, true);
+                    NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_bottom, pIntValue, OVERWRITE_YES);
         case RTF_MARGBSXN:
             lcl_putNestedAttribute(m_aStates.top().aSectionSprms,
-                    NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_bottom, pIntValue, true);
+                    NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_bottom, pIntValue, OVERWRITE_YES);
             break;
         case RTF_HEADERY:
             lcl_putNestedAttribute(m_aStates.top().aSectionSprms,
-                    NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_header, pIntValue, true);
+                    NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_header, pIntValue, OVERWRITE_YES);
             break;
         case RTF_FOOTERY:
             lcl_putNestedAttribute(m_aStates.top().aSectionSprms,
-                    NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_footer, pIntValue, true);
+                    NS_ooxml::LN_EG_SectPrContents_pgMar, NS_ooxml::LN_CT_PageMar_footer, pIntValue, OVERWRITE_YES);
             break;
         case RTF_DEFTAB:
             m_aSettingsTableSprms.set(NS_ooxml::LN_CT_Settings_defaultTabStop, pIntValue);
@@ -3825,11 +3825,11 @@ int RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam)
             break;
         case RTF_SB:
             lcl_putNestedAttribute(m_aStates.top().aParagraphSprms,
-                    NS_ooxml::LN_CT_PPrBase_spacing, NS_ooxml::LN_CT_Spacing_before, pIntValue, true);
+                    NS_ooxml::LN_CT_PPrBase_spacing, NS_ooxml::LN_CT_Spacing_before, pIntValue, OVERWRITE_YES);
             break;
         case RTF_SA:
             lcl_putNestedAttribute(m_aStates.top().aParagraphSprms,
-                    NS_ooxml::LN_CT_PPrBase_spacing, NS_ooxml::LN_CT_Spacing_after, pIntValue, true);
+                    NS_ooxml::LN_CT_PPrBase_spacing, NS_ooxml::LN_CT_Spacing_after, pIntValue, OVERWRITE_YES);
             break;
         case RTF_DPX:
             m_aStates.top().aDrawingObject.nLeft = TWIP_TO_MM100(nParam);
@@ -3997,7 +3997,7 @@ int RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam)
                 // It turns out \li should reset the \fi inherited from the stylesheet.
                 // So set the direct formatting to zero, if we don't have such direct formatting yet.
                 lcl_putNestedAttribute(m_aStates.top().aParagraphSprms, NS_ooxml::LN_CT_PPrBase_ind, NS_ooxml::LN_CT_Ind_firstLine, RTFValue::Pointer_t(new RTFValue(0)),
-                                       /*bOverwrite=*/false, /*bAttribute=*/true, /*bAppend=*/false);
+                                       OVERWRITE_NO_IGNORE, /*bAttribute=*/true);
             }
             break;
         case RTF_RI:
@@ -4256,7 +4256,7 @@ int RTFDocumentImpl::popState()
             break;
         case DESTINATION_LISTENTRY:
             for (RTFSprms::Iterator_t i = aState.aListLevelEntries.begin(); i != aState.aListLevelEntries.end(); ++i)
-                aState.aTableSprms.set(i->first, i->second, false);
+                aState.aTableSprms.set(i->first, i->second, OVERWRITE_NO_APPEND);
             break;
         case DESTINATION_FIELDINSTRUCTION:
             {
@@ -4917,7 +4917,7 @@ int RTFDocumentImpl::popState()
         case DESTINATION_LISTENTRY:
             {
                 RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes, aState.aTableSprms));
-                m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_abstractNum, pValue, false);
+                m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_abstractNum, pValue, OVERWRITE_NO_APPEND);
             }
             break;
         case DESTINATION_PARAGRAPHNUMBERING:
@@ -4961,12 +4961,12 @@ int RTFDocumentImpl::popState()
                     RTFSprms aAbstractSprms;
                     aAbstractAttributes.set(NS_ooxml::LN_CT_AbstractNum_abstractNumId, pIdValue);
                     RTFValue::Pointer_t pLevelValue(new RTFValue(aLevelAttributes, aLevelSprms));
-                    aAbstractSprms.set(NS_ooxml::LN_CT_AbstractNum_lvl, pLevelValue, false);
+                    aAbstractSprms.set(NS_ooxml::LN_CT_AbstractNum_lvl, pLevelValue, OVERWRITE_NO_APPEND);
 
                     RTFSprms aListTableSprms;
                     RTFValue::Pointer_t pAbstractValue(new RTFValue(aAbstractAttributes, aAbstractSprms));
                     // It's important that Numbering_abstractNum and Numbering_num never overwrites previous values.
-                    aListTableSprms.set(NS_ooxml::LN_CT_Numbering_abstractNum, pAbstractValue, false);
+                    aListTableSprms.set(NS_ooxml::LN_CT_Numbering_abstractNum, pAbstractValue, OVERWRITE_NO_APPEND);
 
                     // Numbering
                     RTFSprms aNumberingAttributes;
@@ -4974,7 +4974,7 @@ int RTFDocumentImpl::popState()
                     aNumberingAttributes.set(NS_ooxml::LN_CT_AbstractNum_nsid, pIdValue);
                     aNumberingSprms.set(NS_ooxml::LN_CT_Num_abstractNumId, pIdValue);
                     RTFValue::Pointer_t pNumberingValue(new RTFValue(aNumberingAttributes, aNumberingSprms));
-                    aListTableSprms.set(NS_ooxml::LN_CT_Numbering_num, pNumberingValue, false);
+                    aListTableSprms.set(NS_ooxml::LN_CT_Numbering_num, pNumberingValue, OVERWRITE_NO_APPEND);
 
                     // Table
                     RTFSprms aListTableAttributes;
@@ -5010,7 +5010,7 @@ int RTFDocumentImpl::popState()
 
                 RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes, aState.aTableSprms));
                 if (m_aStates.top().nDestinationState != DESTINATION_LFOLEVEL)
-                    m_aStates.top().aListLevelEntries.set(NS_ooxml::LN_CT_AbstractNum_lvl, pValue, false);
+                    m_aStates.top().aListLevelEntries.set(NS_ooxml::LN_CT_AbstractNum_lvl, pValue, OVERWRITE_NO_APPEND);
                 else
                     m_aStates.top().aTableSprms.set(NS_ooxml::LN_CT_NumLvl_lvl, pValue);
             }
@@ -5036,8 +5036,7 @@ int RTFDocumentImpl::popState()
                 {
                     RTFValue::Pointer_t pValue(new RTFValue(
                                 aState.aTableAttributes, aState.aTableSprms));
-                    m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_num,
-                            pValue, false);
+                    m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_num, pValue, OVERWRITE_NO_APPEND);
                 }
             }
             break;
@@ -5090,7 +5089,7 @@ int RTFDocumentImpl::popState()
                 // Dummy value, real picture is already sent to dmapper.
                 aSprms.set(NS_ooxml::LN_CT_NumPicBullet_pict, RTFValue::Pointer_t(new RTFValue(0)));
                 RTFValue::Pointer_t pValue(new RTFValue(aAttributes, aSprms));
-                m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_numPicBullet, pValue, false);
+                m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_numPicBullet, pValue, OVERWRITE_NO_APPEND);
             }
             break;
         case DESTINATION_TITLE:
diff --git a/writerfilter/source/rtftok/rtfsprm.cxx b/writerfilter/source/rtftok/rtfsprm.cxx
index e794391..776aa6e 100644
--- a/writerfilter/source/rtftok/rtfsprm.cxx
+++ b/writerfilter/source/rtftok/rtfsprm.cxx
@@ -89,16 +89,16 @@ RTFValue::Pointer_t RTFSprms::find(Id nKeyword, bool bFirst)
     return pValue;
 }
 
-void RTFSprms::set(Id nKeyword, RTFValue::Pointer_t pValue, bool bOverwrite, bool bAppend)
+void RTFSprms::set(Id nKeyword, RTFValue::Pointer_t pValue, RTFOverwrite eOverwrite)
 {
     ensureCopyBeforeWrite();
     bool bFound = false;
-    if (bOverwrite || !bAppend)
+    if (eOverwrite == OVERWRITE_YES || eOverwrite == OVERWRITE_NO_IGNORE)
     {
         for (RTFSprms::Iterator_t i = m_pSprms->begin(); i != m_pSprms->end(); ++i)
             if (i->first == nKeyword)
             {
-                if (bOverwrite)
+                if (eOverwrite == OVERWRITE_YES)
                 {
                     i->second = pValue;
                     return;
@@ -110,7 +110,7 @@ void RTFSprms::set(Id nKeyword, RTFValue::Pointer_t pValue, bool bOverwrite, boo
                 }
             }
     }
-    if (bAppend || !bFound)
+    if (eOverwrite == OVERWRITE_NO_APPEND || !bFound)
         m_pSprms->push_back(std::make_pair(nKeyword, pValue));
 }
 
diff --git a/writerfilter/source/rtftok/rtfsprm.hxx b/writerfilter/source/rtftok/rtfsprm.hxx
index 42cbd6b..6b25fa4 100644
--- a/writerfilter/source/rtftok/rtfsprm.hxx
+++ b/writerfilter/source/rtftok/rtfsprm.hxx
@@ -43,6 +43,13 @@ namespace writerfilter {
                 delete p;
         }
 
+        enum RTFOverwrite
+        {
+            OVERWRITE_YES, ///< Yes, if an existing key is found, overwrite it.
+            OVERWRITE_NO_APPEND, ///< No, always append the value to the end of the list.
+            OVERWRITE_NO_IGNORE ///< No, if the key is already in the list, then ignore, otherwise append.
+        };
+
         /// A list of RTFSprm with a copy constructor that performs a deep copy.
         class RTFSprms
         {
@@ -55,13 +62,8 @@ namespace writerfilter {
             ~RTFSprms();
             RTFSprms& operator=(const RTFSprms& rOther);
             RTFValue::Pointer_t find(Id nKeyword, bool bFirst = true);
-            /**
-             * Does the same as ->push_back(), except that it can overwrite existing entries.
-             *
-             * @param bOverwrite if existing element should be overwritten or appended.
-             * @param bAppend if not overwriting, then append or NOP.
-             */
-            void set(Id nKeyword, RTFValue::Pointer_t pValue, bool bOverwrite = true, bool bAppend = true);
+            /// Does the same as ->push_back(), except that it can overwrite or ignore existing entries.
+            void set(Id nKeyword, RTFValue::Pointer_t pValue, RTFOverwrite eOverwrite = OVERWRITE_YES);
             bool erase(Id nKeyword);
             /// Removes elements, which are already in the reference set.
             void deduplicate(RTFSprms& rReference);


More information about the Libreoffice-commits mailing list