[PATCH] reformat of rtfdocumentimpl.cxx

Maxime de Roucy (via Code Review) gerrit at gerrit.libreoffice.org
Wed Mar 27 04:15:14 PDT 2013


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/3084

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/84/3084/1

reformat of rtfdocumentimpl.cxx

Change-Id: If79fc70f5fb8f8e48358048c03a8d39be6b197fb
---
M writerfilter/source/rtftok/rtfdocumentimpl.cxx
1 file changed, 957 insertions(+), 698 deletions(-)



diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index c7fa7f1..e732688 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -1084,7 +1084,9 @@
         case DESTINATION_MGROW:
             m_aStates.top().aDestinationText.append(rString);
             break;
-        default: bRet = false; break;
+        default:
+            bRet = false;
+            break;
     }
     if (bRet)
         return;
@@ -1694,9 +1696,11 @@
     switch (nKeyword)
     {
         case RTF_IGNORE:
-            m_bSkipUnknown = true;
-            aSkip.setReset(false);
-            return 0;
+            {
+                m_bSkipUnknown = true;
+                aSkip.setReset(false);
+                return 0;
+            }
             break;
         case RTF_PAR:
             {
@@ -1922,8 +1926,10 @@
             }
             break;
         default:
-            SAL_INFO("writerfilter", "TODO handle symbol '" << lcl_RtfToString(nKeyword) << "'");
-            aSkip.setParsed(false);
+            {
+                SAL_INFO("writerfilter", "TODO handle symbol '" << lcl_RtfToString(nKeyword) << "'");
+                aSkip.setParsed(false);
+            }
             break;
     }
     return 0;
@@ -2138,11 +2144,25 @@
     // Trivial paragraph flags
     switch (nKeyword)
     {
-        case RTF_KEEP: if (m_aStates.top().pCurrentBuffer != &m_aTableBuffer) nParam = NS_sprm::LN_PFKeep; break;
-        case RTF_KEEPN: if (m_aStates.top().pCurrentBuffer != &m_aTableBuffer) nParam = NS_sprm::LN_PFKeepFollow; break;
-        case RTF_INTBL: m_aStates.top().pCurrentBuffer = &m_aTableBuffer; nParam = NS_sprm::LN_PFInTable; break;
-        case RTF_PAGEBB: nParam = NS_sprm::LN_PFPageBreakBefore; break;
-        default: break;
+        case RTF_KEEP:
+            if (m_aStates.top().pCurrentBuffer != &m_aTableBuffer)
+                nParam = NS_sprm::LN_PFKeep;
+            break;
+        case RTF_KEEPN:
+            if (m_aStates.top().pCurrentBuffer != &m_aTableBuffer)
+                nParam = NS_sprm::LN_PFKeepFollow;
+            break;
+        case RTF_INTBL:
+            {
+                m_aStates.top().pCurrentBuffer = &m_aTableBuffer;
+                nParam = NS_sprm::LN_PFInTable;
+            }
+            break;
+        case RTF_PAGEBB:
+            nParam = NS_sprm::LN_PFPageBreakBefore;
+            break;
+        default:
+            break;
     }
     if (nParam >= 0)
     {
@@ -2177,30 +2197,36 @@
             }
             break;
         case RTF_PARD:
-            if (m_bHadPicture)
-                dispatchSymbol(RTF_PAR);
-            // \pard is allowed between \cell and \row, but in that case it should not reset the fact that we're inside a table.
-            if (m_aStates.top().nCells == 0)
             {
-                m_aStates.top().aParagraphSprms = m_aDefaultState.aParagraphSprms;
-                m_aStates.top().aParagraphAttributes = m_aDefaultState.aParagraphAttributes;
-                if (m_aStates.top().nDestinationState != DESTINATION_SHAPETEXT)
-                    m_aStates.top().pCurrentBuffer = 0;
+                if (m_bHadPicture)
+                    dispatchSymbol(RTF_PAR);
+                // \pard is allowed between \cell and \row, but in that case it should not reset the fact that we're inside a table.
+                if (m_aStates.top().nCells == 0)
+                {
+                    m_aStates.top().aParagraphSprms = m_aDefaultState.aParagraphSprms;
+                    m_aStates.top().aParagraphAttributes = m_aDefaultState.aParagraphAttributes;
+                    if (m_aStates.top().nDestinationState != DESTINATION_SHAPETEXT)
+                        m_aStates.top().pCurrentBuffer = 0;
+                }
+                m_aStates.top().resetFrame();
             }
-            m_aStates.top().resetFrame();
             break;
         case RTF_SECTD:
-            m_aStates.top().aSectionSprms = m_aDefaultState.aSectionSprms;
-            m_aStates.top().aSectionAttributes = m_aDefaultState.aSectionAttributes;
+            {
+                m_aStates.top().aSectionSprms = m_aDefaultState.aSectionSprms;
+                m_aStates.top().aSectionAttributes = m_aDefaultState.aSectionAttributes;
+            }
             break;
         case RTF_TROWD:
-            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().aTableRowAttributes = m_aDefaultState.aTableRowAttributes;
-            m_aStates.top().nCellX = 0;
-            // In case the table definition is in the middle of the row
-            // (invalid), make sure table definition is emitted.
-            m_bNeedPap = true;
+            {
+                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().aTableRowAttributes = m_aDefaultState.aTableRowAttributes;
+                m_aStates.top().nCellX = 0;
+                // In case the table definition is in the middle of the row
+                // (invalid), make sure table definition is emitted.
+                m_bNeedPap = true;
+            }
             break;
         case RTF_WIDCTLPAR:
         case RTF_NOWIDCTLPAR:
@@ -2393,12 +2419,14 @@
             }
             break;
         case RTF_NOSUPERSUB:
-            if (m_aStates.top().pCurrentBuffer == &m_aSuperBuffer)
             {
-                replayBuffer(m_aSuperBuffer);
-                m_aStates.top().pCurrentBuffer = 0;
+                if (m_aStates.top().pCurrentBuffer == &m_aSuperBuffer)
+                {
+                    replayBuffer(m_aSuperBuffer);
+                    m_aStates.top().pCurrentBuffer = 0;
+                }
+                m_aStates.top().aCharacterSprms.erase(NS_ooxml::LN_EG_RPrBase_vertAlign);
             }
-            m_aStates.top().aCharacterSprms.erase(NS_ooxml::LN_EG_RPrBase_vertAlign);
             break;
         case RTF_LINEPPAGE:
         case RTF_LINECONT:
@@ -2426,7 +2454,9 @@
         case RTF_ENDDOC:
             {
                 RTFValue::Pointer_t pValue(new RTFValue(NS_ooxml::LN_Value_ST_RestartNumber_eachSect));
-                lcl_putNestedSprm(m_aDefaultState.aParagraphSprms, NS_ooxml::LN_EG_SectPrContents_footnotePr, NS_ooxml::LN_EG_FtnEdnNumProps_numRestart, pValue);
+                lcl_putNestedSprm(m_aDefaultState.aParagraphSprms,
+                        NS_ooxml::LN_EG_SectPrContents_footnotePr,
+                        NS_ooxml::LN_EG_FtnEdnNumProps_numRestart, pValue);
             }
             break;
         case RTF_NOLINE:
@@ -2612,9 +2642,11 @@
                     m_aStates.top().aDrawingObject.xPropertySet->setPropertyValue("CornerRadius", uno::makeAny(sal_Int32(83)));
                 break;
         default:
-            SAL_INFO("writerfilter", "TODO handle flag '" << lcl_RtfToString(nKeyword) << "'");
-            aSkip.setParsed(false);
-            break;
+                {
+                    SAL_INFO("writerfilter", "TODO handle flag '" << lcl_RtfToString(nKeyword) << "'");
+                    aSkip.setParsed(false);
+                }
+                break;
     }
     return 0;
 }
@@ -2698,12 +2730,38 @@
     // Info group.
     switch (nKeyword)
     {
-        case RTF_YR: m_aStates.top().nYear = nParam; nSprm = 1; break;
-        case RTF_MO: m_aStates.top().nMonth = nParam; nSprm = 1; break;
-        case RTF_DY: m_aStates.top().nDay = nParam; nSprm = 1; break;
-        case RTF_HR: m_aStates.top().nHour = nParam; nSprm = 1; break;
-        case RTF_MIN: m_aStates.top().nMinute = nParam; nSprm = 1; break;
-        default: break;
+        case RTF_YR:
+            {
+                m_aStates.top().nYear = nParam;
+                nSprm = 1;
+            }
+            break;
+        case RTF_MO:
+            {
+                m_aStates.top().nMonth = nParam;
+                nSprm = 1;
+            }
+            break;
+        case RTF_DY:
+            {
+                m_aStates.top().nDay = nParam;
+                nSprm = 1;
+            }
+            break;
+        case RTF_HR:
+            {
+                m_aStates.top().nHour = nParam;
+                nSprm = 1;
+            }
+            break;
+        case RTF_MIN:
+            {
+                m_aStates.top().nMinute = nParam;
+                nSprm = 1;
+            }
+            break;
+        default:
+            break;
     }
     if (nSprm > 0)
         return 0;
@@ -2712,11 +2770,26 @@
     Id nId = 0;
     switch (nKeyword)
     {
-        case RTF_ABSW: nId = NS_sprm::LN_PDxaWidth; break;
-        case RTF_ABSH: nId = NS_sprm::LN_PWHeightAbs; break;
-        case RTF_POSX: nId = NS_ooxml::LN_CT_FramePr_x; m_aStates.top().aFrame.setSprm(NS_ooxml::LN_CT_FramePr_xAlign, 0); break;
-        case RTF_POSY: nId = NS_ooxml::LN_CT_FramePr_y; m_aStates.top().aFrame.setSprm(NS_ooxml::LN_CT_FramePr_yAlign, 0); break;
-        default: break;
+        case RTF_ABSW:
+            nId = NS_sprm::LN_PDxaWidth;
+            break;
+        case RTF_ABSH:
+            nId = NS_sprm::LN_PWHeightAbs;
+            break;
+        case RTF_POSX:
+            {
+                nId = NS_ooxml::LN_CT_FramePr_x;
+                m_aStates.top().aFrame.setSprm(NS_ooxml::LN_CT_FramePr_xAlign, 0);
+            }
+            break;
+        case RTF_POSY:
+            {
+                nId = NS_ooxml::LN_CT_FramePr_y;
+                m_aStates.top().aFrame.setSprm(NS_ooxml::LN_CT_FramePr_yAlign, 0);
+            }
+            break;
+        default:
+            break;
     }
 
     if (nId > 0)
@@ -2776,12 +2849,15 @@
                 if (i == nRTFEncodings)
                     // not found
                     return 0;
+
                 m_aFontEncodings[m_nCurrentFontIndex] = rtl_getTextEncodingFromWindowsCodePage(aRTFEncodings[i].codepage);
             }
             break;
         case RTF_ANSICPG:
-            m_aDefaultState.nCurrentEncoding = rtl_getTextEncodingFromWindowsCodePage(nParam);
-            m_aStates.top().nCurrentEncoding = rtl_getTextEncodingFromWindowsCodePage(nParam);
+            {
+                m_aDefaultState.nCurrentEncoding = rtl_getTextEncodingFromWindowsCodePage(nParam);
+                m_aStates.top().nCurrentEncoding = rtl_getTextEncodingFromWindowsCodePage(nParam);
+            }
             break;
         case RTF_CPG:
             m_aFontEncodings[m_nCurrentFontIndex] = rtl_getTextEncodingFromWindowsCodePage(nParam);
@@ -2794,16 +2870,19 @@
             }
             break;
         case RTF_S:
-            m_aStates.top().nCurrentStyleIndex = nParam;
-            if (m_aStates.top().nDestinationState == DESTINATION_STYLESHEET || m_aStates.top().nDestinationState == DESTINATION_STYLEENTRY)
             {
-                m_nCurrentStyleIndex = nParam;
-                m_aStates.top().aTableAttributes.set(NS_rtf::LN_ISTD, pIntValue);
-                RTFValue::Pointer_t pValue(new RTFValue(1));
-                m_aStates.top().aTableAttributes.set(NS_rtf::LN_SGC, pValue); // paragraph style
+                m_aStates.top().nCurrentStyleIndex = nParam;
+
+                if (m_aStates.top().nDestinationState == DESTINATION_STYLESHEET || m_aStates.top().nDestinationState == DESTINATION_STYLEENTRY)
+                {
+                    m_nCurrentStyleIndex = nParam;
+                    m_aStates.top().aTableAttributes.set(NS_rtf::LN_ISTD, pIntValue);
+                    RTFValue::Pointer_t pValue(new RTFValue(1));
+                    m_aStates.top().aTableAttributes.set(NS_rtf::LN_SGC, pValue); // paragraph style
+                }
+                else
+                   m_aStates.top().aParagraphAttributes.set(NS_rtf::LN_ISTD, pIntValue);
             }
-            else
-                m_aStates.top().aParagraphAttributes.set(NS_rtf::LN_ISTD, pIntValue);
             break;
         case RTF_CS:
             if (m_aStates.top().nDestinationState == DESTINATION_STYLESHEET || m_aStates.top().nDestinationState == DESTINATION_STYLEENTRY)
@@ -2817,13 +2896,13 @@
                 m_aStates.top().aCharacterAttributes.set(NS_rtf::LN_ISTD, pIntValue);
             break;
         case RTF_DEFF:
-                m_aDefaultState.aCharacterSprms.set(NS_sprm::LN_CRgFtc0, pIntValue);
+            m_aDefaultState.aCharacterSprms.set(NS_sprm::LN_CRgFtc0, pIntValue);
             break;
         case RTF_DEFLANG:
-                m_aDefaultState.aCharacterSprms.set(NS_sprm::LN_CRgLid0, pIntValue);
+            m_aDefaultState.aCharacterSprms.set(NS_sprm::LN_CRgLid0, pIntValue);
             break;
         case RTF_ADEFLANG:
-                m_aDefaultState.aCharacterSprms.set(NS_sprm::LN_CLidBi, pIntValue);
+            m_aDefaultState.aCharacterSprms.set(NS_sprm::LN_CLidBi, pIntValue);
             break;
         case RTF_CHCBPAT:
             {
@@ -3091,16 +3170,16 @@
             }
             break;
         case RTF_COLS:
-                lcl_putNestedAttribute(m_aStates.top().aSectionSprms,
-                        NS_ooxml::LN_EG_SectPrContents_cols, NS_ooxml::LN_CT_Columns_num, pIntValue);
+            lcl_putNestedAttribute(m_aStates.top().aSectionSprms,
+                    NS_ooxml::LN_EG_SectPrContents_cols, NS_ooxml::LN_CT_Columns_num, pIntValue);
             break;
         case RTF_COLSX:
-                lcl_putNestedAttribute(m_aStates.top().aSectionSprms,
-                        NS_ooxml::LN_EG_SectPrContents_cols, NS_ooxml::LN_CT_Columns_space, pIntValue);
+            lcl_putNestedAttribute(m_aStates.top().aSectionSprms,
+                    NS_ooxml::LN_EG_SectPrContents_cols, NS_ooxml::LN_CT_Columns_space, pIntValue);
             break;
         case RTF_COLNO:
-                lcl_putNestedSprm(m_aStates.top().aSectionSprms,
-                        NS_ooxml::LN_EG_SectPrContents_cols, NS_ooxml::LN_CT_Columns_col, pIntValue);
+            lcl_putNestedSprm(m_aStates.top().aSectionSprms,
+                    NS_ooxml::LN_EG_SectPrContents_cols, NS_ooxml::LN_CT_Columns_col, pIntValue);
             break;
         case RTF_COLW:
         case RTF_COLSR:
@@ -3273,10 +3352,12 @@
             // Ignore this for now, later the RTF writer version could be used to add hacks for older buggy writers.
             break;
         case RTF_FTNSTART:
-            lcl_putNestedSprm(m_aDefaultState.aParagraphSprms, NS_ooxml::LN_EG_SectPrContents_footnotePr, NS_ooxml::LN_EG_FtnEdnNumProps_numStart, pIntValue);
+            lcl_putNestedSprm(m_aDefaultState.aParagraphSprms,
+                    NS_ooxml::LN_EG_SectPrContents_footnotePr, NS_ooxml::LN_EG_FtnEdnNumProps_numStart, pIntValue);
             break;
         case RTF_AFTNSTART:
-            lcl_putNestedSprm(m_aDefaultState.aParagraphSprms, NS_ooxml::LN_EG_SectPrContents_endnotePr, NS_ooxml::LN_EG_FtnEdnNumProps_numStart, pIntValue);
+            lcl_putNestedSprm(m_aDefaultState.aParagraphSprms,
+                    NS_ooxml::LN_EG_SectPrContents_endnotePr, NS_ooxml::LN_EG_FtnEdnNumProps_numStart, pIntValue);
             break;
         case RTF_DFRMTXTX:
             m_aStates.top().aFrame.setSprm(NS_sprm::LN_PDxaFromText, nParam);
@@ -3285,8 +3366,10 @@
             m_aStates.top().aFrame.setSprm(NS_sprm::LN_PDyaFromText, nParam);
             break;
         case RTF_DXFRTEXT:
-            m_aStates.top().aFrame.setSprm(NS_sprm::LN_PDxaFromText, nParam);
-            m_aStates.top().aFrame.setSprm(NS_sprm::LN_PDyaFromText, nParam);
+            {
+                m_aStates.top().aFrame.setSprm(NS_sprm::LN_PDxaFromText, nParam);
+                m_aStates.top().aFrame.setSprm(NS_sprm::LN_PDyaFromText, nParam);
+            }
             break;
         case RTF_FLYVERT:
             {
@@ -3342,8 +3425,10 @@
             m_aSettingsTableAttributes.set(NS_ooxml::LN_CT_Zoom_percent, pIntValue);
             break;
         case RTF_BIN:
-            m_aStates.top().nInternalState = INTERNAL_BIN;
-            m_aStates.top().nBinaryToRead = nParam;
+            {
+                m_aStates.top().nInternalState = INTERNAL_BIN;
+                m_aStates.top().nBinaryToRead = nParam;
+            }
             break;
         case RTF_DPLINECOR:
             m_aStates.top().aDrawingObject.nLineColorR = nParam; m_aStates.top().aDrawingObject.bHasLineColor = true;
@@ -3364,11 +3449,13 @@
             m_aStates.top().aDrawingObject.nFillColorB = nParam; m_aStates.top().aDrawingObject.bHasFillColor = true;
             break;
         case RTF_LI:
-            m_aStates.top().aParagraphSprms.set(NS_sprm::LN_PDxaLeft, pIntValue);
-            // 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.
-            if (!m_aStates.top().aParagraphSprms.find(NS_sprm::LN_PDxaLeft1).get())
-                m_aStates.top().aParagraphSprms.set(NS_sprm::LN_PDxaLeft1, RTFValue::Pointer_t(new RTFValue(0)));
+            {
+                m_aStates.top().aParagraphSprms.set(NS_sprm::LN_PDxaLeft, pIntValue);
+                // 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.
+                if (!m_aStates.top().aParagraphSprms.find(NS_sprm::LN_PDxaLeft1).get())
+                    m_aStates.top().aParagraphSprms.set(NS_sprm::LN_PDxaLeft1, RTFValue::Pointer_t(new RTFValue(0)));
+            }
             break;
         case RTF_CLSHDNG:
             {
@@ -3401,7 +3488,8 @@
                     default: break;
                 }
                 if (nValue != -1)
-                    lcl_putNestedAttribute(m_aStates.top().aTableCellSprms, NS_ooxml::LN_CT_TcPrBase_shd, NS_ooxml::LN_CT_Shd_val, RTFValue::Pointer_t(new RTFValue(nValue)));
+                    lcl_putNestedAttribute(m_aStates.top().aTableCellSprms,
+                            NS_ooxml::LN_CT_TcPrBase_shd, NS_ooxml::LN_CT_Shd_val, RTFValue::Pointer_t(new RTFValue(nValue)));
             }
             break;
         case RTF_DODHGT:
@@ -3417,8 +3505,10 @@
         case RTF_DPPTX:
             {
                 RTFDrawingObject& rDrawingObject = m_aStates.top().aDrawingObject;
+
                 if (!rDrawingObject.aPolyLinePoints.hasElements())
                     dispatchValue(RTF_DPPOLYCOUNT, 2);
+
                 rDrawingObject.aPolyLinePoints[rDrawingObject.aPolyLinePoints.getLength() - rDrawingObject.nPolyLineCount].X = TWIP_TO_MM100(nParam);
             }
             break;
@@ -3447,8 +3537,10 @@
             }
             break;
         default:
-            SAL_INFO("writerfilter", "TODO handle value '" << lcl_RtfToString(nKeyword) << "'");
-            aSkip.setParsed(false);
+            {
+                SAL_INFO("writerfilter", "TODO handle value '" << lcl_RtfToString(nKeyword) << "'");
+                aSkip.setParsed(false);
+            }
             break;
     }
     return 0;
@@ -3544,8 +3636,10 @@
             }
             break;
         default:
-            SAL_INFO("writerfilter", "TODO handle toggle '" << lcl_RtfToString(nKeyword) << "'");
-            aSkip.setParsed(false);
+            {
+                SAL_INFO("writerfilter", "TODO handle toggle '" << lcl_RtfToString(nKeyword) << "'");
+                aSkip.setParsed(false);
+            }
             break;
     }
     return 0;
@@ -3572,29 +3666,34 @@
 
     switch (m_aStates.top().nDestinationState)
     {
-    case DESTINATION_FONTTABLE: m_aStates.top().nDestinationState = DESTINATION_FONTENTRY; break;
-    case DESTINATION_STYLESHEET: m_aStates.top().nDestinationState = DESTINATION_STYLEENTRY; break;
-    case DESTINATION_FIELDRESULT:
-    case DESTINATION_SHAPETEXT:
-    case DESTINATION_FORMFIELD:
-        m_aStates.top().nDestinationState = DESTINATION_NORMAL;
-    break;
-    case DESTINATION_MNUM:
-    case DESTINATION_MDEN:
-    case DESTINATION_ME:
-    case DESTINATION_MFNAME:
-    case DESTINATION_MLIM:
-    case DESTINATION_MSUB:
-    case DESTINATION_MSUP:
-    case DESTINATION_MDEG:
-        m_aStates.top().nDestinationState = DESTINATION_MR;
-    break;
-    case DESTINATION_FIELDINSTRUCTION:
-        m_aStates.top().nDestinationState = DESTINATION_NORMAL;
-    break;
-    case DESTINATION_REVISIONTABLE: m_aStates.top().nDestinationState = DESTINATION_REVISIONENTRY; break;
-    case DESTINATION_MOMATH: m_aStates.top().nDestinationState = DESTINATION_MR; break;
-    default: break;
+        case DESTINATION_FONTTABLE:
+            m_aStates.top().nDestinationState = DESTINATION_FONTENTRY;
+            break;
+        case DESTINATION_STYLESHEET:
+            m_aStates.top().nDestinationState = DESTINATION_STYLEENTRY;
+            break;
+        case DESTINATION_FIELDRESULT:
+        case DESTINATION_SHAPETEXT:
+        case DESTINATION_FORMFIELD:
+        case DESTINATION_FIELDINSTRUCTION:
+            m_aStates.top().nDestinationState = DESTINATION_NORMAL;
+            break;
+        case DESTINATION_MNUM:
+        case DESTINATION_MDEN:
+        case DESTINATION_ME:
+        case DESTINATION_MFNAME:
+        case DESTINATION_MLIM:
+        case DESTINATION_MSUB:
+        case DESTINATION_MSUP:
+        case DESTINATION_MDEG:
+        case DESTINATION_MOMATH:
+            m_aStates.top().nDestinationState = DESTINATION_MR;
+            break;
+        case DESTINATION_REVISIONTABLE:
+            m_aStates.top().nDestinationState = DESTINATION_REVISIONENTRY;
+            break;
+        default:
+            break;
     }
 
     return 0;
