RtfFormatReader/Writer

This commit is contained in:
ElenaSubbotina
2016-08-10 19:55:15 +03:00
parent 21d10ffad4
commit e39beba413
17 changed files with 2110 additions and 2268 deletions

View File

@ -364,6 +364,10 @@
<Filter
Name="Drawing"
>
<File
RelativePath="..\source\Reader\OOXDrawingGraphicReader.cpp"
>
</File>
<File
RelativePath="..\source\Reader\OOXPictureAnchorReader.h"
>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -302,7 +302,8 @@ public:
if( m_ooxAnchor->m_oGraphic.IsInit() )
{
OOXPictureGraphicReader oGraphicReader(m_ooxAnchor->m_oGraphic.GetPointer());
oGraphicReader.Parse( oParam, *oOutput.m_oPicture );
oGraphicReader.Parse( oParam, oOutput );
}
//изменяем scale в соответсявии с выходным размером
if( PROP_DEF != nWidth && PROP_DEF != oOutput.m_oPicture->m_nWidthGoal )

View File

@ -51,54 +51,7 @@ public:
{
m_ooxGraphic = ooxGraphic;
}
bool Parse( ReaderParameter oParam , RtfPicture& oOutput)
{
if (m_ooxGraphic == NULL) return false;
switch(m_ooxGraphic->m_eGraphicType)
{
case OOX::Drawing::graphictypePicture:
//собственно тока этот объект пока и есть (
break;
case OOX::Drawing::graphictypeLockedCanvas:
case OOX::Drawing::graphictypeChart:
case OOX::Drawing::graphictypeDiagram:
case OOX::Drawing::graphictypeShape:
case OOX::Drawing::graphictypeGroupShape:
///todooo воткнуть конвертацию pptx->ppt->vml !!!
break;
}
for (long i=0; i < m_ooxGraphic->m_arrItems.size(); i++)
{
if (m_ooxGraphic->m_arrItems[i] == NULL) continue;
if (m_ooxGraphic->m_arrItems[i]->getType() == OOX::et_pic_pic)
{
OOX::Drawing::CPicture *picture = dynamic_cast<OOX::Drawing::CPicture *>(m_ooxGraphic->m_arrItems[i]);
if ( (picture) && (picture->m_oBlipFill.m_oBlip.IsInit()))
{
CString sImageId = picture->m_oBlipFill.m_oBlip->m_oEmbed.GetValue();
if (oParam.oReader->m_currentContainer)
{
smart_ptr<OOX::File> oFile = oParam.oReader->m_currentContainer->Find(sImageId);
if ( oFile.IsInit() && (OOX::FileTypes::Image == oFile->type()))
{
OOX::Image* pImage = (OOX::Image*)oFile.operator->();
CString sImagePath = pImage->filename().GetPath();
WriteDataToPicture( sImagePath, oOutput, _T("") );
}
}
}
}
}
return true;
}
bool Parse( ReaderParameter oParam , RtfShape& oOutput);
static bool WriteDataToPicture( CString sPath, RtfPicture& oOutput, CString sTempPath )
{
OOX::CPath ooxPath = sPath; //для target

View File

@ -83,7 +83,7 @@ public:
if(m_ooxInline->m_oGraphic.IsInit())
{
OOXPictureGraphicReader oGraphicReader(m_ooxInline->m_oGraphic.GetPointer());
oGraphicReader.Parse( oParam, *oOutput.m_oPicture );
oGraphicReader.Parse( oParam, oOutput);
}
//изменяем scale в соответсявии с выходным размером
if( PROP_DEF != nWidth && PROP_DEF != oOutput.m_oPicture->m_nWidthGoal )

View File

@ -460,6 +460,13 @@ bool OOXShapeReader::ParseStyle(RtfShape& oShape, SimpleTypes::Vml::CCssProperty
case SimpleTypes::Vml::cssptMsoPositionHorizontalRelative :
{
oShape.m_nPositionHRelative = prop->get_Value().eMsoPosHorRel;
switch(prop->get_Value().eMsoPosHorRel)
{
case SimpleTypes::Vml::cssmsoposhorrelMargin: oShape.m_eXAnchor = RtfShape::ax_margin; break;
case SimpleTypes::Vml::cssmsoposhorrelPage: oShape.m_eXAnchor = RtfShape::ax_page; break;
case SimpleTypes::Vml::cssmsoposhorrelText:
case SimpleTypes::Vml::cssmsoposhorrelChar: break;//inline
}
}break;
case SimpleTypes::Vml::cssptMsoPositionVertical:
{
@ -468,6 +475,13 @@ bool OOXShapeReader::ParseStyle(RtfShape& oShape, SimpleTypes::Vml::CCssProperty
case SimpleTypes::Vml::cssptMsoPositionVerticalRelative :
{
oShape.m_nPositionVRelative = prop->get_Value().eMsoPosVerRel;
switch(prop->get_Value().eMsoPosVerRel)
{
case SimpleTypes::Vml::cssmsoposverrelMargin: oShape.m_eYAnchor = RtfShape::ay_margin; break;
case SimpleTypes::Vml::cssmsoposverrelPage: oShape.m_eYAnchor = RtfShape::ay_page; break;
case SimpleTypes::Vml::cssmsoposverrelText:
case SimpleTypes::Vml::cssmsoposverrelLine: break;//inline
}
}break;
case SimpleTypes::Vml::cssptMsoWrapDistanceBottom:
{
@ -518,7 +532,19 @@ bool OOXShapeReader::ParseStyle(RtfShape& oShape, SimpleTypes::Vml::CCssProperty
{
oShape.m_nGtextSize = prop->get_Value().oValue.dValue;
}break;
case SimpleTypes::Vml::cssptVTextAnchor:
{
oShape.m_nAnchorText = prop->get_Value().eVTextAnchor;//совпдает
oShape.m_bFitShapeToText = 0;
}break;
case SimpleTypes::Vml::csspctMsoWidthPercent:
{
oShape.m_nPctWidth = prop->get_Value().oValue.dValue;
}break;
case SimpleTypes::Vml::csspctMsoHeightPercent:
{
oShape.m_nPctHeight = prop->get_Value().oValue.dValue;
}break;
case SimpleTypes::Vml::cssptDirection : break;
case SimpleTypes::Vml::cssptLayoutFlow : break;
case SimpleTypes::Vml::cssptMsoDirectionAlt : break;
@ -528,7 +554,6 @@ bool OOXShapeReader::ParseStyle(RtfShape& oShape, SimpleTypes::Vml::CCssProperty
case SimpleTypes::Vml::cssptMsoNextTextbox : break;
case SimpleTypes::Vml::cssptMsoRotate : break;
case SimpleTypes::Vml::cssptMsoTextScale : break;
case SimpleTypes::Vml::cssptVTextAnchor : break;
case SimpleTypes::Vml::cssptFont : break;
case SimpleTypes::Vml::cssptFontStyle : break;
case SimpleTypes::Vml::cssptFontVariant : break;
@ -544,60 +569,6 @@ bool OOXShapeReader::ParseStyle(RtfShape& oShape, SimpleTypes::Vml::CCssProperty
case SimpleTypes::Vml::cssptVTextSpacing : break;
}
//else if( _T("mso-left-percent") == sProperty )
// oShape.m_nPositionHPct = Strings::ToInteger( sValue );
//else if( _T("mso-position-horizontal-relative") == sProperty )
//{
// if( _T("page") == sValue )
// oShape.m_eXAnchor = RtfShape::ax_page;
// else if( _T("margin") == sValue )
// oShape.m_eXAnchor = RtfShape::ax_margin;
// else if( _T("text") == sValue )
// oShape.m_eXAnchor = RtfShape::ax_column;
//}
//else if( _T("mso-top-percent") == sProperty )
// oShape.m_nPositionVPct = Strings::ToInteger( sValue );
//else if( _T("mso-position-vertical-relative") == sProperty )
//{
// if( _T("page") == sValue )
// oShape.m_eYAnchor = RtfShape::ay_page;
// else if( _T("margin") == sValue )
// oShape.m_eYAnchor = RtfShape::ay_margin;
// else if( _T("text") == sValue )
// oShape.m_eYAnchor = RtfShape::ay_margin;
//}
//else if( _T("mso-width-relative") == sProperty )
//{
// if( _T("margin") == sValue )
// oShape.m_nPctWidthRelative = 0;
// else if( _T("page") == sValue )
// oShape.m_nPctWidthRelative = 1;
// else if( _T("left-margin-area") == sValue )
// oShape.m_nPctWidthRelative = 2;
// else if( _T("right-margin-area") == sValue )
// oShape.m_nPctWidthRelative = 3;
// else if( _T("inner-margin-area") == sValue )
// oShape.m_nPctWidthRelative = 4;
// else if( _T("outer-margin-area") == sValue )
// oShape.m_nPctWidthRelative = 5;
//}
//else if( _T("mso-height-relative") == sProperty )
//{
// if( _T("margin") == sValue )
// oShape.m_nPctHeightRelative = 0;
// else if( _T("page") == sValue )
// oShape.m_nPctHeightRelative = 1;
// else if( _T("top-margin-area") == sValue )
// oShape.m_nPctHeightRelative = 2;
// else if( _T("bottom-margin-area") == sValue )
// oShape.m_nPctHeightRelative = 3;
// else if( _T("inner-margin-area") == sValue )
// oShape.m_nPctHeightRelative = 4;
// else if( _T("outer-margin-area") == sValue )
// oShape.m_nPctHeightRelative = 5;
//}
return true;
}

View File

@ -227,41 +227,41 @@ public:
CString sResult;
switch( m_eType )
{
case rsc_chdate: sResult.Append( _T("") );break;
case rsc_chdpl: sResult.Append( _T("") );break;
case rsc_chdpa: sResult.Append( _T("") );break;
case rsc_chtime: sResult.Append( _T("") );break;
case rsc_chpgn: sResult.Append( _T("<w:pgNum />") );break;
case rsc_sectnum: sResult.Append( _T("") );break;
case rsc_chftn: sResult.Append( _T("<w:footnoteRef/>") );break;
case rsc_chftnEnd: sResult.Append( _T("<w:endnoteRef/>") );break;
case rsc_chatn: sResult.Append( _T("<w:annotationRef />") );break;
case rsc_chftnsep: sResult.Append( _T("<w:separator />") );break;
case rsc_chftnsepc: sResult.Append( _T("<w:continuationSeparator/>") );break;
case rsc_page: sResult.Append( _T("<w:br w:type=\"page\"/>") );break;
case rsc_column: sResult.Append( _T("<w:br w:type=\"column\"/>") );break;
case rsc_chdate: sResult.Append( _T("") ); break;
case rsc_chdpl: sResult.Append( _T("") ); break;
case rsc_chdpa: sResult.Append( _T("") ); break;
case rsc_chtime: sResult.Append( _T("") ); break;
case rsc_chpgn: sResult.Append( _T("<w:pgNum />") ); break;
case rsc_sectnum: sResult.Append( _T("") ); break;
case rsc_chftn: sResult.Append( _T("<w:footnoteRef/>") ); break;
case rsc_chftnEnd: sResult.Append( _T("<w:endnoteRef/>") ); break;
case rsc_chatn: sResult.Append( _T("<w:annotationRef />") ); break;
case rsc_chftnsep: sResult.Append( _T("<w:separator />") ); break;
case rsc_chftnsepc: sResult.Append( _T("<w:continuationSeparator/>") ); break;
case rsc_page: sResult.Append( _T("<w:br w:type=\"page\"/>") ); break;
case rsc_column: sResult.Append( _T("<w:br w:type=\"column\"/>") ); break;
case rsc_line: sResult.Append( _T("<w:br w:type=\"textWrapping\" w:clear=\"none\"/>") );break;
case rsc_softpage: sResult.Append( _T("") );break;
case rsc_softcol: sResult.Append( _T("") );break;
case rsc_softline: sResult.Append( _T("") );break;
case rsc_tab: sResult.Append( _T("<w:tab/>") );break;
case rsc_emspace: sResult.Append( _T("") );break;
case rsc_qmspace: sResult.Append( _T("") );break;
case rsc_Formula: sResult.Append( _T("") );break;
case rsc_softpage: sResult.Append( _T("") ); break;
case rsc_softcol: sResult.Append( _T("") ); break;
case rsc_softline: sResult.Append( _T("") ); break;
case rsc_tab: sResult.Append( _T("<w:tab/>") ); break;
case rsc_emspace: sResult.Append( _T("") ); break;
case rsc_qmspace: sResult.Append( _T("") ); break;
case rsc_Formula: sResult.Append( _T("") ); break;
case rsc_OptHyphen: sResult.Append( _T("<w:t xml:space=\"preserve\">-</w:t>") );break;//<w:softHyphen/>
case rsc_NonBrHyphen: sResult.Append( _T("<w:t xml:space=\"preserve\">-</w:t>") );break;//<w:nonBreakHyphen/>
case rsc_NonBrSpace: sResult.Append( _T("<w:t xml:space=\"preserve\"> </w:t>") );break;
case rsc_zwbo: sResult.Append( _T("") );break;
case rsc_zwnbo: sResult.Append( _T("") );break;
case rsc_zwj: sResult.Append( _T("") );break;
case rsc_zwnj: sResult.Append( _T("") );break;
case rsc_zwbo: sResult.Append( _T("") ); break;
case rsc_zwnbo: sResult.Append( _T("") ); break;
case rsc_zwj: sResult.Append( _T("") ); break;
case rsc_zwnj: sResult.Append( _T("") ); break;
}
switch ( m_nTextWrapBreak )
{
case 0: sResult.Append( _T("<w:br w:type=\"textWrapping\" w:clear=\"none\"/>") );break;
case 1: sResult.Append( _T("<w:br w:type=\"textWrapping\" w:clear=\"left\"/>") );break;
case 2: sResult.Append( _T("<w:br w:type=\"textWrapping\" w:clear=\"right\"/>") );break;
case 3: sResult.Append( _T("<w:br w:type=\"textWrapping\" w:clear=\"all\"/>") );break;
case 0: sResult.Append( _T("<w:br w:type=\"textWrapping\" w:clear=\"none\"/>") ); break;
case 1: sResult.Append( _T("<w:br w:type=\"textWrapping\" w:clear=\"left\"/>") ); break;
case 2: sResult.Append( _T("<w:br w:type=\"textWrapping\" w:clear=\"right\"/>") ); break;
case 3: sResult.Append( _T("<w:br w:type=\"textWrapping\" w:clear=\"all\"/>") ); break;
}
return sResult;
}

View File

@ -55,22 +55,22 @@ public:
CString RenderToRtf(RenderParameter oRenderParameter)
{
CString sResult;
sResult.Append(_T("{\\field "));
sResult += _T("{\\field ");
RENDER_RTF_BOOL( m_bDirty, sResult, _T("flddirty") )
RENDER_RTF_BOOL( m_bLock, sResult, _T("fldlock") )
sResult.Append(_T("{\\*\\fldinst"));
sResult.Append( m_oCharProp.RenderToRtf(oRenderParameter) );
sResult += _T("{\\*\\fldinst");
sResult += m_oCharProp.RenderToRtf(oRenderParameter);
return sResult;
}
CString RenderToOOX(RenderParameter oRenderParameter)
{
CString sResult;
sResult.Append( _T("<w:r>") );
sResult.Append( _T("<w:fldChar w:fldCharType=\"separate\"") );
sResult += _T("<w:r>");
sResult += _T("<w:fldChar w:fldCharType=\"separate\"");
RENDER_OOX_INT_ATTRIBUTE( m_bDirty, sResult, _T("dirty") )
RENDER_OOX_INT_ATTRIBUTE( m_bLock, sResult, _T("fldLock") )
sResult.Append( _T("/>") );
sResult.Append( _T("</w:r>") );
sResult += _T("/>");
sResult += _T("</w:r>");
return sResult;
}
};
@ -93,13 +93,16 @@ public: CString RenderToOOX(RenderParameter oRenderParameter)
if( NULL != m_oText )
{
CString sResult;
sResult.Append( _T("<w:r>") );
sResult.Append( _T("<w:instrText>") );
sResult += _T("<w:r>");
sResult += _T("<w:instrText>");
oRenderParameter.nType = RENDER_TO_RTF_PARAM_CHAR;
oRenderParameter.nValue = RENDER_TO_RTF_PARAM_NO_PAR;
sResult.Append( m_oText->RenderToOOX( oRenderParameter ) );
sResult.Append( _T("</w:instrText>") );
sResult.Append( _T("</w:r>") );
sResult += m_oText->RenderToOOX( oRenderParameter );
sResult += _T("</w:instrText>");
sResult += _T("</w:r>");
return sResult;
}
else
@ -191,31 +194,35 @@ public: void SetDefault()
public: CString RenderToRtf(RenderParameter oRenderParameter)
{
CString sResult;
sResult.Append(_T("{\\field "));
sResult += _T("{\\field ");
if( fm_none != m_eMode )
{
switch( m_eMode )
{
case fm_flddirty: sResult.Append(_T("{\\flddirty "));break;
case fm_fldedit: sResult.Append(_T("{\\fldedit "));break;
case fm_fldlock: sResult.Append(_T("{\\fldlock "));break;
case fm_fldpriv: sResult.Append(_T("{\\fldpriv "));break;
}
case fm_flddirty: sResult += _T("{\\flddirty "); break;
case fm_fldedit: sResult += _T("{\\fldedit "); break;
case fm_fldlock: sResult += _T("{\\fldlock "); break;
case fm_fldpriv: sResult += _T("{\\fldpriv "); break;
}
}
sResult.Append(_T("{\\*\\fldinst "));
sResult += _T("{\\*\\fldinst ");
RenderParameter oNewParam = oRenderParameter;
oNewParam.nType = RENDER_TO_RTF_PARAM_CHAR;
oNewParam.nValue = RENDER_TO_RTF_PARAM_NO_PAR;
sResult.Append( m_oInsert->RenderToRtf( oNewParam ) );
sResult += m_oInsert->RenderToRtf( oNewParam );
if( true == m_bReferenceToEndnote )
sResult.Append( _T("\\fldalt") );
sResult += _T("\\fldalt");
if( false == m_sData.IsEmpty() )
sResult.AppendFormat( _T("{\\*\\datafield %ls}"), m_sData.GetBuffer());
sResult.Append(_T("}"));
sResult += _T("}");
CString str = m_oResult->RenderToRtf( oRenderParameter ) ;
sResult.AppendFormat(_T("{\\fldrslt %ls}"), str.GetBuffer());
sResult.Append(_T("}"));
sResult += _T("}");
return sResult;
}
public: CString RenderToOOX(RenderParameter oRenderParameter)
@ -225,7 +232,7 @@ public: CString RenderToOOX(RenderParameter oRenderParameter)
{
RenderParameter oNewParam = oRenderParameter;
oNewParam.nType = RENDER_TO_OOX_PARAM_RUN;
sResult.Append(m_oResult->RenderToOOX(oNewParam));
sResult += m_oResult->RenderToOOX(oNewParam);
}
else
{
@ -257,8 +264,9 @@ public: CString RenderToOOX(RenderParameter oRenderParameter)
//добавляем гиперссылку в документ
sResult.AppendFormat( _T("<w:hyperlink r:id=\"%ls\" >"), sId.GetBuffer() );
oNewParam.nType = RENDER_TO_OOX_PARAM_RUN;
sResult.Append(m_oResult->RenderToOOX(oNewParam));
sResult.Append( _T("</w:hyperlink>") );
sResult += m_oResult->RenderToOOX(oNewParam);
sResult += _T("</w:hyperlink>");
}
else
{
@ -267,45 +275,51 @@ public: CString RenderToOOX(RenderParameter oRenderParameter)
{
RenderParameter oNewParametr = oRenderParameter;
oNewParametr.nType = RENDER_TO_OOX_PARAM_PLAIN;
//sResult.Append(_T("<w:r>"));
//sResult += _T("<w:r>"));
CString str = Utils::PrepareToXML( m_oInsert->RenderToOOX(oNewParametr) ).Trim();
sResult.AppendFormat(_T("<w:fldSimple w:instr=\"%ls\">"), str.GetBuffer() );
sResult += _T("<w:fldSimple w:instr=\"");
sResult += str;
sResult += _T("\">");
RenderParameter oNewParam = oRenderParameter;
oNewParam.nType = RENDER_TO_OOX_PARAM_RUN;
sResult.Append(m_oResult->RenderToOOX(oNewParam));
sResult += m_oResult->RenderToOOX(oNewParam);
sResult.AppendFormat(_T("</w:fldSimple>"));
//sResult.Append(_T("</w:r>"));
//sResult += _T("</w:r>"));
}
else
{
//так добавляются лишние параграфы
RenderParameter oNewParametr = oRenderParameter;
oNewParametr.nType = RENDER_TO_OOX_PARAM_PLAIN;
sResult.Append(_T("<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>"));
sResult += _T("<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>");
CString str = Utils::PrepareToXML( m_oInsert->RenderToOOX(oNewParametr) );
sResult.AppendFormat(_T("<w:r><w:instrText xml:space=\"preserve\">%ls</w:instrText></w:r>"), str.GetBuffer());
sResult.Append(_T("<w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>"));
sResult += _T("<w:r><w:instrText xml:space=\"preserve\">");
sResult += str;
sResult += _T("</w:instrText></w:r>");
sResult += _T("<w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>");
//заканчиваем этот параграф
sResult.Append(_T("</w:p>"));
sResult += _T("</w:p>");
//пишем параграфы содержания
oNewParametr.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
sResult.Append(m_oResult->RenderToOOX(oNewParametr));
sResult += m_oResult->RenderToOOX(oNewParametr);
//заканчиваем Field
sResult.Append(_T("<w:p>"));
sResult.Append(_T("<w:r><w:fldChar w:fldCharType=\"end\"/></w:r>"));
sResult += _T("<w:p>");
sResult += _T("<w:r><w:fldChar w:fldCharType=\"end\"/></w:r>");
////пишем параграфы содержания
//RenderParameter oNewParametr = oRenderParameter;
//oNewParametr.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
//sResult.Append(m_oResult->RenderToOOX(oNewParametr));
//sResult += m_oResult->RenderToOOX(oNewParametr));
//CString sFieldBegin;
//sFieldBegin.Append(_T("<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>"));
//sFieldBegin += _T("<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>");
//sFieldBegin.AppendFormat(_T("<w:r><w:instrText xml:space=\"preserve\">%ls</w:instrText></w:r>"), Utils::PrepareToXML( m_oInsert->RenderToOOX(oNewParametr) ));
//sFieldBegin.Append(_T("<w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>"));
//sFieldBegin += _T("<w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>");
////пишем после первого w:pPr
//CString sFindStr = _T("</w:pPr>");
//int nIndex = sResult.Find( sFindStr );
@ -319,9 +333,9 @@ public: CString RenderToOOX(RenderParameter oRenderParameter)
// sResult.Inset( sFieldBegin, nIndex + sFindStr.GetLength() );
//}
//CString sFieldEnd;
//sFieldEnd.Append(_T("<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>"));
//sFieldEnd += _T("<w:r><w:fldChar w:fldCharType=\"begin\"/></w:r>");
//sFieldEnd.AppendFormat(_T("<w:r><w:instrText xml:space=\"preserve\">%ls</w:instrText></w:r>"), Utils::PrepareToXML( m_oInsert->RenderToOOX(oNewParametr) ));
//sFieldEnd.Append(_T("<w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>"));
//sFieldEnd += _T("<w:r><w:fldChar w:fldCharType=\"separate\"/></w:r>");
////пишем после последнего w:pPr
}
}

View File

@ -70,6 +70,7 @@ class RtfParagraph : public ITextItem, public ItemContainer< IDocumentElementPtr
public:
RtfParagraphProperty m_oProperty;
RtfOldListPtr m_oOldList;
int GetType( )
{
return TYPE_RTF_PARAGRAPH;
@ -102,20 +103,27 @@ public:
if( RENDER_TO_RTF_PARAM_CHAR == oRenderParameter.nType )
{
for( int i = 0; i < (int)m_aArray.size(); i++ )
sResult.Append( m_aArray[i]->RenderToRtf( oRenderParameter ) );
{
sResult += m_aArray[i]->RenderToRtf( oRenderParameter );
}
}
else
{
sResult.Append(_T("\\pard\\plain"));
sResult.Append( m_oProperty.RenderToRtf( oRenderParameter ) );
sResult += _T("\\pard\\plain");
sResult += m_oProperty.RenderToRtf( oRenderParameter ) ;
if( NULL != m_oOldList )
sResult.Append( m_oOldList->RenderToRtf( oRenderParameter ) );
sResult += m_oOldList->RenderToRtf( oRenderParameter ) ;
for( int i = 0; i < (int)m_aArray.size(); i++ )
sResult.Append( m_aArray[i]->RenderToRtf( oRenderParameter ) );
sResult.Append( m_oProperty.m_oCharProperty.RenderToRtf( oRenderParameter ) );
{
sResult += m_aArray[i]->RenderToRtf( oRenderParameter );
}
sResult += m_oProperty.m_oCharProperty.RenderToRtf( oRenderParameter );
//if( RENDER_TO_RTF_PARAM_NO_PAR != oRenderParameter.nValue )
// sResult.Append(_T("\\par"));
// sResult += T("\\par");
}
return sResult;
}
@ -126,25 +134,31 @@ public:
if( RENDER_TO_OOX_PARAM_PLAIN == oRenderParameter.nType )
{
for( int i = 0; i < (int)m_aArray.size(); i++ )
sResult.Append( m_aArray[i]->RenderToOOX(oRenderParameter) );
{
sResult += m_aArray[i]->RenderToOOX(oRenderParameter);
}
}
else if( RENDER_TO_OOX_PARAM_RUN == oRenderParameter.nType )
{
for( int i = 0; i < (int)m_aArray.size(); i++ )
sResult.Append( m_aArray[i]->RenderToOOX(oRenderParameter) );
{
sResult += 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>") );
sResult += _T("<w:rPr>");
sResult += m_oProperty.m_oCharProperty.RenderToOOX(oRenderParameter);
sResult += _T("</w:rPr>");
}
else
{
for( int i = 0; i < (int)m_aArray.size(); i++ )
sResult.Append( m_aArray[i]->RenderToOOX(oRenderParameter) );
{
sResult += m_aArray[i]->RenderToOOX(oRenderParameter);
}
}
}
else
@ -153,17 +167,17 @@ public:
if( NULL != m_oOldList )
bCanConvertToNumbering = m_oOldList->CanConvertToNumbering();
sResult.Append( _T("<w:p>") );
sResult.Append( _T("<w:pPr>") );
sResult.Append( m_oProperty.RenderToOOX(oRenderParameter) );
sResult += _T("<w:p>");
sResult += _T("<w:pPr>");
sResult += m_oProperty.RenderToOOX(oRenderParameter);
if( NULL != m_oOldList )
{
//для OldList
if( true == bCanConvertToNumbering )
sResult.Append( m_oOldList->RenderToOOX( oRenderParameter ) );
sResult += m_oOldList->RenderToOOX( oRenderParameter );
}
sResult.Append( _T("</w:pPr>") );
sResult += _T("</w:pPr>");
if( NULL != m_oOldList )
{
@ -179,22 +193,25 @@ public:
for( int i = 0; i < m_oOldList->m_oText->GetCount(); i++ )
{
sResult.Append( _T("<w:r>") );
sResult.Append( _T("<w:rPr>") );
sResult.Append( oCharProp.RenderToOOX(oRenderParameter) );
sResult.Append( _T("</w:rPr>") );
sResult += _T("<w:r>");
sResult += _T("<w:rPr>");
sResult += oCharProp.RenderToOOX(oRenderParameter);
sResult += _T("</w:rPr>");
sResult.Append( m_oOldList->m_oText->m_aArray[ i ]->RenderToOOX(oNewParam) );
sResult.Append( _T("</w:r>") );
sResult += m_oOldList->m_oText->m_aArray[ i ]->RenderToOOX(oNewParam);
sResult += _T("</w:r>");
}
}
}
RenderParameter oNewParam = oRenderParameter;
oNewParam.nType = RENDER_TO_OOX_PARAM_RUN;
for( int i = 0; i < (int)m_aArray.size(); i++ )
sResult.Append( m_aArray[i]->RenderToOOX(oNewParam) );
sResult.Append( _T("</w:p>") );
{
sResult += m_aArray[i]->RenderToOOX(oNewParam);
}
sResult += _T("</w:p>");
}
return sResult;
}

