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

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

parent 3590487f
......@@ -785,7 +785,9 @@ namespace DocFileFormat
if (!text.empty())
{
writeTextStart(textType);
//bool preserve_space = (text.find(_T("\x20")) != text.npos) ? true : false;
writeTextStart(textType, true/*preserve_space*/);
m_pXmlWriter->WriteString(text.c_str());
......@@ -802,7 +804,9 @@ namespace DocFileFormat
{
if ( !text.empty() )
{
writeTextStart( textType );
//bool preserve_space = (text.find(_T("\x20")) != text.npos) ? true : false;
writeTextStart( textType, true /*preserve_space*/ );
m_pXmlWriter->WriteString( text.c_str() );
......@@ -810,12 +814,13 @@ namespace DocFileFormat
}
}
void DocumentMapping::writeTextStart(const std::wstring& textType)
void DocumentMapping::writeTextStart(const std::wstring& textType, bool preserve_space)
{
std::wstring str = ( std::wstring( _T( "w:" ) ) + textType );
m_pXmlWriter->WriteNodeBegin( str.c_str(), TRUE );
{
if (preserve_space)
{
m_pXmlWriter->WriteAttribute( _T( "xml:space" ), _T( "preserve" ) );
}
m_pXmlWriter->WriteNodeEnd( _T( "" ), TRUE, FALSE );
......
......@@ -61,7 +61,7 @@ namespace DocFileFormat
/// Writes the given text to the document
void writeText( vector<wchar_t>* chars, int initialCp, CharacterPropertyExceptions* chpx, bool writeDeletedText );
void writeTextElement( const wstring& text, const wstring& textType );
void writeTextStart( const wstring& textType);
void writeTextStart( const wstring& textType, bool preserve_space);
void writeTextEnd( const wstring& textType );
/// Searches for bookmarks in the list of characters.
vector<int> searchBookmarks( vector<wchar_t>* chars, int initialCp );
......
......@@ -93,12 +93,6 @@ namespace DocFileFormat
m_pXmlWriter->WriteNodeBegin( _T( "w:p" ) );
//start run
m_pXmlWriter->WriteNodeBegin( _T( "w:r" ) );
//open a new w:t element
m_pXmlWriter->WriteNodeBegin( _T( "w:t" ), TRUE );
m_pXmlWriter->WriteAttribute( _T( "xml:space" ), _T( "preserve" ) );
m_pXmlWriter->WriteNodeEnd( _T( "" ), TRUE, FALSE );
// Write text
int fc = m_document->FindFileCharPos(0);
int fcEnd = m_document->FindFileCharPos(countTextRel);
......@@ -106,7 +100,18 @@ namespace DocFileFormat
// Read the chars
vector<wchar_t>* chpxChars = m_document->m_PieceTable->GetEncodingChars (fc, fcEnd, m_document->WordDocumentStream); //<! NEED OPTIMIZE
wstring text (chpxChars->begin(), chpxChars->end());
//open a new w:t element
m_pXmlWriter->WriteNodeBegin( _T( "w:t" ), TRUE );
//if (text.find(_T("\x20")) != text.npos)
{
m_pXmlWriter->WriteAttribute( _T( "xml:space" ), _T( "preserve" ) );
}
m_pXmlWriter->WriteNodeEnd( _T( "" ), TRUE, FALSE );
// Write text
m_pXmlWriter->WriteString(text.c_str());
RELEASEOBJECT(chpxChars);
//close previous w:t ...
......
......@@ -84,6 +84,8 @@ std::wstring DetectTypeDocument(const std::wstring & pathOOX)
int _tmain(int argc, _TCHAR* argv[])
{
if (argc < 3) return 0;
HRESULT hr = S_OK;
boost::timer t1;
//////////////////////////////////////////////////////////////////////////
......
......@@ -972,7 +972,7 @@ void DocxConverter::convert(OOX::Logic::CSectionProperty *oox_section_pr, bool r
//oox_section_pr = last_section_properties;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (!continuous/* || root*/)
if (!continuous || (root && odt_context->page_layout_context()->last_master() == NULL))
{
odt_context->page_layout_context()->start_master_page(root ? L"Standard" : L"");
}
......@@ -1194,7 +1194,10 @@ void DocxConverter::convert(OOX::Logic::CSectionProperty *oox_section_pr, bool r
}
if (!continuous) odt_context->page_layout_context()->end_master_page(); //
if (root) odt_context->page_layout_context()->set_current_master_page_base();
if (root)
{
odt_context->page_layout_context()->set_current_master_page_base();
}
last_section_properties = oox_section_pr;
}
......
......@@ -117,24 +117,31 @@ public:
RenderParameter oNewParam = oRenderParameter;
sResult.Append( _T("<") );
sResult += m_sOOXName;
oNewParam.nType = RENDER_TO_OOX_PARAM_TEXT;
CString sProp = oProperty.RenderToOOX( oNewParam );
oNewParam.nType = RENDER_TO_OOX_PARAM_MATH;
CString sVal = m_oVal.RenderToOOX( oNewParam );
//CString sVal = m_oVal.RenderToOOX( oNewParam );
if( false == sVal.IsEmpty() )
{
sResult.Append( _T(" w:val=\"") );
sResult += sVal;
sResult.Append( _T("\"") );
}
//if( false == sVal.IsEmpty() )
//{
// sResult.Append( _T(" w:val=\"") );
// sResult += sVal;
// sResult.Append( _T("\"") );
//}
sResult.Append( _T(">") );
oNewParam.nType = RENDER_TO_OOX_PARAM_TEXT;
sResult.Append( oProperty.RenderToOOX( oNewParam ) );
sResult.Append( sProp);
for( int i = 0; i < (int)m_aArray.size(); i++ )
if (m_aArray.size() == 1)
sResult.Append(m_aArray[0]->RenderToOOX(oNewParam));
else
{
sResult.Append(m_aArray[i]->RenderToOOX(oNewParam));
for( int i = 1; i < (int)m_aArray.size(); i++ )
{
sResult.Append(m_aArray[i]->RenderToOOX(oNewParam));
}
}
sResult.Append(_T("</") );
......
......@@ -102,6 +102,20 @@ public:
for( int i = 0; i < (int)m_aArray.size(); i++ )
sResult.Append( m_aArray[i]->RenderToOOX(oRenderParameter) );
}
else if( RENDER_TO_OOX_PARAM_MATH == oRenderParameter.nType )
{
if (m_aArray.size() < 1)
{
sResult.Append( _T("<w:rPr>") );
sResult.Append( m_oProperty.m_oCharProperty.RenderToOOX(oRenderParameter) );
sResult.Append( _T("</w:rPr>") );
}
else
{
for( int i = 0; i < (int)m_aArray.size(); i++ )
sResult.Append( m_aArray[i]->RenderToOOX(oRenderParameter) );
}
}
else
{
bool bCanConvertToNumbering = false;
......
......@@ -68,9 +68,10 @@ CString RtfFont::RenderToOOX(RenderParameter oRenderParameter)
RtfDocument* poRtfDocument = static_cast<RtfDocument*>(oRenderParameter.poDocument);
CString sFontName = m_sName;
if ((sFontName.GetLength() > 0 ) && (sFontName[0] == 0x00b9 && m_sAltName.GetLength() > 0) )
if ((sFontName.GetLength() > 0 ) && (sFontName[0] == 0x00b9 || sFontName[0] > 0xff00) )//fondj.rtf
{
sFontName = m_sAltName;
if (m_sAltName.GetLength() > 0) sFontName = m_sAltName;
else sFontName.Empty();
}
if( sFontName.IsEmpty() )
{
......@@ -2890,27 +2891,27 @@ CString RtfTime::RenderToOOX(RenderParameter oRenderParameter)
}
CString RtfMathProperty::RenderToRtf(RenderParameter oRenderParameter)
{
CString sResult;
sResult.Append(_T("{\\*\\mmathPr"));
RENDER_RTF_INT( mbrkBin, sResult, _T("mbrkBin") )
RENDER_RTF_INT( mbrkBinSub, sResult, _T("mbrkBinSub") )
RENDER_RTF_INT( mdefJc, sResult, _T("mdefJc") )
RENDER_RTF_INT( mdispDef, sResult, _T("mdispDef") )
RENDER_RTF_INT( minterSp, sResult, _T("minterSp") )
RENDER_RTF_INT( mintraSp, sResult, _T("mintraSp") )
RENDER_RTF_INT( mlMargin, sResult, _T("mlMargin") )
RENDER_RTF_INT( mmathFont, sResult, _T("mmathFont") )
RENDER_RTF_INT( mnaryLim, sResult, _T("mnaryLim") )
RENDER_RTF_INT( mpostSp, sResult, _T("mpostSp") )
RENDER_RTF_INT( mpreSp, sResult, _T("mpreSp") )
RENDER_RTF_INT( mrMargin, sResult, _T("mrMargin") )
RENDER_RTF_INT( msmallFrac, sResult, _T("msmallFrac") )
RENDER_RTF_INT( mwrapIndent, sResult, _T("mwrapIndent") )
RENDER_RTF_INT( mwrapRight, sResult, _T("mwrapRight") )
sResult.Append(_T("}"));
return sResult;
CString sResult;
sResult.Append(_T("{\\*\\mmathPr"));
RENDER_RTF_INT( mbrkBin, sResult, _T("mbrkBin") )
RENDER_RTF_INT( mbrkBinSub, sResult, _T("mbrkBinSub") )
RENDER_RTF_INT( mdefJc, sResult, _T("mdefJc") )
RENDER_RTF_INT( mdispDef, sResult, _T("mdispDef") )
RENDER_RTF_INT( minterSp, sResult, _T("minterSp") )
RENDER_RTF_INT( mintraSp, sResult, _T("mintraSp") )
RENDER_RTF_INT( mlMargin, sResult, _T("mlMargin") )
RENDER_RTF_INT( mmathFont, sResult, _T("mmathFont") )
RENDER_RTF_INT( mnaryLim, sResult, _T("mnaryLim") )
RENDER_RTF_INT( mpostSp, sResult, _T("mpostSp") )
RENDER_RTF_INT( mpreSp, sResult, _T("mpreSp") )
RENDER_RTF_INT( mrMargin, sResult, _T("mrMargin") )
RENDER_RTF_INT( msmallFrac, sResult, _T("msmallFrac") )
RENDER_RTF_INT( mwrapIndent, sResult, _T("mwrapIndent") )
RENDER_RTF_INT( mwrapRight, sResult, _T("mwrapRight") )
sResult.Append(_T("}"));
return sResult;
}
CString RtfMathProperty::RenderToOOX(RenderParameter oRenderParameter)
{
......@@ -2969,103 +2970,103 @@ CString RtfMathProperty::RenderToOOX(RenderParameter oRenderParameter)
}
CString RtfMathSpecProp::RenderToRtf(RenderParameter oRenderParameter)
{
CString sResult;
RENDER_RTF_INT( moMathParaPr, sResult, _T("mjc") )
RENDER_RTF_INT( Font, sResult, _T("f") )
RENDER_RTF_BOOL( Break, sResult, _T("mbrk") )
RENDER_RTF_INT( RowSpacing, sResult, _T("mrSp") )
RENDER_RTF_INT( RowSpacingRule, sResult, _T("mrSpRule") )
RENDER_RTF_INT( CellGap, sResult, _T("mcGp") )
RENDER_RTF_INT( CellGapRule, sResult, _T("mcGpRule") )
RENDER_RTF_INT( CellSpacing, sResult, _T("mcSp") )
RENDER_RTF_BOOL( malnScr, sResult, _T("malnScr") )
RENDER_RTF_BOOL( HideLeft, sResult, _T("mhideLeft") )
RENDER_RTF_BOOL( HideTop, sResult, _T("mhideTop") )
RENDER_RTF_BOOL( HideRight, sResult, _T("mhideRight") )
RENDER_RTF_BOOL( HideBottom, sResult, _T("mhideBot") )
RENDER_RTF_BOOL( StrikeHor, sResult, _T("mstrikeH") )
RENDER_RTF_BOOL( StrikeVer, sResult, _T("mstrikeV") )
RENDER_RTF_BOOL( StrikeLR, sResult, _T("mstrikeTLBR") )
RENDER_RTF_BOOL( StrikeRL, sResult, _T("mstrikeBLTR") )
RENDER_RTF_BOOL( Alignment, sResult, _T("maln") )
RENDER_RTF_BOOL( Differential, sResult, _T("mdiff") )
RENDER_RTF_BOOL( NoBreak, sResult, _T("mnoBreak") )
RENDER_RTF_BOOL( Emulator, sResult, _T("mopEmu") )
RENDER_RTF_BOOL( NormalText, sResult, _T("mnor") )
RENDER_RTF_INT( mscr, sResult, _T("mscr") )
RENDER_RTF_INT( msty, sResult, _T("msty") )
RENDER_RTF_BOOL( mlit, sResult, _T("mlit") )
RENDER_RTF_BOOL( mshow, sResult, _T("mshow") )
RENDER_RTF_BOOL( mtransp, sResult, _T("mtransp") )
RENDER_RTF_BOOL( mzeroAsc, sResult, _T("mzeroAsc") )
RENDER_RTF_BOOL( mzeroDesc, sResult, _T("mzeroDesc") )
RENDER_RTF_BOOL( mzeroWid, sResult, _T("mzeroWid") )
if( PROP_DEF != mchr )
sResult.AppendFormat( _T("\\u%d?"), mchr );
sResult.Append( m_oCharProp.RenderToRtf( oRenderParameter ) );
return sResult;
CString sResult;
RENDER_RTF_INT( moMathParaPr, sResult, _T("mjc") )
RENDER_RTF_INT( Font, sResult, _T("f") )
RENDER_RTF_BOOL( Break, sResult, _T("mbrk") )
RENDER_RTF_INT( RowSpacing, sResult, _T("mrSp") )
RENDER_RTF_INT( RowSpacingRule, sResult, _T("mrSpRule") )
RENDER_RTF_INT( CellGap, sResult, _T("mcGp") )
RENDER_RTF_INT( CellGapRule, sResult, _T("mcGpRule") )
RENDER_RTF_INT( CellSpacing, sResult, _T("mcSp") )
RENDER_RTF_BOOL( malnScr, sResult, _T("malnScr") )
RENDER_RTF_BOOL( HideLeft, sResult, _T("mhideLeft") )
RENDER_RTF_BOOL( HideTop, sResult, _T("mhideTop") )
RENDER_RTF_BOOL( HideRight, sResult, _T("mhideRight") )
RENDER_RTF_BOOL( HideBottom, sResult, _T("mhideBot") )
RENDER_RTF_BOOL( StrikeHor, sResult, _T("mstrikeH") )
RENDER_RTF_BOOL( StrikeVer, sResult, _T("mstrikeV") )
RENDER_RTF_BOOL( StrikeLR, sResult, _T("mstrikeTLBR") )
RENDER_RTF_BOOL( StrikeRL, sResult, _T("mstrikeBLTR") )
RENDER_RTF_BOOL( Alignment, sResult, _T("maln") )
RENDER_RTF_BOOL( Differential, sResult, _T("mdiff") )
RENDER_RTF_BOOL( NoBreak, sResult, _T("mnoBreak") )
RENDER_RTF_BOOL( Emulator, sResult, _T("mopEmu") )
RENDER_RTF_BOOL( NormalText, sResult, _T("mnor") )
RENDER_RTF_INT( mscr, sResult, _T("mscr") )
RENDER_RTF_INT( msty, sResult, _T("msty") )
RENDER_RTF_BOOL( mlit, sResult, _T("mlit") )
RENDER_RTF_BOOL( mshow, sResult, _T("mshow") )
RENDER_RTF_BOOL( mtransp, sResult, _T("mtransp") )
RENDER_RTF_BOOL( mzeroAsc, sResult, _T("mzeroAsc") )
RENDER_RTF_BOOL( mzeroDesc, sResult, _T("mzeroDesc") )
RENDER_RTF_BOOL( mzeroWid, sResult, _T("mzeroWid") )
if( PROP_DEF != mchr )
sResult.AppendFormat( _T("\\u%d?"), mchr );
sResult.Append( m_oCharProp.RenderToRtf( oRenderParameter ) );
return sResult;
}
CString RtfMathSpecProp::RenderToOOX(RenderParameter oRenderParameter)
{
CString sResult;
switch( moMathParaPr )
{
case 1:sResult.Append(_T("<m:jc m:val=\"center\"/>"));break;
case 2:sResult.Append(_T("<m:jc m:val=\"centerGroup\"/>"));break;
case 3:sResult.Append(_T("<m:jc m:val=\"left\"/>"));break;
case 4:sResult.Append(_T("<m:jc m:val=\"right\"/>"));break;
}
RENDER_OOX_BOOL( Break, sResult, _T("m:brk") )
RENDER_OOX_INT( RowSpacing, sResult, _T("m:rSp") )
RENDER_OOX_INT( RowSpacingRule, sResult, _T("m:rSpRule") )
RENDER_OOX_INT( CellGap, sResult, _T("m:cGp") )
RENDER_OOX_INT( CellGapRule, sResult, _T("m:cGpRule") )
RENDER_OOX_INT( CellSpacing, sResult, _T("m:cSp") )
RENDER_OOX_BOOL( malnScr, sResult, _T("m:alnScr") )
RENDER_OOX_BOOL( HideLeft, sResult, _T("m:hideLeft") )
RENDER_OOX_BOOL( HideTop, sResult, _T("m:hideTop") )
RENDER_OOX_BOOL( HideRight, sResult, _T("m:hideRight") )
RENDER_OOX_BOOL( HideBottom, sResult, _T("m:hideBottom") )
RENDER_OOX_BOOL( StrikeHor, sResult, _T("m:strikeH") )
RENDER_OOX_BOOL( StrikeVer, sResult, _T("m:strikeV") )
RENDER_OOX_BOOL( StrikeLR, sResult, _T("m:strikeTLBR") )
RENDER_OOX_BOOL( StrikeRL, sResult, _T("m:strikeBLTR") )
RENDER_OOX_BOOL( Alignment, sResult, _T("m:aln") )
RENDER_OOX_BOOL( Differential, sResult, _T("m:diff") )
RENDER_OOX_BOOL( NoBreak, sResult, _T("m:noBreak") )
RENDER_OOX_BOOL( Emulator, sResult, _T("m:opEmu") )
RENDER_OOX_BOOL( NormalText, sResult, _T("m:nor") )
switch( mscr )
{
case 0: sResult.Append(_T("<m:scr m:val=\"roman\"/>"));break;
case 1: sResult.Append(_T("<m:scr m:val=\"script\"/>"));break;
case 2: sResult.Append(_T("<m:scr m:val=\"fraktur\"/>"));break;
case 3: sResult.Append(_T("<m:scr m:val=\"double-struck\"/>"));break;
case 4: sResult.Append(_T("<m:scr m:val=\"sans-serif\"/>"));break;
case 5: sResult.Append(_T("<m:scr m:val=\"monospace\"/>"));break;
}
switch( msty )
{
case 0: sResult.Append(_T("<m:sty m:val=\"p\"/>"));break;
case 1: sResult.Append(_T("<m:sty m:val=\"b\"/>"));break;
case 2: sResult.Append(_T("<m:sty m:val=\"i\"/>"));break;
case 3: sResult.Append(_T("<m:sty m:val=\"bi\"/>"));break;
}
RENDER_OOX_BOOL( mlit, sResult, _T("m:lit") )
RENDER_OOX_BOOL( mshow, sResult, _T("m:lit") )
RENDER_OOX_BOOL( mtransp, sResult, _T("m:lit") )
RENDER_OOX_BOOL( mzeroAsc, sResult, _T("m:lit") )
RENDER_OOX_BOOL( mzeroDesc, sResult, _T("m:lit") )
RENDER_OOX_BOOL( mzeroWid, sResult, _T("m:lit") )
return sResult;
CString sResult;
switch( moMathParaPr )
{
case 1:sResult.Append(_T("<m:jc m:val=\"center\"/>"));break;
case 2:sResult.Append(_T("<m:jc m:val=\"centerGroup\"/>"));break;
case 3:sResult.Append(_T("<m:jc m:val=\"left\"/>"));break;
case 4:sResult.Append(_T("<m:jc m:val=\"right\"/>"));break;
}
RENDER_OOX_BOOL( Break, sResult, _T("m:brk") )
RENDER_OOX_INT( RowSpacing, sResult, _T("m:rSp") )
RENDER_OOX_INT( RowSpacingRule, sResult, _T("m:rSpRule") )
RENDER_OOX_INT( CellGap, sResult, _T("m:cGp") )
RENDER_OOX_INT( CellGapRule, sResult, _T("m:cGpRule") )
RENDER_OOX_INT( CellSpacing, sResult, _T("m:cSp") )
RENDER_OOX_BOOL( malnScr, sResult, _T("m:alnScr") )
RENDER_OOX_BOOL( HideLeft, sResult, _T("m:hideLeft") )
RENDER_OOX_BOOL( HideTop, sResult, _T("m:hideTop") )
RENDER_OOX_BOOL( HideRight, sResult, _T("m:hideRight") )
RENDER_OOX_BOOL( HideBottom, sResult, _T("m:hideBottom") )
RENDER_OOX_BOOL( StrikeHor, sResult, _T("m:strikeH") )
RENDER_OOX_BOOL( StrikeVer, sResult, _T("m:strikeV") )
RENDER_OOX_BOOL( StrikeLR, sResult, _T("m:strikeTLBR") )
RENDER_OOX_BOOL( StrikeRL, sResult, _T("m:strikeBLTR") )
RENDER_OOX_BOOL( Alignment, sResult, _T("m:aln") )
RENDER_OOX_BOOL( Differential, sResult, _T("m:diff") )
RENDER_OOX_BOOL( NoBreak, sResult, _T("m:noBreak") )
RENDER_OOX_BOOL( Emulator, sResult, _T("m:opEmu") )
RENDER_OOX_BOOL( NormalText, sResult, _T("m:nor") )
switch( mscr )
{
case 0: sResult.Append(_T("<m:scr m:val=\"roman\"/>"));break;
case 1: sResult.Append(_T("<m:scr m:val=\"script\"/>"));break;
case 2: sResult.Append(_T("<m:scr m:val=\"fraktur\"/>"));break;
case 3: sResult.Append(_T("<m:scr m:val=\"double-struck\"/>"));break;
case 4: sResult.Append(_T("<m:scr m:val=\"sans-serif\"/>"));break;
case 5: sResult.Append(_T("<m:scr m:val=\"monospace\"/>"));break;
}
switch( msty )
{
case 0: sResult.Append(_T("<m:sty m:val=\"p\"/>"));break;
case 1: sResult.Append(_T("<m:sty m:val=\"b\"/>"));break;
case 2: sResult.Append(_T("<m:sty m:val=\"i\"/>"));break;
case 3: sResult.Append(_T("<m:sty m:val=\"bi\"/>"));break;
}
RENDER_OOX_BOOL( mlit, sResult, _T("m:lit") )
RENDER_OOX_BOOL( mshow, sResult, _T("m:lit") )
RENDER_OOX_BOOL( mtransp, sResult, _T("m:lit") )
RENDER_OOX_BOOL( mzeroAsc, sResult, _T("m:lit") )
RENDER_OOX_BOOL( mzeroDesc, sResult, _T("m:lit") )
RENDER_OOX_BOOL( mzeroWid, sResult, _T("m:lit") )
return sResult;
}
void RtfCharStyle::Merge( RtfStylePtr oStyle )
......@@ -3090,24 +3091,24 @@ void RtfCharStyle::Merge( RtfStylePtr oStyle )
void RtfParagraphStyle::Merge( RtfStylePtr oStyle )
{
RtfStyle::Merge( oStyle );
if( TYPE_RTF_PROPERTY_STYLE_CHAR == oStyle->GetType() )
{
RtfCharStylePtr oCharStyle = boost::static_pointer_cast<RtfCharStyle, RtfStyle>( oStyle );
m_oCharProp.Merge( oCharStyle->m_oCharProp );
}
else if( TYPE_RTF_PROPERTY_STYLE_PARAGRAPH == oStyle->GetType() )
{
RtfParagraphStylePtr oParagraphStyle = boost::static_pointer_cast<RtfParagraphStyle, RtfStyle>( oStyle );
m_oParProp.Merge( oParagraphStyle->m_oParProp );
m_oCharProp.Merge( oParagraphStyle->m_oCharProp );
}
else if( TYPE_RTF_PROPERTY_STYLE_TABLE == oStyle->GetType() )
{
RtfTableStylePtr oTableStyle = boost::static_pointer_cast<RtfTableStyle, RtfStyle>( oStyle );
m_oParProp.Merge( oTableStyle->m_oParProp );
m_oCharProp.Merge( oTableStyle->m_oCharProp );
}
RtfStyle::Merge( oStyle );
if( TYPE_RTF_PROPERTY_STYLE_CHAR == oStyle->GetType() )
{
RtfCharStylePtr oCharStyle = boost::static_pointer_cast<RtfCharStyle, RtfStyle>( oStyle );
m_oCharProp.Merge( oCharStyle->m_oCharProp );
}
else if( TYPE_RTF_PROPERTY_STYLE_PARAGRAPH == oStyle->GetType() )
{
RtfParagraphStylePtr oParagraphStyle = boost::static_pointer_cast<RtfParagraphStyle, RtfStyle>( oStyle );
m_oParProp.Merge( oParagraphStyle->m_oParProp );
m_oCharProp.Merge( oParagraphStyle->m_oCharProp );
}
else if( TYPE_RTF_PROPERTY_STYLE_TABLE == oStyle->GetType() )
{
RtfTableStylePtr oTableStyle = boost::static_pointer_cast<RtfTableStyle, RtfStyle>( oStyle );
m_oParProp.Merge( oTableStyle->m_oParProp );
m_oCharProp.Merge( oTableStyle->m_oCharProp );
}
}
void RtfTableStyle::Merge( RtfStylePtr oStyle )
{
......
......@@ -58,6 +58,7 @@ public:
{
CString sResult = sInput;
//&amp; («&»), &lt; («<»), &gt; («>»), &apos; («'»), и &quot; («"»)
sResult.Replace(_T("\x06"), _T("")); //ЗБ·О±Ч·Ґјіён.rtf
sResult.Replace(_T("&"), _T("&amp;"));
sResult.Replace(_T("<"), _T("&lt;"));
sResult.Replace(_T(">"), _T("&gt;"));
......
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