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
#include <vector>
#include <string>
#include "IdGenerator.h"
#include "RtfDefine.h"
......@@ -57,11 +58,14 @@ public:
};
template<class T> class ItemContainer
template<class T>
class ItemContainer
{
protected:
std::vector<T> m_aArray;
public:
ItemContainer( )
{
}
......@@ -159,11 +163,11 @@ template<class T> class ItemSingleContainer: public ItemContainer<T>
public:
int AddItem( T piRend)
{
for( int i = 0; i < (int)m_aArray.size(); i++ )
if( m_aArray[i] == piRend )
for( int i = 0; i < ItemContainer<T>::m_aArray.size(); i++ )
if( ItemContainer<T>::m_aArray[i] == piRend )
return i;
m_aArray.push_back(piRend);
return (int)m_aArray.size() - 1;
ItemContainer<T>::m_aArray.push_back(piRend);
return (int)ItemContainer<T>::m_aArray.size() - 1;
}
};
......@@ -172,16 +176,16 @@ template<class T> class ItemWithLastContainer: public ItemContainer<T>
public:
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 )
{
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
//delete oStream.lpstbl;
delete[] pData;
if( FAILED( hRes ) )
if( hRes != S_OK )
Utils::RemoveDirOrFile( sOleStorageName );
}
}
......@@ -325,7 +325,7 @@ bool ParagraphPropDestination::ExecuteCommand(RtfDocument& oDocument, RtfReader&
AddItem( m_oCurParagraph, oReader, true, false );
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_oOldList = RtfOldListPtr( new RtfOldList() );
......
......@@ -1078,7 +1078,7 @@ private: RtfShape& m_oShape;
CString m_sFile;
CString m_sData;
bool m_bBin;
byte* m_pbBin;
BYTE* m_pbBin;
int m_nBinLength;
public: PictureReader( RtfReader& oReader, RtfShape& oShape ):m_oShape(oShape)
{
......@@ -1802,8 +1802,9 @@ private: void TryToPepairResult( RtfDocument& oDocument, RtfReader& oReader )
return;
sResTokenize = sField.Tokenize( _T(" \""), nStartTokenize );
int nCommand = 0; //0 - none; 1 - \f; 3 - other
bool bWaitRightBreak = false;
while( sResTokenize != "" )
while( sResTokenize != _T("") )
{
int nTokenLen = sResTokenize.GetLength();
if( nTokenLen > 0 && sResTokenize[0] == '\"' && sResTokenize[nTokenLen - 1] != '\"' ) //текст в кавычках считается как один
......@@ -3199,9 +3200,9 @@ public: RtfSectionCommand()
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_BOOL( _T("pgbrdrsna"), oReader.m_oCurSectionProp.m_nBorderAlign, sCommand, hasParameter, parameter)
else if( _T("header" == sCommand || "footer" == sCommand || "headerl") == sCommand ||
_T("headerr" == sCommand || "headerf" == sCommand || "footerl") == sCommand ||
_T("footerr" == sCommand || "footerf") == sCommand )
else if( _T("header") == sCommand || _T("footer") == sCommand || _T("headerl") == sCommand ||
_T("headerr") == sCommand || _T("headerf") == sCommand || _T("footerl") == sCommand ||
_T("footerr") == sCommand || _T("footerf") == sCommand )
{
ParagraphReader oParagraphReader(sCommand, oReader);
oAbstrReader.StartSubReader( oParagraphReader, oDocument, oReader );
......@@ -3326,8 +3327,8 @@ public:
RtfMathPropReader oMathPropReader;
return StartSubReader( oMathPropReader, oDocument, oReader );
}
else if( _T("ftnsep" == sCommand || "ftnsepc") == sCommand ||
_T("aftnsep" == sCommand || "aftnsepc") == sCommand )
else if( _T("ftnsep") == sCommand || _T("ftnsepc") == sCommand ||
_T("aftnsep")== sCommand || _T("aftnsepc") == sCommand )
{
ParagraphReader oParagraphReader(sCommand, oReader);
StartSubReader( oParagraphReader, oDocument, oReader );
......
......@@ -6,7 +6,7 @@
#include <atlbase.h>
#include <atlstr.h>
#else
#include "../../Common/DocxFormat/Source/Base/ASCString.h"
#include "../../../../Common/DocxFormat/Source/Base/ASCString.h"
#endif
class IdGenerator
......
......@@ -162,7 +162,7 @@ bool OOXParagraphReader::Parse2( ReaderParameter oParam , RtfParagraph& oOutputP
RtfCharPtr oNewChar( new RtfChar() );
oNewChar->m_bRtfEncode = false;
CString sFieldText;
sFieldText.AppendFormat(_T("HYPERLINK \"%ls\""), sTarget );
sFieldText.AppendFormat(_T("HYPERLINK \"%ls\""), sTarget.GetBuffer() );
oNewChar->setText( sFieldText );
RtfParagraphPtr oNewInsertParagraph( new RtfParagraph() );
oNewInsertParagraph->AddItem( oNewChar );
......@@ -716,7 +716,7 @@ bool OOXRunReader::Parse( ReaderParameter oParam , RtfParagraph& oOutputParagrap
int nFontSize = 10;
if( PROP_DEF != oNewProperty.m_nFontSize )
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 );
RtfParagraphPtr oNewInsertParagraph( new RtfParagraph() );
oNewInsertParagraph->AddItem( oNewChar );
......
......@@ -111,7 +111,7 @@ public:
int res = file_inp.OpenFile(sPath);
if (res != S_OK) return false;
res = file_out.CreateFileW(sTargetFile);
res = file_out.CreateFile(sTargetFile);
if (res != S_OK) return false;
DWORD dwBytesRead = 0;
......
......@@ -44,7 +44,7 @@ CString RtfBookmarkStart::RenderToOOX(RenderParameter oRenderParameter)
sResult.AppendFormat(_T(" w:colFirst =\"%d\""), nID);
if( PROP_DEF != nLastColumn )
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("/>"));
return sResult;
}
......@@ -111,7 +111,7 @@ CString RtfFootnote::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append( _T("<w:r>") );
CString srPr = m_oCharProp.RenderToOOX( oRenderParameter );
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.Append( _T("</w:r>") );
}
......@@ -126,7 +126,7 @@ CString RtfFootnote::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append( _T("<w:r>") );
CString srPr = m_oCharProp.RenderToOOX( oRenderParameter );
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.Append( _T("</w:r>") );
}
......
......@@ -2,12 +2,13 @@
#include "RtfDocument.h"
CString RtfChar::renderRtfText( CString& sText, void* poDocument, RtfCharProperty* oCharProperty )
{
{
RtfDocument* oDocument = static_cast<RtfDocument*>(poDocument);
CString sResult;
int nCodePage = -1;
//применяем параметры codepage от текущего шрифта todo associated fonts.
//todooo разобраться со шрифтами и их подбором
RtfFont oFont;
if( NULL != oCharProperty && true == oDocument->m_oFontTable.GetFont( oCharProperty->m_nFont, oFont ) )
{
......@@ -39,50 +40,44 @@ CString RtfChar::renderRtfText( CString& sText, void* poDocument, RtfCharPropert
if( -1 == nCodePage )
nCodePage = CP_ACP;
//todooo проверить !!!!!
//делаем Ansi строку
int nBufSize = ::WideCharToMultiByte(nCodePage, 0, sText, -1, NULL, 0, NULL, NULL);
CStringA sTempResultAnsi;
LPSTR pcBuffer = sTempResultAnsi.GetBuffer(nBufSize);
::WideCharToMultiByte(nCodePage, 0, sText, -1, pcBuffer, nBufSize, NULL, NULL);
sTempResultAnsi.ReleaseBuffer();
std::wstring unicodeStr(sText.GetBuffer());
std::string ansiStr(unicodeStr.begin(), unicodeStr.end());
//делаем обратное преобразование чтобы понять какие символы свонвертировались неправильно
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::wstring unicodeStrBack(ansiStr.begin(), ansiStr.end());
for( int i = 0; i < unicodeStr.length() && i < unicodeStrBack.length() ; i++ )
{
bool bWriteUnicode = true;
if( sTempResultUni[i] == sText[i] )
if( unicodeStrBack[i] == unicodeStr[i] )
{
CString sUniChar; sUniChar.AppendChar( sText[i] );
CString sUniChar; sUniChar.AppendChar( unicodeStr[i] );
//делаем Ansi строку
int nBufSize = ::WideCharToMultiByte(nCodePage, 0, sUniChar, -1, NULL, 0, NULL, NULL);
CStringA sTempAnsiChars;
LPSTR pcBuffer = sTempAnsiChars.GetBuffer(nBufSize);
::WideCharToMultiByte(nCodePage, 0, sUniChar, -1, pcBuffer, nBufSize, NULL, NULL);
sTempAnsiChars.ReleaseBuffer();
for( int k = 0; k < sTempAnsiChars.GetLength(); k++ )
//делаем Ansi строку sUniChar
// -> sTempAnsiChars
std::string sTempAnsiChars(unicodeStr.begin()+i, unicodeStr.begin() + i + 1);
for( int k = 0; k < sTempAnsiChars.length(); k++ )
{
unsigned char nCharCode = sTempAnsiChars[k];
bWriteUnicode = false;
//if (nCharCode == '\n') {
// sResult.Append(_T("\\line"));
//} else if (nCharCode == '\r') {
// // ignore '\r'
//} else if (nCharCode == '\t') {
// 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 );
} 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) {
} else if (0x10 <= nCharCode - 1 && nCharCode < 0x20)
{
sResult.AppendFormat(_T("\\'%x"), nCharCode - 1 );
} else if ( 0x20 <= nCharCode && nCharCode < 0x80 ) {
} else if ( 0x20 <= nCharCode && nCharCode < 0x80 )
{
sResult.AppendChar( nCharCode );
} else { // 0x80 <= nUnicode <= 0xff
sResult.AppendFormat( _T("\\'%x"), nCharCode );
......@@ -91,8 +86,10 @@ CString RtfChar::renderRtfText( CString& sText, void* poDocument, RtfCharPropert
}
if( true == bWriteUnicode )
{
int nUnicode = (int)sText[i];
if (0 < nUnicode && nUnicode <= 0x8000) {
int nUnicode = (int)unicodeStr[i];
if (0 < nUnicode && nUnicode <= 0x8000)
{
sResult.AppendFormat(_T("\\u%d*"),nUnicode);
} else if (0x8000 < nUnicode && nUnicode <= 0xffff) {
sResult.AppendFormat(_T("\\u%d*"),nUnicode - 0x10000);
......@@ -103,4 +100,4 @@ CString RtfChar::renderRtfText( CString& sText, void* poDocument, RtfCharPropert
}
return sResult;
}
}
......@@ -276,13 +276,17 @@ private: CString renderTextToXML( CString sParam )
{
CString sResult;
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 )
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;
}
public: CString RenderToOOX(RenderParameter oRenderParameter)
public:
CString RenderToOOX(RenderParameter oRenderParameter)
{
CString sResult;
if(RENDER_TO_OOX_PARAM_RUN == oRenderParameter.nType)
......@@ -302,8 +306,10 @@ public: CString RenderToOOX(RenderParameter oRenderParameter)
sResult = m_sChars;
return sResult;
}
public: static CString renderRtfText( CString& sText, void* poDocument, RtfCharProperty* oCharProperty = NULL );
public: CString RenderToRtf(RenderParameter oRenderParameter)
static CString renderRtfText( CString& sText, void* poDocument, RtfCharProperty* oCharProperty = NULL );
CString RenderToRtf(RenderParameter oRenderParameter)
{
CString result;
if( RENDER_TO_RTF_PARAM_CHAR == oRenderParameter.nType )
......
......@@ -2,7 +2,11 @@
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_MID 2
......
......@@ -179,10 +179,11 @@ public: CString RenderToRtf(RenderParameter oRenderParameter)
if( true == m_bReferenceToEndnote )
sResult.Append( _T("\\fldalt") );
if( false == m_sData.IsEmpty() )
sResult.AppendFormat( _T("{\\*\\datafield %ls}"), m_sData);
sResult.AppendFormat( _T("{\\*\\datafield %ls}"), m_sData.GetBuffer());
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("}"));
return sResult;
}
......@@ -206,7 +207,7 @@ public: CString RenderToOOX(RenderParameter oRenderParameter)
{
//оставляем только одну ссылку
CString sHyperlink = sInsertText;
sHyperlink.Delete( nIndex, (int)_tcslen( _T("HYPERLINK") ) );
sHyperlink.Delete( nIndex, 9/*(int)_tcslen( _T("HYPERLINK") )*/ );
sHyperlink.Remove( '\"' );
sHyperlink.Trim();
//заменяем пробелы на %20
......@@ -216,7 +217,7 @@ public: CString RenderToOOX(RenderParameter oRenderParameter)
OOXRelsWriter* poRelsWriter = static_cast<OOXRelsWriter*>( oRenderParameter.poRels );
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;
sResult.Append(m_oResult->RenderToOOX(oNewParam));
sResult.Append( _T("</w:hyperlink>") );
......@@ -228,7 +229,9 @@ public: CString RenderToOOX(RenderParameter oRenderParameter)
RenderParameter oNewParametr = oRenderParameter;
oNewParametr.nType = RENDER_TO_OOX_PARAM_PLAIN;
//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;
oNewParam.nType = RENDER_TO_OOX_PARAM_RUN;
sResult.Append(m_oResult->RenderToOOX(oNewParam));
......@@ -241,7 +244,10 @@ public: CString RenderToOOX(RenderParameter oRenderParameter)
RenderParameter oNewParametr = oRenderParameter;
oNewParametr.nType = RENDER_TO_OOX_PARAM_PLAIN;
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:p>"));
......
......@@ -23,7 +23,7 @@ CString RtfFontTable::RenderToRtf(RenderParameter oRenderParameter)
RenderParameter oNewParameter = oRenderParameter;
oNewParameter.nType = RENDER_TO_RTF_PARAM_FONT_TBL;
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("}"));
}
return sResult;
......
......@@ -114,7 +114,10 @@ public:
RenderParameter oNewParameter = oRenderParameter;
oNewParameter.nType = RENDER_TO_RTF_PARAM_COLOR_TBL;
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("}"));
}
return sResult;
......@@ -212,7 +215,10 @@ public:
{
sResult.Append(_T("{\\stylesheet"));
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("}"));
}
return sResult;
......@@ -341,11 +347,16 @@ public:
{
sResult.Append(_T("{\\*\\listpicture") );
for( int i = 0; i < (int)m_aPictureList.GetCount(); i++ )
{
sResult.Append( m_aPictureList[i]->RenderToRtf( oRenderParameter ) );
}
sResult.Append(_T("}") );
}
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("}"));
}
return sResult;
......@@ -372,7 +383,10 @@ public:
{
sResult.Append(_T("{\\*\\listoverridetable"));
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("}"));
}
return sResult;
......
......@@ -11,8 +11,8 @@
class StringStream
{
private:
LONGLONG m_nSizeAbs;//размер файла
LONGLONG m_nPosAbs;//позиция в файле
LONG64 m_nSizeAbs;//размер файла
LONG64 m_nPosAbs;//позиция в файле
//CStringA m_sBuffer;
unsigned char* m_aBuffer;
......@@ -52,11 +52,11 @@ public:
dwBytesRead = srcFile.GetPosition();
srcFile.CloseFile();
}
void getBytes( int nCount, byte** pbData )
void getBytes( int nCount, BYTE** pbData )
{
if( m_nPosAbs + nCount < m_nSizeAbs )
{
(*pbData) = new byte[nCount];
(*pbData) = new BYTE[nCount];
memcpy( (*pbData), (m_aBuffer + m_nPosAbs + 1), nCount);
m_nPosAbs += nCount;
}
......@@ -97,11 +97,11 @@ public:
m_nSizeAbs += nExtBufSize;
}
LONGLONG getCurPosition()
LONG64 getCurPosition()
{
return m_nPosAbs;
}
LONGLONG getSize()
LONG64 getSize()
{
return m_nSizeAbs;
}
......@@ -121,11 +121,12 @@ public:
{
m_oFileWriter = NULL;
m_nReadBufSize = 1024 * 1024 * 5; // 5мб
m_caReadBuffer = (char*)::HeapAlloc(GetProcessHeap(), 0, m_nReadBufSize);
m_caReadBuffer = (char*)new char[m_nReadBufSize];
}
~RtfLex()
{
RELEASEHEAP( m_caReadBuffer );
if (m_caReadBuffer) delete []m_caReadBuffer;
m_caReadBuffer = NULL;
RELEASEOBJECT( m_oFileWriter );
}
double GetProgress()
......@@ -144,7 +145,7 @@ public:
{
return m_oCurToken;
}
void ReadBytes( int nCount, byte** pbData )
void ReadBytes( int nCount, BYTE** pbData )
{
m_oStream.getBytes(nCount, pbData);
}
......@@ -214,7 +215,7 @@ private:
if(c == '\\' || c == '{' || c == '}')
{
token.Type = RtfToken::Text;
token.Key = CStringA((TCHAR)c);
token.Key = (char)c;
}
else if( c > 0 && c <= 31 )
{
......@@ -296,7 +297,7 @@ private:
c = m_oStream.getc();
m_oStream.ungetc();
}
parametroInt = _ttol(parametroStr);
parametroInt = _wtoi(parametroStr.GetBuffer());
if (negativo)
parametroInt = -parametroInt;
......
......@@ -82,7 +82,7 @@ public:
if( RENDER_TO_RTF_PARAM_NESTED != oRenderParameter.nType )
sResult.Append(_T("{\\mmath"));
sResult.AppendFormat(_T("{\\%ls"), m_sRtfName);
sResult.AppendFormat(_T("{\\%ls"), m_sRtfName.GetBuffer());
RenderParameter oNewParameter = oRenderParameter;
oNewParameter.nType = RENDER_TO_RTF_PARAM_UNKNOWN;
......@@ -107,7 +107,7 @@ public:
sResult.Append(_T("}"));
if( RENDER_TO_RTF_PARAM_NESTED != oRenderParameter.nType )
sResult.AppendFormat(_T("}"), m_sRtfName);
sResult.AppendFormat(_T("}"), m_sRtfName.GetBuffer());
return sResult;
}
CString RenderToOOX(RenderParameter oRenderParameter)
......
......@@ -27,7 +27,7 @@ CString RtfOldList::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append(_T("<w:lvl w:ilvl=\"0\">"));
sResult.Append(_T("<w:numFmt w:val=\"bullet\"/>"));
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
{
sResult.Append(_T("<w:lvlText w:val=\"") );
......@@ -35,9 +35,9 @@ CString RtfOldList::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append(_T("\"/>") );
}
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() )
sResult.AppendFormat(_T("<w:rPr>%ls</w:rPr>"), sCharProp );
sResult.AppendFormat(_T("<w:rPr>%ls</w:rPr>"), sCharProp.GetBuffer() );
if( lj_none != m_eLevelJust )
{
switch( m_eLevelJust )
......
......@@ -45,16 +45,16 @@ CString RtfOle::RenderToOOXOnlyOle(RenderParameter oRenderParameter)
case ot_link: sResult.Append( _T(" Type=\"Link\"") );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.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 sMime = _T("application/vnd.openxmlformats-officedocument.oleObject");
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");
......@@ -67,33 +67,7 @@ CString RtfOle::RenderToOOXOnlyOle(RenderParameter oRenderParameter)
poOOXWriter->m_oContentTypes.AddExtension( sMime, sExtension);
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("/>") );
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:
}
bool IsValid()
{
return PROP_DEF != m_nWidth && PROP_DEF != m_nHeight
&& ::GetFileAttributes( m_sOleFilename ) != DWORD( -1 ) && _T("") != m_sOleFilename;
return PROP_DEF != m_nWidth && PROP_DEF != m_nHeight && _T("") != m_sOleFilename;
/*&& ::GetFileAttributes( m_sOleFilename ) != DWORD( -1 )*/
}
CString RenderToRtf(RenderParameter oRenderParameter)
{
......@@ -48,13 +48,18 @@ public:
}
RENDER_RTF_INT( m_nWidth, sResult, _T("objw") );
RENDER_RTF_INT( m_nHeight, sResult, _T("objh") );
if( _T("") != m_sOleClass )
sResult.AppendFormat( _T("{\\*\\objclass %ls}"), m_sOleClass );
sResult.AppendFormat( _T("{\\*\\objclass %ls}"), m_sOleClass.GetBuffer() );
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 )
{
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("}") );
return sResult;
......@@ -101,7 +106,7 @@ struct RtfOle2ToOle1Stream : POLE::Stream
{
std::vector<BYTE> aBuffer;
};
DWORD CALLBACK OleGet1(POLE::Stream* oStream, void FAR* pTarget, DWORD dwRead);;
DWORD CALLBACK OlePut1(POLE::Stream*, const void FAR*, DWORD);
DWORD CALLBACK OleGet2(POLE::Stream* oStream, void FAR* pTarget, DWORD dwRead);;
DWORD CALLBACK OlePut2(POLE::Stream*, const void FAR*, DWORD);
\ No newline at end of file
//DWORD CALLBACK OleGet1(POLE::Stream* oStream, void FAR* pTarget, DWORD dwRead);;
//DWORD CALLBACK OlePut1(POLE::Stream*, const void FAR*, DWORD);
//DWORD CALLBACK OleGet2(POLE::Stream* oStream, void FAR* pTarget, DWORD dwRead);;
//DWORD CALLBACK OlePut2(POLE::Stream*, const void FAR*, DWORD);
......@@ -32,7 +32,7 @@ CString RtfPicture::GenerateWMF(RenderParameter oRenderParameter)
//сохраняем в темповую директорию и загружаем файл как текст
RtfWriter * poWriter = static_cast<RtfWriter*>( oRenderParameter.poWriter );
IUnknown* piTempPict = NULL;
//IUnknown* piTempPict = NULL;
//todooo ??? переписать
//if( true == LoadPicture( &piTempPict, m_sPicFilename ) )
......@@ -44,7 +44,7 @@ CString RtfPicture::GenerateWMF(RenderParameter oRenderParameter)
// sResult.Append( RtfInternalEncoder::Encode( sTempFile ) );
// }
//}
RELEASEINTERFACE( piTempPict );
//RELEASEINTERFACE( piTempPict );
sResult.Append(_T("}"));
return sResult;
......@@ -82,7 +82,7 @@ CString RtfPicture::RenderToRtf(RenderParameter oRenderParameter)
}
sResult.Append( _T(" "));
sResult.Append( RtfInternalEncoder::Encode( m_sPicFilename ) );
sResult.Append( RtfUtility::RtfInternalEncoder::Encode( m_sPicFilename ) );
sResult.Append(_T("}"));
return sResult;
......@@ -107,7 +107,7 @@ CString RtfPicture::RenderToOOX(RenderParameter oRenderParameter)
}
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");
FileSystem::Directory::CreateDirectory( sFilenameFull );
......
......@@ -89,7 +89,6 @@ public:
{
BYTE pBuffer[ 16 ];
DWORD dwBytesRead = 0;
HANDLE hFile;
CFile file;
if (file.OpenFile(sFilename) != S_OK) return dt_none;
......
......@@ -42,13 +42,13 @@ CString RtfFont::RenderToRtf(RenderParameter oRenderParameter)
RENDER_RTF_INT( m_nPitch, sResult, _T("fprq") )
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") )
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 )
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("}"));
......@@ -88,7 +88,7 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter)
case ft_fbiminor: sTag = _T("cs");break;
}
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 )
{
......@@ -101,15 +101,15 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter)
case ft_fbimajor: sTag = _T("cs");break;
}
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 )
{
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 )
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 )
sResult.AppendFormat(_T("<w:panose1 w:val=\"%ls\" />"),m_sPanose);
sResult.AppendFormat(_T("<w:panose1 w:val=\"%ls\" />"),m_sPanose.GetBuffer());
CString sFamily = _T("");
switch( m_eFontFamily )
......@@ -124,9 +124,9 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter)
case ff_fbidi:sFamily = _T("auto");break;
}
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 )
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 )
{
......@@ -137,7 +137,7 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter)
case 1: sPitch = _T("fixed");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)
RtfFont 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)
}
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
{
sResult.AppendFormat( _T("<w:color w:val=\"%ls\"/>"),ToHexColor() );
sResult.AppendFormat( _T("<w:color w:val=\"%ls\"/>"),ToHexColor().GetBuffer());
}
return sResult;
}
......@@ -359,13 +360,13 @@ CString RtfShading::RenderToOOX(RenderParameter oRenderParameter)
{
RtfColor 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 )
{
RtfColor 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 )
{
......@@ -491,7 +492,7 @@ CString RtfBorder::RenderToOOX(RenderParameter oRenderParameter)
RenderParameter oNewParam = oRenderParameter;
oNewParam.nType = RENDER_TO_OOX_PARAM_COLOR_VALUE;
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)
sResult.AppendFormat( _T(" w:sz=\"%d\""), 2 * m_nWidth / 5 );
......@@ -643,13 +644,13 @@ CString RtfCharProperty::RenderToOOX(RenderParameter oRenderParameter)
if( PROP_DEF != 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
{
poOOXWriter->nCurFitId = poRtfDocument->m_oIdGenerator.Generate_FitTextId();
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 )
m_nFont = poRtfDocument->m_oProperty.m_nDeffFont;
......@@ -685,7 +686,7 @@ CString RtfCharProperty::RenderToOOX(RenderParameter oRenderParameter)
RtfColor 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)
{
switch( m_eUnderStyle )
{
case uls_Single: sResult.AppendFormat(_T("<w:u %ls w:val=\"single\"/>"),sUnderColor);break;
case uls_Dotted: sResult.AppendFormat(_T("<w:u %ls w:val=\"dotted\"/>"),sUnderColor);break;
case uls_Dashed: sResult.AppendFormat(_T("<w:u %ls w:val=\"dash\"/>"),sUnderColor);break;
case uls_Dash_dotted: sResult.AppendFormat(_T("<w:u %ls w:val=\"dotDash\"/>"),sUnderColor);break;
case uls_Dash_dot_dotted: sResult.AppendFormat(_T("<w:u %ls w:val=\"dotDotDash\"/>"),sUnderColor);break;
case uls_Double: sResult.AppendFormat(_T("<w:u %ls w:val=\"double\"/>"),sUnderColor);break;
case uls_Heavy_wave: sResult.AppendFormat(_T("<w:u %ls w:val=\"wavyHeavy\"/>"),sUnderColor);break;
case uls_Long_dashe: sResult.AppendFormat(_T("<w:u %ls w:val=\"dashLong\"/>"),sUnderColor);break;
case uls_Stops_all: sResult.AppendFormat(_T("<w:u %ls w:val=\"single\"/>"),sUnderColor);break;//todo
case uls_Thick: sResult.AppendFormat(_T("<w:u %ls w:val=\"thick\"/>"),sUnderColor);break;
case uls_Thick_dotted: sResult.AppendFormat(_T("<w:u %ls w:val=\"dottedHeavy\"/>"),sUnderColor);break;
case uls_Thick_dashed: sResult.AppendFormat(_T("<w:u %ls w:val=\"dashedHeavy\"/>"),sUnderColor);break;
case uls_Thick_dash_dotted: sResult.AppendFormat(_T("<w:u %ls w:val=\"dashDotHeavy\"/>"),sUnderColor);break;
case uls_Thick_dash_dot_dotted: sResult.AppendFormat(_T("<w:u %ls w:val=\"dashDotDotHeavy\"/>"),sUnderColor);break;
case uls_Thick_long_dashed: sResult.AppendFormat(_T("<w:u %ls w:val=\"dashLongHeavy\"/>"),sUnderColor);break;
case uls_Double_wave: sResult.AppendFormat(_T("<w:u %ls w:val=\"wavyDouble\"/>"),sUnderColor);break;
case uls_Word: sResult.AppendFormat(_T("<w:u %ls w:val=\"words\"/>"),sUnderColor);break;
case uls_Wave: sResult.AppendFormat(_T("<w:u %ls w:val=\"wave\"/>"),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.GetBuffer());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.GetBuffer());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.GetBuffer());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.GetBuffer());break;
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.GetBuffer());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.GetBuffer());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.GetBuffer());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.GetBuffer());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.GetBuffer());break;
}
}
......@@ -760,8 +761,8 @@ CString RtfListLevelProperty::RenderToRtf(RenderParameter oRenderParameter)
//чтобы при последующем чтении из rtf не потерялась информация о шрифте
sResult.Append( m_oCharProp.RenderToRtf( oRenderParameter ) );
sResult.AppendFormat( _T("{\\leveltext %ls;}"), RtfChar::renderRtfText( m_sText, oRenderParameter.poDocument, &m_oCharProp ) );
sResult.AppendFormat(_T("{\\levelnumbers %ls;}"), RtfChar::renderRtfText( m_sNumber, 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 ).GetBuffer() );
RENDER_RTF_INT( m_nFirstIndent, sResult, _T("fi") )
RENDER_RTF_INT( m_nIndent, sResult, _T("li") )
......@@ -809,8 +810,8 @@ CString RtfListLevelProperty::RenderToOOX2(RenderParameter oRenderParameter, int
if( 1 == m_nLegal)
sResult.Append(_T("<w:isLgl />"));
sResult.AppendFormat( _T("<w:lvlText w:val=\"%ls\"/>"), GetLevelTextOOX() );
sResult.AppendFormat(_T("<w:numFmt w:val=\"%ls\" />"), GetFormat(m_nNumberType) );
sResult.AppendFormat( _T("<w:lvlText w:val=\"%ls\"/>"), GetLevelTextOOX().GetBuffer() );
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_nStart, sResult, _T("w:start") )
if( PROP_DEF != m_nFollow )
......@@ -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_nIndentStart, sIndent, _T("w:start") )
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 ) );
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;
RenderParameter oNewParam = oRenderParameter;
oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
srPr.Append( m_oCharProp.RenderToOOX(oNewParam) );
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>"));
}
......@@ -869,7 +870,7 @@ CString RtfListProperty::RenderToRtf(RenderParameter oRenderParameter)
for( int i = 0; i < (int)m_aArray.size(); i++ )
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") )
return sResult;
}
......@@ -887,7 +888,7 @@ CString RtfListProperty::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append(_T("<w:multiLevelType w:val=\"multilevel\" />"));
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 )
//{
// sResult.AppendFormat(_T("<w:name w:val=\"%ls\" />"), Utils::PrepareToXML( m_sName ) );
......@@ -948,14 +949,14 @@ CString RtfStyle::RenderToOOXBegin(RenderParameter oRenderParameter)
case stSection : sType = _T("numbering");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:name w:val=\"%ls\"/>"), Utils::PrepareToXML( m_sName ) );
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 ).GetBuffer() );
if( PROP_DEF != m_nBasedOn )
{
RtfStylePtr 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 )
// sResult.AppendFormat(_T("<w:next w:val=\"%ls\"/>"), Utils::PrepareToXML( m_sName ));//Todo
......@@ -1011,7 +1012,7 @@ CString RtfStyle::RenderToRtfEnd( RenderParameter oRenderParameter )
RENDER_RTF_INT( m_nPriority, sResult, _T("spriority") )
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;
}
CString RtfCharStyle::RenderToRtf(RenderParameter oRenderParameter)
......@@ -1028,7 +1029,7 @@ CString RtfCharStyle::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append( RenderToOOXBegin( oRenderParameter ) );
CString sCharProp = m_oCharProp.RenderToOOX(oRenderParameter);
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 ) );
return sResult;
}
......@@ -1048,10 +1049,10 @@ CString RtfParagraphStyle::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append( RenderToOOXBegin( oRenderParameter ) );
CString sParProp = m_oParProp.RenderToOOX(oRenderParameter);
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);
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 ) );
return sResult;
}
......@@ -1168,19 +1169,19 @@ CString RtfTableStyle::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append( RenderToOOXBegin( oRenderParameter ) );
CString sTablProp = m_oTableProp.RenderToOOX(oRenderParameter);
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);
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);
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);
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);
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;
oNewParam.nType = RENDER_TO_OOX_PARAM_NESTED;
......@@ -1252,19 +1253,19 @@ CString RtfTableStyle::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append( _T("<w:tblStylePr w:type=\"") + oRenderParameter.sValue + _T("\">") );
CString sTablProp = m_oTableProp.RenderToOOX(oRenderParameter);
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);
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);
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);
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);
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>") );
}
return sResult;
......@@ -1638,7 +1639,9 @@ CString RtfParagraphProperty::RenderToRtf(RenderParameter oRenderParameter)
sResult.Append(_T("{\\listtext\\pard\\plain"));
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 )
{
......@@ -1718,7 +1721,7 @@ CString RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter)
RENDER_OOX_INT_ATTRIBUTE( m_nIndStart, sIndent, _T("w:start") );
RENDER_OOX_INT_ATTRIBUTE( m_nIndEnd, sIndent, _T("w:end") );
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_bIndMirror, sResult, _T("w:mirrorIndents") );
......@@ -1751,7 +1754,7 @@ CString RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter)
//else
// sSpacing.AppendFormat(_T(" w:line=\"240\"")); //по умолчанию - единичный
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_bContextualSpacing, sResult, _T("w:contextualSpacing") );
......@@ -1781,27 +1784,27 @@ CString RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter)
if( true == m_oBorderBox.IsValid() )
{
CString sBorderContent = m_oBorderBox.RenderToOOX(oNewParam);
sBorder.AppendFormat(_T("<w:left %ls />"), sBorderContent );
sBorder.AppendFormat(_T("<w:top %ls />"), sBorderContent );
sBorder.AppendFormat(_T("<w:right %ls />"), sBorderContent );
sBorder.AppendFormat(_T("<w:bottom %ls />"), sBorderContent );
sBorder.AppendFormat(_T("<w:left %ls />"), sBorderContent.GetBuffer() );
sBorder.AppendFormat(_T("<w:top %ls />"), sBorderContent.GetBuffer() );
sBorder.AppendFormat(_T("<w:right %ls />"), sBorderContent.GetBuffer() );
sBorder.AppendFormat(_T("<w:bottom %ls />"), sBorderContent.GetBuffer() );
}
else
{
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() )
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() )
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() )
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() )
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() )
sResult.AppendFormat( _T("<w:pBdr>%ls</w:pBdr>"), sBorder );
sResult.AppendFormat( _T("<w:pBdr>%ls</w:pBdr>"), sBorder.GetBuffer() );
if( true == m_oFrame.IsValid() )
sResult.Append( m_oFrame.RenderToOOX( oRenderParameter ) );
......@@ -1819,7 +1822,7 @@ CString RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter)
sResult.AppendFormat( m_oTabs.RenderToOOX( oRenderParameter ) );
CString sCharProp = m_oCharProperty.RenderToOOX( oRenderParameter );
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;
}
CString RtfCellProperty::RenderToRtf(RenderParameter oRenderParameter)
......@@ -1941,7 +1944,7 @@ CString RtfCellProperty::RenderToOOX(RenderParameter oRenderParameter)
if( 3 == m_nIsPaddingBottom && PROP_DEF != m_nPaddingBottom)
sResult.AppendFormat(_T("<w:bottom w:w=\"%d\" w:type=\"dxa\"/>"),m_nPaddingBottom);
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 )
// sResult.Append(_T("trspdl3"));
......@@ -2021,7 +2024,7 @@ CString RtfCellProperty::RenderToOOX(RenderParameter oRenderParameter)
sBorder.Append( m_oBorderInsideV.RenderToOOX(oNewParam) );
}
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() )
sResult.Append( m_oShading.RenderToOOX(oRenderParameter) );
......@@ -2282,7 +2285,7 @@ CString RtfTableProperty::RenderToOOX(RenderParameter oRenderParameter)
case vp_posyout: sFloatingPosition.Append( _T(" w:tblpYSpec=\"outside\"") );break;
}
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 ))
{
......@@ -2304,7 +2307,7 @@ CString RtfTableProperty::RenderToOOX(RenderParameter oRenderParameter)
if( PROP_DEF != m_nDefCellMarTop && 3 == m_nDefCellMarTopUnits )
sDefCellMargins.AppendFormat( _T("<w:top w:w=\"%d\" w:type=\"dxa\"/>"), m_nDefCellMarTop );
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 )
sResult.AppendFormat( _T("<w:tblCellSpacing w:w=\"%d\" w:type=\"dxa\"/>"), m_nDefCellSpBottom );
......@@ -2316,19 +2319,19 @@ CString RtfTableProperty::RenderToOOX(RenderParameter oRenderParameter)
oNewParam.nType = RENDER_TO_OOX_PARAM_BORDER_ATTRIBUTE;
CString sBorders;
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 )
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 )
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 )
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 )
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 )
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() )
sResult.AppendFormat(_T("<w:tblBorders>%ls</w:tblBorders>"), sBorders );
sResult.AppendFormat(_T("<w:tblBorders>%ls</w:tblBorders>"), sBorders.GetBuffer() );
if( m_oShading.IsValid() == true )
sResult.Append(m_oShading.RenderToOOX(oRenderParameter) );
......@@ -2460,7 +2463,7 @@ CString RtfRowProperty::RenderToOOX(RenderParameter oRenderParameter)
//if( false == scnfStyle.IsEmpty() )
// sResult.Append( _T("<w:cnfStyle %ls/>") );
_bstr_t hk;
// _bstr_t hk;
return sResult;
}
......@@ -2469,47 +2472,47 @@ CString RtfInformation::RenderToRtf(RenderParameter oRenderParameter)
CString sResult;
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 )
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 )
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 )
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 )
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 )
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 )
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 )
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 )
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 )
sResult.AppendFormat( _T("{\\version%d}"),m_nVersion );
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 )
sResult.AppendFormat( _T("{\\vern%d}"),m_nInternalVersion );
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 );
if( _T("") != sCreateTime )
sResult.AppendFormat( _T("{\\creatim%ls}"),sCreateTime );
sResult.AppendFormat( _T("{\\creatim%ls}"),sCreateTime.GetBuffer() );
CString sRevTime = m_oRevTime.RenderToRtf( oRenderParameter );
if( _T("") != sRevTime )
sResult.AppendFormat( _T("{\\revtim%ls}"),sRevTime );
sResult.AppendFormat( _T("{\\revtim%ls}"),sRevTime.GetBuffer() );
CString sPrintTime = m_oPrintTime.RenderToRtf( oRenderParameter );
if( _T("") != sPrintTime )
sResult.AppendFormat( _T("{\\printim%ls}"),sPrintTime );
sResult.AppendFormat( _T("{\\printim%ls}"),sPrintTime.GetBuffer() );
CString sBackupTime = m_oBackupTime.RenderToRtf( oRenderParameter );
if( _T("") != sBackupTime )
sResult.AppendFormat( _T("{\\buptim%ls}"),sBackupTime );
sResult.AppendFormat( _T("{\\buptim%ls}"),sBackupTime.GetBuffer() );
if( PROP_DEF != m_nEndingTime )
sResult.AppendFormat( _T("{\\edmins%d}"),m_nEndingTime );
if( PROP_DEF != m_nNumberOfPages )
......@@ -2647,7 +2650,7 @@ if( PROP_DEF != mmathFont )
RtfDocument* poDoc = static_cast<RtfDocument*>(oRenderParameter.poDocument);
RtfFont 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 )
......@@ -2687,7 +2690,7 @@ RENDER_OOX_INT( mwrapIndent, sProperty, _T("m:wrapIndent") )
RENDER_OOX_INT( mwrapRight, sProperty, _T("m:wrapRight") )
CString sResult;
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;
}
CString RtfMathSpecProp::RenderToRtf(RenderParameter oRenderParameter)
......
......@@ -6,13 +6,19 @@
#include "../../../Common/DocxFormat/Source/Common/SimpleTypes_Drawing.h"
#define MERGE_PROPERTY(propName, propObj)\
if( PROP_DEF != ##propObj##.##propName## )\
propName = ##propObj##.##propName##;
#if defined (_WIN32) || defined (_WIN64)
#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##;
#define MERGE_PROPERTY_DEF(propName, propObj, defval)\
if( defval != ##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)\
propName= PROP_DEF;
......@@ -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;
ThemeColor m_eTheme;
byte m_byteRed;
byte m_byteGreen;
byte m_byteBlue;
byte m_byteTint;
byte m_byteShade;
BYTE m_byteRed;
BYTE m_byteGreen;
BYTE m_byteBlue;
BYTE m_byteTint;
BYTE m_byteShade;
RtfColor()
{
......@@ -141,7 +147,7 @@ public:
{
SetHEX( nHex );
}
RtfColor(byte r, byte g, byte b)
RtfColor(BYTE r, BYTE g, BYTE b)
{
SetRGB( r, g, b );
}
......@@ -162,21 +168,21 @@ public:
m_byteShade = 0;
m_eTheme = TC_NONE;
}
byte GetR()
BYTE GetR()
{
byte byteRed = SetShade( m_byteRed );
BYTE byteRed = SetShade( m_byteRed );
byteRed = SetTint( byteRed );
return byteRed;
}
byte GetG()
BYTE GetG()
{
byte byteGreen = SetShade( m_byteGreen );
BYTE byteGreen = SetShade( m_byteGreen );
byteGreen = SetTint( byteGreen );
return byteGreen;
}
byte GetB()
BYTE GetB()
{
byte byteBlue = SetShade( m_byteBlue );
BYTE byteBlue = SetShade( m_byteBlue );
byteBlue = SetTint( byteBlue );
return byteBlue;
}
......@@ -193,7 +199,7 @@ public:
m_byteGreen = (color&0xFF00) >>4;
m_byteBlue = (color&0xFF);
}
void SetRGB(byte red, byte green, byte blue)
void SetRGB(BYTE red, BYTE green, BYTE blue)
{
SetDefault();
m_byteRed = red;
......@@ -261,12 +267,12 @@ public:
break;
}
}
m_byteRed = (byte)(r * 255.0f);
m_byteGreen = (byte)(g * 255.0f);
m_byteBlue = (byte)(b * 255.0f);
m_byteRed = (byte)(r * 255);
m_byteGreen = (byte)(g * 255);
m_byteBlue = (byte)(b * 255);
m_byteRed = (BYTE)(r * 255.0f);
m_byteGreen = (BYTE)(g * 255.0f);
m_byteBlue = (BYTE)(b * 255.0f);
m_byteRed = (BYTE)(r * 255);
m_byteGreen = (BYTE)(g * 255);
m_byteBlue = (BYTE)(b * 255);
}
void SetRGBPercent(int nRedPer, int nGreenPer, int nBluePer)
{
......@@ -289,21 +295,21 @@ public:
}
CString ToHexColor()
{
byte byteRed = SetShade( m_byteRed );
BYTE byteRed = SetShade( m_byteRed );
byteRed = SetTint( byteRed );
CString sRed;
if( byteRed < 0x10 )
sRed.AppendFormat( _T("0%x"), byteRed );
else
sRed.AppendFormat( _T("%x"), byteRed );
byte byteGreen = SetShade( m_byteGreen );
BYTE byteGreen = SetShade( m_byteGreen );
byteGreen = SetTint( byteGreen );
CString sGreen;
if( byteGreen < 0x10 )
sGreen.AppendFormat( _T("0%x"), byteGreen );
else
sGreen.AppendFormat( _T("%x"), byteGreen );
byte byteBlue = SetShade( m_byteBlue );
BYTE byteBlue = SetShade( m_byteBlue );
byteBlue = SetTint( byteBlue );
CString sBlue;
if( byteBlue < 0x10 )
......@@ -316,11 +322,11 @@ public:
int ToInt()const
{
CString sResult;
byte byteRed = SetShade( m_byteRed );
BYTE byteRed = SetShade( m_byteRed );
byteRed = SetTint( byteRed );
byte byteGreen = SetShade( m_byteGreen );
BYTE byteGreen = SetShade( m_byteGreen );
byteGreen = SetTint( byteGreen );
byte byteBlue = SetShade( m_byteBlue );
BYTE byteBlue = SetShade( m_byteBlue );
byteBlue = SetTint( byteBlue );
int nColor = (byteRed << 16) | (byteGreen << 8) | byteBlue;
......@@ -328,14 +334,14 @@ public:
}
CString RenderToRtf(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;
}
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;
}
static bool GetHighlightByColor( RtfColor oOutputColor,CString& oStr ) //todo
......@@ -578,7 +584,7 @@ public:
//CString white = _T("FFFFFF");
//CString yellow = _T("FFFF00");
long nMinDelta = MAXLONG;
long nMinDelta = 0x7FFFFFFF; //MAXLONG;
int nIndex = -1;
for( int i = 0; i < (int)sColors.size(); i++ )
{
......@@ -617,16 +623,27 @@ private:
{
CString sResult;
if( m_eTheme == TC_NONE )
{
if( _T("") == sParam )
sResult.AppendFormat(_T("color = \"%ls\""),ToHexColor());
{
sResult = _T("color = \"");
sResult.Append(ToHexColor());
sResult.Append(_T("\""));
}
else if( _T("Fill") == sParam )
sResult.AppendFormat(_T("fill = \"%ls\""),ToHexColor());
{
sResult = _T("fill = \"");
sResult.Append(ToHexColor());
sResult.Append(_T("\""));
}
}
else
{
CString sTheme;
if( true == GetStringByTheme( sTheme, m_eTheme ) )
{
sResult.AppendFormat(_T("theme%sColor = \"%ls\" theme%sShade = \"%d\" theme%sTint = \"%d\""),sParam,sTheme,sParam,m_byteShade ,sParam,m_byteTint);
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:
for( int i = 0; i < (int)m_aTabs.size(); i++ )
sTabs.Append( m_aTabs[i].RenderToOOX( oRenderParameter ) );
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;
}
};
......
......@@ -104,7 +104,7 @@ public:
break;
case RtfToken::Keyword:
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) );
break;
......@@ -124,9 +124,9 @@ public:
m_bCanStartNewReader = false;
break;
case RtfToken::Control:
if( m_oTok.Key == _T("42") )
if( m_oTok.Key == "42" )
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 );
break;
case RtfToken::Text:
......@@ -206,7 +206,7 @@ public:
{
CString sResult;
if( _T("u") == sKey )
if( "u" == sKey )
{
if( true == bHasPar )
sResult.AppendChar( nPar );
......@@ -214,7 +214,7 @@ public:
else
{
CStringA sCharString;
if( _T("39") == sKey )
if( "39" == sKey )
{
if( true == bHasPar )
sCharString.AppendChar( nPar );
......@@ -236,7 +236,8 @@ public:
oReader.m_oState->m_sCurText.Empty();
if(sResult.GetLength() > 0)
{
ExecuteTextInternalSkipChars(sResult, oReader, CStringA(""), nSkipChars);
CStringA str;
ExecuteTextInternalSkipChars(sResult, oReader, str, nSkipChars);
ExecuteText( oDocument, oReader, sResult);
}
}
......@@ -258,7 +259,7 @@ public:
nSkipChars = 0;
}
}
if( _T("u") == sKey )
if( "u" == sKey )
{
//надо правильно установить m_nSkipChars по значению \ucN
nSkipChars = oReader.m_oState->m_nUD;
......@@ -292,19 +293,25 @@ public:
nCodepage = CP_ACP;
break;
}
case RtfDocumentProperty::cp_mac: nCodepage = CP_MACCP;break;
case RtfDocumentProperty::cp_pc: nCodepage = 437;break;
case RtfDocumentProperty::cp_pca: nCodepage = 850;break;
case RtfDocumentProperty::cp_mac: nCodepage = CP_MACCP; break;
case RtfDocumentProperty::cp_pc: nCodepage = 437; break; //ms dos latin us
case RtfDocumentProperty::cp_pca: nCodepage = 850; break; //ms dos latin eu
}
}
//если ничего нет ставим ANSI
if( -1 == nCodepage )
nCodepage = CP_ACP;
#if defined (_WIN32) || defined (_WIN64)
int nLengthW ;
nLengthW = MultiByteToWideChar(nCodepage, 0, sCharString, -1, NULL, NULL);
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;
}
return sResult;
......
......@@ -151,7 +151,7 @@ CString RtfDocumentProperty::RenderToOOX(RenderParameter oRenderParameter)
for( int i = 0; i < (int)m_aSpecialFootnotes.size(); i++ )
sFootnoteProp.AppendFormat( _T("<w:footnote w:id=\"%d\" />"), m_aSpecialFootnotes[i] );
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") );
if( PROP_DEF != m_eFootnoteRestart )
{
......@@ -173,13 +173,13 @@ CString RtfDocumentProperty::RenderToOOX(RenderParameter oRenderParameter)
}
}
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;
for( int i = 0; i < (int)m_aSpecialEndnotes.size(); i++ )
sEndnoteProp.AppendFormat( _T("<w:endnote w:id=\"%d\" />"), m_aSpecialEndnotes[i] );
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") );
if( PROP_DEF != m_eEndnoteRestart )
{
......@@ -200,7 +200,7 @@ CString RtfDocumentProperty::RenderToOOX(RenderParameter oRenderParameter)
}
}
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;
if( 1 != m_bHtmlAutoSpace )
......@@ -208,7 +208,7 @@ CString RtfDocumentProperty::RenderToOOX(RenderParameter oRenderParameter)
if( 0 == m_bUseTabAlignment )
sCompat.Append( _T("<w:forgetLastTabAlignment/>") );
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;
}
......@@ -465,7 +465,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter)
if( PROP_DEF != m_nPaperSourceFirst )
sPaperSource.AppendFormat( _T(" w:other=\"%d\""), m_nPaperSourceOther );
if( false == sPaperSource.IsEmpty() )
sResult.AppendFormat(_T("<w:paperSrc %ls/>"), sPaperSource );
sResult.AppendFormat(_T("<w:paperSrc %ls/>"), sPaperSource.GetBuffer() );
if( 1 == m_bRtlGutter )
sResult.Append(_T("<w:rtlGutter/>"));
......@@ -554,7 +554,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter)
case ff_sftnnzodiacl:sFootnotesProp.Append( _T("<w:numFmt w:val=\"upperLetter\" />") );break;
}
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;
RENDER_OOX_INT( m_nEndnotesStart, sEndnotesProp, _T("w:numStart") )
......@@ -588,7 +588,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter)
case ef_saftnnzodiacl:sEndnotesProp.Append( _T("<w:numFmt w:val=\"upperLetter\" />") );break;
}
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
CString sLineNumbering;
......@@ -605,7 +605,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter)
case lnr_linecont:sLineNumbering.Append( _T(" w:restart=\"continuous\"") );break;
}
if( false == sLineNumbering.IsEmpty() )
sResult.AppendFormat( _T("<w:lnNumType %ls/>"), sLineNumbering );
sResult.AppendFormat( _T("<w:lnNumType %ls/>"), sLineNumbering.GetBuffer() );
//Page Information
CString sPageSize;
......@@ -616,7 +616,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter)
if( 1 == m_bLandscapeFormat )
sPageSize.Append(_T(" w:orient=\"landscape\""));
if( false == sPageSize.IsEmpty() )
sResult.AppendFormat(_T("<w:pgSz %ls/>"), sPageSize );
sResult.AppendFormat(_T("<w:pgSz %ls/>"), sPageSize.GetBuffer() );
CString sMargin;
if( PROP_DEF != m_nMarginLeft )
......@@ -634,7 +634,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter)
if( PROP_DEF != m_nFooterBottom )
sMargin.AppendFormat(_T(" w:footer=\"%d\""), m_nFooterBottom);
if( false == sMargin.IsEmpty() )
sResult.AppendFormat(_T("<w:pgMar %ls/>"), sMargin);
sResult.AppendFormat(_T("<w:pgMar %ls/>"), sMargin.GetBuffer());
if( 1 == m_bTitlePage )
sResult.Append(_T("<w:titlePg/>"));
......@@ -643,7 +643,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter)
if( PROP_DEF != m_nPageNumberStart )
sPageNumber.AppendFormat( _T(" w:start=\"%d\""), m_nPageNumberStart );
if( false == sPageNumber.IsEmpty() )
sResult.AppendFormat( _T("<w:pgNumType %ls/>"), sPageNumber );
sResult.AppendFormat( _T("<w:pgNumType %ls/>"), sPageNumber.GetBuffer() );
//Vertical Alignment
switch( m_eVerticalAlignment )
{
......@@ -713,32 +713,32 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter)
if( 0 != m_oHeaderLeft )
{
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 )
{
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 )
{
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 )
{
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 )
{
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 )
{
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>"));
return sResult;
......@@ -761,7 +761,7 @@ CString RtfSectionProperty::SaveFile( TextItemContainerPtr oTarget, RenderParame
else
sRootName = _T("w:ftr");
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;
OOXRelsWriterPtr oNewRelsWr = OOXRelsWriterPtr( new OOXRelsWriter( sFilename, *poRtfDocument ) );
......@@ -769,18 +769,18 @@ CString RtfSectionProperty::SaveFile( TextItemContainerPtr oTarget, RenderParame
oNewParameter.poRels = oNewRelsWr.get();
sContent.Append( oTarget->RenderToOOX(oNewParameter) );
sContent.AppendFormat( _T("</%ls>"), sRootName );
CStringA sContentUTF = Convert::UnicodeToUtf8( sContent );
sContent.AppendFormat( _T("</%ls>"), sRootName.GetBuffer() );
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sContent.GetBuffer());
CString sFilePath = poOOXWriter->m_sTargetFolder + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR + sFilename;
DWORD dwBytesWritten = 0;
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();
}
......
......@@ -124,11 +124,12 @@ public:
m_nZoom = 100;
//вычисляем стандартный default ansi codepage для системы
#if defined (_WIN32) || defined(_WIN64)
TCHAR codepage[7];
int nRes = GetLocaleInfo( LOCALE_SYSTEM_DEFAULT, LOCALE_IDEFAULTANSICODEPAGE, codepage, 6 );
if( nRes != 0 )
if( GetLocaleInfo( LOCALE_SYSTEM_DEFAULT, LOCALE_IDEFAULTANSICODEPAGE, codepage, 6 ) != 0)
m_nAnsiCodePage = _ttoi(codepage);
else
#endif
m_nAnsiCodePage = CP_ACP;
m_bDorderSurroundHeader = PROP_DEF;
......
......@@ -156,7 +156,7 @@ CString RtfShape::RenderToRtfShapeProperty(RenderParameter oRenderParameter)
sResult.AppendFormat( _T("{\\sp{\\sn colSpan}{\\sv %d}}"),m_nColSpan);
//Rehydration
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
if( PROP_DEF != m_bIsBullet )
......@@ -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: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;
if( PROP_DEF != nCropLeft )
sCrop.AppendFormat( _T(" l=\"%d\""), nCropLeft ); //тысячный доли процента
......@@ -346,7 +346,7 @@ CString RtfShape::RenderToOOX(RenderParameter oRenderParameter)
if( PROP_DEF != nCropBottom )
sCrop.AppendFormat( _T(" b=\"%d\""), nCropBottom );
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("</pic:blipFill>") );
if( PROP_DEF != m_oPicture->m_nWidthGoal && PROP_DEF != m_oPicture->m_nHeightGoal )
......@@ -561,7 +561,7 @@ CString RtfShape::RenderToOOX(RenderParameter oRenderParameter)
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.Append( _T("</wp:wrapPolygon>") );
sResult.AppendFormat( _T("</%ls>"), sTag );
sResult.AppendFormat( _T("</%ls>"), sTag.GetBuffer() );
}
}
int nImageID = poDocument->m_oIdGenerator.Generate_ImagePropId();
......@@ -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: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;
if( PROP_DEF != nCropLeft )
sCrop.AppendFormat( _T(" l=\"%d\""), nCropLeft ); //тысячный доли процента
......@@ -610,7 +610,7 @@ CString RtfShape::RenderToOOX(RenderParameter oRenderParameter)
if( PROP_DEF != nCropBottom )
sCrop.AppendFormat( _T(" b=\"%d\""), nCropBottom );
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("</pic:blipFill>") );
......@@ -720,7 +720,7 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
if( _T("") == oRenderParameter.sValue )
sResult.Append( _T("<v:shape") );
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 ) );
if( PROP_DEF != m_nShapeType )
......@@ -922,7 +922,7 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
if( false == sStyle.IsEmpty() )
{
sStyle.Delete( sStyle.GetLength() - 1 );
sResult.AppendFormat( _T(" style=\"%ls\""),sStyle );
sResult.AppendFormat( _T(" style=\"%ls\""),sStyle.GetBuffer() );
}
if( PROP_DEF != m_bLayoutInCell )
......@@ -982,7 +982,7 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
}
}
}
sResult.AppendFormat( _T(" adj=\"%ls\""),sAdjust );
sResult.AppendFormat( _T(" adj=\"%ls\""),sAdjust.GetBuffer() );
}
//Geometry
if( m_aWrapPoints.size() > 0 )
......@@ -1098,7 +1098,7 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
}
}
if( false == sStroke.IsEmpty() )
sResult.AppendFormat( _T("<v:stroke %ls/>"), sStroke );
sResult.AppendFormat( _T("<v:stroke %ls/>"), sStroke.GetBuffer() );
if( 0 != m_aTextItems )
{
......@@ -1138,7 +1138,7 @@ CString RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter)
CString sPicture = m_oPicture->RenderToOOX(oRenderParameter);
if( _T("") == sPicture )//если не сохранилась картинка, то весь shape будет бесполезным
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 )
sResult.AppendFormat( _T(" cropleft=\"%df\""), nCropLeft );
if( PROP_DEF != nCropTop )
......@@ -1157,7 +1157,7 @@ CString RtfShape::RenderToOOXEnd(RenderParameter oRenderParameter)
if( _T("") == oRenderParameter.sValue )
sResult.Append( _T("</v:shape>") );
else
sResult.AppendFormat( _T("</%ls>"), oRenderParameter.sValue );
sResult.AppendFormat( _T("</%ls>"), oRenderParameter.sValue.GetBuffer() );
if( RENDER_TO_OOX_PARAM_SHAPE_WSHAPE2 == oRenderParameter.nType )
;
else if( RENDER_TO_OOX_PARAM_SHAPE_WSHAPE == oRenderParameter.nType )
......
......@@ -4,7 +4,7 @@
#include <atlbase.h>
#include <atlstr.h>
#else
#include "../../Common/DocxFormat/Source/Base/ASCString.h"
#include "../../../../Common/DocxFormat/Source/Base/ASCString.h"
#endif
class RtfToken
......
......@@ -95,7 +95,7 @@ bool RtfWriter::SaveByItem()
oNewParam.nType = RENDER_TO_OOX_PARAM_FIRST_SECTION;
}
sRtf = m_oDocument[0]->m_oProperty.RenderToRtf(oNewParam);
RtfInternalEncoder::Decode( sRtf, *m_oCurTempFileSectWriter );
RtfUtility::RtfInternalEncoder::Decode( sRtf, *m_oCurTempFileSectWriter );
//дописываем в файл
RELEASEOBJECT( m_oCurTempFileSectWriter );
//создаем новый
......@@ -121,7 +121,7 @@ bool RtfWriter::SaveByItem()
sRtf.Append( _T("\\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() );
//удаляем элемент который только что написали
......@@ -152,7 +152,7 @@ bool RtfWriter::SaveByItemEnd()
oNewParam.nType = RENDER_TO_OOX_PARAM_FIRST_SECTION;
}
sRtf = m_oDocument[0]->m_oProperty.RenderToRtf(oNewParam);
RtfInternalEncoder::Decode( sRtf, *m_oCurTempFileSectWriter );
RtfUtility::RtfInternalEncoder::Decode( sRtf, *m_oCurTempFileSectWriter );
//дописываем в файл
RELEASEOBJECT( m_oCurTempFileSectWriter );
}
......@@ -171,7 +171,7 @@ bool RtfWriter::SaveByItemEnd()
//пишем заголовок потом все содежимое
sRtf = CreateRtfStart();
DWORD dwBytesWrite = 0;
RtfInternalEncoder::Decode( sRtf, oTargetFileWriter );
RtfUtility::RtfInternalEncoder::Decode( sRtf, oTargetFileWriter );
//WriteFile ( hTargetFile, sRtf, ( DWORD ) sRtf.GetLength(), &dwBytesWrite, NULL );
//копируем заголовки из массива и параграфы из темповых файлов
......@@ -215,8 +215,8 @@ bool RtfWriter::SaveByItemEnd()
//завершаем документ
sRtf = CreateRtfEnd();
RtfInternalEncoder::Decode( sRtf, oTargetFileWriter );
byte nEndFile = 0;
RtfUtility::RtfInternalEncoder::Decode( sRtf, oTargetFileWriter );
BYTE nEndFile = 0;
oTargetFileWriter.Write( &nEndFile, 1);
}
catch(...)
......@@ -265,25 +265,25 @@ CString RtfWriter::CreateRtfStart()
{
sFootnote = m_oDocument.m_oFootnoteSep->RenderToRtf( oRenderParameter );
if( _T("") != sFootnote )
sResult.AppendFormat( _T("{\\*\\ftnsep %ls}"), sFootnote );
sResult.AppendFormat( _T("{\\*\\ftnsep %ls}"), sFootnote.GetBuffer() );
}
if( NULL != m_oDocument.m_oFootnoteCon )
{
sFootnote = m_oDocument.m_oFootnoteCon->RenderToRtf( oRenderParameter );
if( _T("") != sFootnote )
sResult.AppendFormat( _T("{\\*\\ftnsepc %ls}"), sFootnote );
sResult.AppendFormat( _T("{\\*\\ftnsepc %ls}"), sFootnote.GetBuffer() );
}
if( NULL != m_oDocument.m_oEndnoteSep )
{
sFootnote = m_oDocument.m_oEndnoteSep->RenderToRtf( oRenderParameter );
if( _T("") != sFootnote )
sResult.AppendFormat( _T("{\\*\\aftnsep %ls}"), sFootnote );
sResult.AppendFormat( _T("{\\*\\aftnsep %ls}"), sFootnote.GetBuffer() );
}
if( NULL != m_oDocument.m_oEndnoteCon )
{
sFootnote = m_oDocument.m_oEndnoteCon->RenderToRtf( oRenderParameter );
if( _T("") != sFootnote )
sResult.AppendFormat( _T("{\\*\\aftnsepc %ls}"), sFootnote );
sResult.AppendFormat( _T("{\\*\\aftnsepc %ls}"), sFootnote.GetBuffer() );
}
sResult.Append(_T("\n\n"));
......
......@@ -64,26 +64,4 @@ public:
sResult.Replace(_T("'"), _T("&apos;"));
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 @@
#define BUF_SIZE 2048
#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
{
static int ToDigit(TCHAR c)
......@@ -20,7 +31,7 @@ namespace Strings
return 0;
}
static COLORREF ToColor(const CString& strValue)
static int ToColor(const CString& strValue)
{
// variables
int blue = 0;
......@@ -136,53 +147,112 @@ public:
_stscanf(str, _T("%d"), &nResult);
return nResult;
}
static bool MultybyteToUnicode(CStringA sInputStr, CStringW& sOutputStr, int nCodepage)
};
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
{
public:
class RtfInternalEncoder
{
//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 )
public:
static CString Encode( CString sFilename )
{
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;
return _T("{\\*filename ") + sFilename + _T("\\*end}");
}
static CStringA UnicodeToUtf8(CStringW sInputStr)//todo
static void Decode( CString& sText, NFileWriter::CBufferedFileWriter& oFileWriter ) //сразу записывает в файл
{
//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;
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;
class RtfUtility
{
public:
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;
......@@ -286,13 +356,13 @@ public:
{
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 )
return;
CFile file;
if (file.CreateFileW(sFilename) != S_OK) return;
if (file.CreateFile(sFilename) != S_OK) return;
DWORD dwBytesWritten;
file.WriteFile(pbData ,nLength);
......@@ -302,7 +372,7 @@ public:
{
CFile file;
if (file.CreateFileW(sFilename) != S_OK) return;
if (file.CreateFile(sFilename) != S_OK) return;
TCHAR * buf = sData.GetBuffer();
int nLengthText = sData.GetLength();
......@@ -342,7 +412,7 @@ public:
CString sHexText;
for( int i = 0; i < sText.GetLength(); i++ )
{
TBYTE byteChar = sText[i];
BYTE byteChar = sText[i];
sHexText.AppendFormat( _T("%x"), byteChar );
}
return sHexText;
......@@ -359,9 +429,9 @@ public:
}
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 )
{
......@@ -383,28 +453,32 @@ public:
}
static int CharsetToCodepage( int nCharset )
{
#if defined (_WIN32) || defined(_WIN64)
CHARSETINFO Info;
DWORD* dwAcp = (DWORD*)nCharset;
if( TRUE == TranslateCharsetInfo(dwAcp, &Info, TCI_SRCCHARSET) )
return Info.ciACP;
int CodePagesLength = sizeof( aCodePages ) / ( sizeof( int ) );
for( int i = 0; i < nCodePagesLength; i++ )
if( aCodePages[i][0] == nCharset )
return aCodePages[i][1];
#endif
return 1252;//ANSI
}
static int CodepageToCharset( int nCodepage )
{
CHARSETINFO Info;
DWORD* dwAcp = (DWORD*)nCodepage;
if( TRUE == TranslateCharsetInfo(dwAcp, &Info, TCI_SRCCODEPAGE) )
return Info.ciCharset;
for( int i = 0; i < nCodePagesLength; i++ )
if( aCodePages[i][1] == nCodepage )
return aCodePages[i][0];
return 0;//ANSI
}
// static int CodepageToCharset( int nCodepage )
// {
// CHARSETINFO Info;
// DWORD* dwAcp = (DWORD*)nCodepage;
// if( TRUE == TranslateCharsetInfo(dwAcp, &Info, TCI_SRCCODEPAGE) )
// return Info.ciCharset;
// 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 )
{
return nCharset == 77 || nCharset == 78 || nCharset == 79 || nCharset == 80 ||
......@@ -417,109 +491,5 @@ public:
nCodepage == 10002 || nCodepage == 10005 || nCodepage == 10004 || nCodepage == 10006 ||
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:
{
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();
CStringA sXmlUTF = Convert::UnicodeToUtf8( sXml );//todooo UTF32 !!!
file.WriteFile( sXmlUTF.GetBuffer(), sXmlUTF.GetLength());
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
file.WriteFile((void*)sXmlUTF.c_str(), sXmlUTF.length());
file.CloseFile();
return true;
......@@ -57,10 +57,10 @@ private:
sResult.Append( _T("<Default Extension=\"xml\" ContentType=\"application/xml\"/>") );
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++ )
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>") );
return sResult;
}
......
......@@ -23,14 +23,16 @@ public:
if( false == m_sFileXml.IsEmpty() )
{
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_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml"), _T("/word/fontTable.xml") );
CString sXml = CreateXml();
CStringA sXmlUTF = Convert::UnicodeToUtf8( sXml );
file.WriteFile(sXmlUTF.GetBuffer(), sXmlUTF.GetLength());
std::wstring sXml = CreateXml();
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml);
file.WriteFile((void*)sXmlUTF.c_str(), sXmlUTF.length());
file.CloseFile();
return true;
......@@ -47,14 +49,16 @@ public:
}
private:
CString m_sFileXml;
OOXWriter& m_oWriter;
CString CreateXml()
std::wstring CreateXml()
{
CString sResult;
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( m_sFileXml );
sResult.Append( _T("</w:fonts>") );
std::wstring sResult;
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( m_sFileXml.GetBuffer() );
sResult.append( _T("</w:fonts>") );
return sResult;
}
};
......@@ -16,7 +16,7 @@ public:
CString sFootnote;
sFootnote.Append( _T("<w:footnote") );
if( false == sType.IsEmpty() )
sFootnote.AppendFormat( _T(" w:type=\"%ls\""), sType );
sFootnote.AppendFormat( _T(" w:type=\"%ls\""), sType.GetBuffer() );
if( PROP_DEF != nID )
sFootnote.AppendFormat( _T(" w:id=\"%d\""), nID );
sFootnote.Append( _T(">") );
......@@ -29,7 +29,7 @@ public:
{
m_sFootnotes.Append( _T("<w:footnote") );
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 )
m_sFootnotes.AppendFormat( _T(" w:id=\"%d\""), nID );
m_sFootnotes.Append( _T(">") );
......@@ -41,22 +41,26 @@ public:
if( m_sFootnotes.IsEmpty() ) return false;
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_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml"), _T("/word/footnotes.xml") );
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();
return true;
}
private:
RtfDocument& m_oDocument;
OOXWriter& m_oWriter;
CString m_sFootnotes;
CString CreateXml()
{
CString sResult;
......@@ -83,7 +87,7 @@ public:
CString sEndnote;
sEndnote.Append( _T("<w:endnote") );
if( false == sType.IsEmpty() )
sEndnote.AppendFormat( _T(" w:type=\"%ls\""), sType );
sEndnote.AppendFormat( _T(" w:type=\"%ls\""), sType.GetBuffer() );
if( -2 != nID )
sEndnote.AppendFormat( _T(" w:id=\"%d\""), nID );
sEndnote.Append( _T(">") );
......@@ -96,7 +100,7 @@ public:
{
m_sEndnotes.Append( _T("<w:endnote") );
if( false == sType.IsEmpty() )
m_sEndnotes.AppendFormat( _T(" w:type=\"%ls\""), sType );
m_sEndnotes.AppendFormat( _T(" w:type=\"%ls\""), sType.GetBuffer() );
if( -2 != nID )
m_sEndnotes.AppendFormat( _T(" w:id=\"%d\""), nID );
m_sEndnotes.Append( _T(">") );
......@@ -108,14 +112,14 @@ public:
if( m_sEndnotes.IsEmpty() ) return false;
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_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();
return true;
}
......@@ -123,14 +127,15 @@ private:
RtfDocument& m_oDocument;
OOXWriter& m_oWriter;
CString m_sEndnotes;
CStringA CreateXml()
std::string CreateXml()
{
CString sResult;
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( m_sEndnotes );
sResult.Append( _T("</w:endnotes>") );
return Convert::UnicodeToUtf8( sResult);
std::wstring sResult;
sResult.append( _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>") );
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( _T("</w:endnotes>") );
return NSFile::CUtf8Converter::GetUtf8StringFromUnicode( sResult);
}
};
......@@ -23,16 +23,15 @@ public:
{
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_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml"), _T("/word/numbering.xml") );
DWORD dwBytesWritten;
CString sXml = CreateXml();
CStringA sXmlUTF = Convert::UnicodeToUtf8( sXml );
std::wstring sXml = CreateXml();
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml);
file.WriteFile(sXmlUTF.GetBuffer(), sXmlUTF.GetLength());
file.WriteFile((void*)sXmlUTF.c_str(), sXmlUTF.length());
file.CloseFile();
return true;
......@@ -45,15 +44,17 @@ public:
}
private:
CString m_sFileXml;
OOXWriter& m_oWriter;
CString CreateXml()
std::wstring CreateXml()
{
CString sResult;
sResult.Append( _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>") );
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( m_sFileXml );
sResult.Append( _T("</w:numbering>") );
std::wstring sResult;
sResult.append( _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>") );
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( m_sFileXml.GetBuffer() );
sResult.append( _T("</w:numbering>") );
return sResult;
}
};
......@@ -38,7 +38,7 @@ public:
sResult.Append( _T("<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">") );
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] )
sResult.Append( _T(" TargetMode=\"External\"") );
sResult.Append( _T("/>") );
......@@ -52,15 +52,16 @@ public:
if( m_aTargets.size() < 1 )return false;
CString pathRels = sFolder + FILE_SEPARATOR_STR + _T("_rels");
FileSystem::Directory::CreateDirectoryW(pathRels) ;
FileSystem::Directory::CreateDirectory(pathRels) ;
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();
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();
}
};
......
......@@ -26,16 +26,16 @@ public:
if( false == m_sFileXml.IsEmpty() )
{
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_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"), _T("/word/styles.xml") );
DWORD dwBytesWritten;
CString sXml = CreateXml();
CStringA sXmlUTF = Convert::UnicodeToUtf8( sXml );
std::wstring sXml = CreateXml();
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml);
file.WriteFile((void*)sXmlUTF.c_str(), sXmlUTF.length());
file.WriteFile(sXmlUTF.GetBuffer(), sXmlUTF.GetLength());
file.CloseFile();
return true;
}
......@@ -49,14 +49,14 @@ private:
CString m_sFileXml;
OOXWriter& m_oWriter;
CString CreateXml()
std::wstring CreateXml()
{
CString sResult;
sResult.Append( _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>") );
sResult.Append( _T("\n") );
sResult.Append( _T("<w:styles xmlns:w = \"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">") );
sResult.Append( m_sFileXml );
sResult.Append( _T("</w:styles>") );
std::wstring sResult;
sResult.append( _T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>") );
sResult.append( _T("\n") );
sResult.append( _T("<w:styles xmlns:w = \"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">") );
sResult.append( m_sFileXml.GetBuffer() );
sResult.append( _T("</w:styles>") );
return sResult;
}
};
......@@ -19,11 +19,11 @@ namespace NFileWriter
// ( )
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 :
......@@ -109,7 +109,7 @@ namespace NFileWriter
while ( 0 >= ( lBufferFreeLength = m_lBufferSize - m_lWritePointer ) )
{
// , ,
if ( FALSE == WriteBuffer ( m_lBufferSize ) )
if ( false == WriteBuffer ( m_lBufferSize ) )
throw 1;
}
......@@ -135,7 +135,7 @@ namespace NFileWriter
if ( 0 < m_lWritePointer )
{
// ,
if ( FALSE == WriteBuffer ( m_lWritePointer ) )
if ( false == WriteBuffer ( m_lWritePointer ) )
throw 1;
}
}
......@@ -156,13 +156,13 @@ namespace NFileWriter
}
//
virtual void GetPosition(ULONGLONG& nPos)
virtual void GetPosition(ULONG64& nPos)
{
nPos = m_oFile.GetPosition() + m_lWritePointer;
}
//
virtual void GetSize(ULONGLONG& nLen)
virtual void GetSize(ULONG64& nLen)
{
nLen = m_oFile.GetFileSize() + m_lWritePointer;
......@@ -170,17 +170,17 @@ namespace NFileWriter
private :
//
BOOL WriteBuffer ( LONG64 lSize )
bool WriteBuffer ( LONG64 lSize )
{
//
if (m_oFile.WriteFile(m_lpBuffer, ( DWORD ) lSize) != S_OK)
{
// - , FALSE
return FALSE;
return false;
}
// 0
m_lWritePointer = 0;
return TRUE;
return true;
}
};
}
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