#include "Writer/OOXWriter.h" #include "IdGenerator.h" CString RtfDocumentProperty::RenderToRtf(RenderParameter oRenderParameter) { CString sResult; switch( m_eCodePage ) { case cp_ansi: { sResult.Append( _T("\\ansi") ); if( PROP_DEF != m_nAnsiCodePage ) sResult.AppendFormat( _T("\\ansicpg%d"), m_nAnsiCodePage ); break; } case cp_mac: sResult.Append( _T("\\mac") );break; case cp_pc: sResult.Append( _T("\\pc") );break; case cp_pca: sResult.Append( _T("\\pca") );break; } RENDER_RTF_BOOL( m_bHypCaps, sResult, _T("hyphcaps") ) RENDER_RTF_BOOL( m_bAutoHyp, sResult, _T("hyphauto") ) RENDER_RTF_INT( m_nMaxHypen, sResult, _T("hyphconsec") ) RENDER_RTF_INT( m_nHyphenationRight, sResult, _T("hyphhotz") ) RENDER_RTF_INT( m_nTabWidth, sResult, _T("deftab") ) RENDER_RTF_INT( m_nZoom, sResult, _T("viewscale") ) //Page Borders RENDER_RTF_BOOL( m_bDorderSurroundHeader, sResult, _T("pgbrdrhead") ) RENDER_RTF_BOOL( m_bDorderSurroundFotter, sResult, _T("pgbrdrfoot") ) RENDER_RTF_BOOL( m_bAlignBordersAndEdges, sResult, _T("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, _T("landscape") ) RENDER_RTF_BOOL( m_bGutterAtTop, sResult, _T("gutterprl") ) RENDER_RTF_BOOL( m_bSwitchMargins, sResult, _T("margmirror") ) RENDER_RTF_BOOL( m_bFacingPage, sResult, _T("facingp") ) //Compatibility Options RENDER_RTF_INT( m_nDisplayBackground, sResult, _T("viewbksp") ) RENDER_RTF_BOOL( m_bUseTabAlignment, sResult, _T("useltbaln") ) //footnote, endnote property if( PROP_DEF != m_nFootnoteNumberingFormat ) sResult.Append( _T("\\") + GetRtfFormat(m_nFootnoteNumberingFormat, true) ); RENDER_RTF_INT( m_nFootnoteStart, sResult, _T("ftnstart") ) if( PROP_DEF != m_eFootnoteRestart ) { switch( m_eFootnoteRestart ) { case fr_EachPage: sResult.Append( _T("ftnrstpg") ); break; case fr_EachSection: sResult.Append( _T("ftnrestart") ); break; case fr_Continuous: sResult.Append( _T("ftnrstcont") ); break; } } if( PROP_DEF != m_eFootnotePlacement ) { switch( m_eFootnoteRestart ) { case fp_EndSection: sResult.Append( _T("endnotes") ); break; case fp_EndDocument: sResult.Append( _T("enddoc") ); break; case fp_BeneathText: sResult.Append( _T("ftntj") ); break; case fp_BottomPage: sResult.Append( _T("ftnbj") ); break; } } if( PROP_DEF != m_nEndnoteNumberingFormat ) sResult.Append( _T("\\") + GetRtfFormat(m_nEndnoteNumberingFormat, false) ); RENDER_RTF_INT( m_nEndnoteStart, sResult, _T("aftnstart") ) if( PROP_DEF != m_eEndnoteRestart ) { switch( m_eEndnoteRestart ) { case er_EachSection: sResult.Append( _T("aftnrestart") ); break; case er_Continuous: sResult.Append( _T("aftnrstcont") ); break; } } if( PROP_DEF != m_eEndnotePlacement ) { switch( m_eEndnotePlacement ) { case ep_EndSection: sResult.Append( _T("aendnotes") ); break; case ep_EndDocument: sResult.Append( _T("aenddoc") ); break; case ep_BeneathText: sResult.Append( _T("aftntj") ); break; case ep_BottomPage: sResult.Append( _T("aftnbj") ); break; } } //для схоранения в RTF RENDER_RTF_INT( m_bSplitPageBrake, sResult, _T("spltpgpar") ) if( 0 != m_bHtmlAutoSpace ) sResult.Append( _T("\\htmautsp") ); return sResult; } CString RtfDocumentProperty::RenderToOOX(RenderParameter oRenderParameter) { CString sResult; if( PROP_DEF != m_bHypCaps ) { if( 0 == m_bHypCaps ) sResult.Append( _T("") ); else sResult.Append( _T("") ); } RENDER_OOX_BOOL( m_bAutoHyp, sResult, _T("w:autoHyphenation") ) RENDER_OOX_INT( m_nMaxHypen, sResult, _T("w:consecutiveHyphenLimit") ) RENDER_OOX_INT( m_nHyphenationRight, sResult, _T("w:hyphenationZone") ) RENDER_OOX_INT( m_nTabWidth, sResult, _T("w:defaultTabStop") ) if( PROP_DEF != m_nZoom ) sResult.AppendFormat( _T(""), m_nZoom ); //Page Borders if( PROP_DEF != m_bDorderSurroundHeader ) { if( 0 == m_bDorderSurroundHeader ) sResult.Append( _T("") ); else sResult.Append( _T("") ); } if( PROP_DEF != m_bDorderSurroundFotter ) { if( 0 == m_bDorderSurroundFotter ) sResult.Append( _T("") ); else sResult.Append( _T("") ); } RENDER_OOX_BOOL( m_bAlignBordersAndEdges, sResult, _T("w:alignBordersAndEdges") ) //Page Information RENDER_OOX_BOOL( m_bGutterAtTop, sResult, _T("w:gutterAtTop") ) RENDER_OOX_BOOL( m_bSwitchMargins, sResult, _T("w:mirrorMargins") ); RENDER_OOX_BOOL( m_bFacingPage, sResult, _T("w:evenAndOddHeaders") ); //Compatibility Options RENDER_OOX_BOOL( m_nDisplayBackground, sResult, _T("w:displayBackgroundShape") ); //footnote, endnote property CString sFootnoteProp; for( int i = 0; i < (int)m_aSpecialFootnotes.size(); i++ ) sFootnoteProp.AppendFormat( _T(""), m_aSpecialFootnotes[i] ); if( PROP_DEF != m_nFootnoteNumberingFormat ) sFootnoteProp.AppendFormat( _T(""), RtfListLevelProperty::GetFormat( m_nFootnoteNumberingFormat ).GetBuffer() ); RENDER_OOX_INT( m_nFootnoteStart, sFootnoteProp, _T("w:numStart") ); if( PROP_DEF != m_eFootnoteRestart ) { switch( m_eFootnoteRestart ) { case fr_EachPage: sFootnoteProp.Append( _T("") ); break; case fr_EachSection: sFootnoteProp.Append( _T("") ); break; case fr_Continuous: sFootnoteProp.Append( _T("") ); break; } } if( PROP_DEF != m_eFootnotePlacement ) { switch( m_eFootnotePlacement ) { case fp_EndSection: sFootnoteProp.Append( _T("") ); break; case fp_EndDocument: sFootnoteProp.Append( _T("") ); break; case fp_BeneathText: sFootnoteProp.Append( _T("") ); break; case fp_BottomPage: sFootnoteProp.Append( _T("") ); break; } } if( false == sFootnoteProp.IsEmpty() ) sResult.AppendFormat( _T("%ls"), sFootnoteProp.GetBuffer() ); CString sEndnoteProp; //todooo проверить id for( int i = 0; i < (int)m_aSpecialEndnotes.size(); i++ ) sEndnoteProp.AppendFormat( _T(""), m_aSpecialEndnotes[i] ); if( PROP_DEF != m_nFootnoteNumberingFormat ) sFootnoteProp.AppendFormat( _T(""), RtfListLevelProperty::GetFormat( m_nFootnoteNumberingFormat ).GetBuffer() ); RENDER_OOX_INT( m_nEndnoteStart, sEndnoteProp, _T("w:numStart") ); if( PROP_DEF != m_eEndnoteRestart ) { switch( m_eEndnoteRestart ) { case fr_EachSection: sEndnoteProp.Append( _T("") ); break; case fr_Continuous: sEndnoteProp.Append( _T("") ); break; } } if( PROP_DEF != m_eEndnotePlacement ) { switch( m_eEndnotePlacement ) { case fp_EndSection: sEndnoteProp.Append( _T("") ); break; case fp_EndDocument: sEndnoteProp.Append( _T("") ); break; case fp_BeneathText: sEndnoteProp.Append( _T("") ); break; case fp_BottomPage: sEndnoteProp.Append( _T("") ); break; } } if( false == sEndnoteProp.IsEmpty() ) sResult.AppendFormat( _T("%ls"), sEndnoteProp.GetBuffer() ); CString sCompat; if( 1 != m_bHtmlAutoSpace ) sCompat.Append( _T("") ); if( 0 == m_bUseTabAlignment ) sCompat.Append( _T("") ); if( false == sCompat.IsEmpty() ) sResult.AppendFormat( _T("%ls"), sCompat.GetBuffer() ); return sResult; } CString RtfSectionProperty::RenderToRtf(RenderParameter oRenderParameter) { CString sResult; if( RENDER_TO_OOX_PARAM_FIRST_SECTION == oRenderParameter.nType ) //Пишем как свойства документа { //Page Information RENDER_RTF_INT( m_nPageWidth, sResult, _T("paperw") ) RENDER_RTF_INT( m_nPageHeight, sResult, _T("paperh") ) RENDER_RTF_INT( m_nMarginLeft, sResult, _T("margl") ) RENDER_RTF_INT( m_nMarginRight, sResult, _T("margr") ) RENDER_RTF_INT( m_nMarginTop, sResult, _T("margt") ) RENDER_RTF_INT( m_nMarginBottom, sResult, _T("margb") ) RENDER_RTF_INT( m_nGutterMarginWidth, sResult, _T("gutter") ) RENDER_RTF_BOOL( m_bSwitchMargin, sResult, _T("margmirror") ) RENDER_RTF_BOOL( m_bLandscapeFormat, sResult, _T("landscape") ) } sResult.Append( _T("\\sectd") ); RENDER_RTF_BOOL( m_bBidi, sResult, _T("endnhere") ) RENDER_RTF_INT( m_nPaperSourceFirst, sResult, _T("binfsxn") ) RENDER_RTF_INT( m_nPaperSourceOther, sResult, _T("binsxn") ) RENDER_RTF_BOOL( m_bRtlGutter, sResult, _T("rtlgutter") ) RENDER_RTF_BOOL( m_bEndnotes, sResult, _T("endnhere") ) RENDER_RTF_INT( m_nStyle, sResult, _T("ds") ) //Section Break switch( m_eSectionBreak ) { case sb_sbknone: sResult.Append( _T("\\sbknone") );break; case sb_sbkcol: sResult.Append( _T("\\sbkcol") );break; case sb_sbkpage: sResult.Append( _T("\\sbkpage") );break; case sb_sbkeven: sResult.Append( _T("\\sbkeven") );break; case sb_sbkodd: sResult.Append( _T("\\sbkodd") );break; } //Columns RENDER_RTF_INT( m_nColumnNumber, sResult, _T("cols") ) RENDER_RTF_INT( m_nColumnSpace, sResult, _T("colsx") ) RENDER_RTF_BOOL( m_bColumnLineBetween, sResult, _T("linebetcol") ) int nCollFormCount = (int)m_oCollumnProperty.m_aCollumnProperty.size(); if( nCollFormCount > 0 ) { for( int i = 0; i < nCollFormCount; i++ ) { sResult.AppendFormat( _T("\\colno%d"), i + 1 ); RENDER_RTF_INT( m_oCollumnProperty.m_aCollumnProperty[i].m_nColumnSpaceToRightOfCol, sResult, _T("colsr") ) RENDER_RTF_INT( m_oCollumnProperty.m_aCollumnProperty[i].m_nColumnWidth, sResult, _T("colw") ) } } //Footnotes and Endnotes switch( m_eFootnotesJust ) { case fj_sftntj: sResult.Append( _T("\\sftntj") );break; case fj_sftnbj: sResult.Append( _T("\\sftnbj") );break; } RENDER_RTF_INT( m_nFootnotesStart, sResult, _T("sftnstart") ) switch( m_eFootnotesRestart ) { case fr_sftnrstpg: sResult.Append( _T("\\sftnrstpg") );break; case fr_sftnrestart: sResult.Append( _T("\\sftnrestart") );break; case fr_sftnrstcont: sResult.Append( _T("\\sftnrstcont") );break; } switch( m_eFootnotesFormat ) { case ff_sftnnar: sResult.Append( _T("\\sftnnar") );break; case ff_sftnnalc: sResult.Append( _T("\\sftnnalc") );break; case ff_sftnnauc: sResult.Append( _T("\\sftnnauc") );break; case ff_sftnnrlc: sResult.Append( _T("\\sftnnrlc") );break; case ff_sftnnruc: sResult.Append( _T("\\sftnnruc") );break; case ff_sftnnchi: sResult.Append( _T("\\sftnnchi") );break; case ff_sftnnchosung: sResult.Append( _T("\\sftnnchosung") );break; case ff_sftnncnum: sResult.Append( _T("\\sftnncnum") );break; case ff_sftnndbnum: sResult.Append( _T("\\sftnndbnum") );break; case ff_sftnndbnumd: sResult.Append( _T("\\sftnndbnumd") );break; case ff_sftnndbnumt: sResult.Append( _T("\\sftnndbnumt") );break; case ff_sftnndbnumk: sResult.Append( _T("\\sftnndbnumk") );break; case ff_sftnndbar: sResult.Append( _T("\\sftnndbar") );break; case ff_sftnnganada: sResult.Append( _T("\\sftnnganada") );break; case ff_sftnngbnum: sResult.Append( _T("\\sftnngbnum") );break; case ff_sftnngbnumd: sResult.Append( _T("\\sftnngbnumd") );break; case ff_sftnngbnuml: sResult.Append( _T("\\sftnngbnuml") );break; case ff_sftnngbnumk: sResult.Append( _T("\\sftnngbnumk") );break; case ff_sftnnzodiac: sResult.Append( _T("\\sftnnzodiac") );break; case ff_sftnnzodiacd: sResult.Append( _T("\\sftnnzodiacd") );break; case ff_sftnnzodiacl: sResult.Append( _T("\\sftnnzodiacl") );break; } RENDER_RTF_INT( m_nEndnotesStart, sResult, _T("saftnstart") ) switch( m_eEndnotesRestart ) { case er_saftnrestart: sResult.Append( _T("\\saftnrestart") );break; case er_saftnrstcont: sResult.Append( _T("\\saftnrstcont") );break; } switch( m_eEndnotesFormat ) { case ef_saftnnar: sResult.Append( _T("\\saftnnar") );break; case ef_saftnnalc: sResult.Append( _T("\\saftnnalc") );break; case ef_saftnnauc: sResult.Append( _T("\\saftnnauc") );break; case ef_saftnnrlc: sResult.Append( _T("\\saftnnrlc") );break; case ef_saftnnruc: sResult.Append( _T("\\saftnnruc") );break; case ef_saftnnchi: sResult.Append( _T("\\saftnnchi") );break; case ef_saftnnchosung: sResult.Append( _T("\\saftnnchosung") );break; case ef_saftnncnum: sResult.Append( _T("\\saftnncnum") );break; case ef_saftnndbnum: sResult.Append( _T("\\saftnndbnum") );break; case ef_saftnndbnumd: sResult.Append( _T("\\saftnndbnumd") );break; case ef_saftnndbnumt: sResult.Append( _T("\\saftnndbnumt") );break; case ef_saftnndbnumk: sResult.Append( _T("\\saftnndbnumk") );break; case ef_saftnndbar: sResult.Append( _T("\\saftnndbar") );break; case ef_saftnnganada: sResult.Append( _T("\\saftnnganada") );break; case ef_saftnngbnum: sResult.Append( _T("\\saftnngbnum") );break; case ef_saftnngbnumd: sResult.Append( _T("\\saftnngbnumd") );break; case ef_saftnngbnuml: sResult.Append( _T("\\saftnngbnuml") );break; case ef_saftnngbnumk: sResult.Append( _T("\\saftnngbnumk") );break; case ef_saftnnzodiac: sResult.Append( _T("\\saftnnzodiac") );break; case ef_saftnnzodiacd: sResult.Append( _T("\\saftnnzodiacd") );break; case ef_saftnnzodiacl: sResult.Append( _T("\\saftnnzodiacl") );break; } //Line Numbering RENDER_RTF_INT( m_nLineModulus, sResult, _T("linemod") ) RENDER_RTF_INT( m_nLineX, sResult, _T("linex") ) RENDER_RTF_INT( m_nLineStart, sResult, _T("linestarts") ) switch( m_eLineNumberRestart ) { case lnr_linerestart: sResult.Append( _T("\\linerestart") );break; case lnr_lineppage: sResult.Append( _T("\\lineppage") );break; case lnr_linecont: sResult.Append( _T("\\linecont") );break; } if( RENDER_TO_OOX_PARAM_FIRST_SECTION != oRenderParameter.nType )//Пишем как свойства секции { //Page Information RENDER_RTF_INT( m_nPageWidth, sResult, _T("pgwsxn") ) RENDER_RTF_INT( m_nPageHeight, sResult, _T("pghsxn") ) RENDER_RTF_INT( m_nMarginLeft, sResult, _T("marglsxn") ) RENDER_RTF_INT( m_nMarginRight, sResult, _T("margrsxn") ) RENDER_RTF_INT( m_nMarginTop, sResult, _T("margtsxn") ) RENDER_RTF_INT( m_nMarginBottom, sResult, _T("margbsxn") ) RENDER_RTF_INT( m_nGutterMarginWidth, sResult, _T("guttersxn") ) RENDER_RTF_BOOL( m_bSwitchMargin, sResult, _T("margmirsxn") ) RENDER_RTF_BOOL( m_bLandscapeFormat, sResult, _T("lndscpsxn") ) } RENDER_RTF_BOOL( m_bTitlePage, sResult, _T("titlepg") ) RENDER_RTF_INT( m_nHeaderTop, sResult, _T("headery") ) RENDER_RTF_INT( m_nFooterBottom, sResult, _T("footery") ) //Page Numbers RENDER_RTF_INT( m_nPageNumberStart, sResult, _T("pgnstarts") ) RENDER_RTF_BOOL( m_bPageNumberContinuos, sResult, _T("pgncont") ) RENDER_RTF_BOOL( m_bPageNumberRestart, sResult, _T("pgnrestart") ) RENDER_RTF_INT( m_nPageNumberX, sResult, _T("pgnx") ) RENDER_RTF_INT( m_nPageNumberY, sResult, _T("pgny") ) switch( m_ePageNumberFormat ) { case pnf_pgndec: sResult.Append( _T("\\pgndec") );break; case pnf_pgnucrm: sResult.Append( _T("\\pgnucrm") );break; case pnf_pgnlcrm: sResult.Append( _T("\\pgnlcrm") );break; } //Vertical Alignment switch( m_eVerticalAlignment ) { case va_vertalt: sResult.Append( _T("\\vertalt") );break; case va_vertalb: sResult.Append( _T("\\vertalb") );break; case va_vertalc: sResult.Append( _T("\\vertalc") );break; case va_vertalj: sResult.Append( _T("\\vertalj") );break; } //Text Flow RENDER_RTF_INT( m_nTextFollow, sResult, _T("stextflow") ) //Page Borders if( true == m_oBorderLeft.IsValid() ) { sResult.Append( _T("\\pgbrdrl") ); sResult.Append( m_oBorderLeft.RenderToRtf( oRenderParameter ) ); } if( true == m_oBorderTop.IsValid() ) { sResult.Append( _T("\\pgbrdrt") ); sResult.Append( m_oBorderTop.RenderToRtf( oRenderParameter ) ); } if( true == m_oBorderRight.IsValid() ) { sResult.Append( _T("\\pgbrdrr") ); sResult.Append( m_oBorderRight.RenderToRtf( oRenderParameter ) ); } if( true == m_oBorderBottom.IsValid() ) { sResult.Append( _T("\\pgbrdrb") ); sResult.Append( m_oBorderBottom.RenderToRtf( oRenderParameter ) ); } RENDER_RTF_INT( m_nBorderArt, sResult, _T("brdrart") ) RENDER_RTF_INT( m_nBorderMeasure, sResult, _T("pgbrdropt") ) RENDER_RTF_INT( m_nBorderAlign, sResult, _T("pgbrdrsnap") ) //footer - header if( 0 != m_oHeaderRight ) { sResult.Append( _T("{\\headerr") ); sResult.Append( m_oHeaderRight->RenderToRtf( oRenderParameter )); sResult.Append( _T("\\par") ); sResult.Append( _T("}") ); } if( 0 != m_oHeaderLeft ) { sResult.Append( _T("{\\headerl") ); sResult.Append( m_oHeaderLeft->RenderToRtf( oRenderParameter )); sResult.Append( _T("\\par") ); sResult.Append( _T("}") ); } if( 0 != m_oHeaderFirst ) { sResult.Append( _T("{\\headerf") ); sResult.Append( m_oHeaderFirst->RenderToRtf( oRenderParameter )); sResult.Append( _T("\\par") ); sResult.Append( _T("}") ); } if( 0 != m_oFooterRight ) { sResult.Append( _T("{\\footerr") ); sResult.Append( m_oFooterRight->RenderToRtf( oRenderParameter )); sResult.Append( _T("\\par") ); sResult.Append( _T("}") ); } if( 0 != m_oFooterLeft ) { sResult.Append( _T("{\\footerl") ); sResult.Append( m_oFooterLeft->RenderToRtf( oRenderParameter )); sResult.Append( _T("\\par") ); sResult.Append( _T("}") ); } if( 0 != m_oFooterFirst ) { sResult.Append( _T("{\\footerf") ); sResult.Append( m_oFooterFirst->RenderToRtf( oRenderParameter )); sResult.Append( _T("\\par") ); sResult.Append( _T("}") ); } return sResult; } CString RtfSectionProperty::RenderToOOX(RenderParameter oRenderParameter) { CString sResult; sResult.Append(_T("")); if( 1 == m_bBidi ) sResult.Append(_T("")); CString sPaperSource; if( PROP_DEF != m_nPaperSourceFirst ) sPaperSource.AppendFormat( _T(" w:first=\"%d\""), m_nPaperSourceFirst ); if( PROP_DEF != m_nPaperSourceFirst ) sPaperSource.AppendFormat( _T(" w:other=\"%d\""), m_nPaperSourceOther ); if( false == sPaperSource.IsEmpty() ) sResult.AppendFormat(_T(""), sPaperSource.GetBuffer() ); if( 1 == m_bRtlGutter ) sResult.Append(_T("")); //Section Break switch( m_eSectionBreak ) { case sb_sbknone: sResult.Append(_T("") );break; case sb_sbkcol: sResult.Append(_T("") );break; case sb_sbkpage: sResult.Append(_T("") );break; case sb_sbkeven: sResult.Append(_T("") );break; case sb_sbkodd: sResult.Append(_T("") );break; } //Columns if( PROP_DEF != m_nColumnNumber ) { CString sCollumnFormating; bool bEqualWidth = false; if( m_nColumnNumber != m_oCollumnProperty.m_aCollumnProperty.size() ) bEqualWidth = true; else for( int i = 0; i < (int)m_oCollumnProperty.m_aCollumnProperty.size(); i++ ) if( PROP_DEF == m_oCollumnProperty.m_aCollumnProperty[i].m_nColumnWidth ) { bEqualWidth = true; break; } sCollumnFormating.AppendFormat( _T("") ); else { sCollumnFormating.Append( _T(" w:equalWidth=\"false\">") ); for( int i = 0; i < (int)m_oCollumnProperty.m_aCollumnProperty.size(); i++ ) { sCollumnFormating.Append( _T("") ); } sCollumnFormating.Append( _T("") ); } if( false == sCollumnFormating.IsEmpty() ) sResult.Append( sCollumnFormating ); } //Footnotes and Endnotes CString sFootnotesProp; switch( m_eFootnotesJust ) { case fj_sftntj:sFootnotesProp.Append( _T("") );break; case fj_sftnbj:sFootnotesProp.Append( _T("") );break; } RENDER_OOX_INT( m_nFootnotesStart, sFootnotesProp, _T("w:numStart") ) switch( m_eFootnotesRestart ) { case fr_sftnrstpg:sFootnotesProp.Append( _T("") );break; case fr_sftnrestart:sFootnotesProp.Append( _T("") );break; case fr_sftnrstcont:sFootnotesProp.Append( _T("") );break; } switch( m_eFootnotesRestart ) { case ff_sftnnar:sFootnotesProp.Append( _T("") );break; case ff_sftnnalc:sFootnotesProp.Append( _T("") );break; case ff_sftnnauc:sFootnotesProp.Append( _T("") );break; case ff_sftnnrlc:sFootnotesProp.Append( _T("") );break; case ff_sftnnruc:sFootnotesProp.Append( _T("") );break; case ff_sftnnchi:sFootnotesProp.Append( _T("") );break; case ff_sftnnchosung:sFootnotesProp.Append( _T("") );break; case ff_sftnncnum:sFootnotesProp.Append( _T("") );break; case ff_sftnndbnum:sFootnotesProp.Append( _T("") );break; case ff_sftnndbnumd:sFootnotesProp.Append( _T("") );break; case ff_sftnndbnumt:sFootnotesProp.Append( _T("") );break; case ff_sftnndbnumk:sFootnotesProp.Append( _T("") );break; case ff_sftnndbar:sFootnotesProp.Append( _T("") );break; case ff_sftnnganada:sFootnotesProp.Append( _T("") );break; case ff_sftnngbnum:sFootnotesProp.Append( _T("") );break; case ff_sftnngbnumd:sFootnotesProp.Append( _T("") );break; case ff_sftnngbnuml:sFootnotesProp.Append( _T("") );break; case ff_sftnngbnumk:sFootnotesProp.Append( _T("") );break; case ff_sftnnzodiac:sFootnotesProp.Append( _T("") );break; case ff_sftnnzodiacd:sFootnotesProp.Append( _T("") );break; case ff_sftnnzodiacl:sFootnotesProp.Append( _T("") );break; } if( false == sFootnotesProp.IsEmpty() ) sResult.AppendFormat( _T("%ls"), sFootnotesProp.GetBuffer() ); CString sEndnotesProp; RENDER_OOX_INT( m_nEndnotesStart, sEndnotesProp, _T("w:numStart") ) switch( m_eEndnotesRestart ) { case er_saftnrestart:sEndnotesProp.Append( _T("") );break; case er_saftnrstcont:sEndnotesProp.Append( _T("") );break; } switch( m_eEndnotesRestart ) { case ef_saftnnar:sEndnotesProp.Append( _T("") );break; case ef_saftnnalc:sEndnotesProp.Append( _T("") );break; case ef_saftnnauc:sEndnotesProp.Append( _T("") );break; case ef_saftnnrlc:sEndnotesProp.Append( _T("") );break; case ef_saftnnruc:sEndnotesProp.Append( _T("") );break; case ef_saftnnchi:sEndnotesProp.Append( _T("") );break; case ef_saftnnchosung:sEndnotesProp.Append( _T("") );break; case ef_saftnncnum:sEndnotesProp.Append( _T("") );break; case ef_saftnndbnum:sEndnotesProp.Append( _T("") );break; case ef_saftnndbnumd:sEndnotesProp.Append( _T("") );break; case ef_saftnndbnumt:sEndnotesProp.Append( _T("") );break; case ef_saftnndbnumk:sEndnotesProp.Append( _T("") );break; case ef_saftnndbar:sEndnotesProp.Append( _T("") );break; case ef_saftnnganada:sEndnotesProp.Append( _T("") );break; case ef_saftnngbnum:sEndnotesProp.Append( _T("") );break; case ef_saftnngbnumd:sEndnotesProp.Append( _T("") );break; case ef_saftnngbnuml:sEndnotesProp.Append( _T("") );break; case ef_saftnngbnumk:sEndnotesProp.Append( _T("") );break; case ef_saftnnzodiac:sEndnotesProp.Append( _T("") );break; case ef_saftnnzodiacd:sEndnotesProp.Append( _T("") );break; case ef_saftnnzodiacl:sEndnotesProp.Append( _T("") );break; } if( false == sEndnotesProp.IsEmpty() ) sResult.AppendFormat( _T("%ls"), sEndnotesProp.GetBuffer() ); //Line Numbering CString sLineNumbering; if( PROP_DEF != m_nLineModulus ) sLineNumbering.AppendFormat( _T(" w:countBy=\"%d\""), m_nLineModulus ); if( PROP_DEF != m_nLineX ) sLineNumbering.AppendFormat( _T(" w:distance=\"%d\""), m_nLineX ); if( PROP_DEF != m_nLineStart ) sLineNumbering.AppendFormat( _T(" w:start=\"%d\""), m_nLineStart ); switch( m_eLineNumberRestart ) { case lnr_linerestart:sLineNumbering.Append( _T(" w:restart=\"newSection\"") );break; case lnr_lineppage:sLineNumbering.Append( _T(" w:restart=\"newPage\"") );break; case lnr_linecont:sLineNumbering.Append( _T(" w:restart=\"continuous\"") );break; } if( false == sLineNumbering.IsEmpty() ) sResult.AppendFormat( _T(""), sLineNumbering.GetBuffer() ); //Page Information CString sPageSize; if( PROP_DEF != m_nPageWidth ) sPageSize.AppendFormat(_T(" w:w=\"%d\""),m_nPageWidth); if( PROP_DEF != m_nPageHeight ) sPageSize.AppendFormat(_T(" w:h=\"%d\""),m_nPageHeight); if( 1 == m_bLandscapeFormat ) sPageSize.Append(_T(" w:orient=\"landscape\"")); if( false == sPageSize.IsEmpty() ) sResult.AppendFormat(_T(""), sPageSize.GetBuffer() ); CString sMargin; if( PROP_DEF != m_nMarginLeft ) sMargin.AppendFormat(_T(" w:left=\"%d\""), m_nMarginLeft); if( PROP_DEF != m_nMarginRight ) sMargin.AppendFormat(_T(" w:right=\"%d\""), m_nMarginRight); if( PROP_DEF != m_nMarginTop ) sMargin.AppendFormat(_T(" w:top=\"%d\""), m_nMarginTop); if( PROP_DEF != m_nMarginBottom ) sMargin.AppendFormat(_T(" w:bottom=\"%d\""), m_nMarginBottom); if( PROP_DEF != m_nGutterMarginWidth ) sMargin.AppendFormat(_T(" w:gutter=\"%d\""), m_nGutterMarginWidth); if( PROP_DEF != m_nHeaderTop ) sMargin.AppendFormat(_T(" w:header=\"%d\""), m_nHeaderTop); if( PROP_DEF != m_nFooterBottom ) sMargin.AppendFormat(_T(" w:footer=\"%d\""), m_nFooterBottom); if( false == sMargin.IsEmpty() ) sResult.AppendFormat(_T(""), sMargin.GetBuffer()); if( 1 == m_bTitlePage ) sResult.Append(_T("")); //Page Numbers CString sPageNumber; if( PROP_DEF != m_nPageNumberStart ) sPageNumber.AppendFormat( _T(" w:start=\"%d\""), m_nPageNumberStart ); if( false == sPageNumber.IsEmpty() ) sResult.AppendFormat( _T(""), sPageNumber.GetBuffer() ); //Vertical Alignment switch( m_eVerticalAlignment ) { case va_vertalt:sResult.Append(_T(""));break; case va_vertalb:sResult.Append(_T(""));break; case va_vertalc:sResult.Append(_T(""));break; case va_vertalj:sResult.Append(_T(""));break; } //Text Flow switch( m_nTextFollow ) { case 0: sResult.Append( _T("") );break; case 1: sResult.Append( _T("") );break; case 2: sResult.Append( _T("") );break; case 3: sResult.Append( _T("") );break; case 4: sResult.Append( _T("") );break; case 5: sResult.Append( _T("") );break; } //Page Borders CString sBorders; RenderParameter oNewParam = oRenderParameter; oNewParam.nType = RENDER_TO_OOX_PARAM_BORDER_TAG; if( true == m_oBorderLeft.IsValid() ) { oNewParam.sValue = _T("w:left"); sBorders.Append( m_oBorderLeft.RenderToOOX( oNewParam ) ); } if( true == m_oBorderTop.IsValid() ) { oNewParam.sValue = _T("w:top"); sBorders.Append( m_oBorderTop.RenderToOOX( oNewParam ) ); } if( true == m_oBorderRight.IsValid() ) { oNewParam.sValue = _T("w:right"); sBorders.Append( m_oBorderRight.RenderToOOX( oNewParam ) ); } if( true == m_oBorderBottom.IsValid() ) { oNewParam.sValue = _T("w:bottom"); sBorders.Append( m_oBorderBottom.RenderToOOX( oNewParam ) ); } if( false == sBorders.IsEmpty() ) { sResult.Append( _T("") ); sResult.Append( sBorders ); sResult.Append( _T("") ); } if( 0 != m_oHeaderLeft ) { CString sId = SaveFile(m_oHeaderLeft,oRenderParameter, true); sResult.AppendFormat(_T(""), sId.GetBuffer()); } if( 0 != m_oHeaderFirst ) { CString sId = SaveFile(m_oHeaderFirst,oRenderParameter, true); sResult.AppendFormat(_T(""), sId.GetBuffer()); } if( 0 != m_oHeaderRight ) { CString sId = SaveFile(m_oHeaderRight,oRenderParameter, true); sResult.AppendFormat(_T(""), sId.GetBuffer()); } if( 0 != m_oFooterLeft ) { CString sId = SaveFile(m_oFooterLeft,oRenderParameter, false); sResult.AppendFormat(_T(""), sId.GetBuffer()); } if( 0 != m_oFooterFirst ) { CString sId = SaveFile(m_oFooterFirst,oRenderParameter, false); sResult.AppendFormat(_T(""), sId.GetBuffer()); } if( 0 != m_oFooterRight ) { CString sId = SaveFile(m_oFooterRight,oRenderParameter, false); sResult.AppendFormat(_T(""), sId.GetBuffer()); } sResult.Append(_T("")); return sResult; } CString RtfSectionProperty::SaveFile( TextItemContainerPtr oTarget, RenderParameter oRenderParameter, bool bHeader) { OOXWriter* poOOXWriter = static_cast ( oRenderParameter.poWriter ); RtfDocument* poRtfDocument = static_cast ( oRenderParameter.poDocument ); CString sFilename; if( true == bHeader ) sFilename.AppendFormat( _T("header%d.xml"), poRtfDocument->m_oIdGenerator.Generate_HeaderNumber() ); else sFilename.AppendFormat( _T("footer%d.xml"), poRtfDocument->m_oIdGenerator.Generate_FooterNumber() ); CString sContent; CString sRootName; if( true == bHeader ) sRootName = _T("w:hdr"); else sRootName = _T("w:ftr"); sContent.AppendFormat( _T("\n") ); sContent.AppendFormat( _T("<%ls xmlns:ve=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\">"), sRootName.GetBuffer() ); RenderParameter oNewParameter = oRenderParameter; OOXRelsWriterPtr oNewRelsWr = OOXRelsWriterPtr( new OOXRelsWriter( sFilename, *poRtfDocument ) ); poOOXWriter->m_oCustomRelsWriter.push_back( oNewRelsWr ); oNewParameter.poRels = oNewRelsWr.get(); sContent.Append( oTarget->RenderToOOX(oNewParameter) ); sContent.AppendFormat( _T(""), sRootName.GetBuffer() ); std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sContent.GetBuffer()); CString sFilePath = poOOXWriter->m_sTargetFolder + FILE_SEPARATOR_STR + _T("word") + FILE_SEPARATOR_STR + sFilename; CFile file; if (file.CreateFile(sFilePath) == S_OK) { file.WriteFile((void*)sXmlUTF.c_str(), sXmlUTF.length()); file.CloseFile(); } CString sContentTarget = _T("/word/") + sFilename; CString srID; if( true == bHeader ) { poOOXWriter->m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml"), sContentTarget); srID = poOOXWriter->m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/header"), sFilename ); } else { poOOXWriter->m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml"), sContentTarget); srID = poOOXWriter->m_oDocRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer"), sFilename ); } return srID; }