mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-02-10 18:05:41 +08:00
fix bug #71047
This commit is contained in:
@ -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);
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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:
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user