This commit is contained in:
ElenaSubbotina
2025-04-15 10:46:03 +03:00
parent 2f42eb6c42
commit 809effa5df
7 changed files with 110 additions and 109 deletions

View File

@ -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

View File

@ -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;

View File

@ -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();

View File

@ -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);

View File

@ -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();

View File

@ -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())

View File

@ -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>