@@ -3652,462 +3751,596 @@
     checkUnicode();
     RTFParserState aState(m_aStates.top());
     m_bWasInFrame = aState.aFrame.inFrame();
-    sal_Int32 nMathToken = 0;
 
-    switch (m_aStates.top().nDestinationState)
+    switch (aState.nDestinationState)
     {
-    case DESTINATION_FONTTABLE:
-    {
-        writerfilter::Reference<Table>::Pointer_t const pTable(new RTFReferenceTable(m_aFontTableEntries));
-        Mapper().table(NS_rtf::LN_FONTTABLE, pTable);
-    }
-    break;
-    case DESTINATION_STYLESHEET:
-    {
-        writerfilter::Reference<Table>::Pointer_t const pTable(new RTFReferenceTable(m_aStyleTableEntries));
-        Mapper().table(NS_rtf::LN_STYLESHEET, pTable);
-    }
-    break;
-    case DESTINATION_LISTOVERRIDETABLE:
-    {
-        RTFSprms aListTableAttributes;
-        writerfilter::Reference<Properties>::Pointer_t const pProp(new RTFReferenceProperties(aListTableAttributes, m_aListTableSprms));
-        RTFReferenceTable::Entries_t aListTableEntries;
-        aListTableEntries.insert(make_pair(0, pProp));
-        writerfilter::Reference<Table>::Pointer_t const pTable(new RTFReferenceTable(aListTableEntries));
-        Mapper().table(NS_rtf::LN_LISTTABLE, pTable);
-    }
-    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);
-    break;
-    case DESTINATION_FIELDINSTRUCTION:
-        {
-            RTFValue::Pointer_t pValue(new RTFValue(m_aFormfieldAttributes, m_aFormfieldSprms));
-            RTFSprms aFFAttributes;
-            RTFSprms aFFSprms;
-            aFFSprms.set(NS_ooxml::LN_ffdata, pValue);
-            writerfilter::Reference<Properties>::Pointer_t const pProperties(new RTFReferenceProperties(aFFAttributes, aFFSprms));
-            Mapper().props(pProperties);
-            m_aFormfieldAttributes.clear();
-            m_aFormfieldSprms.clear();
-        }
-        singleChar(0x14);
-    break;
-    case DESTINATION_FIELDRESULT:
-        singleChar(0x15);
-    break;
-    case DESTINATION_LEVELTEXT:
-    {
-        OUString aStr = m_aStates.top().aDestinationText.makeStringAndClear();
-
-        // The first character is the length of the string (the rest should be ignored).
-        sal_Int32 nLength(aStr.toChar());
-        OUString aValue;
-        if (nLength <= aStr.getLength())
-            aValue = aStr.copy(1, nLength);
-        else
-            aValue = aStr;
-        RTFValue::Pointer_t pValue(new RTFValue(aValue, true));
-        aState.aTableAttributes.set(NS_ooxml::LN_CT_LevelText_val, pValue);
-    }
-    break;
-    case DESTINATION_LEVELNUMBERS:
-    {
-        RTFSprms& rAttributes = aState.aTableSprms.find(NS_ooxml::LN_CT_Lvl_lvlText)->getAttributes();
-        RTFValue::Pointer_t pValue = rAttributes.find(NS_ooxml::LN_CT_LevelText_val);
-        OUString aOrig = pValue->getString();
-
-        OUStringBuffer aBuf;
-        sal_Int32 nReplaces = 1;
-        for (int i = 0; i < aOrig.getLength(); i++)
-        {
-            if (std::find(m_aStates.top().aLevelNumbers.begin(), m_aStates.top().aLevelNumbers.end(), i+1)
-                    != m_aStates.top().aLevelNumbers.end())
+        case DESTINATION_FONTTABLE:
             {
-                aBuf.append(sal_Unicode('%'));
-                // '1.1.1' -> '%1.%2.%3', but '1.' (with '2.' prefix omitted) is %2.
-                aBuf.append(sal_Int32(nReplaces++ + m_aStates.top().nListLevelNum + 1 - m_aStates.top().aLevelNumbers.size()));
+                writerfilter::Reference<Table>::Pointer_t const pTable(new RTFReferenceTable(m_aFontTableEntries));
+                Mapper().table(NS_rtf::LN_FONTTABLE, pTable);
             }
-            else
-                aBuf.append(aOrig.copy(i, 1));
-        }
-        pValue->setString(aBuf.makeStringAndClear());
-    }
-    break;
-    case DESTINATION_SHAPEPROPERTYNAME:
-    case DESTINATION_SHAPEPROPERTYVALUE:
-    case DESTINATION_SHAPEPROPERTY:
-    {
-        if (m_aStates.top().nDestinationState == DESTINATION_SHAPEPROPERTYNAME)
-            aState.aShape.aProperties.push_back(make_pair(m_aStates.top().aDestinationText.makeStringAndClear(), OUString()));
-        else if (m_aStates.top().nDestinationState == DESTINATION_SHAPEPROPERTYVALUE && aState.aShape.aProperties.size())
-            aState.aShape.aProperties.back().second = m_aStates.top().aDestinationText.makeStringAndClear();
-    }
-    break;
-    case DESTINATION_PICPROP:
-    case DESTINATION_SHAPEINSTRUCTION:
-        if (!m_bObject)
-            m_pSdrImport->resolve(m_aStates.top().aShape);
-    break;
-    case DESTINATION_BOOKMARKSTART:
-    {
-        OUString aStr = m_aStates.top().aDestinationText.makeStringAndClear();
-        int nPos = m_aBookmarks.size();
-        m_aBookmarks[aStr] = nPos;
-        Mapper().props(lcl_getBookmarkProperties(nPos, aStr));
-    }
-    break;
-    case DESTINATION_BOOKMARKEND:
-        Mapper().props(lcl_getBookmarkProperties(m_aBookmarks[m_aStates.top().aDestinationText.makeStringAndClear()]));
-    break;
-    case DESTINATION_PICT:
-        resolvePict(true);
-    break;
-    case DESTINATION_FORMFIELDNAME:
-    {
-        RTFValue::Pointer_t pValue(new RTFValue(m_aStates.top().aDestinationText.makeStringAndClear()));
-        m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFData_name, pValue);
-    }
-    break;
-    case DESTINATION_FORMFIELDLIST:
-    {
-        RTFValue::Pointer_t pValue(new RTFValue(m_aStates.top().aDestinationText.makeStringAndClear()));
-        m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFDDList_listEntry, pValue);
-    }
-    break;
-    case DESTINATION_DATAFIELD:
-    {
-        OString aStr = OUStringToOString(m_aStates.top().aDestinationText.makeStringAndClear(), m_aStates.top().nCurrentEncoding);
-        // decode hex dump
-        OStringBuffer aBuf;
-        const char *str = aStr.getStr();
-        int b = 0, count = 2;
-        for (int i = 0; i < aStr.getLength(); ++i)
-        {
-            char ch = str[i];
-            if (ch != 0x0d && ch != 0x0a)
-            {
-                b = b << 4;
-                sal_Int8 parsed = m_pTokenizer->asHex(ch);
-                if (parsed == -1)
-                    return ERROR_HEX_INVALID;
-                b += parsed;
-                count--;
-                if (!count)
-                {
-                    aBuf.append((char)b);
-                    count = 2;
-                    b = 0;
-                }
-            }
-        }
-        aStr = aBuf.makeStringAndClear();
-        // ignore the first bytes
-        if (aStr.getLength() > 8)
-            aStr = aStr.copy(8);
-        // extract name
-        int nLength = aStr.toChar();
-        aStr = aStr.copy(1);
-        OString aName = aStr.copy(0, nLength);
-        aStr = aStr.copy(nLength+1); // zero-terminated string
-        // extract default text
-        nLength = aStr.toChar();
-        aStr = aStr.copy(1);
-        OString aDefaultText = aStr.copy(0, nLength);
-        RTFValue::Pointer_t pNValue(new RTFValue(OStringToOUString(aName, m_aStates.top().nCurrentEncoding)));
-        m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFData_name, pNValue);
-        RTFValue::Pointer_t pDValue(new RTFValue(OStringToOUString(aDefaultText, m_aStates.top().nCurrentEncoding)));
-        m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFTextInput_default, pDValue);
-
-        m_bFormField = false;
-    }
-    break;
-    case DESTINATION_CREATIONTIME:
-    if (m_xDocumentProperties.is())
-        m_xDocumentProperties->setCreationDate(lcl_getDateTime(m_aStates));
-    break;
-    case DESTINATION_REVISIONTIME:
-    if (m_xDocumentProperties.is())
-        m_xDocumentProperties->setModificationDate(lcl_getDateTime(m_aStates));
-    break;
-    case DESTINATION_PRINTTIME:
-    if (m_xDocumentProperties.is())
-        m_xDocumentProperties->setPrintDate(lcl_getDateTime(m_aStates));
-    break;
-    case DESTINATION_AUTHOR:
-    if (m_xDocumentProperties.is())
-        m_xDocumentProperties->setAuthor(m_aStates.top().aDestinationText.makeStringAndClear());
-    break;
-    case DESTINATION_KEYWORDS:
-    if (m_xDocumentProperties.is())
-        m_xDocumentProperties->setKeywords(comphelper::string::convertCommaSeparated(m_aStates.top().aDestinationText.makeStringAndClear()));
-    break;
-    case DESTINATION_COMMENT:
-    if (m_xDocumentProperties.is())
-        m_xDocumentProperties->setGenerator(m_aStates.top().aDestinationText.makeStringAndClear());
-    break;
-    case DESTINATION_SUBJECT:
-    if (m_xDocumentProperties.is())
-        m_xDocumentProperties->setSubject(m_aStates.top().aDestinationText.makeStringAndClear());
-    break;
-    case DESTINATION_DOCCOMM:
-    if (m_xDocumentProperties.is())
-        m_xDocumentProperties->setDescription(m_aStates.top().aDestinationText.makeStringAndClear());
-    break;
-    case DESTINATION_OPERATOR:
-    case DESTINATION_COMPANY:
-    {
-        OUString aName = m_aStates.top().nDestinationState == DESTINATION_OPERATOR ? OUString("Operator") : OUString("Company");
-        if (m_xDocumentProperties.is())
-        {
-            uno::Reference<beans::XPropertyContainer> xUserDefinedProperties = m_xDocumentProperties->getUserDefinedProperties();
-            xUserDefinedProperties->addProperty(aName, beans::PropertyAttribute::REMOVABLE,
-                    uno::makeAny(m_aStates.top().aDestinationText.makeStringAndClear()));
-        }
-    }
-    break;
-    case DESTINATION_OBJDATA:
-    {
-        m_pObjectData.reset(new SvMemoryStream());
-        int b = 0, count = 2;
-
-        // Feed the destination text to a stream.
-        OString aStr = OUStringToOString(m_aStates.top().aDestinationText.makeStringAndClear(), RTL_TEXTENCODING_ASCII_US);
-        const char *str = aStr.getStr();
-        for (int i = 0; i < aStr.getLength(); ++i)
-        {
-            char ch = str[i];
-            if (ch != 0x0d && ch != 0x0a)
-            {
-                b = b << 4;
-                sal_Int8 parsed = m_pTokenizer->asHex(ch);
-                if (parsed == -1)
-                    return ERROR_HEX_INVALID;
-                b += parsed;
-                count--;
-                if (!count)
-                {
-                    *m_pObjectData << (char)b;
-                    count = 2;
-                    b = 0;
-                }
-            }
-        }
-
-        if (m_pObjectData->Tell())
-        {
-            m_pObjectData->Seek(0);
-
-            // Skip ObjectHeader
-            sal_uInt32 nData;
-            *m_pObjectData >> nData; // OLEVersion
-            *m_pObjectData >> nData; // FormatID
-            *m_pObjectData >> nData; // ClassName
-            m_pObjectData->SeekRel(nData);
-            *m_pObjectData >> nData; // TopicName
-            m_pObjectData->SeekRel(nData);
-            *m_pObjectData >> nData; // ItemName
-            m_pObjectData->SeekRel(nData);
-            *m_pObjectData >> nData; // NativeDataSize
-        }
-
-        uno::Reference<io::XInputStream> xInputStream(new utl::OInputStreamWrapper(m_pObjectData.get()));
-        RTFValue::Pointer_t pStreamValue(new RTFValue(xInputStream));
-
-        RTFSprms aOLEAttributes;
-        aOLEAttributes.set(NS_ooxml::LN_inputstream, pStreamValue);
-        RTFValue::Pointer_t pValue(new RTFValue(aOLEAttributes));
-        m_aObjectSprms.set(NS_ooxml::LN_OLEObject_OLEObject, pValue);
-    }
-    break;
-    case DESTINATION_OBJECT:
-    {
-        if (!m_bObject)
-        {
-            // if the object is in a special container we will use the \result
-            // element instead of the \objdata
-            // (see RTF_OBJECT in RTFDocumentImpl::dispatchDestination)
             break;
-        }
+        case DESTINATION_STYLESHEET:
+            {
+                writerfilter::Reference<Table>::Pointer_t const pTable(new RTFReferenceTable(m_aStyleTableEntries));
+                Mapper().table(NS_rtf::LN_STYLESHEET, pTable);
+            }
+            break;
+        case DESTINATION_LISTOVERRIDETABLE:
+            {
+                RTFSprms aListTableAttributes;
+                writerfilter::Reference<Properties>::Pointer_t const pProp(new RTFReferenceProperties(aListTableAttributes, m_aListTableSprms));
+                RTFReferenceTable::Entries_t aListTableEntries;
+                aListTableEntries.insert(make_pair(0, pProp));
+                writerfilter::Reference<Table>::Pointer_t const pTable(new RTFReferenceTable(aListTableEntries));
+                Mapper().table(NS_rtf::LN_LISTTABLE, pTable);
+            }
+            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);
+            break;
+        case DESTINATION_FIELDINSTRUCTION:
+            {
+                RTFValue::Pointer_t pValue(new RTFValue(m_aFormfieldAttributes, m_aFormfieldSprms));
+                RTFSprms aFFAttributes;
+                RTFSprms aFFSprms;
+                aFFSprms.set(NS_ooxml::LN_ffdata, pValue);
+                writerfilter::Reference<Properties>::Pointer_t const pProperties(new RTFReferenceProperties(aFFAttributes, aFFSprms));
+                Mapper().props(pProperties);
+                m_aFormfieldAttributes.clear();
+                m_aFormfieldSprms.clear();
+                singleChar(0x14);
+            }
+            break;
+        case DESTINATION_FIELDRESULT:
+            singleChar(0x15);
+            break;
+        case DESTINATION_LEVELTEXT:
+            {
+                OUString aStr = m_aStates.top().aDestinationText.makeStringAndClear();
 
-        RTFSprms aObjAttributes;
-        RTFSprms aObjSprms;
-        RTFValue::Pointer_t pValue(new RTFValue(m_aObjectAttributes, m_aObjectSprms));
-        aObjSprms.set(NS_ooxml::LN_object, pValue);
-        writerfilter::Reference<Properties>::Pointer_t const pProperties(new RTFReferenceProperties(aObjAttributes, aObjSprms));
-        uno::Reference<drawing::XShape> xShape;
-        RTFValue::Pointer_t pShape = m_aObjectAttributes.find(NS_ooxml::LN_shape);
-        OSL_ASSERT(pShape.get());
-        if (pShape.get())
-            pShape->getAny() >>= xShape;
-        Mapper().startShape(xShape);
-        Mapper().props(pProperties);
-        Mapper().endShape();
-        m_aObjectAttributes.clear();
-        m_aObjectSprms.clear();
-        m_bObject = false;
-    }
-    break;
-    case DESTINATION_ANNOTATIONDATE:
-    {
-        OUString aStr(OStringToOUString(lcl_DTTM22OString(m_aStates.top().aDestinationText.makeStringAndClear().toInt32()),
-                    m_aStates.top().nCurrentEncoding));
-        RTFValue::Pointer_t pValue(new RTFValue(aStr));
-        RTFSprms aAnnAttributes;
-        aAnnAttributes.set(NS_ooxml::LN_CT_TrackChange_date, pValue);
-        writerfilter::Reference<Properties>::Pointer_t const pProperties(new RTFReferenceProperties(aAnnAttributes));
-        Mapper().props(pProperties);
-    }
-    break;
-    case DESTINATION_ANNOTATIONAUTHOR:
-        m_aAuthor = m_aStates.top().aDestinationText.makeStringAndClear();
-    break;
-    case DESTINATION_ATNID:
-        m_aAuthorInitials = m_aStates.top().aDestinationText.makeStringAndClear();
-    break;
-    case DESTINATION_FALT:
-    {
-        OUString aStr(m_aStates.top().aDestinationText.makeStringAndClear());
-        RTFValue::Pointer_t pValue(new RTFValue(aStr));
-        aState.aTableSprms.set(NS_ooxml::LN_CT_Font_altName, pValue);
-    }
-    break;
-    case DESTINATION_DRAWINGOBJECT:
-    if (m_aStates.top().aDrawingObject.xShape.is())
-    {
-        RTFDrawingObject& rDrawing = m_aStates.top().aDrawingObject;
-        uno::Reference<drawing::XShape> xShape(rDrawing.xShape);
-        uno::Reference<beans::XPropertySet> xPropertySet(rDrawing.xPropertySet);
+                // The first character is the length of the string (the rest should be ignored).
+                sal_Int32 nLength(aStr.toChar());
+                OUString aValue;
+                if (nLength <= aStr.getLength())
+                    aValue = aStr.copy(1, nLength);
+                else
+                    aValue = aStr;
+                RTFValue::Pointer_t pValue(new RTFValue(aValue, true));
+                aState.aTableAttributes.set(NS_ooxml::LN_CT_LevelText_val, pValue);
+            }
+            break;
+        case DESTINATION_LEVELNUMBERS:
+            {
+                RTFSprms& rAttributes = aState.aTableSprms.find(NS_ooxml::LN_CT_Lvl_lvlText)->getAttributes();
+                RTFValue::Pointer_t pValue = rAttributes.find(NS_ooxml::LN_CT_LevelText_val);
+                OUString aOrig = pValue->getString();
 
-        uno::Reference<lang::XServiceInfo> xServiceInfo(xShape, uno::UNO_QUERY);
-        bool bTextFrame = xServiceInfo->supportsService("com.sun.star.text.TextFrame");
+                OUStringBuffer aBuf;
+                sal_Int32 nReplaces = 1;
+                for (int i = 0; i < aOrig.getLength(); i++)
+                {
+                    if (std::find(m_aStates.top().aLevelNumbers.begin(), m_aStates.top().aLevelNumbers.end(), i+1)
+                            != m_aStates.top().aLevelNumbers.end())
+                    {
+                        aBuf.append(sal_Unicode('%'));
+                        // '1.1.1' -> '%1.%2.%3', but '1.' (with '2.' prefix omitted) is %2.
+                        aBuf.append(sal_Int32(nReplaces++ + m_aStates.top().nListLevelNum + 1 - m_aStates.top().aLevelNumbers.size()));
+                    }
+                    else
+                        aBuf.append(aOrig.copy(i, 1));
+                }
 
-        if (bTextFrame)
-        {
-            xPropertySet->setPropertyValue("HoriOrientPosition", uno::makeAny((sal_Int32)rDrawing.nLeft));
-            xPropertySet->setPropertyValue("VertOrientPosition", uno::makeAny((sal_Int32)rDrawing.nTop));
-        }
-        else
-        {
-            xShape->setPosition(awt::Point(rDrawing.nLeft, rDrawing.nTop));
-        }
-        xShape->setSize(awt::Size(rDrawing.nRight, rDrawing.nBottom));
+                pValue->setString(aBuf.makeStringAndClear());
+            }
+            break;
+        case DESTINATION_SHAPEPROPERTYNAME:
+        case DESTINATION_SHAPEPROPERTYVALUE:
+        case DESTINATION_SHAPEPROPERTY:
+            {
+                if (m_aStates.top().nDestinationState == DESTINATION_SHAPEPROPERTYNAME)
+                    aState.aShape.aProperties.push_back(make_pair(m_aStates.top().aDestinationText.makeStringAndClear(), OUString()));
+                else if (m_aStates.top().nDestinationState == DESTINATION_SHAPEPROPERTYVALUE && aState.aShape.aProperties.size())
+                    aState.aShape.aProperties.back().second = m_aStates.top().aDestinationText.makeStringAndClear();
+            }
+            break;
+        case DESTINATION_PICPROP:
+        case DESTINATION_SHAPEINSTRUCTION:
+            if (!m_bObject)
+                m_pSdrImport->resolve(m_aStates.top().aShape);
+            break;
+        case DESTINATION_BOOKMARKSTART:
+            {
+                OUString aStr = m_aStates.top().aDestinationText.makeStringAndClear();
+                int nPos = m_aBookmarks.size();
+                m_aBookmarks[aStr] = nPos;
+                Mapper().props(lcl_getBookmarkProperties(nPos, aStr));
+            }
+            break;
+        case DESTINATION_BOOKMARKEND:
+            Mapper().props(lcl_getBookmarkProperties(m_aBookmarks[m_aStates.top().aDestinationText.makeStringAndClear()]));
+            break;
+        case DESTINATION_PICT:
+            resolvePict(true);
+            break;
+        case DESTINATION_FORMFIELDNAME:
+            {
+                RTFValue::Pointer_t pValue(new RTFValue(m_aStates.top().aDestinationText.makeStringAndClear()));
+                m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFData_name, pValue);
+            }
+            break;
+        case DESTINATION_FORMFIELDLIST:
+            {
+                RTFValue::Pointer_t pValue(new RTFValue(m_aStates.top().aDestinationText.makeStringAndClear()));
+                m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFDDList_listEntry, pValue);
+            }
+            break;
+        case DESTINATION_DATAFIELD:
+            {
+                OString aStr = OUStringToOString(m_aStates.top().aDestinationText.makeStringAndClear(), m_aStates.top().nCurrentEncoding);
+                // decode hex dump
+                OStringBuffer aBuf;
+                const char *str = aStr.getStr();
+                int b = 0, count = 2;
+                for (int i = 0; i < aStr.getLength(); ++i)
+                {
+                    char ch = str[i];
+                    if (ch != 0x0d && ch != 0x0a)
+                    {
+                        b = b << 4;
+                        sal_Int8 parsed = m_pTokenizer->asHex(ch);
+                        if (parsed == -1)
+                            return ERROR_HEX_INVALID;
+                        b += parsed;
+                        count--;
+                        if (!count)
+                        {
+                            aBuf.append((char)b);
+                            count = 2;
+                            b = 0;
+                        }
+                    }
+                }
+                aStr = aBuf.makeStringAndClear();
+                // ignore the first bytes
+                if (aStr.getLength() > 8)
+                    aStr = aStr.copy(8);
+                // extract name
+                int nLength = aStr.toChar();
+                aStr = aStr.copy(1);
+                OString aName = aStr.copy(0, nLength);
+                aStr = aStr.copy(nLength+1); // zero-terminated string
+                // extract default text
+                nLength = aStr.toChar();
+                aStr = aStr.copy(1);
+                OString aDefaultText = aStr.copy(0, nLength);
+                RTFValue::Pointer_t pNValue(new RTFValue(OStringToOUString(aName, m_aStates.top().nCurrentEncoding)));
+                m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFData_name, pNValue);
+                RTFValue::Pointer_t pDValue(new RTFValue(OStringToOUString(aDefaultText, m_aStates.top().nCurrentEncoding)));
+                m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFTextInput_default, pDValue);
 
