This commit is contained in:
Elena.Subbotina
2023-02-02 12:32:50 +03:00
parent 5d720e75f5
commit 47e0ccbe29
12 changed files with 184 additions and 118 deletions

View File

@ -325,7 +325,7 @@ namespace OOX
else if (L"m:oMathPara" == sName )
pItem = new Logic::COMathPara( document );
else if (L"p" == sName )
pItem = new Logic::CParagraph( document );
pItem = new Logic::CParagraph( document, this );
else if (L"permEnd" == sName )
pItem = new Logic::CPermEnd( document );
else if (L"permStart" == sName )

View File

@ -161,7 +161,7 @@ namespace OOX
else if ( _T("m:oMathPara") == sName )
pItem = new Logic::COMathPara( document );
else if ( _T("w:p") == sName )
pItem = new Logic::CParagraph( document );
pItem = new Logic::CParagraph( document, this );
else if ( _T("w:permEnd") == sName )
pItem = new Logic::CPermEnd( document );
else if ( _T("w:permStart") == sName )

View File

@ -221,6 +221,8 @@ namespace OOX
if (oReader.IsEmptyNode())
return;
OOX::Document* document = WritingElement::m_pMainDocument;
int nParentDepth = oReader.GetDepth();
while (oReader.ReadNextSiblingNode(nParentDepth))
{
@ -228,66 +230,69 @@ namespace OOX
WritingElement *pItem = NULL;
if (L"w:bookmarkEnd" == sName)
pItem = new CBookmarkEnd(oReader);
pItem = new CBookmarkEnd(document);
else if (L"w:bookmarkStart" == sName)
pItem = new CBookmarkStart(oReader);
pItem = new CBookmarkStart(document);
else if (L"w:commentRangeEnd" == sName)
pItem = new CCommentRangeEnd(oReader);
pItem = new CCommentRangeEnd(document);
else if (L"w:commentRangeStart" == sName)
pItem = new CCommentRangeStart(oReader);
pItem = new CCommentRangeStart(document);
//else if ( L"w:customXml" == sName )
// pItem = new CCustomXml( oReader );
else if (L"w:customXmlDelRangeEnd" == sName)
pItem = new CCustomXmlDelRangeEnd(oReader);
pItem = new CCustomXmlDelRangeEnd(document);
else if (L"w:customXmlDelRangeStart" == sName)
pItem = new CCustomXmlDelRangeStart(oReader);
pItem = new CCustomXmlDelRangeStart(document);
else if (L"w:customXmlInsRangeEnd" == sName)
pItem = new CCustomXmlInsRangeEnd(oReader);
pItem = new CCustomXmlInsRangeEnd(document);
else if (L"w:customXmlInsRangeStart" == sName)
pItem = new CCustomXmlInsRangeStart(oReader);
pItem = new CCustomXmlInsRangeStart(document);
else if (L"w:customXmlMoveFromRangeEnd" == sName)
pItem = new CCustomXmlMoveFromRangeEnd(oReader);
pItem = new CCustomXmlMoveFromRangeEnd(document);
else if (L"w:customXmlMoveFromRangeStart" == sName)
pItem = new CCustomXmlMoveFromRangeStart(oReader);
pItem = new CCustomXmlMoveFromRangeStart(document);
else if (L"w:customXmlMoveToRangeEnd" == sName)
pItem = new CCustomXmlMoveToRangeEnd(oReader);
pItem = new CCustomXmlMoveToRangeEnd(document);
else if (L"w:customXmlMoveToRangeStart" == sName)
pItem = new CCustomXmlMoveToRangeStart(oReader);
pItem = new CCustomXmlMoveToRangeStart(document);
else if (L"w:del" == sName)
pItem = new CDel(oReader);
pItem = new CDel(document);
else if (L"w:ins" == sName)
pItem = new CIns(oReader);
pItem = new CIns(document);
else if (L"w:moveFrom" == sName)
pItem = new CMoveFrom(oReader);
pItem = new CMoveFrom(document);
else if (L"w:moveFromRangeEnd" == sName)
pItem = new CMoveFromRangeEnd(oReader);
pItem = new CMoveFromRangeEnd(document);
else if (L"w:moveFromRangeStart" == sName)
pItem = new CMoveFromRangeStart(oReader);
pItem = new CMoveFromRangeStart(document);
else if (L"w:moveTo" == sName)
pItem = new CMoveTo(oReader);
pItem = new CMoveTo(document);
else if (L"w:moveToRangeEnd" == sName)
pItem = new CMoveToRangeEnd(oReader);
pItem = new CMoveToRangeEnd(document);
else if (L"w:moveToRangeStart" == sName)
pItem = new CMoveToRangeStart(oReader);
pItem = new CMoveToRangeStart(document);
else if (L"m:oMath" == sName)
pItem = new COMath(oReader);
pItem = new COMath(document);
else if (L"m:oMathPara" == sName)
pItem = new COMathPara(oReader);
pItem = new COMathPara(document);
else if (L"w:p" == sName)
pItem = new CParagraph(oReader);
pItem = new CParagraph(document, this);
else if (L"w:permEnd" == sName)
pItem = new CPermEnd(oReader);
pItem = new CPermEnd(document);
else if (L"w:permStart" == sName)
pItem = new CPermStart(oReader);
pItem = new CPermStart(document);
else if (L"w:proofErr" == sName)
pItem = new CProofErr(oReader);
pItem = new CProofErr(document);
else if (L"w:sdt" == sName)
pItem = new CSdt(oReader);
pItem = new CSdt(document);
else if (L"w:tbl" == sName)
pItem = new CTbl(oReader);
pItem = new CTbl(document);
if (pItem)
{
m_arrItems.push_back(pItem);
pItem->fromXML(oReader);
}
}
}
std::wstring CDocPartBody::toXML() const

