Compare commits

..

3 Commits

Author SHA1 Message Date
182da130da RtfFormatWriter - fix table layouts 2018-02-14 20:01:13 +03:00
eb3ba8c42e RtfFormatWriter - fix table padding 2018-02-13 19:47:23 +03:00
dec099b19b [x2t] Fix bug #36922 2018-02-13 19:24:28 +03:00
15 changed files with 410 additions and 272 deletions

View File

@ -1168,26 +1168,28 @@ 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 )
COMMAND_RTF_INT ( "clpadfr", cellProps->m_nIsPaddingRight, 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 )
//https://www.office-forums.com/threads/rtf-file-weirdness-clpadt-vs-clpadl.2163500/
COMMAND_RTF_INT ( "clpadft", cellProps->m_ePaddingLeftUnit, sCommand, hasParameter, parameter ) //перепутаны top & left
COMMAND_RTF_INT ( "clpadt", cellProps->m_nPaddingLeft, sCommand, hasParameter, parameter ) //перепутаны top & left
COMMAND_RTF_INT ( "clpadfl", cellProps->m_ePaddingTopUnit, sCommand, hasParameter, parameter ) //перепутаны top & left
COMMAND_RTF_INT ( "clpadl", cellProps->m_nPaddingTop, sCommand, hasParameter, parameter ) //перепутаны top & left
COMMAND_RTF_INT ( "clpadfr", cellProps->m_ePaddingRightUnit, sCommand, hasParameter, parameter )
COMMAND_RTF_INT ( "clpadr", cellProps->m_nPaddingRight, sCommand, hasParameter, parameter )
COMMAND_RTF_INT ( "clpadfb", cellProps->m_ePaddingBottomUnit, sCommand, hasParameter, parameter )
COMMAND_RTF_INT ( "clpadb", cellProps->m_nPaddingBottom, sCommand, hasParameter, parameter )
COMMAND_RTF_INT ( "clspfl", cellProps->m_eSpacingLeftUnit, 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_eSpacingTopUnit, 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_eSpacingRightUnit, 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_eSpacingBottomUnit, sCommand, hasParameter, parameter )
COMMAND_RTF_INT ( "clspb", cellProps->m_nSpacingBottom, sCommand, hasParameter, parameter )
else if ( "clftsWidth" == sCommand )
@ -1196,10 +1198,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_eWidthUnit = mu_none; break;
case 1: cellProps->m_eWidthUnit = mu_Auto; break;
case 2: cellProps->m_eWidthUnit = mu_Percent; break;
case 3: cellProps->m_eWidthUnit = mu_Twips; break;
default:
break;
}
}
}
@ -1215,13 +1219,13 @@ bool RtfTableCellPropsCommand::ExecuteCommand(RtfDocument& oDocument, RtfReader&
COMMAND_RTF_INT ( "cltxtbrlv", cellProps->m_oCellFlow, sCommand, true, RtfCellProperty::cf_tbrlv )
//table style
COMMAND_RTF_INT ( "tscellpaddfl", cellProps->m_nIsPaddingLeft, sCommand, hasParameter, parameter )
COMMAND_RTF_INT ( "tscellpaddfl", cellProps->m_ePaddingLeftUnit, sCommand, hasParameter, parameter )
COMMAND_RTF_INT ( "tscellpaddl", cellProps->m_nPaddingLeft, sCommand, hasParameter, parameter )
COMMAND_RTF_INT ( "tscellpaddft", cellProps->m_nIsPaddingTop, sCommand, hasParameter, parameter )
COMMAND_RTF_INT ( "tscellpaddft", cellProps->m_ePaddingTopUnit, sCommand, hasParameter, parameter )
COMMAND_RTF_INT ( "tscellpaddt", cellProps->m_nPaddingTop, sCommand, hasParameter, parameter )
COMMAND_RTF_INT ( "tscellpaddfr", cellProps->m_nIsPaddingRight, sCommand, hasParameter, parameter )
COMMAND_RTF_INT ( "tscellpaddfr", cellProps->m_ePaddingRightUnit, sCommand, hasParameter, parameter )
COMMAND_RTF_INT ( "tscellpaddr", cellProps->m_nPaddingRight, sCommand, hasParameter, parameter )
COMMAND_RTF_INT ( "tscellpaddfb", cellProps->m_nIsPaddingBottom, sCommand, hasParameter, parameter )
COMMAND_RTF_INT ( "tscellpaddfb", cellProps->m_ePaddingBottomUnit,sCommand, hasParameter, parameter )
COMMAND_RTF_INT ( "tscellpaddb", cellProps->m_nPaddingBottom, sCommand, hasParameter, parameter )
COMMAND_RTF_BOOL( "tsnowrap", cellProps->m_bNoWrap, sCommand, hasParameter, parameter )
COMMAND_RTF_INT ( "tsvertalt", cellProps->m_eAlign, sCommand, true, RtfCellProperty::ca_Top )
@ -1263,10 +1267,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_eWidthUnit = mu_none; break;
case 1: rowProps->m_eWidthUnit = mu_Auto; break;
case 2: rowProps->m_eWidthUnit = mu_Percent; break;
case 3: rowProps->m_eWidthUnit = mu_Twips; break;
default:
break;
}
}
}
@ -1277,10 +1283,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 +1299,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 +1321,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 )
@ -1347,16 +1357,18 @@ bool RtfTableRowPropsCommand::ExecuteCommand(RtfDocument& oDocument, RtfReader&
}
}
COMMAND_RTF_INT ( "trwWidth", rowProps->m_nWidth, sCommand, hasParameter, parameter )
else if ( "trleft" == sCommand )
else if ( "trftsWidth" == sCommand )
{
if ( hasParameter )
{
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_eWidthUnit = mu_none; break;
case 1: rowProps->m_eWidthUnit = mu_Auto; break;
case 2: rowProps->m_eWidthUnit = mu_Percent; break;
case 3: rowProps->m_eWidthUnit = mu_Twips; break;
default:
break;
}
}
}
@ -2206,6 +2218,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 +2252,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 +3045,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;

