mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-07-15 04:33:31 +08:00
92 lines
3.3 KiB
C++
92 lines
3.3 KiB
C++
#pragma once
|
|
#include "OOXTextItemReader.h"
|
|
|
|
class OOXDocumentReader
|
|
{
|
|
private: CString m_sFilePath;
|
|
private: OOXTextItemReader m_oTextItemReader;
|
|
private: OOXReader* m_poReader;
|
|
private: RtfDocument* m_poDocument;
|
|
public: OOXDocumentReader(CString sFilePath):m_oTextItemReader(true)
|
|
{
|
|
m_sFilePath = sFilePath;
|
|
}
|
|
public: ~OOXDocumentReader()
|
|
{
|
|
}
|
|
public: bool Parse( ReaderParameter oParam )
|
|
{
|
|
m_poReader = oParam.oReader;
|
|
m_poDocument = oParam.oDocument;
|
|
|
|
//ïàðñèì äîêóìåíò
|
|
XmlUtils::CXmlReader oXmlReader;
|
|
if( TRUE == oXmlReader.OpenFromFile(m_sFilePath) )
|
|
if( TRUE == oXmlReader.ReadRootNode( _T("w:document") ) )
|
|
if( TRUE == oXmlReader.ReadNode( _T("w:body") ) || ( TRUE == oXmlReader.ReadRootNode( _T("w:wordDocument") ) && TRUE == oXmlReader.ReadNode( _T("w:body") ) ) )
|
|
{
|
|
RtfSectionPtr oCurSection;
|
|
if( true == oParam.oDocument->GetItem( oCurSection ) )
|
|
{
|
|
oCurSection->m_oProperty.SetDefaultOOX();
|
|
//ñíà÷àëà ñ÷èòàåì êîëè÷åñâî ñåêöèé è çàïîëíÿåì èõ ñâîéñòâà
|
|
XML::IXMLDOMNodePtr oNode;
|
|
oXmlReader.GetNode(oNode);
|
|
XmlUtils::CXmlReader oXmlSubReader;
|
|
if( TRUE == oXmlSubReader.OpenFromXmlNode( oNode ) )
|
|
{
|
|
if( TRUE == oXmlSubReader.ReadNodeList( _T("w:p") ) )
|
|
{
|
|
for( int i = 0; i < oXmlSubReader.GetLengthList(); i++ )
|
|
{
|
|
XML::IXMLDOMNodePtr oSubNode;
|
|
oXmlSubReader.GetNode( i, oSubNode );
|
|
XmlUtils::CXmlReader oXmlSubSubReader;
|
|
if( TRUE == oXmlSubSubReader.OpenFromXmlNode( oSubNode ) )
|
|
if( TRUE == oXmlSubSubReader.ReadNode( _T("w:pPr") ) )
|
|
if( TRUE == oXmlSubSubReader.ReadNode( _T("w:sectPr") ) )
|
|
{
|
|
XML::IXMLDOMNodePtr oSubSubNode;
|
|
oXmlSubSubReader.GetNode(oSubSubNode);
|
|
ReaderParameter oNewParam = oParam;
|
|
oNewParam.oNode = oSubSubNode;
|
|
OOXSectionPropertyReader oSectReader;
|
|
if( true == oSectReader.Parse( oNewParam, oCurSection->m_oProperty ) )
|
|
{
|
|
//ñîçäàåì íîâóþ ñåêöèþ
|
|
oCurSection = RtfSectionPtr( new RtfSection() );
|
|
oCurSection->m_oProperty.SetDefaultOOX();
|
|
oParam.oDocument->AddItem( oCurSection );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
oXmlSubReader.OpenFromXmlNode( oNode );
|
|
//÷èòàåì ñâîéñòâà ïîñëåäíåé ñåêöèè
|
|
if( TRUE == oXmlSubReader.ReadNode( _T("w:sectPr") ) )
|
|
{
|
|
XML::IXMLDOMNodePtr oNode;
|
|
oXmlSubReader.GetNode(oNode);
|
|
ReaderParameter oNewParam = oParam;
|
|
oNewParam.oNode = oNode;
|
|
OOXSectionPropertyReader oSectReader;
|
|
oSectReader.Parse( oNewParam, oCurSection->m_oProperty );
|
|
}
|
|
}
|
|
RtfSectionPtr oFirstSection;
|
|
if( true == m_poDocument->GetItem( oFirstSection, 0 ) )
|
|
{
|
|
//÷èòàåì â ïåðâóþ ñåêöèþ ïîêà íå ïðèäåò ñîáûòèå OnSectionEnd
|
|
m_oTextItemReader.m_oTextItems = oFirstSection;
|
|
|
|
XML::IXMLDOMNodePtr oParseNode;
|
|
oXmlReader.GetNode(oParseNode);
|
|
ReaderParameter oNewParam = oParam;
|
|
oNewParam.oNode = oParseNode;
|
|
m_oTextItemReader.Parse( oNewParam );
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
}; |