View File

@ -192,6 +192,8 @@ namespace OOX
if ( oReader.IsEmptyNode() )
return;
OOX::Document* document = WritingElement::m_pMainDocument;
int nParentDepth = oReader.GetDepth();
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
@ -199,78 +201,81 @@ namespace OOX
WritingElement *pItem = NULL;
if ( _T("w:bdo") == sName )
pItem = new CBdo( oReader );
pItem = new CBdo(document);
else if ( _T("w:bookmarkEnd") == sName )
pItem = new CBookmarkEnd( oReader );
pItem = new CBookmarkEnd(document);
else if ( _T("w:bookmarkStart") == sName )
pItem = new CBookmarkStart( oReader );
pItem = new CBookmarkStart(document);
else if ( _T("w:commentRangeEnd") == sName )
pItem = new CCommentRangeEnd( oReader );
pItem = new CCommentRangeEnd(document);
else if ( _T("w:commentRangeStart") == sName )
pItem = new CCommentRangeStart( oReader );
pItem = new CCommentRangeStart(document);
//else if ( _T("w:customXml") == sName )
// pItem = new CCustomXml( oReader );
else if ( _T("w:customXmlDelRangeEnd") == sName )
pItem = new CCustomXmlDelRangeEnd( oReader );
pItem = new CCustomXmlDelRangeEnd(document);
else if ( _T("w:customXmlDelRangeStart") == sName )
pItem = new CCustomXmlDelRangeStart( oReader );
pItem = new CCustomXmlDelRangeStart(document);
else if ( _T("w:customXmlInsRangeEnd") == sName )
pItem = new CCustomXmlInsRangeEnd( oReader );
pItem = new CCustomXmlInsRangeEnd(document);
else if ( _T("w:customXmlInsRangeStart") == sName )
pItem = new CCustomXmlInsRangeStart( oReader );
pItem = new CCustomXmlInsRangeStart(document);
else if ( _T("w:customXmlMoveFromRangeEnd") == sName )
pItem = new CCustomXmlMoveFromRangeEnd( oReader );
pItem = new CCustomXmlMoveFromRangeEnd(document);
else if ( _T("w:customXmlMoveFromRangeStart") == sName )
pItem = new CCustomXmlMoveFromRangeStart( oReader );
pItem = new CCustomXmlMoveFromRangeStart(document);
else if ( _T("w:customXmlMoveToRangeEnd") == sName )
pItem = new CCustomXmlMoveToRangeEnd( oReader );
pItem = new CCustomXmlMoveToRangeEnd(document);
else if ( _T("w:customXmlMoveToRangeStart") == sName )
pItem = new CCustomXmlMoveToRangeStart( oReader );
pItem = new CCustomXmlMoveToRangeStart(document);
else if ( _T("w:del") == sName )
pItem = new CDel( oReader );
pItem = new CDel(document);
else if ( _T("w:dir") == sName )
pItem = new CDir( oReader );
pItem = new CDir(document);
else if ( _T("w:fldSimple") == sName )
pItem = new CFldSimple( oReader );
pItem = new CFldSimple(document);
else if ( _T("w:hyperlink") == sName )
pItem = new CHyperlink( oReader );
pItem = new CHyperlink(document);
else if ( _T("w:ins") == sName )
pItem = new CIns( oReader );
pItem = new CIns(document);
else if ( _T("w:moveFrom") == sName )
pItem = new CMoveFrom( oReader );
pItem = new CMoveFrom(document);
else if ( _T("w:moveFromRangeEnd") == sName )
pItem = new CMoveFromRangeEnd( oReader );
pItem = new CMoveFromRangeEnd(document);
else if ( _T("w:moveFromRangeStart") == sName )
pItem = new CMoveFromRangeStart( oReader );
pItem = new CMoveFromRangeStart(document);
else if ( _T("w:moveTo") == sName )
pItem = new CMoveTo( oReader );
pItem = new CMoveTo(document);
else if ( _T("w:moveToRangeEnd") == sName )
pItem = new CMoveToRangeEnd( oReader );
pItem = new CMoveToRangeEnd(document);
else if ( _T("w:moveToRangeStart") == sName )
pItem = new CMoveToRangeStart( oReader );
pItem = new CMoveToRangeStart(document);
else if ( _T("m:oMath") == sName )
pItem = new COMath( oReader );
pItem = new COMath(document);
else if ( _T("m:oMathPara") == sName )
pItem = new COMathPara( oReader );
pItem = new COMathPara(document);
else if ( _T("w:permEnd") == sName )
pItem = new CPermEnd( oReader );
pItem = new CPermEnd(document);
else if ( _T("w:permStart") == sName )
pItem = new CPermStart( oReader );
pItem = new CPermStart(document);
else if ( _T("w:proofErr") == sName )
pItem = new CProofErr( oReader );
pItem = new CProofErr(document);
else if ( _T("w:r") == sName )
pItem = new CRun( oReader );
pItem = new CRun(document, this);
else if ( _T("w:sdt") == sName )
pItem = new CSdt( oReader );
pItem = new CSdt(document);
else if ( _T("w:smartTag") == sName )
pItem = new CSmartTag( oReader );
pItem = new CSmartTag(document);
//else if ( _T("w:subDoc") == sName )
// pItem = new CSubDoc( oReader );
else if ( _T("w:ffData") == sName )
m_oFFData = new CFFData( oReader );
m_oFFData = new CFFData();
if (pItem)
{
m_arrItems.push_back(pItem);
pItem->fromXML(oReader);
}
}
}
std::wstring CFldSimple::toXML() const