-        if (rDrawing.bHasLineColor)
-            xPropertySet->setPropertyValue("LineColor", uno::makeAny(sal_uInt32((rDrawing.nLineColorR<<16) + (rDrawing.nLineColorG<<8) + rDrawing.nLineColorB)));
-        if (rDrawing.bHasFillColor)
-            xPropertySet->setPropertyValue("FillColor", uno::makeAny(sal_uInt32((rDrawing.nFillColorR<<16) + (rDrawing.nFillColorG<<8) + rDrawing.nFillColorB)));
-        else if (!bTextFrame)
-            // If there is no fill, the Word default is 100% transparency.
-            xPropertySet->setPropertyValue("FillTransparence", uno::makeAny(sal_Int32(100)));
+                m_bFormField = false;
+            }
+            break;
+        case DESTINATION_CREATIONTIME:
+            if (m_xDocumentProperties.is())
+                m_xDocumentProperties->setCreationDate(lcl_getDateTime(m_aStates));
+            break;
+        case DESTINATION_REVISIONTIME:
+            if (m_xDocumentProperties.is())
+                m_xDocumentProperties->setModificationDate(lcl_getDateTime(m_aStates));
+            break;
+        case DESTINATION_PRINTTIME:
+            if (m_xDocumentProperties.is())
+                m_xDocumentProperties->setPrintDate(lcl_getDateTime(m_aStates));
+            break;
+        case DESTINATION_AUTHOR:
+            if (m_xDocumentProperties.is())
+                m_xDocumentProperties->setAuthor(m_aStates.top().aDestinationText.makeStringAndClear());
+            break;
+        case DESTINATION_KEYWORDS:
+            if (m_xDocumentProperties.is())
+                m_xDocumentProperties->setKeywords(comphelper::string::convertCommaSeparated(m_aStates.top().aDestinationText.makeStringAndClear()));
+            break;
+        case DESTINATION_COMMENT:
+            if (m_xDocumentProperties.is())
+                m_xDocumentProperties->setGenerator(m_aStates.top().aDestinationText.makeStringAndClear());
+            break;
+        case DESTINATION_SUBJECT:
+            if (m_xDocumentProperties.is())
+                m_xDocumentProperties->setSubject(m_aStates.top().aDestinationText.makeStringAndClear());
+            break;
+        case DESTINATION_DOCCOMM:
+            if (m_xDocumentProperties.is())
+                m_xDocumentProperties->setDescription(m_aStates.top().aDestinationText.makeStringAndClear());
+            break;
+        case DESTINATION_OPERATOR:
+        case DESTINATION_COMPANY:
+            {
+                OUString aName = m_aStates.top().nDestinationState == DESTINATION_OPERATOR ? OUString("Operator") : OUString("Company");
+                if (m_xDocumentProperties.is())
+                {
+                    uno::Reference<beans::XPropertyContainer> xUserDefinedProperties = m_xDocumentProperties->getUserDefinedProperties();
+                    xUserDefinedProperties->addProperty(aName, beans::PropertyAttribute::REMOVABLE,
+                            uno::makeAny(m_aStates.top().aDestinationText.makeStringAndClear()));
+                }
+            }
+            break;
+        case DESTINATION_OBJDATA:
+            {
+                m_pObjectData.reset(new SvMemoryStream());
+                int b = 0, count = 2;
 
-        m_pSdrImport->resolveFLine(xPropertySet, rDrawing.nFLine);
+                // Feed the destination text to a stream.
+                OString aStr = OUStringToOString(m_aStates.top().aDestinationText.makeStringAndClear(), RTL_TEXTENCODING_ASCII_US);
+                const char *str = aStr.getStr();
+                for (int i = 0; i < aStr.getLength(); ++i)
+                {
+                    char ch = str[i];
+                    if (ch != 0x0d && ch != 0x0a)
+                    {
+                        b = b << 4;
+                        sal_Int8 parsed = m_pTokenizer->asHex(ch);
+                        if (parsed == -1)
+                            return ERROR_HEX_INVALID;
+                        b += parsed;
+                        count--;
+                        if (!count)
+                        {
+                            *m_pObjectData << (char)b;
+                            count = 2;
+                            b = 0;
+                        }
+                    }
+                }
 
-        Mapper().startShape(xShape);
-        replayShapetext();
-        Mapper().endShape();
-    }
-    break;
-    case DESTINATION_SHAPE:
-    if (m_aStates.top().aFrame.inFrame())
-    {
-        m_aStates.top().resetFrame();
-        parBreak();
-        // Save this state for later use, so we only reset frame status only for the first shape inside a frame.
-        aState = m_aStates.top();
-        m_bNeedPap = true;
-    }
-    break;
-    case DESTINATION_MOMATH:
-    {
-        m_aMathBuffer.appendClosingTag(M_TOKEN(oMath));
+                if (m_pObjectData->Tell())
+                {
+                    m_pObjectData->Seek(0);
 
-        SvGlobalName aGlobalName(SO3_SM_CLASSID);
-        comphelper::EmbeddedObjectContainer aContainer;
-        OUString aName;
-        uno::Reference<embed::XEmbeddedObject> xObject = aContainer.CreateEmbeddedObject(aGlobalName.GetByteSequence(), aName);
-        uno::Reference<util::XCloseable> xComponent(xObject->getComponent(), uno::UNO_QUERY);
-// gcc4.4 (and 4.3 and possibly older) have a problem with dynamic_cast directly to the target class,
-// so help it with an intermediate cast. I'm not sure what exactly the problem is, seems to be unrelated
-// to RTLD_GLOBAL, so most probably a gcc bug.
-        oox::FormulaImportBase* pImport = dynamic_cast<oox::FormulaImportBase*>(dynamic_cast<SfxBaseModel*>(xComponent.get()));
-        assert( pImport != NULL );
-        pImport->readFormulaOoxml(m_aMathBuffer);
-        RTFValue::Pointer_t pValue(new RTFValue(xObject));
-        RTFSprms aMathAttributes;
-        aMathAttributes.set(NS_ooxml::LN_starmath, pValue);
-        writerfilter::Reference<Properties>::Pointer_t const pProperties(new RTFReferenceProperties(aMathAttributes));
-        Mapper().props(pProperties);
-        m_aMathBuffer = oox::formulaimport::XmlStreamBuilder();
-    }
-    break;
-    case DESTINATION_MR: lcl_DestinationToMath(m_aStates.top().aDestinationText, m_aMathBuffer); break;
-    case DESTINATION_MF: m_aMathBuffer.appendClosingTag(M_TOKEN(f)); break;
-    case DESTINATION_MFPR: m_aMathBuffer.appendClosingTag(M_TOKEN(fPr)); break;
-    case DESTINATION_MCTRLPR: m_aMathBuffer.appendClosingTag(M_TOKEN(ctrlPr)); break;
-    case DESTINATION_MNUM: m_aMathBuffer.appendClosingTag(M_TOKEN(num)); break;
-    case DESTINATION_MDEN: m_aMathBuffer.appendClosingTag(M_TOKEN(den)); break;
-    case DESTINATION_MACC: m_aMathBuffer.appendClosingTag(M_TOKEN(acc)); break;
-    case DESTINATION_MACCPR: m_aMathBuffer.appendClosingTag(M_TOKEN(accPr)); break;
-    case DESTINATION_MCHR: if (!nMathToken) nMathToken = M_TOKEN(chr);
-    case DESTINATION_MPOS: if (!nMathToken) nMathToken = M_TOKEN(pos);
-    case DESTINATION_MVERTJC: if (!nMathToken) nMathToken = M_TOKEN(vertJc);
-    case DESTINATION_MSTRIKEH: if (!nMathToken) nMathToken = M_TOKEN(strikeH);
-    case DESTINATION_MDEGHIDE: if (!nMathToken) nMathToken = M_TOKEN(degHide);
-    case DESTINATION_MBEGCHR: if (!nMathToken) nMathToken = M_TOKEN(begChr);
-    case DESTINATION_MSEPCHR: if (!nMathToken) nMathToken = M_TOKEN(sepChr);
-    case DESTINATION_MENDCHR: if (!nMathToken) nMathToken = M_TOKEN(endChr);
-    case DESTINATION_MSUBHIDE: if (!nMathToken) nMathToken = M_TOKEN(subHide);
-    case DESTINATION_MSUPHIDE: if (!nMathToken) nMathToken = M_TOKEN(supHide);
-    case DESTINATION_MTYPE: if (!nMathToken) nMathToken = M_TOKEN(type);
-    case DESTINATION_MGROW: if (!nMathToken) nMathToken = M_TOKEN(grow);
-    {
-        oox::formulaimport::XmlStream::AttributeList aAttribs;
-        aAttribs[M_TOKEN(val)] = m_aStates.top().aDestinationText.makeStringAndClear();
-        m_aMathBuffer.appendOpeningTag(nMathToken, aAttribs);
-        m_aMathBuffer.appendClosingTag(nMathToken);
-    }
-    break;
-    case DESTINATION_ME: m_aMathBuffer.appendClosingTag(M_TOKEN(e)); break;
-    case DESTINATION_MBAR: m_aMathBuffer.appendClosingTag(M_TOKEN(bar)); break;
-    case DESTINATION_MBARPR: m_aMathBuffer.appendClosingTag(M_TOKEN(barPr)); break;
-    case DESTINATION_MD: m_aMathBuffer.appendClosingTag(M_TOKEN(d)); break;
-    case DESTINATION_MDPR: m_aMathBuffer.appendClosingTag(M_TOKEN(dPr)); break;
-    case DESTINATION_MFUNC: m_aMathBuffer.appendClosingTag(M_TOKEN(func)); break;
-    case DESTINATION_MFUNCPR: m_aMathBuffer.appendClosingTag(M_TOKEN(funcPr)); break;
-    case DESTINATION_MFNAME: m_aMathBuffer.appendClosingTag(M_TOKEN(fName)); break;
-    case DESTINATION_MLIMLOW: m_aMathBuffer.appendClosingTag(M_TOKEN(limLow)); break;
-    case DESTINATION_MLIMLOWPR: m_aMathBuffer.appendClosingTag(M_TOKEN(limLowPr)); break;
-    case DESTINATION_MLIM: m_aMathBuffer.appendClosingTag(M_TOKEN(lim)); break;
-    case DESTINATION_MM: m_aMathBuffer.appendClosingTag(M_TOKEN(m)); break;
-    case DESTINATION_MMPR: m_aMathBuffer.appendClosingTag(M_TOKEN(mPr)); break;
-    case DESTINATION_MMR: m_aMathBuffer.appendClosingTag(M_TOKEN(mr)); break;
-    case DESTINATION_MNARY: m_aMathBuffer.appendClosingTag(M_TOKEN(nary)); break;
-    case DESTINATION_MNARYPR: m_aMathBuffer.appendClosingTag(M_TOKEN(naryPr)); break;
-    case DESTINATION_MSUB: m_aMathBuffer.appendClosingTag(M_TOKEN(sub)); break;
-    case DESTINATION_MSUP: m_aMathBuffer.appendClosingTag(M_TOKEN(sup)); break;
-    case DESTINATION_MLIMUPP: m_aMathBuffer.appendClosingTag(M_TOKEN(limUpp)); break;
-    case DESTINATION_MLIMUPPPR: m_aMathBuffer.appendClosingTag(M_TOKEN(limUppPr)); break;
-    case DESTINATION_MGROUPCHR: m_aMathBuffer.appendClosingTag(M_TOKEN(groupChr)); break;
-    case DESTINATION_MGROUPCHRPR: m_aMathBuffer.appendClosingTag(M_TOKEN(groupChrPr)); break;
-    case DESTINATION_MBORDERBOX: m_aMathBuffer.appendClosingTag(M_TOKEN(borderBox)); break;
-    case DESTINATION_MBORDERBOXPR: m_aMathBuffer.appendClosingTag(M_TOKEN(borderBoxPr)); break;
-    case DESTINATION_MRAD: m_aMathBuffer.appendClosingTag(M_TOKEN(rad)); break;
-    case DESTINATION_MRADPR: m_aMathBuffer.appendClosingTag(M_TOKEN(radPr)); break;
-    case DESTINATION_MDEG: m_aMathBuffer.appendClosingTag(M_TOKEN(deg)); break;
-    case DESTINATION_MSSUB: m_aMathBuffer.appendClosingTag(M_TOKEN(sSub)); break;
-    case DESTINATION_MSSUBPR: m_aMathBuffer.appendClosingTag(M_TOKEN(sSubPr)); break;
-    case DESTINATION_MSSUP: m_aMathBuffer.appendClosingTag(M_TOKEN(sSup)); break;
-    case DESTINATION_MSSUPPR: m_aMathBuffer.appendClosingTag(M_TOKEN(sSupPr)); break;
-    case DESTINATION_MSSUBSUP: m_aMathBuffer.appendClosingTag(M_TOKEN(sSubSup)); break;
-    case DESTINATION_MSSUBSUPPR: m_aMathBuffer.appendClosingTag(M_TOKEN(sSubSupPr)); break;
-    case DESTINATION_MSPRE: m_aMathBuffer.appendClosingTag(M_TOKEN(sPre)); break;
-    case DESTINATION_MSPREPR: m_aMathBuffer.appendClosingTag(M_TOKEN(sPrePr)); break;
-    case DESTINATION_MBOX: m_aMathBuffer.appendClosingTag(M_TOKEN(box)); break;
-    case DESTINATION_MEQARR: m_aMathBuffer.appendClosingTag(M_TOKEN(eqArr)); break;
-    default: break;
+                    // Skip ObjectHeader
+                    sal_uInt32 nData;
+                    *m_pObjectData >> nData; // OLEVersion
+                    *m_pObjectData >> nData; // FormatID
+                    *m_pObjectData >> nData; // ClassName
+                    m_pObjectData->SeekRel(nData);
+                    *m_pObjectData >> nData; // TopicName
+                    m_pObjectData->SeekRel(nData);
+                    *m_pObjectData >> nData; // ItemName
+                    m_pObjectData->SeekRel(nData);
+                    *m_pObjectData >> nData; // NativeDataSize
+                }
+
+                uno::Reference<io::XInputStream> xInputStream(new utl::OInputStreamWrapper(m_pObjectData.get()));
+                RTFValue::Pointer_t pStreamValue(new RTFValue(xInputStream));
+
+                RTFSprms aOLEAttributes;
+                aOLEAttributes.set(NS_ooxml::LN_inputstream, pStreamValue);
+                RTFValue::Pointer_t pValue(new RTFValue(aOLEAttributes));
+                m_aObjectSprms.set(NS_ooxml::LN_OLEObject_OLEObject, pValue);
+            }
+            break;
+        case DESTINATION_OBJECT:
+            {
+                if (!m_bObject)
+                {
+                    // if the object is in a special container we will use the \result
+                    // element instead of the \objdata
+                    // (see RTF_OBJECT in RTFDocumentImpl::dispatchDestination)
+                    break;
+                }
+
+                RTFSprms aObjAttributes;
+                RTFSprms aObjSprms;
+                RTFValue::Pointer_t pValue(new RTFValue(m_aObjectAttributes, m_aObjectSprms));
+                aObjSprms.set(NS_ooxml::LN_object, pValue);
+                writerfilter::Reference<Properties>::Pointer_t const pProperties(new RTFReferenceProperties(aObjAttributes, aObjSprms));
+                uno::Reference<drawing::XShape> xShape;
+                RTFValue::Pointer_t pShape = m_aObjectAttributes.find(NS_ooxml::LN_shape);
+                OSL_ASSERT(pShape.get());
+                if (pShape.get())
+                    pShape->getAny() >>= xShape;
+                Mapper().startShape(xShape);
+                Mapper().props(pProperties);
+                Mapper().endShape();
+                m_aObjectAttributes.clear();
+                m_aObjectSprms.clear();
+                m_bObject = false;
+            }
+            break;
+        case DESTINATION_ANNOTATIONDATE:
+            {
+                OUString aStr(OStringToOUString(lcl_DTTM22OString(m_aStates.top().aDestinationText.makeStringAndClear().toInt32()),
+                            m_aStates.top().nCurrentEncoding));
+                RTFValue::Pointer_t pValue(new RTFValue(aStr));
+                RTFSprms aAnnAttributes;
+                aAnnAttributes.set(NS_ooxml::LN_CT_TrackChange_date, pValue);
+                writerfilter::Reference<Properties>::Pointer_t const pProperties(new RTFReferenceProperties(aAnnAttributes));
+                Mapper().props(pProperties);
+            }
+            break;
+        case DESTINATION_ANNOTATIONAUTHOR:
+            m_aAuthor = m_aStates.top().aDestinationText.makeStringAndClear();
+            break;
+        case DESTINATION_ATNID:
+            m_aAuthorInitials = m_aStates.top().aDestinationText.makeStringAndClear();
+            break;
+        case DESTINATION_FALT:
+            {
+                OUString aStr(m_aStates.top().aDestinationText.makeStringAndClear());
+                RTFValue::Pointer_t pValue(new RTFValue(aStr));
+                aState.aTableSprms.set(NS_ooxml::LN_CT_Font_altName, pValue);
+            }
+            break;
+        case DESTINATION_DRAWINGOBJECT:
+            if (m_aStates.top().aDrawingObject.xShape.is())
+            {
+                RTFDrawingObject& rDrawing = m_aStates.top().aDrawingObject;
+                uno::Reference<drawing::XShape> xShape(rDrawing.xShape);
+                uno::Reference<beans::XPropertySet> xPropertySet(rDrawing.xPropertySet);
+
+                uno::Reference<lang::XServiceInfo> xServiceInfo(xShape, uno::UNO_QUERY);
+                bool bTextFrame = xServiceInfo->supportsService("com.sun.star.text.TextFrame");
+
+                if (bTextFrame)
+                {
+                    xPropertySet->setPropertyValue("HoriOrientPosition", uno::makeAny((sal_Int32)rDrawing.nLeft));
+                    xPropertySet->setPropertyValue("VertOrientPosition", uno::makeAny((sal_Int32)rDrawing.nTop));
+                }
+                else
+                {
+                    xShape->setPosition(awt::Point(rDrawing.nLeft, rDrawing.nTop));
+                }
+                xShape->setSize(awt::Size(rDrawing.nRight, rDrawing.nBottom));
+
+                if (rDrawing.bHasLineColor)
+                    xPropertySet->setPropertyValue("LineColor", uno::makeAny(sal_uInt32((rDrawing.nLineColorR<<16) + (rDrawing.nLineColorG<<8) + rDrawing.nLineColorB)));
+                if (rDrawing.bHasFillColor)
+                    xPropertySet->setPropertyValue("FillColor", uno::makeAny(sal_uInt32((rDrawing.nFillColorR<<16) + (rDrawing.nFillColorG<<8) + rDrawing.nFillColorB)));
+                else if (!bTextFrame)
+                    // If there is no fill, the Word default is 100% transparency.
+                    xPropertySet->setPropertyValue("FillTransparence", uno::makeAny(sal_Int32(100)));
+
+                m_pSdrImport->resolveFLine(xPropertySet, rDrawing.nFLine);
+
+                Mapper().startShape(xShape);
+                replayShapetext();
+                Mapper().endShape();
+            }
+            break;
+        case DESTINATION_SHAPE:
+            if (m_aStates.top().aFrame.inFrame())
+            {
+                m_aStates.top().resetFrame();
+                parBreak();
+                // Save this state for later use, so we only reset frame status only for the first shape inside a frame.
+                aState = m_aStates.top();
+                m_bNeedPap = true;
+            }
+            break;
+        case DESTINATION_MOMATH:
+            {
+                m_aMathBuffer.appendClosingTag(M_TOKEN(oMath));
+
+                SvGlobalName aGlobalName(SO3_SM_CLASSID);
+                comphelper::EmbeddedObjectContainer aContainer;
+                OUString aName;
+                uno::Reference<embed::XEmbeddedObject> xObject = aContainer.CreateEmbeddedObject(aGlobalName.GetByteSequence(), aName);
+                uno::Reference<util::XCloseable> xComponent(xObject->getComponent(), uno::UNO_QUERY);
+                // gcc4.4 (and 4.3 and possibly older) have a problem with dynamic_cast directly to the target class,
+                // so help it with an intermediate cast. I'm not sure what exactly the problem is, seems to be unrelated
+                // to RTLD_GLOBAL, so most probably a gcc bug.
+                oox::FormulaImportBase* pImport = dynamic_cast<oox::FormulaImportBase*>(dynamic_cast<SfxBaseModel*>(xComponent.get()));
+                assert( pImport != NULL );
+                pImport->readFormulaOoxml(m_aMathBuffer);
+                RTFValue::Pointer_t pValue(new RTFValue(xObject));
+                RTFSprms aMathAttributes;
+                aMathAttributes.set(NS_ooxml::LN_starmath, pValue);
+                writerfilter::Reference<Properties>::Pointer_t const pProperties(new RTFReferenceProperties(aMathAttributes));
+                Mapper().props(pProperties);
+                m_aMathBuffer = oox::formulaimport::XmlStreamBuilder();
+            }
+            break;
+        case DESTINATION_MR:
+            lcl_DestinationToMath(m_aStates.top().aDestinationText, m_aMathBuffer);
+            break;
+        case DESTINATION_MF:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(f));
+            break;
+        case DESTINATION_MFPR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(fPr));
+            break;
+        case DESTINATION_MCTRLPR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(ctrlPr));
+            break;
+        case DESTINATION_MNUM:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(num));
+            break;
+        case DESTINATION_MDEN:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(den));
+            break;
+        case DESTINATION_MACC:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(acc));
+            break;
+        case DESTINATION_MACCPR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(accPr));
+            break;
+        case DESTINATION_MCHR:
+        case DESTINATION_MPOS:
+        case DESTINATION_MVERTJC:
+        case DESTINATION_MSTRIKEH:
+        case DESTINATION_MDEGHIDE:
+        case DESTINATION_MBEGCHR:
+        case DESTINATION_MSEPCHR:
+        case DESTINATION_MENDCHR:
+        case DESTINATION_MSUBHIDE:
+        case DESTINATION_MSUPHIDE:
+        case DESTINATION_MTYPE:
+        case DESTINATION_MGROW:
+            {
+                sal_Int32 nMathToken = 0;
+                switch (aState.nDestinationState)
+                {
+                    case DESTINATION_MCHR:
+                        nMathToken = M_TOKEN(chr);
+                        break;
+                    case DESTINATION_MPOS:
+                        nMathToken = M_TOKEN(pos);
+                        break;
+                    case DESTINATION_MVERTJC:
+                        nMathToken = M_TOKEN(vertJc);
+                        break;
+                    case DESTINATION_MSTRIKEH:
+                        nMathToken = M_TOKEN(strikeH);
+                        break;
+                    case DESTINATION_MDEGHIDE:
+                        nMathToken = M_TOKEN(degHide);
+                        break;
+                    case DESTINATION_MBEGCHR:
+                        nMathToken = M_TOKEN(begChr);
+                        break;
+                    case DESTINATION_MSEPCHR:
+                        nMathToken = M_TOKEN(sepChr);
+                        break;
+                    case DESTINATION_MENDCHR:
+                        nMathToken = M_TOKEN(endChr);
+                        break;
+                    case DESTINATION_MSUBHIDE:
+                        nMathToken = M_TOKEN(subHide);
+                        break;
+                    case DESTINATION_MSUPHIDE:
+                        nMathToken = M_TOKEN(supHide);
+                        break;
+                    case DESTINATION_MTYPE:
+                        nMathToken = M_TOKEN(type);
+                        break;
+                    case DESTINATION_MGROW:
+                        nMathToken = M_TOKEN(grow);
+                        break;
+                    default:
+                        break;
+                }
+
+                oox::formulaimport::XmlStream::AttributeList aAttribs;
+                aAttribs[M_TOKEN(val)] = m_aStates.top().aDestinationText.makeStringAndClear();
+                m_aMathBuffer.appendOpeningTag(nMathToken, aAttribs);
+                m_aMathBuffer.appendClosingTag(nMathToken);
+            }
+            break;
+        case DESTINATION_ME:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(e));
+            break;
+        case DESTINATION_MBAR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(bar));
+            break;
+        case DESTINATION_MBARPR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(barPr));
+            break;
+        case DESTINATION_MD:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(d));
+            break;
+        case DESTINATION_MDPR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(dPr));
+            break;
+        case DESTINATION_MFUNC:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(func));
+            break;
+        case DESTINATION_MFUNCPR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(funcPr));
+            break;
+        case DESTINATION_MFNAME:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(fName));
+            break;
+        case DESTINATION_MLIMLOW:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(limLow));
+            break;
+        case DESTINATION_MLIMLOWPR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(limLowPr));
+            break;
+        case DESTINATION_MLIM:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(lim));
+            break;
+        case DESTINATION_MM:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(m));
+            break;
+        case DESTINATION_MMPR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(mPr));
+            break;
+        case DESTINATION_MMR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(mr));
+            break;
+        case DESTINATION_MNARY:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(nary));
+            break;
+        case DESTINATION_MNARYPR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(naryPr));
+            break;
+        case DESTINATION_MSUB:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(sub));
+            break;
+        case DESTINATION_MSUP:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(sup));
+            break;
+        case DESTINATION_MLIMUPP:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(limUpp));
+            break;
+        case DESTINATION_MLIMUPPPR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(limUppPr));
+            break;
+        case DESTINATION_MGROUPCHR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(groupChr));
+            break;
+        case DESTINATION_MGROUPCHRPR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(groupChrPr));
+            break;
+        case DESTINATION_MBORDERBOX:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(borderBox));
+            break;
+        case DESTINATION_MBORDERBOXPR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(borderBoxPr));
+            break;
+        case DESTINATION_MRAD:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(rad));
+            break;
+        case DESTINATION_MRADPR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(radPr));
+            break;
+        case DESTINATION_MDEG:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(deg));
+            break;
+        case DESTINATION_MSSUB:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(sSub));
+            break;
+        case DESTINATION_MSSUBPR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(sSubPr));
+            break;
+        case DESTINATION_MSSUP:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(sSup));
+            break;
+        case DESTINATION_MSSUPPR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(sSupPr));
+            break;
+        case DESTINATION_MSSUBSUP:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(sSubSup));
+            break;
+        case DESTINATION_MSSUBSUPPR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(sSubSupPr));
+            break;
+        case DESTINATION_MSPRE:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(sPre));
+            break;
+        case DESTINATION_MSPREPR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(sPrePr));
+            break;
+        case DESTINATION_MBOX:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(box));
+            break;
+        case DESTINATION_MEQARR:
+            m_aMathBuffer.appendClosingTag(M_TOKEN(eqArr));
+            break;
+        default:
+            break;
     }
 
     // See if we need to end a track change