View File

@ -29,10 +29,10 @@
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
#include "RtfDocument.h"
#include "RtfWriter.h"
#include "Writer/OOXWriter.h"
#include "RtfProperty.h"
#include "RtfDocument.h"
#include "../../../Common/DocxFormat/Source/DocxFormat/FileTypes.h"
#include "../../../Common/DocxFormat/Source/DocxFormat/App.h"
@ -461,13 +461,13 @@ CString RtfShading::RenderToOOX(RenderParameter oRenderParameter)
{
RtfColor oForeColor;
if( true == poRtfDocument->m_oColorTable.GetColor( m_nForeColor, oForeColor ) )
sShading.AppendFormat( _T(" w:color=\"%ls\""), oForeColor.RenderToOOX(oNewParam).GetBuffer());
sShading.Append( _T(" w:color=\"") + oForeColor.RenderToOOX(oNewParam) + _T("\""));
}
if( PROP_DEF != m_nBackColor )
{
RtfColor oBackColor;
if( true == poRtfDocument->m_oColorTable.GetColor( m_nBackColor, oBackColor ) )
sShading.AppendFormat( _T(" w:fill=\"%ls\""), oBackColor.RenderToOOX(oNewParam).GetBuffer());
sShading.Append( _T(" w:fill=\"") + oBackColor.RenderToOOX(oNewParam) + _T("\""));
}
if( PROP_DEF != m_nValue )
{
@ -523,19 +523,19 @@ CString RtfShading::RenderToOOX(RenderParameter oRenderParameter)
{
switch( m_eType )
{
case st_clshdrawnil:sShading.Append( _T(" w:val=\"nil\"") );break;
case st_chbghoriz:sShading.Append( _T(" w:val=\"thinHorzStripehorzStripe\"") );break;
case st_chbgvert:sShading.Append( _T(" w:val=\"thinVertStripe\"") );break;
case st_chbgfdiag:sShading.Append( _T(" w:val=\"thinReverseDiagStripe\"") );break;
case st_chbgbdiag:sShading.Append( _T(" w:val=\"thinDiagStripe\"") );break;
case st_chbgcross:sShading.Append( _T(" w:val=\"thinHorzCross\"") );break;
case st_chbgdcross:sShading.Append( _T(" w:val=\"thinDiagCross\"") );break;
case st_chbgdkhoriz:sShading.Append( _T(" w:val=\"horzStripe\"") );break;
case st_chbgdkvert:sShading.Append( _T(" w:val=\"vertStripe\"") );break;
case st_chbgdkfdiag:sShading.Append( _T(" w:val=\"reverseDiagStripe\"") );break;
case st_chbgdkbdiag:sShading.Append( _T(" w:val=\"diagStripe\"") );break;
case st_chbgdkcross:sShading.Append( _T(" w:val=\"horzCross\"") );break;
case st_chbgdkdcross:sShading.Append( _T(" w:val=\"diagCross\"") );break;
case st_clshdrawnil: sShading.Append( _T(" w:val=\"nil\"") ); break;
case st_chbghoriz: sShading.Append( _T(" w:val=\"thinHorzStripehorzStripe\"") ); break;
case st_chbgvert: sShading.Append( _T(" w:val=\"thinVertStripe\"") ); break;
case st_chbgfdiag: sShading.Append( _T(" w:val=\"thinReverseDiagStripe\"") ); break;
case st_chbgbdiag: sShading.Append( _T(" w:val=\"thinDiagStripe\"") ); break;
case st_chbgcross: sShading.Append( _T(" w:val=\"thinHorzCross\"") ); break;
case st_chbgdcross: sShading.Append( _T(" w:val=\"thinDiagCross\"") ); break;
case st_chbgdkhoriz: sShading.Append( _T(" w:val=\"horzStripe\"") ); break;
case st_chbgdkvert: sShading.Append( _T(" w:val=\"vertStripe\"") ); break;
case st_chbgdkfdiag: sShading.Append( _T(" w:val=\"reverseDiagStripe\"") ); break;
case st_chbgdkbdiag: sShading.Append( _T(" w:val=\"diagStripe\"") ); break;
case st_chbgdkcross: sShading.Append( _T(" w:val=\"horzCross\"") ); break;
case st_chbgdkdcross: sShading.Append( _T(" w:val=\"diagCross\"") ); break;
}
}
if( false == sShading.IsEmpty() )
@ -547,33 +547,33 @@ CString RtfBorder::RenderToRtf(RenderParameter oRenderParameter)
CString sResult;
switch( m_eType )
{
case bt_brdrs: sResult = _T("\\brdrs"); break;
case bt_brdrth: sResult = _T("\\brdrth"); break;
case bt_brdrsh: sResult = _T("\\brdrsh"); break;
case bt_brdrdb: sResult = _T("\\brdrdb"); break;
case bt_brdrdot: sResult = _T("\\brdrdot"); break;
case bt_brdrdash: sResult = _T("\\brdrdash"); break;
case bt_brdrhair: sResult = _T("\\brdrhair"); break;
case bt_brdrinset: sResult = _T("\\brdrinset"); break;
case bt_brdrdashsm: sResult = _T("\\brdrdashsm"); break;
case bt_brdrdashd: sResult = _T("\\brdrdashd"); break;
case bt_brdrdashdd: sResult = _T("\\brdrdashdd"); break;
case bt_brdrdashdot: sResult = _T("\\brdrdashdot"); break;
case bt_brdrtriple: sResult = _T("\\brdrtriple"); break;
case bt_brdrtnthsg: sResult = _T("\\brdrtnthsg"); break;
case bt_brdrthtnsg: sResult = _T("\\brdrthtnsg"); break;
case bt_brdrtnthtnsg: sResult = _T("\\brdrtnthtnsg"); break;
case bt_brdrtnthtnmg: sResult = _T("\\brdrtnthtnmg"); break;
case bt_brdrtnthlg: sResult = _T("\\brdrtnthlg"); break;
case bt_brdrthtnlg: sResult = _T("\\brdrthtnlg"); break;
case bt_brdrtnthtnlg: sResult = _T("\\brdrtnthtnlg"); break;
case bt_brdrwavy: sResult = _T("\\brdrwavy"); break;
case bt_brdrwavydb: sResult = _T("\\brdrwavydb"); break;
case bt_brdrs: sResult = _T("\\brdrs"); break;
case bt_brdrth: sResult = _T("\\brdrth"); break;
case bt_brdrsh: sResult = _T("\\brdrsh"); break;
case bt_brdrdb: sResult = _T("\\brdrdb"); break;
case bt_brdrdot: sResult = _T("\\brdrdot"); break;
case bt_brdrdash: sResult = _T("\\brdrdash"); break;
case bt_brdrhair: sResult = _T("\\brdrhair"); break;
case bt_brdrinset: sResult = _T("\\brdrinset"); break;
case bt_brdrdashsm: sResult = _T("\\brdrdashsm"); break;
case bt_brdrdashd: sResult = _T("\\brdrdashd"); break;
case bt_brdrdashdd: sResult = _T("\\brdrdashdd"); break;
case bt_brdrdashdot: sResult = _T("\\brdrdashdot"); break;
case bt_brdrtriple: sResult = _T("\\brdrtriple"); break;
case bt_brdrtnthsg: sResult = _T("\\brdrtnthsg"); break;
case bt_brdrthtnsg: sResult = _T("\\brdrthtnsg"); break;
case bt_brdrtnthtnsg: sResult = _T("\\brdrtnthtnsg"); break;
case bt_brdrtnthtnmg: sResult = _T("\\brdrtnthtnmg"); break;
case bt_brdrtnthlg: sResult = _T("\\brdrtnthlg"); break;
case bt_brdrthtnlg: sResult = _T("\\brdrthtnlg"); break;
case bt_brdrtnthtnlg: sResult = _T("\\brdrtnthtnlg"); break;
case bt_brdrwavy: sResult = _T("\\brdrwavy"); break;
case bt_brdrwavydb: sResult = _T("\\brdrwavydb"); break;
case bt_brdrdashdotstr: sResult = _T("\\brdrdashdotstr"); break;
case bt_brdremboss: sResult = _T("\\brdremboss"); break;
case bt_brdrengrave: sResult = _T("\\brdrengrave"); break;
case bt_brdroutset: sResult = _T("\\brdroutset"); break;
case bt_brdrnone: sResult = _T("\\brdrnone"); break;
case bt_brdremboss: sResult = _T("\\brdremboss"); break;
case bt_brdrengrave: sResult = _T("\\brdrengrave"); break;
case bt_brdroutset: sResult = _T("\\brdroutset"); break;
case bt_brdrnone: sResult = _T("\\brdrnone"); break;
}
if( PROP_DEF != m_nWidth && m_nWidth > 0)
sResult.AppendFormat( _T("\\brdrw%d"), m_nWidth );
@ -602,34 +602,34 @@ CString RtfBorder::RenderToOOX(RenderParameter oRenderParameter)
switch( m_eType )
{
case bt_brdrs: sResult.Append( _T(" w:val=\"single\"") ); break;
case bt_brdrth: sResult.Append( _T(" w:val=\"thick\"") ); break;
case bt_brdrsh: sResult.Append( _T(" w:val=\"\"thin") ); break;
case bt_brdrdb: sResult.Append( _T(" w:val=\"double\"") ); break;
case bt_brdrdot: sResult.Append( _T(" w:val=\"dotted\"") ); break;
case bt_brdrdash: sResult.Append( _T(" w:val=\"dashed\"") ); break;
case bt_brdrhair: sResult.Append( _T(" w:val=\"hair\"") ); break;
case bt_brdrdashsm: sResult.Append( _T(" w:val=\"dashSmallGap\"") ); break;
case bt_brdrdashd: sResult.Append( _T(" w:val=\"dotDash\"") ); break;
case bt_brdrdashdd: sResult.Append( _T(" w:val=\"dotDotDash\"") ); break;
case bt_brdrinset: sResult.Append( _T(" w:val=\"inset\"") ); break;
case bt_brdrnone: sResult.Append( _T(" w:val=\"nil\"") ); break;
case bt_brdroutset: sResult.Append( _T(" w:val=\"outset\"") ); break;
case bt_brdrtriple: sResult.Append( _T(" w:val=\"triple\"") ); break;
case bt_brdrtnthsg: sResult.Append( _T(" w:val=\"thinThickSmallGap\"") ); break;
case bt_brdrthtnsg: sResult.Append( _T(" w:val=\"thickThinSmallGap\"") ); break;
case bt_brdrtnthtnsg: sResult.Append( _T(" w:val=\"thinThickThinSmallGap\"") ); break;
case bt_brdrtnthtnmg: sResult.Append( _T(" w:val=\"thinThickThinMediumGap\"") ); break;
case bt_brdrtnthmg: sResult.Append( _T(" w:val=\"thinThickMediumGap\"") ); break;
case bt_brdrthtnmg: sResult.Append( _T(" w:val=\"thickThinMediumGap\"") ); break;
case bt_brdrtnthlg: sResult.Append( _T(" w:val=\"thinThickLargeGap\"") ); break;
case bt_brdrthtnlg: sResult.Append( _T(" w:val=\"thickThinLargeGap\"") ); break;
case bt_brdrtnthtnlg: sResult.Append( _T(" w:val=\"thinThickThinLargeGap\"") ); break;
case bt_brdrwavy: sResult.Append( _T(" w:val=\"wave\"") ); break;
case bt_brdrwavydb: sResult.Append( _T(" w:val=\"doubleWave\"") ); break;
case bt_brdrdashdotstr: sResult.Append( _T(" w:val=\"dashDotStroked\"") ); break;
case bt_brdremboss: sResult.Append( _T(" w:val=\"threeDEmboss\"") ); break;
case bt_brdrengrave: sResult.Append( _T(" w:val=\"threeDEngrave\"") ); break;
case bt_brdrs: sResult.Append( _T(" w:val=\"single\"") ); break;
case bt_brdrth: sResult.Append( _T(" w:val=\"thick\"") ); break;
case bt_brdrsh: sResult.Append( _T(" w:val=\"\"thin") ); break;
case bt_brdrdb: sResult.Append( _T(" w:val=\"double\"") ); break;
case bt_brdrdot: sResult.Append( _T(" w:val=\"dotted\"") ); break;
case bt_brdrdash: sResult.Append( _T(" w:val=\"dashed\"") ); break;
case bt_brdrhair: sResult.Append( _T(" w:val=\"hair\"") ); break;
case bt_brdrdashsm: sResult.Append( _T(" w:val=\"dashSmallGap\"") ); break;
case bt_brdrdashd: sResult.Append( _T(" w:val=\"dotDash\"") ); break;
case bt_brdrdashdd: sResult.Append( _T(" w:val=\"dotDotDash\"") ); break;
case bt_brdrinset: sResult.Append( _T(" w:val=\"inset\"") ); break;
case bt_brdrnone: sResult.Append( _T(" w:val=\"nil\"") ); break;
case bt_brdroutset: sResult.Append( _T(" w:val=\"outset\"") ); break;
case bt_brdrtriple: sResult.Append( _T(" w:val=\"triple\"") ); break;
case bt_brdrtnthsg: sResult.Append( _T(" w:val=\"thinThickSmallGap\"") ); break;
case bt_brdrthtnsg: sResult.Append( _T(" w:val=\"thickThinSmallGap\"") ); break;
case bt_brdrtnthtnsg: sResult.Append( _T(" w:val=\"thinThickThinSmallGap\"") ); break;
case bt_brdrtnthtnmg: sResult.Append( _T(" w:val=\"thinThickThinMediumGap\"") ); break;
case bt_brdrtnthmg: sResult.Append( _T(" w:val=\"thinThickMediumGap\"") ); break;
case bt_brdrthtnmg: sResult.Append( _T(" w:val=\"thickThinMediumGap\"") ); break;
case bt_brdrtnthlg: sResult.Append( _T(" w:val=\"thinThickLargeGap\"") ); break;
case bt_brdrthtnlg: sResult.Append( _T(" w:val=\"thickThinLargeGap\"") ); break;
case bt_brdrtnthtnlg: sResult.Append( _T(" w:val=\"thinThickThinLargeGap\"") ); break;
case bt_brdrwavy: sResult.Append( _T(" w:val=\"wave\"") ); break;
case bt_brdrwavydb: sResult.Append( _T(" w:val=\"doubleWave\"") ); break;
case bt_brdrdashdotstr: sResult.Append( _T(" w:val=\"dashDotStroked\"") ); break;
case bt_brdremboss: sResult.Append( _T(" w:val=\"threeDEmboss\"") ); break;
case bt_brdrengrave: sResult.Append( _T(" w:val=\"threeDEngrave\"") ); break;
}
if( false == sResult.IsEmpty() )
{
@ -687,24 +687,24 @@ CString RtfCharProperty::RenderToRtf(RenderParameter oRenderParameter)
RENDER_RTF_INT( m_nForeColor, sResult, _T("cf") )
switch( m_eUnderStyle )
{
case uls_Single: sResult.Append( _T("\\ul") );break;
case uls_Dotted: sResult.Append( _T("\\uld") );break;
case uls_Dashed: sResult.Append( _T("\\uldash") );break;
case uls_Dash_dotted: sResult.Append( _T("\\uldashd") );break;
case uls_Dash_dot_dotted: sResult.Append( _T("\\uldashdd") );break;
case uls_Double: sResult.Append( _T("\\uldb") );break;
case uls_Heavy_wave: sResult.Append( _T("\\ulhwave") );break;
case uls_Long_dashe: sResult.Append( _T("\\ulldash") );break;
case uls_Stops_all: sResult.Append( _T("\\ulnone") );break;
case uls_Thick: sResult.Append( _T("\\ulth") );break;
case uls_Thick_dotted: sResult.Append( _T("\\ulthd") );break;
case uls_Thick_dashed: sResult.Append( _T("\\ulthdash") );break;
case uls_Thick_dash_dotted: sResult.Append( _T("\\ulthdashd") );break;
case uls_Single: sResult.Append( _T("\\ul") );break;
case uls_Dotted: sResult.Append( _T("\\uld") );break;
case uls_Dashed: sResult.Append( _T("\\uldash") );break;
case uls_Dash_dotted: sResult.Append( _T("\\uldashd") );break;
case uls_Dash_dot_dotted: sResult.Append( _T("\\uldashdd") );break;
case uls_Double: sResult.Append( _T("\\uldb") );break;
case uls_Heavy_wave: sResult.Append( _T("\\ulhwave") );break;
case uls_Long_dashe: sResult.Append( _T("\\ulldash") );break;
case uls_Stops_all: sResult.Append( _T("\\ulnone") );break;
case uls_Thick: sResult.Append( _T("\\ulth") );break;
case uls_Thick_dotted: sResult.Append( _T("\\ulthd") );break;
case uls_Thick_dashed: sResult.Append( _T("\\ulthdash") );break;
case uls_Thick_dash_dotted: sResult.Append( _T("\\ulthdashd") );break;
case uls_Thick_dash_dot_dotted: sResult.Append( _T("\\ulthdashdd") );break;
case uls_Thick_long_dashed: sResult.Append( _T("\\ulthldash") );break;
case uls_Double_wave: sResult.Append( _T("\\ululdbwave") );break;
case uls_Word: sResult.Append( _T("\\ulw") );break;
case uls_Wave: sResult.Append( _T("\\ulwave") );break;
case uls_Thick_long_dashed: sResult.Append( _T("\\ulthldash") );break;
case uls_Double_wave: sResult.Append( _T("\\ululdbwave") );break;
case uls_Word: sResult.Append( _T("\\ulw") );break;
case uls_Wave: sResult.Append( _T("\\ulwave") );break;
}
RENDER_RTF_INT( m_nUnderlineColor, sResult, _T("ulc") )
RENDER_RTF_INT( m_nUp, sResult, _T("up") )
@ -730,13 +730,13 @@ CString RtfCharProperty::RenderToOOX(RenderParameter oRenderParameter)
switch( m_nAnimated )
{
case 0:sResult.Append(_T("<w:effect w:val=\"none\"/>"));break;
case 1:sResult.Append(_T("<w:effect w:val=\"lights\"/>"));break;
case 2:sResult.Append(_T("<w:effect w:val=\"blinkBackground\"/>"));break;
case 3:sResult.Append(_T("<w:effect w:val=\"sparkle\"/>"));break;
case 4:sResult.Append(_T("<w:effect w:val=\"antsBlack\"/>"));break;
case 5:sResult.Append(_T("<w:effect w:val=\"antsRed\"/>"));break;
case 6:sResult.Append(_T("<w:effect w:val=\"shimmer\"/>"));break;
case 0: sResult.Append(_T("<w:effect w:val=\"none\"/>")); break;
case 1: sResult.Append(_T("<w:effect w:val=\"lights\"/>")); break;
case 2: sResult.Append(_T("<w:effect w:val=\"blinkBackground\"/>"));break;
case 3: sResult.Append(_T("<w:effect w:val=\"sparkle\"/>")); break;
case 4: sResult.Append(_T("<w:effect w:val=\"antsBlack\"/>")); break;
case 5: sResult.Append(_T("<w:effect w:val=\"antsRed\"/>")); break;
case 6: sResult.Append(_T("<w:effect w:val=\"shimmer\"/>")); break;
}
RENDER_OOX_BOOL( m_bBold, sResult, _T("w:b") )
RENDER_OOX_BOOL( m_bCaps, sResult, _T("w:caps") )
@ -1909,7 +1909,14 @@ CString RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter)
sResult += _T("\"/>") ;
}
}
RtfSectionPtr oCurSection;
if(true == poRtfDocument->GetItem( oCurSection ) )
{
sResult += oCurSection->RenderToOOX(oRenderParameter);
oCurSection->m_bFinalize = false;
}
if( 0 == m_bAutoHyphenation )
sResult.Append( _T("<w:suppressAutoHyphens/>") );
else if( 1 == m_bAutoHyphenation )
@ -1950,8 +1957,8 @@ CString RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter)
}
RENDER_OOX_INT_ATTRIBUTE( m_nIndLeft, sIndent, _T("w:left") );
RENDER_OOX_INT_ATTRIBUTE( m_nIndRight, sIndent, _T("w:right") );
RENDER_OOX_INT_ATTRIBUTE( m_nIndStart, sIndent, _T("w:start") );
RENDER_OOX_INT_ATTRIBUTE( m_nIndEnd, sIndent, _T("w:end") );
//RENDER_OOX_INT_ATTRIBUTE( m_nIndStart, sIndent, _T("w:start") );
//RENDER_OOX_INT_ATTRIBUTE( m_nIndEnd, sIndent, _T("w:end") );
if( false == sIndent.IsEmpty() )
{
sResult += _T("<w:ind ");
@ -2296,7 +2303,7 @@ CString RtfCellProperty::RenderToOOX(RenderParameter oRenderParameter)
if( true == m_oShading.IsValid() )
{
if (PROP_DEF != m_nShadingPctFrom && PROP_DEF != m_oShading.m_nValue )
if (PROP_DEF != m_nShadingPctFrom && PROP_DEF != m_oShading.m_nValue && m_oShading.m_nValue != 0)
{
// todooo тут цвет подложки подкладывается от ячейки, таблицы или еще какой хрени
// пока берем второй цвет паттерна Romanization_Armenian.rtf

View File

@ -120,6 +120,8 @@
sResult.AppendFormat( _T("%d"), prop );\
}
class RtfSection;
typedef boost::shared_ptr<RtfSection> RtfSectionPtr;
class RtfFont : public IRenderableProperty
{
@ -260,14 +262,14 @@ public:
return m_byteRed == oColor.m_byteRed && m_byteGreen == oColor.m_byteGreen && m_byteBlue == oColor.m_byteBlue &&
m_byteTint == oColor.m_byteTint && m_byteShade == oColor.m_byteShade && m_eTheme == oColor.m_eTheme;
}
void SetHEX(int color)
void SetHEX(int color)
{
SetDefault();
m_byteRed= (color&0xFF0000) >>16;
m_byteGreen = (color&0xFF00) >>4;
m_byteBlue = (color&0xFF);
m_byteRed = (color&0xFF0000) >> 16;
m_byteGreen = (color&0xFF00) >> 8;
m_byteBlue = (color&0xFF);
}
void SetRGB(BYTE red, BYTE green, BYTE blue)
void SetRGB(BYTE red, BYTE green, BYTE blue)
{
SetDefault();
m_byteRed = red;
@ -361,7 +363,7 @@ public:
else
SetDefault();
}
CString ToHexColor()
CString ToHexColor(bool bBGR = false)
{
BYTE byteRed = SetShade( m_byteRed );
byteRed = SetTint( byteRed );
@ -384,7 +386,9 @@ public:
sBlue.AppendFormat( _T("0%x"), byteBlue );
else
sBlue.AppendFormat( _T("%x"), byteBlue );
return sRed + sGreen + sBlue;
if (bBGR) return sBlue + sGreen + sRed ;
else return sRed + sGreen + sBlue ;
}
int ToInt()const
@ -779,10 +783,10 @@ public:
//свойство должно быть как единое целое, поэтому если oBorPr задано, то переписыватся целиком
if( st_none != oParPr.m_eType || PROP_DEF != oParPr.m_nValue || PROP_DEF != oParPr.m_nForeColor || PROP_DEF != oParPr.m_nBackColor )
{
m_eType = oParPr.m_eType;
m_nValue = oParPr.m_nValue;
m_nForeColor = oParPr.m_nForeColor;
m_nBackColor = oParPr.m_nBackColor;
m_eType = oParPr.m_eType;
m_nValue = oParPr.m_nValue;
m_nForeColor = oParPr.m_nForeColor;
m_nBackColor = oParPr.m_nBackColor;
}
}
CString RenderToOOX(RenderParameter oRenderParameter);
@ -2667,7 +2671,7 @@ public:
int m_bStyleSWCell;//\tscswcell SW cell.
int m_bStyleSECell;//\tscsecell SE cell.
RtfCharProperty m_oCharProperty;
RtfCharProperty m_oCharProperty;
RtfParagraphProperty()
{

View File

@ -621,51 +621,52 @@ public:
}
CString RenderToRtf(RenderParameter oRenderParameter);
CString RenderToOOX(RenderParameter oRenderParameter);
private: CString SaveFile( TextItemContainerPtr oTarget, RenderParameter oRenderParameter, bool bHeader);
private:
CString SaveFile( TextItemContainerPtr oTarget, RenderParameter oRenderParameter, bool bHeader);
};
typedef boost::shared_ptr<RtfSectionProperty> RtfSectionPropertyPtr;
typedef boost::shared_ptr<RtfDocumentProperty> RtfDocumentPropertyPtr;
class RtfSection :public TextItemContainer
typedef boost::shared_ptr<RtfSectionProperty> RtfSectionPropertyPtr;
typedef boost::shared_ptr<RtfDocumentProperty> RtfDocumentPropertyPtr;
class RtfSection : public TextItemContainer
{
public: RtfSectionProperty m_oProperty;
public:
RtfSectionProperty m_oProperty;
RtfSection()
{
}
int GetType()
{
return TYPE_RTF_SECTION;
}
CString RenderToRtf(RenderParameter oRenderParameter)
{
CString sResult;
sResult.Append( m_oProperty.RenderToRtf( oRenderParameter ) );
bool m_bFinalize;
if( RENDER_TO_RTF_PARAM_NO_SECT != oRenderParameter.nType )
sResult.Append(_T("\\sectd"));
for( int i = 0; i < (int)m_aArray.size(); i++ )
sResult.Append( m_aArray[i]->RenderToRtf( oRenderParameter ) );
return sResult;
}
CString RenderToOOX(RenderParameter oRenderParameter)
{
//CString sResult;
// CString sSectProp;
// RenderParameter oNewParam = oRenderParameter;
// oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
// sSectProp.Append(m_oProperty.RenderToOOX(oNewParam));
RtfSection()
{
m_bFinalize = false;
}
int GetType()
{
return TYPE_RTF_SECTION;
}
// CString sParagraphs;
// for( int i = 0; i < (int)m_aArray.size(); i++ )
// {
// sParagraphs.Append( m_aArray[i]->RenderToOOX(oNewParam) );
// }
//if( oRenderParameter.nType == RENDER_TO_OOX_PARAM_LAST )
// return sParagraphs + sSectProp;
//else
// return _T("<w:p><w:pPr>") + sSectProp + _T("</w:pPr></w:p>") + sParagraphs;
return _T("");
CString RenderToRtf(RenderParameter oRenderParameter)
{
CString sResult;
sResult.Append( m_oProperty.RenderToRtf( oRenderParameter ) );
if( RENDER_TO_RTF_PARAM_NO_SECT != oRenderParameter.nType )
sResult.Append(_T("\\sectd"));
for( int i = 0; i < (int)m_aArray.size(); i++ )
{
sResult += m_aArray[i]->RenderToRtf( oRenderParameter );
}
return sResult;
}
CString 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);
}
};
typedef boost::shared_ptr<RtfSection> RtfSectionPtr;

File diff suppressed because it is too large Load Diff

View File

@ -108,11 +108,16 @@ public:
int m_bHidden; //Do not display or print (only set through Visual Basic for Applications). Boolean FALSE
//Text box
int m_nAnchorText;
int m_nTexpLeft; //dxTextLeft Left internal margin of the text box. EMU 91,440
int m_nTexpTop; //
int m_nTexpRight; //
int m_nTexpBottom; //
int m_bFitShapeToText;
int m_bFitTextToShape;
int m_nCcol; //columns
int m_nTxdir; //bidi
int m_nWrapText;
//Geometry
int m_nAdjustValue; //adjustValue First adjust value from an adjust handle. The interpretation varies with the shape type. Adjust values alter the geometry of the shape in smart ways. Integer 0
int m_nAdjustValue2;

View File

@ -184,4 +184,122 @@ CString OOXDocumentWriter::CreateXmlEnd( )
sResult.Append( _T("</w:document>") );
return sResult;
}
bool OOXDocumentWriter::SaveByItemStart( CString sFolder )
{
CString pathWord = sFolder + FILE_SEPARATOR_STR + _T("word");
FileSystem::Directory::CreateDirectory(pathWord) ;
try
{
CString sFilename = pathWord + FILE_SEPARATOR_STR + _T("document.xml");
m_oFileWriter = new NFileWriter::CBufferedFileWriter( sFilename );
}
catch(...)
{
return false;
}
m_oWriter.m_oRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"), _T("word/document.xml") );
m_oWriter.m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"), _T("/word/document.xml") );
CString sXml = CreateXmlStart( );
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
m_oFileWriter->Write((BYTE*)sXmlUTF.c_str(), sXmlUTF.length());
return true;
}
bool OOXDocumentWriter::SaveByItem()
{
if( true == m_bFirst )
m_bFirst = false;
else
{
RenderParameter oNewParam;
oNewParam.poDocument = &m_oDocument;
oNewParam.poWriter = &m_oWriter;
oNewParam.poRels = &m_oWriter.m_oDocRels;
oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
if( m_oDocument.GetCount() > 1)//если что-то есть в следующей секции значит предудущая закончилась
{
if( m_oDocument[1]->GetCount() > 0 )
{
CString sSectPr = m_oDocument[0]->m_oProperty.RenderToOOX(oNewParam);
CString sXml = m_oDocument[1]->operator[](0)->RenderToOOX(oNewParam);
int nIndexP = sXml.Find( _T("<w:p>") );
if (nIndexP == 0) //элемент параграф
{
int nIndexpPr = sXml.Find( _T("</w:pPr>") );
if( -1 != nIndexpPr )
{
sXml.Insert( nIndexpPr, sSectPr );
}
else
{
sSectPr = _T("<w:pPr>") + sSectPr + _T("</w:pPr>");
sXml.Insert( 5, sSectPr );
}
}
else
{
sXml = _T("<w:p><w:pPr>") + sSectPr + _T("</w:pPr></w:p>") + sXml;
}
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
m_oFileWriter->Write((BYTE*)sXmlUTF.c_str(), sXmlUTF.length());
m_oDocument[1]->RemoveItem( 0 ); //удаляем первый параграф
m_oDocument.RemoveItem( 0 ); //удаляем секцию
}
}
else if( m_oDocument.GetCount() > 0 && m_oDocument[0]->GetCount() > 0 )//пишем параграф
{
CString sXml = m_oDocument[0]->operator[](0)->RenderToOOX(oNewParam);
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
if (m_oFileWriter)
{
m_oFileWriter->Write((BYTE*)sXmlUTF.c_str(), sXmlUTF.length());
}
else
{
//!!!!
m_oFileWriter = NULL;
}
m_oDocument[0]->RemoveItem( 0 );//удаляем первый параграф
}
}
return true;
}
bool OOXDocumentWriter::SaveByItemEnd()
{
RenderParameter oNewParam;
oNewParam.poDocument = &m_oDocument;
oNewParam.poWriter = &m_oWriter;
oNewParam.poRels = &m_oWriter.m_oDocRels;
oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
if( m_oDocument.GetCount() > 0 && m_oDocument[0]->GetCount() > 0 )//дописываем последний параграф
{
CString sXml = m_oDocument[0]->operator[](0)->RenderToOOX(oNewParam);
//удаляем первый параграф
m_oDocument[0]->RemoveItem( 0 );
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
m_oFileWriter->Write((BYTE*)sXmlUTF.c_str(), sXmlUTF.length());
}
CString sXml = CreateXmlEnd( );
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
if (m_oFileWriter)
{
m_oFileWriter->Write((BYTE*)sXmlUTF.c_str(), sXmlUTF.length());
}
RELEASEOBJECT( m_oFileWriter );
return true;
}

