mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-02-10 18:05:41 +08:00
Compare commits
97 Commits
v4.4.0.102
...
core-linux
| Author | SHA1 | Date | |
|---|---|---|---|
| f230dc2555 | |||
| 11c9d74e68 | |||
| d61a955c38 | |||
| acfb96e3c3 | |||
| d2e3cc47f2 | |||
| 4f2f164af9 | |||
| 8addd6cb04 | |||
| 92cda5bc80 | |||
| 1a377d8738 | |||
| ed3e107db5 | |||
| 64d8c659bc | |||
| 3debba45b8 | |||
| b8ad1797f0 | |||
| 48587f55b3 | |||
| a505ae391d | |||
| c389801937 | |||
| 24214cb561 | |||
| b19191b286 | |||
| 77f8ab6875 | |||
| 6fc6f9ead3 | |||
| 270c1fa2ac | |||
| f76a03fab8 | |||
| 09e6d3f760 | |||
| 90d8055bcb | |||
| 01ba3b4182 | |||
| ddb67584b8 | |||
| 38ce5586bb | |||
| f6d9ce83f0 | |||
| 03edd40850 | |||
| 9ff87b3c6b | |||
| 645cbef1ef | |||
| 02238f7eea | |||
| 907e00a3ac | |||
| 2470bfd335 | |||
| 3ae52bd221 | |||
| 227d4f18d6 | |||
| 36bdbad685 | |||
| 525b828540 | |||
| f64ee80a1a | |||
| f6402813c4 | |||
| 224ac7d6e2 | |||
| 2e2bd8989d | |||
| 8f434efb95 | |||
| 244dafb02b | |||
| 149a1bdbd5 | |||
| a79d9041bc | |||
| 3954c42602 | |||
| 29dc0aee32 | |||
| d805972d6d | |||
| 549d5a46a6 | |||
| 9e867be756 | |||
| 771bf2d55c | |||
| 3c58cd96fc | |||
| e50864fa98 | |||
| c8c0924c74 | |||
| af732e4e85 | |||
| 47ffdae8cc | |||
| fd5870083b | |||
| 5ba62cb25d | |||
| 79e0588544 | |||
| a3d08cfc35 | |||
| 5caccb284a | |||
| ce19969b52 | |||
| 0f91dc392e | |||
| e9805cef30 | |||
| e3e05eb2db | |||
| c09f17cffb | |||
| ce73dd5987 | |||
| 77df8aacb9 | |||
| ce45b2802f | |||
| 7886018d6f | |||
| 5b5cb4188e | |||
| f797af5f17 | |||
| 055977535e | |||
| 6ab24f10f0 | |||
| 12a03da231 | |||
| cb7088979a | |||
| 1fb1fc6c97 | |||
| e633c3c5d1 | |||
| 0f04de34b1 | |||
| 3f8c2c293a | |||
| 2c97e743da | |||
| 2c83860c04 | |||
| c64b624de2 | |||
| 5e3990937d | |||
| 21744c1607 | |||
| 0892e2549f | |||
| cff6f305d4 | |||
| 5060071227 | |||
| d64109eaa4 | |||
| ec064bbd50 | |||
| baf952a151 | |||
| 0dd36c5e6a | |||
| 474404a8f9 | |||
| ec4f4fe476 | |||
| 634509ae28 | |||
| 8197fb8900 |
1
.gitignore
vendored
1
.gitignore
vendored
@ -20,6 +20,7 @@ Common/3dParty/v8/win_32
|
||||
Common/3dParty/v8/linux_64
|
||||
Common/3dParty/v8/linux_32
|
||||
Common/3dParty/v8/mac_64
|
||||
Common/3dParty/openssl/openssl
|
||||
**/core_build
|
||||
**/Release
|
||||
**/Debug
|
||||
|
||||
15
.travis.yml
15
.travis.yml
@ -1 +1,14 @@
|
||||
language: cpp
|
||||
language: cpp
|
||||
compiler: gcc
|
||||
dist: trusty
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- p7zip-full
|
||||
script:
|
||||
- exit 0
|
||||
# Build fails anyway. See explanation in
|
||||
# https://github.com/ONLYOFFICE/core/pull/29#issuecomment-306773327
|
||||
- cd Common/3dParty && ./make.sh
|
||||
- cd ../../
|
||||
- make
|
||||
@ -811,10 +811,10 @@ namespace DocFileFormat
|
||||
{
|
||||
Symbol s = getSymbol( chpx );
|
||||
|
||||
m_pXmlWriter->WriteNodeBegin(L"w:sym", true);
|
||||
m_pXmlWriter->WriteAttribute(L"w:font", FormatUtils::XmlEncode(s.FontName));
|
||||
m_pXmlWriter->WriteAttribute(L"w:char", FormatUtils::XmlEncode(s.HexValue));
|
||||
m_pXmlWriter->WriteNodeEnd(L"", true);
|
||||
//m_pXmlWriter->WriteNodeBegin(L"w:sym", true);
|
||||
//m_pXmlWriter->WriteAttribute(L"w:font", FormatUtils::XmlEncode(s.FontName));
|
||||
//m_pXmlWriter->WriteAttribute(L"w:char", FormatUtils::XmlEncode(s.HexValue));
|
||||
//m_pXmlWriter->WriteNodeEnd(L"", true);
|
||||
}
|
||||
else if ((TextMark::DrawnObject == code) && fSpec)
|
||||
{
|
||||
@ -1663,12 +1663,17 @@ namespace DocFileFormat
|
||||
FontFamilyName* ffn = static_cast<FontFamilyName*>( m_document->FontTable->operator [] ( fontIndex ) );
|
||||
|
||||
ret.FontName = ffn->xszFtn;
|
||||
ret.HexValue = L"f0" + FormatUtils::IntToFormattedWideString( code, L"%02x" );
|
||||
ret.HexValue = L"f0" + FormatUtils::IntToFormattedWideString( code, L"%02x" );//-123 - ShortToFormattedWideString
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ret.HexValue.length() > 4)
|
||||
{
|
||||
ret.HexValue = ret.HexValue.substr(ret.HexValue.length() - 4, 4);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@ -133,11 +133,21 @@ namespace DocFileFormat
|
||||
pos = tStream.GetPosition();
|
||||
|
||||
//------------------------------------------------------------------------------------------
|
||||
crypt_data_aes.hashAlgorithm = CRYPT_METHOD::SHA1; //by AlgIDHash -> 0x0000 || 0x8004
|
||||
crypt_data_aes.spinCount = 50000;
|
||||
switch(AlgIDHash)
|
||||
{
|
||||
case 0x8003: crypt_data_aes.hashAlgorithm = CRYPT_METHOD::MD5; break;
|
||||
case 0x0000:
|
||||
case 0x8004: crypt_data_aes.hashAlgorithm = CRYPT_METHOD::SHA1; break;
|
||||
}
|
||||
crypt_data_aes.spinCount = 0;
|
||||
|
||||
switch(AlgID)
|
||||
{
|
||||
case 0x0000:
|
||||
if (fAES) crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::AES_ECB;
|
||||
if (fCryptoAPI) crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::RC4;
|
||||
crypt_data_aes.keySize = KeySize / 8;
|
||||
break;
|
||||
case 0x6801:
|
||||
crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::RC4;
|
||||
crypt_data_aes.keySize = KeySize / 8;
|
||||
@ -156,16 +166,11 @@ namespace DocFileFormat
|
||||
break;
|
||||
}
|
||||
|
||||
switch(ProviderType)
|
||||
{
|
||||
case 0x0001: crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::RC4; break;
|
||||
case 0x0018: crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::AES_ECB; break;
|
||||
}
|
||||
|
||||
|
||||
//switch(ProviderType)
|
||||
//{
|
||||
// case 0x0001: crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::RC4; break;
|
||||
// case 0x0018: crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::AES_ECB; break;
|
||||
//}
|
||||
}
|
||||
|
||||
//RELEASEARRAYOBJECTS( bytes );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -470,6 +470,12 @@ namespace DocFileFormat
|
||||
delete storageOut;
|
||||
return false;
|
||||
}
|
||||
//DecryptStream(Decryptor, "WordDocument", storageIn, storageOut);
|
||||
//if (FIB->m_FibBase.fWhichTblStm)
|
||||
// DecryptStream(Decryptor, "1Table", storageIn, storageOut);
|
||||
//else
|
||||
// DecryptStream(Decryptor, "0Table", storageIn, storageOut);
|
||||
|
||||
std::list<std::string> listStream = storageIn->entries();
|
||||
|
||||
for (std::list<std::string>::iterator it = listStream.begin(); it != listStream.end(); it++)
|
||||
@ -480,13 +486,20 @@ namespace DocFileFormat
|
||||
|
||||
for (std::list<std::string>::iterator it2 = list_entry.begin(); it2 != list_entry.end(); it2++)
|
||||
{
|
||||
//if (*it2 != "WordDocument" && std::wstring::npos == it2->find("Table"))
|
||||
// CopyStream( *it2, storageIn, storageOut);
|
||||
DecryptStream(Decryptor, *it2, storageIn, storageOut);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//if (*it != "WordDocument" && std::wstring::npos == it->find("Table"))
|
||||
// CopyStream( *it, storageIn, storageOut);
|
||||
DecryptStream(Decryptor, *it, storageIn, storageOut);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
storageOut->close();
|
||||
delete storageOut;
|
||||
|
||||
@ -508,6 +521,31 @@ namespace DocFileFormat
|
||||
}
|
||||
return true;
|
||||
}
|
||||
bool WordDocument::CopyStream (std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut)
|
||||
{
|
||||
POLE::Stream *stream = new POLE::Stream(storageIn, streamName);
|
||||
if (!stream) return false;
|
||||
|
||||
stream->seek(0);
|
||||
int sz_stream = stream->size();
|
||||
|
||||
POLE::Stream *streamNew = new POLE::Stream(storageOut, streamName, true, sz_stream);
|
||||
if (!streamNew) return false;
|
||||
|
||||
unsigned char* data_stream = new unsigned char[sz_stream];
|
||||
stream->read(data_stream, sz_stream);
|
||||
|
||||
streamNew->write(data_stream, sz_stream);
|
||||
|
||||
RELEASEARRAYOBJECTS(data_stream);
|
||||
|
||||
streamNew->flush();
|
||||
|
||||
delete streamNew;
|
||||
delete stream;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool WordDocument::DecryptStream(CRYPT::Decryptor* Decryptor, std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut)
|
||||
|
||||
@ -103,6 +103,7 @@ namespace DocFileFormat
|
||||
private:
|
||||
bool DecryptOfficeFile (CRYPT::Decryptor* Decryptor);
|
||||
bool DecryptStream (CRYPT::Decryptor* Decryptor, std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut);
|
||||
bool CopyStream (std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut);
|
||||
|
||||
inline StructuredStorageReader* GetStorage() const
|
||||
{
|
||||
|
||||
@ -178,7 +178,9 @@ namespace BinXlsxRW{
|
||||
{
|
||||
std::wstring sXlsxFilename = L"Microsoft_Excel_Worksheet" + std::to_wstring(lChartNumber) + L".xlsx";
|
||||
std::wstring sXlsxPath = sEmbedingPath + FILE_SEPARATOR_STR + sXlsxFilename;
|
||||
|
||||
writeChartXlsx(sXlsxPath, oChartSpace);
|
||||
pReader->m_pRels->m_pManager->m_pContentTypes->AddDefault(L"xlsx");
|
||||
|
||||
std::wstring sChartsWorksheetRelsName = L"../embeddings/" + sXlsxFilename;
|
||||
long rId;
|
||||
|
||||
@ -307,6 +307,7 @@ namespace
|
||||
content << L"<w:" << Node << L"s \
|
||||
xmlns:o=\"urn:schemas-microsoft-com:office:office\" \
|
||||
xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" \
|
||||
xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" \
|
||||
xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" \
|
||||
xmlns:w10=\"urn:schemas-microsoft-com:office:word\" \
|
||||
xmlns:w14=\"http://schemas.microsoft.com/office/word/2010/wordml\" \
|
||||
|
||||
@ -191,6 +191,12 @@ void xlsx_xml_worksheet::write_to(std::wostream & strm)
|
||||
}
|
||||
|
||||
CP_XML_STREAM() << impl_->drawing_.str();
|
||||
|
||||
if (!impl_->page_props_.str().empty())
|
||||
{
|
||||
CP_XML_STREAM() << impl_->page_props_.str();
|
||||
}//props выше legacyDrawing !!
|
||||
|
||||
if (impl_->commentsId_.length()>0)
|
||||
{
|
||||
CP_XML_NODE(L"legacyDrawing")
|
||||
@ -205,10 +211,7 @@ void xlsx_xml_worksheet::write_to(std::wostream & strm)
|
||||
CP_XML_STREAM() << impl_->ole_objects_.str();
|
||||
}
|
||||
}
|
||||
if (!impl_->page_props_.str().empty())
|
||||
{
|
||||
CP_XML_STREAM() << impl_->page_props_.str();
|
||||
}
|
||||
|
||||
//CP_XML_NODE(L"headerFooter){}
|
||||
|
||||
//CP_XML_NODE(L"rowBreaks){}
|
||||
|
||||
@ -34,8 +34,6 @@
|
||||
#include "office_presentation.h"
|
||||
#include "draw_page.h"
|
||||
|
||||
#include <boost/foreach.hpp>
|
||||
|
||||
#include <cpdoccore/xml/xmlchar.h>
|
||||
|
||||
#include <cpdoccore/xml/attributes.h>
|
||||
@ -76,9 +74,10 @@ void office_presentation::docx_convert(oox::docx_conversion_context & Context)
|
||||
{
|
||||
Context.start_office_text();
|
||||
_CP_LOG << L"[info][docx] process pages (" << pages_.size() << L" elmements)" << std::endl;
|
||||
BOOST_FOREACH(const office_element_ptr & elm, pages_)
|
||||
{
|
||||
elm->docx_convert(Context);
|
||||
|
||||
for (size_t i = 0; i < pages_.size(); i++)
|
||||
{
|
||||
pages_[i]->docx_convert(Context);
|
||||
}
|
||||
Context.end_office_text();
|
||||
}
|
||||
@ -87,9 +86,10 @@ void office_presentation::xlsx_convert(oox::xlsx_conversion_context & Context)
|
||||
{
|
||||
Context.start_office_spreadsheet(this);
|
||||
_CP_LOG << L"[info][xlsx] process pages (" << pages_.size() << L" elmements)" << std::endl;
|
||||
BOOST_FOREACH(const office_element_ptr & elm, pages_)
|
||||
{
|
||||
elm->xlsx_convert(Context);
|
||||
|
||||
for (size_t i = 0; i < pages_.size(); i++)
|
||||
{
|
||||
pages_[i]->xlsx_convert(Context);
|
||||
}
|
||||
Context.end_office_spreadsheet();
|
||||
}
|
||||
@ -100,29 +100,29 @@ void office_presentation::pptx_convert(oox::pptx_conversion_context & Context)
|
||||
|
||||
_CP_LOG << L"[info][pptx] process pages(" << pages_.size() << L" elmements)" << std::endl;
|
||||
|
||||
BOOST_FOREACH(const office_element_ptr & elm, footer_decls_)
|
||||
for (size_t i = 0; i < footer_decls_.size(); i++)
|
||||
{
|
||||
presentation_footer_decl * style = dynamic_cast<presentation_footer_decl *>(elm.get());
|
||||
presentation_footer_decl * style = dynamic_cast<presentation_footer_decl *>(footer_decls_[i].get());
|
||||
|
||||
if (!style)
|
||||
continue;
|
||||
|
||||
std::wstring style_name_ = L"footer:" + style->presentation_name_.get_value_or(L"");
|
||||
Context.root()->odf_context().drawStyles().add(style_name_, elm);
|
||||
Context.root()->odf_context().drawStyles().add(style_name_, footer_decls_[i]);
|
||||
}
|
||||
BOOST_FOREACH(const office_element_ptr & elm, date_time_decls_)
|
||||
{
|
||||
presentation_date_time_decl * style = dynamic_cast<presentation_date_time_decl *>(elm.get());
|
||||
for (size_t i = 0; i < date_time_decls_.size(); i++)
|
||||
{
|
||||
presentation_date_time_decl * style = dynamic_cast<presentation_date_time_decl *>(date_time_decls_[i].get());
|
||||
|
||||
if (!style)
|
||||
continue;
|
||||
|
||||
std::wstring style_name_ = L"datetime:" + style->presentation_name_.get_value_or(L"");
|
||||
Context.root()->odf_context().drawStyles().add(style_name_, elm);
|
||||
Context.root()->odf_context().drawStyles().add(style_name_, date_time_decls_[i]);
|
||||
}
|
||||
BOOST_FOREACH(const office_element_ptr & elm, pages_)
|
||||
for (size_t i = 0; i < pages_.size(); i++)
|
||||
{
|
||||
elm->pptx_convert(Context);
|
||||
pages_[i]->pptx_convert(Context);
|
||||
}
|
||||
Context.end_office_presentation();
|
||||
}
|
||||
|
||||
@ -602,17 +602,24 @@ void OoxConverter::convert(PPTX::Logic::SpPr *oox_spPr, PPTX::Logic::ShapeStyle*
|
||||
|
||||
bool bLine = odf_context()->drawing_context()->isLineShape();
|
||||
|
||||
if (!bLine)
|
||||
if (custGeom && !custGeom->cxnLst.empty())
|
||||
bLine = true;
|
||||
|
||||
odf_context()->drawing_context()->start_area_properties();
|
||||
{
|
||||
odf_context()->drawing_context()->start_area_properties();
|
||||
if (bLine)
|
||||
{
|
||||
odf_context()->drawing_context()->set_no_fill();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (oox_spPr->Fill.is_init())
|
||||
convert(&oox_spPr->Fill);
|
||||
else if (oox_sp_style)
|
||||
convert(&oox_sp_style->fillRef, 1);
|
||||
}
|
||||
odf_context()->drawing_context()->end_area_properties();
|
||||
}
|
||||
odf_context()->drawing_context()->end_area_properties();
|
||||
|
||||
odf_context()->drawing_context()->start_line_properties();
|
||||
{
|
||||
|
||||
@ -72,6 +72,7 @@ using namespace cpdoccore;
|
||||
|
||||
namespace Oox2Odf
|
||||
{
|
||||
|
||||
PptxConverter::PptxConverter(const std::wstring & path, const ProgressCallback* CallBack)
|
||||
{
|
||||
current_clrMap = NULL;
|
||||
@ -342,7 +343,7 @@ void PptxConverter::convert_slides()
|
||||
current_slide = slide->Master.operator->();
|
||||
|
||||
if (bShowLayoutMasterSp && bShowMasterSp)
|
||||
convert_slide(&slide->Master->cSld, current_txStyles, false, true, 2);
|
||||
convert_slide(&slide->Master->cSld, current_txStyles, false, true, Master);
|
||||
else
|
||||
convert(slide->Master->cSld.bg.GetPointer());
|
||||
|
||||
@ -350,7 +351,7 @@ void PptxConverter::convert_slides()
|
||||
current_clrMap = slide->Layout->clrMapOvr->overrideClrMapping.GetPointer();
|
||||
current_slide = slide->Layout.operator->();
|
||||
|
||||
convert_slide(&slide->Layout->cSld, current_txStyles, true, bShowLayoutMasterSp, 3);
|
||||
convert_slide(&slide->Layout->cSld, current_txStyles, true, bShowLayoutMasterSp, Layout);
|
||||
|
||||
if (slide->Layout->transition.IsInit()) convert (slide->Layout->transition.GetPointer());
|
||||
else convert (slide->Master->transition.GetPointer());
|
||||
@ -402,7 +403,7 @@ void PptxConverter::convert_slides()
|
||||
odp_context->current_slide().set_master_page (master_style_name);
|
||||
odp_context->current_slide().set_layout_page (layout_style_name);
|
||||
|
||||
convert_slide (slide->cSld.GetPointer(), current_txStyles, true, bShowMasterSp, 1);
|
||||
convert_slide (slide->cSld.GetPointer(), current_txStyles, true, bShowMasterSp, Slide);
|
||||
convert (slide->comments.operator->());
|
||||
convert (slide->Note.operator->());
|
||||
|
||||
@ -435,7 +436,7 @@ void PptxConverter::convert(PPTX::NotesMaster *oox_notes)
|
||||
|
||||
odf_context()->page_layout_context()->set_page_size(width, height);
|
||||
}
|
||||
convert_slide(&oox_notes->cSld, NULL, true, true, 2);
|
||||
convert_slide(&oox_notes->cSld, NULL, true, true, NotesMaster);
|
||||
|
||||
odp_context->end_note();
|
||||
|
||||
@ -468,7 +469,7 @@ void PptxConverter::convert(PPTX::NotesSlide *oox_notes)
|
||||
if (oox_notes->clrMapOvr.IsInit() && oox_notes->clrMapOvr->overrideClrMapping.IsInit())
|
||||
current_clrMap = oox_notes->clrMapOvr->overrideClrMapping.GetPointer();
|
||||
|
||||
convert_slide(&oox_notes->cSld, NULL, true, true, 1);
|
||||
convert_slide(&oox_notes->cSld, NULL, true, true, Notes);
|
||||
|
||||
odp_context->end_note();
|
||||
|
||||
@ -547,7 +548,7 @@ void PptxConverter::convert( PPTX::Logic::Transition *oox_transition )
|
||||
|
||||
if (oox_transition->advTm.is_init())
|
||||
{
|
||||
odp_context->current_slide().set_page_duration(*oox_transition->dur);
|
||||
odp_context->current_slide().set_page_duration(*oox_transition->advTm);
|
||||
}
|
||||
|
||||
if (oox_transition->base.is_init() == false) return;
|
||||
@ -1312,13 +1313,19 @@ void PptxConverter::convert(PPTX::Logic::Bg *oox_background)
|
||||
}
|
||||
odf_writer::style* page_style_ = dynamic_cast<odf_writer::style*>(odp_context->current_slide().page_style_elm_.get());
|
||||
odf_writer::style_drawing_page_properties* page_props = page_style_->content_.get_style_drawing_page_properties();
|
||||
|
||||
//необязательно
|
||||
//if (page_props->content_.common_draw_fill_attlist_.draw_fill_image_name_)
|
||||
//{
|
||||
// page_props->content_.draw_background_size_ = L"border";
|
||||
//}
|
||||
|
||||
odp_context->drawing_context()->end_drawing_background(page_props->content_.common_draw_fill_attlist_);
|
||||
|
||||
odp_context->end_drawings();
|
||||
}
|
||||
|
||||
void PptxConverter::convert_slide(PPTX::Logic::CSld *oox_slide, PPTX::Logic::TxStyles* txStyles, bool bPlaceholders, bool bFillUp, int type)
|
||||
void PptxConverter::convert_slide(PPTX::Logic::CSld *oox_slide, PPTX::Logic::TxStyles* txStyles, bool bPlaceholders, bool bFillUp, _typePages type)
|
||||
{
|
||||
if (oox_slide == NULL) return;
|
||||
|
||||
@ -1328,7 +1335,10 @@ void PptxConverter::convert_slide(PPTX::Logic::CSld *oox_slide, PPTX::Logic::TxS
|
||||
if (oox_slide->attrName.IsInit())
|
||||
odp_context->current_slide().set_page_name(oox_slide->attrName.get());
|
||||
|
||||
convert(oox_slide->bg.GetPointer());
|
||||
if (type != Notes && type != NotesMaster)
|
||||
{
|
||||
convert(oox_slide->bg.GetPointer());
|
||||
}
|
||||
|
||||
for (size_t i = 0 ; i < oox_slide->spTree.SpTreeElems.size(); i++)
|
||||
{
|
||||
@ -1348,7 +1358,7 @@ void PptxConverter::convert_slide(PPTX::Logic::CSld *oox_slide, PPTX::Logic::TxS
|
||||
{
|
||||
int ph_type = pShape->nvSpPr.nvPr.ph->type->GetBYTECode();
|
||||
|
||||
if (type == 3 && (ph_type == 5 || ph_type == 6 || ph_type == 7 || ph_type == 12))
|
||||
if (type == Layout && (ph_type == 5 || ph_type == 6 || ph_type == 7 || ph_type == 12))
|
||||
continue;
|
||||
|
||||
odf_context()->drawing_context()->set_placeholder_type(ph_type);
|
||||
|
||||
@ -100,6 +100,14 @@ using namespace cpdoccore;
|
||||
|
||||
namespace Oox2Odf
|
||||
{
|
||||
enum _typePages
|
||||
{
|
||||
Slide,
|
||||
Master,
|
||||
Layout,
|
||||
NotesMaster,
|
||||
Notes
|
||||
};
|
||||
class PptxConverter : public OoxConverter
|
||||
{
|
||||
public:
|
||||
@ -119,7 +127,7 @@ namespace Oox2Odf
|
||||
|
||||
void convert(OOX::WritingElement *oox_unknown);
|
||||
|
||||
void convert_slide (PPTX::Logic::CSld *oox_slide, PPTX::Logic::TxStyles* txStyles, bool bPlaceholders, bool bFillUp, int type);
|
||||
void convert_slide (PPTX::Logic::CSld *oox_slide, PPTX::Logic::TxStyles* txStyles, bool bPlaceholders, bool bFillUp, _typePages type);
|
||||
void convert_layout (PPTX::Logic::CSld *oox_slide);
|
||||
void convert (PPTX::Comments *oox_comments);
|
||||
void convert (PPTX::NotesSlide *oox_notes);
|
||||
|
||||
@ -36,6 +36,7 @@
|
||||
#include "./Reader/PPTFileReader.h"
|
||||
#include "./PPTXWriter/Converter.h"
|
||||
|
||||
#include "../../../Common/OfficeFileErrorDescription.h"
|
||||
#include "../../../OfficeUtils/src/OfficeUtils.h"
|
||||
|
||||
#ifndef READMODE
|
||||
@ -51,31 +52,75 @@ COfficePPTFile::~COfficePPTFile()
|
||||
CloseFile();
|
||||
}
|
||||
|
||||
bool COfficePPTFile::OpenFile(std::wstring sFileName)
|
||||
long COfficePPTFile::OpenFile(const std::wstring & sFileName, const std::wstring & password)
|
||||
{
|
||||
CloseFile();
|
||||
|
||||
POLE::Storage *pStgFrom = new POLE::Storage(sFileName.c_str());
|
||||
if (pStgFrom == NULL) return FALSE;
|
||||
if (pStgFrom == NULL) return AVS_ERROR_FILEFORMAT;
|
||||
|
||||
pStgFrom->open(false,false);
|
||||
pStgFrom->open(false, false);
|
||||
|
||||
m_pReader = new CPPTFileReader(pStgFrom, m_strTempDirectory);
|
||||
((CPPTFileReader*)m_pReader)->m_oDocumentInfo.m_strFileDirectory = GetDirectory(sFileName.c_str());
|
||||
|
||||
if (!((CPPTFileReader*)m_pReader)->IsPowerPoint())
|
||||
CPPTFileReader* pptReader = (CPPTFileReader*)m_pReader;
|
||||
|
||||
pptReader->m_oDocumentInfo.m_strFileDirectory = GetDirectory(sFileName.c_str());
|
||||
pptReader->m_oDocumentInfo.m_strPassword = password;
|
||||
|
||||
if (pptReader->IsPowerPoint() == false)
|
||||
{
|
||||
CPPTFileReader* r = (CPPTFileReader*)m_pReader; RELEASEOBJECT(r);
|
||||
RELEASEOBJECT(pptReader);
|
||||
m_pReader = NULL;
|
||||
return FALSE;
|
||||
return AVS_ERROR_FILEFORMAT;
|
||||
}
|
||||
|
||||
((CPPTFileReader*)m_pReader)->ReadPersistDirectory();
|
||||
((CPPTFileReader*)m_pReader)->ReadSlideList();
|
||||
if (pptReader->ReadPersists() == false)
|
||||
return AVS_ERROR_FILEFORMAT;
|
||||
|
||||
m_Status = READMODE;
|
||||
if (pptReader->IsEncrypted())
|
||||
{
|
||||
CEncryptionHeader *pEncryptionHeader = pptReader->GetEncryptionHeader();
|
||||
if (!pEncryptionHeader) return AVS_ERROR_FILEFORMAT;
|
||||
if (password.empty()) return AVS_ERROR_DRM;
|
||||
|
||||
return TRUE;
|
||||
if (pEncryptionHeader->bStandard)
|
||||
{
|
||||
CRYPT::RC4Decryptor Decryptor(pEncryptionHeader->crypt_data_rc4, password, 1);
|
||||
|
||||
if (Decryptor.IsVerify() == false)
|
||||
{
|
||||
return AVS_ERROR_PASSWORD;
|
||||
}
|
||||
if (DecryptOfficeFile(&Decryptor) == false) return AVS_ERROR_DRM;
|
||||
|
||||
return AVS_ERROR_PASSWORD;
|
||||
//return OpenFile(m_sTempDecryptFileName, L"");
|
||||
}
|
||||
else
|
||||
{
|
||||
CRYPT::ECMADecryptor Decryptor;
|
||||
|
||||
Decryptor.SetCryptData(pEncryptionHeader->crypt_data_aes);
|
||||
|
||||
if (Decryptor.SetPassword(password) == false)
|
||||
{
|
||||
return AVS_ERROR_PASSWORD;
|
||||
}
|
||||
if (DecryptOfficeFile(&Decryptor) == false) return AVS_ERROR_DRM;
|
||||
|
||||
return AVS_ERROR_PASSWORD;
|
||||
pptReader->ReadDocument(&Decryptor);
|
||||
//return OpenFile(m_sTempDecryptFileName, L"");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pptReader->ReadDocument(NULL);
|
||||
|
||||
m_Status = READMODE;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
bool COfficePPTFile::CloseFile()
|
||||
{
|
||||
@ -86,29 +131,28 @@ bool COfficePPTFile::CloseFile()
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT COfficePPTFile::LoadFromFile(std::wstring sSrcFileName, std::wstring sDstPath)
|
||||
HRESULT COfficePPTFile::LoadFromFile(std::wstring sSrcFileName, std::wstring sDstPath, std::wstring password)
|
||||
{
|
||||
if (m_strTempDirectory.length() < 1)
|
||||
if (m_strTempDirectory.empty())
|
||||
{
|
||||
m_strTempDirectory = NSDirectory::GetTempPath();
|
||||
}
|
||||
|
||||
bool bRes = OpenFile(sSrcFileName);
|
||||
if (!bRes)
|
||||
long nResult = OpenFile(sSrcFileName, password);
|
||||
if (nResult != S_OK)
|
||||
{
|
||||
CloseFile();
|
||||
m_Status = NULLMODE;
|
||||
return S_FALSE;
|
||||
return nResult;
|
||||
}
|
||||
if (!((CPPTFileReader*)m_pReader)->m_oDocumentInfo.m_arUsers.empty())
|
||||
{
|
||||
NSPresentationEditor::CPPTXWriter oPPTXWriter;
|
||||
NSPresentationEditor::CPPTXWriter oPPTXWriter;
|
||||
oPPTXWriter.m_strTempDirectory = sDstPath;
|
||||
|
||||
|
||||
oPPTXWriter.CreateFile(((CPPTFileReader*)m_pReader)->m_oDocumentInfo.m_arUsers[0]);
|
||||
oPPTXWriter.CloseFile();
|
||||
|
||||
}
|
||||
return S_OK;
|
||||
}
|
||||
@ -122,3 +166,94 @@ std::wstring COfficePPTFile::GetDirectory(std::wstring strFileName)
|
||||
}
|
||||
return strFileName;
|
||||
}
|
||||
|
||||
bool COfficePPTFile::DecryptOfficeFile(CRYPT::Decryptor* Decryptor)
|
||||
{
|
||||
if (!m_pReader) return false;
|
||||
CPPTFileReader* pptReader = (CPPTFileReader*)(m_pReader);
|
||||
|
||||
if (m_strTempDirectory.empty())
|
||||
{
|
||||
m_strTempDirectory = NSFile::CFileBinary::GetTempPath();
|
||||
}
|
||||
m_sTempDecryptFileName = m_strTempDirectory + FILE_SEPARATOR_STR + L"~tempFile.ppt";
|
||||
|
||||
POLE::Storage *storageIn = pptReader->m_pPowerPointStg;
|
||||
POLE::Storage *storageOut = new POLE::Storage(m_sTempDecryptFileName.c_str());
|
||||
|
||||
if (!storageOut || !storageIn) return false;
|
||||
|
||||
if (!storageOut->open(true, true))
|
||||
{
|
||||
delete storageOut;
|
||||
return false;
|
||||
}
|
||||
std::list<std::string> listStream = storageIn->entries();
|
||||
|
||||
for (std::list<std::string>::iterator it = listStream.begin(); it != listStream.end(); it++)
|
||||
{
|
||||
if (storageIn->isDirectory(*it))
|
||||
{
|
||||
std::list<std::string> list_entry = storageIn->GetAllStreams(*it);
|
||||
|
||||
for (std::list<std::string>::iterator it2 = list_entry.begin(); it2 != list_entry.end(); it2++)
|
||||
{
|
||||
DecryptStream(Decryptor, *it2, storageIn, storageOut);
|
||||
}
|
||||
}
|
||||
else
|
||||
DecryptStream(Decryptor, *it, storageIn, storageOut);
|
||||
|
||||
}
|
||||
storageOut->close();
|
||||
delete storageOut;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool COfficePPTFile::DecryptStream(CRYPT::Decryptor* Decryptor, std::string streamName, POLE::Storage * storageIn, POLE::Storage * storageOut)
|
||||
{
|
||||
POLE::Stream *stream = new POLE::Stream(storageIn, streamName);
|
||||
if (!stream) return false;
|
||||
|
||||
stream->seek(0);
|
||||
int sz_stream = stream->size();
|
||||
|
||||
POLE::Stream *streamNew = new POLE::Stream(storageOut, streamName, true, sz_stream);
|
||||
if (!streamNew) return false;
|
||||
|
||||
unsigned char* data_stream = new unsigned char[sz_stream];
|
||||
stream->read(data_stream, sz_stream);
|
||||
|
||||
unsigned char* data_store = NULL;
|
||||
int sz_data_store = 0;
|
||||
|
||||
//if ("WordDocument" == streamName)
|
||||
//{
|
||||
// sz_data_store = 68;
|
||||
// data_store = new unsigned char[sz_data_store];
|
||||
//}
|
||||
|
||||
if (data_store)
|
||||
memcpy(data_store, data_stream, sz_data_store);
|
||||
|
||||
Decryptor->Decrypt((char*)data_stream, sz_stream, 0);
|
||||
|
||||
if (data_store)
|
||||
memcpy(data_stream, data_store, sz_data_store);
|
||||
|
||||
streamNew->write(data_stream, sz_stream);
|
||||
|
||||
RELEASEARRAYOBJECTS(data_store);
|
||||
RELEASEARRAYOBJECTS(data_stream);
|
||||
|
||||
streamNew->flush();
|
||||
|
||||
delete streamNew;
|
||||
delete stream;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -35,31 +35,26 @@
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace CRYPT
|
||||
{
|
||||
class Decryptor;
|
||||
}
|
||||
|
||||
namespace POLE
|
||||
{
|
||||
class Storage;
|
||||
}
|
||||
|
||||
class COfficePPTFile
|
||||
{
|
||||
public:
|
||||
COfficePPTFile()
|
||||
{
|
||||
m_strTempDirectory = L"";
|
||||
m_pReader = NULL;
|
||||
m_Status = 0;
|
||||
|
||||
}
|
||||
|
||||
~COfficePPTFile();
|
||||
|
||||
private:
|
||||
|
||||
int m_Status;
|
||||
|
||||
void* m_pReader;
|
||||
|
||||
std::vector<std::wstring> m_arUserSources;
|
||||
|
||||
std::wstring m_strTempDirectory;
|
||||
|
||||
public:
|
||||
|
||||
HRESULT put_TempDirectory(std::wstring sDir)
|
||||
{
|
||||
m_strTempDirectory = sDir;
|
||||
@ -71,13 +66,22 @@ public:
|
||||
return m_strTempDirectory;
|
||||
}
|
||||
|
||||
HRESULT LoadFromFile(std::wstring sSrcFileName, std::wstring sDstPath);
|
||||
HRESULT LoadFromFile(std::wstring sSrcFileName, std::wstring sDstPath, std::wstring password);
|
||||
|
||||
private:
|
||||
bool OpenFile(std::wstring sFileName);
|
||||
|
||||
int m_Status;
|
||||
void* m_pReader;
|
||||
std::vector<std::wstring> m_arUserSources;
|
||||
std::wstring m_strTempDirectory;
|
||||
std::wstring m_sTempDecryptFileName;
|
||||
|
||||
long OpenFile(const std::wstring & fileName, const std::wstring & password);
|
||||
bool CloseFile();
|
||||
|
||||
std::wstring GetDirectory(std::wstring strFileName);
|
||||
bool DecryptOfficeFile (CRYPT::Decryptor* Decryptor);
|
||||
bool DecryptStream (CRYPT::Decryptor* Decryptor, std::string streamName, POLE::Storage* storageIn, POLE::Storage* storageOut);
|
||||
|
||||
std::wstring GetDirectory(std::wstring strFileName);
|
||||
};
|
||||
|
||||
|
||||
@ -42,15 +42,16 @@ public:
|
||||
DWORD m_nOffsetPersistDirectory;
|
||||
|
||||
DWORD m_nDocumentRef;
|
||||
DWORD m_nEncryptRef;
|
||||
DWORD m_nMaxPersistWritten;
|
||||
|
||||
public:
|
||||
CUserEdit()
|
||||
{
|
||||
m_nOffsetLastEdit = 0;
|
||||
m_nOffsetPersistDirectory = 0;
|
||||
m_nDocumentRef = 0;
|
||||
m_nMaxPersistWritten = 0;
|
||||
m_nOffsetLastEdit = 0;
|
||||
m_nOffsetPersistDirectory = 0;
|
||||
m_nDocumentRef = 0;
|
||||
m_nMaxPersistWritten = 0;
|
||||
m_nEncryptRef = 0;
|
||||
}
|
||||
~CUserEdit()
|
||||
{
|
||||
@ -62,15 +63,17 @@ public:
|
||||
m_nOffsetPersistDirectory = oSrc.m_nOffsetPersistDirectory;
|
||||
m_nDocumentRef = oSrc.m_nDocumentRef;
|
||||
m_nMaxPersistWritten = oSrc.m_nMaxPersistWritten;
|
||||
m_nEncryptRef = oSrc.m_nEncryptRef;
|
||||
return (*this);
|
||||
}
|
||||
|
||||
void FromAtom(CRecordUserEditAtom* pAtom)
|
||||
{
|
||||
m_nOffsetLastEdit = pAtom->m_nOffsetLastEdit;
|
||||
m_nOffsetPersistDirectory = pAtom->m_nOffsetPersistDirectory;
|
||||
m_nDocumentRef = pAtom->m_nOffsetDocPersistIdRef;
|
||||
m_nMaxPersistWritten = pAtom->m_nPersistIdSeed;
|
||||
m_nOffsetLastEdit = pAtom->m_nOffsetLastEdit;
|
||||
m_nOffsetPersistDirectory = pAtom->m_nOffsetPersistDirectory;
|
||||
m_nDocumentRef = pAtom->m_nOffsetDocPersistIdRef;
|
||||
m_nMaxPersistWritten = pAtom->m_nPersistIdSeed;
|
||||
m_nEncryptRef = pAtom->m_nEncryptSessionPersistIdRef;
|
||||
}
|
||||
};
|
||||
|
||||
@ -79,10 +82,8 @@ class CCurrentUser
|
||||
public:
|
||||
bool m_bIsEncrypt;
|
||||
DWORD m_nOffsetToCurrentEdit;
|
||||
std::wstring m_sName;
|
||||
|
||||
std::wstring m_strName;
|
||||
|
||||
public:
|
||||
CCurrentUser()
|
||||
{
|
||||
m_bIsEncrypt = false;
|
||||
@ -96,20 +97,16 @@ public:
|
||||
{
|
||||
m_bIsEncrypt = oSrc.m_bIsEncrypt;
|
||||
m_nOffsetToCurrentEdit = oSrc.m_nOffsetToCurrentEdit;
|
||||
m_strName = oSrc.m_strName;
|
||||
m_sName = oSrc.m_sName;
|
||||
return (*this);
|
||||
}
|
||||
|
||||
void FromAtom(CRecordCurrentUserAtom* pAtom)
|
||||
{
|
||||
m_bIsEncrypt = (NO_ENCRYPT == pAtom->m_nToken);
|
||||
m_bIsEncrypt = (ENCRYPT == pAtom->m_nToken);
|
||||
|
||||
m_nOffsetToCurrentEdit = pAtom->m_nOffsetToCurEdit;
|
||||
m_strName = pAtom->m_strUNICODEUserName;
|
||||
}
|
||||
|
||||
std::wstring ToString()
|
||||
{
|
||||
return L"";
|
||||
m_sName = pAtom->m_strUNICODEUserName;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -40,12 +40,10 @@ public:
|
||||
std::vector<CPPTUserInfo*> m_arUsers;
|
||||
std::wstring m_strFileDirectory;
|
||||
std::map<int, std::wstring> m_mapStoreImageFile;
|
||||
|
||||
public:
|
||||
std::wstring m_strPassword;
|
||||
|
||||
CPPTDocumentInfo() : m_oCurrentUser(), m_arUsers()
|
||||
{
|
||||
m_strFileDirectory = _T("");
|
||||
}
|
||||
|
||||
~CPPTDocumentInfo()
|
||||
@ -66,7 +64,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void ReadFromStream(CRecordCurrentUserAtom* pCurrentUser, POLE::Stream* pStream, std::wstring strFolderMem)
|
||||
bool ReadFromStream(CRecordCurrentUserAtom* pCurrentUser, POLE::Stream* pStream)
|
||||
{
|
||||
m_oCurrentUser.FromAtom(pCurrentUser);
|
||||
|
||||
@ -86,13 +84,16 @@ public:
|
||||
oUserAtom.ReadFromStream(oHeader, pStream);
|
||||
|
||||
CPPTUserInfo* pInfo = new CPPTUserInfo();
|
||||
|
||||
pInfo->m_strFileDirectory = m_strFileDirectory;
|
||||
pInfo->m_bEncrypt = m_oCurrentUser.m_bIsEncrypt;
|
||||
pInfo->m_strPassword = m_strPassword;
|
||||
|
||||
bool bRes = pInfo->ReadFromStream(&oUserAtom, pStream, strFolderMem);
|
||||
bool bResult = pInfo->ReadFromStream(&oUserAtom, pStream);
|
||||
|
||||
offsetToEdit = pInfo->m_oUser.m_nOffsetLastEdit;
|
||||
|
||||
if (!bRes)
|
||||
if (bResult == false)
|
||||
{
|
||||
delete pInfo;
|
||||
continue;
|
||||
@ -105,11 +106,16 @@ public:
|
||||
|
||||
pInfo = NULL;
|
||||
}
|
||||
// теперь нужно у всех сделать FromDocument...или только для ПОСЛЕДНЕГО пользователя ??? (остальные то не нужны)
|
||||
//for (int i = 0; i < m_arUsers.size(); ++i)
|
||||
if (m_arUsers.size() > 0)
|
||||
{
|
||||
m_arUsers[0]->FromDocument();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
bool LoadDocument(std::wstring strFolderMem)
|
||||
{
|
||||
if (m_arUsers.empty()) return false;
|
||||
|
||||
m_arUsers[0]->ReadExtenalObjects(strFolderMem);
|
||||
m_arUsers[0]->FromDocument();
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
@ -47,6 +47,7 @@ CPPTUserInfo::CPPTUserInfo() : CDocument(),
|
||||
m_mapMasters(),
|
||||
m_mapNotes(),
|
||||
m_mapSlides(),
|
||||
m_bEncrypt(false),
|
||||
m_arOffsetPictures()
|
||||
{
|
||||
m_pDocumentInfo = NULL;
|
||||
@ -128,10 +129,11 @@ void CPPTUserInfo::Clear()
|
||||
m_arOffsetPictures.clear();
|
||||
}
|
||||
|
||||
bool CPPTUserInfo::ReadFromStream(CRecordUserEditAtom* pUser, POLE::Stream* pStream, std::wstring strFolderMem)
|
||||
bool CPPTUserInfo::ReadFromStream(CRecordUserEditAtom* pUser, POLE::Stream* pStream)
|
||||
{
|
||||
m_oUser.FromAtom(pUser);
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
SRecordHeader oHeader;
|
||||
CRecordUserEditAtom oUserAtom;
|
||||
|
||||
@ -147,21 +149,78 @@ bool CPPTUserInfo::ReadFromStream(CRecordUserEditAtom* pUser, POLE::Stream* pStr
|
||||
CRecordPersistDirectoryAtom oPersist;
|
||||
oPersist.ReadFromStream(oHeader, pStream);
|
||||
oPersist.ToMap(&m_mapOffsetInPIDs);
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
CRYPT::ECMADecryptor *pDecryptor = NULL;
|
||||
std::map<DWORD, DWORD>::iterator pPair = m_mapOffsetInPIDs.find(m_oUser.m_nEncryptRef);
|
||||
|
||||
if (pPair != m_mapOffsetInPIDs.end())
|
||||
{
|
||||
StreamUtils::StreamSeek(pPair->second, pStream);
|
||||
oHeader.ReadFromStream(pStream);
|
||||
|
||||
std::map<DWORD, DWORD>::iterator pPair = m_mapOffsetInPIDs.find(m_oUser.m_nDocumentRef);
|
||||
if (RECORD_TYPE_DOCUMENT_ENCRYPTION_ATOM == oHeader.RecType)
|
||||
{
|
||||
m_bEncrypt = true;
|
||||
m_oEncryptionHeader.ReadFromStream(oHeader, pStream);
|
||||
|
||||
pDecryptor = new CRYPT::ECMADecryptor();
|
||||
pDecryptor->SetCryptData(m_oEncryptionHeader.crypt_data_aes);
|
||||
|
||||
if (pDecryptor->SetPassword(m_strPassword) == false)
|
||||
{
|
||||
delete pDecryptor;
|
||||
pDecryptor = NULL;
|
||||
|
||||
//return true;
|
||||
}
|
||||
return true;//read persis decrypt
|
||||
}
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
pPair = m_mapOffsetInPIDs.find(m_oUser.m_nDocumentRef);
|
||||
|
||||
if (pPair == m_mapOffsetInPIDs.end())
|
||||
return false;
|
||||
|
||||
StreamUtils::StreamSeek(pPair->second, pStream);
|
||||
DWORD offset_stream = pPair->second;
|
||||
|
||||
StreamUtils::StreamSeek(offset_stream, pStream);
|
||||
oHeader.ReadFromStream(pStream);
|
||||
|
||||
if (RECORD_TYPE_DOCUMENT != oHeader.RecType)
|
||||
if (pDecryptor)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
POLE::Storage *pStorageOut = NULL;
|
||||
POLE::Stream *pStreamTmp = NULL;
|
||||
|
||||
m_oDocument.ReadFromStream(oHeader, pStream);
|
||||
std::wstring sTemp = m_strFileDirectory + FILE_SEPARATOR_STR + L"~tempFile.ppt";
|
||||
|
||||
pStorageOut = new POLE::Storage(sTemp.c_str());
|
||||
pStorageOut->open(true, true);
|
||||
|
||||
pStreamTmp = new POLE::Stream(pStorageOut, "Tmp", true, oHeader.RecLen);
|
||||
|
||||
unsigned char* data_stream = new unsigned char[oHeader.RecLen];
|
||||
pStream->read(data_stream, oHeader.RecLen);
|
||||
pDecryptor->Decrypt((char*)data_stream, oHeader.RecLen, m_oUser.m_nDocumentRef);
|
||||
pStreamTmp->write(data_stream, oHeader.RecLen);
|
||||
pStreamTmp->flush();
|
||||
pStreamTmp->seek(0);
|
||||
|
||||
m_oDocument.ReadFromStream(oHeader, pStreamTmp);
|
||||
|
||||
delete pStream;
|
||||
delete pStorageOut;
|
||||
|
||||
//NSFile::DeleteFile(sTemp);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (RECORD_TYPE_DOCUMENT != oHeader.RecType)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
m_oDocument.ReadFromStream(oHeader, pStream);
|
||||
}
|
||||
|
||||
Clear();
|
||||
|
||||
@ -173,11 +232,12 @@ bool CPPTUserInfo::ReadFromStream(CRecordUserEditAtom* pUser, POLE::Stream* pStr
|
||||
|
||||
if (nIndexPsrRef != m_mapOffsetInPIDs.end())
|
||||
{
|
||||
long offset = (long)nIndexPsrRef->second;
|
||||
offset_stream = nIndexPsrRef->second;
|
||||
|
||||
StreamUtils::StreamSeek(offset, pStream);
|
||||
StreamUtils::StreamSeek(offset_stream, pStream);
|
||||
|
||||
oHeader.ReadFromStream(pStream);
|
||||
|
||||
CRecordSlide* pSlide = new CRecordSlide();
|
||||
pSlide->ReadFromStream(oHeader, pStream);
|
||||
pSlide->m_oPersist = m_oDocument.m_arMasterPersists[index];
|
||||
@ -198,8 +258,8 @@ bool CPPTUserInfo::ReadFromStream(CRecordUserEditAtom* pUser, POLE::Stream* pStr
|
||||
|
||||
if (m_mapOffsetInPIDs.end() != nIndexPsrRef)
|
||||
{
|
||||
long offset = (long)nIndexPsrRef->second;
|
||||
StreamUtils::StreamSeek(offset, pStream);
|
||||
offset_stream = nIndexPsrRef->second;
|
||||
StreamUtils::StreamSeek(offset_stream, pStream);
|
||||
|
||||
oHeader.ReadFromStream(pStream);
|
||||
CRecordSlide* pSlide = new CRecordSlide();
|
||||
@ -223,9 +283,9 @@ bool CPPTUserInfo::ReadFromStream(CRecordUserEditAtom* pUser, POLE::Stream* pStr
|
||||
|
||||
if (m_mapOffsetInPIDs.end() != nIndexPsrRef)
|
||||
{
|
||||
long offset = (long)nIndexPsrRef->second;
|
||||
offset_stream = (long)nIndexPsrRef->second;
|
||||
|
||||
StreamUtils::StreamSeek(offset, pStream);
|
||||
StreamUtils::StreamSeek(offset_stream, pStream);
|
||||
|
||||
oHeader.ReadFromStream(pStream);
|
||||
|
||||
@ -266,9 +326,9 @@ bool CPPTUserInfo::ReadFromStream(CRecordUserEditAtom* pUser, POLE::Stream* pStr
|
||||
|
||||
if (m_mapOffsetInPIDs.end() != nIndexPsrRef)
|
||||
{
|
||||
long offset = (long)nIndexPsrRef->second;
|
||||
offset_stream = nIndexPsrRef->second;
|
||||
|
||||
StreamUtils::StreamSeek(offset, pStream);
|
||||
StreamUtils::StreamSeek(offset_stream, pStream);
|
||||
|
||||
oHeader.ReadFromStream(pStream);
|
||||
|
||||
@ -283,9 +343,9 @@ bool CPPTUserInfo::ReadFromStream(CRecordUserEditAtom* pUser, POLE::Stream* pStr
|
||||
|
||||
if (m_mapOffsetInPIDs.end() != nIndexPsrRef)
|
||||
{
|
||||
long offset = (long)nIndexPsrRef->second;
|
||||
offset_stream = nIndexPsrRef->second;
|
||||
|
||||
StreamUtils::StreamSeek(offset, pStream);
|
||||
StreamUtils::StreamSeek(offset_stream, pStream);
|
||||
|
||||
oHeader.ReadFromStream(pStream);
|
||||
|
||||
@ -297,7 +357,11 @@ bool CPPTUserInfo::ReadFromStream(CRecordUserEditAtom* pUser, POLE::Stream* pStr
|
||||
m_mapHandoutMasters.insert( std::pair<DWORD, CRecordSlide*>(0, pSlide ));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------
|
||||
void CPPTUserInfo::ReadExtenalObjects(std::wstring strFolderMem)
|
||||
{
|
||||
// так... теперь берем всю инфу о ExObject -----------------------------
|
||||
m_oExMedia.m_strPresentationDirectory = strFolderMem;
|
||||
m_oExMedia.m_strSourceDirectory = m_strFileDirectory;
|
||||
@ -347,20 +411,12 @@ bool CPPTUserInfo::ReadFromStream(CRecordUserEditAtom* pUser, POLE::Stream* pStr
|
||||
|
||||
m_arrFonts.push_back(oFont);
|
||||
}
|
||||
|
||||
//FromDocument();
|
||||
// FromDocument - должен вызываться после того, как загрузятся все (!!!) юзеры
|
||||
|
||||
// теперь заполним пустые картинки
|
||||
//std::vector<CRecordBlipStoreContainer*> oArray;
|
||||
m_oDocument.GetRecordsByType(&m_arrBlipStore, true, true);
|
||||
if (0 < m_arrBlipStore.size())
|
||||
{
|
||||
m_bIsSetupEmpty = TRUE;
|
||||
m_arrBlipStore[0]->SetUpPicturesInfos(&m_arOffsetPictures);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void CPPTUserInfo::FromDocument()
|
||||
|
||||
@ -34,6 +34,7 @@
|
||||
|
||||
#include "../Records/Animations/AnimationTypes.h"
|
||||
#include "../Records/ExObjListContainer.h"
|
||||
#include "../Records/CryptSession10Container.h"
|
||||
|
||||
#include "SlideInfo.h"
|
||||
|
||||
@ -46,6 +47,10 @@ public:
|
||||
CUserEdit m_oUser;
|
||||
std::map<DWORD, DWORD> m_mapOffsetInPIDs;
|
||||
CRecordDocument m_oDocument;
|
||||
|
||||
CEncryptionHeader m_oEncryptionHeader;
|
||||
bool m_bEncrypt;
|
||||
std::wstring m_strPassword;
|
||||
|
||||
std::map<DWORD, CRecordSlide*> m_mapSlides;
|
||||
std::map<DWORD, CRecordSlide*> m_mapMasters;
|
||||
@ -118,7 +123,8 @@ public:
|
||||
|
||||
void Clear();
|
||||
|
||||
bool ReadFromStream(CRecordUserEditAtom* pUser, POLE::Stream* pStream, std::wstring strFolderMem);
|
||||
bool ReadFromStream(CRecordUserEditAtom* pUser, POLE::Stream* pStream);
|
||||
void ReadExtenalObjects(std::wstring strFolderMem);
|
||||
void FromDocument();
|
||||
|
||||
void NormalizeCoords(long lWidth, long lHeight);
|
||||
|
||||
@ -196,7 +196,8 @@ typedef BYTE BOOL1;
|
||||
#define RECORD_TYPE_COMMENT2000SUMMARYATOM 12005
|
||||
|
||||
// Records ~12050 seem to be related to Document Encryption
|
||||
#define RECORD_TYPE_DOCUMENT_ENCRYPTION_ATOM 12052
|
||||
#define RECORD_TYPE_DOCUMENT_ENCRYPTION_ATOM 0x2F14
|
||||
|
||||
|
||||
//records greater then 0xF000 belong to with Microsoft Office Drawing format also known as Escher
|
||||
#define RECORD_TYPE_ESCHER_DGG_CONTAINER 0xF000
|
||||
@ -251,6 +252,7 @@ typedef BYTE BOOL1;
|
||||
#define RECORD_PROG_BINARY_TAG 0x138A // RT_ProgBinaryTag SlideProgTagsContainer-DocProgTagsContainer-ShapeProgTagsContainer
|
||||
#define RECORD_TEXT_MASTER_STYLE10_ATOM 0x0FB2 // RT_TextMasterStyle10Atom TextMasterStyle10Atom
|
||||
|
||||
|
||||
static std::string GetRecordName(DWORD dwType)
|
||||
{
|
||||
std::string strName = ("Unknown");
|
||||
|
||||
@ -31,6 +31,7 @@
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "../../../ASCOfficeXlsFile2/source/XlsFormat/Crypt/Decryptor.h"
|
||||
#include "../../../DesktopEditor/common/Directory.h"
|
||||
#include "../Records/Drawing/ArtBlip.h"
|
||||
|
||||
@ -45,6 +46,8 @@
|
||||
|
||||
#define PP97_DUALSTORAGE "PP97_DUALSTORAGE"
|
||||
|
||||
#define ENCRYPTION_STREAM "EncryptedSummary"
|
||||
|
||||
class CPPTFileReader
|
||||
{
|
||||
public:
|
||||
@ -53,7 +56,6 @@ public:
|
||||
m_bIsPPTFile(false),
|
||||
m_pDocStream(NULL),
|
||||
m_pPictureStream(NULL),
|
||||
m_lImagesCount(0),
|
||||
m_strMemoryForder(strTemp),
|
||||
m_oDocumentInfo()
|
||||
{
|
||||
@ -63,12 +65,12 @@ public:
|
||||
|
||||
if ( ReadCurrentUser(pStm) )
|
||||
{
|
||||
m_bIsPPTFile = TRUE;
|
||||
m_bIsPPTFile = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
RELEASEOBJECT(pStm);
|
||||
|
||||
|
||||
std::string stream_name = std::string(PP97_DUALSTORAGE) + std::string("/") + std::string(CURRENT_USER_STREAM);
|
||||
pStm = new POLE::Stream( m_pPowerPointStg, stream_name);
|
||||
|
||||
@ -78,7 +80,7 @@ public:
|
||||
m_bDualStorage = true;
|
||||
if ( ReadCurrentUser(pStm))
|
||||
{
|
||||
m_bIsPPTFile = TRUE;
|
||||
m_bIsPPTFile = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -106,27 +108,27 @@ public:
|
||||
{
|
||||
return m_bIsPPTFile;
|
||||
}
|
||||
|
||||
void ReadPersistDirectory()
|
||||
bool IsEncrypted()
|
||||
{
|
||||
bool bRes = SavePictures();
|
||||
// нужно вызывать РОВНО один раз...
|
||||
m_oDocumentInfo.ReadFromStream(&m_oCurrentUser, GetDocStream(), m_strMemoryForder);
|
||||
if (m_oDocumentInfo.m_arUsers.empty())
|
||||
return m_oDocumentInfo.m_oCurrentUser.m_bIsEncrypt; //wps не выставляет флаг!
|
||||
|
||||
return m_oDocumentInfo.m_arUsers[0]->m_bEncrypt;
|
||||
}
|
||||
|
||||
void ReadSlideList()
|
||||
CEncryptionHeader* GetEncryptionHeader()
|
||||
{
|
||||
if (m_oDocumentInfo.m_arUsers.size() > 0)
|
||||
{
|
||||
if (m_oDocumentInfo.m_arUsers.empty()) return NULL;
|
||||
|
||||
DWORD nPID = m_oDocumentInfo.m_arUsers[0]->m_oUser.m_nDocumentRef;
|
||||
std::map<DWORD, DWORD>::iterator pPair = m_oDocumentInfo.m_arUsers[0]->m_mapOffsetInPIDs.find(nPID);
|
||||
|
||||
if (pPair == m_oDocumentInfo.m_arUsers[0]->m_mapOffsetInPIDs.end()) return;
|
||||
|
||||
DWORD offset = pPair->second;
|
||||
StreamUtils::StreamSeek((long)offset, GetDocStream());
|
||||
}
|
||||
return &m_oDocumentInfo.m_arUsers[0]->m_oEncryptionHeader;
|
||||
}
|
||||
bool ReadPersists()
|
||||
{
|
||||
return m_oDocumentInfo.ReadFromStream(&m_oCurrentUser, GetDocStream());
|
||||
}
|
||||
void ReadDocument(CRYPT::ECMADecryptor *pDecryptor)
|
||||
{
|
||||
ReadPictures(pDecryptor);
|
||||
m_oDocumentInfo.LoadDocument(m_strMemoryForder);
|
||||
}
|
||||
|
||||
protected:
|
||||
@ -142,8 +144,7 @@ protected:
|
||||
{
|
||||
m_oCurrentUser.ReadFromStream(oHeader, pStm);
|
||||
|
||||
isPP = (m_oCurrentUser.m_nSize == 0x00000014 && (m_oCurrentUser.m_nToken == NO_ENCRYPT) &&
|
||||
(m_oCurrentUser.m_nLenUserName <= 255));
|
||||
isPP = (m_oCurrentUser.m_nSize == 0x00000014 && (m_oCurrentUser.m_nLenUserName <= 255));
|
||||
}
|
||||
|
||||
return isPP;
|
||||
@ -180,22 +181,15 @@ protected:
|
||||
return m_pPictureStream;
|
||||
}
|
||||
|
||||
bool SavePictures()
|
||||
void ReadPictures(CRYPT::ECMADecryptor *pDecryptor)
|
||||
{
|
||||
POLE::Stream* pStream = GetPictureStream();
|
||||
if (NULL == pStream) return;
|
||||
|
||||
if (NULL == pStream)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
SRecordHeader oHeader;
|
||||
ULONG nRd = 0;
|
||||
m_lImagesCount = 0;
|
||||
|
||||
// удаление картинок при завершении программы
|
||||
|
||||
while (TRUE)
|
||||
while (true)
|
||||
{
|
||||
if (oHeader.ReadFromStream(pStream) == false )
|
||||
{
|
||||
@ -206,26 +200,53 @@ protected:
|
||||
art_blip.m_strMemoryForder = m_strMemoryForder;
|
||||
art_blip.m_oDocumentInfo = &m_oDocumentInfo;
|
||||
|
||||
art_blip.ReadFromStream(oHeader, pStream);
|
||||
if (pDecryptor)
|
||||
{
|
||||
POLE::Storage *pStorageOut = NULL;
|
||||
POLE::Stream *pStreamTmp = NULL;
|
||||
|
||||
std::wstring sTemp = m_strMemoryForder + FILE_SEPARATOR_STR + L"~tempFile.ppt";
|
||||
|
||||
pStorageOut = new POLE::Storage(sTemp.c_str());
|
||||
pStorageOut->open(true, true);
|
||||
|
||||
pStreamTmp = new POLE::Stream(pStorageOut, "Tmp", true, oHeader.RecLen);
|
||||
|
||||
unsigned char* data_stream = new unsigned char[oHeader.RecLen];
|
||||
pStream->read(data_stream, oHeader.RecLen);
|
||||
pDecryptor->Decrypt((char*)data_stream, oHeader.RecLen, 0);
|
||||
pStreamTmp->write(data_stream, oHeader.RecLen);
|
||||
pStreamTmp->flush();
|
||||
pStreamTmp->seek(0);
|
||||
|
||||
art_blip.ReadFromStream(oHeader, pStreamTmp);
|
||||
|
||||
delete pStream;
|
||||
delete pStorageOut;
|
||||
|
||||
//NSFile::DeleteFile(sTemp);
|
||||
}
|
||||
else
|
||||
{
|
||||
art_blip.ReadFromStream(oHeader, pStream);
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
bool m_bDualStorage;
|
||||
CRecordCurrentUserAtom m_oCurrentUser;
|
||||
POLE::Stream * m_pDocStream;
|
||||
POLE::Stream * m_pPictureStream;
|
||||
POLE::Storage* m_pPowerPointStg;
|
||||
bool m_bIsPPTFile;
|
||||
|
||||
bool m_bIsPPTFile;
|
||||
|
||||
public:
|
||||
// для картинок
|
||||
POLE::Storage* m_pPowerPointStg;
|
||||
std::wstring m_strMemoryForder;
|
||||
|
||||
std::vector<bool> m_arLoadImageFlags;
|
||||
DWORD m_lImagesCount;
|
||||
|
||||
CPPTDocumentInfo m_oDocumentInfo;
|
||||
};
|
||||
|
||||
@ -35,11 +35,13 @@
|
||||
#include "../Reader/ReadStructures.h"
|
||||
#include "../../../ASCOfficePPTXFile/Editor/Drawing/Shapes/BaseShape/PPTShape/Enums.h"
|
||||
#include "../../../Common/3dParty/pole/pole.h"
|
||||
#include "../../../OfficeCryptReader/source/CryptTransform.h"
|
||||
|
||||
using namespace NSPresentationEditor;
|
||||
|
||||
struct SRecordHeader
|
||||
class SRecordHeader
|
||||
{
|
||||
public:
|
||||
BYTE RecVersion;
|
||||
USHORT RecInstance;
|
||||
USHORT RecType;
|
||||
@ -48,7 +50,8 @@ struct SRecordHeader
|
||||
SRecordHeader()
|
||||
{
|
||||
RecVersion = 0;
|
||||
RecInstance = RecType = 0;
|
||||
RecInstance = 0;
|
||||
RecType = 0;
|
||||
RecLen = 0;
|
||||
}
|
||||
|
||||
|
||||
169
ASCOfficePPTFile/PPTFormatLib/Records/CryptSession10Container.h
Normal file
169
ASCOfficePPTFile/PPTFormatLib/Records/CryptSession10Container.h
Normal file
@ -0,0 +1,169 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2017
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
#include "../../../ASCOfficeXlsFile2/source/XlsFormat/Crypt/Decryptor.h"
|
||||
|
||||
class CEncryptionHeader : public CUnknownRecord
|
||||
{
|
||||
public:
|
||||
|
||||
CRYPT::_rc4CryptData crypt_data_rc4;
|
||||
CRYPT::_ecmaCryptData crypt_data_aes;
|
||||
bool bStandard;
|
||||
|
||||
CEncryptionHeader()
|
||||
{
|
||||
}
|
||||
|
||||
~CEncryptionHeader()
|
||||
{
|
||||
}
|
||||
|
||||
virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream)
|
||||
{
|
||||
m_oHeader = oHeader;
|
||||
|
||||
int pos_start_record = pStream->tell();
|
||||
|
||||
unsigned short vMajor = StreamUtils::ReadWORD(pStream);
|
||||
unsigned short vMinor = StreamUtils::ReadWORD(pStream);
|
||||
|
||||
if(0x0001 == vMajor) // RC4 encryption header structure
|
||||
{
|
||||
bStandard = true;
|
||||
|
||||
crypt_data_rc4.Salt.b1 = StreamUtils::ReadDWORD(pStream);
|
||||
crypt_data_rc4.Salt.b2 = StreamUtils::ReadDWORD(pStream);
|
||||
crypt_data_rc4.Salt.b3 = StreamUtils::ReadDWORD(pStream);
|
||||
crypt_data_rc4.Salt.b4 = StreamUtils::ReadDWORD(pStream);
|
||||
|
||||
crypt_data_rc4.EncryptedVerifier.b1 = StreamUtils::ReadDWORD(pStream);
|
||||
crypt_data_rc4.EncryptedVerifier.b2 = StreamUtils::ReadDWORD(pStream);
|
||||
crypt_data_rc4.EncryptedVerifier.b3 = StreamUtils::ReadDWORD(pStream);
|
||||
crypt_data_rc4.EncryptedVerifier.b4 = StreamUtils::ReadDWORD(pStream);
|
||||
|
||||
crypt_data_rc4.EncryptedVerifierHash.b1 = StreamUtils::ReadDWORD(pStream);
|
||||
crypt_data_rc4.EncryptedVerifierHash.b2 = StreamUtils::ReadDWORD(pStream);
|
||||
crypt_data_rc4.EncryptedVerifierHash.b3 = StreamUtils::ReadDWORD(pStream);
|
||||
crypt_data_rc4.EncryptedVerifierHash.b4 = StreamUtils::ReadDWORD(pStream);
|
||||
}
|
||||
else
|
||||
{
|
||||
bStandard = false;
|
||||
crypt_data_aes.bAgile = false;
|
||||
|
||||
unsigned short flags = StreamUtils::ReadDWORD(pStream);
|
||||
unsigned char *pDataRead = NULL;
|
||||
|
||||
bool fCryptoAPI = GETBIT(flags, 1);
|
||||
bool fDocProps = GETBIT(flags, 2);
|
||||
bool fExternal = GETBIT(flags, 3);
|
||||
bool fAES = GETBIT(flags, 4);
|
||||
|
||||
//EncryptionHeader
|
||||
int HeaderSize = StreamUtils::ReadDWORD(pStream);
|
||||
int Flags = StreamUtils::ReadDWORD(pStream);
|
||||
int SizeExtra = StreamUtils::ReadDWORD(pStream);
|
||||
int AlgID = StreamUtils::ReadDWORD(pStream);
|
||||
int AlgIDHash = StreamUtils::ReadDWORD(pStream);
|
||||
int KeySize = StreamUtils::ReadDWORD(pStream);
|
||||
int ProviderType= StreamUtils::ReadDWORD(pStream);
|
||||
int Reserved1 = StreamUtils::ReadDWORD(pStream);
|
||||
int Reserved2 = StreamUtils::ReadDWORD(pStream);
|
||||
|
||||
int pos = pStream->tell();
|
||||
int size = pStream->size();
|
||||
|
||||
std::vector<char> dataCSPName;
|
||||
while(pos < size - 1)
|
||||
{
|
||||
dataCSPName.push_back(StreamUtils::ReadBYTE(pStream));
|
||||
dataCSPName.push_back(StreamUtils::ReadBYTE(pStream));
|
||||
if (dataCSPName[dataCSPName.size() - 1] == 0 && dataCSPName[dataCSPName.size() - 2] == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
pos+=2;//unicode null-terminate string
|
||||
}
|
||||
//EncryptionVerifier
|
||||
crypt_data_aes.saltSize = StreamUtils::ReadDWORD(pStream);
|
||||
crypt_data_aes.saltValue = StreamUtils::ReadStringA(pStream, crypt_data_aes.saltSize);
|
||||
|
||||
crypt_data_aes.encryptedVerifierInput = StreamUtils::ReadStringA(pStream, 0x10);
|
||||
|
||||
crypt_data_aes.hashSize = StreamUtils::ReadDWORD(pStream);
|
||||
|
||||
int szEncryptedVerifierHash = (ProviderType == 0x0001) ? 0x14 : 0x20;
|
||||
crypt_data_aes.encryptedVerifierValue = StreamUtils::ReadStringA(pStream, szEncryptedVerifierHash);
|
||||
|
||||
pos = pStream->tell();
|
||||
|
||||
//------------------------------------------------------------------------------------------
|
||||
switch(AlgIDHash)
|
||||
{
|
||||
case 0x8003: crypt_data_aes.hashAlgorithm = CRYPT_METHOD::MD5; break;
|
||||
case 0x0000:
|
||||
case 0x8004: crypt_data_aes.hashAlgorithm = CRYPT_METHOD::SHA1; break;
|
||||
}
|
||||
crypt_data_aes.spinCount = 0;
|
||||
|
||||
switch(AlgID)
|
||||
{
|
||||
case 0x6801:
|
||||
crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::RC4;
|
||||
crypt_data_aes.keySize = KeySize / 8;
|
||||
break;
|
||||
case 0x660E:
|
||||
crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::AES_ECB;
|
||||
crypt_data_aes.keySize = 128 /8;
|
||||
break;
|
||||
case 0x660F:
|
||||
crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::AES_ECB;
|
||||
crypt_data_aes.keySize = 192 /8;
|
||||
break;
|
||||
case 0x6610:
|
||||
crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::AES_ECB;
|
||||
crypt_data_aes.keySize = 256 /8;
|
||||
break;
|
||||
}
|
||||
|
||||
//switch(ProviderType)
|
||||
//{
|
||||
// case 0x0001: crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::RC4; break;
|
||||
// case 0x0018: crypt_data_aes.cipherAlgorithm = CRYPT_METHOD::AES_ECB; break;
|
||||
//}
|
||||
}
|
||||
int pos_end_record = pStream->tell();
|
||||
|
||||
int sz_header = pos_end_record - pos_start_record;
|
||||
}
|
||||
};
|
||||
@ -54,8 +54,7 @@ public:
|
||||
|
||||
DWORD m_nRelVersion; // 0x00000008 or 0x00000009
|
||||
|
||||
public:
|
||||
|
||||
|
||||
CRecordCurrentUserAtom() : m_nToken(0)
|
||||
{
|
||||
m_nRelVersion = m_nDocFileVersion = m_nMinorVersion = m_nMajorVersion = m_nLenUserName = m_nOffsetToCurEdit = 0;
|
||||
|
||||
@ -40,8 +40,6 @@ public:
|
||||
double m_dStartTime;
|
||||
double m_dEndTime;
|
||||
|
||||
public:
|
||||
|
||||
CRecordExCDAudioContainer()
|
||||
{
|
||||
m_dStartTime = 0;
|
||||
|
||||
@ -49,12 +49,15 @@ public:
|
||||
|
||||
DWORD m_nPersistIdSeed; // for next
|
||||
|
||||
DWORD m_nEncryptSessionPersistIdRef;
|
||||
|
||||
USHORT m_nLastView;
|
||||
|
||||
public:
|
||||
|
||||
CRecordUserEditAtom()
|
||||
{
|
||||
m_nEncryptSessionPersistIdRef = 0;
|
||||
}
|
||||
|
||||
~CRecordUserEditAtom()
|
||||
@ -67,36 +70,39 @@ public:
|
||||
|
||||
m_nLastSlideIdRef = StreamUtils::ReadDWORD(pStream);
|
||||
|
||||
m_nVersion = StreamUtils::ReadWORD(pStream);
|
||||
m_nVersion = StreamUtils::ReadWORD(pStream);
|
||||
m_nMinorVersion = StreamUtils::ReadBYTE(pStream);
|
||||
m_nMajorVersion = StreamUtils::ReadBYTE(pStream);
|
||||
|
||||
m_nOffsetLastEdit = StreamUtils::ReadDWORD(pStream);
|
||||
m_nOffsetPersistDirectory = StreamUtils::ReadDWORD(pStream);
|
||||
m_nOffsetDocPersistIdRef = StreamUtils::ReadDWORD(pStream);
|
||||
m_nOffsetLastEdit = StreamUtils::ReadDWORD(pStream);
|
||||
m_nOffsetPersistDirectory = StreamUtils::ReadDWORD(pStream);
|
||||
m_nOffsetDocPersistIdRef = StreamUtils::ReadDWORD(pStream);
|
||||
|
||||
m_nPersistIdSeed = StreamUtils::ReadDWORD(pStream);
|
||||
m_nLastView = StreamUtils::ReadWORD(pStream);
|
||||
m_nPersistIdSeed = StreamUtils::ReadDWORD(pStream);
|
||||
m_nLastView = StreamUtils::ReadWORD(pStream);
|
||||
|
||||
StreamUtils::StreamSkip(m_oHeader.RecLen - 22, pStream);
|
||||
StreamUtils::StreamSkip(2, pStream);
|
||||
|
||||
if (m_oHeader.RecLen > 28)
|
||||
{
|
||||
m_nEncryptSessionPersistIdRef = StreamUtils::ReadDWORD(pStream);
|
||||
}
|
||||
}
|
||||
|
||||
CRecordUserEditAtom& operator =(const CRecordUserEditAtom& oSrc)
|
||||
{
|
||||
m_nLastSlideIdRef = oSrc.m_nLastSlideIdRef;
|
||||
m_nLastSlideIdRef = oSrc.m_nLastSlideIdRef;
|
||||
|
||||
m_nVersion = oSrc.m_nVersion;
|
||||
m_nMinorVersion = oSrc.m_nMinorVersion;
|
||||
m_nMajorVersion = oSrc.m_nMajorVersion;
|
||||
m_nVersion = oSrc.m_nVersion;
|
||||
m_nMinorVersion = oSrc.m_nMinorVersion;
|
||||
m_nMajorVersion = oSrc.m_nMajorVersion;
|
||||
|
||||
m_nOffsetLastEdit = oSrc.m_nOffsetLastEdit;
|
||||
|
||||
m_nOffsetPersistDirectory = oSrc.m_nOffsetPersistDirectory;
|
||||
|
||||
m_nOffsetDocPersistIdRef = oSrc.m_nOffsetDocPersistIdRef;
|
||||
m_nPersistIdSeed = oSrc.m_nPersistIdSeed;
|
||||
|
||||
m_nLastView = oSrc.m_nLastView;
|
||||
m_nOffsetLastEdit = oSrc.m_nOffsetLastEdit;
|
||||
m_nOffsetPersistDirectory = oSrc.m_nOffsetPersistDirectory;
|
||||
m_nOffsetDocPersistIdRef = oSrc.m_nOffsetDocPersistIdRef;
|
||||
m_nPersistIdSeed = oSrc.m_nPersistIdSeed;
|
||||
m_nLastView = oSrc.m_nLastView;
|
||||
m_nEncryptSessionPersistIdRef = oSrc.m_nEncryptSessionPersistIdRef;
|
||||
return (*this);
|
||||
}
|
||||
};
|
||||
@ -542,6 +542,10 @@
|
||||
RelativePath="..\Records\ColorSchemeAtom.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\Records\CryptSession10Container.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\Records\CString.h"
|
||||
>
|
||||
|
||||
@ -60,7 +60,7 @@ int _tmain(int argc, _TCHAR* argv[])
|
||||
|
||||
pptFile.put_TempDirectory(tempPath);
|
||||
|
||||
HRESULT hRes = pptFile.LoadFromFile(sSrcPpt, dstTempPath);
|
||||
HRESULT hRes = pptFile.LoadFromFile(sSrcPpt, dstTempPath, L"password");
|
||||
|
||||
if (hRes == S_OK)
|
||||
{
|
||||
|
||||
@ -2,44 +2,44 @@ Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
# Visual Studio 2005
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPTXFormat", "..\..\ASCOfficePPTXFile\PPTXLib\PPTXFormat.vcproj", "{36636678-AE25-4BE6-9A34-2561D1BCF302}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56} = {C739151F-5384-41DF-A1A6-F089E2C1AD56}
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0} = {21663823-DE45-479B-91D0-B4FEF4916EF0}
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2} = {37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0} = {A100103A-353E-45E8-A9B8-90B87CC5C0B0}
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B} = {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0} = {A100103A-353E-45E8-A9B8-90B87CC5C0B0}
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2} = {37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0} = {21663823-DE45-479B-91D0-B4FEF4916EF0}
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56} = {C739151F-5384-41DF-A1A6-F089E2C1AD56}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "graphics", "..\..\DesktopEditor\graphics\graphics_vs2005.vcproj", "{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7} = {43A0E60E-5C4A-4C09-A29B-7683F503BBD7}
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56} = {C739151F-5384-41DF-A1A6-F089E2C1AD56}
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239} = {764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169} = {DF861D33-9BC1-418C-82B1-581F590FE169}
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3} = {0588563C-F05C-428C-B21A-DD74756628B3}
|
||||
{40A69F40-063E-43FD-8543-455495D8733E} = {40A69F40-063E-43FD-8543-455495D8733E}
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E} = {9A037A69-D1DF-4505-AB2A-6CB3641C476E}
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD} = {617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1} = {EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36} = {BC52A07C-A797-423D-8C4F-8678805BBB36}
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B} = {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470} = {818753F2-DBB9-4D3B-898A-A604309BE470}
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B} = {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36} = {BC52A07C-A797-423D-8C4F-8678805BBB36}
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1} = {EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD} = {617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E} = {9A037A69-D1DF-4505-AB2A-6CB3641C476E}
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
|
||||
{40A69F40-063E-43FD-8543-455495D8733E} = {40A69F40-063E-43FD-8543-455495D8733E}
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3} = {0588563C-F05C-428C-B21A-DD74756628B3}
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169} = {DF861D33-9BC1-418C-82B1-581F590FE169}
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239} = {764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56} = {C739151F-5384-41DF-A1A6-F089E2C1AD56}
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7} = {43A0E60E-5C4A-4C09-A29B-7683F503BBD7}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "agg2d", "..\..\DesktopEditor\agg-2.4\agg_vs2005.vcproj", "{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cximage", "..\..\DesktopEditor\cximage\CxImage\cximage_vs2005.vcproj", "{BC52A07C-A797-423D-8C4F-8678805BBB36}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470} = {818753F2-DBB9-4D3B-898A-A604309BE470}
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D} = {FFDA5DA1-BB65-4695-B678-BE59B4A1355D}
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1} = {EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E} = {9A037A69-D1DF-4505-AB2A-6CB3641C476E}
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
|
||||
{40A69F40-063E-43FD-8543-455495D8733E} = {40A69F40-063E-43FD-8543-455495D8733E}
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3} = {0588563C-F05C-428C-B21A-DD74756628B3}
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169} = {DF861D33-9BC1-418C-82B1-581F590FE169}
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239} = {764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7} = {43A0E60E-5C4A-4C09-A29B-7683F503BBD7}
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239} = {764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169} = {DF861D33-9BC1-418C-82B1-581F590FE169}
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3} = {0588563C-F05C-428C-B21A-DD74756628B3}
|
||||
{40A69F40-063E-43FD-8543-455495D8733E} = {40A69F40-063E-43FD-8543-455495D8733E}
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E} = {9A037A69-D1DF-4505-AB2A-6CB3641C476E}
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1} = {EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D} = {FFDA5DA1-BB65-4695-B678-BE59B4A1355D}
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470} = {818753F2-DBB9-4D3B-898A-A604309BE470}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jpeg", "..\..\DesktopEditor\cximage\jpeg\Jpeg_vs2005.vcproj", "{818753F2-DBB9-4D3B-898A-A604309BE470}"
|
||||
@ -69,12 +69,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpsd", "..\..\DesktopEdit
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PPTFormatLib", "..\PPTFormatLib\Win32\PPTFormatLib.vcproj", "{7B27E40E-F70A-4A74-A77C-0944D7931D15}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302} = {36636678-AE25-4BE6-9A34-2561D1BCF302}
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0} = {A100103A-353E-45E8-A9B8-90B87CC5C0B0}
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56} = {C739151F-5384-41DF-A1A6-F089E2C1AD56}
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2} = {37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0} = {21663823-DE45-479B-91D0-B4FEF4916EF0}
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2} = {37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56} = {C739151F-5384-41DF-A1A6-F089E2C1AD56}
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0} = {A100103A-353E-45E8-A9B8-90B87CC5C0B0}
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302} = {36636678-AE25-4BE6-9A34-2561D1BCF302}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jbig", "..\..\DesktopEditor\cximage\jbig\jbig_vs2005.vcproj", "{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}"
|
||||
@ -86,19 +86,32 @@ EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PptFormatTest", "PptFormatTest.vcproj", "{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15} = {7B27E40E-F70A-4A74-A77C-0944D7931D15}
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0} = {21663823-DE45-479B-91D0-B4FEF4916EF0}
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363} = {F8274B05-168E-4D6E-B843-AA7510725363}
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302} = {36636678-AE25-4BE6-9A34-2561D1BCF302}
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF} = {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C} = {C27E9A9F-3A17-4482-9C5F-BF15C01E747C}
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2} = {37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302} = {36636678-AE25-4BE6-9A34-2561D1BCF302}
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363} = {F8274B05-168E-4D6E-B843-AA7510725363}
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0} = {21663823-DE45-479B-91D0-B4FEF4916EF0}
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D} = {77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libxml2", "..\..\DesktopEditor\xml\build\vs2005\libxml2.vcproj", "{21663823-DE45-479B-91D0-B4FEF4916EF0}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OfficeFileCrypt", "..\..\OfficeCryptReader\win32\ECMACryptReader.vcproj", "{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "XlsFormat", "..\..\ASCOfficeXlsFile2\source\win32\XlsFormat.vcproj", "{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cryptlib", "..\..\Common\3dParty\cryptopp\cryptlib.vcproj", "{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Debug|x64 = Debug|x64
|
||||
DLL-Import Debug|Win32 = DLL-Import Debug|Win32
|
||||
DLL-Import Debug|x64 = DLL-Import Debug|x64
|
||||
DLL-Import Release|Win32 = DLL-Import Release|Win32
|
||||
DLL-Import Release|x64 = DLL-Import Release|x64
|
||||
Release|Win32 = Release|Win32
|
||||
Release|x64 = Release|x64
|
||||
ReleaseASC|Win32 = ReleaseASC|Win32
|
||||
@ -115,6 +128,14 @@ Global
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Debug|x64.Build.0 = Debug|x64
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Release|Win32.Build.0 = Release|Win32
|
||||
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -137,6 +158,14 @@ Global
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Debug|x64.Build.0 = Debug|x64
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Release|Win32.Build.0 = Release|Win32
|
||||
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -159,6 +188,14 @@ Global
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Debug|x64.Build.0 = Debug|x64
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Release|Win32.Build.0 = Release|Win32
|
||||
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -181,6 +218,14 @@ Global
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Debug|x64.Build.0 = Debug|x64
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Release|Win32.Build.0 = Release|Win32
|
||||
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -203,6 +248,14 @@ Global
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.Debug|x64.Build.0 = Debug|x64
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.Release|Win32.Build.0 = Release|Win32
|
||||
{818753F2-DBB9-4D3B-898A-A604309BE470}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -225,6 +278,14 @@ Global
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Debug|x64.Build.0 = Debug|x64
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Release|Win32.Build.0 = Release|Win32
|
||||
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -248,6 +309,14 @@ Global
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Debug|x64.Build.0 = Debug|x64
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Release|Win32.Build.0 = Release|Win32
|
||||
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -270,6 +339,14 @@ Global
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|x64.Build.0 = Debug|x64
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.Build.0 = Release|Win32
|
||||
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -292,6 +369,14 @@ Global
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Debug|x64.Build.0 = Debug|x64
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Release|Win32.Build.0 = Release|Win32
|
||||
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -314,6 +399,14 @@ Global
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Debug|x64.Build.0 = Debug|x64
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Release|Win32.Build.0 = Release|Win32
|
||||
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -336,6 +429,14 @@ Global
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.Debug|x64.Build.0 = Debug|x64
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.Release|Win32.Build.0 = Release|Win32
|
||||
{DF861D33-9BC1-418C-82B1-581F590FE169}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -358,6 +459,14 @@ Global
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Debug|x64.Build.0 = Debug|x64
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Release|Win32.Build.0 = Release|Win32
|
||||
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -380,6 +489,14 @@ Global
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.Debug|x64.Build.0 = Debug|x64
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.Release|Win32.Build.0 = Release|Win32
|
||||
{40A69F40-063E-43FD-8543-455495D8733E}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -402,6 +519,14 @@ Global
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.Debug|x64.Build.0 = Debug|x64
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.Release|Win32.Build.0 = Release|Win32
|
||||
{0588563C-F05C-428C-B21A-DD74756628B3}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -424,6 +549,14 @@ Global
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Debug|x64.Build.0 = Debug|x64
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Release|Win32.Build.0 = Release|Win32
|
||||
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -446,6 +579,14 @@ Global
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.Debug|x64.Build.0 = Debug|x64
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.Release|Win32.Build.0 = Release|Win32
|
||||
{7B27E40E-F70A-4A74-A77C-0944D7931D15}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -468,6 +609,14 @@ Global
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Debug|x64.Build.0 = Debug|x64
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Release|Win32.Build.0 = Release|Win32
|
||||
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -490,6 +639,14 @@ Global
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Debug|x64.Build.0 = Debug|x64
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Release|Win32.Build.0 = Release|Win32
|
||||
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -512,6 +669,14 @@ Global
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.Debug|x64.Build.0 = Debug|x64
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.Release|Win32.Build.0 = Release|Win32
|
||||
{F8274B05-168E-4D6E-B843-AA7510725363}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -534,6 +699,14 @@ Global
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.Debug|x64.Build.0 = Debug|x64
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.Release|Win32.Build.0 = Release|Win32
|
||||
{0F49D5D1-A8D3-4F97-8BC1-E2F65BB00C10}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -556,6 +729,14 @@ Global
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Debug|x64.Build.0 = Debug|x64
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Release|Win32.Build.0 = Release|Win32
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Release|x64.ActiveCfg = Release|x64
|
||||
@ -574,6 +755,96 @@ Global
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Unicode Release|Win32.Build.0 = Release|Win32
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Unicode Release|x64.ActiveCfg = Release|x64
|
||||
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Unicode Release|x64.Build.0 = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Debug|x64.Build.0 = Debug|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Release|Win32.Build.0 = Release|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Release|x64.ActiveCfg = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Release|x64.Build.0 = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.ReleaseASC|Win32.ActiveCfg = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.ReleaseASC|x64.ActiveCfg = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.ReleaseASC|x64.Build.0 = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.ReleaseOpenSource|Win32.ActiveCfg = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.ReleaseOpenSource|x64.ActiveCfg = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.ReleaseOpenSource|x64.Build.0 = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Unicode Debug|Win32.Build.0 = Debug|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Unicode Debug|x64.ActiveCfg = Debug|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Unicode Debug|x64.Build.0 = Debug|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Unicode Release|Win32.ActiveCfg = Release|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Unicode Release|Win32.Build.0 = Release|Win32
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Unicode Release|x64.ActiveCfg = Release|x64
|
||||
{C27E9A9F-3A17-4482-9C5F-BF15C01E747C}.Unicode Release|x64.Build.0 = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Debug|x64.Build.0 = Debug|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.DLL-Import Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.DLL-Import Debug|Win32.Build.0 = Debug|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.DLL-Import Debug|x64.ActiveCfg = Debug|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.DLL-Import Debug|x64.Build.0 = Debug|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.DLL-Import Release|Win32.ActiveCfg = Release|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.DLL-Import Release|Win32.Build.0 = Release|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.DLL-Import Release|x64.ActiveCfg = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.DLL-Import Release|x64.Build.0 = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Release|Win32.Build.0 = Release|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Release|x64.ActiveCfg = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Release|x64.Build.0 = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.ReleaseASC|Win32.ActiveCfg = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.ReleaseASC|x64.ActiveCfg = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.ReleaseASC|x64.Build.0 = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.ReleaseOpenSource|Win32.ActiveCfg = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.ReleaseOpenSource|x64.ActiveCfg = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.ReleaseOpenSource|x64.Build.0 = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Unicode Debug|Win32.Build.0 = Debug|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Unicode Debug|x64.ActiveCfg = Debug|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Unicode Debug|x64.Build.0 = Debug|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Unicode Release|Win32.ActiveCfg = Release|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Unicode Release|Win32.Build.0 = Release|Win32
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Unicode Release|x64.ActiveCfg = Release|x64
|
||||
{77DDC8D7-5B12-4FF2-9629-26AEBCA8436D}.Unicode Release|x64.Build.0 = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|x64.Build.0 = Debug|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Debug|Win32.ActiveCfg = DLL-Import Debug|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Debug|Win32.Build.0 = DLL-Import Debug|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Debug|x64.ActiveCfg = DLL-Import Debug|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Debug|x64.Build.0 = DLL-Import Debug|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Release|Win32.ActiveCfg = DLL-Import Release|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Release|Win32.Build.0 = DLL-Import Release|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Release|x64.ActiveCfg = DLL-Import Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Release|x64.Build.0 = DLL-Import Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|Win32.Build.0 = Release|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|x64.ActiveCfg = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|x64.Build.0 = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseASC|Win32.ActiveCfg = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseASC|x64.ActiveCfg = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseASC|x64.Build.0 = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseOpenSource|Win32.ActiveCfg = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseOpenSource|x64.ActiveCfg = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.ReleaseOpenSource|x64.Build.0 = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Unicode Debug|Win32.Build.0 = Debug|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Unicode Debug|x64.ActiveCfg = Debug|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Unicode Debug|x64.Build.0 = Debug|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Unicode Release|Win32.ActiveCfg = Release|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Unicode Release|Win32.Build.0 = Release|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Unicode Release|x64.ActiveCfg = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Unicode Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
@ -282,6 +282,12 @@ namespace NSBinPptxRW
|
||||
m_pContentTypes->AddDefault(strExts.substr(1));
|
||||
}
|
||||
|
||||
if (oleData.empty() == false)
|
||||
{
|
||||
//plugins data - generate ole
|
||||
typeAdditional = 1;
|
||||
}
|
||||
|
||||
_imageManager2Info oImageManagerInfo = GenerateImageExec(strImage, strExts, strAdditional, typeAdditional, oleData);
|
||||
|
||||
if (!oImageManagerInfo.sFilepathAdditional.empty())
|
||||
@ -346,8 +352,11 @@ namespace NSBinPptxRW
|
||||
{
|
||||
oPathOutput = m_strDstMedia + FILE_SEPARATOR_STR + strImage + strExts;
|
||||
|
||||
if (oPathOutput.GetPath() != strInput)
|
||||
CDirectory::CopyFile(strInput, oPathOutput.GetPath());
|
||||
if (oPathOutput.GetPath() != strInput && NSFile::CFileBinary::Exists(strInput))
|
||||
{
|
||||
NSFile::CFileBinary::Copy(strInput, oPathOutput.GetPath());
|
||||
oImageManagerInfo.sFilepathImage = oPathOutput.GetPath();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -355,8 +364,8 @@ namespace NSBinPptxRW
|
||||
strExts = _T(".png");
|
||||
oPathOutput = m_strDstMedia + FILE_SEPARATOR_STR + strImage + strExts;
|
||||
SaveImageAsPng(strInput, oPathOutput.GetPath());
|
||||
oImageManagerInfo.sFilepathImage = oPathOutput.GetPath();
|
||||
}
|
||||
oImageManagerInfo.sFilepathImage = oPathOutput.GetPath();
|
||||
|
||||
if ((!strAdditionalImage.empty() || !oleData.empty() ) && (nAdditionalType == 1))
|
||||
{
|
||||
@ -374,13 +383,14 @@ namespace NSBinPptxRW
|
||||
if(!oleData.empty())
|
||||
{
|
||||
WriteOleData(strAdditionalImageOut, oleData);
|
||||
oImageManagerInfo.sFilepathAdditional = strAdditionalImageOut;
|
||||
}
|
||||
else
|
||||
else if (NSFile::CFileBinary::Exists(strAdditionalImage))
|
||||
{
|
||||
CDirectory::CopyFile(strAdditionalImage, strAdditionalImageOut);
|
||||
NSFile::CFileBinary::Copy(strAdditionalImage, strAdditionalImageOut);
|
||||
oImageManagerInfo.sFilepathAdditional = strAdditionalImageOut;
|
||||
}
|
||||
|
||||
oImageManagerInfo.sFilepathAdditional = strAdditionalImageOut;
|
||||
}
|
||||
else if (!strAdditionalImage.empty() && nAdditionalType == 2)
|
||||
{
|
||||
@ -395,8 +405,11 @@ namespace NSBinPptxRW
|
||||
|
||||
std::wstring strAdditionalImageOut = pathOutput.GetPath();
|
||||
|
||||
CDirectory::CopyFile(strAdditionalImage, strAdditionalImageOut);
|
||||
oImageManagerInfo.sFilepathAdditional = strAdditionalImageOut;
|
||||
if (NSFile::CFileBinary::Exists(strAdditionalImage))
|
||||
{
|
||||
NSFile::CFileBinary::Copy(strAdditionalImage, strAdditionalImageOut);
|
||||
oImageManagerInfo.sFilepathAdditional = strAdditionalImageOut;
|
||||
}
|
||||
}
|
||||
|
||||
return oImageManagerInfo;
|
||||
@ -1102,6 +1115,16 @@ namespace NSBinPptxRW
|
||||
m_pWriter->WriteString(str);
|
||||
}
|
||||
|
||||
std::wstring s = L"<Relationship Id=\"rId" + std::to_wstring(m_lNextRelsID++) +
|
||||
L"\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"../theme/theme" +
|
||||
std::to_wstring(nIndexTheme + 1) + L".xml\"/>";
|
||||
m_pWriter->WriteString(s);
|
||||
}
|
||||
void CRelsGenerator::StartNotesMaster(int nIndexTheme)
|
||||
{
|
||||
m_pWriter->WriteString(_T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"));
|
||||
m_pWriter->WriteString(_T("<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">"));
|
||||
|
||||
std::wstring s = L"<Relationship Id=\"rId" + std::to_wstring(m_lNextRelsID++) +
|
||||
L"\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"../theme/theme" +
|
||||
std::to_wstring(nIndexTheme + 1) + L".xml\"/>";
|
||||
@ -1117,7 +1140,7 @@ namespace NSBinPptxRW
|
||||
std::to_wstring(nIndexTheme + 1) + L".xml\"/>";
|
||||
m_pWriter->WriteString(str);
|
||||
}
|
||||
void CRelsGenerator::StartSlide(int nIndexSlide, int nIndexLayout)
|
||||
void CRelsGenerator::StartSlide(int nIndexSlide, int nIndexLayout, int nIndexNotes)
|
||||
{
|
||||
m_pWriter->WriteString(_T("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"));
|
||||
m_pWriter->WriteString(_T("<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">"));
|
||||
@ -1127,12 +1150,15 @@ namespace NSBinPptxRW
|
||||
std::to_wstring(nIndexLayout + 1) + L".xml\"/>";
|
||||
m_pWriter->WriteString(str);
|
||||
|
||||
str = L"<Relationship Id=\"rId" + std::to_wstring(m_lNextRelsID++) +
|
||||
L"\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide\" Target=\"../notesSlides/notesSlide" +
|
||||
std::to_wstring(nIndexSlide + 1) + L".xml\"/>";
|
||||
m_pWriter->WriteString(str);
|
||||
if (nIndexNotes >= 0)
|
||||
{
|
||||
str = L"<Relationship Id=\"rId" + std::to_wstring(m_lNextRelsID++) +
|
||||
L"\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide\" Target=\"../notesSlides/notesSlide" +
|
||||
std::to_wstring(nIndexNotes + 1) + L".xml\"/>";
|
||||
m_pWriter->WriteString(str);
|
||||
}
|
||||
}
|
||||
void CRelsGenerator::StartNote(int nIndexSlide)
|
||||
void CRelsGenerator::StartNotes(int nIndexSlide)
|
||||
{
|
||||
m_pWriter->WriteString(L"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>");
|
||||
m_pWriter->WriteString(L"<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">");
|
||||
@ -1183,10 +1209,14 @@ namespace NSBinPptxRW
|
||||
|
||||
m_pWriter->WriteString(strRels);
|
||||
}
|
||||
void CRelsGenerator::EndPresentationRels(const bool& bIsCommentsAuthors = false)
|
||||
void CRelsGenerator::EndPresentationRels(const bool& bIsCommentsAuthors = false, const bool& bIsNotesMaster)
|
||||
{
|
||||
std::wstring strRels0 = L"<Relationship Id=\"rId" + std::to_wstring(m_lNextRelsID++) +
|
||||
L"\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster\" Target=\"notesMasters/notesMaster1.xml\"/>";
|
||||
if (bIsNotesMaster)
|
||||
{
|
||||
std::wstring strRels0 = L"<Relationship Id=\"rId" + std::to_wstring(m_lNextRelsID++) +
|
||||
L"\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster\" Target=\"notesMasters/notesMaster1.xml\"/>";
|
||||
m_pWriter->WriteString(strRels0);
|
||||
}
|
||||
std::wstring strRels1 = L"<Relationship Id=\"rId" + std::to_wstring(m_lNextRelsID++) +
|
||||
L"\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps\" Target=\"presProps.xml\" />";
|
||||
std::wstring strRels2 = L"<Relationship Id=\"rId" + std::to_wstring(m_lNextRelsID++) +
|
||||
@ -1194,7 +1224,6 @@ namespace NSBinPptxRW
|
||||
std::wstring strRels3 = L"<Relationship Id=\"rId" + std::to_wstring(m_lNextRelsID++) +
|
||||
L"\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/viewProps\" Target=\"viewProps.xml\" />";
|
||||
|
||||
m_pWriter->WriteString(strRels0);
|
||||
m_pWriter->WriteString(strRels1);
|
||||
m_pWriter->WriteString(strRels2);
|
||||
m_pWriter->WriteString(strRels3);
|
||||
@ -1236,24 +1265,28 @@ namespace NSBinPptxRW
|
||||
if (m_pManager->m_nDocumentType == XMLWRITER_DOC_TYPE_DOCX) strImageRelsPath = L"media/";
|
||||
else strImageRelsPath = L"../media/";
|
||||
|
||||
strImageRelsPath += OOX::CPath(oImageManagerInfo.sFilepathImage).GetFilename();
|
||||
|
||||
std::map<std::wstring, _relsGeneratorInfo>::iterator pPair = m_mapImages.find(strImageRelsPath);
|
||||
|
||||
if (m_mapImages.end() != pPair)
|
||||
{
|
||||
return pPair->second;
|
||||
}
|
||||
_relsGeneratorInfo oRelsGeneratorInfo;
|
||||
|
||||
oRelsGeneratorInfo.nImageRId = m_lNextRelsID++;
|
||||
oRelsGeneratorInfo.sFilepathImage = oImageManagerInfo.sFilepathImage;
|
||||
|
||||
std::wstring strRid = L"rId" + std::to_wstring(oRelsGeneratorInfo.nImageRId);
|
||||
if (!oImageManagerInfo.sFilepathImage.empty())
|
||||
{
|
||||
strImageRelsPath += OOX::CPath(oImageManagerInfo.sFilepathImage).GetFilename();
|
||||
|
||||
m_pWriter->WriteString( L"<Relationship Id=\"" + strRid +
|
||||
L"\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\" Target=\"" + strImageRelsPath +
|
||||
L"\"/>");
|
||||
std::map<std::wstring, _relsGeneratorInfo>::iterator pPair = m_mapImages.find(strImageRelsPath);
|
||||
|
||||
if (m_mapImages.end() != pPair)
|
||||
{
|
||||
return pPair->second;
|
||||
}
|
||||
|
||||
oRelsGeneratorInfo.nImageRId = m_lNextRelsID++;
|
||||
oRelsGeneratorInfo.sFilepathImage = oImageManagerInfo.sFilepathImage;
|
||||
|
||||
std::wstring strRid = L"rId" + std::to_wstring(oRelsGeneratorInfo.nImageRId);
|
||||
|
||||
m_pWriter->WriteString( L"<Relationship Id=\"" + strRid +
|
||||
L"\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\" Target=\"" + strImageRelsPath +
|
||||
L"\"/>");
|
||||
}
|
||||
|
||||
if(additionalFile.is<OOX::OleObject>())
|
||||
{
|
||||
@ -1285,7 +1318,7 @@ namespace NSBinPptxRW
|
||||
}
|
||||
}
|
||||
}
|
||||
if(additionalFile.is<OOX::Media>())
|
||||
else if(additionalFile.is<OOX::Media>())
|
||||
{
|
||||
smart_ptr<OOX::Media> mediaFile = additionalFile.smart_dynamic_cast<OOX::Media>();
|
||||
|
||||
|
||||
@ -407,8 +407,9 @@ namespace NSBinPptxRW
|
||||
|
||||
void StartMaster (int nIndexTheme, const _slideMasterInfo& oInfo);
|
||||
void StartLayout (int nIndexTheme);
|
||||
void StartSlide (int nIndexSlide, int nIndexLayout);
|
||||
void StartNote (int nIndexSlide);
|
||||
void StartSlide (int nIndexSlide, int nIndexLayout, int nIndexNotes);
|
||||
void StartNotes (int nIndexSlide);
|
||||
void StartNotesMaster(int nIndexTheme);
|
||||
|
||||
void WriteMasters (int nCount);
|
||||
void WriteThemes (int nCount);
|
||||
@ -418,7 +419,7 @@ namespace NSBinPptxRW
|
||||
int WriteRels (const std::wstring& bsType, const std::wstring& bsTarget, const std::wstring& bsTargetMode);
|
||||
int WriteHyperlink (const std::wstring& strLink, const bool& bIsActionInit);
|
||||
|
||||
void EndPresentationRels (const bool& bIsCommentsAuthors);
|
||||
void EndPresentationRels (const bool& bIsCommentsAuthors, const bool& bIsNotesMaster = false);
|
||||
int GetNextId ();
|
||||
void CloseRels ();
|
||||
|
||||
|
||||
@ -162,8 +162,7 @@ namespace PPTX2EditorAdvanced
|
||||
}
|
||||
|
||||
// записываем все слайды
|
||||
size_t nCount = presentation->sldIdLst.size();
|
||||
for (size_t i = 0; i < nCount; ++i)
|
||||
for (size_t i = 0; i < presentation->sldIdLst.size(); ++i)
|
||||
{
|
||||
std::wstring rId = presentation->sldIdLst[i].rid.get();
|
||||
smart_ptr<PPTX::Slide> slide = ((*presentation)[rId]).smart_dynamic_cast<PPTX::Slide>();
|
||||
|
||||
@ -58,10 +58,12 @@ namespace NSBinPptxRW
|
||||
|
||||
std::vector<PPTX::Slide> m_arSlides;
|
||||
std::vector<LONG> m_arSlides_Layout;
|
||||
std::vector<LONG> m_arSlides_Notes;
|
||||
|
||||
std::vector<PPTX::NotesMaster> m_arNotesMasters;
|
||||
std::vector<PPTX::NotesSlide> m_arNotesSlides;
|
||||
std::vector<LONG> m_arNotesSlides_Master;
|
||||
std::vector<LONG> m_arNotesMasters_Theme;
|
||||
|
||||
PPTX::Presentation m_oPresentation;
|
||||
PPTX::TableStyles m_oTableStyles;
|
||||
@ -175,14 +177,14 @@ namespace NSBinPptxRW
|
||||
|
||||
std::map<BYTE, LONG>::iterator pPair;
|
||||
|
||||
// writer
|
||||
CXmlWriter oXmlWriter;
|
||||
|
||||
// первым делом определим количество необходимого. если хоть одно из этих чисел - ноль, то ппту не корректный
|
||||
LONG nCountThemes = 0;
|
||||
LONG nCountMasters = 0;
|
||||
LONG nCountLayouts = 0;
|
||||
LONG nCountSlides = 0;
|
||||
// первым делом определим количество необходимого. если хоть одно из этих чисел - ноль, то ппту не корректный
|
||||
LONG nCountThemes = 0;
|
||||
LONG nCountMasters = 0;
|
||||
LONG nCountLayouts = 0;
|
||||
LONG nCountSlides = 0;
|
||||
bool bNotesMasterPresent = false;
|
||||
|
||||
pPair = m_mainTables.find(NSMainTables::Themes);
|
||||
if (m_mainTables.end() != pPair)
|
||||
@ -214,7 +216,7 @@ namespace NSBinPptxRW
|
||||
return;
|
||||
}
|
||||
|
||||
// теперь создадим массивы для рельсов
|
||||
// теперь создадим массивы для рельсов
|
||||
for (LONG i = 0; i < nCountMasters; ++i)
|
||||
{
|
||||
_slideMasterInfo elm;
|
||||
@ -226,8 +228,11 @@ namespace NSBinPptxRW
|
||||
}
|
||||
for (LONG i = 0; i < nCountSlides; ++i)
|
||||
m_arSlides_Layout.push_back(0);
|
||||
|
||||
for (LONG i = 0; i < nCountSlides; ++i)
|
||||
m_arSlides_Notes.push_back(-1);
|
||||
|
||||
// ThemeRels
|
||||
// ThemeRels
|
||||
pPair = m_mainTables.find(NSMainTables::ThemeRels);
|
||||
if (m_mainTables.end() != pPair)
|
||||
{
|
||||
@ -242,7 +247,7 @@ namespace NSBinPptxRW
|
||||
}
|
||||
}
|
||||
|
||||
// нужно проставить всем шаблонам мастер.
|
||||
// нужно проставить всем шаблонам мастер.
|
||||
for (LONG i = 0; i < nCountMasters; ++i)
|
||||
{
|
||||
size_t _countL = m_arSlideMasters_Theme[i].m_arLayouts.size();
|
||||
@ -252,7 +257,7 @@ namespace NSBinPptxRW
|
||||
}
|
||||
}
|
||||
|
||||
// готово, теперь нужно слайдам проставить шаблоны
|
||||
// готово, теперь нужно слайдам проставить шаблоны
|
||||
pPair = m_mainTables.find(NSMainTables::SlideRels);
|
||||
if (m_mainTables.end() != pPair)
|
||||
{
|
||||
@ -271,11 +276,46 @@ namespace NSBinPptxRW
|
||||
m_arSlides_Layout[index++] = m_oReader.GetULong();
|
||||
}
|
||||
}
|
||||
pPair = m_mainTables.find(NSMainTables::SlideNotesRels);
|
||||
if (m_mainTables.end() != pPair)
|
||||
{
|
||||
m_oReader.Seek(pPair->second);
|
||||
m_oReader.Skip(6); // type + len + start attr
|
||||
|
||||
// теперь нужно удалить все themes, которые не ведут на мастерслайд
|
||||
size_t index =0;
|
||||
while (true)
|
||||
{
|
||||
BYTE _at = m_oReader.GetUChar_TypeNode();
|
||||
if (_at == NSBinPptxRW::g_nodeAttributeEnd)
|
||||
break;
|
||||
|
||||
//m_arSlides_Layout[_at] = m_oReader.GetULong(); тут прописан не индекс, а тип - смотри - oBinaryWriter.WriteInt1(0, oBinaryWriter.m_pCommon->m_oSlide_Layout_Rels[i]);
|
||||
if (index < m_arSlides_Notes.size())
|
||||
m_arSlides_Notes[index++] = m_oReader.GetULong();
|
||||
}
|
||||
}
|
||||
|
||||
pPair = m_mainTables.find(NSMainTables::NotesMastersRels);
|
||||
if (m_mainTables.end() != pPair)
|
||||
{
|
||||
m_oReader.Seek(pPair->second);
|
||||
m_oReader.Skip(6); // type + len + start attr
|
||||
|
||||
size_t index =0;
|
||||
while (true)
|
||||
{
|
||||
BYTE _at = m_oReader.GetUChar_TypeNode();
|
||||
if (_at == NSBinPptxRW::g_nodeAttributeEnd)
|
||||
break;
|
||||
|
||||
m_arNotesMasters_Theme.push_back( m_oReader.GetULong());
|
||||
}
|
||||
}
|
||||
// теперь нужно удалить все themes, которые не ведут на мастерслайды
|
||||
std::vector<LONG> arThemes;
|
||||
std::vector<LONG> arThemesDst;
|
||||
std::vector<bool> arThemesSave;
|
||||
|
||||
for (LONG i = 0; i < nCountThemes; ++i)
|
||||
{
|
||||
arThemes.push_back(i);
|
||||
@ -286,6 +326,11 @@ namespace NSBinPptxRW
|
||||
{
|
||||
arThemesSave[m_arSlideMasters_Theme[i].m_lThemeIndex] = true;
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < m_arNotesMasters_Theme.size(); i++)
|
||||
{
|
||||
arThemesSave[m_arNotesMasters_Theme[i]] = true;
|
||||
}
|
||||
LONG lCurrectTheme = 0;
|
||||
for (LONG i = 0; i < nCountMasters; ++i)
|
||||
{
|
||||
@ -298,9 +343,8 @@ namespace NSBinPptxRW
|
||||
for (LONG i = 0; i < nCountMasters; ++i)
|
||||
{
|
||||
m_arSlideMasters_Theme[i].m_lThemeIndex = arThemesDst[i];
|
||||
}
|
||||
|
||||
// themes
|
||||
}
|
||||
// themes
|
||||
pPair = m_mainTables.find(NSMainTables::Themes);
|
||||
if (m_mainTables.end() != pPair)
|
||||
{
|
||||
@ -343,7 +387,7 @@ namespace NSBinPptxRW
|
||||
}
|
||||
}
|
||||
|
||||
// slideMasters
|
||||
// slideMasters
|
||||
pPair = m_mainTables.find(NSMainTables::SlideMasters);
|
||||
if (m_mainTables.end() != pPair)
|
||||
{
|
||||
@ -396,7 +440,7 @@ namespace NSBinPptxRW
|
||||
}
|
||||
}
|
||||
|
||||
// slideLayouts
|
||||
// slideLayouts
|
||||
pPair = m_mainTables.find(NSMainTables::SlideLayouts);
|
||||
if (m_mainTables.end() != pPair)
|
||||
{
|
||||
@ -431,8 +475,100 @@ namespace NSBinPptxRW
|
||||
m_oReader.m_pRels->SaveRels(pathFileRels.GetPath());
|
||||
}
|
||||
}
|
||||
// notes
|
||||
pPair = m_mainTables.find(NSMainTables::NotesSlides);
|
||||
if (m_mainTables.end() != pPair)
|
||||
{
|
||||
m_oReader.Seek(pPair->second);
|
||||
LONG lCount = m_oReader.GetLong();
|
||||
|
||||
// slides
|
||||
if ( lCount > 0 )
|
||||
{
|
||||
OOX::CPath pathFolder = m_strDstFolder + FILE_SEPARATOR_STR + _T("ppt") + FILE_SEPARATOR_STR + _T("notesSlides");
|
||||
OOX::CPath pathFolderRels = pathFolder + FILE_SEPARATOR_STR + _T("_rels");
|
||||
|
||||
NSDirectory::CreateDirectory (pathFolder.GetPath());
|
||||
NSDirectory::CreateDirectory (pathFolderRels.GetPath());
|
||||
|
||||
for (LONG i = 0; i < lCount; ++i)
|
||||
{
|
||||
PPTX::NotesSlide elm;
|
||||
m_arNotesSlides.push_back(elm);
|
||||
|
||||
m_oReader.m_pRels->Clear();
|
||||
|
||||
size_t indexSlide = 0;
|
||||
for (indexSlide = 0; indexSlide < m_arSlides_Notes.size(); indexSlide++)
|
||||
{//todooo -> make map
|
||||
if (m_arSlides_Notes[indexSlide] == i)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
m_oReader.m_pRels->StartNotes(indexSlide);
|
||||
|
||||
m_arNotesSlides[i].fromPPTY(&m_oReader);
|
||||
|
||||
m_oReader.m_pRels->CloseRels();
|
||||
|
||||
std::wstring strNotesXml = L"notesSlide" + std::to_wstring(i + 1) + L".xml";
|
||||
oXmlWriter.ClearNoAttack();
|
||||
|
||||
m_arNotesSlides[i].toXmlWriter(&oXmlWriter);
|
||||
|
||||
OOX::CPath pathFile = pathFolder + FILE_SEPARATOR_STR + strNotesXml;
|
||||
oXmlWriter.SaveToFile(pathFile.GetPath());
|
||||
|
||||
OOX::CPath pathFileRels = pathFolderRels + FILE_SEPARATOR_STR + strNotesXml + _T(".rels");
|
||||
m_oReader.m_pRels->SaveRels(pathFileRels.GetPath());
|
||||
}
|
||||
}
|
||||
}
|
||||
// noteMasters
|
||||
pPair = m_mainTables.find(NSMainTables::NotesMasters);
|
||||
if (m_mainTables.end() != pPair)
|
||||
{
|
||||
m_oReader.Seek(pPair->second);
|
||||
LONG lCount = m_oReader.GetLong();
|
||||
|
||||
if (lCount > 0 || m_arNotesSlides.size() > 0)//один элемент
|
||||
{
|
||||
OOX::CPath pathFolder = m_strDstFolder + FILE_SEPARATOR_STR + _T("ppt") + FILE_SEPARATOR_STR + _T("notesMasters");
|
||||
OOX::CPath pathFolderRels = pathFolder + FILE_SEPARATOR_STR + _T("_rels");
|
||||
|
||||
NSDirectory::CreateDirectory(pathFolder.GetPath());
|
||||
NSDirectory::CreateDirectory(pathFolderRels.GetPath());
|
||||
|
||||
PPTX::NotesMaster elm;
|
||||
m_arNotesMasters.push_back(elm);
|
||||
|
||||
m_oReader.m_pRels->Clear();
|
||||
m_oReader.m_pRels->StartNotesMaster(m_arSlideMasters_Theme.size());
|
||||
|
||||
bNotesMasterPresent = true;
|
||||
if (lCount > 0)
|
||||
{
|
||||
m_arNotesMasters.back().fromPPTY(&m_oReader);
|
||||
m_oReader.m_pRels->CloseRels();
|
||||
|
||||
std::wstring strMasterNotesXml = L"notesMaster1.xml";
|
||||
oXmlWriter.ClearNoAttack();
|
||||
|
||||
m_arNotesMasters.back().toXmlWriter(&oXmlWriter);
|
||||
|
||||
OOX::CPath pathFile = pathFolder + FILE_SEPARATOR_STR + strMasterNotesXml;
|
||||
oXmlWriter.SaveToFile(pathFile.GetPath());
|
||||
|
||||
OOX::CPath pathFileRels = pathFolderRels + FILE_SEPARATOR_STR + strMasterNotesXml + _T(".rels");
|
||||
m_oReader.m_pRels->SaveRels(pathFileRels.GetPath());
|
||||
}
|
||||
else
|
||||
{
|
||||
CreateDefaultNotesMasters(m_arSlideMasters_Theme.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
// slides
|
||||
int nComment = 1;
|
||||
pPair = m_mainTables.find(NSMainTables::Slides);
|
||||
if (m_mainTables.end() != pPair)
|
||||
@ -452,7 +588,7 @@ namespace NSBinPptxRW
|
||||
m_arSlides.push_back(elm);
|
||||
|
||||
m_oReader.m_pRels->Clear();
|
||||
m_oReader.m_pRels->StartSlide(i, m_arSlides_Layout[i]);
|
||||
m_oReader.m_pRels->StartSlide(i, m_arSlides_Layout[i], m_arSlides_Notes[i]);
|
||||
m_arSlides[i].fromPPTY(&m_oReader);
|
||||
|
||||
if (m_arSlides[i].comments.is_init())
|
||||
@ -488,71 +624,6 @@ namespace NSBinPptxRW
|
||||
m_oReader.m_pRels->SaveRels(pathFileRels.GetPath());
|
||||
}
|
||||
}
|
||||
|
||||
if (false)
|
||||
{
|
||||
// noteMasters
|
||||
pPair = m_mainTables.find(NSMainTables::NotesMasters);
|
||||
if (m_mainTables.end() != pPair)
|
||||
{
|
||||
m_oReader.Seek(pPair->second);
|
||||
LONG lCount = m_oReader.GetLong();
|
||||
|
||||
for (LONG i = 0; i < lCount; ++i)
|
||||
{
|
||||
PPTX::NotesMaster elm;
|
||||
m_arNotesMasters.push_back(elm);
|
||||
m_arNotesMasters[i].fromPPTY(&m_oReader);
|
||||
}
|
||||
}
|
||||
|
||||
// notes
|
||||
pPair = m_mainTables.find(NSMainTables::NotesSlides);
|
||||
if (m_mainTables.end() != pPair)
|
||||
{
|
||||
m_oReader.Seek(pPair->second);
|
||||
LONG lCount = m_oReader.GetLong();
|
||||
|
||||
for (LONG i = 0; i < lCount; ++i)
|
||||
{
|
||||
PPTX::NotesSlide elm;
|
||||
m_arNotesSlides.push_back(elm);
|
||||
m_arNotesSlides[i].fromPPTY(&m_oReader);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// create default
|
||||
CreateDefaultNotesMasters((int)m_arThemes.size() + 1);
|
||||
CreateDefaultNote();
|
||||
|
||||
OOX::CPath pathFolder = m_strDstFolder + FILE_SEPARATOR_STR + _T("ppt") + FILE_SEPARATOR_STR + _T("notesSlides");
|
||||
OOX::CPath pathFolderRels = pathFolder + FILE_SEPARATOR_STR + _T("_rels");
|
||||
|
||||
NSDirectory::CreateDirectory (pathFolder.GetPath());
|
||||
NSDirectory::CreateDirectory (pathFolderRels.GetPath());
|
||||
|
||||
LONG lCount = (LONG)m_arSlides.size();
|
||||
for (LONG i = 0; i < lCount; ++i)
|
||||
{
|
||||
m_oReader.m_pRels->Clear();
|
||||
m_oReader.m_pRels->StartNote(i);
|
||||
m_oReader.m_pRels->CloseRels();
|
||||
|
||||
std::wstring strMasterXml = L"notesSlide" + std::to_wstring(i + 1) + L".xml";
|
||||
oXmlWriter.ClearNoAttack();
|
||||
|
||||
m_oDefaultNote.toXmlWriter(&oXmlWriter);
|
||||
|
||||
OOX::CPath pathFile = pathFolder + FILE_SEPARATOR_STR + strMasterXml;
|
||||
oXmlWriter.SaveToFile(pathFile.GetPath());
|
||||
|
||||
OOX::CPath pathFileRels = pathFolderRels + FILE_SEPARATOR_STR + strMasterXml + _T(".rels");
|
||||
m_oReader.m_pRels->SaveRels(pathFileRels.GetPath());
|
||||
}
|
||||
}
|
||||
|
||||
if (false)
|
||||
{
|
||||
// app
|
||||
@ -595,15 +666,13 @@ namespace NSBinPptxRW
|
||||
m_oViewProps.fromPPTY(&m_oReader);
|
||||
}
|
||||
|
||||
//CreateDefaultPresProps();
|
||||
}
|
||||
else
|
||||
{
|
||||
// create default
|
||||
CreateDefaultApp();
|
||||
CreateDefaultCore();
|
||||
//CreateDefaultPresProps();
|
||||
//CreateDefaultTableStyles();
|
||||
|
||||
CreateDefaultViewProps();
|
||||
|
||||
// presProps
|
||||
@ -715,13 +784,16 @@ namespace NSBinPptxRW
|
||||
}
|
||||
|
||||
m_oReader.m_pRels->WriteSlides(nCountSlides);
|
||||
m_oReader.m_pRels->EndPresentationRels(m_oPresentation.commentAuthors.is_init());
|
||||
|
||||
m_oPresentation.notesMasterIdLst.clear();
|
||||
m_oPresentation.notesMasterIdLst.push_back(PPTX::Logic::XmlId());
|
||||
m_oPresentation.notesMasterIdLst[0].m_name = _T("notesMasterId");
|
||||
m_oPresentation.notesMasterIdLst[0].rid = (size_t)nCurrentRels;
|
||||
|
||||
if (bNotesMasterPresent)
|
||||
{
|
||||
m_oPresentation.notesMasterIdLst.push_back(PPTX::Logic::XmlId());
|
||||
m_oPresentation.notesMasterIdLst[0].m_name = _T("notesMasterId");
|
||||
m_oPresentation.notesMasterIdLst[0].rid = (size_t)nCurrentRels;
|
||||
++nCurrentRels;
|
||||
}
|
||||
m_oReader.m_pRels->EndPresentationRels(m_oPresentation.commentAuthors.is_init(), bNotesMasterPresent);
|
||||
m_oReader.m_pRels->CloseRels();
|
||||
|
||||
oXmlWriter.ClearNoAttack();
|
||||
@ -760,15 +832,13 @@ namespace NSBinPptxRW
|
||||
pContentTypes->Registration(L"application/vnd.openxmlformats-officedocument.extended-properties+xml", L"/docProps", L"app.xml");
|
||||
|
||||
// themes
|
||||
for (LONG i = 0; i < (LONG)m_arThemes.size(); ++i)
|
||||
for (size_t i = 0; i < m_arThemes.size(); ++i)
|
||||
{
|
||||
pContentTypes->Registration(L"application/vnd.openxmlformats-officedocument.theme+xml", L"/ppt/theme", L"theme" + std::to_wstring(i + 1) + L".xml");
|
||||
}
|
||||
if (true)
|
||||
{
|
||||
// notes theme
|
||||
pContentTypes->Registration(L"application/vnd.openxmlformats-officedocument.theme+xml", L"/ppt/theme", L"theme" + std::to_wstring((int)m_arThemes.size() + 1) + L".xml");
|
||||
// notes master
|
||||
if (!m_arNotesMasters.empty())
|
||||
{
|
||||
pContentTypes->Registration(L"application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml", L"/ppt/notesMasters", L"notesMaster1.xml");
|
||||
}
|
||||
|
||||
@ -785,13 +855,13 @@ namespace NSBinPptxRW
|
||||
}
|
||||
|
||||
// slides
|
||||
for (LONG i = 0; i < nCountSlides; ++i)
|
||||
for (size_t i = 0; i < m_arSlides.size(); ++i)
|
||||
{
|
||||
pContentTypes->Registration(L"application/vnd.openxmlformats-officedocument.presentationml.slide+xml", L"/ppt/slides", L"slide" + std::to_wstring(i + 1) + L".xml");
|
||||
}
|
||||
|
||||
// notes
|
||||
for (LONG i = 0; i < nCountSlides; ++i)
|
||||
for (size_t i = 0; i < m_arNotesSlides.size(); ++i)
|
||||
{
|
||||
pContentTypes->Registration(L"application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml", L"/ppt/notesSlides", L"notesSlide" + std::to_wstring(i + 1) + L".xml");
|
||||
}
|
||||
|
||||
@ -187,8 +187,25 @@ namespace PPTX
|
||||
break;
|
||||
}
|
||||
case BULLET_TYPE_BULLET_BLIP:
|
||||
// TODO:
|
||||
break;
|
||||
{
|
||||
pReader->Skip(5); // len + type + start attr
|
||||
|
||||
Logic::BuBlip *pBuBlip = new Logic::BuBlip();
|
||||
pBuBlip->blip.fromPPTY(pReader);
|
||||
|
||||
if (pBuBlip->blip.embed.IsInit())
|
||||
{
|
||||
m_Bullet.reset(pBuBlip);
|
||||
}
|
||||
else
|
||||
{//??? сбой ???
|
||||
delete pBuBlip;
|
||||
|
||||
Logic::BuChar *pBuChar = new Logic::BuChar();
|
||||
pBuChar->Char = wchar_t(L'\x2022');
|
||||
m_Bullet.reset(pBuChar);
|
||||
}
|
||||
}break;
|
||||
default:
|
||||
m_Bullet.reset(new Logic::BuNone());
|
||||
break;
|
||||
|
||||
@ -44,7 +44,11 @@ namespace PPTX
|
||||
{
|
||||
public:
|
||||
WritingElement_AdditionConstructors(ClrMap)
|
||||
PPTX_LOGIC_BASE2(ClrMap)
|
||||
|
||||
ClrMap(std::wstring name = L"p:clrMap")
|
||||
{
|
||||
m_name = name;
|
||||
}
|
||||
|
||||
virtual OOX::EElementType getType() const
|
||||
{
|
||||
|
||||
@ -257,5 +257,129 @@ namespace PPTX
|
||||
pWriter->EndRecord();
|
||||
}
|
||||
|
||||
void Blip::fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader)
|
||||
{
|
||||
LONG _s2 = pReader->GetPos();
|
||||
LONG _e2 = _s2 + pReader->GetLong() + 4;
|
||||
|
||||
pReader->Skip(1);
|
||||
|
||||
while (true)
|
||||
{
|
||||
BYTE _at = pReader->GetUChar_TypeNode();
|
||||
if (NSBinPptxRW::g_nodeAttributeEnd == _at)
|
||||
break;
|
||||
|
||||
if (_at == 0)
|
||||
pReader->Skip(1);
|
||||
}
|
||||
|
||||
while (pReader->GetPos() < _e2)
|
||||
{
|
||||
BYTE _t = pReader->GetUChar();
|
||||
|
||||
switch (_t)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
{
|
||||
// id. embed / link
|
||||
pReader->Skip(4);
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
case 11:
|
||||
{
|
||||
// id. embed / link
|
||||
pReader->GetString2();
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
pReader->Skip(4);
|
||||
ULONG count_effects = pReader->GetULong();
|
||||
for (ULONG _eff = 0; _eff < count_effects; ++_eff)
|
||||
{
|
||||
pReader->Skip(1); // type
|
||||
ULONG rec_len = pReader->GetULong();
|
||||
if (0 == rec_len)
|
||||
continue;
|
||||
|
||||
BYTE rec = pReader->GetUChar();
|
||||
|
||||
if (rec == EFFECT_TYPE_ALPHAMODFIX)
|
||||
{
|
||||
// alpha!!!
|
||||
LONG _e22 = pReader->GetPos() + pReader->GetLong() + 4;
|
||||
|
||||
pReader->Skip(1); // startattr
|
||||
|
||||
PPTX::Logic::AlphaModFix* pEffect = new PPTX::Logic::AlphaModFix();
|
||||
while (true)
|
||||
{
|
||||
BYTE _at = pReader->GetUChar_TypeNode();
|
||||
if (NSBinPptxRW::g_nodeAttributeEnd == _at)
|
||||
break;
|
||||
|
||||
if (_at == 0)
|
||||
pEffect->amt = pReader->GetLong();
|
||||
}
|
||||
|
||||
Effects.push_back(UniEffect());
|
||||
Effects[0].InitPointer(pEffect);
|
||||
|
||||
pReader->Seek(_e22);
|
||||
}
|
||||
else
|
||||
{
|
||||
pReader->SkipRecord();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
pReader->Skip(6); // len + start attributes + type
|
||||
|
||||
std::wstring strImagePath = pReader->GetString2();
|
||||
|
||||
if (0 != strImagePath.find(_T("http:")) &&
|
||||
0 != strImagePath.find(_T("https:")) &&
|
||||
0 != strImagePath.find(_T("ftp:")) &&
|
||||
0 != strImagePath.find(_T("file:")))
|
||||
{
|
||||
if (0 == strImagePath.find(_T("theme")))
|
||||
{
|
||||
strImagePath = pReader->m_strFolderExternalThemes + FILE_SEPARATOR_STR + strImagePath;
|
||||
}
|
||||
else
|
||||
{
|
||||
strImagePath = pReader->m_strFolder + FILE_SEPARATOR_STR + _T("media") + FILE_SEPARATOR_STR + strImagePath;
|
||||
}
|
||||
|
||||
OOX::CPath pathUrl = strImagePath;
|
||||
strImagePath = pathUrl.GetPath();
|
||||
}
|
||||
|
||||
smart_ptr<OOX::File> additionalFile;
|
||||
NSBinPptxRW::_relsGeneratorInfo oRelsGeneratorInfo = pReader->m_pRels->WriteImage(strImagePath, additionalFile, L"", L"");
|
||||
|
||||
if (oRelsGeneratorInfo.nImageRId > 0)
|
||||
{
|
||||
embed = new OOX::RId((size_t)oRelsGeneratorInfo.nImageRId);
|
||||
}
|
||||
pReader->Skip(1); // end attribute
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
pReader->SkipRecord();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pReader->Seek(_e2);
|
||||
}
|
||||
} // namespace Logic
|
||||
} // namespace PPTX
|
||||
@ -91,6 +91,7 @@ namespace PPTX
|
||||
virtual void toXmlWriter(NSBinPptxRW::CXmlWriter* pWriter) const;
|
||||
|
||||
virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const;
|
||||
virtual void fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader);
|
||||
|
||||
virtual std::wstring GetFullPicName(OOX::IFileContainer* pRels = NULL)const;
|
||||
virtual std::wstring GetFullOleName(const OOX::RId& pRId, OOX::IFileContainer* pRels = NULL)const;
|
||||
|
||||
@ -447,7 +447,10 @@ namespace PPTX
|
||||
if (!blip.is_init())
|
||||
blip = new PPTX::Logic::Blip();
|
||||
|
||||
blip->embed = new OOX::RId((size_t)oRelsGeneratorInfo.nImageRId);
|
||||
if (oRelsGeneratorInfo.nImageRId > 0)
|
||||
{
|
||||
blip->embed = new OOX::RId((size_t)oRelsGeneratorInfo.nImageRId);
|
||||
}
|
||||
|
||||
if(oRelsGeneratorInfo.nOleRId > 0)
|
||||
{
|
||||
|
||||
@ -137,7 +137,7 @@ namespace PPTX
|
||||
pWriter->WriteLimit2(4, m_oDrawAspect);
|
||||
pWriter->WriteLimit2(5, m_oType);
|
||||
pWriter->WriteLimit2(6, m_oUpdateMode);
|
||||
if (ole_file.IsInit() == false || ole_file->isMsPackage() == false)
|
||||
if (ole_file.IsInit() && ole_file->isMsPackage() == false)
|
||||
{
|
||||
std::wstring sExt = ole_file->filename().GetExtention(false);
|
||||
if (!sExt.empty())
|
||||
@ -1136,8 +1136,18 @@ namespace PPTX
|
||||
}
|
||||
}
|
||||
|
||||
if (spPr.Geometry.is_init())
|
||||
bool bRect = bOle; //ole ВСЕГДА rect
|
||||
|
||||
if (spPr.Geometry.is<PPTX::Logic::PrstGeom>())
|
||||
{
|
||||
const PPTX::Logic::PrstGeom & lpGeom = spPr.Geometry.as<PPTX::Logic::PrstGeom>();
|
||||
|
||||
if( lpGeom.prst.get() == L"rect" )
|
||||
bRect = true;
|
||||
}
|
||||
|
||||
if (bRect == false)
|
||||
{//custom vml shape
|
||||
std::wstring strPath;
|
||||
std::wstring strTextRect;
|
||||
|
||||
@ -1324,7 +1334,9 @@ namespace PPTX
|
||||
}
|
||||
if(oleObject->m_oId.IsInit())
|
||||
{
|
||||
blipFill.blip->oleRid = oleObject->m_oId.get().ToString();
|
||||
if (blipFill.blip.IsInit() == false)
|
||||
blipFill.blip.Init();
|
||||
blipFill.blip->oleRid = oleObject->m_oId->get();
|
||||
}
|
||||
}
|
||||
} // namespace Logic
|
||||
|
||||
@ -409,7 +409,6 @@ namespace PPTX
|
||||
|
||||
pWriter->StartRecord(4);
|
||||
pWriter->m_pMainDocument->getBinaryContentElem(OOX::et_w_sdtContent, oTextBoxShape.GetPointer(), *pWriter, lDataSize);
|
||||
//pWriter->m_pMainDocument->getBinaryContent(TextBoxShape.get(), *pWriter, lDataSize);
|
||||
pWriter->EndRecord();
|
||||
|
||||
if (oTextBoxBodyPr.is_init())
|
||||
@ -419,6 +418,24 @@ namespace PPTX
|
||||
pWriter->EndRecord();
|
||||
}
|
||||
}
|
||||
else if (strTextBoxShape.is_init())//после конвертации старого шейпа (vml)
|
||||
{
|
||||
long lDataSize = 0;
|
||||
ULONG lPos = pWriter->GetPosition();
|
||||
pWriter->SetPosition(lPos);
|
||||
|
||||
pWriter->StartRecord(4);
|
||||
pWriter->m_pMainDocument->getBinaryContent(strTextBoxShape.get(), *pWriter, lDataSize);
|
||||
pWriter->EndRecord();
|
||||
|
||||
if (oTextBoxBodyPr.is_init())
|
||||
{
|
||||
pWriter->StartRecord(5);
|
||||
oTextBoxBodyPr->toPPTY(pWriter);
|
||||
pWriter->EndRecord();
|
||||
}
|
||||
}
|
||||
|
||||
else if (txBody.is_init())
|
||||
{
|
||||
std::wstring strContent = txBody->GetDocxTxBoxContent(pWriter, style);
|
||||
@ -553,7 +570,7 @@ namespace PPTX
|
||||
std::wstring strFillNode;
|
||||
std::wstring strStrokeNode;;
|
||||
|
||||
CalculateFill(spPr, style, oTheme, oClrMap, strFillAttr, strFillNode, bOle);
|
||||
CalculateFill(spPr, style, oTheme, oClrMap, strFillAttr, strFillNode, bOle, bSignature);
|
||||
CalculateLine(spPr, style, oTheme, oClrMap, strStrokeAttr, strStrokeNode, bOle, bSignature);
|
||||
|
||||
pWriter->StartNode(L"v:shape");
|
||||
|
||||
@ -59,7 +59,7 @@ namespace PPTX
|
||||
}
|
||||
|
||||
void CalculateFill(PPTX::Logic::SpPr& oSpPr, nullable<ShapeStyle>& pShapeStyle, NSCommon::smart_ptr<PPTX::Theme>& oTheme,
|
||||
NSCommon::smart_ptr<PPTX::Logic::ClrMap>& oClrMap, std::wstring& strAttr, std::wstring& strNode, bool bOle)
|
||||
NSCommon::smart_ptr<PPTX::Logic::ClrMap>& oClrMap, std::wstring& strAttr, std::wstring& strNode, bool bOle, bool bSignature)
|
||||
{
|
||||
PPTX::Logic::UniFill fill;
|
||||
DWORD ARGB = 0;
|
||||
@ -113,7 +113,7 @@ namespace PPTX
|
||||
|
||||
std::wstring strId = oBlip.blip->embed->ToString();
|
||||
|
||||
if(bOle)
|
||||
if (bOle || bSignature)
|
||||
{
|
||||
strAttr = _T(" filled=\"f\"");
|
||||
strNode = _T("<v:imagedata r:id=\"") + strId + _T("\" o:title=\"\" />");
|
||||
|
||||
@ -44,7 +44,7 @@ namespace PPTX
|
||||
namespace Logic
|
||||
{
|
||||
void CalculateFill(PPTX::Logic::SpPr& oSpPr, nullable<ShapeStyle>& pShapeStyle, smart_ptr<PPTX::Theme>& oTheme,
|
||||
smart_ptr<PPTX::Logic::ClrMap>& oClrMap, std::wstring& strAttr, std::wstring& strNode, bool bOle = false);
|
||||
smart_ptr<PPTX::Logic::ClrMap>& oClrMap, std::wstring& strAttr, std::wstring& strNode, bool bOle = false, bool bSignature = false);
|
||||
|
||||
void CalculateLine(PPTX::Logic::SpPr& oSpPr, nullable<ShapeStyle>& pShapeStyle,
|
||||
smart_ptr<PPTX::Theme>& oTheme, smart_ptr<PPTX::Logic::ClrMap>& oClrMap, std::wstring& strAttr, std::wstring& strNode, bool bOle = false, bool bSignature = false);
|
||||
|
||||
@ -46,9 +46,9 @@ namespace PPTX
|
||||
public:
|
||||
WritingElement_AdditionConstructors(TextListStyle)
|
||||
|
||||
TextListStyle()
|
||||
TextListStyle(std::wstring name = L"a:lstStyle")
|
||||
{
|
||||
m_name = L"a:lstStyle";
|
||||
m_name = name;
|
||||
}
|
||||
|
||||
virtual void fromXML(XmlUtils::CXmlNode& node)
|
||||
|
||||
@ -189,8 +189,8 @@ namespace PPTX
|
||||
WritingElement_ReadAttributes_Read_else_if( oReader, _T("lvl"), lvl)
|
||||
WritingElement_ReadAttributes_Read_else_if( oReader, _T("algn"), algn)
|
||||
WritingElement_ReadAttributes_Read_else_if( oReader, _T("fontAlgn"),fontAlgn)
|
||||
WritingElement_ReadAttributes_Read_else_if( oReader, _T("marL"), marR)
|
||||
WritingElement_ReadAttributes_Read_else_if( oReader, _T("marR"), marL)
|
||||
WritingElement_ReadAttributes_Read_else_if( oReader, _T("marL"), marL)
|
||||
WritingElement_ReadAttributes_Read_else_if( oReader, _T("marR"), marR)
|
||||
WritingElement_ReadAttributes_Read_else_if( oReader, _T("indent"), indent)
|
||||
WritingElement_ReadAttributes_Read_else_if( oReader, _T("defTabSz"),defTabSz)
|
||||
WritingElement_ReadAttributes_End ( oReader )
|
||||
@ -541,4 +541,4 @@ namespace PPTX
|
||||
} // namespace Logic
|
||||
} // namespace PPTX
|
||||
|
||||
#endif // PPTX_LOGIC_TEXTPARAGRAPHPR_INCLUDE_H_
|
||||
#endif // PPTX_LOGIC_TEXTPARAGRAPHPR_INCLUDE_H_
|
||||
|
||||
@ -131,11 +131,11 @@ namespace PPTX
|
||||
pWriter->StartAttributes();
|
||||
pWriter->WriteAttribute(_T("xmlns:a"), PPTX::g_Namespaces.a.m_strLink);
|
||||
pWriter->WriteAttribute(_T("xmlns:r"), PPTX::g_Namespaces.r.m_strLink);
|
||||
pWriter->WriteAttribute(_T("xmlns:m"), PPTX::g_Namespaces.m.m_strLink);
|
||||
pWriter->WriteAttribute(_T("xmlns:w"), PPTX::g_Namespaces.w.m_strLink);
|
||||
pWriter->WriteAttribute(_T("xmlns:p"), PPTX::g_Namespaces.p.m_strLink);
|
||||
pWriter->EndAttributes();
|
||||
|
||||
cSld.toXmlWriter(pWriter);
|
||||
|
||||
clrMap.toXmlWriter(pWriter);
|
||||
pWriter->Write(hf);
|
||||
pWriter->Write(notesStyle);
|
||||
@ -172,7 +172,7 @@ namespace PPTX
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
notesStyle = new Logic::TextListStyle();
|
||||
notesStyle = new Logic::TextListStyle(L"p:notesStyle");
|
||||
notesStyle->fromPPTY(pReader);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -48,7 +48,6 @@ public:
|
||||
~AutoFilter();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
*/
|
||||
|
||||
#include "ChartFrtInfo.h"
|
||||
#include <Logic/Biff_structures/FrtHeaderOld.h>
|
||||
#include "../Biff_structures/FrtHeaderOld.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
@ -56,11 +56,6 @@ void CrtMlFrt::readFields(CFRecord& record)
|
||||
Log::error("CrtMlFrt record is not implemented.");
|
||||
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
//
|
||||
// if (cb > 0)
|
||||
// {
|
||||
// //XmlTkChain
|
||||
// }
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -54,7 +54,6 @@ void DBQueryExt::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### DBQueryExt record is not implemented")
|
||||
Log::error("DBQueryExt record is not implemented.");
|
||||
//record >> some_value;
|
||||
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
}
|
||||
|
||||
@ -52,8 +52,7 @@ BaseObjectPtr DCon::clone()
|
||||
|
||||
void DCon::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### DCon record is not implemented")
|
||||
//record >> iiftab >> fLeftCat >> fTopCat >> fLinkConsole;
|
||||
record >> iiftab >> fLeftCat >> fTopCat >> fLinkConsole;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of DCon record in BIFF8
|
||||
class DCon: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(DCon)
|
||||
|
||||
@ -53,9 +53,17 @@ BaseObjectPtr DConBin::clone()
|
||||
|
||||
void DConBin::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### DConBin record is not implemented")
|
||||
Log::error("DConBin record is not implemented.");
|
||||
//record >> some_value;
|
||||
unsigned short reserved1;
|
||||
unsigned char reserved2;
|
||||
record >> nBuiltin >> reserved1 >> reserved2 >> cchFile;
|
||||
|
||||
if (cchFile > 0 && cchFile < 0xffff)
|
||||
{
|
||||
stFile.setSize(cchFile);
|
||||
record >> stFile;
|
||||
}
|
||||
|
||||
// skip unused
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
}
|
||||
|
||||
|
||||
@ -32,12 +32,11 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
#include "../Biff_structures/BiffString.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of DConBin record in BIFF8
|
||||
class DConBin: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(DConBin)
|
||||
@ -48,11 +47,13 @@ public:
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeDConBin;
|
||||
static const ElementType type = typeDConBin;
|
||||
|
||||
unsigned char nBuiltin;
|
||||
unsigned short cchFile;
|
||||
XLUnicodeStringNoCch stFile;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -37,6 +37,8 @@ namespace XLS
|
||||
|
||||
DConRef::DConRef()
|
||||
{
|
||||
bFilePath = false;
|
||||
bSheetName = false;
|
||||
}
|
||||
|
||||
|
||||
@ -52,10 +54,33 @@ BaseObjectPtr DConRef::clone()
|
||||
|
||||
void DConRef::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### DConRef record is not implemented")
|
||||
Log::error("DConRef record is not implemented.");
|
||||
record >> ref >> cchFile;
|
||||
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
if (cchFile > 1)
|
||||
{
|
||||
XLUnicodeStringNoCch stFile_;
|
||||
stFile_.setSize(cchFile);
|
||||
record >> stFile_;
|
||||
//dcon-file = external-virt-path / self-reference
|
||||
//external-virt-path = volume / unc-volume / rel-volume / transfer-protocol / startup / alt-startup / library / simple-file-path-dcon
|
||||
//simple-file-path-dcon = %x0001 file-path
|
||||
//self-reference = %x0002 sheet-name
|
||||
|
||||
stFile = stFile_.value();
|
||||
if (stFile.substr(0, 1) == L"\x0001")
|
||||
{
|
||||
bFilePath = true;
|
||||
stFile = stFile.substr(1);
|
||||
}
|
||||
else if (stFile.substr(0, 1) == L"\x0002")
|
||||
{
|
||||
bSheetName = true;
|
||||
stFile = stFile.substr(1);
|
||||
}
|
||||
}
|
||||
|
||||
int unused = record.getDataSize() - record.getRdPtr();
|
||||
record.skipNunBytes(unused);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -33,11 +33,12 @@
|
||||
|
||||
#include "BiffRecord.h"
|
||||
|
||||
#include "../Biff_structures/BiffString.h"
|
||||
#include "../Biff_structures/CellRangeRef.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of DConRef record in BIFF8
|
||||
class DConRef: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(DConRef)
|
||||
@ -47,12 +48,17 @@ public:
|
||||
~DConRef();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeDConRef;
|
||||
static const ElementType type = typeDConRef;
|
||||
|
||||
RefU ref;
|
||||
unsigned short cchFile;
|
||||
std::wstring stFile;
|
||||
|
||||
bool bFilePath;
|
||||
bool bSheetName;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -54,7 +54,6 @@ void DbOrParamQry::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### DbOrParamQry record is not implemented")
|
||||
Log::error("DbOrParamQry record is not implemented.");
|
||||
//record >> some_value;
|
||||
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
}
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
*/
|
||||
|
||||
#include "EndObject.h"
|
||||
#include <Logic/Biff_structures/FrtHeaderOld.h>
|
||||
#include "../Biff_structures/FrtHeaderOld.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
@ -53,7 +53,7 @@ BaseObjectPtr FnGrp12::clone()
|
||||
void FnGrp12::readFields(CFRecord& record)
|
||||
{
|
||||
record.skipNunBytes(12);
|
||||
#pragma message("############################ frtHeader skipped here")
|
||||
#pragma message(">>>>>>>>>>> frtHeader skipped here")
|
||||
record >> astFnGrp;
|
||||
}
|
||||
|
||||
|
||||
@ -53,7 +53,7 @@ BaseObjectPtr ForceFullCalculation::clone()
|
||||
void ForceFullCalculation::readFields(CFRecord& record)
|
||||
{
|
||||
record.skipNunBytes(12);
|
||||
#pragma message("############################ frtHeader skipped here")
|
||||
#pragma message(">>>>>>>>>>> frtHeader skipped here")
|
||||
|
||||
_UINT32 temp;
|
||||
record >> temp;
|
||||
|
||||
@ -53,7 +53,7 @@ BaseObjectPtr GUIDTypeLib::clone()
|
||||
void GUIDTypeLib::readFields(CFRecord& record)
|
||||
{
|
||||
record.skipNunBytes(12);
|
||||
#pragma message("############################ frtHeader skipped here")
|
||||
#pragma message(">>>>>>>>>>> frtHeader skipped here")
|
||||
_GUID_ guid_num;
|
||||
record >> guid_num;
|
||||
guid = STR::guid2bstr(guid_num);
|
||||
|
||||
@ -35,7 +35,6 @@
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
// Logical representation of IMDATA record in BIFF5
|
||||
class IMDATA: public BiffRecordContinued
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(IMDATA)
|
||||
@ -45,11 +44,10 @@ public:
|
||||
~IMDATA();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeIMDATA;
|
||||
static const ElementType type = typeIMDATA;
|
||||
|
||||
_UINT16 cf;
|
||||
_UINT16 env;
|
||||
|
||||
@ -53,7 +53,7 @@ BaseObjectPtr MDB::clone()
|
||||
void MDB::readFields(CFRecord& record)
|
||||
{
|
||||
record.skipNunBytes(12);
|
||||
#pragma message("############################ frtHeader skipped here")
|
||||
#pragma message(">>>>>>>>>>> frtHeader skipped here")
|
||||
while(!record.isEOF())
|
||||
{
|
||||
MDirPtr element(new MDir);
|
||||
|
||||
@ -53,7 +53,7 @@ BaseObjectPtr MDTInfo::clone()
|
||||
void MDTInfo::readFields(CFRecord& record)
|
||||
{
|
||||
record.skipNunBytes(12);
|
||||
#pragma message("############################ frtHeader skipped here")
|
||||
#pragma message(">>>>>>>>>>> frtHeader skipped here")
|
||||
|
||||
_UINT32 flags;
|
||||
record >> flags;
|
||||
|
||||
@ -53,7 +53,7 @@ BaseObjectPtr MDXKPI::clone()
|
||||
void MDXKPI::readFields(CFRecord& record)
|
||||
{
|
||||
record.skipNunBytes(12);
|
||||
#pragma message("############################ frtHeader skipped here")
|
||||
#pragma message(">>>>>>>>>>> frtHeader skipped here")
|
||||
record >> istrConnName >> tfnSrc >> kpiprop >> istrKPIName >> istrMbrKPI;
|
||||
}
|
||||
|
||||
|
||||
@ -54,7 +54,7 @@ BaseObjectPtr MDXProp::clone()
|
||||
void MDXProp::readFields(CFRecord& record)
|
||||
{
|
||||
record.skipNunBytes(12);
|
||||
#pragma message("############################ frtHeader skipped here")
|
||||
#pragma message(">>>>>>>>>>> frtHeader skipped here")
|
||||
record >> istrConnName >> tfnSrc >> istrMbr >> istrProp;
|
||||
}
|
||||
|
||||
|
||||
@ -54,7 +54,7 @@ BaseObjectPtr MDXSet::clone()
|
||||
void MDXSet::readFields(CFRecord& record)
|
||||
{
|
||||
record.skipNunBytes(12);
|
||||
#pragma message("############################ frtHeader skipped here")
|
||||
#pragma message(">>>>>>>>>>> frtHeader skipped here")
|
||||
record >> istrConnName >> tfnSrc >> sso >> istrSetDef >> cistr;
|
||||
while(!record.isEOF())
|
||||
{
|
||||
|
||||
@ -54,7 +54,7 @@ BaseObjectPtr MDXStr::clone()
|
||||
void MDXStr::readFields(CFRecord& record)
|
||||
{
|
||||
record.skipNunBytes(12);
|
||||
#pragma message("############################ frtHeader skipped here")
|
||||
#pragma message(">>>>>>>>>>> frtHeader skipped here")
|
||||
record >> st;
|
||||
}
|
||||
|
||||
|
||||
@ -54,7 +54,7 @@ BaseObjectPtr MDXTuple::clone()
|
||||
void MDXTuple::readFields(CFRecord& record)
|
||||
{
|
||||
record.skipNunBytes(12);
|
||||
#pragma message("############################ frtHeader skipped here")
|
||||
#pragma message(">>>>>>>>>>> frtHeader skipped here")
|
||||
record >> istrConnName >> tfnSrc >> cistr;
|
||||
while(!record.isEOF())
|
||||
{
|
||||
|
||||
@ -54,7 +54,7 @@ void MTRSettings::readFields(CFRecord& record)
|
||||
{
|
||||
record.skipNunBytes(12);
|
||||
_UINT32 temp1, temp2;
|
||||
#pragma message("############################ frtHeader skipped here")
|
||||
|
||||
record >> temp1 >> temp2 >> cUserThreadCount;
|
||||
|
||||
fMTREnabled = temp1;
|
||||
|
||||
@ -53,7 +53,7 @@ BaseObjectPtr NameFnGrp12::clone()
|
||||
void NameFnGrp12::readFields(CFRecord& record)
|
||||
{
|
||||
record.skipNunBytes(12);
|
||||
#pragma message("############################ frtHeader skipped here")
|
||||
#pragma message(">>>>>>>>>>> frtHeader skipped here")
|
||||
record >> cachName >> fgrp >> rgach;
|
||||
}
|
||||
|
||||
|
||||
@ -53,7 +53,7 @@ BaseObjectPtr NamePublish::clone()
|
||||
void NamePublish::readFields(CFRecord& record)
|
||||
{
|
||||
record.skipNunBytes(12);
|
||||
#pragma message("############################ frtHeader skipped here")
|
||||
#pragma message(">>>>>>>>>>> frtHeader skipped here")
|
||||
unsigned short flags;
|
||||
record >> flags >> strName;
|
||||
fPublished = GETBIT(flags, 0);
|
||||
|
||||
@ -52,9 +52,9 @@ BaseObjectPtr OleDbConn::clone()
|
||||
|
||||
void OleDbConn::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### OleDbConn record is not implemented")
|
||||
Log::error("OleDbConn record is not implemented.");
|
||||
//record >> some_value;
|
||||
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -53,9 +53,8 @@ BaseObjectPtr PicF::clone()
|
||||
|
||||
void PicF::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### PicF record is not implemented")
|
||||
Log::error("PicF record is not implemented.");
|
||||
//record >> some_value;
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -52,9 +52,8 @@ BaseObjectPtr PivotChartBits::clone()
|
||||
|
||||
void PivotChartBits::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### PivotChartBits record is not implemented")
|
||||
Log::error("PivotChartBits record is not implemented.");
|
||||
//record >> some_value;
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -52,9 +52,9 @@ BaseObjectPtr Qsi::clone()
|
||||
|
||||
void Qsi::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### Qsi record is not implemented")
|
||||
Log::error("Qsi record is not implemented.");
|
||||
//record >> some_value;
|
||||
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -52,9 +52,22 @@ BaseObjectPtr QsiSXTag::clone()
|
||||
|
||||
void QsiSXTag::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### QsiSXTag record is not implemented")
|
||||
Log::error("QsiSXTag record is not implemented.");
|
||||
//record >> some_value;
|
||||
unsigned char reserved1;
|
||||
unsigned short flags, reserved2;
|
||||
|
||||
record >> frtHeaderOld >> fSx >> flags;
|
||||
|
||||
fEnableRefresh = GETBIT(flags, 0);
|
||||
fInvalid = GETBIT(flags, 1);
|
||||
fTensorEx = GETBIT(flags, 2);
|
||||
|
||||
record >> dwQsiFuture >> verSxLastUpdated >> verSxUpdatableMin >> obCchName >> reserved1;
|
||||
record >> stName;
|
||||
|
||||
record >> reserved2;
|
||||
|
||||
int skip = record.getDataSize() - record.getRdPtr();
|
||||
record.skipNunBytes(skip);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,12 +32,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
#include "../Biff_structures/BiffString.h"
|
||||
#include "../Biff_structures/FrtHeaderOld.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of QsiSXTag record in BIFF8
|
||||
class QsiSXTag: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(QsiSXTag)
|
||||
@ -47,12 +47,24 @@ public:
|
||||
~QsiSXTag();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeQsiSXTag;
|
||||
static const ElementType type = typeQsiSXTag;
|
||||
|
||||
FrtHeaderOld frtHeaderOld;
|
||||
unsigned short fSx;
|
||||
|
||||
bool fEnableRefresh;
|
||||
bool fInvalid;
|
||||
bool fTensorEx;
|
||||
|
||||
_UINT32 dwQsiFuture;
|
||||
unsigned char verSxLastUpdated;
|
||||
unsigned char verSxUpdatableMin;
|
||||
|
||||
unsigned char obCchName;
|
||||
XLUnicodeString stName;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -52,9 +52,8 @@ BaseObjectPtr Qsif::clone()
|
||||
|
||||
void Qsif::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### Qsif record is not implemented")
|
||||
Log::error("Qsif record is not implemented.");
|
||||
//record >> some_value;
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -52,9 +52,20 @@ BaseObjectPtr Qsir::clone()
|
||||
|
||||
void Qsir::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### Qsir record is not implemented")
|
||||
Log::error("Qsir record is not implemented.");
|
||||
//record >> some_value;
|
||||
_UINT32 flags;
|
||||
|
||||
record >> frtRefHeaderU >> cbQsirSaved >> cbQsifSaved >> flags >> iSortCustom >> cQsif >> cpstDeleted >> idFieldNext >> ccolExtraLeft >> ccolExtraRight;
|
||||
record >> idList >> rgbTitle;
|
||||
|
||||
fPersist = GETBIT(flags, 0);
|
||||
fPersistSort = GETBIT(flags, 1);
|
||||
fPersistAutoFilter = GETBIT(flags, 2);
|
||||
fSorted = GETBIT(flags, 20);
|
||||
fCaseSensSort = GETBIT(flags, 21);
|
||||
fHdrRowSort = GETBIT(flags, 22);
|
||||
fidWrapped = GETBIT(flags, 23);
|
||||
fTitlesOld = GETBIT(flags, 25);
|
||||
wVerBeforeRefreshAlert = GETBITS(flags, 26, 30);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,12 +32,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
#include "../Biff_structures/FrtRefHeaderU.h"
|
||||
#include "../Biff_structures/BiffString.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of Qsir record in BIFF8
|
||||
class Qsir: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(Qsir)
|
||||
@ -47,11 +47,32 @@ public:
|
||||
~Qsir();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeQsir;
|
||||
static const ElementType type = typeQsir;
|
||||
|
||||
FrtRefHeaderU frtRefHeaderU;
|
||||
unsigned short cbQsirSaved;
|
||||
unsigned short cbQsifSaved;
|
||||
bool fPersist;
|
||||
bool fPersistSort;
|
||||
bool fPersistAutoFilter;
|
||||
bool fSorted;
|
||||
bool fCaseSensSort;
|
||||
bool fHdrRowSort;
|
||||
bool fidWrapped;
|
||||
bool fTitlesOld;
|
||||
unsigned char wVerBeforeRefreshAlert;
|
||||
_UINT32 iSortCustom;
|
||||
_UINT32 cQsif;
|
||||
_UINT32 cpstDeleted;
|
||||
_UINT32 idFieldNext;
|
||||
unsigned short ccolExtraLeft;
|
||||
unsigned short ccolExtraRight;
|
||||
_UINT32 idList; //options
|
||||
|
||||
XLUnicodeString rgbTitle;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -53,9 +53,9 @@ BaseObjectPtr RRSort::clone()
|
||||
|
||||
void RRSort::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### RRSort record is not implemented")
|
||||
Log::error("RRSort record is not implemented.");
|
||||
//record >> some_value;
|
||||
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of RealTimeData record in BIFF8
|
||||
class RealTimeData: public BiffRecordContinued
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(RealTimeData)
|
||||
@ -47,12 +45,10 @@ public:
|
||||
~RealTimeData();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeRealTimeData;
|
||||
|
||||
static const ElementType type = typeRealTimeData;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -83,7 +83,7 @@ int SST::serialize(std::wostream & stream)
|
||||
{
|
||||
CP_XML_WRITER(stream)
|
||||
{
|
||||
for (int i=0; i < rgb.size(); i++)
|
||||
for (size_t i=0; i < rgb.size(); i++)
|
||||
{
|
||||
XLUnicodeRichExtendedString *richText = dynamic_cast<XLUnicodeRichExtendedString *>(rgb[i].get());
|
||||
|
||||
|
||||
@ -35,6 +35,19 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
BiffStructurePtr XLUnicodeStringSegmentedSXADDL::clone()
|
||||
{
|
||||
return BiffStructurePtr(new XLUnicodeStringSegmentedSXADDL(*this));
|
||||
}
|
||||
void XLUnicodeStringSegmentedSXADDL::load(CFRecord& record)
|
||||
{
|
||||
unsigned short reserved;
|
||||
record >> cchTotal >> reserved;
|
||||
|
||||
record >> string;
|
||||
}
|
||||
//-----------------------------------------
|
||||
|
||||
SXAddl::SXAddl()
|
||||
{
|
||||
}
|
||||
@ -52,11 +65,114 @@ BaseObjectPtr SXAddl::clone()
|
||||
|
||||
void SXAddl::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### SXAddl record is not implemented")
|
||||
//Log::error("SXAddl record is not implemented.");
|
||||
//record >> some_value;
|
||||
m_SXAddlHdr.load(record);
|
||||
|
||||
Log::error("SXAddl record is not implemented.");
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
}
|
||||
//-------------------------------------------------------------------------------------------------------
|
||||
BaseObjectPtr SXAddl_SXCCache_SXDId::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXAddl_SXCCache_SXDId(*this));
|
||||
}
|
||||
void SXAddl_SXCCache_SXDId::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
|
||||
short reserved;
|
||||
record >> idCache >> reserved;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BaseObjectPtr SXAddl_SXCCache_SXDEnd::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXAddl_SXCCache_SXDEnd(*this));
|
||||
}
|
||||
void SXAddl_SXCCache_SXDEnd::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
|
||||
_UINT32 reserved1;
|
||||
short reserved2;
|
||||
record >> reserved1 >> reserved2;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BaseObjectPtr Continue_SxaddlSxString::clone()
|
||||
{
|
||||
return BaseObjectPtr(new Continue_SxaddlSxString(*this));
|
||||
}
|
||||
|
||||
void Continue_SxaddlSxString::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
|
||||
int sz = record.getDataSize() - record.getRdPtr();
|
||||
|
||||
if (sz > 0)
|
||||
record >> stContinue;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BaseObjectPtr SXAddl_SXCCache_SXDVer10Info::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXAddl_SXCCache_SXDVer10Info(*this));
|
||||
}
|
||||
void SXAddl_SXCCache_SXDVer10Info::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
|
||||
_UINT32 reserved1;
|
||||
short reserved2;
|
||||
record >> reserved1 >> reserved2;
|
||||
|
||||
record >> citmGhostMax >> bVerCacheLastRefresh >> bVerCacheRefreshableMin;
|
||||
|
||||
for (int i = 0; i < 8; i++)
|
||||
record >> numDateCopy[i];
|
||||
|
||||
record >> reserved2;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BaseObjectPtr SXAddl_SXCCache_SXDInfo12::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXAddl_SXCCache_SXDInfo12(*this));
|
||||
}
|
||||
void SXAddl_SXCCache_SXDInfo12::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
|
||||
_UINT32 flags;
|
||||
short reserved;
|
||||
|
||||
record >> flags >> reserved;
|
||||
|
||||
fSheetData = GETBIT(flags, 0);
|
||||
fSrvSupportAttribDrill = GETBIT(flags, 1);
|
||||
fSrvSupportSubQuery = GETBIT(flags, 2);
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BaseObjectPtr SXAddl_SXCCache_SXDVerSXMacro::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXAddl_SXCCache_SXDVerSXMacro(*this));
|
||||
}
|
||||
void SXAddl_SXCCache_SXDVerSXMacro::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
|
||||
unsigned char reserved1;
|
||||
short reserved2, reserved3;
|
||||
|
||||
record >> dwVer >> reserved1 >> reserved2 >> reserved3;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
BaseObjectPtr SXAddl_SXCView_SXDId::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXAddl_SXCView_SXDId(*this));
|
||||
}
|
||||
void SXAddl_SXCView_SXDId::readFields(CFRecord& record)
|
||||
{
|
||||
m_SXAddlHdr.load(record);
|
||||
|
||||
record >> stName;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -32,140 +32,246 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
#include "../Biff_structures/BiffString.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
class XLUnicodeStringSegmentedSXADDL : public BiffStructure
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(XLUnicodeStringSegmentedSXADDL)
|
||||
public:
|
||||
|
||||
XLUnicodeStringSegmentedSXADDL(){}
|
||||
~XLUnicodeStringSegmentedSXADDL(){}
|
||||
|
||||
BiffStructurePtr clone();
|
||||
|
||||
virtual void load(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeStringSegmentedSXADDL;
|
||||
|
||||
_UINT32 cchTotal;
|
||||
XLUnicodeString string;
|
||||
};
|
||||
|
||||
// Logical representation of SXAddl record in BIFF8
|
||||
class SXAddl: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXAddl)
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(SXAddl)
|
||||
public:
|
||||
struct _SXAddlHdr
|
||||
{
|
||||
_UINT32 frtHeaderOld;
|
||||
unsigned char sxc;
|
||||
unsigned char sxd;
|
||||
|
||||
void load(CFRecord& record)
|
||||
{
|
||||
record >> frtHeaderOld >> sxc >> sxd;
|
||||
}
|
||||
}m_SXAddlHdr;
|
||||
|
||||
SXAddl();
|
||||
~SXAddl();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
virtual void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXAddl;
|
||||
};
|
||||
|
||||
class Continue_SxaddlSxString : public SXAddl
|
||||
{
|
||||
public:
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
|
||||
XLUnicodeStringSegmentedSXADDL stContinue;
|
||||
};
|
||||
class SXAddl_SXCAutoSort_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCAutoSort_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCCache_SXDEnd : public SXAddl
|
||||
{
|
||||
public:
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
};
|
||||
|
||||
class SXAddl_SXCCache_SXDId : public SXAddl
|
||||
{
|
||||
public:
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
|
||||
_UINT32 idCache;
|
||||
};
|
||||
|
||||
class SXAddl_SXCCache_SXDInfo12 : public SXAddl
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
|
||||
bool fSheetData;
|
||||
bool fSrvSupportAttribDrill;
|
||||
bool fSrvSupportSubQuery;
|
||||
|
||||
};
|
||||
|
||||
// The following classes are not implemented and most probably won't be.
|
||||
// So we save some compilation and link time and resulting dll size
|
||||
class Continue_SxaddlSxString : public SXAddl {};
|
||||
class SXAddl_SXCAutoSort_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCAutoSort_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCCache_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCCache_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCCache_SXDInfo12 : public SXAddl {};
|
||||
class SXAddl_SXCCache_SXDInvRefreshReal : public SXAddl {};
|
||||
class SXAddl_SXCCache_SXDVer10Info : public SXAddl {};
|
||||
class SXAddl_SXCCache_SXDVerSXMacro : public SXAddl {};
|
||||
class SXAddl_SXCCache_SXDVerUpdInv : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDCaption : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDIfdbMempropMap : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDIfdbMpMapCount : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDProperty : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDPropName : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDSxrmitmCount : public SXAddl {};
|
||||
class SXAddl_SXCCacheItem_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCCacheItem_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCCacheItem_SXDItmMpMapCount : public SXAddl {};
|
||||
class SXAddl_SXCCacheItem_SXDItmMpropMap : public SXAddl {};
|
||||
class SXAddl_SXCCacheItem_SXDSxrmitmDisp : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDAutoshow : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDISXTH : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDMemberCaption : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDVer12Info : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDVerUpdInv : public SXAddl {};
|
||||
class SXAddl_SXCField_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCField_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCField_SXDVer10Info : public SXAddl {};
|
||||
class SXAddl_SXCGroup_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCGroup_SXDGrpInfo : public SXAddl {};
|
||||
class SXAddl_SXCGroup_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCGroup_SXDMember : public SXAddl {};
|
||||
class SXAddl_SXCGrpLevel_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCGrpLevel_SXDGrpLevelInfo : public SXAddl {};
|
||||
class SXAddl_SXCGrpLevel_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDDisplayFolder : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDFilterMember : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDFilterMember12 : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDIconSet : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDInfo12 : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDKPIGoal : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDKPIStatus : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDKPITime : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDKPITrend : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDKPIValue : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDKPIWeight : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDMeasureGrp : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDParentKPI : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDProperty : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDSXSetParentUnique : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDUserCaption : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDVerUpdInv : public SXAddl {};
|
||||
class SXAddl_SXCQsi_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCQsi_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCQuery_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCQuery_SXDReconnCond : public SXAddl {};
|
||||
class SXAddl_SXCQuery_SXDSrcConnFile : public SXAddl {};
|
||||
class SXAddl_SXCQuery_SXDSrcDataFile : public SXAddl {};
|
||||
class SXAddl_SXCQuery_SXDXMLSource : public SXAddl {};
|
||||
class SXAddl_SXCSXCondFmt_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXCondFmt_SXDSXCondFmt : public SXAddl {};
|
||||
class SXAddl_SXCSXCondFmts_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXCondFmts_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXDH_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXDH_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXDH_SXDSxdh : public SXAddl {};
|
||||
class SXAddl_SXCSXfilt_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXfilt_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXfilt_SXDSXfilt : public SXAddl {};
|
||||
class SXAddl_SXCSXfilt_SXDSXItm : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDCaption : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDSXFilter : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDSXFilterDesc : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDSXFilterValue1 : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDSXFilterValue2 : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDXlsFilter : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDXlsFilterValue1 : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDXlsFilterValue2 : public SXAddl {};
|
||||
class SXAddl_SXCSXFilters12_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXFilters12_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXMg_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXMg_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXMg_SXDUserCaption : public SXAddl {};
|
||||
class SXAddl_SXCSXMgs_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXMgs_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXMgs_SXDMGrpSXDHMap : public SXAddl {};
|
||||
class SXAddl_SXCSXrule_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXrule_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXrule_SXDSXrule : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDCalcMember : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDCalcMemString : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDCompactColHdr : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDCompactRwHdr : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDSXPIIvmb : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDTableStyleClient : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDVer10Info : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDVer12Info : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDVerUpdInv : public SXAddl {};
|
||||
class SXAddl_SXCCache_SXDInvRefreshReal : public SXAddl
|
||||
{
|
||||
};
|
||||
|
||||
class SXAddl_SXCCache_SXDVer10Info : public SXAddl
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
|
||||
_INT32 citmGhostMax;
|
||||
unsigned char bVerCacheLastRefresh;
|
||||
unsigned char bVerCacheRefreshableMin;
|
||||
|
||||
unsigned char numDateCopy[8];
|
||||
};
|
||||
|
||||
class SXAddl_SXCCache_SXDVerSXMacro : public SXAddl
|
||||
{
|
||||
public:
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
|
||||
unsigned char dwVer;
|
||||
};
|
||||
|
||||
class SXAddl_SXCCache_SXDVerUpdInv : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDCaption : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDIfdbMempropMap: public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDIfdbMpMapCount: public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDProperty : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDPropName : public SXAddl {};
|
||||
class SXAddl_SXCCacheField_SXDSxrmitmCount : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCCacheItem_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCCacheItem_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCCacheItem_SXDItmMpMapCount : public SXAddl {};
|
||||
class SXAddl_SXCCacheItem_SXDItmMpropMap : public SXAddl {};
|
||||
class SXAddl_SXCCacheItem_SXDSxrmitmDisp : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCField12_SXDAutoshow : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDISXTH : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDMemberCaption : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDVer12Info : public SXAddl {};
|
||||
class SXAddl_SXCField12_SXDVerUpdInv : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCField_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCField_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCField_SXDVer10Info : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCGroup_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCGroup_SXDGrpInfo : public SXAddl {};
|
||||
class SXAddl_SXCGroup_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCGroup_SXDMember : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCGrpLevel_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCGrpLevel_SXDGrpLevelInfo : public SXAddl {};
|
||||
class SXAddl_SXCGrpLevel_SXDId : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCHierarchy_SXDDisplayFolder : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDFilterMember : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDFilterMember12 : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDIconSet : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDInfo12 : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDKPIGoal : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDKPIStatus : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDKPITime : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDKPITrend : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDKPIValue : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDKPIWeight : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDMeasureGrp : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDParentKPI : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDProperty : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDSXSetParentUnique : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDUserCaption : public SXAddl {};
|
||||
class SXAddl_SXCHierarchy_SXDVerUpdInv : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCQsi_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCQsi_SXDId : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCQuery_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCQuery_SXDReconnCond : public SXAddl {};
|
||||
class SXAddl_SXCQuery_SXDSrcConnFile : public SXAddl {};
|
||||
class SXAddl_SXCQuery_SXDSrcDataFile : public SXAddl {};
|
||||
class SXAddl_SXCQuery_SXDXMLSource : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCSXCondFmt_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXCondFmt_SXDSXCondFmt : public SXAddl {};
|
||||
class SXAddl_SXCSXCondFmts_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXCondFmts_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXDH_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXDH_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXDH_SXDSxdh : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCSXfilt_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXfilt_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXfilt_SXDSXfilt : public SXAddl {};
|
||||
class SXAddl_SXCSXfilt_SXDSXItm : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCSXFilter12_SXDCaption : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDSXFilter : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDSXFilterDesc : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDSXFilterValue1: public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDSXFilterValue2: public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDXlsFilter : public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDXlsFilterValue1: public SXAddl {};
|
||||
class SXAddl_SXCSXFilter12_SXDXlsFilterValue2: public SXAddl {};
|
||||
class SXAddl_SXCSXFilters12_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXFilters12_SXDId : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCSXMg_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXMg_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXMg_SXDUserCaption : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCSXMgs_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXMgs_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXMgs_SXDMGrpSXDHMap : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCSXrule_SXDEnd : public SXAddl {};
|
||||
class SXAddl_SXCSXrule_SXDId : public SXAddl {};
|
||||
class SXAddl_SXCSXrule_SXDSXrule : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCView_SXDCalcMember : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDCalcMemString : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDCompactColHdr : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDCompactRwHdr : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDEnd : public SXAddl {};
|
||||
|
||||
class SXAddl_SXCView_SXDId : public SXAddl
|
||||
{
|
||||
public:
|
||||
|
||||
virtual void readFields(CFRecord& record);
|
||||
virtual BaseObjectPtr clone();
|
||||
|
||||
XLUnicodeStringSegmentedSXADDL stName;
|
||||
};
|
||||
|
||||
class SXAddl_SXCView_SXDSXPIIvmb : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDTableStyleClient : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDVer10Info : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDVer12Info : public SXAddl {};
|
||||
class SXAddl_SXCView_SXDVerUpdInv : public SXAddl {};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -52,10 +52,13 @@ BaseObjectPtr SXDI::clone()
|
||||
|
||||
void SXDI::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### SXDI record is not implemented")
|
||||
Log::error("SXDI record is not implemented.");
|
||||
//record >> some_value;
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
record >> isxvdData >> iiftab >> df >> isxvd >> isxvi >> ifmt >> cchName;
|
||||
|
||||
if (cchName > 0 && cchName < 0xFFFF)
|
||||
{
|
||||
stName.setSize(cchName);
|
||||
record >> stName;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,12 +32,11 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
#include "../Biff_structures/BiffString.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXDI record in BIFF8
|
||||
class SXDI: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXDI)
|
||||
@ -47,11 +46,19 @@ public:
|
||||
~SXDI();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXDI;
|
||||
static const ElementType type = typeSXDI;
|
||||
|
||||
short isxvdData;
|
||||
short iiftab;
|
||||
short df;
|
||||
short isxvd;
|
||||
short isxvi;
|
||||
unsigned short ifmt;
|
||||
unsigned short cchName;
|
||||
XLUnicodeStringNoCch stName;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -52,9 +52,57 @@ BaseObjectPtr SXEx::clone()
|
||||
|
||||
void SXEx::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### SXEx record is not implemented")
|
||||
Log::error("SXEx record is not implemented.");
|
||||
//record >> some_value;
|
||||
record >> csxformat >> cchErrorString >> cchNullString >> cchTag >> csxselect;
|
||||
|
||||
_UINT32 flags;
|
||||
record >> crwPage >> ccolPage >> flags;
|
||||
|
||||
fAcrossPageLay = GETBIT(flags, 0);
|
||||
cWrapPage = GETBITS(flags, 1, 9);
|
||||
fEnableWizard = GETBIT(flags, 16);
|
||||
fEnableDrilldown = GETBIT(flags, 17);
|
||||
fEnableFieldDialog = GETBIT(flags, 18);
|
||||
fPreserveFormatting = GETBIT(flags, 19);
|
||||
fMergeLabels = GETBIT(flags, 20);
|
||||
fDisplayErrorString = GETBIT(flags, 21);
|
||||
fDisplayNullString = GETBIT(flags, 22);
|
||||
fSubtotalHiddenPageItems = GETBIT(flags, 23);
|
||||
|
||||
record >> cchPageFieldStyle >> cchTableStyle >> cchVacateStyle;
|
||||
|
||||
if (cchErrorString > 0 && cchErrorString != 0xffff)
|
||||
{
|
||||
stError.setSize(cchErrorString);
|
||||
record >> stError;
|
||||
}
|
||||
if (cchNullString > 0 && cchNullString != 0xffff)
|
||||
{
|
||||
stDisplayNull.setSize(cchNullString);
|
||||
record >> stDisplayNull;
|
||||
}
|
||||
if (cchTag > 0 && cchTag != 0xffff)
|
||||
{
|
||||
stTag.setSize(cchTag);
|
||||
record >> stTag;
|
||||
}
|
||||
if (cchPageFieldStyle > 0 && cchPageFieldStyle != 0xffff)
|
||||
{
|
||||
stPageFieldStyle.setSize(cchPageFieldStyle);
|
||||
record >> stPageFieldStyle;
|
||||
}
|
||||
if (cchTableStyle > 0 && cchTableStyle != 0xffff)
|
||||
{
|
||||
stTableStyle.setSize(cchTableStyle);
|
||||
record >> cchTableStyle;
|
||||
}
|
||||
if (cchVacateStyle > 0 && cchVacateStyle != 0xffff)
|
||||
{
|
||||
stVacateStyle.setSize(cchVacateStyle);
|
||||
record >> cchVacateStyle;
|
||||
}
|
||||
|
||||
int skip = record.getDataSize() - record.getRdPtr();
|
||||
record.skipNunBytes(skip);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,12 +32,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
#include "../Biff_structures/BiffString.h"
|
||||
#include "../Biff_structures/CellRangeRef.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXEx record in BIFF8
|
||||
class SXEx: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXEx)
|
||||
@ -47,13 +47,41 @@ public:
|
||||
~SXEx();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXEx;
|
||||
static const ElementType type = typeSXEx;
|
||||
|
||||
unsigned short csxformat;
|
||||
unsigned short cchErrorString;
|
||||
unsigned short cchNullString;
|
||||
unsigned short cchTag;
|
||||
unsigned short csxselect;
|
||||
|
||||
DRw crwPage;
|
||||
ColU ccolPage;
|
||||
|
||||
bool fAcrossPageLay;
|
||||
unsigned char cWrapPage;
|
||||
bool fEnableWizard;
|
||||
bool fEnableDrilldown;
|
||||
bool fEnableFieldDialog;
|
||||
bool fPreserveFormatting;
|
||||
bool fMergeLabels;
|
||||
bool fDisplayErrorString;
|
||||
bool fDisplayNullString;
|
||||
bool fSubtotalHiddenPageItems;
|
||||
|
||||
unsigned short cchPageFieldStyle;
|
||||
unsigned short cchTableStyle;
|
||||
unsigned short cchVacateStyle;
|
||||
|
||||
XLUnicodeStringNoCch stError;
|
||||
XLUnicodeStringNoCch stDisplayNull;
|
||||
XLUnicodeStringNoCch stTag;
|
||||
XLUnicodeStringNoCch stPageFieldStyle;
|
||||
XLUnicodeStringNoCch stTableStyle;
|
||||
XLUnicodeStringNoCch stVacateStyle;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -44,18 +44,45 @@ SXLI::~SXLI()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BaseObjectPtr SXLI::clone()
|
||||
{
|
||||
return BaseObjectPtr(new SXLI(*this));
|
||||
}
|
||||
|
||||
void SXLI::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### SXLI record is not implemented")
|
||||
Log::error("SXLI record is not implemented.");
|
||||
//record >> some_value;
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
{// 0 or 2 records SXLIItem
|
||||
int size_item = (record.getDataSize() - record.getRdPtr()) / 2;
|
||||
|
||||
if (size_item < 8)
|
||||
{
|
||||
//??
|
||||
return;
|
||||
}
|
||||
|
||||
for (int k = 0; k < 2; k++)
|
||||
{
|
||||
SXLIItem item;
|
||||
|
||||
unsigned short flags;
|
||||
|
||||
record >> item.cSic >> item.itmType >> item.isxviMac >> flags;
|
||||
|
||||
item.fMultiDataName = GETBIT(flags, 0);
|
||||
item.iData = GETBITS(flags, 1, 8);
|
||||
item.fSbt = GETBIT(flags, 9);
|
||||
item.fBlock = GETBIT(flags, 10);
|
||||
item.fGrand = GETBIT(flags, 11);
|
||||
item.fMultiDataOnAxis = GETBIT(flags, 12);
|
||||
|
||||
int count = (size_item - 8) / 2;
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
short val; record >> val;
|
||||
item.rgisxvi.push_back(val);
|
||||
}
|
||||
m_arItems.push_back(item);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -35,9 +35,21 @@
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
struct SXLIItem
|
||||
{
|
||||
short cSic;
|
||||
unsigned short itmType;
|
||||
short isxviMac;
|
||||
bool fMultiDataName;
|
||||
unsigned char iData;
|
||||
bool fSbt;
|
||||
bool fBlock;
|
||||
bool fGrand;
|
||||
bool fMultiDataOnAxis;
|
||||
|
||||
std::vector<short> rgisxvi;
|
||||
};
|
||||
|
||||
// Logical representation of SXLI record in BIFF8
|
||||
class SXLI: public BiffRecordContinued
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXLI)
|
||||
@ -47,12 +59,12 @@ public:
|
||||
~SXLI();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXLI;
|
||||
|
||||
static const ElementType type = typeSXLI;
|
||||
|
||||
std::vector<SXLIItem> m_arItems;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -52,10 +52,15 @@ BaseObjectPtr SXPI::clone()
|
||||
|
||||
void SXPI::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### SXPI record is not implemented")
|
||||
Log::error("SXPI record is not implemented.");
|
||||
//record >> some_value;
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
int size = (record.getDataSize() - record.getRdPtr()) / sizeof(SXPI_Item);
|
||||
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
SXPI_Item item;
|
||||
record >> item.isxvd >> item.isxvi >> item.idObj;
|
||||
|
||||
m_arItems.push_back(item);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -36,8 +36,13 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
struct SXPI_Item
|
||||
{
|
||||
short isxvd;
|
||||
short isxvi;
|
||||
short idObj;
|
||||
};
|
||||
|
||||
// Logical representation of SXPI record in BIFF8
|
||||
class SXPI: public BiffRecordContinued
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXPI)
|
||||
@ -48,11 +53,11 @@ public:
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXPI;
|
||||
static const ElementType type = typeSXPI;
|
||||
|
||||
std::vector<SXPI_Item> m_arItems;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -52,10 +52,7 @@ BaseObjectPtr SXPIEx::clone()
|
||||
|
||||
void SXPIEx::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### SXPIEx record is not implemented")
|
||||
Log::error("SXPIEx record is not implemented.");
|
||||
//record >> some_value;
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
record >> frtHeaderOld >> isxth >> stUnique >> stDisplay;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,12 +32,12 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
#include "../Biff_structures/BiffString.h"
|
||||
#include "../Biff_structures/FrtHeaderOld.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXPIEx record in BIFF8
|
||||
class SXPIEx: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXPIEx)
|
||||
@ -47,11 +47,15 @@ public:
|
||||
~SXPIEx();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXPIEx;
|
||||
static const ElementType type = typeSXPIEx;
|
||||
|
||||
FrtHeaderOld frtHeaderOld;
|
||||
_UINT32 isxth;
|
||||
XLUnicodeString stUnique;
|
||||
XLUnicodeString stDisplay;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -53,10 +53,7 @@ BaseObjectPtr SXStreamID::clone()
|
||||
|
||||
void SXStreamID::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### SXStreamID record is not implemented")
|
||||
Log::error("SXStreamID record is not implemented.");
|
||||
//record >> some_value;
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
record >> idStm;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXStreamID record in BIFF8
|
||||
class SXStreamID: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXStreamID)
|
||||
@ -47,14 +45,12 @@ public:
|
||||
~SXStreamID();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXStreamID;
|
||||
|
||||
|
||||
static const ElementType type = typeSXStreamID;
|
||||
|
||||
short idStm;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -53,10 +53,13 @@ BaseObjectPtr SXString::clone()
|
||||
|
||||
void SXString::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### SXString record is not implemented")
|
||||
Log::error("SXString record is not implemented.");
|
||||
//record >> some_value;
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
record >> cch;
|
||||
|
||||
if (cch > 0 && cch < 0xffff)
|
||||
{
|
||||
segment.setSize(cch);
|
||||
record >> segment;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,12 +32,11 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
#include "../Biff_structures/BiffString.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of SXString record in BIFF8
|
||||
class SXString: public BiffRecord
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXString)
|
||||
@ -47,11 +46,13 @@ public:
|
||||
~SXString();
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeSXString;
|
||||
static const ElementType type = typeSXString;
|
||||
|
||||
unsigned short cch;
|
||||
XLUnicodeStringNoCch segment;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -53,10 +53,7 @@ BaseObjectPtr SXTBRGIITM::clone()
|
||||
|
||||
void SXTBRGIITM::readFields(CFRecord& record)
|
||||
{
|
||||
#pragma message("####################### SXTBRGIITM record is not implemented")
|
||||
Log::error("SXTBRGIITM record is not implemented.");
|
||||
//record >> some_value;
|
||||
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
|
||||
record >> cItems;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user