mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-02-10 18:05:41 +08:00
for binary vsdx
This commit is contained in:
@ -120,6 +120,10 @@ namespace PPTX
|
||||
{
|
||||
variationClrSchemeLst = nodeExt.ReadNodeNoNS(L"variationClrSchemeLst");
|
||||
}
|
||||
else if (uri == L"{2703A3B3-D2E1-43D9-8057-6E9D74E0F44A}")
|
||||
{
|
||||
schemeID = nodeExt.ReadNodeNoNS(L"schemeID");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -140,6 +144,14 @@ namespace PPTX
|
||||
{
|
||||
oValue.m_strValue += L"<a:extLst>";
|
||||
|
||||
if (schemeID.IsInit())
|
||||
{
|
||||
schemeID->bSchemas = true;
|
||||
|
||||
oValue.m_strValue += L"<a:ext uri=\"{2703A3B3-D2E1-43D9-8057-6E9D74E0F44A}\">";
|
||||
oValue.Write(*schemeID);
|
||||
oValue.m_strValue += L"</a:ext>";
|
||||
}
|
||||
if (bkgnd.IsInit())
|
||||
{
|
||||
oValue.m_strValue += L"<a:ext uri=\"{093E89EA-6996-430E-BFF9-83A9FAAAAB73}\">";
|
||||
@ -182,15 +194,25 @@ namespace PPTX
|
||||
pWriter->EndNode(_T("a:") + arr[i]);
|
||||
}
|
||||
}
|
||||
if (bkgnd.IsInit() || variationClrSchemeLst.IsInit())
|
||||
if (bkgnd.IsInit() || variationClrSchemeLst.IsInit() || schemeID.IsInit())
|
||||
{
|
||||
pWriter->StartNode(L"a:extLst");
|
||||
pWriter->EndAttributes();
|
||||
|
||||
if (schemeID.IsInit())
|
||||
{
|
||||
schemeID->bSchemas = true;
|
||||
|
||||
pWriter->StartNode(L"a:ext");
|
||||
pWriter->WriteAttribute(L"uri", L"{2703A3B3-D2E1-43D9-8057-6E9D74E0F44A}");
|
||||
pWriter->EndAttributes();
|
||||
schemeID->toXmlWriter(pWriter);
|
||||
pWriter->EndNode(L"a:ext");
|
||||
}
|
||||
if (bkgnd.IsInit())
|
||||
{
|
||||
pWriter->StartNode(L"a:ext");
|
||||
pWriter->WriteAttribute(L"uri", L"{2703A3B3-D2E1-43D9-8057-6E9D74E0F44A}");
|
||||
pWriter->WriteAttribute(L"uri", L"{093E89EA-6996-430E-BFF9-83A9FAAAAB73}");
|
||||
pWriter->EndAttributes();
|
||||
bkgnd->toXmlWriter(pWriter);
|
||||
pWriter->EndNode(L"a:ext");
|
||||
@ -257,6 +279,7 @@ namespace PPTX
|
||||
}
|
||||
pWriter->WriteRecord2(20, bkgnd);
|
||||
pWriter->WriteRecord2(21, variationClrSchemeLst);
|
||||
pWriter->WriteRecord2(22, schemeID);
|
||||
}
|
||||
void ClrScheme::fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader)
|
||||
{
|
||||
@ -287,6 +310,11 @@ namespace PPTX
|
||||
variationClrSchemeLst.Init();
|
||||
variationClrSchemeLst->fromPPTY(pReader);
|
||||
}
|
||||
else if (_rec == 22)
|
||||
{
|
||||
schemeID.Init();
|
||||
schemeID->fromPPTY(pReader);
|
||||
}
|
||||
else if (pReader->GetPos() + 4 < _e)
|
||||
{
|
||||
Logic::UniColor color;
|
||||
@ -314,6 +342,7 @@ namespace PPTX
|
||||
}
|
||||
bkgnd = oSrc.bkgnd;
|
||||
variationClrSchemeLst = oSrc.variationClrSchemeLst;
|
||||
schemeID = oSrc.schemeID;
|
||||
|
||||
return *this;
|
||||
}
|
||||
@ -404,6 +433,7 @@ namespace PPTX
|
||||
}
|
||||
if (bkgnd.IsInit()) bkgnd->SetParentPointer(this);
|
||||
if (variationClrSchemeLst.IsInit()) variationClrSchemeLst->SetParentPointer(this);
|
||||
if (schemeID.IsInit()) schemeID->SetParentPointer(this);
|
||||
}
|
||||
} // namespace nsTheme
|
||||
} // namespace PPTX
|
||||
|
||||
@ -63,6 +63,7 @@ namespace PPTX
|
||||
//visio ext
|
||||
nullable<Bkgnd> bkgnd;
|
||||
nullable<VariationClrSchemeLst> variationClrSchemeLst;
|
||||
nullable<SchemeID> schemeID;
|
||||
|
||||
ClrScheme& operator=(const ClrScheme& oSrc);
|
||||
|
||||
|
||||
@ -71,15 +71,15 @@ namespace PPTX
|
||||
}
|
||||
else if (uri == L"{D75FF423-9257-4291-A4FE-1B2448832E17}")
|
||||
{
|
||||
//themeScheme - schemeID
|
||||
themeScheme = nodeExt.ReadNodeNoNS(L"themeScheme");
|
||||
}
|
||||
else if (uri == L"{27CD58D4-7086-4B73-B2AB-7AEBE2148A8C}")
|
||||
{
|
||||
//fmtSchemeEx - schemeID
|
||||
fmtSchemeEx = nodeExt.ReadNodeNoNS(L"fmtSchemeEx");
|
||||
}
|
||||
else if (uri == L"{C6430689-8E98-42EC-ADBF-087148533A3F}")
|
||||
{
|
||||
//fmtConnectorSchemeEx - schemeID
|
||||
fmtConnectorSchemeEx = nodeExt.ReadNodeNoNS(L"fmtConnectorSchemeEx"); //- schemeID
|
||||
}
|
||||
else if (uri == L"{56243398-1771-4C39-BF73-A5702A9C147F}")
|
||||
{
|
||||
@ -122,6 +122,27 @@ namespace PPTX
|
||||
oValue.Write(*fmtConnectorScheme);
|
||||
oValue.m_strValue += L"</a:ext>";
|
||||
}
|
||||
if (themeScheme.IsInit())
|
||||
{
|
||||
themeScheme->node_name = L"vt:themeScheme";
|
||||
oValue.m_strValue += L"<a:ext uri=\"{D75FF423-9257-4291-A4FE-1B2448832E17}\">";
|
||||
oValue.Write(*themeScheme);
|
||||
oValue.m_strValue += L"</a:ext>";
|
||||
}
|
||||
if (fmtSchemeEx.IsInit())
|
||||
{
|
||||
fmtSchemeEx->node_name = L"vt:fmtSchemeEx";
|
||||
oValue.m_strValue += L"<a:ext uri=\"{27CD58D4-7086-4B73-B2AB-7AEBE2148A8C}\">";
|
||||
oValue.Write(*fmtSchemeEx);
|
||||
oValue.m_strValue += L"</a:ext>";
|
||||
}
|
||||
if (fmtConnectorSchemeEx.IsInit())
|
||||
{
|
||||
fmtConnectorSchemeEx->node_name = L"vt:fmtConnectorSchemeEx";
|
||||
oValue.m_strValue += L"<a:ext uri=\"{C6430689-8E98-42EC-ADBF-087148533A3F}\">";
|
||||
oValue.Write(*fmtConnectorSchemeEx);
|
||||
oValue.m_strValue += L"</a:ext>";
|
||||
}
|
||||
if (fillStyles.IsInit())
|
||||
{
|
||||
oValue.m_strValue += L"<a:ext uri=\"{56243398-1771-4C39-BF73-A5702A9C147F}\">";
|
||||
@ -160,6 +181,9 @@ namespace PPTX
|
||||
pWriter->WriteRecord2(5, lineStyles);
|
||||
pWriter->WriteRecord2(6, fontStylesGroup);
|
||||
pWriter->WriteRecord2(7, variationStyleSchemeLst);
|
||||
pWriter->WriteRecord2(8, themeScheme);
|
||||
pWriter->WriteRecord2(9, fmtSchemeEx);
|
||||
pWriter->WriteRecord2(10, fmtConnectorSchemeEx);
|
||||
}
|
||||
void ThemeElements::toXmlWriter(NSBinPptxRW::CXmlWriter* pWriter) const
|
||||
{
|
||||
@ -170,7 +194,8 @@ namespace PPTX
|
||||
fontScheme.toXmlWriter(pWriter);
|
||||
fmtScheme.toXmlWriter(pWriter);
|
||||
|
||||
if (fmtConnectorScheme.IsInit() || fillStyles.IsInit() || lineStyles.IsInit() || fontStylesGroup.IsInit() || variationStyleSchemeLst.IsInit())
|
||||
if (fmtConnectorScheme.IsInit() || fillStyles.IsInit() || lineStyles.IsInit() || fontStylesGroup.IsInit() || variationStyleSchemeLst.IsInit() ||
|
||||
themeScheme.IsInit() || fmtSchemeEx.IsInit() || fmtConnectorSchemeEx.IsInit())
|
||||
{
|
||||
pWriter->StartNode(L"a:extLst");
|
||||
pWriter->EndAttributes();
|
||||
@ -183,6 +208,33 @@ namespace PPTX
|
||||
fmtConnectorScheme->toXmlWriter(pWriter);
|
||||
pWriter->EndNode(L"a:ext");
|
||||
}
|
||||
if (themeScheme.IsInit())
|
||||
{
|
||||
themeScheme->node_name = L"vt:themeScheme";
|
||||
pWriter->StartNode(L"a:ext");
|
||||
pWriter->WriteAttribute(L"uri", L"{D75FF423-9257-4291-A4FE-1B2448832E17}");
|
||||
pWriter->EndAttributes();
|
||||
themeScheme->toXmlWriter(pWriter);
|
||||
pWriter->EndNode(L"a:ext");
|
||||
}
|
||||
if (fmtSchemeEx.IsInit())
|
||||
{
|
||||
fmtSchemeEx->node_name = L"vt:fmtSchemeEx";
|
||||
pWriter->StartNode(L"a:ext");
|
||||
pWriter->WriteAttribute(L"uri", L"{27CD58D4-7086-4B73-B2AB-7AEBE2148A8C}");
|
||||
pWriter->EndAttributes();
|
||||
fmtSchemeEx->toXmlWriter(pWriter);
|
||||
pWriter->EndNode(L"a:ext");
|
||||
}
|
||||
if (fmtConnectorSchemeEx.IsInit())
|
||||
{
|
||||
fmtConnectorSchemeEx->node_name = L"vt:fmtConnectorSchemeEx";
|
||||
pWriter->StartNode(L"a:ext");
|
||||
pWriter->WriteAttribute(L"uri", L"{C6430689-8E98-42EC-ADBF-087148533A3F}");
|
||||
pWriter->EndAttributes();
|
||||
fmtConnectorSchemeEx->toXmlWriter(pWriter);
|
||||
pWriter->EndNode(L"a:ext");
|
||||
}
|
||||
if (fillStyles.IsInit())
|
||||
{
|
||||
pWriter->StartNode(L"a:ext");
|
||||
@ -266,6 +318,21 @@ namespace PPTX
|
||||
variationStyleSchemeLst.Init();
|
||||
variationStyleSchemeLst->fromPPTY(pReader);
|
||||
}break;
|
||||
case 8:
|
||||
{
|
||||
themeScheme.Init();
|
||||
themeScheme->fromPPTY(pReader);
|
||||
}break;
|
||||
case 9:
|
||||
{
|
||||
fmtSchemeEx.Init();
|
||||
fmtSchemeEx->fromPPTY(pReader);
|
||||
}break;
|
||||
case 10:
|
||||
{
|
||||
fmtConnectorSchemeEx.Init();
|
||||
fmtConnectorSchemeEx->fromPPTY(pReader);
|
||||
}break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -284,6 +351,9 @@ namespace PPTX
|
||||
if (lineStyles.IsInit()) lineStyles->SetParentPointer(this);
|
||||
if (fontStylesGroup.IsInit()) fontStylesGroup->SetParentPointer(this);
|
||||
if (variationStyleSchemeLst.IsInit()) variationStyleSchemeLst->SetParentPointer(this);
|
||||
if (themeScheme.IsInit()) themeScheme->SetParentPointer(this);
|
||||
if (fmtSchemeEx.IsInit()) fmtSchemeEx->SetParentPointer(this);
|
||||
if (fmtConnectorSchemeEx.IsInit()) fmtConnectorSchemeEx->SetParentPointer(this);
|
||||
}
|
||||
} // namespace nsTheme
|
||||
} // namespace PPTX
|
||||
|
||||
@ -61,6 +61,9 @@ namespace PPTX
|
||||
nullable<LineStyles> lineStyles;
|
||||
nullable<FontStylesGroup> fontStylesGroup;
|
||||
nullable<VariationStyleSchemeLst> variationStyleSchemeLst;
|
||||
nullable<Scheme> themeScheme;
|
||||
nullable<Scheme> fmtSchemeEx;
|
||||
nullable<Scheme> fmtConnectorSchemeEx;
|
||||
|
||||
protected:
|
||||
virtual void FillParentPointersForChilds();
|
||||
|
||||
@ -1408,5 +1408,162 @@ namespace PPTX
|
||||
}
|
||||
pReader->Seek(_end_rec);
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------
|
||||
SchemeID& SchemeID::operator=(const SchemeID& oSrc)
|
||||
{
|
||||
parentFile = oSrc.parentFile;
|
||||
parentElement = oSrc.parentElement;
|
||||
|
||||
schemeEnum = oSrc.schemeEnum;
|
||||
schemeGUID = oSrc.schemeGUID;
|
||||
|
||||
return *this;
|
||||
}
|
||||
void SchemeID::fromXML(XmlUtils::CXmlNode& node)
|
||||
{
|
||||
XmlMacroReadAttributeBase(node, L"schemeEnum", schemeEnum);
|
||||
XmlMacroReadAttributeBase(node, L"schemeGUID", schemeGUID);
|
||||
}
|
||||
std::wstring SchemeID::toXML() const
|
||||
{
|
||||
XmlUtils::CAttribute oAttr;
|
||||
if (bSchemas)
|
||||
{
|
||||
oAttr.Write(L"xmlns:vt", L"http://schemas.microsoft.com/office/visio/2012/theme");
|
||||
}
|
||||
oAttr.Write(L"schemeEnum", schemeEnum);
|
||||
oAttr.Write(L"schemeGUID", schemeGUID);
|
||||
|
||||
XmlUtils::CNodeValue oValue;
|
||||
|
||||
return XmlUtils::CreateNode(L"vt:schemeID", oAttr, oValue);
|
||||
}
|
||||
void SchemeID::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
|
||||
{
|
||||
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeStart);
|
||||
pWriter->WriteUInt2(0, schemeEnum);
|
||||
pWriter->WriteString2(1, schemeGUID);
|
||||
pWriter->WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd);
|
||||
}
|
||||
void SchemeID::toXmlWriter(NSBinPptxRW::CXmlWriter* pWriter) const
|
||||
{
|
||||
pWriter->StartNode(L"vt:schemeID");
|
||||
if (bSchemas)
|
||||
{
|
||||
pWriter->WriteAttribute(L"xmlns:vt", L"http://schemas.microsoft.com/office/visio/2012/theme");
|
||||
}
|
||||
pWriter->WriteAttribute2(L"schemeEnum", schemeEnum);
|
||||
pWriter->WriteAttribute2(L"schemeGUID", schemeGUID);
|
||||
pWriter->EndAttributes();
|
||||
pWriter->EndNode(L"vt:schemeID");
|
||||
}
|
||||
void SchemeID::fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader)
|
||||
{
|
||||
LONG _end_rec = pReader->GetPos() + pReader->GetRecordSize() + 4;
|
||||
|
||||
pReader->Skip(1); // start attributes
|
||||
while (true)
|
||||
{
|
||||
BYTE _at = pReader->GetUChar_TypeNode();
|
||||
if (_at == NSBinPptxRW::g_nodeAttributeEnd)
|
||||
break;
|
||||
|
||||
switch (_at)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
schemeEnum = pReader->GetULong();
|
||||
}break;
|
||||
case 1:
|
||||
{
|
||||
schemeGUID = pReader->GetString2();
|
||||
}break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
pReader->Seek(_end_rec);
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------
|
||||
Scheme& Scheme::operator=(const Scheme& oSrc)
|
||||
{
|
||||
parentFile = oSrc.parentFile;
|
||||
parentElement = oSrc.parentElement;
|
||||
|
||||
node_name = oSrc.node_name;
|
||||
schemeID = oSrc.schemeID;
|
||||
|
||||
return *this;
|
||||
}
|
||||
void Scheme::fromXML(XmlUtils::CXmlNode& node)
|
||||
{
|
||||
node_name = node.GetName();
|
||||
|
||||
std::vector<XmlUtils::CXmlNode> oNodes;
|
||||
if (node.GetNodes(L"*", oNodes))
|
||||
{
|
||||
for (size_t i = 0; i < oNodes.size(); ++i)
|
||||
{
|
||||
XmlUtils::CXmlNode& oNode = oNodes[i];
|
||||
|
||||
std::wstring strName = XmlUtils::GetNameNoNS(oNode.GetName());
|
||||
if (L"schemeID" == strName)
|
||||
{
|
||||
schemeID = oNode;
|
||||
}
|
||||
}
|
||||
}
|
||||
FillParentPointersForChilds();
|
||||
}
|
||||
std::wstring Scheme::toXML() const
|
||||
{
|
||||
XmlUtils::CAttribute oAttr;
|
||||
oAttr.Write(L"xmlns:vt", L"http://schemas.microsoft.com/office/visio/2012/theme");
|
||||
|
||||
XmlUtils::CNodeValue oValue;
|
||||
oValue.WriteNullable(schemeID);
|
||||
|
||||
return XmlUtils::CreateNode(node_name, oAttr, oValue);
|
||||
}
|
||||
void Scheme::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
|
||||
{
|
||||
pWriter->WriteRecord2(0, schemeID);
|
||||
}
|
||||
void Scheme::toXmlWriter(NSBinPptxRW::CXmlWriter* pWriter) const
|
||||
{
|
||||
pWriter->StartNode(node_name);
|
||||
pWriter->WriteAttribute(L"xmlns:vt", L"http://schemas.microsoft.com/office/visio/2012/theme");
|
||||
pWriter->EndAttributes();
|
||||
|
||||
pWriter->Write(schemeID);
|
||||
|
||||
pWriter->EndNode(node_name);
|
||||
}
|
||||
void Scheme::fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader)
|
||||
{
|
||||
LONG _end_rec = pReader->GetPos() + pReader->GetRecordSize() + 4;
|
||||
|
||||
while (pReader->GetPos() < _end_rec)
|
||||
{
|
||||
BYTE _at = pReader->GetUChar();
|
||||
switch (_at)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
schemeID.Init();
|
||||
schemeID->fromPPTY(pReader);
|
||||
}break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
pReader->Seek(_end_rec);
|
||||
}
|
||||
void Scheme::FillParentPointersForChilds()
|
||||
{
|
||||
if (schemeID.IsInit())
|
||||
schemeID->SetParentPointer(this);
|
||||
}
|
||||
} // namespace nsTheme
|
||||
} // namespace PPTX
|
||||
|
||||
@ -37,7 +37,45 @@
|
||||
namespace PPTX
|
||||
{
|
||||
namespace nsTheme
|
||||
{
|
||||
{
|
||||
class SchemeID : public WrapperWritingElement
|
||||
{
|
||||
public:
|
||||
PPTX_LOGIC_BASE(SchemeID)
|
||||
SchemeID& operator=(const SchemeID& oSrc);
|
||||
|
||||
virtual void fromXML(XmlUtils::CXmlNode& node);
|
||||
virtual std::wstring toXML() const;
|
||||
|
||||
virtual void toXmlWriter(NSBinPptxRW::CXmlWriter* pWriter) const;
|
||||
|
||||
virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const;
|
||||
virtual void fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader);
|
||||
|
||||
nullable_uint schemeEnum;
|
||||
nullable_string schemeGUID;
|
||||
|
||||
bool bSchemas = false;
|
||||
};
|
||||
class Scheme : public WrapperWritingElement
|
||||
{
|
||||
public:
|
||||
PPTX_LOGIC_BASE(Scheme)
|
||||
Scheme& operator=(const Scheme& oSrc);
|
||||
|
||||
virtual void fromXML(XmlUtils::CXmlNode& node);
|
||||
virtual std::wstring toXML() const;
|
||||
|
||||
virtual void toXmlWriter(NSBinPptxRW::CXmlWriter* pWriter) const;
|
||||
|
||||
virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const;
|
||||
virtual void fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader);
|
||||
|
||||
std::wstring node_name;
|
||||
nullable<SchemeID> schemeID;
|
||||
protected:
|
||||
virtual void FillParentPointersForChilds();
|
||||
};
|
||||
class LineEx : public WrapperWritingElement
|
||||
{
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user