@@ -4134,160 +4367,182 @@
     m_pTokenizer->popGroup();
 
     // list table
-    if (aState.nDestinationState == DESTINATION_LISTENTRY)
+    switch (aState.nDestinationState)
     {
-        RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes, aState.aTableSprms));
-        m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_abstractNum, pValue, false);
-    }
-    else if (aState.nDestinationState == DESTINATION_PARAGRAPHNUMBERING)
-    {
-        RTFValue::Pointer_t pIdValue = aState.aTableAttributes.find(NS_rtf::LN_LSID);
-        if (pIdValue.get())
-        {
-            // Abstract numbering
-            RTFSprms aLeveltextAttributes;
-            OUString aTextValue;
-            RTFValue::Pointer_t pTextBefore = aState.aTableAttributes.find(NS_ooxml::LN_CT_LevelText_val);
-            if (pTextBefore.get())
-                aTextValue += pTextBefore->getString();
-            aTextValue += "%1";
-            RTFValue::Pointer_t pTextAfter = aState.aTableAttributes.find(NS_ooxml::LN_CT_LevelSuffix_val);
-            if (pTextAfter.get())
-                aTextValue += pTextAfter->getString();
-            RTFValue::Pointer_t pTextValue(new RTFValue(aTextValue));
-            aLeveltextAttributes.set(NS_ooxml::LN_CT_LevelText_val, pTextValue);
+        case DESTINATION_LISTENTRY:
+            {
+                RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes, aState.aTableSprms));
+                m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_abstractNum, pValue, false);
+            }
+            break;
+        case DESTINATION_PARAGRAPHNUMBERING:
+            {
+                RTFValue::Pointer_t pIdValue = aState.aTableAttributes.find(NS_rtf::LN_LSID);
+                if (pIdValue.get())
+                {
+                    // Abstract numbering
+                    RTFSprms aLeveltextAttributes;
+                    OUString aTextValue;
+                    RTFValue::Pointer_t pTextBefore = aState.aTableAttributes.find(NS_ooxml::LN_CT_LevelText_val);
+                    if (pTextBefore.get())
+                        aTextValue += pTextBefore->getString();
+                    aTextValue += "%1";
+                    RTFValue::Pointer_t pTextAfter = aState.aTableAttributes.find(NS_ooxml::LN_CT_LevelSuffix_val);
+                    if (pTextAfter.get())
+                        aTextValue += pTextAfter->getString();
+                    RTFValue::Pointer_t pTextValue(new RTFValue(aTextValue));
+                    aLeveltextAttributes.set(NS_ooxml::LN_CT_LevelText_val, pTextValue);
 
-            RTFSprms aLevelAttributes;
-            RTFSprms aLevelSprms;
-            RTFValue::Pointer_t pIlvlValue(new RTFValue(0));
-            aLevelAttributes.set(NS_ooxml::LN_CT_Lvl_ilvl, pIlvlValue);
+                    RTFSprms aLevelAttributes;
+                    RTFSprms aLevelSprms;
+                    RTFValue::Pointer_t pIlvlValue(new RTFValue(0));
+                    aLevelAttributes.set(NS_ooxml::LN_CT_Lvl_ilvl, pIlvlValue);
 
-            RTFValue::Pointer_t pNfcValue = aState.aTableSprms.find(NS_rtf::LN_NFC);
-            if (pNfcValue.get())
-                aLevelSprms.set(NS_rtf::LN_NFC, pNfcValue);
+                    RTFValue::Pointer_t pNfcValue = aState.aTableSprms.find(NS_rtf::LN_NFC);
+                    if (pNfcValue.get())
+                        aLevelSprms.set(NS_rtf::LN_NFC, pNfcValue);
 
-            RTFValue::Pointer_t pStartatValue = aState.aTableSprms.find(NS_rtf::LN_ISTARTAT);
-            if (pStartatValue.get())
-                aLevelSprms.set(NS_rtf::LN_ISTARTAT, pStartatValue);
+                    RTFValue::Pointer_t pStartatValue = aState.aTableSprms.find(NS_rtf::LN_ISTARTAT);
+                    if (pStartatValue.get())
+                        aLevelSprms.set(NS_rtf::LN_ISTARTAT, pStartatValue);
 
-            RTFValue::Pointer_t pLeveltextValue(new RTFValue(aLeveltextAttributes));
-            aLevelSprms.set(NS_ooxml::LN_CT_Lvl_lvlText, pLeveltextValue);
-            RTFValue::Pointer_t pRunProps = aState.aTableSprms.find(NS_ooxml::LN_CT_Lvl_rPr);
-            if (pRunProps.get())
-                aLevelSprms.set(NS_ooxml::LN_CT_Lvl_rPr, pRunProps);
+                    RTFValue::Pointer_t pLeveltextValue(new RTFValue(aLeveltextAttributes));
+                    aLevelSprms.set(NS_ooxml::LN_CT_Lvl_lvlText, pLeveltextValue);
+                    RTFValue::Pointer_t pRunProps = aState.aTableSprms.find(NS_ooxml::LN_CT_Lvl_rPr);
+                    if (pRunProps.get())
+                        aLevelSprms.set(NS_ooxml::LN_CT_Lvl_rPr, pRunProps);
 
-            RTFSprms aAbstractAttributes;
-            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);
+                    RTFSprms aAbstractAttributes;
+                    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);
 
