Commit 6f495161 authored by ElenaSubbotina's avatar ElenaSubbotina

RtfFormatReader - review, ...

parent b7842e18
......@@ -39,7 +39,7 @@
#include <boost/shared_ptr.hpp>
typedef enum{ mu_none, mu_Auto, mu_Percent, mu_Twips } MetricUnits;
enum _MetricUnits{ mu_none, mu_Auto, mu_Percent, mu_Twips };
class RenderParameter
......@@ -49,19 +49,19 @@ class RenderParameter
void* poDocument;
void* poRels;
int nType;
int nValue;
CString sValue;
int RtfType;
int nType;
int nValue;
CString sValue;
int RtfType;
RenderParameter()
{
poWriter = NULL;
poDocument = NULL;
poRels = NULL;
nType = RENDER_TO_OOX_PARAM_UNKNOWN;
nValue = PROP_DEF;
RtfType = RTF_MAX;
poWriter = NULL;
poDocument = NULL;
poRels = NULL;
nType = RENDER_TO_OOX_PARAM_UNKNOWN;
nValue = PROP_DEF;
RtfType = RTF_MAX;
}
};
......@@ -252,7 +252,7 @@ public:
if( TYPE_RTF_PARAGRAPH == m_aArray[i]->GetType() && i != (int)m_aArray.size() - 1)
{
sResult += _T("\\par") ;
sResult += L"\\par";
}
}
return sResult;
......
......@@ -1098,7 +1098,7 @@ class AllPictReader : public RtfAbstractReader
private:
RtfShape& m_oShape;
public:
AllPictReader( RtfShape& oShape ):m_oShape(oShape)
AllPictReader( RtfShape& oShape ) : m_oShape(oShape)
{
}
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader,CString sCommand, bool hasParameter, int parameter)
......@@ -1128,7 +1128,12 @@ public:
StartSubReader( oPictureReader, oDocument, oReader );
}
else
{
bool res = RtfCharPropsCommand::ExecuteCommand( oDocument, oReader, sCommand, hasParameter, parameter, &m_oShape.m_oCharProperty );
if (res) return true;
return false;
}
return true;
}
};
......@@ -1613,29 +1618,29 @@ public:
//public:
// bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader,CString sCommand, bool hasParameter, int parameter)
// {
// if( _T("lsdlockedexcept") == sCommand )
// if( L"lsdlockedexcept" == sCommand )
// return true;
// else if( _T("lsdpriority") == sCommand )
// else if( L"lsdpriority" == sCommand )
// {
// if( true == hasParameter )
// m_oCurException.m_nPriority = parameter;
// }
// else if( _T("lsdunhideused") == sCommand )
// else if( L"lsdunhideused" == sCommand )
// {
// if( true == hasParameter )
// m_oCurException.m_nHiddenWhenUse = parameter;
// }
// else if( _T("lsdqformat") == sCommand )
// else if( L"lsdqformat" == sCommand )
// {
// if( true == hasParameter )
// m_oCurException.m_nQFormat = parameter;
// }
// else if( _T("lsdlocked") == sCommand )
// else if( L"lsdlocked" == sCommand )
// {
// if( true == hasParameter )
// m_oCurException.m_nLocked = parameter;
// }
// else if( _T("lsdsemihidden") == sCommand )
// else if( L"lsdsemihidden" == sCommand )
// {
// if( true == hasParameter )
// m_oCurException.m_nSemiHidden = parameter;
......@@ -1666,39 +1671,39 @@ public:
//{
//public: bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader,CString sCommand, bool hasParameter, int parameter)
// {
// if( _T("latentstyles") == sCommand )
// if( L"latentstyles" == sCommand )
// return true;
// else if( _T("lsdstimax") == sCommand )
// else if( L"lsdstimax" == sCommand )
// {
// if( true == hasParameter )
// oDocument.m_oLatentStyleTable.m_nCount = parameter;
// }
// else if( _T("lsdlockeddef") == sCommand )
// else if( L"lsdlockeddef" == sCommand )
// {
// if( true == hasParameter )
// oDocument.m_oLatentStyleTable.m_nLocked = parameter;
// }
// else if( _T("lsdsemihiddendef") == sCommand )
// else if( L"lsdsemihiddendef" == sCommand )
// {
// if( true == hasParameter )
// oDocument.m_oLatentStyleTable.m_nSemiHidden = parameter;
// }
// else if( _T("lsdunhideuseddef") == sCommand )
// else if( L"lsdunhideuseddef" == sCommand )
// {
// if( true == hasParameter )
// oDocument.m_oLatentStyleTable.m_nUnHiddenWhenUse = parameter;
// }
// else if( _T("lsdqformatdef") == sCommand )
// else if( L"lsdqformatdef" == sCommand )
// {
// if( true == hasParameter )
// oDocument.m_oLatentStyleTable.m_nQFormat = parameter;
// }
// else if( _T("lsdprioritydef") == sCommand )
// else if( L"lsdprioritydef" == sCommand )
// {
// if( true == hasParameter )
// oDocument.m_oLatentStyleTable.m_nPriority = parameter;
// }
// else if( _T("lsdlockedexcept") == sCommand )
// else if( L"lsdlockedexcept" == sCommand )
// {
// LockedExeceptReader oExceptionReader;
// StartSubReader( oExceptionReader, oDocument, oReader );
......@@ -2188,11 +2193,11 @@ private:
}
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader,CString sCommand, bool hasParameter, int parameter)
{
if( _T("lfolevel") == sCommand)
if( L"lfolevel" == sCommand)
return true;
COMMAND_RTF_INT( _T("listoverrideformat"), m_oOverrideLevel.m_nLevelIndex, sCommand, hasParameter, parameter )
COMMAND_RTF_INT( _T("listoverridestartat"), m_oOverrideLevel.m_nStart, sCommand, hasParameter, parameter )
else if( _T("listlevel") == sCommand )
COMMAND_RTF_INT( L"listoverrideformat", m_oOverrideLevel.m_nLevelIndex, sCommand, hasParameter, parameter )
COMMAND_RTF_INT( L"listoverridestartat", m_oOverrideLevel.m_nStart, sCommand, hasParameter, parameter )
else if( L"listlevel" == sCommand )
{
m_oOverrideLevel.m_oLevel.m_nLevel = m_oOverrideLevel.m_nLevelIndex;
ListTableReader::ListReader::ListLevelReader oListLevelReader( m_oOverrideLevel.m_oLevel );
......@@ -2211,19 +2216,19 @@ private:
}
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader,CString sCommand, bool hasParameter, int parameter)
{
if( _T("listoverride") == sCommand)
if( L"listoverride" == sCommand)
return true;
else if( _T("listid") == sCommand )
else if( L"listid" == sCommand )
{
if( true == hasParameter )
m_oProperty.m_nListID = parameter;
}
else if( _T("ls") == sCommand )
else if( L"ls" == sCommand )
{
if( true == hasParameter )
m_oProperty.m_nIndex = parameter;
}
else if( _T("lfolevel") == sCommand )
else if( L"lfolevel" == sCommand )
{
RtfListOverrideProperty::ListOverrideLevels::ListOverrideLevel oOverrideLevel;
lfolevelReader olfolevelReader( oOverrideLevel );
......@@ -2241,9 +2246,9 @@ public:
}
bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader,CString sCommand, bool hasParameter, int parameter)
{
if( _T("listoverridetable") == sCommand )
if( L"listoverridetable" == sCommand )
return true;
else if( _T("listoverride") == sCommand)
else if( L"listoverride" == sCommand)
{
RtfListOverrideProperty oProperty;
ListOverrideReader oListOverrideReader( oProperty );
......
......@@ -79,14 +79,14 @@ public:
CString Generate_rId()
{
CString sResult;
sResult.AppendFormat( _T("rId%d"), m_nrIdCount++ );
sResult.AppendFormat( L"rId%d", m_nrIdCount++ );
return sResult;
}
CString Generate_FitTextId()
{
CString sResult;
sResult.AppendFormat( _T("%d"), m_nFitTextIdCount++ );
sResult.AppendFormat( L"%d", m_nFitTextIdCount++ );
return sResult;
}
......@@ -134,8 +134,8 @@ public:
CString Generate_OleId()
{
CString sId;
sId.AppendFormat( _T("%d"), m_nOleId++ );
CString sResult = _T("_1330071130");
sId.AppendFormat( L"%d", m_nOleId++ );
CString sResult = L"_1330071130";
sResult = sResult.Left( sResult.GetLength() - sId.GetLength() );
sResult += sId;
return sResult;
......
......@@ -47,47 +47,47 @@ public:
//if( TRUE == oXmlReader.OpenFromXmlNode( oParam.oNode ) )
//{
// CString sThemeColor = oXmlReader.ReadNodeAttribute(sTheme, _T("") );
// CString themeShade = oXmlReader.ReadNodeAttribute(sThemeShade, _T("0") );
// CString themeTint = oXmlReader.ReadNodeAttribute(sThemeTint, _T("255") );
// CString val = oXmlReader.ReadNodeAttribute(sColor, _T("") );
// if( _T("") != sThemeColor )
// CString sThemeColor = oXmlReader.ReadNodeAttribute(sTheme, L"" );
// CString themeShade = oXmlReader.ReadNodeAttribute(sThemeShade, L"0" );
// CString themeTint = oXmlReader.ReadNodeAttribute(sThemeTint, L"255" );
// CString val = oXmlReader.ReadNodeAttribute(sColor, L"" );
// if( !sThemeColor.IsEmpty() )
// {
// //Todo tx1 - моджет приходить text1
// RtfColor::ThemeColor oTheme = RtfColor::TC_NONE;
// if( sThemeColor == _T("accent1") )
// if( sThemeColor == L"accent1" )
// oTheme = RtfColor::caccentone;
// else if( sThemeColor == _T("accent2") )
// else if( sThemeColor == L"accent2" )
// oTheme = RtfColor::caccenttwo;
// else if( sThemeColor == _T("accent3") )
// else if( sThemeColor == L"accent3" )
// oTheme = RtfColor::caccentthree;
// else if( sThemeColor == _T("accent4") )
// else if( sThemeColor == L"accent4" )
// oTheme = RtfColor::caccentfour;
// else if( sThemeColor == _T("accent5") )
// else if( sThemeColor == L"accent5" )
// oTheme = RtfColor::caccentfive;
// else if( sThemeColor == _T("accent6") )
// else if( sThemeColor == L"accent6" )
// oTheme = RtfColor::caccentsix;
// else if( sThemeColor == _T("bg1") )
// else if( sThemeColor == L"bg1" )
// oTheme = RtfColor::cbackgroundone;
// else if( sThemeColor == _T("bg2") )
// else if( sThemeColor == L"bg2" )
// oTheme = RtfColor::cbackgroundtwo;
// else if( sThemeColor == _T("dk1") )
// else if( sThemeColor == L"dk1" )
// oTheme = RtfColor::cmaindarkone;
// else if( sThemeColor == _T("dk2") )
// else if( sThemeColor == L"dk2" )
// oTheme = RtfColor::cmaindarktwo;
// else if( sThemeColor == _T("folHlink") )
// else if( sThemeColor == L"folHlink" )
// oTheme = RtfColor::cfollowedhyperlink;
// else if( sThemeColor == _T("hlink") )
// else if( sThemeColor == L"hlink" )
// oTheme = RtfColor::chyperlink;
// else if( sThemeColor == _T("lt1") )
// else if( sThemeColor == L"lt1" )
// oTheme = RtfColor::cmainlightone;
// else if( sThemeColor == _T("lt2") )
// else if( sThemeColor == L"lt2" )
// oTheme = RtfColor::cmainlighttwo;
// else if( sThemeColor == _T("phClr") )
// else if( sThemeColor == L"phClr" )
// oTheme = RtfColor::cmainlighttwo;
// else if( sThemeColor == _T("tx1") )
// else if( sThemeColor == L"tx1" )
// oTheme = RtfColor::ctextone;
// else if( sThemeColor = _T("tx2") )
// else if( sThemeColor = L"tx2" )
// oTheme = RtfColor::ctexttwo;
// if( true == oParam.oRtf->m_oColorTable.GetColor( oTheme , oOutputColor ) )
......@@ -118,7 +118,7 @@ public:
// return false;
// }
// else if( _T("auto") != val )
// else if( L"auto" != val )
// {
// oOutputColor.SetHEXString( val );
// return true;
......
......@@ -98,15 +98,15 @@ public:
oNewColor.m_eTheme = RtfColor::cfollowedhyperlink;
oParam.oRtf->m_oColorTable.AddItem( oNewColor );
//else if( _T("a:bg1") == sNodeName )
//else if( L"a:bg1" == sNodeName )
// oNewColor.m_eTheme = RtfColor::cbackgroundone;
//else if( _T("a:bg2") == sNodeName )
//else if( L"a:bg2" == sNodeName )
// oNewColor.m_eTheme = RtfColor::cbackgroundtwo;
//else if( _T("a:phClr") == sNodeName )
//else if( L"a:phClr" == sNodeName )
// oNewColor.m_eTheme = RtfColor::cmainlighttwo;
//else if( _T("a:tx1") == sNodeName )
//else if( L"a:tx1" == sNodeName )
// oNewColor.m_eTheme = RtfColor::ctextone;
//else if( _T("a:tx2") == sNodeName )
//else if( L"a:tx2" == sNodeName )
// oNewColor.m_eTheme = RtfColor::ctexttwo;
......
......@@ -72,7 +72,7 @@ bool OOXPictureGraphicReader::Parse( ReaderParameter oParam , RtfShape& oOutput)
OOX::Image* pImage = (OOX::Image*)oFile.operator->();
CString sImagePath = pImage->filename().GetPath();
bTryPicture = WriteDataToPicture( sImagePath, *oOutput.m_oPicture, _T("") );
bTryPicture = WriteDataToPicture( sImagePath, *oOutput.m_oPicture, L"" );
}
}
}
......
......@@ -119,25 +119,26 @@ public:
CString sFont;
CString sTempFont;
if( _T("") != sAscii )
if( !sAscii.IsEmpty() )
sFont = sAscii;
else if( _T("") != sAsciiTheme && _T("") != GetThemeFont(sAsciiTheme, *oParam.oReader) )
else if( !sAsciiTheme.IsEmpty() && !GetThemeFont(sAsciiTheme, *oParam.oReader).IsEmpty() )
sFont = GetThemeFont(sAsciiTheme, *oParam.oReader);
else if( _T("") != sHAnsi )
else if( !sHAnsi.IsEmpty() )
sFont = sHAnsi;
else if( _T("") != sHAnsiTheme && _T("") != GetThemeFont(sHAnsiTheme, *oParam.oReader) )
else if( !sHAnsiTheme.IsEmpty() && !GetThemeFont(sHAnsiTheme, *oParam.oReader).IsEmpty() )
sFont = GetThemeFont(sHAnsiTheme, *oParam.oReader);
else if( _T("") != sCs )
else if( !sCs.IsEmpty() )
sFont = sCs;
else if( _T("") != sCsTheme && _T("") != GetThemeFont(sCsTheme, *oParam.oReader) )
else if( !sCsTheme.IsEmpty() && !GetThemeFont(sCsTheme, *oParam.oReader).IsEmpty() )
sFont = GetThemeFont(sCsTheme, *oParam.oReader);
else if( _T("") != sEastAsia )
else if( !sEastAsia.IsEmpty() )
sFont = sEastAsia;
else if( _T("") != sEastAsiaTheme && _T("") != GetThemeFont(sEastAsiaTheme, *oParam.oReader) )
else if( !sEastAsiaTheme.IsEmpty() && !GetThemeFont(sEastAsiaTheme, *oParam.oReader).IsEmpty() )
sFont = GetThemeFont(sEastAsiaTheme, *oParam.oReader);
if( _T("") != sFont )
if( !sFont.IsEmpty() )
{
RtfFont oCurFont;
if( true == oParam.oRtf->m_oFontTable.GetFont( sFont, oCurFont ) )
......@@ -156,22 +157,15 @@ private:
CString GetThemeFont( CString sTheme, OOXReader & oReader )
{
CString sFont;
if( _T("majorAscii") == sTheme )
sFont = oReader.m_smajorAscii;
else if( _T("majorBidi") == sTheme )
sFont = oReader.m_smajorBidi;
else if( _T("majorEastAsia") == sTheme )
sFont = oReader.m_smajorEastAsia;
else if( _T("majorHAnsi") == sTheme )
sFont = oReader.m_smajorHAnsi;
else if( _T("minorAscii") == sTheme )
sFont = oReader.m_sminorAscii;
else if( _T("minorBidi") == sTheme )
sFont = oReader.m_sminorBidi;
else if( _T("minorEastAsia") == sTheme )
sFont = oReader.m_sminorEastAsia;
else if( _T("minorHAnsi") == sTheme )
sFont = oReader.m_sminorHAnsi;
if ( L"majorAscii" == sTheme ) sFont = oReader.m_smajorAscii;
else if ( L"majorBidi" == sTheme ) sFont = oReader.m_smajorBidi;
else if ( L"majorEastAsia" == sTheme ) sFont = oReader.m_smajorEastAsia;
else if ( L"majorHAnsi" == sTheme ) sFont = oReader.m_smajorHAnsi;
else if ( L"minorAscii" == sTheme ) sFont = oReader.m_sminorAscii;
else if ( L"minorBidi" == sTheme ) sFont = oReader.m_sminorBidi;
else if ( L"minorEastAsia" == sTheme ) sFont = oReader.m_sminorEastAsia;
else if ( L"minorHAnsi" == sTheme ) sFont = oReader.m_sminorHAnsi;
return sFont;
}
};
......@@ -45,44 +45,45 @@ public:
XmlUtils::CXmlLiteReader oXmlReader;
if( TRUE == oXmlReader.OpenFromXmlNode(oParam.oNode) )
{
CString nCount = oXmlReader.ReadNodeAttribute( _T("w:count") );
if( _T("") != nCount )
CString nCount = oXmlReader.ReadNodeAttribute( L"w:count" );
if( !nCount.IsEmpty() )
oParam.oRtf->m_oLatentStyleTable.m_nCount = Strings::ToInteger( nCount );
CString nLocked = oXmlReader.ReadNodeAttribute( _T("w:defLockedState") );
if( _T("") != nLocked )
CString nLocked = oXmlReader.ReadNodeAttribute( L"w:defLockedState" );
if( !nLocked.IsEmpty() )
oParam.oRtf->m_oLatentStyleTable.m_nLocked= Strings::ToInteger( nLocked );
CString nSemiHid = oXmlReader.ReadNodeAttribute( _T("w:defSemiHidden") );
if( _T("") != nSemiHid )
CString nSemiHid = oXmlReader.ReadNodeAttribute( L"w:defSemiHidden" );
if( !nSemiHid.IsEmpty() )
oParam.oRtf->m_oLatentStyleTable.m_nSemiHidden= Strings::ToInteger( nSemiHid );
CString nUNhidWU = oXmlReader.ReadNodeAttribute( _T("w:defUnhideWhenUsed") );
if( _T("") != nUNhidWU )
CString nUNhidWU = oXmlReader.ReadNodeAttribute( L"w:defUnhideWhenUsed" );
if( !nUNhidWU.IsEmpty() )
oParam.oRtf->m_oLatentStyleTable.m_nUnHiddenWhenUse= Strings::ToInteger( nUNhidWU );
CString nQFormat = oXmlReader.ReadNodeAttribute( _T("w:defQFormat") );
if( _T("") != nQFormat )
CString nQFormat = oXmlReader.ReadNodeAttribute( L"w:defQFormat" );
if( !nQFormat.IsEmpty() )
oParam.oRtf->m_oLatentStyleTable.m_nQFormat= Strings::ToInteger( nQFormat );
CString nUIPriority = oXmlReader.ReadNodeAttribute( _T("w:defUIPriority") );
if( _T("") != nUIPriority )
CString nUIPriority = oXmlReader.ReadNodeAttribute( L"w:defUIPriority" );
if( !nUIPriority.IsEmpty() )
oParam.oRtf->m_oLatentStyleTable.m_nPriority= Strings::ToInteger( nUIPriority );
oXmlReader.ReadNodeList( _T("w:lsdException") );
oXmlReader.ReadNodeList( L"w:lsdException" );
for( int i = 0; i < oXmlReader.GetLengthList(); i++ )
{
RtfStyleException oNewException;
oNewException.m_sName = oXmlReader.ReadNodeAttribute( _T("w:name"), _T("") );
CString nPriority = oXmlReader.ReadNodeAttribute( _T("w:uiPriority"));
if( _T("") != nPriority )
oNewException.m_sName = oXmlReader.ReadNodeAttribute( L"w:name", L"" );
CString nPriority = oXmlReader.ReadNodeAttribute( L"w:uiPriority");
if( !nPriority.IsEmpty() )
oNewException.m_nPriority = Strings::ToInteger( nPriority );
CString nHiddenWhenUse = oXmlReader.ReadNodeAttribute( _T("w:unhideWhenUsed") );
if( _T("") != nHiddenWhenUse )
CString nHiddenWhenUse = oXmlReader.ReadNodeAttribute( L"w:unhideWhenUsed");
if( !nHiddenWhenUse.IsEmpty() )
oNewException.m_nHiddenWhenUse = Strings::ToInteger( nHiddenWhenUse );
CString nQFormat = oXmlReader.ReadNodeAttribute( _T("w:qFormat") );
if( _T("") != nQFormat )
CString nQFormat = oXmlReader.ReadNodeAttribute( L"w:qFormat" );
if( !nQFormat.IsEmpty() )
oNewException.m_nQFormat = Strings::ToInteger( nQFormat );
CString nLocked = oXmlReader.ReadNodeAttribute( _T("w:locked") );
if( _T("") != nLocked )
CString nLocked = oXmlReader.ReadNodeAttribute( L"w:locked" );
if( !nLocked.IsEmpty() )
oNewException.m_nLocked = Strings::ToInteger( nLocked );
CString nSemiHidden = oXmlReader.ReadNodeAttribute( _T("w:semiHidden") );
if( _T("") != nSemiHidden )
CString nSemiHidden = oXmlReader.ReadNodeAttribute( L"w:semiHidden");
if( !nSemiHidden.IsEmpty() )
oNewException.m_nSemiHidden = Strings::ToInteger( nSemiHidden );
if( true == oNewException.IsValid() )
......
......@@ -413,7 +413,7 @@ bool OOXMathReader::ParseElement(ReaderParameter oParam , OOX::WritingElement *
{
rtfMath->m_bIsVal = true;
RtfCharPtr oChar = RtfCharPtr(new RtfChar);
CString s; s.AppendFormat( _T("%d"), oFont.m_nID );
CString s; s.AppendFormat( L"%d", oFont.m_nID );
oChar->setText( s );
rtfMath->m_oVal.AddItem( oChar );
}
......
......@@ -177,11 +177,11 @@ bool OOXParagraphReader::Parse2( ReaderParameter oParam , RtfParagraph& oOutputP
sTarget = pH->Uri().GetPath();
}
}
if( _T("") != sTarget )
if( !sTarget.IsEmpty() )
{
//заменяем пробелы на %20
sTarget.Replace( _T(" "), _T("%20") );
CString sFileUrl = _T("file:///");
sTarget.Replace( L" ", L"%20" );
CString sFileUrl = L"file:///";
if( 0 == sTarget.Find( sFileUrl ) )
{
int nFirstDDot = sTarget.Find( ':', sFileUrl.GetLength() );
......@@ -199,7 +199,7 @@ bool OOXParagraphReader::Parse2( ReaderParameter oParam , RtfParagraph& oOutputP
RtfCharPtr oNewChar( new RtfChar() );
oNewChar->m_bRtfEncode = true;// false;
CString sFieldText;
sFieldText += _T("HYPERLINK \"") + sTarget + _T("\"");
sFieldText += L"HYPERLINK \"" + sTarget + L"\"";
oNewChar->setText( sFieldText );
RtfParagraphPtr oNewInsertParagraph( new RtfParagraph() );
oNewInsertParagraph->AddItem( oNewChar );
......@@ -207,10 +207,10 @@ bool OOXParagraphReader::Parse2( ReaderParameter oParam , RtfParagraph& oOutputP
//добавляем свойства
//pHyperlink->m_arrItems todoooo
//BOOL bLock = Strings::ToBoolean(oXmlReader.ReadNodeAttribute(i,_T("w:fldLock"),_T("false")));
//BOOL bLock = Strings::ToBoolean(oXmlReader.ReadNodeAttribute(i, L"w:fldLock", L"false)));
//if( TRUE == bLock )
// oCurField->m_eMode = RtfField::fm_fldlock;
//BOOL bDirty = Strings::ToBoolean(oXmlReader.ReadNodeAttribute(i,_T("w:dirty"),_T("false")));
//BOOL bDirty = Strings::ToBoolean(oXmlReader.ReadNodeAttribute(i, L"w:dirty", L"false"));
//if( TRUE == bDirty )
// oCurField->m_eMode = RtfField::fm_flddirty;
......@@ -238,17 +238,17 @@ bool OOXParagraphReader::Parse2( ReaderParameter oParam , RtfParagraph& oOutputP
//добавляем insert
RtfCharPtr oNewCharHYPER( new RtfChar() );
oNewCharHYPER->m_bRtfEncode = false;
oNewCharHYPER->setText( _T("HYPERLINK \\l \"") + pHyperlink->m_sAnchor.get() +_T("\"") );
oNewCharHYPER->setText( L"HYPERLINK \\l \"" + pHyperlink->m_sAnchor.get() +L"\"");
RtfParagraphPtr oNewInsertParagraph( new RtfParagraph() );
oNewInsertParagraph->AddItem( oNewCharHYPER );
oCurField->m_oInsert->AddItem( oNewInsertParagraph );
////добаляем свойства
//BOOL bLock = Strings::ToBoolean(oXmlReader.ReadNodeAttribute(i,_T("w:fldLock"),_T("false")));
//BOOL bLock = Strings::ToBoolean(oXmlReader.ReadNodeAttribute(i, L"w:fldLock" ,L"false"));
//if( TRUE == bLock )
// oCurField->m_eMode = RtfField::fm_fldlock;
//BOOL bDirty = Strings::ToBoolean(oXmlReader.ReadNodeAttribute(i,_T("w:dirty"),_T("false")));
//BOOL bDirty = Strings::ToBoolean(oXmlReader.ReadNodeAttribute(i, L"w:dirty", L"false"));
//if( TRUE == bDirty )
// oCurField->m_eMode = RtfField::fm_flddirty;
......@@ -273,7 +273,7 @@ bool OOXParagraphReader::Parse2( ReaderParameter oParam , RtfParagraph& oOutputP
OOX::Logic::CBookmarkStart * pBookmarkStart = dynamic_cast<OOX::Logic::CBookmarkStart*>(m_ooxElement->m_arrItems[i]);
RtfBookmarkStartPtr oNewBookmark( new RtfBookmarkStart() );
oNewBookmark->m_sName = pBookmarkStart->m_sName.IsInit() ? pBookmarkStart->m_sName.get2() : _T("");
oNewBookmark->m_sName = pBookmarkStart->m_sName.IsInit() ? pBookmarkStart->m_sName.get2() : L"";
if (pBookmarkStart->m_oColFirst.IsInit())
oNewBookmark->nFirstColumn = pBookmarkStart->m_oColFirst->GetValue();
......@@ -771,9 +771,10 @@ bool OOXRunReader::Parse( ReaderParameter oParam , RtfParagraph& oOutputParagrap
if( PROP_DEF != oNewProperty.m_nFontSize )
nFontSize = oNewProperty.m_nFontSize / 2;
sFieldText.AppendFormat(_T("SYMBOL %d \\\\f \""), nChar);
sFieldText += sFont;
sFieldText.AppendFormat(_T("\" \\\\s %d"), nFontSize );
sFieldText = L"SYMBOL";
sFieldText.AppendFormat(L"%d", nChar);
sFieldText += L" \\\\f \"" + sFont + L"\" \\\\s ";
sFieldText.AppendFormat(L"%d", nFontSize );
oNewChar->setText( sFieldText );
RtfParagraphPtr oNewInsertParagraph( new RtfParagraph() );
......
......@@ -74,7 +74,7 @@ public:
oOutput.m_nWidthGoal = image.get_Width();
oOutput.m_nHeightGoal = image.get_Height();
CString sTargetFile = FileSystem::Directory::CreateTempFileWithUniqueName(ooxPath.GetDirectory(), _T("img"));
CString sTargetFile = FileSystem::Directory::CreateTempFileWithUniqueName(ooxPath.GetDirectory(), L"img");
if (image.SaveFile(string2std_string(sTargetFile), 4 /*_CXIMAGE_FORMAT_PNG*/) )
{
......@@ -92,7 +92,7 @@ public:
CFile file_inp; //mpa
CFile file_out;//wmf
CString sTargetFile = FileSystem::Directory::CreateTempFileWithUniqueName(ooxPath.GetDirectory(), _T("img"));
CString sTargetFile = FileSystem::Directory::CreateTempFileWithUniqueName(ooxPath.GetDirectory(), L"img");
int res = file_inp.OpenFile(sPath);
if (res != S_OK) return false;
......
......@@ -108,9 +108,9 @@ public:
{
// todooo - реализовать в DocxFormat
//if( _T("w:doNotUseHTMLParagraphAutoSpacing") == sNodeName )
//if( L"w:doNotUseHTMLParagraphAutoSpacing" == sNodeName )
// oParam.oRtf->m_oProperty.m_bHtmlAutoSpace = 0;
//else if( _T("w:forgetLastTabAlignment") == sNodeName )
//else if( L"w:forgetLastTabAlignment" == sNodeName )
// oParam.oRtf->m_oProperty.m_bUseTabAlignment = 0;
}
if (m_ooxSettings->m_oFootnotePr.IsInit())
......
......@@ -290,10 +290,10 @@ bool OOXShapeReader::Parse2( ReaderParameter oParam , RtfShapePtr& oOutput)
OOX::Vml::CFill* fill = dynamic_cast<OOX::Vml::CFill*>(m_arrElement->m_arrItems[i]);
if (!fill) break;
CString srId = fill->m_sId.IsInit() ? fill->m_sId.get2() : _T("") ;
CString srId = fill->m_sId.IsInit() ? fill->m_sId.get2() : L"" ;
if (srId.IsEmpty())
srId = fill->m_rId.IsInit() ? fill->m_rId->GetValue() : _T("") ;
srId = fill->m_rId.IsInit() ? fill->m_rId->GetValue() : L"" ;
if (!srId.IsEmpty() && oParam.oReader->m_currentContainer)
{
......@@ -361,10 +361,10 @@ bool OOXShapeReader::Parse2( ReaderParameter oParam , RtfShapePtr& oOutput)
OOX::Vml::CImageData* image_data = dynamic_cast<OOX::Vml::CImageData*>(m_arrElement->m_arrItems[i]);
if (!image_data) break;
CString srId = image_data->m_oId.IsInit() ? image_data->m_oId.get2() : _T("") ;
CString srId = image_data->m_oId.IsInit() ? image_data->m_oId.get2() : L"" ;
if (srId.IsEmpty())
srId = image_data->m_rId.IsInit() ? image_data->m_rId->GetValue() : _T("") ;
srId = image_data->m_rId.IsInit() ? image_data->m_rId->GetValue() : L"" ;
if (oParam.oReader->m_currentContainer)
{
......@@ -584,7 +584,7 @@ bool OOXShapeReader::Parse( ReaderParameter oParam , RtfShapePtr& oOutput)
}
if (oOutput->m_nShapeType == PROP_DEF)
{
int pos = shape->m_sType->Find(_T("#_x0000_t"));
int pos = shape->m_sType->Find( L"#_x0000_t" );
if (pos >= 0)
{
oOutput->m_nShapeType = _wtoi(shape->m_sType->Mid(pos + 9, shape->m_sType->GetLength() - pos - 9).GetString());
......@@ -676,7 +676,7 @@ bool OOXShapeReader::Parse( ReaderParameter oParam , RtfShapePtr& oOutput)
oOutput->m_nWrapType = 2;
int nPosition = 0;
CString sPoint = _T("start");
CString sPoint = L"start";
for (long i =0 ;i < m_vmlElement->m_oWrapCoords->GetSize(); i++)
{
oOutput->m_aWrapPoints.push_back( std::pair<int,int>( m_vmlElement->m_oWrapCoords->GetX(i),
......@@ -743,7 +743,7 @@ bool OOXShapeGroupReader::Parse( ReaderParameter oParam , RtfShapeGroupPtr& oOut
{
if (oOutput->m_nWrapType == 3 && oOutput->m_nZOrderRelative == PROP_DEF) oOutput->m_nWrapType =2;
int nPosition = 0;
CString sPoint = _T("start");
CString sPoint = L"start";
for (long i =0 ;i < m_vmlGroup->m_oWrapCoords->GetSize(); i++)
{
oOutput->m_aWrapPoints.push_back( std::pair<int,int>( m_vmlGroup->m_oWrapCoords->GetX(i),
......
......@@ -67,11 +67,11 @@ public:
if (oNewStyle == NULL) return true;
RtfStyle::StyleType eStyleType = oNewStyle->m_eType;
RtfStyle::_StyleType eStyleType = oNewStyle->m_eType;
oNewStyle->m_nID = oParam.oRtf->m_oStyleTable.GetCount() + 1;
oNewStyle->m_sID = m_ooxStyle->m_sStyleId.IsInit() ? m_ooxStyle->m_sStyleId.get2() : _T("");
oNewStyle->m_sID = m_ooxStyle->m_sStyleId.IsInit() ? m_ooxStyle->m_sStyleId.get2() : L"";
if(m_ooxStyle->m_oName.IsInit() && m_ooxStyle->m_oName->m_sVal.IsInit())
oNewStyle->m_sName = m_ooxStyle->m_oName->m_sVal.get2();
......@@ -122,7 +122,7 @@ public:
CcnfStyle style;
opPrReader.Parse( oParam, oNewParStyle->m_oParProp, style );
//oNewParStyle->m_oParProp.m_nListId = PROP_DEF; //экспериментально вроде нельзя иметь numbering в параграф стиле
//oNewParStyle->m_oParProp.m_nListId = PROP_DEF; //экспериментально вроде нельзя иметь numbering в параграф стиле
//oNewParStyle->m_oParProp.m_nListLevel = PROP_DEF;
}
......@@ -268,7 +268,7 @@ public:
oOutputStyle = RtfStylePtr( new RtfTableStyle() );
oOutputStyle->m_nID = oParam.oRtf->m_oStyleTable.GetCount() + 1;
}
RtfStyle::StyleType eStyleType = oOutputStyle->m_eType;//todooo проверить
RtfStyle::_StyleType eStyleType = oOutputStyle->m_eType;//todooo проверить
if (oox_tableStyle->m_oRunPr.IsInit() &&
( RtfStyle::stCharacter == eStyleType || RtfStyle::stParagraph == eStyleType || RtfStyle::stTable == eStyleType ))//todo с rtf стилями
......
......@@ -164,7 +164,7 @@ public:
}
if( m_ooxTableProps->m_oTblCellMar.IsInit() )
{
MetricUnits eMetric = mu_none;
_MetricUnits eMetric = mu_none;
int nValue = PROP_DEF;
//if( mu_Twips == eMetric && PROP_DEF != nValue )
//todooo сделать вариант с процентми
......
......@@ -94,13 +94,13 @@ public:
}
if( m_ooxTableRowProps->m_oWBefore.IsInit() && m_ooxTableRowProps->m_oWBefore->m_oW.IsInit())
{
oOutputProperty.m_nWidthStartInvCell = m_ooxTableRowProps->m_oWBefore->m_oW->GetValue();
oOutputProperty.m_eMUStartInvCell = MetricUnits::mu_Twips;
oOutputProperty.m_nWidthStartInvCell = m_ooxTableRowProps->m_oWBefore->m_oW->GetValue();
oOutputProperty.m_eMUStartInvCell = _MetricUnits::mu_Twips;
}
if( m_ooxTableRowProps->m_oWAfter.IsInit() && m_ooxTableRowProps->m_oWAfter->m_oW.IsInit())
{
oOutputProperty.m_nWidthEndInvCell = m_ooxTableRowProps->m_oWAfter->m_oW->GetValue();
oOutputProperty.m_eMUEndInvCell = MetricUnits::mu_Twips;
oOutputProperty.m_nWidthEndInvCell = m_ooxTableRowProps->m_oWAfter->m_oW->GetValue();
oOutputProperty.m_eMUEndInvCell = _MetricUnits::mu_Twips;
}
if( m_ooxTableRowProps->m_oGridBefore.IsInit() && m_ooxTableRowProps->m_oGridBefore->m_oVal.IsInit())
......
......@@ -32,9 +32,14 @@
#include "RtfChar.h"
#include "RtfDocument.h"
#include "Writer/OOXWriter.h"
CString RtfChar::RenderToOOX(RenderParameter oRenderParameter)
{
CString sResult;
RtfDocument* poRtfDocument = static_cast<RtfDocument*> (oRenderParameter.poDocument);
OOXWriter* poOOXWriter = static_cast<OOXWriter*> (oRenderParameter.poWriter);
CString sResult;
if(RENDER_TO_OOX_PARAM_RUN == oRenderParameter.nType)
{
bool bInsert = false;
......@@ -43,13 +48,21 @@ CString RtfChar::RenderToOOX(RenderParameter oRenderParameter)
if (m_oProperty.m_nDeleted != PROP_DEF)
{
bDelete = true;
sResult += L"<w:del>";
CString sAuthor = m_oProperty.m_nRevauthDel != PROP_DEF ? poRtfDocument->m_oRevisionTable[ m_oProperty.m_nRevauthDel ] : L"";
CString sDate(RtfUtility::convertDateTime(m_oProperty.m_nRevdttmDel).c_str());
sResult += L"<w:del w:date=\"" + sDate + L"\" w:author=\"" + sAuthor + L"\" w:id=\"" + std::to_wstring(poOOXWriter->m_nCurTrackChangesId++).c_str() + L"\">";
m_oProperty.m_nDeleted = PROP_DEF;
}
if (m_oProperty.m_nRevised != PROP_DEF)
else if (m_oProperty.m_nRevised != PROP_DEF)
{
bInsert = true;
sResult += L"<w:ins>";
CString sAuthor = m_oProperty.m_nRevauth != PROP_DEF ? poRtfDocument->m_oRevisionTable[ m_oProperty.m_nRevauth] : L"";
CString sDate(RtfUtility::convertDateTime(m_oProperty.m_nRevdttm).c_str());
sResult += L"<w:ins w:date=\"" + sDate + L"\" w:author=\"" + sAuthor + L"\" w:id=\"" + std::to_wstring(poOOXWriter->m_nCurTrackChangesId++).c_str() + L"\">";
m_oProperty.m_nRevised = PROP_DEF;
}
......@@ -60,8 +73,8 @@ CString RtfChar::RenderToOOX(RenderParameter oRenderParameter)
sResult += renderTextToXML(L"Text", bDelete );
sResult += L"</w:r>";
if (bDelete)sResult += L"</w:del>";
if (bInsert)sResult += L"</w:ins>";
if (bDelete)sResult += L"</w:del>";
}
else if(RENDER_TO_OOX_PARAM_TEXT == oRenderParameter.nType)
{
......@@ -105,6 +118,7 @@ CString RtfChar::renderTextToXML( CString sParam, bool bDelete )
}
return sResult;
}
CString RtfChar::renderRtfText( CString& sText, void* poDocument, RtfCharProperty* oCharProperty )
{
RtfDocument* oDocument = static_cast<RtfDocument*>(poDocument);
......@@ -179,18 +193,18 @@ CString RtfChar::renderRtfText( CString& sText, void* poDocument, RtfCharPropert
if (nCharCode == 0x5c || nCharCode == 0x7b || nCharCode == 0x7d)
{
sResult.AppendFormat( _T("\\'%x"), nCharCode );
sResult.AppendFormat( L"\\'%x", nCharCode );
} else if (0x00 <= nCharCode && nCharCode - 1 < 0x10)
{
sResult.AppendFormat(_T("\\'0%x"), nCharCode - 1 );
sResult.AppendFormat( L"\\'0%x", nCharCode - 1 );
} else if (0x10 <= nCharCode - 1 && nCharCode < 0x20)
{
sResult.AppendFormat(_T("\\'%x"), nCharCode - 1 );
sResult.AppendFormat( L"\\'%x", nCharCode - 1 );
} else if ( 0x20 <= nCharCode && nCharCode < 0x80 )
{
sResult.AppendChar( nCharCode );
} else { // 0x80 <= nUnicode <= 0xff
sResult.AppendFormat( _T("\\'%x"), nCharCode );
sResult.AppendFormat( L"\\'%x", nCharCode );
}
}
}
......@@ -200,14 +214,50 @@ CString RtfChar::renderRtfText( CString& sText, void* poDocument, RtfCharPropert
if (0 < nUnicode && nUnicode <= 0x8000)
{
sResult.AppendFormat(_T("\\u%d*"),nUnicode);
sResult.AppendFormat( L"\\u%d*",nUnicode);
} else if (0x8000 < nUnicode && nUnicode <= 0xffff) {
sResult.AppendFormat(_T("\\u%d*"), nUnicode - 0x10000); //??? font alt name china ALL FONTS NEW.docx (Mekanik LET)
sResult.AppendFormat( L"\\u%d*", nUnicode - 0x10000); //??? font alt name china ALL FONTS NEW.docx (Mekanik LET)
} else {
sResult += _T("\\u9633*");
sResult += L"\\u9633*";
}
}
}
return sResult;
}
CString RtfChar::RenderToRtf(RenderParameter oRenderParameter)
{
CString result;
if( RENDER_TO_RTF_PARAM_CHAR == oRenderParameter.nType )
{
if( true == m_bRtfEncode )
result += renderRtfText( m_sChars, oRenderParameter.poDocument, &m_oProperty );
else
result += m_sChars;
}
else
{
CString sText;
if( true == m_bRtfEncode )
sText = renderRtfText( m_sChars, oRenderParameter.poDocument, &m_oProperty );
else
sText = m_sChars;
CString sTextProp = m_oProperty.RenderToRtf( oRenderParameter ) ;
if( !sText.IsEmpty() || !sTextProp.IsEmpty())
{
if (oRenderParameter.nType != RENDER_TO_RTF_PARAM_NESTED)
result += L"{";
result += sTextProp;
result += L" ";
result += sText;
if (oRenderParameter.nType != RENDER_TO_RTF_PARAM_NESTED)
result += L"}";
}
}
return result;
}
......@@ -317,41 +317,7 @@ public:
CString RenderToOOX(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 )
{
if( true == m_bRtfEncode )
result += renderRtfText( m_sChars, oRenderParameter.poDocument, &m_oProperty );
else
result += m_sChars;
}
else
{
CString sText;
if( true == m_bRtfEncode )
sText = renderRtfText( m_sChars, oRenderParameter.poDocument, &m_oProperty );
else
sText = m_sChars;
CString sTextProp = m_oProperty.RenderToRtf( oRenderParameter ) ;
if( !sText.IsEmpty() || !sTextProp.IsEmpty())
{
if (oRenderParameter.nType != RENDER_TO_RTF_PARAM_NESTED)
result += L"{";
result += sTextProp;
result += L" ";
result += sText;
if (oRenderParameter.nType != RENDER_TO_RTF_PARAM_NESTED)
result += L"}";
}
}
return result;
}
CString RenderToRtf(RenderParameter oRenderParameter);
private:
CString renderTextToXML( CString sParam, bool bDelete = false );
};
......
......@@ -57,9 +57,9 @@ int RtfDocument::GetType()
CString RtfDocument::RenderToRtf(RenderParameter oRenderParameter)
{
return _T("");
return L"";
}
CString RtfDocument::RenderToOOX(RenderParameter oRenderParameter)
{
return _T("");
return L"";
}
......@@ -186,8 +186,8 @@ public:
}
RtfStylePtr GetStyleResulting( RtfStylePtr oInputStyle )
{
RtfStylePtr oResultStyle;
RtfStyle::StyleType eStyleType = RtfStyle::st_none;
RtfStylePtr oResultStyle;
RtfStyle::_StyleType eStyleType = RtfStyle::st_none;
int nStyleId = oInputStyle->m_nID;
int nLinked = PROP_DEF;
......@@ -195,19 +195,19 @@ public:
if( RtfStyle::stCharacter == oInputStyle->m_eType )
{
eStyleType = RtfStyle::stCharacter;
oResultStyle = RtfCharStylePtr( new RtfCharStyle() );
eStyleType = RtfStyle::stCharacter;
oResultStyle = RtfCharStylePtr( new RtfCharStyle() );
}
else if( RtfStyle::stParagraph == oInputStyle->m_eType )
{
eStyleType = RtfStyle::stParagraph;
oResultStyle = RtfParagraphStylePtr( new RtfParagraphStyle() );
nLinked = oInputStyle->m_nLink;//linked будем смотреть только у стилей параграфа, чтобы избежать рекурсии
eStyleType = RtfStyle::stParagraph;
oResultStyle = RtfParagraphStylePtr( new RtfParagraphStyle() );
nLinked = oInputStyle->m_nLink;//linked будем смотреть только у стилей параграфа, чтобы избежать рекурсии
}
else if( RtfStyle::stTable == oInputStyle->m_eType )
{
eStyleType = RtfStyle::stTable;
oResultStyle = RtfTableStylePtr( new RtfTableStyle() );
eStyleType = RtfStyle::stTable;
oResultStyle = RtfTableStylePtr( new RtfTableStyle() );
}
else
return oInputStyle; //ОПАСНО .. потом может другим затереться todooo
......@@ -239,7 +239,7 @@ public:
oResultStyle->Merge( oInputStyle );
return oResultStyle;
}
}
CString RenderToRtf(RenderParameter oRenderParameter)
{
CString sResult;
......
......@@ -60,7 +60,7 @@ public:
void Clear()
{
RELEASEARRAYOBJECTS( m_aBuffer );
//m_sBuffer = _T("");
m_nSizeAbs = 0;
m_nPosAbs = -1;
}
......
......@@ -90,9 +90,9 @@ CString RtfMath::RenderToRtf(RenderParameter oRenderParameter)
CString sResult;
if( RENDER_TO_RTF_PARAM_NESTED != oRenderParameter.nType )
sResult += _T("{\\mmath");
sResult += L"{\\mmath";
sResult += _T("{\\") + m_sRtfName;
sResult += L"{\\" + m_sRtfName;
RenderParameter oNewParameter = oRenderParameter;
CString sVal;
......@@ -107,7 +107,7 @@ CString RtfMath::RenderToRtf(RenderParameter oRenderParameter)
oNewParameter.nType = RENDER_TO_RTF_PARAM_UNKNOWN;
for( int i = 0; i < m_oVal.GetCount(); i++ )
{
sVal += _T(" ") + m_oVal[i]->RenderToRtf( oNewParameter );
sVal += L" " + m_oVal[i]->RenderToRtf( oNewParameter );
}
}
if (!sVal.IsEmpty())
......@@ -120,10 +120,10 @@ CString RtfMath::RenderToRtf(RenderParameter oRenderParameter)
for( int i = 0; i < (int)m_aArray.size(); i++ )
sResult += m_aArray[i]->RenderToRtf( oNewParameter );
}
sResult += _T("}");
sResult += L"}";
if( RENDER_TO_RTF_PARAM_NESTED != oRenderParameter.nType )
sResult += _T("}");// m_sRtfName
sResult += L"}";// m_sRtfName
return sResult;
}
CString RtfMath::RenderToOOX(RenderParameter oRenderParameter)
......@@ -160,7 +160,7 @@ CString RtfMath::RenderToOOX(RenderParameter oRenderParameter)
}
}
sResult += _T("<");
sResult += L"<";
sResult += m_sOOXName;
if( false == sVal.IsEmpty() )
......@@ -170,19 +170,19 @@ CString RtfMath::RenderToOOX(RenderParameter oRenderParameter)
if (sVal == L"on") sVal = L"1";
else sVal = L"0";
}
sResult += _T(" m:val=\"");
sResult += L" m:val=\"";
sResult += sVal;
sResult += _T("\"");
sResult += L"\"";
}
sResult += _T(">");
sResult += L">";
sResult += sProp;
sResult += sContent;
sResult += _T("</");
sResult += L"</";
sResult += m_sOOXName;
sResult += _T(">");
sResult += L">";
//альтернативная картинка
// if( NULL != m_oPicture )
......
......@@ -90,7 +90,7 @@ public:
m_sRtfName = sName;
m_sOOXName = sName;
m_sOOXName.Insert(1, _T(":"));
m_sOOXName.Insert(1, L":");
}
void SetOOXType (int type);
......
......@@ -37,17 +37,57 @@
CString RtfOle::RenderToOOX(RenderParameter oRenderParameter)
{
if( false == IsValid() )
return _T("");
if( false == IsValid() ) return L"";
CString sResult;
RtfDocument* poRtfDocument = static_cast<RtfDocument*> (oRenderParameter.poDocument);
OOXWriter* poOOXWriter = static_cast<OOXWriter*> (oRenderParameter.poWriter);
if( RENDER_TO_OOX_PARAM_OLE_ONLY == oRenderParameter.nType )
{
sResult += RenderToOOXOnlyOle(oRenderParameter);
}
else
{
RtfCharProperty * pCharProps = m_oResultPic ? &m_oResultPic->m_oCharProperty : &m_oCharProperty;
//------------------------------------------
// todooo общая часть с RtfChar
bool bInsert = false;
bool bDelete = false;
if (pCharProps->m_nDeleted != PROP_DEF)
{
bDelete = true;
CString sAuthor = pCharProps->m_nRevauthDel != PROP_DEF ? poRtfDocument->m_oRevisionTable[ pCharProps->m_nRevauthDel ] : L"";
CString sDate(RtfUtility::convertDateTime(pCharProps->m_nRevdttmDel).c_str());
sResult += L"<w:del w:date=\"" + sDate + L"\" w:author=\"" + sAuthor + L"\" w:id=\"" + std::to_wstring(poOOXWriter->m_nCurTrackChangesId++).c_str() + L"\">";
pCharProps->m_nDeleted = PROP_DEF;
}
else if (pCharProps->m_nRevised != PROP_DEF)
{
bInsert = true;
CString sAuthor = pCharProps->m_nRevauth != PROP_DEF ? poRtfDocument->m_oRevisionTable[ pCharProps->m_nRevauth] : L"";
CString sDate(RtfUtility::convertDateTime(pCharProps->m_nRevdttm).c_str());
sResult += L"<w:ins w:date=\"" + sDate + L"\" w:author=\"" + sAuthor + L"\" w:id=\"" + std::to_wstring(poOOXWriter->m_nCurTrackChangesId++).c_str() + L"\">";
pCharProps->m_nRevised = PROP_DEF;
}
//----------
sResult += _T("<w:r>");
CString sCharProp = pCharProps->RenderToOOX(oRenderParameter);
if (!sCharProp .IsEmpty())
{
sResult += _T("<w:rPr>");
sResult += sCharProp;
sResult += _T("</w:rPr>");
}
sResult.AppendFormat( _T("<w:object w:dxaOrig=\"%d\" w:dyaOrig=\"%d\">"), m_nWidth, m_nHeight );
RenderParameter oNewRenderParameter = oRenderParameter;
......@@ -60,6 +100,9 @@ CString RtfOle::RenderToOOX(RenderParameter oRenderParameter)
sResult += _T("</w:object>");
sResult += _T("</w:r>");
if (bInsert)sResult += L"</w:ins>";
if (bDelete)sResult += L"</w:del>";
}
return sResult;
}
......@@ -67,9 +110,9 @@ CString RtfOle::RenderToOOXOnlyOle(RenderParameter oRenderParameter)
{
CString sResult;
OOXWriter* poOOXWriter = static_cast<OOXWriter*>(oRenderParameter.poWriter);
OOXRelsWriter* poRelsWriter = static_cast<OOXRelsWriter*>(oRenderParameter.poRels);
RtfDocument* poDocument = static_cast<RtfDocument*>(oRenderParameter.poDocument);
OOXWriter * poOOXWriter = static_cast<OOXWriter*> (oRenderParameter.poWriter);
OOXRelsWriter * poRelsWriter = static_cast<OOXRelsWriter*> (oRenderParameter.poRels);
RtfDocument * poDocument = static_cast<RtfDocument*> (oRenderParameter.poDocument);
sResult += _T("<o:OLEObject");
switch ( m_eOleType )
......@@ -105,6 +148,40 @@ CString RtfOle::RenderToOOXOnlyOle(RenderParameter oRenderParameter)
return sResult;
}
CString RtfOle::RenderToRtf(RenderParameter oRenderParameter)
{
if( !IsValid() ) return _T("");
CString sResult = _T("{\\object");
if( PROP_DEF != m_eOleType )
{
switch( m_eOleType )
{
case ot_emb: sResult += _T("\\objemb"); break;
case ot_link: sResult += _T("\\objlink"); break;
}
}
RENDER_RTF_INT( m_nWidth, sResult, _T("objw") );
RENDER_RTF_INT( m_nHeight, sResult, _T("objh") );
if( !m_sOleClass.IsEmpty() )
sResult += _T("{\\*\\objclass ") + m_sOleClass + _T("}");
if( !m_sOleFilename.IsEmpty() )
{
CString str = RtfUtility::RtfInternalEncoder::Encode( m_sOleFilename );
sResult += _T("{\\*\\objdata ") + str + _T("}");
}
if( NULL != m_oResultPic )
{
CString str = m_oResultPic->RenderToRtf( oRenderParameter );
sResult += _T("{\\result \\pard\\plain") + str + _T("}");
}
sResult += _T("}");
return sResult;
}
#if defined(_WIN32) || defined(_WIN64)
DWORD CALLBACK OlePut1(LPOLESTREAM oStream, const void FAR* pTarget, DWORD dwRead)
{
......
......@@ -36,15 +36,16 @@
class RtfOle : public IDocumentElement
{
public:
typedef enum{ ot_none, ot_emb, ot_link } OleType;
enum _OleType{ ot_none, ot_emb, ot_link };
OleType m_eOleType;
int m_nShapeId;
int m_nWidth;
int m_nHeight;
CString m_sOleClass;
RtfShapePtr m_oResultPic;
_OleType m_eOleType;
int m_nShapeId;
int m_nWidth;
int m_nHeight;
CString m_sOleClass;
RtfShapePtr m_oResultPic;
RtfCharProperty m_oCharProperty; // тут могут быть track changes ....
RtfOle()
{
m_piStorage = NULL;
......@@ -63,40 +64,7 @@ public:
return PROP_DEF != m_nWidth && PROP_DEF != m_nHeight && _T("") != m_sOleFilename;
/*&& ::GetFileAttributes( m_sOleFilename ) != DWORD( -1 )*/
}
CString RenderToRtf(RenderParameter oRenderParameter)
{
if( !IsValid() ) return _T("");
CString sResult = _T("{\\object");
if( PROP_DEF != m_eOleType )
{
switch( m_eOleType )
{
case ot_emb: sResult += _T("\\objemb"); break;
case ot_link: sResult += _T("\\objlink"); break;
}
}
RENDER_RTF_INT( m_nWidth, sResult, _T("objw") );
RENDER_RTF_INT( m_nHeight, sResult, _T("objh") );
if( !m_sOleClass.IsEmpty() )
sResult += _T("{\\*\\objclass ") + m_sOleClass + _T("}");
if( !m_sOleFilename.IsEmpty() )
{
CString str = RtfUtility::RtfInternalEncoder::Encode( m_sOleFilename );
sResult += _T("{\\*\\objdata ") + str + _T("}");
}
if( NULL != m_oResultPic )
{
CString str = m_oResultPic->RenderToRtf( oRenderParameter );
sResult += _T("{\\result \\pard\\plain") + str + _T("}");
}
sResult += _T("}");
return sResult;
}
CString RenderToRtf(RenderParameter oRenderParameter);
CString RenderToOOX(RenderParameter oRenderParameter);
void SetFilename( CString sFilename )
......@@ -119,6 +87,8 @@ public:
RELEASEOBJECT( m_piStorage );
Utils::RemoveDirOrFile( m_sOleFilename );
m_sOleFilename = _T("");
m_oCharProperty.SetDefault();
}
private:
POLE::Storage* m_piStorage;
......
......@@ -41,28 +41,34 @@ typedef boost::shared_ptr<RtfParagraph> RtfParagraphPtr;
class RtfOldList : IRenderableProperty
{
public:
typedef enum{ lt_none, lt_blt, lt_level, lt_body, lt_cont }LevelType;
typedef enum{ lj_none, lj_left, lj_center, lj_right }LevelJust;
enum _LevelType { lt_none, lt_blt, lt_level, lt_body, lt_cont };
enum _LevelJust { lj_none, lj_left, lj_center, lj_right };
LevelType m_eLevelType;
int m_nLevelType;
LevelJust m_eLevelJust;
RtfParagraphPtr m_oLevelText;//фомат текста списка
_LevelType m_eLevelType;
int m_nLevelType;
_LevelJust m_eLevelJust;
RtfParagraphPtr m_oLevelText; //фомат текста списка
int m_nLs;
int m_nIlvl;
RtfParagraphPtr m_oText;//замещающий текст
RtfParagraphPtr m_oText; //замещающий текст
RtfOldList()
{
SetDefault();
}
bool CanConvertToNumbering();
void SetDefault();
CString RenderToRtf(RenderParameter oRenderParameter);
CString RenderToOOX(RenderParameter oRenderParameter);
bool operator==( const RtfOldList& oOldList );
};
typedef boost::shared_ptr<RtfOldList> RtfOldListPtr;
class RtfParagraph : public ITextItem, public ItemContainer< IDocumentElementPtr >
......
......@@ -36,24 +36,24 @@
CString RtfPicture::GenerateWMF(RenderParameter oRenderParameter)
{
CString sResult;
sResult += _T("{\\pict");
sResult += L"{\\pict";
RENDER_RTF_INT( 100, sResult, _T("picscalex") )
RENDER_RTF_INT( 100, sResult, _T("picscaley") )
RENDER_RTF_INT( 100, sResult, L"picscalex" )
RENDER_RTF_INT( 100, sResult, L"picscaley" )
RENDER_RTF_INT( m_nCropL, sResult, _T("piccropl") )
RENDER_RTF_INT( m_nCropT, sResult, _T("piccropt") )
RENDER_RTF_INT( m_nCropR, sResult, _T("piccropr") )
RENDER_RTF_INT( m_nCropB, sResult, _T("piccropb") )
RENDER_RTF_INT( m_nCropL, sResult, L"piccropl" )
RENDER_RTF_INT( m_nCropT, sResult, L"piccropt" )
RENDER_RTF_INT( m_nCropR, sResult, L"piccropr" )
RENDER_RTF_INT( m_nCropB, sResult, L"piccropb" )
RENDER_RTF_INT( m_nWidth, sResult, _T("picw") )
RENDER_RTF_INT( m_nHeight, sResult, _T("pich") )
RENDER_RTF_INT( m_nWidthGoal, sResult, _T("picwgoal") )
RENDER_RTF_INT( m_nHeightGoal, sResult, _T("pichgoal") )
RENDER_RTF_INT( m_nWidth, sResult, L"picw" )
RENDER_RTF_INT( m_nHeight, sResult, L"pich" )
RENDER_RTF_INT( m_nWidthGoal, sResult, L"picwgoal" )
RENDER_RTF_INT( m_nHeightGoal, sResult, L"pichgoal" )
sResult += _T("\\wmetafile8");
sResult += L"\\wmetafile8";
sResult += _T(" ");
sResult += L" ";
//сохраняем в темповую директорию и загружаем файл как текст
RtfWriter * poWriter = static_cast<RtfWriter*>( oRenderParameter.poWriter );
......@@ -71,53 +71,52 @@ CString RtfPicture::GenerateWMF(RenderParameter oRenderParameter)
//}
//RELEASEINTERFACE( piTempPict );
sResult += _T("}");
sResult += L"}";
return sResult;
}
CString RtfPicture::RenderToRtf(RenderParameter oRenderParameter)
{
if( !IsValid() )return _T("");
if( !IsValid() )return L"";
CString sResult = _T("{\\pict");
CString sResult = L"{\\pict";
//if(-1 != m_nShapeId)
//{
// sResult.AppendFormat(_T("{\\*\\picprop\\shplid%d"), m_nShapeId);
// sResult += m_oShapeProp.RenderToRtf( oRenderParameter ) + _T("}");
// sResult.AppendFormat(L"{\\*\\picprop\\shplid%d", m_nShapeId);
// sResult += m_oShapeProp.RenderToRtf( oRenderParameter ) + L"}";
//}
//else
// sResult.AppendFormat(_T("{\\*\\picprop") + m_oShapeProp.RenderToRtf( oRenderParameter ) + _T("}");
RENDER_RTF_INT( (int)m_dScaleX, sResult, _T("picscalex") )
RENDER_RTF_INT( (int)m_dScaleY, sResult, _T("picscaley") )
RENDER_RTF_INT( m_nCropL, sResult, _T("piccropl") )
RENDER_RTF_INT( m_nCropT, sResult, _T("piccropt") )
RENDER_RTF_INT( m_nCropR, sResult, _T("piccropr") )
RENDER_RTF_INT( m_nCropB, sResult, _T("piccropb") )
RENDER_RTF_INT( m_nWidth, sResult, _T("picw") )
RENDER_RTF_INT( m_nHeight, sResult, _T("pich") )
RENDER_RTF_INT( m_nWidthGoal, sResult, _T("picwgoal") )
RENDER_RTF_INT( m_nHeightGoal, sResult, _T("pichgoal") )
// sResult.AppendFormat(L"{\\*\\picprop" + m_oShapeProp.RenderToRtf( oRenderParameter ) + L"}";
RENDER_RTF_INT( (int)m_dScaleX, sResult, L"picscalex" )
RENDER_RTF_INT( (int)m_dScaleY, sResult, L"picscaley" )
RENDER_RTF_INT( m_nCropL, sResult, L"piccropl" )
RENDER_RTF_INT( m_nCropT, sResult, L"piccropt" )
RENDER_RTF_INT( m_nCropR, sResult, L"piccropr" )
RENDER_RTF_INT( m_nCropB, sResult, L"piccropb" )
RENDER_RTF_INT( m_nWidth, sResult, L"picw" )
RENDER_RTF_INT( m_nHeight, sResult, L"pich" )
RENDER_RTF_INT( m_nWidthGoal, sResult, L"picwgoal" )
RENDER_RTF_INT( m_nHeightGoal, sResult, L"pichgoal" )
switch( eDataType )
{
case dt_emf: sResult += _T("\\emfblip"); break;
case dt_wmf: sResult += _T("\\wmetafile8"); break;
case dt_png: sResult += _T("\\pngblip"); break;
case dt_jpg: sResult += _T("\\jpegblip"); break;
//case dt_bmp: sResult += _T("wbitmap8"); break;
case dt_emf: sResult += L"\\emfblip"; break;
case dt_wmf: sResult += L"\\wmetafile8"; break;
case dt_png: sResult += L"\\pngblip"; break;
case dt_jpg: sResult += L"\\jpegblip"; break;
//case dt_bmp: sResult += L"wbitmap8"; break;
}
sResult += _T(" ");
sResult += L" ";
sResult += RtfUtility::RtfInternalEncoder::Encode( m_sPicFilename );
sResult += _T("}");
sResult += L"}";
return sResult;
}
CString RtfPicture::RenderToOOX(RenderParameter oRenderParameter)
{
if( false == IsValid() )
return _T("");
if( false == IsValid() ) return L"";
OOXWriter * poOOXWriter = static_cast<OOXWriter*> (oRenderParameter.poWriter);
OOXRelsWriter * poRelsWriter = static_cast<OOXRelsWriter*> (oRenderParameter.poRels);
......@@ -127,23 +126,23 @@ CString RtfPicture::RenderToOOX(RenderParameter oRenderParameter)
CString sMime;
switch( eDataType )
{
case dt_png: sExtension = _T("png"); sMime = _T("image/png"); break;
case dt_jpg: sExtension = _T("jpg"); sMime = _T("image/jpg"); break;
case dt_wmf: sExtension = _T("wmf"); sMime = _T("image/x-wmf"); break;
case dt_emf: sExtension = _T("emf"); sMime = _T("image/x-emf"); break;
case dt_macpict:sExtension = _T("pct"); sMime = _T("image/x-pict"); break;
case dt_png: sExtension = L"png"; sMime = L"image/png"; break;
case dt_jpg: sExtension = L"jpg"; sMime = L"image/jpg"; break;
case dt_wmf: sExtension = L"wmf"; sMime = L"image/x-wmf"; break;
case dt_emf: sExtension = L"emf"; sMime = L"image/x-emf"; break;
case dt_macpict:sExtension = L"pct"; sMime = L"image/x-pict"; break;
}
CString sFilenameRels;
sFilenameRels.AppendFormat( _T("Image%d."), poRtfDocument->m_oIdGenerator.Generate_ImageIndex());
sFilenameRels.AppendFormat( L"Image%d.", poRtfDocument->m_oIdGenerator.Generate_ImageIndex());
sFilenameRels += sExtension;
CString sFilenameFull = poOOXWriter->m_sTargetFolder + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR +_T("media");
CString sFilenameFull = poOOXWriter->m_sTargetFolder + FILE_SEPARATOR_STR + L"word" + FILE_SEPARATOR_STR +L"media";
FileSystem::Directory::CreateDirectory( sFilenameFull );
sFilenameFull += FILE_SEPARATOR_STR + sFilenameRels;
sFilenameRels = _T("media/") + sFilenameRels;
sFilenameRels = L"media/" + sFilenameRels;
if( m_sPicFilename != sFilenameFull )
Utils::CopyDirOrFile( m_sPicFilename, sFilenameFull );
......@@ -152,7 +151,7 @@ CString RtfPicture::RenderToOOX(RenderParameter oRenderParameter)
poOOXWriter->m_oContentTypes.AddExtension( sMime, sExtension);
CString srId = poRelsWriter->AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"), sFilenameRels);
CString srId = poRelsWriter->AddRelationship( L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image", sFilenameRels);
return srId;
}
\ No newline at end of file
......@@ -79,7 +79,7 @@ public:
}
bool IsValid()
{
return _T("") != m_sPicFilename && dt_none != eDataType;
return !m_sPicFilename.IsEmpty() && dt_none != eDataType;
}
void SetDefaultRtf()
{
......@@ -105,9 +105,12 @@ public:
DEFAULT_PROPERTY( m_nCropT )
DEFAULT_PROPERTY( m_nCropR )
DEFAULT_PROPERTY( m_nCropB )
if( true == m_bIsCopy && _T("") != m_sPicFilename )
if( true == m_bIsCopy && !m_sPicFilename.IsEmpty() )
{
Utils::RemoveDirOrFile( m_sPicFilename );
m_sPicFilename = _T("");
}
m_sPicFilename = L"";
}
CString RenderToRtf(RenderParameter oRenderParameter);
CString RenderToOOX(RenderParameter oRenderParameter);
......
......@@ -34,30 +34,35 @@
class RtfShape: public IRenderableProperty
{
private:
bool m_bInsert;
bool m_bDelete;
public:
bool m_bIsOle;
bool m_bInGroup; //local anchor
//-----------------------------
typedef enum{ st_none, st_inline, st_anchor }AnchorTypeShape;
typedef enum
enum _AnchorTypeShape { st_none, st_inline, st_anchor };
enum _AnchorX
{
ax_none,
//ax_ignore, //shpbxignore Ignore \shpbxpage, \shpbxmargin, and \shpbxcolumn, in favor of the posrelh property. The ignored properties will be written for backward compatibility with older readers that do not understand \posrelh.
ax_page, //shpbxpage The shape is positioned relative to the page in the x (horizontal) direction.
ax_margin, //shpbxmargin The shape is positioned relative to the margin in the x (horizontal) direction.
ax_column //shpbxcolumn The shape is positioned relative to the column in the x (horizontal) direction.
}AnchorX;
typedef enum
};
enum _AnchorY
{
ay_none,
//ay_ignore, //shpbyignore Ignore \shpbypage, \shpbymargin, and \shpbxpara, in favor of the posrelh property. The ignored properties will be written for backward compatibility with older readers that do not understand the posrelh property.
ay_page, //shpbypage The shape is positioned relative to the page in the y (vertical) direction.
ay_margin, //shpbymargin The shape is positioned relative to the margin in the y (vertical) direction.
ay_Para //shpbypara The shape is positioned relative to the paragraph in the y (vertical) direction.
}AnchorY;
};
AnchorTypeShape m_eAnchorTypeShape;
_AnchorTypeShape m_eAnchorTypeShape;
CString m_sName;
CString m_sDescription;
......@@ -74,8 +79,8 @@ public:
int m_nZOrderRelative; //shpfblwtxtN Describes relative z-ordering:
int m_bLockAnchor; //shplockanchor Lock anchor for a shape.
AnchorX m_eXAnchor;
AnchorY m_eYAnchor;
_AnchorX m_eXAnchor;
_AnchorY m_eYAnchor;
//----------------ShapeProperty--------------------
//Position absolute
......@@ -185,6 +190,7 @@ public:
int m_bGtextFShrinkFit;
int m_bGtextFBestFit;
RtfCharProperty m_oCharProperty; // тут могут быть track changes ....
//pWrapPolygonVertices Points of the text wrap polygon.
std::vector< std::pair<int, int> > m_aWrapPoints;
......@@ -210,6 +216,7 @@ public:
SetDefault();
}
void SetDefault();
CString RenderToRtf (RenderParameter oRenderParameter);
CString RenderToOOX (RenderParameter oRenderParameter);
......
......@@ -59,33 +59,33 @@ public:
CString RenderToOOX(RenderParameter oRenderParameter)
{
CString sResult = _T("<w:tbl>");
CString sResult = L"<w:tbl>";
sResult += m_oProperty.RenderToOOX(oRenderParameter);
sResult += _T("<w:tblGrid>");
sResult += L"<w:tblGrid>";
for( int i = 0; i < (int)m_aTableGrid.size(); i++ )
{
sResult.AppendFormat(_T("<w:gridCol w:w=\"%d\"/>"), m_aTableGrid[i]);
sResult.AppendFormat(L"<w:gridCol w:w=\"%d\"/>", m_aTableGrid[i]);
}
sResult += _T("</w:tblGrid>");
sResult += L"</w:tblGrid>";
for(int i = 0; i < (int)m_aArray.size(); i++)
{
sResult += m_aArray[i]->RenderToOOX(oRenderParameter );
}
sResult += _T("</w:tbl>");
sResult += L"</w:tbl>";
return sResult;
}
CString RenderToRtf(RenderParameter oRenderParameter)
{
CString result;
result += _T("\n");
result += L"\n";
for(int i = 0 ; i < (int)m_aArray.size(); i++)
{
result += m_aArray[i]->RenderToRtf( oRenderParameter );
}
result += _T("\n");
result += L"\n";
return result;
}
......
......@@ -58,7 +58,7 @@ public:
result += m_aArray[i]->RenderToRtf( oRenderParameter );
if( i != m_aArray.size() - 1 )
result += _T("\\par");
result += L"\\par";
}
else
{
......@@ -71,28 +71,28 @@ public:
}
if( RENDER_TO_RTF_PARAM_NESTED != oRenderParameter.nType )
result += _T("\\cell");
result += L"\\cell";
else
result += _T("\\nestcell{\\nonesttables }"); //todo как бы вернуть
result += L"\\nestcell{\\nonesttables }"; //todo как бы вернуть
return result;
}
CString RenderToOOX(RenderParameter oRenderParameter)
{
CString sResult = _T("<w:tc>");
CString sResult = L"<w:tc>";
CString sProp = m_oProperty.RenderToOOX( oRenderParameter );
if( !sProp.IsEmpty() )
{
sResult += _T("<w:tcPr>");
sResult += sProp;
sResult += _T("</w:tcPr>");
sResult += L"<w:tcPr>";
sResult += sProp;
sResult += L"</w:tcPr>";
}
for( int i = 0; i < (int)m_aArray.size(); i++ )
{
sResult += m_aArray[i]->RenderToOOX( oRenderParameter);
}
sResult += _T("</w:tc>");
sResult += L"</w:tc>";
return sResult;
}
};
......
......@@ -48,7 +48,7 @@ public:
CString RenderToRtf(RenderParameter oRenderParameter)
{
CString sResult;
sResult += _T("\n");
sResult += L"\n";
if( RENDER_TO_RTF_PARAM_NESTED == oRenderParameter.nType )
{
......@@ -56,9 +56,9 @@ public:
{
sResult += m_aArray[i]->RenderToRtf( oRenderParameter );
}
sResult += _T("{\\*\\nesttableprops");
sResult += L"{\\*\\nesttableprops";
sResult += m_oProperty.RenderToRtf( oRenderParameter );
sResult += _T("\\nestrow}{\\nonesttables \\par}");
sResult += L"\\nestrow}{\\nonesttables \\par}";
}
else
{
......@@ -67,28 +67,29 @@ public:
{
sResult += m_aArray[i]->RenderToRtf( oRenderParameter );
}
sResult += _T("\\row");
sResult += L"\\row";
}
return sResult;
}
CString RenderToOOX(RenderParameter oRenderParameter)
{
XmlUtils::CXmlWriter oXmlWriter;
oXmlWriter.WriteNodeBegin(_T("w:tr"),0);
oXmlWriter.WriteNodeBegin(L"w:tr",0);
RenderParameter oNewParam = oRenderParameter;
oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
CString sRowProp = m_oProperty.RenderToOOX(oNewParam);
if( false == sRowProp.IsEmpty() )
{
CString sXml = _T("<w:trPr>") + sRowProp + _T("</w:trPr>");
CString sXml = L"<w:trPr>" + sRowProp + L"</w:trPr>";
oXmlWriter.WriteString(sXml);
}
for(int i = 0 ; i < (int)m_aArray.size(); i++)
{
oXmlWriter.WriteString( m_aArray[i]->RenderToOOX(oNewParam) );
}
oXmlWriter.WriteNodeEnd(_T("w:tr"));
oXmlWriter.WriteNodeEnd(L"w:tr");
return oXmlWriter.GetXmlString();
}
......
......@@ -31,6 +31,8 @@
*/
#pragma once
#include "RtfDefine.h"
#include "../../../Common/FileWriter.h"
#ifdef _ASC_USE_UNICODE_CONVERTER_
......@@ -58,6 +60,8 @@
#define CP_SYMBOL 42
#endif
#define GETBITS(from, numL, numH) ((from & (((1 << (numH - numL + 1)) - 1) << numL)) >> numL)
namespace Strings
{
static int ToDigit(TCHAR c)
......@@ -74,23 +78,23 @@ namespace Strings
static int ToColor(const CString& strValue)
{
// variables
int blue = 0;
int green = 0;
int red = 0;
int blue = 0;
int green = 0;
int red = 0;
CString color = strValue; color = color.Trim();
if (color.Find(_T("0x"))!=-1)
color.Delete(0,2);
if (color.Find(_T("#"))!=-1)
color.Delete(0,1);
if (color.Find (L"0x") != -1)
color.Delete (0,2);
if (color.Find (L"#") != -1)
color.Delete (0,1);
while (color.GetLength() < 6)
color = _T("0") + color;
color = L"0" + color;
red = 16*ToDigit(color[0]) + ToDigit(color[1]);
green = 16*ToDigit(color[2]) + ToDigit(color[3]);
blue = 16*ToDigit(color[4]) + ToDigit(color[5]);
red = 16 * ToDigit(color[0]) + ToDigit(color[1]);
green = 16 * ToDigit(color[2]) + ToDigit(color[3]);
blue = 16 * ToDigit(color[4]) + ToDigit(color[5]);
return RGB(red, green, blue);
}
......@@ -98,18 +102,18 @@ namespace Strings
{
CString color = strValue; color = color.Trim();
if (color.Find(_T("0x"))!=-1)
color.Delete(0,2);
if (color.Find(_T("#"))!=-1)
color.Delete(0,1);
if (color.Find (L"0x")!=-1)
color.Delete (0,2);
if (color.Find (L"#")!=-1)
color.Delete (0,1);
while (color.GetLength() < 8)
color = _T("0") + color;
color = L"0" + color;
nA = 16*ToDigit(color[0]) + ToDigit(color[1]);
nR = 16*ToDigit(color[2]) + ToDigit(color[3]);
nG = 16*ToDigit(color[4]) + ToDigit(color[5]);
nB = 16*ToDigit(color[6]) + ToDigit(color[7]);
nA = 16 * ToDigit(color[0]) + ToDigit(color[1]);
nR = 16 * ToDigit(color[2]) + ToDigit(color[3]);
nG = 16 * ToDigit(color[4]) + ToDigit(color[5]);
nB = 16 * ToDigit(color[6]) + ToDigit(color[7]);
}
static bool ToBoolean(const CString& strValue)
{
......@@ -117,7 +121,7 @@ namespace Strings
s.MakeLower();
return (s == _T("true"));
return (s == L"true");
}
static int ToInteger(const CString& strValue)
{
......@@ -127,7 +131,7 @@ namespace Strings
{
double d = 0;
_stscanf(strValue, _T(" %lf"), &d);
_stscanf(strValue, L" %lf", &d);
return d;
}
......@@ -136,7 +140,7 @@ namespace Strings
{
CString str;
str.Format(_T("%d"), Value);
str.Format(L"%d", Value);
return str;
}
......@@ -144,16 +148,16 @@ namespace Strings
{
CString str;
str.Format(_T("%lf"), Value);
str.Format(L"%lf", Value);
return str;
}
static CString FromBoolean(bool Value)
{
if (Value)
return _T("true");
return L"true";
return _T("false");
return L"false";
}
}
......@@ -164,13 +168,13 @@ public:
static CString ToString(int i)
{
CString result;
result.Format( _T("%i"), i);
result.Format( L"%i", i);
return result;
}
static CString ToStringHex( int i, int nLen )
{
CString result;
result.Format( _T("%x"), i);
result.Format( L"%x", i);
for( int i = result.GetLength(); i < nLen; i++ )
result.Insert( 0 , '0' );
result.MakeUpper();
......@@ -180,16 +184,16 @@ public:
{
int nResult;
if(16 == base)
_stscanf(str, _T("%x"), &nResult);
_stscanf(str, L"%x", &nResult);
else if(8 == base)
_stscanf(str, _T("%o"), &nResult);
_stscanf(str, L"%o", &nResult);
else
_stscanf(str, _T("%d"), &nResult);
_stscanf(str, L"%d", &nResult);
return nResult;
}
};
static const int aCodePages[][2] = {
//charset codepage
static const int aCodePages[][2] =
{//charset codepage
0, 1252, //ANSI
1, 0,//Default
2, 42,//Symbol
......@@ -372,12 +376,38 @@ class RtfUtility
{
public:
//--------------------------------------------------------------------------------------------
static std::wstring convertDateTime (int dt)
{
if ( dt == PROP_DEF) return L"";
short Min = GETBITS(dt, 0 , 5);
short Hour = GETBITS(dt, 6 , 10);
short Day = GETBITS(dt, 11, 15);
short Month = GETBITS(dt, 16, 19);
int Year = GETBITS(dt, 20, 28) + 1900;
//to 1899-12-31T05:37:46.66569
std::wstring date_str = std::to_wstring(Year)
+ L"-"
+ (Month < 10 ? L"0": L"") + std::to_wstring(Month)
+ L"-"
+ (Day < 10 ? L"0": L"") + std::to_wstring(Day)
+ L"T"
+ (Hour < 10 ? L"0": L"") + std::to_wstring(Hour)
+ L":"
+ (Min < 10 ? L"0": L"") + std::to_wstring(Min)
+ L":00Z";
return date_str;
}
//------------------------------------------------------------------------------------------------------
class RtfInternalEncoder
{
public:
static CString Encode( CString sFilename )
{
return _T("{\\*filename ") + sFilename + _T("\\*end}");
return L"{\\*filename " + sFilename + L"\\*end}";
}
static void Decode( CString& sText, NFileWriter::CBufferedFileWriter& oFileWriter ) //сразу записывает в файл
{
......@@ -392,9 +422,9 @@ public:
#endif
int nStart = 0;
int nFindRes = -1;
CString sFindString = _T("{\\*filename ");
CString sFindString = L"{\\*filename ";
int nFindStringLen = sFindString.GetLength();
CString sFindEnd = _T("\\*end}");
CString sFindEnd = L"\\*end}";
int nFindEndLen = sFindEnd.GetLength();
while( -1 != (nFindRes = sText.Find( sFindString, nStart )) )
{
......@@ -448,13 +478,13 @@ public:
static float String2Percent( CString sValue )
{
int nPosition;
if( (nPosition = sValue.Find( _T("f") )) != -1 )
if( (nPosition = sValue.Find( L"f" )) != -1 )
{
sValue = sValue.Left( nPosition );
int dResult = Strings::ToInteger( sValue );
return (float)(1.0 * dResult / 65536);
}
else if( (nPosition = sValue.Find( _T("%") )) != -1 )
else if( (nPosition = sValue.Find( L"%" )) != -1 )
{
sValue = sValue.Left( nPosition );
return (float)Strings::ToDouble( sValue ) / 100;
......@@ -465,37 +495,37 @@ public:
static int String2Twips( CString sValue )
{
int nPosition;
if( (nPosition = sValue.Find( _T("pt") )) != -1 )
if( (nPosition = sValue.Find( L"pt" )) != -1 )
{
sValue = sValue.Left( nPosition );
float dResult = (float)Strings::ToDouble( sValue );
return pt2Twip( dResult );
}
else if( (nPosition = sValue.Find( _T("in") )) != -1 )
else if( (nPosition = sValue.Find( L"in" )) != -1 )
{
sValue = sValue.Left( nPosition );
float dResult = (float)Strings::ToDouble( sValue );
return in2Twip(dResult);
}
else if( (nPosition = sValue.Find( _T("cm") )) != -1 )
else if( (nPosition = sValue.Find( L"cm" )) != -1 )
{
sValue = sValue.Left( nPosition );
float dResult = (float)Strings::ToDouble( sValue );
return cm2Twip(dResult);
}
else if( (nPosition = sValue.Find( _T("mm") )) != -1 )
else if( (nPosition = sValue.Find( L"mm" )) != -1 )
{
sValue = sValue.Left( nPosition );
float dResult = (float)Strings::ToDouble( sValue );
return mm2Twip(dResult);
}
else if( (nPosition = sValue.Find( _T("pc") )) != -1 )
else if( (nPosition = sValue.Find( L"pc" )) != -1 )
{
sValue = sValue.Left( nPosition );
float dResult = (float)Strings::ToDouble( sValue );
return pc2Twip(dResult);
}
else if( (nPosition = sValue.Find( _T("pi") )) != -1 )
else if( (nPosition = sValue.Find( L"pi" )) != -1 )
{
sValue = sValue.Left( nPosition );
float dResult = (float)Strings::ToDouble( sValue );
......@@ -604,7 +634,7 @@ public:
for( int i = 0; i < sText.GetLength(); i++ )
{
BYTE byteChar = sText[i];
sHexText.AppendFormat( _T("%x"), byteChar );
sHexText.AppendFormat( L"%x", byteChar );
}
return sHexText;
}
......@@ -616,7 +646,7 @@ public:
int byte1 = ToByte( sHexText[i] );
int byte2 = ToByte(sHexText[i + 1] );
int cChar = (byte1 << 4) + byte2;
sText.AppendFormat( _T("%c"), cChar );
sText.AppendFormat( L"%c", cChar );
}
return sText;
}
......@@ -639,7 +669,7 @@ public:
//sResult.Trim();
//удаляем дублирующие пробелы
while( sResult.Replace( _T(" "), _T(" ") ) > 0 )
while( sResult.Replace( L" ", L" " ) > 0 )
;
return sResult;
}
......
......@@ -47,12 +47,13 @@
#include "../../../../ASCOfficeDocxFile2/BinReader/DefaultThemeWriter.h"
OOXWriter::OOXWriter( RtfDocument& oDocument, std::wstring sPath ) :
m_oDocument(oDocument),
m_sTargetFolder(sPath.c_str()),
m_oRels( _T(""), oDocument ),
m_oDocRels( _T("document.xml"), oDocument )
m_oDocument ( oDocument ),
m_sTargetFolder ( sPath.c_str() ),
m_oRels ( L"", oDocument ),
m_nCurTrackChangesId( 0),
m_oDocRels ( L"document.xml", oDocument )
{
nCurFitWidth = PROP_DEF;
m_nCurFitWidth = PROP_DEF;
m_poFootnoteWriter = NULL;
m_poEndnoteWriter = NULL;
......@@ -85,15 +86,15 @@ OOXWriter::OOXWriter( RtfDocument& oDocument, std::wstring sPath ) :
}
OOXWriter::~OOXWriter()
{
delete ((OOXDocumentWriter*)m_poDocumentWriter);
delete ((OOXFootnoteWriter*)m_poFootnoteWriter);
delete ((OOXEndnoteWriter*)m_poEndnoteWriter);
delete ((OOXFontTableWriter*)m_poFontTableWriter);
delete ((OOXNumberingWriter*)m_poNumberingWriter);
delete ((OOXSettingsWriter*)m_poSettingsWriter);
delete ((OOXStylesWriter*)m_poStylesWriter);
delete ((OOX::CApp*)m_poDocPropsApp);
delete ((OOX::CCore*)m_poDocPropsCore);
delete ((OOXDocumentWriter*) m_poDocumentWriter);
delete ((OOXFootnoteWriter*) m_poFootnoteWriter);
delete ((OOXEndnoteWriter*) m_poEndnoteWriter);
delete ((OOXFontTableWriter*) m_poFontTableWriter);
delete ((OOXNumberingWriter*) m_poNumberingWriter);
delete ((OOXSettingsWriter*) m_poSettingsWriter);
delete ((OOXStylesWriter*) m_poStylesWriter);
delete ((OOX::CApp*) m_poDocPropsApp);
delete ((OOX::CCore*) m_poDocPropsCore);
}
bool OOXWriter::Save()
{
......@@ -117,47 +118,47 @@ bool OOXWriter::SaveByItemEnd()
{
OOX::CContentTypes oContentTypes;
OOX::CPath pathWord = m_sTargetFolder + FILE_SEPARATOR_STR + _T("word");
OOX::CPath pathWord = m_sTargetFolder + FILE_SEPARATOR_STR + L"word";
FileSystem::Directory::CreateDirectory(pathWord.GetPath());
OOX::CPath pathTheme = pathWord + FILE_SEPARATOR_STR + _T("theme");
OOX::CPath pathTheme = pathWord + FILE_SEPARATOR_STR + L"theme";
FileSystem::Directory::CreateDirectory(pathTheme.GetPath()) ;
Writers::DefaultThemeWriter themeWriter;
themeWriter.Write(pathTheme.GetPath() + FILE_SEPARATOR_STR + _T("theme1.xml"));
m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"), _T("theme/theme1.xml") );
m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.theme+xml"), _T("/word/theme/theme1.xml") );
themeWriter.Write(pathTheme.GetPath() + FILE_SEPARATOR_STR + L"theme1.xml");
m_oDocRels.AddRelationship( L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme", L"theme/theme1.xml" );
m_oContentTypes.AddContent( L"application/vnd.openxmlformats-officedocument.theme+xml", L"/word/theme/theme1.xml" );
//-----------------------------------------------------------------------------------------------------
((OOXDocumentWriter*) m_poDocumentWriter)->SaveByItemEnd();
((OOXFootnoteWriter*) m_poFootnoteWriter)->Save(pathWord.GetPath());
((OOXEndnoteWriter*) m_poEndnoteWriter)->Save(pathWord.GetPath());
((OOXNumberingWriter*) m_poNumberingWriter)->Save(m_sTargetFolder);
((OOXStylesWriter*) m_poStylesWriter)->Save(m_sTargetFolder);
((OOXFontTableWriter*) m_poFontTableWriter)->Save(m_sTargetFolder);
((OOXFootnoteWriter*) m_poFootnoteWriter)->Save (pathWord.GetPath());
((OOXEndnoteWriter*) m_poEndnoteWriter)->Save (pathWord.GetPath());
((OOXNumberingWriter*) m_poNumberingWriter)->Save (m_sTargetFolder);
((OOXStylesWriter*) m_poStylesWriter)->Save (m_sTargetFolder);
((OOXFontTableWriter*) m_poFontTableWriter)->Save (m_sTargetFolder);
((OOXSettingsWriter*)m_poSettingsWriter)->Save(m_sTargetFolder); //setting в последнюю очередь
((OOXSettingsWriter*) m_poSettingsWriter)->Save (m_sTargetFolder); //setting в последнюю очередь
//-------------------------------------------------------------------------------------
OOX::CPath pathDocProps = m_sTargetFolder + FILE_SEPARATOR_STR + _T("docProps");
OOX::CPath pathDocProps = m_sTargetFolder + FILE_SEPARATOR_STR + L"docProps";
FileSystem::Directory::CreateDirectory(pathDocProps.GetPath());
if (m_poDocPropsApp)
{
((OOX::CApp*)m_poDocPropsApp)->SetApplication(_T("OnlyOffice"));
((OOX::CApp*)m_poDocPropsApp)->SetAppVersion(_T("3.0000"));
((OOX::CApp*)m_poDocPropsApp)->SetApplication ( L"OnlyOffice" );
((OOX::CApp*)m_poDocPropsApp)->SetAppVersion ( L"3.0000" );
((OOX::CApp*)m_poDocPropsApp)->write(pathDocProps + FILE_SEPARATOR_STR + _T("app.xml"), pathDocProps.GetDirectory(), oContentTypes);
((OOX::CApp*)m_poDocPropsApp)->write(pathDocProps + FILE_SEPARATOR_STR + L"app.xml", pathDocProps.GetDirectory(), oContentTypes);
m_oRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties"), _T("docProps/app.xml") );
m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.extended-properties+xml"), _T("/docProps/app.xml") );
m_oRels.AddRelationship( L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties", L"docProps/app.xml" );
m_oContentTypes.AddContent( L"application/vnd.openxmlformats-officedocument.extended-properties+xml", L"/docProps/app.xml" );
}
if (m_poDocPropsCore)
{
((OOX::CCore*)m_poDocPropsCore)->write(pathDocProps + FILE_SEPARATOR_STR + _T("core.xml"), pathDocProps.GetDirectory(), oContentTypes);
m_oRels.AddRelationship( _T("http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties"), _T("docProps/core.xml") );
m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-package.core-properties+xml"), _T("/docProps/core.xml") );
m_oRels.AddRelationship( L"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties", L"docProps/core.xml" );
m_oContentTypes.AddContent( L"application/vnd.openxmlformats-package.core-properties+xml", L"/docProps/core.xml" );
}
//-----------------------------------------------------------------------------------------------------
......
......@@ -40,11 +40,12 @@ class OOXWriter
{
public:
CString nCurFitId;
int nCurFitWidth;
CString m_nCurFitId;
int m_nCurFitWidth;
int m_nCurTrackChangesId;
OOXRelsWriter m_oDocRels;
OOXRelsWriter m_oRels;
OOXRelsWriter m_oDocRels;
OOXRelsWriter m_oRels;
std::vector<OOXRelsWriterPtr> m_oCustomRelsWriter;
OOXContentTypesWriter m_oContentTypes;
......@@ -66,8 +67,8 @@ public:
std::map<CString, int> m_aBookmarksId;
OOXWriter( RtfDocument& oDocument, std::wstring sPath );
~OOXWriter();
OOXWriter ( RtfDocument& oDocument, std::wstring sPath );
~OOXWriter ();
bool Save();
bool SaveByItemStart();
......
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