View File

@ -295,7 +295,7 @@ namespace OOX
else if ( _T("w:proofErr") == sName )
pItem = new CProofErr( document );
else if ( _T("w:r") == sName )
pItem = new CRun( document );
pItem = new CRun( document, this );
else if ( _T("w:sdt") == sName )
pItem = new CSdt( document );
else if ( _T("w:smartTag") == sName )

View File

@ -32,6 +32,7 @@
#include "../DocxFlat.h"
#include "../Comments.h"
#include "Table.h"
#include "Paragraph.h"
#include "Annotations.h"
#include "Run.h"
@ -62,9 +63,10 @@ namespace OOX
// CParagraph 17.3.1.22 (Part 1)
//--------------------------------------------------------------------------------
CParagraph::CParagraph(OOX::Document *pMain) : WritingElementWithChilds<>(pMain)
CParagraph::CParagraph(OOX::Document *pMain, WritingElement *parent) : WritingElementWithChilds<>(pMain)
{
m_oParagraphProperty = NULL;
m_oParent = parent;
}
CParagraph::CParagraph(XmlUtils::CXmlNode &oNode) : WritingElementWithChilds<>(NULL)
{
@ -77,6 +79,7 @@ namespace OOX
CParagraph::~CParagraph()
{
m_oParagraphProperty = NULL;
m_oParent = NULL;
}
const CParagraph& CParagraph::operator =(const XmlUtils::CXmlNode& oNode)
{
@ -349,7 +352,7 @@ namespace OOX
else if (L"proofErr" == sName )
pItem = new CProofErr( document );
else if (L"r" == sName )
pItem = new CRun( document );
pItem = new CRun( document, this );
else if (L"sdt" == sName )
pItem = new CSdt( document );
else if (L"smartTag" == sName )
@ -371,6 +374,20 @@ namespace OOX
int nWxSubSectDepth = oReader.GetDepth();
fromXML(nWxSubSectDepth, oReader);
}
else if (L"tbl" == sName)
{
WritingElementWithChilds *parent = dynamic_cast<WritingElementWithChilds*>(m_oParent);
if (parent)
{
WritingElement *pItemUpper = new CTbl(document);
if (pItemUpper)
{
pItemUpper->fromXML(oReader);
parent->m_arrItems.push_back(pItemUpper);
}
}
}
if ( pItem )
{
m_arrItems.push_back( pItem );

View File

@ -46,7 +46,7 @@ namespace OOX
class CParagraph : public WritingElementWithChilds<>
{
public:
CParagraph(OOX::Document *pMain = NULL);
CParagraph(OOX::Document *pMain = NULL, WritingElement *parent = NULL);
CParagraph(XmlUtils::CXmlNode &oNode);
CParagraph(XmlUtils::CXmlLiteReader& oReader);
virtual ~CParagraph();
@ -77,6 +77,7 @@ namespace OOX
CParagraphProperty *m_oParagraphProperty; // копия того что в m_arrItems... - для быстрого доступа/анализа
// по идее нужно сделать как в Drawing::Paragraph - то есть единственные подобъекты вынести отдельно
WritingElement *m_oParent = NULL;
};
} // namespace Logic
} // namespace OOX