-            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);
+                    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);
 
-            // Numbering
-            RTFSprms aNumberingAttributes;
-            RTFSprms aNumberingSprms;
-            aNumberingAttributes.set(NS_rtf::LN_LSID, 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);
+                    // Numbering
+                    RTFSprms aNumberingAttributes;
+                    RTFSprms aNumberingSprms;
+                    aNumberingAttributes.set(NS_rtf::LN_LSID, 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);
 
-            // Table
-            RTFSprms aListTableAttributes;
-            writerfilter::Reference<Properties>::Pointer_t const pProp(new RTFReferenceProperties(aListTableAttributes, aListTableSprms));
+                    // Table
+                    RTFSprms aListTableAttributes;
+                    writerfilter::Reference<Properties>::Pointer_t const pProp(new RTFReferenceProperties(aListTableAttributes, aListTableSprms));
 
-            RTFReferenceTable::Entries_t aListTableEntries;
-            aListTableEntries.insert(make_pair(0, pProp));
-            writerfilter::Reference<Table>::Pointer_t const pTable(new RTFReferenceTable(aListTableEntries));
-            Mapper().table(NS_rtf::LN_LISTTABLE, pTable);
+                    RTFReferenceTable::Entries_t aListTableEntries;
+                    aListTableEntries.insert(make_pair(0, pProp));
+                    writerfilter::Reference<Table>::Pointer_t const pTable(new RTFReferenceTable(aListTableEntries));
+                    Mapper().table(NS_rtf::LN_LISTTABLE, pTable);
 
