std::wstring RtfParagraph::RenderToOOX(RenderParameter oRenderParameter) { RtfDocument* poRtfDocument = static_cast<RtfDocument*> (oRenderParameter.poDocument); OOXWriter* poOOXWriter = static_cast<OOXWriter*>(oRenderParameter.poWriter); std::wstring sResult ; if( RENDER_TO_OOX_PARAM_PLAIN == oRenderParameter.nType ) { for (size_t i = 0; i < m_aArray.size(); i++ ) { sResult += m_aArray[i]->RenderToOOX(oRenderParameter); } } else if( RENDER_TO_OOX_PARAM_RUN == oRenderParameter.nType ) { for (size_t i = 0; i < m_aArray.size(); i++ ) { sResult += m_aArray[i]->RenderToOOX(oRenderParameter); } } else if( RENDER_TO_OOX_PARAM_MATH == oRenderParameter.nType ) { if (m_aArray.size() < 1) { sResult += L"<w:rPr>"; sResult += m_oProperty.m_oCharProperty.RenderToOOX(oRenderParameter); sResult += L"</w:rPr>"; } else { for (size_t i = 0; i < m_aArray.size(); i++ ) { sResult += m_aArray[i]->RenderToOOX(oRenderParameter); } } } else { RenderParameter oNewParam = oRenderParameter; oNewParam.nType = RENDER_TO_OOX_PARAM_RUN; bool bCanConvertToNumbering = false; if( NULL != m_oOldList ) bCanConvertToNumbering = m_oOldList->CanConvertToNumbering(); std::wstring sParaId = XmlUtils::IntToString(++poOOXWriter->m_nextParaId, L"%08X"); sResult += L"<w:p w14:paraId=\"" + sParaId + L"\" w14:textId=\"" + sParaId + L"\">"; sResult += L"<w:pPr>"; m_oProperty.m_bOldList = (NULL != m_oOldList); bool bRenderProps = false; if ( PROP_DEF != m_oProperty.m_nTableStyle && m_oProperty.m_bInTable > 0) { RtfStylePtr oCurStyle; if( true == poRtfDocument->m_oStyleTable.GetStyle( m_oProperty.m_nTableStyle, oCurStyle ) ) { RtfParagraphStyle* oCurParaStyle = dynamic_cast<RtfParagraphStyle*>(oCurStyle.get()); if (oCurParaStyle) { RtfParagraphProperty newProps; newProps.Merge(oCurParaStyle->m_oParProp); newProps.Merge(m_oProperty); sResult += newProps.RenderToOOX(oRenderParameter); bRenderProps = true; } } } if (false == bRenderProps) sResult += m_oProperty.RenderToOOX(oRenderParameter); if( NULL != m_oOldList ) { //для OldList if( true == bCanConvertToNumbering ) sResult += m_oOldList->RenderToOOX( oRenderParameter ); } sResult += L"</w:pPr>"; if( NULL != m_oOldList) { //для OldList if( false == bCanConvertToNumbering && NULL != m_oOldList->m_oText) { RtfCharProperty oCharProp = m_oProperty.m_oCharProperty; if( NULL != m_oOldList->m_oText ) oCharProp.m_nFont = m_oOldList->m_oText->m_oProperty.m_oCharProperty.m_nFont; oNewParam = oRenderParameter; oNewParam.nType = RENDER_TO_OOX_PARAM_TEXT; for( int i = 0; i < m_oOldList->m_oText->GetCount(); i++ ) { sResult += L"<w:r>"; sResult += L"<w:rPr>"; sResult += oCharProp.RenderToOOX(oRenderParameter); sResult += L"</w:rPr>"; sResult += m_oOldList->m_oText->m_aArray[ i ]->RenderToOOX(oNewParam); sResult += L"</w:r>"; } } } if (oRenderParameter.nType == RENDER_TO_OOX_PARAM_COMMENT) { sResult += L"<w:r>"; sResult += L"<w:rPr>"; sResult += m_oProperty.m_oCharProperty.RenderToOOX(oRenderParameter); sResult += L"</w:rPr>"; sResult += L"<w:annotationRef/>"; sResult += L"</w:r>"; } oNewParam.nType = RENDER_TO_OOX_PARAM_RUN; std::wstring ParagraphContent; for (size_t i = 0; i < m_aArray.size(); i++) { ParagraphContent += m_aArray[i]->RenderToOOX(oNewParam); } if (!ParagraphContent.empty()) sResult += ParagraphContent; sResult += L"</w:p>"; } return sResult; }
std::wstring RtfOle::RenderToOOX(RenderParameter oRenderParameter) { if( false == IsValid() ) return L""; std::wstring 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_oCharProperty; //------------------------------------------ // todooo общая часть с RtfChar bool bInsert = false; bool bDelete = false; if (pCharProps->m_nRevised != PROP_DEF) { bInsert = true; std::wstring sAuthor = poRtfDocument->m_oRevisionTable.GetAuthor(pCharProps->m_nRevauth); std::wstring 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; } if (pCharProps->m_nDeleted != PROP_DEF) { bDelete = true; std::wstring sAuthor = poRtfDocument->m_oRevisionTable.GetAuthor(pCharProps->m_nRevauthDel); std::wstring 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; } //---------- sResult += L"<w:r>"; std::wstring sCharProp = pCharProps->RenderToOOX(oRenderParameter); if (!sCharProp .empty()) { sResult += L"<w:rPr>"; sResult += sCharProp; sResult += L"</w:rPr>"; } sResult += L"<w:object w:dxaOrig=\"" + std::to_wstring(m_nWidth) + L"\" w:dyaOrig=\"" + std::to_wstring(m_nHeight) + L"\">"; RenderParameter oNewRenderParameter = oRenderParameter; oNewRenderParameter.nType = RENDER_TO_OOX_PARAM_SHAPE_WSHAPE2; if (m_oResultShape) { m_oResultShape->m_bIsOle = true; sResult += m_oResultShape->RenderToOOX(oNewRenderParameter); oNewRenderParameter.nValue = m_oResultShape->m_nID; } sResult += RenderToOOXOnlyOle(oNewRenderParameter); sResult += L"</w:object>"; sResult += L"</w:r>"; if (bDelete)sResult += L"</w:del>"; if (bInsert)sResult += L"</w:ins>"; } return sResult; }