View File

@ -41,6 +41,8 @@
#include "../Drawing/Drawing.h"
#include "../Comments.h"
#include "Table.h"
#include "Paragraph.h"
#include "AlternateContent.h"
#include "RunProperty.h"
#include "RunContent.h"
@ -55,9 +57,10 @@ namespace OOX
{
namespace Logic
{
CRun::CRun(OOX::Document *pMain) : WritingElementWithChilds<>(pMain)
CRun::CRun(OOX::Document *pMain, WritingElement *parent) : WritingElementWithChilds<>(pMain)
{
m_oRunProperty = NULL;
m_oParent = parent;
}
CRun::CRun(XmlUtils::CXmlNode &oNode) : WritingElementWithChilds<>(NULL)
{
@ -287,6 +290,22 @@ namespace OOX
}
pItem = pEndRef;
}
else if (L"tbl" == sName)
{//ERP
CParagraph *paragraph = dynamic_cast<CParagraph*>(m_oParent);
WritingElementWithChilds *parent = paragraph ? dynamic_cast<WritingElementWithChilds*>(paragraph->m_oParent) : NULL;
if (!parent) parent = dynamic_cast<WritingElementWithChilds*>(m_oParent);
if (parent)
{
WritingElement *pItemUpper = new CTbl(document);
if (pItemUpper)
{
pItemUpper->fromXML(oReader);
parent->m_arrItems.push_back(pItemUpper);
}
}
}
else if ( L"endnoteRef" == sName )
pItem = new CEndnoteRef( document );
else if ( L"endnoteReference" == sName )

View File

@ -46,7 +46,7 @@ namespace OOX
class CRun : public WritingElementWithChilds<>
{
public:
CRun(OOX::Document *pMain = NULL);
CRun(OOX::Document *pMain = NULL, WritingElement *parent = NULL);
CRun(XmlUtils::CXmlNode &oNode);
CRun(XmlUtils::CXmlLiteReader& oReader);
virtual ~CRun();
@ -75,6 +75,7 @@ namespace OOX
nullable<SimpleTypes::CLongHexNumber> m_oRsidRPr;
OOX::Logic::CRunProperty *m_oRunProperty; // копия того что в m_arrItems... - для быстрого доступа/анализа
// по идее нужно сделать как в Drawing::Run - то есть единственные подобъекты вынести отдельно
WritingElement *m_oParent = NULL;
};
} // namespace Logic
} // namespace OOX

