This commit is contained in:
ElenaSubbotina
2024-10-29 10:13:34 +03:00
parent edfa558a38
commit 571a7ee2d1
5 changed files with 90 additions and 50 deletions

View File

@ -236,6 +236,20 @@ bool OOXMathReader::ParseElement(ReaderParameter oParam , OOX::WritingElement *
rtfMath->AddItem(oSubMath);
}
}break;
case OOX::et_m_borderBox:
{
OOX::Logic::CBorderBox* ooxSubMath = dynamic_cast<OOX::Logic::CBorderBox*>(ooxMath);
if (ooxSubMath)
{
RtfMathPtr oSubMath;
if (ParseElement(oParam, ooxSubMath->m_oBorderBoxPr.GetPointer(), oSubMath))
rtfMath->AddItem(oSubMath);
oSubMath.reset();
if (ParseElement(oParam, ooxSubMath->m_oElement.GetPointer(), oSubMath))
rtfMath->AddItem(oSubMath);
}
}break;
case OOX::et_m_box:
{
OOX::Logic::CBox *ooxSubMath = dynamic_cast<OOX::Logic::CBox *>(ooxMath);
@ -250,6 +264,25 @@ bool OOXMathReader::ParseElement(ReaderParameter oParam , OOX::WritingElement *
rtfMath->AddItem(oSubMath);
}
}break;
case OOX::et_m_borderBoxPr:
{
OOX::Logic::CBorderBoxPr* ooxSubMath = dynamic_cast<OOX::Logic::CBorderBoxPr*>(ooxMath);
if (ooxSubMath)
{
RtfMathPtr oSubMath;
if (ParseElement(oParam, ooxSubMath->m_oCtrlPr.GetPointer(), oSubMath))
rtfMath->AddItem(oSubMath);
//nullable<OOX::Logic::CHideBot> m_oHideBot;
//nullable<OOX::Logic::CHideLeft> m_oHideLeft;
//nullable<OOX::Logic::CHideRight> m_oHideRight;
//nullable<OOX::Logic::CHideTop> m_oHideTop;
//nullable<OOX::Logic::CStrikeBLTR> m_oStrikeBLTR;
//nullable<OOX::Logic::CStrikeH> m_oStrikeH;
//nullable<OOX::Logic::CStrikeTLBR> m_oStrikeTLBR;
//nullable<OOX::Logic::CStrikeV> m_oStrikeV;
}
}break;
case OOX::et_m_boxPr:
{
OOX::Logic::CBoxPr *ooxSubMath = dynamic_cast<OOX::Logic::CBoxPr *>(ooxMath);

View File

@ -468,7 +468,7 @@ bool OOXParagraphReader::Parse3( ReaderParameter oParam , RtfParagraph& oOutputP
oMathReader.m_oCharProperty = m_oCharProperty;
oMathReader.m_oCharProperty.Merge(oOutputParagraph.m_oProperty.m_oCharProperty);
if(true == oMathReader.Parse( oParam, (*oNewMath) ) )
if (true == oMathReader.Parse( oParam, (*oNewMath) ) )
oOutputParagraph.AddItem( oNewMath );
}break;
case OOX::et_m_oMathPara:
@ -482,17 +482,17 @@ bool OOXParagraphReader::Parse3( ReaderParameter oParam , RtfParagraph& oOutputP
oMathReader.m_oCharProperty = m_oCharProperty;
oMathReader.m_oCharProperty.Merge(oOutputParagraph.m_oProperty.m_oCharProperty);
if(true == oMathReader.Parse( oParam, (*oNewMath) ) )
if (true == oMathReader.Parse( oParam, (*oNewMath) ) )
oOutputParagraph.AddItem( oNewMath );
}break;
case OOX::et_w_sdt:
{
OOX::Logic::CSdt * pSdt = dynamic_cast<OOX::Logic::CSdt*>(m_ooxElement);
if( pSdt->m_oSdtEndPr.IsInit() )
if (pSdt->m_oSdtEndPr.IsInit() )
{
//todo
}
if(pSdt->m_oSdtContent.IsInit())
if (pSdt->m_oSdtContent.IsInit())
{
if (pSdt->m_oSdtContent->m_arrItems.size() > 0)
{
@ -508,12 +508,12 @@ bool OOXParagraphReader::Parse3( ReaderParameter oParam , RtfParagraph& oOutputP
{
OOX::Logic::CCommentRangeStart * pCommentStart = dynamic_cast<OOX::Logic::CCommentRangeStart*>(m_ooxElement);
if(pCommentStart->m_oId.IsInit())
if (pCommentStart->m_oId.IsInit())
{
int nId = pCommentStart->m_oId->GetValue();
std::map<int, OOXReader::_comment>::iterator pFind = oParam.oReader->m_mapComments.find( nId );
if( pFind == oParam.oReader->m_mapComments.end())
if (pFind == oParam.oReader->m_mapComments.end())
{
RtfAnnotElemPtr oNewAnnotElem ( new RtfAnnotElem(1) );
oNewAnnotElem->m_sValue = std::to_wstring(0x7700000 + nId);
@ -535,7 +535,7 @@ bool OOXParagraphReader::Parse3( ReaderParameter oParam , RtfParagraph& oOutputP
std::map<int, OOXReader::_comment>::iterator pFindRef = oParam.oReader->m_mapComments.find( nId );
if( pFindRef != oParam.oReader->m_mapComments.end())
if (pFindRef != oParam.oReader->m_mapComments.end())
{
RtfAnnotElemPtr oNewAnnotElem ( new RtfAnnotElem(2) );
oNewAnnotElem->m_sValue = pFindRef->second.ref;
@ -546,7 +546,7 @@ bool OOXParagraphReader::Parse3( ReaderParameter oParam , RtfParagraph& oOutputP
if (pFindComment != oParam.oDocx->m_oMain.comments->m_mapComments.end())
{
if ( pFindComment->second < (int)oParam.oDocx->m_oMain.comments->m_arrComments.size() && pFindComment->second >= 0)
if (pFindComment->second < (int)oParam.oDocx->m_oMain.comments->m_arrComments.size() && pFindComment->second >= 0)
{
OOX::CComment* oox_comment = oParam.oDocx->m_oMain.comments->m_arrComments[pFindComment->second];
if (oox_comment)
@ -688,28 +688,28 @@ bool OOXRunReader::Parse( ReaderParameter oParam , RtfParagraph& oOutputParagrap
{
switch(ooxFldChar->m_oFldCharType->GetValue())
{
case SimpleTypes::fldchartypeBegin:
case SimpleTypes::fldchartypeBegin:
{
OOXFieldBeginPtr oNewField ( new OOXFieldBegin() );
OOXFieldBeginPtr oNewField(new OOXFieldBegin());
if (ooxFldChar->m_oFldLock.IsInit())
oNewField->m_bLock = ooxFldChar->m_oFldLock->ToBool();
if (ooxFldChar->m_oDirty.IsInit())
oNewField->m_bDirty = ooxFldChar->m_oDirty->ToBool();
oNewField->m_oCharProperty = oNewProperty;
oOutputParagraph.AddItem( oNewField );
oOutputParagraph.AddItem(oNewField);
}break;
case SimpleTypes::fldchartypeEnd:
case SimpleTypes::fldchartypeEnd:
{
OOXFieldEndPtr oNewField ( new OOXFieldEnd() );
oOutputParagraph.AddItem( oNewField );
OOXFieldEndPtr oNewField(new OOXFieldEnd());
oOutputParagraph.AddItem(oNewField);
}break;
case SimpleTypes::fldchartypeSeparate:
case SimpleTypes::fldchartypeSeparate:
{
OOXFieldSeparatePtr oNewField ( new OOXFieldSeparate() );
oOutputParagraph.AddItem( oNewField );
OOXFieldSeparatePtr oNewField(new OOXFieldSeparate());
oOutputParagraph.AddItem(oNewField);
}break;
default: break;
default: break;
}
}
}break;
@ -735,7 +735,7 @@ bool OOXRunReader::Parse( ReaderParameter oParam , RtfParagraph& oOutputParagrap
int nID = ooxFootnoteReference->m_oId->GetValue();
std::map<int, TextItemContainerPtr>::iterator oPair = oParam.oReader->m_mapFootnotes.find( nID );
if( oParam.oReader->m_mapFootnotes.end() != oPair )
if (oParam.oReader->m_mapFootnotes.end() != oPair )
{
RtfFootnotePtr oNewFootnote ( new RtfFootnote() );
oNewFootnote->m_oCharProp = oNewProperty;
@ -753,7 +753,7 @@ bool OOXRunReader::Parse( ReaderParameter oParam , RtfParagraph& oOutputParagrap
int nID = ooxEndnoteReference->m_oId->GetValue();
std::map<int, TextItemContainerPtr>::iterator oPair = oParam.oReader->m_mapEndnotes.find ( nID );
if( oParam.oReader->m_mapEndnotes.end() != oPair )
if (oParam.oReader->m_mapEndnotes.end() != oPair )
{
RtfFootnotePtr oNewEndnote ( new RtfFootnote() );
oNewEndnote->m_oCharProp = oNewProperty;

View File

@ -63,7 +63,8 @@ public:
RtfConvertationManager* m_convertationManager;
std::wstring m_sPath;
int m_nCurItap; //для определение вложенности таблицы
int m_nCurItap = 0; //для определение вложенности таблицы
bool m_bInTable = false;
int m_nCurOleChartId;
int m_nCurFittextId;

View File

@ -33,6 +33,7 @@
#include "OOXTableRowReader.h"
#include "OOXTableReader.h"
#include "OOXParagraphReader.h"
#include "OOXTextItemReader.h"
#include "../../../OOXML/DocxFormat/Logic/Table.h"
#include "../../../OOXML/DocxFormat/Logic/Paragraph.h"
@ -305,26 +306,8 @@ bool OOXTableCellReader::Parse( ReaderParameter oParam ,RtfTableCell& oOutputCel
{
switch((*it)->getType())
{
case OOX::et_w_p:
{
OOX::Logic::CParagraph * pParagraph = dynamic_cast<OOX::Logic::CParagraph*>(*it);
RtfParagraphPtr oNewParagraph( new RtfParagraph() );
//применяем к новому параграфу default property
oNewParagraph->m_oProperty = oParam.oRtf->m_oDefaultParagraphProp;
oNewParagraph->m_oProperty.m_oCharProperty = oParam.oRtf->m_oDefaultCharProp;
OOXParagraphReader oParagraphReader(pParagraph);
oParagraphReader.Parse( oParam, (*oNewParagraph), oConditionalTableStyle );
//ставим стиль таблицы
if( NULL != oParam.poTableStyle )
oNewParagraph->m_oProperty.m_nTableStyle = oParam.poTableStyle->m_nID;
oNewParagraph->m_oProperty.m_nItap = oParam.oReader->m_nCurItap;
oNewParagraph->m_oProperty.m_bInTable = 1;
oOutputCell.AddItem( oNewParagraph );
}break;
case OOX::et_w_tcPr:
break;
case OOX::et_w_tbl:
{
OOX::Logic::CTbl * pTbl = dynamic_cast<OOX::Logic::CTbl*>(*it);
@ -336,13 +319,23 @@ bool OOXTableCellReader::Parse( ReaderParameter oParam ,RtfTableCell& oOutputCel
oOutputCell.AddItem( oNewTabel );
oParam.oReader->m_nCurItap -- ;
}break;
default:
default:
{
//todooo - универсальный риадер
//OOXElementReader oElementReader((*it));
//ITextItemPtr *rtfElement = oElementReader.Parse( oParam);
//oOutputCell.AddItem( rtfElement );
}break;
oParam.oReader->m_bInTable = true;
OOXTextItemReader oElementReader;
if (oElementReader.Parse(*it, oParam))
{
if (oElementReader.m_oTextItems)
{
for (auto elm : oElementReader.m_oTextItems->m_aArray)
{
oOutputCell.AddItem(elm);
}
}
}
oParam.oReader->m_bInTable = false;
}break;
}
}
return true;

View File

@ -73,15 +73,28 @@ bool OOXTextItemReader::Parse(OOX::WritingElement* ooxElement, ReaderParameter o
OOXParagraphReader oParagraphReader(pParagraph);
RtfParagraphPtr oNewParagraph(new RtfParagraph());
//применяем к новому параграфу default property
//применяем к новому параграфу default property
oNewParagraph->m_oProperty = oParam.oRtf->m_oDefaultParagraphProp;
oNewParagraph->m_oProperty.m_oCharProperty = oParam.oRtf->m_oDefaultCharProp;
oNewParagraph->m_oProperty.m_nItap = 0;
if (oParam.oReader->m_bInTable)
{
if (NULL != oParam.poTableStyle)
oNewParagraph->m_oProperty.m_nTableStyle = oParam.poTableStyle->m_nID;
oNewParagraph->m_oProperty.m_bInTable = 1;
oNewParagraph->m_oProperty.m_nItap = oParam.oReader->m_nCurItap;
}
else
{
oNewParagraph->m_oProperty.m_nItap = 0;
}
if (true == oParagraphReader.Parse(oParam, (*oNewParagraph), CcnfStyle()))
{
m_oTextItems->AddItem(oNewParagraph);
}
}break;
case OOX::et_w_tbl:
{