mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-02-10 18:05:41 +08:00
Add future metadata bynary reading
This commit is contained in:
@ -930,6 +930,7 @@ enum ElementType
|
||||
typeTABLESLICERCACHEIDS,
|
||||
typeSLICERCACHEID,
|
||||
typeTABLESLICERCACHEID,
|
||||
typeFMD
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -1185,6 +1185,32 @@ namespace OOX
|
||||
m_arrExt.push_back( oExt );
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (obj->get_type() == XLS::typeFMD)
|
||||
{
|
||||
auto ptr = static_cast<XLSB::FMD*>(obj.get());
|
||||
|
||||
if (ptr != nullptr)
|
||||
{
|
||||
if (ptr->m_DYNAMICARRAYMETADATA != nullptr)
|
||||
{
|
||||
OOX::Drawing::COfficeArtExtension *oExt = new OOX::Drawing::COfficeArtExtension();
|
||||
oExt->m_sUri = L"{bdbb8cdc-fa1e-496e-a857-3c3f30c029c3}";
|
||||
oExt->m_sAdditionalNamespace = L"xmlns:xda=\"http://schemas.microsoft.com/office/spreadsheetml/2017/dynamicarray\"";
|
||||
oExt->m_oDynamicArrayProperties = ptr->m_DYNAMICARRAYMETADATA;
|
||||
if (oExt)
|
||||
m_arrExt.push_back( oExt );
|
||||
}
|
||||
else if(ptr->m_RICHDATAMETADATA != nullptr)
|
||||
{
|
||||
OOX::Drawing::COfficeArtExtension *oExt = new OOX::Drawing::COfficeArtExtension();
|
||||
oExt->m_sUri = L"{3E2802C4-A4D2-4D8B-9148-E3BE6C30E623}";
|
||||
oExt->m_sAdditionalNamespace = L"xmlns:xlrd=\"http://schemas.microsoft.com/office/spreadsheetml/2017/richdata\"";
|
||||
oExt->m_oRichValueBlock = ptr->m_RICHDATAMETADATA;
|
||||
if (oExt)
|
||||
m_arrExt.push_back( oExt );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
EElementType COfficeArtExtensionList::getType() const
|
||||
|
||||
@ -36,21 +36,22 @@
|
||||
namespace XLSB
|
||||
{
|
||||
|
||||
class FMD: public XLS::CompositeObject
|
||||
{
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(FMD)
|
||||
public:
|
||||
FMD();
|
||||
~FMD();
|
||||
class FMD: public XLS::CompositeObject
|
||||
{
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(FMD)
|
||||
public:
|
||||
FMD();
|
||||
~FMD();
|
||||
|
||||
XLS::BaseObjectPtr clone();
|
||||
XLS::BaseObjectPtr clone();
|
||||
|
||||
const bool loadContent(XLS::BinProcessor& proc) override;
|
||||
const bool saveContent(XLS::BinProcessor& proc) override;
|
||||
|
||||
static const XLS::ElementType type = XLS::typeFMD;
|
||||
|
||||
bool m_BrtBeginFmd;
|
||||
XLS::BaseObjectPtr m_DYNAMICARRAYMETADATA;
|
||||
XLS::BaseObjectPtr m_RICHDATAMETADATA;
|
||||
XLS::BaseObjectPtr m_DYNAMICARRAYMETADATA;
|
||||
XLS::BaseObjectPtr m_RICHDATAMETADATA;
|
||||
bool m_bBrtEndFmd;
|
||||
|
||||
};
|
||||
|
||||
@ -117,6 +117,10 @@ const bool MetadataStream::loadContent(BinProcessor& proc)
|
||||
elements_.pop_back();
|
||||
}
|
||||
}break;
|
||||
case rt_EndMetadata:
|
||||
{
|
||||
return true;
|
||||
}break;
|
||||
default://skip
|
||||
{
|
||||
proc.SkipRecord();
|
||||
|
||||
@ -44,6 +44,8 @@
|
||||
#include "../../XlsbFormat/Biff12_unions/MDXMBRPROP.h"
|
||||
#include "../../XlsbFormat/Biff12_unions/MDXSET.h"
|
||||
#include "../../XlsbFormat/Biff12_unions/MDXTUPLE.h"
|
||||
#include "../../XlsbFormat/Biff12_unions/DYNAMICARRAYMETADATA.h"
|
||||
#include "../../XlsbFormat/Biff12_unions/RICHDATAMETADATA.h"
|
||||
|
||||
#include "../../XlsbFormat/Biff12_records/Str.h"
|
||||
#include "../../XlsbFormat/Biff12_records/Mdtinfo.h"
|
||||
@ -1162,6 +1164,11 @@ namespace OOX
|
||||
{
|
||||
return m_oExtLst->toBinMetadata();
|
||||
}
|
||||
void CFutureMetadataBlock::fromBin(XLS::BaseObjectPtr& obj)
|
||||
{
|
||||
m_oExtLst = OOX::Drawing::COfficeArtExtensionList();
|
||||
m_oExtLst->fromBin(obj);
|
||||
}
|
||||
//-------------------------------------------------------------------------------------
|
||||
CFutureMetadata::CFutureMetadata() {}
|
||||
CFutureMetadata::~CFutureMetadata()
|
||||
@ -1237,6 +1244,20 @@ namespace OOX
|
||||
ptr->FMDs.push_back(i->toBin());
|
||||
return objectPtr;
|
||||
}
|
||||
void CFutureMetadata::fromBin(XLS::BaseObjectPtr& obj)
|
||||
{
|
||||
auto ptr = static_cast<XLSB::ESFMD*>(obj.get());
|
||||
if(ptr->m_BrtBeginEsfmd != nullptr)
|
||||
{
|
||||
auto beginPtr = static_cast<XLSB::BeginEsfmd*>(ptr->m_BrtBeginEsfmd.get());
|
||||
m_oName = beginPtr->stName;
|
||||
}
|
||||
for(auto i : ptr->FMDs)
|
||||
{
|
||||
m_arrItems.push_back(new CFutureMetadataBlock(i));
|
||||
}
|
||||
m_oCount = m_arrItems.size();
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
CMetadata::CMetadata() {}
|
||||
CMetadata::~CMetadata()
|
||||
@ -1269,6 +1290,8 @@ namespace OOX
|
||||
m_oValueMetadata = streamPtr->m_ValueMetadataBlocks;
|
||||
if(streamPtr->m_CellMetadataBlocks != nullptr)
|
||||
m_oCellMetadata = streamPtr->m_CellMetadataBlocks;
|
||||
for(auto i : streamPtr->m_ESFMDs)
|
||||
m_arFutureMetadata.push_back(new CFutureMetadata(i));
|
||||
}
|
||||
XLS::BaseObjectPtr CMetadata::toBin() const
|
||||
{
|
||||
@ -1518,6 +1541,13 @@ xmlns:xda=\"http://schemas.microsoft.com/office/spreadsheetml/2017/dynamicarray\
|
||||
ptr->fCollapsed = m_oFCollapsed.get();
|
||||
return objectPtr;
|
||||
}
|
||||
void CDynamicArrayProperties::fromBin(XLS::BaseObjectPtr& obj)
|
||||
{
|
||||
auto ptr = static_cast<XLSB::DYNAMICARRAYMETADATA*>(obj.get());
|
||||
auto endPtr = static_cast<XLSB::EndDynamicArrayPr*>(ptr->m_EndDynamicArrayPr.get());
|
||||
m_oFDynamic = endPtr->fDynamic;
|
||||
m_oFCollapsed = endPtr->fCollapsed;
|
||||
}
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------
|
||||
CRichValueBlock::CRichValueBlock() {}
|
||||
CRichValueBlock::~CRichValueBlock() {}
|
||||
@ -1561,6 +1591,14 @@ xmlns:xda=\"http://schemas.microsoft.com/office/spreadsheetml/2017/dynamicarray\
|
||||
ptr->irv = 0;
|
||||
return objectPtr;
|
||||
}
|
||||
void CRichValueBlock::fromBin(XLS::BaseObjectPtr& obj)
|
||||
{
|
||||
auto ptr = static_cast<XLSB::RICHDATAMETADATA*>(obj.get());
|
||||
if(ptr->m_BeginRichValueBlock == nullptr)
|
||||
return;
|
||||
auto ptr1 = static_cast<XLSB::BeginRichValueBlock*>(ptr->m_BeginRichValueBlock.get());
|
||||
m_oI = ptr1->irv;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace OOX
|
||||
|
||||
@ -261,6 +261,7 @@ namespace OOX
|
||||
class CFutureMetadataBlock : public WritingElement
|
||||
{
|
||||
public:
|
||||
WritingElement_XlsbConstructors(CFutureMetadataBlock)
|
||||
WritingElement_AdditionMethods(CFutureMetadataBlock)
|
||||
CFutureMetadataBlock();
|
||||
virtual ~CFutureMetadataBlock();
|
||||
@ -268,6 +269,7 @@ namespace OOX
|
||||
virtual void fromXML(XmlUtils::CXmlNode& node);
|
||||
virtual std::wstring toXML() const;
|
||||
|
||||
void fromBin(XLS::BaseObjectPtr& obj);
|
||||
XLS::BaseObjectPtr toBin() const;
|
||||
virtual void toXML(NSStringUtils::CStringBuilder& writer) const;
|
||||
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader);
|
||||
@ -414,6 +416,7 @@ namespace OOX
|
||||
class CFutureMetadata : public WritingElementWithChilds<CFutureMetadataBlock>
|
||||
{
|
||||
public:
|
||||
WritingElement_XlsbConstructors(CFutureMetadata)
|
||||
WritingElement_AdditionMethods(CFutureMetadata)
|
||||
CFutureMetadata();
|
||||
virtual ~CFutureMetadata();
|
||||
@ -421,6 +424,7 @@ namespace OOX
|
||||
virtual void fromXML(XmlUtils::CXmlNode& node);
|
||||
virtual std::wstring toXML() const;
|
||||
|
||||
void fromBin(XLS::BaseObjectPtr& obj);
|
||||
XLS::BaseObjectPtr toBin() const;
|
||||
virtual void toXML(NSStringUtils::CStringBuilder& writer) const;
|
||||
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader);
|
||||
@ -492,6 +496,7 @@ namespace OOX
|
||||
class CDynamicArrayProperties : public WritingElement
|
||||
{
|
||||
public:
|
||||
WritingElement_XlsbConstructors(CDynamicArrayProperties)
|
||||
WritingElement_AdditionMethods(CDynamicArrayProperties)
|
||||
CDynamicArrayProperties();
|
||||
virtual ~CDynamicArrayProperties();
|
||||
@ -499,6 +504,7 @@ namespace OOX
|
||||
virtual void fromXML(XmlUtils::CXmlNode& node);
|
||||
virtual std::wstring toXML() const;
|
||||
|
||||
void fromBin(XLS::BaseObjectPtr& obj);
|
||||
XLS::BaseObjectPtr toBin();
|
||||
virtual void toXML(NSStringUtils::CStringBuilder& writer) const;
|
||||
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader);
|
||||
@ -516,6 +522,7 @@ namespace OOX
|
||||
class CRichValueBlock : public WritingElement
|
||||
{
|
||||
public:
|
||||
WritingElement_XlsbConstructors(CRichValueBlock)
|
||||
WritingElement_AdditionMethods(CRichValueBlock)
|
||||
CRichValueBlock();
|
||||
virtual ~CRichValueBlock();
|
||||
@ -523,6 +530,7 @@ namespace OOX
|
||||
virtual void fromXML(XmlUtils::CXmlNode& node);
|
||||
virtual std::wstring toXML() const;
|
||||
|
||||
void fromBin(XLS::BaseObjectPtr& obj);
|
||||
XLS::BaseObjectPtr toBin();
|
||||
virtual void toXML(NSStringUtils::CStringBuilder& writer) const;
|
||||
virtual void fromXML(XmlUtils::CXmlLiteReader& oReader);
|
||||
|
||||
Reference in New Issue
Block a user