View File

@ -529,90 +529,96 @@ namespace OOX
return;
int nParentDepth = oReader.GetDepth();
OOX::Document* document = WritingElement::m_pMainDocument;
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring sName = oReader.GetName();
WritingElement *pItem = NULL;
if ( L"w:bdo" == sName )
pItem = new CBdo( oReader );
pItem = new CBdo(document);
else if ( L"w:bookmarkEnd" == sName )
pItem = new CBookmarkEnd( oReader );
pItem = new CBookmarkEnd(document);
else if ( L"w:bookmarkStart" == sName )
pItem = new CBookmarkStart( oReader );
pItem = new CBookmarkStart(document);
else if ( L"w:commentRangeEnd" == sName )
pItem = new CCommentRangeEnd( oReader );
pItem = new CCommentRangeEnd(document);
else if ( L"w:commentRangeStart" == sName )
pItem = new CCommentRangeStart( oReader );
pItem = new CCommentRangeStart(document);
//else if ( L"w:customXml" == sName )
// pItem = new CCustomXml( oReader );
else if ( L"w:customXmlDelRangeEnd" == sName )
pItem = new CCustomXmlDelRangeEnd( oReader );
pItem = new CCustomXmlDelRangeEnd(document);
else if ( L"w:customXmlDelRangeStart" == sName )
pItem = new CCustomXmlDelRangeStart( oReader );
pItem = new CCustomXmlDelRangeStart(document);
else if ( L"w:customXmlInsRangeEnd" == sName )
pItem = new CCustomXmlInsRangeEnd( oReader );
pItem = new CCustomXmlInsRangeEnd(document);
else if ( L"w:customXmlInsRangeStart" == sName )
pItem = new CCustomXmlInsRangeStart( oReader );
pItem = new CCustomXmlInsRangeStart(document);
else if ( L"w:customXmlMoveFromRangeEnd" == sName )
pItem = new CCustomXmlMoveFromRangeEnd( oReader );
pItem = new CCustomXmlMoveFromRangeEnd(document);
else if ( L"w:customXmlMoveFromRangeStart" == sName )
pItem = new CCustomXmlMoveFromRangeStart( oReader );
pItem = new CCustomXmlMoveFromRangeStart(document);
else if ( L"w:customXmlMoveToRangeEnd" == sName )
pItem = new CCustomXmlMoveToRangeEnd( oReader );
pItem = new CCustomXmlMoveToRangeEnd(document);
else if ( L"w:customXmlMoveToRangeStart" == sName )
pItem = new CCustomXmlMoveToRangeStart( oReader );
pItem = new CCustomXmlMoveToRangeStart(document);
else if ( L"w:del" == sName )
pItem = new CDel( oReader );
pItem = new CDel(document);
else if ( L"w:dir" == sName )
pItem = new CDir( oReader );
pItem = new CDir(document);
else if ( L"w:fldSimple" == sName )
pItem = new CFldSimple( oReader );
pItem = new CFldSimple(document);
else if ( L"w:hyperlink" == sName )
pItem = new CHyperlink( oReader );
pItem = new CHyperlink(document);
else if ( L"w:ins" == sName )
pItem = new CIns( oReader );
pItem = new CIns(document);
else if ( L"w:moveFrom" == sName )
pItem = new CMoveFrom( oReader );
pItem = new CMoveFrom(document);
else if ( L"w:moveFromRangeEnd" == sName )
pItem = new CMoveFromRangeEnd( oReader );
pItem = new CMoveFromRangeEnd(document);
else if ( L"w:moveFromRangeStart" == sName )
pItem = new CMoveFromRangeStart( oReader );
pItem = new CMoveFromRangeStart(document);
else if ( L"w:moveTo" == sName )
pItem = new CMoveTo( oReader );
pItem = new CMoveTo(document);
else if ( L"w:moveToRangeEnd" == sName )
pItem = new CMoveToRangeEnd( oReader );
pItem = new CMoveToRangeEnd(document);
else if ( L"w:moveToRangeStart" == sName )
pItem = new CMoveToRangeStart( oReader );
pItem = new CMoveToRangeStart(document);
else if ( L"m:oMath" == sName )
pItem = new COMath( oReader );
pItem = new COMath(document);
else if ( L"m:oMathPara" == sName )
pItem = new COMathPara( oReader );
pItem = new COMathPara(document);
else if ( L"w:p" == sName )
pItem = new CParagraph( oReader );
pItem = new CParagraph(document, this);
else if ( L"w:permEnd" == sName )
pItem = new CPermEnd( oReader );
pItem = new CPermEnd(document);
else if ( L"w:permStart" == sName )
pItem = new CPermStart( oReader );
pItem = new CPermStart(document);
else if ( L"w:proofErr" == sName )
pItem = new CProofErr( oReader );
pItem = new CProofErr(document);
else if ( L"w:r" == sName )
pItem = new CRun( oReader );
pItem = new CRun(document, this);
else if ( L"w:sdt" == sName )
pItem = new CSdt( oReader );
pItem = new CSdt(document);
else if ( L"w:smartTag" == sName )
pItem = new CSmartTag( oReader );
pItem = new CSmartTag(document);
//else if ( L"w:subDoc" == sName )
// pItem = new CSubDoc( oReader );
// pItem = new CSubDoc( document );
else if ( L"w:tbl" == sName )
pItem = new CTbl( oReader );
pItem = new CTbl(document);
else if ( L"w:tc" == sName )
pItem = new CTc( oReader );
pItem = new CTc(document);
else if ( L"w:tr" == sName )
pItem = new CTr( oReader );
pItem = new CTr(document);
if (pItem)
{
m_arrItems.push_back(pItem);
pItem->fromXML(oReader);
}
}
}
std::wstring CSdtContent::toXML() const
@ -1768,15 +1774,27 @@ namespace OOX
return;
int nParentDepth = oReader.GetDepth();
OOX::Document* document = WritingElement::m_pMainDocument;
while( oReader.ReadNextSiblingNode( nParentDepth ) )
{
std::wstring sName = oReader.GetName();
if (L"w:sdtContent" == sName)
m_oSdtContent = oReader;
{
m_oSdtContent = new CSdtContent(document);
m_oSdtContent->fromXML(oReader);
}
else if (L"w:sdtEndPr" == sName)
m_oSdtEndPr = oReader;
{
m_oSdtEndPr = new CSdtEndPr(document);
m_oSdtEndPr->fromXML(oReader);
}
else if (L"w:sdtPr" == sName)
m_oSdtPr = oReader;
{
m_oSdtPr = new CSdtPr(document);
m_oSdtPr->fromXML(oReader);
}
}
}
std::wstring CSdt::toXML() const

View File

@ -146,7 +146,7 @@ namespace OOX
else if (L"m:oMathPara" == sName )
pItem = new COMathPara( document );
else if (L"w:p" == sName )
pItem = new CParagraph( document );
pItem = new CParagraph( document, this );
else if (L"w:permEnd" == sName )
pItem = new CPermEnd( document );
else if (L"w:permStart" == sName )

View File

@ -1105,7 +1105,7 @@ namespace OOX
else if ( _T("m:oMathPara") == sName )
pItem = new COMathPara( document );
else if ( _T("w:p") == sName )
pItem = new CParagraph( document );
pItem = new CParagraph( document, this );
else if ( _T("w:permEnd") == sName )
pItem = new CPermEnd( document );
else if ( _T("w:permStart") == sName )