From eb3ba8c42ef4d33bb17307bbef66e348ee60cdfb Mon Sep 17 00:00:00 2001 From: ElenaSubbotina Date: Tue, 13 Feb 2018 19:47:23 +0300 Subject: [PATCH] RtfFormatWriter - fix table padding --- .../source/DestinationCommand.cpp | 113 ++++++++------- .../source/Reader/OOXPictureAnchorReader.h | 2 +- .../source/Reader/OOXTableReader.cpp | 13 +- .../source/Reader/OOXpPrTabReader.h | 4 + .../source/Reader/OOXtcPrReader.h | 70 +++++---- .../RtfFormatLib/source/RtfField.cpp | 2 +- .../RtfFormatLib/source/RtfGlobalTables.cpp | 2 +- .../RtfFormatLib/source/RtfProperty.cpp | 134 ++++++++++++++++-- .../RtfFormatLib/source/RtfProperty.h | 52 +++---- .../RtfFormatLib/source/RtfTable.h | 4 +- .../Source/DocxFormat/Logic/TableProperty.h | 17 +-- 11 files changed, 279 insertions(+), 134 deletions(-) diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/DestinationCommand.cpp b/ASCOfficeRtfFile/RtfFormatLib/source/DestinationCommand.cpp index d935c37b1e..60b3077578 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/DestinationCommand.cpp +++ b/ASCOfficeRtfFile/RtfFormatLib/source/DestinationCommand.cpp @@ -1168,26 +1168,27 @@ bool RtfTableCellPropsCommand::ExecuteCommand(RtfDocument& oDocument, RtfReader& COMMAND_RTF_BOOL( "clmgf", cellProps->m_bMergeFirst, sCommand, hasParameter, parameter ) COMMAND_RTF_BOOL( "clmrg", cellProps->m_bMerge, sCommand, hasParameter, parameter ) - COMMAND_RTF_BOOL( "clvmgf", cellProps->m_bMergeFirstVertical, sCommand, hasParameter, parameter ) - COMMAND_RTF_BOOL( "clvmrg", cellProps->m_bMergeVertical, sCommand, hasParameter, parameter ) - COMMAND_RTF_BOOL( "clFitText", cellProps->m_bFitText, sCommand, hasParameter, parameter ) + COMMAND_RTF_BOOL( "clvmgf", cellProps->m_bMergeFirstVertical, sCommand, hasParameter, parameter ) + COMMAND_RTF_BOOL( "clvmrg", cellProps->m_bMergeVertical, sCommand, hasParameter, parameter ) + COMMAND_RTF_BOOL( "clFitText", cellProps->m_bFitText, sCommand, hasParameter, parameter ) COMMAND_RTF_BOOL( "clNoWrap", cellProps->m_bNoWrap, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "clpadfl", cellProps->m_nIsPaddingLeft, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "clpadl", cellProps->m_nPaddingLeft, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "clpadft", cellProps->m_nIsPaddingTop, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "clpadt", cellProps->m_nPaddingTop, sCommand, hasParameter, parameter ) +//https://www.office-forums.com/threads/rtf-file-weirdness-clpadt-vs-clpadl.2163500/ + COMMAND_RTF_INT ( "clpadft", cellProps->m_nIsPaddingLeft, sCommand, hasParameter, parameter ) //перепутаны top & left + COMMAND_RTF_INT ( "clpadt", cellProps->m_nPaddingLeft, sCommand, hasParameter, parameter ) //перепутаны top & left + COMMAND_RTF_INT ( "clpadfl", cellProps->m_nIsPaddingTop, sCommand, hasParameter, parameter ) //перепутаны top & left + COMMAND_RTF_INT ( "clpadl", cellProps->m_nPaddingTop, sCommand, hasParameter, parameter ) //перепутаны top & left COMMAND_RTF_INT ( "clpadfr", cellProps->m_nIsPaddingRight, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "clpadr", cellProps->m_nPaddingRight, sCommand, hasParameter, parameter ) + COMMAND_RTF_INT ( "clpadr", cellProps->m_nPaddingRight, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "clpadfb", cellProps->m_nIsPaddingBottom, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "clpadb", cellProps->m_nPaddingBottom, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "clspfl", cellProps->m_nIsSpacingLeft, sCommand, hasParameter, parameter ) + COMMAND_RTF_INT ( "clpadb", cellProps->m_nPaddingBottom, sCommand, hasParameter, parameter ) + COMMAND_RTF_INT ( "clspfl", cellProps->m_nIsSpacingLeft, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "clspl", cellProps->m_nSpacingLeft, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "clspft", cellProps->m_nIsSpacingTop, sCommand, hasParameter, parameter ) + COMMAND_RTF_INT ( "clspft", cellProps->m_nIsSpacingTop, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "clspt", cellProps->m_nSpacingTop, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "clspfr", cellProps->m_nIsSpacingRight, sCommand, hasParameter, parameter ) + COMMAND_RTF_INT ( "clspfr", cellProps->m_nIsSpacingRight, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "clspr", cellProps->m_nSpacingRight, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "clspfb", cellProps->m_nIsSpacingBottom, sCommand, hasParameter, parameter ) + COMMAND_RTF_INT ( "clspfb", cellProps->m_nIsSpacingBottom, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "clspb", cellProps->m_nSpacingBottom, sCommand, hasParameter, parameter ) else if ( "clftsWidth" == sCommand ) @@ -1196,10 +1197,12 @@ bool RtfTableCellPropsCommand::ExecuteCommand(RtfDocument& oDocument, RtfReader& { switch( parameter ) { - case 0:cellProps->m_eWidthUnits = mu_none;break; - case 1:cellProps->m_eWidthUnits = mu_Auto;break; - case 2:cellProps->m_eWidthUnits = mu_Percent;break; - case 3:cellProps->m_eWidthUnits = mu_Twips;break; + case 0:cellProps->m_eWidthUnits = mu_none; break; + case 1:cellProps->m_eWidthUnits = mu_Auto; break; + case 2:cellProps->m_eWidthUnits = mu_Percent; break; + case 3:cellProps->m_eWidthUnits = mu_Twips; break; + default: + break; } } } @@ -1263,10 +1266,12 @@ bool RtfTableRowPropsCommand::ExecuteCommand(RtfDocument& oDocument, RtfReader& { switch( parameter ) { - case 0: rowProps->m_eMUWidth = mu_none; break; - case 1: rowProps->m_eMUWidth = mu_Auto; break; - case 2: rowProps->m_eMUWidth = mu_Percent; break; - case 3: rowProps->m_eMUWidth = mu_Twips; break; + case 0: rowProps->m_eMUWidth = mu_none; break; + case 1: rowProps->m_eMUWidth = mu_Auto; break; + case 2: rowProps->m_eMUWidth = mu_Percent; break; + case 3: rowProps->m_eMUWidth = mu_Twips; break; + default: + break; } } } @@ -1277,10 +1282,12 @@ bool RtfTableRowPropsCommand::ExecuteCommand(RtfDocument& oDocument, RtfReader& { switch( parameter ) { - case 0: rowProps->m_eMUStartInvCell = mu_none; break; - case 1: rowProps->m_eMUStartInvCell = mu_Auto; break; - case 2: rowProps->m_eMUStartInvCell = mu_Percent; break; - case 3: rowProps->m_eMUStartInvCell = mu_Twips; break; + case 0: rowProps->m_eMUStartInvCell = mu_none; break; + case 1: rowProps->m_eMUStartInvCell = mu_Auto; break; + case 2: rowProps->m_eMUStartInvCell = mu_Percent; break; + case 3: rowProps->m_eMUStartInvCell = mu_Twips; break; + default: + break; } } } @@ -1291,19 +1298,21 @@ bool RtfTableRowPropsCommand::ExecuteCommand(RtfDocument& oDocument, RtfReader& { switch( parameter ) { - case 0: rowProps->m_eMUEndInvCell = mu_none; break; - case 1: rowProps->m_eMUEndInvCell = mu_Auto; break; - case 2: rowProps->m_eMUEndInvCell = mu_Percent; break; - case 3: rowProps->m_eMUEndInvCell = mu_Twips; break; + case 0: rowProps->m_eMUEndInvCell = mu_none; break; + case 1: rowProps->m_eMUEndInvCell = mu_Auto; break; + case 2: rowProps->m_eMUEndInvCell = mu_Percent; break; + case 3: rowProps->m_eMUEndInvCell = mu_Twips; break; + default: + break; } } } COMMAND_RTF_INT ( "trwWidthA", rowProps->m_nWidthEndInvCell, sCommand, hasParameter, parameter ) - COMMAND_RTF_BOOL( "taprtl", rowProps->m_bBidi, sCommand, hasParameter, parameter ) + COMMAND_RTF_BOOL( "taprtl", rowProps->m_bBidi, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "trautofit", rowProps->m_nAutoFit, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "trgaph", rowProps->m_nGraph, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "tblind", rowProps->nTableIndent, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "tblindtype", rowProps->nTableIndentUnits, sCommand, hasParameter, parameter ) + COMMAND_RTF_INT ( "trgaph", rowProps->m_nGraph, sCommand, hasParameter, parameter ) + COMMAND_RTF_INT ( "tblind", rowProps->nTableIndent, sCommand, hasParameter, parameter ) + COMMAND_RTF_INT ( "tblindtype", rowProps->nTableIndentUnits, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "tdfrmtxtLeft", rowProps->m_nWrapLeft, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "tdfrmtxtRight", rowProps->m_nWrapRight, sCommand, hasParameter, parameter ) @@ -1311,26 +1320,26 @@ bool RtfTableRowPropsCommand::ExecuteCommand(RtfDocument& oDocument, RtfReader& COMMAND_RTF_INT ( "tdfrmtxtBottom", rowProps->m_nWrapBottom, sCommand, hasParameter, parameter ) COMMAND_RTF_BOOL( "tabsnoovrlp", rowProps->m_bOverlap, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "tphmrg", rowProps->m_eHRef, sCommand, true, RtfTableProperty::hr_phmrg ) + COMMAND_RTF_INT ( "tphmrg", rowProps->m_eHRef, sCommand, true, RtfTableProperty::hr_phmrg ) COMMAND_RTF_INT ( "tphpg", rowProps->m_eHRef, sCommand, true, RtfTableProperty::hr_phpg ) - COMMAND_RTF_INT ( "tphcol", rowProps->m_eHRef, sCommand, true, RtfTableProperty::hr_phcol ) + COMMAND_RTF_INT ( "tphcol", rowProps->m_eHRef, sCommand, true, RtfTableProperty::hr_phcol ) COMMAND_RTF_INT ( "tposx", rowProps->m_nHPos, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "tposnegx", rowProps->m_nHPos, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "tposxc", rowProps->m_eHPos, sCommand, true, RtfTableProperty::hp_posxc ) - COMMAND_RTF_INT ( "tposxi", rowProps->m_eHPos, sCommand, true, RtfTableProperty::hp_posxi ) - COMMAND_RTF_INT ( "tposxo", rowProps->m_eHPos, sCommand, true, RtfTableProperty::hp_posxo ) - COMMAND_RTF_INT ( "tposxl", rowProps->m_eHPos, sCommand, true, RtfTableProperty::hp_posxl ) - COMMAND_RTF_INT ( "tposxr", rowProps->m_eHPos, sCommand, true, RtfTableProperty::hp_posxr ) + COMMAND_RTF_INT ( "tposxc", rowProps->m_eHPos, sCommand, true, RtfTableProperty::hp_posxc ) + COMMAND_RTF_INT ( "tposxi", rowProps->m_eHPos, sCommand, true, RtfTableProperty::hp_posxi ) + COMMAND_RTF_INT ( "tposxo", rowProps->m_eHPos, sCommand, true, RtfTableProperty::hp_posxo ) + COMMAND_RTF_INT ( "tposxl", rowProps->m_eHPos, sCommand, true, RtfTableProperty::hp_posxl ) + COMMAND_RTF_INT ( "tposxr", rowProps->m_eHPos, sCommand, true, RtfTableProperty::hp_posxr ) - COMMAND_RTF_INT ( "tpvmrg", rowProps->m_eVRef, sCommand, true, RtfTableProperty::vr_pvmrg ) + COMMAND_RTF_INT ( "tpvmrg", rowProps->m_eVRef, sCommand, true, RtfTableProperty::vr_pvmrg ) COMMAND_RTF_INT ( "tpvpg", rowProps->m_eVRef, sCommand, true, RtfTableProperty::vr_pvpg ) COMMAND_RTF_INT ( "tpvpara", rowProps->m_eVRef, sCommand, true, RtfTableProperty::vr_pvpara ) COMMAND_RTF_INT ( "tposy", rowProps->m_nVPos, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "tposnegy", rowProps->m_nVPos, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "tposyt", rowProps->m_eVPos, sCommand, true, RtfTableProperty::vp_posyt ) + COMMAND_RTF_INT ( "tposyt", rowProps->m_eVPos, sCommand, true, RtfTableProperty::vp_posyt ) COMMAND_RTF_INT ( "tposyil", rowProps->m_eVPos, sCommand, true, RtfTableProperty::vp_posyil ) - COMMAND_RTF_INT ( "tposyb", rowProps->m_eVPos, sCommand, true, RtfTableProperty::vp_posyb ) - COMMAND_RTF_INT ( "tposyc", rowProps->m_eVPos, sCommand, true, RtfTableProperty::vp_posyc ) + COMMAND_RTF_INT ( "tposyb", rowProps->m_eVPos, sCommand, true, RtfTableProperty::vp_posyb ) + COMMAND_RTF_INT ( "tposyc", rowProps->m_eVPos, sCommand, true, RtfTableProperty::vp_posyc ) COMMAND_RTF_INT ( "tposyin", rowProps->m_eVPos, sCommand, true, RtfTableProperty::vp_posyin ) COMMAND_RTF_INT ( "tposyout", rowProps->m_eVPos, sCommand, true, RtfTableProperty::vp_posyout ) @@ -1353,10 +1362,12 @@ bool RtfTableRowPropsCommand::ExecuteCommand(RtfDocument& oDocument, RtfReader& { switch( parameter ) { - case 0: rowProps->m_eMUWidth = mu_none; break; - case 1: rowProps->m_eMUWidth = mu_Auto; break; - case 2: rowProps->m_eMUWidth = mu_Percent; break; - case 3: rowProps->m_eMUWidth = mu_Twips; break; + case 0: rowProps->m_eMUWidth = mu_none; break; + case 1: rowProps->m_eMUWidth = mu_Auto; break; + case 2: rowProps->m_eMUWidth = mu_Percent; break; + case 3: rowProps->m_eMUWidth = mu_Twips; break; + default: + break; } } } @@ -2206,6 +2217,8 @@ bool RtfTrackerChangesReader::ExecuteCommand(RtfDocument& oDocument, RtfReader& case is_borderTop: bResult = RtfBorderCommand::ExecuteCommand( oDocument, oReader, sCommand, hasParameter, parameter, m_pParagraphProps->m_oBorderTop ); break; + default: + break; } if (bResult) return true; @@ -2238,6 +2251,8 @@ bool RtfTrackerChangesReader::ExecuteCommand(RtfDocument& oDocument, RtfReader& case is_borderRowVer : bResult = RtfBorderCommand::ExecuteCommand( oDocument, oReader,sCommand, hasParameter, parameter, m_pTableRowProps->m_oBorderVert ); break; + default: + break; } if ( bResult ) return true; @@ -3029,6 +3044,8 @@ bool RtfParagraphPropDestination::ExecuteCommand(RtfDocument& oDocument, RtfRead case is_borderRowVer : bResult = RtfBorderCommand::ExecuteCommand( oDocument, oReader,sCommand, hasParameter, parameter, oReader.m_oState->m_oRowProperty.m_oBorderVert ); break; + default: + break; } if ( bResult ) return true; diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXPictureAnchorReader.h b/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXPictureAnchorReader.h index ba685444cf..4a87dc5585 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXPictureAnchorReader.h +++ b/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXPictureAnchorReader.h @@ -284,7 +284,7 @@ public: if (m_ooxAnchor->m_oWrapTight->m_oWrapPolygon.IsInit()) { int nValueX, nValueY; - + if (m_ooxAnchor->m_oWrapTight->m_oWrapPolygon->m_oStart.IsInit()) { nValueX = m_ooxAnchor->m_oWrapTight->m_oWrapPolygon->m_oStart->m_oX.ToEmu(); diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXTableReader.cpp b/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXTableReader.cpp index c4a9923d89..f79aec0e23 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXTableReader.cpp +++ b/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXTableReader.cpp @@ -79,16 +79,9 @@ bool OOXtrPrReader::Parse( ReaderParameter oParam , RtfRowProperty& oOutputPrope if (m_ooxTableRowProps->m_oTblHeight->m_oHRule.IsInit() && m_ooxTableRowProps->m_oTblHeight->m_oHRule->GetValue() == SimpleTypes::heightruleExact) oOutputProperty.m_nHeight = -oOutputProperty.m_nHeight; } - if( m_ooxTableRowProps->m_oWBefore.IsInit() && m_ooxTableRowProps->m_oWBefore->m_oW.IsInit()) - { - oOutputProperty.m_nWidthStartInvCell = m_ooxTableRowProps->m_oWBefore->m_oW->GetValue(); - oOutputProperty.m_eMUStartInvCell = _MetricUnits::mu_Twips; - } - if( m_ooxTableRowProps->m_oWAfter.IsInit() && m_ooxTableRowProps->m_oWAfter->m_oW.IsInit()) - { - oOutputProperty.m_nWidthEndInvCell = m_ooxTableRowProps->m_oWAfter->m_oW->GetValue(); - oOutputProperty.m_eMUEndInvCell = _MetricUnits::mu_Twips; - } + + OOXtcPrReader::Parse(m_ooxTableRowProps->m_oWBefore.GetPointer(), oOutputProperty.m_eMUStartInvCell, oOutputProperty.m_nWidthStartInvCell); + OOXtcPrReader::Parse(m_ooxTableRowProps->m_oWAfter.GetPointer(), oOutputProperty.m_eMUEndInvCell, oOutputProperty.m_nWidthEndInvCell); if( m_ooxTableRowProps->m_oGridBefore.IsInit() && m_ooxTableRowProps->m_oGridBefore->m_oVal.IsInit()) oOutputProperty.m_nGridBefore = m_ooxTableRowProps->m_oGridBefore->m_oVal->GetValue(); diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXpPrTabReader.h b/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXpPrTabReader.h index c8194a7b2b..3eddd0e40d 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXpPrTabReader.h +++ b/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXpPrTabReader.h @@ -64,6 +64,8 @@ public: case SimpleTypes::tabtlcMiddleDot : oCurTab.m_eLeader = RtfTab::tl_mdot; break; case SimpleTypes::tabtlcNone : break; case SimpleTypes::tabtlcUnderscore : oCurTab.m_eLeader = RtfTab::tl_ul; break; + default: + break; } } if (m_ooxTabs->m_arrTabs[i]->m_oVal.IsInit()) @@ -79,6 +81,8 @@ public: case SimpleTypes::tabjcStart : oCurTab.m_eKind = RtfTab::tk_tql; break; case SimpleTypes::tabjcRight : oCurTab.m_eKind = RtfTab::tk_tqr; break; case SimpleTypes::tabjcLeft : oCurTab.m_eKind = RtfTab::tk_tql; break; + default: + break; } } if (m_ooxTabs->m_arrTabs[i]->m_oPos.IsInit()) diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXtcPrReader.h b/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXtcPrReader.h index 9ebeee6285..a118e3946b 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXtcPrReader.h +++ b/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXtcPrReader.h @@ -72,6 +72,8 @@ public: { case SimpleTypes::mergeContinue : oOutputProperty.m_bMerge = 1; break; case SimpleTypes::mergeRestart : oOutputProperty.m_bMergeFirst = 1; break; + default: + break; } } if( m_ooxTableCellProps->m_oVMerge.IsInit()) @@ -89,27 +91,10 @@ public: if( m_ooxTableCellProps->m_oTcMar.IsInit() ) { - //todooo сделать реализацию с процентами - if( m_ooxTableCellProps->m_oTcMar->m_oBottom.IsInit() && m_ooxTableCellProps->m_oTcMar->m_oBottom->m_oW.IsInit()) - { - oOutputProperty.m_nPaddingBottom = (int)m_ooxTableCellProps->m_oTcMar->m_oBottom->m_oW->GetValue(); - oOutputProperty.m_nIsPaddingBottom = 3; - } - if( m_ooxTableCellProps->m_oTcMar->m_oEnd.IsInit() && m_ooxTableCellProps->m_oTcMar->m_oEnd->m_oW.IsInit()) - { - oOutputProperty.m_nPaddingRight = (int)m_ooxTableCellProps->m_oTcMar->m_oEnd->m_oW->GetValue(); - oOutputProperty.m_nIsPaddingRight = 3; - } - if( m_ooxTableCellProps->m_oTcMar->m_oStart.IsInit() && m_ooxTableCellProps->m_oTcMar->m_oStart->m_oW.IsInit()) - { - oOutputProperty.m_nPaddingLeft = (int)m_ooxTableCellProps->m_oTcMar->m_oStart->m_oW->GetValue(); - oOutputProperty.m_nIsPaddingLeft = 3; - } - if( m_ooxTableCellProps->m_oTcMar->m_oTop.IsInit() && m_ooxTableCellProps->m_oTcMar->m_oTop->m_oW.IsInit()) - { - oOutputProperty.m_nPaddingTop = (int)m_ooxTableCellProps->m_oTcMar->m_oTop->m_oW->GetValue(); - oOutputProperty.m_nIsPaddingTop = 3; - } + Parse (m_ooxTableCellProps->m_oTcMar->m_oStart.GetPointer(), oOutputProperty.m_nIsPaddingLeft, oOutputProperty.m_nPaddingLeft, false); + Parse (m_ooxTableCellProps->m_oTcMar->m_oTop.GetPointer(), oOutputProperty.m_nIsPaddingTop, oOutputProperty.m_nPaddingTop, false); + Parse (m_ooxTableCellProps->m_oTcMar->m_oEnd.GetPointer(), oOutputProperty.m_nIsPaddingRight, oOutputProperty.m_nPaddingRight, false); + Parse (m_ooxTableCellProps->m_oTcMar->m_oBottom.GetPointer(), oOutputProperty.m_nIsPaddingBottom, oOutputProperty.m_nPaddingBottom, false); } if( m_ooxTableCellProps->m_oTcW.IsInit() && m_ooxTableCellProps->m_oTcW->m_oW.IsInit()) @@ -216,19 +201,22 @@ public: case SimpleTypes::verticaljcBottom : oOutputProperty.m_eAlign = RtfCellProperty::ca_Bottom; break; case SimpleTypes::verticaljcCenter : oOutputProperty.m_eAlign = RtfCellProperty::ca_Center; break; case SimpleTypes::verticaljcTop : oOutputProperty.m_eAlign = RtfCellProperty::ca_Top; break; + default: + break; } } if( m_ooxTableCellProps->m_oTextDirection.IsInit() && m_ooxTableCellProps->m_oTextDirection->m_oVal.IsInit()) { switch(m_ooxTableCellProps->m_oTextDirection->m_oVal->GetValue()) { - case SimpleTypes::textdirectionLr : oOutputProperty.m_oCellFlow = RtfCellProperty::cf_lrtb; break; + case SimpleTypes::textdirectionLr : oOutputProperty.m_oCellFlow = RtfCellProperty::cf_btlr; break; case SimpleTypes::textdirectionLrV : oOutputProperty.m_oCellFlow = RtfCellProperty::cf_lrtbv; break; case SimpleTypes::textdirectionRl : oOutputProperty.m_oCellFlow = RtfCellProperty::cf_tbrl; break; case SimpleTypes::textdirectionRlV : oOutputProperty.m_oCellFlow = RtfCellProperty::cf_tbrlv; break; - case SimpleTypes::textdirectionTbV : oOutputProperty.m_oCellFlow = RtfCellProperty::cf_btlr; //?? - case SimpleTypes::textdirectionTb : //lrTb .. default - default: break; + case SimpleTypes::textdirectionTbV : oOutputProperty.m_oCellFlow = RtfCellProperty::cf_lrtbv; break; + case SimpleTypes::textdirectionTb : oOutputProperty.m_oCellFlow = RtfCellProperty::cf_lrtb; break; + default: + break; } } if (m_ooxTableCellProps->m_oGridSpan.IsInit() && m_ooxTableCellProps->m_oGridSpan->m_oVal.IsInit()) @@ -236,4 +224,36 @@ public: return true; } + static void Parse(ComplexTypes::Word::CTblWidth* margin, int& type, int& value, bool full = true ) + { + if (!margin) return; + if (false == margin->m_oType.IsInit()) return; + if (false == margin->m_oW.IsInit()) return; + + if (full == true) + { + switch (margin->m_oType->GetValue()) + { + case SimpleTypes::tblwidthNil: type = 0; break; + case SimpleTypes::tblwidthAuto: type = 1; break; + case SimpleTypes::tblwidthPct: type = 2; break; + case SimpleTypes::tblwidthDxa: type = 3; break; + } + } + else + { + switch (margin->m_oType->GetValue()) + { + case SimpleTypes::tblwidthDxa: type = 3; break; + case SimpleTypes::tblwidthAuto: + case SimpleTypes::tblwidthNil: type = 1; break; + } + } + if (margin->m_oType->GetValue() != SimpleTypes::tblwidthNil) + { + value = (int)margin->m_oW->GetValue(); + } + + //todooo сделать реализацию с процентами + } }; \ No newline at end of file diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfField.cpp b/ASCOfficeRtfFile/RtfFormatLib/source/RtfField.cpp index 0e6cabe34b..3fded853a0 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfField.cpp +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfField.cpp @@ -254,7 +254,7 @@ std::wstring RtfField::RenderToOOX(RenderParameter oRenderParameter) oNewParametr.nType = RENDER_TO_OOX_PARAM_RUN; sResult += m_pResult->m_pTextItems->m_aArray[0]->RenderToOOX(oNewParametr); - for (size_t i = 1; i < m_pResult->m_pTextItems->GetCount(); i++) + for (int i = 1; i < m_pResult->m_pTextItems->GetCount(); i++) { RtfParagraph *paragraph = dynamic_cast(m_pResult->m_pTextItems->m_aArray[i].get()); if (paragraph) diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfGlobalTables.cpp b/ASCOfficeRtfFile/RtfFormatLib/source/RtfGlobalTables.cpp index 10a29937b1..836a04cb15 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfGlobalTables.cpp +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfGlobalTables.cpp @@ -69,7 +69,7 @@ std::wstring RtfListTable::RenderToOOX(RenderParameter oRenderParameter) { RenderParameter oNewParam = oRenderParameter; oNewParam.nType = RENDER_TO_OOX_PARAM_SHAPE_WSHAPE; - for (size_t i = 0; i < m_aPictureList.GetCount(); i++ ) + for (int i = 0; i < m_aPictureList.GetCount(); i++ ) { sResult += L""; sResult += m_aPictureList[i]->RenderToOOX(oNewParam); diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfProperty.cpp b/ASCOfficeRtfFile/RtfFormatLib/source/RtfProperty.cpp index 69f98bbdf7..4a458f6861 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfProperty.cpp +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfProperty.cpp @@ -56,6 +56,8 @@ std::wstring RtfFont::RenderToRtf(RenderParameter oRenderParameter) case ft_fhiminor: sResult += L"\\fhiminor"; break; case ft_fdbminor: sResult += L"\\fdbminor"; break; case ft_fbiminor: sResult += L"\\fbiminor"; break; + default: + break; } sResult += L"\\f" + std::to_wstring(m_nID); @@ -69,6 +71,8 @@ std::wstring RtfFont::RenderToRtf(RenderParameter oRenderParameter) case ff_fdecor: sResult += L"\\fdecor"; break; case ff_ftech: sResult += L"\\ftech"; break; case ff_fbidi: sResult += L"\\fbidi"; break; + default: + break; } RENDER_RTF_INT( m_nCharset, sResult, L"fcharset" ) RENDER_RTF_INT( m_nPitch, sResult, L"fprq" ) @@ -126,6 +130,8 @@ std::wstring RtfFont::RenderToOOX(RenderParameter oRenderParameter) case ft_fhiminor: sTag = L"latin"; break; case ft_fdbminor: sTag = L"ea"; break; case ft_fbiminor: sTag = L"cs"; break; + default: + break; } if( !sTag.empty() ) { @@ -145,6 +151,8 @@ std::wstring RtfFont::RenderToOOX(RenderParameter oRenderParameter) case ft_fhiminor: sTag = L"latin"; break; case ft_fdbmajor: sTag = L"ea"; break; case ft_fbimajor: sTag = L"cs"; break; + default: + break; } if( !sTag.empty() ) { @@ -185,6 +193,8 @@ std::wstring RtfFont::RenderToOOX(RenderParameter oRenderParameter) case ff_fdecor: sFamily = L"decorative"; break; case ff_ftech: sFamily = L"auto"; break; case ff_fbidi: sFamily = L"auto"; break; + default: + break; } if( !sFamily.empty() ) { @@ -207,6 +217,8 @@ std::wstring RtfFont::RenderToOOX(RenderParameter oRenderParameter) case 0: sPitch = L"default"; break; case 1: sPitch = L"fixed"; break; case 2: sPitch = L"variable"; break; + default: + break; } sResult += L""; }break; //?? нужно ли описывать default??? todooo + default: + break; } sResult += L" 0) sResult += L"\\brdrw" + std::to_wstring(m_nWidth ); @@ -593,6 +621,8 @@ std::wstring RtfBorder::RenderToOOX(RenderParameter oRenderParameter) case bt_brdrdashdotstr: sResult += L" w:val=\"dashDotStroked\""; break; case bt_brdremboss: sResult += L" w:val=\"threeDEmboss\""; break; case bt_brdrengrave: sResult += L" w:val=\"threeDEngrave\""; break; + default: + break; } if( false == sResult.empty() ) { @@ -670,6 +700,8 @@ std::wstring RtfCharProperty::RenderToRtf(RenderParameter oRenderParameter) case uls_Double_wave: sResult += L"\\ululdbwave"; break; case uls_Word: sResult += L"\\ulw"; break; case uls_Wave: sResult += L"\\ulwave"; break; + default: + break; } RENDER_RTF_INT( m_nUnderlineColor, sResult, L"ulc" ) RENDER_RTF_INT( m_nUp, sResult, L"up" ) @@ -768,6 +800,8 @@ std::wstring RtfCharProperty::RenderToOOX(RenderParameter oRenderParameter) case 4: sResult += L""; break; case 5: sResult += L""; break; case 6: sResult += L""; break; + default: + break; } RENDER_OOX_BOOL ( m_bBold, sResult, L"w:b" ) RENDER_OOX_BOOL ( m_bCaps, sResult, L"w:caps" ) @@ -898,6 +932,8 @@ std::wstring RtfCharProperty::RenderToOOX(RenderParameter oRenderParameter) case uls_Double_wave: sResult += L" w:val=\"wavyDouble\"/>"; break; case uls_Word: sResult += L" w:val=\"words\"/>"; break; case uls_Wave: sResult += L" w:val=\"wave\"/>"; break; + default: + break; } } @@ -1045,6 +1081,8 @@ std::wstring RtfListLevelProperty::RenderToOOX2(RenderParameter oRenderParameter case 0: sResult += L""; break; case 1: sResult += L""; break; case 2: sResult += L""; break; + default: + break; } } @@ -1178,6 +1216,8 @@ std::wstring RtfStyle::RenderToOOXBegin(RenderParameter oRenderParameter) case stCharacter : sType = L"character"; break; case stSection : sType = L"numbering"; break; case stTable : sType = L"table"; break; + default: + break; } //sResult += L""; sResult += L""; @@ -1551,6 +1591,8 @@ std::wstring RtfTab::RenderToRtf(RenderParameter oRenderParameter) case tl_mdot: sResult += L"\\tlmdot"; break; case tl_hyph: sResult += L"\\tlhyph"; break; case tl_ul: sResult += L"\\tlul"; break; + default: + break; } sResult += L"\\tb" + std::to_wstring( m_nTab ); } @@ -1562,12 +1604,16 @@ std::wstring RtfTab::RenderToRtf(RenderParameter oRenderParameter) case tl_mdot: sResult += L"\\tlmdot"; break; case tl_hyph: sResult += L"\\tlhyph"; break; case tl_ul: sResult += L"\\tlul"; break; + default: + break; } switch( m_eKind ) { case tk_tqr: sResult += L"\\tqr"; break; case tk_tqc: sResult += L"\\tqc"; break; case tk_tqdec: sResult += L"\\tqdec"; break; + default: + break; } sResult += L"\\tx" + std::to_wstring( m_nTab ); } @@ -1585,6 +1631,8 @@ std::wstring RtfTab::RenderToOOX(RenderParameter oRenderParameter) case tl_mdot: sTab += L" w:leader=\"middleDot\""; break; case tl_hyph: sTab += L" w:leader=\"hyphen\""; break; case tl_ul: sTab += L" w:leader=\"underscore\""; break; + default: + break; } switch( m_eKind ) { @@ -1593,6 +1641,8 @@ std::wstring RtfTab::RenderToOOX(RenderParameter oRenderParameter) case tk_tqc: sTab += L" w:val=\"center\""; break; case tk_tqdec: sTab += L" w:val=\"decimal\""; break; case tk_tqbar: sTab += L" w:val=\"bar\""; break; + default: + break; } if( PROP_DEF != m_nTab ) sTab += L" w:pos=\"" + std::to_wstring(m_nTab) + L"\""; @@ -1611,6 +1661,8 @@ std::wstring RtfFrame::RenderToRtf(RenderParameter oRenderParameter) case hr_phmrg: sResult += L"\\phmrg"; break; case hr_phpg: sResult += L"\\phpg"; break; case hr_phcol: sResult += L"\\phcol"; break; + default: + break; } if( PROP_DEF != m_nHPos ) { @@ -1626,6 +1678,8 @@ std::wstring RtfFrame::RenderToRtf(RenderParameter oRenderParameter) case hp_posxo: sResult += L"\\posxo"; break; case hp_posxl: sResult += L"\\posxl"; break; case hp_posxr: sResult += L"\\posxr"; break; + default: + break; } switch ( m_eVRef ) @@ -1633,6 +1687,8 @@ std::wstring RtfFrame::RenderToRtf(RenderParameter oRenderParameter) case vr_pvmrg: sResult += L"\\pvmrg"; break; case vr_pvpg: sResult += L"\\pvpg"; break; case vr_pvpara: sResult += L"\\pvpara"; break; + default: + break; } if( PROP_DEF != m_nVPos ) { @@ -1649,6 +1705,8 @@ std::wstring RtfFrame::RenderToRtf(RenderParameter oRenderParameter) case vp_posyc: sResult += L"\\posyc"; break; case vp_posyin: sResult += L"\\posyin"; break; case vp_posyout: sResult += L"\\posyout"; break; + default: + break; } RENDER_RTF_INT( m_bLockAnchor, sResult, L"abslock" ) @@ -1658,6 +1716,8 @@ std::wstring RtfFrame::RenderToRtf(RenderParameter oRenderParameter) case tw_wraparound: sResult += L"\\wraparound"; break; case tw_wraptight: sResult += L"\\wraptight"; break; case tw_wrapthrough: sResult += L"\\wrapthrough"; break; + default: + break; } RENDER_RTF_INT( m_DropcapType, sResult, L"dropcapt" ) RENDER_RTF_INT( m_DropcapLines, sResult, L"dropcapli" ) @@ -1696,6 +1756,8 @@ std::wstring RtfFrame::RenderToOOX(RenderParameter oRenderParameter) case hr_phmrg: sFrame += L" w:hAnchor=\"margin\""; break; case hr_phpg: sFrame += L" w:hAnchor=\"page\""; break; case hr_phcol: sFrame += L" w:hAnchor=\"text\""; break; + default: + break; } RENDER_OOX_INT_ATTRIBUTE( m_nHPos, sFrame, L"w:x" ) switch ( m_eHPos ) @@ -1705,12 +1767,16 @@ std::wstring RtfFrame::RenderToOOX(RenderParameter oRenderParameter) case hp_posxo: sFrame += L" w:xAlign=\"outside\""; break; case hp_posxl: sFrame += L" w:xAlign=\"left\""; break; case hp_posxr: sFrame += L" w:xAlign=\"right\""; break; + default: + break; } switch ( m_eVRef ) { case vr_pvmrg: sFrame += L" w:vAnchor=\"margin\""; break; case vr_pvpg: sFrame += L" w:vAnchor=\"page\""; break; case vr_pvpara: sFrame += L" w:vAnchor=\"text\""; break; + default: + break; } RENDER_OOX_INT_ATTRIBUTE( m_nVPos, sFrame, L"w:y" ) switch ( m_eVPos ) @@ -1721,6 +1787,8 @@ std::wstring RtfFrame::RenderToOOX(RenderParameter oRenderParameter) case vp_posyc: sFrame += L" w:yAlign=\"center\""; break; case vp_posyin: sFrame += L" w:yAlign=\"inside\""; break; case vp_posyout: sFrame += L" w:yAlign=\"outside\""; break; + default: + break; } RENDER_OOX_BOOL_ATTRIBUTE( m_bLockAnchor, sFrame, L"w:anchorLock" ) switch ( m_eWrap ) @@ -1729,6 +1797,8 @@ std::wstring RtfFrame::RenderToOOX(RenderParameter oRenderParameter) case tw_wraparound: sFrame += L" w:wrap=\"around\""; break; case tw_wraptight: sFrame += L" w:wrap=\"tight\""; break; case tw_wrapthrough: sFrame += L" w:wrap=\"through\""; break; + default: + break; } if( 1 == m_DropcapType ) sFrame += L" w:dropCap=\"drop\""; else if( 2 == m_DropcapType ) sFrame += L" w:dropCap=\"margin\""; @@ -1775,6 +1845,8 @@ std::wstring RtfParagraphProperty::RenderToRtf(RenderParameter oRenderParameter) case pa_qk0: sResult += L"\\qk0"; break; case pa_qk10: sResult += L"\\qk10"; break; case pa_qk20: sResult += L"\\qk20"; break; + default: + break; } switch( m_eFontAlign ) { @@ -1784,6 +1856,8 @@ std::wstring RtfParagraphProperty::RenderToRtf(RenderParameter oRenderParameter) case fa_faroman: sResult += L"\\faroman"; break; case fa_favar: sResult += L"\\favar"; break; case fa_fafixed: sResult += L"\\fafixed"; break; + default: + break; } RENDER_RTF_INT( m_nIndFirstLine , sResult, L"fi" ); RENDER_RTF_INT( m_nIndLeft , sResult, L"li" ); @@ -1816,6 +1890,8 @@ std::wstring RtfParagraphProperty::RenderToRtf(RenderParameter oRenderParameter) case tbw_txbxtwfirstlast: sResult += L"\\txbxtwfirstlast"; break; case tbw_txbxtwfirst: sResult += L"\\txbxtwfirst"; break; case tbw_txbxtwlast: sResult += L"\\txbxtwlast"; break; + default: + break; } if( PROP_DEF != m_nListId && PROP_DEF != m_nListLevel ) { @@ -1874,6 +1950,8 @@ std::wstring RtfParagraphProperty::RenderToRtf(RenderParameter oRenderParameter) case tf_frmtxbtlr: sResult += L"\\frmtxbtlr"; break; case tf_frmtxlrtbv: sResult += L"\\frmtxlrtbv"; break; case tf_frmtxtbrlv: sResult += L"\\frmtxtbrlv"; break; + default: + break; } if( true == m_oTabs.IsValid() ) sResult += m_oTabs.RenderToRtf( oRenderParameter ); @@ -1992,6 +2070,8 @@ std::wstring RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter) case pa_qk0: sResult += L""; break; case pa_qk10: sResult += L""; break; case pa_qk20: sResult += L""; break; + default: + break; } switch( m_eFontAlign ) { @@ -2001,6 +2081,8 @@ std::wstring RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter) case fa_faroman: sResult += L"";break; case fa_favar: sResult += L""; break; case fa_fafixed: sResult += L""; break; + default: + break; } std::wstring sIndent; if( PROP_DEF != m_nIndFirstLine ) @@ -2072,6 +2154,8 @@ std::wstring RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter) case tbw_txbxtwfirstlast: sResult += L""; break; case tbw_txbxtwfirst: sResult += L""; break; case tbw_txbxtwlast: sResult += L""; break; + default: + break; } if( PROP_DEF != m_nListId && PROP_DEF != m_nListLevel ) sResult += L""; @@ -2136,6 +2220,8 @@ std::wstring RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter) case tf_frmtxbtlr: sResult += L""; break; case tf_frmtxlrtbv: sResult += L"";break; case tf_frmtxtbrlv: sResult += L"";break; + default: + break; } if( true == m_oTabs.IsValid() ) { @@ -2176,14 +2262,15 @@ std::wstring RtfCellProperty::RenderToRtf(RenderParameter oRenderParameter) RENDER_RTF_BOOL( m_bFitText, sResult, L"clFitText" ) RENDER_RTF_BOOL( m_bNoWrap, sResult, L"clNoWrap" ) - RENDER_RTF_INT( m_nIsPaddingLeft, sResult, L"clpadfl" ) - RENDER_RTF_INT( m_nPaddingLeft, sResult, L"clpadl" ) - RENDER_RTF_INT( m_nIsPaddingRight, sResult, L"clpadfr" ) +//https://www.office-forums.com/threads/rtf-file-weirdness-clpadt-vs-clpadl.2163500/ + RENDER_RTF_INT( m_nPaddingLeft, sResult, L"clpadt" ) //перепутаны top & left + RENDER_RTF_INT( m_nIsPaddingLeft, sResult, L"clpadft" ) //перепутаны top & left RENDER_RTF_INT( m_nPaddingRight, sResult, L"clpadr" ) - RENDER_RTF_INT( m_nIsPaddingTop, sResult, L"clpadft" ) - RENDER_RTF_INT( m_nPaddingTop, sResult, L"clpadt" ) - RENDER_RTF_INT( m_nIsPaddingBottom, sResult, L"clpadfb" ) + RENDER_RTF_INT( m_nIsPaddingRight, sResult, L"clpadfr" ) + RENDER_RTF_INT( m_nPaddingTop, sResult, L"clpadl" ) //перепутаны top & left + RENDER_RTF_INT( m_nIsPaddingTop, sResult, L"clpadfl" ) //перепутаны top & left RENDER_RTF_INT( m_nPaddingBottom, sResult, L"clpadb" ) + RENDER_RTF_INT( m_nIsPaddingBottom, sResult, L"clpadfb" ) RENDER_RTF_INT( m_nIsSpacingLeft, sResult, L"clspfl" ) RENDER_RTF_INT( m_nSpacingLeft, sResult, L"clspl" ) @@ -2235,6 +2322,8 @@ std::wstring RtfCellProperty::RenderToRtf(RenderParameter oRenderParameter) case ca_Top: sResult += L"\\clvertalt"; break; case ca_Center: sResult += L"\\clvertalc"; break; case ca_Bottom: sResult += L"\\clvertalb"; break; + default: + break; } switch( m_oCellFlow ) { @@ -2243,6 +2332,8 @@ std::wstring RtfCellProperty::RenderToRtf(RenderParameter oRenderParameter) case cf_btlr: sResult += L"\\cltxbtlr"; break; case cf_lrtbv: sResult += L"\\cltxlrtbv"; break; case cf_tbrlv: sResult += L"\\cltxtbrlv"; break; + default: + break; } RENDER_RTF_INT( m_nWidth, sResult, L"clwWidth" ) switch( m_eWidthUnits ) @@ -2251,6 +2342,8 @@ std::wstring RtfCellProperty::RenderToRtf(RenderParameter oRenderParameter) case mu_Auto: sResult += L"\\clftsWidth1"; break; case mu_Percent: sResult += L"\\clftsWidth2"; break; case mu_Twips: sResult += L"\\clftsWidth3"; break; + default: + break; } sResult += L"\\cellx" + std::to_wstring(m_nCellx); @@ -2386,6 +2479,8 @@ std::wstring RtfCellProperty::RenderToOOX(RenderParameter oRenderParameter) case ca_Top: sResult += L""; break; case ca_Center: sResult += L""; break; case ca_Bottom: sResult += L""; break; + default: + break; } switch( m_oCellFlow ) { @@ -2394,7 +2489,8 @@ std::wstring RtfCellProperty::RenderToOOX(RenderParameter oRenderParameter) case cf_btlr: sResult += L""; break; case cf_lrtbv: sResult += L""; break; case cf_tbrlv: sResult += L""; break; - + default: + break; } RENDER_OOX_INT( m_nSpan, sResult, L"w:gridSpan" ); @@ -2582,6 +2678,8 @@ std::wstring RtfTableProperty::RenderToOOX(RenderParameter oRenderParameter) //case 2: sResult += L"", );break; case 3: sResult += L""; break; //default: sResult += L"", nTableIndent );break; + default: + break; } } @@ -2593,6 +2691,8 @@ std::wstring RtfTableProperty::RenderToOOX(RenderParameter oRenderParameter) case rj_trql : sResult += L""; break; case rj_trqr : sResult += L""; break; case rj_trqc : sResult += L""; break; + default: + break; } std::wstring sFloatingPosition; @@ -2738,30 +2838,38 @@ std::wstring RtfRowProperty::RenderToRtf(RenderParameter oRenderParameter) case rj_trql : sResult += L"\\trql"; break; case rj_trqr : sResult += L"\\trqr"; break; case rj_trqc : sResult += L"\\trqc"; break; + default: + break; } RENDER_RTF_INT( m_nHeight, sResult, L"trrh" ); - RENDER_RTF_INT( m_nWidth, sResult, L"trwWidth" ); switch( m_eMUWidth ) { case mu_Auto: sResult += L"\\trftsWidth1"; break; case mu_Percent: sResult += L"\\trftsWidth2"; break; case mu_Twips: sResult += L"\\trftsWidth3"; break; + default: + break; } - RENDER_RTF_INT( m_nWidthStartInvCell, sResult, L"trwWidthB" ); + RENDER_RTF_INT( m_nWidth, sResult, L"trwWidth" ); switch( m_eMUStartInvCell ) { case mu_Auto: sResult += L"\\trftsWidthB1"; break; case mu_Percent: sResult += L"\\trftsWidthB2"; break; case mu_Twips: sResult += L"\\trftsWidthB3"; break; + default: + break; } - RENDER_RTF_INT( m_nWidthEndInvCell, sResult, L"trwWidthA" ); + RENDER_RTF_INT( m_nWidthStartInvCell, sResult, L"trwWidthB" ); switch( m_eMUEndInvCell ) { case mu_Auto: sResult += L"\\trftsWidthA1"; break; case mu_Percent: sResult += L"\\trftsWidthA2"; break; case mu_Twips: sResult += L"\\trftsWidthA3"; break; + default: + break; } + RENDER_RTF_INT( m_nWidthEndInvCell, sResult, L"trwWidthA" ); sResult += RtfTableProperty::RenderToRtf( oRenderParameter ); for (size_t i = 0; i < m_aArray.size(); i++ ) @@ -2791,6 +2899,8 @@ std::wstring RtfRowProperty::RenderToOOX(RenderParameter oRenderParameter) case rj_trql : sResult += L""; break; case rj_trqr : sResult += L""; break; case rj_trqc : sResult += L""; break; + default: + break; } if( PROP_DEF != m_nHeight ) { @@ -2806,6 +2916,8 @@ std::wstring RtfRowProperty::RenderToOOX(RenderParameter oRenderParameter) { case mu_Percent: sResult += L""; break; case mu_Twips: sResult += L""; break; + default: + break; } } if( PROP_DEF != m_nWidthEndInvCell ) @@ -2814,6 +2926,8 @@ std::wstring RtfRowProperty::RenderToOOX(RenderParameter oRenderParameter) { case mu_Percent: sResult += L""; break; case mu_Twips: sResult += L""; break; + default: + break; } } RENDER_OOX_INT( m_nGridBefore, sResult, L"w:gridBefore" ) diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfProperty.h b/ASCOfficeRtfFile/RtfFormatLib/source/RtfProperty.h index 347f5dbb17..960adcb679 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfProperty.h +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfProperty.h @@ -2325,35 +2325,35 @@ public: void Merge( RtfCellProperty& oCellPr ) { - MERGE_PROPERTY( m_bMergeFirst, oCellPr ) - MERGE_PROPERTY( m_bMerge, oCellPr ) - MERGE_PROPERTY( m_bMergeFirstVertical, oCellPr ) - MERGE_PROPERTY( m_bMergeVertical, oCellPr ) + MERGE_PROPERTY( m_bMergeFirst, oCellPr ) + MERGE_PROPERTY( m_bMerge, oCellPr ) + MERGE_PROPERTY( m_bMergeFirstVertical, oCellPr ) + MERGE_PROPERTY( m_bMergeVertical, oCellPr ) MERGE_PROPERTY( m_bFitText, oCellPr ) - MERGE_PROPERTY( m_bNoWrap, oCellPr ) + MERGE_PROPERTY( m_bNoWrap, oCellPr ) - MERGE_PROPERTY( m_nPaddingLeft, oCellPr ) - MERGE_PROPERTY( m_nIsPaddingLeft, oCellPr ) - MERGE_PROPERTY( m_nPaddingRight, oCellPr ) - MERGE_PROPERTY( m_nIsPaddingRight, oCellPr ) - MERGE_PROPERTY( m_nPaddingTop, oCellPr ) - MERGE_PROPERTY( m_nIsPaddingTop, oCellPr ) - MERGE_PROPERTY( m_nPaddingBottom, oCellPr ) + MERGE_PROPERTY( m_nPaddingLeft, oCellPr ) + MERGE_PROPERTY( m_nIsPaddingLeft, oCellPr ) + MERGE_PROPERTY( m_nPaddingRight, oCellPr ) + MERGE_PROPERTY( m_nIsPaddingRight, oCellPr ) + MERGE_PROPERTY( m_nPaddingTop, oCellPr ) + MERGE_PROPERTY( m_nIsPaddingTop, oCellPr ) + MERGE_PROPERTY( m_nPaddingBottom, oCellPr ) MERGE_PROPERTY( m_nIsPaddingBottom, oCellPr ) - MERGE_PROPERTY( m_nSpacingLeft, oCellPr ) - MERGE_PROPERTY( m_nIsSpacingLeft, oCellPr ) - MERGE_PROPERTY( m_nSpacingRight, oCellPr ) - MERGE_PROPERTY( m_nIsSpacingRight, oCellPr ) - MERGE_PROPERTY( m_nSpacingTop, oCellPr ) - MERGE_PROPERTY( m_nIsSpacingTop, oCellPr ) - MERGE_PROPERTY( m_nSpacingBottom, oCellPr ) + MERGE_PROPERTY( m_nSpacingLeft, oCellPr ) + MERGE_PROPERTY( m_nIsSpacingLeft, oCellPr ) + MERGE_PROPERTY( m_nSpacingRight, oCellPr ) + MERGE_PROPERTY( m_nIsSpacingRight, oCellPr ) + MERGE_PROPERTY( m_nSpacingTop, oCellPr ) + MERGE_PROPERTY( m_nIsSpacingTop, oCellPr ) + MERGE_PROPERTY( m_nSpacingBottom, oCellPr ) MERGE_PROPERTY( m_nIsSpacingBottom, oCellPr ) - MERGE_PROPERTY( m_eWidthUnits, oCellPr ) - MERGE_PROPERTY( m_nWidth, oCellPr ) - MERGE_PROPERTY( m_bHideMark, oCellPr ) + MERGE_PROPERTY( m_eWidthUnits, oCellPr ) + MERGE_PROPERTY( m_nWidth, oCellPr ) + MERGE_PROPERTY( m_bHideMark, oCellPr ) m_oBorderDiagonalLR.Merge( oCellPr.m_oBorderDiagonalLR ); m_oBorderDiagonalRL.Merge( oCellPr.m_oBorderDiagonalRL ); @@ -2421,11 +2421,11 @@ public: int m_nHeight; //trrhN Height of a table row in twips. When 0, the height is sufficient for all the text in the line; when positive, the height is guaranteed to be at least the specified height; when negative, the absolute value of the height is used, regardless of the height of the text in the line. - int m_nWidthStartInvCell; //trwWidthBN Width of invisible cell at the beginning of the row. Used only in cases where rows have different widths. - _MetricUnits m_eMUStartInvCell; //trftsWidthBN Units for \trwWidthBN: + int m_nWidthStartInvCell; //trwWidthBN Width of invisible cell at the beginning of the row. Used only in cases where rows have different widths. + int m_eMUStartInvCell; //trftsWidthBN Units for \trwWidthBN: - int m_nWidthEndInvCell; //trwWidthAN Width of invisible cell at the end of the row. Used only when rows have different widths. - _MetricUnits m_eMUEndInvCell; //trftsWidthAN Units for \trwWidthAN: + int m_nWidthEndInvCell; //trwWidthAN Width of invisible cell at the end of the row. Used only when rows have different widths. + int m_eMUEndInvCell; //trftsWidthAN Units for \trwWidthAN: int m_nGridBefore; //для oox int m_nGridAfter; //для oox diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfTable.h b/ASCOfficeRtfFile/RtfFormatLib/source/RtfTable.h index fbcb638228..1b2312386d 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfTable.h +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfTable.h @@ -322,10 +322,10 @@ public: RtfTableCellPtr oCurCell = oCurRow->operator [](j); int nSpan = 1; + if( PROP_DEF != oCurCell->m_oProperty.m_nSpan ) nSpan = oCurCell->m_oProperty.m_nSpan; - else - nSpan = 1; + if( j == 0 && PROP_DEF != oCurRow->m_oProperty.m_nGridBefore ) nCurIndex += oCurRow->m_oProperty.m_nGridBefore; //if( j == oCurRow->m_oProperty.size() - 1 && PROP_DEF != oCurRow->m_oProperty.m_nGridAfter ) diff --git a/Common/DocxFormat/Source/DocxFormat/Logic/TableProperty.h b/Common/DocxFormat/Source/DocxFormat/Logic/TableProperty.h index f4acc27302..ee6d02ad13 100644 --- a/Common/DocxFormat/Source/DocxFormat/Logic/TableProperty.h +++ b/Common/DocxFormat/Source/DocxFormat/Logic/TableProperty.h @@ -1752,9 +1752,7 @@ namespace OOX virtual ~CTcMar() { } - - public: - virtual void fromXML(XmlUtils::CXmlNode& oNode) + virtual void fromXML(XmlUtils::CXmlNode& oNode) { if ( _T("w:tcMar") != oNode.GetName() ) return; @@ -1772,7 +1770,7 @@ namespace OOX if ( !m_oStart.IsInit() ) WritingElement_ReadNode( oNode, oChild, _T("w:left"), m_oStart ); } - virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) + virtual void fromXML(XmlUtils::CXmlLiteReader& oReader) { if ( oReader.IsEmptyNode() ) return; @@ -1790,7 +1788,7 @@ namespace OOX else if ( !m_oStart.IsInit() && _T("w:left") == sName ) m_oStart = oReader; } } - virtual std::wstring toXML() const + virtual std::wstring toXML() const { std::wstring sResult = _T(""); @@ -1811,10 +1809,10 @@ namespace OOX static const CTcMar Merge(const CTcMar& oPrev, const CTcMar& oCurrent) { CTcMar oProperties; - oProperties.m_oBottom = Merge( oPrev.m_oBottom, oCurrent.m_oBottom ); - oProperties.m_oEnd = Merge( oPrev.m_oEnd, oCurrent.m_oEnd ); - oProperties.m_oStart = Merge( oPrev.m_oStart, oCurrent.m_oStart ); - oProperties.m_oTop = Merge( oPrev.m_oTop, oCurrent.m_oTop ); + oProperties.m_oBottom = Merge( oPrev.m_oBottom, oCurrent.m_oBottom ); + oProperties.m_oEnd = Merge( oPrev.m_oEnd, oCurrent.m_oEnd ); + oProperties.m_oStart = Merge( oPrev.m_oStart, oCurrent.m_oStart ); + oProperties.m_oTop = Merge( oPrev.m_oTop, oCurrent.m_oTop ); return oProperties; } @@ -1830,7 +1828,6 @@ namespace OOX return oResult; } - public: nullable m_oBottom; nullable m_oEnd;