View File

@ -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();

View File

@ -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();
@ -172,10 +165,10 @@ bool OOXTableReader::Parse( ReaderParameter oParam, RtfTable& oOutputTable )
long nRowCount = m_ooxTable->m_nCountRow, nCurRow = 0;
for (std::vector<OOX::WritingElement*>::iterator it = m_ooxTable->m_arrItems.begin(); it != m_ooxTable->m_arrItems.end(); ++it)
for (size_t i =0; i < m_ooxTable->m_arrItems.size(); ++i)
{
if ( (*it) == NULL) continue;
if ( (*it)->getType() != OOX::et_w_tr) continue;
if ( m_ooxTable->m_arrItems[i] == NULL) continue;
if ( m_ooxTable->m_arrItems[i]->getType() != OOX::et_w_tr) continue;
ReaderParameter newParam = oParam;
newParam.poTableStyle = poTableStyle;
@ -185,10 +178,11 @@ bool OOXTableReader::Parse( ReaderParameter oParam, RtfTable& oOutputTable )
//т.к. в RTF нет свойств таблиц и все свойства записываются в свойства row
(*((RtfTableProperty*)&oNewRow->m_oProperty)).Merge( oOutputTable.m_oProperty );
OOX::Logic::CTr *ooxRow = dynamic_cast<OOX::Logic::CTr *>(*it);
OOX::Logic::CTr *ooxRow = dynamic_cast<OOX::Logic::CTr *>(m_ooxTable->m_arrItems[i]);
OOXTableRowReader oRowReader(ooxRow, m_ooxTable->m_oTableProperties);
oRowReader.Parse( newParam, *oNewRow, nCurRow++, nRowCount );
oOutputTable.AddItem( oNewRow );
}
oOutputTable.CalculateCellx( *oParam.oRtf );

View File

@ -54,7 +54,14 @@ public:
if (m_ooxRowTable == NULL) return false;
CcnfStyle oConditionStyle;
//с начала применяем свойства
if (nCurRow == 0 && oOutputRow.m_oProperty.m_bAutoFirstRow == 1)
oConditionStyle.bFirstRow = true;
if (nCurRow == nRowCount - 1 && oOutputRow.m_oProperty.m_bAutoLastRow == 1)
oConditionStyle.bLastRow = true;
//сначала применяем свойства
if( m_ooxRowTable->m_pTableRowProperties )
{
OOXtrPrReader otrPrReader(m_ooxRowTable->m_pTableRowProperties);
@ -63,10 +70,10 @@ public:
int nCellCount = m_ooxRowTable->m_nCountCell, nCurCell = 0;
for (std::vector<OOX::WritingElement*>::iterator it = m_ooxRowTable->m_arrItems.begin(); it != m_ooxRowTable->m_arrItems.end(); ++it)
for (size_t i = 0; i < m_ooxRowTable->m_arrItems.size(); ++i)
{
if ( (*it) == NULL ) continue;
if ( (*it)->getType() != OOX::et_w_tc)continue;//todooo bookmarks
if ( m_ooxRowTable->m_arrItems[i] == NULL ) continue;
if ( m_ooxRowTable->m_arrItems[i]->getType() != OOX::et_w_tc) continue;//todooo bookmarks
RtfTableCellPtr oNewCell( new RtfTableCell() );
@ -74,7 +81,7 @@ public:
if (nCurCell < m_ooxRowTable->m_arrItems.size())
{
ooxCell = dynamic_cast<OOX::Logic::CTc *>(*it);
ooxCell = dynamic_cast<OOX::Logic::CTc *>(m_ooxRowTable->m_arrItems[i]);
}
OOXTableCellReader oCellReader(ooxCell, m_ooxTableProps );

View File

@ -42,7 +42,7 @@ public:
{
m_ooxTabs = ooxTabs;
}
bool Parse( ReaderParameter oParam ,RtfTabs& oOutputProperty)
bool Parse( ReaderParameter oParam, RtfTabs& oOutputProperty)
{
if (m_ooxTabs == NULL) return false;
@ -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())

View File

@ -69,7 +69,7 @@ public:
{
if (m_ooxTblLook == NULL) return false;
oOutput.bLastRow = m_ooxTblLook->IsFirstRow();
oOutput.bFirstRow = m_ooxTblLook->IsFirstRow();
oOutput.bLastRow = m_ooxTblLook->IsLastRow();
oOutput.bFirstCol = m_ooxTblLook->IsFirstColumn();
oOutput.bLastCol = m_ooxTblLook->IsLastColumn();

View File

@ -37,6 +37,7 @@
#include "OOXtblpPrReader.h"
#include "OOXReaderBasic.h"
#include "OOXtblLookReader.h"
#include "OOXtcPrReader.h"
#include "../RtfDocument.h"
#include "../../../../Common/DocxFormat/Source/DocxFormat/Logic/TableProperty.h"
@ -231,25 +232,8 @@ public:
if (m_ooxTableProps->m_oTblStyleColBandSize.IsInit() && m_ooxTableProps->m_oTblStyleColBandSize->m_oVal.IsInit())
oOutputProperty.m_nColBandSize = m_ooxTableProps->m_oTblStyleColBandSize->m_oVal->GetValue();
if( m_ooxTableProps->m_oTblW.IsInit() && m_ooxTableProps->m_oTblW->m_oW.IsInit())
{
if( m_ooxTableProps->m_oTblW->m_oType.IsInit())
{
switch(m_ooxTableProps->m_oTblW->m_oType->GetValue())
{
case SimpleTypes::tblwidthDxa:
{
oOutputProperty.m_nWidth = (int)m_ooxTableProps->m_oTblW->m_oW->GetValue();
oOutputProperty.m_eMUWidth = mu_Twips;
}break;
case SimpleTypes::tblwidthPct:
{
oOutputProperty.m_nWidth = (int)m_ooxTableProps->m_oTblW->m_oW->GetValue();
oOutputProperty.m_eMUWidth = mu_Percent;
}break;
}
}
}
OOXtcPrReader::Parse(m_ooxTableProps->m_oTblW.GetPointer(), oOutputProperty.m_eWidthUnit, oOutputProperty.m_nWidth, true );
return true;
}
};

View File

@ -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,45 +91,13 @@ 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_ePaddingLeftUnit, oOutputProperty.m_nPaddingLeft, false);
Parse (m_ooxTableCellProps->m_oTcMar->m_oTop.GetPointer(), oOutputProperty.m_ePaddingTopUnit, oOutputProperty.m_nPaddingTop, false);
Parse (m_ooxTableCellProps->m_oTcMar->m_oEnd.GetPointer(), oOutputProperty.m_ePaddingRightUnit, oOutputProperty.m_nPaddingRight, false);
Parse (m_ooxTableCellProps->m_oTcMar->m_oBottom.GetPointer(), oOutputProperty.m_ePaddingBottomUnit, oOutputProperty.m_nPaddingBottom, false);
}
Parse(m_ooxTableCellProps->m_oTcW.GetPointer(), oOutputProperty.m_eWidthUnit, oOutputProperty.m_nWidth, true);
if( m_ooxTableCellProps->m_oTcW.IsInit() && m_ooxTableCellProps->m_oTcW->m_oW.IsInit())
{
bool auto_ = false;
if (m_ooxTableCellProps->m_oTcW->m_oType.IsInit() && m_ooxTableCellProps->m_oTcW->m_oType->GetValue() == SimpleTypes::tblwidthAuto)
auto_ = true;
if (auto_)
{
oOutputProperty.m_eWidthUnits = mu_Auto;
}
else
{
oOutputProperty.m_nWidth = (int)m_ooxTableCellProps->m_oTcW->m_oW->GetValue();
oOutputProperty.m_eWidthUnits = m_ooxTableCellProps->m_oTcW->m_oW->IsPercent() ? mu_Percent : mu_Twips;
}
}
if( m_ooxTableCellProps->m_oHideMark.IsInit())
oOutputProperty.m_bHideMark = m_ooxTableCellProps->m_oHideMark->m_oVal.ToBool() ? 1 : 0;
@ -216,19 +186,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 +209,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 сделать реализацию с процентами
}
};

