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

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

parent 3590487f
...@@ -785,7 +785,9 @@ namespace DocFileFormat ...@@ -785,7 +785,9 @@ namespace DocFileFormat
if (!text.empty()) 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()); m_pXmlWriter->WriteString(text.c_str());
...@@ -802,7 +804,9 @@ namespace DocFileFormat ...@@ -802,7 +804,9 @@ namespace DocFileFormat
{ {
if ( !text.empty() ) 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() ); m_pXmlWriter->WriteString( text.c_str() );
...@@ -810,12 +814,13 @@ namespace DocFileFormat ...@@ -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 ); std::wstring str = ( std::wstring( _T( "w:" ) ) + textType );
m_pXmlWriter->WriteNodeBegin( str.c_str(), TRUE ); m_pXmlWriter->WriteNodeBegin( str.c_str(), TRUE );
{ if (preserve_space)
{
m_pXmlWriter->WriteAttribute( _T( "xml:space" ), _T( "preserve" ) ); m_pXmlWriter->WriteAttribute( _T( "xml:space" ), _T( "preserve" ) );
} }
m_pXmlWriter->WriteNodeEnd( _T( "" ), TRUE, FALSE ); m_pXmlWriter->WriteNodeEnd( _T( "" ), TRUE, FALSE );
......
...@@ -61,7 +61,7 @@ namespace DocFileFormat ...@@ -61,7 +61,7 @@ namespace DocFileFormat
/// Writes the given text to the document /// Writes the given text to the document
void writeText( vector<wchar_t>* chars, int initialCp, CharacterPropertyExceptions* chpx, bool writeDeletedText ); void writeText( vector<wchar_t>* chars, int initialCp, CharacterPropertyExceptions* chpx, bool writeDeletedText );
void writeTextElement( const wstring& text, const wstring& textType ); 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 ); void writeTextEnd( const wstring& textType );
/// Searches for bookmarks in the list of characters. /// Searches for bookmarks in the list of characters.
vector<int> searchBookmarks( vector<wchar_t>* chars, int initialCp ); vector<int> searchBookmarks( vector<wchar_t>* chars, int initialCp );
......
...@@ -93,12 +93,6 @@ namespace DocFileFormat ...@@ -93,12 +93,6 @@ namespace DocFileFormat
m_pXmlWriter->WriteNodeBegin( _T( "w:p" ) ); m_pXmlWriter->WriteNodeBegin( _T( "w:p" ) );
//start run //start run
m_pXmlWriter->WriteNodeBegin( _T( "w:r" ) ); 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 fc = m_document->FindFileCharPos(0);
int fcEnd = m_document->FindFileCharPos(countTextRel); int fcEnd = m_document->FindFileCharPos(countTextRel);
...@@ -106,7 +100,18 @@ namespace DocFileFormat ...@@ -106,7 +100,18 @@ namespace DocFileFormat
// Read the chars // Read the chars
vector<wchar_t>* chpxChars = m_document->m_PieceTable->GetEncodingChars (fc, fcEnd, m_document->WordDocumentStream); //<! NEED OPTIMIZE vector<wchar_t>* chpxChars = m_document->m_PieceTable->GetEncodingChars (fc, fcEnd, m_document->WordDocumentStream); //<! NEED OPTIMIZE
wstring text (chpxChars->begin(), chpxChars->end()); 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()); m_pXmlWriter->WriteString(text.c_str());
RELEASEOBJECT(chpxChars); RELEASEOBJECT(chpxChars);
//close previous w:t ... //close previous w:t ...
......
...@@ -84,6 +84,8 @@ std::wstring DetectTypeDocument(const std::wstring & pathOOX) ...@@ -84,6 +84,8 @@ std::wstring DetectTypeDocument(const std::wstring & pathOOX)
int _tmain(int argc, _TCHAR* argv[]) int _tmain(int argc, _TCHAR* argv[])
{ {
if (argc < 3) return 0;
HRESULT hr = S_OK; HRESULT hr = S_OK;
boost::timer t1; boost::timer t1;
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
......
...@@ -972,7 +972,7 @@ void DocxConverter::convert(OOX::Logic::CSectionProperty *oox_section_pr, bool r ...@@ -972,7 +972,7 @@ void DocxConverter::convert(OOX::Logic::CSectionProperty *oox_section_pr, bool r
//oox_section_pr = last_section_properties; //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""); 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 ...@@ -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 (!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; last_section_properties = oox_section_pr;
} }
......
...@@ -117,24 +117,31 @@ public: ...@@ -117,24 +117,31 @@ public:
RenderParameter oNewParam = oRenderParameter; RenderParameter oNewParam = oRenderParameter;
sResult.Append( _T("<") ); sResult.Append( _T("<") );
sResult += m_sOOXName; sResult += m_sOOXName;
oNewParam.nType = RENDER_TO_OOX_PARAM_TEXT;
CString sProp = oProperty.RenderToOOX( oNewParam );
oNewParam.nType = RENDER_TO_OOX_PARAM_MATH; oNewParam.nType = RENDER_TO_OOX_PARAM_MATH;
CString sVal = m_oVal.RenderToOOX( oNewParam ); //CString sVal = m_oVal.RenderToOOX( oNewParam );
if( false == sVal.IsEmpty() ) //if( false == sVal.IsEmpty() )
{ //{
sResult.Append( _T(" w:val=\"") ); // sResult.Append( _T(" w:val=\"") );
sResult += sVal; // sResult += sVal;
sResult.Append( _T("\"") ); // sResult.Append( _T("\"") );
} //}
sResult.Append( _T(">") ); sResult.Append( _T(">") );
oNewParam.nType = RENDER_TO_OOX_PARAM_TEXT; sResult.Append( sProp);
sResult.Append( oProperty.RenderToOOX( oNewParam ) );
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("</") ); sResult.Append(_T("</") );
......
...@@ -102,6 +102,20 @@ public: ...@@ -102,6 +102,20 @@ public:
for( int i = 0; i < (int)m_aArray.size(); i++ ) for( int i = 0; i < (int)m_aArray.size(); i++ )
sResult.Append( m_aArray[i]->RenderToOOX(oRenderParameter) ); 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 else
{ {
bool bCanConvertToNumbering = false; bool bCanConvertToNumbering = false;
......
...@@ -58,6 +58,7 @@ public: ...@@ -58,6 +58,7 @@ public:
{ {
CString sResult = sInput; CString sResult = sInput;
//&amp; («&»), &lt; («<»), &gt; («>»), &apos; («'»), и &quot; («"») //&amp; («&»), &lt; («<»), &gt; («>»), &apos; («'»), и &quot; («"»)
sResult.Replace(_T("\x06"), _T("")); //ЗБ·О±Ч·Ґјіён.rtf
sResult.Replace(_T("&"), _T("&amp;")); sResult.Replace(_T("&"), _T("&amp;"));
sResult.Replace(_T("<"), _T("&lt;")); sResult.Replace(_T("<"), _T("&lt;"));
sResult.Replace(_T(">"), _T("&gt;")); 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