View File

@ -56,117 +56,10 @@ public:
CString CreateXmlEnd( );
bool SaveByItemStart( CString sFolder )
{
CString pathWord = sFolder + FILE_SEPARATOR_STR + _T("word");
FileSystem::Directory::CreateDirectory(pathWord) ;
try
{
CString sFilename = pathWord + FILE_SEPARATOR_STR + _T("document.xml");
m_oFileWriter = new NFileWriter::CBufferedFileWriter( sFilename );
}
catch(...)
{
return false;
}
m_oWriter.m_oRels.AddRelationship( _T("http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"), _T("word/document.xml") );
m_oWriter.m_oContentTypes.AddContent( _T("application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"), _T("/word/document.xml") );
bool SaveByItemStart( CString sFolder );
bool SaveByItem ();
bool SaveByItemEnd ();
CString sXml = CreateXmlStart( );
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
m_oFileWriter->Write((BYTE*)sXmlUTF.c_str(), sXmlUTF.length());
return true;
}
bool SaveByItem()
{
if( true == m_bFirst )
m_bFirst = false;
else
{
RenderParameter oNewParam;
oNewParam.poDocument = &m_oDocument;
oNewParam.poWriter = &m_oWriter;
oNewParam.poRels = &m_oWriter.m_oDocRels;
oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
if( m_oDocument.GetCount() > 1 && m_oDocument[1]->GetCount() > 0 )//если что-то есть в следующей секции значит предудущая закончилась
{
if( m_oDocument[0]->GetCount() > 0 )
{
CString sXml = m_oDocument[0]->operator[](0)->RenderToOOX(oNewParam);
//пишем вставляем свойства секции
CString sSectPr = m_oDocument[0]->m_oProperty.RenderToOOX(oNewParam);
CString sFindStr = _T("</w:pPr>");
int nIndexpPr = sXml.Find( sFindStr );
if( -1 != nIndexpPr )
{
sXml.Insert( nIndexpPr, sSectPr );
}
else
{
sFindStr = _T("<w:p>");
int nIndexP = sXml.Find( _T("<w:p>") );
if( -1 != nIndexP )
sXml.Insert( nIndexP + sFindStr.GetLength(), _T("<w:pPr>") + sSectPr + _T("</w:pPr>") );
}
//удаляем первый параграф
m_oDocument[0]->RemoveItem( 0 );
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
m_oFileWriter->Write((BYTE*)sXmlUTF.c_str(), sXmlUTF.length());
}
//удаляем секцию
m_oDocument.RemoveItem( 0 );
}
else if( m_oDocument.GetCount() > 0 && m_oDocument[0]->GetCount() > 0 )//пишем параграф
{
CString sXml = m_oDocument[0]->operator[](0)->RenderToOOX(oNewParam);
//удаляем первый параграф
m_oDocument[0]->RemoveItem( 0 );
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
if (m_oFileWriter)
{
m_oFileWriter->Write((BYTE*)sXmlUTF.c_str(), sXmlUTF.length());
}
else
{
//!!!!
m_oFileWriter = NULL;
}
}
}
return true;
}
bool SaveByItemEnd()
{
RenderParameter oNewParam;
oNewParam.poDocument = &m_oDocument;
oNewParam.poWriter = &m_oWriter;
oNewParam.poRels = &m_oWriter.m_oDocRels;
oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN;
if( m_oDocument.GetCount() > 0 && m_oDocument[0]->GetCount() > 0 )//дописываем последний параграф
{
CString sXml = m_oDocument[0]->operator[](0)->RenderToOOX(oNewParam);
//удаляем первый параграф
m_oDocument[0]->RemoveItem( 0 );
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
m_oFileWriter->Write((BYTE*)sXmlUTF.c_str(), sXmlUTF.length());
}
CString sXml = CreateXmlEnd( );
std::string sXmlUTF = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(sXml.GetBuffer());
if (m_oFileWriter)
{
m_oFileWriter->Write((BYTE*)sXmlUTF.c_str(), sXmlUTF.length());
}
RELEASEOBJECT( m_oFileWriter );
return true;
}
int GetCount()
{
int nCount = 0;