View File

@ -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<RtfParagraph *>(m_pResult->m_pTextItems->m_aArray[i].get());
if (paragraph)

View File

@ -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"<w:numPicBullet w:numPicBulletId=\"" + std::to_wstring(i) + L"\">";
sResult += m_aPictureList[i]->RenderToOOX(oNewParam);

View File

@ -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"<w:pitch w:val=\"";
sResult += sPitch;
@ -243,6 +255,8 @@ std::wstring RtfFont::RenderToOOX(RenderParameter oRenderParameter)
sHint = L" w:hint=\"cs\"/>";
}break;
//?? нужно ли описывать default??? todooo
default:
break;
}
sResult += L"<w:rFonts w:ascii=\"";
sResult += sFontName;
@ -324,6 +338,8 @@ std::wstring RtfShadingChar::RenderToRtf(RenderParameter oRenderParameter)
case st_chbgdkbdiag: sResult += L"\\chbgdkbdiag"; break;
case st_chbgdkcross: sResult += L"\\chbgdkcross"; break;
case st_chbgdkdcross: sResult += L"\\chbgdkdcross"; break;
default:
break;
}
RENDER_RTF_INT( m_nForeColor, sResult, L"chcfpat" )
RENDER_RTF_INT( m_nBackColor, sResult, L"chcbpat" )
@ -348,6 +364,8 @@ std::wstring RtfShadingPar::RenderToRtf(RenderParameter oRenderParameter)
case st_chbgdkbdiag: sResult += L"\\bgdkbdiag"; break;
case st_chbgdkcross: sResult += L"\\bgdkcross"; break;
case st_chbgdkdcross: sResult += L"\\bgdkdcross"; break;
default:
break;
}
RENDER_RTF_INT( m_nForeColor, sResult, L"cfpat" )
RENDER_RTF_INT( m_nBackColor, sResult, L"cbpat" )
@ -373,6 +391,8 @@ std::wstring RtfShadingCell::RenderToRtf(RenderParameter oRenderParameter)
case st_chbgdkbdiag: sResult += L"\\clbgdkbdiag"; break;
case st_chbgdkcross: sResult += L"\\clbgdkcross"; break;
case st_chbgdkdcross: sResult += L"\\clbgdkdcross"; break;
default:
break;
}
RENDER_RTF_INT( m_nForeColor, sResult, L"clcfpat" )
if( PROP_DEF != m_nBackColor )
@ -401,6 +421,8 @@ std::wstring RtfShadingRow::RenderToRtf(RenderParameter oRenderParameter)
case st_chbgdkbdiag: sResult += L"\\trbgdkbdiag"; break;
case st_chbgdkcross: sResult += L"\\trbgdkcross"; break;
case st_chbgdkdcross: sResult += L"\\trbgdkdcross"; break;
default:
break;
}
RENDER_RTF_INT( m_nForeColor, sResult, L"trcfpat" )
RENDER_RTF_INT( m_nBackColor, sResult, L"trcbpat" )
@ -425,6 +447,8 @@ std::wstring RtfShadingTableStyle::RenderToRtf(RenderParameter oRenderParameter)
case st_chbgdkbdiag: sResult += L"\\tsbgdkbdiag"; break;
case st_chbgdkcross: sResult += L"\\tsbgdkcross"; break;
case st_chbgdkdcross: sResult += L"\\tsbgdkdcross"; break;
default:
break;
}
RENDER_RTF_INT( m_nForeColor, sResult, L"tscellcfpat" )
RENDER_RTF_INT( m_nBackColor, sResult, L"tscellcbpat" )
@ -499,6 +523,8 @@ std::wstring RtfShading::RenderToOOX(RenderParameter oRenderParameter)
case st_chbgdkbdiag: sShading += L" w:val=\"diagStripe\""; break;
case st_chbgdkcross: sShading += L" w:val=\"horzCross\""; break;
case st_chbgdkdcross: sShading += L" w:val=\"diagCross\""; break;
default:
break;
}
}
if( false == sShading.empty() )
@ -537,6 +563,8 @@ std::wstring RtfBorder::RenderToRtf(RenderParameter oRenderParameter)
case bt_brdrengrave: sResult = L"\\brdrengrave"; break;
case bt_brdroutset: sResult = L"\\brdroutset"; break;
case bt_brdrnone: sResult = L"\\brdrnone"; break;
default:
break;
}
if( PROP_DEF != m_nWidth && m_nWidth > 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"<w:effect w:val=\"antsBlack\"/>"; break;
case 5: sResult += L"<w:effect w:val=\"antsRed\"/>"; break;
case 6: sResult += L"<w:effect w:val=\"shimmer\"/>"; 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"<w:suff w:val=\"tab\"/>"; break;
case 1: sResult += L"<w:suff w:val=\"space\"/>"; break;
case 2: sResult += L"<w:suff w:val=\"nothing\"/>"; 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"<w:style w:type=\"" + sType + L"\" w:styleId=\"" + XmlUtils::EncodeXmlString( m_sName ) + L"\">";
sResult += L"<w:style w:type=\"" + sType + L"\" w:styleId=\"" + L"Style_" + std::to_wstring(m_nID) + L"\">";
@ -1301,10 +1341,11 @@ std::wstring RtfParagraphStyle::RenderToOOX(RenderParameter oRenderParameter)
// RENDER_RTF_INT( m_nPaddingLeft, sResult, L"tscellpaddl" )
// RENDER_RTF_INT( m_nPaddingRight, sResult, L"tscellpaddr" )
// RENDER_RTF_INT( m_nPaddingBottom, sResult, L"tscellpaddb" )
// RENDER_RTF_INT( m_nIsPaddingTop, sResult, L"tscellpaddft" )
// RENDER_RTF_INT( m_nIsPaddingLeft, sResult, L"tscellpaddfl" )
// RENDER_RTF_INT( m_nIsPaddingRight, sResult, L"tscellpaddfr" )
// RENDER_RTF_INT( m_nIsPaddingBottom, sResult, L"tscellpaddfb" )
// RENDER_RTF_INT( m_ePaddingTopUnit, sResult, L"tscellpaddft" )
// RENDER_RTF_INT( m_ePaddingLeftUnit, sResult, L"tscellpaddfl" )
// RENDER_RTF_INT( m_ePaddingRightUnit, sResult, L"tscellpaddfr" )
// RENDER_RTF_INT( m_ePaddingBottomUnit, sResult, L"tscellpaddfb" )
//
// switch( m_eAlign )
// {
@ -1551,6 +1592,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 +1605,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 +1632,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 +1642,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 +1662,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 +1679,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 +1688,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 +1706,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 +1717,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 +1757,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 +1768,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 +1788,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 +1798,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 +1846,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 +1857,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 +1891,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 +1951,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 +2071,8 @@ std::wstring RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter)
case pa_qk0: sResult += L"<w:jc w:val=\"lowKashida\" />"; break;
case pa_qk10: sResult += L"<w:jc w:val=\"mediumKashida\" />"; break;
case pa_qk20: sResult += L"<w:jc w:val=\"highKashida\" />"; break;
default:
break;
}
switch( m_eFontAlign )
{
@ -2001,6 +2082,8 @@ std::wstring RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter)
case fa_faroman: sResult += L"<w:textAlignment w:val=\"baseline\" />";break;
case fa_favar: sResult += L"<w:textAlignment w:val=\"bottom\" />"; break;
case fa_fafixed: sResult += L"<w:textAlignment w:val=\"bottom\" />"; break;
default:
break;
}
std::wstring sIndent;
if( PROP_DEF != m_nIndFirstLine )
@ -2072,6 +2155,8 @@ std::wstring RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter)
case tbw_txbxtwfirstlast: sResult += L"<w:textboxTightWrap w:val=\"firstAndLastLine\"/>"; break;
case tbw_txbxtwfirst: sResult += L"<w:textboxTightWrap w:val=\"firstLineOnly\"/>"; break;
case tbw_txbxtwlast: sResult += L"<w:textboxTightWrap w:val=\"lastLineOnly\"/>"; break;
default:
break;
}
if( PROP_DEF != m_nListId && PROP_DEF != m_nListLevel )
sResult += L"<w:numPr><w:ilvl w:val=\"" + std::to_wstring(m_nListLevel) + L"\" /><w:numId w:val=\"" + std::to_wstring(m_nListId) + L"\" /></w:numPr>";
@ -2136,6 +2221,8 @@ std::wstring RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter)
case tf_frmtxbtlr: sResult += L"<w:textFlow w:val=\"btlr\" />"; break;
case tf_frmtxlrtbv: sResult += L"<w:textFlow w:val=\"lrtbV\" />";break;
case tf_frmtxtbrlv: sResult += L"<w:textFlow w:val=\"tbrlV\" />";break;
default:
break;
}
if( true == m_oTabs.IsValid() )
{
@ -2176,23 +2263,24 @@ 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_ePaddingLeftUnit, 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_ePaddingRightUnit, sResult, L"clpadfr" )
RENDER_RTF_INT( m_nPaddingTop, sResult, L"clpadl" ) //перепутаны top & left
RENDER_RTF_INT( m_ePaddingTopUnit, sResult, L"clpadfl" ) //перепутаны top & left
RENDER_RTF_INT( m_nPaddingBottom, sResult, L"clpadb" )
RENDER_RTF_INT( m_ePaddingBottomUnit, sResult, L"clpadfb" )
RENDER_RTF_INT( m_nIsSpacingLeft, sResult, L"clspfl" )
RENDER_RTF_INT( m_eSpacingLeftUnit, sResult, L"clspfl" )
RENDER_RTF_INT( m_nSpacingLeft, sResult, L"clspl" )
RENDER_RTF_INT( m_nIsSpacingRight, sResult, L"clspl" )
RENDER_RTF_INT( m_eSpacingRightUnit, sResult, L"clspl" )
RENDER_RTF_INT( m_nSpacingRight, sResult, L"clspr" )
RENDER_RTF_INT( m_nIsSpacingTop, sResult, L"clspft" )
RENDER_RTF_INT( m_eSpacingTopUnit, sResult, L"clspft" )
RENDER_RTF_INT( m_nSpacingTop, sResult, L"clspt" )
RENDER_RTF_INT( m_nIsSpacingBottom, sResult, L"clspfb" )
RENDER_RTF_INT( m_eSpacingBottomUnit, sResult, L"clspfb" )
RENDER_RTF_INT( m_nSpacingBottom, sResult, L"clspb" )
RENDER_RTF_BOOL( m_bHideMark, sResult, L"clhidemark" )
@ -2235,6 +2323,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,14 +2333,18 @@ 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 )
switch( m_eWidthUnit )
{
case mu_none: sResult += L"\\clftsWidth0"; break;
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);
@ -2269,13 +2363,13 @@ std::wstring RtfCellProperty::RenderToOOX(RenderParameter oRenderParameter)
RENDER_OOX_BOOL( m_bNoWrap, sResult, L"w:noWrap" )
std::wstring sMargin;
if( 3 == m_nIsPaddingLeft && PROP_DEF != m_nPaddingLeft)
if( 3 == m_ePaddingLeftUnit && PROP_DEF != m_nPaddingLeft)
sResult += L"<w:left w:w=\"" + std::to_wstring(m_nPaddingLeft) + L"\" w:type=\"dxa\"/>";
if( 3 == m_nIsPaddingRight && PROP_DEF != m_nPaddingRight)
if( 3 == m_ePaddingRightUnit && PROP_DEF != m_nPaddingRight)
sResult += L"<w:right w:w=\"" + std::to_wstring(m_nPaddingRight) + L"\" w:type=\"dxa\"/>";
if( 3 == m_nIsPaddingTop && PROP_DEF != m_nPaddingTop)
if( 3 == m_ePaddingTopUnit && PROP_DEF != m_nPaddingTop)
sResult += L"<w:top w:w=\"" + std::to_wstring(m_nPaddingTop) + L"\" w:type=\"dxa\"/>";
if( 3 == m_nIsPaddingBottom && PROP_DEF != m_nPaddingBottom)
if( 3 == m_ePaddingBottomUnit && PROP_DEF != m_nPaddingBottom)
sResult += L"<w:bottom w:w=\"" + std::to_wstring(m_nPaddingBottom) + L"\" w:type=\"dxa\"/>";
if( !sMargin.empty() )
@ -2312,9 +2406,9 @@ std::wstring RtfCellProperty::RenderToOOX(RenderParameter oRenderParameter)
if( PROP_DEF != m_nWidth )
{
if( mu_Percent == m_eWidthUnits )
if( mu_Percent == m_eWidthUnit )
sResult += L"<w:tcW w:type=\"pct\" w:w=\"" + std::to_wstring(m_nWidth) + L"%\"/>";
else if( mu_Twips == m_eWidthUnits )
else if( mu_Twips == m_eWidthUnit )
sResult += L"<w:tcW w:type=\"dxa\" w:w=\"" + std::to_wstring(m_nWidth) + L"\"/>";
}
RENDER_OOX_BOOL( m_bHideMark, sResult, L"w:hideMark" )
@ -2386,6 +2480,8 @@ std::wstring RtfCellProperty::RenderToOOX(RenderParameter oRenderParameter)
case ca_Top: sResult += L"<w:vAlign w:val=\"top\"/>"; break;
case ca_Center: sResult += L"<w:vAlign w:val=\"center\"/>"; break;
case ca_Bottom: sResult += L"<w:vAlign w:val=\"bottom\"/>"; break;
default:
break;
}
switch( m_oCellFlow )
{
@ -2394,7 +2490,8 @@ std::wstring RtfCellProperty::RenderToOOX(RenderParameter oRenderParameter)
case cf_btlr: sResult += L"<w:textDirection w:val=\"btLr\"/>"; break;
case cf_lrtbv: sResult += L"<w:textDirection w:val=\"lrTbV\"/>"; break;
case cf_tbrlv: sResult += L"<w:textDirection w:val=\"tbRlV\"/>"; break;
default:
break;
}
RENDER_OOX_INT( m_nSpan, sResult, L"w:gridSpan" );
@ -2582,6 +2679,8 @@ std::wstring RtfTableProperty::RenderToOOX(RenderParameter oRenderParameter)
//case 2: sResult += L"<w:tblInd w:w=\"" + std::to_wstring(nTableIndent) + L"%%\" w:type=\"pct\"/>", );break;
case 3: sResult += L"<w:tblInd w:w=\"" + std::to_wstring(nTableIndent) + L"\" w:type=\"dxa\"/>"; break;
//default: sResult += L"<w:tblInd w:w=\"" + std::to_wstring(nTableIndent) + L"\" w:type=\"dxa\"/>", nTableIndent );break;
default:
break;
}
}
@ -2593,6 +2692,8 @@ std::wstring RtfTableProperty::RenderToOOX(RenderParameter oRenderParameter)
case rj_trql : sResult += L"<w:jc w:val=\"left\"/>"; break;
case rj_trqr : sResult += L"<w:jc w:val=\"right\"/>"; break;
case rj_trqc : sResult += L"<w:jc w:val=\"center\"/>"; break;
default:
break;
}
std::wstring sFloatingPosition;
@ -2649,9 +2750,9 @@ std::wstring RtfTableProperty::RenderToOOX(RenderParameter oRenderParameter)
sResult += L"/>";
}
if( PROP_DEF != m_nWidth && ( 2 == m_eMUWidth || 3 == m_eMUWidth ))
if( PROP_DEF != m_nWidth && ( 2 == m_eWidthUnit || 3 == m_eWidthUnit ))
{
if( 2 == m_eMUWidth )
if( 2 == m_eWidthUnit )
sResult += L"<w:tblW w:w=\"" + std::to_wstring(m_nWidth) + L"\" w:type=\"pct\"/>";
else
sResult += L"<w:tblW w:w=\"" + std::to_wstring(m_nWidth) + L"\" w:type=\"dxa\"/>";
@ -2738,30 +2839,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 )
switch( m_eWidthUnit )
{
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 +2900,8 @@ std::wstring RtfRowProperty::RenderToOOX(RenderParameter oRenderParameter)
case rj_trql : sResult += L"<w:jc w:val=\"left\"/>"; break;
case rj_trqr : sResult += L"<w:jc w:val=\"right\"/>"; break;
case rj_trqc : sResult += L"<w:jc w:val=\"center\"/>"; break;
default:
break;
}
if( PROP_DEF != m_nHeight )
{
@ -2806,6 +2917,8 @@ std::wstring RtfRowProperty::RenderToOOX(RenderParameter oRenderParameter)
{
case mu_Percent: sResult += L"<w:wBefore w:type=\"pct\" w:w=\"" + std::to_wstring(m_nWidthStartInvCell) + L"%\"/>"; break;
case mu_Twips: sResult += L"<w:wBefore w:type=\"dxa\" w:w=\"" + std::to_wstring(m_nWidthStartInvCell) + L"\"/>"; break;
default:
break;
}
}
if( PROP_DEF != m_nWidthEndInvCell )
@ -2814,6 +2927,8 @@ std::wstring RtfRowProperty::RenderToOOX(RenderParameter oRenderParameter)
{
case mu_Percent: sResult += L"<w:wAfter w:type=\"pct\" w:w=\"" + std::to_wstring(m_nWidthEndInvCell) + L"%\"/>"; break;
case mu_Twips: sResult += L"<w:wAfter w:type=\"dxa\" w:w=\"" + std::to_wstring(m_nWidthEndInvCell) + L"\"/>"; break;
default:
break;
}
}
RENDER_OOX_INT( m_nGridBefore, sResult, L"w:gridBefore" )

