diff --git a/ASCOfficePPTXFile/Editor/BinaryFileReaderWriter.cpp b/ASCOfficePPTXFile/Editor/BinaryFileReaderWriter.cpp index c6f7b5851c..e2b7367b03 100644 --- a/ASCOfficePPTXFile/Editor/BinaryFileReaderWriter.cpp +++ b/ASCOfficePPTXFile/Editor/BinaryFileReaderWriter.cpp @@ -357,7 +357,7 @@ namespace NSBinPptxRW oStream2.write(dataObjInfo, arraysize(dataObjInfo)); oStream2.flush(); //Ole10Native Stream - std::string sDataUtf8 = NSFile::CUtf8Converter::GetUtf8StringFromUnicode2(sData.c_str(), sData.size()); + std::string sDataUtf8 = NSFile::CUtf8Converter::GetUtf8StringFromUnicode2(sData.c_str(), (LONG)sData.size()); BYTE head[] = {0x00,0x00,0x00,0x00}; //LittleEndian diff --git a/ASCOfficePPTXFile/Editor/Drawing/Shapes/BaseShape/Common.h b/ASCOfficePPTXFile/Editor/Drawing/Shapes/BaseShape/Common.h index cb7f3e3681..a2629901e3 100644 --- a/ASCOfficePPTXFile/Editor/Drawing/Shapes/BaseShape/Common.h +++ b/ASCOfficePPTXFile/Editor/Drawing/Shapes/BaseShape/Common.h @@ -201,13 +201,13 @@ namespace NSStringUtils return; std::wstring strPath = strSource; - int nLength = strPath.length(); + size_t nLength = strPath.length(); //strPath.Replace(_T(" "), _T(",")); - if (strPath.find(wchar_t('h')) != -1) + if (std::wstring::npos != strPath.find(wchar_t('h'))) { wchar_t* pBuff = new wchar_t[nLength + 1]; int nCur = 0; - for (int i = 1; i < nLength; ++i) + for (size_t i = 1; i < nLength; ++i) { wchar_t _c = strPath[i - 1]; if (_c != wchar_t('h')) @@ -253,8 +253,8 @@ namespace NSStringUtils ++nLength; } - int nIndexOld = 0; - for (int nIndex = 0; nIndex < nLength; ++nIndex) + size_t nIndexOld = 0; + for (size_t nIndex = 0; nIndex < nLength; ++nIndex) { if (nIndex == (nLength - 1)) { diff --git a/ASCOfficePPTXFile/PPTXFormat/FileContainer.cpp b/ASCOfficePPTXFile/PPTXFormat/FileContainer.cpp index 996441e52b..9098a42286 100644 --- a/ASCOfficePPTXFile/PPTXFormat/FileContainer.cpp +++ b/ASCOfficePPTXFile/PPTXFormat/FileContainer.cpp @@ -70,8 +70,8 @@ namespace PPTX if (directory[directory.length() - 1] == FILE_SEPARATOR_CHAR) directory = directory.substr(0, directory.length() - 1); - int pos_ppt = directory.rfind(L"ppt"); - if (pos_ppt >= 0) + size_t pos_ppt = directory.rfind(L"ppt"); + if (std::wstring::npos != pos_ppt) { directory = directory.substr(0, pos_ppt - 1); //root directory } diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/Basic.h b/ASCOfficeRtfFile/RtfFormatLib/source/Basic.h index 8cf2d438e2..dc4effac8e 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/Basic.h +++ b/ASCOfficeRtfFile/RtfFormatLib/source/Basic.h @@ -132,7 +132,7 @@ public: } void RemoveItem( T piRend ) { - for (size_t i = 0; i < (int)m_aArray.size(); i++ ) + for (size_t i = 0; i < m_aArray.size(); i++ ) { if( m_aArray[i] == piRend ) { diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/DestinationCommand.cpp b/ASCOfficeRtfFile/RtfFormatLib/source/DestinationCommand.cpp index 542138087e..9bdfd5266f 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/DestinationCommand.cpp +++ b/ASCOfficeRtfFile/RtfFormatLib/source/DestinationCommand.cpp @@ -67,7 +67,7 @@ void ConvertOle1ToOle2(BYTE *pData, int nSize, std::wstring sOle2Name) { _UINT32 tmp = 0; std::string name = ole1Reader.Header.ClassName.val; - _UINT32 name_size = name.length() + 1; + _UINT32 name_size = (_UINT32)name.length() + 1; //Ole BYTE dataOleInfo[] = {0x01,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; POLE::Stream oStream3(storageOut, L"\001Ole", true, 20); @@ -160,6 +160,14 @@ bool RtfDocumentCommand::ExecuteCommand(RtfDocument& oDocument, RtfReader& oRead oReader.m_nDefFont = parameter; } } + else if ( "dgmargin" == sCommand )//Drawing grid to follow margins. + { + + } + else if ( "dgsnap" == sCommand )//Snap to drawing grid. + { + + } COMMAND_RTF_INT ( "themelang", oDocument.m_oProperty.m_nThemelang, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "themelangfe", oDocument.m_oProperty.m_nThemelangfe, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "themelangcs", oDocument.m_oProperty.m_nThemelangcs, sCommand, hasParameter, parameter ) @@ -178,7 +186,16 @@ bool RtfDocumentCommand::ExecuteCommand(RtfDocument& oDocument, RtfReader& oRead COMMAND_RTF_BOOL( "pgbrdrfoot", oDocument.m_oProperty.m_bDorderSurroundFotter, sCommand, hasParameter, parameter ) COMMAND_RTF_BOOL( "pgbrdrsnap", oDocument.m_oProperty.m_bAlignBordersAndEdges, sCommand, hasParameter, parameter ) -//Page Information + COMMAND_RTF_INT ( "dghspace", oDocument.m_oProperty.m_nDrawingGridHorizontalSpacing, sCommand, hasParameter, parameter ) + COMMAND_RTF_INT ( "dgvspace", oDocument.m_oProperty.m_nDrawingGridVerticalSpacing, sCommand, hasParameter, parameter ) + COMMAND_RTF_INT ( "dghorigin", oDocument.m_oProperty.m_nDrawingGridHorizontalOrigin, sCommand, hasParameter, parameter ) + COMMAND_RTF_INT ( "dgvorigin", oDocument.m_oProperty.m_nDrawingGridVerticalOrigin, sCommand, hasParameter, parameter ) + COMMAND_RTF_INT ( "dghshow", oDocument.m_oProperty.m_nDisplayHorizontalDrawingGridEvery, sCommand, hasParameter, parameter ) + COMMAND_RTF_INT ( "dgvshow", oDocument.m_oProperty.m_nDisplayVerticalDrawingGridEvery, sCommand, hasParameter, parameter ) + + COMMAND_RTF_INT ( "viewscale", oDocument.m_oProperty.m_nZoom, sCommand, hasParameter, parameter ) + +//Page Informationf else if ( "paperw" == sCommand ) { if ( hasParameter ) @@ -1003,7 +1020,11 @@ bool RtfCharPropsCommand::ExecuteCommand(RtfDocument& oDocument, RtfReader& oRea { charProps->m_nRevised = 1; } - else if ( "deleted" == sCommand ) + else if ( "v" == sCommand ) + { + charProps->m_bHidden = 1; + } + else if ( "deleted" == sCommand ) { charProps->m_nDeleted = 1; } @@ -1090,25 +1111,25 @@ bool RtfParagraphPropsCommand::ExecuteCommand(RtfDocument& oDocument, RtfReader& } COMMAND_RTF_INT ( "faauto", paragraphProps->m_eFontAlign, sCommand, true, RtfParagraphProperty::fa_faauto ) COMMAND_RTF_INT ( "fahang", paragraphProps->m_eFontAlign, sCommand, true, RtfParagraphProperty::fa_fahang ) - COMMAND_RTF_INT ( "facenter", paragraphProps->m_eFontAlign, sCommand, true, RtfParagraphProperty::fa_facenter ) - COMMAND_RTF_INT ( "faroman", paragraphProps->m_eFontAlign, sCommand, true, RtfParagraphProperty::fa_faroman ) - COMMAND_RTF_INT ( "favar", paragraphProps->m_eFontAlign, sCommand, true, RtfParagraphProperty::fa_favar ) - COMMAND_RTF_INT ( "fafixed", paragraphProps->m_eFontAlign, sCommand, true, RtfParagraphProperty::fa_fafixed ) + COMMAND_RTF_INT ( "facenter", paragraphProps->m_eFontAlign, sCommand, true, RtfParagraphProperty::fa_facenter ) + COMMAND_RTF_INT ( "faroman", paragraphProps->m_eFontAlign, sCommand, true, RtfParagraphProperty::fa_faroman ) + COMMAND_RTF_INT ( "favar", paragraphProps->m_eFontAlign, sCommand, true, RtfParagraphProperty::fa_favar ) + COMMAND_RTF_INT ( "fafixed", paragraphProps->m_eFontAlign, sCommand, true, RtfParagraphProperty::fa_fafixed ) COMMAND_RTF_INT ( "fi", paragraphProps->m_nIndFirstLine, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "li", paragraphProps->m_nIndLeft, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "ri", paragraphProps->m_nIndRight, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "lin", paragraphProps->m_nIndStart, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "rin", paragraphProps->m_nIndEnd, sCommand, hasParameter, parameter ) - COMMAND_RTF_BOOL( "adjustright", paragraphProps->m_bIndRightAuto, sCommand, hasParameter, parameter ) - COMMAND_RTF_BOOL( "indmirror", paragraphProps->m_bIndMirror, sCommand, hasParameter, parameter ) + COMMAND_RTF_INT ( "lin", paragraphProps->m_nIndStart, sCommand, hasParameter, parameter ) + COMMAND_RTF_INT ( "rin", paragraphProps->m_nIndEnd, sCommand, hasParameter, parameter ) + COMMAND_RTF_BOOL( "adjustright",paragraphProps->m_bIndRightAuto, sCommand, hasParameter, parameter ) + COMMAND_RTF_BOOL( "indmirror", paragraphProps->m_bIndMirror, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "sb", paragraphProps->m_nSpaceBefore, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "sa", paragraphProps->m_nSpaceAfter, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "sbauto", paragraphProps->m_nSpaceBeforeAuto, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "saauto", paragraphProps->m_nSpaceAfterAuto, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "lisb", paragraphProps->m_nSpaceBeforeLine, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "lisa", paragraphProps->m_nSpaceAfterLine, sCommand, hasParameter, parameter ) + COMMAND_RTF_INT ( "lisb", paragraphProps->m_nSpaceBeforeLine, sCommand, hasParameter, parameter ) + COMMAND_RTF_INT ( "lisa", paragraphProps->m_nSpaceAfterLine, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "slmult", paragraphProps->m_nSpaceMultiLine, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT ( "ilvl", paragraphProps->m_nListLevel, sCommand, hasParameter, parameter ) + COMMAND_RTF_INT ( "ilvl", paragraphProps->m_nListLevel, sCommand, hasParameter, parameter ) COMMAND_RTF_BOOL( "absnoovrlp", paragraphProps->m_bOverlap, sCommand, hasParameter, parameter ) @@ -1159,18 +1180,18 @@ bool RtfParagraphPropsCommand::ExecuteCommand(RtfDocument& oDocument, RtfReader& COMMAND_RTF_INT ( "posxr", paragraphProps->m_oFrame.m_eHPos, sCommand, true, RtfFrame::hp_posxr ) COMMAND_RTF_INT ( "pvmrg", paragraphProps->m_oFrame.m_eVRef, sCommand, true, RtfFrame::vr_pvmrg ) COMMAND_RTF_INT ( "pvpg", paragraphProps->m_oFrame.m_eVRef, sCommand, true, RtfFrame::vr_pvpg ) - COMMAND_RTF_INT ( "pvpara", paragraphProps->m_oFrame.m_eVRef, sCommand, true, RtfFrame::vr_pvpara ) + COMMAND_RTF_INT ( "pvpara", paragraphProps->m_oFrame.m_eVRef, sCommand, true, RtfFrame::vr_pvpara ) COMMAND_RTF_INT ( "posy", paragraphProps->m_oFrame.m_nVPos, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "posnegy", paragraphProps->m_oFrame.m_nVPos, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "posyt", paragraphProps->m_oFrame.m_eVPos, sCommand, true, RtfFrame::vp_posyt ) - COMMAND_RTF_INT ( "posyil", paragraphProps->m_oFrame.m_eVPos, sCommand, true, RtfFrame::vp_posyil ) + COMMAND_RTF_INT ( "posyil", paragraphProps->m_oFrame.m_eVPos, sCommand, true, RtfFrame::vp_posyil ) COMMAND_RTF_INT ( "posyb", paragraphProps->m_oFrame.m_eVPos, sCommand, true, RtfFrame::vp_posyb ) COMMAND_RTF_INT ( "posyc", paragraphProps->m_oFrame.m_eVPos, sCommand, true, RtfFrame::vp_posyc ) - COMMAND_RTF_INT ( "posyin", paragraphProps->m_oFrame.m_eVPos, sCommand, true, RtfFrame::vp_posyin ) + COMMAND_RTF_INT ( "posyin", paragraphProps->m_oFrame.m_eVPos, sCommand, true, RtfFrame::vp_posyin ) COMMAND_RTF_INT ( "posyout", paragraphProps->m_oFrame.m_eVPos, sCommand, true, RtfFrame::vp_posyout ) COMMAND_RTF_BOOL( "abslock", paragraphProps->m_oFrame.m_bLockAnchor, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "wrapdefault", paragraphProps->m_oFrame.m_eWrap, sCommand, true, RtfFrame::tw_wrapdefault ) - COMMAND_RTF_INT ( "wraparound", paragraphProps->m_oFrame.m_eWrap, sCommand, true, RtfFrame::tw_wraparound ) + COMMAND_RTF_INT ( "wraparound", paragraphProps->m_oFrame.m_eWrap, sCommand, true, RtfFrame::tw_wraparound ) COMMAND_RTF_INT ( "wraptight", paragraphProps->m_oFrame.m_eWrap, sCommand, true, RtfFrame::tw_wraptight ) COMMAND_RTF_INT ( "wrapthrough", paragraphProps->m_oFrame.m_eWrap, sCommand, true, RtfFrame::tw_wrapthrough ) COMMAND_RTF_INT ( "dropcapt", paragraphProps->m_oFrame.m_DropcapType, sCommand, hasParameter, parameter ) @@ -1181,8 +1202,8 @@ bool RtfParagraphPropsCommand::ExecuteCommand(RtfDocument& oDocument, RtfReader& COMMAND_RTF_INT ( "frmtxlrtb", paragraphProps->m_eTextFollow, sCommand, true, RtfParagraphProperty::tf_frmtxlrtb ) COMMAND_RTF_INT ( "frmtxtbrl", paragraphProps->m_eTextFollow, sCommand, true, RtfParagraphProperty::tf_frmtxtbrl ) COMMAND_RTF_INT ( "frmtxbtlr", paragraphProps->m_eTextFollow, sCommand, true, RtfParagraphProperty::tf_frmtxbtlr ) - COMMAND_RTF_INT ( "frmtxlrtbv", paragraphProps->m_eTextFollow, sCommand, true, RtfParagraphProperty::tf_frmtxlrtbv ) - COMMAND_RTF_INT ( "frmtxtbrlv", paragraphProps->m_eTextFollow, sCommand, true, RtfParagraphProperty::tf_frmtxtbrlv ) + COMMAND_RTF_INT ( "frmtxlrtbv", paragraphProps->m_eTextFollow, sCommand, true, RtfParagraphProperty::tf_frmtxlrtbv ) + COMMAND_RTF_INT ( "frmtxtbrlv", paragraphProps->m_eTextFollow, sCommand, true, RtfParagraphProperty::tf_frmtxtbrlv ) else { @@ -1278,13 +1299,13 @@ bool RtfTableRowPropsCommand::ExecuteCommand(RtfDocument& oDocument, RtfReader& if (!rowProps) return false; if ( "trowd" == sCommand ) rowProps->SetDefaultRtf(); - else if ( "nesttableprops" == sCommand ) rowProps->SetDefaultRtf(); + else if ( "nesttableprops" == sCommand ) rowProps->SetDefaultRtf(); COMMAND_RTF_INT ( "irow", rowProps->m_nIndex, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "irowband", rowProps->m_nBandIndex, sCommand, hasParameter, parameter ) COMMAND_RTF_BOOL( "lastrow", rowProps->m_bLastRow, sCommand, hasParameter, parameter ) COMMAND_RTF_BOOL( "trhdr", rowProps->m_bIsHeader, sCommand, hasParameter, parameter ) - COMMAND_RTF_BOOL( "trkeep", rowProps->m_bKeep, sCommand, hasParameter, parameter ) + COMMAND_RTF_BOOL( "trkeep", rowProps->m_bKeep, sCommand, hasParameter, parameter ) COMMAND_RTF_BOOL( "trkeepfollow", rowProps->m_bKeep, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "trql", rowProps->m_eJust, sCommand, true, RtfRowProperty::rj_trql ) @@ -1400,6 +1421,9 @@ bool RtfTableRowPropsCommand::ExecuteCommand(RtfDocument& oDocument, RtfReader& COMMAND_RTF_INT ( "trdate", rowProps->m_nTrDate, sCommand, hasParameter, parameter ) COMMAND_RTF_INT ( "trauth", rowProps->m_nTrAuth, sCommand, hasParameter, parameter ) + else if ( "rtlrow" == sCommand ) rowProps->m_nRightToLeft = 1; + else if ( "ltrrow" == sCommand ) rowProps->m_nRightToLeft = 0; + else return false; @@ -1436,11 +1460,9 @@ bool RtfOldShapeReader::ExecuteCommand(RtfDocument& oDocument, RtfReader& oReade StartSubReader( oParagraphReader, oDocument, oReader ); m_oShape.m_aTextItems = oParagraphReader.m_oParPropDest.m_oTextItems; } - //else if ( "shpbxignore" == sCommand ) m_oShape.m_eXAnchor = RtfShape::ax_ignore; else if ( "dobxpage" == sCommand ) m_oShape.m_eXAnchor = RtfShape::ax_page; else if ( "dobxmargin" == sCommand ) m_oShape.m_eXAnchor = RtfShape::ax_margin; else if ( "dobxcolumn" == sCommand ) m_oShape.m_eXAnchor = RtfShape::ax_column; - //else if ( "shpbyignore" == sCommand ) m_oShape.m_eYAnchor = RtfShape::ay_ignore; else if ( "dobypage" == sCommand ) m_oShape.m_eYAnchor = RtfShape::ay_page; else if ( "dobymargin" == sCommand ) m_oShape.m_eYAnchor = RtfShape::ay_margin; else if ( "dobypara" == sCommand ) m_oShape.m_eYAnchor = RtfShape::ay_Para; @@ -1461,7 +1483,11 @@ bool RtfOldShapeReader::ExecuteCommand(RtfDocument& oDocument, RtfReader& oReade else if ( "dofblwtxt" == sCommand ) m_oShape.m_nZOrderRelative = parameter; else if ( "dplinew" == sCommand ) m_oShape.m_nLineWidth = parameter; else if ( "dodhgt" == sCommand ) m_oShape.m_nZOrder = parameter; - else if ( "dpfillpat" == sCommand ) + else if ( "dptxbxmar" == sCommand ) + { + m_oShape.m_nTexpLeft = m_oShape.m_nTexpTop = m_oShape.m_nTexpRight = m_oShape.m_nTexpBottom = RtfUtility::Twips2Emu(parameter); + } + else if ( "dpfillpat" == sCommand ) { m_oShape.m_nFillType = parameter; if (m_oShape.m_nFillType == 0) m_oShape.m_bFilled = false; @@ -1528,20 +1554,24 @@ bool RtfShapeReader::ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, else if ( "shpz" == sCommand ) { if ( hasParameter ) + { m_oShape.m_nZOrder = parameter; + + oDocument.SetZIndex(abs(m_oShape.m_nZOrder)); + } } else if ( "shpfhdr" == sCommand ) { if ( hasParameter ) m_oShape.m_nHeader = parameter; } - //else if ( "shpbxignore" == sCommand ) m_oShape.m_eXAnchor = RtfShape::ax_ignore; + else if ( "shpbxignore" == sCommand ) m_oShape.m_eXAnchor = RtfShape::ax_none; // PHy2.rtf else if ( "shpbxpage" == sCommand ) m_oShape.m_eXAnchor = RtfShape::ax_page; - else if ( "shpbxmargin" == sCommand ) m_oShape.m_eXAnchor = RtfShape::ax_margin; - else if ( "shpbxcolumn" == sCommand ) m_oShape.m_eXAnchor = RtfShape::ax_column; - //else if ( "shpbyignore" == sCommand ) m_oShape.m_eYAnchor = RtfShape::ay_ignore; + else if ( "shpbxmargin" == sCommand ) m_oShape.m_eXAnchor = RtfShape::ax_margin; + else if ( "shpbxcolumn" == sCommand ) m_oShape.m_eXAnchor = RtfShape::ax_column; + else if ( "shpbyignore" == sCommand ) m_oShape.m_eYAnchor = RtfShape::ay_none; // PHy2.rtf else if ( "shpbypage" == sCommand ) m_oShape.m_eYAnchor = RtfShape::ay_page; - else if ( "shpbymargin" == sCommand ) m_oShape.m_eYAnchor = RtfShape::ay_margin; + else if ( "shpbymargin" == sCommand ) m_oShape.m_eYAnchor = RtfShape::ay_margin; else if ( "shpbypara" == sCommand ) m_oShape.m_eYAnchor = RtfShape::ay_Para; else if ( "shpwr" == sCommand ) { @@ -1773,7 +1803,7 @@ void RtfOleBinReader::GetData( BYTE** ppData, long& nSize) (*ppData)[pos++] = nByte; } } - nSize = pos; + nSize = (long)pos; } bool RtfOleReader::ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter) { @@ -1932,7 +1962,8 @@ void RtfShapeReader::ShapePropertyReader::ShapePropertyValueReader::PopState( Rt { XmlUtils::replace_all(splitted[i], L")", L""); XmlUtils::replace_all(splitted[i], L"(", L""); - int pos = splitted[i].find(L","); + + int pos = (int)splitted[i].find(L","); int x = 0, y = 0; try @@ -1959,7 +1990,8 @@ void RtfShapeReader::ShapePropertyReader::ShapePropertyValueReader::PopState( Rt { XmlUtils::replace_all(splitted[i], L")", L""); XmlUtils::replace_all(splitted[i], L"(", L""); - int pos = splitted[i].find(L","); + + int pos = (int)splitted[i].find(L","); int x = 0, y = 0; try @@ -2066,7 +2098,8 @@ void RtfShapeReader::ShapePropertyReader::ShapePropertyValueReader::PopState( Rt { XmlUtils::replace_all(splitted[i], L")", L""); XmlUtils::replace_all(splitted[i], L"(", L""); - int pos = splitted[i].find(L","); + + int pos = (int)splitted[i].find(L","); int col = 0, pos_col = 0; try diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/DestinationCommand.h b/ASCOfficeRtfFile/RtfFormatLib/source/DestinationCommand.h index c62599f6cd..3d09511511 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/DestinationCommand.h +++ b/ASCOfficeRtfFile/RtfFormatLib/source/DestinationCommand.h @@ -316,7 +316,7 @@ public: std::wstring RemoveLastUnchar(std::wstring str) { - int i = 1; + size_t i = 1; while(true) { if (i > str.length()) @@ -336,16 +336,20 @@ public: m_oFont.m_sAltName += sText; else if( is_normal == m_eInternalState && sText.length() > 0) { - int pos = sText.find(';'); - if (pos >= 0) + size_t pos = sText.find(';'); + if (std::wstring::npos != pos) { sText.erase(pos, 1); - if( sText.find('&') !=0 )//todooo выясниснить что значит &; + if( std::wstring::npos != sText.find('&') )//todooo выясниснить что значит &; { //sText.Remove('&'); // m_oFont.m_sName += RemoveLastUnchar(sText); } + else + { + m_oFont.m_sName += sText; + } //todooo при добавлении могут быть повторы - убрать нннадо - goldwingSetting.rtf oDocument.m_oFontTable.DirectAddItem( m_oFont ); @@ -421,8 +425,8 @@ public: //Romanization_Armenian.rtf //{\colortbl\red0\blue159\green82;\red0\blue0\green0;\red255\blue255\green255;\red0\blue156\green90;\red169\blue86\green0;} //{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255; - int pos = oText.find(';'); - if( -1 != pos) + size_t pos = oText.find(';'); + if( std::wstring::npos != pos) { if( true == m_bIsSet ) { @@ -1392,7 +1396,7 @@ private: std::wstring sCharFont; std::wstring sField = m_oField.m_pInsert->m_pTextItems->RenderToOOX(oNewParametr); - int nStartTokenize = 0; + size_t nStartTokenize = 0; int nCommand = 0; //0 - none; 1 - \f; 3 - other @@ -1419,19 +1423,19 @@ private: { std::wstring sResTokenize = arResult[i]; - int nTokenLen = sResTokenize.length(); + size_t nTokenLen = sResTokenize.length(); if( nTokenLen > 0 && sResTokenize[0] == '\"' && sResTokenize[nTokenLen - 1] != '\"' ) //текст в кавычках считается как один { //ищем следующую кавычку - int nNextQuot = sField.find( '\"', nStartTokenize ); - if( -1 != nNextQuot ) + size_t nNextQuot = sField.find( '\"', nStartTokenize ); + if( std::wstring::npos != nNextQuot ) { sResTokenize = sField.substr( nStartTokenize - nTokenLen, nNextQuot - nStartTokenize + nTokenLen ); nStartTokenize = nNextQuot + 1; for (; i < arResult.size(); i++) { - if ( 0 <= arResult[i].find( '\"')) + if ( std::wstring::npos != arResult[i].find( '\"')) break; } } @@ -1439,9 +1443,9 @@ private: if( nTokenLen > 0 && sResTokenize[0] == '\"' && sResTokenize[nTokenLen - 1] == '\"' ) sResTokenize = sResTokenize.substr( 1, nTokenLen - 2 ); - if( -1 != sResTokenize.find( L"\\f" ) ) + if( std::wstring::npos != sResTokenize.find( L"\\f" ) ) nCommand = 1; - else if( -1 != sResTokenize.find( L"\\" ) ) + else if( std::wstring::npos != sResTokenize.find( L"\\" ) ) nCommand = 3; else if( 1 == nCommand ) { @@ -1455,7 +1459,7 @@ private: else nCommand = 0; - nStartTokenize += (int)sResTokenize.length(); + nStartTokenize += sResTokenize.length(); } std::wstring sResult; @@ -2024,8 +2028,8 @@ class RtfStyleTableReader: public RtfAbstractReader { while (true) { - int pos = sText.find(';'); - if (pos < 0) break; + size_t pos = sText.find(';'); + if (std::wstring::npos == pos) break; sText.erase(pos, 1); } @@ -2056,8 +2060,10 @@ class RtfStyleTableReader: public RtfAbstractReader RtfTableStylePtr m_oCurTableStyle = boost::static_pointer_cast< RtfTableStyle, RtfStyle >( m_oCurStyle ); m_oCurTableStyle->m_oCharProp = oReader.m_oState->m_oCharProp; m_oCurTableStyle->m_oParProp = oReader.m_oState->m_oParagraphProp; + if( PROP_DEF == m_oCurTableStyle->m_oParProp.m_nSpaceBetween ) m_oCurTableStyle->m_oParProp.m_nSpaceBetween = 240;//интервал - единичный + m_oCurTableStyle->m_oTableProp = oReader.m_oState->m_oRowProperty; m_oCurTableStyle->m_oRowProp = oReader.m_oState->m_oRowProperty; //m_oCurTableStyle->m_oTableStyleProperty = m_oTableStyleProperty; @@ -2286,21 +2292,35 @@ private: lfolevelReader( RtfListOverrideProperty::ListOverrideLevels::ListOverrideLevel& oOverrideLevel ):m_oOverrideLevel(oOverrideLevel) { } - bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter) + bool ExecuteCommand(RtfDocument& oDocument, RtfReader& oReader, std::string sCommand, bool hasParameter, int parameter) { - if( "lfolevel" == sCommand) - return true; - COMMAND_RTF_INT( "listoverrideformat", m_oOverrideLevel.m_nLevelIndex, sCommand, hasParameter, parameter ) - COMMAND_RTF_INT( "listoverridestartat", m_oOverrideLevel.m_nStart, sCommand, hasParameter, parameter ) - else if( "listlevel" == sCommand ) - { - m_oOverrideLevel.m_oLevel.m_nLevel = m_oOverrideLevel.m_nLevelIndex; - RtfListTableReader::ListReader::ListLevelReader oListLevelReader( m_oOverrideLevel.m_oLevel ); - StartSubReader( oListLevelReader, oDocument, oReader ); - } - else - return false; - return true; + if( "lfolevel" == sCommand) + return true; + COMMAND_RTF_INT( "listoverrideformat", m_oOverrideLevel.m_nLevelIndex, sCommand, hasParameter, parameter ) + else if( "listoverridestartat" == sCommand ) + { + m_oOverrideLevel.m_nStart = 0; //индикатор + if( true == hasParameter ) + m_oOverrideLevel.m_nStart = parameter; + } + else if( "levelstartat" == sCommand && m_oOverrideLevel.m_nStart == 0 && hasParameter) + { + m_oOverrideLevel.m_nStart = parameter; + } + else if( "listlevel" == sCommand ) + { + m_oOverrideLevel.m_oLevel.m_nLevel = m_oOverrideLevel.m_nLevelIndex; + RtfListTableReader::ListReader::ListLevelReader oListLevelReader( m_oOverrideLevel.m_oLevel ); + StartSubReader( oListLevelReader, oDocument, oReader ); + } + else if( "ls" == sCommand ) + { + if( true == hasParameter ) + m_oOverrideLevel.m_nLevelIndex = parameter; + } + else + return false; + return true; } }; private: @@ -2326,8 +2346,10 @@ private: else if( "lfolevel" == sCommand ) { RtfListOverrideProperty::ListOverrideLevels::ListOverrideLevel oOverrideLevel; + lfolevelReader olfolevelReader( oOverrideLevel ); StartSubReader( olfolevelReader, oDocument, oReader ); + m_oProperty.m_oOverrideLevels.m_aOverrideLevels.push_back( oOverrideLevel ); } else diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXParagraphElementReaders.cpp b/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXParagraphElementReaders.cpp index 1015aab102..13c659e9a7 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXParagraphElementReaders.cpp +++ b/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXParagraphElementReaders.cpp @@ -270,9 +270,9 @@ bool OOXParagraphReader::Parse3( ReaderParameter oParam , RtfParagraph& oOutputP if( 0 == sTarget.find( sFileUrl ) ) { - int nFirstDDot = sTarget.find( ':', sFileUrl.length() ); - int nLen = sTarget.length(); - if( -1 != nFirstDDot && nFirstDDot + 2 < nLen && '\\' == sTarget[nFirstDDot+1] ) + size_t nFirstDDot = sTarget.find( ':', sFileUrl.length() ); + size_t nLen = sTarget.length(); + if( std::wstring::npos != nFirstDDot && nFirstDDot + 2 < nLen && '\\' == sTarget[nFirstDDot+1] ) { if( '\\' != sTarget[nFirstDDot+2] ) sTarget.insert( sTarget.begin() + nFirstDDot + 1, '\\' ); @@ -1893,7 +1893,7 @@ bool OOXSectionPropertyReader::Parse( ReaderParameter oParam , RtfSectionPropert { if (!m_ooxSectionProperty->m_oCols->m_arrColumns.empty()) { - oOutput.m_nColumnNumber = m_ooxSectionProperty->m_oCols->m_arrColumns.size(); + oOutput.m_nColumnNumber = (int)m_ooxSectionProperty->m_oCols->m_arrColumns.size(); } if(m_ooxSectionProperty->m_oCols->m_oNum.IsInit()) @@ -2135,7 +2135,7 @@ bool OOXSectionPropertyReader::Parse( ReaderParameter oParam , RtfSectionPropert oBorderReader.Parse( oParam, oOutput.m_oBorderBottom ); } } - for (size_t i =0 ; i < m_ooxSectionProperty->m_arrHeaderReference.size() > 0; i++ ) + for (size_t i = 0 ; i < m_ooxSectionProperty->m_arrHeaderReference.size(); i++ ) { OOXHeaderReader oHeaderReader(m_ooxSectionProperty->m_arrHeaderReference[i]); @@ -2174,7 +2174,7 @@ bool OOXSectionPropertyReader::Parse( ReaderParameter oParam , RtfSectionPropert } } } - for (size_t i =0 ; i < m_ooxSectionProperty->m_arrFooterReference.size() > 0; i++ ) + for (size_t i = 0 ; i < m_ooxSectionProperty->m_arrFooterReference.size(); i++ ) { OOXHeaderReader oFooterReader(m_ooxSectionProperty->m_arrFooterReference[i]); diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXPictureAnchorReader.h b/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXPictureAnchorReader.h index c2fe85a175..0d215481fd 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXPictureAnchorReader.h +++ b/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXPictureAnchorReader.h @@ -65,10 +65,10 @@ public: pOutput->m_bLockAnchor = m_ooxAnchor->m_oLocked.IsInit() ? m_ooxAnchor->m_oLocked->ToBool() : false; pOutput->m_nZOrder = m_ooxAnchor->m_oRelativeHeight.IsInit() ? true : false; - int nDistLeft = m_ooxAnchor->m_oDistL.IsInit() ? (int)m_ooxAnchor->m_oDistL->ToTwips() : PROP_DEF; - int nDistTop = m_ooxAnchor->m_oDistT.IsInit() ? (int)m_ooxAnchor->m_oDistT->ToTwips() : PROP_DEF; - int nDistRight = m_ooxAnchor->m_oDistR.IsInit() ? (int)m_ooxAnchor->m_oDistR->ToTwips() : PROP_DEF; - int nDistBottom = m_ooxAnchor->m_oDistB.IsInit() ? (int)m_ooxAnchor->m_oDistB->ToTwips() : PROP_DEF; + int nDistLeft = m_ooxAnchor->m_oDistL.IsInit() ? (int)(m_ooxAnchor->m_oDistL->ToTwips()) : PROP_DEF; + int nDistTop = m_ooxAnchor->m_oDistT.IsInit() ? (int)(m_ooxAnchor->m_oDistT->ToTwips()) : PROP_DEF; + int nDistRight = m_ooxAnchor->m_oDistR.IsInit() ? (int)(m_ooxAnchor->m_oDistR->ToTwips()) : PROP_DEF; + int nDistBottom = m_ooxAnchor->m_oDistB.IsInit() ? (int)(m_ooxAnchor->m_oDistB->ToTwips()) : PROP_DEF; bool bSimplePos = m_ooxAnchor->m_oSimplePos.IsInit() ? true : false; diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXShapeReader.cpp b/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXShapeReader.cpp index 71d33f3de9..95c8d2f8b3 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXShapeReader.cpp +++ b/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXShapeReader.cpp @@ -910,7 +910,7 @@ void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::L { if (!oox_line_prop)return; - pOutput->m_bLine = true; + pOutput->m_bLine = 1; if (oox_line_prop->Fill.is_init()) { @@ -919,7 +919,7 @@ void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::L if (no_fill.IsInit()) { - pOutput->m_bLine = false; + pOutput->m_bLine = 0; } else if (fill.IsInit()) { @@ -1039,7 +1039,7 @@ void OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput, PPTX:: double rot = xfrm->rot.IsInit() ? xfrm->rot.get() / 60000. : 0; if (rot > 0.01) - pOutput->m_nRotation = rot * 65535; + pOutput->m_nRotation = (int)(rot * 65535); if (xfrm->flipH.get_value_or(false)) pOutput->m_bFlipH = 1; if (xfrm->flipV.get_value_or(false)) pOutput->m_bFlipV = 1; diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXTableRowReader.h b/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXTableRowReader.h index 53a79a8755..aae490f92f 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXTableRowReader.h +++ b/ASCOfficeRtfFile/RtfFormatLib/source/Reader/OOXTableRowReader.h @@ -79,7 +79,7 @@ public: OOX::Logic::CTc *ooxCell = NULL; - if (nCurCell < m_ooxRowTable->m_arrItems.size()) + if (nCurCell < (int)m_ooxRowTable->m_arrItems.size()) { ooxCell = dynamic_cast(m_ooxRowTable->m_arrItems[i]); } diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfChar.cpp b/ASCOfficeRtfFile/RtfFormatLib/source/RtfChar.cpp index 5e94e13e98..de905cfbbd 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfChar.cpp +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfChar.cpp @@ -40,7 +40,7 @@ std::wstring RtfChar::RenderToOOX(RenderParameter oRenderParameter) OOXWriter* poOOXWriter = static_cast (oRenderParameter.poWriter); std::wstring sResult; - if(RENDER_TO_OOX_PARAM_RUN == oRenderParameter.nType) + if (RENDER_TO_OOX_PARAM_RUN == oRenderParameter.nType) { bool bInsert = false; bool bDelete = false; diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfDocument.cpp b/ASCOfficeRtfFile/RtfFormatLib/source/RtfDocument.cpp index ba6df2d08c..3aed2def46 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfDocument.cpp +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfDocument.cpp @@ -49,6 +49,8 @@ RtfDocument::RtfDocument() m_oProperty.SetDefaultOOX(); m_oDefaultCharProp.SetDefaultRtf(); m_oDefaultParagraphProp.SetDefaultRtf(); + + m_nZIndexLast = 0; } int RtfDocument::GetType() { diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfDocument.h b/ASCOfficeRtfFile/RtfFormatLib/source/RtfDocument.h index 79d28dba59..c385c27506 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfDocument.h +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfDocument.h @@ -76,11 +76,21 @@ public: std::vector m_aOldLists; private: - std::vector m_aShapeId; + std::vector m_aShapeId; + int m_nZIndexLast; public: + int GetZIndex() + { + return m_nZIndexLast++; + } + void SetZIndex(int val) + { + if (m_nZIndexLast < val) + m_nZIndexLast = val; + } IdGenerator m_oIdGenerator; - void SetShapeId( int nShapeId ) + void SetShapeId( int nShapeId )//todoo -> map { for (size_t i = 0; i < m_aShapeId.size(); i++ ) { diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfGlobalTables.h b/ASCOfficeRtfFile/RtfFormatLib/source/RtfGlobalTables.h index d424f63644..f676c8dc01 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfGlobalTables.h +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfGlobalTables.h @@ -119,7 +119,7 @@ public: if( true == RtfColor::GetThemeByString(sTheme,oTheme ) ) { - for (size_t i = 0; i < (int)m_aArray.size(); i++ ) + for (size_t i = 0; i < m_aArray.size(); i++ ) { if( oTheme == m_aArray[i].m_eTheme ) { @@ -132,11 +132,11 @@ public: } bool GetColor( RtfColor oColor , int & nId) { - for (int i = 0; i < (int)m_aArray.size(); i++ ) + for (size_t i = 0; i < m_aArray.size(); i++ ) { if( m_aArray[i] == oColor ) { - nId = i + 1; + nId = (int)i + 1; return true; } } @@ -151,7 +151,7 @@ public: RenderParameter oNewParameter = oRenderParameter; oNewParameter.nType = RENDER_TO_RTF_PARAM_COLOR_TBL; - for (size_t i = 0; i < (int)m_aArray.size(); i++ ) + for (size_t i = 0; i < m_aArray.size(); i++ ) { sResult += m_aArray[i].RenderToRtf( oNewParameter ); } @@ -375,7 +375,7 @@ public: } bool GetList( int nId, RtfListProperty& oListProperty ) { - for (size_t i = 0; i < (int)m_aArray.size(); i++ ) + for (size_t i = 0; i < m_aArray.size(); i++ ) { if( nId == m_aArray[i].m_nID ) { @@ -417,7 +417,7 @@ class RtfListOverrideTable : public IDocumentElement, public ItemContainer"; if(!sText.empty() ) - sResult += L""; + { + // В символьном шрифте обрезать надо, в других случаях - нет + if (/*bIsSymbol && */(sText[0] & 0xF000) != 0) + { + sText[0] &= 0x00FF; + } + sResult += L""; + } else { sResult += L""; } diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfParagraph.cpp b/ASCOfficeRtfFile/RtfFormatLib/source/RtfParagraph.cpp index 997e57bb9c..1a990788a0 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfParagraph.cpp +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfParagraph.cpp @@ -139,7 +139,7 @@ std::wstring RtfParagraph::RenderToOOX(RenderParameter oRenderParameter) } sResult += L""; - if( NULL != m_oOldList ) + if( NULL != m_oOldList) { //для OldList if( false == bCanConvertToNumbering && NULL != m_oOldList->m_oText) @@ -154,10 +154,9 @@ std::wstring RtfParagraph::RenderToOOX(RenderParameter oRenderParameter) for( int i = 0; i < m_oOldList->m_oText->GetCount(); i++ ) { sResult += L""; - sResult += L""; - sResult += oCharProp.RenderToOOX(oRenderParameter); - sResult += L""; - + sResult += L""; + sResult += oCharProp.RenderToOOX(oRenderParameter); + sResult += L""; sResult += m_oOldList->m_oText->m_aArray[ i ]->RenderToOOX(oNewParam); sResult += L""; } diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfPicture.cpp b/ASCOfficeRtfFile/RtfFormatLib/source/RtfPicture.cpp index efc1437b17..2e92c24e16 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfPicture.cpp +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfPicture.cpp @@ -129,14 +129,17 @@ std::wstring RtfPicture::RenderToOOX(RenderParameter oRenderParameter) case dt_emf: sExtension = L"emf"; sMime = L"image/x-emf"; break; case dt_macpict:sExtension = L"pct"; sMime = L"image/x-pict"; break; } + if (poOOXWriter->m_sTargetFolder.empty()) return L"rIdtemp"; //test from fields std::wstring sFilenameRels = L"Image" + std::to_wstring(poRtfDocument->m_oIdGenerator.Generate_ImageIndex()) + L"."; sFilenameRels += sExtension; - std::wstring sFilenameFull = poOOXWriter->m_sTargetFolder + FILE_SEPARATOR_STR + L"word" + FILE_SEPARATOR_STR +L"media"; - + std::wstring sFilenameFull = poOOXWriter->m_sTargetFolder + FILE_SEPARATOR_STR + L"word"; NSDirectory::CreateDirectory( sFilenameFull ); - + + sFilenameFull += std::wstring(FILE_SEPARATOR_STR) + L"media"; + NSDirectory::CreateDirectory( sFilenameFull ); + sFilenameFull += FILE_SEPARATOR_STR + sFilenameRels; sFilenameRels = L"media/" + sFilenameRels; diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfProperty.cpp b/ASCOfficeRtfFile/RtfFormatLib/source/RtfProperty.cpp index 6da8f5050f..0640459f99 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfProperty.cpp +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfProperty.cpp @@ -792,7 +792,16 @@ std::wstring RtfCharProperty::RenderToOOX(RenderParameter oRenderParameter) sResult += L"m_nCurTrackChangesId++).c_str() + L"\"/>"; } - + if( PROP_DEF != m_nCharStyle ) + { + RtfStylePtr oStyle; + if( true == poRtfDocument->m_oStyleTable.GetStyle( m_nCharStyle, oStyle ) ) + { + sResult += L"m_sName; + sResult += L"\"/>"; + } + } switch( m_nAnimated ) { case 0: sResult += L""; break; @@ -809,17 +818,6 @@ std::wstring RtfCharProperty::RenderToOOX(RenderParameter oRenderParameter) RENDER_OOX_BOOL ( m_bCaps, sResult, L"w:caps" ) RENDER_OOX_INT ( (int)m_nScalex, sResult, L"w:w" ) - if( PROP_DEF != m_nCharStyle ) - { - RtfStylePtr oStyle; - if( true == poRtfDocument->m_oStyleTable.GetStyle( m_nCharStyle, oStyle ) ) - { - sResult += L"m_sName; - sResult += L"\"/>"; - } - } - if( PROP_DEF != m_nDown ) { sResult += L""; @@ -854,9 +852,13 @@ std::wstring RtfCharProperty::RenderToOOX(RenderParameter oRenderParameter) oNewParam.nType = RENDER_TO_OOX_PARAM_UNKNOWN; if( true == poRtfDocument->m_oFontTable.GetFont(m_nFont,oCurFont) ) { - sResult += oCurFont.RenderToOOX(oNewParam); + sResult += oCurFont.RenderToOOX(oNewParam); } } + if (m_bHidden == 1) + { + sResult += L""; + } RENDER_OOX_INT( m_nFontSize, sResult, L"w:sz" ) RENDER_OOX_BOOL( m_bItalic, sResult, L"w:i" ) @@ -1113,7 +1115,11 @@ std::wstring RtfListLevelProperty::RenderToOOX2(RenderParameter oRenderParameter if( 1 == m_nLegal) sResult += L""; - sResult += L""; + std::wstring sText = GetLevelTextOOX(); + if (false == sText.empty()) + { + sResult += L""; + } sResult += L""; RENDER_OOX_INT( m_nPictureIndex, sResult, L"w:lvlPicBulletId" ) @@ -1176,7 +1182,7 @@ std::wstring RtfListProperty::RenderToRtf(RenderParameter oRenderParameter) else if( 1 == m_nListSimple ) sResult += L"\\listsimple" + std::to_wstring(m_nListSimple); - for (size_t i = 0; i < (int)m_aArray.size(); i++ ) + for (size_t i = 0; i < m_aArray.size(); i++ ) { sResult += m_aArray[i].RenderToRtf( oRenderParameter ); } @@ -2123,84 +2129,100 @@ std::wstring RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter) if (oCurParaStyle->m_oParProp.m_nSpaceAfterAuto == 1 && m_nSpaceAfter != PROP_DEF) m_nSpaceAfterAuto = 0; + + m_bHidden = (oCurParaStyle->m_bHidden == 1); } - sResult += L"m_sName; - sResult += L"\"/>" ; + sResult += L""; } } + if ( 0 == m_bAutoHyphenation ) sResult += L""; else if ( 1 == m_bAutoHyphenation ) sResult += L""; RENDER_OOX_BOOL ( m_bKeep , sResult, L"w:keepLines" ); RENDER_OOX_BOOL ( m_bKeepNext , sResult, L"w:keepNext" ); - - //if ( PROP_DEF != m_nOutlinelevel && 0 != m_nOutlinelevel) - //{ - // sResult += L""; - //} RENDER_OOX_INT ( m_nOutlinelevel , sResult, L"w:outlineLvl" ); RENDER_OOX_BOOL ( m_bPageBB , sResult, L"w:pageBreakBefore" ); - if (PROP_DEF == m_nStyle && pa_none == m_eAlign) + if (PROP_DEF == m_nStyle && PROP_DEF == m_eAlign) m_eAlign = pa_ql; + if (m_bRtl) + { + if (m_eAlign == pa_ql) m_eAlign = pa_qr; + else if (m_eAlign == pa_qr) m_eAlign = pa_ql; + } + switch(m_eAlign) { - case pa_qc: sResult += L"" ; break; - case pa_qj: sResult += L""; break; - case pa_ql: sResult += L""; break; - case pa_qr: sResult += L""; break; - case pa_qd: sResult += L""; break; - case pa_qk0: sResult += L""; break; - case pa_qk10: sResult += L""; break; - case pa_qk20: sResult += L""; break; + case pa_qc: sResult += L"" ; break; + case pa_qj: sResult += L""; break; + case pa_ql: sResult += L""; break; + case pa_qr: sResult += L""; break; + case pa_qd: sResult += L""; break; + case pa_qk0: sResult += L""; break; + case pa_qk10: sResult += L""; break; + case pa_qk20: sResult += L""; break; default: break; } switch( m_eFontAlign ) { - case fa_faauto: sResult += L""; break; - case fa_fahang: sResult += L""; break; - case fa_facenter: sResult += L""; break; - case fa_faroman: sResult += L"";break; - case fa_favar: sResult += L""; break; - case fa_fafixed: sResult += L""; break; + case fa_faauto: sResult += L""; break; + case fa_fahang: sResult += L""; break; + case fa_facenter: sResult += L""; break; + case fa_faroman: sResult += L"";break; + case fa_favar: sResult += L""; break; + case fa_fafixed: sResult += L""; break; default: break; } std::wstring sIndent; + + if ( PROP_DEF != m_nIndRight ) + { + if (PROP_DEF == m_nIndLeft) + m_nIndLeft = 0; + sIndent += L" w:right=\"" + std::to_wstring(m_nIndRight) + L"\""; + } + RENDER_OOX_INT_ATTRIBUTE ( m_nIndLeft, sIndent, L"w:left" ); if( PROP_DEF != m_nIndFirstLine ) { if( m_nIndFirstLine >= 0 ) sIndent += L" w:firstLine=\"" + std::to_wstring(m_nIndFirstLine) + L"\""; else sIndent += L" w:hanging=\"" + std::to_wstring(-m_nIndFirstLine) + L"\""; } else if (m_bOldList && PROP_DEF != m_nIndLeft) - sIndent += L" w:firstLine=\"0\""; + sIndent += L" w:firstLine=\"0\""; - RENDER_OOX_INT_ATTRIBUTE ( m_nIndLeft, sIndent, L"w:left" ); - RENDER_OOX_INT_ATTRIBUTE ( m_nIndRight, sIndent, L"w:right" ); - //RENDER_OOX_INT_ATTRIBUTE ( m_nIndStart, sIndent, L"w:start" ); - //RENDER_OOX_INT_ATTRIBUTE ( m_nIndEnd, sIndent, L"w:end" ); - if( !sIndent.empty() ) { - sResult += L""; + sResult += L""; } RENDER_OOX_BOOL( m_bIndRightAuto, sResult, L"w:adjustRightInd" ); RENDER_OOX_BOOL( m_bIndMirror, sResult, L"w:mirrorIndents" ); std::wstring sSpacing; - if( PROP_DEF == m_nSpaceAfter ) m_nSpaceAfter = 0; - //if( PROP_DEF == m_nSpaceBefore ) m_nSpaceBefore = 0; + + if (m_bKeepNext == 1)//nabidnik.rtf + { + if( PROP_DEF == m_nSpaceAfter ) m_nSpaceAfter = 0; + if( PROP_DEF == m_nSpaceBefore ) m_nSpaceBefore = 0; + } RENDER_OOX_INT_ATTRIBUTE( m_nSpaceBefore, sSpacing, L"w:before" ); RENDER_OOX_INT_ATTRIBUTE( m_nSpaceAfter, sSpacing, L"w:after" ); - RENDER_OOX_INT_ATTRIBUTE( m_nSpaceBeforeAuto, sSpacing, L"w:beforeAutospacing" ); - RENDER_OOX_INT_ATTRIBUTE( m_nSpaceAfterAuto, sSpacing, L"w:afterAutospacing" ); + + if (m_nSpaceBeforeAuto == 1) + { + sSpacing += L" w:beforeAutospacing=\"on\""; + } + if (m_nSpaceAfterAuto == 1) + { + sSpacing += L" w:afterAutospacing=\"on\""; + } + //RENDER_OOX_INT_ATTRIBUTE( m_nSpaceBeforeAuto, sSpacing, L"w:beforeAutospacing" ); + //RENDER_OOX_INT_ATTRIBUTE( m_nSpaceAfterAuto, sSpacing, L"w:afterAutospacing" ); RENDER_OOX_INT_ATTRIBUTE( m_nSpaceBeforeLine, sSpacing, L"w:beforeLines" ); RENDER_OOX_INT_ATTRIBUTE( m_nSpaceAfterLine, sSpacing, L"w:afterLines" ); @@ -2220,9 +2242,7 @@ std::wstring RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter) // sSpacing += L" w:line=\"240\""); //по умолчанию - единичный if( !sSpacing.empty() ) { - sResult += L""; + sResult += L""; } RENDER_OOX_BOOL( m_bSnapToGrid, sResult, L"w:snapToGrid" ); @@ -2312,7 +2332,7 @@ std::wstring RtfParagraphProperty::RenderToOOX(RenderParameter oRenderParameter) if (styleTabs.m_aTabs.size() != m_oTabs.m_aTabs.size() && m_oTabs.m_aTabs.size() > 0) {//зачистка от стилевых табов (позиции по возрастанию) - for (int i = styleTabs.m_aTabs.size() - 1; i >= 0; i--) + for (int i = (int)styleTabs.m_aTabs.size() - 1; i >= 0; i--) { bool bPreset = false; for (size_t j = 0; j < m_oTabs.m_aTabs.size(); j++) @@ -2578,7 +2598,7 @@ std::wstring RtfCellProperty::RenderToOOX(RenderParameter oRenderParameter) { // todooo тут цвет подложки подкладывается от ячейки, таблицы или еще какой хрени // пока берем второй цвет паттерна Romanization_Armenian.rtf - m_oShading.m_nBackColor = m_oShading.m_nForeColor * (m_oShading.m_nValue / 10000.); + m_oShading.m_nBackColor = (int)(m_oShading.m_nForeColor * (m_oShading.m_nValue / 10000.)); } sResult += m_oShading.RenderToOOX(oRenderParameter); } @@ -2936,6 +2956,9 @@ std::wstring RtfRowProperty::RenderToRtf(RenderParameter oRenderParameter) RENDER_RTF_BOOL ( m_bIsHeader, sResult, L"trhdr" ); RENDER_RTF_BOOL ( m_bKeep, sResult, L"trkeep" ); + if (m_nRightToLeft == 1) sResult += L"\\rtlrow"; + if (m_nRightToLeft == 0) sResult += L"\\ltrrow"; + switch( m_eJust ) { case rj_trql : sResult += L"\\trql"; break; diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfProperty.h b/ASCOfficeRtfFile/RtfFormatLib/source/RtfProperty.h index 98721893e8..90452092fa 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfProperty.h +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfProperty.h @@ -1516,12 +1516,12 @@ public: class ListOverrideLevel { public: - int m_nLevelIndex; //listoverrideformat Number of list format override levels within this list override (should be either 1, 9, or missing, which means 0). + int m_nLevelIndex; //listoverrideformat Number of list format override levels within this list override (should be either 1, 9, or missing, which means 0). int m_nStart; //listoverridestartat Indicates an override of the start-at value. RtfListLevelProperty m_oLevel; ListOverrideLevel() { - m_nLevelIndex = 0; + m_nLevelIndex = PROP_DEF; m_nStart = PROP_DEF; } }; @@ -1571,17 +1571,25 @@ public: std::wstring RenderToOOX(RenderParameter oRenderParameter) { std::wstring sResult; - for (size_t i = 0; i < (int)m_aOverrideLevels.size(); i++ ) + int index_prev = -1, index; + for (size_t i = 0; i < m_aOverrideLevels.size(); i++ ) { ListOverrideLevel& OverrideLevel = m_aOverrideLevels[i]; if ( PROP_DEF != OverrideLevel.m_nLevelIndex ) { - sResult += L""; - if ( PROP_DEF != OverrideLevel.m_nStart ) - sResult += L""; - sResult += OverrideLevel.m_oLevel.RenderToOOX2(oRenderParameter, OverrideLevel.m_nLevelIndex); - sResult += L""; + index = OverrideLevel.m_nLevelIndex; } + else + { + index = ++index_prev; + } + sResult += L""; + if ( PROP_DEF != OverrideLevel.m_nStart ) + sResult += L""; + sResult += OverrideLevel.m_oLevel.RenderToOOX2(oRenderParameter, OverrideLevel.m_nLevelIndex); + sResult += L""; + + index_prev = index; } return sResult; } @@ -2221,15 +2229,15 @@ public: ca_Top, //clvertalt Text is top-aligned in cell (the default). ca_Center, //clvertalc Text is centered vertically in cell. ca_Bottom //clvertalb Text is bottom-aligned in cell. - } CellAlign; - CellAlign m_eAlign; + } CellAlign; + int m_eAlign; typedef enum{ cf_none, cf_lrtb, //cltxlrtb Text in a cell flows from left to right and top to bottom (default). cf_tbrl, //cltxtbrl Text in a cell flows right to left and top to bottom. cf_btlr, //cltxbtlr Text in a cell flows left to right and bottom to top. cf_lrtbv, //cltxlrtbv Text in a cell flows left to right and top to bottom, vertical. cf_tbrlv//cltxtbrlv Text in a cell flows top to bottom and right to left, vertical. - } CellFlow; + } CellFlow; CellFlow m_oCellFlow; int m_nCellx; //cellxN Defines the right boundary of a table cell, including its half of the space between cells. @@ -2304,8 +2312,8 @@ public: m_oShading.SetDefault(); DEFAULT_PROPERTY( m_nShadingPctFrom ) + DEFAULT_PROPERTY( m_eAlign ) - m_eAlign = ca_none; m_oCellFlow = cf_none; DEFAULT_PROPERTY( m_nCellx ) @@ -2373,8 +2381,8 @@ public: m_oShading.Merge( oCellPr.m_oShading ); MERGE_PROPERTY ( m_nShadingPctFrom, oCellPr) - MERGE_PROPERTY_DEF( m_eAlign, oCellPr, ca_none ) - MERGE_PROPERTY_DEF( m_oCellFlow, oCellPr, cf_none ) + MERGE_PROPERTY( m_eAlign, oCellPr ) + MERGE_PROPERTY( m_oCellFlow, oCellPr ) MERGE_PROPERTY( m_nCellx, oCellPr ) MERGE_PROPERTY( m_nSpan, oCellPr ) @@ -2417,6 +2425,7 @@ typedef boost::shared_ptr RtfRowPropertyPtr; class RtfRowProperty: public RtfTableProperty, public ItemContainer< RtfCellProperty > { public: + int m_nRightToLeft; //bi direction int m_nIndex; //irowN N is the row index of this row. int m_nBandIndex; //irowbandN N is the row index of the row, adjusted to account for header rows. A header row has a value of –1. @@ -2483,6 +2492,7 @@ public: DEFAULT_PROPERTY( m_nAutoFit ) DEFAULT_PROPERTY( m_bIsHeader ) DEFAULT_PROPERTY( m_bKeep ) + DEFAULT_PROPERTY( m_nRightToLeft ) DEFAULT_PROPERTY( m_nHeight ) @@ -2525,6 +2535,7 @@ public: MERGE_PROPERTY( m_nIndex, oRowPr ) MERGE_PROPERTY( m_nBandIndex, oRowPr ) MERGE_PROPERTY( m_bLastRow, oRowPr ) + MERGE_PROPERTY( m_nRightToLeft, oRowPr ) MERGE_PROPERTY( m_nAutoFit, oRowPr ) MERGE_PROPERTY( m_bIsHeader, oRowPr ) @@ -2568,6 +2579,7 @@ typedef boost::shared_ptr RtfParagraphPropertyPtr; class RtfParagraphProperty: public IRenderableProperty { public: + bool m_bHidden; bool m_bOldList; RtfParagraphPropertyPtr m_pOldParagraphProp; //------------- @@ -2593,7 +2605,7 @@ public: pa_qk20, } ParagraphAlign; - ParagraphAlign m_eAlign; + int m_eAlign; typedef enum { @@ -2695,8 +2707,6 @@ public: void SetDefaultRtf() { SetDefault(); - m_nSpaceAfter = 0; - m_nSpaceBetween = 240; } void SetDefaultOOX() { @@ -2712,8 +2722,8 @@ public: DEFAULT_PROPERTY( m_bPageBB ) DEFAULT_PROPERTY( m_nOutlinelevel ) DEFAULT_PROPERTY( m_nStyle ) + DEFAULT_PROPERTY( m_eAlign ) - m_eAlign = pa_none; m_eFontAlign = fa_none; DEFAULT_PROPERTY( m_nIndFirstLine ) @@ -2777,6 +2787,7 @@ public: m_oCharProperty.SetDefault(); + m_bHidden = false; m_bOldList = false; m_pOldParagraphProp = RtfParagraphPropertyPtr(NULL); } @@ -2790,7 +2801,7 @@ public: MERGE_PROPERTY ( m_bPageBB, oParPr ) MERGE_PROPERTY ( m_nOutlinelevel, oParPr ) MERGE_PROPERTY ( m_nStyle, oParPr ) - MERGE_PROPERTY_DEF ( m_eAlign, oParPr, pa_none ) + MERGE_PROPERTY ( m_eAlign, oParPr ) MERGE_PROPERTY_DEF ( m_eFontAlign, oParPr, fa_none ) MERGE_PROPERTY ( m_nIndFirstLine, oParPr ) MERGE_PROPERTY ( m_nIndLeft, oParPr ) diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfReader.cpp b/ASCOfficeRtfFile/RtfFormatLib/source/RtfReader.cpp index 0c439dc442..00c183c55f 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfReader.cpp +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfReader.cpp @@ -34,7 +34,7 @@ #include "DestinationCommand.h" -RtfReader::RtfReader(RtfDocument& oDocument, std::wstring sFilename ):m_oDocument(oDocument),m_sFilename(sFilename) +RtfReader::RtfReader(RtfDocument& oDocument, std::wstring sFilename ) : m_oDocument(oDocument), m_sFilename(sFilename) { m_oState = ReaderStatePtr(new ReaderState()); m_nFootnote = PROP_DEF; diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfReader.h b/ASCOfficeRtfFile/RtfFormatLib/source/RtfReader.h index bc50ed77ed..0e463a80d5 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfReader.h +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfReader.h @@ -74,7 +74,7 @@ public: RtfLex m_oLex; int m_nFootnote; //толко для симовола chftn. основано на том что вложенных footnote быть не может int m_nDefFont; - std::wstring m_sTempFolder; + std::wstring m_sTempFolder; RtfReader(RtfDocument& oDocument, std::wstring sFilename ); ~RtfReader() diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfSection.cpp b/ASCOfficeRtfFile/RtfFormatLib/source/RtfSection.cpp index 49540f97c1..5bbe9b7e01 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfSection.cpp +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfSection.cpp @@ -157,6 +157,13 @@ std::wstring RtfDocumentProperty::RenderToOOX(RenderParameter oRenderParameter) 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 diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfSection.h b/ASCOfficeRtfFile/RtfFormatLib/source/RtfSection.h index 62e38c0f67..af3ba4a83b 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfSection.h +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfSection.h @@ -63,6 +63,12 @@ public: int m_nTabWidth; //(defaultTabStop)\deftabN Default tab width in twips (default is 720, i.e., 0.5"). int m_nZoom; // viewscaleN Zoom level of the document; the N argument is a value representing a percentage (default is 100). + int m_nDrawingGridHorizontalSpacing; + int m_nDrawingGridVerticalSpacing; + int m_nDrawingGridHorizontalOrigin; + int m_nDrawingGridVerticalOrigin; + int m_nDisplayHorizontalDrawingGridEvery; //def = 3 + int m_nDisplayVerticalDrawingGridEvery; //def = 0 //Page Borders int m_bDorderSurroundHeader; //(bordersDoNotSurroundHeader)\pgbrdrhead Page border surrounds header. @@ -197,6 +203,13 @@ public: 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; @@ -663,7 +676,7 @@ public: if( RENDER_TO_RTF_PARAM_NO_SECT != oRenderParameter.nType ) sResult += L"\\sectd"; - for( int i = 0; i < (int)m_aArray.size(); i++ ) + for( size_t i = 0; i < m_aArray.size(); i++ ) { sResult += m_aArray[i]->RenderToRtf( oRenderParameter ); } diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfShape.cpp b/ASCOfficeRtfFile/RtfFormatLib/source/RtfShape.cpp index 7a40841c6a..de5c90ca09 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfShape.cpp +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfShape.cpp @@ -100,8 +100,8 @@ void RtfShape::SetDefault() DEFAULT_PROPERTY( m_nWrapSideType ) DEFAULT_PROPERTY( m_nZOrderRelative ) DEFAULT_PROPERTY( m_bLockAnchor ) - DEFAULT_PROPERTY_DEF( m_eXAnchor, ax_column ) //по умолчанию - привязка к тексту - DEFAULT_PROPERTY_DEF( m_eYAnchor, ay_Para )//по умолчанию - привязка к тексту + DEFAULT_PROPERTY( m_eXAnchor ) + DEFAULT_PROPERTY( m_eYAnchor ) DEFAULT_PROPERTY( m_nLockPosition ) DEFAULT_PROPERTY( m_nLockRotation ) //Position absolute @@ -209,7 +209,7 @@ void RtfShape::SetDefault() DEFAULT_PROPERTY( m_nFillToLeft ) DEFAULT_PROPERTY( m_nFillShadeType ) //Line - DEFAULT_PROPERTY_DEF( m_bLine, true ) + DEFAULT_PROPERTY( m_bLine ) DEFAULT_PROPERTY( m_nLineColor ) DEFAULT_PROPERTY( m_nLineStartArrow ) DEFAULT_PROPERTY( m_nLineStartArrowWidth ) @@ -324,7 +324,6 @@ std::wstring RtfShape::RenderToRtf(RenderParameter oRenderParameter) m_nWrapType = 3; m_nWrapSideType = 0; m_bLockAnchor = 0; - //m_nZOrder = PROP_DEF; m_nZOrderRelative = 0; m_nLeft = m_nTop = 0; m_nRelBottom = m_nRelRight = PROP_DEF; @@ -748,7 +747,7 @@ std::wstring RtfShape::RenderToOOX(RenderParameter oRenderParameter) if( 0 != aTempTextItems ) {//пишем только Ole обьект - int nTempTextItemsCount = aTempTextItems->GetCount(); + size_t nTempTextItemsCount = aTempTextItems->GetCount(); for (size_t i = 0; i < nTempTextItemsCount; i++ ) { ITextItemPtr piCurTextItem; @@ -885,9 +884,8 @@ std::wstring RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter) } sResult += L"<" + oRenderParameter.sValue; - - RtfDocument* poDocument = static_cast( oRenderParameter.poDocument ); - sResult += L" id=\"_x0000_s" + std::to_wstring(poDocument->GetShapeId( m_nID )) + L"\""; + + sResult += L" id=\"_x0000_s" + std::to_wstring(poRtfDocument->GetShapeId( m_nID )) + L"\""; if (!m_sName.empty()) { @@ -903,7 +901,12 @@ std::wstring RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter) if( 0 == m_bFilled) sResult += L" filled=\"f\""; else sResult += L" filled=\"t\""; - if( 0 == m_bLine) sResult += L" stroked=\"f\""; + if( PROP_DEF == m_bLine) + { + m_bLine = (m_nShapeType == SimpleTypes::Vml::sptPictureFrame || m_nShapeType == SimpleTypes::Vml::sptTextBox) ? 0 : 1; + } + + if ( 0 == m_bLine) sResult += L" stroked=\"f\""; else sResult += L" stroked=\"t\""; if( PROP_DEF != m_nFillColor) @@ -921,7 +924,7 @@ std::wstring RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter) //path switch( m_nConnectionType ) { - case 0: sResult += L" o:connecttype=\"custom\""; break; + case 0: sResult += L" o:connecttype=\"custom\""; break; case 1: sResult += L" o:connecttype=\"none\""; break; case 2: sResult += L" o:connecttype=\"rect\""; break; case 3: sResult += L" o:connecttype=\"segments\""; break; @@ -929,16 +932,22 @@ std::wstring RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter) //Connectors switch( m_nConnectorStyle ) { - case 0: sResult += L" o:connectortype=\"straight\""; break; + case 0: sResult += L" o:connectortype=\"straight\"";break; case 1: sResult += L" o:connectortype=\"elbow\""; break; case 2: sResult += L" o:connectortype=\"curved\""; break; - case 3: sResult += L" o:connectortype=\"none\""; break; + case 3: sResult += L" o:connectortype=\"none\""; break; } //----------------------------------------------------------------------------------------------------------------- std::wstring sStyle ; if( PROP_DEF != m_nLeft && PROP_DEF != m_nRight && PROP_DEF != m_nTop && PROP_DEF != m_nBottom ) { + if( PROP_DEF == m_nPositionHRelative && PROP_DEF == m_nPositionVRelative && + PROP_DEF == m_eXAnchor && PROP_DEF == m_eYAnchor) + { + m_eXAnchor = RtfShape::ax_margin; + m_eYAnchor = RtfShape::ay_margin; + } //не пишем если inline if( 3 != m_nPositionHRelative || 3 != m_nPositionVRelative ) { @@ -951,6 +960,7 @@ std::wstring RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter) sStyle += L"margin-right:" + XmlUtils::DoubleToString(RtfUtility::Twip2pt(m_nRight), L"%.2f") + L"pt;"; } } + int nWidth = m_nRight - m_nLeft; int nHeight = m_nBottom - m_nTop; @@ -1029,6 +1039,7 @@ std::wstring RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter) } if( PROP_DEF != m_nPositionH && PROP_DEF == m_nPositionHRelative ) m_nPositionHRelative = 2; + if( PROP_DEF != m_nPositionHRelative ) { switch( m_nPositionHRelative ) @@ -1126,7 +1137,9 @@ std::wstring RtfShape::RenderToOOXBegin(RenderParameter oRenderParameter) else if( PROP_DEF != m_nZOrder ) nZIndex = m_nZOrder; else if (oRenderParameter.nType != RENDER_TO_OOX_PARAM_SHAPE_WSHAPE2) - nZIndex = 100; //на свое усмотрение ставлю 100 + { + nZIndex = poRtfDocument->GetZIndex(); + } if( PROP_DEF != m_nZOrderRelative && PROP_DEF != nZIndex) { @@ -1691,7 +1704,7 @@ std::wstring RtfShape::GroupRenderToOOX(RenderParameter oRenderParameter) sResult = RenderToOOXBegin( oNewParamGroup ); - for (size_t i = 0; i < (int)m_aArray.size(); i++ ) + for (size_t i = 0; i < m_aArray.size(); i++ ) { RenderParameter oNewParamShape = oRenderParameter; oNewParamShape.sValue = L""; diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfShape.h b/ASCOfficeRtfFile/RtfFormatLib/source/RtfShape.h index e634578004..c0f54de34f 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfShape.h +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfShape.h @@ -95,8 +95,8 @@ public: int m_nLockPosition; int m_nLockRotation; - _AnchorX m_eXAnchor; - _AnchorY m_eYAnchor; + int m_eXAnchor; + int m_eYAnchor; //----------------ShapeProperty-------------------- //Position absolute diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfTable.h b/ASCOfficeRtfFile/RtfFormatLib/source/RtfTable.h index 5dfb9b84c9..a93c42fe0c 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfTable.h +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfTable.h @@ -59,7 +59,21 @@ public: std::wstring RenderToOOX(RenderParameter oRenderParameter) { - std::wstring sResult = L""; + bool bRowsBidi = false; + for (size_t i = 0; i < m_aArray.size(); i++) + { + RtfTableRowPtr &rowPr = m_aArray[i]; + if ((rowPr) && (rowPr->m_oProperty.m_nRightToLeft == 1)) + { + bRowsBidi = true; + break; + } + } + + if (bRowsBidi && m_oProperty.m_bBidi == PROP_DEF) + m_oProperty.m_bBidi = 1; + + std::wstring sResult = L""; sResult += m_oProperty.RenderToOOX(oRenderParameter); sResult += L""; @@ -69,7 +83,7 @@ public: } sResult += L""; - for (size_t i = 0; i < (int)m_aArray.size(); i++) + for (size_t i = 0; i < m_aArray.size(); i++) { sResult += m_aArray[i]->RenderToOOX(oRenderParameter ); } @@ -81,7 +95,7 @@ public: std::wstring result; result += L"\n"; - for (size_t i = 0 ; i < (int)m_aArray.size(); i++) + for (size_t i = 0 ; i < m_aArray.size(); i++) { result += m_aArray[i]->RenderToRtf( oRenderParameter ); } @@ -97,7 +111,7 @@ public: //m_aArray - строки - for (size_t nCurRow = 0; nCurRow < (int)m_aArray.size(); nCurRow++ ) + for (size_t nCurRow = 0; nCurRow < m_aArray.size(); nCurRow++ ) { nLastCellx = 0; RtfTableRowPtr oCurRow = m_aArray[ nCurRow ]; @@ -147,7 +161,7 @@ public: AddToArray( aCellx, nLastCellx + nWidthAfter ); } //вычисляем Span - for (size_t i = 0; i < (int)m_aArray.size();i++) + for (size_t i = 0; i < m_aArray.size();i++) { RtfTableRowPtr oCurRow= m_aArray[ i ]; //индекс последнего минимального элемента @@ -252,7 +266,7 @@ public: m_oProperty.m_eWidthUnit = mu_Twips; } - for (size_t i = 0; i < (int)m_aArray.size(); i++) + for (size_t i = 0; i < m_aArray.size(); i++) { RtfTableRowPtr oCurRow = m_aArray[i]; int nCellCount = oCurRow->GetCount(); diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfTableCell.h b/ASCOfficeRtfFile/RtfFormatLib/source/RtfTableCell.h index 708c7a92e4..0cb9a18ad0 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfTableCell.h +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfTableCell.h @@ -88,7 +88,7 @@ public: sResult += L""; } - for (size_t i = 0; i < (int)m_aArray.size(); i++ ) + for (size_t i = 0; i < m_aArray.size(); i++ ) { sResult += m_aArray[i]->RenderToOOX( oRenderParameter); } diff --git a/ASCOfficeRtfFile/RtfFormatLib/source/RtfTableRow.h b/ASCOfficeRtfFile/RtfFormatLib/source/RtfTableRow.h index 11587b9091..d5d66b6d41 100644 --- a/ASCOfficeRtfFile/RtfFormatLib/source/RtfTableRow.h +++ b/ASCOfficeRtfFile/RtfFormatLib/source/RtfTableRow.h @@ -51,7 +51,7 @@ public: sResult += L"\n"; if( RENDER_TO_RTF_PARAM_NESTED == oRenderParameter.nType ) { - for (size_t i = 0; i < (int)m_aArray.size(); i++ ) + for (size_t i = 0; i < m_aArray.size(); i++ ) { sResult += m_aArray[i]->RenderToRtf( oRenderParameter ); } @@ -84,7 +84,7 @@ public: std::wstring sXml = L"" + sRowProp + L""; oXmlWriter.WriteString(sXml); } - for (size_t i = 0 ; i < (int)m_aArray.size(); i++) + for (size_t i = 0 ; i < m_aArray.size(); i++) { oXmlWriter.WriteString( m_aArray[i]->RenderToOOX(oNewParam) ); } diff --git a/ASCOfficeRtfFile/RtfFormatTest/RtfFormatTest.vcproj b/ASCOfficeRtfFile/RtfFormatTest/RtfFormatTest.vcproj index 9577660108..6fcfc15ba1 100644 --- a/ASCOfficeRtfFile/RtfFormatTest/RtfFormatTest.vcproj +++ b/ASCOfficeRtfFile/RtfFormatTest/RtfFormatTest.vcproj @@ -44,7 +44,7 @@ m_eValue ); + return Emu_To_Twips((double) this->m_eValue ); } }; @@ -6189,7 +6189,7 @@ namespace SimpleTypes } double ToTwips() { - return Emu_To_Twips( this->m_eValue ); + return Emu_To_Twips( (double) this->m_eValue ); } }; diff --git a/Common/base.pri b/Common/base.pri index 04a0978610..8495b4fc61 100644 --- a/Common/base.pri +++ b/Common/base.pri @@ -1,4 +1,4 @@ -VERSION = 2.4.521.0 +VERSION = 2.4.522.0 DEFINES += INTVER=$$VERSION # CONFIGURATION