Commit e81517ca authored by ElenaSubbotina's avatar ElenaSubbotina Committed by Alexander Trofimov

RtfFormat - правка багов по результатам тестирования

parent 33c1e271
...@@ -698,6 +698,21 @@ public: ...@@ -698,6 +698,21 @@ public:
oDocument.m_oProperty.m_nAnsiCodePage = nKeepGlobalCodepage; oDocument.m_oProperty.m_nAnsiCodePage = nKeepGlobalCodepage;
} }
CString RemoveLastUnchar(CString str)
{
int i = 1;
while(true)
{
if (i > str.GetLength())
break;
if (str.GetAt(str.GetLength() - i) <= 0x20)
str.Delete(str.GetLength() - i , 1);
else
break;
}
return str;
}
void ExecuteText(RtfDocument& oDocument, RtfReader& oReader, CString sText) void ExecuteText(RtfDocument& oDocument, RtfReader& oReader, CString sText)
{ {
if( is_panose == m_eInternalState ) if( is_panose == m_eInternalState )
...@@ -709,14 +724,20 @@ public: ...@@ -709,14 +724,20 @@ public:
if( sText.Find(';') != -1 ) if( sText.Find(';') != -1 )
{ {
sText.Remove(';'); sText.Remove(';');
m_oFont.m_sName += sText; if( sText.Find('&') !=0 )//todooo выясниснить что значит &;
//todooo при добавлении могут быть повторы - убрать нннадо - goldwingSetting.rtf {
oDocument.m_oFontTable.DirectAddItem( m_oFont ); //sText.Remove('&'); //
m_oFont.m_sName += RemoveLastUnchar(sText);
}
//todooo при добавлении могут быть повторы - убрать нннадо - goldwingSetting.rtf
oDocument.m_oFontTable.DirectAddItem( m_oFont );
m_oFont.SetDefaultRtf(); m_oFont.SetDefaultRtf();
} }
else else
{ {
m_oFont.m_sName += sText; m_oFont.m_sName += sText.Trim();
} }
} }
} }
......
...@@ -111,7 +111,11 @@ CString RtfFootnote::RenderToOOX(RenderParameter oRenderParameter) ...@@ -111,7 +111,11 @@ CString RtfFootnote::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append( _T("<w:r>") ); sResult.Append( _T("<w:r>") );
CString srPr = m_oCharProp.RenderToOOX( oRenderParameter ); CString srPr = m_oCharProp.RenderToOOX( oRenderParameter );
if( false == srPr.IsEmpty() ) if( false == srPr.IsEmpty() )
sResult.AppendFormat( _T("<w:rPr>%ls</w:rPr>"), srPr.GetBuffer() ); {
sResult.Append( _T("<w:rPr>") );
sResult += srPr;
sResult.Append( _T("/w:rPr>") );
}
sResult.AppendFormat( _T("<w:endnoteReference w:id=\"%d\"/>"), nID ); sResult.AppendFormat( _T("<w:endnoteReference w:id=\"%d\"/>"), nID );
sResult.Append( _T("</w:r>") ); sResult.Append( _T("</w:r>") );
} }
...@@ -126,7 +130,11 @@ CString RtfFootnote::RenderToOOX(RenderParameter oRenderParameter) ...@@ -126,7 +130,11 @@ CString RtfFootnote::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append( _T("<w:r>") ); sResult.Append( _T("<w:r>") );
CString srPr = m_oCharProp.RenderToOOX( oRenderParameter ); CString srPr = m_oCharProp.RenderToOOX( oRenderParameter );
if( false == srPr.IsEmpty() ) if( false == srPr.IsEmpty() )
sResult.AppendFormat( _T("<w:rPr>%ls</w:rPr>"), srPr.GetBuffer() ); {
sResult.Append( _T("<w:rPr>") );
sResult += srPr;
sResult.Append( _T("/w:rPr>") );
}
sResult.AppendFormat( _T("<w:footnoteReference w:id=\"%d\"/>"), nID ); sResult.AppendFormat( _T("<w:footnoteReference w:id=\"%d\"/>"), nID );
sResult.Append( _T("</w:r>") ); sResult.Append( _T("</w:r>") );
} }
......
...@@ -23,8 +23,10 @@ CString RtfFontTable::RenderToRtf(RenderParameter oRenderParameter) ...@@ -23,8 +23,10 @@ CString RtfFontTable::RenderToRtf(RenderParameter oRenderParameter)
RenderParameter oNewParameter = oRenderParameter; RenderParameter oNewParameter = oRenderParameter;
oNewParameter.nType = RENDER_TO_RTF_PARAM_FONT_TBL; oNewParameter.nType = RENDER_TO_RTF_PARAM_FONT_TBL;
for( int i = 0; i < (int)m_aArray.size(); i++ ) for( int i = 0; i < (int)m_aArray.size(); i++ )
sResult.AppendFormat(_T("%ls"),m_aArray[i].RenderToRtf( oNewParameter ).GetBuffer()); {
sResult.Append(_T("}")); sResult += m_aArray[i].RenderToRtf( oNewParameter );
}
sResult += _T("}");
} }
return sResult; return sResult;
} }
......
...@@ -115,8 +115,7 @@ public: ...@@ -115,8 +115,7 @@ public:
oNewParameter.nType = RENDER_TO_RTF_PARAM_COLOR_TBL; oNewParameter.nType = RENDER_TO_RTF_PARAM_COLOR_TBL;
for( int i = 0; i < (int)m_aArray.size(); i++ ) for( int i = 0; i < (int)m_aArray.size(); i++ )
{ {
CString str = m_aArray[i].RenderToRtf( oNewParameter ); sResult += m_aArray[i].RenderToRtf( oNewParameter );
sResult.AppendFormat(_T("%ls"), str.GetBuffer());
} }
sResult.Append(_T("}")); sResult.Append(_T("}"));
} }
...@@ -352,9 +351,10 @@ public: ...@@ -352,9 +351,10 @@ public:
} }
for( int i = 0; i < (int)m_aArray.size(); i++) for( int i = 0; i < (int)m_aArray.size(); i++)
{ {
CString str = m_aArray[i].RenderToRtf( oRenderParameter ); sResult.Append(_T("{"));
sResult.AppendFormat(_T("{%ls}"), str.GetBuffer() ); sResult.Append(m_aArray[i].RenderToRtf( oRenderParameter ));
} sResult.Append(_T("}"));
}
sResult.Append(_T("}")); sResult.Append(_T("}"));
} }
return sResult; return sResult;
...@@ -382,8 +382,9 @@ public: ...@@ -382,8 +382,9 @@ public:
sResult.Append(_T("{\\*\\listoverridetable")); sResult.Append(_T("{\\*\\listoverridetable"));
for( int i = 0; i < (int)m_aArray.size(); i++) for( int i = 0; i < (int)m_aArray.size(); i++)
{ {
CString str = m_aArray[i].RenderToRtf( oRenderParameter ); sResult.Append(_T("{"));
sResult.AppendFormat(_T("{%ls}"), str.GetBuffer() ); sResult.Append(m_aArray[i].RenderToRtf( oRenderParameter ));
sResult.Append(_T("}"));
} }
sResult.Append(_T("}")); sResult.Append(_T("}"));
} }
......
...@@ -28,35 +28,66 @@ ...@@ -28,35 +28,66 @@
#define RENDER_OOX_BOOL( prop, sResult, sName)\ #define RENDER_OOX_BOOL( prop, sResult, sName)\
if( 0 == prop )\ if( 0 == prop )\
sResult.AppendFormat( _T("<%ls w:val=\"false\"/>"), sName );\ {\
sResult.Append( _T("<") );\
sResult.Append( sName );\
sResult.AppendFormat( _T(" w:val=\"false\"/>"));\
}\
else if( PROP_DEF != prop )\ else if( PROP_DEF != prop )\
sResult.AppendFormat( _T("<%ls w:val=\"true\"/>"), sName ); {\
sResult.Append( _T("<") );\
#define RENDER_OOX_BOOL_ATTRIBUTE( prop, sResult, sName)\ sResult.Append( sName );\
if( 0 == prop )\ sResult.AppendFormat( _T(" w:val=\"true\"/>"));\
sResult.AppendFormat( _T(" %ls=\"0\""), sName );\ }
else if( PROP_DEF != prop )\
sResult.AppendFormat( _T(" %ls=\"1\""), sName );
#define RENDER_OOX_INT( prop, sResult, sName)\ #define RENDER_OOX_INT( prop, sResult, sName)\
if( PROP_DEF != prop )\ if( PROP_DEF != prop )\
sResult.AppendFormat( _T("<%ls w:val=\"%d\"/>"), sName, prop ); {\
sResult.Append( _T("<") );\
sResult.Append( sName );\
sResult.AppendFormat( _T(" w:val=\"%d\"/>"), prop );\
}
#define RENDER_OOX_INT_ATTRIBUTE( prop, sResult, sName)\ #define RENDER_OOX_INT_ATTRIBUTE( prop, sResult, sName)\
if( PROP_DEF != prop )\ if( PROP_DEF != prop )\
sResult.AppendFormat( _T(" %ls=\"%d\""), sName, prop ); {\
sResult.Append( _T(" ") );\
sResult.Append( sName );\
sResult.AppendFormat( _T("=\"%d\""), prop );\
}
#define RENDER_OOX_BOOL_ATTRIBUTE( prop, sResult, sName)\
if( 0 == prop )\
{\
sResult.Append( _T(" ") );\
sResult.Append( sName );\
sResult.AppendFormat( _T("=\"0\""));\
}\
else if( PROP_DEF != prop )\
{\
sResult.Append( _T(" ") );\
sResult.Append( sName );\
sResult.AppendFormat( _T("=\"1\""));\
}
#define RENDER_RTF_BOOL( prop, sResult, sName)\ #define RENDER_RTF_BOOL( prop, sResult, sName)\
if( 0 == prop )\ if( 0 == prop )\
sResult.AppendFormat( _T("\\%ls0"), sName );\ {\
sResult.Append( _T("\\") );\
sResult.Append( sName );\
sResult.Append( _T("0") );\
}\
else if( PROP_DEF != prop )\ else if( PROP_DEF != prop )\
sResult.AppendFormat( _T("\\%ls"), sName ); {\
sResult.Append( _T("\\") );\
sResult.Append( sName );\
}
#define RENDER_RTF_INT( prop, sResult, sName)\ #define RENDER_RTF_INT( prop, sResult, sName)\
if( PROP_DEF != prop )\ if( PROP_DEF != prop )\
sResult.AppendFormat( _T("\\%ls%d"), sName, prop ); {\
sResult.Append( _T("\\") );\
sResult.Append( sName );\
sResult.AppendFormat( _T("%d"), prop );\
}
class RtfFont : public IRenderableProperty class RtfFont : public IRenderableProperty
......
...@@ -746,57 +746,57 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -746,57 +746,57 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter)
return sResult; return sResult;
} }
CString RtfSectionProperty::SaveFile( TextItemContainerPtr oTarget, RenderParameter oRenderParameter, bool bHeader) CString RtfSectionProperty::SaveFile( TextItemContainerPtr oTarget, RenderParameter oRenderParameter, bool bHeader)
{ {
OOXWriter* poOOXWriter = static_cast<OOXWriter*> ( oRenderParameter.poWriter ); OOXWriter* poOOXWriter = static_cast<OOXWriter*> ( oRenderParameter.poWriter );
RtfDocument* poRtfDocument = static_cast<RtfDocument*> ( oRenderParameter.poDocument ); RtfDocument* poRtfDocument = static_cast<RtfDocument*> ( oRenderParameter.poDocument );
CString sFilename; CString sFilename;
if( true == bHeader ) if( true == bHeader )
sFilename.AppendFormat( _T("header%d.xml"), poRtfDocument->m_oIdGenerator.Generate_HeaderNumber() ); sFilename.AppendFormat( _T("header%d.xml"), poRtfDocument->m_oIdGenerator.Generate_HeaderNumber() );
else else
sFilename.AppendFormat( _T("footer%d.xml"), poRtfDocument->m_oIdGenerator.Generate_FooterNumber() ); sFilename.AppendFormat( _T("footer%d.xml"), poRtfDocument->m_oIdGenerator.Generate_FooterNumber() );
CString sContent; CString sContent;
CString sRootName; CString sRootName;
if( true == bHeader ) if( true == bHeader )
sRootName = _T("w:hdr"); sRootName = _T("w:hdr");
else else
sRootName = _T("w:ftr"); sRootName = _T("w:ftr");
sContent.AppendFormat( _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>\n") ); sContent.AppendFormat( _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>\n") );
sContent.AppendFormat( _T("<%ls xmlns:ve=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\">"), sRootName.GetBuffer() ); sContent.AppendFormat( _T("<%ls xmlns:ve=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\">"), sRootName.GetBuffer() );
RenderParameter oNewParameter = oRenderParameter; RenderParameter oNewParameter = oRenderParameter;
OOXRelsWriterPtr oNewRelsWr = OOXRelsWriterPtr( new OOXRelsWriter( sFilename, *poRtfDocument ) ); OOXRelsWriterPtr oNewRelsWr = OOXRelsWriterPtr( new OOXRelsWriter( sFilename, *poRtfDocument ) );
poOOXWriter->m_oCustomRelsWriter.push_back( oNewRelsWr ); poOOXWriter->m_oCustomRelsWriter.push_back( oNewRelsWr );
oNewParameter.poRels = oNewRelsWr.get(); oNewParameter.poRels = oNewRelsWr.get();
sContent.Append( oTarget->RenderToOOX(oNewParameter) ); sContent.Append( oTarget->RenderToOOX(oNewParameter) );
sContent.AppendFormat( _T("</%ls>"), sRootName.GetBuffer() ); sContent.AppendFormat( _T("</%ls>"), sRootName.GetBuffer() );
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sContent.GetBuffer()); std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sContent.GetBuffer());
CString sFilePath = poOOXWriter->m_sTargetFolder + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR + sFilename; CString sFilePath = poOOXWriter->m_sTargetFolder + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR + sFilename;
CFile file; CFile file;
if (file.CreateFile(sFilePath) == S_OK) if (file.CreateFile(sFilePath) == S_OK)
{ {
file.WriteFile((void*)sXmlUTF.c_str(), sXmlUTF.length()); file.WriteFile((void*)sXmlUTF.c_str(), sXmlUTF.length());
file.CloseFile(); file.CloseFile();
} }
CString sContentTarget = _T("/word/") + sFilename; CString sContentTarget = _T("/word/") + sFilename;
CString srID; CString srID;
if( true == bHeader ) if( true == bHeader )
{ {
poOOXWriter->m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml"), sContentTarget); poOOXWriter->m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml"), sContentTarget);
srID = poOOXWriter->m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/header"), sFilename ); srID = poOOXWriter->m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/header"), sFilename );
}
else
{
poOOXWriter->m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml"), sContentTarget);
srID = poOOXWriter->m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer"), sFilename );
}
return srID;
} }
else
{
poOOXWriter->m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml"), sContentTarget);
srID = poOOXWriter->m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer"), sFilename );
}
return srID;
}
...@@ -16,7 +16,12 @@ public: ...@@ -16,7 +16,12 @@ public:
CString sFootnote; CString sFootnote;
sFootnote.Append( _T("<w:footnote") ); sFootnote.Append( _T("<w:footnote") );
if( false == sType.IsEmpty() ) if( false == sType.IsEmpty() )
sFootnote.AppendFormat( _T(" w:type=\"%ls\""), sType.GetBuffer() ); {
sFootnote.Append(_T(" w:type=\"") );
sFootnote += sType;
sFootnote.Append(_T("\""));
}
if( PROP_DEF != nID ) if( PROP_DEF != nID )
sFootnote.AppendFormat( _T(" w:id=\"%d\""), nID ); sFootnote.AppendFormat( _T(" w:id=\"%d\""), nID );
sFootnote.Append( _T(">") ); sFootnote.Append( _T(">") );
...@@ -29,9 +34,15 @@ public: ...@@ -29,9 +34,15 @@ public:
{ {
m_sFootnotes.Append( _T("<w:footnote") ); m_sFootnotes.Append( _T("<w:footnote") );
if( false == sType.IsEmpty() ) if( false == sType.IsEmpty() )
m_sFootnotes.AppendFormat( _T(" w:type=\"%ls\""), sType.GetBuffer() ); {
m_sFootnotes.Append(_T(" w:type=\"") );
m_sFootnotes += sType;
m_sFootnotes.Append(_T("\""));
}
if( PROP_DEF != nID ) if( PROP_DEF != nID )
{
m_sFootnotes.AppendFormat( _T(" w:id=\"%d\""), nID ); m_sFootnotes.AppendFormat( _T(" w:id=\"%d\""), nID );
}
m_sFootnotes.Append( _T(">") ); m_sFootnotes.Append( _T(">") );
m_sFootnotes.Append( sText ); m_sFootnotes.Append( sText );
m_sFootnotes.Append(_T("</w:footnote>")); m_sFootnotes.Append(_T("</w:footnote>"));
...@@ -87,7 +98,11 @@ public: ...@@ -87,7 +98,11 @@ public:
CString sEndnote; CString sEndnote;
sEndnote.Append( _T("<w:endnote") ); sEndnote.Append( _T("<w:endnote") );
if( false == sType.IsEmpty() ) if( false == sType.IsEmpty() )
sEndnote.AppendFormat( _T(" w:type=\"%ls\""), sType.GetBuffer() ); {
sEndnote.Append(_T(" w:type=\"") );
sEndnote += sType;
sEndnote.Append(_T("\""));
}
if( -2 != nID ) if( -2 != nID )
sEndnote.AppendFormat( _T(" w:id=\"%d\""), nID ); sEndnote.AppendFormat( _T(" w:id=\"%d\""), nID );
sEndnote.Append( _T(">") ); sEndnote.Append( _T(">") );
...@@ -100,7 +115,12 @@ public: ...@@ -100,7 +115,12 @@ public:
{ {
m_sEndnotes.Append( _T("<w:endnote") ); m_sEndnotes.Append( _T("<w:endnote") );
if( false == sType.IsEmpty() ) if( false == sType.IsEmpty() )
m_sEndnotes.AppendFormat( _T(" w:type=\"%ls\""), sType.GetBuffer() ); {
m_sEndnotes.Append(_T(" w:type=\"") );
m_sEndnotes += sType;
m_sEndnotes.Append(_T("\""));
}
if( -2 != nID ) if( -2 != nID )
m_sEndnotes.AppendFormat( _T(" w:id=\"%d\""), nID ); m_sEndnotes.AppendFormat( _T(" w:id=\"%d\""), nID );
m_sEndnotes.Append( _T(">") ); m_sEndnotes.Append( _T(">") );
......
...@@ -3,36 +3,52 @@ ...@@ -3,36 +3,52 @@
#include <tchar.h> #include <tchar.h>
#include "../RtfFormatLib/source/ConvertationManager.h" #include "../RtfFormatLib/source/ConvertationManager.h"
#include "../../Common/DocxFormat/Source/SystemUtility/FileSystem/Directory.h"
#include "../../OfficeUtils/src/OfficeUtils.h"
#include <algorithm> #include <algorithm>
#include <string> #include <string>
int _tmain(int argc, _TCHAR* argv[]) int _tmain(int argc, _TCHAR* argv[])
{ {
std::wstring sTemp = _T("D:\\test\\Temp"); std::wstring srcFileName = argv[1];
std::wstring dstFileName = argv[2];
std::wstring outputDir = FileSystem::Directory::GetFolderPath(dstFileName);
std::wstring sArg_1 = argv[1]; std::wstring dstTempPath = FileSystem::Directory::CreateDirectoryWithUniqueName(outputDir);
std::wstring sArg_2 = argv[2];
int n1 = sArg_1.rfind(_T('.')); int n1 = srcFileName.rfind(_T('.'));
int n2 = sArg_2.rfind(_T('.')); int n2 = dstFileName.rfind(_T('.'));
std::wstring ext_1 = n1>=0 ? sArg_1.substr(n1+1, sArg_1.length() - n1): _T(""); //ext_1.MakeLower(); std::wstring ext_1 = n1>=0 ? srcFileName.substr(n1+1, srcFileName.length() - n1): _T(""); //ext_1.MakeLower();
std::wstring ext_2 = n2>=0 ? sArg_2.substr(n2+1, sArg_2.length() - n2): _T(""); //ext_2.MakeLower(); std::wstring ext_2 = n2>=0 ? dstFileName.substr(n2+1, dstFileName.length() - n2): _T(""); //ext_2.MakeLower();
std::transform(ext_1.begin(), ext_1.end(), ext_1.begin(), ::tolower); std::transform(ext_1.begin(), ext_1.end(), ext_1.begin(), ::tolower);
RtfConvertationManager rtfConvert; RtfConvertationManager rtfConvert;
rtfConvert.m_sTempFolder = sTemp; rtfConvert.m_sTempFolder = dstTempPath;
COfficeUtils oCOfficeUtils(NULL);
if (ext_1 == _T("rtf")) if (ext_1 == _T("rtf"))
{ // rtf->docx {
rtfConvert.ConvertRtfToOOX(sArg_1, sArg_2); // rtf->docx
rtfConvert.ConvertRtfToOOX(srcFileName, dstTempPath);
if (S_OK != oCOfficeUtils.CompressFileOrDirectory(dstTempPath.c_str(), dstFileName.c_str(), -1))
return S_FALSE;
} }
if (ext_2 == _T("rtf")) if (ext_2 == _T("rtf"))
{ // docx->rtf {
rtfConvert.ConvertOOXToRtf(sArg_2, sArg_1); // docx->rtf
if (S_OK != oCOfficeUtils.ExtractToDirectory(srcFileName.c_str(), dstTempPath.c_str(), NULL, 0))
return S_FALSE;
rtfConvert.ConvertOOXToRtf(dstTempPath, srcFileName);
} }
FileSystem::Directory::DeleteDirectory(dstTempPath);
return 0; return 0;
} }
...@@ -187,6 +187,93 @@ namespace OOX ...@@ -187,6 +187,93 @@ namespace OOX
CPath oRootPath; CPath oRootPath;
read(oRootPath, oPath); read(oRootPath, oPath);
} }
void CreateElements(XmlUtils::CXmlLiteReader &oReader, int Depth)
{
while ( oReader.ReadNextSiblingNode( Depth ) )
{
CWCharWrapper sName = oReader.GetName();
WritingElement *pItem = NULL;
/*if ( _T("w:altChunk") == sName )
pItem = new Logic::CAltChunk( oReader );
else*/ if ( _T("w:bookmarkEnd") == sName )
pItem = new Logic::CBookmarkEnd( oReader );
else if ( _T("w:bookmarkStart") == sName )
pItem = new Logic::CBookmarkStart( oReader );
else if ( _T("w:commentRangeEnd") == sName )
pItem = new Logic::CCommentRangeEnd( oReader );
else if ( _T("w:commentRangeStart") == sName )
pItem = new Logic::CCommentRangeStart( oReader );
//else if ( _T("w:customXml") == sName )
// pItem = new Logic::CCustomXml( oReader );
else if ( _T("w:customXmlDelRangeEnd") == sName )
pItem = new Logic::CCustomXmlDelRangeEnd( oReader );
else if ( _T("w:customXmlDelRangeStart") == sName )
pItem = new Logic::CCustomXmlDelRangeStart( oReader );
else if ( _T("w:customXmlInsRangeEnd") == sName )
pItem = new Logic::CCustomXmlInsRangeEnd( oReader );
else if ( _T("w:customXmlInsRangeStart") == sName )
pItem = new Logic::CCustomXmlInsRangeStart( oReader );
else if ( _T("w:customXmlMoveFromRangeEnd") == sName )
pItem = new Logic::CCustomXmlMoveFromRangeEnd( oReader );
else if ( _T("w:customXmlMoveFromRangeStart") == sName )
pItem = new Logic::CCustomXmlMoveFromRangeStart( oReader );
else if ( _T("w:customXmlMoveToRangeEnd") == sName )
pItem = new Logic::CCustomXmlMoveToRangeEnd( oReader );
else if ( _T("w:customXmlMoveToRangeStart") == sName )
pItem = new Logic::CCustomXmlMoveToRangeStart( oReader );
else if ( _T("w:del") == sName )
pItem = new Logic::CDel( oReader );
else if ( _T("w:ins") == sName )
pItem = new Logic::CIns( oReader );
//else if ( _T("w:moveFrom") == sName )
// pItem = new Logic::CMoveFrom( oReader );
else if ( _T("w:moveFromRangeEnd") == sName )
pItem = new Logic::CMoveToRangeEnd( oReader );
else if ( _T("w:moveFromRangeStart") == sName )
pItem = new Logic::CMoveToRangeStart( oReader );
//else if ( _T("w:moveTo") == sName )
// pItem = new Logic::CMoveTo( oReader );
else if ( _T("w:moveToRangeEnd") == sName )
pItem = new Logic::CMoveToRangeEnd( oReader );
else if ( _T("w:moveToRangeStart") == sName )
pItem = new Logic::CMoveToRangeStart( oReader );
else if ( _T("m:oMath") == sName )
pItem = new Logic::COMath( oReader );
else if ( _T("m:oMathPara") == sName )
pItem = new Logic::COMathPara( oReader );
else if ( _T("w:p") == sName )
pItem = new Logic::CParagraph( oReader );
else if ( _T("w:permEnd") == sName )
pItem = new Logic::CPermEnd( oReader );
else if ( _T("w:permStart") == sName )
pItem = new Logic::CPermStart( oReader );
else if ( _T("w:proofErr") == sName )
pItem = new Logic::CProofErr( oReader );
else if ( _T("w:sdt") == sName )
pItem = new Logic::CSdt( oReader );
else if ( _T("w:sectPr") == sName )
m_oSectPr = oReader;
else if ( _T("w:tbl") == sName )
pItem = new Logic::CTbl( oReader );
else if ( _T("wx:sect") == sName && !oReader.IsEmptyNode())
{
int nWxSectDepth = oReader.GetDepth();
CreateElements(oReader, nWxSectDepth);
}
else if ( _T("wx:pBdrGroup") == sName && !oReader.IsEmptyNode())
{
int nWxBdrGroupDepth = oReader.GetDepth();
CreateElements(oReader, nWxBdrGroupDepth);
}
if ( pItem )
m_arrItems.push_back( pItem );
}
}
virtual void read(const CPath& oRootPath, const CPath& oPath) virtual void read(const CPath& oRootPath, const CPath& oPath)
{ {
m_oReadPath = oPath; m_oReadPath = oPath;
...@@ -204,7 +291,7 @@ namespace OOX ...@@ -204,7 +291,7 @@ namespace OOX
return; return;
CWCharWrapper sName = oReader.GetName(); CWCharWrapper sName = oReader.GetName();
if ( _T("w:document") == sName ) if ( _T("w:document") == sName || _T("w:wordDocument") == sName)
{ {
ReadAttributes( oReader ); ReadAttributes( oReader );
...@@ -218,77 +305,8 @@ namespace OOX ...@@ -218,77 +305,8 @@ namespace OOX
if ( _T("w:body") == sName && !oReader.IsEmptyNode() ) if ( _T("w:body") == sName && !oReader.IsEmptyNode() )
{ {
int nBodyDepth = oReader.GetDepth(); int nBodyDepth = oReader.GetDepth();
while ( oReader.ReadNextSiblingNode( nBodyDepth ) )
{ CreateElements(oReader, nBodyDepth);
sName = oReader.GetName();
WritingElement *pItem = NULL;
/*if ( _T("w:altChunk") == sName )
pItem = new Logic::CAltChunk( oReader );
else*/ if ( _T("w:bookmarkEnd") == sName )
pItem = new Logic::CBookmarkEnd( oReader );
else if ( _T("w:bookmarkStart") == sName )
pItem = new Logic::CBookmarkStart( oReader );
else if ( _T("w:commentRangeEnd") == sName )
pItem = new Logic::CCommentRangeEnd( oReader );
else if ( _T("w:commentRangeStart") == sName )
pItem = new Logic::CCommentRangeStart( oReader );
//else if ( _T("w:customXml") == sName )
// pItem = new Logic::CCustomXml( oReader );
else if ( _T("w:customXmlDelRangeEnd") == sName )
pItem = new Logic::CCustomXmlDelRangeEnd( oReader );
else if ( _T("w:customXmlDelRangeStart") == sName )
pItem = new Logic::CCustomXmlDelRangeStart( oReader );
else if ( _T("w:customXmlInsRangeEnd") == sName )
pItem = new Logic::CCustomXmlInsRangeEnd( oReader );
else if ( _T("w:customXmlInsRangeStart") == sName )
pItem = new Logic::CCustomXmlInsRangeStart( oReader );
else if ( _T("w:customXmlMoveFromRangeEnd") == sName )
pItem = new Logic::CCustomXmlMoveFromRangeEnd( oReader );
else if ( _T("w:customXmlMoveFromRangeStart") == sName )
pItem = new Logic::CCustomXmlMoveFromRangeStart( oReader );
else if ( _T("w:customXmlMoveToRangeEnd") == sName )
pItem = new Logic::CCustomXmlMoveToRangeEnd( oReader );
else if ( _T("w:customXmlMoveToRangeStart") == sName )
pItem = new Logic::CCustomXmlMoveToRangeStart( oReader );
else if ( _T("w:del") == sName )
pItem = new Logic::CDel( oReader );
else if ( _T("w:ins") == sName )
pItem = new Logic::CIns( oReader );
//else if ( _T("w:moveFrom") == sName )
// pItem = new Logic::CMoveFrom( oReader );
else if ( _T("w:moveFromRangeEnd") == sName )
pItem = new Logic::CMoveToRangeEnd( oReader );
else if ( _T("w:moveFromRangeStart") == sName )
pItem = new Logic::CMoveToRangeStart( oReader );
//else if ( _T("w:moveTo") == sName )
// pItem = new Logic::CMoveTo( oReader );
else if ( _T("w:moveToRangeEnd") == sName )
pItem = new Logic::CMoveToRangeEnd( oReader );
else if ( _T("w:moveToRangeStart") == sName )
pItem = new Logic::CMoveToRangeStart( oReader );
else if ( _T("m:oMath") == sName )
pItem = new Logic::COMath( oReader );
else if ( _T("m:oMathPara") == sName )
pItem = new Logic::COMathPara( oReader );
else if ( _T("w:p") == sName )
pItem = new Logic::CParagraph( oReader );
else if ( _T("w:permEnd") == sName )
pItem = new Logic::CPermEnd( oReader );
else if ( _T("w:permStart") == sName )
pItem = new Logic::CPermStart( oReader );
else if ( _T("w:proofErr") == sName )
pItem = new Logic::CProofErr( oReader );
else if ( _T("w:sdt") == sName )
pItem = new Logic::CSdt( oReader );
else if ( _T("w:sectPr") == sName )
m_oSectPr = oReader;
else if ( _T("w:tbl") == sName )
pItem = new Logic::CTbl( oReader );
if ( pItem )
m_arrItems.push_back( pItem );
}
} }
else if ( _T("w:background") == sName ) else if ( _T("w:background") == sName )
m_oBackground = oReader; m_oBackground = oReader;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment