/* * (c) Copyright Ascensio System SIA 2010-2023 * * 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. In accordance with * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect * that Ascensio System SIA expressly excludes the warranty of non-infringement * of any third-party rights. * * 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: http://www.gnu.org/licenses/agpl-3.0.html * * You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish * street, Riga, Latvia, EU, LV-1050. * * The interactive user interfaces in modified source and object code versions * of the Program must display Appropriate Legal Notices, as required under * Section 5 of the GNU AGPL version 3. * * Pursuant to Section 7(b) of the License you must retain the original Product * logo when distributing the program. Pursuant to Section 7(e) we decline to * grant you any rights under trademark law for use of our trademarks. * * All the Product's GUI elements, including illustrations and icon sets, as * well as technical writing content are licensed under the terms of the * Creative Commons Attribution-ShareAlike 4.0 International. See the License * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode * */ #include "../OOXml/Writer/OOXWriter.h" #include "IdGenerator.h" RtfDocumentProperty::RtfDocumentProperty() { SetDefault(); } int RtfDocumentProperty::GetType() { return TYPE_RTF_PROPERTY_DOCUMENT; } bool RtfDocumentProperty::IsValid() { return true; } void RtfDocumentProperty::SetDefaultRtf() { SetDefault(); m_bUseTabAlignment = 0; } void RtfDocumentProperty::SetDefaultOOX() { SetDefault(); } void RtfDocumentProperty::SetDefault() { m_sDefFontName = L"Times New Roman"; m_nDefFontSize = 24; m_eCodePage = cp_ansi; m_nTabWidth = 720; //todo -1 m_nDefFont = PROP_DEF; m_nDefMathFont = PROP_DEF; m_nDefLang = PROP_DEF; m_nDefLangAsian = PROP_DEF; m_bHypCaps = PROP_DEF; m_bAutoHyp = PROP_DEF; m_nMaxHypen = PROP_DEF; m_nHyphenationRight = PROP_DEF; m_nZoom = 100; m_nAnsiCodePage = CP_ACP; m_bDorderSurroundHeader = PROP_DEF; m_bDorderSurroundFotter = PROP_DEF; m_bAlignBordersAndEdges = PROP_DEF; m_bRtlGutter = PROP_DEF; m_bRtl = PROP_DEF; m_nThemelang = PROP_DEF; m_nThemelangfe = PROP_DEF; m_nThemelangcs = PROP_DEF; m_nPaperWidth = 11900; m_nPaperHeight = 16840; m_nMarginLeft = 1701; m_nMarginRight = 850; m_nMarginTop = 1134; m_nMarginBottom = 1134; m_bFacingPage = PROP_DEF; m_nGutterWidth = 0; m_nGutterWidthOutside = PROP_DEF; m_bGutterAtTop = PROP_DEF; m_bSwitchMargins = PROP_DEF; m_bLandScape = PROP_DEF; m_nBeginningPageNumber = PROP_DEF; m_nDisplayBackground = PROP_DEF; m_bUseTabAlignment = PROP_DEF; m_nDrawingGridHorizontalSpacing = PROP_DEF; m_nDrawingGridVerticalSpacing = PROP_DEF; m_nDrawingGridHorizontalOrigin = PROP_DEF; m_nDrawingGridVerticalOrigin = PROP_DEF; m_nDisplayHorizontalDrawingGridEvery= PROP_DEF; //def = 3 m_nDisplayVerticalDrawingGridEvery = PROP_DEF; //def = 0 m_aSpecialFootnotes.clear(); m_nFootnoteNumberingFormat = PROP_DEF; m_nFootnoteStart = PROP_DEF; m_eFootnoteRestart = fr_None; m_eFootnotePlacement = fp_None; m_aSpecialEndnotes.clear(); m_nEndnoteNumberingFormat = PROP_DEF; m_nEndnoteStart = PROP_DEF; m_eEndnoteRestart = er_None; m_eEndnotePlacement = ep_None; m_bSplitPageBrake = 1; m_bHtmlAutoSpace = PROP_DEF; } std::wstring RtfDocumentProperty::GetRtfFormat( int nFormat, bool bFootnote ) { if( PROP_DEF == nFormat ) { if( true == bFootnote ) return L"ftnnar"; else return L"aftnnar"; } if( true == bFootnote ) { switch( nFormat ) { case 0: return L"ftnnar"; case 4: return L"ftnnalc"; case 3: return L"ftnnauc"; case 2: return L"ftnnrlc"; case 1: return L"ftnnruc"; case 70: return L"ftnnchi"; case 25: return L"ftnnchi"; case 18: return L"ftnncnum"; case 10: return L"ftnndbnum"; case 11: return L"ftnndbnumd"; case 16: return L"ftnndbnumt"; case 17: return L"ftnndbnumk"; case 20: return L"ftnndbar"; case 24: return L"ftnnganada"; case 26: return L"ftnngbnum"; case 27: return L"ftnngbnumd"; case 28: return L"ftnngbnuml"; case 29: return L"ftnngbnumk"; case 30: return L"ftnnzodiac"; case 31: return L"ftnnzodiacd"; case 32: return L"ftnnzodiacl"; } } else { switch( nFormat ) { case 0: return L"aftnnar"; case 4: return L"aftnnalc"; case 3: return L"aftnnauc"; case 2: return L"aftnnrlc"; case 1: return L"aftnnruc"; case 70: return L"aftnnchi"; case 25: return L"aftnnchi"; case 18: return L"aftnncnum"; case 10: return L"aftnndbnum"; case 11: return L"aftnndbnumd"; case 16: return L"aftnndbnumt"; case 17: return L"aftnndbnumk"; case 20: return L"aftnndbar"; case 24: return L"aftnnganada"; case 26: return L"aftnngbnum"; case 27: return L"aftnngbnumd"; case 28: return L"aftnngbnuml"; case 29: return L"aftnngbnumk"; case 30: return L"aftnnzodiac"; case 31: return L"aftnnzodiacd"; case 32: return L"aftnnzodiacl"; } } if( true == bFootnote ) return L"ftnnar"; else return L"aftnnar"; } std::wstring RtfDocumentProperty::RenderToRtf(RenderParameter oRenderParameter) { std::wstring sResult; switch( m_eCodePage ) { case cp_ansi: { sResult += L"\\ansi"; if( PROP_DEF != m_nAnsiCodePage ) sResult += L"\\ansicpg" + std::to_wstring( m_nAnsiCodePage ); break; } case cp_mac: sResult += L"\\mac"; break; case cp_pc: sResult += L"\\pc"; break; case cp_pca: sResult += L"\\pca"; break; } RENDER_RTF_BOOL ( m_bHypCaps, sResult, L"hyphcaps" ) RENDER_RTF_BOOL ( m_bAutoHyp, sResult, L"hyphauto" ) RENDER_RTF_INT ( m_nMaxHypen, sResult, L"hyphconsec" ) RENDER_RTF_INT ( m_nHyphenationRight, sResult, L"hyphhotz" ) RENDER_RTF_INT ( m_nTabWidth, sResult, L"deftab" ) RENDER_RTF_INT ( m_nZoom, sResult, L"viewscale" ) //Page Borders RENDER_RTF_BOOL ( m_bDorderSurroundHeader, sResult, L"pgbrdrhead" ) RENDER_RTF_BOOL ( m_bDorderSurroundFotter, sResult, L"pgbrdrfoot" ) RENDER_RTF_BOOL ( m_bAlignBordersAndEdges, sResult, L"pgbrdrsnap" ) //Page Information //эти свойства пишутся в первой секции //public: int m_nPaperWidth; // paperwN Paper width in twips (default is 12,240). //public: int m_nPaperHeight; // paperhN Paper height in twips (default is 15,840). //public: int m_nMarginLeft; // marglN Left margin in twips (default is 1800). //public: int m_nMarginRight; // margrN Right margin in twips (default is 1800). //public: int m_nMarginTop; // margtN Top margin in twips (default is 1440). //public: int m_nMarginBottom; // margbN Bottom margin in twips (default is 1440). //public: int m_bFacingPage; //(mirrorMargins)\facingp Facing pages (activates odd/even headers and gutters). //public: int m_nGutterWidth; // gutterN Gutter width in twips (default is 0). //public: int m_nGutterWidthOutside; // ogutterN Outside gutter width (default is 0; not used by Word, but in 1987 RTF Spec) // RENDER_RTF_BOOL( m_bLandScape, sResult, L"landscape" ) RENDER_RTF_BOOL( m_bGutterAtTop, sResult, L"gutterprl" ) RENDER_RTF_BOOL( m_bSwitchMargins, sResult, L"margmirror" ) RENDER_RTF_BOOL( m_bFacingPage, sResult, L"facingp" ) //Compatibility Options RENDER_RTF_INT( m_nDisplayBackground, sResult, L"viewbksp" ) RENDER_RTF_BOOL( m_bUseTabAlignment, sResult, L"useltbaln" ) //footnote, endnote property if( PROP_DEF != m_nFootnoteNumberingFormat ) sResult += L"\\" + GetRtfFormat(m_nFootnoteNumberingFormat, true); RENDER_RTF_INT( m_nFootnoteStart, sResult, L"ftnstart" ) if( PROP_DEF != m_eFootnoteRestart ) { switch( m_eFootnoteRestart ) { case fr_EachPage: sResult += L"\\ftnrstpg" ; break; case fr_EachSection: sResult += L"\\ftnrestart"; break; case fr_Continuous: sResult += L"\\ftnrstcont"; break; } } if( PROP_DEF != m_eFootnotePlacement ) { switch( m_eFootnoteRestart ) { case fp_EndSection: sResult += L"\\endnotes"; break; case fp_EndDocument: sResult += L"\\enddoc"; break; case fp_BeneathText: sResult += L"\\ftntj"; break; case fp_BottomPage: sResult += L"\\ftnbj"; break; } } if( PROP_DEF != m_nEndnoteNumberingFormat ) sResult += L"\\" + GetRtfFormat(m_nEndnoteNumberingFormat, false); RENDER_RTF_INT( m_nEndnoteStart, sResult, L"aftnstart" ) if( PROP_DEF != m_eEndnoteRestart ) { switch( m_eEndnoteRestart ) { case er_EachSection: sResult += L"\\aftnrestart"; break; case er_Continuous: sResult += L"\\aftnrstcont"; break; } } if( PROP_DEF != m_eEndnotePlacement ) { switch( m_eEndnotePlacement ) { case ep_EndSection: sResult += L"\\aendnotes"; break; case ep_EndDocument: sResult += L"\\aenddoc"; break; case ep_BeneathText: sResult += L"\\aftntj"; break; case ep_BottomPage: sResult += L"\\aftnbj"; break; } } //для схоранения в RTF RENDER_RTF_INT( m_bSplitPageBrake, sResult, L"spltpgpar" ) if( 0 != m_bHtmlAutoSpace ) sResult += L"\\htmautsp"; return sResult; } std::wstring RtfDocumentProperty::RenderToOOX(RenderParameter oRenderParameter) { std::wstring sResult; if( PROP_DEF != m_bHypCaps ) { if( 0 == m_bHypCaps ) sResult += L""; else sResult += L""; } RENDER_OOX_BOOL( m_bAutoHyp, sResult, L"w:autoHyphenation" ) RENDER_OOX_INT( m_nMaxHypen, sResult, L"w:consecutiveHyphenLimit" ) RENDER_OOX_INT( m_nHyphenationRight, sResult, L"w:hyphenationZone" ) RENDER_OOX_INT( m_nTabWidth, sResult, L"w:defaultTabStop" ) RENDER_OOX_INT( m_nDrawingGridHorizontalSpacing, sResult, L"w:drawingGridHorizontalSpacing" ) RENDER_OOX_INT( m_nDrawingGridVerticalSpacing, sResult, L"w:drawingGridVerticalSpacing" ) RENDER_OOX_INT( m_nDrawingGridHorizontalOrigin, sResult, L"w:drawingGridVerticalOrigin" ) RENDER_OOX_INT( m_nDrawingGridVerticalOrigin, sResult, L"w:drawingGridVerticalOrigin" ) RENDER_OOX_INT( m_nDisplayHorizontalDrawingGridEvery, sResult, L"w:displayHorizontalDrawingGridEvery" ) RENDER_OOX_INT( m_nDisplayVerticalDrawingGridEvery, sResult, L"w:displayVerticalDrawingGridEvery" ) if( PROP_DEF != m_nZoom ) sResult += L""; //Page Borders if( PROP_DEF != m_bDorderSurroundHeader ) { if( 0 == m_bDorderSurroundHeader ) sResult += L""; else sResult += L""; } if( PROP_DEF != m_bDorderSurroundFotter ) { if( 0 == m_bDorderSurroundFotter ) sResult += L""; else sResult += L""; } RENDER_OOX_BOOL( m_bAlignBordersAndEdges, sResult, L"w:alignBordersAndEdges" ) //Page Information RENDER_OOX_BOOL( m_bGutterAtTop, sResult, L"w:gutterAtTop" ) RENDER_OOX_BOOL( m_bSwitchMargins, sResult, L"w:mirrorMargins" ) RENDER_OOX_BOOL( m_bFacingPage, sResult, L"w:evenAndOddHeaders" ) //Compatibility Options RENDER_OOX_BOOL( m_nDisplayBackground, sResult, L"w:displayBackgroundShape" ); //footnote, endnote property std::wstring sFootnoteProp; for (size_t i = 0; i < m_aSpecialFootnotes.size(); i++ ) { sFootnoteProp += L""; } if( PROP_DEF != m_nFootnoteNumberingFormat ) { sFootnoteProp += L""; } RENDER_OOX_INT( m_nFootnoteStart, sFootnoteProp, L"w:numStart" ); if( PROP_DEF != m_eFootnoteRestart ) { switch( m_eFootnoteRestart ) { case fr_EachPage: sFootnoteProp += L""; break; case fr_EachSection: sFootnoteProp += L""; break; case fr_Continuous: sFootnoteProp += L""; break; } } if( PROP_DEF != m_eFootnotePlacement ) { switch( m_eFootnotePlacement ) { case fp_EndSection: sFootnoteProp += L""; break; case fp_EndDocument: sFootnoteProp += L""; break; case fp_BeneathText: sFootnoteProp += L""; break; case fp_BottomPage: sFootnoteProp += L""; break; } } if( !sFootnoteProp.empty() && !m_aSpecialFootnotes.empty()) sResult += L"" + sFootnoteProp + L""; std::wstring sEndnoteProp; //todooo проверить id for (size_t i = 0; i < m_aSpecialEndnotes.size(); i++ ) { sEndnoteProp += L""; } if( PROP_DEF != m_nFootnoteNumberingFormat ) { sFootnoteProp += L""; } RENDER_OOX_INT( m_nEndnoteStart, sEndnoteProp, L"w:numStart" ); if( PROP_DEF != m_eEndnoteRestart ) { switch( m_eEndnoteRestart ) { case fr_EachSection: sEndnoteProp += L""; break; case fr_Continuous: sEndnoteProp += L""; break; } } if( PROP_DEF != m_eEndnotePlacement ) { switch( m_eEndnotePlacement ) { case fp_EndSection: sEndnoteProp += L""; break; case fp_EndDocument: sEndnoteProp += L""; break; case fp_BeneathText: sEndnoteProp += L""; break; case fp_BottomPage: sEndnoteProp += L""; break; } } if( !sEndnoteProp.empty() && !m_aSpecialEndnotes.empty()) sResult += L"" + sEndnoteProp + L""; std::wstring sCompat = L""; if( 1 != m_bHtmlAutoSpace ) sCompat += L""; if( 0 == m_bUseTabAlignment ) sCompat += L""; if( !sCompat.empty() ) { sResult += L"" + sCompat + L""; } return sResult; } std::wstring RtfSectionProperty::RenderToRtf(RenderParameter oRenderParameter) { std::wstring sResult; if( RENDER_TO_OOX_PARAM_FIRST_SECTION == oRenderParameter.nType ) //Пишем как свойства документа { //Page Information RENDER_RTF_INT ( m_nPageWidth, sResult, L"paperw" ) RENDER_RTF_INT ( m_nPageHeight, sResult, L"paperh" ) RENDER_RTF_INT ( m_nMarginLeft, sResult, L"margl" ) RENDER_RTF_INT ( m_nMarginRight, sResult, L"margr" ) RENDER_RTF_INT ( m_nMarginTop, sResult, L"margt" ) RENDER_RTF_INT ( m_nMarginBottom, sResult, L"margb" ) RENDER_RTF_INT ( m_nGutterMarginWidth, sResult, L"gutter" ) RENDER_RTF_BOOL ( m_bSwitchMargin, sResult, L"margmirror" ) RENDER_RTF_BOOL ( m_bLandscapeFormat, sResult, L"landscape" ) } sResult += L"\\sectd"; RENDER_RTF_BOOL ( m_bBidi, sResult, L"endnhere" ) RENDER_RTF_INT ( m_nPaperSourceFirst, sResult, L"binfsxn" ) RENDER_RTF_INT ( m_nPaperSourceOther, sResult, L"binsxn" ) RENDER_RTF_BOOL ( m_bRtlGutter, sResult, L"rtlgutter" ) RENDER_RTF_BOOL ( m_bEndnotes, sResult, L"endnhere" ) RENDER_RTF_INT ( m_nStyle, sResult, L"ds" ) //Section Break switch( m_eSectionBreak ) { case sb_sbknone: sResult += L"\\sbknone"; break; case sb_sbkcol: sResult += L"\\sbkcol"; break; case sb_sbkpage: sResult += L"\\sbkpage"; break; case sb_sbkeven: sResult += L"\\sbkeven"; break; case sb_sbkodd: sResult += L"\\sbkodd"; break; } //Columns RENDER_RTF_INT ( m_nColumnNumber, sResult, L"cols" ) RENDER_RTF_INT ( m_nColumnSpace, sResult, L"colsx" ) RENDER_RTF_BOOL ( m_bColumnLineBetween, sResult, L"linebetcol" ) if (m_nColumnNumber > 1) { for( size_t i = 0; i < m_oCollumnProperty.m_aCollumnProperty.size(); i++ ) { sResult += L"\\colno" + std::to_wstring( (int)i + 1 ); RENDER_RTF_INT( m_oCollumnProperty.m_aCollumnProperty[i].m_nColumnSpaceToRightOfCol, sResult, L"colsr" ) RENDER_RTF_INT( m_oCollumnProperty.m_aCollumnProperty[i].m_nColumnWidth, sResult, L"colw" ) } } //Footnotes and Endnotes switch( m_eFootnotesJust ) { case fj_sftntj: sResult += L"\\sftntj"; break; case fj_sftnbj: sResult += L"\\sftnbj"; break; } RENDER_RTF_INT( m_nFootnotesStart, sResult, L"sftnstart" ) switch( m_eFootnotesRestart ) { case fr_sftnrstpg: sResult += L"\\sftnrstpg"; break; case fr_sftnrestart: sResult += L"\\sftnrestart"; break; case fr_sftnrstcont: sResult += L"\\sftnrstcont"; break; } switch( m_eFootnotesFormat ) { case ff_sftnnar: sResult += L"\\sftnnar"; break; case ff_sftnnalc: sResult += L"\\sftnnalc"; break; case ff_sftnnauc: sResult += L"\\sftnnauc"; break; case ff_sftnnrlc: sResult += L"\\sftnnrlc"; break; case ff_sftnnruc: sResult += L"\\sftnnruc"; break; case ff_sftnnchi: sResult += L"\\sftnnchi"; break; case ff_sftnnchosung: sResult += L"\\sftnnchosung"; break; case ff_sftnncnum: sResult += L"\\sftnncnum"; break; case ff_sftnndbnum: sResult += L"\\sftnndbnum"; break; case ff_sftnndbnumd: sResult += L"\\sftnndbnumd"; break; case ff_sftnndbnumt: sResult += L"\\sftnndbnumt"; break; case ff_sftnndbnumk: sResult += L"\\sftnndbnumk"; break; case ff_sftnndbar: sResult += L"\\sftnndbar"; break; case ff_sftnnganada: sResult += L"\\sftnnganada"; break; case ff_sftnngbnum: sResult += L"\\sftnngbnum"; break; case ff_sftnngbnumd: sResult += L"\\sftnngbnumd"; break; case ff_sftnngbnuml: sResult += L"\\sftnngbnuml"; break; case ff_sftnngbnumk: sResult += L"\\sftnngbnumk"; break; case ff_sftnnzodiac: sResult += L"\\sftnnzodiac"; break; case ff_sftnnzodiacd: sResult += L"\\sftnnzodiacd"; break; case ff_sftnnzodiacl: sResult += L"\\sftnnzodiacl"; break; } RENDER_RTF_INT( m_nEndnotesStart, sResult, L"saftnstart" ) switch( m_eEndnotesRestart ) { case er_saftnrestart: sResult += L"\\saftnrestart"; break; case er_saftnrstcont: sResult += L"\\saftnrstcont"; break; } switch( m_eEndnotesFormat ) { case ef_saftnnar: sResult += L"\\saftnnar"; break; case ef_saftnnalc: sResult += L"\\saftnnalc"; break; case ef_saftnnauc: sResult += L"\\saftnnauc"; break; case ef_saftnnrlc: sResult += L"\\saftnnrlc"; break; case ef_saftnnruc: sResult += L"\\saftnnruc"; break; case ef_saftnnchi: sResult += L"\\saftnnchi"; break; case ef_saftnnchosung: sResult += L"\\saftnnchosung"; break; case ef_saftnncnum: sResult += L"\\saftnncnum"; break; case ef_saftnndbnum: sResult += L"\\saftnndbnum"; break; case ef_saftnndbnumd: sResult += L"\\saftnndbnumd"; break; case ef_saftnndbnumt: sResult += L"\\saftnndbnumt"; break; case ef_saftnndbnumk: sResult += L"\\saftnndbnumk"; break; case ef_saftnndbar: sResult += L"\\saftnndbar"; break; case ef_saftnnganada: sResult += L"\\saftnnganada"; break; case ef_saftnngbnum: sResult += L"\\saftnngbnum"; break; case ef_saftnngbnumd: sResult += L"\\saftnngbnumd"; break; case ef_saftnngbnuml: sResult += L"\\saftnngbnuml"; break; case ef_saftnngbnumk: sResult += L"\\saftnngbnumk"; break; case ef_saftnnzodiac: sResult += L"\\saftnnzodiac"; break; case ef_saftnnzodiacd: sResult += L"\\saftnnzodiacd"; break; case ef_saftnnzodiacl: sResult += L"\\saftnnzodiacl"; break; } //Line Numbering RENDER_RTF_INT( m_nLineModulus, sResult, L"linemod" ) RENDER_RTF_INT( m_nLineX, sResult, L"linex" ) RENDER_RTF_INT( m_nLineStart, sResult, L"linestarts" ) switch( m_eLineNumberRestart ) { case lnr_linerestart: sResult += L"\\linerestart";break; case lnr_lineppage: sResult += L"\\lineppage"; break; case lnr_linecont: sResult += L"\\linecont"; break; } if( RENDER_TO_OOX_PARAM_FIRST_SECTION != oRenderParameter.nType )//Пишем как свойства секции { //Page Information RENDER_RTF_INT( m_nPageWidth, sResult, L"pgwsxn" ) RENDER_RTF_INT( m_nPageHeight, sResult, L"pghsxn" ) RENDER_RTF_INT( m_nMarginLeft, sResult, L"marglsxn" ) RENDER_RTF_INT( m_nMarginRight, sResult, L"margrsxn" ) RENDER_RTF_INT( m_nMarginTop, sResult, L"margtsxn" ) RENDER_RTF_INT( m_nMarginBottom, sResult, L"margbsxn" ) RENDER_RTF_INT( m_nGutterMarginWidth, sResult, L"guttersxn" ) RENDER_RTF_BOOL( m_bSwitchMargin, sResult, L"margmirsxn" ) RENDER_RTF_BOOL( m_bLandscapeFormat, sResult, L"lndscpsxn" ) } RENDER_RTF_BOOL ( m_bTitlePage, sResult, L"titlepg" ) RENDER_RTF_INT ( m_nHeaderTop, sResult, L"headery" ) RENDER_RTF_INT ( m_nFooterBottom, sResult, L"footery" ) //Page Numbers RENDER_RTF_INT ( m_nPageNumberStart, sResult, L"pgnstarts" ) RENDER_RTF_BOOL ( m_bPageNumberContinuos, sResult, L"pgncont" ) RENDER_RTF_BOOL ( m_bPageNumberRestart, sResult, L"pgnrestart" ) RENDER_RTF_INT ( m_nPageNumberX, sResult, L"pgnx" ) RENDER_RTF_INT ( m_nPageNumberY, sResult, L"pgny" ) switch( m_ePageNumberFormat ) { case pnf_pgndec: sResult += L"\\pgndec"; break; case pnf_pgnucrm: sResult += L"\\pgnucrm"; break; case pnf_pgnlcrm: sResult += L"\\pgnlcrm"; break; } //Vertical Alignment switch( m_eVerticalAlignment ) { case va_vertalt: sResult += L"\\vertalt"; break; case va_vertalb: sResult += L"\\vertalb"; break; case va_vertalc: sResult += L"\\vertalc"; break; case va_vertalj: sResult += L"\\vertalj"; break; } //Text Flow RENDER_RTF_INT( m_nTextFollow, sResult, L"stextflow" ) //Page Borders if( true == m_oBorderLeft.IsValid() ) { sResult += L"\\pgbrdrl"; sResult += m_oBorderLeft.RenderToRtf( oRenderParameter ); } if( true == m_oBorderTop.IsValid() ) { sResult += L"\\pgbrdrt"; sResult += m_oBorderTop.RenderToRtf( oRenderParameter ); } if( true == m_oBorderRight.IsValid() ) { sResult += L"\\pgbrdrr"; sResult += m_oBorderRight.RenderToRtf( oRenderParameter ); } if( true == m_oBorderBottom.IsValid() ) { sResult += L"\\pgbrdrb"; sResult += m_oBorderBottom.RenderToRtf( oRenderParameter ); } RENDER_RTF_INT( m_nBorderArt, sResult, L"brdrart" ) RENDER_RTF_INT( m_nBorderMeasure, sResult, L"pgbrdropt" ) RENDER_RTF_INT( m_nBorderAlign, sResult, L"pgbrdrsnap" ) //footer - header if( 0 != m_oHeaderRight ) { sResult += L"{\\headerr"; sResult += m_oHeaderRight->RenderToRtf( oRenderParameter ); sResult += L"\\par"; sResult += L"}"; } if( 0 != m_oHeaderLeft ) { sResult += L"{\\headerl"; sResult += m_oHeaderLeft->RenderToRtf( oRenderParameter ); sResult += L"\\par"; sResult += L"}"; } if( 0 != m_oHeaderFirst ) { sResult += L"{\\headerf"; sResult += m_oHeaderFirst->RenderToRtf( oRenderParameter ); sResult += L"\\par"; sResult += L"}"; } if( 0 != m_oFooterRight ) { sResult += L"{\\footerr"; sResult += m_oFooterRight->RenderToRtf( oRenderParameter ); sResult += L"\\par"; sResult += L"}"; } if( 0 != m_oFooterLeft ) { sResult += L"{\\footerl"; sResult += m_oFooterLeft->RenderToRtf( oRenderParameter ); sResult += L"\\par"; sResult += L"}"; } if( 0 != m_oFooterFirst ) { sResult += L"{\\footerf"; sResult += m_oFooterFirst->RenderToRtf( oRenderParameter ); sResult += L"\\par"; sResult += L"}"; } RENDER_RTF_INT( m_nSrAuth, sResult, L"srauth" ) RENDER_RTF_INT( m_nSrDate, sResult, L"srdate" ) if (m_pOldSectionProp) { sResult += L"{\\*\\oldpprops\\pard"; sResult += m_pOldSectionProp->RenderToRtf(oRenderParameter); sResult += L"}"; } return sResult; } std::wstring RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter) { RtfDocument* poRtfDocument = static_cast (oRenderParameter.poDocument); OOXWriter* poOOXWriter = static_cast (oRenderParameter.poWriter); std::wstring sResult; sResult += L""; if( 1 == m_bBidi ) sResult += L""; std::wstring sPaperSource; if( PROP_DEF != m_nPaperSourceFirst ) sPaperSource += L" w:first=\"" + std::to_wstring(m_nPaperSourceFirst) + L"\""; if( PROP_DEF != m_nPaperSourceFirst ) sPaperSource += L" w:other=\"" + std::to_wstring(m_nPaperSourceOther) + L"\""; if( !sPaperSource.empty() ) sResult += L""; if( 1 == m_bRtlGutter ) sResult += L""; //Section Break switch( m_eSectionBreak ) { case sb_sbkcol: sResult += L""; break; case sb_sbkpage: sResult += L""; break; case sb_sbkeven: sResult += L""; break; case sb_sbkodd: sResult += L""; break; case sb_sbknone: default: sResult += L""; break; } //Columns if( PROP_DEF != m_nColumnNumber ) { std::wstring sCollumnFormating; bool bEqualWidth = false; if( m_nColumnNumber != m_oCollumnProperty.m_aCollumnProperty.size() ) bEqualWidth = true; else for (size_t i = 0; i < m_oCollumnProperty.m_aCollumnProperty.size(); i++ ) { if( PROP_DEF == m_oCollumnProperty.m_aCollumnProperty[i].m_nColumnWidth ) { bEqualWidth = true; break; } } sCollumnFormating += L" 1) { if (PROP_DEF != m_bColumnLineBetween) sCollumnFormating += std::wstring(L" w:sep=\"") + (m_bColumnLineBetween ? L"1" : L"0") + L"\""; if( true == bEqualWidth ) sCollumnFormating += L" w:equalWidth=\"true\"/>"; else { sCollumnFormating += L" w:equalWidth=\"false\">"; for (size_t i = 0; i < m_oCollumnProperty.m_aCollumnProperty.size(); i++ ) { sCollumnFormating += L""; } sCollumnFormating += L""; } } else { sCollumnFormating += L"/>"; } if( false == sCollumnFormating.empty() ) sResult += sCollumnFormating; } //Footnotes and Endnotes std::wstring sFootnotesProp; switch( m_eFootnotesJust ) { case fj_sftntj: sFootnotesProp += L""; break; case fj_sftnbj: sFootnotesProp += L""; break; } RENDER_OOX_INT( m_nFootnotesStart, sFootnotesProp, L"w:numStart" ) switch( m_eFootnotesRestart ) { case fr_sftnrstpg: sFootnotesProp += L""; break; case fr_sftnrestart: sFootnotesProp += L""; break; case fr_sftnrstcont: sFootnotesProp += L""; break; } switch( m_eFootnotesFormat ) { case ff_sftnnar: sFootnotesProp += L""; break; case ff_sftnnalc: sFootnotesProp += L""; break; case ff_sftnnauc: sFootnotesProp += L""; break; case ff_sftnnrlc: sFootnotesProp += L""; break; case ff_sftnnruc: sFootnotesProp += L""; break; case ff_sftnnchi: sFootnotesProp += L""; break; case ff_sftnnchosung: sFootnotesProp += L""; break; case ff_sftnncnum: sFootnotesProp += L""; break; case ff_sftnndbnum: sFootnotesProp += L""; break; case ff_sftnndbnumd: sFootnotesProp += L""; break; case ff_sftnndbnumt: sFootnotesProp += L""; break; case ff_sftnndbnumk: sFootnotesProp += L""; break; case ff_sftnndbar: sFootnotesProp += L""; break; case ff_sftnnganada: sFootnotesProp += L""; break; case ff_sftnngbnum: sFootnotesProp += L""; break; case ff_sftnngbnumd: sFootnotesProp += L""; break; case ff_sftnngbnuml: sFootnotesProp += L""; break; case ff_sftnngbnumk: sFootnotesProp += L""; break; case ff_sftnnzodiac: sFootnotesProp += L""; break; case ff_sftnnzodiacd: sFootnotesProp += L""; break; case ff_sftnnzodiacl: sFootnotesProp += L""; break; } if(!sFootnotesProp.empty() ) sResult += L"" + sFootnotesProp + L""; std::wstring sEndnotesProp; RENDER_OOX_INT( m_nEndnotesStart, sEndnotesProp, L"w:numStart" ) switch( m_eEndnotesRestart ) { case er_saftnrestart: sEndnotesProp += L""; break; case er_saftnrstcont: sEndnotesProp += L""; break; } switch( m_eEndnotesFormat ) { case ef_saftnnar: sEndnotesProp += L""; break; case ef_saftnnalc: sEndnotesProp += L""; break; case ef_saftnnauc: sEndnotesProp += L""; break; case ef_saftnnrlc: sEndnotesProp += L""; break; case ef_saftnnruc: sEndnotesProp += L""; break; case ef_saftnnchi: sEndnotesProp += L""; break; case ef_saftnnchosung: sEndnotesProp += L""; break; case ef_saftnncnum: sEndnotesProp += L""; break; case ef_saftnndbnum: sEndnotesProp += L""; break; case ef_saftnndbnumd: sEndnotesProp += L""; break; case ef_saftnndbnumt: sEndnotesProp += L""; break; case ef_saftnndbnumk: sEndnotesProp += L""; break; case ef_saftnndbar: sEndnotesProp += L""; break; case ef_saftnnganada: sEndnotesProp += L""; break; case ef_saftnngbnum: sEndnotesProp += L""; break; case ef_saftnngbnumd: sEndnotesProp += L""; break; case ef_saftnngbnuml: sEndnotesProp += L""; break; case ef_saftnngbnumk: sEndnotesProp += L""; break; case ef_saftnnzodiac: sEndnotesProp += L""; break; case ef_saftnnzodiacd: sEndnotesProp += L""; break; case ef_saftnnzodiacl: sEndnotesProp += L""; break; } if(!sEndnotesProp.empty() ) sResult += L"" + sEndnotesProp + L""; //Line Numbering std::wstring sLineNumbering; if( PROP_DEF != m_nLineModulus ) sLineNumbering += L" w:countBy=\"" + std::to_wstring(m_nLineModulus) + L"\""; if( PROP_DEF != m_nLineX && 0 != m_nLineX) sLineNumbering += L" w:distance=\"" + std::to_wstring(m_nLineX) + L"\""; if( PROP_DEF != m_nLineStart ) sLineNumbering += L" w:start=\"" + std::to_wstring(m_nLineStart) + L"\""; switch( m_eLineNumberRestart ) { case lnr_linerestart: sLineNumbering += L" w:restart=\"newSection\""; break; case lnr_lineppage: sLineNumbering += L" w:restart=\"newPage\""; break; case lnr_linecont: sLineNumbering += L" w:restart=\"continuous\""; break; } if( false == sLineNumbering.empty() ) sResult += L""; //Page Information std::wstring sPageSize; if( PROP_DEF != m_nPageWidth ) sPageSize += L" w:w=\"" + std::to_wstring(m_nPageWidth) + L"\""; if( PROP_DEF != m_nPageHeight ) sPageSize += L" w:h=\"" + std::to_wstring(m_nPageHeight) + L"\""; if( 1 == m_bLandscapeFormat ) sPageSize += L" w:orient=\"landscape\""; if( false == sPageSize.empty() ) sResult += L""; std::wstring sMargin; if( PROP_DEF != m_nMarginLeft ) sMargin += L" w:left=\"" + std::to_wstring(m_nMarginLeft) + L"\""; if( PROP_DEF != m_nMarginRight ) sMargin += L" w:right=\"" + std::to_wstring(m_nMarginRight) + L"\""; if( PROP_DEF != m_nMarginTop ) sMargin += L" w:top=\"" + std::to_wstring(m_nMarginTop) + L"\""; if( PROP_DEF != m_nMarginBottom ) sMargin += L" w:bottom=\"" + std::to_wstring(m_nMarginBottom) + L"\""; if( PROP_DEF != m_nGutterMarginWidth ) sMargin += L" w:gutter=\"" + std::to_wstring(m_nGutterMarginWidth) + L"\""; if( PROP_DEF != m_nHeaderTop ) sMargin += L" w:header=\"" + std::to_wstring(m_nHeaderTop) + L"\""; if( PROP_DEF != m_nFooterBottom ) sMargin += L" w:footer=\"" + std::to_wstring(m_nFooterBottom) + L"\""; if( false == sMargin.empty() ) sResult += L""; if( 1 == m_bTitlePage ) sResult += L""; //Page Numbers std::wstring sPageNumber; if( PROP_DEF != m_nPageNumberStart ) sPageNumber += L" w:start=\"" + std::to_wstring(m_nPageNumberStart) + L"\""; if( false == sPageNumber.empty() ) sResult += L""; //Vertical Alignment switch( m_eVerticalAlignment ) { case va_vertalt: sResult += L""; break; case va_vertalb: sResult += L""; break; case va_vertalc: sResult += L""; break; case va_vertalj: sResult += L""; break; } //Text Flow switch( m_nTextFollow ) { case 0: sResult += L""; break; case 1: sResult += L""; break; case 2: sResult += L""; break; case 3: sResult += L""; break; case 4: sResult += L""; break; case 5: sResult += L""; break; } //Page Borders std::wstring sBorders; RenderParameter oNewParam = oRenderParameter; oNewParam.nType = RENDER_TO_OOX_PARAM_BORDER_TAG; if( true == m_oBorderLeft.IsValid() ) { oNewParam.sValue = L"w:left"; sBorders += m_oBorderLeft.RenderToOOX( oNewParam ); } if( true == m_oBorderTop.IsValid() ) { oNewParam.sValue = L"w:top"; sBorders += m_oBorderTop.RenderToOOX( oNewParam ) ; } if( true == m_oBorderRight.IsValid() ) { oNewParam.sValue = L"w:right"; sBorders += m_oBorderRight.RenderToOOX( oNewParam ); } if( true == m_oBorderBottom.IsValid() ) { oNewParam.sValue = L"w:bottom"; sBorders += m_oBorderBottom.RenderToOOX( oNewParam ); } if( false == sBorders.empty() ) { sResult += L""; sResult += sBorders; sResult += L""; } if( 0 != m_oHeaderLeft ) { std::wstring sId = SaveFile(m_oHeaderLeft,oRenderParameter, true); sResult += L""; } if( 0 != m_oHeaderFirst ) { std::wstring sId = SaveFile(m_oHeaderFirst,oRenderParameter, true); sResult += L""; } if( 0 != m_oHeaderRight ) { std::wstring sId = SaveFile(m_oHeaderRight,oRenderParameter, true); sResult += L""; } if( 0 != m_oFooterLeft ) { std::wstring sId = SaveFile(m_oFooterLeft,oRenderParameter, false); sResult += L""; } if( 0 != m_oFooterFirst ) { std::wstring sId = SaveFile(m_oFooterFirst,oRenderParameter, false); sResult += L""; } if( 0 != m_oFooterRight ) { std::wstring sId = SaveFile(m_oFooterRight,oRenderParameter, false); sResult += L""; } if (m_pOldSectionProp) { std::wstring sAuthor = poRtfDocument->m_oRevisionTable.GetAuthor(m_nSrAuth); std::wstring sDate(RtfUtility::convertDateTime(m_nSrDate).c_str()); RenderParameter oRenderParameterNew = oRenderParameter; oRenderParameterNew.nType = RENDER_TO_OOX_PARAM_UNKNOWN; sResult += L"m_nCurTrackChangesId++).c_str() + L"\">"; sResult += m_pOldSectionProp->RenderToOOX(oRenderParameterNew); sResult += L""; } sResult += L""; return sResult; } std::wstring RtfSectionProperty::SaveFile( TextItemContainerPtr oTarget, RenderParameter oRenderParameter, bool bHeader) { OOXWriter* poOOXWriter = static_cast ( oRenderParameter.poWriter ); RtfDocument* poRtfDocument = static_cast ( oRenderParameter.poDocument ); std::wstring sFilename; if ( true == bHeader ) sFilename += L"header" + std::to_wstring(poRtfDocument->m_oIdGenerator.Generate_HeaderNumber()) + L".xml"; else sFilename += L"footer" + std::to_wstring(poRtfDocument->m_oIdGenerator.Generate_FooterNumber()) + L".xml"; std::wstring sContent; std::wstring sRootName; if( true == bHeader ) sRootName = L"w:hdr"; else sRootName = L"w:ftr"; sContent += L"\n"; sContent += L"<"; sContent += sRootName; sContent += L" \ xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" \ xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" \ xmlns:v=\"urn:schemas-microsoft-com:vml\" \ xmlns:o=\"urn:schemas-microsoft-com:office:office\" \ xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" \ xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" \ xmlns:w10=\"urn:schemas-microsoft-com:office:word\" \ xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" \ xmlns:wpc=\"http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas\" \ xmlns:cx=\"http://schemas.microsoft.com/office/drawing/2014/chartex\" \ xmlns:cx1=\"http://schemas.microsoft.com/office/drawing/2015/9/8/chartex\" \ xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \ xmlns:wp14=\"http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing\" \ xmlns:w14=\"http://schemas.microsoft.com/office/word/2010/wordml\" \ xmlns:w15=\"http://schemas.microsoft.com/office/word/2012/wordml\" \ xmlns:w16se=\"http://schemas.microsoft.com/office/word/2015/wordml/symex\" \ xmlns:wpg=\"http://schemas.microsoft.com/office/word/2010/wordprocessingGroup\" \ xmlns:wpi=\"http://schemas.microsoft.com/office/word/2010/wordprocessingInk\" \ xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\" \ xmlns:wps=\"http://schemas.microsoft.com/office/word/2010/wordprocessingShape\" \ mc:Ignorable=\"w14 w15 w16se wp14\">"; RenderParameter oNewParameter = oRenderParameter; OOXRelsWriterPtr oNewRelsWr ( new OOXRelsWriter( sFilename, *poRtfDocument ) ); poOOXWriter->m_oCustomRelsWriter.push_back( oNewRelsWr ); oNewParameter.poRels = oNewRelsWr.get(); sContent += oTarget->RenderToOOX(oNewParameter); sContent += L""; std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sContent); std::wstring sFilePath = poOOXWriter->m_sTargetFolder + FILE_SEPARATOR_STR + L"word" + FILE_SEPARATOR_STR + sFilename; NSFile::CFileBinary file; if (file.CreateFile(sFilePath) == true) { file.WriteFile((void*)sXmlUTF.c_str(), (DWORD)sXmlUTF.length()); file.CloseFile(); } std::wstring sContentTarget = L"/word/" + sFilename; std::wstring srID; if( true == bHeader ) { poOOXWriter->m_oContentTypes.AddContent( L"application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml", sContentTarget); srID = poOOXWriter->m_oDocRels.AddRelationship( L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/header", sFilename ); } else { poOOXWriter->m_oContentTypes.AddContent( L"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml", sContentTarget); srID = poOOXWriter->m_oDocRels.AddRelationship( L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer", sFilename ); } return srID; } RtfSectionProperty::RtfSectionProperty() { SetDefault(); //footer - header m_oHeaderLeft = TextItemContainerPtr(); m_oHeaderFirst = TextItemContainerPtr(); m_oHeaderRight = TextItemContainerPtr(); m_oFooterLeft = TextItemContainerPtr(); m_oFooterFirst = TextItemContainerPtr(); m_oFooterRight = TextItemContainerPtr(); } int RtfSectionProperty::GetType() { return TYPE_RTF_PROPERTY_SECTION; } void RtfSectionProperty::SetDefaultRtf() { SetDefault(); DEFAULT_PROPERTY_DEF( m_eSectionBreak, sb_sbkpage ) DEFAULT_PROPERTY_DEF( m_nColumnSpace, 720); } void RtfSectionProperty::SetDefaultOOX() { SetDefault(); m_nPageWidth = 11906; m_nPageHeight = 16838; m_nMarginLeft = 210; m_nMarginRight = 215; m_nMarginTop = 204; m_nMarginBottom = 204; m_nHeaderTop = 709; m_nFooterBottom = 709; m_nGutterMarginWidth = 0; m_nColumnSpace = 708; } void RtfSectionProperty::SetDefault() { DEFAULT_PROPERTY ( m_bBidi ) DEFAULT_PROPERTY ( m_nPaperSourceFirst ) DEFAULT_PROPERTY ( m_nPaperSourceOther ) DEFAULT_PROPERTY ( m_bRtlGutter ) DEFAULT_PROPERTY ( m_bEndnotes ) DEFAULT_PROPERTY ( m_nStyle ) DEFAULT_PROPERTY_DEF( m_eSectionBreak, sb_none ) //Columns m_nColumnNumber = 1; DEFAULT_PROPERTY ( m_nColumnSpace ) DEFAULT_PROPERTY ( m_bColumnLineBetween ) //Footnotes and Endnotes DEFAULT_PROPERTY_DEF( m_eFootnotesJust, fj_none ) DEFAULT_PROPERTY ( m_nFootnotesStart ) DEFAULT_PROPERTY_DEF( m_eFootnotesRestart, fr_none ) DEFAULT_PROPERTY_DEF( m_eFootnotesFormat, ff_none ) DEFAULT_PROPERTY ( m_nEndnotesStart ) DEFAULT_PROPERTY_DEF( m_eEndnotesRestart, er_none ) DEFAULT_PROPERTY_DEF( m_eEndnotesFormat, ef_none ) //Line Numbering DEFAULT_PROPERTY ( m_nLineModulus ) DEFAULT_PROPERTY ( m_nLineX ) DEFAULT_PROPERTY ( m_nLineStart ) DEFAULT_PROPERTY_DEF( m_eLineNumberRestart, lnr_none ) //Page Information DEFAULT_PROPERTY ( m_nPageWidth ) DEFAULT_PROPERTY ( m_nPageHeight ) DEFAULT_PROPERTY ( m_nMarginLeft ) DEFAULT_PROPERTY ( m_nMarginRight ) DEFAULT_PROPERTY ( m_nMarginTop ) DEFAULT_PROPERTY ( m_nMarginBottom ) DEFAULT_PROPERTY ( m_nGutterMarginWidth ) DEFAULT_PROPERTY ( m_bSwitchMargin ) DEFAULT_PROPERTY ( m_bLandscapeFormat ) DEFAULT_PROPERTY ( m_bTitlePage ) DEFAULT_PROPERTY_DEF( m_nHeaderTop, 720 ) DEFAULT_PROPERTY_DEF( m_nFooterBottom, 720 ) //Page Numbers DEFAULT_PROPERTY ( m_nPageNumberStart ) DEFAULT_PROPERTY ( m_bPageNumberContinuos ) DEFAULT_PROPERTY ( m_bPageNumberRestart ) DEFAULT_PROPERTY ( m_nPageNumberX ) DEFAULT_PROPERTY ( m_nPageNumberY ) DEFAULT_PROPERTY_DEF( m_ePageNumberFormat, pnf_none ) //Vertical Alignment DEFAULT_PROPERTY_DEF( m_eVerticalAlignment, va_none ) //Text Flow DEFAULT_PROPERTY ( m_nTextFollow ) //Page Borders m_oBorderLeft.SetDefault(); m_oBorderTop.SetDefault(); m_oBorderRight.SetDefault(); m_oBorderBottom.SetDefault(); DEFAULT_PROPERTY ( m_nBorderArt ) DEFAULT_PROPERTY ( m_nBorderMeasure ) DEFAULT_PROPERTY ( m_nBorderAlign ) //footer - header надо обнулять вручную //m_oHeaderLeft = TextItemContainerPtr(); //m_oHeaderFirst = TextItemContainerPtr(); //m_oHeaderRight = TextItemContainerPtr(); //m_oFooterLeft = TextItemContainerPtr(); //m_oFooterFirst = TextItemContainerPtr(); //m_oFooterRight = TextItemContainerPtr(); DEFAULT_PROPERTY( m_nSrAuth) DEFAULT_PROPERTY( m_nSrDate) m_pOldSectionProp = RtfSectionPropertyPtr(); } RtfSectionProperty::ColumnProperty::ColumnProperty() { } RtfSectionProperty::ColumnProperty::ColumnProperty( const RtfSectionProperty::ColumnProperty& oColumnProperty ) { (*this) = oColumnProperty; } RtfSectionProperty::ColumnProperty& RtfSectionProperty::ColumnProperty::operator=( const RtfSectionProperty::ColumnProperty& oColumnProperty ) { m_aCollumnProperty.clear(); m_aCollumnProperty = oColumnProperty.m_aCollumnProperty ; return (*this); } void RtfSectionProperty::ColumnProperty::SetDefault() { m_aCollumnProperty.clear(); } RtfSection::RtfSection() { m_bFinalize = false; } int RtfSection::GetType() { return TYPE_RTF_SECTION; } std::wstring RtfSection::RenderToRtf(RenderParameter oRenderParameter) { std::wstring sResult = m_oProperty.RenderToRtf( oRenderParameter ); if( RENDER_TO_RTF_PARAM_NO_SECT != oRenderParameter.nType ) sResult += L"\\sectd"; for( size_t i = 0; i < m_aArray.size(); i++ ) { sResult += m_aArray[i]->RenderToRtf( oRenderParameter ); } return sResult; } std::wstring RtfSection::RenderToOOX(RenderParameter oRenderParameter) { if (!m_bFinalize) return L""; m_bFinalize = false; // тут .. чтобы не повторилось при конвертации колонтитулов RenderParameter oNewParam = oRenderParameter; oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN; return m_oProperty.RenderToOOX(oNewParam); }