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;
......
......@@ -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