-            // Use it
-            lcl_putNestedSprm(m_aStates.top().aParagraphSprms, NS_ooxml::LN_CT_PPrBase_numPr, NS_sprm::LN_PIlvl, pIlvlValue);
-            lcl_putNestedSprm(m_aStates.top().aParagraphSprms, NS_ooxml::LN_CT_PPrBase_tabs, NS_sprm::LN_PIlfo, pIdValue);
-        }
-    }
-    else if (aState.nDestinationState == DESTINATION_PARAGRAPHNUMBERING_TEXTAFTER)
-    {
-        RTFValue::Pointer_t pValue(new RTFValue(aState.aDestinationText.makeStringAndClear(), true));
-        m_aStates.top().aTableAttributes.set(NS_ooxml::LN_CT_LevelSuffix_val, pValue);
-    }
-    else if (aState.nDestinationState == DESTINATION_PARAGRAPHNUMBERING_TEXTBEFORE)
-    {
-        RTFValue::Pointer_t pValue(new RTFValue(aState.aDestinationText.makeStringAndClear(), true));
-        m_aStates.top().aTableAttributes.set(NS_ooxml::LN_CT_LevelText_val, pValue);
-    }
-    else if (aState.nDestinationState == DESTINATION_LISTLEVEL)
-    {
-        RTFValue::Pointer_t pInnerValue(new RTFValue(m_aStates.top().nListLevelNum++));
-        aState.aTableAttributes.set(NS_ooxml::LN_CT_Lvl_ilvl, pInnerValue);
+                    // Use it
+                    lcl_putNestedSprm(m_aStates.top().aParagraphSprms, NS_ooxml::LN_CT_PPrBase_numPr, NS_sprm::LN_PIlvl, pIlvlValue);
+                    lcl_putNestedSprm(m_aStates.top().aParagraphSprms, NS_ooxml::LN_CT_PPrBase_tabs, NS_sprm::LN_PIlfo, pIdValue);
+                }
+            }
+            break;
+        case DESTINATION_PARAGRAPHNUMBERING_TEXTAFTER:
+            {
+                RTFValue::Pointer_t pValue(new RTFValue(aState.aDestinationText.makeStringAndClear(), true));
+                m_aStates.top().aTableAttributes.set(NS_ooxml::LN_CT_LevelSuffix_val, pValue);
+            }
+            break;
+        case DESTINATION_PARAGRAPHNUMBERING_TEXTBEFORE:
+            {
+                RTFValue::Pointer_t pValue(new RTFValue(aState.aDestinationText.makeStringAndClear(), true));
+                m_aStates.top().aTableAttributes.set(NS_ooxml::LN_CT_LevelText_val, pValue);
+            }
+            break;
+        case DESTINATION_LISTLEVEL:
+            {
+                RTFValue::Pointer_t pInnerValue(new RTFValue(m_aStates.top().nListLevelNum++));
+                aState.aTableAttributes.set(NS_ooxml::LN_CT_Lvl_ilvl, pInnerValue);
 
-        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);
-        else
-            m_aStates.top().aTableSprms.set(NS_ooxml::LN_CT_NumLvl_lvl, pValue);
-    }
-    else if (aState.nDestinationState == DESTINATION_LFOLEVEL)
-    {
-        RTFValue::Pointer_t pInnerValue(new RTFValue(m_aStates.top().nListLevelNum++));
-        aState.aTableAttributes.set(NS_ooxml::LN_CT_NumLvl_ilvl, pInnerValue);
+                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);
+                else
+                    m_aStates.top().aTableSprms.set(NS_ooxml::LN_CT_NumLvl_lvl, pValue);
+            }
+            break;
+        case DESTINATION_LFOLEVEL:
+            {
+                RTFValue::Pointer_t pInnerValue(new RTFValue(m_aStates.top().nListLevelNum++));
+                aState.aTableAttributes.set(NS_ooxml::LN_CT_NumLvl_ilvl, pInnerValue);
 
-        RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes, aState.aTableSprms));
-        m_aStates.top().aTableSprms.set(NS_ooxml::LN_CT_Num_lvlOverride, pValue);
-    }
-    // list override table
-    else if (aState.nDestinationState == DESTINATION_LISTOVERRIDEENTRY)
-    {
-        RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes, aState.aTableSprms));
-        m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_num, pValue, false);
-    }
-    else if (aState.nDestinationState == DESTINATION_LEVELTEXT)
-    {
-        RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes));
-        m_aStates.top().aTableSprms.set(NS_ooxml::LN_CT_Lvl_lvlText, pValue);
-    }
-    else if (aState.nDestinationState == DESTINATION_LEVELNUMBERS)
-        m_aStates.top().aTableSprms = aState.aTableSprms;
-    else if (aState.nDestinationState == DESTINATION_FIELDINSTRUCTION)
-        m_aStates.top().nFieldStatus = FIELD_INSTRUCTION;
-    else if (aState.nDestinationState == DESTINATION_FIELDRESULT)
-        m_aStates.top().nFieldStatus = FIELD_RESULT;
-    else if (aState.nDestinationState == DESTINATION_FIELD)
-    {
-        if (aState.nFieldStatus == FIELD_INSTRUCTION)
-            singleChar(0x15);
-    }
-    else if (aState.nDestinationState == DESTINATION_SHAPEPROPERTYVALUEPICT)
-    {
-        m_aStates.top().aPicture = aState.aPicture;
-        m_aStates.top().aDestinationText = aState.aDestinationText;
-    }
-    else if (aState.nDestinationState == DESTINATION_FALT)
-        m_aStates.top().aTableSprms = aState.aTableSprms;
-    else if (m_aStates.size() && m_aStates.top().nDestinationState == DESTINATION_PICT)
-        m_aStates.top().aPicture = aState.aPicture;
-    else if (aState.nDestinationState == DESTINATION_SHAPEPROPERTYNAME ||
-            aState.nDestinationState == DESTINATION_SHAPEPROPERTYVALUE ||
-            aState.nDestinationState == DESTINATION_SHAPEPROPERTY)
-    {
-        m_aStates.top().aShape = aState.aShape;
-        m_aStates.top().aPicture = aState.aPicture;
-        m_aStates.top().aCharacterAttributes = aState.aCharacterAttributes;
-    }
-    else if (aState.nDestinationState == DESTINATION_FLYMAINCONTENT ||
-            aState.nDestinationState == DESTINATION_SHPPICT ||
-            aState.nDestinationState == DESTINATION_SHAPE)
-        m_aStates.top().aFrame = aState.aFrame;
-    else if (aState.nDestinationState == DESTINATION_TITLE)
-    {
-        if (m_aStates.top().nDestinationState == DESTINATION_TITLE)
-            // The parent is a title as well, just append what we have so far.
-            m_aStates.top().aDestinationText.append(aState.aDestinationText.makeStringAndClear());
-        else if (m_xDocumentProperties.is())
-            m_xDocumentProperties->setTitle(aState.aDestinationText.makeStringAndClear());
+                RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes, aState.aTableSprms));
+                m_aStates.top().aTableSprms.set(NS_ooxml::LN_CT_Num_lvlOverride, pValue);
+            }
+            break;
+            // list override table
+        case DESTINATION_LISTOVERRIDEENTRY:
+            {
+                RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes, aState.aTableSprms));
+                m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_num, pValue, false);
+            }
+            break;
+        case DESTINATION_LEVELTEXT:
+            {
+                RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes));
+                m_aStates.top().aTableSprms.set(NS_ooxml::LN_CT_Lvl_lvlText, pValue);
+            }
+            break;
+        case DESTINATION_LEVELNUMBERS:
+            m_aStates.top().aTableSprms = aState.aTableSprms;
+            break;
+        case DESTINATION_FIELDINSTRUCTION:
+            m_aStates.top().nFieldStatus = FIELD_INSTRUCTION;
+            break;
+        case DESTINATION_FIELDRESULT:
+            m_aStates.top().nFieldStatus = FIELD_RESULT;
+            break;
+        case DESTINATION_FIELD:
+            if (aState.nFieldStatus == FIELD_INSTRUCTION)
+                singleChar(0x15);
+            break;
+        case DESTINATION_SHAPEPROPERTYVALUEPICT:
+            {
+                m_aStates.top().aPicture = aState.aPicture;
+                m_aStates.top().aDestinationText = aState.aDestinationText;
+            }
+            break;
+        case DESTINATION_FALT:
+            m_aStates.top().aTableSprms = aState.aTableSprms;
+            break;
+        case DESTINATION_SHAPEPROPERTYNAME:
+        case DESTINATION_SHAPEPROPERTYVALUE:
+        case DESTINATION_SHAPEPROPERTY:
+            {
+                m_aStates.top().aShape = aState.aShape;
+                m_aStates.top().aPicture = aState.aPicture;
+                m_aStates.top().aCharacterAttributes = aState.aCharacterAttributes;
+            }
+            break;
+        case DESTINATION_FLYMAINCONTENT:
+        case DESTINATION_SHPPICT:
+        case DESTINATION_SHAPE:
+            m_aStates.top().aFrame = aState.aFrame;
+            break;
+        case DESTINATION_TITLE:
+            {
+                if (m_aStates.top().nDestinationState == DESTINATION_TITLE)
+                    // The parent is a title as well, just append what we have so far.
+                    m_aStates.top().aDestinationText.append(aState.aDestinationText.makeStringAndClear());
+                else if (m_xDocumentProperties.is())
+                    m_xDocumentProperties->setTitle(aState.aDestinationText.makeStringAndClear());
+            }
+            break;
+        default:
+            {
+                if (m_aStates.size() && m_aStates.top().nDestinationState == DESTINATION_PICT)
+                    m_aStates.top().aPicture = aState.aPicture;
+            }
+            break;
     }
 
     if (aState.pCurrentBuffer == &m_aSuperBuffer)
