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

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

parent 33c1e271
...@@ -698,6 +698,21 @@ public: ...@@ -698,6 +698,21 @@ public:
oDocument.m_oProperty.m_nAnsiCodePage = nKeepGlobalCodepage; oDocument.m_oProperty.m_nAnsiCodePage = nKeepGlobalCodepage;
} }
CString RemoveLastUnchar(CString str)
{
int i = 1;
while(true)
{
if (i > str.GetLength())
break;
if (str.GetAt(str.GetLength() - i) <= 0x20)
str.Delete(str.GetLength() - i , 1);
else
break;
}
return str;
}
void ExecuteText(RtfDocument& oDocument, RtfReader& oReader, CString sText) void ExecuteText(RtfDocument& oDocument, RtfReader& oReader, CString sText)
{ {
if( is_panose == m_eInternalState ) if( is_panose == m_eInternalState )
...@@ -709,14 +724,20 @@ public: ...@@ -709,14 +724,20 @@ public:
if( sText.Find(';') != -1 ) if( sText.Find(';') != -1 )
{ {
sText.Remove(';'); sText.Remove(';');
m_oFont.m_sName += sText; if( sText.Find('&') !=0 )//todooo выясниснить что значит &;
{
//sText.Remove('&'); //
m_oFont.m_sName += RemoveLastUnchar(sText);
}
//todooo при добавлении могут быть повторы - убрать нннадо - goldwingSetting.rtf //todooo при добавлении могут быть повторы - убрать нннадо - goldwingSetting.rtf
oDocument.m_oFontTable.DirectAddItem( m_oFont ); oDocument.m_oFontTable.DirectAddItem( m_oFont );
m_oFont.SetDefaultRtf(); m_oFont.SetDefaultRtf();
} }
else else
{ {
m_oFont.m_sName += sText; m_oFont.m_sName += sText.Trim();
} }
} }
} }
......
...@@ -111,7 +111,11 @@ CString RtfFootnote::RenderToOOX(RenderParameter oRenderParameter) ...@@ -111,7 +111,11 @@ CString RtfFootnote::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append( _T("<w:r>") ); sResult.Append( _T("<w:r>") );
CString srPr = m_oCharProp.RenderToOOX( oRenderParameter ); CString srPr = m_oCharProp.RenderToOOX( oRenderParameter );
if( false == srPr.IsEmpty() ) if( false == srPr.IsEmpty() )
sResult.AppendFormat( _T("<w:rPr>%ls</w:rPr>"), srPr.GetBuffer() ); {
sResult.Append( _T("<w:rPr>") );
sResult += srPr;
sResult.Append( _T("/w:rPr>") );
}
sResult.AppendFormat( _T("<w:endnoteReference w:id=\"%d\"/>"), nID ); sResult.AppendFormat( _T("<w:endnoteReference w:id=\"%d\"/>"), nID );
sResult.Append( _T("</w:r>") ); sResult.Append( _T("</w:r>") );
} }
...@@ -126,7 +130,11 @@ CString RtfFootnote::RenderToOOX(RenderParameter oRenderParameter) ...@@ -126,7 +130,11 @@ CString RtfFootnote::RenderToOOX(RenderParameter oRenderParameter)
sResult.Append( _T("<w:r>") ); sResult.Append( _T("<w:r>") );
CString srPr = m_oCharProp.RenderToOOX( oRenderParameter ); CString srPr = m_oCharProp.RenderToOOX( oRenderParameter );
if( false == srPr.IsEmpty() ) if( false == srPr.IsEmpty() )
sResult.AppendFormat( _T("<w:rPr>%ls</w:rPr>"), srPr.GetBuffer() ); {
sResult.Append( _T("<w:rPr>") );
sResult += srPr;
sResult.Append( _T("/w:rPr>") );
}
sResult.AppendFormat( _T("<w:footnoteReference w:id=\"%d\"/>"), nID ); sResult.AppendFormat( _T("<w:footnoteReference w:id=\"%d\"/>"), nID );
sResult.Append( _T("</w:r>") ); sResult.Append( _T("</w:r>") );
} }
......
...@@ -23,8 +23,10 @@ CString RtfFontTable::RenderToRtf(RenderParameter oRenderParameter) ...@@ -23,8 +23,10 @@ CString RtfFontTable::RenderToRtf(RenderParameter oRenderParameter)
RenderParameter oNewParameter = oRenderParameter; RenderParameter oNewParameter = oRenderParameter;
oNewParameter.nType = RENDER_TO_RTF_PARAM_FONT_TBL; oNewParameter.nType = RENDER_TO_RTF_PARAM_FONT_TBL;
for( int i = 0; i < (int)m_aArray.size(); i++ ) for( int i = 0; i < (int)m_aArray.size(); i++ )
sResult.AppendFormat(_T("%ls"),m_aArray[i].RenderToRtf( oNewParameter ).GetBuffer()); {
sResult.Append(_T("}")); sResult += m_aArray[i].RenderToRtf( oNewParameter );
}
sResult += _T("}");
} }
return sResult; return sResult;
} }
......
...@@ -115,8 +115,7 @@ public: ...@@ -115,8 +115,7 @@ public:
oNewParameter.nType = RENDER_TO_RTF_PARAM_COLOR_TBL; oNewParameter.nType = RENDER_TO_RTF_PARAM_COLOR_TBL;
for( int i = 0; i < (int)m_aArray.size(); i++ ) for( int i = 0; i < (int)m_aArray.size(); i++ )
{ {
CString str = m_aArray[i].RenderToRtf( oNewParameter ); sResult += m_aArray[i].RenderToRtf( oNewParameter );
sResult.AppendFormat(_T("%ls"), str.GetBuffer());
} }
sResult.Append(_T("}")); sResult.Append(_T("}"));
} }
...@@ -352,8 +351,9 @@ public: ...@@ -352,8 +351,9 @@ public:
} }
for( int i = 0; i < (int)m_aArray.size(); i++) for( int i = 0; i < (int)m_aArray.size(); i++)
{ {
CString str = m_aArray[i].RenderToRtf( oRenderParameter ); sResult.Append(_T("{"));
sResult.AppendFormat(_T("{%ls}"), str.GetBuffer() ); sResult.Append(m_aArray[i].RenderToRtf( oRenderParameter ));
sResult.Append(_T("}"));
} }
sResult.Append(_T("}")); sResult.Append(_T("}"));
} }
...@@ -382,8 +382,9 @@ public: ...@@ -382,8 +382,9 @@ public:
sResult.Append(_T("{\\*\\listoverridetable")); sResult.Append(_T("{\\*\\listoverridetable"));
for( int i = 0; i < (int)m_aArray.size(); i++) for( int i = 0; i < (int)m_aArray.size(); i++)
{ {
CString str = m_aArray[i].RenderToRtf( oRenderParameter ); sResult.Append(_T("{"));
sResult.AppendFormat(_T("{%ls}"), str.GetBuffer() ); sResult.Append(m_aArray[i].RenderToRtf( oRenderParameter ));
sResult.Append(_T("}"));
} }
sResult.Append(_T("}")); sResult.Append(_T("}"));
} }
......
...@@ -9,7 +9,8 @@ ...@@ -9,7 +9,8 @@
CString RtfFont::RenderToRtf(RenderParameter oRenderParameter) CString RtfFont::RenderToRtf(RenderParameter oRenderParameter)
{ {
//ATLASSERT( IsValid() ); if ( IsValid() == false) return L"";
CString sResult; CString sResult;
if( RENDER_TO_RTF_PARAM_FONT_TBL == oRenderParameter.nType ) if( RENDER_TO_RTF_PARAM_FONT_TBL == oRenderParameter.nType )
{ {
...@@ -60,10 +61,10 @@ CString RtfFont::RenderToRtf(RenderParameter oRenderParameter) ...@@ -60,10 +61,10 @@ CString RtfFont::RenderToRtf(RenderParameter oRenderParameter)
CString RtfFont::RenderToOOX(RenderParameter oRenderParameter) CString RtfFont::RenderToOOX(RenderParameter oRenderParameter)
{ {
//ATLASSERT( IsValid() ); if( IsValid() == false) return L"";
CString sResult; CString sResult;
if( IsValid() )
{
RtfDocument* poRtfDocument = static_cast<RtfDocument*>(oRenderParameter.poDocument); RtfDocument* poRtfDocument = static_cast<RtfDocument*>(oRenderParameter.poDocument);
CString sFontName = m_sName; CString sFontName = m_sName;
...@@ -71,7 +72,7 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter) ...@@ -71,7 +72,7 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter)
{ {
sFontName = m_sAltName; sFontName = m_sAltName;
} }
if( _T("") == sFontName ) if( sFontName.IsEmpty() )
{ {
if( PROP_DEF != poRtfDocument->m_oProperty.m_nDeffFont ) if( PROP_DEF != poRtfDocument->m_oProperty.m_nDeffFont )
{ {
...@@ -79,7 +80,7 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter) ...@@ -79,7 +80,7 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter)
poRtfDocument->m_oFontTable.GetFont( poRtfDocument->m_oProperty.m_nDeffFont, oDefFont ); poRtfDocument->m_oFontTable.GetFont( poRtfDocument->m_oProperty.m_nDeffFont, oDefFont );
sFontName = oDefFont.m_sName; sFontName = oDefFont.m_sName;
} }
if( _T("") == sFontName ) if( sFontName.IsEmpty())
sFontName = _T("Arial"); sFontName = _T("Arial");
} }
if( RENDER_TO_OOX_PARAM_MINOR_FONT == oRenderParameter.nType ) if( RENDER_TO_OOX_PARAM_MINOR_FONT == oRenderParameter.nType )
...@@ -92,8 +93,14 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter) ...@@ -92,8 +93,14 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter)
case ft_fdbminor: sTag = _T("ea");break; case ft_fdbminor: sTag = _T("ea");break;
case ft_fbiminor: sTag = _T("cs");break; case ft_fbiminor: sTag = _T("cs");break;
} }
if( _T("") != sTag ) if( !sTag.IsEmpty() )
sResult.AppendFormat(_T("<%ls typeface=\"%ls\"/>"), sTag.GetBuffer(), Utils::PrepareToXML( sFontName ).GetBuffer() ); {
sResult.Append(_T("<") ) ;
sResult += sTag;
sResult.Append(_T(" typeface=\""));
sResult += Utils::PrepareToXML( sFontName );
sResult.Append(_T("\"/>"));
}
} }
else if( RENDER_TO_OOX_PARAM_MAJOR_FONT == oRenderParameter.nType ) else if( RENDER_TO_OOX_PARAM_MAJOR_FONT == oRenderParameter.nType )
{ {
...@@ -110,11 +117,22 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter) ...@@ -110,11 +117,22 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter)
} }
else if( RENDER_TO_OOX_PARAM_FONTTABLE == oRenderParameter.nType ) else if( RENDER_TO_OOX_PARAM_FONTTABLE == oRenderParameter.nType )
{ {
sResult.AppendFormat(_T("<w:font w:name=\"%ls\">"), Utils::PrepareToXML( sFontName ).GetBuffer() ); sResult.Append(_T("<w:font w:name=\"") );
if( _T("") != m_sAltName ) sResult += Utils::PrepareToXML( sFontName );
sResult.AppendFormat(_T("<w:altName w:val=\"%ls\" />"), Utils::PrepareToXML( m_sAltName ).GetBuffer()); sResult.Append(_T("\">"));
if( _T("") != m_sPanose )
sResult.AppendFormat(_T("<w:panose1 w:val=\"%ls\" />"),m_sPanose.GetBuffer()); if( !m_sAltName.IsEmpty() )
{
sResult.Append(_T("<w:altName w:val=\""));
sResult += Utils::PrepareToXML( m_sAltName );
sResult.Append(_T("\" />"));
}
if( !m_sPanose.IsEmpty() )
{
sResult.Append(_T("<w:panose1 w:val=\""));
sResult += m_sPanose;
sResult.Append(_T("\" />"));
}
CString sFamily = _T(""); CString sFamily = _T("");
switch( m_eFontFamily ) switch( m_eFontFamily )
...@@ -128,10 +146,18 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter) ...@@ -128,10 +146,18 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter)
case ff_ftech:sFamily = _T("auto");break; case ff_ftech:sFamily = _T("auto");break;
case ff_fbidi:sFamily = _T("auto");break; case ff_fbidi:sFamily = _T("auto");break;
} }
if( _T("") != sFamily ) if( !sFamily.IsEmpty() )
sResult.AppendFormat(_T("<w:family w:val=\"%ls\" />"),sFamily.GetBuffer()); {
sResult.Append(_T("<w:family w:val=\""));
sResult += sFamily;
sResult.Append(_T("\" />"));
}
if( PROP_DEF != m_nCharset ) if( PROP_DEF != m_nCharset )
sResult.AppendFormat(_T("<w:charset w:val=\"%ls\" />"), Convert::ToStringHex( m_nCharset, 2 ).GetBuffer()); {
sResult.Append(_T("<w:charset w:val=\""));
sResult += Convert::ToStringHex( m_nCharset, 2 );
sResult.Append(_T("\" />"));
}
if( PROP_DEF != m_nPitch ) if( PROP_DEF != m_nPitch )
{ {
...@@ -142,7 +168,9 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter) ...@@ -142,7 +168,9 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter)
case 1: sPitch = _T("fixed");break; case 1: sPitch = _T("fixed");break;
case 2: sPitch = _T("variable");break; case 2: sPitch = _T("variable");break;
} }
sResult.AppendFormat(_T("<w:pitch w:val=\"%ls\" />"),sPitch.GetBuffer()); sResult.Append(_T("<w:pitch w:val=\"") );
sResult += sPitch;
sResult.Append(_T("\" />"));
} }
//важно //важно
...@@ -176,11 +204,20 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter) ...@@ -176,11 +204,20 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter)
}break; }break;
//?? нужно ли описывать default??? todooo //?? нужно ли описывать default??? todooo
} }
sResult.AppendFormat(_T("<w:rFonts w:ascii=\"%ls\" w:eastAsia=\"%ls\" w:hAnsi=\"%ls\" w:cs=\"%ls\"%ls/>"), sResult.Append(_T("<w:rFonts w:ascii=\"") );
sFontName.GetBuffer(), sFontName.GetBuffer(), sFontName.GetBuffer(), sFontName.GetBuffer(), sHint.GetBuffer()); sResult += sFontName;
} sResult.Append(_T("\" w:eastAsia=\"") );
sResult += sFontName;
sResult.Append(_T("\" w:hAnsi=\"") );
sResult += sFontName;
sResult.Append(_T("\" w:cs=\"") );
sResult += sFontName;
sResult.Append(_T("\"") );
sResult += sHint;
sResult.Append(_T("/>") );
} }
} }
return sResult; return sResult;
} }
...@@ -1928,21 +1965,29 @@ CString RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -1928,21 +1965,29 @@ CString RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter)
if( true == m_oBorderBox.IsValid() ) if( true == m_oBorderBox.IsValid() )
{ {
CString sBorderContent = m_oBorderBox.RenderToOOX(oNewParam); CString sBorderContent = m_oBorderBox.RenderToOOX(oNewParam);
sBorder.AppendFormat(_T("<w:left %ls />"), sBorderContent.GetBuffer() ); sBorder.Append(_T("<w:left ")); sBorder += sBorderContent; sBorder.Append(_T(" />"));
sBorder.AppendFormat(_T("<w:top %ls />"), sBorderContent.GetBuffer() ); sBorder.Append(_T("<w:top ")); sBorder += sBorderContent; sBorder.Append(_T(" />"));
sBorder.AppendFormat(_T("<w:right %ls />"), sBorderContent.GetBuffer() ); sBorder.Append(_T("<w:right ")); sBorder += sBorderContent; sBorder.Append(_T(" />"));
sBorder.AppendFormat(_T("<w:bottom %ls />"), sBorderContent.GetBuffer() ); sBorder.Append(_T("<w:bottom ")); sBorder += sBorderContent; sBorder.Append(_T(" />"));
} }
else else
{ {
if( true == m_oBorderTop.IsValid() ) if( true == m_oBorderTop.IsValid() )
sBorder.AppendFormat(_T("<w:top %ls />"), m_oBorderTop.RenderToOOX(oNewParam).GetBuffer() ); {
sBorder.Append(_T("<w:top ")); sBorder += m_oBorderTop.RenderToOOX(oNewParam); sBorder.Append(_T(" />"));
}
if( true == m_oBorderLeft.IsValid() ) if( true == m_oBorderLeft.IsValid() )
sBorder.AppendFormat(_T("<w:left %ls />"), m_oBorderLeft.RenderToOOX(oNewParam).GetBuffer() ); {
sBorder.Append(_T("<w:left ")); sBorder += m_oBorderLeft.RenderToOOX(oNewParam); sBorder.Append(_T(" />"));
}
if( true == m_oBorderBottom.IsValid() ) if( true == m_oBorderBottom.IsValid() )
sBorder.AppendFormat( _T("<w:bottom %ls />"),m_oBorderBottom.RenderToOOX(oNewParam).GetBuffer() ); {
sBorder.Append(_T("<w:bottom ")); sBorder += m_oBorderBottom.RenderToOOX(oNewParam); sBorder.Append(_T(" />"));
}
if( true == m_oBorderRight.IsValid() ) if( true == m_oBorderRight.IsValid() )
sBorder.AppendFormat(_T("<w:right %ls />"), m_oBorderRight.RenderToOOX(oNewParam).GetBuffer() ); {
sBorder.Append(_T("<w:right ")); sBorder += m_oBorderRight.RenderToOOX(oNewParam); sBorder.Append(_T(" />"));
}
} }
if( true == m_oBorderBar.IsValid() ) if( true == m_oBorderBar.IsValid() )
...@@ -2650,47 +2695,47 @@ CString RtfInformation::RenderToRtf(RenderParameter oRenderParameter) ...@@ -2650,47 +2695,47 @@ CString RtfInformation::RenderToRtf(RenderParameter oRenderParameter)
CString sResult; CString sResult;
if( _T("") != m_sTitle ) if( _T("") != m_sTitle )
sResult.AppendFormat( _T("{\\title %ls}"), RtfChar::renderRtfText( m_sTitle, oRenderParameter.poDocument ).GetBuffer() ); sResult.Append( _T("{\\title ")); sResult += RtfChar::renderRtfText( m_sTitle, oRenderParameter.poDocument ); sResult.Append( _T("}"));
if( _T("") != m_sSubject ) if( _T("") != m_sSubject )
sResult.AppendFormat( _T("{\\subject %ls}"), RtfChar::renderRtfText( m_sSubject, oRenderParameter.poDocument ).GetBuffer() ); sResult.Append( _T("{\\subject ")); sResult += RtfChar::renderRtfText( m_sSubject, oRenderParameter.poDocument ); sResult.Append( _T("}"));
if( _T("") != m_sAuthor ) if( _T("") != m_sAuthor )
sResult.AppendFormat( _T("{\\author %ls}"), RtfChar::renderRtfText( m_sAuthor, oRenderParameter.poDocument ).GetBuffer() ); sResult.Append( _T("{\\author ")); sResult += RtfChar::renderRtfText( m_sAuthor, oRenderParameter.poDocument ); sResult.Append( _T("}"));
if( _T("") != m_sManager ) if( _T("") != m_sManager )
sResult.AppendFormat( _T("{\\manager %ls}"), RtfChar::renderRtfText( m_sManager, oRenderParameter.poDocument ).GetBuffer() ); sResult.Append( _T("{\\manager ")); sResult += RtfChar::renderRtfText( m_sManager, oRenderParameter.poDocument ); sResult.Append( _T("}"));
if( _T("") != m_sCompany ) if( _T("") != m_sCompany )
sResult.AppendFormat( _T("{\\company %ls}"), RtfChar::renderRtfText( m_sCompany, oRenderParameter.poDocument ).GetBuffer() ); sResult.Append( _T("{\\company ")); sResult += RtfChar::renderRtfText( m_sCompany, oRenderParameter.poDocument ); sResult.Append( _T("}"));
if( _T("") != m_sOperator ) if( _T("") != m_sOperator )
sResult.AppendFormat( _T("{\\operator %ls}"), RtfChar::renderRtfText( m_sOperator, oRenderParameter.poDocument ).GetBuffer() ); sResult.Append( _T("{\\operator ")); sResult += RtfChar::renderRtfText( m_sOperator, oRenderParameter.poDocument ); sResult.Append( _T("}"));
if( _T("") != m_sCategory ) if( _T("") != m_sCategory )
sResult.AppendFormat( _T("{\\category %ls}"), RtfChar::renderRtfText( m_sCategory, oRenderParameter.poDocument ).GetBuffer() ); sResult.Append( _T("{\\category ")); sResult += RtfChar::renderRtfText( m_sCategory, oRenderParameter.poDocument ); sResult.Append( _T("}"));
if( _T("") != m_sKeywords ) if( _T("") != m_sKeywords )
sResult.AppendFormat( _T("{\\keywords %ls}"), RtfChar::renderRtfText( m_sKeywords, oRenderParameter.poDocument ).GetBuffer() ); sResult.Append( _T("{\\keywords ")); sResult += RtfChar::renderRtfText( m_sKeywords, oRenderParameter.poDocument ); sResult.Append( _T("}"));
if( _T("") != m_sComment ) if( _T("") != m_sComment )
sResult.AppendFormat( _T("{\\comment %ls}"), RtfChar::renderRtfText( m_sComment, oRenderParameter.poDocument ).GetBuffer() ); sResult.Append( _T("{\\comment ")); sResult += RtfChar::renderRtfText( m_sComment, oRenderParameter.poDocument ); sResult.Append( _T("}"));
if( PROP_DEF != m_nVersion ) if( PROP_DEF != m_nVersion )
sResult.AppendFormat( _T("{\\version%d}"),m_nVersion ); sResult.AppendFormat( _T("{\\version%d}"),m_nVersion );
if( _T("") != m_sDocCom ) if( _T("") != m_sDocCom )
sResult.AppendFormat( _T("{\\doccomm %ls}"), RtfChar::renderRtfText( m_sDocCom, oRenderParameter.poDocument ).GetBuffer() ); sResult.Append( _T("{\\doccomm ")); sResult += RtfChar::renderRtfText( m_sDocCom, oRenderParameter.poDocument ); sResult.Append( _T("}"));
if( PROP_DEF != m_nInternalVersion ) if( PROP_DEF != m_nInternalVersion )
sResult.AppendFormat( _T("{\\vern%d}"),m_nInternalVersion ); sResult.AppendFormat( _T("{\\vern%d}"),m_nInternalVersion );
if( _T("") != m_sLinkBase ) if( _T("") != m_sLinkBase )
sResult.AppendFormat( _T("{\\hlinkbase %ls}"), RtfChar::renderRtfText( m_sLinkBase, oRenderParameter.poDocument ).GetBuffer() ); sResult.Append( _T("{\\hlinkbase ")); sResult += RtfChar::renderRtfText( m_sLinkBase, oRenderParameter.poDocument ); sResult.Append( _T("}"));
CString sCreateTime = m_oCreateTime.RenderToRtf( oRenderParameter ); CString sCreateTime = m_oCreateTime.RenderToRtf( oRenderParameter );
if( _T("") != sCreateTime ) if( _T("") != sCreateTime )
sResult.AppendFormat( _T("{\\creatim%ls}"),sCreateTime.GetBuffer() ); sResult.Append( _T("{\\creatim")); sResult += sCreateTime; sResult.Append( _T("}"));
CString sRevTime = m_oRevTime.RenderToRtf( oRenderParameter ); CString sRevTime = m_oRevTime.RenderToRtf( oRenderParameter );
if( _T("") != sRevTime ) if( _T("") != sRevTime )
sResult.AppendFormat( _T("{\\revtim%ls}"),sRevTime.GetBuffer() ); sResult.Append( _T("{\\revtim")); sResult += sRevTime; sResult.Append( _T("}"));
CString sPrintTime = m_oPrintTime.RenderToRtf( oRenderParameter ); CString sPrintTime = m_oPrintTime.RenderToRtf( oRenderParameter );
if( _T("") != sPrintTime ) if( _T("") != sPrintTime )
sResult.AppendFormat( _T("{\\printim%ls}"),sPrintTime.GetBuffer() ); sResult.Append( _T("{\\printim")); sResult += sPrintTime; sResult.Append( _T("}"));
CString sBackupTime = m_oBackupTime.RenderToRtf( oRenderParameter ); CString sBackupTime = m_oBackupTime.RenderToRtf( oRenderParameter );
if( _T("") != sBackupTime ) if( _T("") != sBackupTime )
sResult.AppendFormat( _T("{\\buptim%ls}"),sBackupTime.GetBuffer() ); sResult.Append( _T("{\\buptim")); sResult += sBackupTime; sResult.Append( _T("}"));
if( PROP_DEF != m_nEndingTime ) if( PROP_DEF != m_nEndingTime )
sResult.AppendFormat( _T("{\\edmins%d}"),m_nEndingTime ); sResult.AppendFormat( _T("{\\edmins%d}"),m_nEndingTime );
if( PROP_DEF != m_nNumberOfPages ) if( PROP_DEF != m_nNumberOfPages )
...@@ -2822,54 +2867,58 @@ return sResult; ...@@ -2822,54 +2867,58 @@ return sResult;
} }
CString RtfMathProperty::RenderToOOX(RenderParameter oRenderParameter) CString RtfMathProperty::RenderToOOX(RenderParameter oRenderParameter)
{ {
CString sProperty; CString sProperty;
if( PROP_DEF != mmathFont ) if( PROP_DEF != mmathFont )
{ {
RtfDocument* poDoc = static_cast<RtfDocument*>(oRenderParameter.poDocument); RtfDocument* poDoc = static_cast<RtfDocument*>(oRenderParameter.poDocument);
RtfFont oFont; RtfFont oFont;
if( true == poDoc->m_oFontTable.GetFont(mmathFont, oFont) ) if( true == poDoc->m_oFontTable.GetFont(mmathFont, oFont) )
sProperty.AppendFormat(_T("<m:mathFont m:val=\"%ls\"/>"), oFont.m_sName.GetBuffer()); sProperty.AppendFormat(_T("<m:mathFont m:val=\"%ls\"/>"), oFont.m_sName.GetBuffer());
}
switch( mbrkBin )
{
case 0:sProperty.Append(_T("<m:brkBin m:val=\"before\"/>"));break;
case 1:sProperty.Append(_T("<m:brkBin m:val=\"after\"/>"));break;
case 2:sProperty.Append(_T("<m:brkBin m:val=\"repeat\"/>"));break;
}
switch( mbrkBinSub )
{
case 0:sProperty.Append(_T("<m:brkBinSub m:val=\"--\"/>"));break;
case 1:sProperty.Append(_T("<m:brkBinSub m:val=\"+-\"/>"));break;
case 2:sProperty.Append(_T("<m:brkBinSub m:val=\"-+\"/>"));break;
}
switch( mdefJc )
{
case 1:sProperty.Append(_T("<m:defJc m:val=\"centerGroup\"/>"));break;
case 2:sProperty.Append(_T("<m:defJc m:val=\"center\"/>"));break;
case 3:sProperty.Append(_T("<m:defJc m:val=\"left\"/>"));break;
case 4:sProperty.Append(_T("<m:defJc m:val=\"right\"/>"));break;
} }
switch( mbrkBin ) RENDER_OOX_INT( mdispDef, sProperty, _T("m:dispDef") )
{ RENDER_OOX_INT( minterSp, sProperty, _T("m:interSp") )
case 0:sProperty.Append(_T("<m:brkBin m:val=\"before\"/>"));break; RENDER_OOX_INT( mintraSp, sProperty, _T("m:intraSp") )
case 1:sProperty.Append(_T("<m:brkBin m:val=\"after\"/>"));break; RENDER_OOX_INT( mlMargin, sProperty, _T("m:lMargin") )
case 2:sProperty.Append(_T("<m:brkBin m:val=\"repeat\"/>"));break; RENDER_OOX_INT( mrMargin, sProperty, _T("m:rMargin") )
} switch( mnaryLim )
switch( mbrkBinSub ) {
{ case 0:sProperty.Append(_T("<m:naryLim m:val=\"subSup\"/>"));break;
case 0:sProperty.Append(_T("<m:brkBinSub m:val=\"--\"/>"));break; case 1:sProperty.Append(_T("<m:naryLim m:val=\"undOvr\"/>"));break;
case 1:sProperty.Append(_T("<m:brkBinSub m:val=\"+-\"/>"));break; }
case 2:sProperty.Append(_T("<m:brkBinSub m:val=\"-+\"/>"));break; RENDER_OOX_INT( mpostSp, sProperty, _T("m:postSp") )
} RENDER_OOX_INT( mpreSp, sProperty, _T("m:preSp") )
switch( mdefJc ) RENDER_OOX_INT( msmallFrac, sProperty, _T("m:smallFrac") )
{ RENDER_OOX_INT( mwrapIndent, sProperty, _T("m:wrapIndent") )
case 1:sProperty.Append(_T("<m:defJc m:val=\"centerGroup\"/>"));break; RENDER_OOX_INT( mwrapRight, sProperty, _T("m:wrapRight") )
case 2:sProperty.Append(_T("<m:defJc m:val=\"center\"/>"));break;
case 3:sProperty.Append(_T("<m:defJc m:val=\"left\"/>"));break;
case 4:sProperty.Append(_T("<m:defJc m:val=\"right\"/>"));break;
} CString sResult;
RENDER_OOX_INT( mdispDef, sProperty, _T("m:dispDef") ) if( false == sProperty.IsEmpty() )
RENDER_OOX_INT( minterSp, sProperty, _T("m:interSp") ) {
RENDER_OOX_INT( mintraSp, sProperty, _T("m:intraSp") ) sResult.Append( _T("<m:mathPr>") );
RENDER_OOX_INT( mlMargin, sProperty, _T("m:lMargin") ) sResult += sProperty;
RENDER_OOX_INT( mrMargin, sProperty, _T("m:rMargin") ) sResult.Append( _T("</m:mathPr>") );
switch( mnaryLim ) }
{ return sResult;
case 0:sProperty.Append(_T("<m:naryLim m:val=\"subSup\"/>"));break;
case 1:sProperty.Append(_T("<m:naryLim m:val=\"undOvr\"/>"));break;
}
RENDER_OOX_INT( mpostSp, sProperty, _T("m:postSp") )
RENDER_OOX_INT( mpreSp, sProperty, _T("m:preSp") )
RENDER_OOX_INT( msmallFrac, sProperty, _T("m:smallFrac") )
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.GetBuffer() );
return sResult;
} }
CString RtfMathSpecProp::RenderToRtf(RenderParameter oRenderParameter) CString RtfMathSpecProp::RenderToRtf(RenderParameter oRenderParameter)
{ {
......
...@@ -28,35 +28,66 @@ ...@@ -28,35 +28,66 @@
#define RENDER_OOX_BOOL( prop, sResult, sName)\ #define RENDER_OOX_BOOL( prop, sResult, sName)\
if( 0 == prop )\ if( 0 == prop )\
sResult.AppendFormat( _T("<%ls w:val=\"false\"/>"), sName );\ {\
sResult.Append( _T("<") );\
sResult.Append( sName );\
sResult.AppendFormat( _T(" w:val=\"false\"/>"));\
}\
else if( PROP_DEF != prop )\ else if( PROP_DEF != prop )\
sResult.AppendFormat( _T("<%ls w:val=\"true\"/>"), sName ); {\
sResult.Append( _T("<") );\
#define RENDER_OOX_BOOL_ATTRIBUTE( prop, sResult, sName)\ sResult.Append( sName );\
if( 0 == prop )\ sResult.AppendFormat( _T(" w:val=\"true\"/>"));\
sResult.AppendFormat( _T(" %ls=\"0\""), sName );\ }
else if( PROP_DEF != prop )\
sResult.AppendFormat( _T(" %ls=\"1\""), sName );
#define RENDER_OOX_INT( prop, sResult, sName)\ #define RENDER_OOX_INT( prop, sResult, sName)\
if( PROP_DEF != prop )\ if( PROP_DEF != prop )\
sResult.AppendFormat( _T("<%ls w:val=\"%d\"/>"), sName, prop ); {\
sResult.Append( _T("<") );\
sResult.Append( sName );\
sResult.AppendFormat( _T(" w:val=\"%d\"/>"), prop );\
}
#define RENDER_OOX_INT_ATTRIBUTE( prop, sResult, sName)\ #define RENDER_OOX_INT_ATTRIBUTE( prop, sResult, sName)\
if( PROP_DEF != prop )\ if( PROP_DEF != prop )\
sResult.AppendFormat( _T(" %ls=\"%d\""), sName, prop ); {\
sResult.Append( _T(" ") );\
sResult.Append( sName );\
sResult.AppendFormat( _T("=\"%d\""), prop );\
}
#define RENDER_OOX_BOOL_ATTRIBUTE( prop, sResult, sName)\
if( 0 == prop )\
{\
sResult.Append( _T(" ") );\
sResult.Append( sName );\
sResult.AppendFormat( _T("=\"0\""));\
}\
else if( PROP_DEF != prop )\
{\
sResult.Append( _T(" ") );\
sResult.Append( sName );\
sResult.AppendFormat( _T("=\"1\""));\
}
#define RENDER_RTF_BOOL( prop, sResult, sName)\ #define RENDER_RTF_BOOL( prop, sResult, sName)\
if( 0 == prop )\ if( 0 == prop )\
sResult.AppendFormat( _T("\\%ls0"), sName );\ {\
sResult.Append( _T("\\") );\
sResult.Append( sName );\
sResult.Append( _T("0") );\
}\
else if( PROP_DEF != prop )\ else if( PROP_DEF != prop )\
sResult.AppendFormat( _T("\\%ls"), sName ); {\
sResult.Append( _T("\\") );\
sResult.Append( sName );\
}
#define RENDER_RTF_INT( prop, sResult, sName)\ #define RENDER_RTF_INT( prop, sResult, sName)\
if( PROP_DEF != prop )\ if( PROP_DEF != prop )\
sResult.AppendFormat( _T("\\%ls%d"), sName, prop ); {\
sResult.Append( _T("\\") );\
sResult.Append( sName );\
sResult.AppendFormat( _T("%d"), prop );\
}
class RtfFont : public IRenderableProperty class RtfFont : public IRenderableProperty
......
...@@ -746,7 +746,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter) ...@@ -746,7 +746,7 @@ CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter)
return sResult; return sResult;
} }
CString RtfSectionProperty::SaveFile( TextItemContainerPtr oTarget, RenderParameter oRenderParameter, bool bHeader) CString RtfSectionProperty::SaveFile( TextItemContainerPtr oTarget, RenderParameter oRenderParameter, bool bHeader)
{ {
OOXWriter* poOOXWriter = static_cast<OOXWriter*> ( oRenderParameter.poWriter ); OOXWriter* poOOXWriter = static_cast<OOXWriter*> ( oRenderParameter.poWriter );
RtfDocument* poRtfDocument = static_cast<RtfDocument*> ( oRenderParameter.poDocument ); RtfDocument* poRtfDocument = static_cast<RtfDocument*> ( oRenderParameter.poDocument );
...@@ -799,4 +799,4 @@ CString RtfSectionProperty::SaveFile( TextItemContainerPtr oTarget, RenderParame ...@@ -799,4 +799,4 @@ CString RtfSectionProperty::SaveFile( TextItemContainerPtr oTarget, RenderParame
srID = poOOXWriter->m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer"), sFilename ); srID = poOOXWriter->m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer"), sFilename );
} }
return srID; return srID;
} }
...@@ -16,7 +16,12 @@ public: ...@@ -16,7 +16,12 @@ public:
CString sFootnote; CString sFootnote;
sFootnote.Append( _T("<w:footnote") ); sFootnote.Append( _T("<w:footnote") );
if( false == sType.IsEmpty() ) if( false == sType.IsEmpty() )
sFootnote.AppendFormat( _T(" w:type=\"%ls\""), sType.GetBuffer() ); {
sFootnote.Append(_T(" w:type=\"") );
sFootnote += sType;
sFootnote.Append(_T("\""));
}
if( PROP_DEF != nID ) if( PROP_DEF != nID )
sFootnote.AppendFormat( _T(" w:id=\"%d\""), nID ); sFootnote.AppendFormat( _T(" w:id=\"%d\""), nID );
sFootnote.Append( _T(">") ); sFootnote.Append( _T(">") );
...@@ -29,9 +34,15 @@ public: ...@@ -29,9 +34,15 @@ public:
{ {
m_sFootnotes.Append( _T("<w:footnote") ); m_sFootnotes.Append( _T("<w:footnote") );
if( false == sType.IsEmpty() ) if( false == sType.IsEmpty() )
m_sFootnotes.AppendFormat( _T(" w:type=\"%ls\""), sType.GetBuffer() ); {
m_sFootnotes.Append(_T(" w:type=\"") );
m_sFootnotes += sType;
m_sFootnotes.Append(_T("\""));
}
if( PROP_DEF != nID ) if( PROP_DEF != nID )
{
m_sFootnotes.AppendFormat( _T(" w:id=\"%d\""), nID ); m_sFootnotes.AppendFormat( _T(" w:id=\"%d\""), nID );
}
m_sFootnotes.Append( _T(">") ); m_sFootnotes.Append( _T(">") );
m_sFootnotes.Append( sText ); m_sFootnotes.Append( sText );
m_sFootnotes.Append(_T("</w:footnote>")); m_sFootnotes.Append(_T("</w:footnote>"));
...@@ -87,7 +98,11 @@ public: ...@@ -87,7 +98,11 @@ public:
CString sEndnote; CString sEndnote;
sEndnote.Append( _T("<w:endnote") ); sEndnote.Append( _T("<w:endnote") );
if( false == sType.IsEmpty() ) if( false == sType.IsEmpty() )
sEndnote.AppendFormat( _T(" w:type=\"%ls\""), sType.GetBuffer() ); {
sEndnote.Append(_T(" w:type=\"") );
sEndnote += sType;
sEndnote.Append(_T("\""));
}
if( -2 != nID ) if( -2 != nID )
sEndnote.AppendFormat( _T(" w:id=\"%d\""), nID ); sEndnote.AppendFormat( _T(" w:id=\"%d\""), nID );
sEndnote.Append( _T(">") ); sEndnote.Append( _T(">") );
...@@ -100,7 +115,12 @@ public: ...@@ -100,7 +115,12 @@ public:
{ {
m_sEndnotes.Append( _T("<w:endnote") ); m_sEndnotes.Append( _T("<w:endnote") );
if( false == sType.IsEmpty() ) if( false == sType.IsEmpty() )
m_sEndnotes.AppendFormat( _T(" w:type=\"%ls\""), sType.GetBuffer() ); {
m_sEndnotes.Append(_T(" w:type=\"") );
m_sEndnotes += sType;
m_sEndnotes.Append(_T("\""));
}
if( -2 != nID ) if( -2 != nID )
m_sEndnotes.AppendFormat( _T(" w:id=\"%d\""), nID ); m_sEndnotes.AppendFormat( _T(" w:id=\"%d\""), nID );
m_sEndnotes.Append( _T(">") ); m_sEndnotes.Append( _T(">") );
......
...@@ -3,36 +3,52 @@ ...@@ -3,36 +3,52 @@
#include <tchar.h> #include <tchar.h>
#include "../RtfFormatLib/source/ConvertationManager.h" #include "../RtfFormatLib/source/ConvertationManager.h"
#include "../../Common/DocxFormat/Source/SystemUtility/FileSystem/Directory.h"
#include "../../OfficeUtils/src/OfficeUtils.h"
#include <algorithm> #include <algorithm>
#include <string> #include <string>
int _tmain(int argc, _TCHAR* argv[]) int _tmain(int argc, _TCHAR* argv[])
{ {
std::wstring sTemp = _T("D:\\test\\Temp"); std::wstring srcFileName = argv[1];
std::wstring dstFileName = argv[2];
std::wstring outputDir = FileSystem::Directory::GetFolderPath(dstFileName);
std::wstring sArg_1 = argv[1]; std::wstring dstTempPath = FileSystem::Directory::CreateDirectoryWithUniqueName(outputDir);
std::wstring sArg_2 = argv[2];
int n1 = sArg_1.rfind(_T('.')); int n1 = srcFileName.rfind(_T('.'));
int n2 = sArg_2.rfind(_T('.')); int n2 = dstFileName.rfind(_T('.'));
std::wstring ext_1 = n1>=0 ? sArg_1.substr(n1+1, sArg_1.length() - n1): _T(""); //ext_1.MakeLower(); std::wstring ext_1 = n1>=0 ? srcFileName.substr(n1+1, srcFileName.length() - n1): _T(""); //ext_1.MakeLower();
std::wstring ext_2 = n2>=0 ? sArg_2.substr(n2+1, sArg_2.length() - n2): _T(""); //ext_2.MakeLower(); std::wstring ext_2 = n2>=0 ? dstFileName.substr(n2+1, dstFileName.length() - n2): _T(""); //ext_2.MakeLower();
std::transform(ext_1.begin(), ext_1.end(), ext_1.begin(), ::tolower); std::transform(ext_1.begin(), ext_1.end(), ext_1.begin(), ::tolower);
RtfConvertationManager rtfConvert; RtfConvertationManager rtfConvert;
rtfConvert.m_sTempFolder = sTemp; rtfConvert.m_sTempFolder = dstTempPath;
COfficeUtils oCOfficeUtils(NULL);
if (ext_1 == _T("rtf")) if (ext_1 == _T("rtf"))
{ // rtf->docx {
rtfConvert.ConvertRtfToOOX(sArg_1, sArg_2); // rtf->docx
rtfConvert.ConvertRtfToOOX(srcFileName, dstTempPath);
if (S_OK != oCOfficeUtils.CompressFileOrDirectory(dstTempPath.c_str(), dstFileName.c_str(), -1))
return S_FALSE;
} }
if (ext_2 == _T("rtf")) if (ext_2 == _T("rtf"))
{ // docx->rtf {
rtfConvert.ConvertOOXToRtf(sArg_2, sArg_1); // docx->rtf
if (S_OK != oCOfficeUtils.ExtractToDirectory(srcFileName.c_str(), dstTempPath.c_str(), NULL, 0))
return S_FALSE;
rtfConvert.ConvertOOXToRtf(dstTempPath, srcFileName);
} }
FileSystem::Directory::DeleteDirectory(dstTempPath);
return 0; return 0;
} }
...@@ -187,40 +187,13 @@ namespace OOX ...@@ -187,40 +187,13 @@ namespace OOX
CPath oRootPath; CPath oRootPath;
read(oRootPath, oPath); read(oRootPath, oPath);
} }
virtual void read(const CPath& oRootPath, const CPath& oPath)
{
m_oReadPath = oPath;
IFileContainer::Read( oRootPath, oPath );
#ifdef USE_LITE_READER
Common::readAllShapeTypes(oPath, m_arrShapeTypes);
XmlUtils::CXmlLiteReader oReader;
if ( !oReader.FromFile( oPath.GetPath() ) ) void CreateElements(XmlUtils::CXmlLiteReader &oReader, int Depth)
return;
if ( !oReader.ReadNextNode() )
return;
CWCharWrapper sName = oReader.GetName();
if ( _T("w:document") == sName )
{ {
ReadAttributes( oReader ); while ( oReader.ReadNextSiblingNode( Depth ) )
if ( !oReader.IsEmptyNode() )
{
int nDocumentDepth = oReader.GetDepth();
while ( oReader.ReadNextSiblingNode( nDocumentDepth ) )
{ {
sName = oReader.GetName(); CWCharWrapper sName = oReader.GetName();
if ( _T("w:body") == sName && !oReader.IsEmptyNode() )
{
int nBodyDepth = oReader.GetDepth();
while ( oReader.ReadNextSiblingNode( nBodyDepth ) )
{
sName = oReader.GetName();
WritingElement *pItem = NULL; WritingElement *pItem = NULL;
/*if ( _T("w:altChunk") == sName ) /*if ( _T("w:altChunk") == sName )
...@@ -285,11 +258,56 @@ namespace OOX ...@@ -285,11 +258,56 @@ namespace OOX
m_oSectPr = oReader; m_oSectPr = oReader;
else if ( _T("w:tbl") == sName ) else if ( _T("w:tbl") == sName )
pItem = new Logic::CTbl( oReader ); pItem = new Logic::CTbl( oReader );
else if ( _T("wx:sect") == sName && !oReader.IsEmptyNode())
{
int nWxSectDepth = oReader.GetDepth();
CreateElements(oReader, nWxSectDepth);
}
else if ( _T("wx:pBdrGroup") == sName && !oReader.IsEmptyNode())
{
int nWxBdrGroupDepth = oReader.GetDepth();
CreateElements(oReader, nWxBdrGroupDepth);
}
if ( pItem ) if ( pItem )
m_arrItems.push_back( pItem ); m_arrItems.push_back( pItem );
} }
} }
virtual void read(const CPath& oRootPath, const CPath& oPath)
{
m_oReadPath = oPath;
IFileContainer::Read( oRootPath, oPath );
#ifdef USE_LITE_READER
Common::readAllShapeTypes(oPath, m_arrShapeTypes);
XmlUtils::CXmlLiteReader oReader;
if ( !oReader.FromFile( oPath.GetPath() ) )
return;
if ( !oReader.ReadNextNode() )
return;
CWCharWrapper sName = oReader.GetName();
if ( _T("w:document") == sName || _T("w:wordDocument") == sName)
{
ReadAttributes( oReader );
if ( !oReader.IsEmptyNode() )
{
int nDocumentDepth = oReader.GetDepth();
while ( oReader.ReadNextSiblingNode( nDocumentDepth ) )
{
sName = oReader.GetName();
if ( _T("w:body") == sName && !oReader.IsEmptyNode() )
{
int nBodyDepth = oReader.GetDepth();
CreateElements(oReader, nBodyDepth);
}
else if ( _T("w:background") == sName ) else if ( _T("w:background") == sName )
m_oBackground = oReader; m_oBackground = oReader;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment