/* * Copyright (C) Ascensio System SIA, 2009-2026 * * This program is a free software product. You can redistribute it and/or * modify it under the terms of the GNU Affero General Public License (AGPL) * version 3 as published by the Free Software Foundation, together with the * additional terms provided in the LICENSE file. * * This program is distributed WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For * details, see the GNU AGPL at: https://www.gnu.org/licenses/agpl-3.0.html * * You can contact Ascensio System SIA by email at info@onlyoffice.com * or by postal mail at 20A-6 Ernesta Birznieka-Upisha Street, Riga, * LV-1050, Latvia, European Union. * * The interactive user interfaces in modified versions of the Program * are required to display Appropriate Legal Notices in accordance with * Section 5 of the GNU AGPL version 3. * * No trademark rights are granted under this License. * * All non-code elements of the Product, including illustrations, * icon sets, and technical writing content, are licensed under the * Creative Commons Attribution-ShareAlike 4.0 International License: * https://creativecommons.org/licenses/by-sa/4.0/legalcode * * This license applies only to such non-code elements and does not * modify or replace the licensing terms applicable to the Program's * source code, which remains licensed under the GNU Affero General * Public License v3. * * SPDX-License-Identifier: AGPL-3.0-only */ #include "RtfParagraph.h" #include "../OOXml/Writer/OOXWriter.h" std::wstring RtfOldList::RenderToRtf(RenderParameter oRenderParameter) { std::wstring sResult; if( NULL != m_oText ) sResult += m_oText->RenderToRtf( oRenderParameter ); return sResult; } static inline bool IsControlSymbol(unsigned short c) { return (c <= 31) ? (true) : (false); } std::wstring RtfOldList::RenderToOOX(RenderParameter oRenderParameter) { std::wstring sResult; if( true == CanConvertToNumbering() ) {//save as list if( RENDER_TO_OOX_PARAM_OLDLIST_ABS == oRenderParameter.nType ) { std::wstring sCharProp = m_oLevelText->m_oProperty.m_oCharProperty.RenderToOOX( oRenderParameter ); std::wstring sParProp = m_oLevelText->m_oProperty.RenderToOOX( oRenderParameter ); RenderParameter oNewParameter = oRenderParameter; oNewParameter.nType = RENDER_TO_OOX_PARAM_PLAIN; std::wstring sText = m_oLevelText->RenderToOOX( oNewParameter ); sResult += L""; sResult += L""; sResult += L""; sResult += L""; if(!sText.empty() ) { wchar_t xchBullet = sText[0]; if ((xchBullet & 0xF000) != 0) { xchBullet &= 0x00FF; } if (!IsControlSymbol(xchBullet)) { sResult += L""; } } else { sResult += L""; } if( !sParProp.empty() ) sResult += L"" + sParProp + L""; if( !sCharProp.empty() ) sResult += L"" + sCharProp + L""; if( lj_none != m_eLevelJust ) { switch( m_eLevelJust ) { case lj_left: sResult += L""; break; case lj_center: sResult += L""; break; case lj_right: sResult += L""; break; } } else sResult += L""; sResult += L""; sResult += L""; } else if( RENDER_TO_OOX_PARAM_OLDLIST_OVR == oRenderParameter.nType ) { sResult += L""; } else { if( PROP_DEF != m_nLs && PROP_DEF != m_nIlvl ) sResult += L""; } } return sResult; } bool RtfOldList::CanConvertToNumbering() { return lt_blt == m_eLevelType; } void RtfOldList::SetDefault() { m_eLevelType = lt_none; m_nLevelType = PROP_DEF; m_eLevelJust = lj_none; m_oLevelText = RtfParagraphPtr( new RtfParagraph() ); m_oLevelText->m_oProperty.m_nIndLeft = 720; m_oLevelText->m_oProperty.m_nIndFirstLine = -360; m_nLs = PROP_DEF; m_nIlvl = PROP_DEF; m_oText = RtfParagraphPtr( new RtfParagraph() ); } bool RtfOldList::operator==( const RtfOldList& oOldList ) { if( false == (m_eLevelType == oOldList.m_eLevelType && m_nLevelType == oOldList.m_nLevelType ) ) return false; if( false == (m_oLevelText->m_oProperty.m_oCharProperty == oOldList.m_oLevelText->m_oProperty.m_oCharProperty ) ) return false; RenderParameter oParam; oParam.nType = RENDER_TO_OOX_PARAM_PLAIN; std::wstring sText1 = m_oLevelText->RenderToOOX( oParam ); std::wstring sText2 = oOldList.m_oLevelText->RenderToOOX( oParam ); if( sText1 != sText2 ) return false; return true; }