@@ -4589,14 +4844,18 @@
                     pValue.reset(new RTFValue(nVertPadding));
                 break;
             case NS_ooxml::LN_CT_FramePr_hAnchor:
-                if ( nHoriAnchor == 0 )
-                    nHoriAnchor = NS_ooxml::LN_Value_wordprocessingml_ST_HAnchor_margin;
-                pValue.reset(new RTFValue(nHoriAnchor));
+                {
+                    if ( nHoriAnchor == 0 )
+                        nHoriAnchor = NS_ooxml::LN_Value_wordprocessingml_ST_HAnchor_margin;
+                    pValue.reset(new RTFValue(nHoriAnchor));
+                }
                 break;
             case NS_ooxml::LN_CT_FramePr_vAnchor:
-                if ( nVertAnchor == 0 )
-                    nVertAnchor = NS_ooxml::LN_Value_wordprocessingml_ST_VAnchor_margin;
-                pValue.reset(new RTFValue(nVertAnchor));
+                {
+                    if ( nVertAnchor == 0 )
+                        nVertAnchor = NS_ooxml::LN_Value_wordprocessingml_ST_VAnchor_margin;
+                    pValue.reset(new RTFValue(nVertAnchor));
+                }
                 break;
             case NS_ooxml::LN_CT_FramePr_xAlign:
                 pValue.reset(new RTFValue(nHoriAlign));
@@ -4611,8 +4870,8 @@
                     else if ( nH > 0 )
                         nHRule = NS_ooxml::LN_Value_wordprocessingml_ST_HeightRule_atLeast;
                     pValue.reset(new RTFValue(nHRule));
-                    break;
                 }
+                break;
             default:
                 break;
         }

-- 
To view, visit https://gerrit.libreoffice.org/3084
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If79fc70f5fb8f8e48358048c03a8d39be6b197fb
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: master
Gerrit-Owner: Maxime de Roucy <mderoucy at linagora.com>



More information about the LibreOffice mailing list