diff --git a/RtfFile/Format/RtfDocument.h b/RtfFile/Format/RtfDocument.h index aa07ccec64..3309716d2a 100644 --- a/RtfFile/Format/RtfDocument.h +++ b/RtfFile/Format/RtfDocument.h @@ -30,6 +30,7 @@ * */ #pragma once + #include "Basic.h" #include "RtfGlobalTables.h" diff --git a/RtfFile/OOXml/Reader/OOXColorReader.h b/RtfFile/OOXml/Reader/OOXColorReader.h index 637857fa6c..82cd963eac 100644 --- a/RtfFile/OOXml/Reader/OOXColorReader.h +++ b/RtfFile/OOXml/Reader/OOXColorReader.h @@ -30,11 +30,12 @@ * */ #pragma once -#include "../../Format/RtfProperty.h" -#include "OOXReader.h" + #include "OOXReaderBasic.h" -#include "../../../OOXML/PPTXFormat/Logic/Colors/SchemeClr.h" +#include "OOXReader.h" +#include "../../Format/RtfProperty.h" +#include "../../../OOXML/PPTXFormat/Theme/ClrScheme.h" class OOXColorReader { diff --git a/RtfFile/OOXml/Reader/OOXColorSchemeReader.cpp b/RtfFile/OOXml/Reader/OOXColorSchemeReader.cpp index 277eedcbd9..1fc9330a4d 100644 --- a/RtfFile/OOXml/Reader/OOXColorSchemeReader.cpp +++ b/RtfFile/OOXml/Reader/OOXColorSchemeReader.cpp @@ -30,6 +30,7 @@ * */ +#include "OOXColorReader.h" #include "OOXColorSchemeReader.h" OOXColorSchemeReader::OOXColorSchemeReader(PPTX::nsTheme::ClrScheme * ooxColorScheme) diff --git a/RtfFile/OOXml/Reader/OOXColorSchemeReader.h b/RtfFile/OOXml/Reader/OOXColorSchemeReader.h index 42d802c2bf..30229dab97 100644 --- a/RtfFile/OOXml/Reader/OOXColorSchemeReader.h +++ b/RtfFile/OOXml/Reader/OOXColorSchemeReader.h @@ -30,8 +30,9 @@ * */ #pragma once -#include "OOXColorReader.h" -#include "../../Format/RtfProperty.h" + +#include "OOXReaderBasic.h" +#include "../../../OOXML/PPTXFormat/Theme/ClrScheme.h" class OOXColorSchemeReader { diff --git a/RtfFile/OOXml/Reader/OOXContentTypeReader.h b/RtfFile/OOXml/Reader/OOXContentTypeReader.h index 5e0e0723fb..0ce5b29229 100644 --- a/RtfFile/OOXml/Reader/OOXContentTypeReader.h +++ b/RtfFile/OOXml/Reader/OOXContentTypeReader.h @@ -43,8 +43,38 @@ private: XmlUtils::CXmlLiteReader m_oReader; public: - OOXContentTypeReader(std::wstring sFilePath); - bool GetByType(std::wstring sType, std::vector& aOutArray); - - std::wstring GetByID(std::wstring sId); + OOXContentTypeReader(std::wstring sFilePath) + { + m_sFilepath = sFilePath; + m_oReader.OpenFromFile(m_sFilepath); + m_oReader.ReadRootNode("Relationships"); + m_oReader.ReadNodeList("Relationship"); + } + bool GetByType(std::wstring sType, std::vector& aOutArray) + { + aOutArray.clear(); + for(int i=0;iGetLengthList();i++) + { + if(oParam.oReader->ReadNodeAttribute(i,"Type") == sType) + { + std::wstring sResult = oParam.oReader->ReadNodeAttribute(i, "Target"); + sResult = sResult.Replace('/','\\'); + aOutArray += sResult; + } + } + return aOutArray.size() > 0; + } +public: std::wstring GetByID(std::wstring sId) + { + for(int i=0;iGetLengthList();i++) + { + if(oParam.oReader->ReadNodeAttribute(i,"Id") == sId) + { + std::wstring sResult = oParam.oReader->ReadNodeAttribute(i,"Target"); + sResult = sResult.Replace('/','\\'); + return sResult; + } + } + return ""; + } }; diff --git a/RtfFile/OOXml/Reader/OOXCoreReader.cpp b/RtfFile/OOXml/Reader/OOXCoreReader.cpp index 3b0a04fc76..4e2efea52c 100644 --- a/RtfFile/OOXml/Reader/OOXCoreReader.cpp +++ b/RtfFile/OOXml/Reader/OOXCoreReader.cpp @@ -30,6 +30,8 @@ * */ +#include "../../Format/RtfDocument.h" + #include "OOXCoreReader.h" OOXCoreReader::OOXCoreReader(OOX::CCore * ooxCore) diff --git a/RtfFile/OOXml/Reader/OOXCoreReader.h b/RtfFile/OOXml/Reader/OOXCoreReader.h index a872888a2a..13b4d032a2 100644 --- a/RtfFile/OOXml/Reader/OOXCoreReader.h +++ b/RtfFile/OOXml/Reader/OOXCoreReader.h @@ -31,7 +31,6 @@ */ #pragma once -#include "../../Format/RtfDocument.h" #include "OOXReader.h" #include "OOXReaderBasic.h" diff --git a/RtfFile/OOXml/Reader/OOXDocDefaultsReader.cpp b/RtfFile/OOXml/Reader/OOXDocDefaultsReader.cpp index f3e1eb8416..bc969dd151 100644 --- a/RtfFile/OOXml/Reader/OOXDocDefaultsReader.cpp +++ b/RtfFile/OOXml/Reader/OOXDocDefaultsReader.cpp @@ -30,6 +30,9 @@ * */ +#include "OOXrPrReader.h" +#include "OOXpPrReader.h" + #include "OOXDocDefaultsReader.h" OOXDocDefaultsReader::OOXDocDefaultsReader(OOX::CDocDefaults* ooxDefaults) diff --git a/RtfFile/OOXml/Reader/OOXDocDefaultsReader.h b/RtfFile/OOXml/Reader/OOXDocDefaultsReader.h index 68df7103a5..a00773562b 100644 --- a/RtfFile/OOXml/Reader/OOXDocDefaultsReader.h +++ b/RtfFile/OOXml/Reader/OOXDocDefaultsReader.h @@ -30,9 +30,8 @@ * */ #pragma once -#include "OOXrPrReader.h" -#include "OOXpPrReader.h" +#include "OOXReaderBasic.h" #include "../../../OOXML/DocxFormat/Styles.h" class OOXDocDefaultsReader diff --git a/RtfFile/OOXml/Reader/OOXDocumentReader.h b/RtfFile/OOXml/Reader/OOXDocumentReader.h index f84a86c0c7..2d83478693 100644 --- a/RtfFile/OOXml/Reader/OOXDocumentReader.h +++ b/RtfFile/OOXml/Reader/OOXDocumentReader.h @@ -45,6 +45,7 @@ private: RtfDocument* m_poDocument = NULL; OOX::CDocument* m_ooxDocument = NULL; + public: OOXDocumentReader(OOX::CDocument* ooxDocument); ~OOXDocumentReader(); diff --git a/RtfFile/OOXml/Reader/OOXFontSchemeReader.h b/RtfFile/OOXml/Reader/OOXFontSchemeReader.h index 609d1f2181..15cd3b8ecf 100644 --- a/RtfFile/OOXml/Reader/OOXFontSchemeReader.h +++ b/RtfFile/OOXml/Reader/OOXFontSchemeReader.h @@ -30,8 +30,9 @@ * */ #pragma once + #include "OOXFontReader.h" -#include "../../Format/RtfProperty.h" +#include "../../../OOXML/PPTXFormat/Theme/FontScheme.h" class OOXFontSchemeReader { diff --git a/RtfFile/OOXml/Reader/OOXFontTableReader.h b/RtfFile/OOXml/Reader/OOXFontTableReader.h index efe5aab3b9..d472c05bfa 100644 --- a/RtfFile/OOXml/Reader/OOXFontTableReader.h +++ b/RtfFile/OOXml/Reader/OOXFontTableReader.h @@ -30,6 +30,7 @@ * */ #pragma once + #include "OOXFontReader.h" class OOXFontTableReader diff --git a/RtfFile/OOXml/Reader/OOXFootnotesReader.h b/RtfFile/OOXml/Reader/OOXFootnotesReader.h index c340424d83..7664b2d4b8 100644 --- a/RtfFile/OOXml/Reader/OOXFootnotesReader.h +++ b/RtfFile/OOXml/Reader/OOXFootnotesReader.h @@ -33,9 +33,6 @@ #include "OOXReader.h" #include "OOXReaderBasic.h" -#include "../../Format/RtfDocument.h" - -#include class OOXFootnotesReader { diff --git a/RtfFile/OOXml/Reader/OOXHeaderReader.h b/RtfFile/OOXml/Reader/OOXHeaderReader.h index 54f5b6b99f..89f107bf1f 100644 --- a/RtfFile/OOXml/Reader/OOXHeaderReader.h +++ b/RtfFile/OOXml/Reader/OOXHeaderReader.h @@ -30,7 +30,6 @@ * */ #pragma once -#include "../../Format/RtfDocument.h" #include "OOXReader.h" #include "OOXReaderBasic.h" diff --git a/RtfFile/OOXml/Reader/OOXLevelReader.h b/RtfFile/OOXml/Reader/OOXLevelReader.h index 2659ca3ac8..b362f461a1 100644 --- a/RtfFile/OOXml/Reader/OOXLevelReader.h +++ b/RtfFile/OOXml/Reader/OOXLevelReader.h @@ -32,10 +32,6 @@ #pragma once #include "OOXReaderBasic.h" - -#include "../../Format/RtfDocument.h" -#include "../../Format/RtfProperty.h" -#include "../../Format/Utils.h" #include "../../../OOXML/DocxFormat/Numbering.h" class OOXLevelReader diff --git a/RtfFile/OOXml/Reader/OOXNumberingMapReader.h b/RtfFile/OOXml/Reader/OOXNumberingMapReader.h index 1f5bb43bb5..97aa4d1f11 100644 --- a/RtfFile/OOXml/Reader/OOXNumberingMapReader.h +++ b/RtfFile/OOXml/Reader/OOXNumberingMapReader.h @@ -31,7 +31,6 @@ */ #pragma once -#include "../../Format/RtfDocument.h" #include "OOXLevelReader.h" class OOXNumberingMapReader diff --git a/RtfFile/OOXml/Reader/OOXNumberingReader.h b/RtfFile/OOXml/Reader/OOXNumberingReader.h index 9746f84070..42fc35fa17 100644 --- a/RtfFile/OOXml/Reader/OOXNumberingReader.h +++ b/RtfFile/OOXml/Reader/OOXNumberingReader.h @@ -30,6 +30,7 @@ * */ #pragma once + #include "OOXAbstractNumReader.h" #include "OOXNumberingMapReader.h" #include "OOXShapeReader.h" diff --git a/RtfFile/OOXml/Reader/OOXParagraphElementReaders.cpp b/RtfFile/OOXml/Reader/OOXParagraphElementReaders.cpp index b8b07380b6..5ab4deb6d5 100644 --- a/RtfFile/OOXml/Reader/OOXParagraphElementReaders.cpp +++ b/RtfFile/OOXml/Reader/OOXParagraphElementReaders.cpp @@ -36,6 +36,7 @@ #include "OOXTextItemReader.h" #include "OOXpPrFrameReader.h" #include "OOXpPrTabReader.h" +#include "OOXMathReader.h" #include "../../Format/RtfOle.h" @@ -617,6 +618,8 @@ bool OOXParagraphReader::Parse3( ReaderParameter oParam , RtfParagraph& oOutputP } return true; } + + OOXRunReader::OOXRunReader(OOX::Logic::CRun *ooxRun) { m_drawingRun = NULL; @@ -1094,6 +1097,18 @@ bool OOXRunReader::Parse( ReaderParameter oParam , RtfParagraph& oOutputParagrap } +OOXpPrReader::OOXpPrReader(OOX::Logic::CParagraphProperty *ooxParaProps) +{ + m_bDefStyle = true; + m_ooxParaProps = ooxParaProps; + m_drawingParaProps = NULL; +} +OOXpPrReader::OOXpPrReader(PPTX::Logic::TextParagraphPr *ooxParaProps) +{ + m_bDefStyle = true; + m_ooxParaProps = NULL; + m_drawingParaProps = ooxParaProps; +} bool OOXpPrReader::Parse( ReaderParameter oParam, RtfParagraphProperty& oOutputProperty, CcnfStyle& oConditionalTableStyle ) { if (m_drawingParaProps) return ParseDrawing( oParam, oOutputProperty); @@ -1440,6 +1455,114 @@ bool OOXpPrReader::Parse( ReaderParameter oParam, RtfParagraphProperty& oOutputP } return true; } +bool OOXpPrReader::ParseDrawing( ReaderParameter oParam, RtfParagraphProperty& oOutputProperty) +{ + if (m_drawingParaProps == NULL) return false; + + if (m_drawingParaProps->lvl.IsInit()) + oOutputProperty.m_nOutlinelevel = m_drawingParaProps->lvl.get(); + + if( m_drawingParaProps->algn.IsInit()) + { + switch(m_drawingParaProps->algn->GetBYTECode()) + { + case SimpleTypes::jcBoth : oOutputProperty.m_eAlign = RtfParagraphProperty::pa_qj;break; + case SimpleTypes::jcCenter : oOutputProperty.m_eAlign = RtfParagraphProperty::pa_qc;break; + case SimpleTypes::jcDistribute : oOutputProperty.m_eAlign = RtfParagraphProperty::pa_qd;break; + case SimpleTypes::jcEnd : oOutputProperty.m_eAlign = RtfParagraphProperty::pa_qr;break; + case SimpleTypes::jcHighKashida : oOutputProperty.m_eAlign = RtfParagraphProperty::pa_qk20;break; + case SimpleTypes::jcLowKashida : oOutputProperty.m_eAlign = RtfParagraphProperty::pa_qk0; break; + case SimpleTypes::jcMediumKashida : oOutputProperty.m_eAlign = RtfParagraphProperty::pa_qk10; break; + case SimpleTypes::jcNumTab : break; + case SimpleTypes::jcStart : oOutputProperty.m_eAlign = RtfParagraphProperty::pa_ql;break; + case SimpleTypes::jcThaiDistribute : break; + case SimpleTypes::jcLeft : oOutputProperty.m_eAlign = RtfParagraphProperty::pa_ql;break; + case SimpleTypes::jcRight : oOutputProperty.m_eAlign = RtfParagraphProperty::pa_qr;break; + default: break; + } + } + + //if( m_drawingParaProps->m_oInd.IsInit() ) + //{ + // int nFirstLine = PROP_DEF; + + // if (m_drawingParaProps->m_oInd->m_oHanging.IsInit()) + // nFirstLine = m_drawingParaProps->m_oInd->m_oHanging->ToTwips(); + // if( PROP_DEF != nFirstLine ) + // oOutputProperty.m_nIndFirstLine = -nFirstLine; + + // if (m_drawingParaProps->m_oInd->m_oFirstLine.IsInit()) + // oOutputProperty.m_nIndFirstLine = m_drawingParaProps->m_oInd->m_oFirstLine->ToTwips(); + + // if (m_drawingParaProps->m_oInd->m_oStart.IsInit()) + // oOutputProperty.m_nIndStart = m_drawingParaProps->m_oInd->m_oStart->ToTwips(); + + // if (m_drawingParaProps->m_oInd->m_oEnd.IsInit()) + // oOutputProperty.m_nIndEnd = m_drawingParaProps->m_oInd->m_oEnd->ToTwips(); + //} + + if ( m_drawingParaProps->spcBef.IsInit() + && m_drawingParaProps->spcBef->spcPts.IsInit()) + oOutputProperty.m_nSpaceBefore = m_drawingParaProps->spcBef->spcPts.get(); + + if ( m_drawingParaProps->spcAft.IsInit() + && m_drawingParaProps->spcAft->spcPts.IsInit()) + oOutputProperty.m_nSpaceAfter = m_drawingParaProps->spcAft->spcPts.get(); + + if (m_drawingParaProps->ParagraphBullet.has_bullet()) + { + oOutputProperty.m_nListLevel = 0; + oOutputProperty.m_nListId = oParam.oRtf->m_oListTable.GetCount() + 1; + + RtfListProperty oNewList; + oNewList.m_nID = oOutputProperty.m_nListId; + oNewList.m_nListSimple = 1; + + RtfListLevelProperty oNewLevel; + //if (m_drawingParaProps->ParagraphBullet.IsInit() && m_drawingParaProps->m_oBuChar->m_sChar.IsInit()) + //{ + // oNewLevel.m_sText = m_drawingParaProps->m_oBuChar->m_sChar.get(); + // oNewLevel.m_nNumberType = 23; + //} + //else if ( m_drawingParaProps->m_oBuAutoNum.IsInit() ) + //{ + // if (m_drawingParaProps->m_oBuAutoNum->m_sType.IsInit()) + // oNewLevel.m_nNumberType = oNewLevel.GetFormat( m_drawingParaProps->m_oBuAutoNum->m_sType.get()); + // else + // oNewLevel.m_nNumberType = 0; + + // if (m_drawingParaProps->m_oBuAutoNum->m_nStartAt.IsInit()) + // oNewLevel.m_nStart = m_drawingParaProps->m_oBuAutoNum->m_nStartAt->GetValue(); + //} + + oNewList.AddItem( oNewLevel ); + oParam.oRtf->m_oListTable.AddItem( oNewList ); } + + if (m_drawingParaProps->rtl.IsInit()) + oOutputProperty.m_bRtl = m_drawingParaProps->rtl.get() ? 1 : 0; + + if( m_drawingParaProps->defRPr.IsInit() ) + { + OOXrPrReader orPrReader(m_drawingParaProps->defRPr.GetPointer()); + orPrReader.Parse( oParam, oOutputProperty.m_oCharProperty ); + } + + return true; +} + + +OOXrPrReader::OOXrPrReader(OOX::Logic::CRunProperty *ooxRunProps) +{ + m_bDefStyle = true; + m_ooxRunProps = ooxRunProps; + m_drawingRunProps = NULL; +} +OOXrPrReader::OOXrPrReader(PPTX::Logic::RunProperties *ooxRunProps) +{ + m_bDefStyle = true; + m_ooxRunProps = NULL; + m_drawingRunProps = ooxRunProps; +} bool OOXrPrReader::Parse( ReaderParameter oParam, RtfCharProperty& oOutputProperty) { if (m_drawingRunProps) ParseDrawing( oParam, oOutputProperty ); @@ -1717,100 +1840,6 @@ bool OOXrPrReader::Parse( ReaderParameter oParam, RtfCharProperty& oOutputProper } return true; } -bool OOXpPrReader::ParseDrawing( ReaderParameter oParam, RtfParagraphProperty& oOutputProperty) -{ - if (m_drawingParaProps == NULL) return false; - - if (m_drawingParaProps->lvl.IsInit()) - oOutputProperty.m_nOutlinelevel = m_drawingParaProps->lvl.get(); - - if( m_drawingParaProps->algn.IsInit()) - { - switch(m_drawingParaProps->algn->GetBYTECode()) - { - case SimpleTypes::jcBoth : oOutputProperty.m_eAlign = RtfParagraphProperty::pa_qj;break; - case SimpleTypes::jcCenter : oOutputProperty.m_eAlign = RtfParagraphProperty::pa_qc;break; - case SimpleTypes::jcDistribute : oOutputProperty.m_eAlign = RtfParagraphProperty::pa_qd;break; - case SimpleTypes::jcEnd : oOutputProperty.m_eAlign = RtfParagraphProperty::pa_qr;break; - case SimpleTypes::jcHighKashida : oOutputProperty.m_eAlign = RtfParagraphProperty::pa_qk20;break; - case SimpleTypes::jcLowKashida : oOutputProperty.m_eAlign = RtfParagraphProperty::pa_qk0; break; - case SimpleTypes::jcMediumKashida : oOutputProperty.m_eAlign = RtfParagraphProperty::pa_qk10; break; - case SimpleTypes::jcNumTab : break; - case SimpleTypes::jcStart : oOutputProperty.m_eAlign = RtfParagraphProperty::pa_ql;break; - case SimpleTypes::jcThaiDistribute : break; - case SimpleTypes::jcLeft : oOutputProperty.m_eAlign = RtfParagraphProperty::pa_ql;break; - case SimpleTypes::jcRight : oOutputProperty.m_eAlign = RtfParagraphProperty::pa_qr;break; - default: break; - } - } - - //if( m_drawingParaProps->m_oInd.IsInit() ) - //{ - // int nFirstLine = PROP_DEF; - - // if (m_drawingParaProps->m_oInd->m_oHanging.IsInit()) - // nFirstLine = m_drawingParaProps->m_oInd->m_oHanging->ToTwips(); - // if( PROP_DEF != nFirstLine ) - // oOutputProperty.m_nIndFirstLine = -nFirstLine; - - // if (m_drawingParaProps->m_oInd->m_oFirstLine.IsInit()) - // oOutputProperty.m_nIndFirstLine = m_drawingParaProps->m_oInd->m_oFirstLine->ToTwips(); - - // if (m_drawingParaProps->m_oInd->m_oStart.IsInit()) - // oOutputProperty.m_nIndStart = m_drawingParaProps->m_oInd->m_oStart->ToTwips(); - - // if (m_drawingParaProps->m_oInd->m_oEnd.IsInit()) - // oOutputProperty.m_nIndEnd = m_drawingParaProps->m_oInd->m_oEnd->ToTwips(); - //} - - if ( m_drawingParaProps->spcBef.IsInit() - && m_drawingParaProps->spcBef->spcPts.IsInit()) - oOutputProperty.m_nSpaceBefore = m_drawingParaProps->spcBef->spcPts.get(); - - if ( m_drawingParaProps->spcAft.IsInit() - && m_drawingParaProps->spcAft->spcPts.IsInit()) - oOutputProperty.m_nSpaceAfter = m_drawingParaProps->spcAft->spcPts.get(); - - if (m_drawingParaProps->ParagraphBullet.has_bullet()) - { - oOutputProperty.m_nListLevel = 0; - oOutputProperty.m_nListId = oParam.oRtf->m_oListTable.GetCount() + 1; - - RtfListProperty oNewList; - oNewList.m_nID = oOutputProperty.m_nListId; - oNewList.m_nListSimple = 1; - - RtfListLevelProperty oNewLevel; - //if (m_drawingParaProps->ParagraphBullet.IsInit() && m_drawingParaProps->m_oBuChar->m_sChar.IsInit()) - //{ - // oNewLevel.m_sText = m_drawingParaProps->m_oBuChar->m_sChar.get(); - // oNewLevel.m_nNumberType = 23; - //} - //else if ( m_drawingParaProps->m_oBuAutoNum.IsInit() ) - //{ - // if (m_drawingParaProps->m_oBuAutoNum->m_sType.IsInit()) - // oNewLevel.m_nNumberType = oNewLevel.GetFormat( m_drawingParaProps->m_oBuAutoNum->m_sType.get()); - // else - // oNewLevel.m_nNumberType = 0; - - // if (m_drawingParaProps->m_oBuAutoNum->m_nStartAt.IsInit()) - // oNewLevel.m_nStart = m_drawingParaProps->m_oBuAutoNum->m_nStartAt->GetValue(); - //} - - oNewList.AddItem( oNewLevel ); - oParam.oRtf->m_oListTable.AddItem( oNewList ); } - - if (m_drawingParaProps->rtl.IsInit()) - oOutputProperty.m_bRtl = m_drawingParaProps->rtl.get() ? 1 : 0; - - if( m_drawingParaProps->defRPr.IsInit() ) - { - OOXrPrReader orPrReader(m_drawingParaProps->defRPr.GetPointer()); - orPrReader.Parse( oParam, oOutputProperty.m_oCharProperty ); - } - - return true; -} bool OOXrPrReader::ParseDrawing(ReaderParameter oParam, RtfCharProperty& oOutputProperty) { if (m_drawingRunProps == NULL) return false; @@ -1868,7 +1897,7 @@ bool OOXrPrReader::ParseDrawing(ReaderParameter oParam, RtfCharProperty& oOutput //if( m_drawingRunProps->m_oHighlight.IsInit() && m_drawingRunProps->m_oHighlight->m_oVal.IsInit() ) //{ //if (m_drawingRunProps->m_oHighlight->m_oVal->GetValue() != SimpleTypes::highlightcolorNone) - //{ + //{ // oOutputProperty.m_nHightlited = oParam.oRtf->m_oColorTable.AddItem(RtfColor(m_drawingRunProps->m_oHighlight->m_oVal->Get_R(), // m_drawingRunProps->m_oHighlight->m_oVal->Get_G(), // m_drawingRunProps->m_oHighlight->m_oVal->Get_B())); @@ -1906,12 +1935,12 @@ bool OOXrPrReader::ParseDrawing(ReaderParameter oParam, RtfCharProperty& oOutput case SimpleTypes::underlineWavyDouble : oOutputProperty.m_eUnderStyle = RtfCharProperty::uls_Double_wave; break; case SimpleTypes::underlineWavyHeavy : oOutputProperty.m_eUnderStyle = RtfCharProperty::uls_Heavy_wave; break; case SimpleTypes::underlineWords : oOutputProperty.m_eUnderStyle = RtfCharProperty::uls_Word; break; - default: break; - } + default: break; + } //if ((m_drawingRunProps->m_oU->m_oColor.IsInit()) && (m_drawingRunProps->m_oU->m_oColor->GetValue() == SimpleTypes::hexcolorRGB)) //{ - // RtfColor oColor(m_drawingRunProps->m_oU->m_oColor->Get_R(), m_drawingRunProps->m_oU->m_oColor->Get_G(), m_drawingRunProps->m_oU->m_oColor->Get_B()); + // RtfColor oColor(m_drawingRunProps->m_oU->m_oColor->Get_R(), m_drawingRunProps->m_oU->m_oColor->Get_G(), m_drawingRunProps->m_oU->m_oColor->Get_B()); // oOutputProperty.m_nUnderlineColor = oParam.oRtf->m_oColorTable.AddItem( oColor ); //}//todooo theme color, tint, shadow } @@ -1919,6 +1948,10 @@ bool OOXrPrReader::ParseDrawing(ReaderParameter oParam, RtfCharProperty& oOutput return true; } +OOXpPrFrameReader::OOXpPrFrameReader(ComplexTypes::Word::CFramePr *ooxFramePr) +{ + m_ooxFramePr = ooxFramePr; +} bool OOXpPrFrameReader::Parse( ReaderParameter oParam ,RtfFrame& oOutputProperty) { if (m_ooxFramePr == NULL) return false; @@ -2020,6 +2053,12 @@ bool OOXpPrFrameReader::Parse( ReaderParameter oParam ,RtfFrame& oOutputProperty return true; } + + +OOXSectionPropertyReader::OOXSectionPropertyReader(OOX::Logic::CSectionProperty *ooxSectionProperty) +{ + m_ooxSectionProperty = ooxSectionProperty; +} bool OOXSectionPropertyReader::Parse( ReaderParameter oParam , RtfSectionProperty& oOutput) { if (m_ooxSectionProperty == NULL) return false; diff --git a/RtfFile/OOXml/Reader/OOXParagraphReader.h b/RtfFile/OOXml/Reader/OOXParagraphReader.h index 01dd81d852..e76aff7f14 100644 --- a/RtfFile/OOXml/Reader/OOXParagraphReader.h +++ b/RtfFile/OOXml/Reader/OOXParagraphReader.h @@ -30,12 +30,11 @@ * */ #pragma once + #include "OOXRunReader.h" #include "OOXpPrReader.h" -#include "OOXMathReader.h" #include "../../Format/RtfDocument.h" -#include "../../Format/RtfField.h" namespace OOX { @@ -51,6 +50,7 @@ private: PPTX::Logic::Paragraph *m_drawingParagraph; OOX::Logic::CParagraph *m_ooxParagraph; OOX::WritingElementWithChilds *m_ooxElement; + public: RtfCharProperty m_oCharProperty; diff --git a/RtfFile/OOXml/Reader/OOXPictureAnchorReader.h b/RtfFile/OOXml/Reader/OOXPictureAnchorReader.h index 67e830f62a..916b54cb35 100644 --- a/RtfFile/OOXml/Reader/OOXPictureAnchorReader.h +++ b/RtfFile/OOXml/Reader/OOXPictureAnchorReader.h @@ -30,8 +30,8 @@ * */ #pragma once + #include "OOXDrawingGraphicReader.h" -#include "OOXReaderBasic.h" class OOXDrawingAnchorReader { diff --git a/RtfFile/OOXml/Reader/OOXPictureReader.cpp b/RtfFile/OOXml/Reader/OOXPictureReader.cpp index 73c21d5540..c553a6ac16 100644 --- a/RtfFile/OOXml/Reader/OOXPictureReader.cpp +++ b/RtfFile/OOXml/Reader/OOXPictureReader.cpp @@ -30,6 +30,9 @@ * */ +#include "OOXPictureAnchorReader.h" +#include "OOXPictureInlineReader.h" + #include "OOXPictureReader.h" OOXDrawingReader::OOXDrawingReader(OOX::Logic::CDrawing* ooxDrawing) diff --git a/RtfFile/OOXml/Reader/OOXPictureReader.h b/RtfFile/OOXml/Reader/OOXPictureReader.h index d5a640c10b..8894c88013 100644 --- a/RtfFile/OOXml/Reader/OOXPictureReader.h +++ b/RtfFile/OOXml/Reader/OOXPictureReader.h @@ -30,10 +30,9 @@ * */ #pragma once -#include "../../Format/RtfPicture.h" -#include "OOXPictureAnchorReader.h" -#include "OOXPictureInlineReader.h" +#include "OOXReaderBasic.h" +#include "../../Format/RtfPicture.h" #include "../../../OOXML/DocxFormat/Drawing/Drawing.h" class OOXDrawingReader diff --git a/RtfFile/OOXml/Reader/OOXReader.h b/RtfFile/OOXml/Reader/OOXReader.h index c2552af57f..86a1f17305 100644 --- a/RtfFile/OOXml/Reader/OOXReader.h +++ b/RtfFile/OOXml/Reader/OOXReader.h @@ -53,6 +53,7 @@ #include "../../../OOXML/DocxFormat/HeaderFooter.h" #include "../../../OOXML/PPTXFormat/Theme.h" + class RtfConvertationManager; class OOXReader diff --git a/RtfFile/OOXml/Reader/OOXRunReader.h b/RtfFile/OOXml/Reader/OOXRunReader.h index 984e0a98d4..55c2480e2e 100644 --- a/RtfFile/OOXml/Reader/OOXRunReader.h +++ b/RtfFile/OOXml/Reader/OOXRunReader.h @@ -37,9 +37,7 @@ #include "../../Format/RtfDocument.h" #include "../../Format/RtfProperty.h" -#include "../../Format/RtfField.h" #include "../../Format/RtfBookmark.h" -#include "../../Format/RtfOle.h" namespace OOX { @@ -54,6 +52,7 @@ class OOXRunReader private: PPTX::Logic::Run* m_drawingRun; OOX::Logic::CRun* m_ooxRun; + public: RtfCharProperty m_oCharProperty; diff --git a/RtfFile/OOXml/Reader/OOXSectionPropertyReader.h b/RtfFile/OOXml/Reader/OOXSectionPropertyReader.h index 428c99ddee..b2201a62d8 100644 --- a/RtfFile/OOXml/Reader/OOXSectionPropertyReader.h +++ b/RtfFile/OOXml/Reader/OOXSectionPropertyReader.h @@ -30,6 +30,7 @@ * */ #pragma once + #include "OOXReaderBasic.h" #include "OOXHeaderReader.h" @@ -37,10 +38,9 @@ class OOXSectionPropertyReader { private: OOX::Logic::CSectionProperty *m_ooxSectionProperty; + public: - OOXSectionPropertyReader(OOX::Logic::CSectionProperty *ooxSectionProperty) - { - m_ooxSectionProperty = ooxSectionProperty; - } + OOXSectionPropertyReader(OOX::Logic::CSectionProperty *ooxSectionProperty); + bool Parse( ReaderParameter oParam , RtfSectionProperty& oOutput); }; diff --git a/RtfFile/OOXml/Reader/OOXShapeReader.cpp b/RtfFile/OOXml/Reader/OOXShapeReader.cpp index 0ac0af0c40..c720d7e89f 100644 --- a/RtfFile/OOXml/Reader/OOXShapeReader.cpp +++ b/RtfFile/OOXml/Reader/OOXShapeReader.cpp @@ -50,9 +50,18 @@ #include "../../../DesktopEditor/graphics/pro/Image.h" #ifndef RGB - #define RGB(r,g,b) ((_UINT32)(((BYTE)(r)|((_UINT16)((BYTE)(g))<<8))|(((_UINT32)(BYTE)(b))<<16))) +#define RGB(r,g,b) ((_UINT32)(((BYTE)(r)|((_UINT16)((BYTE)(g))<<8))|(((_UINT32)(BYTE)(b))<<16))) #endif +OOXShapeReader::OOXShapeReader(OOX::Vml::CVmlCommonElements * vmlElem) +{ + m_vmlElement = vmlElem; + m_arrElement = vmlElem; +} +OOXShapeReader::OOXShapeReader(OOX::WritingElement* ooxShape) +{ + m_ooxShape = ooxShape; +} bool OOXShapeReader::ParseVmlStyle(RtfShapePtr pShape, SimpleTypes::Vml::CCssProperty* prop) { if (pShape == NULL) return false; @@ -60,226 +69,226 @@ bool OOXShapeReader::ParseVmlStyle(RtfShapePtr pShape, SimpleTypes::Vml::CCssPro switch(prop->get_Type()) { - case SimpleTypes::Vml::cssptUnknown : - break; - case SimpleTypes::Vml::cssptFlip : - switch(pShape->m_bFlipH = prop->get_Value().eFlip) - { - case SimpleTypes::Vml::cssflipX: pShape->m_bFlipH = true; break; - case SimpleTypes::Vml::cssflipY: pShape->m_bFlipV = true; break; - case SimpleTypes::Vml::cssflipXY: pShape->m_bFlipH = true; pShape->m_bFlipV = true; break; - case SimpleTypes::Vml::cssflipYX : pShape->m_bFlipH = true; pShape->m_bFlipV = true; break; - default: break; - } - break; - case SimpleTypes::Vml::cssptWidth : - { - if (prop->get_Value().oValue.eType == SimpleTypes::Vml::cssunitstypeUnits) - pShape->m_nRelRight = (int)(20 * prop->get_Value().oValue.dValue); - else - pShape->m_nRelRight = (int)(prop->get_Value().oValue.dValue); - - pShape->m_nRight = pShape->m_nRelRight; - - if( PROP_DEF != pShape->m_nLeft ) - pShape->m_nRight += pShape->m_nLeft; - if( PROP_DEF != pShape->m_nRelLeft) - pShape->m_nRelRight += pShape->m_nRelLeft; - }break; - case SimpleTypes::Vml::cssptHeight : - { - if (prop->get_Value().oValue.eType == SimpleTypes::Vml::cssunitstypeUnits) - pShape->m_nRelBottom = (int)(20 * prop->get_Value().oValue.dValue); //pt - else - pShape->m_nRelBottom = (int)(prop->get_Value().oValue.dValue); //absolute - - pShape->m_nBottom = pShape->m_nRelBottom; - - if( PROP_DEF != pShape->m_nTop ) - pShape->m_nBottom += pShape->m_nTop; - if( PROP_DEF != pShape->m_nRelTop) - pShape->m_nRelBottom += pShape->m_nRelTop; - }break; - case SimpleTypes::Vml::cssptLeft : - { - pShape->m_nRelLeft = (int) prop->get_Value().oValue.dValue; //absolute - - if( PROP_DEF != pShape->m_nRelRight) - pShape->m_nRelRight += pShape->m_nRelLeft; - }break; - case SimpleTypes::Vml::cssptTop : - { - pShape->m_nRelTop = (int) prop->get_Value().oValue.dValue; //absolute - if( PROP_DEF != pShape->m_nRelBottom) - pShape->m_nRelBottom += pShape->m_nRelTop; - }break; - case SimpleTypes::Vml::cssptMarginBottom: - { - pShape->m_nBottom = (int)(20 * prop->get_Value().oValue.dValue ); - }break; - case SimpleTypes::Vml::cssptMarginLeft : - { - pShape->m_nLeft = (int)(20 * prop->get_Value().oValue.dValue ); - }break;//pt tp twips - case SimpleTypes::Vml::cssptMarginRight : - { - pShape->m_nRight = (int)(20 * prop->get_Value().oValue.dValue ); - }break; - case SimpleTypes::Vml::cssptMarginTop: - { - pShape->m_nTop = (int)(20 * prop->get_Value().oValue.dValue ); - }break; - case SimpleTypes::Vml::cssptMsoPositionHorizontal: - { - pShape->m_nPositionH = prop->get_Value().eMsoPosHor; - pShape->m_nPositionHRelative = PROP_DEF; //images.docx - }break; - case SimpleTypes::Vml::cssptMsoPositionHorizontalRelative : - { - pShape->m_nPositionHRelative = prop->get_Value().eMsoPosHorRel; - switch(prop->get_Value().eMsoPosHorRel) - { - case SimpleTypes::Vml::cssmsoposhorrelMargin: pShape->m_eXAnchor = RtfShape::ax_margin; break; - case SimpleTypes::Vml::cssmsoposhorrelPage: pShape->m_eXAnchor = RtfShape::ax_page; break; - case SimpleTypes::Vml::cssmsoposhorrelText: break; //??? - case SimpleTypes::Vml::cssmsoposhorrelChar: pShape->m_eAnchorTypeShape = RtfShape::st_inline; break;//inline - } - }break; - case SimpleTypes::Vml::cssptMsoPositionVertical: - { - pShape->m_nPositionV = prop->get_Value().eMsoPosVer; - }break; - case SimpleTypes::Vml::cssptMsoPositionVerticalRelative : - { - pShape->m_nPositionVRelative = prop->get_Value().eMsoPosVerRel; - switch(prop->get_Value().eMsoPosVerRel) - { - case SimpleTypes::Vml::cssmsoposverrelMargin: pShape->m_eYAnchor = RtfShape::ay_margin; break; - case SimpleTypes::Vml::cssmsoposverrelPage: pShape->m_eYAnchor = RtfShape::ay_page; break; - case SimpleTypes::Vml::cssmsoposverrelText: - case SimpleTypes::Vml::cssmsoposverrelLine: break;//inline - } - }break; - case SimpleTypes::Vml::cssptMsoWrapDistanceBottom: - { - //todooo проверять на размерность - pShape->m_nWrapDistBottom = (int)(20 * prop->get_Value().oValue.dValue ); - }break; - case SimpleTypes::Vml::cssptMsoWrapDistanceLeft : - { - //todooo проверять на размерность - pShape->m_nWrapDistLeft = (int)(20 * prop->get_Value().oValue.dValue ); - }break; - case SimpleTypes::Vml::cssptMsoWrapDistanceRight: - { - //todooo проверять на размерность - pShape->m_nWrapDistRight = (int)(20 * prop->get_Value().oValue.dValue ); - }break; - case SimpleTypes::Vml::cssptMsoWrapDistanceTop : - { - //todooo проверять на размерность - pShape->m_nWrapDistTop = (int)(20 * prop->get_Value().oValue.dValue ); - }break; - case SimpleTypes::Vml::cssptMsoWrapEdited: - break; - case SimpleTypes::Vml::cssptMsoWrapStyle: - if (prop->get_Value().eMsoWrapStyle == SimpleTypes::Vml::cssmsowrapstyleNone) - pShape->m_nWrapType = 3; - else if ( pShape->m_nZOrderRelative == PROP_DEF) - pShape->m_nWrapType = 2; - break; - case SimpleTypes::Vml::cssptPosition: - break; - case SimpleTypes::Vml::cssptRotation: - { - pShape->m_nRotation = (int)(65536 * prop->get_Value().oValue.dValue); - if( PROP_DEF != pShape->m_nRelRight - || PROP_DEF != pShape->m_nRelLeft - || PROP_DEF != pShape->m_nRelTop - || PROP_DEF != pShape->m_nRelBottom ) - pShape->m_nRelRotation = pShape->m_nRotation; - }break; - case SimpleTypes::Vml::cssptVisibility : - break; - case SimpleTypes::Vml::cssptZIndex : - { - if (pShape->m_eAnchorTypeShape == RtfShape::st_none) - { - pShape->m_eAnchorTypeShape = RtfShape::st_anchor; - } - - int nValue = prop->get_Value().oZIndex.nOrder; - pShape->m_nZOrder = nValue; - if( nValue > 0 ) - { - pShape->m_nWrapType = 3; - pShape->m_nZOrderRelative = 0; - } - else if( nValue < 0 ) - { - pShape->m_nWrapType = 3; - pShape->m_nZOrderRelative = 1; - } - }break; - case SimpleTypes::Vml::cssptFontFamily: - { - pShape->m_sGtextFont = std::wstring(prop->get_Value().wsValue); - }break; - case SimpleTypes::Vml::cssptFontSize: - { - pShape->m_nGtextSize = (int)prop->get_Value().oValue.dValue; - }break; - case SimpleTypes::Vml::cssptVTextAnchor: - { - pShape->m_nAnchorText = prop->get_Value().eVTextAnchor;//совпдает - pShape->m_bFitShapeToText = 0; - }break; - case SimpleTypes::Vml::csspctMsoWidthPercent: - { - pShape->m_nPctWidth = (int)prop->get_Value().oValue.dValue; - }break; - case SimpleTypes::Vml::csspctMsoHeightPercent: - { - pShape->m_nPctHeight = (int)prop->get_Value().oValue.dValue; - }break; - case SimpleTypes::Vml::csspctMsoTopPercent: + case SimpleTypes::Vml::cssptUnknown : + break; + case SimpleTypes::Vml::cssptFlip : + switch(pShape->m_bFlipH = prop->get_Value().eFlip) { - pShape->m_nPositionVPct = (int)prop->get_Value().oValue.dValue; - }break; - case SimpleTypes::Vml::csspctMsoLeftPercent: + case SimpleTypes::Vml::cssflipX: pShape->m_bFlipH = true; break; + case SimpleTypes::Vml::cssflipY: pShape->m_bFlipV = true; break; + case SimpleTypes::Vml::cssflipXY: pShape->m_bFlipH = true; pShape->m_bFlipV = true; break; + case SimpleTypes::Vml::cssflipYX : pShape->m_bFlipH = true; pShape->m_bFlipV = true; break; + default: break; + } + break; + case SimpleTypes::Vml::cssptWidth : + { + if (prop->get_Value().oValue.eType == SimpleTypes::Vml::cssunitstypeUnits) + pShape->m_nRelRight = (int)(20 * prop->get_Value().oValue.dValue); + else + pShape->m_nRelRight = (int)(prop->get_Value().oValue.dValue); + + pShape->m_nRight = pShape->m_nRelRight; + + if( PROP_DEF != pShape->m_nLeft ) + pShape->m_nRight += pShape->m_nLeft; + if( PROP_DEF != pShape->m_nRelLeft) + pShape->m_nRelRight += pShape->m_nRelLeft; + }break; + case SimpleTypes::Vml::cssptHeight : + { + if (prop->get_Value().oValue.eType == SimpleTypes::Vml::cssunitstypeUnits) + pShape->m_nRelBottom = (int)(20 * prop->get_Value().oValue.dValue); //pt + else + pShape->m_nRelBottom = (int)(prop->get_Value().oValue.dValue); //absolute + + pShape->m_nBottom = pShape->m_nRelBottom; + + if( PROP_DEF != pShape->m_nTop ) + pShape->m_nBottom += pShape->m_nTop; + if( PROP_DEF != pShape->m_nRelTop) + pShape->m_nRelBottom += pShape->m_nRelTop; + }break; + case SimpleTypes::Vml::cssptLeft : + { + pShape->m_nRelLeft = (int) prop->get_Value().oValue.dValue; //absolute + + if( PROP_DEF != pShape->m_nRelRight) + pShape->m_nRelRight += pShape->m_nRelLeft; + }break; + case SimpleTypes::Vml::cssptTop : + { + pShape->m_nRelTop = (int) prop->get_Value().oValue.dValue; //absolute + if( PROP_DEF != pShape->m_nRelBottom) + pShape->m_nRelBottom += pShape->m_nRelTop; + }break; + case SimpleTypes::Vml::cssptMarginBottom: + { + pShape->m_nBottom = (int)(20 * prop->get_Value().oValue.dValue ); + }break; + case SimpleTypes::Vml::cssptMarginLeft : + { + pShape->m_nLeft = (int)(20 * prop->get_Value().oValue.dValue ); + }break;//pt tp twips + case SimpleTypes::Vml::cssptMarginRight : + { + pShape->m_nRight = (int)(20 * prop->get_Value().oValue.dValue ); + }break; + case SimpleTypes::Vml::cssptMarginTop: + { + pShape->m_nTop = (int)(20 * prop->get_Value().oValue.dValue ); + }break; + case SimpleTypes::Vml::cssptMsoPositionHorizontal: + { + pShape->m_nPositionH = prop->get_Value().eMsoPosHor; + pShape->m_nPositionHRelative = PROP_DEF; //images.docx + }break; + case SimpleTypes::Vml::cssptMsoPositionHorizontalRelative : + { + pShape->m_nPositionHRelative = prop->get_Value().eMsoPosHorRel; + switch(prop->get_Value().eMsoPosHorRel) { - pShape->m_nPositionHPct = (int)prop->get_Value().oValue.dValue; - }break; - case SimpleTypes::Vml::cssptVRotateLetters: - { - pShape->m_bGtextFVertical = prop->get_Value().bValue; - }break; - case SimpleTypes::Vml::cssptVTextKern: - { - pShape->m_bGtextFKern = prop->get_Value().bValue; - }break; - case SimpleTypes::Vml::cssptDirection : break; - case SimpleTypes::Vml::cssptLayoutFlow : break; - case SimpleTypes::Vml::cssptMsoDirectionAlt : break; - case SimpleTypes::Vml::cssptMsoFitShapeToText : break; - case SimpleTypes::Vml::cssptMsoFitTextToShape : break; - case SimpleTypes::Vml::cssptMsoLayoutFlowAlt : break; - case SimpleTypes::Vml::cssptMsoNextTextbox : break; - case SimpleTypes::Vml::cssptMsoRotate : break; - case SimpleTypes::Vml::cssptMsoTextScale : break; - case SimpleTypes::Vml::cssptFont : break; - case SimpleTypes::Vml::cssptFontStyle : break; - case SimpleTypes::Vml::cssptFontVariant : break; - case SimpleTypes::Vml::cssptFontWeight : break; - case SimpleTypes::Vml::cssptMsoTextShadow : break; - case SimpleTypes::Vml::cssptTextDecoration : break; - case SimpleTypes::Vml::cssptVSameLetterHeights : break; - case SimpleTypes::Vml::cssptVTextAlign : break; - case SimpleTypes::Vml::cssptVTextReverse : break; - case SimpleTypes::Vml::cssptVTextSpacingMode : break; - case SimpleTypes::Vml::cssptVTextSpacing : break; - default: break; - } + case SimpleTypes::Vml::cssmsoposhorrelMargin: pShape->m_eXAnchor = RtfShape::ax_margin; break; + case SimpleTypes::Vml::cssmsoposhorrelPage: pShape->m_eXAnchor = RtfShape::ax_page; break; + case SimpleTypes::Vml::cssmsoposhorrelText: break; //??? + case SimpleTypes::Vml::cssmsoposhorrelChar: pShape->m_eAnchorTypeShape = RtfShape::st_inline; break;//inline + } + }break; + case SimpleTypes::Vml::cssptMsoPositionVertical: + { + pShape->m_nPositionV = prop->get_Value().eMsoPosVer; + }break; + case SimpleTypes::Vml::cssptMsoPositionVerticalRelative : + { + pShape->m_nPositionVRelative = prop->get_Value().eMsoPosVerRel; + switch(prop->get_Value().eMsoPosVerRel) + { + case SimpleTypes::Vml::cssmsoposverrelMargin: pShape->m_eYAnchor = RtfShape::ay_margin; break; + case SimpleTypes::Vml::cssmsoposverrelPage: pShape->m_eYAnchor = RtfShape::ay_page; break; + case SimpleTypes::Vml::cssmsoposverrelText: + case SimpleTypes::Vml::cssmsoposverrelLine: break;//inline + } + }break; + case SimpleTypes::Vml::cssptMsoWrapDistanceBottom: + { + //todooo проверять на размерность + pShape->m_nWrapDistBottom = (int)(20 * prop->get_Value().oValue.dValue ); + }break; + case SimpleTypes::Vml::cssptMsoWrapDistanceLeft : + { + //todooo проверять на размерность + pShape->m_nWrapDistLeft = (int)(20 * prop->get_Value().oValue.dValue ); + }break; + case SimpleTypes::Vml::cssptMsoWrapDistanceRight: + { + //todooo проверять на размерность + pShape->m_nWrapDistRight = (int)(20 * prop->get_Value().oValue.dValue ); + }break; + case SimpleTypes::Vml::cssptMsoWrapDistanceTop : + { + //todooo проверять на размерность + pShape->m_nWrapDistTop = (int)(20 * prop->get_Value().oValue.dValue ); + }break; + case SimpleTypes::Vml::cssptMsoWrapEdited: + break; + case SimpleTypes::Vml::cssptMsoWrapStyle: + if (prop->get_Value().eMsoWrapStyle == SimpleTypes::Vml::cssmsowrapstyleNone) + pShape->m_nWrapType = 3; + else if ( pShape->m_nZOrderRelative == PROP_DEF) + pShape->m_nWrapType = 2; + break; + case SimpleTypes::Vml::cssptPosition: + break; + case SimpleTypes::Vml::cssptRotation: + { + pShape->m_nRotation = (int)(65536 * prop->get_Value().oValue.dValue); + if( PROP_DEF != pShape->m_nRelRight + || PROP_DEF != pShape->m_nRelLeft + || PROP_DEF != pShape->m_nRelTop + || PROP_DEF != pShape->m_nRelBottom ) + pShape->m_nRelRotation = pShape->m_nRotation; + }break; + case SimpleTypes::Vml::cssptVisibility : + break; + case SimpleTypes::Vml::cssptZIndex : + { + if (pShape->m_eAnchorTypeShape == RtfShape::st_none) + { + pShape->m_eAnchorTypeShape = RtfShape::st_anchor; + } + + int nValue = prop->get_Value().oZIndex.nOrder; + pShape->m_nZOrder = nValue; + if( nValue > 0 ) + { + pShape->m_nWrapType = 3; + pShape->m_nZOrderRelative = 0; + } + else if( nValue < 0 ) + { + pShape->m_nWrapType = 3; + pShape->m_nZOrderRelative = 1; + } + }break; + case SimpleTypes::Vml::cssptFontFamily: + { + pShape->m_sGtextFont = std::wstring(prop->get_Value().wsValue); + }break; + case SimpleTypes::Vml::cssptFontSize: + { + pShape->m_nGtextSize = (int)prop->get_Value().oValue.dValue; + }break; + case SimpleTypes::Vml::cssptVTextAnchor: + { + pShape->m_nAnchorText = prop->get_Value().eVTextAnchor;//совпдает + pShape->m_bFitShapeToText = 0; + }break; + case SimpleTypes::Vml::csspctMsoWidthPercent: + { + pShape->m_nPctWidth = (int)prop->get_Value().oValue.dValue; + }break; + case SimpleTypes::Vml::csspctMsoHeightPercent: + { + pShape->m_nPctHeight = (int)prop->get_Value().oValue.dValue; + }break; + case SimpleTypes::Vml::csspctMsoTopPercent: + { + pShape->m_nPositionVPct = (int)prop->get_Value().oValue.dValue; + }break; + case SimpleTypes::Vml::csspctMsoLeftPercent: + { + pShape->m_nPositionHPct = (int)prop->get_Value().oValue.dValue; + }break; + case SimpleTypes::Vml::cssptVRotateLetters: + { + pShape->m_bGtextFVertical = prop->get_Value().bValue; + }break; + case SimpleTypes::Vml::cssptVTextKern: + { + pShape->m_bGtextFKern = prop->get_Value().bValue; + }break; + case SimpleTypes::Vml::cssptDirection : break; + case SimpleTypes::Vml::cssptLayoutFlow : break; + case SimpleTypes::Vml::cssptMsoDirectionAlt : break; + case SimpleTypes::Vml::cssptMsoFitShapeToText : break; + case SimpleTypes::Vml::cssptMsoFitTextToShape : break; + case SimpleTypes::Vml::cssptMsoLayoutFlowAlt : break; + case SimpleTypes::Vml::cssptMsoNextTextbox : break; + case SimpleTypes::Vml::cssptMsoRotate : break; + case SimpleTypes::Vml::cssptMsoTextScale : break; + case SimpleTypes::Vml::cssptFont : break; + case SimpleTypes::Vml::cssptFontStyle : break; + case SimpleTypes::Vml::cssptFontVariant : break; + case SimpleTypes::Vml::cssptFontWeight : break; + case SimpleTypes::Vml::cssptMsoTextShadow : break; + case SimpleTypes::Vml::cssptTextDecoration : break; + case SimpleTypes::Vml::cssptVSameLetterHeights : break; + case SimpleTypes::Vml::cssptVTextAlign : break; + case SimpleTypes::Vml::cssptVTextReverse : break; + case SimpleTypes::Vml::cssptVTextSpacingMode : break; + case SimpleTypes::Vml::cssptVTextSpacing : break; + default: break; + } return true; } bool OOXShapeReader::ParseVmlStyles (RtfShapePtr& pShape, std::vector & props) @@ -290,26 +299,24 @@ bool OOXShapeReader::ParseVmlStyles (RtfShapePtr& pShape, std::vector * elem) { - m_arrElement = elem; + m_arrElement = elem; - m_vmlElement = dynamic_cast(elem); + m_vmlElement = dynamic_cast(elem); m_ooxShape = dynamic_cast(elem); - if (m_vmlElement == NULL && m_ooxShape == NULL) - { - OOX::Logic::CPicture* pict = dynamic_cast(elem); + if (m_vmlElement == NULL && m_ooxShape == NULL) + { + OOX::Logic::CPicture* pict = dynamic_cast(elem); - if (pict) - { + if (pict) + { m_vmlElement = dynamic_cast(pict->m_oShapeElement.GetPointer()); - } + } - } + } } - bool OOXShapeReader::ParseVmlChild( ReaderParameter oParam , RtfShapePtr& pOutput) { if (m_arrElement == NULL) return false; @@ -320,297 +327,297 @@ bool OOXShapeReader::ParseVmlChild( ReaderParameter oParam , RtfShapePtr& pOutpu switch(m_arrElement->m_arrItems[i]->getType()) { - case OOX::et_v_fill: + case OOX::et_v_fill: + { + OOX::Vml::CFill* fill = dynamic_cast(m_arrElement->m_arrItems[i]); + if (!fill) break; + + std::wstring srId = fill->m_sId.IsInit() ? *fill->m_sId : L"" ; + + if (srId.empty() && fill->m_rId.IsInit()) + srId = fill->m_rId->GetValue(); + + if (srId.empty() && fill->m_oRelId.IsInit()) + srId = fill->m_oRelId->GetValue(); + + if (!srId.empty() && oParam.oReader->m_currentContainer) { - OOX::Vml::CFill* fill = dynamic_cast(m_arrElement->m_arrItems[i]); - if (!fill) break; + smart_ptr oFile = oParam.oReader->m_currentContainer->Find(srId); - std::wstring srId = fill->m_sId.IsInit() ? *fill->m_sId : L"" ; + if ( oFile.IsInit() && (OOX::FileTypes::Image == oFile->type())) + { + OOX::Image* pImage = (OOX::Image*)oFile.GetPointer(); + std::wstring sImagePath = pImage->filename().GetPath(); - if (srId.empty() && fill->m_rId.IsInit()) - srId = fill->m_rId->GetValue(); + pOutput->m_oPicture = RtfPicturePtr( new RtfPicture() ); + + WriteDataToPicture( sImagePath, *pOutput->m_oPicture, oParam ); + + pOutput->m_nFillType = 2; + } + } + if (fill->m_oColor.IsInit()) + pOutput->m_nFillColor = (fill->m_oColor->Get_B() << 16) + (fill->m_oColor->Get_G() << 8) + fill->m_oColor->Get_R(); + + if (fill->m_oColor2.IsInit()) + { + pOutput->m_nFillColor2 = (fill->m_oColor2->Get_B() << 16) + (fill->m_oColor2->Get_G() << 8) + fill->m_oColor2->Get_R(); + } + + if (fill->m_oOpacity.IsInit()) + pOutput->m_nFillOpacity = (int)(fill->m_oOpacity->GetValue() * 100); + + switch(fill->m_oType.GetValue()) + { + case SimpleTypes::filltypeBackground: pOutput->m_nFillType = 9; break; + case SimpleTypes::filltypeFrame : pOutput->m_nFillType = 3; break; + case SimpleTypes::filltypeGradient: pOutput->m_nFillType = 4; break; + case SimpleTypes::filltypeGradientCenter: pOutput->m_nFillType = 4; break; + case SimpleTypes::filltypeGradientRadial: pOutput->m_nFillType = 6; break; + case SimpleTypes::filltypeGradientUnscaled: pOutput->m_nFillType = 4; break; + case SimpleTypes::filltypePattern: pOutput->m_nFillType = 1; break; + case SimpleTypes::filltypeTile: pOutput->m_nFillType = 2; break; + case SimpleTypes::filltypeSolid: + default: + break; + } + if (fill->m_oAngle.IsInit()) + { + pOutput->m_nFillAngle = fill->m_oAngle->GetValue(); + if (pOutput->m_nFillType == 4) + pOutput->m_nFillType = 7; + } + if (fill->m_oFocus.IsInit()) + { + pOutput->m_nFillFocus = (int)(fill->m_oFocus->GetValue()); + } + if (fill->m_oFocusPosition.IsInit()) + { + if (fill->m_oFocusPosition->GetY() > 0.99 || fill->m_oFocusPosition->GetX() > 0.99) + pOutput->m_nFillType = 5; + + int toBottom = (int)((1. - fill->m_oFocusPosition->GetY()) * 65535); + int toTop = (int)((fill->m_oFocusPosition->GetY()) * 65535); + int toRight = (int)((1. - fill->m_oFocusPosition->GetX()) * 65535); + int toLeft = (int)((fill->m_oFocusPosition->GetX()) * 65535); + + if (toBottom > 0) pOutput->m_nFillToBottom = toBottom; + if (toTop > 0) pOutput->m_nFillToTop = toTop; + if (toRight > 0) pOutput->m_nFillToRight = toRight; + if (toLeft > 0) pOutput->m_nFillToLeft = toLeft; + } + }break; + case OOX::et_v_stroke: + { + OOX::Vml::CStroke* stroke = dynamic_cast(m_arrElement->m_arrItems[i]); + if (!stroke) break; + + if (stroke->m_oDahsStyle.IsInit()) + pOutput->m_nLineDashing = stroke->m_oDahsStyle->GetValue(); //совпадают значения + + if (stroke->m_oColor.IsInit()) + pOutput->m_nLineColor = (stroke->m_oColor->Get_B() << 16) + (stroke->m_oColor->Get_G() << 8) + stroke->m_oColor->Get_R(); + }break; + case OOX::et_v_imagedata: + { + OOX::Vml::CImageData* image_data = dynamic_cast(m_arrElement->m_arrItems[i]); + if (!image_data) break; + + std::wstring srId = image_data->m_oId.IsInit() ? *image_data->m_oId : L"" ; + + if (srId.empty()) + srId = image_data->m_rId.IsInit() ? image_data->m_rId->GetValue() : L"" ; + + if (srId.empty()) + srId = image_data->m_rPict.IsInit() ? image_data->m_rPict->GetValue() : L"" ; + + if (pOutput->m_nShapeType == PROP_DEF) + { + pOutput->m_nShapeType = ODRAW::sptPictureFrame; + } + + if (oParam.oReader->m_currentContainer) + { + smart_ptr oFile = oParam.oReader->m_currentContainer->Find(srId); - if (srId.empty() && fill->m_oRelId.IsInit()) - srId = fill->m_oRelId->GetValue(); - - if (!srId.empty() && oParam.oReader->m_currentContainer) - { - smart_ptr oFile = oParam.oReader->m_currentContainer->Find(srId); - - if ( oFile.IsInit() && (OOX::FileTypes::Image == oFile->type())) - { - OOX::Image* pImage = (OOX::Image*)oFile.GetPointer(); - std::wstring sImagePath = pImage->filename().GetPath(); - - pOutput->m_oPicture = RtfPicturePtr( new RtfPicture() ); - - WriteDataToPicture( sImagePath, *pOutput->m_oPicture, oParam ); - - pOutput->m_nFillType = 2; - } - } - if (fill->m_oColor.IsInit()) - pOutput->m_nFillColor = (fill->m_oColor->Get_B() << 16) + (fill->m_oColor->Get_G() << 8) + fill->m_oColor->Get_R(); - - if (fill->m_oColor2.IsInit()) + if ( oFile.IsInit() && (OOX::FileTypes::Image == oFile->type())) { - pOutput->m_nFillColor2 = (fill->m_oColor2->Get_B() << 16) + (fill->m_oColor2->Get_G() << 8) + fill->m_oColor2->Get_R(); - } + pOutput->m_oPicture = RtfPicturePtr( new RtfPicture() ); - if (fill->m_oOpacity.IsInit()) - pOutput->m_nFillOpacity = (int)(fill->m_oOpacity->GetValue() * 100); + OOX::Image* pImage = (OOX::Image*)oFile.GetPointer(); + std::wstring sImagePath = pImage->filename().GetPath(); - switch(fill->m_oType.GetValue()) - { - case SimpleTypes::filltypeBackground: pOutput->m_nFillType = 9; break; - case SimpleTypes::filltypeFrame : pOutput->m_nFillType = 3; break; - case SimpleTypes::filltypeGradient: pOutput->m_nFillType = 4; break; - case SimpleTypes::filltypeGradientCenter: pOutput->m_nFillType = 4; break; - case SimpleTypes::filltypeGradientRadial: pOutput->m_nFillType = 6; break; - case SimpleTypes::filltypeGradientUnscaled: pOutput->m_nFillType = 4; break; - case SimpleTypes::filltypePattern: pOutput->m_nFillType = 1; break; - case SimpleTypes::filltypeTile: pOutput->m_nFillType = 2; break; - case SimpleTypes::filltypeSolid: - default: - break; + WriteDataToPicture( sImagePath, *pOutput->m_oPicture, oParam); } - if (fill->m_oAngle.IsInit()) - { - pOutput->m_nFillAngle = fill->m_oAngle->GetValue(); - if (pOutput->m_nFillType == 4) - pOutput->m_nFillType = 7; - } - if (fill->m_oFocus.IsInit()) - { - pOutput->m_nFillFocus = (int)(fill->m_oFocus->GetValue()); - } - if (fill->m_oFocusPosition.IsInit()) - { - if (fill->m_oFocusPosition->GetY() > 0.99 || fill->m_oFocusPosition->GetX() > 0.99) - pOutput->m_nFillType = 5; - - int toBottom = (int)((1. - fill->m_oFocusPosition->GetY()) * 65535); - int toTop = (int)((fill->m_oFocusPosition->GetY()) * 65535); - int toRight = (int)((1. - fill->m_oFocusPosition->GetX()) * 65535); - int toLeft = (int)((fill->m_oFocusPosition->GetX()) * 65535); - - if (toBottom > 0) pOutput->m_nFillToBottom = toBottom; - if (toTop > 0) pOutput->m_nFillToTop = toTop; - if (toRight > 0) pOutput->m_nFillToRight = toRight; - if (toLeft > 0) pOutput->m_nFillToLeft = toLeft; - } - }break; - case OOX::et_v_stroke: + } + if (pOutput->m_oPicture) { - OOX::Vml::CStroke* stroke = dynamic_cast(m_arrElement->m_arrItems[i]); - if (!stroke) break; + int nCropedWidthGoal = pOutput->m_oPicture->m_nWidthGoal; + if( PROP_DEF != nCropedWidthGoal ) + { + //делаем crop + if( image_data->m_oCropLeft.IsInit() ) + { + double nCropLeft = image_data->m_oCropLeft->GetValue(); + //pOutput->m_oPicture->m_nCropL = nCropLeft * pOutput->m_oPicture->m_nWidthGoal * pOutput->m_oPicture->m_nScaleX / 100; + pOutput->m_oPicture->m_nCropL = (int)(nCropLeft * pOutput->m_oPicture->m_nWidthGoal); + pOutput->m_nCropFromLeft = (int)(nCropLeft * 65536); + nCropedWidthGoal -= pOutput->m_oPicture->m_nCropL; + } + if( image_data->m_oCropRight.IsInit()) + { + double nCropRight =image_data->m_oCropRight->GetValue(); + //pOutput->m_oPicture->m_nCropR = nCropRight * pOutput->m_oPicture->m_nWidthGoal * pOutput->m_oPicture->m_nScaleX / 100; + pOutput->m_oPicture->m_nCropR = (int)(nCropRight * pOutput->m_oPicture->m_nWidthGoal); + pOutput->m_nCropFromRight = (int)(nCropRight * 65536); + nCropedWidthGoal -= pOutput->m_oPicture->m_nCropR; + } + } + int nCropedHeightGoal = pOutput->m_oPicture->m_nHeightGoal; + if( PROP_DEF != nCropedHeightGoal ) + { + if( image_data->m_oCropTop.IsInit() ) + { + double nCropTop = image_data->m_oCropTop->GetValue(); + //pOutput->m_oPicture->m_nCropT = nCropTop * pOutput->m_oPicture->m_nHeightGoal * pOutput->m_oPicture->m_dScaleY / 100; + pOutput->m_oPicture->m_nCropT = (int)(nCropTop * pOutput->m_oPicture->m_nHeightGoal); + pOutput->m_nCropFromTop = (int)(nCropTop * 65536); + nCropedHeightGoal -= pOutput->m_oPicture->m_nCropT; + } + if( image_data->m_oCropBottom.IsInit()) + { + double nCropBottom = image_data->m_oCropBottom->GetValue(); + //pOutput->m_oPicture->m_nCropT = nCropTop * pOutput->m_oPicture->m_nHeightGoal * pOutput->m_oPicture->m_dScaleY / 100; + pOutput->m_oPicture->m_nCropB = (int)(nCropBottom * pOutput->m_oPicture->m_nHeightGoal); + pOutput->m_nCropFromBottom = (int)(nCropBottom * 65536); + nCropedHeightGoal -= pOutput->m_oPicture->m_nCropB; + } + } + //устанавливаем scale + if( PROP_DEF != pOutput->m_nLeft && PROP_DEF != pOutput->m_nRight && PROP_DEF != nCropedWidthGoal && 0 != nCropedWidthGoal ) + { + int nWidth = pOutput->m_nRight - pOutput->m_nLeft; + double dNewScale = 100 * ( 1.0 * nWidth / nCropedWidthGoal ); + pOutput->m_oPicture->m_dScaleX = dNewScale; + } + if( PROP_DEF != pOutput->m_nTop && PROP_DEF != pOutput->m_nBottom && PROP_DEF != nCropedHeightGoal && 0 != nCropedHeightGoal ) + { + int nHeight = pOutput->m_nBottom - pOutput->m_nTop; + double dNewScale = 100 * ( 1.0 * nHeight / nCropedHeightGoal ); + pOutput->m_oPicture->m_dScaleY = dNewScale; + } + } + }break; + case OOX::et_wd_wrap: + { + OOX::VmlWord::CWrap *wrap = dynamic_cast(m_arrElement->m_arrItems[i]); - if (stroke->m_oDahsStyle.IsInit()) - pOutput->m_nLineDashing = stroke->m_oDahsStyle->GetValue(); //совпадают значения - - if (stroke->m_oColor.IsInit()) - pOutput->m_nLineColor = (stroke->m_oColor->Get_B() << 16) + (stroke->m_oColor->Get_G() << 8) + stroke->m_oColor->Get_R(); - }break; - case OOX::et_v_imagedata: + if (wrap->m_oType.IsInit() /*&& pOutput->m_nZOrderRelative == PROP_DEF*/) { - OOX::Vml::CImageData* image_data = dynamic_cast(m_arrElement->m_arrItems[i]); - if (!image_data) break; - - std::wstring srId = image_data->m_oId.IsInit() ? *image_data->m_oId : L"" ; - - if (srId.empty()) - srId = image_data->m_rId.IsInit() ? image_data->m_rId->GetValue() : L"" ; - - if (srId.empty()) - srId = image_data->m_rPict.IsInit() ? image_data->m_rPict->GetValue() : L"" ; - - if (pOutput->m_nShapeType == PROP_DEF) + switch(wrap->m_oType->GetValue()) { - pOutput->m_nShapeType = ODRAW::sptPictureFrame; + case SimpleTypes::wraptypeNone : pOutput->m_nWrapType = 3; break; + case SimpleTypes::wraptypeSquare: pOutput->m_nWrapType = 2; break; + case SimpleTypes::wraptypeThrough: pOutput->m_nWrapType = 5; break; + case SimpleTypes::wraptypeTight: pOutput->m_nWrapType = 4; break; + case SimpleTypes::wraptypeTopAndBottom: pOutput->m_nWrapType = 1; break; } - - if (oParam.oReader->m_currentContainer) - { - smart_ptr oFile = oParam.oReader->m_currentContainer->Find(srId); - - if ( oFile.IsInit() && (OOX::FileTypes::Image == oFile->type())) - { - pOutput->m_oPicture = RtfPicturePtr( new RtfPicture() ); - - OOX::Image* pImage = (OOX::Image*)oFile.GetPointer(); - std::wstring sImagePath = pImage->filename().GetPath(); - - WriteDataToPicture( sImagePath, *pOutput->m_oPicture, oParam); - } - } - if (pOutput->m_oPicture) - { - int nCropedWidthGoal = pOutput->m_oPicture->m_nWidthGoal; - if( PROP_DEF != nCropedWidthGoal ) - { - //делаем crop - if( image_data->m_oCropLeft.IsInit() ) - { - double nCropLeft = image_data->m_oCropLeft->GetValue(); - //pOutput->m_oPicture->m_nCropL = nCropLeft * pOutput->m_oPicture->m_nWidthGoal * pOutput->m_oPicture->m_nScaleX / 100; - pOutput->m_oPicture->m_nCropL = (int)(nCropLeft * pOutput->m_oPicture->m_nWidthGoal); - pOutput->m_nCropFromLeft = (int)(nCropLeft * 65536); - nCropedWidthGoal -= pOutput->m_oPicture->m_nCropL; - } - if( image_data->m_oCropRight.IsInit()) - { - double nCropRight =image_data->m_oCropRight->GetValue(); - //pOutput->m_oPicture->m_nCropR = nCropRight * pOutput->m_oPicture->m_nWidthGoal * pOutput->m_oPicture->m_nScaleX / 100; - pOutput->m_oPicture->m_nCropR = (int)(nCropRight * pOutput->m_oPicture->m_nWidthGoal); - pOutput->m_nCropFromRight = (int)(nCropRight * 65536); - nCropedWidthGoal -= pOutput->m_oPicture->m_nCropR; - } - } - int nCropedHeightGoal = pOutput->m_oPicture->m_nHeightGoal; - if( PROP_DEF != nCropedHeightGoal ) - { - if( image_data->m_oCropTop.IsInit() ) - { - double nCropTop = image_data->m_oCropTop->GetValue(); - //pOutput->m_oPicture->m_nCropT = nCropTop * pOutput->m_oPicture->m_nHeightGoal * pOutput->m_oPicture->m_dScaleY / 100; - pOutput->m_oPicture->m_nCropT = (int)(nCropTop * pOutput->m_oPicture->m_nHeightGoal); - pOutput->m_nCropFromTop = (int)(nCropTop * 65536); - nCropedHeightGoal -= pOutput->m_oPicture->m_nCropT; - } - if( image_data->m_oCropBottom.IsInit()) - { - double nCropBottom = image_data->m_oCropBottom->GetValue(); - //pOutput->m_oPicture->m_nCropT = nCropTop * pOutput->m_oPicture->m_nHeightGoal * pOutput->m_oPicture->m_dScaleY / 100; - pOutput->m_oPicture->m_nCropB = (int)(nCropBottom * pOutput->m_oPicture->m_nHeightGoal); - pOutput->m_nCropFromBottom = (int)(nCropBottom * 65536); - nCropedHeightGoal -= pOutput->m_oPicture->m_nCropB; - } - } - //устанавливаем scale - if( PROP_DEF != pOutput->m_nLeft && PROP_DEF != pOutput->m_nRight && PROP_DEF != nCropedWidthGoal && 0 != nCropedWidthGoal ) - { - int nWidth = pOutput->m_nRight - pOutput->m_nLeft; - double dNewScale = 100 * ( 1.0 * nWidth / nCropedWidthGoal ); - pOutput->m_oPicture->m_dScaleX = dNewScale; - } - if( PROP_DEF != pOutput->m_nTop && PROP_DEF != pOutput->m_nBottom && PROP_DEF != nCropedHeightGoal && 0 != nCropedHeightGoal ) - { - int nHeight = pOutput->m_nBottom - pOutput->m_nTop; - double dNewScale = 100 * ( 1.0 * nHeight / nCropedHeightGoal ); - pOutput->m_oPicture->m_dScaleY = dNewScale; - } - } - }break; - case OOX::et_wd_wrap: + } + if (wrap->m_oSide.IsInit() && pOutput->m_nZOrderRelative == PROP_DEF) { - OOX::VmlWord::CWrap *wrap = dynamic_cast(m_arrElement->m_arrItems[i]); + switch(wrap->m_oSide->GetValue()) + { + case SimpleTypes::wrapsideBoth: pOutput->m_nWrapSideType = 0; break; + case SimpleTypes::wrapsideLargest: pOutput->m_nWrapSideType = 3; break; + case SimpleTypes::wrapsideLeft: pOutput->m_nWrapSideType = 1; break; + case SimpleTypes::wrapsideRight: pOutput->m_nWrapSideType = 2; break; + } + } + }break; + case OOX::et_v_textbox: + { + OOX::Vml::CTextbox *text_box= dynamic_cast(m_arrElement->m_arrItems[i]); - if (wrap->m_oType.IsInit() /*&& pOutput->m_nZOrderRelative == PROP_DEF*/) - { - switch(wrap->m_oType->GetValue()) - { - case SimpleTypes::wraptypeNone : pOutput->m_nWrapType = 3; break; - case SimpleTypes::wraptypeSquare: pOutput->m_nWrapType = 2; break; - case SimpleTypes::wraptypeThrough: pOutput->m_nWrapType = 5; break; - case SimpleTypes::wraptypeTight: pOutput->m_nWrapType = 4; break; - case SimpleTypes::wraptypeTopAndBottom: pOutput->m_nWrapType = 1; break; - } - } - if (wrap->m_oSide.IsInit() && pOutput->m_nZOrderRelative == PROP_DEF) - { - switch(wrap->m_oSide->GetValue()) - { - case SimpleTypes::wrapsideBoth: pOutput->m_nWrapSideType = 0; break; - case SimpleTypes::wrapsideLargest: pOutput->m_nWrapSideType = 3; break; - case SimpleTypes::wrapsideLeft: pOutput->m_nWrapSideType = 1; break; - case SimpleTypes::wrapsideRight: pOutput->m_nWrapSideType = 2; break; - } - } - }break; - case OOX::et_v_textbox: + if ((text_box) && (text_box->m_oTxtbxContent.IsInit())) { - OOX::Vml::CTextbox *text_box= dynamic_cast(m_arrElement->m_arrItems[i]); + OOXTextItemReader oTextItemReader; - if ((text_box) && (text_box->m_oTxtbxContent.IsInit())) + for (size_t i = 0; i < text_box->m_oTxtbxContent->m_arrItems.size(); i++) { - OOXTextItemReader oTextItemReader; - - for (size_t i = 0; i < text_box->m_oTxtbxContent->m_arrItems.size(); i++) - { - oTextItemReader.Parse( text_box->m_oTxtbxContent->m_arrItems[i], oParam ); - } - - if( oTextItemReader.m_oTextItems->GetCount() > 0 ) - pOutput->m_aTextItems = oTextItemReader.m_oTextItems; + oTextItemReader.Parse( text_box->m_oTxtbxContent->m_arrItems[i], oParam ); } - }break; - case OOX::et_v_textpath: + + if( oTextItemReader.m_oTextItems->GetCount() > 0 ) + pOutput->m_aTextItems = oTextItemReader.m_oTextItems; + } + }break; + case OOX::et_v_textpath: + { + OOX::Vml::CTextPath *text_path= dynamic_cast(m_arrElement->m_arrItems[i]); + if (text_path) { - OOX::Vml::CTextPath *text_path= dynamic_cast(m_arrElement->m_arrItems[i]); - if (text_path) + pOutput->m_bGtext = 1; + if (text_path->m_sString.IsInit()) { - pOutput->m_bGtext = 1; - if (text_path->m_sString.IsInit()) - { - pOutput->m_sGtextUNICODE = text_path->m_sString.get(); - } - if ((text_path->m_oFitPath.IsInit()) && (text_path->m_oFitPath->GetValue())) - { - pOutput->m_bGtextFStretch = 1; - pOutput->m_bGtextFBestFit = 1; - pOutput->m_bGtextFShrinkFit = 1; - } - if (text_path->m_oTrim.IsInit()) - { - } - if (text_path->m_oStyle.IsInit()) - { - ParseVmlStyles( pOutput, text_path->m_oStyle->m_arrProperties ); - } + pOutput->m_sGtextUNICODE = text_path->m_sString.get(); } + if ((text_path->m_oFitPath.IsInit()) && (text_path->m_oFitPath->GetValue())) + { + pOutput->m_bGtextFStretch = 1; + pOutput->m_bGtextFBestFit = 1; + pOutput->m_bGtextFShrinkFit = 1; + } + if (text_path->m_oTrim.IsInit()) + { + } + if (text_path->m_oStyle.IsInit()) + { + ParseVmlStyles( pOutput, text_path->m_oStyle->m_arrProperties ); + } + } - }break; - case OOX::et_o_signatureline: + }break; + case OOX::et_o_signatureline: + { + OOX::VmlOffice::CSignatureLine *signature = dynamic_cast(m_arrElement->m_arrItems[i]); + if ( signature ) { - OOX::VmlOffice::CSignatureLine *signature = dynamic_cast(m_arrElement->m_arrItems[i]); - if ( signature ) - { - if (signature->m_oIsSignatureLine.IsInit() && signature->m_oIsSignatureLine->ToBool()) - pOutput->m_bIsSignatureLine = 1; + if (signature->m_oIsSignatureLine.IsInit() && signature->m_oIsSignatureLine->ToBool()) + pOutput->m_bIsSignatureLine = 1; - if (signature->m_oAllowComments.IsInit() && signature->m_oAllowComments->ToBool()) - pOutput->m_bSigSetupAllowComments = 1; + if (signature->m_oAllowComments.IsInit() && signature->m_oAllowComments->ToBool()) + pOutput->m_bSigSetupAllowComments = 1; - if (signature->m_oProvId.IsInit()) - pOutput->m_sSigSetupProvId = signature->m_oProvId->ToString(); + if (signature->m_oProvId.IsInit()) + pOutput->m_sSigSetupProvId = signature->m_oProvId->ToString(); - if (signature->m_oId.IsInit()) - pOutput->m_sSigSetupId = signature->m_oId->ToString(); + if (signature->m_oId.IsInit()) + pOutput->m_sSigSetupId = signature->m_oId->ToString(); - if (signature->m_sSuggestedSigner.IsInit()) - pOutput->m_sSigSetupSuggSigner = signature->m_sSuggestedSigner.get(); - - if (signature->m_sSuggestedSigner2.IsInit()) - pOutput->m_sSigSetupSuggSigner2 = signature->m_sSuggestedSigner2.get(); - - if (signature->m_sSuggestedSignerEmail.IsInit()) - pOutput->m_sSigSetupSuggSignerEmail = signature->m_sSuggestedSignerEmail.get(); + if (signature->m_sSuggestedSigner.IsInit()) + pOutput->m_sSigSetupSuggSigner = signature->m_sSuggestedSigner.get(); - //nullable m_sAddXml; - //nullable> m_oExt; - //SimpleTypes::CTrueFalse m_oShowSignDate; - //nullable m_sSigningInstructions; - //SimpleTypes::CTrueFalse m_oSigningInstructionsSet; - //nullable m_sSigProvUrl; + if (signature->m_sSuggestedSigner2.IsInit()) + pOutput->m_sSigSetupSuggSigner2 = signature->m_sSuggestedSigner2.get(); - } - }break; - default: break; - } + if (signature->m_sSuggestedSignerEmail.IsInit()) + pOutput->m_sSigSetupSuggSignerEmail = signature->m_sSuggestedSignerEmail.get(); + + //nullable m_sAddXml; + //nullable> m_oExt; + //SimpleTypes::CTrueFalse m_oShowSignDate; + //nullable m_sSigningInstructions; + //SimpleTypes::CTrueFalse m_oSigningInstructionsSet; + //nullable m_sSigProvUrl; + + } + }break; + default: break; + } } //проверяем на inline - if((PROP_DEF == pOutput->m_nLeft/* || 0 == pOutput->m_nLeft */) && ( PROP_DEF == pOutput->m_nTop/* || 0 == pOutput->m_nTop */) && - PROP_DEF == pOutput->m_nPositionH && PROP_DEF == pOutput->m_nPositionV ) + if((PROP_DEF == pOutput->m_nLeft/* || 0 == pOutput->m_nLeft */) && ( PROP_DEF == pOutput->m_nTop/* || 0 == pOutput->m_nTop */) && + PROP_DEF == pOutput->m_nPositionH && PROP_DEF == pOutput->m_nPositionV ) { pOutput->m_eAnchorTypeShape = RtfShape::st_inline; } @@ -701,9 +708,9 @@ void OOXShapeReader::Parse(ReaderParameter oParam, PPTX::Logic::ColorBase *oox_c // case OOX::Drawing::colorPrst: Parse(oParam, &oox_color->m_oPrstClr, nColor, opacity); break; // case OOX::Drawing::colorScRgb: Parse(oParam, &oox_color->m_oScrgbClr, nColor, opacity); break; // case OOX::Drawing::colorSRgb: Parse(oParam, &oox_color->m_oSrgbClr, nColor, opacity); break; - // case OOX::Drawing::colorSys: Parse(oParam, &oox_color->m_oSysClr, nColor, opacity); break; - // default: break; - // } + // case OOX::Drawing::colorSys: Parse(oParam, &oox_color->m_oSysClr, nColor, opacity); break; + // default: break; + // } } //void OOXShapeReader::Parse(ReaderParameter oParam, OOX::Drawing::Colors::CColorTransform *oox_Clr, unsigned int & nColor, _CP_OPT(double) &opacity) //{ @@ -725,9 +732,9 @@ void OOXShapeReader::Parse(ReaderParameter oParam, PPTX::Logic::SolidFill *oox_s // case OOX::Drawing::colorPrst: Parse(oParam, &oox_solid_fill->m_oPrstClr, nColor, opacity); break; // case OOX::Drawing::colorScRgb: Parse(oParam, &oox_solid_fill->m_oScrgbClr, nColor, opacity); break; // case OOX::Drawing::colorSRgb: Parse(oParam, &oox_solid_fill->m_oSrgbClr, nColor, opacity); break; - // case OOX::Drawing::colorSys: Parse(oParam, &oox_solid_fill->m_oSysClr, nColor, opacity); break; - // default: break; - // } + // case OOX::Drawing::colorSys: Parse(oParam, &oox_solid_fill->m_oSysClr, nColor, opacity); break; + // default: break; + // } } //----------------------------------------------------------------------------------------------------------------- void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::SolidFill *oox_solid_fill, std::wstring *change_sheme_color) @@ -865,7 +872,6 @@ bool OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::L } return result; } - void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::GradFill *oox_grad_fill, std::wstring *change_sheme_color) { if (!oox_grad_fill)return; @@ -881,13 +887,13 @@ void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::L { switch(oox_grad_fill->path->path->GetBYTECode()) { - case SimpleTypes::pathshadetypeCircle: - pOutput->m_nFillFocus = 50; - pOutput->m_nFillType = 5; - break; - case SimpleTypes::pathshadetypeRect: pOutput->m_nFillType = 4; break; - case SimpleTypes::pathshadetypeShape: pOutput->m_nFillType = 6; break; - } + case SimpleTypes::pathshadetypeCircle: + pOutput->m_nFillFocus = 50; + pOutput->m_nFillType = 5; + break; + case SimpleTypes::pathshadetypeRect: pOutput->m_nFillType = 4; break; + case SimpleTypes::pathshadetypeShape: pOutput->m_nFillType = 6; break; + } if (oox_grad_fill->path->rect.IsInit()) { if (oox_grad_fill->path->rect->b.IsInit()) @@ -899,7 +905,7 @@ void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::L if (oox_grad_fill->path->rect->l.IsInit()) pOutput->m_nFillToLeft = XmlUtils::GetInteger(oox_grad_fill->path->rect->l.get()); } - } + } if (oox_grad_fill->GsLst.size() > 1) { @@ -915,7 +921,7 @@ void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::L { unsigned int hexColor; _CP_OPT(double) opacity; - + if (change_sheme_color && oox_grad_fill->GsLst[i].color.getType() == OOX::et_a_schemeClr) { //oox_grad_fill->GsLst[i]->m_oShemeClr.m_oVal.FromString(*change_sheme_color); @@ -926,13 +932,13 @@ void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::L { pOutput->m_nFillColor = hexColor; if (opacity) - pOutput->m_nFillOpacity = (int)(*opacity * 100); + pOutput->m_nFillOpacity = (int)(*opacity * 100); } else if (i == oox_grad_fill->GsLst.size() - 1 && i > 0) { pOutput->m_nFillColor2 = hexColor; if (opacity) - pOutput->m_nFillOpacity2 = (int)(*opacity * 100); + pOutput->m_nFillOpacity2 = (int)(*opacity * 100); } if (bColorsSet) @@ -947,8 +953,6 @@ void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::L if (!oox_pattern_fill)return; } - - void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::Ln *oox_line_prop, std::wstring *change_sheme_color) { if (!oox_line_prop)return; @@ -972,7 +976,7 @@ void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::L pSchemeColor->val.set(*change_sheme_color); fill->Color.Color.reset(pSchemeColor); - } + } unsigned int nColor = 0; //black _CP_OPT(double) opacity; @@ -1005,19 +1009,19 @@ void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::L { switch(oox_line_prop->prstDash->val->GetBYTECode()) { - case SimpleTypes::presetlinedashvalDash : pOutput->m_nLineDashing = 6; break; - case SimpleTypes::presetlinedashvalDashDot : pOutput->m_nLineDashing = 8; break; - case SimpleTypes::presetlinedashvalDot : pOutput->m_nLineDashing = 5; break; - case SimpleTypes::presetlinedashvalLgDash : pOutput->m_nLineDashing = 7; break; - case SimpleTypes::presetlinedashvalLgDashDot : pOutput->m_nLineDashing = 9; break; - case SimpleTypes::presetlinedashvalLgDashDotDot : pOutput->m_nLineDashing = 10; break; - case SimpleTypes::presetlinedashvalSysDash : pOutput->m_nLineDashing = 1; break; - case SimpleTypes::presetlinedashvalSysDashDot : pOutput->m_nLineDashing = 3; break; - case SimpleTypes::presetlinedashvalSysDashDotDot: pOutput->m_nLineDashing = 4; break; - case SimpleTypes::presetlinedashvalSysDot : pOutput->m_nLineDashing = 2; break; - case SimpleTypes::presetlinedashvalSolid : break; - default: break; - } + case SimpleTypes::presetlinedashvalDash : pOutput->m_nLineDashing = 6; break; + case SimpleTypes::presetlinedashvalDashDot : pOutput->m_nLineDashing = 8; break; + case SimpleTypes::presetlinedashvalDot : pOutput->m_nLineDashing = 5; break; + case SimpleTypes::presetlinedashvalLgDash : pOutput->m_nLineDashing = 7; break; + case SimpleTypes::presetlinedashvalLgDashDot : pOutput->m_nLineDashing = 9; break; + case SimpleTypes::presetlinedashvalLgDashDotDot : pOutput->m_nLineDashing = 10; break; + case SimpleTypes::presetlinedashvalSysDash : pOutput->m_nLineDashing = 1; break; + case SimpleTypes::presetlinedashvalSysDashDot : pOutput->m_nLineDashing = 3; break; + case SimpleTypes::presetlinedashvalSysDashDotDot: pOutput->m_nLineDashing = 4; break; + case SimpleTypes::presetlinedashvalSysDot : pOutput->m_nLineDashing = 2; break; + case SimpleTypes::presetlinedashvalSolid : break; + default: break; + } } //nullable> m_oAlgn; //nullable> m_oCap; @@ -1046,15 +1050,15 @@ void OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput, PPTX:: if (type == 1) { - if (fmt_index < 1000 && fmt_index < (int)oParam.oDocx->m_pTheme->themeElements.fmtScheme.fillStyleLst.size()) + if (fmt_index < 1000 && fmt_index < (int)oParam.oDocx->m_pTheme->themeElements.fmtScheme.fillStyleLst.size()) { Parse(oParam, pOutput, &oParam.oDocx->m_pTheme->themeElements.fmtScheme.fillStyleLst[fmt_index], &color); } else if (fmt_index > 1000 && ((fmt_index-1000) < (int)oParam.oDocx->m_pTheme->themeElements.fmtScheme.bgFillStyleLst.size())) { - fmt_index -= 1000; + fmt_index -= 1000; - Parse(oParam, pOutput, &oParam.oDocx->m_pTheme->themeElements.fmtScheme.bgFillStyleLst[fmt_index], &color); + Parse(oParam, pOutput, &oParam.oDocx->m_pTheme->themeElements.fmtScheme.bgFillStyleLst[fmt_index], &color); } } @@ -1084,7 +1088,7 @@ void OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput, PPTX:: if (rot > 0.01) pOutput->m_nRotation = (int)(rot * 65535); - if (xfrm->flipH.get_value_or(false)) pOutput->m_bFlipH = 1; + if (xfrm->flipH.get_value_or(false)) pOutput->m_bFlipH = 1; if (xfrm->flipV.get_value_or(false)) pOutput->m_bFlipV = 1; if (pOutput->m_bInGroup) @@ -1112,7 +1116,6 @@ void OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput, PPTX:: pOutput->m_nRelRotation = pOutput->m_nRotation; } } - bool OOXShapeReader::ParseShape( ReaderParameter oParam, RtfShapePtr& pOutput) { PPTX::Logic::Shape * ooxShape = dynamic_cast (m_ooxShape); @@ -1123,12 +1126,12 @@ bool OOXShapeReader::ParseShape( ReaderParameter oParam, RtfShapePtr& pOutput) if (ooxShape->oTextBoxShape.IsInit()) { - text_properties = ooxShape->oTextBoxBodyPr.GetPointer(); + text_properties = ooxShape->oTextBoxBodyPr.GetPointer(); } if (ooxShape->txBody.IsInit()) { - text_properties = ooxShape->txBody->bodyPr.GetPointer(); + text_properties = ooxShape->txBody->bodyPr.GetPointer(); } if (text_properties) { @@ -1147,7 +1150,7 @@ bool OOXShapeReader::ParseShape( ReaderParameter oParam, RtfShapePtr& pOutput) //int wordart_type = OoxConverter::Parse(m_ooxShape->m_oTxBodyProperties->m_oPrstTxWrap.GetPointer()); //if (wordart_type >=0)type = wordart_type; } - } + } std::wstring strXml; if (ooxShape->spPr.Geometry.getType() == OOX::et_a_custGeom) @@ -1162,7 +1165,7 @@ bool OOXShapeReader::ParseShape( ReaderParameter oParam, RtfShapePtr& pOutput) SimpleTypes::CShapeType prst_type(geometry.prst.get()); SimpleTypes::EShapeType type = prst_type.GetValue(); - + pOutput->m_nShapeType = OOX::PrstGeom2VmlShapeType(type); if (pOutput->m_nShapeType == SimpleTypes::Vml::sptNotPrimitive) strXml = geometry.prst.get(); @@ -1192,8 +1195,8 @@ bool OOXShapeReader::ParseShape( ReaderParameter oParam, RtfShapePtr& pOutput) pOutput->m_nShapePath = 4; //complex - pOutput->m_nGeoLeft = 0; - pOutput->m_nGeoTop = 0; + pOutput->m_nGeoLeft = 0; + pOutput->m_nGeoTop = 0; pOutput->m_nGeoRight = 100000; pOutput->m_nGeoBottom = 100000; } @@ -1203,20 +1206,20 @@ bool OOXShapeReader::ParseShape( ReaderParameter oParam, RtfShapePtr& pOutput) PPTX::Logic::ShapeStyle* oox_sp_style = ooxShape->style.GetPointer(); bool use_fill_from_style = false; - pOutput->m_bFilled = true; + pOutput->m_bFilled = true; switch(ooxShape->spPr.Fill.m_type) { - case PPTX::Logic::UniFill::blipFill: - case PPTX::Logic::UniFill::gradFill: - case PPTX::Logic::UniFill::pattFill: - case PPTX::Logic::UniFill::solidFill: - Parse(oParam, pOutput, &ooxShape->spPr.Fill); - break; - case PPTX::Logic::UniFill::noFill: - pOutput->m_bFilled = false; break; - default: - use_fill_from_style = true; break; + case PPTX::Logic::UniFill::blipFill: + case PPTX::Logic::UniFill::gradFill: + case PPTX::Logic::UniFill::pattFill: + case PPTX::Logic::UniFill::solidFill: + Parse(oParam, pOutput, &ooxShape->spPr.Fill); + break; + case PPTX::Logic::UniFill::noFill: + pOutput->m_bFilled = false; break; + default: + use_fill_from_style = true; break; } if ((use_fill_from_style && oox_sp_style) && (oox_sp_style->fillRef.idx.IsInit())) { @@ -1229,9 +1232,9 @@ bool OOXShapeReader::ParseShape( ReaderParameter oParam, RtfShapePtr& pOutput) } if (ooxShape->spPr.ln.IsInit()) { - Parse(oParam, pOutput, ooxShape->spPr.ln.GetPointer()); + Parse(oParam, pOutput, ooxShape->spPr.ln.GetPointer()); } -//--------------------------------------------------------------------- + //--------------------------------------------------------------------- OOXTextItemReader oTextItemReader; RtfCharProperty old = oParam.oRtf->m_oDefaultCharProp; @@ -1258,7 +1261,7 @@ bool OOXShapeReader::ParseShape( ReaderParameter oParam, RtfShapePtr& pOutput) oCurFont.m_sName = font_name; oCurFont.m_nID = oParam.oRtf->m_oDefaultCharProp.m_nFont = oParam.oRtf->m_oFontTable.GetCount() + 1; oParam.oRtf->m_oFontTable.AddItem( oCurFont ); - } + } } if (oox_sp_style->fontRef.Color.is_init()) { @@ -1267,7 +1270,7 @@ bool OOXShapeReader::ParseShape( ReaderParameter oParam, RtfShapePtr& pOutput) OOXShapeReader::Parse(oParam, oox_sp_style->fontRef.Color.Color.operator ->(), nColor, opacity); - RtfColor rtfColor; + RtfColor rtfColor; rtfColor.SetRGB(nColor); oParam.oRtf->m_oDefaultCharProp.m_nForeColor = oParam.oRtf->m_oColorTable.AddItem(rtfColor); @@ -1281,7 +1284,7 @@ bool OOXShapeReader::ParseShape( ReaderParameter oParam, RtfShapePtr& pOutput) for (size_t i=0; i < ooxShape->txBody->Paragrs.size(); i++) { oTextItemReader.Parse(&ooxShape->txBody->Paragrs[i], oParam ); - } + } } else if (ooxShape->oTextBoxShape.IsInit()) @@ -1289,7 +1292,7 @@ bool OOXShapeReader::ParseShape( ReaderParameter oParam, RtfShapePtr& pOutput) for (size_t i=0; i < ooxShape->oTextBoxShape->m_arrItems.size(); i++) { oTextItemReader.Parse(ooxShape->oTextBoxShape->m_arrItems[i], oParam ); - } + } } if (oTextItemReader.m_oTextItems) @@ -1309,13 +1312,12 @@ bool OOXShapeReader::ParseShape( ReaderParameter oParam, RtfShapePtr& pOutput) oParam.oRtf->m_oDefaultCharProp = old; - return true; + return true; } - void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::BodyPr *text_props) { if (!text_props) return; - + if (text_props->lIns.IsInit()) pOutput->m_nTexpLeft = *text_props->lIns; if (text_props->tIns.IsInit()) pOutput->m_nTexpTop = *text_props->tIns; if (text_props->rIns.IsInit()) pOutput->m_nTexpRight = *text_props->rIns; @@ -1326,10 +1328,10 @@ void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::L switch(text_props->anchor->GetBYTECode()) { case 0: pOutput->m_nAnchorText = 2; break; - case 4: pOutput->m_nAnchorText = 0; break; - case 1: - case 2: - case 3: + case 4: pOutput->m_nAnchorText = 0; break; + case 1: + case 2: + case 3: default: pOutput->m_nAnchorText = 4; break; } @@ -1343,34 +1345,33 @@ void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::L switch(text_props->Fit.type) { - case 2: pOutput->m_bFitShapeToText = 1; break; - case 3: pOutput->m_bFitTextToShape = 1; break; - default: - break; + case 2: pOutput->m_bFitShapeToText = 1; break; + case 3: pOutput->m_bFitTextToShape = 1; break; + default: + break; } if (text_props->vert.IsInit()) { switch(text_props->vert->GetBYTECode()) { - case 0: pOutput->m_nTxflTextFlow = 1; break; - case 2: pOutput->m_nTxflTextFlow = 2; break; - case 3: pOutput->m_nTxflTextFlow = 1; break; - case 4: pOutput->m_nTxflTextFlow = 2; break; - case 5: pOutput->m_nTxflTextFlow = 5; break; - case 6: pOutput->m_nTxflTextFlow = 5; break; - default: - break; + case 0: pOutput->m_nTxflTextFlow = 1; break; + case 2: pOutput->m_nTxflTextFlow = 2; break; + case 3: pOutput->m_nTxflTextFlow = 1; break; + case 4: pOutput->m_nTxflTextFlow = 2; break; + case 5: pOutput->m_nTxflTextFlow = 5; break; + case 6: pOutput->m_nTxflTextFlow = 5; break; + default: + break; } } if (text_props->rot.IsInit()) { - pOutput->m_fRotateText = 1; + pOutput->m_fRotateText = 1; } //nullable_int rot; //nullable_limit wrap; } - bool OOXShapeReader::ParsePic( ReaderParameter oParam, RtfShapePtr& pOutput) { PPTX::Logic::Pic * ooxPic = dynamic_cast(m_ooxShape); @@ -1384,7 +1385,7 @@ bool OOXShapeReader::ParsePic( ReaderParameter oParam, RtfShapePtr& pOutput) PPTX::Logic::ShapeStyle* oox_sp_style = ooxPic->style.GetPointer(); - pOutput->m_bFilled = true; + pOutput->m_bFilled = true; Parse(oParam, pOutput, &ooxPic->blipFill); @@ -1398,9 +1399,9 @@ bool OOXShapeReader::ParsePic( ReaderParameter oParam, RtfShapePtr& pOutput) { if (pOutput->m_nWidth == PROP_DEF && pOutput->m_nRight != PROP_DEF && pOutput->m_nLeft !=PROP_DEF ) pOutput->m_oPicture->m_nWidthGoal = pOutput->m_nRight - pOutput->m_nLeft; - else + else pOutput->m_oPicture->m_nWidthGoal = pOutput->m_nWidth; - } + } if (pOutput->m_oPicture->m_nHeightGoal == PROP_DEF) { if (pOutput->m_nHeight == PROP_DEF && pOutput->m_nBottom != PROP_DEF && pOutput->m_nTop !=PROP_DEF) @@ -1416,9 +1417,9 @@ bool OOXShapeReader::ParsePic( ReaderParameter oParam, RtfShapePtr& pOutput) } if (ooxPic->spPr.ln.IsInit()) { - Parse(oParam, pOutput, ooxPic->spPr.ln.GetPointer()); + Parse(oParam, pOutput, ooxPic->spPr.ln.GetPointer()); } -//scale picture + //scale picture if (ooxPic->spPr.xfrm.IsInit() && pOutput->m_oPicture) { if (ooxPic->spPr.xfrm->extX.IsInit() && ooxPic->spPr.xfrm->extY.IsInit()) @@ -1433,15 +1434,15 @@ bool OOXShapeReader::ParsePic( ReaderParameter oParam, RtfShapePtr& pOutput) if (ooxPic->oleObject.IsInit()) { - pOutput->m_bIsOle = true; + pOutput->m_bIsOle = true; pOutput->m_pOleObject = RtfOlePtr(new RtfOle()); if (ooxPic->oleObject->m_oDxaOrig.IsInit()) pOutput->m_pOleObject->m_nWidth = *ooxPic->oleObject->m_oDxaOrig; if (ooxPic->oleObject->m_oDyaOrig.IsInit()) - pOutput->m_pOleObject->m_nHeight = *ooxPic->oleObject->m_oDyaOrig; - + pOutput->m_pOleObject->m_nHeight = *ooxPic->oleObject->m_oDyaOrig; + if (ooxPic->oleObject->m_sProgId.IsInit() ) pOutput->m_pOleObject->m_sOleClass = *ooxPic->oleObject->m_sProgId; @@ -1449,8 +1450,8 @@ bool OOXShapeReader::ParsePic( ReaderParameter oParam, RtfShapePtr& pOutput) { switch( ooxPic->oleObject->m_oType->GetBYTECode()) { - case SimpleTypes::oletypeLink: pOutput->m_pOleObject->m_eOleType = RtfOle::ot_link; break; - case SimpleTypes::oletypeEmbed: pOutput->m_pOleObject->m_eOleType = RtfOle::ot_emb; break; + case SimpleTypes::oletypeLink: pOutput->m_pOleObject->m_eOleType = RtfOle::ot_link; break; + case SimpleTypes::oletypeEmbed: pOutput->m_pOleObject->m_eOleType = RtfOle::ot_emb; break; } } std::wstring sOlePath; @@ -1460,12 +1461,12 @@ bool OOXShapeReader::ParsePic( ReaderParameter oParam, RtfShapePtr& pOutput) } else if(ooxPic->oleObject->m_oId.IsInit() && oParam.oReader->m_currentContainer) { - smart_ptr pFile = oParam.oReader->m_currentContainer->Find(*ooxPic->oleObject->m_oId); + smart_ptr pFile = oParam.oReader->m_currentContainer->Find(*ooxPic->oleObject->m_oId); smart_ptr pOleFile = pFile.smart_dynamic_cast(); if (pOleFile.IsInit()) { - sOlePath= pOleFile->filename().GetPath(); + sOlePath= pOleFile->filename().GetPath(); } } @@ -1473,9 +1474,9 @@ bool OOXShapeReader::ParsePic( ReaderParameter oParam, RtfShapePtr& pOutput) { if (pOutput->m_nWidth == PROP_DEF && pOutput->m_nRight != PROP_DEF && pOutput->m_nLeft !=PROP_DEF ) pOutput->m_pOleObject->m_nWidth = pOutput->m_nRight - pOutput->m_nLeft; - else + else pOutput->m_pOleObject->m_nWidth = pOutput->m_nWidth; - } + } if (pOutput->m_pOleObject->m_nHeight == PROP_DEF) { if (pOutput->m_nHeight == PROP_DEF && pOutput->m_nBottom != PROP_DEF && pOutput->m_nTop !=PROP_DEF) @@ -1486,15 +1487,15 @@ bool OOXShapeReader::ParsePic( ReaderParameter oParam, RtfShapePtr& pOutput) if (!sOlePath.empty()) { ConvertOle2ToOle1(sOlePath, pOutput->m_pOleObject); - + std::wstring ole1FileName = Utils::CreateTempFile( oParam.oReader->m_sTempFolder ); - + RtfUtility::WriteDataToFileBinary( ole1FileName, pOutput->m_pOleObject->m_oOle1Data.first.get(), pOutput->m_pOleObject->m_oOle1Data.second ); pOutput->m_pOleObject->SetFilename(ole1FileName); } } - return true; + return true; } bool OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput, bool bUsedType) { @@ -1502,13 +1503,13 @@ bool OOXShapeReader::Parse( ReaderParameter oParam, RtfShapePtr& pOutput, bool b if (OOX::CHdrFtr *pHdrFtr = dynamic_cast(oParam.oReader->m_currentContainer)) pOutput->m_nHeader = 1;//shape in header/footer - else + else pOutput->m_nHeader = 0; if (m_vmlElement || m_arrElement) return ParseVml(oParam , pOutput, bUsedType); PPTX::Logic::Shape *ooxShape = dynamic_cast (m_ooxShape); -// PPTX::Logic::CxnSp *cxnShape = dynamic_cast (m_ooxShape); + // PPTX::Logic::CxnSp *cxnShape = dynamic_cast (m_ooxShape); PPTX::Logic::Pic *ooxPic = dynamic_cast (m_ooxShape); OOX::VmlOffice::COLEObject *vmlOLE = dynamic_cast (m_ooxShape); @@ -1526,7 +1527,7 @@ bool OOXShapeReader::ParseVmlObject ( ReaderParameter oParam , RtfShapePtr& pOut OOX::VmlOffice::COLEObject *vmlOLE = dynamic_cast (m_ooxShape); if (!vmlOLE) return false; - pOutput->m_bIsOle = true; + pOutput->m_bIsOle = true; pOutput->m_pOleObject = RtfOlePtr(new RtfOle()); if( vmlOLE->m_sProgId.IsInit() ) @@ -1536,15 +1537,15 @@ bool OOXShapeReader::ParseVmlObject ( ReaderParameter oParam , RtfShapePtr& pOut { switch( vmlOLE->m_oType->GetValue()) { - case SimpleTypes::oletypeLink: pOutput->m_pOleObject->m_eOleType = RtfOle::ot_link; break; - case SimpleTypes::oletypeEmbed: pOutput->m_pOleObject->m_eOleType = RtfOle::ot_emb; break; + case SimpleTypes::oletypeLink: pOutput->m_pOleObject->m_eOleType = RtfOle::ot_link; break; + case SimpleTypes::oletypeEmbed: pOutput->m_pOleObject->m_eOleType = RtfOle::ot_emb; break; } } std::wstring sOlePath; if (vmlOLE->m_oId.IsInit() && oParam.oReader->m_currentContainer) { smart_ptr oFile = oParam.oReader->m_currentContainer->Find(vmlOLE->m_oId->GetValue()); - + if ((oFile.IsInit() && (OOX::FileTypes::OleObject == oFile->type()))) { OOX::OleObject* pO = (OOX::OleObject*)oFile.GetPointer(); @@ -1574,27 +1575,25 @@ bool OOXShapeReader::ParseVmlObject ( ReaderParameter oParam , RtfShapePtr& pOut ConvertOle2ToOle1(sOlePath, pOutput->m_pOleObject); std::wstring ole1FileName = Utils::CreateTempFile( oParam.oReader->m_sTempFolder ); - + RtfUtility::WriteDataToFileBinary( ole1FileName, pOutput->m_pOleObject->m_oOle1Data.first.get(), pOutput->m_pOleObject->m_oOle1Data.second ); pOutput->m_pOleObject->SetFilename(ole1FileName); } return true; } - void OOXShapeReader::Parse(ReaderParameter oParam, RtfShapePtr& pOutput, PPTX::Logic::UniFill *oox_fill, std::wstring *change_sheme_color) { if (!oox_fill) return; switch(oox_fill->m_type) { - case PPTX::Logic::UniFill::blipFill: Parse(oParam, pOutput, dynamic_cast(oox_fill->Fill.operator ->())); break; - case PPTX::Logic::UniFill::gradFill: Parse(oParam, pOutput, dynamic_cast(oox_fill->Fill.operator ->()), change_sheme_color); break; - case PPTX::Logic::UniFill::pattFill: Parse(oParam, pOutput, dynamic_cast(oox_fill->Fill.operator ->()), change_sheme_color); break; - case PPTX::Logic::UniFill::solidFill: Parse(oParam, pOutput, dynamic_cast(oox_fill->Fill.operator ->()), change_sheme_color);break; + case PPTX::Logic::UniFill::blipFill: Parse(oParam, pOutput, dynamic_cast(oox_fill->Fill.operator ->())); break; + case PPTX::Logic::UniFill::gradFill: Parse(oParam, pOutput, dynamic_cast(oox_fill->Fill.operator ->()), change_sheme_color); break; + case PPTX::Logic::UniFill::pattFill: Parse(oParam, pOutput, dynamic_cast(oox_fill->Fill.operator ->()), change_sheme_color); break; + case PPTX::Logic::UniFill::solidFill: Parse(oParam, pOutput, dynamic_cast(oox_fill->Fill.operator ->()), change_sheme_color);break; } } - bool OOXShapeReader::ParseVml(ReaderParameter oParam, RtfShapePtr& pOutput, bool bUsedType) { if (m_vmlElement == NULL && m_arrElement) return false; @@ -1608,7 +1607,7 @@ bool OOXShapeReader::ParseVml(ReaderParameter oParam, RtfShapePtr& pOutput, bool //pOutput->m_nLeft = 0; //стили только с widht height (например в Numbering) //pOutput->m_nTop = 0; -// геометрия -------------------------------------------------------------------------------------------------------- + // геометрия -------------------------------------------------------------------------------------------------------- SimpleTypes::Vml::CVmlPath * custom_path = NULL; int Width = 0, Height = 0; @@ -1625,10 +1624,10 @@ bool OOXShapeReader::ParseVml(ReaderParameter oParam, RtfShapePtr& pOutput, bool if (shape_type->m_sId.IsInit()) { if (oParam.oReader->m_mapShapeTypes.find(shape_type->m_sId.get()) == - oParam.oReader->m_mapShapeTypes.end()) + oParam.oReader->m_mapShapeTypes.end()) { oParam.oReader->m_mapShapeTypes.insert(oParam.oReader->m_mapShapeTypes.begin(), - std::pair(shape_type->m_sId.get(), shape_type)); + std::pair(shape_type->m_sId.get(), shape_type)); } } custom_path = shape_type->m_oPath.GetPointer(); @@ -1664,7 +1663,7 @@ bool OOXShapeReader::ParseVml(ReaderParameter oParam, RtfShapePtr& pOutput, bool int pos = (int)shape->m_sType->find(L"#_x0000_t"); if (pos >= 0) { - pOutput->m_nShapeType = XmlUtils::GetInteger(shape->m_sType->substr(pos + 9, shape->m_sType->length() - pos - 9)); + pOutput->m_nShapeType = XmlUtils::GetInteger(shape->m_sType->substr(pos + 9, shape->m_sType->length() - pos - 9)); } } } @@ -1717,7 +1716,7 @@ bool OOXShapeReader::ParseVml(ReaderParameter oParam, RtfShapePtr& pOutput, bool } if ((pOutput->m_nShapeType == ODRAW::sptNotPrimitive || - pOutput->m_nShapeType == PROP_DEF) && custom_path) + pOutput->m_nShapeType == PROP_DEF) && custom_path) { pOutput->m_nShapeType = ODRAW::sptNotPrimitive; @@ -1779,7 +1778,7 @@ bool OOXShapeReader::ParseVml(ReaderParameter oParam, RtfShapePtr& pOutput, bool for (int i = 0; i < m_vmlElement->m_oWrapCoords->GetSize(); i++) { pOutput->m_aWrapPoints.push_back(std::pair(m_vmlElement->m_oWrapCoords->GetX(i), - m_vmlElement->m_oWrapCoords->GetY(i))); + m_vmlElement->m_oWrapCoords->GetY(i))); } } if (m_vmlElement->m_oCoordOrigin.IsInit()) @@ -1815,6 +1814,398 @@ bool OOXShapeReader::ParseVml(ReaderParameter oParam, RtfShapePtr& pOutput, bool } return res; } +void OOXShapeReader::ParseVmlPath (RtfShapePtr& pOutput, const std::wstring &custom_vml_path) +{ + std::vector< std::wstring > splitted; + + boost::algorithm::split(splitted, custom_vml_path, boost::algorithm::is_any_of(L"e"), boost::algorithm::token_compress_on); + + for (size_t i = 0; i < splitted.size(); ++i) + { + std::wstring & custom_path = splitted[i]; + + if (custom_path.empty()) continue; + + std::vector o_Polyline; + + bool bLine = (custom_path.find(L"ns") == std::wstring::npos); + bool bFill = (custom_path.find(L"nf") == std::wstring::npos); + + bool res = svg_path::parseVml(o_Polyline, custom_path); + + int val = 0; + for (size_t i = 0; i < o_Polyline.size(); i++) + { + if (o_Polyline[i].command == L"m") + { + val = 0x4000; + } + else if (o_Polyline[i].command == L"l") + { + val = 0x0000 | 1; + } + else if (o_Polyline[i].command == L"c") + { + val = 0x2000 | 1; + } + + if (!bFill) + pOutput->m_aPSegmentInfo.push_back(0xac00); + if (!bLine) + pOutput->m_aPSegmentInfo.push_back(0xab00); + pOutput->m_aPSegmentInfo.push_back(val); + + for (size_t j = 0; j < o_Polyline[i].points.size(); j++) + { + pOutput->m_aPVerticles.push_back(std::make_pair((int)(o_Polyline[i].points[j].x.get_value_or(0)/* / 10000. * W*/), + (int)(o_Polyline[i].points[j].y.get_value_or(0)/* / 10000. * H*/))); + } + } + + pOutput->m_aPSegmentInfo.push_back(0x6001); + } + pOutput->m_aPSegmentInfo.push_back(0x8000); +} +void OOXShapeReader::ParseAdjustment (RtfShape& oShape, std::wstring sAdjustment) +{ + std::vector< std::wstring > splitted; + + boost::algorithm::split(splitted, sAdjustment, boost::algorithm::is_any_of(L","), boost::algorithm::token_compress_on); + + for (size_t i = 0; i < splitted.size(); i++) + { + if (!splitted[i].empty()) + { + try + { + oShape.m_nAdjustValue[i] = XmlUtils::GetInteger(splitted[i]); + } + catch(...) + { + oShape.m_nAdjustValue[i] = 0; + } + } + } +} +bool OOXShapeReader::WriteDataToPicture( std::wstring sPath, RtfPicture& pOutput, ReaderParameter& oParam) +{ + OOX::CPath ooxPath = sPath; //для target + + if (!oParam.oReader->m_sTempFolder.empty()) + ooxPath = oParam.oReader->m_sTempFolder + FILE_SEPARATOR_STR; + + pOutput.m_dScaleX = 100; + pOutput.m_dScaleY = 100; + + //Выставляем тип картинки + pOutput.eDataType = RtfPicture::GetPictureType( sPath ); + + //ecли тип не поддерживается rtf конвертируем в png + if( RtfPicture::dt_none == pOutput.eDataType ) + { + //в туже папку что и исходная картинка + CBgraFrame image; + if (image.OpenFile(sPath) == false ) return false; + + //правильно выставляем размеры + pOutput.m_nWidthGoal = image.get_Width() * 15; //pixels to twip ( 1440 / 96 ) + pOutput.m_nHeightGoal = image.get_Height()* 15; //pixels to twip ( 1440 / 96 ) + + std::wstring sTargetFile = NSDirectory::CreateTempFileWithUniqueName(ooxPath.GetDirectory(), L"img"); + + if (image.SaveFile(sTargetFile, 4 /*_CXIMAGE_FORMAT_PNG*/) ) + { + pOutput.eDataType = RtfPicture::dt_png; + //Запоминаем имя + pOutput.m_sPicFilename = sTargetFile; + pOutput.m_bIsCopy = true;//выставляем флаг чтобы потом удалить файл + } + } + else if( RtfPicture::dt_apm == pOutput.eDataType ) + { + //убираем заголовок apm (22 byte) + NSFile::CFileBinary file_inp; //mpa + NSFile::CFileBinary file_out;//wmf + + std::wstring sTargetFile = NSDirectory::CreateTempFileWithUniqueName(ooxPath.GetDirectory(), L"img"); + + bool res = file_inp.OpenFile(sPath); + if (res == false) return false; + + res = file_out.CreateFile(sTargetFile); + if (res == false) return false; + + DWORD dwBytesRead = 0; + DWORD dwBytesWrite = 0; + BYTE pBuffer[1024]; + DWORD nHeaderLen = 22; + + dwBytesRead = file_inp.GetPosition(); + file_inp.ReadFile(pBuffer, 1024); + dwBytesRead = file_inp.GetPosition() - dwBytesRead; + + while( 0 != dwBytesRead ) + { + if( nHeaderLen > 0 ) + { + if(dwBytesRead > nHeaderLen ) + { + file_out.WriteFile(pBuffer + nHeaderLen, dwBytesRead - nHeaderLen); + nHeaderLen = 0; + } + else + nHeaderLen -= dwBytesRead; + } + else + file_out.WriteFile( pBuffer, dwBytesRead); + + dwBytesRead = file_inp.GetPosition(); + file_inp.ReadFile(pBuffer, 1024); + dwBytesRead = file_inp.GetPosition() - dwBytesRead; + } + file_inp.CloseFile(); + file_out.CloseFile(); + + pOutput.eDataType = RtfPicture::dt_wmf; + //Запоминаем имя + pOutput.m_sPicFilename = sTargetFile; + pOutput.m_bIsCopy = true; + } + else + { + if (pOutput.eDataType == RtfPicture::dt_emf || pOutput.eDataType == RtfPicture::dt_wmf || pOutput.eDataType == RtfPicture::dt_svg) + { + if (!oParam.oRtf->m_pAppFonts) + { + oParam.oRtf->m_pAppFonts = NSFonts::NSApplication::Create(); + oParam.oRtf->m_pAppFonts->Initialize(); + } + + MetaFile::IMetaFile* meta = MetaFile::Create(oParam.oRtf->m_pAppFonts); + + if (meta->LoadFromFile(sPath.c_str())) + { + double dX, dY, dW, dH; + meta->GetBounds(&dX, &dY, &dW, &dH); + meta->Close(); + + pOutput.m_nWidthGoal = (int)(dW * 15); //pixels to twip + pOutput.m_nHeightGoal = (int)(dH * 15); //pixels to twip; + } + RELEASEOBJECT(meta); + //Запоминаем только имя + pOutput.m_sPicFilename = sPath; + pOutput.m_bIsCopy = false; //не удалять + } + else + {//png, jpeg + CBgraFrame image; + + if (image.OpenFile(sPath, 0) == false ) return false; + //правильно выставляем размеры + pOutput.m_nWidthGoal = image.get_Width() * 15; //pixels to twip + pOutput.m_nHeightGoal = image.get_Height() * 15; //pixels to twip; + + //Запоминаем только имя + pOutput.m_sPicFilename = sPath; + pOutput.m_bIsCopy = false; //не удалять + } + } + return true; +} +void OOXShapeReader::Parse(ReaderParameter oParam, PPTX::Logic::UniFill *uni_fill, unsigned int & nColor, _CP_OPT(double) &opacity) +{ + if (!uni_fill) return; + + if (uni_fill->m_type == PPTX::Logic::UniFill::noFill ) + { + nColor = 0xffffff; //white + } + else if (uni_fill->m_type == PPTX::Logic::UniFill::solidFill ) + { + NSCommon::smart_ptr fill = uni_fill->Fill.smart_dynamic_cast(); + + Parse(oParam, fill->Color.Color.operator ->(), nColor, opacity); + } + else if (uni_fill->m_type == PPTX::Logic::UniFill::gradFill ) + { + NSCommon::smart_ptr fill = uni_fill->Fill.smart_dynamic_cast(); + + unsigned int nColor = 0; //black + _CP_OPT(double) opacity; + + if (!fill->GsLst.empty()) + { + Parse(oParam, fill->GsLst[0].color.Color.operator ->(), nColor, opacity); + } + } +} +std::wstring OOXShapeReader::ConvertPackageToStorage(const std::wstring & msPackage, const std::wstring & Program) +{ + DWORD size = 0; + BYTE* pData = NULL; + if (false == NSFile::CFileBinary::ReadAllBytes(msPackage, &pData, size)) + return L""; + + CFCPP::CompoundFile *pStorage = new CFCPP::CompoundFile(CFCPP::Ver_3, CFCPP::Default); + + std::shared_ptr oPackage = pStorage->RootStorage()->AddStream(L"Package"); + oPackage->Write((char*)pData, 0, size); + delete[]pData; + //CompObj + std::shared_ptr oCompObj = pStorage->RootStorage()->AddStream(L"\001CompObj"); + _INT64 position = 0; + + BYTE dataCompObjHeader[28] = { 0x01,0x00,0xfe,0xff,0x03,0x0a,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; + oCompObj->Write((char*)dataCompObjHeader, position, 24); position += 28; + + char last = 0; + + std::string name = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(Program); + XmlUtils::replace_all(name, ".", ""); + + //name = "Microsoft Excel Worksheet"; + _UINT32 name_size = name.length() + 1; + + oCompObj->Write((char*)&name_size, position, 4); position += 4; //AnsiUserType + oCompObj->Write((char*)name.c_str(), position, name.length()); position += name.length(); + oCompObj->Write(&last, position, 1); position += 1; + + //name = "ExcelML12"; + name_size = name.length() + 1; + + oCompObj->Write((char*)&name_size, position, 4); position += 4; //AnsiClipboardFormat + oCompObj->Write((char*)name.c_str(), position, name.length()); position += name.length(); + oCompObj->Write(&last, position, 1); position += 1; + + _INT32 tmp = 0; + oCompObj->Write((char*)&tmp, position, 4); position += 4; // Reserved + + tmp = 0x71B239F4; + oCompObj->Write((char*)&tmp, position, 4); position += 4; // UnicodeMarker + + tmp = 0; + oCompObj->Write((char*)&tmp, position, 4); position += 4; // UnicodeUserType + oCompObj->Write((char*)&tmp, position, 4); position += 4; // UnicodeClipboardFormat + oCompObj->Write((char*)&tmp, position, 4); position += 4; // Reserved + + //ObjInfo + char dataObjInfo[] = { 0x00,0x00,0x03,0x00,0x01,0x00 }; + std::shared_ptr oObjInfo = pStorage->RootStorage()->AddStream(L"\003ObjInfo"); + oObjInfo->Write(dataObjInfo, 0, 6); + //------------------------------------------------------------------------------------------------------------------------------- + std::wstring sFileStorage = NSDirectory::CreateTempFileWithUniqueName(NSFile::GetDirectoryName(msPackage), L"ole"); + pStorage->Save(sFileStorage); + pStorage->Close(); + delete pStorage; + + return sFileStorage; +} +void OOXShapeReader::ConvertOle2ToOle1(const std::wstring &oleFilePath, RtfOlePtr object) +{ + if (!object) return; + if (oleFilePath.empty()) return; + + Ole1FormatReaderWriter ole1Writer; + + ole1Writer.Header.ClassName.val = std::string(object->m_sOleClass.begin(), object->m_sOleClass.end()); + ole1Writer.Header.ClassName.size = ole1Writer.Header.ClassName.val.length() + 1; + + //ole1Writer.Header.Width = object->m_nWidth; + //ole1Writer.Header.Height = object->m_nHeight; + + DWORD size = 0; + if (false == NSFile::CFileBinary::ReadAllBytes(oleFilePath, &ole1Writer.NativeData, size)) + return; + ole1Writer.NativeDataSize = size; + + int ole1DataSize = ole1Writer.NativeDataSize + 2048; + BYTE* ole1Data = new BYTE[ole1DataSize]; + + if (ole1Data) + { + ole1Writer.Write(ole1Data, ole1DataSize); + + boost::shared_array buffer(ole1Data); + object->m_oOle1Data = std::make_pair(buffer, ole1DataSize); + } + delete []ole1Writer.NativeData; +} +void OOXShapeReader::ConvertOle2ToOle1(POLE::Storage *storage, RtfOlePtr object) +{ + if (!object) return; + if (!storage) return; + + Ole1FormatReaderWriter ole1Writer; + + ole1Writer.Header.ClassName.val = std::string(object->m_sOleClass.begin(), object->m_sOleClass.end()); + ole1Writer.Header.ClassName.size = ole1Writer.Header.ClassName.val.length(); + + //ole1Writer.Header.Width = object->m_nWidth; + //ole1Writer.Header.Height = object->m_nHeight; + + std::list entries; + entries = storage->entries( L"/" ); + + for( std::list::iterator it = entries.begin(); it != entries.end(); ++it ) + { + std::wstring name = XmlUtils::GetLower(*it); + + if (std::wstring::npos != name.find(L"ole")) continue; + if (std::wstring::npos != name.find(L"compobj")) continue; + if (std::wstring::npos != name.find(L"objinfo")) continue; + + if (std::wstring::npos != name.find(L"native") || + std::wstring::npos != name.find(L"content") || + std::wstring::npos != name.find(L"package")) + { + POLE::Stream *stream = new POLE::Stream(storage, *it); + if (stream) + { + ole1Writer.NativeDataSize = (_UINT32)stream->size(); + + ole1Writer.NativeData = new unsigned char[ole1Writer.NativeDataSize]; + stream->read(ole1Writer.NativeData, ole1Writer.NativeDataSize); + delete stream; + + break; + } + } + } + + if (ole1Writer.NativeData) + { + int ole1DataSize = ole1Writer.NativeDataSize + 2048; + BYTE* ole1Data = new BYTE[ole1DataSize]; + + if (ole1Data) + { + ole1Writer.Write(ole1Data, ole1DataSize); + + boost::shared_array buffer(ole1Data); + object->m_oOle1Data = std::make_pair(buffer, ole1DataSize); + } + delete []ole1Writer.NativeData; + } +} + + +OOXShapeGroupReader::OOXShapeGroupReader(OOX::Vml::CGroup *vmlGroup) +{ + m_vmlGroup = vmlGroup; +} +OOXShapeGroupReader::OOXShapeGroupReader(PPTX::Logic::SpTree *ooxGroup) +{ + m_ooxGroup = ooxGroup; +} +bool OOXShapeGroupReader::ParseVmlStyles(RtfShapePtr pGroupShape, std::vector & props) +{ + for (size_t i = 0; i < props.size(); i++) + { + OOXShapeReader::ParseVmlStyle( pGroupShape, props[i].get()); + } + return true; +} bool OOXShapeGroupReader::Parse( ReaderParameter oParam , RtfShapePtr& pOutput) { if (m_vmlGroup == NULL && m_ooxGroup == NULL) return false; @@ -1876,7 +2267,7 @@ bool OOXShapeGroupReader::Parse( ReaderParameter oParam , RtfShapePtr& pOutput) pOutput->AddItem(pNewShape); } - for (size_t i = 0; i < m_vmlGroup->m_arrElements.size(); ++i) + for (size_t i = 0; i < m_vmlGroup->m_arrElements.size(); ++i) { if (m_vmlGroup->m_arrElements[i] == NULL) continue; @@ -1887,7 +2278,7 @@ bool OOXShapeGroupReader::Parse( ReaderParameter oParam , RtfShapePtr& pOutput) OOXShapeGroupReader oShapeReader(dynamic_cast(m_vmlGroup->m_arrElements[i])); if( true == oShapeReader.Parse( oParam, pNewShape ) ) - pOutput->AddItem( pNewShape ); + pOutput->AddItem( pNewShape ); } else { @@ -1897,7 +2288,7 @@ bool OOXShapeGroupReader::Parse( ReaderParameter oParam , RtfShapePtr& pOutput) pNewShape->m_bInGroup = true; if( true == oShapeReader.Parse( oParam, pNewShape ) ) - pOutput->AddItem( pNewShape ); + pOutput->AddItem( pNewShape ); } } } @@ -1911,9 +2302,9 @@ bool OOXShapeGroupReader::Parse( ReaderParameter oParam , RtfShapePtr& pOutput) { double rot = m_ooxGroup->grpSpPr.xfrm->rot.IsInit() ? m_ooxGroup->grpSpPr.xfrm->rot.get() / 60000. : 0.; if (rot > 0.01) - pOutput->m_nRotation = (int)(rot * 65535); + pOutput->m_nRotation = (int)(rot * 65535); - if (m_ooxGroup->grpSpPr.xfrm->flipH.get_value_or(false)) pOutput->m_bFlipH = 1; + if (m_ooxGroup->grpSpPr.xfrm->flipH.get_value_or(false)) pOutput->m_bFlipH = 1; if (m_ooxGroup->grpSpPr.xfrm->flipV.get_value_or(false)) pOutput->m_bFlipV = 1; if( m_ooxGroup->grpSpPr.xfrm->chOffX.IsInit() && m_ooxGroup->grpSpPr.xfrm->chOffY.IsInit()) @@ -1955,109 +2346,35 @@ bool OOXShapeGroupReader::Parse( ReaderParameter oParam , RtfShapePtr& pOutput) for (size_t i = 0; i < m_ooxGroup->SpTreeElems.size() ; i++ ) { if (m_ooxGroup->SpTreeElems[i].getType() == OOX::et_p_ShapeTree || - m_ooxGroup->SpTreeElems[i].getType() == OOX::et_lc_LockedCanvas) + m_ooxGroup->SpTreeElems[i].getType() == OOX::et_lc_LockedCanvas) { RtfShapePtr pNewShape( new RtfShape() ); pNewShape->m_bIsGroup = true; - smart_ptr e = m_ooxGroup->SpTreeElems[i].GetElem().smart_dynamic_cast(); + smart_ptr e = m_ooxGroup->SpTreeElems[i].GetElem().smart_dynamic_cast(); OOXShapeGroupReader oShapeReader(e.GetPointer()); pNewShape->m_bInGroup = true; if( true == oShapeReader.Parse( oParam, pNewShape ) ) - pOutput->AddItem( pNewShape ); + pOutput->AddItem( pNewShape ); } else { RtfShapePtr pNewShape ( new RtfShape() ); - smart_ptr e = m_ooxGroup->SpTreeElems[i].GetElem().smart_dynamic_cast(); + smart_ptr e = m_ooxGroup->SpTreeElems[i].GetElem().smart_dynamic_cast(); OOXShapeReader oShapeReader(e.GetPointer()); pNewShape->m_bInGroup = true; if( true == oShapeReader.Parse( oParam, pNewShape ) ) - pOutput->AddItem( pNewShape ); + pOutput->AddItem( pNewShape ); } } } return true; } -void OOXShapeReader::ParseVmlPath (RtfShapePtr& pOutput, const std::wstring &custom_vml_path) -{ - std::vector< std::wstring > splitted; - - boost::algorithm::split(splitted, custom_vml_path, boost::algorithm::is_any_of(L"e"), boost::algorithm::token_compress_on); - - for (size_t i = 0; i < splitted.size(); ++i) - { - std::wstring & custom_path = splitted[i]; - - if (custom_path.empty()) continue; - - std::vector o_Polyline; - - bool bLine = (custom_path.find(L"ns") == std::wstring::npos); - bool bFill = (custom_path.find(L"nf") == std::wstring::npos); - - bool res = svg_path::parseVml(o_Polyline, custom_path); - - int val = 0; - for (size_t i = 0; i < o_Polyline.size(); i++) - { - if (o_Polyline[i].command == L"m") - { - val = 0x4000; - } - else if (o_Polyline[i].command == L"l") - { - val = 0x0000 | 1; - } - else if (o_Polyline[i].command == L"c") - { - val = 0x2000 | 1; - } - - if (!bFill) - pOutput->m_aPSegmentInfo.push_back(0xac00); - if (!bLine) - pOutput->m_aPSegmentInfo.push_back(0xab00); - pOutput->m_aPSegmentInfo.push_back(val); - - for (size_t j = 0; j < o_Polyline[i].points.size(); j++) - { - pOutput->m_aPVerticles.push_back(std::make_pair((int)(o_Polyline[i].points[j].x.get_value_or(0)/* / 10000. * W*/), - (int)(o_Polyline[i].points[j].y.get_value_or(0)/* / 10000. * H*/))); - } - } - - pOutput->m_aPSegmentInfo.push_back(0x6001); - } - pOutput->m_aPSegmentInfo.push_back(0x8000); -} - -void OOXShapeReader::ParseAdjustment (RtfShape& oShape, std::wstring sAdjustment) -{ - std::vector< std::wstring > splitted; - - boost::algorithm::split(splitted, sAdjustment, boost::algorithm::is_any_of(L","), boost::algorithm::token_compress_on); - - for (size_t i = 0; i < splitted.size(); i++) - { - if (!splitted[i].empty()) - { - try - { - oShape.m_nAdjustValue[i] = XmlUtils::GetInteger(splitted[i]); - } - catch(...) - { - oShape.m_nAdjustValue[i] = 0; - } - } - } - } OOXBackgroundReader::OOXBackgroundReader(OOX::Logic::CBackground *oox_background) { @@ -2089,14 +2406,14 @@ bool OOXBackgroundReader::Parse( ReaderParameter oParam , RtfShapePtr& pOutput) result = true; } if (m_ooxBackground->m_oColor.IsInit()) - { + { if (m_ooxBackground->m_oColor->GetValue() == SimpleTypes::hexcolorRGB) { rtfColor.SetRGB(m_ooxBackground->m_oColor->Get_R(), m_ooxBackground->m_oColor->Get_G(), m_ooxBackground->m_oColor->Get_B()); - + unsigned char opacity = m_ooxBackground->m_oColor->Get_A(); if (opacity != 0xff) - pOutput->m_nFillOpacity = (int)(opacity / 255. * 100); + pOutput->m_nFillOpacity = (int)(opacity / 255. * 100); } if (m_ooxBackground->m_oColor->GetValue() == SimpleTypes::colormodeAuto) rtfColor.m_bAuto = true; @@ -2113,7 +2430,7 @@ bool OOXBackgroundReader::Parse( ReaderParameter oParam , RtfShapePtr& pOutput) { OOXShapeReader sub_reader(m_ooxBackground->m_oBackground.GetPointer()); sub_reader.Parse(oParam, pOutput); - } + } else if (m_ooxBackground->m_oDrawing.IsInit()) { OOXDrawingReader oDrawingReader(m_ooxBackground->m_oDrawing.GetPointer()); @@ -2121,16 +2438,16 @@ bool OOXBackgroundReader::Parse( ReaderParameter oParam , RtfShapePtr& pOutput) OOXDrawingReader sub_reader(m_ooxBackground->m_oDrawing.GetPointer()); sub_reader.Parse(oParam, pOutput); //if( false == oDrawingReader.Parse( oParam, *pOutput ) ) - //{ + //{ // if (!m_ooxBackground->m_oDrawing->m_sXml.IsInit()) - // { + // { // OOXDrawingGraphicReader oGraphiceReader(*m_ooxBackground->m_oDrawing->m_sXml); // OOX::Logic::e *ooxPicture = oGraphiceReader.Parse( oParam, *pOutput ); // if (ooxPicture) // { // OOXShapeReader sub_reader(ooxPicture); // sub_reader.Parse(oParam, pOutput); - // + // // delete ooxPicture; // } // } @@ -2138,307 +2455,3 @@ bool OOXBackgroundReader::Parse( ReaderParameter oParam , RtfShapePtr& pOutput) } return true; } - -bool OOXShapeReader::WriteDataToPicture( std::wstring sPath, RtfPicture& pOutput, ReaderParameter& oParam) -{ - OOX::CPath ooxPath = sPath; //для target - - if (!oParam.oReader->m_sTempFolder.empty()) - ooxPath = oParam.oReader->m_sTempFolder + FILE_SEPARATOR_STR; - - pOutput.m_dScaleX = 100; - pOutput.m_dScaleY = 100; - - //Выставляем тип картинки - pOutput.eDataType = RtfPicture::GetPictureType( sPath ); - -//ecли тип не поддерживается rtf конвертируем в png - if( RtfPicture::dt_none == pOutput.eDataType ) - { - //в туже папку что и исходная картинка - CBgraFrame image; - if (image.OpenFile(sPath) == false ) return false; - - //правильно выставляем размеры - pOutput.m_nWidthGoal = image.get_Width() * 15; //pixels to twip ( 1440 / 96 ) - pOutput.m_nHeightGoal = image.get_Height()* 15; //pixels to twip ( 1440 / 96 ) - - std::wstring sTargetFile = NSDirectory::CreateTempFileWithUniqueName(ooxPath.GetDirectory(), L"img"); - - if (image.SaveFile(sTargetFile, 4 /*_CXIMAGE_FORMAT_PNG*/) ) - { - pOutput.eDataType = RtfPicture::dt_png; - //Запоминаем имя - pOutput.m_sPicFilename = sTargetFile; - pOutput.m_bIsCopy = true;//выставляем флаг чтобы потом удалить файл - } - } - else if( RtfPicture::dt_apm == pOutput.eDataType ) - { - //убираем заголовок apm (22 byte) - NSFile::CFileBinary file_inp; //mpa - NSFile::CFileBinary file_out;//wmf - - std::wstring sTargetFile = NSDirectory::CreateTempFileWithUniqueName(ooxPath.GetDirectory(), L"img"); - - bool res = file_inp.OpenFile(sPath); - if (res == false) return false; - - res = file_out.CreateFile(sTargetFile); - if (res == false) return false; - - DWORD dwBytesRead = 0; - DWORD dwBytesWrite = 0; - BYTE pBuffer[1024]; - DWORD nHeaderLen = 22; - - dwBytesRead = file_inp.GetPosition(); - file_inp.ReadFile(pBuffer, 1024); - dwBytesRead = file_inp.GetPosition() - dwBytesRead; - - while( 0 != dwBytesRead ) - { - if( nHeaderLen > 0 ) - { - if(dwBytesRead > nHeaderLen ) - { - file_out.WriteFile(pBuffer + nHeaderLen, dwBytesRead - nHeaderLen); - nHeaderLen = 0; - } - else - nHeaderLen -= dwBytesRead; - } - else - file_out.WriteFile( pBuffer, dwBytesRead); - - dwBytesRead = file_inp.GetPosition(); - file_inp.ReadFile(pBuffer, 1024); - dwBytesRead = file_inp.GetPosition() - dwBytesRead; - } - file_inp.CloseFile(); - file_out.CloseFile(); - - pOutput.eDataType = RtfPicture::dt_wmf; - //Запоминаем имя - pOutput.m_sPicFilename = sTargetFile; - pOutput.m_bIsCopy = true; - } - else - { - if (pOutput.eDataType == RtfPicture::dt_emf || pOutput.eDataType == RtfPicture::dt_wmf || pOutput.eDataType == RtfPicture::dt_svg) - { - if (!oParam.oRtf->m_pAppFonts) - { - oParam.oRtf->m_pAppFonts = NSFonts::NSApplication::Create(); - oParam.oRtf->m_pAppFonts->Initialize(); - } - - MetaFile::IMetaFile* meta = MetaFile::Create(oParam.oRtf->m_pAppFonts); - - if (meta->LoadFromFile(sPath.c_str())) - { - double dX, dY, dW, dH; - meta->GetBounds(&dX, &dY, &dW, &dH); - meta->Close(); - - pOutput.m_nWidthGoal = (int)(dW * 15); //pixels to twip - pOutput.m_nHeightGoal = (int)(dH * 15); //pixels to twip; - } - RELEASEOBJECT(meta); - //Запоминаем только имя - pOutput.m_sPicFilename = sPath; - pOutput.m_bIsCopy = false; //не удалять - } - else - {//png, jpeg - CBgraFrame image; - - if (image.OpenFile(sPath, 0) == false ) return false; - //правильно выставляем размеры - pOutput.m_nWidthGoal = image.get_Width() * 15; //pixels to twip - pOutput.m_nHeightGoal = image.get_Height() * 15; //pixels to twip; - - //Запоминаем только имя - pOutput.m_sPicFilename = sPath; - pOutput.m_bIsCopy = false; //не удалять - } - } - return true; -} - -void OOXShapeReader::Parse(ReaderParameter oParam, PPTX::Logic::UniFill *uni_fill, unsigned int & nColor, _CP_OPT(double) &opacity) -{ - if (!uni_fill) return; - - if (uni_fill->m_type == PPTX::Logic::UniFill::noFill ) - { - nColor = 0xffffff; //white - } - else if (uni_fill->m_type == PPTX::Logic::UniFill::solidFill ) - { - NSCommon::smart_ptr fill = uni_fill->Fill.smart_dynamic_cast(); - - Parse(oParam, fill->Color.Color.operator ->(), nColor, opacity); - } - else if (uni_fill->m_type == PPTX::Logic::UniFill::gradFill ) - { - NSCommon::smart_ptr fill = uni_fill->Fill.smart_dynamic_cast(); - - unsigned int nColor = 0; //black - _CP_OPT(double) opacity; - - if (!fill->GsLst.empty()) - { - Parse(oParam, fill->GsLst[0].color.Color.operator ->(), nColor, opacity); - } - } -} -std::wstring OOXShapeReader::ConvertPackageToStorage(const std::wstring & msPackage, const std::wstring & Program) -{ - DWORD size = 0; - BYTE* pData = NULL; - if (false == NSFile::CFileBinary::ReadAllBytes(msPackage, &pData, size)) - return L""; - - CFCPP::CompoundFile *pStorage = new CFCPP::CompoundFile(CFCPP::Ver_3, CFCPP::Default); - - std::shared_ptr oPackage = pStorage->RootStorage()->AddStream(L"Package"); - oPackage->Write((char*)pData, 0, size); - delete[]pData; -//CompObj - std::shared_ptr oCompObj = pStorage->RootStorage()->AddStream(L"\001CompObj"); - _INT64 position = 0; - - BYTE dataCompObjHeader[28] = { 0x01,0x00,0xfe,0xff,0x03,0x0a,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; - oCompObj->Write((char*)dataCompObjHeader, position, 24); position += 28; - - char last = 0; - - std::string name = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(Program); - XmlUtils::replace_all(name, ".", ""); - - //name = "Microsoft Excel Worksheet"; - _UINT32 name_size = name.length() + 1; - - oCompObj->Write((char*)&name_size, position, 4); position += 4; //AnsiUserType - oCompObj->Write((char*)name.c_str(), position, name.length()); position += name.length(); - oCompObj->Write(&last, position, 1); position += 1; - - //name = "ExcelML12"; - name_size = name.length() + 1; - - oCompObj->Write((char*)&name_size, position, 4); position += 4; //AnsiClipboardFormat - oCompObj->Write((char*)name.c_str(), position, name.length()); position += name.length(); - oCompObj->Write(&last, position, 1); position += 1; - - _INT32 tmp = 0; - oCompObj->Write((char*)&tmp, position, 4); position += 4; // Reserved - - tmp = 0x71B239F4; - oCompObj->Write((char*)&tmp, position, 4); position += 4; // UnicodeMarker - - tmp = 0; - oCompObj->Write((char*)&tmp, position, 4); position += 4; // UnicodeUserType - oCompObj->Write((char*)&tmp, position, 4); position += 4; // UnicodeClipboardFormat - oCompObj->Write((char*)&tmp, position, 4); position += 4; // Reserved - -//ObjInfo - char dataObjInfo[] = { 0x00,0x00,0x03,0x00,0x01,0x00 }; - std::shared_ptr oObjInfo = pStorage->RootStorage()->AddStream(L"\003ObjInfo"); - oObjInfo->Write(dataObjInfo, 0, 6); -//------------------------------------------------------------------------------------------------------------------------------- - std::wstring sFileStorage = NSDirectory::CreateTempFileWithUniqueName(NSFile::GetDirectoryName(msPackage), L"ole"); - pStorage->Save(sFileStorage); - pStorage->Close(); - delete pStorage; - - return sFileStorage; -} -void OOXShapeReader::ConvertOle2ToOle1(const std::wstring &oleFilePath, RtfOlePtr object) -{ - if (!object) return; - if (oleFilePath.empty()) return; - - Ole1FormatReaderWriter ole1Writer; - - ole1Writer.Header.ClassName.val = std::string(object->m_sOleClass.begin(), object->m_sOleClass.end()); - ole1Writer.Header.ClassName.size = ole1Writer.Header.ClassName.val.length() + 1; - - //ole1Writer.Header.Width = object->m_nWidth; - //ole1Writer.Header.Height = object->m_nHeight; - - DWORD size = 0; - if (false == NSFile::CFileBinary::ReadAllBytes(oleFilePath, &ole1Writer.NativeData, size)) - return; - ole1Writer.NativeDataSize = size; - - int ole1DataSize = ole1Writer.NativeDataSize + 2048; - BYTE* ole1Data = new BYTE[ole1DataSize]; - - if (ole1Data) - { - ole1Writer.Write(ole1Data, ole1DataSize); - - boost::shared_array buffer(ole1Data); - object->m_oOle1Data = std::make_pair(buffer, ole1DataSize); - } - delete []ole1Writer.NativeData; -} - -void OOXShapeReader::ConvertOle2ToOle1(POLE::Storage *storage, RtfOlePtr object) -{ - if (!object) return; - if (!storage) return; - - Ole1FormatReaderWriter ole1Writer; - - ole1Writer.Header.ClassName.val = std::string(object->m_sOleClass.begin(), object->m_sOleClass.end()); - ole1Writer.Header.ClassName.size = ole1Writer.Header.ClassName.val.length(); - - //ole1Writer.Header.Width = object->m_nWidth; - //ole1Writer.Header.Height = object->m_nHeight; - - std::list entries; - entries = storage->entries( L"/" ); - - for( std::list::iterator it = entries.begin(); it != entries.end(); ++it ) - { - std::wstring name = XmlUtils::GetLower(*it); - - if (std::wstring::npos != name.find(L"ole")) continue; - if (std::wstring::npos != name.find(L"compobj")) continue; - if (std::wstring::npos != name.find(L"objinfo")) continue; - - if (std::wstring::npos != name.find(L"native") || - std::wstring::npos != name.find(L"content") || - std::wstring::npos != name.find(L"package")) - { - POLE::Stream *stream = new POLE::Stream(storage, *it); - if (stream) - { - ole1Writer.NativeDataSize = (_UINT32)stream->size(); - - ole1Writer.NativeData = new unsigned char[ole1Writer.NativeDataSize]; - stream->read(ole1Writer.NativeData, ole1Writer.NativeDataSize); - delete stream; - - break; - } - } - } - - if (ole1Writer.NativeData) - { - int ole1DataSize = ole1Writer.NativeDataSize + 2048; - BYTE* ole1Data = new BYTE[ole1DataSize]; - - if (ole1Data) - { - ole1Writer.Write(ole1Data, ole1DataSize); - - boost::shared_array buffer(ole1Data); - object->m_oOle1Data = std::make_pair(buffer, ole1DataSize); - } - delete []ole1Writer.NativeData; - } -} diff --git a/RtfFile/OOXml/Reader/OOXShapeReader.h b/RtfFile/OOXml/Reader/OOXShapeReader.h index e7bb4bbc96..0c08c83923 100644 --- a/RtfFile/OOXml/Reader/OOXShapeReader.h +++ b/RtfFile/OOXml/Reader/OOXShapeReader.h @@ -30,6 +30,7 @@ * */ #pragma once + #include "OOXReaderBasic.h" #include "../../Format/RtfDocument.h" @@ -44,19 +45,13 @@ namespace OOX class CBackground; } } + class OOXShapeReader { public: - OOXShapeReader(OOX::Vml::CVmlCommonElements * vmlElem) - { - m_vmlElement = vmlElem; - m_arrElement = vmlElem; - } + OOXShapeReader(OOX::Vml::CVmlCommonElements * vmlElem); OOXShapeReader(OOX::WritingElementWithChilds * elem); - OOXShapeReader(OOX::WritingElement* ooxShape) - { - m_ooxShape = ooxShape; - } + OOXShapeReader(OOX::WritingElement* ooxShape); static bool WriteDataToPicture( std::wstring sPath, RtfPicture& pOutput, ReaderParameter& oParam ); @@ -70,6 +65,7 @@ public: static void Parse(ReaderParameter oParam, PPTX::Logic::ColorBase *oox_color, unsigned int & nColor, _CP_OPT(double) &opacity); static bool ParseVmlStyle(RtfShapePtr pShape, SimpleTypes::Vml::CCssProperty* prop); + private: void ParseVmlPath(RtfShapePtr& pShape, const std::wstring &custom_path); bool ParseVmlStyles(RtfShapePtr& pShape, std::vector & props); @@ -108,23 +104,11 @@ class OOXShapeGroupReader private: OOX::Vml::CGroup *m_vmlGroup = NULL; PPTX::Logic::SpTree *m_ooxGroup = NULL; + public: - OOXShapeGroupReader(OOX::Vml::CGroup *vmlGroup) - { - m_vmlGroup = vmlGroup; - } - OOXShapeGroupReader(PPTX::Logic::SpTree *ooxGroup) - { - m_ooxGroup = ooxGroup; - } - bool ParseVmlStyles(RtfShapePtr pGroupShape, std::vector & props) - { - for (size_t i = 0; i < props.size(); i++) - { - OOXShapeReader::ParseVmlStyle( pGroupShape, props[i].get()); - } - return true; - } + OOXShapeGroupReader(OOX::Vml::CGroup *vmlGroup); + OOXShapeGroupReader(PPTX::Logic::SpTree *ooxGroup); + bool ParseVmlStyles(RtfShapePtr pGroupShape, std::vector & props); bool Parse( ReaderParameter oParam , RtfShapePtr& oOutput); }; @@ -133,6 +117,7 @@ class OOXBackgroundReader { private: OOX::Logic::CBackground *m_ooxBackground = NULL; + public: OOXBackgroundReader(OOX::Logic::CBackground *oox_background); diff --git a/RtfFile/OOXml/Reader/OOXStyleReader.cpp b/RtfFile/OOXml/Reader/OOXStyleReader.cpp index a7ec2aafea..8265d09cb4 100644 --- a/RtfFile/OOXml/Reader/OOXStyleReader.cpp +++ b/RtfFile/OOXml/Reader/OOXStyleReader.cpp @@ -30,6 +30,10 @@ * */ +#include "OOXtblPrReader.h" +#include "OOXtcPrReader.h" +#include "OOXrPrReader.h" + #include "OOXStyleReader.h" OOXStyleReader::OOXStyleReader(OOX::CStyle *ooxStyle) diff --git a/RtfFile/OOXml/Reader/OOXStyleReader.h b/RtfFile/OOXml/Reader/OOXStyleReader.h index 8c486d28c4..3be10ba2a2 100644 --- a/RtfFile/OOXml/Reader/OOXStyleReader.h +++ b/RtfFile/OOXml/Reader/OOXStyleReader.h @@ -30,11 +30,9 @@ * */ #pragma once -#include "OOXpPrReader.h" -#include "OOXrPrReader.h" -#include "OOXtblPrReader.h" + #include "OOXtrPrReader.h" -#include "OOXtcPrReader.h" +#include "OOXpPrReader.h" class OOXStyleReader { diff --git a/RtfFile/OOXml/Reader/OOXStyleTableReader.cpp b/RtfFile/OOXml/Reader/OOXStyleTableReader.cpp index 27cbd57075..4ab7f471d8 100644 --- a/RtfFile/OOXml/Reader/OOXStyleTableReader.cpp +++ b/RtfFile/OOXml/Reader/OOXStyleTableReader.cpp @@ -30,6 +30,9 @@ * */ +#include "OOXDocDefaultsReader.h" +#include "OOXStyleReader.h" + #include "OOXStyleTableReader.h" OOXStyleTableReader::OOXStyleTableReader(OOX::CStyles* ooxStyles) diff --git a/RtfFile/OOXml/Reader/OOXStyleTableReader.h b/RtfFile/OOXml/Reader/OOXStyleTableReader.h index ef374f67d4..37e632501b 100644 --- a/RtfFile/OOXml/Reader/OOXStyleTableReader.h +++ b/RtfFile/OOXml/Reader/OOXStyleTableReader.h @@ -30,8 +30,6 @@ * */ #pragma once -#include "OOXStyleReader.h" -#include "OOXDocDefaultsReader.h" #include "../../../OOXML/DocxFormat/Styles.h" diff --git a/RtfFile/OOXml/Reader/OOXTableCellReader.h b/RtfFile/OOXml/Reader/OOXTableCellReader.h index 596cd34e49..ceb7b4ce3b 100644 --- a/RtfFile/OOXml/Reader/OOXTableCellReader.h +++ b/RtfFile/OOXml/Reader/OOXTableCellReader.h @@ -31,10 +31,7 @@ */ #pragma once -#include "OOXTableReader.h" -#include "OOXParagraphReader.h" #include "OOXtcPrReader.h" - #include "../../Format/RtfDocument.h" #include "../../Format/RtfTable.h" @@ -52,7 +49,8 @@ class OOXTableCellReader private: OOX::Logic::CTc *m_ooxTableCell; OOX::Logic::CTableProperty *m_ooxTableProps; + public: OOXTableCellReader(OOX::Logic::CTc *ooxTableCell, OOX::Logic::CTableProperty* ooxTableProps); - bool Parse( ReaderParameter oParam ,RtfTableCell& oOutputCell, CcnfStyle oConditionalTableStyle, int nCurCell, int nCellCount, int nCurRow, int nRowCount ); + bool Parse( ReaderParameter oParam, RtfTableCell& oOutputCell, CcnfStyle oConditionalTableStyle, int nCurCell, int nCellCount, int nCurRow, int nRowCount ); }; diff --git a/RtfFile/OOXml/Reader/OOXTableReader.cpp b/RtfFile/OOXml/Reader/OOXTableReader.cpp index 15678009a4..222c461d09 100644 --- a/RtfFile/OOXml/Reader/OOXTableReader.cpp +++ b/RtfFile/OOXml/Reader/OOXTableReader.cpp @@ -32,10 +32,15 @@ #include "OOXtblPrReader.h" #include "OOXTableRowReader.h" #include "OOXTableReader.h" +#include "OOXParagraphReader.h" #include "../../../OOXML/DocxFormat/Logic/Table.h" #include "../../../OOXML/DocxFormat/Logic/Paragraph.h" +OOXtrPrReader::OOXtrPrReader(OOX::Logic::CTableRowProperties* ooxTableRowProps) +{ + m_ooxTableRowProps = ooxTableRowProps; +} bool OOXtrPrReader::Parse( ReaderParameter oParam , RtfRowProperty& oOutputProperty, CcnfStyle& oConditionalTableStyle) { if (m_ooxTableRowProps == NULL) return false; @@ -116,6 +121,10 @@ bool OOXtrPrReader::Parse( ReaderParameter oParam , RtfRowProperty& oOutputPrope return true; } +OOXTableReader::OOXTableReader(OOX::Logic::CTbl *ooxTable) +{ + m_ooxTable = ooxTable; +} bool OOXTableReader::Parse( ReaderParameter oParam, RtfTable& oOutputTable ) { if (m_ooxTable == NULL) return false; @@ -219,12 +228,12 @@ void OOXTableReader::ApplyParagraphProperty( RtfTable& oOutputTable ) } } } + OOXTableRowReader::OOXTableRowReader(OOX::Logic::CTr *ooxRowTable, OOX::Logic::CTableProperty* ooxTableProps) { m_ooxRowTable = ooxRowTable; m_ooxTableProps = ooxTableProps; } - bool OOXTableRowReader::Parse( ReaderParameter oParam, RtfTableRow& oOutputRow, int nCurRow, int nRowCount) { if (m_ooxRowTable == NULL) return false; diff --git a/RtfFile/OOXml/Reader/OOXTableReader.h b/RtfFile/OOXml/Reader/OOXTableReader.h index 5924ec511e..0cb66a3c9d 100644 --- a/RtfFile/OOXml/Reader/OOXTableReader.h +++ b/RtfFile/OOXml/Reader/OOXTableReader.h @@ -48,10 +48,8 @@ private: OOX::Logic::CTbl *m_ooxTable; public: - OOXTableReader(OOX::Logic::CTbl *ooxTable) - { - m_ooxTable = ooxTable; - } - bool Parse( ReaderParameter oParam ,RtfTable & oOutputTable ); + OOXTableReader(OOX::Logic::CTbl *ooxTable); + + bool Parse( ReaderParameter oParam, RtfTable & oOutputTable ); void ApplyParagraphProperty( RtfTable& oOutputTable ); }; diff --git a/RtfFile/OOXml/Reader/OOXTableRowReader.h b/RtfFile/OOXml/Reader/OOXTableRowReader.h index 0a67b20e8e..f50ed9a5f3 100644 --- a/RtfFile/OOXml/Reader/OOXTableRowReader.h +++ b/RtfFile/OOXml/Reader/OOXTableRowReader.h @@ -42,16 +42,18 @@ namespace OOX namespace Logic { class CTr; - class CTableProperty; + class CTableProperty; } } + class OOXTableRowReader { private: OOX::Logic::CTr *m_ooxRowTable; OOX::Logic::CTableProperty *m_ooxTableProps; + public: OOXTableRowReader(OOX::Logic::CTr *ooxRowTable, OOX::Logic::CTableProperty* ooxTableProps); - bool Parse( ReaderParameter oParam ,RtfTableRow& oOutputRow, int nCurRow, int nRowCount); + bool Parse( ReaderParameter oParam, RtfTableRow& oOutputRow, int nCurRow, int nRowCount); }; diff --git a/RtfFile/OOXml/Reader/OOXTextItemReader.h b/RtfFile/OOXml/Reader/OOXTextItemReader.h index 7d94397d30..e2d8f63881 100644 --- a/RtfFile/OOXml/Reader/OOXTextItemReader.h +++ b/RtfFile/OOXml/Reader/OOXTextItemReader.h @@ -40,5 +40,6 @@ public: TextItemContainerPtr m_oTextItems; OOXTextItemReader(); + bool Parse(OOX::WritingElement* ooxElement, ReaderParameter oParam); }; diff --git a/RtfFile/OOXml/Reader/OOXThemeReader.h b/RtfFile/OOXml/Reader/OOXThemeReader.h index 405be5ec7b..c8c9812505 100644 --- a/RtfFile/OOXml/Reader/OOXThemeReader.h +++ b/RtfFile/OOXml/Reader/OOXThemeReader.h @@ -30,9 +30,9 @@ * */ #pragma once + #include "OOXColorSchemeReader.h" #include "OOXFontSchemeReader.h" -#include "../../Format/Utils.h" class OOXThemeReader { diff --git a/RtfFile/OOXml/Reader/OOXcnfStyleReader.h b/RtfFile/OOXml/Reader/OOXcnfStyleReader.h index 5eb3aa1b94..14f0a9a5b0 100644 --- a/RtfFile/OOXml/Reader/OOXcnfStyleReader.h +++ b/RtfFile/OOXml/Reader/OOXcnfStyleReader.h @@ -34,7 +34,6 @@ #include "../../Format/RtfProperty.h" #include "../../Format/RtfTableCell.h" -#include "OOXReaderBasic.h" #include "OOXtblLookReader.h" class CcnfStyle diff --git a/RtfFile/OOXml/Reader/OOXpPrFrameReader.h b/RtfFile/OOXml/Reader/OOXpPrFrameReader.h index 31eb2bab0f..23d31626b9 100644 --- a/RtfFile/OOXml/Reader/OOXpPrFrameReader.h +++ b/RtfFile/OOXml/Reader/OOXpPrFrameReader.h @@ -30,19 +30,17 @@ * */ #pragma once -#include "OOXReaderBasic.h" -#include "../../Format/RtfProperty.h" +#include "OOXReaderBasic.h" #include "../../../OOXML/DocxFormat/Logic/ParagraphProperty.h" class OOXpPrFrameReader { private: ComplexTypes::Word::CFramePr *m_ooxFramePr; + public: - OOXpPrFrameReader(ComplexTypes::Word::CFramePr *ooxFramePr) - { - m_ooxFramePr = ooxFramePr; - } - bool Parse( ReaderParameter oParam ,RtfFrame& oOutputProperty); + OOXpPrFrameReader(ComplexTypes::Word::CFramePr *ooxFramePr); + + bool Parse( ReaderParameter oParam, RtfFrame& oOutputProperty); }; diff --git a/RtfFile/OOXml/Reader/OOXpPrReader.h b/RtfFile/OOXml/Reader/OOXpPrReader.h index e4d7fff86d..a930861a18 100644 --- a/RtfFile/OOXml/Reader/OOXpPrReader.h +++ b/RtfFile/OOXml/Reader/OOXpPrReader.h @@ -33,7 +33,7 @@ #include "OOXShadingReader.h" #include "OOXBorderReader.h" -#include "OOXReaderBasic.h" + #include "OOXcnfStyleReader.h" #include "OOXrPrReader.h" #include "OOXSectionPropertyReader.h" @@ -48,20 +48,12 @@ private: PPTX::Logic::TextParagraphPr * m_drawingParaProps; OOX::Logic::CParagraphProperty * m_ooxParaProps; + public: bool m_bDefStyle; - OOXpPrReader(OOX::Logic::CParagraphProperty *ooxParaProps) - { - m_bDefStyle = true; - m_ooxParaProps = ooxParaProps; - m_drawingParaProps = NULL; - } - OOXpPrReader(PPTX::Logic::TextParagraphPr *ooxParaProps) - { - m_bDefStyle = true; - m_ooxParaProps = NULL; - m_drawingParaProps = ooxParaProps; - } - bool Parse( ReaderParameter oParam ,RtfParagraphProperty& oOutputProperty, CcnfStyle& oConditionalTableStyle); + OOXpPrReader(OOX::Logic::CParagraphProperty *ooxParaProps); + OOXpPrReader(PPTX::Logic::TextParagraphPr *ooxParaProps); + + bool Parse( ReaderParameter oParam, RtfParagraphProperty& oOutputProperty, CcnfStyle& oConditionalTableStyle); }; diff --git a/RtfFile/OOXml/Reader/OOXpPrTabReader.h b/RtfFile/OOXml/Reader/OOXpPrTabReader.h index fcb114d892..520b7a9291 100644 --- a/RtfFile/OOXml/Reader/OOXpPrTabReader.h +++ b/RtfFile/OOXml/Reader/OOXpPrTabReader.h @@ -29,10 +29,10 @@ * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode * */ + #pragma once #include "OOXReaderBasic.h" -#include "../../Format/RtfProperty.h" #include "../../../OOXML/DocxFormat/Logic/ParagraphProperty.h" class OOXpPrTabReader diff --git a/RtfFile/OOXml/Reader/OOXrPrReader.h b/RtfFile/OOXml/Reader/OOXrPrReader.h index 3e1f350fd3..58729e4399 100644 --- a/RtfFile/OOXml/Reader/OOXrPrReader.h +++ b/RtfFile/OOXml/Reader/OOXrPrReader.h @@ -32,12 +32,8 @@ #pragma once #include "OOXFontReader.h" -#include "OOXReaderBasic.h" #include "OOXColorReader.h" -#include "OOXShadingReader.h" -#include "OOXBorderReader.h" -#include "../../Format/RtfDocument.h" #include "../../Format/RtfProperty.h" class OOXrPrReader @@ -47,20 +43,12 @@ private: PPTX::Logic::RunProperties * m_drawingRunProps; OOX::Logic::CRunProperty * m_ooxRunProps; + public: bool m_bDefStyle; - OOXrPrReader(OOX::Logic::CRunProperty *ooxRunProps) - { - m_bDefStyle = true; - m_ooxRunProps = ooxRunProps; - m_drawingRunProps = NULL; - } - OOXrPrReader(PPTX::Logic::RunProperties *ooxRunProps) - { - m_bDefStyle = true; - m_ooxRunProps = NULL; - m_drawingRunProps = ooxRunProps; - } - bool Parse( ReaderParameter oParam ,RtfCharProperty& oOutputProperty); + OOXrPrReader(OOX::Logic::CRunProperty *ooxRunProps); + OOXrPrReader(PPTX::Logic::RunProperties *ooxRunProps); + + bool Parse( ReaderParameter oParam, RtfCharProperty& oOutputProperty); }; diff --git a/RtfFile/OOXml/Reader/OOXtblLookReader.h b/RtfFile/OOXml/Reader/OOXtblLookReader.h index 4ebd72b44c..65e224c7a6 100644 --- a/RtfFile/OOXml/Reader/OOXtblLookReader.h +++ b/RtfFile/OOXml/Reader/OOXtblLookReader.h @@ -31,9 +31,7 @@ */ #pragma once -#include "../../Format/RtfProperty.h" #include "OOXReaderBasic.h" - #include "../../../OOXML/DocxFormat/Logic/TableProperty.h" struct CtblLook diff --git a/RtfFile/OOXml/Reader/OOXtblPrReader.cpp b/RtfFile/OOXml/Reader/OOXtblPrReader.cpp index 37ca43931e..5bd71bfef0 100644 --- a/RtfFile/OOXml/Reader/OOXtblPrReader.cpp +++ b/RtfFile/OOXml/Reader/OOXtblPrReader.cpp @@ -30,6 +30,13 @@ * */ +#include "OOXReader.h" +#include "OOXBorderReader.h" +#include "OOXShadingReader.h" +#include "OOXtblpPrReader.h" +#include "OOXtblLookReader.h" +#include "OOXtcPrReader.h" + #include "OOXtblPrReader.h" OOXtblPrReader::OOXtblPrReader(OOX::Logic::CTableProperty* ooxTableProps) diff --git a/RtfFile/OOXml/Reader/OOXtblPrReader.h b/RtfFile/OOXml/Reader/OOXtblPrReader.h index 6e8f1590b7..6a248c53c2 100644 --- a/RtfFile/OOXml/Reader/OOXtblPrReader.h +++ b/RtfFile/OOXml/Reader/OOXtblPrReader.h @@ -31,14 +31,7 @@ */ #pragma once -#include "OOXReader.h" -#include "OOXBorderReader.h" -#include "OOXShadingReader.h" -#include "OOXtblpPrReader.h" #include "OOXReaderBasic.h" -#include "OOXtblLookReader.h" -#include "OOXtcPrReader.h" - #include "../../Format/RtfDocument.h" #include "../../../OOXML/DocxFormat/Logic/TableProperty.h" diff --git a/RtfFile/OOXml/Reader/OOXtblpPrReader.h b/RtfFile/OOXml/Reader/OOXtblpPrReader.h index d86e5e73af..ba92700fcc 100644 --- a/RtfFile/OOXml/Reader/OOXtblpPrReader.h +++ b/RtfFile/OOXml/Reader/OOXtblpPrReader.h @@ -33,7 +33,6 @@ #include "OOXReader.h" #include "OOXReaderBasic.h" -#include "../../Format/RtfDocument.h" class OOXtblpPrReader { diff --git a/RtfFile/OOXml/Reader/OOXtcPrReader.h b/RtfFile/OOXml/Reader/OOXtcPrReader.h index e8da8da877..ad24eaf856 100644 --- a/RtfFile/OOXml/Reader/OOXtcPrReader.h +++ b/RtfFile/OOXml/Reader/OOXtcPrReader.h @@ -30,8 +30,8 @@ * */ #pragma once -#include "../../Format/RtfDocument.h" +#include "../../Format/RtfDocument.h" #include "OOXBorderReader.h" #include "OOXcnfStyleReader.h" @@ -43,7 +43,7 @@ class OOXtcPrReader public: OOXtcPrReader(OOX::Logic::CTableCellProperties* ooxTableCellProps, OOX::Logic::CTableProperty* ooxTableProps); - bool Parse( ReaderParameter oParam ,RtfCellProperty& oOutputProperty, CcnfStyle& oConditionalTableStyle, int nCurCell, int nCellCount, int nCurRow, int nRowCount ); + bool Parse( ReaderParameter oParam, RtfCellProperty& oOutputProperty, CcnfStyle& oConditionalTableStyle, int nCurCell, int nCellCount, int nCurRow, int nRowCount ); static void Parse(ComplexTypes::Word::CTblWidth* margin, int& type, int& value, bool full = true ); }; diff --git a/RtfFile/OOXml/Reader/OOXtrPrReader.h b/RtfFile/OOXml/Reader/OOXtrPrReader.h index 3f504afe57..0ea6010c30 100644 --- a/RtfFile/OOXml/Reader/OOXtrPrReader.h +++ b/RtfFile/OOXml/Reader/OOXtrPrReader.h @@ -30,21 +30,17 @@ * */ #pragma once -#include "OOXReader.h" + #include "OOXReaderBasic.h" #include "OOXcnfStyleReader.h" -#include "../../Format/RtfDocument.h" - class OOXtrPrReader { private: OOX::Logic::CTableRowProperties* m_ooxTableRowProps; + public: - OOXtrPrReader(OOX::Logic::CTableRowProperties* ooxTableRowProps) - { - m_ooxTableRowProps = ooxTableRowProps; - } + OOXtrPrReader(OOX::Logic::CTableRowProperties* ooxTableRowProps); bool Parse( ReaderParameter oParam , RtfRowProperty& oOutputProperty, CcnfStyle& oConditionalTableStyle); }; diff --git a/RtfFile/Projects/Linux/RtfFormatLib.pro b/RtfFile/Projects/Linux/RtfFormatLib.pro index 373bf815ff..d9bf20f68c 100644 --- a/RtfFile/Projects/Linux/RtfFormatLib.pro +++ b/RtfFile/Projects/Linux/RtfFormatLib.pro @@ -149,7 +149,6 @@ HEADERS += \ ../../OOXml/Reader/OOXColorReader.h \ ../../OOXml/Reader/OOXColorReader2.h \ ../../OOXml/Reader/OOXColorSchemeReader.h \ - ../../OOXml/Reader/OOXContentTypeReader.h \ ../../OOXml/Reader/OOXCoreReader.h \ ../../OOXml/Reader/OOXDocDefaultsReader.h \ ../../OOXml/Reader/OOXDocumentReader.h \