diff --git a/ASCOfficePPTXFile/ASCOfficeDrawingConverter.cpp b/ASCOfficePPTXFile/ASCOfficeDrawingConverter.cpp index 0d61950d96a..7c897eef7b4 100644 --- a/ASCOfficePPTXFile/ASCOfficeDrawingConverter.cpp +++ b/ASCOfficePPTXFile/ASCOfficeDrawingConverter.cpp @@ -59,7 +59,6 @@ const double g_emu_koef = 25.4 * 36000 / 72.0; -using namespace NSGuidesVML; void DUMP_MESSAGE_TO_FILE(const char* strMessage) { @@ -853,6 +852,10 @@ bool CElementProps::CopyProperty(ASC_VARIANT& oDst, const ASC_VARIANT& oSrc) } return true; } + +namespace NSBinPptxRW +{ + CDrawingConverter::CElement::CElement() { m_pElement = NULL; @@ -2864,6 +2867,8 @@ void CDrawingConverter::doc_LoadShape(PPTX::Logic::SpTreeElem *elem, XmlUtils::C CheckPenShape(elem, oNodeShape, pPPTShape); CheckBrushShape(elem, oNodeShape, pPPTShape); + + CheckBorderShape(elem, oNodeShape, pPPTShape); } } @@ -3914,6 +3919,84 @@ void CDrawingConverter::SendMainProps(const std::wstring& strMainProps, std::wst *pMainProps = new std::wstring(); **pMainProps = strMainProps; } +void CDrawingConverter::CheckBorderShape(PPTX::Logic::SpTreeElem* oElem, XmlUtils::CXmlNode& oNode, CPPTShape* pPPTShape) +{ + if (!oElem) return; + + PPTX::Logic::Shape* pShape = dynamic_cast (oElem->GetElem().operator ->()); + PPTX::Logic::Pic* pPicture = dynamic_cast (oElem->GetElem().operator ->()); + + PPTX::Logic::SpPr *pSpPr = NULL; + + if (pShape) pSpPr = &pShape->spPr; + if (pPicture) pSpPr = &pPicture->spPr; + + if (!pSpPr) return; + + if ( (pSpPr->ln.IsInit()) && (pSpPr->ln->Fill.m_type != PPTX::Logic::UniFill::noFill) ) + return; //дублирование обрамлением линией + + nullable_string sColorBorder; + oNode.ReadAttributeBase(L"o:borderleftcolor", sColorBorder); + + XmlUtils::CXmlNode oNodeBorder = oNode.ReadNode(L"w10:borderleft"); + + if (oNodeBorder.IsValid()) + { + pSpPr->ln.Init(); + nullable_int nWidthBorder; + oNode.ReadAttributeBase(L"width", nWidthBorder); + + nullable_string sTypeBorder; + oNode.ReadAttributeBase(L"type", sTypeBorder); + + if (sTypeBorder.IsInit()) + { + SimpleTypes::CBorderType<> borderType; + borderType.FromString(sTypeBorder.get()); + + if (borderType.GetValue() > 0 && + borderType.GetValue() < 6) + { + pSpPr->ln->prstDash.Init(); + pSpPr->ln->prstDash->val = new PPTX::Limit::PrstDashVal(); + switch(borderType.GetValue()) + { + case SimpleTypes::bordertypeDash: pSpPr->ln->prstDash->val->SetBYTECode(3); break; + case SimpleTypes::bordertypeDashDotDot: pSpPr->ln->prstDash->val->SetBYTECode(5); break; + case SimpleTypes::bordertypeDashDotStroked: pSpPr->ln->prstDash->val->SetBYTECode(1); break; + case SimpleTypes::bordertypeDashedSmall: pSpPr->ln->prstDash->val->SetBYTECode(0); break; + case SimpleTypes::bordertypeDot: pSpPr->ln->prstDash->val->SetBYTECode(2); break; + case SimpleTypes::bordertypeDotDash: pSpPr->ln->prstDash->val->SetBYTECode(1); break; + } + } + + } + if (nWidthBorder.IsInit()) + { + pSpPr->ln->w = *nWidthBorder * g_emu_koef;//pt to emu + } + if (sColorBorder.IsInit()) + { + PPTX::Logic::SolidFill* pSolid = new PPTX::Logic::SolidFill(); + pSolid->m_namespace = L"a"; + pSolid->Color.Color = new PPTX::Logic::SrgbClr(); + + if (std::wstring::npos != sColorBorder->find(L"#")) + { + pSolid->Color.Color->SetHexString(sColorBorder->substr(1)); + } + else + { + //"red", L"black" , .. to color + } + + pSpPr->ln->Fill.m_type = PPTX::Logic::UniFill::solidFill; + pSpPr->ln->Fill.Fill = pSolid; + + } + } +} void CDrawingConverter::CheckBrushShape(PPTX::Logic::SpTreeElem* oElem, XmlUtils::CXmlNode& oNode, CPPTShape* pPPTShape) { @@ -5572,3 +5655,4 @@ void CDrawingConverter::SetFontManager(CFontManager* pFontManager) m_pBinaryWriter->m_pCommon->m_pMediaManager->SetFontManager(pFontManager); } } +} \ No newline at end of file diff --git a/ASCOfficePPTXFile/ASCOfficeDrawingConverter.h b/ASCOfficePPTXFile/ASCOfficeDrawingConverter.h index 4cc92aad3a5..ef678719b5a 100644 --- a/ASCOfficePPTXFile/ASCOfficeDrawingConverter.h +++ b/ASCOfficePPTXFile/ASCOfficeDrawingConverter.h @@ -279,6 +279,7 @@ namespace NSBinPptxRW void CheckBrushShape (PPTX::Logic::SpTreeElem* oElem, XmlUtils::CXmlNode& oNode, CPPTShape* pPPTShape); void CheckPenShape (PPTX::Logic::SpTreeElem* oElem, XmlUtils::CXmlNode& oNode, CPPTShape* pPPTShape); + void CheckBorderShape (PPTX::Logic::SpTreeElem* oElem, XmlUtils::CXmlNode& oNode, CPPTShape* pPPTShape); void LoadCoordSize (XmlUtils::CXmlNode& oNode, ::CShapePtr pShape); void LoadCoordPos (XmlUtils::CXmlNode& oNode, ::CShapePtr pShape); diff --git a/ASCOfficePPTXFile/Editor/Converter.h b/ASCOfficePPTXFile/Editor/Converter.h index fc36377cff4..7b7ac4b08db 100644 --- a/ASCOfficePPTXFile/Editor/Converter.h +++ b/ASCOfficePPTXFile/Editor/Converter.h @@ -36,8 +36,6 @@ namespace PPTX2EditorAdvanced { - using namespace NSBinPptxRW; - DWORD Convert(NSBinPptxRW::CBinaryFileWriter& oBinaryWriter, PPTX::Document& oFolder, const std::wstring& strSourceDirectory, const std::wstring& strDstFile, bool bIsNoBase64) { // сначала соберем все объекты для конвертации и сформируем main-таблицы @@ -74,8 +72,8 @@ namespace PPTX2EditorAdvanced continue; } - oBinaryWriter.m_pCommon->m_oRels.push_back (_masterSlideInfo()); - _masterSlideInfo& oMasterInfo = oBinaryWriter.m_pCommon->m_oRels[oBinaryWriter.m_pCommon->m_oRels.size() - 1]; + oBinaryWriter.m_pCommon->m_oRels.push_back (NSBinPptxRW::_masterSlideInfo()); + NSBinPptxRW::_masterSlideInfo& oMasterInfo = oBinaryWriter.m_pCommon->m_oRels[oBinaryWriter.m_pCommon->m_oRels.size() - 1]; // записываем mainMaster LONG lCountSM = (LONG)_slideMasters.size(); @@ -232,7 +230,7 @@ namespace PPTX2EditorAdvanced if (bIsNoBase64) { - std::wstring strPrefix = L"PPTY;v"+std::to_wstring(g_nFormatVersionNoBase64)+L";0;"; + std::wstring strPrefix = L"PPTY;v"+std::to_wstring(NSBinPptxRW::g_nFormatVersionNoBase64)+L";0;"; oBinaryWriter.WriteStringUtf8(strPrefix); } _UINT32 nStartPos = oBinaryWriter.GetPosition(); @@ -242,15 +240,15 @@ namespace PPTX2EditorAdvanced oBinaryWriter.WriteReserved(5 * 30); // Main - oBinaryWriter.StartMainRecord(NSMainTables::Main); - oBinaryWriter.WriteULONG(NSSerFormat::Signature); + oBinaryWriter.StartMainRecord(NSBinPptxRW::NSMainTables::Main); + oBinaryWriter.WriteULONG(NSBinPptxRW::NSSerFormat::Signature); oBinaryWriter.WriteULONG(0); // App smart_ptr app = oFolder.Get(OOX::FileTypes::App).smart_dynamic_cast(); if (app.is_init()) { - oBinaryWriter.StartMainRecord(NSMainTables::App); + oBinaryWriter.StartMainRecord(NSBinPptxRW::NSMainTables::App); app->toPPTY(&oBinaryWriter); } @@ -258,7 +256,7 @@ namespace PPTX2EditorAdvanced smart_ptr core = oFolder.Get(OOX::FileTypes::Core).smart_dynamic_cast(); if (core.is_init()) { - oBinaryWriter.StartMainRecord(NSMainTables::Core); + oBinaryWriter.StartMainRecord(NSBinPptxRW::NSMainTables::Core); core->toPPTY(&oBinaryWriter); } @@ -266,7 +264,7 @@ namespace PPTX2EditorAdvanced smart_ptr presProps = presentation->Get(OOX::Presentation::FileTypes::PresProps).smart_dynamic_cast(); if (presProps.is_init()) { - oBinaryWriter.StartMainRecord(NSMainTables::PresProps); + oBinaryWriter.StartMainRecord(NSBinPptxRW::NSMainTables::PresProps); presProps->toPPTY(&oBinaryWriter); } @@ -274,7 +272,7 @@ namespace PPTX2EditorAdvanced smart_ptr viewProps = presentation->Get(OOX::Presentation::FileTypes::ViewProps).smart_dynamic_cast(); if (viewProps.is_init()) { - oBinaryWriter.StartMainRecord(NSMainTables::ViewProps); + oBinaryWriter.StartMainRecord(NSBinPptxRW::NSMainTables::ViewProps); viewProps->toPPTY(&oBinaryWriter); } @@ -282,16 +280,16 @@ namespace PPTX2EditorAdvanced smart_ptr tablestyles = presentation->Get(OOX::Presentation::FileTypes::TableStyles).smart_dynamic_cast(); if (tablestyles.is_init()) { - oBinaryWriter.StartMainRecord(NSMainTables::TableStyles); + oBinaryWriter.StartMainRecord(NSBinPptxRW::NSMainTables::TableStyles); tablestyles->toPPTY(&oBinaryWriter); } // Presentation - oBinaryWriter.StartMainRecord(NSMainTables::Presentation); + oBinaryWriter.StartMainRecord(NSBinPptxRW::NSMainTables::Presentation); presentation->toPPTY(&oBinaryWriter); // themes - oBinaryWriter.StartMainRecord(NSMainTables::Themes); + oBinaryWriter.StartMainRecord(NSBinPptxRW::NSMainTables::Themes); ULONG nCountThemes = 0; for (size_t i = 0; i < _themes.size(); ++i) @@ -307,7 +305,7 @@ namespace PPTX2EditorAdvanced } // slidemasters - oBinaryWriter.StartMainRecord(NSMainTables::SlideMasters); + oBinaryWriter.StartMainRecord(NSBinPptxRW::NSMainTables::SlideMasters); ULONG nCountSM = 0; for (size_t i = 0; i < _slideMasters.size(); ++i) @@ -324,7 +322,7 @@ namespace PPTX2EditorAdvanced } // slidelayouts - oBinaryWriter.StartMainRecord(NSMainTables::SlideLayouts); + oBinaryWriter.StartMainRecord(NSBinPptxRW::NSMainTables::SlideLayouts); ULONG nCountL = 0; for (size_t i = 0; i < _layouts.size(); ++i) @@ -341,7 +339,7 @@ namespace PPTX2EditorAdvanced } // slides - oBinaryWriter.StartMainRecord(NSMainTables::Slides); + oBinaryWriter.StartMainRecord(NSBinPptxRW::NSMainTables::Slides); ULONG nCountS = 0; for (size_t i = 0; i < _slides.size(); ++i) @@ -358,7 +356,7 @@ namespace PPTX2EditorAdvanced } // notes - oBinaryWriter.StartMainRecord(NSMainTables::NotesSlides); + oBinaryWriter.StartMainRecord(NSBinPptxRW::NSMainTables::NotesSlides); ULONG nCountN = (ULONG)_notes.size(); oBinaryWriter.WriteULONG(nCountN); for (ULONG i = 0; i < nCountN; ++i) @@ -367,7 +365,7 @@ namespace PPTX2EditorAdvanced } // notesmasters - oBinaryWriter.StartMainRecord(NSMainTables::NotesMasters); + oBinaryWriter.StartMainRecord(NSBinPptxRW::NSMainTables::NotesMasters); ULONG nCountNM = (ULONG)_notesMasters.size(); oBinaryWriter.WriteULONG(nCountNM); for (ULONG i = 0; i < nCountNM; ++i) @@ -376,8 +374,8 @@ namespace PPTX2EditorAdvanced } // ImageMap --------------------------------------- - oBinaryWriter.StartMainRecord(NSMainTables::ImageMap); - oBinaryWriter.StartRecord(NSMainTables::ImageMap); + oBinaryWriter.StartMainRecord(NSBinPptxRW::NSMainTables::ImageMap); + oBinaryWriter.StartRecord(NSBinPptxRW::NSMainTables::ImageMap); oBinaryWriter.WriteBYTE(NSBinPptxRW::g_nodeAttributeStart); std::map* pIMaps = &oBinaryWriter.m_pCommon->m_pMediaManager->m_mapMediaFiles; @@ -396,8 +394,8 @@ namespace PPTX2EditorAdvanced // ------------------------------------------------ // FontMap ---------------------------------------- - oBinaryWriter.StartMainRecord(NSMainTables::FontMap); - oBinaryWriter.StartRecord(NSMainTables::FontMap); + oBinaryWriter.StartMainRecord(NSBinPptxRW::NSMainTables::FontMap); + oBinaryWriter.StartRecord(NSBinPptxRW::NSMainTables::FontMap); oBinaryWriter.WriteBYTE(NSBinPptxRW::g_nodeAttributeStart); std::map* pFMaps = &oBinaryWriter.m_pCommon->m_pNativePicker->m_mapPicks; @@ -417,8 +415,8 @@ namespace PPTX2EditorAdvanced if (TRUE) { // SlideRels -------------------------------------- - oBinaryWriter.StartMainRecord(NSMainTables::SlideRels); - oBinaryWriter.StartRecord(NSMainTables::SlideRels); + oBinaryWriter.StartMainRecord(NSBinPptxRW::NSMainTables::SlideRels); + oBinaryWriter.StartRecord(NSBinPptxRW::NSMainTables::SlideRels); oBinaryWriter.WriteBYTE(NSBinPptxRW::g_nodeAttributeStart); size_t _s_rels = oBinaryWriter.m_pCommon->m_oSlide_Layout_Rels.size(); @@ -432,8 +430,8 @@ namespace PPTX2EditorAdvanced // ------------------------------------------------ // SlideNotesRels -------------------------------------- - oBinaryWriter.StartMainRecord(NSMainTables::SlideNotesRels); - oBinaryWriter.StartRecord(NSMainTables::SlideNotesRels); + oBinaryWriter.StartMainRecord(NSBinPptxRW::NSMainTables::SlideNotesRels); + oBinaryWriter.StartRecord(NSBinPptxRW::NSMainTables::SlideNotesRels); oBinaryWriter.WriteBYTE(NSBinPptxRW::g_nodeAttributeStart); _s_rels = oBinaryWriter.m_pCommon->m_oSlide_Notes_Rels.size(); @@ -447,8 +445,8 @@ namespace PPTX2EditorAdvanced // ------------------------------------------------ // ThemeRels -------------------------------------- - oBinaryWriter.StartMainRecord(NSMainTables::ThemeRels); - oBinaryWriter.StartRecord(NSMainTables::ThemeRels); + oBinaryWriter.StartMainRecord(NSBinPptxRW::NSMainTables::ThemeRels); + oBinaryWriter.StartRecord(NSBinPptxRW::NSMainTables::ThemeRels); std::vector & th_rels = oBinaryWriter.m_pCommon->m_oRels; oBinaryWriter.WriteULONG((ULONG)th_rels.size()); @@ -486,8 +484,8 @@ namespace PPTX2EditorAdvanced // ------------------------------------------------ // NoteRels -------------------------------------- - oBinaryWriter.StartMainRecord(NSMainTables::NotesRels); - oBinaryWriter.StartRecord(NSMainTables::NotesRels); + oBinaryWriter.StartMainRecord(NSBinPptxRW::NSMainTables::NotesRels); + oBinaryWriter.StartRecord(NSBinPptxRW::NSMainTables::NotesRels); oBinaryWriter.WriteBYTE(NSBinPptxRW::g_nodeAttributeStart); _s_rels = oBinaryWriter.m_pCommon->m_oNote_Rels.size(); @@ -501,8 +499,8 @@ namespace PPTX2EditorAdvanced // ------------------------------------------------ // NoteRels -------------------------------------- - oBinaryWriter.StartMainRecord(NSMainTables::NotesMastersRels); - oBinaryWriter.StartRecord(NSMainTables::NotesMastersRels); + oBinaryWriter.StartMainRecord(NSBinPptxRW::NSMainTables::NotesMastersRels); + oBinaryWriter.StartRecord(NSBinPptxRW::NSMainTables::NotesMastersRels); oBinaryWriter.WriteBYTE(NSBinPptxRW::g_nodeAttributeStart); _s_rels = oBinaryWriter.m_pCommon->m_oNotesMasters_Rels.size(); diff --git a/ASCOfficePPTXFile/Editor/PPTXWriter.h b/ASCOfficePPTXFile/Editor/PPTXWriter.h index 646e396db04..8c5b6c85d20 100644 --- a/ASCOfficePPTXFile/Editor/PPTXWriter.h +++ b/ASCOfficePPTXFile/Editor/PPTXWriter.h @@ -209,25 +209,25 @@ namespace NSBinPptxRW LONG nCountSlides = 0; bool bNotesMasterPresent = false; - pPair = m_mainTables.find(NSMainTables::Themes); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::Themes); if (m_mainTables.end() != pPair) { m_oReader.Seek(pPair->second); nCountThemes = m_oReader.GetLong(); } - pPair = m_mainTables.find(NSMainTables::SlideMasters); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::SlideMasters); if (m_mainTables.end() != pPair) { m_oReader.Seek(pPair->second); nCountMasters = m_oReader.GetLong(); } - pPair = m_mainTables.find(NSMainTables::SlideLayouts); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::SlideLayouts); if (m_mainTables.end() != pPair) { m_oReader.Seek(pPair->second); nCountLayouts = m_oReader.GetLong(); } - pPair = m_mainTables.find(NSMainTables::Slides); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::Slides); if (m_mainTables.end() != pPair) { m_oReader.Seek(pPair->second); @@ -256,7 +256,7 @@ namespace NSBinPptxRW m_arSlides_Notes.push_back(-1); // ThemeRels - pPair = m_mainTables.find(NSMainTables::ThemeRels); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::ThemeRels); if (m_mainTables.end() != pPair) { m_oReader.Seek(pPair->second); @@ -286,7 +286,7 @@ namespace NSBinPptxRW } // готово, теперь нужно слайдам проставить шаблоны - pPair = m_mainTables.find(NSMainTables::SlideRels); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::SlideRels); if (m_mainTables.end() != pPair) { m_oReader.Seek(pPair->second); @@ -304,7 +304,7 @@ namespace NSBinPptxRW m_arSlides_Layout[index++] = m_oReader.GetULong(); } } - pPair = m_mainTables.find(NSMainTables::SlideNotesRels); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::SlideNotesRels); if (m_mainTables.end() != pPair) { m_oReader.Seek(pPair->second); @@ -323,7 +323,7 @@ namespace NSBinPptxRW } } - pPair = m_mainTables.find(NSMainTables::NotesMastersRels); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::NotesMastersRels); if (m_mainTables.end() != pPair) { m_oReader.Seek(pPair->second); @@ -377,7 +377,7 @@ namespace NSBinPptxRW m_arSlideMasters_Theme[i].m_lThemeIndex = arThemesDst[i]; } // themes - pPair = m_mainTables.find(NSMainTables::Themes); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::Themes); if (m_mainTables.end() != pPair) { OOX::CPath pathFolder = m_oReader.m_strFolderThemes; @@ -420,7 +420,7 @@ namespace NSBinPptxRW } // slideMasters - pPair = m_mainTables.find(NSMainTables::SlideMasters); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::SlideMasters); if (m_mainTables.end() != pPair) { OOX::CPath pathFolder = m_strDstFolder + FILE_SEPARATOR_STR + _T("ppt") + FILE_SEPARATOR_STR + _T("slideMasters"); @@ -472,7 +472,7 @@ namespace NSBinPptxRW } // slideLayouts - pPair = m_mainTables.find(NSMainTables::SlideLayouts); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::SlideLayouts); if (m_mainTables.end() != pPair) { OOX::CPath pathFolder = m_strDstFolder + FILE_SEPARATOR_STR+ _T("ppt") + FILE_SEPARATOR_STR + _T("slideLayouts"); @@ -507,7 +507,7 @@ namespace NSBinPptxRW } } // notes - pPair = m_mainTables.find(NSMainTables::NotesSlides); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::NotesSlides); if (m_mainTables.end() != pPair) { m_oReader.Seek(pPair->second); @@ -556,7 +556,7 @@ namespace NSBinPptxRW } } // noteMasters - pPair = m_mainTables.find(NSMainTables::NotesMasters); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::NotesMasters); if (m_mainTables.end() != pPair) { m_oReader.Seek(pPair->second); @@ -601,7 +601,7 @@ namespace NSBinPptxRW } // slides int nComment = 1; - pPair = m_mainTables.find(NSMainTables::Slides); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::Slides); if (m_mainTables.end() != pPair) { OOX::CPath pathFolder = m_strDstFolder + FILE_SEPARATOR_STR + _T("ppt") + FILE_SEPARATOR_STR + _T("slides"); @@ -658,7 +658,7 @@ namespace NSBinPptxRW if (false) { // app - pPair = m_mainTables.find(NSMainTables::App); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::App); if (m_mainTables.end() != pPair) { m_oReader.Seek(pPair->second); @@ -666,7 +666,7 @@ namespace NSBinPptxRW } // core - pPair = m_mainTables.find(NSMainTables::Core); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::Core); if (m_mainTables.end() != pPair) { m_oReader.Seek(pPair->second); @@ -674,7 +674,7 @@ namespace NSBinPptxRW } // tableStyles - pPair = m_mainTables.find(NSMainTables::TableStyles); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::TableStyles); if (m_mainTables.end() != pPair) { m_oReader.Seek(pPair->second); @@ -682,7 +682,7 @@ namespace NSBinPptxRW } // presProps - pPair = m_mainTables.find(NSMainTables::PresProps); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::PresProps); if (m_mainTables.end() != pPair) { m_oReader.Seek(pPair->second); @@ -690,7 +690,7 @@ namespace NSBinPptxRW } // viewProps - pPair = m_mainTables.find(NSMainTables::ViewProps); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::ViewProps); if (m_mainTables.end() != pPair) { m_oReader.Seek(pPair->second); @@ -707,7 +707,7 @@ namespace NSBinPptxRW CreateDefaultViewProps(); // presProps - pPair = m_mainTables.find(NSMainTables::PresProps); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::PresProps); if (m_mainTables.end() != pPair) { m_oReader.Seek(pPair->second); @@ -718,7 +718,7 @@ namespace NSBinPptxRW CreateDefaultPresProps(); } - pPair = m_mainTables.find(NSMainTables::TableStyles); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::TableStyles); if (m_mainTables.end() != pPair) { m_oReader.Seek(pPair->second); @@ -771,7 +771,7 @@ namespace NSBinPptxRW // presentation bool bIsAuthors = false; - pPair = m_mainTables.find(NSMainTables::Presentation); + pPair = m_mainTables.find(NSBinPptxRW::NSMainTables::Presentation); if (m_mainTables.end() != pPair) { OOX::CPath pathFolder = m_strDstFolder + FILE_SEPARATOR_STR + _T("ppt"); diff --git a/ASCOfficePPTXFile/PPTXFormat/App.h b/ASCOfficePPTXFile/PPTXFormat/App.h index 8768bace5e4..0a647908144 100644 --- a/ASCOfficePPTXFile/PPTXFormat/App.h +++ b/ASCOfficePPTXFile/PPTXFormat/App.h @@ -39,8 +39,6 @@ #include "Logic/PartTitle.h" #include "Logic/HeadingVariant.h" -using namespace NSBinPptxRW; - namespace PPTX { class App : public WrapperFile @@ -130,9 +128,9 @@ namespace PPTX virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const { - pWriter->StartRecord(NSMainTables::App); + pWriter->StartRecord(NSBinPptxRW::NSMainTables::App); - pWriter->WriteBYTE(g_nodeAttributeStart); + pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart); pWriter->WriteString2(0, Template); pWriter->WriteString2(1, Application); @@ -153,7 +151,7 @@ namespace PPTX pWriter->WriteBool2(14, SharedDoc); pWriter->WriteBool2(15, HyperlinksChanged); - pWriter->WriteBYTE(g_nodeAttributeEnd); + pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd); pWriter->EndRecord(); } diff --git a/ASCOfficePPTXFile/PPTXFormat/Core.h b/ASCOfficePPTXFile/PPTXFormat/Core.h index c43dbc6799c..90252c78479 100644 --- a/ASCOfficePPTXFile/PPTXFormat/Core.h +++ b/ASCOfficePPTXFile/PPTXFormat/Core.h @@ -39,8 +39,6 @@ #include "Limit/ContentStatus.h" #include "FileTypes.h" -using namespace NSBinPptxRW; - namespace PPTX { class Core : public WrapperFile @@ -105,9 +103,9 @@ namespace PPTX virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const { - pWriter->StartRecord(NSMainTables::Core); + pWriter->StartRecord(NSBinPptxRW::NSMainTables::Core); - pWriter->WriteBYTE(g_nodeAttributeStart); + pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart); pWriter->WriteString2(0, title); pWriter->WriteString2(1, creator); @@ -116,7 +114,7 @@ namespace PPTX pWriter->WriteString2(4, created); pWriter->WriteString2(5, modified); - pWriter->WriteBYTE(g_nodeAttributeEnd); + pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd); pWriter->EndRecord(); } diff --git a/ASCOfficePPTXFile/PPTXFormat/Logic/Colors/ColorBase.h b/ASCOfficePPTXFile/PPTXFormat/Logic/Colors/ColorBase.h index cc109b06bef..54d37b2b879 100644 --- a/ASCOfficePPTXFile/PPTXFormat/Logic/Colors/ColorBase.h +++ b/ASCOfficePPTXFile/PPTXFormat/Logic/Colors/ColorBase.h @@ -548,9 +548,18 @@ namespace PPTX public: void SetHexString(const std::wstring& val) { - red = HexString2Int(val.substr(0, 2)); - green = HexString2Int(val.substr(2, 2)); - blue = HexString2Int(val.substr(4, 2)); + if (val.length() == 6) + { + red = HexString2Int(val.substr(0, 2)); + green = HexString2Int(val.substr(2, 2)); + blue = HexString2Int(val.substr(4, 2)); + } + else if (val.length() == 3) + { + red = HexString2Int(val.substr(0, 1) + val.substr(0, 1)); + green = HexString2Int(val.substr(1, 1) + val.substr(1, 1)); + blue = HexString2Int(val.substr(2, 1) + val.substr(2, 1)); + } } std::vector Modifiers; diff --git a/ASCOfficePPTXFile/PPTXFormat/PresProps.h b/ASCOfficePPTXFile/PPTXFormat/PresProps.h index d5a0a736467..b52b6cc8f16 100644 --- a/ASCOfficePPTXFile/PPTXFormat/PresProps.h +++ b/ASCOfficePPTXFile/PPTXFormat/PresProps.h @@ -78,7 +78,7 @@ namespace PPTX } virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const { - pWriter->StartRecord(NSMainTables::PresProps); + pWriter->StartRecord(NSBinPptxRW::NSMainTables::PresProps); pWriter->WriteRecordArray(0, 0, ClrMru); pWriter->WriteRecord2(1, showPr); diff --git a/ASCOfficePPTXFile/PPTXFormat/ViewProps.h b/ASCOfficePPTXFile/PPTXFormat/ViewProps.h index 02036aba946..377feadfc1b 100644 --- a/ASCOfficePPTXFile/PPTXFormat/ViewProps.h +++ b/ASCOfficePPTXFile/PPTXFormat/ViewProps.h @@ -46,8 +46,6 @@ #include "ViewProps/SlideViewPr.h" #include "ViewProps/SorterViewPr.h" -using namespace NSBinPptxRW; - namespace PPTX { class ViewProps : public WrapperFile, public PPTX::FileContainer @@ -126,14 +124,14 @@ namespace PPTX virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const { - pWriter->StartRecord(NSMainTables::ViewProps); + pWriter->StartRecord(NSBinPptxRW::NSMainTables::ViewProps); - pWriter->WriteBYTE(g_nodeAttributeStart); + pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart); pWriter->WriteLimit2(0, attrLastView); pWriter->WriteBool2(1, attrShowComments); - pWriter->WriteBYTE(g_nodeAttributeEnd); + pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd); pWriter->WriteRecord2(0, GridSpacing); pWriter->WriteRecord2(1, NormalViewPr); diff --git a/ASCOfficePPTXFile/PPTXFormat/ViewProps/Guide.h b/ASCOfficePPTXFile/PPTXFormat/ViewProps/Guide.h index 25b193e248d..a242ba51478 100644 --- a/ASCOfficePPTXFile/PPTXFormat/ViewProps/Guide.h +++ b/ASCOfficePPTXFile/PPTXFormat/ViewProps/Guide.h @@ -64,12 +64,12 @@ namespace PPTX virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const { - pWriter->WriteBYTE(g_nodeAttributeStart); + pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart); pWriter->WriteInt2(0, pos); pWriter->WriteLimit2(1, orient); - pWriter->WriteBYTE(g_nodeAttributeEnd); + pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd); } virtual void toXmlWriter(NSBinPptxRW::CXmlWriter* pWriter) const diff --git a/ASCOfficePPTXFile/PPTXFormat/ViewProps/Sld.h b/ASCOfficePPTXFile/PPTXFormat/ViewProps/Sld.h index 446333a19f2..3b362a8cfe5 100644 --- a/ASCOfficePPTXFile/PPTXFormat/ViewProps/Sld.h +++ b/ASCOfficePPTXFile/PPTXFormat/ViewProps/Sld.h @@ -62,12 +62,12 @@ namespace PPTX virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const { - pWriter->WriteBYTE(g_nodeAttributeStart); + pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart); pWriter->WriteString2(0, id); pWriter->WriteBool2(1, collapse); - pWriter->WriteBYTE(g_nodeAttributeEnd); + pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd); } virtual void toXmlWriter(NSBinPptxRW::CXmlWriter* pWriter) const diff --git a/ASCOfficePPTXFile/PPTXFormat/ViewProps/SorterViewPr.h b/ASCOfficePPTXFile/PPTXFormat/ViewProps/SorterViewPr.h index 3ef8a5dd02d..45d0d3b340d 100644 --- a/ASCOfficePPTXFile/PPTXFormat/ViewProps/SorterViewPr.h +++ b/ASCOfficePPTXFile/PPTXFormat/ViewProps/SorterViewPr.h @@ -66,9 +66,9 @@ namespace PPTX virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const { - pWriter->WriteBYTE(g_nodeAttributeStart); + pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart); pWriter->WriteBool2(0, attrShowFormatting); - pWriter->WriteBYTE(g_nodeAttributeEnd); + pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd); pWriter->WriteRecord1(0, CViewPr); } diff --git a/Common/OfficeFileFormatChecker2.cpp b/Common/OfficeFileFormatChecker2.cpp index 44a6210a3a8..e921ff292bb 100644 --- a/Common/OfficeFileFormatChecker2.cpp +++ b/Common/OfficeFileFormatChecker2.cpp @@ -144,20 +144,25 @@ bool COfficeFileFormatChecker::isDocFormatFile (POLE::Storage * storage) POLE::Stream stream(storage, L"WordDocument"); - unsigned char buffer[10]; - if (stream.read(buffer, 10) > 0) + unsigned char buffer[64]; + if (stream.read(buffer, 64) > 0) { //ms office 2007 encrypted contains stream WordDocument !! std::list entries = storage->entries(L"DataSpaces"); if (entries.size() > 0) return false; - if ((buffer[0] == 0xEC && buffer[1] == 0xA5) || // word 1997-2003 - (buffer[0] == 0xDC && buffer[1] == 0xA5)) // word 1995 + if ((buffer[0] == 0xEC && buffer[1] == 0xA5) || // word 1997-2003 + (buffer[0] == 0xDC && buffer[1] == 0xA5) || // word 1995 + (buffer[0] == 0xDB && buffer[1] == 0xA5)) // word 2.0 { nFileType = AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC; } - + else if ( isHtmlFormatFile(buffer, 64, false) ) + { + nFileType = AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML_IN_CONTAINER; + return true; + } if (storage->isDirectory(L"Macros")) { bMacroEnabled = true; @@ -278,7 +283,7 @@ bool COfficeFileFormatChecker::isOfficeFile(const std::wstring & fileName) nFileType = AVS_OFFICESTUDIO_FILE_OTHER_MS_OFFCRYPTO; return true; } - } + } COfficeUtils OfficeUtils(NULL); if (OfficeUtils.IsArchive(fileName) == S_OK) diff --git a/Common/OfficeFileFormats.h b/Common/OfficeFileFormats.h index fdc46070c63..33e6396d8e3 100644 --- a/Common/OfficeFileFormats.h +++ b/Common/OfficeFileFormats.h @@ -50,6 +50,7 @@ #define AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT_FLAT AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x000e #define AVS_OFFICESTUDIO_FILE_DOCUMENT_OTT AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x000f #define AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC_FLAT AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0010 +#define AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML_IN_CONTAINER AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0011 #define AVS_OFFICESTUDIO_FILE_PRESENTATION 0x0080 #define AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0001 diff --git a/X2tConverter/src/cextracttools.cpp b/X2tConverter/src/cextracttools.cpp index 0252df1daf6..c43b79c3867 100644 --- a/X2tConverter/src/cextracttools.cpp +++ b/X2tConverter/src/cextracttools.cpp @@ -313,6 +313,12 @@ namespace NExtractTools else if (0 == sExt2.compare(_T(".pptt"))) res = TCD_MSCRYPT2PPTT; else if (0 == sExt2.compare(_T(".bin"))) res = TCD_MSCRYPT2BIN; }break; + case AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML_IN_CONTAINER: + { + if (0 == sExt2.compare(_T(".docx"))) res = TCD_HTMLZIP2DOCX; + else if (0 == sExt2.compare(_T(".doct"))) res = TCD_HTMLZIP2DOCT; + else if (0 == sExt2.compare(_T(".bin"))) res = TCD_HTMLZIP2DOCT_BIN; + }break; case AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML: { if (0 == sExt2.compare(_T(".docx"))) res = TCD_HTML2DOCX; diff --git a/X2tConverter/src/cextracttools.h b/X2tConverter/src/cextracttools.h index f17e3d02db2..05ef36e2c73 100644 --- a/X2tConverter/src/cextracttools.h +++ b/X2tConverter/src/cextracttools.h @@ -178,6 +178,10 @@ namespace NExtractTools TCD_HTML2DOCX, TCD_HTML2DOCT, TCD_HTML2DOCT_BIN, + + TCD_HTMLZIP2DOCX, + TCD_HTMLZIP2DOCT, + TCD_HTMLZIP2DOCT_BIN, TCD_FB22DOCX, TCD_FB22DOCT,