mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-02-10 18:05:41 +08:00
fix bug #73705
This commit is contained in:
@ -122,7 +122,7 @@ namespace PPTX
|
||||
std::wstring CxnSp::toXML() const
|
||||
{
|
||||
XmlUtils::CAttribute oAttr;
|
||||
oAttr.Write(L"macro", macro);
|
||||
oAttr.Write2(L"macro", macro);
|
||||
|
||||
XmlUtils::CNodeValue oValue;
|
||||
oValue.Write(nvCxnSpPr);
|
||||
@ -201,5 +201,96 @@ namespace PPTX
|
||||
spPr.Fill.Merge(fill);
|
||||
return BGRA;
|
||||
}
|
||||
|
||||
void CxnSp::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
|
||||
{
|
||||
pWriter->StartRecord(SPTREE_TYPE_CXNSP);
|
||||
|
||||
pWriter->WriteRecord1(0, nvCxnSpPr);
|
||||
pWriter->WriteRecord1(1, spPr);
|
||||
pWriter->WriteRecord2(2, style);
|
||||
|
||||
if (macro.IsInit())
|
||||
{
|
||||
pWriter->StartRecord(SPTREE_TYPE_MACRO);
|
||||
pWriter->WriteString1(0, *macro);
|
||||
pWriter->EndRecord();
|
||||
}
|
||||
pWriter->EndRecord();
|
||||
}
|
||||
void CxnSp::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:
|
||||
{
|
||||
nvCxnSpPr.fromPPTY(pReader);
|
||||
}break;
|
||||
case 1:
|
||||
{
|
||||
spPr.fromPPTY(pReader);
|
||||
}break;
|
||||
case 2:
|
||||
{
|
||||
style = new ShapeStyle(L"p");
|
||||
style->fromPPTY(pReader);
|
||||
}break;
|
||||
case SPTREE_TYPE_MACRO:
|
||||
{
|
||||
pReader->Skip(5); // type + size
|
||||
macro = pReader->GetString2();
|
||||
}break;
|
||||
default:
|
||||
{
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
||||
pReader->Seek(_end_rec);
|
||||
}
|
||||
void CxnSp::ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
|
||||
{
|
||||
WritingElement_ReadAttributes_Start(oReader)
|
||||
WritingElement_ReadAttributes_Read_if(oReader, _T("macro"), macro)
|
||||
WritingElement_ReadAttributes_End(oReader)
|
||||
}
|
||||
void CxnSp::toXmlWriter(NSBinPptxRW::CXmlWriter* pWriter) const
|
||||
{
|
||||
std::wstring namespace_ = m_namespace;
|
||||
|
||||
if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DOCX ||
|
||||
pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DOCX_GLOSSARY) namespace_ = L"wps";
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_XLSX) namespace_ = L"xdr";
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_GRAPHICS) namespace_ = L"a";
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_CHART_DRAWING) namespace_ = L"cdr";
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DIAGRAM) namespace_ = L"dgm";
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DSP_DRAWING) namespace_ = L"dsp";
|
||||
|
||||
pWriter->StartNode(namespace_ + L":cxnSp");
|
||||
pWriter->WriteAttribute2(L"macro", macro);
|
||||
pWriter->EndAttributes();
|
||||
|
||||
nvCxnSpPr.toXmlWriter(pWriter);
|
||||
spPr.toXmlWriter(pWriter);
|
||||
|
||||
if (style.is_init())
|
||||
{
|
||||
if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DOCX ||
|
||||
pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DOCX_GLOSSARY) style->m_namespace = L"wps";
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_XLSX) style->m_namespace = L"xdr";
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_GRAPHICS) style->m_namespace = L"a";
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_CHART_DRAWING) style->m_namespace = L"cdr";
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DIAGRAM) style->m_namespace = L"dgm";
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DSP_DRAWING) style->m_namespace = L"dsp";
|
||||
|
||||
pWriter->Write(style);
|
||||
}
|
||||
pWriter->EndNode(namespace_ + L":cxnSp");
|
||||
}
|
||||
} // namespace Logic
|
||||
} // namespace PPTX
|
||||
@ -67,102 +67,11 @@ namespace PPTX
|
||||
DWORD GetLine(Ln& line)const;
|
||||
DWORD GetFill(UniFill& fill)const;
|
||||
|
||||
//void FillLevelUp();
|
||||
//void Merge(CxnSp& cxnSp, bool bIsSlidePlaceholder = false);
|
||||
virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const;
|
||||
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader);
|
||||
virtual void toXmlWriter(NSBinPptxRW::CXmlWriter* pWriter) const;
|
||||
|
||||
//void SetLevelUpElement( CxnSp* p){m_pLevelUp = p;};
|
||||
|
||||
virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
|
||||
{
|
||||
pWriter->StartRecord(SPTREE_TYPE_CXNSP);
|
||||
|
||||
pWriter->WriteRecord1(0, nvCxnSpPr);
|
||||
pWriter->WriteRecord1(1, spPr);
|
||||
pWriter->WriteRecord2(2, style);
|
||||
|
||||
if (macro.IsInit())
|
||||
{
|
||||
pWriter->StartRecord(SPTREE_TYPE_MACRO);
|
||||
pWriter->WriteString1(0, *macro);
|
||||
pWriter->EndRecord();
|
||||
}
|
||||
pWriter->EndRecord();
|
||||
}
|
||||
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader)
|
||||
{
|
||||
WritingElement_ReadAttributes_Start(oReader)
|
||||
WritingElement_ReadAttributes_Read_if(oReader, _T("macro"),macro)
|
||||
WritingElement_ReadAttributes_End(oReader)
|
||||
}
|
||||
virtual void toXmlWriter(NSBinPptxRW::CXmlWriter* pWriter) const
|
||||
{
|
||||
std::wstring namespace_ = m_namespace;
|
||||
|
||||
if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DOCX ||
|
||||
pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DOCX_GLOSSARY) namespace_ = L"wps";
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_XLSX) namespace_ = L"xdr";
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_GRAPHICS) namespace_ = L"a";
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_CHART_DRAWING) namespace_ = L"cdr";
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DIAGRAM) namespace_ = L"dgm";
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DSP_DRAWING) namespace_ = L"dsp";
|
||||
|
||||
pWriter->StartNode(namespace_ + L":cxnSp");
|
||||
pWriter->WriteAttribute(L"macro", macro);
|
||||
pWriter->EndAttributes();
|
||||
|
||||
nvCxnSpPr.toXmlWriter(pWriter);
|
||||
spPr.toXmlWriter(pWriter);
|
||||
|
||||
if (style.is_init())
|
||||
{
|
||||
if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DOCX ||
|
||||
pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DOCX_GLOSSARY) style->m_namespace = L"wps";
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_XLSX) style->m_namespace = L"xdr";
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_GRAPHICS) style->m_namespace = L"a";
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_CHART_DRAWING) style->m_namespace = L"cdr";
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DIAGRAM) style->m_namespace = L"dgm";
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DSP_DRAWING) style->m_namespace = L"dsp";
|
||||
|
||||
pWriter->Write(style);
|
||||
}
|
||||
pWriter->EndNode(namespace_ + L":cxnSp");
|
||||
}
|
||||
|
||||
virtual void 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:
|
||||
{
|
||||
nvCxnSpPr.fromPPTY(pReader);
|
||||
}break;
|
||||
case 1:
|
||||
{
|
||||
spPr.fromPPTY(pReader);
|
||||
}break;
|
||||
case 2:
|
||||
{
|
||||
style = new ShapeStyle(L"p");
|
||||
style->fromPPTY(pReader);
|
||||
}break;
|
||||
case SPTREE_TYPE_MACRO:
|
||||
{
|
||||
pReader->Skip(5); // type + size
|
||||
macro = pReader->GetString2();
|
||||
}break;
|
||||
default:
|
||||
{
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
||||
pReader->Seek(_end_rec);
|
||||
}
|
||||
virtual void fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader);
|
||||
|
||||
std::wstring m_namespace;
|
||||
|
||||
|
||||
@ -502,7 +502,7 @@ namespace PPTX
|
||||
else if (pWriter->m_lDocType == XMLWRITER_DOC_TYPE_DSP_DRAWING) namespace_ = L"dsp";
|
||||
|
||||
pWriter->StartNode(namespace_ + L":graphicFrame");
|
||||
pWriter->WriteAttribute(L"macro", macro);
|
||||
pWriter->WriteAttribute2(L"macro", macro);
|
||||
pWriter->EndAttributes();
|
||||
|
||||
toXmlWriter2(pWriter);
|
||||
@ -795,10 +795,7 @@ namespace PPTX
|
||||
|
||||
sXml += L"<" + m_namespace + L":graphicFrame";
|
||||
|
||||
sXml += L" macro=\"" + (macro.IsInit() ? *macro : L"") + L"\">";
|
||||
|
||||
XmlUtils::CAttribute oAttr;
|
||||
oAttr.Write(L"macro", macro);
|
||||
sXml += L" macro=\"" + (macro.IsInit() ? XmlUtils::EncodeXmlString(*macro) : L"") + L"\">";
|
||||
|
||||
sXml += toXML2();
|
||||
|
||||
|
||||
@ -786,7 +786,7 @@ namespace PPTX
|
||||
std::wstring Pic::toXML() const
|
||||
{
|
||||
XmlUtils::CAttribute oAttr;
|
||||
oAttr.Write(L"macro", macro);
|
||||
oAttr.Write2(L"macro", macro);
|
||||
|
||||
XmlUtils::CNodeValue oValue;
|
||||
oValue.Write(nvPicPr);
|
||||
@ -1010,7 +1010,7 @@ namespace PPTX
|
||||
pWriter->StartAttributes();
|
||||
pWriter->WriteAttribute(_T("xmlns:pic"), (std::wstring)_T("http://schemas.openxmlformats.org/drawingml/2006/picture"));
|
||||
}
|
||||
pWriter->WriteAttribute(L"macro", macro);
|
||||
pWriter->WriteAttribute2(L"macro", macro);
|
||||
pWriter->EndAttributes();
|
||||
|
||||
nvPicPr.toXmlWriter(pWriter);
|
||||
|
||||
@ -218,7 +218,7 @@ namespace PPTX
|
||||
|
||||
oAttr.Write(L"useBgFill", useBgFill);
|
||||
oAttr.Write(L"modelId", modelId);
|
||||
oAttr.Write(L"macro", macro);
|
||||
oAttr.Write2(L"macro", macro);
|
||||
oAttr.Write(L"fLocksText", fLocksText);
|
||||
|
||||
XmlUtils::CNodeValue oValue;
|
||||
@ -248,7 +248,7 @@ namespace PPTX
|
||||
pWriter->StartAttributes();
|
||||
|
||||
pWriter->WriteAttribute(L"useBgFill", useBgFill);
|
||||
pWriter->WriteAttribute(L"macro", macro);
|
||||
pWriter->WriteAttribute2(L"macro", macro);
|
||||
pWriter->WriteAttribute(L"modelId", modelId);
|
||||
pWriter->WriteAttribute(L"fLocksText", fLocksText);
|
||||
pWriter->EndAttributes();
|
||||
|
||||
@ -93,6 +93,12 @@ namespace XmlUtils
|
||||
return;
|
||||
m_strValue += (L" ") + strName + L"=\"" + *value + L"\"";
|
||||
}
|
||||
void CAttribute::Write2(const std::wstring& strName, const nullable_string& value)
|
||||
{
|
||||
if (!value.IsInit())
|
||||
return;
|
||||
m_strValue += (L" ") + strName + L"=\"" + XmlUtils::EncodeXmlString(*value) + L"\"";
|
||||
}
|
||||
void CAttribute::Write(const std::wstring& strName, const nullable_bool& value)
|
||||
{
|
||||
if (!value.IsInit())
|
||||
|
||||
@ -76,8 +76,7 @@ namespace XmlUtils
|
||||
return;
|
||||
Write(strName, value->get());
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
void Write(const std::wstring& strName, const nullable_int& value);
|
||||
void Write(const std::wstring& strName, const nullable_uint& value);
|
||||
void Write(const std::wstring& strName, const nullable_sizet& value);
|
||||
@ -85,8 +84,8 @@ namespace XmlUtils
|
||||
void Write(const std::wstring& strName, const nullable_string& value);
|
||||
void Write(const std::wstring& strName, const nullable_bool& value);
|
||||
void Write2(const std::wstring& strName, const nullable_bool& value);
|
||||
void Write2(const std::wstring& strName, const nullable_string& value);
|
||||
|
||||
public:
|
||||
CAttribute(const CAttribute& oSrc);
|
||||
CAttribute& operator=(const CAttribute& oSrc);
|
||||
};
|
||||
@ -96,7 +95,6 @@ namespace XmlUtils
|
||||
public:
|
||||
std::wstring m_strValue;
|
||||
|
||||
public:
|
||||
CNodeValue();
|
||||
|
||||
template <typename T>
|
||||
|
||||
Reference in New Issue
Block a user