Commit 639f43fc authored by Elen.Subbotina's avatar Elen.Subbotina Committed by Alexander Trofimov

RtfFile linux build

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@62114 954022d7-b5bf-4e40-9824-e11837661b57
parent 440f5c8d
#pragma once #pragma once
#include <vector> #include <vector>
#include <string>
#include "IdGenerator.h" #include "IdGenerator.h"
#include "RtfDefine.h" #include "RtfDefine.h"
...@@ -57,12 +58,15 @@ public: ...@@ -57,12 +58,15 @@ public:
}; };
template<class T> class ItemContainer template<class T>
class ItemContainer
{ {
protected: protected:
std::vector<T> m_aArray; std::vector<T> m_aArray;
public:
ItemContainer( ) public:
ItemContainer( )
{ {
} }
ItemContainer( const ItemContainer& oItemContainer ) ItemContainer( const ItemContainer& oItemContainer )
...@@ -157,31 +161,31 @@ public: ...@@ -157,31 +161,31 @@ public:
template<class T> class ItemSingleContainer: public ItemContainer<T> template<class T> class ItemSingleContainer: public ItemContainer<T>
{ {
public: public:
int AddItem( T piRend) int AddItem( T piRend)
{ {
for( int i = 0; i < (int)m_aArray.size(); i++ ) for( int i = 0; i < ItemContainer<T>::m_aArray.size(); i++ )
if( m_aArray[i] == piRend ) if( ItemContainer<T>::m_aArray[i] == piRend )
return i; return i;
m_aArray.push_back(piRend); ItemContainer<T>::m_aArray.push_back(piRend);
return (int)m_aArray.size() - 1; return (int)ItemContainer<T>::m_aArray.size() - 1;
} }
}; };
template<class T> class ItemWithLastContainer: public ItemContainer<T> template<class T> class ItemWithLastContainer: public ItemContainer<T>
{ {
public: public:
void RemoveItem( T piRend ) void RemoveItem( T piRend )
{ {
if( (int)m_aArray.size() > 1 ) if( ItemContainer<T>::m_aArray.size() > 1 )
{ {
ItemContainer::RemoveItem( piRend ); ItemContainer<T>::RemoveItem( piRend );
} }
} }
void RemoveItem( int nIndex = -1 ) void RemoveItem( int nIndex = -1 )
{ {
if( (int)m_aArray.size() > 1 ) if( ItemContainer<T>::m_aArray.size() > 1 )
{ {
ItemContainer::RemoveItem( nIndex ); ItemContainer<T>::RemoveItem( nIndex );
} }
} }
}; };
......
...@@ -273,7 +273,7 @@ bool OleReader::ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader,CStrin ...@@ -273,7 +273,7 @@ bool OleReader::ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader,CStrin
//delete oStream.lpstbl; //delete oStream.lpstbl;
delete[] pData; delete[] pData;
if( FAILED( hRes ) ) if( hRes != S_OK )
Utils::RemoveDirOrFile( sOleStorageName ); Utils::RemoveDirOrFile( sOleStorageName );
} }
} }
...@@ -325,7 +325,7 @@ bool ParagraphPropDestination::ExecuteCommand(RtfDocument& oDocument, RtfReader& ...@@ -325,7 +325,7 @@ bool ParagraphPropDestination::ExecuteCommand(RtfDocument& oDocument, RtfReader&
AddItem( m_oCurParagraph, oReader, true, false ); AddItem( m_oCurParagraph, oReader, true, false );
m_oCurParagraph = RtfParagraphPtr(new RtfParagraph()); m_oCurParagraph = RtfParagraphPtr(new RtfParagraph());
} }
else if( _T("row" == sCommand || "nestrow") == sCommand) else if( _T("row") == sCommand || _T("nestrow") == sCommand)
{ {
m_oCurParagraph->m_oProperty = oReader.m_oState->m_oParagraphProp; m_oCurParagraph->m_oProperty = oReader.m_oState->m_oParagraphProp;
m_oCurParagraph->m_oOldList = RtfOldListPtr( new RtfOldList() ); m_oCurParagraph->m_oOldList = RtfOldListPtr( new RtfOldList() );
......
...@@ -1078,7 +1078,7 @@ private: RtfShape& m_oShape; ...@@ -1078,7 +1078,7 @@ private: RtfShape& m_oShape;
CString m_sFile; CString m_sFile;
CString m_sData; CString m_sData;
bool m_bBin; bool m_bBin;
byte* m_pbBin; BYTE* m_pbBin;
int m_nBinLength; int m_nBinLength;
public: PictureReader( RtfReader& oReader, RtfShape& oShape ):m_oShape(oShape) public: PictureReader( RtfReader& oReader, RtfShape& oShape ):m_oShape(oShape)
{ {
...@@ -1802,8 +1802,9 @@ private: void TryToPepairResult( RtfDocument& oDocument, RtfReader& oReader ) ...@@ -1802,8 +1802,9 @@ private: void TryToPepairResult( RtfDocument& oDocument, RtfReader& oReader )
return; return;
sResTokenize = sField.Tokenize( _T(" \""), nStartTokenize ); sResTokenize = sField.Tokenize( _T(" \""), nStartTokenize );
int nCommand = 0; //0 - none; 1 - \f; 3 - other int nCommand = 0; //0 - none; 1 - \f; 3 - other
bool bWaitRightBreak = false;
while( sResTokenize != "" ) bool bWaitRightBreak = false;
while( sResTokenize != _T("") )
{ {
int nTokenLen = sResTokenize.GetLength(); int nTokenLen = sResTokenize.GetLength();
if( nTokenLen > 0 && sResTokenize[0] == '\"' && sResTokenize[nTokenLen - 1] != '\"' ) //текст в кавычках считается как один if( nTokenLen > 0 && sResTokenize[0] == '\"' && sResTokenize[nTokenLen - 1] != '\"' ) //текст в кавычках считается как один
...@@ -3199,9 +3200,9 @@ public: RtfSectionCommand() ...@@ -3199,9 +3200,9 @@ public: RtfSectionCommand()
COMMAND_RTF_INT( _T("brdrart"), oReader.m_oCurSectionProp.m_nBorderArt, sCommand, hasParameter, parameter) COMMAND_RTF_INT( _T("brdrart"), oReader.m_oCurSectionProp.m_nBorderArt, sCommand, hasParameter, parameter)
COMMAND_RTF_INT( _T("pgbrdropt"), oReader.m_oCurSectionProp.m_nBorderMeasure, sCommand, hasParameter, parameter) COMMAND_RTF_INT( _T("pgbrdropt"), oReader.m_oCurSectionProp.m_nBorderMeasure, sCommand, hasParameter, parameter)
COMMAND_RTF_BOOL( _T("pgbrdrsna"), oReader.m_oCurSectionProp.m_nBorderAlign, sCommand, hasParameter, parameter) COMMAND_RTF_BOOL( _T("pgbrdrsna"), oReader.m_oCurSectionProp.m_nBorderAlign, sCommand, hasParameter, parameter)
else if( _T("header" == sCommand || "footer" == sCommand || "headerl") == sCommand || else if( _T("header") == sCommand || _T("footer") == sCommand || _T("headerl") == sCommand ||
_T("headerr" == sCommand || "headerf" == sCommand || "footerl") == sCommand || _T("headerr") == sCommand || _T("headerf") == sCommand || _T("footerl") == sCommand ||
_T("footerr" == sCommand || "footerf") == sCommand ) _T("footerr") == sCommand || _T("footerf") == sCommand )
{ {
ParagraphReader oParagraphReader(sCommand, oReader); ParagraphReader oParagraphReader(sCommand, oReader);
oAbstrReader.StartSubReader( oParagraphReader, oDocument, oReader ); oAbstrReader.StartSubReader( oParagraphReader, oDocument, oReader );
...@@ -3326,8 +3327,8 @@ public: ...@@ -3326,8 +3327,8 @@ public:
RtfMathPropReader oMathPropReader; RtfMathPropReader oMathPropReader;
return StartSubReader( oMathPropReader, oDocument, oReader ); return StartSubReader( oMathPropReader, oDocument, oReader );
} }
else if( _T("ftnsep" == sCommand || "ftnsepc") == sCommand || else if( _T("ftnsep") == sCommand || _T("ftnsepc") == sCommand ||
_T("aftnsep" == sCommand || "aftnsepc") == sCommand ) _T("aftnsep")== sCommand || _T("aftnsepc") == sCommand )
{ {
ParagraphReader oParagraphReader(sCommand, oReader); ParagraphReader oParagraphReader(sCommand, oReader);
StartSubReader( oParagraphReader, oDocument, oReader ); StartSubReader( oParagraphReader, oDocument, oReader );
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include <atlbase.h> #include <atlbase.h>
#include <atlstr.h> #include <atlstr.h>
#else #else
#include "../../Common/DocxFormat/Source/Base/ASCString.h" #include "../../../../Common/DocxFormat/Source/Base/ASCString.h"
#endif #endif
class IdGenerator class IdGenerator
...@@ -143,4 +143,4 @@ public: ...@@ -143,4 +143,4 @@ public:
else else
return pPair->second; return pPair->second;
} }
}; };
\ No newline at end of file
...@@ -162,7 +162,7 @@ bool OOXParagraphReader::Parse2( ReaderParameter oParam , RtfParagraph& oOutputP ...@@ -162,7 +162,7 @@ bool OOXParagraphReader::Parse2( ReaderParameter oParam , RtfParagraph& oOutputP
RtfCharPtr oNewChar( new RtfChar() ); RtfCharPtr oNewChar( new RtfChar() );
oNewChar->m_bRtfEncode = false; oNewChar->m_bRtfEncode = false;
CString sFieldText; CString sFieldText;
sFieldText.AppendFormat(_T("HYPERLINK \"%ls\""), sTarget ); sFieldText.AppendFormat(_T("HYPERLINK \"%ls\""), sTarget.GetBuffer() );
oNewChar->setText( sFieldText ); oNewChar->setText( sFieldText );
RtfParagraphPtr oNewInsertParagraph( new RtfParagraph() ); RtfParagraphPtr oNewInsertParagraph( new RtfParagraph() );
oNewInsertParagraph->AddItem( oNewChar ); oNewInsertParagraph->AddItem( oNewChar );
...@@ -716,7 +716,7 @@ bool OOXRunReader::Parse( ReaderParameter oParam , RtfParagraph& oOutputParagrap ...@@ -716,7 +716,7 @@ bool OOXRunReader::Parse( ReaderParameter oParam , RtfParagraph& oOutputParagrap
int nFontSize = 10; int nFontSize = 10;
if( PROP_DEF != oNewProperty.m_nFontSize ) if( PROP_DEF != oNewProperty.m_nFontSize )
nFontSize = oNewProperty.m_nFontSize / 2; nFontSize = oNewProperty.m_nFontSize / 2;
sFieldText.AppendFormat(_T("SYMBOL %d \\\\f \"%ls\" \\\\s %d"), nChar, sFont, nFontSize ); sFieldText.AppendFormat(_T("SYMBOL %d \\\\f \"%ls\" \\\\s %d"), nChar, sFont.GetBuffer(), nFontSize );
oNewChar->setText( sFieldText ); oNewChar->setText( sFieldText );
RtfParagraphPtr oNewInsertParagraph( new RtfParagraph() ); RtfParagraphPtr oNewInsertParagraph( new RtfParagraph() );
oNewInsertParagraph->AddItem( oNewChar ); oNewInsertParagraph->AddItem( oNewChar );
......
...@@ -111,7 +111,7 @@ public: ...@@ -111,7 +111,7 @@ public:
int res = file_inp.OpenFile(sPath); int res = file_inp.OpenFile(sPath);
if (res != S_OK) return false; if (res != S_OK) return false;
res = file_out.CreateFileW(sTargetFile); res = file_out.CreateFile(sTargetFile);
if (res != S_OK) return false; if (res != S_OK) return false;
DWORD dwBytesRead = 0; DWORD dwBytesRead = 0;
...@@ -169,4 +169,4 @@ public: ...@@ -169,4 +169,4 @@ public:
return true; return true;
} }
}; };
\ No newline at end of file
...@@ -44,7 +44,7 @@ CString RtfBookmarkStart::RenderToOOX(RenderParameter oRenderParameter) ...@@ -44,7 +44,7 @@ CString RtfBookmarkStart::RenderToOOX(RenderParameter oRenderParameter)
sResult.AppendFormat(_T(" w:colFirst =\"%d\""), nID); sResult.AppendFormat(_T(" w:colFirst =\"%d\""), nID);
if( PROP_DEF != nLastColumn ) if( PROP_DEF != nLastColumn )
sResult.AppendFormat(_T(" w:colLast =\"%d\""), nID); sResult.AppendFormat(_T(" w:colLast =\"%d\""), nID);
sResult.AppendFormat(_T(" w:name =\"%ls\""), Utils::PrepareToXML( m_sName ) ); sResult.AppendFormat(_T(" w:name =\"%ls\""), Utils::PrepareToXML( m_sName ).GetBuffer() );
sResult.Append(_T("/>")); sResult.Append(_T("/>"));
return sResult; return sResult;
} }
...@@ -111,7 +111,7 @@ CString RtfFootnote::RenderToOOX(RenderParameter oRenderParameter) ...@@ -111,7 +111,7 @@ 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 ); sResult.AppendFormat( _T("<w:rPr>%ls</w:rPr>"), srPr.GetBuffer() );
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,10 +126,10 @@ CString RtfFootnote::RenderToOOX(RenderParameter oRenderParameter) ...@@ -126,10 +126,10 @@ 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 ); sResult.AppendFormat( _T("<w:rPr>%ls</w:rPr>"), srPr.GetBuffer() );
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>") );
} }
return sResult; return sResult;
} }
\ No newline at end of file
#include "RtfChar.h" #include "RtfChar.h"
#include "RtfDocument.h" #include "RtfDocument.h"
CString RtfChar::renderRtfText( CString& sText, void* poDocument, RtfCharProperty* oCharProperty ) CString RtfChar::renderRtfText( CString& sText, void* poDocument, RtfCharProperty* oCharProperty )
{ {
RtfDocument* oDocument = static_cast<RtfDocument*>(poDocument); RtfDocument* oDocument = static_cast<RtfDocument*>(poDocument);
CString sResult; CString sResult;
int nCodePage = -1; int nCodePage = -1;
//применяем параметры codepage от текущего шрифта todo associated fonts. //применяем параметры codepage от текущего шрифта todo associated fonts.
RtfFont oFont; //todooo разобраться со шрифтами и их подбором
if( NULL != oCharProperty && true == oDocument->m_oFontTable.GetFont( oCharProperty->m_nFont, oFont ) ) RtfFont oFont;
{ if( NULL != oCharProperty && true == oDocument->m_oFontTable.GetFont( oCharProperty->m_nFont, oFont ) )
if( PROP_DEF != oFont.m_nCharset ) {
nCodePage = RtfUtility::CharsetToCodepage( oFont.m_nCharset ); if( PROP_DEF != oFont.m_nCharset )
else if( PROP_DEF != oFont.m_nCodePage ) nCodePage = RtfUtility::CharsetToCodepage( oFont.m_nCharset );
nCodePage = oFont.m_nCodePage; else if( PROP_DEF != oFont.m_nCodePage )
} nCodePage = oFont.m_nCodePage;
}
//от настроек документа //от настроек документа
if( -1 == nCodePage && RtfDocumentProperty::cp_none != oDocument->m_oProperty.m_eCodePage ) if( -1 == nCodePage && RtfDocumentProperty::cp_none != oDocument->m_oProperty.m_eCodePage )
{ {
switch ( oDocument->m_oProperty.m_eCodePage ) switch ( oDocument->m_oProperty.m_eCodePage )
{ {
case RtfDocumentProperty::cp_ansi: case RtfDocumentProperty::cp_ansi:
{ {
if( PROP_DEF != oDocument->m_oProperty.m_nAnsiCodePage ) if( PROP_DEF != oDocument->m_oProperty.m_nAnsiCodePage )
nCodePage = oDocument->m_oProperty.m_nAnsiCodePage; nCodePage = oDocument->m_oProperty.m_nAnsiCodePage;
else else
nCodePage = CP_ACP; nCodePage = CP_ACP;
break; break;
} }
case RtfDocumentProperty::cp_mac: nCodePage = CP_MACCP;break; case RtfDocumentProperty::cp_mac: nCodePage = CP_MACCP;break;
case RtfDocumentProperty::cp_pc: nCodePage = 437;break; case RtfDocumentProperty::cp_pc: nCodePage = 437;break;
case RtfDocumentProperty::cp_pca: nCodePage = 850;break; case RtfDocumentProperty::cp_pca: nCodePage = 850;break;
} }
} }
//если ничего нет ставим ANSI //если ничего нет ставим ANSI
if( -1 == nCodePage ) if( -1 == nCodePage )
nCodePage = CP_ACP; nCodePage = CP_ACP;
//делаем Ansi строку //todooo проверить !!!!!
int nBufSize = ::WideCharToMultiByte(nCodePage, 0, sText, -1, NULL, 0, NULL, NULL); //делаем Ansi строку
CStringA sTempResultAnsi; std::wstring unicodeStr(sText.GetBuffer());
LPSTR pcBuffer = sTempResultAnsi.GetBuffer(nBufSize);
::WideCharToMultiByte(nCodePage, 0, sText, -1, pcBuffer, nBufSize, NULL, NULL);
sTempResultAnsi.ReleaseBuffer();
//делаем обратное преобразование чтобы понять какие символы свонвертировались неправильно
nBufSize = ::MultiByteToWideChar(nCodePage, 0, sTempResultAnsi, -1, NULL, 0);
CStringW sTempResultUni;
LPWSTR pwBuffer = sTempResultUni.GetBuffer(nBufSize);
::MultiByteToWideChar(nCodePage, 0, sTempResultAnsi, -1, pwBuffer, nBufSize);
sTempResultUni.ReleaseBuffer();
for( int i = 0; i < sTempResultUni.GetLength() && i < sText.GetLength() ; i++ ) std::string ansiStr(unicodeStr.begin(), unicodeStr.end());
{
bool bWriteUnicode = true; //делаем обратное преобразование чтобы понять какие символы свонвертировались неправильно
if( sTempResultUni[i] == sText[i] )
{ std::wstring unicodeStrBack(ansiStr.begin(), ansiStr.end());
CString sUniChar; sUniChar.AppendChar( sText[i] );
for( int i = 0; i < unicodeStr.length() && i < unicodeStrBack.length() ; i++ )
//делаем Ansi строку {
int nBufSize = ::WideCharToMultiByte(nCodePage, 0, sUniChar, -1, NULL, 0, NULL, NULL); bool bWriteUnicode = true;
CStringA sTempAnsiChars;
LPSTR pcBuffer = sTempAnsiChars.GetBuffer(nBufSize); if( unicodeStrBack[i] == unicodeStr[i] )
::WideCharToMultiByte(nCodePage, 0, sUniChar, -1, pcBuffer, nBufSize, NULL, NULL); {
sTempAnsiChars.ReleaseBuffer(); CString sUniChar; sUniChar.AppendChar( unicodeStr[i] );
for( int k = 0; k < sTempAnsiChars.GetLength(); k++ )
{ //делаем Ansi строку sUniChar
unsigned char nCharCode = sTempAnsiChars[k]; // -> sTempAnsiChars
bWriteUnicode = false; std::string sTempAnsiChars(unicodeStr.begin()+i, unicodeStr.begin() + i + 1);
//if (nCharCode == '\n') {
// sResult.Append(_T("\\line")); for( int k = 0; k < sTempAnsiChars.length(); k++ )
//} else if (nCharCode == '\r') { {
// // ignore '\r' unsigned char nCharCode = sTempAnsiChars[k];
//} else if (nCharCode == '\t') { bWriteUnicode = false;
// sResult.Append(_T("\\tab"));
//} else if (nCharCode <= 0xff) { if (nCharCode == 0x5c || nCharCode == 0x7b || nCharCode == 0x7d)
if (nCharCode == 0x5c || nCharCode == 0x7b || nCharCode == 0x7d) { {
sResult.AppendFormat( _T("\\'%x"), nCharCode ); sResult.AppendFormat( _T("\\'%x"), nCharCode );
} else if (0x00 <= nCharCode && nCharCode - 1 < 0x10) { } else if (0x00 <= nCharCode && nCharCode - 1 < 0x10)
sResult.AppendFormat(_T("\\'0%x"), nCharCode - 1 ); {
} else if (0x10 <= nCharCode - 1 && nCharCode < 0x20) { sResult.AppendFormat(_T("\\'0%x"), nCharCode - 1 );
sResult.AppendFormat(_T("\\'%x"), nCharCode - 1 ); } else if (0x10 <= nCharCode - 1 && nCharCode < 0x20)
} else if ( 0x20 <= nCharCode && nCharCode < 0x80 ) { {
sResult.AppendChar( nCharCode ); sResult.AppendFormat(_T("\\'%x"), nCharCode - 1 );
} else { // 0x80 <= nUnicode <= 0xff } else if ( 0x20 <= nCharCode && nCharCode < 0x80 )
sResult.AppendFormat( _T("\\'%x"), nCharCode ); {
} sResult.AppendChar( nCharCode );
} } else { // 0x80 <= nUnicode <= 0xff
} sResult.AppendFormat( _T("\\'%x"), nCharCode );
if( true == bWriteUnicode ) }
{ }
int nUnicode = (int)sText[i]; }
if (0 < nUnicode && nUnicode <= 0x8000) { if( true == bWriteUnicode )
sResult.AppendFormat(_T("\\u%d*"),nUnicode); {
} else if (0x8000 < nUnicode && nUnicode <= 0xffff) { int nUnicode = (int)unicodeStr[i];
sResult.AppendFormat(_T("\\u%d*"),nUnicode - 0x10000);
} else { if (0 < nUnicode && nUnicode <= 0x8000)
sResult.Append(_T("\\u9633*")); {
} sResult.AppendFormat(_T("\\u%d*"),nUnicode);
} } else if (0x8000 < nUnicode && nUnicode <= 0xffff) {
sResult.AppendFormat(_T("\\u%d*"),nUnicode - 0x10000);
} } else {
return sResult; sResult.Append(_T("\\u9633*"));
} }
}
}
return sResult;
}
...@@ -276,60 +276,66 @@ private: CString renderTextToXML( CString sParam ) ...@@ -276,60 +276,66 @@ private: CString renderTextToXML( CString sParam )
{ {
CString sResult; CString sResult;
if( _T("Text") == sParam ) if( _T("Text") == sParam )
sResult.AppendFormat( _T("<w:t xml:space= \"preserve\">%ls</w:t>"), Utils::PrepareToXML( m_sChars ) ); {
sResult.AppendFormat( _T("<w:t xml:space= \"preserve\">%ls</w:t>"), Utils::PrepareToXML( m_sChars ).GetBuffer() );
}
else if( _T("Math") == sParam ) else if( _T("Math") == sParam )
sResult.AppendFormat( _T("<m:t xml:space= \"preserve\">%ls</m:t>"), Utils::PrepareToXML( m_sChars )); {
sResult.AppendFormat( _T("<m:t xml:space= \"preserve\">%ls</m:t>"), Utils::PrepareToXML( m_sChars ).GetBuffer());
}
return sResult; return sResult;
} }
public:
CString RenderToOOX(RenderParameter oRenderParameter)
{
CString sResult;
if(RENDER_TO_OOX_PARAM_RUN == oRenderParameter.nType)
{
sResult.Append(_T("<w:r>"));
sResult.Append(_T("<w:rPr>"));
sResult.Append( m_oProperty.RenderToOOX(oRenderParameter) );
sResult.Append(_T("</w:rPr>"));
sResult.Append( renderTextToXML(_T("Text")) );
sResult.Append(_T("</w:r>"));
}
else if(RENDER_TO_OOX_PARAM_TEXT == oRenderParameter.nType)
sResult = renderTextToXML( _T("Text") );
else if( RENDER_TO_OOX_PARAM_MATH == oRenderParameter.nType)
sResult = renderTextToXML( _T("Math") );
else if( RENDER_TO_OOX_PARAM_PLAIN == oRenderParameter.nType)
sResult = m_sChars;
return sResult;
}
public: CString RenderToOOX(RenderParameter oRenderParameter) static CString renderRtfText( CString& sText, void* poDocument, RtfCharProperty* oCharProperty = NULL );
{
CString sResult; CString RenderToRtf(RenderParameter oRenderParameter)
if(RENDER_TO_OOX_PARAM_RUN == oRenderParameter.nType) {
{ CString result;
sResult.Append(_T("<w:r>")); if( RENDER_TO_RTF_PARAM_CHAR == oRenderParameter.nType )
sResult.Append(_T("<w:rPr>")); {
sResult.Append( m_oProperty.RenderToOOX(oRenderParameter) ); if( true == m_bRtfEncode )
sResult.Append(_T("</w:rPr>")); result.Append( renderRtfText( m_sChars, oRenderParameter.poDocument, &m_oProperty ) );
sResult.Append( renderTextToXML(_T("Text")) ); else
sResult.Append(_T("</w:r>")); result.Append( m_sChars );
} }
else if(RENDER_TO_OOX_PARAM_TEXT == oRenderParameter.nType) else
sResult = renderTextToXML( _T("Text") ); {
else if( RENDER_TO_OOX_PARAM_MATH == oRenderParameter.nType) CString sText;
sResult = renderTextToXML( _T("Math") ); if( true == m_bRtfEncode )
else if( RENDER_TO_OOX_PARAM_PLAIN == oRenderParameter.nType) sText = renderRtfText( m_sChars, oRenderParameter.poDocument, &m_oProperty );
sResult = m_sChars; else
return sResult; sText = m_sChars;
} if( _T("") != sText )
public: static CString renderRtfText( CString& sText, void* poDocument, RtfCharProperty* oCharProperty = NULL ); {
public: CString RenderToRtf(RenderParameter oRenderParameter) result.Append(_T("{"));
{ result.Append( m_oProperty.RenderToRtf( oRenderParameter ) );
CString result; result.Append( _T(" ") + sText );
if( RENDER_TO_RTF_PARAM_CHAR == oRenderParameter.nType ) result.Append(_T("}"));
{ }
if( true == m_bRtfEncode ) }
result.Append( renderRtfText( m_sChars, oRenderParameter.poDocument, &m_oProperty ) ); return result;
else }
result.Append( m_sChars );
}
else
{
CString sText;
if( true == m_bRtfEncode )
sText = renderRtfText( m_sChars, oRenderParameter.poDocument, &m_oProperty );
else
sText = m_sChars;
if( _T("") != sText )
{
result.Append(_T("{"));
result.Append( m_oProperty.RenderToRtf( oRenderParameter ) );
result.Append( _T(" ") + sText );
result.Append(_T("}"));
}
}
return result;
}
}; };
class RtfCharNative : public RtfChar class RtfCharNative : public RtfChar
{ {
...@@ -355,4 +361,4 @@ public: CString RenderToRtf(RenderParameter oRenderParameter) ...@@ -355,4 +361,4 @@ public: CString RenderToRtf(RenderParameter oRenderParameter)
} }
}; };
typedef boost::shared_ptr<RtfCharNative> RtfCharNativePtr; typedef boost::shared_ptr<RtfCharNative> RtfCharNativePtr;
typedef boost::shared_ptr<RtfChar> RtfCharPtr; typedef boost::shared_ptr<RtfChar> RtfCharPtr;
\ No newline at end of file
...@@ -2,7 +2,11 @@ ...@@ -2,7 +2,11 @@
const long g_cdMaxPercent = 1000000; const long g_cdMaxPercent = 1000000;
#define PROP_DEF INT_MIN #ifdef INT_MIN
#define PROP_DEF INT_MIN
#else
#define PROP_DEF (-0x7FFFFFFF-1)
#endif
#define RTF_MAX 1 #define RTF_MAX 1
#define RTF_MID 2 #define RTF_MID 2
......
...@@ -179,10 +179,11 @@ public: CString RenderToRtf(RenderParameter oRenderParameter) ...@@ -179,10 +179,11 @@ public: CString RenderToRtf(RenderParameter oRenderParameter)
if( true == m_bReferenceToEndnote ) if( true == m_bReferenceToEndnote )
sResult.Append( _T("\\fldalt") ); sResult.Append( _T("\\fldalt") );
if( false == m_sData.IsEmpty() ) if( false == m_sData.IsEmpty() )
sResult.AppendFormat( _T("{\\*\\datafield %ls}"), m_sData); sResult.AppendFormat( _T("{\\*\\datafield %ls}"), m_sData.GetBuffer());
sResult.Append(_T("}")); sResult.Append(_T("}"));
sResult.AppendFormat(_T("{\\fldrslt %ls}"), m_oResult->RenderToRtf( oRenderParameter ) ); CString str = m_oResult->RenderToRtf( oRenderParameter ) ;
sResult.AppendFormat(_T("{\\fldrslt %ls}"), str.GetBuffer());
sResult.Append(_T("}")); sResult.Append(_T("}"));
return sResult; return sResult;
} }
...@@ -206,7 +207,7 @@ public: CString RenderToOOX(RenderParameter oRenderParameter) ...@@ -206,7 +207,7 @@ public: CString RenderToOOX(RenderParameter oRenderParameter)
{ {
//оставляем только одну ссылку //оставляем только одну ссылку
CString sHyperlink = sInsertText; CString sHyperlink = sInsertText;
sHyperlink.Delete( nIndex, (int)_tcslen( _T("HYPERLINK") ) ); sHyperlink.Delete( nIndex, 9/*(int)_tcslen( _T("HYPERLINK") )*/ );
sHyperlink.Remove( '\"' ); sHyperlink.Remove( '\"' );
sHyperlink.Trim(); sHyperlink.Trim();
//заменяем пробелы на %20 //заменяем пробелы на %20
...@@ -216,7 +217,7 @@ public: CString RenderToOOX(RenderParameter oRenderParameter) ...@@ -216,7 +217,7 @@ public: CString RenderToOOX(RenderParameter oRenderParameter)
OOXRelsWriter* poRelsWriter = static_cast<OOXRelsWriter*>( oRenderParameter.poRels ); OOXRelsWriter* poRelsWriter = static_cast<OOXRelsWriter*>( oRenderParameter.poRels );
CString sId = poRelsWriter->AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"), Utils::PrepareToXML( sHyperlink ), false ); CString sId = poRelsWriter->AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"), Utils::PrepareToXML( sHyperlink ), false );
//добавляем гиперссылку в документ //добавляем гиперссылку в документ
sResult.AppendFormat( _T("<w:hyperlink r:id=\"%ls\" >"), sId ); sResult.AppendFormat( _T("<w:hyperlink r:id=\"%ls\" >"), sId.GetBuffer() );
oNewParam.nType = RENDER_TO_OOX_PARAM_RUN; oNewParam.nType = RENDER_TO_OOX_PARAM_RUN;
sResult.Append(m_oResult->RenderToOOX(oNewParam)); sResult.Append(m_oResult->RenderToOOX(oNewParam));
sResult.Append( _T("</w:hyperlink>") ); sResult.Append( _T("</w:hyperlink>") );
...@@ -228,7 +229,9 @@ public: CString RenderToOOX(RenderParameter oRenderParameter) ...@@ -228,7 +229,9 @@ public: CString RenderToOOX(RenderParameter oRenderParameter)
RenderParameter oNewParametr = oRenderParameter; RenderParameter oNewParametr = oRenderParameter;
oNewParametr.nType = RENDER_TO_OOX_PARAM_PLAIN; oNewParametr.nType = RENDER_TO_OOX_PARAM_PLAIN;
//sResult.Append(_T("<w:r>")); //sResult.Append(_T("<w:r>"));
sResult.AppendFormat(_T("<w:fldSimple w:instr=\"%ls\">"), Utils::PrepareToXML( m_oInsert->RenderToOOX(oNewParametr) ).Trim() );
CString str = Utils::PrepareToXML( m_oInsert->RenderToOOX(oNewParametr) ).Trim();
sResult.AppendFormat(_T("<w:fldSimple w:instr=\"%ls\">"), str.GetBuffer() );
RenderParameter oNewParam = oRenderParameter; RenderParameter oNewParam = oRenderParameter;
oNewParam.nType = RENDER_TO_OOX_PARAM_RUN; oNewParam.nType = RENDER_TO_OOX_PARAM_RUN;
sResult.Append(m_oResult->RenderToOOX(oNewParam)); sResult.Append(m_oResult->RenderToOOX(oNewParam));
...@@ -241,7 +244,10 @@ public: CString RenderToOOX(RenderParameter oRenderParameter) ...@@ -241,7 +244,10 @@ public: CString RenderToOOX(RenderParameter oRenderParameter)
RenderParameter oNewParametr = oRenderParameter; RenderParameter oNewParametr = oRenderParameter;
oNewParametr.nType = RENDER_TO_OOX_PARAM_PLAIN; oNewParametr.nType = RENDER_TO_OOX_PARAM_PLAIN;
sResult.Append(_T("<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>")); sResult.Append(_T("<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>"));
sResult.AppendFormat(_T("<w:r><w:instrText xml:space=\"preserve\">%ls</w:instrText></w:r>"), Utils::PrepareToXML( m_oInsert->RenderToOOX(oNewParametr) ));
CString str = Utils::PrepareToXML( m_oInsert->RenderToOOX(oNewParametr) );
sResult.AppendFormat(_T("<w:r><w:instrText xml:space=\"preserve\">%ls</w:instrText></w:r>"), str.GetBuffer());
sResult.Append(_T("<w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>")); sResult.Append(_T("<w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>"));
//заканчиваем этот параграф //заканчиваем этот параграф
sResult.Append(_T("</w:p>")); sResult.Append(_T("</w:p>"));
...@@ -288,4 +294,4 @@ typedef boost::shared_ptr<RtfField> RtfFieldPtr; ...@@ -288,4 +294,4 @@ typedef boost::shared_ptr<RtfField> RtfFieldPtr;
typedef boost::shared_ptr<OOXFieldBegin> OOXFieldBeginPtr; typedef boost::shared_ptr<OOXFieldBegin> OOXFieldBeginPtr;
typedef boost::shared_ptr<OOXFieldInsertText> OOXFieldInsertTextPtr; typedef boost::shared_ptr<OOXFieldInsertText> OOXFieldInsertTextPtr;
typedef boost::shared_ptr<OOXFieldSeparate> OOXFieldSeparatePtr; typedef boost::shared_ptr<OOXFieldSeparate> OOXFieldSeparatePtr;
typedef boost::shared_ptr<OOXFieldEnd> OOXFieldEndPtr; typedef boost::shared_ptr<OOXFieldEnd> OOXFieldEndPtr;
\ No newline at end of file
...@@ -23,7 +23,7 @@ CString RtfFontTable::RenderToRtf(RenderParameter oRenderParameter) ...@@ -23,7 +23,7 @@ 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 )); sResult.AppendFormat(_T("%ls"),m_aArray[i].RenderToRtf( oNewParameter ).GetBuffer());
sResult.Append(_T("}")); sResult.Append(_T("}"));
} }
return sResult; return sResult;
...@@ -73,4 +73,4 @@ CString RtfListOverrideTable::RenderToOOX(RenderParameter oRenderParameter) ...@@ -73,4 +73,4 @@ CString RtfListOverrideTable::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append( poDocument->m_aOldLists[i]->RenderToOOX( oNewParam ) ); sResult.Append( poDocument->m_aOldLists[i]->RenderToOOX( oNewParam ) );
} }
return sResult; return sResult;
} }
\ No newline at end of file
...@@ -114,7 +114,10 @@ public: ...@@ -114,7 +114,10 @@ public:
RenderParameter oNewParameter = oRenderParameter; RenderParameter oNewParameter = oRenderParameter;
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++ )
sResult.AppendFormat(_T("%ls"),m_aArray[i].RenderToRtf( oNewParameter )); {
CString str = m_aArray[i].RenderToRtf( oNewParameter );
sResult.AppendFormat(_T("%ls"), str.GetBuffer());
}
sResult.Append(_T("}")); sResult.Append(_T("}"));
} }
return sResult; return sResult;
...@@ -212,7 +215,10 @@ public: ...@@ -212,7 +215,10 @@ public:
{ {
sResult.Append(_T("{\\stylesheet")); sResult.Append(_T("{\\stylesheet"));
for( int i = 0; i < (int)m_aArray.size(); i++ ) for( int i = 0; i < (int)m_aArray.size(); i++ )
sResult.AppendFormat(_T("%ls\n\n"),m_aArray[i]->RenderToRtf( oRenderParameter )); {
CString str = m_aArray[i]->RenderToRtf( oRenderParameter );
sResult.AppendFormat(_T("%ls\n\n"), str.GetBuffer());
}
sResult.Append(_T("}")); sResult.Append(_T("}"));
} }
return sResult; return sResult;
...@@ -341,11 +347,16 @@ public: ...@@ -341,11 +347,16 @@ public:
{ {
sResult.Append(_T("{\\*\\listpicture") ); sResult.Append(_T("{\\*\\listpicture") );
for( int i = 0; i < (int)m_aPictureList.GetCount(); i++ ) for( int i = 0; i < (int)m_aPictureList.GetCount(); i++ )
{
sResult.Append( m_aPictureList[i]->RenderToRtf( oRenderParameter ) ); sResult.Append( m_aPictureList[i]->RenderToRtf( oRenderParameter ) );
}
sResult.Append(_T("}") ); sResult.Append(_T("}") );
} }
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( oRenderParameter ) ); {
CString str = m_aArray[i].RenderToRtf( oRenderParameter );
sResult.AppendFormat(_T("{%ls}"), str.GetBuffer() );
}
sResult.Append(_T("}")); sResult.Append(_T("}"));
} }
return sResult; return sResult;
...@@ -372,10 +383,13 @@ public: ...@@ -372,10 +383,13 @@ 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++)
sResult.AppendFormat(_T("{%ls}"), m_aArray[i].RenderToRtf( oRenderParameter ) ); {
CString str = m_aArray[i].RenderToRtf( oRenderParameter );
sResult.AppendFormat(_T("{%ls}"), str.GetBuffer() );
}
sResult.Append(_T("}")); sResult.Append(_T("}"));
} }
return sResult; return sResult;
} }
CString RenderToOOX(RenderParameter oRenderParameter); CString RenderToOOX(RenderParameter oRenderParameter);
}; };
\ No newline at end of file
...@@ -11,8 +11,8 @@ ...@@ -11,8 +11,8 @@
class StringStream class StringStream
{ {
private: private:
LONGLONG m_nSizeAbs;//размер файла LONG64 m_nSizeAbs;//размер файла
LONGLONG m_nPosAbs;//позиция в файле LONG64 m_nPosAbs;//позиция в файле
//CStringA m_sBuffer; //CStringA m_sBuffer;
unsigned char* m_aBuffer; unsigned char* m_aBuffer;
...@@ -52,11 +52,11 @@ public: ...@@ -52,11 +52,11 @@ public:
dwBytesRead = srcFile.GetPosition(); dwBytesRead = srcFile.GetPosition();
srcFile.CloseFile(); srcFile.CloseFile();
} }
void getBytes( int nCount, byte** pbData ) void getBytes( int nCount, BYTE** pbData )
{ {
if( m_nPosAbs + nCount < m_nSizeAbs ) if( m_nPosAbs + nCount < m_nSizeAbs )
{ {
(*pbData) = new byte[nCount]; (*pbData) = new BYTE[nCount];
memcpy( (*pbData), (m_aBuffer + m_nPosAbs + 1), nCount); memcpy( (*pbData), (m_aBuffer + m_nPosAbs + 1), nCount);
m_nPosAbs += nCount; m_nPosAbs += nCount;
} }
...@@ -97,11 +97,11 @@ public: ...@@ -97,11 +97,11 @@ public:
m_nSizeAbs += nExtBufSize; m_nSizeAbs += nExtBufSize;
} }
LONGLONG getCurPosition() LONG64 getCurPosition()
{ {
return m_nPosAbs; return m_nPosAbs;
} }
LONGLONG getSize() LONG64 getSize()
{ {
return m_nSizeAbs; return m_nSizeAbs;
} }
...@@ -121,11 +121,12 @@ public: ...@@ -121,11 +121,12 @@ public:
{ {
m_oFileWriter = NULL; m_oFileWriter = NULL;
m_nReadBufSize = 1024 * 1024 * 5; // 5мб m_nReadBufSize = 1024 * 1024 * 5; // 5мб
m_caReadBuffer = (char*)::HeapAlloc(GetProcessHeap(), 0, m_nReadBufSize); m_caReadBuffer = (char*)new char[m_nReadBufSize];
} }
~RtfLex() ~RtfLex()
{ {
RELEASEHEAP( m_caReadBuffer ); if (m_caReadBuffer) delete []m_caReadBuffer;
m_caReadBuffer = NULL;
RELEASEOBJECT( m_oFileWriter ); RELEASEOBJECT( m_oFileWriter );
} }
double GetProgress() double GetProgress()
...@@ -144,7 +145,7 @@ public: ...@@ -144,7 +145,7 @@ public:
{ {
return m_oCurToken; return m_oCurToken;
} }
void ReadBytes( int nCount, byte** pbData ) void ReadBytes( int nCount, BYTE** pbData )
{ {
m_oStream.getBytes(nCount, pbData); m_oStream.getBytes(nCount, pbData);
} }
...@@ -214,7 +215,7 @@ private: ...@@ -214,7 +215,7 @@ private:
if(c == '\\' || c == '{' || c == '}') if(c == '\\' || c == '{' || c == '}')
{ {
token.Type = RtfToken::Text; token.Type = RtfToken::Text;
token.Key = CStringA((TCHAR)c); token.Key = (char)c;
} }
else if( c > 0 && c <= 31 ) else if( c > 0 && c <= 31 )
{ {
...@@ -296,7 +297,7 @@ private: ...@@ -296,7 +297,7 @@ private:
c = m_oStream.getc(); c = m_oStream.getc();
m_oStream.ungetc(); m_oStream.ungetc();
} }
parametroInt = _ttol(parametroStr); parametroInt = _wtoi(parametroStr.GetBuffer());
if (negativo) if (negativo)
parametroInt = -parametroInt; parametroInt = -parametroInt;
......
...@@ -82,7 +82,7 @@ public: ...@@ -82,7 +82,7 @@ public:
if( RENDER_TO_RTF_PARAM_NESTED != oRenderParameter.nType ) if( RENDER_TO_RTF_PARAM_NESTED != oRenderParameter.nType )
sResult.Append(_T("{\\mmath")); sResult.Append(_T("{\\mmath"));
sResult.AppendFormat(_T("{\\%ls"), m_sRtfName); sResult.AppendFormat(_T("{\\%ls"), m_sRtfName.GetBuffer());
RenderParameter oNewParameter = oRenderParameter; RenderParameter oNewParameter = oRenderParameter;
oNewParameter.nType = RENDER_TO_RTF_PARAM_UNKNOWN; oNewParameter.nType = RENDER_TO_RTF_PARAM_UNKNOWN;
...@@ -107,7 +107,7 @@ public: ...@@ -107,7 +107,7 @@ public:
sResult.Append(_T("}")); sResult.Append(_T("}"));
if( RENDER_TO_RTF_PARAM_NESTED != oRenderParameter.nType ) if( RENDER_TO_RTF_PARAM_NESTED != oRenderParameter.nType )
sResult.AppendFormat(_T("}"), m_sRtfName); sResult.AppendFormat(_T("}"), m_sRtfName.GetBuffer());
return sResult; return sResult;
} }
CString RenderToOOX(RenderParameter oRenderParameter) CString RenderToOOX(RenderParameter oRenderParameter)
...@@ -139,4 +139,4 @@ public: ...@@ -139,4 +139,4 @@ public:
} }
}; };
typedef boost::shared_ptr<RtfMath> RtfMathPtr; typedef boost::shared_ptr<RtfMath> RtfMathPtr;
\ No newline at end of file
...@@ -27,7 +27,7 @@ CString RtfOldList::RenderToOOX(RenderParameter oRenderParameter) ...@@ -27,7 +27,7 @@ CString RtfOldList::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append(_T("<w:lvl w:ilvl=\"0\">")); sResult.Append(_T("<w:lvl w:ilvl=\"0\">"));
sResult.Append(_T("<w:numFmt w:val=\"bullet\"/>")); sResult.Append(_T("<w:numFmt w:val=\"bullet\"/>"));
if( false == sText.IsEmpty() ) if( false == sText.IsEmpty() )
sResult.AppendFormat(_T("<w:lvlText w:val=\"%ls\"/>"), Utils::PrepareToXML( sText ) ); sResult.AppendFormat(_T("<w:lvlText w:val=\"%ls\"/>"), Utils::PrepareToXML( sText ).GetBuffer() );
else else
{ {
sResult.Append(_T("<w:lvlText w:val=\"") ); sResult.Append(_T("<w:lvlText w:val=\"") );
...@@ -35,9 +35,9 @@ CString RtfOldList::RenderToOOX(RenderParameter oRenderParameter) ...@@ -35,9 +35,9 @@ CString RtfOldList::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append(_T("\"/>") ); sResult.Append(_T("\"/>") );
} }
if( false == sParProp.IsEmpty() ) if( false == sParProp.IsEmpty() )
sResult.AppendFormat(_T("<w:pPr>%ls</w:pPr>"), sParProp ); sResult.AppendFormat(_T("<w:pPr>%ls</w:pPr>"), sParProp.GetBuffer() );
if( false == sCharProp.IsEmpty() ) if( false == sCharProp.IsEmpty() )
sResult.AppendFormat(_T("<w:rPr>%ls</w:rPr>"), sCharProp ); sResult.AppendFormat(_T("<w:rPr>%ls</w:rPr>"), sCharProp.GetBuffer() );
if( lj_none != m_eLevelJust ) if( lj_none != m_eLevelJust )
{ {
switch( m_eLevelJust ) switch( m_eLevelJust )
...@@ -93,4 +93,4 @@ bool RtfOldList::operator==( const RtfOldList& oOldList ) ...@@ -93,4 +93,4 @@ bool RtfOldList::operator==( const RtfOldList& oOldList )
if( sText1 != sText2 ) if( sText1 != sText2 )
return false; return false;
return true; return true;
} }
\ No newline at end of file
...@@ -45,16 +45,16 @@ CString RtfOle::RenderToOOXOnlyOle(RenderParameter oRenderParameter) ...@@ -45,16 +45,16 @@ CString RtfOle::RenderToOOXOnlyOle(RenderParameter oRenderParameter)
case ot_link: sResult.Append( _T(" Type=\"Link\"") );break; case ot_link: sResult.Append( _T(" Type=\"Link\"") );break;
default: sResult.Append( _T(" Type=\"Embed\"") );break; default: sResult.Append( _T(" Type=\"Embed\"") );break;
} }
sResult.AppendFormat( _T(" ProgID=\"%ls\""), m_sOleClass ); sResult.AppendFormat( _T(" ProgID=\"%ls\""), m_sOleClass.GetBuffer() );
sResult.AppendFormat( _T(" ShapeID=\"_x0000_s%d\""), poDocument->GetShapeId( oRenderParameter.nValue ) ); sResult.AppendFormat( _T(" ShapeID=\"_x0000_s%d\""), poDocument->GetShapeId( oRenderParameter.nValue ) );
sResult.Append( _T(" DrawAspect=\"Content\"") ); sResult.Append( _T(" DrawAspect=\"Content\"") );
sResult.AppendFormat( _T(" ObjectID=\"%ls\""), poDocument->m_oIdGenerator.Generate_OleId() ); sResult.AppendFormat( _T(" ObjectID=\"%ls\""), poDocument->m_oIdGenerator.Generate_OleId().GetBuffer() );
CString sExtension = _T("bin"); CString sExtension = _T("bin");
CString sMime = _T("application/vnd.openxmlformats-officedocument.oleObject"); CString sMime = _T("application/vnd.openxmlformats-officedocument.oleObject");
CString sFilenameRels; CString sFilenameRels;
sFilenameRels.AppendFormat( _T("oleObject%d.%ls"), poDocument->m_oIdGenerator.Generate_OleIndex(), sExtension); sFilenameRels.AppendFormat( _T("oleObject%d.%ls"), poDocument->m_oIdGenerator.Generate_OleIndex(), sExtension.GetBuffer());
CString sFilenameFull = poOOXWriter->m_sTargetFolder + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR + _T("embeddings"); CString sFilenameFull = poOOXWriter->m_sTargetFolder + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR + _T("embeddings");
...@@ -66,34 +66,8 @@ CString RtfOle::RenderToOOXOnlyOle(RenderParameter oRenderParameter) ...@@ -66,34 +66,8 @@ CString RtfOle::RenderToOOXOnlyOle(RenderParameter oRenderParameter)
Utils::CopyDirOrFile( m_sOleFilename, sFilenameFull ); Utils::CopyDirOrFile( m_sOleFilename, sFilenameFull );
poOOXWriter->m_oContentTypes.AddExtension( sMime, sExtension); poOOXWriter->m_oContentTypes.AddExtension( sMime, sExtension);
CString srId = poRelsWriter->AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject"), sFilenameRels); CString srId = poRelsWriter->AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject"), sFilenameRels);
sResult.AppendFormat( _T(" r:id=\"%ls\""), srId ); sResult.AppendFormat( _T(" r:id=\"%ls\""), srId.GetBuffer() );
sResult.Append( _T("/>") ); sResult.Append( _T("/>") );
return sResult; return sResult;
} }
DWORD CALLBACK OleGet1(POLE::Stream *pStream, void FAR* pTarget, DWORD dwRead)
{
RtfOle1ToOle2Stream* piStream = static_cast<RtfOle1ToOle2Stream*>(pStream);
if( piStream->nCurPos + (int)dwRead > piStream->nBufferSize )
return 0;
memcpy( pTarget, (piStream->pBuffer + piStream->nCurPos) , dwRead );
piStream->nCurPos += dwRead;
return dwRead;
}
DWORD CALLBACK OlePut1(POLE::Stream *pStream, const void FAR* pTarget, DWORD dwRead)
{
return 0;
}
DWORD CALLBACK OleGet2(POLE::Stream *pStream, void FAR* pTarget, DWORD dwRead)
{
return 0;
}
DWORD CALLBACK OlePut2(POLE::Stream *pStream, const void FAR* pTarget, DWORD dwWrite)
{
RtfOle2ToOle1Stream* piStream = static_cast<RtfOle2ToOle1Stream*>(pStream);
BYTE* pSource = (BYTE*)pTarget;
for( int i = 0; i < (int)dwWrite; i++ )
piStream->aBuffer.push_back( pSource[i] );
return dwWrite;
}
\ No newline at end of file
...@@ -29,8 +29,8 @@ public: ...@@ -29,8 +29,8 @@ public:
} }
bool IsValid() bool IsValid()
{ {
return PROP_DEF != m_nWidth && PROP_DEF != m_nHeight return PROP_DEF != m_nWidth && PROP_DEF != m_nHeight && _T("") != m_sOleFilename;
&& ::GetFileAttributes( m_sOleFilename ) != DWORD( -1 ) && _T("") != m_sOleFilename; /*&& ::GetFileAttributes( m_sOleFilename ) != DWORD( -1 )*/
} }
CString RenderToRtf(RenderParameter oRenderParameter) CString RenderToRtf(RenderParameter oRenderParameter)
{ {
...@@ -48,13 +48,18 @@ public: ...@@ -48,13 +48,18 @@ public:
} }
RENDER_RTF_INT( m_nWidth, sResult, _T("objw") ); RENDER_RTF_INT( m_nWidth, sResult, _T("objw") );
RENDER_RTF_INT( m_nHeight, sResult, _T("objh") ); RENDER_RTF_INT( m_nHeight, sResult, _T("objh") );
if( _T("") != m_sOleClass )
sResult.AppendFormat( _T("{\\*\\objclass %ls}"), m_sOleClass ); if( _T("") != m_sOleClass )
sResult.AppendFormat( _T("{\\*\\objclass %ls}"), m_sOleClass.GetBuffer() );
if( _T("") != m_sOleFilename ) if( _T("") != m_sOleFilename )
sResult.AppendFormat( _T("{\\*\\objdata %ls}"), RtfInternalEncoder::Encode( m_sOleFilename ) ); {
CString str = RtfUtility::RtfInternalEncoder::Encode( m_sOleFilename );
sResult.AppendFormat( _T("{\\*\\objdata %ls}"), str.GetBuffer() );
}
if( NULL != m_oResultPic ) if( NULL != m_oResultPic )
{ {
sResult.AppendFormat( _T("{\\result \\pard\\plain%ls}"), m_oResultPic->RenderToRtf( oRenderParameter ) ); CString str = m_oResultPic->RenderToRtf( oRenderParameter );
sResult.AppendFormat( _T("{\\result \\pard\\plain%ls}"), str.GetBuffer() );
} }
sResult.Append( _T("}") ); sResult.Append( _T("}") );
return sResult; return sResult;
...@@ -101,7 +106,7 @@ struct RtfOle2ToOle1Stream : POLE::Stream ...@@ -101,7 +106,7 @@ struct RtfOle2ToOle1Stream : POLE::Stream
{ {
std::vector<BYTE> aBuffer; std::vector<BYTE> aBuffer;
}; };
DWORD CALLBACK OleGet1(POLE::Stream* oStream, void FAR* pTarget, DWORD dwRead);; //DWORD CALLBACK OleGet1(POLE::Stream* oStream, void FAR* pTarget, DWORD dwRead);;
DWORD CALLBACK OlePut1(POLE::Stream*, const void FAR*, DWORD); //DWORD CALLBACK OlePut1(POLE::Stream*, const void FAR*, DWORD);
DWORD CALLBACK OleGet2(POLE::Stream* oStream, void FAR* pTarget, DWORD dwRead);; //DWORD CALLBACK OleGet2(POLE::Stream* oStream, void FAR* pTarget, DWORD dwRead);;
DWORD CALLBACK OlePut2(POLE::Stream*, const void FAR*, DWORD); //DWORD CALLBACK OlePut2(POLE::Stream*, const void FAR*, DWORD);
\ No newline at end of file
...@@ -32,7 +32,7 @@ CString RtfPicture::GenerateWMF(RenderParameter oRenderParameter) ...@@ -32,7 +32,7 @@ CString RtfPicture::GenerateWMF(RenderParameter oRenderParameter)
//сохраняем в темповую директорию и загружаем файл как текст //сохраняем в темповую директорию и загружаем файл как текст
RtfWriter * poWriter = static_cast<RtfWriter*>( oRenderParameter.poWriter ); RtfWriter * poWriter = static_cast<RtfWriter*>( oRenderParameter.poWriter );
IUnknown* piTempPict = NULL; //IUnknown* piTempPict = NULL;
//todooo ??? переписать //todooo ??? переписать
//if( true == LoadPicture( &piTempPict, m_sPicFilename ) ) //if( true == LoadPicture( &piTempPict, m_sPicFilename ) )
...@@ -44,7 +44,7 @@ CString RtfPicture::GenerateWMF(RenderParameter oRenderParameter) ...@@ -44,7 +44,7 @@ CString RtfPicture::GenerateWMF(RenderParameter oRenderParameter)
// sResult.Append( RtfInternalEncoder::Encode( sTempFile ) ); // sResult.Append( RtfInternalEncoder::Encode( sTempFile ) );
// } // }
//} //}
RELEASEINTERFACE( piTempPict ); //RELEASEINTERFACE( piTempPict );
sResult.Append(_T("}")); sResult.Append(_T("}"));
return sResult; return sResult;
...@@ -82,7 +82,7 @@ CString RtfPicture::RenderToRtf(RenderParameter oRenderParameter) ...@@ -82,7 +82,7 @@ CString RtfPicture::RenderToRtf(RenderParameter oRenderParameter)
} }
sResult.Append( _T(" ")); sResult.Append( _T(" "));
sResult.Append( RtfInternalEncoder::Encode( m_sPicFilename ) ); sResult.Append( RtfUtility::RtfInternalEncoder::Encode( m_sPicFilename ) );
sResult.Append(_T("}")); sResult.Append(_T("}"));
return sResult; return sResult;
...@@ -107,7 +107,7 @@ CString RtfPicture::RenderToOOX(RenderParameter oRenderParameter) ...@@ -107,7 +107,7 @@ CString RtfPicture::RenderToOOX(RenderParameter oRenderParameter)
} }
CString sFilenameRels; CString sFilenameRels;
sFilenameRels.AppendFormat( _T("Image%d.%ls"), poRtfDocument->m_oIdGenerator.Generate_ImageIndex(), sExtension); sFilenameRels.AppendFormat( _T("Image%d.%ls"), poRtfDocument->m_oIdGenerator.Generate_ImageIndex(), sExtension.GetBuffer());
CString sFilenameFull = poOOXWriter->m_sTargetFolder + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR +_T("media"); CString sFilenameFull = poOOXWriter->m_sTargetFolder + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR +_T("media");
FileSystem::Directory::CreateDirectory( sFilenameFull ); FileSystem::Directory::CreateDirectory( sFilenameFull );
...@@ -197,4 +197,4 @@ CString RtfPicture::RenderToOOX(RenderParameter oRenderParameter) ...@@ -197,4 +197,4 @@ CString RtfPicture::RenderToOOX(RenderParameter oRenderParameter)
// //piImageFile->SaveImage2( &m_piPicture, IMAGEFORMAT_PNG, bstrFilePath); // //piImageFile->SaveImage2( &m_piPicture, IMAGEFORMAT_PNG, bstrFilePath);
// //SysFreeString( bstrFilePath ); // //SysFreeString( bstrFilePath );
// return true; // return true;
//} //}
\ No newline at end of file
...@@ -89,9 +89,8 @@ public: ...@@ -89,9 +89,8 @@ public:
{ {
BYTE pBuffer[ 16 ]; BYTE pBuffer[ 16 ];
DWORD dwBytesRead = 0; DWORD dwBytesRead = 0;
HANDLE hFile;
CFile file; CFile file;
if (file.OpenFile(sFilename) != S_OK) return dt_none; if (file.OpenFile(sFilename) != S_OK) return dt_none;
file.ReadFile(pBuffer, 16); file.ReadFile(pBuffer, 16);
...@@ -135,4 +134,4 @@ public: ...@@ -135,4 +134,4 @@ public:
return dt_none; return dt_none;
} }
}; };
typedef boost::shared_ptr<RtfPicture> RtfPicturePtr; typedef boost::shared_ptr<RtfPicture> RtfPicturePtr;
\ No newline at end of file
...@@ -42,13 +42,13 @@ CString RtfFont::RenderToRtf(RenderParameter oRenderParameter) ...@@ -42,13 +42,13 @@ CString RtfFont::RenderToRtf(RenderParameter oRenderParameter)
RENDER_RTF_INT( m_nPitch, sResult, _T("fprq") ) RENDER_RTF_INT( m_nPitch, sResult, _T("fprq") )
if( _T("") != m_sPanose ) if( _T("") != m_sPanose )
sResult.AppendFormat(_T("{\\*\\panose %ls}"),m_sPanose); sResult.AppendFormat(_T("{\\*\\panose %ls}"),m_sPanose.GetBuffer());
RENDER_RTF_INT( m_nCodePage, sResult, _T("cpg") ) RENDER_RTF_INT( m_nCodePage, sResult, _T("cpg") )
RtfCharProperty oFontNameCharProp; RtfCharProperty oFontNameCharProp;
sResult.AppendFormat(_T(" %ls"), RtfChar::renderRtfText( m_sName, oRenderParameter.poDocument, &oFontNameCharProp )); sResult.AppendFormat(_T(" %ls"), RtfChar::renderRtfText( m_sName, oRenderParameter.poDocument, &oFontNameCharProp ).GetBuffer());
if( _T("") != m_sAltName ) if( _T("") != m_sAltName )
sResult.AppendFormat(_T("{\\*\\falt %ls}"), RtfChar::renderRtfText( m_sAltName, oRenderParameter.poDocument ) ); sResult.AppendFormat(_T("{\\*\\falt %ls}"), RtfChar::renderRtfText( m_sAltName, oRenderParameter.poDocument ).GetBuffer() );
//важно //важно
sResult.AppendFormat(_T(";")); sResult.AppendFormat(_T(";"));
sResult.AppendFormat(_T("}")); sResult.AppendFormat(_T("}"));
...@@ -88,7 +88,7 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter) ...@@ -88,7 +88,7 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter)
case ft_fbiminor: sTag = _T("cs");break; case ft_fbiminor: sTag = _T("cs");break;
} }
if( _T("") != sTag ) if( _T("") != sTag )
sResult.AppendFormat(_T("<%ls typeface=\"%ls\"/>"), sTag, Utils::PrepareToXML( sFontName ) ); sResult.AppendFormat(_T("<%ls typeface=\"%ls\"/>"), sTag.GetBuffer(), Utils::PrepareToXML( sFontName ).GetBuffer() );
} }
else if( RENDER_TO_OOX_PARAM_MAJOR_FONT == oRenderParameter.nType ) else if( RENDER_TO_OOX_PARAM_MAJOR_FONT == oRenderParameter.nType )
{ {
...@@ -101,15 +101,15 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter) ...@@ -101,15 +101,15 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter)
case ft_fbimajor: sTag = _T("cs");break; case ft_fbimajor: sTag = _T("cs");break;
} }
if( _T("") != sTag ) if( _T("") != sTag )
sResult.AppendFormat(_T("<%ls typeface=\"%ls\"/>"), sTag, Utils::PrepareToXML( sFontName )); sResult.AppendFormat(_T("<%ls typeface=\"%ls\"/>"), sTag.GetBuffer(), Utils::PrepareToXML( sFontName ).GetBuffer());
} }
else if( RENDER_TO_OOX_PARAM_FONTTABLE == oRenderParameter.nType ) else if( RENDER_TO_OOX_PARAM_FONTTABLE == oRenderParameter.nType )
{ {
sResult.AppendFormat(_T("<w:font w:name=\"%ls\">"), Utils::PrepareToXML( sFontName ) ); sResult.AppendFormat(_T("<w:font w:name=\"%ls\">"), Utils::PrepareToXML( sFontName ).GetBuffer() );
if( _T("") != m_sAltName ) if( _T("") != m_sAltName )
sResult.AppendFormat(_T("<w:altName w:val=\"%ls\" />"), Utils::PrepareToXML( m_sAltName )); sResult.AppendFormat(_T("<w:altName w:val=\"%ls\" />"), Utils::PrepareToXML( m_sAltName ).GetBuffer());
if( _T("") != m_sPanose ) if( _T("") != m_sPanose )
sResult.AppendFormat(_T("<w:panose1 w:val=\"%ls\" />"),m_sPanose); sResult.AppendFormat(_T("<w:panose1 w:val=\"%ls\" />"),m_sPanose.GetBuffer());
CString sFamily = _T(""); CString sFamily = _T("");
switch( m_eFontFamily ) switch( m_eFontFamily )
...@@ -124,9 +124,9 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter) ...@@ -124,9 +124,9 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter)
case ff_fbidi:sFamily = _T("auto");break; case ff_fbidi:sFamily = _T("auto");break;
} }
if( _T("") != sFamily ) if( _T("") != sFamily )
sResult.AppendFormat(_T("<w:family w:val=\"%ls\" />"),sFamily); sResult.AppendFormat(_T("<w:family w:val=\"%ls\" />"),sFamily.GetBuffer());
if( PROP_DEF != m_nCharset ) if( PROP_DEF != m_nCharset )
sResult.AppendFormat(_T("<w:charset w:val=\"%ls\" />"), Convert::ToStringHex( m_nCharset, 2 )); sResult.AppendFormat(_T("<w:charset w:val=\"%ls\" />"), Convert::ToStringHex( m_nCharset, 2 ).GetBuffer());
if( PROP_DEF != m_nPitch ) if( PROP_DEF != m_nPitch )
{ {
...@@ -137,7 +137,7 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter) ...@@ -137,7 +137,7 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter)
case 1: sPitch = _T("fixed");break; case 1: sPitch = _T("fixed");break;
case 2: sPitch = _T("variable");break; case 2: sPitch = _T("variable");break;
} }
sResult.AppendFormat(_T("<w:pitch w:val=\"%ls\" />"),sPitch); sResult.AppendFormat(_T("<w:pitch w:val=\"%ls\" />"),sPitch.GetBuffer());
} }
//важно //важно
...@@ -148,7 +148,8 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter) ...@@ -148,7 +148,8 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter)
RtfFont oCurFont; RtfFont oCurFont;
if( true == poRtfDocument->m_oFontTable.GetFont(m_nID,oCurFont) ) if( true == poRtfDocument->m_oFontTable.GetFont(m_nID,oCurFont) )
{ {
sResult.AppendFormat(_T("<w:rFonts w:ascii=\"%ls\" w:eastAsia=\"%ls\" w:hAnsi=\"%ls\" w:cs=\"%ls\"/>"), sFontName, sFontName, sFontName, sFontName); sResult.AppendFormat(_T("<w:rFonts w:ascii=\"%ls\" w:eastAsia=\"%ls\" w:hAnsi=\"%ls\" w:cs=\"%ls\"/>"),
sFontName.GetBuffer(), sFontName.GetBuffer(), sFontName.GetBuffer(), sFontName.GetBuffer());
} }
} }
} }
...@@ -212,11 +213,11 @@ CString RtfColor::RenderToOOX(RenderParameter oRenderParameter) ...@@ -212,11 +213,11 @@ CString RtfColor::RenderToOOX(RenderParameter oRenderParameter)
} }
else if( RENDER_TO_OOX_PARAM_COLOR_TAG == oRenderParameter.nType ) else if( RENDER_TO_OOX_PARAM_COLOR_TAG == oRenderParameter.nType )
{ {
sResult.AppendFormat( _T("<w:color %ls/>"),WriteOOXAttribute(oRenderParameter.sValue) ); sResult.AppendFormat( _T("<w:color %ls/>"),WriteOOXAttribute(oRenderParameter.sValue).GetBuffer() );
} }
else else
{ {
sResult.AppendFormat( _T("<w:color w:val=\"%ls\"/>"),ToHexColor() ); sResult.AppendFormat( _T("<w:color w:val=\"%ls\"/>"),ToHexColor().GetBuffer());
} }
return sResult; return sResult;
} }
...@@ -359,13 +360,13 @@ CString RtfShading::RenderToOOX(RenderParameter oRenderParameter) ...@@ -359,13 +360,13 @@ CString RtfShading::RenderToOOX(RenderParameter oRenderParameter)
{ {
RtfColor oForeColor; RtfColor oForeColor;
if( true == poRtfDocument->m_oColorTable.GetColor( m_nForeColor, oForeColor ) ) if( true == poRtfDocument->m_oColorTable.GetColor( m_nForeColor, oForeColor ) )
sShading.AppendFormat( _T(" w:color=\"%ls\""), oForeColor.RenderToOOX(oNewParam)); sShading.AppendFormat( _T(" w:color=\"%ls\""), oForeColor.RenderToOOX(oNewParam).GetBuffer());
} }
if( PROP_DEF != m_nBackColor ) if( PROP_DEF != m_nBackColor )
{ {
RtfColor oBackColor; RtfColor oBackColor;
if( true == poRtfDocument->m_oColorTable.GetColor( m_nBackColor, oBackColor ) ) if( true == poRtfDocument->m_oColorTable.GetColor( m_nBackColor, oBackColor ) )
sShading.AppendFormat( _T(" w:fill=\"%ls\""), oBackColor.RenderToOOX(oNewParam)); sShading.AppendFormat( _T(" w:fill=\"%ls\""), oBackColor.RenderToOOX(oNewParam).GetBuffer());
} }
if( PROP_DEF != m_nValue ) if( PROP_DEF != m_nValue )
{ {
...@@ -491,7 +492,7 @@ CString RtfBorder::RenderToOOX(RenderParameter oRenderParameter) ...@@ -491,7 +492,7 @@ CString RtfBorder::RenderToOOX(RenderParameter oRenderParameter)
RenderParameter oNewParam = oRenderParameter; RenderParameter oNewParam = oRenderParameter;
oNewParam.nType = RENDER_TO_OOX_PARAM_COLOR_VALUE; oNewParam.nType = RENDER_TO_OOX_PARAM_COLOR_VALUE;
if( true == poRtfDocument->m_oColorTable.GetColor( m_nColor, oColor ) ) if( true == poRtfDocument->m_oColorTable.GetColor( m_nColor, oColor ) )
sResult.AppendFormat( _T(" w:color=\"%ls\""), oColor.RenderToOOX(oNewParam) ); sResult.AppendFormat( _T(" w:color=\"%ls\""), oColor.RenderToOOX(oNewParam).GetBuffer() );
} }
if( PROP_DEF != m_nWidth ) //w:sz 1/8 twips (equivalent to 1/576th of an inch) if( PROP_DEF != m_nWidth ) //w:sz 1/8 twips (equivalent to 1/576th of an inch)
sResult.AppendFormat( _T(" w:sz=\"%d\""), 2 * m_nWidth / 5 ); sResult.AppendFormat( _T(" w:sz=\"%d\""), 2 * m_nWidth / 5 );
...@@ -643,13 +644,13 @@ CString RtfCharProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -643,13 +644,13 @@ CString RtfCharProperty::RenderToOOX(RenderParameter oRenderParameter)
if( PROP_DEF != m_nFitText ) if( PROP_DEF != m_nFitText )
if( -1 == m_nFitText ) if( -1 == m_nFitText )
{ {
sResult.AppendFormat(_T("<w:fitText w:id=\"%d\" w:val=\"%d\" />"),poOOXWriter->nCurFitId,poOOXWriter->nCurFitWidth); sResult.AppendFormat(_T("<w:fitText w:id=\"%d\" w:val=\"%d\" />"),poOOXWriter->nCurFitId.GetBuffer(), poOOXWriter->nCurFitWidth);
} }
else else
{ {
poOOXWriter->nCurFitId = poRtfDocument->m_oIdGenerator.Generate_FitTextId(); poOOXWriter->nCurFitId = poRtfDocument->m_oIdGenerator.Generate_FitTextId();
poOOXWriter->nCurFitWidth = m_nFitText; poOOXWriter->nCurFitWidth = m_nFitText;
sResult.AppendFormat(_T("<w:fitText w:id=\"%d\" w:val=\"%d\" />"),poOOXWriter->nCurFitId,poOOXWriter->nCurFitWidth); sResult.AppendFormat(_T("<w:fitText w:id=\"%d\" w:val=\"%d\" />"),poOOXWriter->nCurFitId.GetBuffer(), poOOXWriter->nCurFitWidth);
} }
if( PROP_DEF == m_nFont ) if( PROP_DEF == m_nFont )
m_nFont = poRtfDocument->m_oProperty.m_nDeffFont; m_nFont = poRtfDocument->m_oProperty.m_nDeffFont;
...@@ -685,7 +686,7 @@ CString RtfCharProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -685,7 +686,7 @@ CString RtfCharProperty::RenderToOOX(RenderParameter oRenderParameter)
RtfColor oCurColor; RtfColor oCurColor;
if( true == poRtfDocument->m_oColorTable.GetColor( m_nHightlited, oCurColor ) ) if( true == poRtfDocument->m_oColorTable.GetColor( m_nHightlited, oCurColor ) )
{ {
sResult.AppendFormat(_T("<w:highlight w:val=\"%ls\" />"), oCurColor.GetHighLight() ); sResult.AppendFormat(_T("<w:highlight w:val=\"%ls\" />"), oCurColor.GetHighLight().GetBuffer());
} }
} }
...@@ -715,24 +716,24 @@ CString RtfCharProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -715,24 +716,24 @@ CString RtfCharProperty::RenderToOOX(RenderParameter oRenderParameter)
{ {
switch( m_eUnderStyle ) switch( m_eUnderStyle )
{ {
case uls_Single: sResult.AppendFormat(_T("<w:u %ls w:val=\"single\"/>"),sUnderColor);break; case uls_Single: sResult.AppendFormat(_T("<w:u %ls w:val=\"single\"/>"),sUnderColor.GetBuffer());break;
case uls_Dotted: sResult.AppendFormat(_T("<w:u %ls w:val=\"dotted\"/>"),sUnderColor);break; case uls_Dotted: sResult.AppendFormat(_T("<w:u %ls w:val=\"dotted\"/>"),sUnderColor.GetBuffer());break;
case uls_Dashed: sResult.AppendFormat(_T("<w:u %ls w:val=\"dash\"/>"),sUnderColor);break; case uls_Dashed: sResult.AppendFormat(_T("<w:u %ls w:val=\"dash\"/>"),sUnderColor.GetBuffer());break;
case uls_Dash_dotted: sResult.AppendFormat(_T("<w:u %ls w:val=\"dotDash\"/>"),sUnderColor);break; case uls_Dash_dotted: sResult.AppendFormat(_T("<w:u %ls w:val=\"dotDash\"/>"),sUnderColor.GetBuffer());break;
case uls_Dash_dot_dotted: sResult.AppendFormat(_T("<w:u %ls w:val=\"dotDotDash\"/>"),sUnderColor);break; case uls_Dash_dot_dotted: sResult.AppendFormat(_T("<w:u %ls w:val=\"dotDotDash\"/>"),sUnderColor.GetBuffer());break;
case uls_Double: sResult.AppendFormat(_T("<w:u %ls w:val=\"double\"/>"),sUnderColor);break; case uls_Double: sResult.AppendFormat(_T("<w:u %ls w:val=\"double\"/>"),sUnderColor.GetBuffer());break;
case uls_Heavy_wave: sResult.AppendFormat(_T("<w:u %ls w:val=\"wavyHeavy\"/>"),sUnderColor);break; case uls_Heavy_wave: sResult.AppendFormat(_T("<w:u %ls w:val=\"wavyHeavy\"/>"),sUnderColor.GetBuffer());break;
case uls_Long_dashe: sResult.AppendFormat(_T("<w:u %ls w:val=\"dashLong\"/>"),sUnderColor);break; case uls_Long_dashe: sResult.AppendFormat(_T("<w:u %ls w:val=\"dashLong\"/>"),sUnderColor.GetBuffer());break;
case uls_Stops_all: sResult.AppendFormat(_T("<w:u %ls w:val=\"single\"/>"),sUnderColor);break;//todo case uls_Stops_all: sResult.AppendFormat(_T("<w:u %ls w:val=\"single\"/>"),sUnderColor.GetBuffer());break;//todo
case uls_Thick: sResult.AppendFormat(_T("<w:u %ls w:val=\"thick\"/>"),sUnderColor);break; case uls_Thick: sResult.AppendFormat(_T("<w:u %ls w:val=\"thick\"/>"),sUnderColor.GetBuffer());break;
case uls_Thick_dotted: sResult.AppendFormat(_T("<w:u %ls w:val=\"dottedHeavy\"/>"),sUnderColor);break; case uls_Thick_dotted: sResult.AppendFormat(_T("<w:u %ls w:val=\"dottedHeavy\"/>"),sUnderColor.GetBuffer());break;
case uls_Thick_dashed: sResult.AppendFormat(_T("<w:u %ls w:val=\"dashedHeavy\"/>"),sUnderColor);break; case uls_Thick_dashed: sResult.AppendFormat(_T("<w:u %ls w:val=\"dashedHeavy\"/>"),sUnderColor.GetBuffer());break;
case uls_Thick_dash_dotted: sResult.AppendFormat(_T("<w:u %ls w:val=\"dashDotHeavy\"/>"),sUnderColor);break; case uls_Thick_dash_dotted: sResult.AppendFormat(_T("<w:u %ls w:val=\"dashDotHeavy\"/>"),sUnderColor.GetBuffer());break;
case uls_Thick_dash_dot_dotted: sResult.AppendFormat(_T("<w:u %ls w:val=\"dashDotDotHeavy\"/>"),sUnderColor);break; case uls_Thick_dash_dot_dotted: sResult.AppendFormat(_T("<w:u %ls w:val=\"dashDotDotHeavy\"/>"),sUnderColor.GetBuffer());break;
case uls_Thick_long_dashed: sResult.AppendFormat(_T("<w:u %ls w:val=\"dashLongHeavy\"/>"),sUnderColor);break; case uls_Thick_long_dashed: sResult.AppendFormat(_T("<w:u %ls w:val=\"dashLongHeavy\"/>"),sUnderColor.GetBuffer());break;
case uls_Double_wave: sResult.AppendFormat(_T("<w:u %ls w:val=\"wavyDouble\"/>"),sUnderColor);break; case uls_Double_wave: sResult.AppendFormat(_T("<w:u %ls w:val=\"wavyDouble\"/>"),sUnderColor.GetBuffer());break;
case uls_Word: sResult.AppendFormat(_T("<w:u %ls w:val=\"words\"/>"),sUnderColor);break; case uls_Word: sResult.AppendFormat(_T("<w:u %ls w:val=\"words\"/>"),sUnderColor.GetBuffer());break;
case uls_Wave: sResult.AppendFormat(_T("<w:u %ls w:val=\"wave\"/>"),sUnderColor);break; case uls_Wave: sResult.AppendFormat(_T("<w:u %ls w:val=\"wave\"/>"),sUnderColor.GetBuffer());break;
} }
} }
...@@ -760,8 +761,8 @@ CString RtfListLevelProperty::RenderToRtf(RenderParameter oRenderParameter) ...@@ -760,8 +761,8 @@ CString RtfListLevelProperty::RenderToRtf(RenderParameter oRenderParameter)
//чтобы при последующем чтении из rtf не потерялась информация о шрифте //чтобы при последующем чтении из rtf не потерялась информация о шрифте
sResult.Append( m_oCharProp.RenderToRtf( oRenderParameter ) ); sResult.Append( m_oCharProp.RenderToRtf( oRenderParameter ) );
sResult.AppendFormat( _T("{\\leveltext %ls;}"), RtfChar::renderRtfText( m_sText, oRenderParameter.poDocument, &m_oCharProp ) ); sResult.AppendFormat( _T("{\\leveltext %ls;}"), RtfChar::renderRtfText( m_sText, oRenderParameter.poDocument, &m_oCharProp ).GetBuffer() );
sResult.AppendFormat(_T("{\\levelnumbers %ls;}"), RtfChar::renderRtfText( m_sNumber, oRenderParameter.poDocument, &m_oCharProp ) ); sResult.AppendFormat(_T("{\\levelnumbers %ls;}"), RtfChar::renderRtfText( m_sNumber, oRenderParameter.poDocument, &m_oCharProp ).GetBuffer() );
RENDER_RTF_INT( m_nFirstIndent, sResult, _T("fi") ) RENDER_RTF_INT( m_nFirstIndent, sResult, _T("fi") )
RENDER_RTF_INT( m_nIndent, sResult, _T("li") ) RENDER_RTF_INT( m_nIndent, sResult, _T("li") )
...@@ -809,8 +810,8 @@ CString RtfListLevelProperty::RenderToOOX2(RenderParameter oRenderParameter, int ...@@ -809,8 +810,8 @@ CString RtfListLevelProperty::RenderToOOX2(RenderParameter oRenderParameter, int
if( 1 == m_nLegal) if( 1 == m_nLegal)
sResult.Append(_T("<w:isLgl />")); sResult.Append(_T("<w:isLgl />"));
sResult.AppendFormat( _T("<w:lvlText w:val=\"%ls\"/>"), GetLevelTextOOX() ); sResult.AppendFormat( _T("<w:lvlText w:val=\"%ls\"/>"), GetLevelTextOOX().GetBuffer() );
sResult.AppendFormat(_T("<w:numFmt w:val=\"%ls\" />"), GetFormat(m_nNumberType) ); sResult.AppendFormat(_T("<w:numFmt w:val=\"%ls\" />"), GetFormat(m_nNumberType).GetBuffer() );
RENDER_OOX_INT( m_nPictureIndex, sResult, _T("w:lvlPicBulletId") ) RENDER_OOX_INT( m_nPictureIndex, sResult, _T("w:lvlPicBulletId") )
RENDER_OOX_INT( m_nStart, sResult, _T("w:start") ) RENDER_OOX_INT( m_nStart, sResult, _T("w:start") )
if( PROP_DEF != m_nFollow ) if( PROP_DEF != m_nFollow )
...@@ -835,19 +836,19 @@ CString RtfListLevelProperty::RenderToOOX2(RenderParameter oRenderParameter, int ...@@ -835,19 +836,19 @@ CString RtfListLevelProperty::RenderToOOX2(RenderParameter oRenderParameter, int
RENDER_OOX_INT_ATTRIBUTE( m_nIndent, sIndent, _T("w:left") ) RENDER_OOX_INT_ATTRIBUTE( m_nIndent, sIndent, _T("w:left") )
RENDER_OOX_INT_ATTRIBUTE( m_nIndentStart, sIndent, _T("w:start") ) RENDER_OOX_INT_ATTRIBUTE( m_nIndentStart, sIndent, _T("w:start") )
if( false == sIndent.IsEmpty() ) if( false == sIndent.IsEmpty() )
spPr.AppendFormat(_T("<w:ind %ls/>"), sIndent); spPr.AppendFormat(_T("<w:ind %ls/>"), sIndent.GetBuffer());
spPr.Append( m_oTabs.RenderToOOX( oRenderParameter ) ); spPr.Append( m_oTabs.RenderToOOX( oRenderParameter ) );
if( false == spPr.IsEmpty() ) if( false == spPr.IsEmpty() )
sResult.AppendFormat(_T("<w:pPr>%ls</w:pPr>"), spPr); sResult.AppendFormat(_T("<w:pPr>%ls</w:pPr>"), spPr.GetBuffer());
CString srPr; CString srPr;
RenderParameter oNewParam = oRenderParameter; RenderParameter oNewParam = oRenderParameter;
oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN; oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
srPr.Append( m_oCharProp.RenderToOOX(oNewParam) ); srPr.Append( m_oCharProp.RenderToOOX(oNewParam) );
if( false == srPr.IsEmpty() ) if( false == srPr.IsEmpty() )
sResult.AppendFormat(_T("<w:rPr>%ls</w:rPr>"), srPr); sResult.AppendFormat(_T("<w:rPr>%ls</w:rPr>"), srPr.GetBuffer());
sResult.Append(_T("</w:lvl>")); sResult.Append(_T("</w:lvl>"));
} }
...@@ -869,7 +870,7 @@ CString RtfListProperty::RenderToRtf(RenderParameter oRenderParameter) ...@@ -869,7 +870,7 @@ CString RtfListProperty::RenderToRtf(RenderParameter oRenderParameter)
for( int i = 0; i < (int)m_aArray.size(); i++ ) for( int i = 0; i < (int)m_aArray.size(); i++ )
sResult.Append( m_aArray[i].RenderToRtf( oRenderParameter ) ); sResult.Append( m_aArray[i].RenderToRtf( oRenderParameter ) );
sResult.AppendFormat(_T("{\\listname %ls;}"), RtfChar::renderRtfText( m_sName, oRenderParameter.poDocument )); sResult.AppendFormat(_T("{\\listname %ls;}"), RtfChar::renderRtfText( m_sName, oRenderParameter.poDocument ).GetBuffer());
RENDER_RTF_INT( m_nID, sResult, _T("listid") ) RENDER_RTF_INT( m_nID, sResult, _T("listid") )
return sResult; return sResult;
} }
...@@ -887,7 +888,7 @@ CString RtfListProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -887,7 +888,7 @@ CString RtfListProperty::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append(_T("<w:multiLevelType w:val=\"multilevel\" />")); sResult.Append(_T("<w:multiLevelType w:val=\"multilevel\" />"));
if( false == m_sName.IsEmpty() ) if( false == m_sName.IsEmpty() )
sResult.AppendFormat(_T("<w:name w:val=\"%ls\" />"), Utils::PrepareToXML( m_sName ) ); sResult.AppendFormat(_T("<w:name w:val=\"%ls\" />"), Utils::PrepareToXML( m_sName ).GetBuffer() );
//if( false == m_nStyleName ) //if( false == m_nStyleName )
//{ //{
// sResult.AppendFormat(_T("<w:name w:val=\"%ls\" />"), Utils::PrepareToXML( m_sName ) ); // sResult.AppendFormat(_T("<w:name w:val=\"%ls\" />"), Utils::PrepareToXML( m_sName ) );
...@@ -948,14 +949,14 @@ CString RtfStyle::RenderToOOXBegin(RenderParameter oRenderParameter) ...@@ -948,14 +949,14 @@ CString RtfStyle::RenderToOOXBegin(RenderParameter oRenderParameter)
case stSection : sType = _T("numbering");break; case stSection : sType = _T("numbering");break;
case stTable :sType = _T("table"); break; case stTable :sType = _T("table"); break;
} }
sResult.AppendFormat(_T("<w:style w:type=\"%ls\" w:styleId=\"%ls\">"), sType, Utils::PrepareToXML( m_sName ) );//Todo sResult.AppendFormat(_T("<w:style w:type=\"%ls\" w:styleId=\"%ls\">"), sType.GetBuffer(), Utils::PrepareToXML( m_sName ).GetBuffer() );//Todo
sResult.AppendFormat(_T("<w:name w:val=\"%ls\"/>"), Utils::PrepareToXML( m_sName ) ); sResult.AppendFormat(_T("<w:name w:val=\"%ls\"/>"), Utils::PrepareToXML( m_sName ).GetBuffer() );
if( PROP_DEF != m_nBasedOn ) if( PROP_DEF != m_nBasedOn )
{ {
RtfStylePtr oBaseStyle; RtfStylePtr oBaseStyle;
if( true == poDocument->m_oStyleTable.GetStyle( m_nBasedOn, oBaseStyle ) ) if( true == poDocument->m_oStyleTable.GetStyle( m_nBasedOn, oBaseStyle ) )
sResult.AppendFormat(_T("<w:basedOn w:val=\"%ls\"/>"), Utils::PrepareToXML( oBaseStyle->m_sName ));//Todo sResult.AppendFormat(_T("<w:basedOn w:val=\"%ls\"/>"), Utils::PrepareToXML( oBaseStyle->m_sName ).GetBuffer());//Todo
} }
//if( PROP_DEF != m_nNext ) //if( PROP_DEF != m_nNext )
// sResult.AppendFormat(_T("<w:next w:val=\"%ls\"/>"), Utils::PrepareToXML( m_sName ));//Todo // sResult.AppendFormat(_T("<w:next w:val=\"%ls\"/>"), Utils::PrepareToXML( m_sName ));//Todo
...@@ -1011,7 +1012,7 @@ CString RtfStyle::RenderToRtfEnd( RenderParameter oRenderParameter ) ...@@ -1011,7 +1012,7 @@ CString RtfStyle::RenderToRtfEnd( RenderParameter oRenderParameter )
RENDER_RTF_INT( m_nPriority, sResult, _T("spriority") ) RENDER_RTF_INT( m_nPriority, sResult, _T("spriority") )
RENDER_RTF_BOOL( m_bUnhiddenWhenUse, sResult, _T("sunhideused") ) RENDER_RTF_BOOL( m_bUnhiddenWhenUse, sResult, _T("sunhideused") )
sResult.AppendFormat(_T(" %ls;}"), RtfChar::renderRtfText( m_sName, oRenderParameter.poDocument )); sResult.AppendFormat(_T(" %ls;}"), RtfChar::renderRtfText( m_sName, oRenderParameter.poDocument ).GetBuffer());
return sResult; return sResult;
} }
CString RtfCharStyle::RenderToRtf(RenderParameter oRenderParameter) CString RtfCharStyle::RenderToRtf(RenderParameter oRenderParameter)
...@@ -1028,7 +1029,7 @@ CString RtfCharStyle::RenderToOOX(RenderParameter oRenderParameter) ...@@ -1028,7 +1029,7 @@ CString RtfCharStyle::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append( RenderToOOXBegin( oRenderParameter ) ); sResult.Append( RenderToOOXBegin( oRenderParameter ) );
CString sCharProp = m_oCharProp.RenderToOOX(oRenderParameter); CString sCharProp = m_oCharProp.RenderToOOX(oRenderParameter);
if( false == sCharProp.IsEmpty() ) if( false == sCharProp.IsEmpty() )
sResult.AppendFormat( _T("<w:rPr>%ls</w:rPr>"), sCharProp ); sResult.AppendFormat( _T("<w:rPr>%ls</w:rPr>"), sCharProp.GetBuffer() );
sResult.Append( RenderToOOXEnd( oRenderParameter ) ); sResult.Append( RenderToOOXEnd( oRenderParameter ) );
return sResult; return sResult;
} }
...@@ -1048,10 +1049,10 @@ CString RtfParagraphStyle::RenderToOOX(RenderParameter oRenderParameter) ...@@ -1048,10 +1049,10 @@ CString RtfParagraphStyle::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append( RenderToOOXBegin( oRenderParameter ) ); sResult.Append( RenderToOOXBegin( oRenderParameter ) );
CString sParProp = m_oParProp.RenderToOOX(oRenderParameter); CString sParProp = m_oParProp.RenderToOOX(oRenderParameter);
if( false == sParProp.IsEmpty() ) if( false == sParProp.IsEmpty() )
sResult.AppendFormat( _T("<w:pPr>%ls</w:pPr>"), sParProp ); sResult.AppendFormat( _T("<w:pPr>%ls</w:pPr>"), sParProp.GetBuffer() );
CString sCharProp = m_oCharProp.RenderToOOX(oRenderParameter); CString sCharProp = m_oCharProp.RenderToOOX(oRenderParameter);
if( false == sCharProp.IsEmpty() ) if( false == sCharProp.IsEmpty() )
sResult.AppendFormat( _T("<w:rPr>%ls</w:rPr>"), sCharProp ); sResult.AppendFormat( _T("<w:rPr>%ls</w:rPr>"), sCharProp.GetBuffer() );
sResult.Append( RenderToOOXEnd( oRenderParameter ) ); sResult.Append( RenderToOOXEnd( oRenderParameter ) );
return sResult; return sResult;
} }
...@@ -1168,19 +1169,19 @@ CString RtfTableStyle::RenderToOOX(RenderParameter oRenderParameter) ...@@ -1168,19 +1169,19 @@ CString RtfTableStyle::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append( RenderToOOXBegin( oRenderParameter ) ); sResult.Append( RenderToOOXBegin( oRenderParameter ) );
CString sTablProp = m_oTableProp.RenderToOOX(oRenderParameter); CString sTablProp = m_oTableProp.RenderToOOX(oRenderParameter);
if( false == sTablProp.IsEmpty() ) if( false == sTablProp.IsEmpty() )
sResult.AppendFormat( _T("<w:tblPr>%ls</w:tblPr>"), sTablProp ); sResult.AppendFormat( _T("<w:tblPr>%ls</w:tblPr>"), sTablProp.GetBuffer() );
CString sRowProp = m_oRowProp.RenderToOOX(oRenderParameter); CString sRowProp = m_oRowProp.RenderToOOX(oRenderParameter);
if( false == sRowProp.IsEmpty() ) if( false == sRowProp.IsEmpty() )
sResult.AppendFormat( _T("<w:trPr>%ls</w:trPr>"), sRowProp ); sResult.AppendFormat( _T("<w:trPr>%ls</w:trPr>"), sRowProp.GetBuffer() );
CString sCellProp = m_oCellProp.RenderToOOX(oRenderParameter); CString sCellProp = m_oCellProp.RenderToOOX(oRenderParameter);
if( false == sCellProp.IsEmpty() ) if( false == sCellProp.IsEmpty() )
sResult.AppendFormat( _T("<w:tcPr>%ls</w:tcPr>"), sCellProp ); sResult.AppendFormat( _T("<w:tcPr>%ls</w:tcPr>"), sCellProp.GetBuffer() );
CString sParProp = m_oParProp.RenderToOOX(oRenderParameter); CString sParProp = m_oParProp.RenderToOOX(oRenderParameter);
if( false == sParProp.IsEmpty() ) if( false == sParProp.IsEmpty() )
sResult.AppendFormat( _T("<w:pPr>%ls</w:pPr>"), sParProp ); sResult.AppendFormat( _T("<w:pPr>%ls</w:pPr>"), sParProp.GetBuffer() );
CString sCharProp = m_oCharProp.RenderToOOX(oRenderParameter); CString sCharProp = m_oCharProp.RenderToOOX(oRenderParameter);
if( false == sCharProp.IsEmpty() ) if( false == sCharProp.IsEmpty() )
sResult.AppendFormat( _T("<w:rPr>%ls</w:rPr>"), sCharProp ); sResult.AppendFormat( _T("<w:rPr>%ls</w:rPr>"), sCharProp.GetBuffer() );
RenderParameter oNewParam = oRenderParameter; RenderParameter oNewParam = oRenderParameter;
oNewParam.nType = RENDER_TO_OOX_PARAM_NESTED; oNewParam.nType = RENDER_TO_OOX_PARAM_NESTED;
...@@ -1252,19 +1253,19 @@ CString RtfTableStyle::RenderToOOX(RenderParameter oRenderParameter) ...@@ -1252,19 +1253,19 @@ CString RtfTableStyle::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append( _T("<w:tblStylePr w:type=\"") + oRenderParameter.sValue + _T("\">") ); sResult.Append( _T("<w:tblStylePr w:type=\"") + oRenderParameter.sValue + _T("\">") );
CString sTablProp = m_oTableProp.RenderToOOX(oRenderParameter); CString sTablProp = m_oTableProp.RenderToOOX(oRenderParameter);
if( false == sTablProp.IsEmpty() ) if( false == sTablProp.IsEmpty() )
sResult.AppendFormat( _T("<w:tblPr>%ls</w:tblPr>"), sTablProp ); sResult.AppendFormat( _T("<w:tblPr>%ls</w:tblPr>"), sTablProp.GetBuffer() );
CString sRowProp = m_oRowProp.RenderToOOX(oRenderParameter); CString sRowProp = m_oRowProp.RenderToOOX(oRenderParameter);
if( false == sRowProp.IsEmpty() ) if( false == sRowProp.IsEmpty() )
sResult.AppendFormat( _T("<w:trPr>%ls</w:trPr>"), sRowProp ); sResult.AppendFormat( _T("<w:trPr>%ls</w:trPr>"), sRowProp.GetBuffer() );
CString sCellProp = m_oCellProp.RenderToOOX(oRenderParameter); CString sCellProp = m_oCellProp.RenderToOOX(oRenderParameter);
if( false == sCellProp.IsEmpty() ) if( false == sCellProp.IsEmpty() )
sResult.AppendFormat( _T("<w:tcPr>%ls</w:tcPr>"), sCellProp ); sResult.AppendFormat( _T("<w:tcPr>%ls</w:tcPr>"), sCellProp.GetBuffer() );
CString sParProp = m_oParProp.RenderToOOX(oRenderParameter); CString sParProp = m_oParProp.RenderToOOX(oRenderParameter);
if( false == sParProp.IsEmpty() ) if( false == sParProp.IsEmpty() )
sResult.AppendFormat( _T("<w:pPr>%ls</w:pPr>"), sParProp ); sResult.AppendFormat( _T("<w:pPr>%ls</w:pPr>"), sParProp.GetBuffer() );
CString sCharProp = m_oCharProp.RenderToOOX(oRenderParameter); CString sCharProp = m_oCharProp.RenderToOOX(oRenderParameter);
if( false == sCharProp.IsEmpty() ) if( false == sCharProp.IsEmpty() )
sResult.AppendFormat( _T("<w:rPr>%ls</w:rPr>"), sCharProp ); sResult.AppendFormat( _T("<w:rPr>%ls</w:rPr>"), sCharProp.GetBuffer() );
sResult.Append( _T("</w:tblStylePr>") ); sResult.Append( _T("</w:tblStylePr>") );
} }
return sResult; return sResult;
...@@ -1638,7 +1639,9 @@ CString RtfParagraphProperty::RenderToRtf(RenderParameter oRenderParameter) ...@@ -1638,7 +1639,9 @@ CString RtfParagraphProperty::RenderToRtf(RenderParameter oRenderParameter)
sResult.Append(_T("{\\listtext\\pard\\plain")); sResult.Append(_T("{\\listtext\\pard\\plain"));
sResult.Append( poLevelProp.m_oCharProp.RenderToRtf( oRenderParameter ) ); sResult.Append( poLevelProp.m_oCharProp.RenderToRtf( oRenderParameter ) );
//пишем текст //пишем текст
sResult.Append( RtfChar::renderRtfText( poLevelProp.GenerateListText(), oRenderParameter.poDocument, NULL ) ); CString strLevelProp = poLevelProp.GenerateListText();
CString strChar = RtfChar::renderRtfText( strLevelProp, oRenderParameter.poDocument, NULL );
sResult.Append( strChar );
//или картинку //или картинку
if( PROP_DEF != poLevelProp.m_nPictureIndex ) if( PROP_DEF != poLevelProp.m_nPictureIndex )
{ {
...@@ -1718,7 +1721,7 @@ CString RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -1718,7 +1721,7 @@ CString RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter)
RENDER_OOX_INT_ATTRIBUTE( m_nIndStart, sIndent, _T("w:start") ); RENDER_OOX_INT_ATTRIBUTE( m_nIndStart, sIndent, _T("w:start") );
RENDER_OOX_INT_ATTRIBUTE( m_nIndEnd, sIndent, _T("w:end") ); RENDER_OOX_INT_ATTRIBUTE( m_nIndEnd, sIndent, _T("w:end") );
if( false == sIndent.IsEmpty() ) if( false == sIndent.IsEmpty() )
sResult.AppendFormat(_T("<w:ind %ls/>"), sIndent); sResult.AppendFormat(_T("<w:ind %ls/>"), sIndent.GetBuffer());
RENDER_OOX_BOOL( m_bIndRightAuto, sResult, _T("w:adjustRightInd") ); RENDER_OOX_BOOL( m_bIndRightAuto, sResult, _T("w:adjustRightInd") );
RENDER_OOX_BOOL( m_bIndMirror, sResult, _T("w:mirrorIndents") ); RENDER_OOX_BOOL( m_bIndMirror, sResult, _T("w:mirrorIndents") );
...@@ -1751,7 +1754,7 @@ CString RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -1751,7 +1754,7 @@ CString RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter)
//else //else
// sSpacing.AppendFormat(_T(" w:line=\"240\"")); //по умолчанию - единичный // sSpacing.AppendFormat(_T(" w:line=\"240\"")); //по умолчанию - единичный
if( false == sSpacing.IsEmpty() ) if( false == sSpacing.IsEmpty() )
sResult.AppendFormat(_T("<w:spacing %ls/>"), sSpacing); sResult.AppendFormat(_T("<w:spacing %ls/>"), sSpacing.GetBuffer());
RENDER_OOX_BOOL( m_bSnapToGrid, sResult, _T("w:snapToGrid") ); RENDER_OOX_BOOL( m_bSnapToGrid, sResult, _T("w:snapToGrid") );
RENDER_OOX_BOOL( m_bContextualSpacing, sResult, _T("w:contextualSpacing") ); RENDER_OOX_BOOL( m_bContextualSpacing, sResult, _T("w:contextualSpacing") );
...@@ -1781,27 +1784,27 @@ CString RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -1781,27 +1784,27 @@ CString RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter)
if( true == m_oBorderBox.IsValid() ) if( true == m_oBorderBox.IsValid() )
{ {
CString sBorderContent = m_oBorderBox.RenderToOOX(oNewParam); CString sBorderContent = m_oBorderBox.RenderToOOX(oNewParam);
sBorder.AppendFormat(_T("<w:left %ls />"), sBorderContent ); sBorder.AppendFormat(_T("<w:left %ls />"), sBorderContent.GetBuffer() );
sBorder.AppendFormat(_T("<w:top %ls />"), sBorderContent ); sBorder.AppendFormat(_T("<w:top %ls />"), sBorderContent.GetBuffer() );
sBorder.AppendFormat(_T("<w:right %ls />"), sBorderContent ); sBorder.AppendFormat(_T("<w:right %ls />"), sBorderContent.GetBuffer() );
sBorder.AppendFormat(_T("<w:bottom %ls />"), sBorderContent ); sBorder.AppendFormat(_T("<w:bottom %ls />"), sBorderContent.GetBuffer() );
} }
else else
{ {
if( true == m_oBorderTop.IsValid() ) if( true == m_oBorderTop.IsValid() )
sBorder.AppendFormat(_T("<w:top %ls />"), m_oBorderTop.RenderToOOX(oNewParam) ); sBorder.AppendFormat(_T("<w:top %ls />"), m_oBorderTop.RenderToOOX(oNewParam).GetBuffer() );
if( true == m_oBorderLeft.IsValid() ) if( true == m_oBorderLeft.IsValid() )
sBorder.AppendFormat(_T("<w:left %ls />"), m_oBorderLeft.RenderToOOX(oNewParam) ); sBorder.AppendFormat(_T("<w:left %ls />"), m_oBorderLeft.RenderToOOX(oNewParam).GetBuffer() );
if( true == m_oBorderBottom.IsValid() ) if( true == m_oBorderBottom.IsValid() )
sBorder.AppendFormat( _T("<w:bottom %ls />"),m_oBorderBottom.RenderToOOX(oNewParam) ); sBorder.AppendFormat( _T("<w:bottom %ls />"),m_oBorderBottom.RenderToOOX(oNewParam).GetBuffer() );
if( true == m_oBorderRight.IsValid() ) if( true == m_oBorderRight.IsValid() )
sBorder.AppendFormat(_T("<w:right %ls />"), m_oBorderRight.RenderToOOX(oNewParam) ); sBorder.AppendFormat(_T("<w:right %ls />"), m_oBorderRight.RenderToOOX(oNewParam).GetBuffer() );
} }
if( true == m_oBorderBar.IsValid() ) if( true == m_oBorderBar.IsValid() )
sBorder.AppendFormat(_T("<w:between %ls />"), m_oBorderBar.RenderToOOX(oNewParam) ); sBorder.AppendFormat(_T("<w:between %ls />"), m_oBorderBar.RenderToOOX(oNewParam).GetBuffer() );
if( false == sBorder.IsEmpty() ) if( false == sBorder.IsEmpty() )
sResult.AppendFormat( _T("<w:pBdr>%ls</w:pBdr>"), sBorder ); sResult.AppendFormat( _T("<w:pBdr>%ls</w:pBdr>"), sBorder.GetBuffer() );
if( true == m_oFrame.IsValid() ) if( true == m_oFrame.IsValid() )
sResult.Append( m_oFrame.RenderToOOX( oRenderParameter ) ); sResult.Append( m_oFrame.RenderToOOX( oRenderParameter ) );
...@@ -1819,7 +1822,7 @@ CString RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -1819,7 +1822,7 @@ CString RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter)
sResult.AppendFormat( m_oTabs.RenderToOOX( oRenderParameter ) ); sResult.AppendFormat( m_oTabs.RenderToOOX( oRenderParameter ) );
CString sCharProp = m_oCharProperty.RenderToOOX( oRenderParameter ); CString sCharProp = m_oCharProperty.RenderToOOX( oRenderParameter );
if( false == sCharProp.IsEmpty() ) if( false == sCharProp.IsEmpty() )
sResult.AppendFormat( _T("<w:rPr>%ls</w:rPr>"), sCharProp ); sResult.AppendFormat( _T("<w:rPr>%ls</w:rPr>"), sCharProp.GetBuffer() );
return sResult; return sResult;
} }
CString RtfCellProperty::RenderToRtf(RenderParameter oRenderParameter) CString RtfCellProperty::RenderToRtf(RenderParameter oRenderParameter)
...@@ -1941,7 +1944,7 @@ CString RtfCellProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -1941,7 +1944,7 @@ CString RtfCellProperty::RenderToOOX(RenderParameter oRenderParameter)
if( 3 == m_nIsPaddingBottom && PROP_DEF != m_nPaddingBottom) if( 3 == m_nIsPaddingBottom && PROP_DEF != m_nPaddingBottom)
sResult.AppendFormat(_T("<w:bottom w:w=\"%d\" w:type=\"dxa\"/>"),m_nPaddingBottom); sResult.AppendFormat(_T("<w:bottom w:w=\"%d\" w:type=\"dxa\"/>"),m_nPaddingBottom);
if( false == sMargin.IsEmpty() ) if( false == sMargin.IsEmpty() )
sResult.AppendFormat(_T("<w:tcMar>%ls</w:tcMar>"),sMargin); sResult.AppendFormat(_T("<w:tcMar>%ls</w:tcMar>"),sMargin.GetBuffer());
//if( true == m_bIsSpacingLeft ) //if( true == m_bIsSpacingLeft )
// sResult.Append(_T("trspdl3")); // sResult.Append(_T("trspdl3"));
...@@ -2021,7 +2024,7 @@ CString RtfCellProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -2021,7 +2024,7 @@ CString RtfCellProperty::RenderToOOX(RenderParameter oRenderParameter)
sBorder.Append( m_oBorderInsideV.RenderToOOX(oNewParam) ); sBorder.Append( m_oBorderInsideV.RenderToOOX(oNewParam) );
} }
if( false == sBorder.IsEmpty() ) if( false == sBorder.IsEmpty() )
sResult.AppendFormat( _T("<w:tcBorders>%ls</w:tcBorders>"), sBorder ); sResult.AppendFormat( _T("<w:tcBorders>%ls</w:tcBorders>"), sBorder.GetBuffer() );
if( true == m_oShading.IsValid() ) if( true == m_oShading.IsValid() )
sResult.Append( m_oShading.RenderToOOX(oRenderParameter) ); sResult.Append( m_oShading.RenderToOOX(oRenderParameter) );
...@@ -2282,7 +2285,7 @@ CString RtfTableProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -2282,7 +2285,7 @@ CString RtfTableProperty::RenderToOOX(RenderParameter oRenderParameter)
case vp_posyout: sFloatingPosition.Append( _T(" w:tblpYSpec=\"outside\"") );break; case vp_posyout: sFloatingPosition.Append( _T(" w:tblpYSpec=\"outside\"") );break;
} }
if( false == sFloatingPosition.IsEmpty() ) if( false == sFloatingPosition.IsEmpty() )
sResult.AppendFormat( _T("<w:tblpPr %ls/>"), sFloatingPosition ); sResult.AppendFormat( _T("<w:tblpPr %ls/>"), sFloatingPosition.GetBuffer() );
if( PROP_DEF != m_nWidth && ( 2 == m_eMUWidth || 3 == m_eMUWidth )) if( PROP_DEF != m_nWidth && ( 2 == m_eMUWidth || 3 == m_eMUWidth ))
{ {
...@@ -2304,7 +2307,7 @@ CString RtfTableProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -2304,7 +2307,7 @@ CString RtfTableProperty::RenderToOOX(RenderParameter oRenderParameter)
if( PROP_DEF != m_nDefCellMarTop && 3 == m_nDefCellMarTopUnits ) if( PROP_DEF != m_nDefCellMarTop && 3 == m_nDefCellMarTopUnits )
sDefCellMargins.AppendFormat( _T("<w:top w:w=\"%d\" w:type=\"dxa\"/>"), m_nDefCellMarTop ); sDefCellMargins.AppendFormat( _T("<w:top w:w=\"%d\" w:type=\"dxa\"/>"), m_nDefCellMarTop );
if( false == sDefCellMargins.IsEmpty() ) if( false == sDefCellMargins.IsEmpty() )
sResult.AppendFormat( _T("<w:tblCellMar>%ls</w:tblCellMar>"), sDefCellMargins ); sResult.AppendFormat( _T("<w:tblCellMar>%ls</w:tblCellMar>"), sDefCellMargins.GetBuffer() );
if( PROP_DEF != m_nDefCellSpBottom && 3 == m_nDefCellSpBottomUnits ) if( PROP_DEF != m_nDefCellSpBottom && 3 == m_nDefCellSpBottomUnits )
sResult.AppendFormat( _T("<w:tblCellSpacing w:w=\"%d\" w:type=\"dxa\"/>"), m_nDefCellSpBottom ); sResult.AppendFormat( _T("<w:tblCellSpacing w:w=\"%d\" w:type=\"dxa\"/>"), m_nDefCellSpBottom );
...@@ -2316,19 +2319,19 @@ CString RtfTableProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -2316,19 +2319,19 @@ CString RtfTableProperty::RenderToOOX(RenderParameter oRenderParameter)
oNewParam.nType = RENDER_TO_OOX_PARAM_BORDER_ATTRIBUTE; oNewParam.nType = RENDER_TO_OOX_PARAM_BORDER_ATTRIBUTE;
CString sBorders; CString sBorders;
if( m_oBorderLeft.IsValid() == true ) if( m_oBorderLeft.IsValid() == true )
sBorders.AppendFormat(_T("<w:left %ls/>"),m_oBorderLeft.RenderToOOX(oNewParam) ); sBorders.AppendFormat(_T("<w:left %ls/>"),m_oBorderLeft.RenderToOOX(oNewParam).GetBuffer() );
if( m_oBorderRight.IsValid() == true ) if( m_oBorderRight.IsValid() == true )
sBorders.AppendFormat(_T("<w:right %ls/>"),m_oBorderRight.RenderToOOX(oNewParam) ); sBorders.AppendFormat(_T("<w:right %ls/>"),m_oBorderRight.RenderToOOX(oNewParam).GetBuffer() );
if( m_oBorderTop.IsValid() == true ) if( m_oBorderTop.IsValid() == true )
sBorders.AppendFormat(_T("<w:top %ls/>"),m_oBorderTop.RenderToOOX(oNewParam) ); sBorders.AppendFormat(_T("<w:top %ls/>"),m_oBorderTop.RenderToOOX(oNewParam).GetBuffer() );
if( m_oBorderBottom.IsValid() == true ) if( m_oBorderBottom.IsValid() == true )
sBorders.AppendFormat(_T("<w:bottom %ls/>"),m_oBorderBottom.RenderToOOX(oNewParam) ); sBorders.AppendFormat(_T("<w:bottom %ls/>"),m_oBorderBottom.RenderToOOX(oNewParam).GetBuffer() );
if( m_oBorderVert.IsValid() == true ) if( m_oBorderVert.IsValid() == true )
sBorders.AppendFormat(_T("<w:insideV %ls/>"),m_oBorderVert.RenderToOOX(oNewParam) ); sBorders.AppendFormat(_T("<w:insideV %ls/>"),m_oBorderVert.RenderToOOX(oNewParam).GetBuffer() );
if( m_oBorderHor.IsValid() == true ) if( m_oBorderHor.IsValid() == true )
sBorders.AppendFormat(_T("<w:insideH %ls/>"),m_oBorderHor.RenderToOOX(oNewParam) ); sBorders.AppendFormat(_T("<w:insideH %ls/>"),m_oBorderHor.RenderToOOX(oNewParam).GetBuffer() );
if( false == sBorders.IsEmpty() ) if( false == sBorders.IsEmpty() )
sResult.AppendFormat(_T("<w:tblBorders>%ls</w:tblBorders>"), sBorders ); sResult.AppendFormat(_T("<w:tblBorders>%ls</w:tblBorders>"), sBorders.GetBuffer() );
if( m_oShading.IsValid() == true ) if( m_oShading.IsValid() == true )
sResult.Append(m_oShading.RenderToOOX(oRenderParameter) ); sResult.Append(m_oShading.RenderToOOX(oRenderParameter) );
...@@ -2460,7 +2463,7 @@ CString RtfRowProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -2460,7 +2463,7 @@ CString RtfRowProperty::RenderToOOX(RenderParameter oRenderParameter)
//if( false == scnfStyle.IsEmpty() ) //if( false == scnfStyle.IsEmpty() )
// sResult.Append( _T("<w:cnfStyle %ls/>") ); // sResult.Append( _T("<w:cnfStyle %ls/>") );
_bstr_t hk; // _bstr_t hk;
return sResult; return sResult;
} }
...@@ -2469,47 +2472,47 @@ CString RtfInformation::RenderToRtf(RenderParameter oRenderParameter) ...@@ -2469,47 +2472,47 @@ CString RtfInformation::RenderToRtf(RenderParameter oRenderParameter)
CString sResult; CString sResult;
if( _T("") != m_sTitle ) if( _T("") != m_sTitle )
sResult.AppendFormat( _T("{\\title %ls}"), RtfChar::renderRtfText( m_sTitle, oRenderParameter.poDocument ) ); sResult.AppendFormat( _T("{\\title %ls}"), RtfChar::renderRtfText( m_sTitle, oRenderParameter.poDocument ).GetBuffer() );
if( _T("") != m_sSubject ) if( _T("") != m_sSubject )
sResult.AppendFormat( _T("{\\subject %ls}"), RtfChar::renderRtfText( m_sSubject, oRenderParameter.poDocument ) ); sResult.AppendFormat( _T("{\\subject %ls}"), RtfChar::renderRtfText( m_sSubject, oRenderParameter.poDocument ).GetBuffer() );
if( _T("") != m_sAuthor ) if( _T("") != m_sAuthor )
sResult.AppendFormat( _T("{\\author %ls}"), RtfChar::renderRtfText( m_sAuthor, oRenderParameter.poDocument ) ); sResult.AppendFormat( _T("{\\author %ls}"), RtfChar::renderRtfText( m_sAuthor, oRenderParameter.poDocument ).GetBuffer() );
if( _T("") != m_sManager ) if( _T("") != m_sManager )
sResult.AppendFormat( _T("{\\manager %ls}"), RtfChar::renderRtfText( m_sManager, oRenderParameter.poDocument ) ); sResult.AppendFormat( _T("{\\manager %ls}"), RtfChar::renderRtfText( m_sManager, oRenderParameter.poDocument ).GetBuffer() );
if( _T("") != m_sCompany ) if( _T("") != m_sCompany )
sResult.AppendFormat( _T("{\\company %ls}"), RtfChar::renderRtfText( m_sCompany, oRenderParameter.poDocument ) ); sResult.AppendFormat( _T("{\\company %ls}"), RtfChar::renderRtfText( m_sCompany, oRenderParameter.poDocument ).GetBuffer() );
if( _T("") != m_sOperator ) if( _T("") != m_sOperator )
sResult.AppendFormat( _T("{\\operator %ls}"), RtfChar::renderRtfText( m_sOperator, oRenderParameter.poDocument ) ); sResult.AppendFormat( _T("{\\operator %ls}"), RtfChar::renderRtfText( m_sOperator, oRenderParameter.poDocument ).GetBuffer() );
if( _T("") != m_sCategory ) if( _T("") != m_sCategory )
sResult.AppendFormat( _T("{\\category %ls}"), RtfChar::renderRtfText( m_sCategory, oRenderParameter.poDocument ) ); sResult.AppendFormat( _T("{\\category %ls}"), RtfChar::renderRtfText( m_sCategory, oRenderParameter.poDocument ).GetBuffer() );
if( _T("") != m_sKeywords ) if( _T("") != m_sKeywords )
sResult.AppendFormat( _T("{\\keywords %ls}"), RtfChar::renderRtfText( m_sKeywords, oRenderParameter.poDocument ) ); sResult.AppendFormat( _T("{\\keywords %ls}"), RtfChar::renderRtfText( m_sKeywords, oRenderParameter.poDocument ).GetBuffer() );
if( _T("") != m_sComment ) if( _T("") != m_sComment )
sResult.AppendFormat( _T("{\\comment %ls}"), RtfChar::renderRtfText( m_sComment, oRenderParameter.poDocument ) ); sResult.AppendFormat( _T("{\\comment %ls}"), RtfChar::renderRtfText( m_sComment, oRenderParameter.poDocument ).GetBuffer() );
if( PROP_DEF != m_nVersion ) if( PROP_DEF != m_nVersion )
sResult.AppendFormat( _T("{\\version%d}"),m_nVersion ); sResult.AppendFormat( _T("{\\version%d}"),m_nVersion );
if( _T("") != m_sDocCom ) if( _T("") != m_sDocCom )
sResult.AppendFormat( _T("{\\doccomm %ls}"), RtfChar::renderRtfText( m_sDocCom, oRenderParameter.poDocument ) ); sResult.AppendFormat( _T("{\\doccomm %ls}"), RtfChar::renderRtfText( m_sDocCom, oRenderParameter.poDocument ).GetBuffer() );
if( PROP_DEF != m_nInternalVersion ) if( PROP_DEF != m_nInternalVersion )
sResult.AppendFormat( _T("{\\vern%d}"),m_nInternalVersion ); sResult.AppendFormat( _T("{\\vern%d}"),m_nInternalVersion );
if( _T("") != m_sLinkBase ) if( _T("") != m_sLinkBase )
sResult.AppendFormat( _T("{\\hlinkbase %ls}"), RtfChar::renderRtfText( m_sLinkBase, oRenderParameter.poDocument ) ); sResult.AppendFormat( _T("{\\hlinkbase %ls}"), RtfChar::renderRtfText( m_sLinkBase, oRenderParameter.poDocument ).GetBuffer() );
CString sCreateTime = m_oCreateTime.RenderToRtf( oRenderParameter ); CString sCreateTime = m_oCreateTime.RenderToRtf( oRenderParameter );
if( _T("") != sCreateTime ) if( _T("") != sCreateTime )
sResult.AppendFormat( _T("{\\creatim%ls}"),sCreateTime ); sResult.AppendFormat( _T("{\\creatim%ls}"),sCreateTime.GetBuffer() );
CString sRevTime = m_oRevTime.RenderToRtf( oRenderParameter ); CString sRevTime = m_oRevTime.RenderToRtf( oRenderParameter );
if( _T("") != sRevTime ) if( _T("") != sRevTime )
sResult.AppendFormat( _T("{\\revtim%ls}"),sRevTime ); sResult.AppendFormat( _T("{\\revtim%ls}"),sRevTime.GetBuffer() );
CString sPrintTime = m_oPrintTime.RenderToRtf( oRenderParameter ); CString sPrintTime = m_oPrintTime.RenderToRtf( oRenderParameter );
if( _T("") != sPrintTime ) if( _T("") != sPrintTime )
sResult.AppendFormat( _T("{\\printim%ls}"),sPrintTime ); sResult.AppendFormat( _T("{\\printim%ls}"),sPrintTime.GetBuffer() );
CString sBackupTime = m_oBackupTime.RenderToRtf( oRenderParameter ); CString sBackupTime = m_oBackupTime.RenderToRtf( oRenderParameter );
if( _T("") != sBackupTime ) if( _T("") != sBackupTime )
sResult.AppendFormat( _T("{\\buptim%ls}"),sBackupTime ); sResult.AppendFormat( _T("{\\buptim%ls}"),sBackupTime.GetBuffer() );
if( PROP_DEF != m_nEndingTime ) if( PROP_DEF != m_nEndingTime )
sResult.AppendFormat( _T("{\\edmins%d}"),m_nEndingTime ); sResult.AppendFormat( _T("{\\edmins%d}"),m_nEndingTime );
if( PROP_DEF != m_nNumberOfPages ) if( PROP_DEF != m_nNumberOfPages )
...@@ -2647,7 +2650,7 @@ if( PROP_DEF != mmathFont ) ...@@ -2647,7 +2650,7 @@ if( PROP_DEF != mmathFont )
RtfDocument* poDoc = static_cast<RtfDocument*>(oRenderParameter.poDocument); RtfDocument* poDoc = static_cast<RtfDocument*>(oRenderParameter.poDocument);
RtfFont oFont; RtfFont oFont;
if( true == poDoc->m_oFontTable.GetFont(mmathFont, oFont) ) if( true == poDoc->m_oFontTable.GetFont(mmathFont, oFont) )
sProperty.AppendFormat(_T("<m:mathFont m:val=\"%ls\"/>"), oFont.m_sName); sProperty.AppendFormat(_T("<m:mathFont m:val=\"%ls\"/>"), oFont.m_sName.GetBuffer());
} }
switch( mbrkBin ) switch( mbrkBin )
...@@ -2687,7 +2690,7 @@ RENDER_OOX_INT( mwrapIndent, sProperty, _T("m:wrapIndent") ) ...@@ -2687,7 +2690,7 @@ RENDER_OOX_INT( mwrapIndent, sProperty, _T("m:wrapIndent") )
RENDER_OOX_INT( mwrapRight, sProperty, _T("m:wrapRight") ) RENDER_OOX_INT( mwrapRight, sProperty, _T("m:wrapRight") )
CString sResult; CString sResult;
if( false == sProperty.IsEmpty() ) if( false == sProperty.IsEmpty() )
sResult.AppendFormat( _T("<m:mathPr>%ls</m:mathPr>"), sProperty ); sResult.AppendFormat( _T("<m:mathPr>%ls</m:mathPr>"), sProperty.GetBuffer() );
return sResult; return sResult;
} }
CString RtfMathSpecProp::RenderToRtf(RenderParameter oRenderParameter) CString RtfMathSpecProp::RenderToRtf(RenderParameter oRenderParameter)
......
...@@ -6,13 +6,19 @@ ...@@ -6,13 +6,19 @@
#include "../../../Common/DocxFormat/Source/Common/SimpleTypes_Drawing.h" #include "../../../Common/DocxFormat/Source/Common/SimpleTypes_Drawing.h"
#define MERGE_PROPERTY(propName, propObj)\ #if defined (_WIN32) || defined (_WIN64)
if( PROP_DEF != ##propObj##.##propName## )\ #define MERGE_PROPERTY(propName, propObj)\
propName = ##propObj##.##propName##; if( PROP_DEF != ##propObj##.##propName## ) propName = ##propObj##.##propName##;
#define MERGE_PROPERTY_DEF(propName, propObj, defval)\ #define MERGE_PROPERTY_DEF(propName, propObj, defval)\
if( defval != ##propObj##.##propName## )\ if( defval != ##propObj##.##propName## ) propName = ##propObj##.##propName##;
propName = ##propObj##.##propName##; #else
#define MERGE_PROPERTY(propName, propObj)\
if( PROP_DEF != propObj.propName ) propName = propObj.propName;
#define MERGE_PROPERTY_DEF(propName, propObj, defval)\
if( defval != propObj.propName ) propName = propObj.propName;
#endif
#define DEFAULT_PROPERTY(propName)\ #define DEFAULT_PROPERTY(propName)\
propName= PROP_DEF; propName= PROP_DEF;
...@@ -127,11 +133,11 @@ public: ...@@ -127,11 +133,11 @@ public:
typedef enum {TC_NONE,cmaindarkone ,cmainlightone ,cmaindarktwo ,cmainlighttwo ,caccentone ,caccenttwo ,caccentthree ,caccentfour ,caccentfive ,caccentsix ,chyperlink ,cfollowedhyperlink ,cbackgroundone ,ctextone ,cbackgroundtwo ,ctexttwo} ThemeColor; typedef enum {TC_NONE,cmaindarkone ,cmainlightone ,cmaindarktwo ,cmainlighttwo ,caccentone ,caccenttwo ,caccentthree ,caccentfour ,caccentfive ,caccentsix ,chyperlink ,cfollowedhyperlink ,cbackgroundone ,ctextone ,cbackgroundtwo ,ctexttwo} ThemeColor;
ThemeColor m_eTheme; ThemeColor m_eTheme;
byte m_byteRed; BYTE m_byteRed;
byte m_byteGreen; BYTE m_byteGreen;
byte m_byteBlue; BYTE m_byteBlue;
byte m_byteTint; BYTE m_byteTint;
byte m_byteShade; BYTE m_byteShade;
RtfColor() RtfColor()
{ {
...@@ -141,7 +147,7 @@ public: ...@@ -141,7 +147,7 @@ public:
{ {
SetHEX( nHex ); SetHEX( nHex );
} }
RtfColor(byte r, byte g, byte b) RtfColor(BYTE r, BYTE g, BYTE b)
{ {
SetRGB( r, g, b ); SetRGB( r, g, b );
} }
...@@ -162,21 +168,21 @@ public: ...@@ -162,21 +168,21 @@ public:
m_byteShade = 0; m_byteShade = 0;
m_eTheme = TC_NONE; m_eTheme = TC_NONE;
} }
byte GetR() BYTE GetR()
{ {
byte byteRed = SetShade( m_byteRed ); BYTE byteRed = SetShade( m_byteRed );
byteRed = SetTint( byteRed ); byteRed = SetTint( byteRed );
return byteRed; return byteRed;
} }
byte GetG() BYTE GetG()
{ {
byte byteGreen = SetShade( m_byteGreen ); BYTE byteGreen = SetShade( m_byteGreen );
byteGreen = SetTint( byteGreen ); byteGreen = SetTint( byteGreen );
return byteGreen; return byteGreen;
} }
byte GetB() BYTE GetB()
{ {
byte byteBlue = SetShade( m_byteBlue ); BYTE byteBlue = SetShade( m_byteBlue );
byteBlue = SetTint( byteBlue ); byteBlue = SetTint( byteBlue );
return byteBlue; return byteBlue;
} }
...@@ -193,7 +199,7 @@ public: ...@@ -193,7 +199,7 @@ public:
m_byteGreen = (color&0xFF00) >>4; m_byteGreen = (color&0xFF00) >>4;
m_byteBlue = (color&0xFF); m_byteBlue = (color&0xFF);
} }
void SetRGB(byte red, byte green, byte blue) void SetRGB(BYTE red, BYTE green, BYTE blue)
{ {
SetDefault(); SetDefault();
m_byteRed = red; m_byteRed = red;
...@@ -261,12 +267,12 @@ public: ...@@ -261,12 +267,12 @@ public:
break; break;
} }
} }
m_byteRed = (byte)(r * 255.0f); m_byteRed = (BYTE)(r * 255.0f);
m_byteGreen = (byte)(g * 255.0f); m_byteGreen = (BYTE)(g * 255.0f);
m_byteBlue = (byte)(b * 255.0f); m_byteBlue = (BYTE)(b * 255.0f);
m_byteRed = (byte)(r * 255); m_byteRed = (BYTE)(r * 255);
m_byteGreen = (byte)(g * 255); m_byteGreen = (BYTE)(g * 255);
m_byteBlue = (byte)(b * 255); m_byteBlue = (BYTE)(b * 255);
} }
void SetRGBPercent(int nRedPer, int nGreenPer, int nBluePer) void SetRGBPercent(int nRedPer, int nGreenPer, int nBluePer)
{ {
...@@ -289,21 +295,21 @@ public: ...@@ -289,21 +295,21 @@ public:
} }
CString ToHexColor() CString ToHexColor()
{ {
byte byteRed = SetShade( m_byteRed ); BYTE byteRed = SetShade( m_byteRed );
byteRed = SetTint( byteRed ); byteRed = SetTint( byteRed );
CString sRed; CString sRed;
if( byteRed < 0x10 ) if( byteRed < 0x10 )
sRed.AppendFormat( _T("0%x"), byteRed ); sRed.AppendFormat( _T("0%x"), byteRed );
else else
sRed.AppendFormat( _T("%x"), byteRed ); sRed.AppendFormat( _T("%x"), byteRed );
byte byteGreen = SetShade( m_byteGreen ); BYTE byteGreen = SetShade( m_byteGreen );
byteGreen = SetTint( byteGreen ); byteGreen = SetTint( byteGreen );
CString sGreen; CString sGreen;
if( byteGreen < 0x10 ) if( byteGreen < 0x10 )
sGreen.AppendFormat( _T("0%x"), byteGreen ); sGreen.AppendFormat( _T("0%x"), byteGreen );
else else
sGreen.AppendFormat( _T("%x"), byteGreen ); sGreen.AppendFormat( _T("%x"), byteGreen );
byte byteBlue = SetShade( m_byteBlue ); BYTE byteBlue = SetShade( m_byteBlue );
byteBlue = SetTint( byteBlue ); byteBlue = SetTint( byteBlue );
CString sBlue; CString sBlue;
if( byteBlue < 0x10 ) if( byteBlue < 0x10 )
...@@ -316,11 +322,11 @@ public: ...@@ -316,11 +322,11 @@ public:
int ToInt()const int ToInt()const
{ {
CString sResult; CString sResult;
byte byteRed = SetShade( m_byteRed ); BYTE byteRed = SetShade( m_byteRed );
byteRed = SetTint( byteRed ); byteRed = SetTint( byteRed );
byte byteGreen = SetShade( m_byteGreen ); BYTE byteGreen = SetShade( m_byteGreen );
byteGreen = SetTint( byteGreen ); byteGreen = SetTint( byteGreen );
byte byteBlue = SetShade( m_byteBlue ); BYTE byteBlue = SetShade( m_byteBlue );
byteBlue = SetTint( byteBlue ); byteBlue = SetTint( byteBlue );
int nColor = (byteRed << 16) | (byteGreen << 8) | byteBlue; int nColor = (byteRed << 16) | (byteGreen << 8) | byteBlue;
...@@ -328,14 +334,14 @@ public: ...@@ -328,14 +334,14 @@ public:
} }
CString RenderToRtf(RenderParameter oRenderParameter); CString RenderToRtf(RenderParameter oRenderParameter);
CString RenderToOOX(RenderParameter oRenderParameter); CString RenderToOOX(RenderParameter oRenderParameter);
byte SetShade(byte bColor)const BYTE SetShade(BYTE bColor)const
{ {
//return (byte)( ( 1.0 - m_byteShade / 255 ) * bColor ); //return (BYTE)( ( 1.0 - m_byteShade / 255 ) * bColor );
return bColor; return bColor;
} }
byte SetTint(byte bColor)const BYTE SetTint(BYTE bColor)const
{ {
//return (byte)( ( 1.0 - m_byteTint / 255 ) * ( 255 - bColor ) + bColor ); //return (BYTE)( ( 1.0 - m_byteTint / 255 ) * ( 255 - bColor ) + bColor );
return bColor; return bColor;
} }
static bool GetHighlightByColor( RtfColor oOutputColor,CString& oStr ) //todo static bool GetHighlightByColor( RtfColor oOutputColor,CString& oStr ) //todo
...@@ -578,7 +584,7 @@ public: ...@@ -578,7 +584,7 @@ public:
//CString white = _T("FFFFFF"); //CString white = _T("FFFFFF");
//CString yellow = _T("FFFF00"); //CString yellow = _T("FFFF00");
long nMinDelta = MAXLONG; long nMinDelta = 0x7FFFFFFF; //MAXLONG;
int nIndex = -1; int nIndex = -1;
for( int i = 0; i < (int)sColors.size(); i++ ) for( int i = 0; i < (int)sColors.size(); i++ )
{ {
...@@ -616,20 +622,31 @@ private: ...@@ -616,20 +622,31 @@ private:
CString WriteOOXAttribute( CString sParam ) CString WriteOOXAttribute( CString sParam )
{ {
CString sResult; CString sResult;
if( m_eTheme == TC_NONE ) if( m_eTheme == TC_NONE )
if( _T("") == sParam ) {
sResult.AppendFormat(_T("color = \"%ls\""),ToHexColor()); if( _T("") == sParam )
else if( _T("Fill") == sParam ) {
sResult.AppendFormat(_T("fill = \"%ls\""),ToHexColor()); sResult = _T("color = \"");
else sResult.Append(ToHexColor());
{ sResult.Append(_T("\""));
CString sTheme; }
if( true == GetStringByTheme( sTheme, m_eTheme ) ) else if( _T("Fill") == sParam )
{ {
sResult.AppendFormat(_T("theme%sColor = \"%ls\" theme%sShade = \"%d\" theme%sTint = \"%d\""),sParam,sTheme,sParam,m_byteShade ,sParam,m_byteTint); sResult = _T("fill = \"");
} sResult.Append(ToHexColor());
} sResult.Append(_T("\""));
return sResult; }
}
else
{
CString sTheme;
if( true == GetStringByTheme( sTheme, m_eTheme ) )
{
sResult.AppendFormat(_T("theme%sColor = \"%ls\" theme%sShade = \"%d\" theme%sTint = \"%d\""),
sParam.GetBuffer(), sTheme.GetBuffer(), sParam.GetBuffer(), m_byteShade ,sParam.GetBuffer(), m_byteTint);
}
}
return sResult;
} }
}; };
...@@ -950,7 +967,7 @@ public: ...@@ -950,7 +967,7 @@ public:
for( int i = 0; i < (int)m_aTabs.size(); i++ ) for( int i = 0; i < (int)m_aTabs.size(); i++ )
sTabs.Append( m_aTabs[i].RenderToOOX( oRenderParameter ) ); sTabs.Append( m_aTabs[i].RenderToOOX( oRenderParameter ) );
if( false == sTabs.IsEmpty() ) if( false == sTabs.IsEmpty() )
sResult.AppendFormat( _T("<w:tabs>%ls</w:tabs>"), sTabs ); sResult.AppendFormat( _T("<w:tabs>%ls</w:tabs>"), sTabs.GetBuffer() );
return sResult; return sResult;
} }
}; };
...@@ -3224,4 +3241,4 @@ typedef boost::shared_ptr<RtfShadingPar> RtfShadingParPtr; ...@@ -3224,4 +3241,4 @@ typedef boost::shared_ptr<RtfShadingPar> RtfShadingParPtr;
typedef boost::shared_ptr<RtfShading> RtfShadingPtr; typedef boost::shared_ptr<RtfShading> RtfShadingPtr;
typedef boost::shared_ptr<RtfColor> RtfColorPtr; typedef boost::shared_ptr<RtfColor> RtfColorPtr;
typedef boost::shared_ptr<RtfFont> RtfFontPtr; typedef boost::shared_ptr<RtfFont> RtfFontPtr;
//typedef boost::shared_ptr<RtfColorSchemeMapping> RtfColorSchemeMappingPtr; //typedef boost::shared_ptr<RtfColorSchemeMapping> RtfColorSchemeMappingPtr;
\ No newline at end of file
...@@ -104,7 +104,7 @@ public: ...@@ -104,7 +104,7 @@ public:
break; break;
case RtfToken::Keyword: case RtfToken::Keyword:
ExecuteTextInternal2(oDocument, oReader, m_oTok.Key, m_nSkipChars); ExecuteTextInternal2(oDocument, oReader, m_oTok.Key, m_nSkipChars);
if( _T("u") == m_oTok.Key ) if( m_oTok.Key == "u")
{ {
ExecuteText( oDocument, oReader, ExecuteTextInternal( oDocument, oReader, m_oTok.Key, m_oTok.HasParameter, m_oTok.Parameter, m_nSkipChars) ); ExecuteText( oDocument, oReader, ExecuteTextInternal( oDocument, oReader, m_oTok.Key, m_oTok.HasParameter, m_oTok.Parameter, m_nSkipChars) );
break; break;
...@@ -124,9 +124,9 @@ public: ...@@ -124,9 +124,9 @@ public:
m_bCanStartNewReader = false; m_bCanStartNewReader = false;
break; break;
case RtfToken::Control: case RtfToken::Control:
if( m_oTok.Key == _T("42") ) if( m_oTok.Key == "42" )
m_bSkip = true; m_bSkip = true;
if( m_oTok.Key == _T("39") && true == m_oTok.HasParameter ) if( m_oTok.Key == "39" && true == m_oTok.HasParameter )
oReader.m_oState->m_sCurText.AppendChar( m_oTok.Parameter ); oReader.m_oState->m_sCurText.AppendChar( m_oTok.Parameter );
break; break;
case RtfToken::Text: case RtfToken::Text:
...@@ -206,7 +206,7 @@ public: ...@@ -206,7 +206,7 @@ public:
{ {
CString sResult; CString sResult;
if( _T("u") == sKey ) if( "u" == sKey )
{ {
if( true == bHasPar ) if( true == bHasPar )
sResult.AppendChar( nPar ); sResult.AppendChar( nPar );
...@@ -214,7 +214,7 @@ public: ...@@ -214,7 +214,7 @@ public:
else else
{ {
CStringA sCharString; CStringA sCharString;
if( _T("39") == sKey ) if( "39" == sKey )
{ {
if( true == bHasPar ) if( true == bHasPar )
sCharString.AppendChar( nPar ); sCharString.AppendChar( nPar );
...@@ -236,7 +236,8 @@ public: ...@@ -236,7 +236,8 @@ public:
oReader.m_oState->m_sCurText.Empty(); oReader.m_oState->m_sCurText.Empty();
if(sResult.GetLength() > 0) if(sResult.GetLength() > 0)
{ {
ExecuteTextInternalSkipChars(sResult, oReader, CStringA(""), nSkipChars); CStringA str;
ExecuteTextInternalSkipChars(sResult, oReader, str, nSkipChars);
ExecuteText( oDocument, oReader, sResult); ExecuteText( oDocument, oReader, sResult);
} }
} }
...@@ -258,7 +259,7 @@ public: ...@@ -258,7 +259,7 @@ public:
nSkipChars = 0; nSkipChars = 0;
} }
} }
if( _T("u") == sKey ) if( "u" == sKey )
{ {
//надо правильно установить m_nSkipChars по значению \ucN //надо правильно установить m_nSkipChars по значению \ucN
nSkipChars = oReader.m_oState->m_nUD; nSkipChars = oReader.m_oState->m_nUD;
...@@ -292,19 +293,25 @@ public: ...@@ -292,19 +293,25 @@ public:
nCodepage = CP_ACP; nCodepage = CP_ACP;
break; break;
} }
case RtfDocumentProperty::cp_mac: nCodepage = CP_MACCP;break; case RtfDocumentProperty::cp_mac: nCodepage = CP_MACCP; break;
case RtfDocumentProperty::cp_pc: nCodepage = 437;break; case RtfDocumentProperty::cp_pc: nCodepage = 437; break; //ms dos latin us
case RtfDocumentProperty::cp_pca: nCodepage = 850;break; case RtfDocumentProperty::cp_pca: nCodepage = 850; break; //ms dos latin eu
} }
} }
//если ничего нет ставим ANSI //если ничего нет ставим ANSI
if( -1 == nCodepage ) if( -1 == nCodepage )
nCodepage = CP_ACP; nCodepage = CP_ACP;
int nLengthW ; #if defined (_WIN32) || defined (_WIN64)
nLengthW = MultiByteToWideChar(nCodepage, 0, sCharString, -1, NULL, NULL); int nLengthW ;
MultiByteToWideChar(nCodepage, 0, sCharString, -1, sResult.GetBuffer( nLengthW ), nLengthW); nLengthW = MultiByteToWideChar(nCodepage, 0, sCharString, -1, NULL, NULL);
sResult.ReleaseBuffer(); MultiByteToWideChar(nCodepage, 0, sCharString, -1, sResult.GetBuffer( nLengthW ), nLengthW);
sResult.ReleaseBuffer();
#else
//todooo расширить до других codepages (щас тока анси)
std::string sAnsi(sCharString.GetBuffer());
std::wstring s(sAnsi.begin(), sAnsi.end());
#endif
//sResult = sKey; //sResult = sKey;
} }
return sResult; return sResult;
......
...@@ -151,7 +151,7 @@ CString RtfDocumentProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -151,7 +151,7 @@ CString RtfDocumentProperty::RenderToOOX(RenderParameter oRenderParameter)
for( int i = 0; i < (int)m_aSpecialFootnotes.size(); i++ ) for( int i = 0; i < (int)m_aSpecialFootnotes.size(); i++ )
sFootnoteProp.AppendFormat( _T("<w:footnote w:id=\"%d\" />"), m_aSpecialFootnotes[i] ); sFootnoteProp.AppendFormat( _T("<w:footnote w:id=\"%d\" />"), m_aSpecialFootnotes[i] );
if( PROP_DEF != m_nFootnoteNumberingFormat ) if( PROP_DEF != m_nFootnoteNumberingFormat )
sFootnoteProp.AppendFormat( _T("<w:numRestart w:val=\"%ls\" />"), RtfListLevelProperty::GetFormat( m_nFootnoteNumberingFormat ) ); sFootnoteProp.AppendFormat( _T("<w:numRestart w:val=\"%ls\" />"), RtfListLevelProperty::GetFormat( m_nFootnoteNumberingFormat ).GetBuffer() );
RENDER_OOX_INT( m_nFootnoteStart, sFootnoteProp, _T("w:numStart") ); RENDER_OOX_INT( m_nFootnoteStart, sFootnoteProp, _T("w:numStart") );
if( PROP_DEF != m_eFootnoteRestart ) if( PROP_DEF != m_eFootnoteRestart )
{ {
...@@ -173,13 +173,13 @@ CString RtfDocumentProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -173,13 +173,13 @@ CString RtfDocumentProperty::RenderToOOX(RenderParameter oRenderParameter)
} }
} }
if( false == sFootnoteProp.IsEmpty() ) if( false == sFootnoteProp.IsEmpty() )
sResult.AppendFormat( _T("<w:footnotePr>%ls</w:footnotePr>"), sFootnoteProp ); sResult.AppendFormat( _T("<w:footnotePr>%ls</w:footnotePr>"), sFootnoteProp.GetBuffer() );
CString sEndnoteProp; CString sEndnoteProp;
for( int i = 0; i < (int)m_aSpecialEndnotes.size(); i++ ) for( int i = 0; i < (int)m_aSpecialEndnotes.size(); i++ )
sEndnoteProp.AppendFormat( _T("<w:endnote w:id=\"%d\" />"), m_aSpecialEndnotes[i] ); sEndnoteProp.AppendFormat( _T("<w:endnote w:id=\"%d\" />"), m_aSpecialEndnotes[i] );
if( PROP_DEF != m_nFootnoteNumberingFormat ) if( PROP_DEF != m_nFootnoteNumberingFormat )
sFootnoteProp.AppendFormat( _T("<w:numRestart w:val=\"%ls\" />"), RtfListLevelProperty::GetFormat( m_nFootnoteNumberingFormat ) ); sFootnoteProp.AppendFormat( _T("<w:numRestart w:val=\"%ls\" />"), RtfListLevelProperty::GetFormat( m_nFootnoteNumberingFormat ).GetBuffer() );
RENDER_OOX_INT( m_nEndnoteStart, sEndnoteProp, _T("w:numStart") ); RENDER_OOX_INT( m_nEndnoteStart, sEndnoteProp, _T("w:numStart") );
if( PROP_DEF != m_eEndnoteRestart ) if( PROP_DEF != m_eEndnoteRestart )
{ {
...@@ -200,7 +200,7 @@ CString RtfDocumentProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -200,7 +200,7 @@ CString RtfDocumentProperty::RenderToOOX(RenderParameter oRenderParameter)
} }
} }
if( false == sEndnoteProp.IsEmpty() ) if( false == sEndnoteProp.IsEmpty() )
sResult.AppendFormat( _T("<w:endnotePr>%ls</w:endnotePr>"), sEndnoteProp ); sResult.AppendFormat( _T("<w:endnotePr>%ls</w:endnotePr>"), sEndnoteProp.GetBuffer() );
CString sCompat; CString sCompat;
if( 1 != m_bHtmlAutoSpace ) if( 1 != m_bHtmlAutoSpace )
...@@ -208,7 +208,7 @@ CString RtfDocumentProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -208,7 +208,7 @@ CString RtfDocumentProperty::RenderToOOX(RenderParameter oRenderParameter)
if( 0 == m_bUseTabAlignment ) if( 0 == m_bUseTabAlignment )
sCompat.Append( _T("<w:forgetLastTabAlignment/>") ); sCompat.Append( _T("<w:forgetLastTabAlignment/>") );
if( false == sCompat.IsEmpty() ) if( false == sCompat.IsEmpty() )
sResult.AppendFormat( _T("<w:compat>%ls</w:compat>"), sCompat ); sResult.AppendFormat( _T("<w:compat>%ls</w:compat>"), sCompat.GetBuffer() );
return sResult; return sResult;
} }
...@@ -465,7 +465,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -465,7 +465,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter)
if( PROP_DEF != m_nPaperSourceFirst ) if( PROP_DEF != m_nPaperSourceFirst )
sPaperSource.AppendFormat( _T(" w:other=\"%d\""), m_nPaperSourceOther ); sPaperSource.AppendFormat( _T(" w:other=\"%d\""), m_nPaperSourceOther );
if( false == sPaperSource.IsEmpty() ) if( false == sPaperSource.IsEmpty() )
sResult.AppendFormat(_T("<w:paperSrc %ls/>"), sPaperSource ); sResult.AppendFormat(_T("<w:paperSrc %ls/>"), sPaperSource.GetBuffer() );
if( 1 == m_bRtlGutter ) if( 1 == m_bRtlGutter )
sResult.Append(_T("<w:rtlGutter/>")); sResult.Append(_T("<w:rtlGutter/>"));
...@@ -554,7 +554,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -554,7 +554,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter)
case ff_sftnnzodiacl:sFootnotesProp.Append( _T("<w:numFmt w:val=\"upperLetter\" />") );break; case ff_sftnnzodiacl:sFootnotesProp.Append( _T("<w:numFmt w:val=\"upperLetter\" />") );break;
} }
if( false == sFootnotesProp.IsEmpty() ) if( false == sFootnotesProp.IsEmpty() )
sResult.AppendFormat( _T("<w:footnotePr>%ls</w:footnotePr>"), sFootnotesProp ); sResult.AppendFormat( _T("<w:footnotePr>%ls</w:footnotePr>"), sFootnotesProp.GetBuffer() );
CString sEndnotesProp; CString sEndnotesProp;
RENDER_OOX_INT( m_nEndnotesStart, sEndnotesProp, _T("w:numStart") ) RENDER_OOX_INT( m_nEndnotesStart, sEndnotesProp, _T("w:numStart") )
...@@ -588,7 +588,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -588,7 +588,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter)
case ef_saftnnzodiacl:sEndnotesProp.Append( _T("<w:numFmt w:val=\"upperLetter\" />") );break; case ef_saftnnzodiacl:sEndnotesProp.Append( _T("<w:numFmt w:val=\"upperLetter\" />") );break;
} }
if( false == sEndnotesProp.IsEmpty() ) if( false == sEndnotesProp.IsEmpty() )
sResult.AppendFormat( _T("<w:endnotePr>%ls</w:endnotePr>"), sEndnotesProp ); sResult.AppendFormat( _T("<w:endnotePr>%ls</w:endnotePr>"), sEndnotesProp.GetBuffer() );
//Line Numbering //Line Numbering
CString sLineNumbering; CString sLineNumbering;
...@@ -605,7 +605,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -605,7 +605,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter)
case lnr_linecont:sLineNumbering.Append( _T(" w:restart=\"continuous\"") );break; case lnr_linecont:sLineNumbering.Append( _T(" w:restart=\"continuous\"") );break;
} }
if( false == sLineNumbering.IsEmpty() ) if( false == sLineNumbering.IsEmpty() )
sResult.AppendFormat( _T("<w:lnNumType %ls/>"), sLineNumbering ); sResult.AppendFormat( _T("<w:lnNumType %ls/>"), sLineNumbering.GetBuffer() );
//Page Information //Page Information
CString sPageSize; CString sPageSize;
...@@ -616,7 +616,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -616,7 +616,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter)
if( 1 == m_bLandscapeFormat ) if( 1 == m_bLandscapeFormat )
sPageSize.Append(_T(" w:orient=\"landscape\"")); sPageSize.Append(_T(" w:orient=\"landscape\""));
if( false == sPageSize.IsEmpty() ) if( false == sPageSize.IsEmpty() )
sResult.AppendFormat(_T("<w:pgSz %ls/>"), sPageSize ); sResult.AppendFormat(_T("<w:pgSz %ls/>"), sPageSize.GetBuffer() );
CString sMargin; CString sMargin;
if( PROP_DEF != m_nMarginLeft ) if( PROP_DEF != m_nMarginLeft )
...@@ -634,7 +634,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -634,7 +634,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter)
if( PROP_DEF != m_nFooterBottom ) if( PROP_DEF != m_nFooterBottom )
sMargin.AppendFormat(_T(" w:footer=\"%d\""), m_nFooterBottom); sMargin.AppendFormat(_T(" w:footer=\"%d\""), m_nFooterBottom);
if( false == sMargin.IsEmpty() ) if( false == sMargin.IsEmpty() )
sResult.AppendFormat(_T("<w:pgMar %ls/>"), sMargin); sResult.AppendFormat(_T("<w:pgMar %ls/>"), sMargin.GetBuffer());
if( 1 == m_bTitlePage ) if( 1 == m_bTitlePage )
sResult.Append(_T("<w:titlePg/>")); sResult.Append(_T("<w:titlePg/>"));
...@@ -643,7 +643,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -643,7 +643,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter)
if( PROP_DEF != m_nPageNumberStart ) if( PROP_DEF != m_nPageNumberStart )
sPageNumber.AppendFormat( _T(" w:start=\"%d\""), m_nPageNumberStart ); sPageNumber.AppendFormat( _T(" w:start=\"%d\""), m_nPageNumberStart );
if( false == sPageNumber.IsEmpty() ) if( false == sPageNumber.IsEmpty() )
sResult.AppendFormat( _T("<w:pgNumType %ls/>"), sPageNumber ); sResult.AppendFormat( _T("<w:pgNumType %ls/>"), sPageNumber.GetBuffer() );
//Vertical Alignment //Vertical Alignment
switch( m_eVerticalAlignment ) switch( m_eVerticalAlignment )
{ {
...@@ -713,32 +713,32 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -713,32 +713,32 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter)
if( 0 != m_oHeaderLeft ) if( 0 != m_oHeaderLeft )
{ {
CString sId = SaveFile(m_oHeaderLeft,oRenderParameter, true); CString sId = SaveFile(m_oHeaderLeft,oRenderParameter, true);
sResult.AppendFormat(_T("<w:headerReference w:type=\"even\" r:id=\"%ls\"/>"), sId); sResult.AppendFormat(_T("<w:headerReference w:type=\"even\" r:id=\"%ls\"/>"), sId.GetBuffer());
} }
if( 0 != m_oHeaderFirst ) if( 0 != m_oHeaderFirst )
{ {
CString sId = SaveFile(m_oHeaderFirst,oRenderParameter, true); CString sId = SaveFile(m_oHeaderFirst,oRenderParameter, true);
sResult.AppendFormat(_T("<w:headerReference w:type=\"first\" r:id=\"%ls\"/>"), sId); sResult.AppendFormat(_T("<w:headerReference w:type=\"first\" r:id=\"%ls\"/>"), sId.GetBuffer());
} }
if( 0 != m_oHeaderRight ) if( 0 != m_oHeaderRight )
{ {
CString sId = SaveFile(m_oHeaderRight,oRenderParameter, true); CString sId = SaveFile(m_oHeaderRight,oRenderParameter, true);
sResult.AppendFormat(_T("<w:headerReference w:type=\"default\" r:id=\"%ls\"/>"), sId); sResult.AppendFormat(_T("<w:headerReference w:type=\"default\" r:id=\"%ls\"/>"), sId.GetBuffer());
} }
if( 0 != m_oFooterLeft ) if( 0 != m_oFooterLeft )
{ {
CString sId = SaveFile(m_oFooterLeft,oRenderParameter, false); CString sId = SaveFile(m_oFooterLeft,oRenderParameter, false);
sResult.AppendFormat(_T("<w:footerReference w:type=\"even\" r:id=\"%ls\"/>"), sId); sResult.AppendFormat(_T("<w:footerReference w:type=\"even\" r:id=\"%ls\"/>"), sId.GetBuffer());
} }
if( 0 != m_oFooterFirst ) if( 0 != m_oFooterFirst )
{ {
CString sId = SaveFile(m_oFooterFirst,oRenderParameter, false); CString sId = SaveFile(m_oFooterFirst,oRenderParameter, false);
sResult.AppendFormat(_T("<w:footerReference w:type=\"first\" r:id=\"%ls\"/>"), sId); sResult.AppendFormat(_T("<w:footerReference w:type=\"first\" r:id=\"%ls\"/>"), sId.GetBuffer());
} }
if( 0 != m_oFooterRight ) if( 0 != m_oFooterRight )
{ {
CString sId = SaveFile(m_oFooterRight,oRenderParameter, false); CString sId = SaveFile(m_oFooterRight,oRenderParameter, false);
sResult.AppendFormat(_T("<w:footerReference w:type=\"default\" r:id=\"%ls\"/>"), sId); sResult.AppendFormat(_T("<w:footerReference w:type=\"default\" r:id=\"%ls\"/>"), sId.GetBuffer());
} }
sResult.Append(_T("</w:sectPr>")); sResult.Append(_T("</w:sectPr>"));
return sResult; return sResult;
...@@ -761,7 +761,7 @@ CString RtfSectionProperty::SaveFile( TextItemContainerPtr oTarget, RenderParame ...@@ -761,7 +761,7 @@ CString RtfSectionProperty::SaveFile( TextItemContainerPtr oTarget, RenderParame
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 ); 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 ) );
...@@ -769,18 +769,18 @@ CString RtfSectionProperty::SaveFile( TextItemContainerPtr oTarget, RenderParame ...@@ -769,18 +769,18 @@ CString RtfSectionProperty::SaveFile( TextItemContainerPtr oTarget, RenderParame
oNewParameter.poRels = oNewRelsWr.get(); oNewParameter.poRels = oNewRelsWr.get();
sContent.Append( oTarget->RenderToOOX(oNewParameter) ); sContent.Append( oTarget->RenderToOOX(oNewParameter) );
sContent.AppendFormat( _T("</%ls>"), sRootName ); sContent.AppendFormat( _T("</%ls>"), sRootName.GetBuffer() );
CStringA sContentUTF = Convert::UnicodeToUtf8( sContent );
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;
DWORD dwBytesWritten = 0;
CFile file; CFile file;
if (file.CreateFileW(sFilePath) == S_OK) if (file.CreateFile(sFilePath) == S_OK)
{ {
file.WriteFile(sContentUTF.GetBuffer(), sContentUTF.GetLength()); file.WriteFile((void*)sXmlUTF.c_str(), sXmlUTF.length());
file.CloseFile(); file.CloseFile();
} }
...@@ -797,4 +797,4 @@ CString RtfSectionProperty::SaveFile( TextItemContainerPtr oTarget, RenderParame ...@@ -797,4 +797,4 @@ CString RtfSectionProperty::SaveFile( TextItemContainerPtr oTarget, RenderParame
srID = poOOXWriter->m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer"), sFilename ); srID = poOOXWriter->m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer"), sFilename );
} }
return srID; return srID;
} }
\ No newline at end of file
...@@ -124,12 +124,13 @@ public: ...@@ -124,12 +124,13 @@ public:
m_nZoom = 100; m_nZoom = 100;
//вычисляем стандартный default ansi codepage для системы //вычисляем стандартный default ansi codepage для системы
TCHAR codepage[7]; #if defined (_WIN32) || defined(_WIN64)
int nRes = GetLocaleInfo( LOCALE_SYSTEM_DEFAULT, LOCALE_IDEFAULTANSICODEPAGE, codepage, 6 ); TCHAR codepage[7];
if( nRes != 0 ) if( GetLocaleInfo( LOCALE_SYSTEM_DEFAULT, LOCALE_IDEFAULTANSICODEPAGE, codepage, 6 ) != 0)
m_nAnsiCodePage = _ttoi(codepage); m_nAnsiCodePage = _ttoi(codepage);
else else
m_nAnsiCodePage = CP_ACP; #endif
m_nAnsiCodePage = CP_ACP;
m_bDorderSurroundHeader = PROP_DEF; m_bDorderSurroundHeader = PROP_DEF;
m_bDorderSurroundFotter = PROP_DEF; m_bDorderSurroundFotter = PROP_DEF;
...@@ -616,4 +617,4 @@ public: RtfSectionProperty m_oProperty; ...@@ -616,4 +617,4 @@ public: RtfSectionProperty m_oProperty;
return _T(""); return _T("");
} }
}; };
typedef boost::shared_ptr<RtfSection> RtfSectionPtr; typedef boost::shared_ptr<RtfSection> RtfSectionPtr;
\ No newline at end of file
...@@ -156,7 +156,7 @@ CString RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter) ...@@ -156,7 +156,7 @@ CString RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter)
sResult.AppendFormat( _T("{\\sp{\\sn colSpan}{\\sv %d}}"),m_nColSpan); sResult.AppendFormat( _T("{\\sp{\\sn colSpan}{\\sv %d}}"),m_nColSpan);
//Rehydration //Rehydration
if( _T("") != m_sMetroBlob ) if( _T("") != m_sMetroBlob )
sResult.AppendFormat( _T("{\\sp{\\sn metroBlob}{\\sv %d}}"),m_sMetroBlob); sResult.AppendFormat( _T("{\\sp{\\sn metroBlob}{\\sv %d}}"),m_sMetroBlob.GetBuffer());
//Object Type //Object Type
if( PROP_DEF != m_bIsBullet ) if( PROP_DEF != m_bIsBullet )
...@@ -335,7 +335,7 @@ CString RtfShape::RenderToOOX(RenderParameter oRenderParameter) ...@@ -335,7 +335,7 @@ CString RtfShape::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append( _T("<pic:cNvPicPr><a:picLocks noChangeAspect=\"1\" noChangeArrowheads=\"1\"/></pic:cNvPicPr>") ); sResult.Append( _T("<pic:cNvPicPr><a:picLocks noChangeAspect=\"1\" noChangeArrowheads=\"1\"/></pic:cNvPicPr>") );
sResult.Append( _T("</pic:nvPicPr>") ); sResult.Append( _T("</pic:nvPicPr>") );
sResult.AppendFormat( _T("<pic:blipFill><a:blip r:embed=\"%ls\"/>"), m_oPicture->RenderToOOX(oRenderParameter) ); sResult.AppendFormat( _T("<pic:blipFill><a:blip r:embed=\"%ls\"/>"), m_oPicture->RenderToOOX(oRenderParameter).GetBuffer() );
CString sCrop; CString sCrop;
if( PROP_DEF != nCropLeft ) if( PROP_DEF != nCropLeft )
sCrop.AppendFormat( _T(" l=\"%d\""), nCropLeft ); //тысячный доли процента sCrop.AppendFormat( _T(" l=\"%d\""), nCropLeft ); //тысячный доли процента
...@@ -346,7 +346,7 @@ CString RtfShape::RenderToOOX(RenderParameter oRenderParameter) ...@@ -346,7 +346,7 @@ CString RtfShape::RenderToOOX(RenderParameter oRenderParameter)
if( PROP_DEF != nCropBottom ) if( PROP_DEF != nCropBottom )
sCrop.AppendFormat( _T(" b=\"%d\""), nCropBottom ); sCrop.AppendFormat( _T(" b=\"%d\""), nCropBottom );
if( false == sCrop.IsEmpty() ) if( false == sCrop.IsEmpty() )
sResult.AppendFormat( _T("<a:srcRect %ls/>"), sCrop ); sResult.AppendFormat( _T("<a:srcRect %ls/>"), sCrop.GetBuffer() );
sResult.Append( _T("<a:stretch><a:fillRect/></a:stretch>") ); sResult.Append( _T("<a:stretch><a:fillRect/></a:stretch>") );
sResult.Append( _T("</pic:blipFill>") ); sResult.Append( _T("</pic:blipFill>") );
if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal ) if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
...@@ -561,7 +561,7 @@ CString RtfShape::RenderToOOX(RenderParameter oRenderParameter) ...@@ -561,7 +561,7 @@ CString RtfShape::RenderToOOX(RenderParameter oRenderParameter)
for( int i = 2; i < (int)m_aWrapPoints.size() - 1; i+=2 ) for( int i = 2; i < (int)m_aWrapPoints.size() - 1; i+=2 )
sResult.AppendFormat( _T("<wp:lineTo x=\"%d\" y=\"%d\" />"), m_aWrapPoints[i], m_aWrapPoints[i+1] ); sResult.AppendFormat( _T("<wp:lineTo x=\"%d\" y=\"%d\" />"), m_aWrapPoints[i], m_aWrapPoints[i+1] );
sResult.Append( _T("</wp:wrapPolygon>") ); sResult.Append( _T("</wp:wrapPolygon>") );
sResult.AppendFormat( _T("</%ls>"), sTag ); sResult.AppendFormat( _T("</%ls>"), sTag.GetBuffer() );
} }
} }
int nImageID = poDocument->m_oIdGenerator.Generate_ImagePropId(); int nImageID = poDocument->m_oIdGenerator.Generate_ImagePropId();
...@@ -599,7 +599,7 @@ CString RtfShape::RenderToOOX(RenderParameter oRenderParameter) ...@@ -599,7 +599,7 @@ CString RtfShape::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append( _T("<pic:cNvPicPr><a:picLocks noChangeAspect=\"1\" noChangeArrowheads=\"1\"/></pic:cNvPicPr>") ); sResult.Append( _T("<pic:cNvPicPr><a:picLocks noChangeAspect=\"1\" noChangeArrowheads=\"1\"/></pic:cNvPicPr>") );
sResult.Append( _T("</pic:nvPicPr>") ); sResult.Append( _T("</pic:nvPicPr>") );
sResult.AppendFormat( _T("<pic:blipFill><a:blip r:embed=\"%ls\"/>"), m_oPicture->RenderToOOX(oRenderParameter) ); sResult.AppendFormat( _T("<pic:blipFill><a:blip r:embed=\"%ls\"/>"), m_oPicture->RenderToOOX(oRenderParameter).GetBuffer() );
CString sCrop; CString sCrop;
if( PROP_DEF != nCropLeft ) if( PROP_DEF != nCropLeft )
sCrop.AppendFormat( _T(" l=\"%d\""), nCropLeft ); //тысячный доли процента sCrop.AppendFormat( _T(" l=\"%d\""), nCropLeft ); //тысячный доли процента
...@@ -610,7 +610,7 @@ CString RtfShape::RenderToOOX(RenderParameter oRenderParameter) ...@@ -610,7 +610,7 @@ CString RtfShape::RenderToOOX(RenderParameter oRenderParameter)
if( PROP_DEF != nCropBottom ) if( PROP_DEF != nCropBottom )
sCrop.AppendFormat( _T(" b=\"%d\""), nCropBottom ); sCrop.AppendFormat( _T(" b=\"%d\""), nCropBottom );
if( false == sCrop.IsEmpty() ) if( false == sCrop.IsEmpty() )
sResult.AppendFormat( _T("<a:srcRect %ls/>"), sCrop ); sResult.AppendFormat( _T("<a:srcRect %ls/>"), sCrop.GetBuffer() );
sResult.Append( _T("<a:stretch><a:fillRect/></a:stretch>") ); sResult.Append( _T("<a:stretch><a:fillRect/></a:stretch>") );
sResult.Append( _T("</pic:blipFill>") ); sResult.Append( _T("</pic:blipFill>") );
...@@ -720,7 +720,7 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter) ...@@ -720,7 +720,7 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
if( _T("") == oRenderParameter.sValue ) if( _T("") == oRenderParameter.sValue )
sResult.Append( _T("<v:shape") ); sResult.Append( _T("<v:shape") );
else else
sResult.AppendFormat( _T("<%ls"),oRenderParameter.sValue ); sResult.AppendFormat( _T("<%ls"),oRenderParameter.sValue.GetBuffer() );
sResult.AppendFormat( _T(" id=\"_x0000_s%d\""), poDocument->GetShapeId( m_nID ) ); sResult.AppendFormat( _T(" id=\"_x0000_s%d\""), poDocument->GetShapeId( m_nID ) );
if( PROP_DEF != m_nShapeType ) if( PROP_DEF != m_nShapeType )
...@@ -922,7 +922,7 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter) ...@@ -922,7 +922,7 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
if( false == sStyle.IsEmpty() ) if( false == sStyle.IsEmpty() )
{ {
sStyle.Delete( sStyle.GetLength() - 1 ); sStyle.Delete( sStyle.GetLength() - 1 );
sResult.AppendFormat( _T(" style=\"%ls\""),sStyle ); sResult.AppendFormat( _T(" style=\"%ls\""),sStyle.GetBuffer() );
} }
if( PROP_DEF != m_bLayoutInCell ) if( PROP_DEF != m_bLayoutInCell )
...@@ -982,7 +982,7 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter) ...@@ -982,7 +982,7 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
} }
} }
} }
sResult.AppendFormat( _T(" adj=\"%ls\""),sAdjust ); sResult.AppendFormat( _T(" adj=\"%ls\""),sAdjust.GetBuffer() );
} }
//Geometry //Geometry
if( m_aWrapPoints.size() > 0 ) if( m_aWrapPoints.size() > 0 )
...@@ -1098,7 +1098,7 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter) ...@@ -1098,7 +1098,7 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
} }
} }
if( false == sStroke.IsEmpty() ) if( false == sStroke.IsEmpty() )
sResult.AppendFormat( _T("<v:stroke %ls/>"), sStroke ); sResult.AppendFormat( _T("<v:stroke %ls/>"), sStroke.GetBuffer() );
if( 0 != m_aTextItems ) if( 0 != m_aTextItems )
{ {
...@@ -1138,7 +1138,7 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter) ...@@ -1138,7 +1138,7 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
CString sPicture = m_oPicture->RenderToOOX(oRenderParameter); CString sPicture = m_oPicture->RenderToOOX(oRenderParameter);
if( _T("") == sPicture )//если не сохранилась картинка, то весь shape будет бесполезным if( _T("") == sPicture )//если не сохранилась картинка, то весь shape будет бесполезным
return _T(""); return _T("");
sResult.AppendFormat( _T("<v:imagedata r:id=\"%ls\""), sPicture ); sResult.AppendFormat( _T("<v:imagedata r:id=\"%ls\""), sPicture.GetBuffer() );
if( PROP_DEF != nCropLeft ) if( PROP_DEF != nCropLeft )
sResult.AppendFormat( _T(" cropleft=\"%df\""), nCropLeft ); sResult.AppendFormat( _T(" cropleft=\"%df\""), nCropLeft );
if( PROP_DEF != nCropTop ) if( PROP_DEF != nCropTop )
...@@ -1157,7 +1157,7 @@ CString RtfShape::RenderToOOXEnd(RenderParameter oRenderParameter) ...@@ -1157,7 +1157,7 @@ CString RtfShape::RenderToOOXEnd(RenderParameter oRenderParameter)
if( _T("") == oRenderParameter.sValue ) if( _T("") == oRenderParameter.sValue )
sResult.Append( _T("</v:shape>") ); sResult.Append( _T("</v:shape>") );
else else
sResult.AppendFormat( _T("</%ls>"), oRenderParameter.sValue ); sResult.AppendFormat( _T("</%ls>"), oRenderParameter.sValue.GetBuffer() );
if( RENDER_TO_OOX_PARAM_SHAPE_WSHAPE2 == oRenderParameter.nType ) if( RENDER_TO_OOX_PARAM_SHAPE_WSHAPE2 == oRenderParameter.nType )
; ;
else if( RENDER_TO_OOX_PARAM_SHAPE_WSHAPE == oRenderParameter.nType ) else if( RENDER_TO_OOX_PARAM_SHAPE_WSHAPE == oRenderParameter.nType )
...@@ -1182,4 +1182,4 @@ CString RtfShapeGroup::RenderToOOX(RenderParameter oRenderParameter) ...@@ -1182,4 +1182,4 @@ CString RtfShapeGroup::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append( m_aArray[i]->RenderToOOX( oNewParamShape ) ); sResult.Append( m_aArray[i]->RenderToOOX( oNewParamShape ) );
sResult.Append( RenderToOOXEnd( oNewParamGroup ) ); sResult.Append( RenderToOOXEnd( oNewParamGroup ) );
return sResult; return sResult;
} }
\ No newline at end of file
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
#include <atlbase.h> #include <atlbase.h>
#include <atlstr.h> #include <atlstr.h>
#else #else
#include "../../Common/DocxFormat/Source/Base/ASCString.h" #include "../../../../Common/DocxFormat/Source/Base/ASCString.h"
#endif #endif
class RtfToken class RtfToken
...@@ -24,4 +24,4 @@ public: ...@@ -24,4 +24,4 @@ public:
HasParameter = false; HasParameter = false;
Parameter = 0; Parameter = 0;
} }
}; };
\ No newline at end of file
...@@ -95,7 +95,7 @@ bool RtfWriter::SaveByItem() ...@@ -95,7 +95,7 @@ bool RtfWriter::SaveByItem()
oNewParam.nType = RENDER_TO_OOX_PARAM_FIRST_SECTION; oNewParam.nType = RENDER_TO_OOX_PARAM_FIRST_SECTION;
} }
sRtf = m_oDocument[0]->m_oProperty.RenderToRtf(oNewParam); sRtf = m_oDocument[0]->m_oProperty.RenderToRtf(oNewParam);
RtfInternalEncoder::Decode( sRtf, *m_oCurTempFileSectWriter ); RtfUtility::RtfInternalEncoder::Decode( sRtf, *m_oCurTempFileSectWriter );
//дописываем в файл //дописываем в файл
RELEASEOBJECT( m_oCurTempFileSectWriter ); RELEASEOBJECT( m_oCurTempFileSectWriter );
//создаем новый //создаем новый
...@@ -121,7 +121,7 @@ bool RtfWriter::SaveByItem() ...@@ -121,7 +121,7 @@ bool RtfWriter::SaveByItem()
sRtf.Append( _T("\\par") ); sRtf.Append( _T("\\par") );
//oNewParam.nValue = RENDER_TO_RTF_PARAM_NO_PAR; //oNewParam.nValue = RENDER_TO_RTF_PARAM_NO_PAR;
} }
RtfInternalEncoder::Decode( sRtf, *m_oCurTempFileWriter ); RtfUtility::RtfInternalEncoder::Decode( sRtf, *m_oCurTempFileWriter );
//m_oTempFileWriter->Write( (BYTE*)(LPCSTR)sRtf, sRtf.GetLength() ); //m_oTempFileWriter->Write( (BYTE*)(LPCSTR)sRtf, sRtf.GetLength() );
//удаляем элемент который только что написали //удаляем элемент который только что написали
...@@ -152,7 +152,7 @@ bool RtfWriter::SaveByItemEnd() ...@@ -152,7 +152,7 @@ bool RtfWriter::SaveByItemEnd()
oNewParam.nType = RENDER_TO_OOX_PARAM_FIRST_SECTION; oNewParam.nType = RENDER_TO_OOX_PARAM_FIRST_SECTION;
} }
sRtf = m_oDocument[0]->m_oProperty.RenderToRtf(oNewParam); sRtf = m_oDocument[0]->m_oProperty.RenderToRtf(oNewParam);
RtfInternalEncoder::Decode( sRtf, *m_oCurTempFileSectWriter ); RtfUtility::RtfInternalEncoder::Decode( sRtf, *m_oCurTempFileSectWriter );
//дописываем в файл //дописываем в файл
RELEASEOBJECT( m_oCurTempFileSectWriter ); RELEASEOBJECT( m_oCurTempFileSectWriter );
} }
...@@ -171,7 +171,7 @@ bool RtfWriter::SaveByItemEnd() ...@@ -171,7 +171,7 @@ bool RtfWriter::SaveByItemEnd()
//пишем заголовок потом все содежимое //пишем заголовок потом все содежимое
sRtf = CreateRtfStart(); sRtf = CreateRtfStart();
DWORD dwBytesWrite = 0; DWORD dwBytesWrite = 0;
RtfInternalEncoder::Decode( sRtf, oTargetFileWriter ); RtfUtility::RtfInternalEncoder::Decode( sRtf, oTargetFileWriter );
//WriteFile ( hTargetFile, sRtf, ( DWORD ) sRtf.GetLength(), &dwBytesWrite, NULL ); //WriteFile ( hTargetFile, sRtf, ( DWORD ) sRtf.GetLength(), &dwBytesWrite, NULL );
//копируем заголовки из массива и параграфы из темповых файлов //копируем заголовки из массива и параграфы из темповых файлов
...@@ -215,8 +215,8 @@ bool RtfWriter::SaveByItemEnd() ...@@ -215,8 +215,8 @@ bool RtfWriter::SaveByItemEnd()
//завершаем документ //завершаем документ
sRtf = CreateRtfEnd(); sRtf = CreateRtfEnd();
RtfInternalEncoder::Decode( sRtf, oTargetFileWriter ); RtfUtility::RtfInternalEncoder::Decode( sRtf, oTargetFileWriter );
byte nEndFile = 0; BYTE nEndFile = 0;
oTargetFileWriter.Write( &nEndFile, 1); oTargetFileWriter.Write( &nEndFile, 1);
} }
catch(...) catch(...)
...@@ -265,25 +265,25 @@ CString RtfWriter::CreateRtfStart() ...@@ -265,25 +265,25 @@ CString RtfWriter::CreateRtfStart()
{ {
sFootnote = m_oDocument.m_oFootnoteSep->RenderToRtf( oRenderParameter ); sFootnote = m_oDocument.m_oFootnoteSep->RenderToRtf( oRenderParameter );
if( _T("") != sFootnote ) if( _T("") != sFootnote )
sResult.AppendFormat( _T("{\\*\\ftnsep %ls}"), sFootnote ); sResult.AppendFormat( _T("{\\*\\ftnsep %ls}"), sFootnote.GetBuffer() );
} }
if( NULL != m_oDocument.m_oFootnoteCon ) if( NULL != m_oDocument.m_oFootnoteCon )
{ {
sFootnote = m_oDocument.m_oFootnoteCon->RenderToRtf( oRenderParameter ); sFootnote = m_oDocument.m_oFootnoteCon->RenderToRtf( oRenderParameter );
if( _T("") != sFootnote ) if( _T("") != sFootnote )
sResult.AppendFormat( _T("{\\*\\ftnsepc %ls}"), sFootnote ); sResult.AppendFormat( _T("{\\*\\ftnsepc %ls}"), sFootnote.GetBuffer() );
} }
if( NULL != m_oDocument.m_oEndnoteSep ) if( NULL != m_oDocument.m_oEndnoteSep )
{ {
sFootnote = m_oDocument.m_oEndnoteSep->RenderToRtf( oRenderParameter ); sFootnote = m_oDocument.m_oEndnoteSep->RenderToRtf( oRenderParameter );
if( _T("") != sFootnote ) if( _T("") != sFootnote )
sResult.AppendFormat( _T("{\\*\\aftnsep %ls}"), sFootnote ); sResult.AppendFormat( _T("{\\*\\aftnsep %ls}"), sFootnote.GetBuffer() );
} }
if( NULL != m_oDocument.m_oEndnoteCon ) if( NULL != m_oDocument.m_oEndnoteCon )
{ {
sFootnote = m_oDocument.m_oEndnoteCon->RenderToRtf( oRenderParameter ); sFootnote = m_oDocument.m_oEndnoteCon->RenderToRtf( oRenderParameter );
if( _T("") != sFootnote ) if( _T("") != sFootnote )
sResult.AppendFormat( _T("{\\*\\aftnsepc %ls}"), sFootnote ); sResult.AppendFormat( _T("{\\*\\aftnsepc %ls}"), sFootnote.GetBuffer() );
} }
sResult.Append(_T("\n\n")); sResult.Append(_T("\n\n"));
......
...@@ -64,26 +64,4 @@ public: ...@@ -64,26 +64,4 @@ public:
sResult.Replace(_T("'"), _T("&apos;")); sResult.Replace(_T("'"), _T("&apos;"));
return sResult; return sResult;
} }
//static CStringA UnicodeToCodepage( CStringW sUni, UINT nCodepage = CP_UTF8 )
//{
// CStringA sUtf;
// int nBufSize = WideCharToMultiByte(nCodepage, 0, sUni, -1, NULL, NULL, NULL, NULL);
// LPSTR pBuff = new CHAR[ nBufSize + 1 ];
// WideCharToMultiByte(nCodepage, 0, sUni, -1, pBuff, nBufSize, NULL, NULL);
// pBuff[ nBufSize ] = 0;
// sUtf.Append( pBuff );
// delete pBuff;
// return sUtf;
//}
//public: static CStringW CodepageToUnicode( CStringA sUtf, UINT nCodepage = CP_UTF8 )
// {
// CStringW sUni;
// int nBufSize = MultiByteToWideChar(nCodepage, 0, sUtf, -1, NULL, NULL);
// LPWSTR pBuff = new WCHAR[ nBufSize + 1 ];
// MultiByteToWideChar(nCodepage, 0, sUtf, -1, pBuff, nBufSize);
// pBuff[ nBufSize ] = 0;
// sUni.Append( pBuff );
// delete pBuff;
// return sUni;
// }
}; };
...@@ -7,6 +7,17 @@ ...@@ -7,6 +7,17 @@
#define BUF_SIZE 2048 #define BUF_SIZE 2048
#define ONE_INCH 2.54 #define ONE_INCH 2.54
#ifndef CP_ACP //ansi code page
#define CP_ACP 0
#endif
#ifndef CP_MACCP //mac code page
#define CP_MACCP 2
#endif
#ifndef CP_SYMBOL //Symbol
#define CP_SYMBOL 42
#endif
namespace Strings namespace Strings
{ {
static int ToDigit(TCHAR c) static int ToDigit(TCHAR c)
...@@ -20,29 +31,29 @@ namespace Strings ...@@ -20,29 +31,29 @@ namespace Strings
return 0; return 0;
} }
static COLORREF ToColor(const CString& strValue) static int ToColor(const CString& strValue)
{ {
// variables // variables
int blue = 0; int blue = 0;
int green = 0; int green = 0;
int red = 0; int red = 0;
CString color = strValue; color = color.Trim(); CString color = strValue; color = color.Trim();
if (color.Find(_T("0x"))!=-1) if (color.Find(_T("0x"))!=-1)
color.Delete(0,2); color.Delete(0,2);
if (color.Find(_T("#"))!=-1) if (color.Find(_T("#"))!=-1)
color.Delete(0,1); color.Delete(0,1);
while (color.GetLength() < 6) while (color.GetLength() < 6)
color = _T("0") + color; color = _T("0") + color;
red = 16*ToDigit(color[0]) + ToDigit(color[1]); red = 16*ToDigit(color[0]) + ToDigit(color[1]);
green = 16*ToDigit(color[2]) + ToDigit(color[3]); green = 16*ToDigit(color[2]) + ToDigit(color[3]);
blue = 16*ToDigit(color[4]) + ToDigit(color[5]); blue = 16*ToDigit(color[4]) + ToDigit(color[5]);
return RGB(red, green, blue); return RGB(red, green, blue);
} }
static void ToColor(const CString& strValue, int& nR, int& nG, int& nB, int& nA) static void ToColor(const CString& strValue, int& nR, int& nG, int& nB, int& nA)
{ {
CString color = strValue; color = color.Trim(); CString color = strValue; color = color.Trim();
...@@ -136,54 +147,113 @@ public: ...@@ -136,54 +147,113 @@ public:
_stscanf(str, _T("%d"), &nResult); _stscanf(str, _T("%d"), &nResult);
return nResult; return nResult;
} }
static bool MultybyteToUnicode(CStringA sInputStr, CStringW& sOutputStr, int nCodepage)
{
//todooo ПЕРЕПИСАТЬ
sOutputStr = _T("");
int nBufSize = MultiByteToWideChar(nCodepage, 0, sInputStr, -1, NULL, NULL);
LPWSTR p = new WCHAR[ nBufSize + 1 ];
int nRes = MultiByteToWideChar(nCodepage, MB_ERR_INVALID_CHARS, sInputStr, -1, p, nBufSize);
p[ nBufSize ] = 0;
if( 0 != nRes )
{
sOutputStr.Append( p );
delete p;
return true;
}
else
return false;
}
static CStringW Utf8ToUnicode(CStringA sInputStr)//todo
{
//todooo ПЕРЕПИСАТЬ
CStringW sResult;
int nBufSize = MultiByteToWideChar(CP_UTF8, 0, sInputStr, -1, NULL, NULL);
LPWSTR p = new WCHAR[ nBufSize + 1 ];
MultiByteToWideChar(CP_UTF8, 0, sInputStr, -1, p, nBufSize);
p[ nBufSize ] = 0;
sResult.Append( p );
delete p;
return sResult;
}
static CStringA UnicodeToUtf8(CStringW sInputStr)//todo
{
//todooo ПЕРЕПИСАТЬ
CStringA sResult;
int nBufSize = WideCharToMultiByte(CP_UTF8, 0, sInputStr, -1, NULL, NULL, NULL, NULL);
LPSTR p = new CHAR[ nBufSize + 1 ];
WideCharToMultiByte(CP_UTF8, 0, sInputStr, -1, p, nBufSize, NULL, NULL);
p[ nBufSize ] = 0;
sResult.Append( p );
delete p;
return sResult;
}
}; };
static const int aCodePages[][2] = {
//charset codepage
0, 1252, //ANSI
1, 0,//Default
2, 42,//Symbol
77, 10000,//Mac Roman
78, 10001,//Mac Shift Jis
79, 10003,//Mac Hangul
80, 10008,//Mac GB2312
81, 10002,//Mac Big5
83, 10005,//Mac Hebrew
84, 10004,//Mac Arabic
85, 10006,//Mac Greek
86, 10081,//Mac Turkish
87, 10021,//Mac Thai
88, 10029,//Mac East Europe
89, 10007,//Mac Russian
128, 932,//Shift JIS
129, 949,//Hangul
130, 1361,//Johab
134, 936,//GB2312
136, 950,//Big5
238, 1250,//Greek
161, 1253,//Greek
162, 1254,//Turkish
163, 1258,//Vietnamese
177, 1255,//Hebrew
178, 1256, //Arabic
186, 1257,//Baltic
204, 1251,//Russian
222, 874,//Thai
238, 1250,//Eastern European
254, 437,//PC 437
255, 850//OEM
};
class RtfUtility class RtfUtility
{ {
public: public:
static float String2Percent( CString sValue ) class RtfInternalEncoder
{
public:
static CString Encode( CString sFilename )
{
return _T("{\\*filename ") + sFilename + _T("\\*end}");
}
static void Decode( CString& sText, NFileWriter::CBufferedFileWriter& oFileWriter ) //сразу записывает в файл
{
CStringA sAnsiText; sAnsiText = sText;
int nStart = 0;
int nLenth = sAnsiText.GetLength();
int nFindRes = -1;
CString sFindString = _T("{\\*filename ");
int nFindStringLen = sFindString.GetLength();
CString sFindEnd = _T("\\*end}");
int nFindEndLen = sFindEnd.GetLength();
while( -1 != (nFindRes = sText.Find( sFindString, nStart )) )
{
oFileWriter.Write( (BYTE*)sAnsiText.GetBuffer() + nStart, nFindRes - nStart );
sText.ReleaseBuffer();
int nRightBound = 0;
nRightBound = sText.Find( sFindEnd, nStart + nFindStringLen );
CString sTargetFilename = sText.Mid( nFindRes + nFindStringLen, nRightBound - nFindRes - nFindStringLen );
DecodeFromFile( sTargetFilename, oFileWriter );
nStart = nRightBound + nFindEndLen;
}
oFileWriter.Write( (BYTE*)sAnsiText.GetBuffer() + nStart, nLenth - nStart );
sText.ReleaseBuffer();
}
private:
static void DecodeFromFile( CString& sFilename, NFileWriter::CBufferedFileWriter& oFileWriter )
{
CFile file;
if (file.OpenFile(sFilename) != S_OK) return;
DWORD dwBytesRead = 0;
BYTE byteBuffer[ BUF_SIZE ];
char aLookup[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
file.ReadFile(byteBuffer ,BUF_SIZE);
dwBytesRead = file.GetPosition();
while( 0 != dwBytesRead )
{
for( int i = 0; i < (int)dwBytesRead; i++ )
{
BYTE byteData = byteBuffer[ i ];
BYTE byteFirst = aLookup[ byteData / 0x10 ];
BYTE byteSecond = aLookup[ byteData % 0x10 ];
oFileWriter.Write( &byteFirst, 1 );
oFileWriter.Write( &byteSecond, 1 );
}
dwBytesRead = file.GetPosition();
file.ReadFile(byteBuffer ,BUF_SIZE);
dwBytesRead = file.GetPosition() - dwBytesRead;
}
file.CloseFile();
}
};
static float String2Percent( CString sValue )
{ {
int nPosition; int nPosition;
if( (nPosition = sValue.Find( _T("f") )) != -1 ) if( (nPosition = sValue.Find( _T("f") )) != -1 )
...@@ -286,13 +356,13 @@ public: ...@@ -286,13 +356,13 @@ public:
{ {
return (float)(1.0 * emu / (635 * 20.0)); return (float)(1.0 * emu / (635 * 20.0));
} }
static void WriteDataToFileBinary(CString& sFilename, byte* pbData, int nLength) static void WriteDataToFileBinary(CString& sFilename, BYTE* pbData, int nLength)
{ {
if( NULL == pbData ) if( NULL == pbData )
return; return;
CFile file; CFile file;
if (file.CreateFileW(sFilename) != S_OK) return; if (file.CreateFile(sFilename) != S_OK) return;
DWORD dwBytesWritten; DWORD dwBytesWritten;
file.WriteFile(pbData ,nLength); file.WriteFile(pbData ,nLength);
...@@ -302,7 +372,7 @@ public: ...@@ -302,7 +372,7 @@ public:
{ {
CFile file; CFile file;
if (file.CreateFileW(sFilename) != S_OK) return; if (file.CreateFile(sFilename) != S_OK) return;
TCHAR * buf = sData.GetBuffer(); TCHAR * buf = sData.GetBuffer();
int nLengthText = sData.GetLength(); int nLengthText = sData.GetLength();
...@@ -342,7 +412,7 @@ public: ...@@ -342,7 +412,7 @@ public:
CString sHexText; CString sHexText;
for( int i = 0; i < sText.GetLength(); i++ ) for( int i = 0; i < sText.GetLength(); i++ )
{ {
TBYTE byteChar = sText[i]; BYTE byteChar = sText[i];
sHexText.AppendFormat( _T("%x"), byteChar ); sHexText.AppendFormat( _T("%x"), byteChar );
} }
return sHexText; return sHexText;
...@@ -359,9 +429,9 @@ public: ...@@ -359,9 +429,9 @@ public:
} }
return sText; return sText;
} }
static byte ToByte( TCHAR cChar ) static BYTE ToByte( TCHAR cChar )
{ {
return (byte)(cChar > 'F' ? cChar - 0x57 : cChar > '9' ? cChar - 0x37 : cChar - 0x30); return (BYTE)(cChar > 'F' ? cChar - 0x57 : cChar > '9' ? cChar - 0x37 : cChar - 0x30);
} }
static bool IsAlpha( int nChar ) static bool IsAlpha( int nChar )
{ {
...@@ -381,30 +451,34 @@ public: ...@@ -381,30 +451,34 @@ public:
; ;
return sResult; return sResult;
} }
static int CharsetToCodepage( int nCharset ) static int CharsetToCodepage( int nCharset )
{ {
CHARSETINFO Info; #if defined (_WIN32) || defined(_WIN64)
DWORD* dwAcp = (DWORD*)nCharset; CHARSETINFO Info;
if( TRUE == TranslateCharsetInfo(dwAcp, &Info, TCI_SRCCHARSET) ) DWORD* dwAcp = (DWORD*)nCharset;
return Info.ciACP; if( TRUE == TranslateCharsetInfo(dwAcp, &Info, TCI_SRCCHARSET) )
return Info.ciACP;
for( int i = 0; i < nCodePagesLength; i++ )
if( aCodePages[i][0] == nCharset ) int CodePagesLength = sizeof( aCodePages ) / ( sizeof( int ) );
return aCodePages[i][1]; for( int i = 0; i < nCodePagesLength; i++ )
return 1252;//ANSI if( aCodePages[i][0] == nCharset )
} return aCodePages[i][1];
static int CodepageToCharset( int nCodepage ) #endif
{ return 1252;//ANSI
CHARSETINFO Info; }
DWORD* dwAcp = (DWORD*)nCodepage; // static int CodepageToCharset( int nCodepage )
if( TRUE == TranslateCharsetInfo(dwAcp, &Info, TCI_SRCCODEPAGE) ) // {
return Info.ciCharset; // CHARSETINFO Info;
// DWORD* dwAcp = (DWORD*)nCodepage;
for( int i = 0; i < nCodePagesLength; i++ ) // if( TRUE == TranslateCharsetInfo(dwAcp, &Info, TCI_SRCCODEPAGE) )
if( aCodePages[i][1] == nCodepage ) // return Info.ciCharset;
return aCodePages[i][0];
return 0;//ANSI // int CodePagesLength = sizeof( aCodePages ) / ( sizeof( int ) );
} // for( int i = 0; i < nCodePagesLength; i++ )
// if( aCodePages[i][1] == nCodepage )
// return aCodePages[i][0];
// return 0;//ANSI
// }
static bool IsMacCharset( int nCharset ) static bool IsMacCharset( int nCharset )
{ {
return nCharset == 77 || nCharset == 78 || nCharset == 79 || nCharset == 80 || return nCharset == 77 || nCharset == 78 || nCharset == 79 || nCharset == 80 ||
...@@ -417,109 +491,5 @@ public: ...@@ -417,109 +491,5 @@ public:
nCodepage == 10002 || nCodepage == 10005 || nCodepage == 10004 || nCodepage == 10006 || nCodepage == 10002 || nCodepage == 10005 || nCodepage == 10004 || nCodepage == 10006 ||
nCodepage == 10081 || nCodepage == 10021 || nCodepage == 10029 || nCodepage == 10007; nCodepage == 10081 || nCodepage == 10021 || nCodepage == 10029 || nCodepage == 10007;
} }
private:
static const int aCodePages[][2];
static const int nCodePagesLength;
};
__declspec(selectany) const int RtfUtility::aCodePages[][2] = {
//charset codepage
0, 1252, //ANSI
1, 0,//Default
2, 42,//Symbol
77, 10000,//Mac Roman
78, 10001,//Mac Shift Jis
79, 10003,//Mac Hangul
80, 10008,//Mac GB2312
81, 10002,//Mac Big5
83, 10005,//Mac Hebrew
84, 10004,//Mac Arabic
85, 10006,//Mac Greek
86, 10081,//Mac Turkish
87, 10021,//Mac Thai
88, 10029,//Mac East Europe
89, 10007,//Mac Russian
128, 932,//Shift JIS
129, 949,//Hangul
130, 1361,//Johab
134, 936,//GB2312
136, 950,//Big5
238, 1250,//Greek
161, 1253,//Greek
162, 1254,//Turkish
163, 1258,//Vietnamese
177, 1255,//Hebrew
178, 1256, //Arabic
186, 1257,//Baltic
204, 1251,//Russian
222, 874,//Thai
238, 1250,//Eastern European
254, 437,//PC 437
255, 850//OEM
};
__declspec(selectany) const int RtfUtility::nCodePagesLength = sizeof( aCodePages ) / ( sizeof( int ) );
class RtfInternalEncoder
{
public:
static CString Encode( CString sFilename )
{
return _T("{\\*filename ") + sFilename + _T("\\*end}");
}
static void Decode( CString& sText, NFileWriter::CBufferedFileWriter& oFileWriter ) //сразу записывает в файл
{
CStringA sAnsiText; sAnsiText = sText;
int nStart = 0;
int nLenth = sAnsiText.GetLength();
int nFindRes = -1;
CString sFindString = _T("{\\*filename ");
int nFindStringLen = sFindString.GetLength();
CString sFindEnd = _T("\\*end}");
int nFindEndLen = sFindEnd.GetLength();
while( -1 != (nFindRes = sText.Find( sFindString, nStart )) )
{
oFileWriter.Write( (BYTE*)sAnsiText.GetBuffer() + nStart, nFindRes - nStart );
sText.ReleaseBuffer();
int nRightBound = 0;
nRightBound = sText.Find( sFindEnd, nStart + nFindStringLen );
CString sTargetFilename = sText.Mid( nFindRes + nFindStringLen, nRightBound - nFindRes - nFindStringLen );
DecodeFromFile( sTargetFilename, oFileWriter );
nStart = nRightBound + nFindEndLen;
}
oFileWriter.Write( (BYTE*)sAnsiText.GetBuffer() + nStart, nLenth - nStart );
sText.ReleaseBuffer();
}
private:
static void DecodeFromFile( CString& sFilename, NFileWriter::CBufferedFileWriter& oFileWriter )
{
CFile file;
if (file.OpenFile(sFilename) != S_OK) return;
DWORD dwBytesRead = 0;
BYTE byteBuffer[ BUF_SIZE ];
char aLookup[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
file.ReadFile(byteBuffer ,BUF_SIZE);
dwBytesRead = file.GetPosition();
while( 0 != dwBytesRead )
{
for( int i = 0; i < (int)dwBytesRead; i++ )
{
byte byteData = byteBuffer[ i ];
byte byteFirst = aLookup[ byteData / 0x10 ];
byte byteSecond = aLookup[ byteData % 0x10 ];
oFileWriter.Write( &byteFirst, 1 );
oFileWriter.Write( &byteSecond, 1 );
}
dwBytesRead = file.GetPosition();
file.ReadFile(byteBuffer ,BUF_SIZE);
dwBytesRead = file.GetPosition() - dwBytesRead;
}
file.CloseFile();
}
}; };
...@@ -27,13 +27,13 @@ public: ...@@ -27,13 +27,13 @@ public:
{ {
CFile file; CFile file;
if (file.CreateFileW(sFolder + FILE_SEPARATOR_STR + _T("[Content_Types].xml")) != S_OK) return false; if (file.CreateFile(sFolder + FILE_SEPARATOR_STR + _T("[Content_Types].xml")) != S_OK) return false;
DWORD dwBytesWritten;
CString sXml = CreateXml(); CString sXml = CreateXml();
CStringA sXmlUTF = Convert::UnicodeToUtf8( sXml );//todooo UTF32 !!!
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
file.WriteFile( sXmlUTF.GetBuffer(), sXmlUTF.GetLength());
file.WriteFile((void*)sXmlUTF.c_str(), sXmlUTF.length());
file.CloseFile(); file.CloseFile();
return true; return true;
...@@ -57,11 +57,11 @@ private: ...@@ -57,11 +57,11 @@ private:
sResult.Append( _T("<Default Extension=\"xml\" ContentType=\"application/xml\"/>") ); sResult.Append( _T("<Default Extension=\"xml\" ContentType=\"application/xml\"/>") );
for( int i = 0; i < (int)m_aExtensions.size(); i++ ) for( int i = 0; i < (int)m_aExtensions.size(); i++ )
sResult.AppendFormat( _T("<Default Extension=\"%ls\" ContentType=\"%ls\"/>"), m_aExtensions[i], m_aExtTypes[i]); sResult.AppendFormat( _T("<Default Extension=\"%ls\" ContentType=\"%ls\"/>"), m_aExtensions[i].GetBuffer(), m_aExtTypes[i].GetBuffer());
for( int i = 0; i < (int)m_aTargets.size(); i++ ) for( int i = 0; i < (int)m_aTargets.size(); i++ )
sResult.AppendFormat( _T("<Override PartName=\"%ls\" ContentType=\"%ls\"/>"), m_aTargets[i], m_aTypes[i]); sResult.AppendFormat( _T("<Override PartName=\"%ls\" ContentType=\"%ls\"/>"), m_aTargets[i].GetBuffer(), m_aTypes[i].GetBuffer());
sResult.Append( _T("</Types>") ); sResult.Append( _T("</Types>") );
return sResult; return sResult;
} }
}; };
\ No newline at end of file
...@@ -23,15 +23,17 @@ public: ...@@ -23,15 +23,17 @@ public:
if( false == m_sFileXml.IsEmpty() ) if( false == m_sFileXml.IsEmpty() )
{ {
CFile file; CFile file;
if (file.CreateFileW(pathWord + FILE_SEPARATOR_STR + _T("fontTable.xml"))) return false; if (file.CreateFile(pathWord + FILE_SEPARATOR_STR + _T("fontTable.xml"))) return false;
m_oWriter.m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable"), _T("fontTable.xml") ); m_oWriter.m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable"), _T("fontTable.xml") );
m_oWriter.m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml"), _T("/word/fontTable.xml") ); m_oWriter.m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml"), _T("/word/fontTable.xml") );
CString sXml = CreateXml(); std::wstring sXml = CreateXml();
CStringA sXmlUTF = Convert::UnicodeToUtf8( sXml );
file.WriteFile(sXmlUTF.GetBuffer(), sXmlUTF.GetLength()); std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml);
file.WriteFile((void*)sXmlUTF.c_str(), sXmlUTF.length());
file.CloseFile(); file.CloseFile();
return true; return true;
} }
...@@ -47,14 +49,16 @@ public: ...@@ -47,14 +49,16 @@ public:
} }
private: private:
CString m_sFileXml; CString m_sFileXml;
OOXWriter& m_oWriter;
CString CreateXml() OOXWriter& m_oWriter;
std::wstring CreateXml()
{ {
CString sResult; std::wstring sResult;
sResult.Append( _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>") ); sResult.append( _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>") );
sResult.Append( _T("<w:fonts xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">") ); sResult.append( _T("<w:fonts xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">") );
sResult.Append( m_sFileXml ); sResult.append( m_sFileXml.GetBuffer() );
sResult.Append( _T("</w:fonts>") ); sResult.append( _T("</w:fonts>") );
return sResult; return sResult;
} }
}; };
\ No newline at end of file
...@@ -16,7 +16,7 @@ public: ...@@ -16,7 +16,7 @@ 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 ); sFootnote.AppendFormat( _T(" w:type=\"%ls\""), sType.GetBuffer() );
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,7 +29,7 @@ public: ...@@ -29,7 +29,7 @@ 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 ); m_sFootnotes.AppendFormat( _T(" w:type=\"%ls\""), sType.GetBuffer() );
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(">") );
...@@ -41,23 +41,27 @@ public: ...@@ -41,23 +41,27 @@ public:
if( m_sFootnotes.IsEmpty() ) return false; if( m_sFootnotes.IsEmpty() ) return false;
CFile file; CFile file;
if (file.CreateFileW(sFolder + FILE_SEPARATOR_STR + _T("footnotes.xml"))) return false; if (file.CreateFile(sFolder + FILE_SEPARATOR_STR + _T("footnotes.xml"))) return false;
m_oWriter.m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes"), _T("footnotes.xml") ); m_oWriter.m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes"), _T("footnotes.xml") );
m_oWriter.m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml"), _T("/word/footnotes.xml") ); m_oWriter.m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml"), _T("/word/footnotes.xml") );
CString sXml = CreateXml(); CString sXml = CreateXml();
CStringA sXmlUTF = Convert::UnicodeToUtf8( sXml );
file.WriteFile(sXmlUTF.GetBuffer(), sXmlUTF.GetLength()); std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
file.WriteFile((void*)sXmlUTF.c_str(), sXmlUTF.length());
file.CloseFile(); file.CloseFile();
return true; return true;
} }
private: private:
RtfDocument& m_oDocument; RtfDocument& m_oDocument;
OOXWriter& m_oWriter; OOXWriter& m_oWriter;
CString m_sFootnotes;
CString CreateXml() CString m_sFootnotes;
CString CreateXml()
{ {
CString sResult; CString sResult;
sResult.Append( _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>") ); sResult.Append( _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>") );
...@@ -83,7 +87,7 @@ public: ...@@ -83,7 +87,7 @@ 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 ); sEndnote.AppendFormat( _T(" w:type=\"%ls\""), sType.GetBuffer() );
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(">") );
...@@ -96,7 +100,7 @@ public: ...@@ -96,7 +100,7 @@ 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 ); m_sEndnotes.AppendFormat( _T(" w:type=\"%ls\""), sType.GetBuffer() );
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(">") );
...@@ -108,14 +112,14 @@ public: ...@@ -108,14 +112,14 @@ public:
if( m_sEndnotes.IsEmpty() ) return false; if( m_sEndnotes.IsEmpty() ) return false;
CFile file; CFile file;
if (file.CreateFileW(sFolder + FILE_SEPARATOR_STR + _T("endnotes.xml"))) return false; if (file.CreateFile(sFolder + FILE_SEPARATOR_STR + _T("endnotes.xml"))) return false;
m_oWriter.m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes"), _T("endnotes.xml") ); m_oWriter.m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes"), _T("endnotes.xml") );
m_oWriter.m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml"), _T("/word/endnotes.xml") ); m_oWriter.m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml"), _T("/word/endnotes.xml") );
CStringA sXml = CreateXml(); std::string sXml = CreateXml();
file.WriteFile(sXml.GetBuffer(), sXml.GetLength()); file.WriteFile((void*)sXml.c_str(), sXml.length());
file.CloseFile(); file.CloseFile();
return true; return true;
} }
...@@ -123,14 +127,15 @@ private: ...@@ -123,14 +127,15 @@ private:
RtfDocument& m_oDocument; RtfDocument& m_oDocument;
OOXWriter& m_oWriter; OOXWriter& m_oWriter;
CString m_sEndnotes; CString m_sEndnotes;
CStringA CreateXml()
std::string CreateXml()
{ {
CString sResult; std::wstring sResult;
sResult.Append( _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>") ); sResult.append( _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>") );
sResult.AppendChar('\n'); sResult.append( _T("<w:endnotes xmlns:wpc=\"http://schemas.microsoft.com/office/word/2008/6/28/wordprocessingCanvas\" xmlns:mc=\"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:wp14=\"http://schemas.microsoft.com/office/word/2008/9/16/wordprocessingDrawing\" 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:w14=\"http://schemas.microsoft.com/office/word/2009/2/wordml\" xmlns:wpg=\"http://schemas.microsoft.com/office/word/2008/6/28/wordprocessingGroup\" xmlns:wpi=\"http://schemas.microsoft.com/office/word/2008/6/28/wordprocessingInk\" xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\" xmlns:wps=\"http://schemas.microsoft.com/office/word/2008/6/28/wordprocessingShape\" >") );
sResult.Append( _T("<w:endnotes xmlns:wpc=\"http://schemas.microsoft.com/office/word/2008/6/28/wordprocessingCanvas\" xmlns:mc=\"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:wp14=\"http://schemas.microsoft.com/office/word/2008/9/16/wordprocessingDrawing\" 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:w14=\"http://schemas.microsoft.com/office/word/2009/2/wordml\" xmlns:wpg=\"http://schemas.microsoft.com/office/word/2008/6/28/wordprocessingGroup\" xmlns:wpi=\"http://schemas.microsoft.com/office/word/2008/6/28/wordprocessingInk\" xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\" xmlns:wps=\"http://schemas.microsoft.com/office/word/2008/6/28/wordprocessingShape\" >") ); sResult.append( m_sEndnotes.GetBuffer() );
sResult.Append( m_sEndnotes ); sResult.append( _T("</w:endnotes>") );
sResult.Append( _T("</w:endnotes>") );
return Convert::UnicodeToUtf8( sResult); return NSFile::CUtf8Converter::GetUtf8StringFromUnicode( sResult);
} }
}; };
\ No newline at end of file
...@@ -23,17 +23,16 @@ public: ...@@ -23,17 +23,16 @@ public:
{ {
CFile file; CFile file;
if (file.CreateFileW(sFolder + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR + _T("numbering.xml")) != S_OK) return false; if (file.CreateFile(sFolder + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR + _T("numbering.xml")) != S_OK) return false;
m_oWriter.m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering"), _T("numbering.xml") ); m_oWriter.m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering"), _T("numbering.xml") );
m_oWriter.m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml"), _T("/word/numbering.xml") ); m_oWriter.m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml"), _T("/word/numbering.xml") );
DWORD dwBytesWritten; std::wstring sXml = CreateXml();
CString sXml = CreateXml(); std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml);
CStringA sXmlUTF = Convert::UnicodeToUtf8( sXml );
file.WriteFile((void*)sXmlUTF.c_str(), sXmlUTF.length());
file.WriteFile(sXmlUTF.GetBuffer(), sXmlUTF.GetLength()); file.CloseFile();
file.CloseFile();
return true; return true;
} }
...@@ -45,15 +44,17 @@ public: ...@@ -45,15 +44,17 @@ public:
} }
private: private:
CString m_sFileXml; CString m_sFileXml;
OOXWriter& m_oWriter;
CString CreateXml() OOXWriter& m_oWriter;
std::wstring CreateXml()
{ {
CString sResult; std::wstring sResult;
sResult.Append( _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>") ); sResult.append( _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>") );
sResult.Append( _T("\n") ); sResult.append( _T("\n") );
sResult.Append( _T("<w:numbering xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\">") ); sResult.append( _T("<w:numbering xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\">") );
sResult.Append( m_sFileXml ); sResult.append( m_sFileXml.GetBuffer() );
sResult.Append( _T("</w:numbering>") ); sResult.append( _T("</w:numbering>") );
return sResult; return sResult;
} }
}; };
\ No newline at end of file
...@@ -38,7 +38,7 @@ public: ...@@ -38,7 +38,7 @@ public:
sResult.Append( _T("<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">") ); sResult.Append( _T("<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">") );
for( int i = 0; i < (int)m_aTargets.size(); i++ ) for( int i = 0; i < (int)m_aTargets.size(); i++ )
{ {
sResult.AppendFormat( _T("<Relationship Id=\"%ls\" Type=\"%ls\" Target=\"%ls\""), m_aIDs[i], m_aTypes[i], m_aTargets[i]); sResult.AppendFormat( _T("<Relationship Id=\"%ls\" Type=\"%ls\" Target=\"%ls\""), m_aIDs[i].GetBuffer(), m_aTypes[i].GetBuffer(), m_aTargets[i].GetBuffer());
if( false == m_aModes[i] ) if( false == m_aModes[i] )
sResult.Append( _T(" TargetMode=\"External\"") ); sResult.Append( _T(" TargetMode=\"External\"") );
sResult.Append( _T("/>") ); sResult.Append( _T("/>") );
...@@ -52,16 +52,17 @@ public: ...@@ -52,16 +52,17 @@ public:
if( m_aTargets.size() < 1 )return false; if( m_aTargets.size() < 1 )return false;
CString pathRels = sFolder + FILE_SEPARATOR_STR + _T("_rels"); CString pathRels = sFolder + FILE_SEPARATOR_STR + _T("_rels");
FileSystem::Directory::CreateDirectoryW(pathRels) ; FileSystem::Directory::CreateDirectory(pathRels) ;
CFile file; CFile file;
if (file.CreateFileW(pathRels + FILE_SEPARATOR_STR + m_sFileName + _T(".rels"))) return false; if (file.CreateFile(pathRels + FILE_SEPARATOR_STR + m_sFileName + _T(".rels"))) return false;
DWORD dwBytesWritten;
CString sXml = CreateXml(); CString sXml = CreateXml();
CStringA sXmlUTF = Convert::UnicodeToUtf8( sXml );
file.WriteFile(sXmlUTF.GetBuffer(), sXmlUTF.GetLength()); std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
file.WriteFile((void*)sXmlUTF.c_str(), sXmlUTF.length());
file.CloseFile(); file.CloseFile();
} }
}; };
typedef boost::shared_ptr<OOXRelsWriter> OOXRelsWriterPtr; typedef boost::shared_ptr<OOXRelsWriter> OOXRelsWriterPtr;
\ No newline at end of file
...@@ -26,16 +26,16 @@ public: ...@@ -26,16 +26,16 @@ public:
if( false == m_sFileXml.IsEmpty() ) if( false == m_sFileXml.IsEmpty() )
{ {
CFile file; CFile file;
if (file.CreateFileW(pathWord + FILE_SEPARATOR_STR + _T("styles.xml"))) return false; if (file.CreateFile(pathWord + FILE_SEPARATOR_STR + _T("styles.xml"))) return false;
m_oWriter.m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"), _T("styles.xml") ); m_oWriter.m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"), _T("styles.xml") );
m_oWriter.m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"), _T("/word/styles.xml") ); m_oWriter.m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"), _T("/word/styles.xml") );
DWORD dwBytesWritten; std::wstring sXml = CreateXml();
CString sXml = CreateXml(); std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml);
CStringA sXmlUTF = Convert::UnicodeToUtf8( sXml );
file.WriteFile((void*)sXmlUTF.c_str(), sXmlUTF.length());
file.WriteFile(sXmlUTF.GetBuffer(), sXmlUTF.GetLength());
file.CloseFile(); file.CloseFile();
return true; return true;
} }
...@@ -49,14 +49,14 @@ private: ...@@ -49,14 +49,14 @@ private:
CString m_sFileXml; CString m_sFileXml;
OOXWriter& m_oWriter; OOXWriter& m_oWriter;
CString CreateXml() std::wstring CreateXml()
{ {
CString sResult; std::wstring sResult;
sResult.Append( _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>") ); sResult.append( _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>") );
sResult.Append( _T("\n") ); sResult.append( _T("\n") );
sResult.Append( _T("<w:styles xmlns:w = \"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">") ); sResult.append( _T("<w:styles xmlns:w = \"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">") );
sResult.Append( m_sFileXml ); sResult.append( m_sFileXml.GetBuffer() );
sResult.Append( _T("</w:styles>") ); sResult.append( _T("</w:styles>") );
return sResult; return sResult;
} }
}; };
\ No newline at end of file
...@@ -19,11 +19,11 @@ namespace NFileWriter ...@@ -19,11 +19,11 @@ namespace NFileWriter
// ( ) // ( )
virtual void Flush () = 0; virtual void Flush () = 0;
// //
virtual void Seek ( LONG64 lPosition, DWORD dwFrom = FILE_CURRENT ) = 0; virtual void Seek ( LONG64 lPosition, DWORD dwFrom = 0 ) = 0;
// //
virtual void GetPosition(ULONGLONG& nPos) = 0; virtual void GetPosition(ULONG64& nPos) = 0;
// //
virtual void GetSize(ULONGLONG& nLen) = 0; virtual void GetSize(ULONG64& nLen) = 0;
public : public :
...@@ -109,7 +109,7 @@ namespace NFileWriter ...@@ -109,7 +109,7 @@ namespace NFileWriter
while ( 0 >= ( lBufferFreeLength = m_lBufferSize - m_lWritePointer ) ) while ( 0 >= ( lBufferFreeLength = m_lBufferSize - m_lWritePointer ) )
{ {
// , , // , ,
if ( FALSE == WriteBuffer ( m_lBufferSize ) ) if ( false == WriteBuffer ( m_lBufferSize ) )
throw 1; throw 1;
} }
...@@ -135,7 +135,7 @@ namespace NFileWriter ...@@ -135,7 +135,7 @@ namespace NFileWriter
if ( 0 < m_lWritePointer ) if ( 0 < m_lWritePointer )
{ {
// , // ,
if ( FALSE == WriteBuffer ( m_lWritePointer ) ) if ( false == WriteBuffer ( m_lWritePointer ) )
throw 1; throw 1;
} }
} }
...@@ -156,13 +156,13 @@ namespace NFileWriter ...@@ -156,13 +156,13 @@ namespace NFileWriter
} }
// //
virtual void GetPosition(ULONGLONG& nPos) virtual void GetPosition(ULONG64& nPos)
{ {
nPos = m_oFile.GetPosition() + m_lWritePointer; nPos = m_oFile.GetPosition() + m_lWritePointer;
} }
// //
virtual void GetSize(ULONGLONG& nLen) virtual void GetSize(ULONG64& nLen)
{ {
nLen = m_oFile.GetFileSize() + m_lWritePointer; nLen = m_oFile.GetFileSize() + m_lWritePointer;
...@@ -170,17 +170,17 @@ namespace NFileWriter ...@@ -170,17 +170,17 @@ namespace NFileWriter
private : private :
// //
BOOL WriteBuffer ( LONG64 lSize ) bool WriteBuffer ( LONG64 lSize )
{ {
// //
if (m_oFile.WriteFile(m_lpBuffer, ( DWORD ) lSize) != S_OK) if (m_oFile.WriteFile(m_lpBuffer, ( DWORD ) lSize) != S_OK)
{ {
// - , FALSE // - , FALSE
return FALSE; return false;
} }
// 0 // 0
m_lWritePointer = 0; m_lWritePointer = 0;
return TRUE; return true;
} }
}; };
} }
\ No newline at end of file
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