mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
fix bug #71047
This commit is contained in:
@ -236,6 +236,20 @@ bool OOXMathReader::ParseElement(ReaderParameter oParam , OOX::WritingElement *
|
|||||||
rtfMath->AddItem(oSubMath);
|
rtfMath->AddItem(oSubMath);
|
||||||
}
|
}
|
||||||
}break;
|
}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:
|
case OOX::et_m_box:
|
||||||
{
|
{
|
||||||
OOX::Logic::CBox *ooxSubMath = dynamic_cast<OOX::Logic::CBox *>(ooxMath);
|
OOX::Logic::CBox *ooxSubMath = dynamic_cast<OOX::Logic::CBox *>(ooxMath);
|
||||||
@ -250,6 +264,25 @@ bool OOXMathReader::ParseElement(ReaderParameter oParam , OOX::WritingElement *
|
|||||||
rtfMath->AddItem(oSubMath);
|
rtfMath->AddItem(oSubMath);
|
||||||
}
|
}
|
||||||
}break;
|
}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:
|
case OOX::et_m_boxPr:
|
||||||
{
|
{
|
||||||
OOX::Logic::CBoxPr *ooxSubMath = dynamic_cast<OOX::Logic::CBoxPr *>(ooxMath);
|
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 = m_oCharProperty;
|
||||||
oMathReader.m_oCharProperty.Merge(oOutputParagraph.m_oProperty.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 );
|
oOutputParagraph.AddItem( oNewMath );
|
||||||
}break;
|
}break;
|
||||||
case OOX::et_m_oMathPara:
|
case OOX::et_m_oMathPara:
|
||||||
@ -482,17 +482,17 @@ bool OOXParagraphReader::Parse3( ReaderParameter oParam , RtfParagraph& oOutputP
|
|||||||
oMathReader.m_oCharProperty = m_oCharProperty;
|
oMathReader.m_oCharProperty = m_oCharProperty;
|
||||||
oMathReader.m_oCharProperty.Merge(oOutputParagraph.m_oProperty.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 );
|
oOutputParagraph.AddItem( oNewMath );
|
||||||
}break;
|
}break;
|
||||||
case OOX::et_w_sdt:
|
case OOX::et_w_sdt:
|
||||||
{
|
{
|
||||||
OOX::Logic::CSdt * pSdt = dynamic_cast<OOX::Logic::CSdt*>(m_ooxElement);
|
OOX::Logic::CSdt * pSdt = dynamic_cast<OOX::Logic::CSdt*>(m_ooxElement);
|
||||||
if( pSdt->m_oSdtEndPr.IsInit() )
|
if (pSdt->m_oSdtEndPr.IsInit() )
|
||||||
{
|
{
|
||||||
//todo
|
//todo
|
||||||
}
|
}
|
||||||
if(pSdt->m_oSdtContent.IsInit())
|
if (pSdt->m_oSdtContent.IsInit())
|
||||||
{
|
{
|
||||||
if (pSdt->m_oSdtContent->m_arrItems.size() > 0)
|
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);
|
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();
|
int nId = pCommentStart->m_oId->GetValue();
|
||||||
std::map<int, OOXReader::_comment>::iterator pFind = oParam.oReader->m_mapComments.find( nId );
|
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) );
|
RtfAnnotElemPtr oNewAnnotElem ( new RtfAnnotElem(1) );
|
||||||
oNewAnnotElem->m_sValue = std::to_wstring(0x7700000 + nId);
|
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 );
|
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) );
|
RtfAnnotElemPtr oNewAnnotElem ( new RtfAnnotElem(2) );
|
||||||
oNewAnnotElem->m_sValue = pFindRef->second.ref;
|
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 != 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];
|
OOX::CComment* oox_comment = oParam.oDocx->m_oMain.comments->m_arrComments[pFindComment->second];
|
||||||
if (oox_comment)
|
if (oox_comment)
|
||||||
@ -688,28 +688,28 @@ bool OOXRunReader::Parse( ReaderParameter oParam , RtfParagraph& oOutputParagrap
|
|||||||
{
|
{
|
||||||
switch(ooxFldChar->m_oFldCharType->GetValue())
|
switch(ooxFldChar->m_oFldCharType->GetValue())
|
||||||
{
|
{
|
||||||
case SimpleTypes::fldchartypeBegin:
|
case SimpleTypes::fldchartypeBegin:
|
||||||
{
|
{
|
||||||
OOXFieldBeginPtr oNewField ( new OOXFieldBegin() );
|
OOXFieldBeginPtr oNewField(new OOXFieldBegin());
|
||||||
if (ooxFldChar->m_oFldLock.IsInit())
|
if (ooxFldChar->m_oFldLock.IsInit())
|
||||||
oNewField->m_bLock = ooxFldChar->m_oFldLock->ToBool();
|
oNewField->m_bLock = ooxFldChar->m_oFldLock->ToBool();
|
||||||
if (ooxFldChar->m_oDirty.IsInit())
|
if (ooxFldChar->m_oDirty.IsInit())
|
||||||
oNewField->m_bDirty = ooxFldChar->m_oDirty->ToBool();
|
oNewField->m_bDirty = ooxFldChar->m_oDirty->ToBool();
|
||||||
|
|
||||||
oNewField->m_oCharProperty = oNewProperty;
|
oNewField->m_oCharProperty = oNewProperty;
|
||||||
oOutputParagraph.AddItem( oNewField );
|
oOutputParagraph.AddItem(oNewField);
|
||||||
}break;
|
}break;
|
||||||
case SimpleTypes::fldchartypeEnd:
|
case SimpleTypes::fldchartypeEnd:
|
||||||
{
|
{
|
||||||
OOXFieldEndPtr oNewField ( new OOXFieldEnd() );
|
OOXFieldEndPtr oNewField(new OOXFieldEnd());
|
||||||
oOutputParagraph.AddItem( oNewField );
|
oOutputParagraph.AddItem(oNewField);
|
||||||
}break;
|
}break;
|
||||||
case SimpleTypes::fldchartypeSeparate:
|
case SimpleTypes::fldchartypeSeparate:
|
||||||
{
|
{
|
||||||
OOXFieldSeparatePtr oNewField ( new OOXFieldSeparate() );
|
OOXFieldSeparatePtr oNewField(new OOXFieldSeparate());
|
||||||
oOutputParagraph.AddItem( oNewField );
|
oOutputParagraph.AddItem(oNewField);
|
||||||
}break;
|
}break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
@ -735,7 +735,7 @@ bool OOXRunReader::Parse( ReaderParameter oParam , RtfParagraph& oOutputParagrap
|
|||||||
int nID = ooxFootnoteReference->m_oId->GetValue();
|
int nID = ooxFootnoteReference->m_oId->GetValue();
|
||||||
std::map<int, TextItemContainerPtr>::iterator oPair = oParam.oReader->m_mapFootnotes.find( nID );
|
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() );
|
RtfFootnotePtr oNewFootnote ( new RtfFootnote() );
|
||||||
oNewFootnote->m_oCharProp = oNewProperty;
|
oNewFootnote->m_oCharProp = oNewProperty;
|
||||||
@ -753,7 +753,7 @@ bool OOXRunReader::Parse( ReaderParameter oParam , RtfParagraph& oOutputParagrap
|
|||||||
int nID = ooxEndnoteReference->m_oId->GetValue();
|
int nID = ooxEndnoteReference->m_oId->GetValue();
|
||||||
std::map<int, TextItemContainerPtr>::iterator oPair = oParam.oReader->m_mapEndnotes.find ( nID );
|
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() );
|
RtfFootnotePtr oNewEndnote ( new RtfFootnote() );
|
||||||
oNewEndnote->m_oCharProp = oNewProperty;
|
oNewEndnote->m_oCharProp = oNewProperty;
|
||||||
|
|||||||
@ -63,7 +63,8 @@ public:
|
|||||||
RtfConvertationManager* m_convertationManager;
|
RtfConvertationManager* m_convertationManager;
|
||||||
std::wstring m_sPath;
|
std::wstring m_sPath;
|
||||||
|
|
||||||
int m_nCurItap; //для определение вложенности таблицы
|
int m_nCurItap = 0; //для определение вложенности таблицы
|
||||||
|
bool m_bInTable = false;
|
||||||
|
|
||||||
int m_nCurOleChartId;
|
int m_nCurOleChartId;
|
||||||
int m_nCurFittextId;
|
int m_nCurFittextId;
|
||||||
|
|||||||
@ -33,6 +33,7 @@
|
|||||||
#include "OOXTableRowReader.h"
|
#include "OOXTableRowReader.h"
|
||||||
#include "OOXTableReader.h"
|
#include "OOXTableReader.h"
|
||||||
#include "OOXParagraphReader.h"
|
#include "OOXParagraphReader.h"
|
||||||
|
#include "OOXTextItemReader.h"
|
||||||
|
|
||||||
#include "../../../OOXML/DocxFormat/Logic/Table.h"
|
#include "../../../OOXML/DocxFormat/Logic/Table.h"
|
||||||
#include "../../../OOXML/DocxFormat/Logic/Paragraph.h"
|
#include "../../../OOXML/DocxFormat/Logic/Paragraph.h"
|
||||||
@ -305,26 +306,8 @@ bool OOXTableCellReader::Parse( ReaderParameter oParam ,RtfTableCell& oOutputCel
|
|||||||
{
|
{
|
||||||
switch((*it)->getType())
|
switch((*it)->getType())
|
||||||
{
|
{
|
||||||
case OOX::et_w_p:
|
case OOX::et_w_tcPr:
|
||||||
{
|
break;
|
||||||
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_tbl:
|
case OOX::et_w_tbl:
|
||||||
{
|
{
|
||||||
OOX::Logic::CTbl * pTbl = dynamic_cast<OOX::Logic::CTbl*>(*it);
|
OOX::Logic::CTbl * pTbl = dynamic_cast<OOX::Logic::CTbl*>(*it);
|
||||||
@ -336,13 +319,23 @@ bool OOXTableCellReader::Parse( ReaderParameter oParam ,RtfTableCell& oOutputCel
|
|||||||
oOutputCell.AddItem( oNewTabel );
|
oOutputCell.AddItem( oNewTabel );
|
||||||
oParam.oReader->m_nCurItap -- ;
|
oParam.oReader->m_nCurItap -- ;
|
||||||
}break;
|
}break;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
//todooo - универсальный риадер
|
oParam.oReader->m_bInTable = true;
|
||||||
//OOXElementReader oElementReader((*it));
|
|
||||||
//ITextItemPtr *rtfElement = oElementReader.Parse( oParam);
|
OOXTextItemReader oElementReader;
|
||||||
//oOutputCell.AddItem( rtfElement );
|
if (oElementReader.Parse(*it, oParam))
|
||||||
}break;
|
{
|
||||||
|
if (oElementReader.m_oTextItems)
|
||||||
|
{
|
||||||
|
for (auto elm : oElementReader.m_oTextItems->m_aArray)
|
||||||
|
{
|
||||||
|
oOutputCell.AddItem(elm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
oParam.oReader->m_bInTable = false;
|
||||||
|
}break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -73,15 +73,28 @@ bool OOXTextItemReader::Parse(OOX::WritingElement* ooxElement, ReaderParameter o
|
|||||||
|
|
||||||
OOXParagraphReader oParagraphReader(pParagraph);
|
OOXParagraphReader oParagraphReader(pParagraph);
|
||||||
RtfParagraphPtr oNewParagraph(new RtfParagraph());
|
RtfParagraphPtr oNewParagraph(new RtfParagraph());
|
||||||
//применяем к новому параграфу default property
|
//применяем к новому параграфу default property
|
||||||
oNewParagraph->m_oProperty = oParam.oRtf->m_oDefaultParagraphProp;
|
oNewParagraph->m_oProperty = oParam.oRtf->m_oDefaultParagraphProp;
|
||||||
oNewParagraph->m_oProperty.m_oCharProperty = oParam.oRtf->m_oDefaultCharProp;
|
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()))
|
if (true == oParagraphReader.Parse(oParam, (*oNewParagraph), CcnfStyle()))
|
||||||
{
|
{
|
||||||
m_oTextItems->AddItem(oNewParagraph);
|
m_oTextItems->AddItem(oNewParagraph);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}break;
|
}break;
|
||||||
case OOX::et_w_tbl:
|
case OOX::et_w_tbl:
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user