View File

@ -1803,8 +1803,9 @@ public:
int m_nVPos; //tposyN Position table N twips from the top edge of the vertical reference frame.
int m_nLeft;
int m_nWidth; //trwWidthN Preferred row width. Overrides \trautofitN.
_MetricUnits m_eMUWidth; //trftsWidthN Units for \trwWidthN:
int m_nWidth; //trwWidthN Width of invisible cell at the end of the row. Used only when rows have different widths.
int m_eWidthUnit; //trftsWidthN Units for \trwWidthN:
int m_nDefCellMarBottom; //trpaddbN Default bottom cell margin or padding for the row.
int m_nDefCellMarLeft; //trpaddlN Default left cell margin or padding for the row.
@ -1837,12 +1838,12 @@ public:
int m_nStyle;
//Autoformatting Flags
int m_bAutoFirstRow; //tbllkhdrrows Flag sets table autoformat to format the first (header) row.
int m_bAutoFirstRow; //tbllkhdrrows Flag sets table autoformat to format the first (header) row.
int m_bAutoLastRow; //tbllklastrow Flag sets table autoformat to format the last row.
int m_bAutoFirstCol; //tbllkhdrcols Flag sets table autoformat to format the first (header) column.
int m_bAutoFirstCol; //tbllkhdrcols Flag sets table autoformat to format the first (header) column.
int m_bAutoLastCol; //tbllklastcol Flag sets table autoformat to format the last column.
int m_bAutoNoRowBand; //tbllknorowband Specifies row banding conditional formatting shall not be applied.
int m_bAutoNoColBand; //tbllknocolband Specifies column banding conditional formatting shall not be applied.
int m_bAutoNoRowBand; //tbllknorowband Specifies row banding conditional formatting shall not be applied.
int m_bAutoNoColBand; //tbllknocolband Specifies column banding conditional formatting shall not be applied.
int m_nRowBandSize; //tscbandshN Count of rows in a row band
int m_nColBandSize; //tscbandsvN Count of cells in a cell band
@ -1888,7 +1889,7 @@ public:
DEFAULT_PROPERTY( m_nLeft )
DEFAULT_PROPERTY( m_nWidth )
m_eMUWidth = mu_none;
m_eWidthUnit = mu_none;
//m_nDefCellMarBottom = 0;
//m_nDefCellMarRight = 108;
@ -1968,7 +1969,8 @@ public:
MERGE_PROPERTY( m_nLeft, oTablePr )
MERGE_PROPERTY( m_nWidth, oTablePr )
MERGE_PROPERTY_DEF( m_eMUWidth, oTablePr, mu_none )
MERGE_PROPERTY_DEF( m_eWidthUnit, oTablePr, mu_none )
MERGE_PROPERTY( m_nDefCellMarBottom, oTablePr )
MERGE_PROPERTY( m_nDefCellMarRight, oTablePr )
@ -2177,25 +2179,25 @@ public:
int m_bNoWrap; //clNoWrap Do not wrap text for the cell. Only has an effect if the table cell does not have a preferred \clwWidthN, which overrides \trautofitN.
int m_nPaddingLeft; //clpadlN Left cell margin or padding. Overrides \trpaddlN.
int m_nIsPaddingLeft; //clpadflN Units for \clpadlN:
int m_ePaddingLeftUnit; //clpadflN Units for \clpadlN:
int m_nPaddingRight;
int m_nIsPaddingRight;
int m_ePaddingRightUnit;
int m_nPaddingTop;
int m_nIsPaddingTop;
int m_ePaddingTopUnit;
int m_nPaddingBottom;
int m_nIsPaddingBottom;
int m_ePaddingBottomUnit;
int m_nSpacingLeft; //clsplN Left cell margin or padding. Overrides \trspdlN.
int m_nIsSpacingLeft; //clspflN Units for \clsplN:
int m_eSpacingLeftUnit; //clspflN Units for \clsplN:
int m_nSpacingRight;
int m_nIsSpacingRight;
int m_eSpacingRightUnit;
int m_nSpacingTop;
int m_nIsSpacingTop;
int m_eSpacingTopUnit;
int m_nSpacingBottom;
int m_nIsSpacingBottom;
int m_eSpacingBottomUnit;
int m_nWidth; //clwWidthN Preferred cell width. Overrides \trautofitN.
_MetricUnits m_eWidthUnits; //clftsWidthN Units for \clwWidthN:
int m_eWidthUnit; //clftsWidthN Units for \clwWidthN:
int m_bHideMark; //clhidemark This control word specifies whether the end of cell glyph shall influence the height of the given table row in the table. If it is specified, then only printing characters in this cell shall be used to determine the row height.
@ -2266,24 +2268,24 @@ public:
DEFAULT_PROPERTY( m_bNoWrap )
DEFAULT_PROPERTY( m_nPaddingLeft )
DEFAULT_PROPERTY( m_nIsPaddingLeft )
DEFAULT_PROPERTY( m_ePaddingLeftUnit )
DEFAULT_PROPERTY( m_nPaddingRight )
DEFAULT_PROPERTY( m_nIsPaddingRight )
DEFAULT_PROPERTY( m_ePaddingRightUnit )
DEFAULT_PROPERTY( m_nPaddingTop )
DEFAULT_PROPERTY( m_nIsPaddingTop )
DEFAULT_PROPERTY( m_ePaddingTopUnit )
DEFAULT_PROPERTY( m_nPaddingBottom )
DEFAULT_PROPERTY( m_nIsPaddingBottom )
DEFAULT_PROPERTY( m_ePaddingBottomUnit )
DEFAULT_PROPERTY( m_nSpacingLeft )
DEFAULT_PROPERTY( m_nIsSpacingLeft )
DEFAULT_PROPERTY( m_eSpacingLeftUnit )
DEFAULT_PROPERTY( m_nSpacingRight )
DEFAULT_PROPERTY( m_nIsSpacingRight )
DEFAULT_PROPERTY( m_eSpacingRightUnit )
DEFAULT_PROPERTY( m_nSpacingTop )
DEFAULT_PROPERTY( m_nIsSpacingTop )
DEFAULT_PROPERTY( m_eSpacingTopUnit )
DEFAULT_PROPERTY( m_nSpacingBottom )
DEFAULT_PROPERTY( m_nIsSpacingBottom )
DEFAULT_PROPERTY( m_eSpacingBottomUnit )
m_eWidthUnits = mu_none;
m_eWidthUnit = mu_none;
DEFAULT_PROPERTY( m_nWidth )
DEFAULT_PROPERTY( m_bHideMark )
@ -2325,35 +2327,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_nIsPaddingBottom, oCellPr )
MERGE_PROPERTY( m_nPaddingLeft, oCellPr )
MERGE_PROPERTY( m_ePaddingLeftUnit, oCellPr )
MERGE_PROPERTY( m_nPaddingRight, oCellPr )
MERGE_PROPERTY( m_ePaddingRightUnit, oCellPr )
MERGE_PROPERTY( m_nPaddingTop, oCellPr )
MERGE_PROPERTY( m_ePaddingTopUnit, oCellPr )
MERGE_PROPERTY( m_nPaddingBottom, oCellPr )
MERGE_PROPERTY( m_ePaddingBottomUnit, 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_nSpacingLeft, oCellPr )
MERGE_PROPERTY( m_eSpacingLeftUnit, oCellPr )
MERGE_PROPERTY( m_nSpacingRight, oCellPr )
MERGE_PROPERTY( m_eSpacingRightUnit, oCellPr )
MERGE_PROPERTY( m_nSpacingTop, oCellPr )
MERGE_PROPERTY( m_eSpacingTopUnit, oCellPr )
MERGE_PROPERTY( m_nSpacingBottom, oCellPr )
MERGE_PROPERTY( m_eSpacingBottomUnit, oCellPr )
MERGE_PROPERTY( m_eWidthUnits, oCellPr )
MERGE_PROPERTY( m_nWidth, oCellPr )
MERGE_PROPERTY( m_bHideMark, oCellPr )
MERGE_PROPERTY( m_eWidthUnit, 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 +2423,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

View File

@ -203,8 +203,8 @@ public:
nWidth = aCellx[k];
else
nWidth = aCellx[k] - aCellx[nLastIndex - 1];
oCurCell->m_oProperty.m_nWidth = nWidth;
oCurCell->m_oProperty.m_eWidthUnits = mu_Twips;
oCurCell->m_oProperty.m_nWidth = nWidth;
oCurCell->m_oProperty.m_eWidthUnit = mu_Twips;
nLastIndex = k + 1;
break;
}
@ -247,23 +247,27 @@ public:
int nGutter = oDocument.m_oProperty.m_nGutterWidth;
if( 1 == oDocument.m_oProperty.m_bGutterAtTop )//не учитываем если это Top gutter
nGutter = 0;
m_oProperty.m_nWidth = oDocument.m_oProperty.m_nPaperWidth - oDocument.m_oProperty.m_nMarginLeft - oDocument.m_oProperty.m_nMarginRight - nGutter;
m_oProperty.m_eMUWidth = mu_Twips;
m_oProperty.m_nWidth = oDocument.m_oProperty.m_nPaperWidth - oDocument.m_oProperty.m_nMarginLeft - oDocument.m_oProperty.m_nMarginRight - nGutter;
m_oProperty.m_eWidthUnit = mu_Twips;
}
for (size_t i = 0; i < (int)m_aArray.size(); i++)
{
RtfTableRowPtr oCurRow = m_aArray[i];
int nCellCount = oCurRow->GetCount();
if( oCurRow->m_oProperty.GetCount() < nCellCount )
nCellCount = oCurRow->m_oProperty.GetCount();
if( nCellCount > 0 )
{
int nCellWidth = m_oProperty.m_nWidth / nCellCount;
int nCurCellX = 0;
for (int j = 0; j < nCellCount; j++ )
{
nCurCellX += nCellWidth;
RtfTableCellPtr oCellPtr = (*oCurRow)[j];
oCellPtr->m_oProperty.m_nCellx = nCurCellX;
oCurRow->m_oProperty[j].m_nCellx = nCurCellX;
@ -273,7 +277,7 @@ public:
}
else
{
for (size_t i = 0; i < (int)m_aArray.size(); i++)
for (size_t i = 0; i < m_aArray.size(); i++)
{
RtfTableRowPtr oCurRow= m_aArray[ i ];
@ -286,31 +290,32 @@ public:
nLeft += 2 * m_oProperty.m_nDefCellSpLeft;
int nDelta = nLeft;//в left учитывается GrindBefore
if( PROP_DEF != oCurRow->m_oProperty.m_nGridBefore )
{
int nGridBefore = oCurRow->m_oProperty.m_nGridBefore;
if( (int)m_aTableGrid.size() > nGridBefore - 1)
{
int nWidthBefore = 0;
for (int k = 0; k < nGridBefore ; k++ )
nWidthBefore += m_aTableGrid[k];
oCurRow->m_oProperty.m_nWidthStartInvCell = nWidthBefore;
oCurRow->m_oProperty.m_eMUStartInvCell = mu_Twips;
nLeft += nWidthBefore;
}
}
if( PROP_DEF != oCurRow->m_oProperty.m_nGridAfter )
{
int nGridAfter = oCurRow->m_oProperty.m_nGridAfter;
if( (int)m_aTableGrid.size() > nGridAfter - 1)
{
int nWidthAfter = 0;
for( int k = (int)m_aTableGrid.size() - 1; k >= (int)m_aTableGrid.size() - 1 - nGridAfter; k-- )
nWidthAfter += m_aTableGrid[k];
oCurRow->m_oProperty.m_nWidthEndInvCell = nWidthAfter;
oCurRow->m_oProperty.m_eMUEndInvCell = mu_Twips;
}
}
//if( PROP_DEF != oCurRow->m_oProperty.m_nGridBefore )
//{
// int nGridBefore = oCurRow->m_oProperty.m_nGridBefore;
// if( (int)m_aTableGrid.size() > nGridBefore - 1)
// {
// int nWidthBefore = 0;
// for (int k = 0; k < nGridBefore ; k++ )
// nWidthBefore += m_aTableGrid[k];
// oCurRow->m_oProperty.m_nWidthStartInvCell = nWidthBefore;
// oCurRow->m_oProperty.m_eMUStartInvCell = mu_Twips;
// nLeft += nWidthBefore;
// }
//}
//if( PROP_DEF != oCurRow->m_oProperty.m_nGridAfter )
//{
// int nGridAfter = oCurRow->m_oProperty.m_nGridAfter;
// if( (int)m_aTableGrid.size() > nGridAfter - 1)
// {
// int nWidthAfter = 0;
//
// for( int k = (int)m_aTableGrid.size() - 1; k >= (int)m_aTableGrid.size() - 1 - nGridAfter; k-- )
// nWidthAfter += m_aTableGrid[k];
// oCurRow->m_oProperty.m_nWidthEndInvCell = nWidthAfter;
// oCurRow->m_oProperty.m_eMUEndInvCell = mu_Twips;
// }
//}
if( 0 != nLeft )
oCurRow->m_oProperty.m_nLeft = nLeft;
@ -322,10 +327,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 )

View File

@ -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("<w:tcMar>");
@ -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<ComplexTypes::Word::CTblWidth > m_oBottom;
nullable<ComplexTypes::Word::CTblWidth > m_oEnd;

View File

@ -244,16 +244,23 @@ namespace CSVWriter
{
if (pCell->m_oType.IsInit() && SimpleTypes::Spreadsheet::celltypeNumber != pCell->m_oType->GetValue())
{
int nValue = _wtoi(pCell->m_oValue->ToString().c_str());
if(SimpleTypes::Spreadsheet::celltypeStr == pCell->m_oType->GetValue())
{
sCellValue = pCell->m_oValue->ToString();
}
else
{
int nValue = _wtoi(pCell->m_oValue->ToString().c_str());
if (nValue >= 0 && nValue < oXlsx.m_pSharedStrings->m_arrItems.size())
{
OOX::Spreadsheet::CSi *pSi = oXlsx.m_pSharedStrings->m_arrItems[nValue];
if(NULL != pSi)
{
sCellValue = pSi->ToString();
}
}
if (nValue >= 0 && nValue < oXlsx.m_pSharedStrings->m_arrItems.size())
{
OOX::Spreadsheet::CSi *pSi = oXlsx.m_pSharedStrings->m_arrItems[nValue];
if(NULL != pSi)
{
sCellValue = pSi->ToString();
}
}
}
}
else
{