Compare commits

..

32 Commits

Author SHA1 Message Date
d2c092fe62 pivot 2017-04-21 15:05:23 +03:00
a336917338 OdfFormatWriter - image bullet presentation list style 2017-04-21 14:12:50 +03:00
8925ddeee5 big integer from buffer bug 2017-04-21 10:24:17 +03:00
84824631b2 OdfFormatWriter - presentation styled list 2017-04-20 19:55:18 +03:00
dc3ecb1fc0 BigInteger as string realization 2017-04-20 18:13:10 +03:00
266cef8c49 tests windows 2017-04-20 14:10:38 +03:00
a5e821cd21 . 2017-04-19 20:06:58 +03:00
cb5d92334e OdfFormatWriter - presentation ... 2017-04-18 16:40:03 +03:00
f6dbc6b9f0 fix bug #34762 2017-04-17 22:16:47 +03:00
c2c6430495 . 2017-04-17 18:55:02 +03:00
9ecf5b7834 Merge pull request #23 from ONLYOFFICE/hotfix/v4.3.2
Hotfix/v4.3.2
2017-04-17 17:12:30 +03:00
1d003863dd . 2017-04-17 17:10:12 +03:00
774561bd00 Merge branch 'develop' into hotfix/v4.3.2 2017-04-17 16:56:05 +03:00
d356a305b9 tests (mscrypto) 2017-04-17 16:45:35 +03:00
2dbec241f7 OdfFormatWriter - presentation comments 2017-04-17 14:06:14 +03:00
f3c66cab50 OdfFormatWriter 2017-04-17 09:56:12 +03:00
11e6fc3e06 . 2017-04-14 19:13:53 +03:00
cdf8c0a11b update libxml (for sec) 2017-04-14 19:03:02 +03:00
ae29cebe35 . 2017-04-14 15:26:29 +03:00
e933a1fb42 fix bug #34766 2017-04-14 13:12:50 +03:00
5a3f98c502 open notesMasters rels 2017-04-13 19:40:20 +03:00
8677540a82 . 2017-04-13 16:39:33 +03:00
f4ceac5b2b . 2017-04-13 16:23:43 +03:00
61be4ea100 . 2017-04-13 15:37:04 +03:00
51c6ce2ba2 . 2017-04-13 14:43:14 +03:00
e13bc44198 Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop 2017-04-13 12:45:51 +03:00
56cefcb1be fix bug #34761 2017-04-13 12:45:11 +03:00
6f860c17e3 . 2017-04-13 11:45:29 +03:00
fb9edc4f81 . 2017-04-13 11:34:14 +03:00
4eb0a73f3c PptxFormat - delete unused
OdfFormatWriter - extended text styles
2017-04-13 11:31:20 +03:00
51c77c3a85 Fixed downloading icu binaries from sourceforge 2017-04-05 19:59:56 +03:00
4326a7d258 fix bug 34695 2017-04-05 19:48:02 +03:00
333 changed files with 9522 additions and 8212 deletions

View File

@ -45,13 +45,13 @@ namespace Writers
int index;
};
std::vector<_chartElem> m_aCharts;
int nChartCount;
public:
std::wstring m_sDir;
int nEmbeddedCount;
ChartWriter(std::wstring sDir) : m_sDir(sDir)
{
nChartCount = 0;
nEmbeddedCount = 1000;
}
~ChartWriter()
{
@ -80,30 +80,20 @@ namespace Writers
}
return true;
}
void AddChart(std::wstring& content, std::wstring& sRelsName, std::wstring& sFileName, int& index)
void AddChart(std::wstring& content, std::wstring& sRelsName, std::wstring& sFileName, int index)
{
_chartElem oChartElem;
oChartElem.content = content;
oChartElem.index = nChartCount + 1;
nChartCount++;
oChartElem.index = index;
oChartElem.filename = L"chart" + std::to_wstring(oChartElem.index) + L".xml";
sRelsName = L"charts/" + oChartElem.filename;
sFileName = oChartElem.filename;
index = oChartElem.index;
m_aCharts.push_back(oChartElem);
}
int getChartCount()
{
return nChartCount;
}
void setChartCount(int val)
{
nChartCount = val;
}
};
}
#endif // #ifndef CHART_WRITER

View File

@ -61,7 +61,7 @@ namespace Writers
oFile.WriteStringUTF8( std::wstring(_T("<w:body>")));
oFile.WriteStringUTF8(m_oContent.GetData());
oFile.WriteStringUTF8( std::wstring(_T("<w:sectPr >")));
oFile.WriteStringUTF8( std::wstring(_T("<w:sectPr>")));
oFile.WriteStringUTF8(WriteSectPrHdrFtr());
oFile.WriteStringUTF8(m_oSecPr.GetData());
oFile.WriteStringUTF8( std::wstring(_T("</w:sectPr>")));

View File

@ -6292,15 +6292,11 @@ public:
std::wstring sDrawingProperty = oCDrawingProperty.Write();
if(false == sDrawingProperty.empty())
{
m_oFileWriter.m_pDrawingConverter->SetDocumentChartsCount(m_oFileWriter.m_oChartWriter.getChartCount());
long nCurPos = m_oBufferedStream.GetPos();
std::wstring sDrawingXml;
m_oFileWriter.m_pDrawingConverter->SaveObjectEx(oCDrawingProperty.DataPos, oCDrawingProperty.DataLength, sDrawingProperty, XMLWRITER_DOC_TYPE_DOCX, sDrawingXml);
m_oBufferedStream.Seek(nCurPos);
m_oFileWriter.m_oChartWriter.setChartCount(m_oFileWriter.m_pDrawingConverter->GetDocumentChartsCount());
if( false == sDrawingXml.empty())
{
GetRunStringWriter().WriteString(sDrawingXml);
@ -6606,8 +6602,11 @@ public:
OOX::Spreadsheet::CChartSpace* pChartSpace = new OOX::Spreadsheet::CChartSpace();
oBinaryChartReader.ReadCT_ChartSpace(length, &pChartSpace->m_oChartSpace);
//save xlsx
std::wstring sXlsxFilename = L"Microsoft_Excel_Worksheet" + std::to_wstring(m_oFileWriter.m_oChartWriter.getChartCount() + 1) + L".xlsx";
//save xlsx
_INT32 nChartCount = m_oFileWriter.m_pDrawingConverter->GetDocumentChartsCount();
_INT32 nChartIndex = nChartCount + 1;
m_oFileWriter.m_pDrawingConverter->SetDocumentChartsCount(nChartCount + 1);
std::wstring sXlsxFilename = L"Microsoft_Excel_Worksheet" + std::to_wstring(nChartIndex) + L".xlsx";
std::wstring sXlsxPath = pathChartsWorksheetDir.GetPath() + FILE_SEPARATOR_STR + sXlsxFilename;
BinXlsxRW::CXlsxSerializer oXlsxSerializer;
oXlsxSerializer.writeChartXlsx(sXlsxPath, *pChartSpace);
@ -6615,8 +6614,10 @@ public:
std::wstring sChartsWorksheetRelsName = L"../embeddings/" + sXlsxFilename;
long rIdXlsx;
std::wstring bstrChartsWorksheetRelType = OOX::FileTypes::MicrosoftOfficeExcelWorksheet.RelationType();
m_oFileWriter.m_pDrawingConverter->WriteRels(bstrChartsWorksheetRelType, sChartsWorksheetRelsName, std::wstring(), &rIdXlsx);
m_oFileWriter.m_pDrawingConverter->WriteRels(bstrChartsWorksheetRelType, sChartsWorksheetRelsName, std::wstring(), &rIdXlsx);
m_oFileWriter.m_pDrawingConverter->m_pImageManager->m_pContentTypes->AddDefault(L"xlsx");
pChartSpace->m_oChartSpace.m_externalData = new OOX::Spreadsheet::CT_ExternalData();
pChartSpace->m_oChartSpace.m_externalData->m_id = new std::wstring();
pChartSpace->m_oChartSpace.m_externalData->m_id->append(L"rId");
@ -6630,7 +6631,6 @@ public:
std::wstring sFilename;
std::wstring sRelsName;
int nChartIndex;
std::wstring sContent = sw.GetData();
m_oFileWriter.m_oChartWriter.AddChart(sContent, sRelsName, sFilename, nChartIndex);
@ -6824,8 +6824,7 @@ public:
std::wstring strDstEmbeddedTemp = strDstEmbedded + FILE_SEPARATOR_STR + L"Temp";
NSDirectory::CreateDirectory(strDstEmbeddedTemp);
int id = m_oFileWriter.m_oChartWriter.getChartCount();
m_oFileWriter.m_oChartWriter.setChartCount(id + 1);
int id = m_oFileWriter.m_oChartWriter.nEmbeddedCount++;
std::wstring sXlsxFilename = L"Microsoft_Excel_Worksheet" + std::to_wstring( id + 1) + L".xlsx";
BinXlsxRW::SaveParams oSaveParams(m_oFileWriter.m_sThemePath, m_oFileWriter.m_pDrawingConverter->GetContentTypes());//???

View File

@ -81,12 +81,14 @@ namespace BinDocxRW
void BinaryHeaderFooterTableWriter::WriteHdrFtrItem(OOX::Logic::CSectionProperty* pSectPr, OOX::CHdrFtr* pHdrFtr, bool bHdr)
{
int nCurPos = 0;
//Content
ParamsDocumentWriter oParamsDocumentWriter(pHdrFtr, pHdrFtr->m_oReadPath.GetPath());
//Content
ParamsDocumentWriter oParamsDocumentWriter(pHdrFtr);
m_oParamsWriter.m_pCurRels = oParamsDocumentWriter.m_pRels;
m_oParamsWriter.m_sCurDocumentPath = oParamsDocumentWriter.m_sDocumentPath;
BinaryDocumentTableWriter oBinaryDocumentTableWriter(m_oParamsWriter, oParamsDocumentWriter, m_mapIgnoreComments, NULL);
oBinaryDocumentTableWriter.prepareOfficeDrawingConverter(m_pOfficeDrawingConverter, oParamsDocumentWriter.m_sDocumentPath, pHdrFtr->m_arrShapeTypes);
oBinaryDocumentTableWriter.prepareOfficeDrawingConverter(m_pOfficeDrawingConverter, oParamsDocumentWriter.m_pRels, pHdrFtr->m_arrShapeTypes);
nCurPos = m_oBcw.WriteItemStart(c_oSerHdrFtrTypes::HdrFtr_Content);
oBinaryDocumentTableWriter.WriteDocumentContent(pHdrFtr->m_arrItems);
m_oBcw.WriteItemEnd(nCurPos);

View File

@ -57,7 +57,6 @@ namespace BinDocxRW
PPTX::Theme* m_poTheme;
OOX::IFileContainer* m_pCurRels;
std::wstring m_sCurDocumentPath;
std::map<int, bool> m_mapIgnoreComments;
ParamsWriter(NSBinPptxRW::CBinaryFileWriter* pCBufferedStream, DocWrapper::FontProcessor* pFontProcessor, NSBinPptxRW::CDrawingConverter* pOfficeDrawingConverter, NSFontCutter::CEmbeddedFontsManager* pEmbeddedFontsManager):
@ -72,9 +71,8 @@ namespace BinDocxRW
{
public:
OOX::IFileContainer* m_pRels;
std::wstring m_sDocumentPath;
ParamsDocumentWriter(OOX::IFileContainer* pRels, const std::wstring& sDocumentPath):m_pRels(pRels), m_sDocumentPath(sDocumentPath)
ParamsDocumentWriter(OOX::IFileContainer* pRels) : m_pRels(pRels)
{
}
};
@ -99,6 +97,8 @@ namespace BinDocxRW
BinaryCommonWriter(ParamsWriter& oParamsWriter) : m_oStream(*oParamsWriter.m_pCBufferedStream),
m_pEmbeddedFontsManager(oParamsWriter.m_pEmbeddedFontsManager)
{
*m_oStream.m_pCurrentContainer = oParamsWriter.m_pCurRels;
m_oStream.m_pCurrentContainer->AddRef();
}
int WriteItemStart(BYTE type)
{
@ -2999,15 +2999,17 @@ namespace BinDocxRW
RELEASEOBJECT(m_aFldChars[i]);
}
}
void prepareOfficeDrawingConverter(NSBinPptxRW::CDrawingConverter* pOfficeDrawingConverter, std::wstring& sDocumentPath, std::vector<std::wstring>& aShapeTypes)
void prepareOfficeDrawingConverter(NSBinPptxRW::CDrawingConverter* pOfficeDrawingConverter, OOX::IFileContainer *rels, std::vector<std::wstring>& aShapeTypes)
{
pOfficeDrawingConverter->SetRelsPath(sDocumentPath);
smart_ptr<OOX::IFileContainer> oldRels = pOfficeDrawingConverter->GetRels();
pOfficeDrawingConverter->SetRels(rels);
for(size_t i = 0, length = aShapeTypes.size(); i < length; ++i)
{
std::wstring& sShapeType = aShapeTypes[i];
pOfficeDrawingConverter->AddShapeType(sShapeType);
}
pOfficeDrawingConverter->SetRels(oldRels);
}
void Write(std::vector<OOX::WritingElement*>& aElems)
{
@ -5480,21 +5482,14 @@ namespace BinDocxRW
{
if (pGraphic->chartRec.IsInit() && pGraphic->chartRec->id_data.IsInit() )
{
smart_ptr<OOX::File> pFile = m_oParamsDocumentWriter.m_pRels->Find( pGraphic->chartRec->id_data.get());
if (pFile.IsInit() && OOX::FileTypes::Chart == pFile->type())
{
OOX::Spreadsheet::CChartSpace* pChart = static_cast<OOX::Spreadsheet::CChartSpace*>(pFile.operator ->());
m_oBcw.m_oStream.WriteBYTE(c_oSerImageType2::Chart2);
m_oBcw.m_oStream.WriteBYTE(c_oSerPropLenType::Variable);
m_oBcw.m_oStream.WriteBYTE(c_oSerImageType2::Chart2);
m_oBcw.m_oStream.WriteBYTE(c_oSerPropLenType::Variable);
int nCurPos = m_oBcw.WriteItemWithLengthStart();
int nCurPos = m_oBcw.WriteItemWithLengthStart();
BinXlsxRW::BinaryChartWriter oBinaryChartWriter(m_oBcw.m_oStream, m_pOfficeDrawingConverter);
oBinaryChartWriter.WriteCT_ChartSpace(*pChart);
m_oBcw.WriteItemWithLengthEnd(nCurPos);
}
pGraphic->chartRec->toPPTY(&m_oBcw.m_oStream);
m_oBcw.WriteItemWithLengthEnd(nCurPos);
}
else
{
@ -7003,9 +6998,8 @@ namespace BinDocxRW
}
void WriteFootnotes(OOX::CFootnotes& oFootnotes)
{
ParamsDocumentWriter oParamsDocumentWriter(&oFootnotes, oFootnotes.m_oReadPath.GetPath());
ParamsDocumentWriter oParamsDocumentWriter(&oFootnotes);
m_oParamsWriter.m_pCurRels = oParamsDocumentWriter.m_pRels;
m_oParamsWriter.m_sCurDocumentPath = oParamsDocumentWriter.m_sDocumentPath;
int nStart = m_oBcw.WriteItemWithLengthStart();
WriteNotes(oFootnotes.m_arrFootnote, oParamsDocumentWriter, oFootnotes.m_arrShapeTypes);
@ -7013,9 +7007,8 @@ namespace BinDocxRW
}
void WriteEndnotes(OOX::CEndnotes& oEndnotes)
{
ParamsDocumentWriter oParamsDocumentWriter(&oEndnotes, oEndnotes.m_oReadPath.GetPath());
ParamsDocumentWriter oParamsDocumentWriter(&oEndnotes);
m_oParamsWriter.m_pCurRels = oParamsDocumentWriter.m_pRels;
m_oParamsWriter.m_sCurDocumentPath = oParamsDocumentWriter.m_sDocumentPath;
int nStart = m_oBcw.WriteItemWithLengthStart();
WriteNotes(oEndnotes.m_arrEndnote, oParamsDocumentWriter, oEndnotes.m_arrShapeTypes);
@ -7048,7 +7041,9 @@ namespace BinDocxRW
}
BinaryDocumentTableWriter oBinaryDocumentTableWriter(m_oParamsWriter, oParamsDocumentWriter, &m_oParamsWriter.m_mapIgnoreComments, NULL);
oBinaryDocumentTableWriter.prepareOfficeDrawingConverter(m_pOfficeDrawingConverter, oParamsDocumentWriter.m_sDocumentPath, arrShapeTypes);
oBinaryDocumentTableWriter.prepareOfficeDrawingConverter(m_pOfficeDrawingConverter, oParamsDocumentWriter.m_pRels, arrShapeTypes);
nCurPos = m_oBcw.WriteItemStart(c_oSerNotes::NoteContent);
oBinaryDocumentTableWriter.WriteDocumentContent(oFtnEdn.m_arrItems);
m_oBcw.WriteItemEnd(nCurPos);
@ -7213,14 +7208,13 @@ namespace BinDocxRW
BinDocxRW::BinaryHeaderFooterTableWriter oBinaryHeaderFooterTableWriter(m_oParamsWriter, poDocument, &m_oParamsWriter.m_mapIgnoreComments);
//Write DocumentTable
ParamsDocumentWriter oParamsDocumentWriter(poDocument, poDocument->m_oReadPath.GetPath());
ParamsDocumentWriter oParamsDocumentWriter(poDocument);
m_oParamsWriter.m_pCurRels = oParamsDocumentWriter.m_pRels;
m_oParamsWriter.m_sCurDocumentPath = oParamsDocumentWriter.m_sDocumentPath;
//DocumentTable всегда пишем последней, чтобы сначала заполнить все вспомогательные структуры, а при заполении документа, вызывать методы типа Style_Add...
nCurPos = this->WriteTableStart(BinDocxRW::c_oSerTableTypes::Document);
BinDocxRW::BinaryDocumentTableWriter oBinaryDocumentTableWriter(m_oParamsWriter, oParamsDocumentWriter, &m_oParamsWriter.m_mapIgnoreComments, &oBinaryHeaderFooterTableWriter);
oBinaryDocumentTableWriter.prepareOfficeDrawingConverter(m_oParamsWriter.m_pOfficeDrawingConverter, oParamsDocumentWriter.m_sDocumentPath, poDocument->m_arrShapeTypes);
oBinaryDocumentTableWriter.prepareOfficeDrawingConverter(m_oParamsWriter.m_pOfficeDrawingConverter, oParamsDocumentWriter.m_pRels, poDocument->m_arrShapeTypes);
oBinaryDocumentTableWriter.pSectPr = pFirstSectPr;
oBinaryDocumentTableWriter.pBackground = poDocument->m_oBackground.GetPointer();

View File

@ -387,7 +387,7 @@ bool BinDocxRW::CDocxSerializer::getBinaryContent(const std::wstring& bsTxConten
BinDocxRW::BinaryCommonWriter oBinaryCommonWriter(oParamsWriter);
int nCurPos = oBinaryCommonWriter.WriteItemWithLengthStart();
BinDocxRW::ParamsDocumentWriter oParams(oParamsWriter.m_pCurRels, oParamsWriter.m_sCurDocumentPath);
BinDocxRW::ParamsDocumentWriter oParams(oParamsWriter.m_pCurRels);
BinDocxRW::BinaryDocumentTableWriter oBinaryDocumentTableWriter(oParamsWriter, oParams, &oParamsWriter.m_mapIgnoreComments, NULL);
oBinaryDocumentTableWriter.WriteDocumentContent(oSdtContent.m_arrItems);
@ -411,7 +411,7 @@ bool BinDocxRW::CDocxSerializer::getBinaryContentElem(OOX::EElementType eElemTyp
BinDocxRW::BinaryCommonWriter oBinaryCommonWriter(oParamsWriter);
int nCurPos = oBinaryCommonWriter.WriteItemWithLengthStart();
BinDocxRW::ParamsDocumentWriter oParams(oParamsWriter.m_pCurRels, oParamsWriter.m_sCurDocumentPath);
BinDocxRW::ParamsDocumentWriter oParams(oParamsWriter.m_pCurRels);
BinDocxRW::BinaryDocumentTableWriter oBinaryDocumentTableWriter(oParamsWriter, oParams, &oParamsWriter.m_mapIgnoreComments, NULL);
if(OOX::et_m_oMathPara == eElemType)
{

View File

@ -139,31 +139,7 @@ namespace BinXlsxRW{
RELEASEOBJECT(pFontPicker);
return true;
}
bool CXlsxSerializer::loadChart(const std::wstring& sChartPath, NSBinPptxRW::CBinaryFileWriter* pWriter, long& lDataSize)
{
if (NULL == pWriter) return false;
if (NULL == m_pExternalDrawingConverter) return false;
OOX::CPath oRootPath;
OOX::Spreadsheet::CChartSpace oChart(oRootPath, sChartPath);
long nStartPos = pWriter->GetPosition();
BinXlsxRW::BinaryCommonWriter oBcw(*pWriter);
std::wstring sOldRelsPath = m_pExternalDrawingConverter->GetRelsPath();
m_pExternalDrawingConverter->SetRelsPath(sChartPath);
BinXlsxRW::BinaryChartWriter oBinaryChartWriter(*pWriter, m_pExternalDrawingConverter);
oBinaryChartWriter.WriteCT_ChartSpace(oChart);
m_pExternalDrawingConverter->SetRelsPath(sOldRelsPath);
long nEndPos = pWriter->GetPosition();
lDataSize = nEndPos - nStartPos;
return true;
}
bool CXlsxSerializer::saveChart(NSBinPptxRW::CBinaryFileReader* pReader, long lLength, const std::wstring& sFilepath, const long& lChartNumber)
bool CXlsxSerializer::saveChart(NSBinPptxRW::CBinaryFileReader* pReader, long lLength, const std::wstring& sFilepath, const long& lChartNumber)
{
if (NULL == pReader) return false;
if (NULL == m_pExternalDrawingConverter) return false;

View File

@ -64,7 +64,6 @@ namespace BinXlsxRW {
bool loadFromFile (const std::wstring& sSrcFileName, const std::wstring& sDstPath, const std::wstring& sXMLOptions, const std::wstring& sMediaDir, const std::wstring& sEmbedPath);
bool saveToFile (const std::wstring& sSrcFileName, const std::wstring& sDstPath, const std::wstring& sXMLOptions);
bool loadChart (const std::wstring& sChartPath, NSBinPptxRW::CBinaryFileWriter* pWriter, long& lDataSize);
bool saveChart (NSBinPptxRW::CBinaryFileReader* pReader, long lLength, const std::wstring& sFilename, const long& lChartNumber);
void setFontDir (const std::wstring& sFontDir);

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="windows-1251"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8,00"
Version="8.00"
Name="OdfFileReaderTest"
ProjectGUID="{C2882DDD-07E6-4314-AD4B-48F43F38D722}"
RootNamespace="ASCOfficeOdfFileTest"

View File

@ -72,8 +72,8 @@ public:
void start_base_style(const std::wstring baseStyleName, const odf_types::style_family::type baseStyleType);
void end_base_style();
void ApplyTextProperties (std::wstring style,odf_reader::text_format_properties_content & propertiesOut, odf_types::style_family::type Type);
void ApplyParagraphProperties (std::wstring style,odf_reader::paragraph_format_properties & propertiesOut, odf_types::style_family::type Type);
void ApplyTextProperties (std::wstring style, std::wstring para_style, odf_reader::text_format_properties_content & propertiesOut);
void ApplyParagraphProperties (std::wstring para_style, odf_reader::paragraph_format_properties & propertiesOut);
void ApplyListProperties (odf_reader::paragraph_format_properties & propertiesOut, int Level);
void set_local_styles_container(odf_reader::styles_container* local_styles_);//это если стили объектов содержатся в другом документе
@ -239,32 +239,37 @@ void pptx_text_context::Impl::end_hyperlink(std::wstring hId)
dump_run();
hyperlink_hId = L"";
}
void pptx_text_context::Impl::ApplyTextProperties(std::wstring style_name,odf_reader::text_format_properties_content & propertiesOut, odf_types::style_family::type Type)
void pptx_text_context::Impl::ApplyTextProperties(std::wstring style_name, std::wstring para_style_name, odf_reader::text_format_properties_content & propertiesOut)
{
std::vector<const odf_reader::style_instance *> instances;
odf_reader::style_instance* defaultStyle = NULL;
odf_reader::style_instance* style = NULL;
odf_reader::style_instance* baseStyle = NULL;
odf_reader::style_instance* defaultStyle = NULL;
odf_reader::style_instance* para_style = NULL;
odf_reader::style_instance* text_style = NULL;
odf_reader::style_instance* baseStyle = NULL;
if (local_styles_ptr_)
{
style = local_styles_ptr_->style_by_name(style_name, Type,false/*process_headers_footers_*/);
defaultStyle = local_styles_ptr_->style_default_by_type(Type);
baseStyle = local_styles_ptr_->style_by_name(base_style_name_, base_style_family_,false/*process_headers_footers_*/);
para_style = local_styles_ptr_->style_by_name (para_style_name, odf_types::style_family::Paragraph, false/*process_headers_footers_*/);
text_style = local_styles_ptr_->style_by_name (style_name, odf_types::style_family::Text, false/*process_headers_footers_*/);
defaultStyle = local_styles_ptr_->style_default_by_type (odf_types::style_family::Text);
baseStyle = local_styles_ptr_->style_by_name (base_style_name_, base_style_family_, false/*process_headers_footers_*/);
}
else
{
style = odf_context_.styleContainer().style_by_name(style_name, Type,false/*process_headers_footers_*/);
defaultStyle = odf_context_.styleContainer().style_default_by_type(Type);
baseStyle = odf_context_.styleContainer().style_by_name(base_style_name_, base_style_family_,false/*process_headers_footers_*/);
para_style = odf_context_.styleContainer().style_by_name (para_style_name, odf_types::style_family::Paragraph, false/*process_headers_footers_*/);
text_style = odf_context_.styleContainer().style_by_name (style_name, odf_types::style_family::Text, false/*process_headers_footers_*/);
defaultStyle = odf_context_.styleContainer().style_default_by_type (odf_types::style_family::Text);
baseStyle = odf_context_.styleContainer().style_by_name (base_style_name_, base_style_family_, false/*process_headers_footers_*/);
}
if (defaultStyle) instances.push_back(defaultStyle);
if (baseStyle) instances.push_back(baseStyle);
if (style) instances.push_back(style);
if (para_style) instances.push_back(para_style);
if (text_style) instances.push_back(text_style);
if (style)get_styles_context().start_process_style(style);
else get_styles_context().start_process_style(baseStyle);
if (text_style) get_styles_context().start_process_style(text_style);
else if (para_style) get_styles_context().start_process_style(para_style);
else get_styles_context().start_process_style(baseStyle);
propertiesOut.apply_from(calc_text_properties_content(instances));
}
@ -323,33 +328,33 @@ void pptx_text_context::Impl::ApplyListProperties(odf_reader::paragraph_format_p
}
void pptx_text_context::Impl::ApplyParagraphProperties(std::wstring style_name,odf_reader::paragraph_format_properties & propertiesOut, odf_types::style_family::type Type)
void pptx_text_context::Impl::ApplyParagraphProperties(std::wstring style_name, odf_reader::paragraph_format_properties & propertiesOut)
{
std::vector<const odf_reader::style_instance *> instances;
odf_reader::style_instance* style = NULL;
odf_reader::style_instance * defaultStyle = NULL;
odf_reader::style_instance * baseStyle = NULL;
odf_reader::style_instance* style = NULL;
odf_reader::style_instance* defaultStyle = NULL;
odf_reader::style_instance* baseStyle = NULL;
if (local_styles_ptr_)
{
style = local_styles_ptr_->style_by_name(style_name, Type,false/*process_headers_footers_*/);
defaultStyle = local_styles_ptr_->style_default_by_type(Type);
baseStyle = local_styles_ptr_->style_by_name(base_style_name_, base_style_family_,false/*process_headers_footers_*/);
style = local_styles_ptr_->style_by_name (style_name, odf_types::style_family::Paragraph, false/*process_headers_footers_*/);
defaultStyle = local_styles_ptr_->style_default_by_type (odf_types::style_family::Paragraph);
baseStyle = local_styles_ptr_->style_by_name (base_style_name_, base_style_family_, false/*process_headers_footers_*/);
}
else
{
style = odf_context_.styleContainer().style_by_name(style_name, Type,false/*process_headers_footers_*/);
defaultStyle = odf_context_.styleContainer().style_default_by_type(Type);
baseStyle= odf_context_.styleContainer().style_by_name(base_style_name_, base_style_family_,false/*process_headers_footers_*/);
style = odf_context_.styleContainer().style_by_name (style_name, odf_types::style_family::Paragraph, false/*process_headers_footers_*/);
defaultStyle = odf_context_.styleContainer().style_default_by_type (odf_types::style_family::Paragraph);
baseStyle = odf_context_.styleContainer().style_by_name (base_style_name_, base_style_family_,false/*process_headers_footers_*/);
}
if (defaultStyle) instances.push_back(defaultStyle);
if (baseStyle) instances.push_back(baseStyle);
if (style) instances.push_back(style);
if (style)get_styles_context().start_process_style(style);
else get_styles_context().start_process_style(baseStyle);
if (style) get_styles_context().start_process_style(style);
else get_styles_context().start_process_style(baseStyle);
propertiesOut.apply_from(calc_paragraph_properties_content(instances));
}
@ -360,9 +365,9 @@ void pptx_text_context::Impl::write_pPr(std::wostream & strm)
int level = list_style_stack_.size()-1;
odf_reader::paragraph_format_properties paragraph_properties_;
odf_reader::paragraph_format_properties paragraph_properties_;
ApplyParagraphProperties (paragraph_style_name_, paragraph_properties_,odf_types::style_family::Paragraph);
ApplyParagraphProperties (paragraph_style_name_, paragraph_properties_);
ApplyListProperties (paragraph_properties_, level);//выравнивания листа накатим на свойства параграфа
paragraph_properties_.pptx_convert(pptx_context_);
@ -403,16 +408,9 @@ void pptx_text_context::Impl::write_rPr(std::wostream & strm)
if (paragraph_style_name_.empty() && span_style_name_.empty() && !(!hyperlink_hId.empty()) && base_style_name_.empty())
return;
odf_reader::text_format_properties_content text_properties_paragraph_;
ApplyTextProperties (paragraph_style_name_, text_properties_paragraph_,odf_types::style_family::Paragraph);
odf_reader::text_format_properties_content text_properties_span_;
ApplyTextProperties(span_style_name_, text_properties_span_,odf_types::style_family::Text);
odf_reader::text_format_properties_content text_properties_;
text_properties_.apply_from(text_properties_paragraph_);
text_properties_.apply_from(text_properties_span_);
ApplyTextProperties(span_style_name_, paragraph_style_name_, text_properties_);
get_styles_context().start();

View File

@ -84,10 +84,10 @@ public:
void serialize_shared_strings(std::wostream & strm);
void ApplyTextProperties (std::wstring style, odf_reader::text_format_properties_content & propertiesOut, odf_types::style_family::type Type);
void ApplyParagraphProperties (std::wstring style, odf_reader::paragraph_format_properties & propertiesOut, odf_types::style_family::type Type);
void ApplyTextProperties (std::wstring style, std::wstring para_style, odf_reader::text_format_properties_content & propertiesOut);
void ApplyParagraphProperties (std::wstring style, odf_reader::paragraph_format_properties & propertiesOut);
void set_local_styles_container(odf_reader::styles_container* local_styles_);//это если стили объектов содержатся в другом документе
void set_local_styles_container (odf_reader::styles_container* local_styles_);//это если стили объектов содержатся в другом документе
bool is_drawing_context(){return in_draw;}
@ -136,7 +136,8 @@ void xlsx_text_context::Impl::serialize_shared_strings(std::wostream & strm)
xlsx_text_context::Impl::Impl(odf_reader::styles_container & styles): paragraphs_cout_(0),styles_(styles),
in_comment(false),in_draw(false),in_paragraph(false),in_span(false),in_cell_content(false)
{
text_properties_cell_ = NULL;
local_styles_ptr_ = NULL;
text_properties_cell_ = NULL;
}
void xlsx_text_context::Impl::add_text(const std::wstring & text)
@ -236,48 +237,54 @@ void xlsx_text_context::Impl::end_hyperlink(std::wstring hId)
hyperlink_hId = hId;
}
void xlsx_text_context::Impl::ApplyParagraphProperties (std::wstring style, odf_reader::paragraph_format_properties & propertiesOut, odf_types::style_family::type Type)
void xlsx_text_context::Impl::ApplyParagraphProperties (std::wstring style, odf_reader::paragraph_format_properties & propertiesOut)
{
std::vector<const odf_reader::style_instance *> instances;
odf_reader::style_instance* defaultStyle = NULL;
odf_reader::style_instance* paraStyle = NULL;
if (local_styles_ptr_)
{
odf_reader::style_instance * defaultStyle = local_styles_ptr_->style_default_by_type(Type);
if (defaultStyle)instances.push_back(defaultStyle);
odf_reader::style_instance* styleInst = local_styles_ptr_->style_by_name(style, Type,false/*process_headers_footers_*/);
if(styleInst)instances.push_back(styleInst);
defaultStyle = local_styles_ptr_->style_default_by_type(odf_types::style_family::Paragraph);
paraStyle = local_styles_ptr_->style_by_name(style, odf_types::style_family::Paragraph, false/*process_headers_footers_*/);
}
else
{
odf_reader::style_instance * defaultStyle = styles_.style_default_by_type(Type);
if (defaultStyle)instances.push_back(defaultStyle);
odf_reader::style_instance* styleInst = styles_.style_by_name(style, Type,false/*process_headers_footers_*/);
if(styleInst)instances.push_back(styleInst);
defaultStyle = styles_.style_default_by_type(odf_types::style_family::Paragraph);
paraStyle = styles_.style_by_name(style, odf_types::style_family::Paragraph, false/*process_headers_footers_*/);
}
if (defaultStyle) instances.push_back(defaultStyle);
if (paraStyle) instances.push_back(paraStyle);
propertiesOut.apply_from(calc_paragraph_properties_content(instances));
}
void xlsx_text_context::Impl::ApplyTextProperties(std::wstring style, odf_reader::text_format_properties_content & propertiesOut, odf_types::style_family::type Type)
void xlsx_text_context::Impl::ApplyTextProperties(std::wstring style, std::wstring para_style, odf_reader::text_format_properties_content & propertiesOut)
{
std::vector<const odf_reader::style_instance *> instances;
odf_reader::style_instance* defaultStyle = NULL;
odf_reader::style_instance* textStyle = NULL;
odf_reader::style_instance* paraStyle = NULL;
if (local_styles_ptr_)
{
odf_reader::style_instance * defaultStyle = local_styles_ptr_->style_default_by_type(Type);
if (defaultStyle)instances.push_back(defaultStyle);
odf_reader::style_instance* styleInst = local_styles_ptr_->style_by_name(style, Type,false/*process_headers_footers_*/);
if(styleInst)instances.push_back(styleInst);
defaultStyle = local_styles_ptr_->style_default_by_type(odf_types::style_family::Text);
paraStyle = local_styles_ptr_->style_by_name(para_style, odf_types::style_family::Paragraph, false/*process_headers_footers_*/);
textStyle = local_styles_ptr_->style_by_name(style, odf_types::style_family::Text, false/*process_headers_footers_*/);
}
else
{
odf_reader::style_instance * defaultStyle = styles_.style_default_by_type(Type);
if (defaultStyle)instances.push_back(defaultStyle);
odf_reader::style_instance* styleInst = styles_.style_by_name(style, Type,false/*process_headers_footers_*/);
if(styleInst)instances.push_back(styleInst);
defaultStyle = styles_.style_default_by_type(odf_types::style_family::Text);
paraStyle = styles_.style_by_name(para_style, odf_types::style_family::Paragraph, false/*process_headers_footers_*/);
textStyle = styles_.style_by_name(style, odf_types::style_family::Text, false/*process_headers_footers_*/);
}
if (defaultStyle) instances.push_back(defaultStyle);
if (paraStyle) instances.push_back(paraStyle);
if (textStyle) instances.push_back(textStyle);
propertiesOut.apply_from(calc_text_properties_content(instances));
}
@ -290,10 +297,10 @@ void xlsx_text_context::Impl::write_pPr (std::wostream & strm)
{
if (paragraph_style_name_.empty())return;
odf_reader::paragraph_format_properties paragraph_format_properties_;
odf_reader::paragraph_format_properties paragraph_format_properties_;
ApplyParagraphProperties (paragraph_style_name_, paragraph_format_properties_ , odf_types::style_family::Paragraph);
paragraph_format_properties_.xlsx_convert(strm, in_draw);
ApplyParagraphProperties (paragraph_style_name_, paragraph_format_properties_);
paragraph_format_properties_.xlsx_convert (strm, in_draw);
}
void xlsx_text_context::Impl::write_rPr(std::wostream & strm)
@ -302,20 +309,13 @@ void xlsx_text_context::Impl::write_rPr(std::wostream & strm)
&& !(!hyperlink_hId.empty() && in_draw)
&& !(text_properties_cell_ && in_cell_content))return;
odf_reader::text_format_properties_content text_properties_paragraph_;
odf_reader::text_format_properties_content text_properties_span_;
ApplyTextProperties (paragraph_style_name_, text_properties_paragraph_ , odf_types::style_family::Paragraph);
ApplyTextProperties (span_style_name_, text_properties_span_ , odf_types::style_family::Text);
odf_reader::text_format_properties_content text_properties_;
if (in_cell_content && text_properties_cell_)
{
text_properties_.apply_from(*text_properties_cell_);
}
text_properties_.apply_from(text_properties_paragraph_);
text_properties_.apply_from(text_properties_span_);
}
ApplyTextProperties (span_style_name_, paragraph_style_name_, text_properties_);
_CP_OPT(double) dValFontSize;
if (text_properties_.fo_font_size_)

View File

@ -41,22 +41,22 @@ std::wostream & operator << (std::wostream & _Wostream, const presentation_class
std::wstring res = L"";
switch(_Val.get_type())
{
case presentation_class::title: _Wostream << L"title" ; break;
case presentation_class::subtitle: _Wostream << L"subtitle" ; break;
case presentation_class::graphic: _Wostream << L"graphic" ; break;
case presentation_class::object: _Wostream << L"object" ; break;
case presentation_class::chart: _Wostream << L"chart" ; break;
case presentation_class::table: _Wostream << L"table" ; break;
case presentation_class::orgchart: _Wostream << L"orgchart" ; break;
case presentation_class::header: _Wostream << L"header" ; break;
case presentation_class::footer: _Wostream << L"footer" ; break;
case presentation_class::date_time: _Wostream << L"date_time" ; break;
case presentation_class::page_number: _Wostream << L"page_number" ; break;
case presentation_class::page: _Wostream << L"page" ; break;
case presentation_class::notes: _Wostream << L"notes" ; break;
case presentation_class::handout: _Wostream << L"handout" ; break;
case presentation_class::outline: _Wostream << L"outline" ; break;
case presentation_class::text: _Wostream << L"text" ; break;
case presentation_class::title: _Wostream << L"title"; break;
case presentation_class::subtitle: _Wostream << L"subtitle"; break;
case presentation_class::graphic: _Wostream << L"graphic"; break;
case presentation_class::object: _Wostream << L"object"; break;
case presentation_class::chart: _Wostream << L"chart"; break;
case presentation_class::table: _Wostream << L"table"; break;
case presentation_class::orgchart: _Wostream << L"orgchart"; break;
case presentation_class::header: _Wostream << L"header"; break;
case presentation_class::footer: _Wostream << L"footer"; break;
case presentation_class::date_time: _Wostream << L"date-time"; break;
case presentation_class::page_number: _Wostream << L"page-number";break;
case presentation_class::page: _Wostream << L"page"; break;
case presentation_class::notes: _Wostream << L"notes"; break;
case presentation_class::handout: _Wostream << L"handout"; break;
case presentation_class::outline: _Wostream << L"outline"; break;
case presentation_class::text: _Wostream << L"text"; break;
}
return _Wostream;
}
@ -65,41 +65,24 @@ presentation_class presentation_class::parse(const std::wstring & Str)
std::wstring tmp = Str;
boost::algorithm::to_lower(tmp);
if (tmp == L"page")
return presentation_class( page );
else if (tmp == L"title")
return presentation_class( title);
else if (tmp == L"outline")
return presentation_class( outline );
else if (tmp == L"subtitle")
return presentation_class( subtitle);
else if (tmp == L"text")
return presentation_class( text);
else if (tmp == L"graphic")
return presentation_class( graphic );
else if (tmp == L"object")
return presentation_class( object );
else if (tmp == L"chart")
return presentation_class( chart );
else if (tmp == L"table")
return presentation_class( table );
else if (tmp == L"orgchart")
return presentation_class( orgchart );
else if (tmp == L"notes")
return presentation_class( notes );
else if (tmp == L"handout")
return presentation_class( handout );
else if (tmp == L"header")
return presentation_class( header );
else if (tmp == L"footer")
return presentation_class( footer );
else if (tmp == L"date-time")
return presentation_class( date_time );
else if (tmp == L"page-number")
return presentation_class( page_number );
else
if (tmp == L"page") return presentation_class( page );
else if (tmp == L"title") return presentation_class( title);
else if (tmp == L"outline") return presentation_class( outline );
else if (tmp == L"subtitle") return presentation_class( subtitle);
else if (tmp == L"text") return presentation_class( text);
else if (tmp == L"graphic") return presentation_class( graphic );
else if (tmp == L"object") return presentation_class( object );
else if (tmp == L"chart") return presentation_class( chart );
else if (tmp == L"table") return presentation_class( table );
else if (tmp == L"orgchart") return presentation_class( orgchart );
else if (tmp == L"notes") return presentation_class( notes );
else if (tmp == L"handout") return presentation_class( handout );
else if (tmp == L"header") return presentation_class( header );
else if (tmp == L"footer") return presentation_class( footer );
else if (tmp == L"date-time") return presentation_class( date_time );
else if (tmp == L"page-number") return presentation_class( page_number );
else
{
BOOST_THROW_EXCEPTION( errors::invalid_attribute() );
return presentation_class( page );
}
}

View File

@ -458,7 +458,7 @@ void paragraph_format_properties::pptx_convert(oox::pptx_conversion_context & Co
{
CP_XML_NODE(L"a:spcBef")
{
if (fo_margin_bottom_->get_type() == length_or_percent::Length)
if (fo_margin_top_->get_type() == length_or_percent::Length)
{
std::wstring w_before = pptx_process_margin(fo_margin_top_, length::pt, 100.0);
CP_XML_NODE(L"a:spcPts")

View File

@ -3,19 +3,19 @@ Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OdfFormatWriterLib", "..\source\win32\OdfFormat.vcproj", "{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}"
ProjectSection(ProjectDependencies) = postProject
{94954A67-A853-43B1-A727-6EF2774C5A6A} = {94954A67-A853-43B1-A727-6EF2774C5A6A}
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
{609ED938-3CA8-4BED-B363-25096D4C4812} = {609ED938-3CA8-4BED-B363-25096D4C4812}
{C739151F-5384-41DF-A1A6-F089E2C1AD56} = {C739151F-5384-41DF-A1A6-F089E2C1AD56}
{609ED938-3CA8-4BED-B363-25096D4C4812} = {609ED938-3CA8-4BED-B363-25096D4C4812}
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540} = {9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}
{94954A67-A853-43B1-A727-6EF2774C5A6A} = {94954A67-A853-43B1-A727-6EF2774C5A6A}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Oox2OdfConverter", "..\source\win32\Oox2OdfConverter.vcproj", "{BEE01B53-244A-44E6-8947-ED9342D9247E}"
ProjectSection(ProjectDependencies) = postProject
{94954A67-A853-43B1-A727-6EF2774C5A6A} = {94954A67-A853-43B1-A727-6EF2774C5A6A}
{21663823-DE45-479B-91D0-B4FEF4916EF0} = {21663823-DE45-479B-91D0-B4FEF4916EF0}
{A100103A-353E-45E8-A9B8-90B87CC5C0B0} = {A100103A-353E-45E8-A9B8-90B87CC5C0B0}
{36636678-AE25-4BE6-9A34-2561D1BCF302} = {36636678-AE25-4BE6-9A34-2561D1BCF302}
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD} = {E5A67556-44DA-4481-8F87-0A3AEDBD20DD}
{94954A67-A853-43B1-A727-6EF2774C5A6A} = {94954A67-A853-43B1-A727-6EF2774C5A6A}
{36636678-AE25-4BE6-9A34-2561D1BCF302} = {36636678-AE25-4BE6-9A34-2561D1BCF302}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OdfFileWriterTest", "OdfFileWTest.vcproj", "{FBA8446A-150F-4A10-B4DA-1022048D6473}"
@ -40,9 +40,9 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OdfCommon", "..\..\ASCOffic
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "raster", "..\..\DesktopEditor\raster\raster_vs2005.vcproj", "{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}"
ProjectSection(ProjectDependencies) = postProject
{BC52A07C-A797-423D-8C4F-8678805BBB36} = {BC52A07C-A797-423D-8C4F-8678805BBB36}
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1} = {EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2} = {37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1} = {EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}
{BC52A07C-A797-423D-8C4F-8678805BBB36} = {BC52A07C-A797-423D-8C4F-8678805BBB36}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jbig2", "..\..\DesktopEditor\raster\JBig2\win32\jbig2.vcproj", "{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}"
@ -92,700 +92,204 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libxml2", "..\..\DesktopEdi
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug Multithreaded|Win32 = Debug Multithreaded|Win32
Debug Multithreaded|x64 = Debug Multithreaded|x64
Debug Singlethreaded|Win32 = Debug Singlethreaded|Win32
Debug Singlethreaded|x64 = Debug Singlethreaded|x64
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
Release Multithreaded|Win32 = Release Multithreaded|Win32
Release Multithreaded|x64 = Release Multithreaded|x64
Release Singlethreaded|Win32 = Release Singlethreaded|Win32
Release Singlethreaded|x64 = Release Singlethreaded|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
Unicode Debug|Win32 = Unicode Debug|Win32
Unicode Debug|x64 = Unicode Debug|x64
Unicode Release|Win32 = Unicode Release|Win32
Unicode Release|x64 = Unicode Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Debug Multithreaded|x64.Build.0 = Debug|x64
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Debug|Win32.ActiveCfg = Debug|Win32
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Debug|Win32.Build.0 = Debug|Win32
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Debug|x64.ActiveCfg = Debug|x64
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Debug|x64.Build.0 = Debug|x64
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Release Multithreaded|x64.ActiveCfg = Release|x64
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Release Multithreaded|x64.Build.0 = Release|x64
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Release Singlethreaded|x64.Build.0 = Release|x64
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Release|Win32.ActiveCfg = Release|Win32
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Release|Win32.Build.0 = Release|Win32
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Release|x64.ActiveCfg = Release|x64
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Release|x64.Build.0 = Release|x64
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Unicode Debug|Win32.Build.0 = Debug|Win32
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Unicode Debug|x64.ActiveCfg = Debug|x64
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Unicode Debug|x64.Build.0 = Debug|x64
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Unicode Release|Win32.ActiveCfg = Release|Win32
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Unicode Release|Win32.Build.0 = Release|Win32
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Unicode Release|x64.ActiveCfg = Release|x64
{E5A67556-44DA-4481-8F87-0A3AEDBD20DD}.Unicode Release|x64.Build.0 = Release|x64
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Debug Multithreaded|x64.Build.0 = Debug|x64
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Debug|Win32.ActiveCfg = Debug|Win32
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Debug|Win32.Build.0 = Debug|Win32
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Debug|x64.ActiveCfg = Debug|x64
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Debug|x64.Build.0 = Debug|x64
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Release Multithreaded|x64.ActiveCfg = Release|x64
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Release Multithreaded|x64.Build.0 = Release|x64
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Release Singlethreaded|x64.Build.0 = Release|x64
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Release|Win32.ActiveCfg = Release|Win32
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Release|Win32.Build.0 = Release|Win32
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Release|x64.ActiveCfg = Release|x64
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Release|x64.Build.0 = Release|x64
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Unicode Debug|Win32.Build.0 = Debug|Win32
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Unicode Debug|x64.ActiveCfg = Debug|x64
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Unicode Debug|x64.Build.0 = Debug|x64
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Unicode Release|Win32.ActiveCfg = Release|Win32
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Unicode Release|Win32.Build.0 = Release|Win32
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Unicode Release|x64.ActiveCfg = Release|x64
{BEE01B53-244A-44E6-8947-ED9342D9247E}.Unicode Release|x64.Build.0 = Release|x64
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Debug Multithreaded|x64.Build.0 = Debug|x64
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Debug|Win32.ActiveCfg = Debug|Win32
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Debug|Win32.Build.0 = Debug|Win32
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Debug|x64.ActiveCfg = Debug|x64
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Debug|x64.Build.0 = Debug|x64
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Release Multithreaded|x64.ActiveCfg = Release|x64
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Release Multithreaded|x64.Build.0 = Release|x64
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Release Singlethreaded|x64.Build.0 = Release|x64
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Release|Win32.ActiveCfg = Release|Win32
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Release|Win32.Build.0 = Release|Win32
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Release|x64.ActiveCfg = Release|x64
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Release|x64.Build.0 = Release|x64
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Unicode Debug|Win32.Build.0 = Debug|Win32
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Unicode Debug|x64.ActiveCfg = Debug|x64
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Unicode Debug|x64.Build.0 = Debug|x64
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Unicode Release|Win32.ActiveCfg = Release|Win32
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Unicode Release|Win32.Build.0 = Release|Win32
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Unicode Release|x64.ActiveCfg = Release|x64
{FBA8446A-150F-4A10-B4DA-1022048D6473}.Unicode Release|x64.Build.0 = Release|x64
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Debug Multithreaded|x64.Build.0 = Debug|x64
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Debug|Win32.ActiveCfg = Debug|Win32
{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}.Release Multithreaded|Win32.ActiveCfg = ReleaseOpenSource|x64
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Release Multithreaded|x64.ActiveCfg = ReleaseOpenSource|x64
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Release Multithreaded|x64.Build.0 = ReleaseOpenSource|x64
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Release Singlethreaded|Win32.ActiveCfg = ReleaseOpenSource|x64
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Release Singlethreaded|x64.ActiveCfg = ReleaseOpenSource|x64
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Release Singlethreaded|x64.Build.0 = ReleaseOpenSource|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
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Release|x64.Build.0 = Release|x64
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Unicode Debug|Win32.Build.0 = Debug|Win32
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Unicode Debug|x64.ActiveCfg = Debug|x64
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Unicode Debug|x64.Build.0 = Debug|x64
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Unicode Release|Win32.ActiveCfg = Release|Win32
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Unicode Release|Win32.Build.0 = Release|Win32
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Unicode Release|x64.ActiveCfg = Release|x64
{A100103A-353E-45E8-A9B8-90B87CC5C0B0}.Unicode Release|x64.Build.0 = Release|x64
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Debug Multithreaded|x64.Build.0 = Debug|x64
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Debug|Win32.ActiveCfg = Debug|Win32
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Debug|Win32.Build.0 = Debug|Win32
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Debug|x64.ActiveCfg = Debug|x64
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Debug|x64.Build.0 = Debug|x64
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Release Multithreaded|x64.ActiveCfg = Release|x64
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Release Multithreaded|x64.Build.0 = Release|x64
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Release Singlethreaded|x64.Build.0 = Release|x64
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Release|Win32.ActiveCfg = Release|Win32
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Release|Win32.Build.0 = Release|Win32
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Release|x64.ActiveCfg = Release|x64
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Release|x64.Build.0 = Release|x64
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Unicode Debug|Win32.Build.0 = Debug|Win32
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Unicode Debug|x64.ActiveCfg = Debug|x64
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Unicode Debug|x64.Build.0 = Debug|x64
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Unicode Release|Win32.ActiveCfg = Release|Win32
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Unicode Release|Win32.Build.0 = Release|Win32
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Unicode Release|x64.ActiveCfg = Release|x64
{94954A67-A853-43B1-A727-6EF2774C5A6A}.Unicode Release|x64.Build.0 = Release|x64
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Debug Multithreaded|x64.Build.0 = Debug|x64
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Debug|Win32.ActiveCfg = Debug|Win32
{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}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Release Multithreaded|x64.ActiveCfg = Release|x64
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Release Multithreaded|x64.Build.0 = Release|x64
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Release Singlethreaded|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
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Release|x64.Build.0 = Release|x64
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Unicode Debug|Win32.Build.0 = Debug|Win32
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Unicode Debug|x64.ActiveCfg = Debug|x64
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Unicode Debug|x64.Build.0 = Debug|x64
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Unicode Release|Win32.ActiveCfg = Release|Win32
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Unicode Release|Win32.Build.0 = Release|Win32
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Unicode Release|x64.ActiveCfg = Release|x64
{37CA072A-5BDE-498B-B3A7-5E404F5F9BF2}.Unicode Release|x64.Build.0 = Release|x64
{609ED938-3CA8-4BED-B363-25096D4C4812}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{609ED938-3CA8-4BED-B363-25096D4C4812}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{609ED938-3CA8-4BED-B363-25096D4C4812}.Debug Multithreaded|x64.Build.0 = Debug|x64
{609ED938-3CA8-4BED-B363-25096D4C4812}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{609ED938-3CA8-4BED-B363-25096D4C4812}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{609ED938-3CA8-4BED-B363-25096D4C4812}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{609ED938-3CA8-4BED-B363-25096D4C4812}.Debug|Win32.ActiveCfg = Debug|Win32
{609ED938-3CA8-4BED-B363-25096D4C4812}.Debug|Win32.Build.0 = Debug|Win32
{609ED938-3CA8-4BED-B363-25096D4C4812}.Debug|x64.ActiveCfg = Debug|x64
{609ED938-3CA8-4BED-B363-25096D4C4812}.Debug|x64.Build.0 = Debug|x64
{609ED938-3CA8-4BED-B363-25096D4C4812}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{609ED938-3CA8-4BED-B363-25096D4C4812}.Release Multithreaded|x64.ActiveCfg = Release|x64
{609ED938-3CA8-4BED-B363-25096D4C4812}.Release Multithreaded|x64.Build.0 = Release|x64
{609ED938-3CA8-4BED-B363-25096D4C4812}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{609ED938-3CA8-4BED-B363-25096D4C4812}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{609ED938-3CA8-4BED-B363-25096D4C4812}.Release Singlethreaded|x64.Build.0 = Release|x64
{609ED938-3CA8-4BED-B363-25096D4C4812}.Release|Win32.ActiveCfg = Release|Win32
{609ED938-3CA8-4BED-B363-25096D4C4812}.Release|Win32.Build.0 = Release|Win32
{609ED938-3CA8-4BED-B363-25096D4C4812}.Release|x64.ActiveCfg = Release|x64
{609ED938-3CA8-4BED-B363-25096D4C4812}.Release|x64.Build.0 = Release|x64
{609ED938-3CA8-4BED-B363-25096D4C4812}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{609ED938-3CA8-4BED-B363-25096D4C4812}.Unicode Debug|Win32.Build.0 = Debug|Win32
{609ED938-3CA8-4BED-B363-25096D4C4812}.Unicode Debug|x64.ActiveCfg = Debug|x64
{609ED938-3CA8-4BED-B363-25096D4C4812}.Unicode Debug|x64.Build.0 = Debug|x64
{609ED938-3CA8-4BED-B363-25096D4C4812}.Unicode Release|Win32.ActiveCfg = Release|Win32
{609ED938-3CA8-4BED-B363-25096D4C4812}.Unicode Release|Win32.Build.0 = Release|Win32
{609ED938-3CA8-4BED-B363-25096D4C4812}.Unicode Release|x64.ActiveCfg = Release|x64
{609ED938-3CA8-4BED-B363-25096D4C4812}.Unicode Release|x64.Build.0 = Release|x64
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Debug Multithreaded|x64.Build.0 = Debug|x64
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Debug|Win32.ActiveCfg = Debug|Win32
{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}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Release Multithreaded|x64.ActiveCfg = Release|x64
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Release Multithreaded|x64.Build.0 = Release|x64
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Release Singlethreaded|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
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Release|x64.Build.0 = Release|x64
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Unicode Debug|Win32.ActiveCfg = Unicode Debug|Win32
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Unicode Debug|Win32.Build.0 = Unicode Debug|Win32
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Unicode Debug|x64.ActiveCfg = Unicode Debug|x64
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Unicode Debug|x64.Build.0 = Unicode Debug|x64
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Unicode Release|Win32.ActiveCfg = Unicode Release|Win32
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Unicode Release|Win32.Build.0 = Unicode Release|Win32
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Unicode Release|x64.ActiveCfg = Unicode Release|x64
{9CAA294E-58C3-4CEB-ABA0-CB9786CA5540}.Unicode Release|x64.Build.0 = Unicode Release|x64
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Debug Multithreaded|x64.Build.0 = Debug|x64
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Debug|Win32.ActiveCfg = Debug|Win32
{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}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Release Multithreaded|x64.ActiveCfg = Release|x64
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Release Multithreaded|x64.Build.0 = Release|x64
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Release Singlethreaded|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
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Release|x64.Build.0 = Release|x64
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Unicode Debug|Win32.Build.0 = Debug|Win32
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Unicode Debug|x64.ActiveCfg = Debug|x64
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Unicode Debug|x64.Build.0 = Debug|x64
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Unicode Release|Win32.ActiveCfg = Release|Win32
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Unicode Release|Win32.Build.0 = Release|Win32
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Unicode Release|x64.ActiveCfg = Release|x64
{EE1B576A-07C5-4ACC-920F-81C41DD0C8C1}.Unicode Release|x64.Build.0 = Release|x64
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Debug Multithreaded|x64.Build.0 = Debug|x64
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Debug|Win32.ActiveCfg = Debug|Win32
{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}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Release Multithreaded|x64.ActiveCfg = Release|x64
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Release Multithreaded|x64.Build.0 = Release|x64
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Release Singlethreaded|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
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Release|x64.Build.0 = Release|x64
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Unicode Debug|Win32.ActiveCfg = Unicode Debug|Win32
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Unicode Debug|Win32.Build.0 = Unicode Debug|Win32
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Unicode Debug|x64.ActiveCfg = Unicode Debug|x64
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Unicode Debug|x64.Build.0 = Unicode Debug|x64
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Unicode Release|Win32.ActiveCfg = Unicode Release|Win32
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Unicode Release|Win32.Build.0 = Unicode Release|Win32
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Unicode Release|x64.ActiveCfg = Unicode Release|x64
{BC52A07C-A797-423D-8C4F-8678805BBB36}.Unicode Release|x64.Build.0 = Unicode Release|x64
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Debug Multithreaded|x64.Build.0 = Debug|x64
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Debug|Win32.ActiveCfg = Debug|Win32
{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}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Release Multithreaded|x64.ActiveCfg = Release|x64
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Release Multithreaded|x64.Build.0 = Release|x64
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Release Singlethreaded|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
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Release|x64.Build.0 = Release|x64
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Unicode Debug|Win32.ActiveCfg = Unicode Debug|Win32
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Unicode Debug|Win32.Build.0 = Unicode Debug|Win32
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Unicode Debug|x64.ActiveCfg = Unicode Debug|x64
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Unicode Debug|x64.Build.0 = Unicode Debug|x64
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Unicode Release|Win32.ActiveCfg = Unicode Release|Win32
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Unicode Release|Win32.Build.0 = Unicode Release|Win32
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Unicode Release|x64.ActiveCfg = Unicode Release|x64
{FFDA5DA1-BB65-4695-B678-BE59B4A1355D}.Unicode Release|x64.Build.0 = Unicode Release|x64
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Debug Multithreaded|x64.Build.0 = Debug|x64
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Debug|Win32.ActiveCfg = Debug|Win32
{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}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Release Multithreaded|x64.ActiveCfg = Release|x64
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Release Multithreaded|x64.Build.0 = Release|x64
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Release Singlethreaded|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
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Release|x64.Build.0 = Release|x64
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Unicode Debug|Win32.ActiveCfg = Unicode Debug|Win32
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Unicode Debug|Win32.Build.0 = Unicode Debug|Win32
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Unicode Debug|x64.ActiveCfg = Unicode Debug|x64
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Unicode Debug|x64.Build.0 = Unicode Debug|x64
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Unicode Release|Win32.ActiveCfg = Unicode Release|Win32
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Unicode Release|Win32.Build.0 = Unicode Release|Win32
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Unicode Release|x64.ActiveCfg = Unicode Release|x64
{764C3A2D-FB0F-428E-B1C7-62D1DD2CE239}.Unicode Release|x64.Build.0 = Unicode Release|x64
{818753F2-DBB9-4D3B-898A-A604309BE470}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{818753F2-DBB9-4D3B-898A-A604309BE470}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{818753F2-DBB9-4D3B-898A-A604309BE470}.Debug Multithreaded|x64.Build.0 = Debug|x64
{818753F2-DBB9-4D3B-898A-A604309BE470}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{818753F2-DBB9-4D3B-898A-A604309BE470}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{818753F2-DBB9-4D3B-898A-A604309BE470}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{818753F2-DBB9-4D3B-898A-A604309BE470}.Debug|Win32.ActiveCfg = Debug|Win32
{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}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{818753F2-DBB9-4D3B-898A-A604309BE470}.Release Multithreaded|x64.ActiveCfg = Release|x64
{818753F2-DBB9-4D3B-898A-A604309BE470}.Release Multithreaded|x64.Build.0 = Release|x64
{818753F2-DBB9-4D3B-898A-A604309BE470}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{818753F2-DBB9-4D3B-898A-A604309BE470}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{818753F2-DBB9-4D3B-898A-A604309BE470}.Release Singlethreaded|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
{818753F2-DBB9-4D3B-898A-A604309BE470}.Release|x64.Build.0 = Release|x64
{818753F2-DBB9-4D3B-898A-A604309BE470}.Unicode Debug|Win32.ActiveCfg = Unicode Debug|Win32
{818753F2-DBB9-4D3B-898A-A604309BE470}.Unicode Debug|Win32.Build.0 = Unicode Debug|Win32
{818753F2-DBB9-4D3B-898A-A604309BE470}.Unicode Debug|x64.ActiveCfg = Unicode Debug|x64
{818753F2-DBB9-4D3B-898A-A604309BE470}.Unicode Debug|x64.Build.0 = Unicode Debug|x64
{818753F2-DBB9-4D3B-898A-A604309BE470}.Unicode Release|Win32.ActiveCfg = Unicode Release|Win32
{818753F2-DBB9-4D3B-898A-A604309BE470}.Unicode Release|Win32.Build.0 = Unicode Release|Win32
{818753F2-DBB9-4D3B-898A-A604309BE470}.Unicode Release|x64.ActiveCfg = Unicode Release|x64
{818753F2-DBB9-4D3B-898A-A604309BE470}.Unicode Release|x64.Build.0 = Unicode Release|x64
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Debug Multithreaded|x64.Build.0 = Debug|x64
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Debug|Win32.ActiveCfg = Debug|Win32
{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}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Release Multithreaded|x64.ActiveCfg = Release|x64
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Release Multithreaded|x64.Build.0 = Release|x64
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Release Singlethreaded|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
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Release|x64.Build.0 = Release|x64
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Unicode Debug|Win32.ActiveCfg = Unicode Debug|Win32
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Unicode Debug|Win32.Build.0 = Unicode Debug|Win32
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Unicode Debug|x64.ActiveCfg = Unicode Debug|x64
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Unicode Debug|x64.Build.0 = Unicode Debug|x64
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Unicode Release|Win32.ActiveCfg = Unicode Release|Win32
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Unicode Release|Win32.Build.0 = Unicode Release|Win32
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Unicode Release|x64.ActiveCfg = Unicode Release|x64
{9A037A69-D1DF-4505-AB2A-6CB3641C476E}.Unicode Release|x64.Build.0 = Unicode Release|x64
{40A69F40-063E-43FD-8543-455495D8733E}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{40A69F40-063E-43FD-8543-455495D8733E}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{40A69F40-063E-43FD-8543-455495D8733E}.Debug Multithreaded|x64.Build.0 = Debug|x64
{40A69F40-063E-43FD-8543-455495D8733E}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{40A69F40-063E-43FD-8543-455495D8733E}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{40A69F40-063E-43FD-8543-455495D8733E}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{40A69F40-063E-43FD-8543-455495D8733E}.Debug|Win32.ActiveCfg = Debug|Win32
{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}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{40A69F40-063E-43FD-8543-455495D8733E}.Release Multithreaded|x64.ActiveCfg = Release|x64
{40A69F40-063E-43FD-8543-455495D8733E}.Release Multithreaded|x64.Build.0 = Release|x64
{40A69F40-063E-43FD-8543-455495D8733E}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{40A69F40-063E-43FD-8543-455495D8733E}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{40A69F40-063E-43FD-8543-455495D8733E}.Release Singlethreaded|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
{40A69F40-063E-43FD-8543-455495D8733E}.Release|x64.Build.0 = Release|x64
{40A69F40-063E-43FD-8543-455495D8733E}.Unicode Debug|Win32.ActiveCfg = Unicode Debug|Win32
{40A69F40-063E-43FD-8543-455495D8733E}.Unicode Debug|Win32.Build.0 = Unicode Debug|Win32
{40A69F40-063E-43FD-8543-455495D8733E}.Unicode Debug|x64.ActiveCfg = Unicode Debug|x64
{40A69F40-063E-43FD-8543-455495D8733E}.Unicode Debug|x64.Build.0 = Unicode Debug|x64
{40A69F40-063E-43FD-8543-455495D8733E}.Unicode Release|Win32.ActiveCfg = Unicode Release|Win32
{40A69F40-063E-43FD-8543-455495D8733E}.Unicode Release|Win32.Build.0 = Unicode Release|Win32
{40A69F40-063E-43FD-8543-455495D8733E}.Unicode Release|x64.ActiveCfg = Unicode Release|x64
{40A69F40-063E-43FD-8543-455495D8733E}.Unicode Release|x64.Build.0 = Unicode Release|x64
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Debug Multithreaded|x64.Build.0 = Debug|x64
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Debug|Win32.ActiveCfg = Debug|Win32
{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}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Release Multithreaded|x64.ActiveCfg = Release|x64
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Release Multithreaded|x64.Build.0 = Release|x64
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Release Singlethreaded|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
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Release|x64.Build.0 = Release|x64
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Unicode Debug|Win32.ActiveCfg = Unicode Debug|Win32
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Unicode Debug|Win32.Build.0 = Unicode Debug|Win32
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Unicode Debug|x64.ActiveCfg = Unicode Debug|x64
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Unicode Debug|x64.Build.0 = Unicode Debug|x64
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Unicode Release|Win32.ActiveCfg = Unicode Release|Win32
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Unicode Release|Win32.Build.0 = Unicode Release|Win32
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Unicode Release|x64.ActiveCfg = Unicode Release|x64
{43A0E60E-5C4A-4C09-A29B-7683F503BBD7}.Unicode Release|x64.Build.0 = Unicode Release|x64
{DF861D33-9BC1-418C-82B1-581F590FE169}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{DF861D33-9BC1-418C-82B1-581F590FE169}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{DF861D33-9BC1-418C-82B1-581F590FE169}.Debug Multithreaded|x64.Build.0 = Debug|x64
{DF861D33-9BC1-418C-82B1-581F590FE169}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{DF861D33-9BC1-418C-82B1-581F590FE169}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{DF861D33-9BC1-418C-82B1-581F590FE169}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{DF861D33-9BC1-418C-82B1-581F590FE169}.Debug|Win32.ActiveCfg = Debug|Win32
{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}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{DF861D33-9BC1-418C-82B1-581F590FE169}.Release Multithreaded|x64.ActiveCfg = Release|x64
{DF861D33-9BC1-418C-82B1-581F590FE169}.Release Multithreaded|x64.Build.0 = Release|x64
{DF861D33-9BC1-418C-82B1-581F590FE169}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{DF861D33-9BC1-418C-82B1-581F590FE169}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{DF861D33-9BC1-418C-82B1-581F590FE169}.Release Singlethreaded|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
{DF861D33-9BC1-418C-82B1-581F590FE169}.Release|x64.Build.0 = Release|x64
{DF861D33-9BC1-418C-82B1-581F590FE169}.Unicode Debug|Win32.ActiveCfg = Unicode Debug|Win32
{DF861D33-9BC1-418C-82B1-581F590FE169}.Unicode Debug|Win32.Build.0 = Unicode Debug|Win32
{DF861D33-9BC1-418C-82B1-581F590FE169}.Unicode Debug|x64.ActiveCfg = Unicode Debug|x64
{DF861D33-9BC1-418C-82B1-581F590FE169}.Unicode Debug|x64.Build.0 = Unicode Debug|x64
{DF861D33-9BC1-418C-82B1-581F590FE169}.Unicode Release|Win32.ActiveCfg = Unicode Release|Win32
{DF861D33-9BC1-418C-82B1-581F590FE169}.Unicode Release|Win32.Build.0 = Unicode Release|Win32
{DF861D33-9BC1-418C-82B1-581F590FE169}.Unicode Release|x64.ActiveCfg = Unicode Release|x64
{DF861D33-9BC1-418C-82B1-581F590FE169}.Unicode Release|x64.Build.0 = Unicode Release|x64
{0588563C-F05C-428C-B21A-DD74756628B3}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{0588563C-F05C-428C-B21A-DD74756628B3}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{0588563C-F05C-428C-B21A-DD74756628B3}.Debug Multithreaded|x64.Build.0 = Debug|x64
{0588563C-F05C-428C-B21A-DD74756628B3}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{0588563C-F05C-428C-B21A-DD74756628B3}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{0588563C-F05C-428C-B21A-DD74756628B3}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{0588563C-F05C-428C-B21A-DD74756628B3}.Debug|Win32.ActiveCfg = Debug|Win32
{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}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{0588563C-F05C-428C-B21A-DD74756628B3}.Release Multithreaded|x64.ActiveCfg = Release|x64
{0588563C-F05C-428C-B21A-DD74756628B3}.Release Multithreaded|x64.Build.0 = Release|x64
{0588563C-F05C-428C-B21A-DD74756628B3}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{0588563C-F05C-428C-B21A-DD74756628B3}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{0588563C-F05C-428C-B21A-DD74756628B3}.Release Singlethreaded|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
{0588563C-F05C-428C-B21A-DD74756628B3}.Release|x64.Build.0 = Release|x64
{0588563C-F05C-428C-B21A-DD74756628B3}.Unicode Debug|Win32.ActiveCfg = Unicode Debug|Win32
{0588563C-F05C-428C-B21A-DD74756628B3}.Unicode Debug|Win32.Build.0 = Unicode Debug|Win32
{0588563C-F05C-428C-B21A-DD74756628B3}.Unicode Debug|x64.ActiveCfg = Unicode Debug|x64
{0588563C-F05C-428C-B21A-DD74756628B3}.Unicode Debug|x64.Build.0 = Unicode Debug|x64
{0588563C-F05C-428C-B21A-DD74756628B3}.Unicode Release|Win32.ActiveCfg = Unicode Release|Win32
{0588563C-F05C-428C-B21A-DD74756628B3}.Unicode Release|Win32.Build.0 = Unicode Release|Win32
{0588563C-F05C-428C-B21A-DD74756628B3}.Unicode Release|x64.ActiveCfg = Unicode Release|x64
{0588563C-F05C-428C-B21A-DD74756628B3}.Unicode Release|x64.Build.0 = Unicode Release|x64
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Debug Multithreaded|x64.Build.0 = Debug|x64
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Debug|Win32.ActiveCfg = Debug|Win32
{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}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Release Multithreaded|x64.ActiveCfg = Release|x64
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Release Multithreaded|x64.Build.0 = Release|x64
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Release Singlethreaded|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
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Release|x64.Build.0 = Release|x64
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Unicode Debug|Win32.Build.0 = Debug|Win32
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Unicode Debug|x64.ActiveCfg = Debug|x64
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Unicode Debug|x64.Build.0 = Debug|x64
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Unicode Release|Win32.ActiveCfg = Release|Win32
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Unicode Release|Win32.Build.0 = Release|Win32
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Unicode Release|x64.ActiveCfg = Release|x64
{C739151F-5384-41DF-A1A6-F089E2C1AD56}.Unicode Release|x64.Build.0 = Release|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Multithreaded|Win32.ActiveCfg = Debug Multithreaded|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Multithreaded|Win32.Build.0 = Debug Multithreaded|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Multithreaded|x64.ActiveCfg = Debug Multithreaded|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Multithreaded|x64.Build.0 = Debug Multithreaded|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Singlethreaded|Win32.ActiveCfg = Debug Singlethreaded|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Singlethreaded|Win32.Build.0 = Debug Singlethreaded|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Singlethreaded|x64.ActiveCfg = Debug Singlethreaded|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Singlethreaded|x64.Build.0 = Debug Singlethreaded|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|Win32.ActiveCfg = Debug|Win32
{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}.Release Multithreaded|Win32.ActiveCfg = Release Multithreaded|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Multithreaded|Win32.Build.0 = Release Multithreaded|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Multithreaded|x64.ActiveCfg = Release Multithreaded|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Multithreaded|x64.Build.0 = Release Multithreaded|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Singlethreaded|Win32.ActiveCfg = Release Singlethreaded|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Singlethreaded|Win32.Build.0 = Release Singlethreaded|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Singlethreaded|x64.ActiveCfg = Release Singlethreaded|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Singlethreaded|x64.Build.0 = Release Singlethreaded|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
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|x64.Build.0 = Release|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Unicode Debug|Win32.Build.0 = Debug|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Unicode Debug|x64.ActiveCfg = Debug|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Unicode Debug|x64.Build.0 = Debug|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Unicode Release|Win32.ActiveCfg = Release|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Unicode Release|Win32.Build.0 = Release|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Unicode Release|x64.ActiveCfg = Release|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Unicode Release|x64.Build.0 = Release|x64
{F8274B05-168E-4D6E-B843-AA7510725363}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{F8274B05-168E-4D6E-B843-AA7510725363}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{F8274B05-168E-4D6E-B843-AA7510725363}.Debug Multithreaded|x64.Build.0 = Debug|x64
{F8274B05-168E-4D6E-B843-AA7510725363}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{F8274B05-168E-4D6E-B843-AA7510725363}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{F8274B05-168E-4D6E-B843-AA7510725363}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{F8274B05-168E-4D6E-B843-AA7510725363}.Debug|Win32.ActiveCfg = Debug|Win32
{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}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{F8274B05-168E-4D6E-B843-AA7510725363}.Release Multithreaded|x64.ActiveCfg = Release|x64
{F8274B05-168E-4D6E-B843-AA7510725363}.Release Multithreaded|x64.Build.0 = Release|x64
{F8274B05-168E-4D6E-B843-AA7510725363}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{F8274B05-168E-4D6E-B843-AA7510725363}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{F8274B05-168E-4D6E-B843-AA7510725363}.Release Singlethreaded|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
{F8274B05-168E-4D6E-B843-AA7510725363}.Release|x64.Build.0 = Release|x64
{F8274B05-168E-4D6E-B843-AA7510725363}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{F8274B05-168E-4D6E-B843-AA7510725363}.Unicode Debug|Win32.Build.0 = Debug|Win32
{F8274B05-168E-4D6E-B843-AA7510725363}.Unicode Debug|x64.ActiveCfg = Debug|x64
{F8274B05-168E-4D6E-B843-AA7510725363}.Unicode Debug|x64.Build.0 = Debug|x64
{F8274B05-168E-4D6E-B843-AA7510725363}.Unicode Release|Win32.ActiveCfg = Release|Win32
{F8274B05-168E-4D6E-B843-AA7510725363}.Unicode Release|Win32.Build.0 = Release|Win32
{F8274B05-168E-4D6E-B843-AA7510725363}.Unicode Release|x64.ActiveCfg = Release|x64
{F8274B05-168E-4D6E-B843-AA7510725363}.Unicode Release|x64.Build.0 = Release|x64
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Debug Multithreaded|x64.Build.0 = Debug|x64
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Debug|Win32.ActiveCfg = Debug|Win32
{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}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Release Multithreaded|x64.ActiveCfg = Release|x64
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Release Multithreaded|x64.Build.0 = Release|x64
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Release Singlethreaded|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
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Release|x64.Build.0 = Release|x64
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Unicode Debug|Win32.Build.0 = Debug|Win32
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Unicode Debug|x64.ActiveCfg = Debug|x64
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Unicode Debug|x64.Build.0 = Debug|x64
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Unicode Release|Win32.ActiveCfg = Release|Win32
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Unicode Release|Win32.Build.0 = Release|Win32
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Unicode Release|x64.ActiveCfg = Release|x64
{617F9069-5E37-4B80-9A3A-E77AFC4CC7AD}.Unicode Release|x64.Build.0 = Release|x64
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Debug Multithreaded|x64.Build.0 = Debug|x64
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Debug|Win32.ActiveCfg = Debug|Win32
{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}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Release Multithreaded|x64.ActiveCfg = Release|x64
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Release Multithreaded|x64.Build.0 = Release|x64
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Release Singlethreaded|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
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Release|x64.Build.0 = Release|x64
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Unicode Debug|Win32.Build.0 = Debug|Win32
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Unicode Debug|x64.ActiveCfg = Debug|x64
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Unicode Debug|x64.Build.0 = Debug|x64
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Unicode Release|Win32.ActiveCfg = Release|Win32
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Unicode Release|Win32.Build.0 = Release|Win32
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Unicode Release|x64.ActiveCfg = Release|x64
{36636678-AE25-4BE6-9A34-2561D1BCF302}.Unicode Release|x64.Build.0 = Release|x64
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Debug Multithreaded|Win32.ActiveCfg = Debug|x64
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Debug Multithreaded|x64.ActiveCfg = Debug|x64
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Debug Multithreaded|x64.Build.0 = Debug|x64
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Debug Singlethreaded|Win32.ActiveCfg = Debug|x64
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Debug Singlethreaded|x64.ActiveCfg = Debug|x64
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Debug Singlethreaded|x64.Build.0 = Debug|x64
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Debug|Win32.ActiveCfg = Debug|Win32
{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}.Release Multithreaded|Win32.ActiveCfg = Release|x64
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Release Multithreaded|x64.ActiveCfg = Release|x64
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Release Multithreaded|x64.Build.0 = Release|x64
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Release Singlethreaded|Win32.ActiveCfg = Release|x64
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Release Singlethreaded|x64.ActiveCfg = Release|x64
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Release Singlethreaded|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
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Release|x64.Build.0 = Release|x64
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Unicode Debug|Win32.ActiveCfg = Debug|Win32
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Unicode Debug|Win32.Build.0 = Debug|Win32
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Unicode Debug|x64.ActiveCfg = Debug|x64
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Unicode Debug|x64.Build.0 = Debug|x64
{21663823-DE45-479B-91D0-B4FEF4916EF0}.Unicode Release|Win32.ActiveCfg = Release|Win32
{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
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -67,30 +67,41 @@ public:
odf_type_name =L"ooxml-snip2DiagRect";
modifiers = L"0 16667";
enhanced_path = L"M ?f9 ?f2 L ?f13 ?f2 ?f1 ?f12 ?f1 ?f11 ?f10 ?f3 ?f12 ?f3 ?f0 ?f14 ?f0 ?f9 Z N";
text_areas = L"?f17 ?f17 ?f18 ?f19";
view_box = L"0 0 21600 21600";
enhanced_path = L"M ?f3 0 L ?f7 0 ?f14 ?f6 ?f14 ?f5 ?f4 ?f17 ?f6 ?f17 0 ?f8 0 ?f3 Z N";
text_areas = L"?f11 ?f11 ?f12 ?f13";
view_box = L"0 0 0 0";
add(L"f0", L"left");
add(L"f1", L"right");
add(L"f2", L"top");
add(L"f3", L"bottom");
add(L"f4", L"?f3 - ?f2");
add(L"f5", L"?f1 - ?f0");
add(L"f6", L"min(?f5, ?f4)");
add(L"f7", L"$0");
add(L"f8", L"$1");
add(L"f9", L"?f6 * ?f7 / 100000");
add(L"f10", L"?f1 - ?f9");
add(L"f11", L"?f3 - ?f9");
add(L"f12", L"?f6 * ?f8 / 100000");
add(L"f13", L"?f1 - ?f12");
add(L"f14", L"?f3 - ?f12");
add(L"f15", L"?f9 - ?f12");
add(L"f16", L"if(?f15, ?f9, ?f12)");
add(L"f17", L"?f16 / 2");
add(L"f18", L"?f1 - ?f17");
add(L"f19", L"?f3 - ?f17");
add(L"f0", L"if(0-$0 ,0,if(50000-$0 ,$0 ,50000))");
add(L"f1", L"if(0-$1 ,0,if(50000-$1 ,$1 ,50000))");
add(L"f2", L"min(logwidth,logheight)");
add(L"f3", L"?f2 *?f0 /100000");
add(L"f4", L"logwidth+0-?f3 ");
add(L"f5", L"logheight+0-?f3 ");
add(L"f6", L"?f2 *?f1 /100000");
add(L"f7", L"logwidth+0-?f6 ");
add(L"f8", L"logheight+0-?f6 ");
add(L"f9", L"?f3 +0-?f6 ");
add(L"f10", L"if(?f9 ,?f3 ,?f6 )");
add(L"f11", L"?f10 *1/2");
add(L"f12", L"logwidth+0-?f11 ");
add(L"f13", L"logheight+0-?f11 ");
add(L"f14", L"logwidth");
add(L"f15", L"logheight/2");
add(L"f16", L"logwidth/2");
add(L"f17", L"logheight");
_handle h;
h.position = L"?f3 0";
h.x_maximum= L"50000";
h.x_minimum= L"0";
handles.push_back(h);
h.position = L"?f7 0";
h.x_maximum= L"50000";
h.x_minimum= L"0";
handles.push_back(h);
}
};
class oox_shape_snip2SameRect : public oox_shape

View File

@ -403,9 +403,11 @@ int draw_enhanced_geometry::parsing(_CP_OPT(std::wstring) val)
void draw_enhanced_geometry_attlist::serialize(CP_ATTR_NODE)
{
CP_XML_ATTR_OPT(L"draw:type", draw_type_);
CP_XML_ATTR_OPT(L"draw:text-areas", draw_text_areas_);
CP_XML_ATTR_OPT(L"drawooo:sub-view-size", draw_sub_view_size_);
CP_XML_ATTR_OPT(L"draw:text-areas", draw_text_areas_);
CP_XML_ATTR_OPT(L"draw:modifiers", draw_modifiers_);
CP_XML_ATTR_OPT(L"draw:enhanced-path", draw_enhanced_path_);
CP_XML_ATTR_OPT(L"drawooo:enhanced-path", draw_enhanced_path_);
//CP_XML_ATTR_OPT(L"draw:enhanced-path", draw_enhanced_path_);
CP_XML_ATTR_OPT(L"draw:glue-points", draw_glue_points_);
CP_XML_ATTR_OPT(L"draw:mirror-vertical", draw_mirror_vertical_);
CP_XML_ATTR_OPT(L"draw:mirror-horizontal", draw_mirror_horizontal_);

View File

@ -316,19 +316,21 @@ CP_REGISTER_OFFICE_ELEMENT2(draw_handle);
class draw_enhanced_geometry_attlist
{
public:
_CP_OPT(std::wstring) draw_type_;
_CP_OPT(std::wstring) draw_modifiers_;
_CP_OPT(std::wstring) draw_enhanced_path_;
_CP_OPT(std::wstring) draw_text_areas_;
_CP_OPT(std::wstring) draw_glue_points_;
_CP_OPT(std::wstring) draw_type_;
_CP_OPT(std::wstring) draw_modifiers_;
_CP_OPT(std::wstring) draw_enhanced_path_;
_CP_OPT(std::wstring) draw_text_areas_;
_CP_OPT(std::wstring) draw_glue_points_;
_CP_OPT(odf_types::Bool) draw_mirror_vertical_;
_CP_OPT(odf_types::Bool) draw_mirror_horizontal_;
_CP_OPT(std::wstring) draw_sub_view_size_;
_CP_OPT(odf_types::Bool) draw_mirror_vertical_;
_CP_OPT(odf_types::Bool) draw_mirror_horizontal_;
_CP_OPT(odf_types::Bool) draw_text_path_;
_CP_OPT(odf_types::Bool) draw_text_path_same_letter_heights_;
_CP_OPT(std::wstring) draw_text_path_mode_;
_CP_OPT(std::wstring) draw_text_path_scale_;
_CP_OPT(odf_types::Bool) draw_text_path_;
_CP_OPT(odf_types::Bool) draw_text_path_same_letter_heights_;
_CP_OPT(std::wstring) draw_text_path_mode_;
_CP_OPT(std::wstring) draw_text_path_scale_;
void serialize(CP_ATTR_NODE);
};

View File

@ -96,7 +96,7 @@ void odf_comment_context::start_comment(office_element_ptr &elm, int oox_id)
impl_->comments_.push_back(state);
impl_->comments_.back().elements_.push_back(elm);//"0" - root comment eleemnt
impl_->comments_.back().oox_id = oox_id;
impl_->comments_.back().oox_id = oox_id < 0 ? impl_->comments_.back().elements_.size() : oox_id;
impl_->comments_.back().odf_name = L"comment_" + boost::lexical_cast<std::wstring>(oox_id);
impl_->comments_.back().is_started = false;
@ -159,14 +159,14 @@ std::wstring odf_comment_context::find_name_by_id(int oox_id)
}
bool odf_comment_context::is_started()
{
if (impl_->comments_.size()>0)
if (!impl_->comments_.empty())
return impl_->comments_.back().is_started;
else return false;
}
void odf_comment_context::set_author(std::wstring author)
{
if ((impl_->comments_.size()<1) || !is_started()) return;
if ((impl_->comments_.empty()) || !is_started()) return;
office_element_ptr elm;
create_element(L"dc", L"creator", elm, impl_->odf_context_);
@ -178,11 +178,15 @@ void odf_comment_context::set_author(std::wstring author)
impl_->comments_.back().elements_[0]->add_child_element(elm);
impl_->comments_.back().elements_.push_back(elm);
}
void odf_comment_context::set_initials(std::wstring initials)
{
if ((impl_->comments_.empty()) || !is_started()) return;
}
void odf_comment_context::set_date(std::wstring _date)
{
if ((impl_->comments_.size()<1) || !is_started()) return;
if ((impl_->comments_.empty()) || !is_started()) return;
office_element_ptr elm;
create_element(L"dc", L"date", elm, impl_->odf_context_);
@ -195,5 +199,18 @@ void odf_comment_context::set_date(std::wstring _date)
impl_->comments_.back().elements_[0]->add_child_element(elm);
impl_->comments_.back().elements_.push_back(elm);
}
void odf_comment_context::set_position (double x, double y)
{
if ((impl_->comments_.empty()) || !is_started()) return;
office_annotation* comm = dynamic_cast<office_annotation*>(impl_->comments_.back().elements_.back().get());
if (comm)
{
comm->office_annotation_attr_.svg_x_ = odf_types::length(x, odf_types::length::pt);
comm->office_annotation_attr_.svg_y_ = odf_types::length(y, odf_types::length::pt);
}
}
}
}

View File

@ -66,8 +66,11 @@ public:
void start_comment_content ();
void end_comment_content ();
void set_author (std::wstring author);
void set_date (std::wstring author);
void set_author (std::wstring author);
void set_initials (std::wstring author);
void set_date (std::wstring author);
void set_position (double x, double y);
private:
std::wstring find_name_by_id(int oox_id);

View File

@ -262,6 +262,7 @@ void odf_conversion_context::process_settings(_object & object, bool isRoot)
void odf_conversion_context::process_styles(_object & object, bool isRoot)
{
create_element(L"office", L"styles", object.styles, this, true);//общие стили
object.style_context->process_office_styles(object.styles.back());
page_layout_context()->process_office_styles(object.styles.back());
@ -288,7 +289,14 @@ office_element_ptr odf_conversion_context::start_tabs()
create_element(L"style", L"tab-stops", temporary_.elm, this,true);
return temporary_.elm;
}
std::wstring odf_conversion_context::add_image(const std::wstring & image_file_name)
{
std::wstring odf_ref_name ;
mediaitems()->add_or_find(image_file_name,_mediaitems::typeImage, odf_ref_name);
return odf_ref_name;
}
void odf_conversion_context::add_tab(_CP_OPT(int) type, _CP_OPT(length) _length, _CP_OPT(int) leader)
{
if (!temporary_.elm) return;

View File

@ -95,7 +95,7 @@ public:
virtual void start_text_context() = 0;
virtual void end_text_context() = 0;
virtual void start_image(const std::wstring & image_file_name) = 0;
std::wstring add_image(const std::wstring & image_file_name);
virtual odf_style_context * styles_context();

View File

@ -76,7 +76,7 @@ struct odf_group_state
scale_cx = scale_cy = 1.;
flipH = flipV = false;
elm = elm_;
elm = elm_;
level = level_;
prev_group = prev;
@ -185,19 +185,19 @@ struct odf_drawing_state
presentation_class_ = boost::none;
presentation_placeholder_ = boost::none;
rotateAngle = boost::none;
rotateAngle_ = boost::none;
path_ = L"";
view_box_ = L"";
path_last_command_ = L"";
modifiers_ = L"";
oox_shape_preset = -1;
oox_shape_preset_ = -1;
oox_shape_.reset();
in_group = false;
text_box_tableframe = false;
in_group_ = false;
text_box_tableframe_= false;
flipH = flipV = false;
flipH_ = flipV_ = false;
}
std::vector<odf_element_state> elements_;
@ -207,29 +207,29 @@ struct odf_drawing_state
_CP_OPT(length) svg_height_;
_CP_OPT(length) svg_width_;
bool flipH_;
bool flipV_;
std::wstring name_;
std::wstring description_;
int z_order_;
bool hidden_;
_CP_OPT(double) rotateAngle;
_CP_OPT(double) rotateAngle_;
_CP_OPT(unsigned int) fill_color_;
_CP_OPT(presentation_class) presentation_class_;
_CP_OPT(std::wstring) presentation_placeholder_;
bool flipH;
bool flipV;
std::wstring path_;
std::wstring view_box_;
std::wstring path_last_command_;
std::wstring modifiers_;
std::wstring path_;
std::wstring view_box_;
std::wstring path_last_command_;
oox_shape_ptr oox_shape_;
///////////////////////
int oox_shape_preset;
bool in_group;
bool text_box_tableframe;
int oox_shape_preset_;
bool in_group_;
bool text_box_tableframe_;
};
class odf_drawing_context::Impl
@ -462,7 +462,7 @@ void odf_drawing_context::start_drawing()
//else
if (impl_->current_level_.size() > 0)
{
impl_->current_drawing_state_.in_group = true;
impl_->current_drawing_state_.in_group_ = true;
}
}
@ -510,20 +510,20 @@ void odf_drawing_context::end_drawing()
std::wstring strTransform;
if (impl_->current_drawing_state_.in_group && impl_->current_group_)
if (impl_->current_drawing_state_.in_group_ && impl_->current_group_)
{
double rotate = impl_->current_group_->rotate;
if (impl_->current_drawing_state_.rotateAngle )
rotate += *impl_->current_drawing_state_.rotateAngle;
if (impl_->current_drawing_state_.rotateAngle_)
rotate += *impl_->current_drawing_state_.rotateAngle_;
if (fabs(rotate)>0.001)impl_->current_drawing_state_.rotateAngle = rotate;
if (fabs(rotate)>0.001)impl_->current_drawing_state_.rotateAngle_ = rotate;
}
double x = impl_->current_drawing_state_.svg_x_ ? impl_->current_drawing_state_.svg_x_->get_value() : 0;
double y = impl_->current_drawing_state_.svg_y_ ? impl_->current_drawing_state_.svg_y_->get_value() : 0;
if (impl_->current_drawing_state_.rotateAngle)
if (impl_->current_drawing_state_.rotateAngle_)
{
if (impl_->current_drawing_state_.in_group)
if (impl_->current_drawing_state_.in_group_)
{
if (impl_->current_drawing_state_.svg_width_ && impl_->current_drawing_state_.svg_height_)
{
@ -533,7 +533,7 @@ void odf_drawing_context::end_drawing()
}
}
strTransform += std::wstring(L"rotate(") + boost::lexical_cast<std::wstring>(impl_->current_drawing_state_.rotateAngle.get()) + std::wstring(L")");
strTransform += std::wstring(L"rotate(") + boost::lexical_cast<std::wstring>(impl_->current_drawing_state_.rotateAngle_.get()) + std::wstring(L")");
//так как вращения все в мс относительно центра фигуры, а не от начала координат - убираем смещение
if (impl_->current_drawing_state_.svg_x_ && impl_->current_drawing_state_.svg_y_)
@ -577,14 +577,14 @@ void odf_drawing_context::end_drawing()
placeholder->svg_height_ = impl_->current_drawing_state_.svg_height_;
placeholder->svg_width_ = impl_->current_drawing_state_.svg_width_;
}
if (impl_->current_drawing_state_.in_group)
if (impl_->current_drawing_state_.in_group_)
{
odf_group_state_ptr gr = impl_->current_group_;
while(gr)
{
impl_->current_drawing_state_.flipH = impl_->current_drawing_state_.flipH ^ gr->flipH;
impl_->current_drawing_state_.flipV = impl_->current_drawing_state_.flipV ^ gr->flipV;
impl_->current_drawing_state_.flipH_ = impl_->current_drawing_state_.flipH_ ^ gr->flipH;
impl_->current_drawing_state_.flipV_ = impl_->current_drawing_state_.flipV_ ^ gr->flipV;
gr = gr->prev_group;
}
@ -595,8 +595,8 @@ void odf_drawing_context::end_drawing()
draw_enhanced_geometry* enhan = dynamic_cast<draw_enhanced_geometry*>(custom->draw_enhanced_geometry_.get());
if(enhan)
{
if (impl_->current_drawing_state_.flipV) enhan->draw_enhanced_geometry_attlist_.draw_mirror_vertical_ = true;
if (impl_->current_drawing_state_.flipH) enhan->draw_enhanced_geometry_attlist_.draw_mirror_horizontal_ = true;
if (impl_->current_drawing_state_.flipV_) enhan->draw_enhanced_geometry_attlist_.draw_mirror_vertical_ = true;
if (impl_->current_drawing_state_.flipH_) enhan->draw_enhanced_geometry_attlist_.draw_mirror_horizontal_ = true;
}
}else
{
@ -616,7 +616,7 @@ void odf_drawing_context::end_drawing()
impl_->current_graphic_properties->common_horizontal_margin_attlist_.fo_margin_right_ = impl_->anchor_settings_.fo_margin_right_;
impl_->current_graphic_properties->common_vertical_margin_attlist_.fo_margin_bottom_ = impl_->anchor_settings_.fo_margin_bottom_;
if (draw && !impl_->current_drawing_state_.in_group)
if (draw && !impl_->current_drawing_state_.in_group_)
draw->common_draw_attlists_.shape_with_text_and_styles_.common_text_anchor_attlist_.type_ = impl_->anchor_settings_.anchor_type_;
impl_->current_graphic_properties->style_wrap_ = impl_->anchor_settings_.style_wrap_;
@ -713,7 +713,7 @@ void odf_drawing_context::Impl::create_draw_base(int type)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int level = current_level_.size();
if (current_level_.size()>0)
if (current_level_.size() > 0)
current_level_.back()->add_child_element(draw_elm);
current_level_.push_back(draw_elm);
@ -722,11 +722,14 @@ void odf_drawing_context::Impl::create_draw_base(int type)
current_drawing_state_.elements_.push_back(state);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if (type == 7)
current_drawing_state_.oox_shape_ = oox_shape_ptr(new oox_shape());
}
void odf_drawing_context::start_shape(int type)
{
impl_->current_drawing_state_.oox_shape_preset = type;
impl_->current_drawing_state_.oox_shape_preset_ = type;
if (type < sizeof(Shape_Types_Mapping)/sizeof(_sh_typ))
{
@ -738,7 +741,7 @@ void odf_drawing_context::start_shape(int type)
}
else if (type == 1001)
{
impl_->create_draw_base(6);//пока кастом .. потом переделать на path, что правильнее
impl_->create_draw_base(6); //path
}
else if (type == 2000)
{
@ -748,18 +751,27 @@ void odf_drawing_context::start_shape(int type)
{
start_image(L"");
}
else if (type > 2000 && type < 3000)
else if (type > 2000 && type < 3000) //custom text path
{
impl_->create_draw_base(7);
impl_->create_draw_base(7);
}
}
bool odf_drawing_context::is_wordart()
{
if (impl_->current_drawing_state_.oox_shape_preset_ > 2000 && impl_->current_drawing_state_.oox_shape_preset_ < 3000)
return true;
return false;
}
bool odf_drawing_context::change_text_box_2_wordart()
{
if (impl_->current_drawing_state_.oox_shape_preset > 2000 && impl_->current_drawing_state_.oox_shape_preset < 3000)
if (impl_->current_drawing_state_.oox_shape_preset_ > 2000 && impl_->current_drawing_state_.oox_shape_preset_ < 3000)
return true;
if (impl_->current_drawing_state_.text_box_tableframe) return false;
if (impl_->current_drawing_state_.presentation_class_) return false;
if (impl_->current_drawing_state_.text_box_tableframe_) return false;
if (impl_->current_drawing_state_.elements_.empty()) return false;
draw_text_box* t = dynamic_cast<draw_text_box*>(impl_->current_drawing_state_.elements_.back().elm.get());
@ -797,7 +809,7 @@ bool odf_drawing_context::change_text_box_2_wordart()
impl_->current_drawing_state_.elements_.erase(impl_->current_drawing_state_.elements_.end() - 2, impl_->current_drawing_state_.elements_.end());
impl_->current_drawing_state_.elements_.push_back( state);
impl_->current_drawing_state_.oox_shape_preset = 2031;//plain text
impl_->current_drawing_state_.oox_shape_preset_ = 2031;//plain text
if (sz == 2) impl_->root_element_ = draw_elm;
return true;
@ -808,11 +820,14 @@ void odf_drawing_context::end_shape()
if (impl_->current_drawing_state_.elements_.empty())
return;
if (impl_->current_drawing_state_.oox_shape_preset == 2000) return end_text_box();
if (impl_->current_drawing_state_.oox_shape_preset == 3000) return end_image();
if (impl_->current_drawing_state_.oox_shape_preset_ == 2000) return end_text_box();
if (impl_->current_drawing_state_.oox_shape_preset_ == 3000) return end_image();
//вторичные, вычисляемые свойства шейпов
bool line_always_present = false;
if (isLineShape())
{
impl_->current_graphic_properties->common_draw_fill_attlist_.draw_fill_ = draw_fill::none;
}
draw_path* path = dynamic_cast<draw_path*>(impl_->current_drawing_state_.elements_[0].elm.get());
if (path)
@ -821,10 +836,8 @@ void odf_drawing_context::end_shape()
set_viewBox( impl_->current_drawing_state_.svg_width_->get_value_unit(length::cm) * 1000,
impl_->current_drawing_state_.svg_height_->get_value_unit(length::cm) *1000);
if (impl_->current_drawing_state_.path_.length()>1) path->draw_path_attlist_.svg_d_ = impl_->current_drawing_state_.path_;
if (impl_->current_drawing_state_.view_box_.length()>1) path->draw_path_attlist_.svg_viewbox_ = impl_->current_drawing_state_.view_box_;
line_always_present = true;
if (!impl_->current_drawing_state_.path_.empty()) path->draw_path_attlist_.svg_d_ = impl_->current_drawing_state_.path_;
if (!impl_->current_drawing_state_.view_box_.empty()) path->draw_path_attlist_.svg_viewbox_ = impl_->current_drawing_state_.view_box_;
}
////////////////////////////////////////////////////////////////////////////////////////////
draw_line* line = dynamic_cast<draw_line*>(impl_->current_level_.back().get());
@ -845,7 +858,7 @@ void odf_drawing_context::end_shape()
impl_->current_drawing_state_.svg_x_ = boost::none;
impl_->current_drawing_state_.svg_y_ = boost::none;
if (impl_->current_drawing_state_.flipV)
if (impl_->current_drawing_state_.flipV_)
{
_CP_OPT(length) tmp;
@ -853,7 +866,7 @@ void odf_drawing_context::end_shape()
line->draw_line_attlist_.svg_y1_ = line->draw_line_attlist_.svg_y2_;
line->draw_line_attlist_.svg_y2_ = tmp;
}
if (impl_->current_drawing_state_.flipH)
if (impl_->current_drawing_state_.flipH_)
{
_CP_OPT(length) tmp;
@ -861,16 +874,14 @@ void odf_drawing_context::end_shape()
line->draw_line_attlist_.svg_x1_ = line->draw_line_attlist_.svg_x2_;
line->draw_line_attlist_.svg_x2_ = tmp;
}
line_always_present = true;
}
////////////////////////////////////////////////////////////////////////////////////
draw_connector* connector = dynamic_cast<draw_connector*>(impl_->current_level_.back().get());
if (connector)
{
if (!connector->draw_connector_attlist_.draw_type_) connector->draw_connector_attlist_.draw_type_ = L"line";
line_always_present = true;
if (!connector->draw_connector_attlist_.draw_type_)
connector->draw_connector_attlist_.draw_type_ = L"line";
}
//////////////////////////////////////////////////////////////////////////////////////////////////
@ -880,19 +891,19 @@ void odf_drawing_context::end_shape()
std::wstring sub_type;
bool text_shape = false;
if (impl_->current_drawing_state_.oox_shape_preset < sizeof(Shape_Types_Mapping)/sizeof(_sh_typ))
if (impl_->current_drawing_state_.oox_shape_preset_ < sizeof(Shape_Types_Mapping)/sizeof(_sh_typ))
{
sub_type = Shape_Types_Mapping[impl_->current_drawing_state_.oox_shape_preset].first;
sub_type = Shape_Types_Mapping[impl_->current_drawing_state_.oox_shape_preset_].first;
}
else if (impl_->current_drawing_state_.oox_shape_preset > 2000 && impl_->current_drawing_state_.oox_shape_preset < 3000)// 3000 - все равно сюда не попадет
else if (impl_->current_drawing_state_.oox_shape_preset_ > 2000 && impl_->current_drawing_state_.oox_shape_preset_ < 3000)// 3000 - все равно сюда не попадет
{
text_shape = true;
}
else
{
sub_type = L"polyline";
line_always_present = true;
}
//else
//{
// sub_type = L"polyline";
// line_always_present = true;
//}
office_element_ptr enhanced_elm;
create_element(L"draw", L"enhanced-geometry", enhanced_elm, impl_->odf_context_);
@ -906,52 +917,50 @@ void odf_drawing_context::end_shape()
{
enhanced->draw_enhanced_geometry_attlist_.draw_text_path_same_letter_heights_ = false;
enhanced->draw_enhanced_geometry_attlist_.draw_text_path_scale_ = L"path" ;
enhanced->draw_enhanced_geometry_attlist_.draw_text_path_mode_ = L"shape" ;
enhanced->draw_enhanced_geometry_attlist_.draw_text_path_ = true;
enhanced->draw_enhanced_geometry_attlist_.draw_text_path_mode_ = L"shape" ;
enhanced->draw_enhanced_geometry_attlist_.draw_text_path_ = true;
}
if (impl_->current_drawing_state_.path_.length()>1)
if (!impl_->current_drawing_state_.path_.empty())
{
enhanced->draw_enhanced_geometry_attlist_.draw_enhanced_path_ =impl_->current_drawing_state_.path_;
}
if (impl_->current_drawing_state_.view_box_.length()>1)
if (!impl_->current_drawing_state_.view_box_.empty())
{
enhanced->svg_viewbox_ = impl_->current_drawing_state_.view_box_;
}
if (sub_type.length()>1)
if (!sub_type.empty())
{
enhanced->draw_enhanced_geometry_attlist_.draw_type_ = sub_type;
int res=0;
if ((res = sub_type.find(L"ooxml")) >= 0 && impl_->current_drawing_state_.modifiers_.length()>1)
{
enhanced->draw_enhanced_geometry_attlist_.draw_modifiers_ = impl_->current_drawing_state_.modifiers_;
}
}
else
{
oox_shape_ptr shape_define = oox_shape::create(impl_->current_drawing_state_.oox_shape_preset);
oox_shape_ptr shape_define = oox_shape::create(impl_->current_drawing_state_.oox_shape_preset_);
if (!shape_define) shape_define = impl_->current_drawing_state_.oox_shape_;
if (shape_define)
{
enhanced->svg_viewbox_ = shape_define->view_box;
enhanced->draw_enhanced_geometry_attlist_.draw_type_ = shape_define->odf_type_name;
enhanced->draw_enhanced_geometry_attlist_.draw_text_areas_ = shape_define->text_areas;
if (shape_define->glue_points)
{
enhanced->draw_enhanced_geometry_attlist_.draw_glue_points_ = *shape_define->glue_points;
}
enhanced->svg_viewbox_ = shape_define->view_box;
enhanced->draw_enhanced_geometry_attlist_.draw_type_ = shape_define->odf_type_name;
enhanced->draw_enhanced_geometry_attlist_.draw_text_areas_ = shape_define->text_areas;
enhanced->draw_enhanced_geometry_attlist_.draw_glue_points_ = shape_define->glue_points;
enhanced->draw_enhanced_geometry_attlist_.draw_sub_view_size_ = shape_define->sub_view_size;
if (impl_->current_drawing_state_.modifiers_.length()>1)
if (impl_->current_drawing_state_.oox_shape_ && !impl_->current_drawing_state_.oox_shape_->modifiers.empty())
{
enhanced->draw_enhanced_geometry_attlist_.draw_modifiers_ = impl_->current_drawing_state_.modifiers_;
enhanced->draw_enhanced_geometry_attlist_.draw_modifiers_ = impl_->current_drawing_state_.oox_shape_->modifiers;
}
else // обязательно нужны дефолтовые
enhanced->draw_enhanced_geometry_attlist_.draw_modifiers_ = shape_define->modifiers;
enhanced->draw_enhanced_geometry_attlist_.draw_enhanced_path_ = shape_define->enhanced_path;
if (!shape_define->enhanced_path.empty())
enhanced->draw_enhanced_geometry_attlist_.draw_enhanced_path_ = shape_define->enhanced_path;
else
enhanced->draw_enhanced_geometry_attlist_.draw_enhanced_path_ = impl_->current_drawing_state_.path_;
for (size_t i = 0; i < shape_define->equations.size();i++)
for (size_t i = 0; i < shape_define->equations.size(); i++)
{
office_element_ptr elm_eq;
create_element(L"draw", L"equation", elm_eq, impl_->odf_context_);
@ -965,7 +974,7 @@ void odf_drawing_context::end_shape()
end_element();
}
//-----------------------------
for (size_t i = 0; i < shape_define->handles.size();i++)
for (size_t i = 0; i < shape_define->handles.size(); i++)
{
office_element_ptr elm_h;
create_element(L"draw", L"handle", elm_h, impl_->odf_context_);
@ -988,7 +997,38 @@ void odf_drawing_context::end_shape()
}
end_element();
}
void odf_drawing_context::corrected_line_fill()
bool odf_drawing_context::isLineShape()
{
if (impl_->current_level_.empty()) return false;
draw_line* line = dynamic_cast<draw_line*>(impl_->current_level_.back().get());
if (line) return true;
draw_connector* connector = dynamic_cast<draw_connector*>(impl_->current_level_.back().get());
if (connector) return true;
draw_path* path = dynamic_cast<draw_path*>(impl_->current_level_.back().get());
if (path) return true;
switch(impl_->current_drawing_state_.oox_shape_preset_)
{
case 20: //SimpleTypes::shapetypeBentConnector2:
case 21: //SimpleTypes::shapetypeBentConnector3:
case 22: //SimpleTypes::shapetypeBentConnector4:
case 23: //SimpleTypes::shapetypeBentConnector5:
case 47: //SimpleTypes::shapetypeCurvedConnector2:
case 48: //SimpleTypes::shapetypeCurvedConnector3:
case 49: //SimpleTypes::shapetypeCurvedConnector4:
case 50: //SimpleTypes::shapetypeCurvedConnector5:
return true;
default:
return false;
}
return false;
}
void odf_drawing_context::corrected_line_fill() //for vml objects
{
if (!impl_->current_graphic_properties)return;
@ -1246,10 +1286,12 @@ void odf_drawing_context::set_path(std::wstring path_string)
//boost::replace_all(path_string, L",,", L" 0 ");
//boost::replace_all(path_string, L" -", L"-");
//boost::replace_all(path_string, L",", L"0"); // нужен разбор
//impl_->current_drawing_state_.path_ = path_string;
impl_->current_drawing_state_.path_ = path_string;
}
void odf_drawing_context::add_path_element(std::wstring command, const std::wstring & strE)
void odf_drawing_context::add_path_element(std::wstring command, std::wstring strE)
{
XmlUtils::replace_all(strE, L"gd", L"?f");
if (command != impl_->current_drawing_state_.path_last_command_)
{
impl_->current_drawing_state_.path_ += command;
@ -1258,19 +1300,179 @@ void odf_drawing_context::add_path_element(std::wstring command, const std::wstr
impl_->current_drawing_state_.path_last_command_ = command;
}
if (command != L"N")
impl_->current_drawing_state_.path_ += strE + L" ";
else
impl_->current_drawing_state_.path_ += strE;
impl_->current_drawing_state_.path_ += strE + L" ";
if (command == L"N")
impl_->current_drawing_state_.path_last_command_.clear();
}
void odf_drawing_context::add_modifier(std::wstring modifier)
void odf_drawing_context::add_modifier (std::wstring modifier)
{
if (!impl_->current_drawing_state_.oox_shape_) return;
boost::algorithm::to_lower(modifier);
int res = modifier.find(L"val ");
if (res >=0) modifier = modifier.substr(4);
impl_->current_drawing_state_.modifiers_ += modifier + L" ";
impl_->current_drawing_state_.oox_shape_->modifiers += modifier + L" ";
}
void odf_drawing_context::set_viewBox(double W, double H)
int GetFormulaType2(const WCHAR& c1, const WCHAR& c2)
{
switch (c1)
{
case (WCHAR)'*': return 0;
case (WCHAR)'+': return ((WCHAR)'-' == c2) ? 1 : 2;
case (WCHAR)'?': return 3;
case (WCHAR)'a': return ((WCHAR)'b' == c2) ? 4 : 5;
case (WCHAR)'c': return ((WCHAR)'a' == c2) ? 6 : 7;
case (WCHAR)'m': return ((WCHAR)'a' == c2) ? 8 : (((WCHAR)'i' == c2) ? 16 : 9);
case (WCHAR)'p': return 10;
case (WCHAR)'s': return ((WCHAR)'a' == c2) ? 11 : (((WCHAR)'i' == c2) ? 12 : 13);
case (WCHAR)'t': return 14;
case (WCHAR)'v': return 15;
default:
break;
}
return 0;
}
void odf_drawing_context::set_textarea (std::wstring l, std::wstring t, std::wstring r, std::wstring b)
{
if (!impl_->current_drawing_state_.oox_shape_) return;
impl_->current_drawing_state_.oox_shape_->text_areas = l + L" " + t + L" " + r + L" " + b;
XmlUtils::replace_all(impl_->current_drawing_state_.oox_shape_->text_areas, L"gd", L"?f");
}
void odf_drawing_context::add_handle (std::wstring x, std::wstring y, std::wstring refX, std::wstring refY,
std::wstring minX, std::wstring maxX, std::wstring minY, std::wstring maxY)
{
if (!impl_->current_drawing_state_.oox_shape_) return;
oox_shape::_handle h;
XmlUtils::replace_all(x, L"gd", L"?f");
XmlUtils::replace_all(y, L"gd", L"?f");
h.position = x + L" " + y;
if (!maxX.empty()) h.x_maximum= maxX;
if (!minX.empty()) h.x_minimum= minX;
if (!maxY.empty()) h.y_maximum= maxY;
if (!minY.empty()) h.y_minimum= minY;
impl_->current_drawing_state_.oox_shape_->handles.push_back(h);
}
void odf_drawing_context::add_formula (std::wstring name, std::wstring fmla)
{
if (!impl_->current_drawing_state_.oox_shape_) return;
size_t nStart = 0;
size_t nCurrent = 0;
const wchar_t* pData = fmla.c_str();
int nFound = 0, x = 0, y = 0;
std::wstring val[4];
while (nCurrent < fmla.length())
{
if (pData[nCurrent] == (WCHAR)' ')
{
if (nStart < nCurrent)
{
if (0 == nFound)
{
if ((nCurrent - nStart) > 1)
{
x = GetFormulaType2(pData[nStart], pData[nStart + 1]);
}
else
{
x = 0;
}
}
else
{
val[nFound-1] = std::wstring( pData + nStart, (ULONG)(nCurrent - nStart));
}
nStart = nCurrent + 1;
++nFound;
}
}
++nCurrent;
}
if (nStart < nCurrent)
{
if (0 == nFound)
{
if ((nCurrent - nStart) > 1)
{
y = GetFormulaType2(pData[nStart], pData[nStart + 1]);
}
else
{
y = 0;
}
}
else
{
val[nFound-1] = std::wstring( pData + nStart, (ULONG)(nCurrent - nStart));
}
}
std::wstring odf_fmla = L"";
switch(x)
{
case 0:
odf_fmla = val[0] + L"*" + val[1] + L"/" + val[2];
break;
case 1:
odf_fmla = val[0] + L"+" + val[1] + L"-" + val[2];
break;
case 2:
odf_fmla = val[0] + L"+" + val[1];
break;
case 3:
odf_fmla = L"if(";
for (int i = 0; i < nFound - 1; i++)
{
odf_fmla += val[i] + L",";
}
odf_fmla += val[nFound-1] + L")"; break;
case 4:
odf_fmla = L"abs(" + val[0] + L")";
break;
case 7:
odf_fmla = val[0] + L"*cos(pi*(" + val[1] + L")/10800000)";
break;
case 12:
odf_fmla = val[0] + L"*sin(pi*(" + val[1] + L")/10800000)";
break;
case 13:
odf_fmla = L"sqrt(" + val[0] + L")";
break;
case 15:
odf_fmla = val[0];
break;
default:
odf_fmla = fmla;
break;
}
//XmlUtils::replace_all(odf_fmla, L"gd", L"?f");
XmlUtils::replace_all(odf_fmla, L"h", L"logheight");
XmlUtils::replace_all(odf_fmla, L"w", L"logwidth");
XmlUtils::replace_all(odf_fmla, L"adj", L"$");
//XmlUtils::replace_all(name, L"gd", L"f");
impl_->current_drawing_state_.oox_shape_->add(name, odf_fmla);
}
void odf_drawing_context::set_viewBox (double W, double H)
{
if (W < 0.01)
{
@ -1282,11 +1484,19 @@ void odf_drawing_context::set_viewBox(double W, double H)
if (impl_->current_drawing_state_.svg_height_)
H = impl_->current_drawing_state_.svg_height_->get_value_unit(length::emu);
}
impl_->current_drawing_state_.view_box_ = std::wstring(L"0 0 ") + boost::lexical_cast<std::wstring>((int)W) + L" " + boost::lexical_cast<std::wstring>((int)H);
impl_->current_drawing_state_.view_box_ = std::wstring(L"0 0 ") + std::to_wstring((int)W) + L" " + std::to_wstring((int)H);
if (impl_->current_drawing_state_.oox_shape_)
{
if (impl_->current_drawing_state_.oox_shape_->sub_view_size)
impl_->current_drawing_state_.oox_shape_->sub_view_size = *impl_->current_drawing_state_.oox_shape_->sub_view_size + L" " + std::to_wstring((int)W) + L" " + std::to_wstring((int)H);
else
impl_->current_drawing_state_.oox_shape_->sub_view_size = std::to_wstring((int)W) + L" " + std::to_wstring((int)H);
}
}
void odf_drawing_context::set_flip_H(bool bVal)
{
impl_->current_drawing_state_.flipH = bVal;
impl_->current_drawing_state_.flipH_ = bVal;
if (impl_->current_graphic_properties == NULL) return;
if (bVal == false)return;
@ -1298,7 +1508,7 @@ void odf_drawing_context::set_flip_H(bool bVal)
}
void odf_drawing_context::set_flip_V(bool bVal)
{
impl_->current_drawing_state_.flipV = bVal;
impl_->current_drawing_state_.flipV_ = bVal;
if (impl_->current_graphic_properties == NULL) return;
if (bVal == false)return;
@ -1313,7 +1523,7 @@ void odf_drawing_context::set_rotate(double dVal)
{
if (dVal > 180) dVal = dVal - 360;
double dRotate = dVal / 180. * 3.14159265358979323846;
impl_->current_drawing_state_.rotateAngle = dRotate;
impl_->current_drawing_state_.rotateAngle_ = dRotate;
}
void odf_drawing_context::set_drawings_rect(_CP_OPT(double) x_pt, _CP_OPT(double) y_pt, _CP_OPT(double) width_pt, _CP_OPT(double) height_pt)// "- 1" не задано
@ -1542,7 +1752,7 @@ void odf_drawing_context::set_group_flip_V(bool bVal)
{
if ( impl_->group_list_.empty() )return;
impl_->current_group_->flipV= bVal;
impl_->current_group_->flipV = bVal;
}
void odf_drawing_context::set_group_z_order(int Val)
{
@ -1567,7 +1777,7 @@ void odf_drawing_context::set_group_flip_H(bool bVal)
{
if ( impl_->group_list_.empty() )return;
impl_->current_group_->flipH= bVal;
impl_->current_group_->flipH = bVal;
}
void odf_drawing_context::set_group_rotate(int iVal)
@ -1594,14 +1804,14 @@ void odf_drawing_context::set_position_line(_CP_OPT(double) & x_pt, _CP_OPT(doub
draw_line* line = dynamic_cast<draw_line*>(impl_->current_level_.back().get());
if (line == NULL) return;
if (impl_->current_drawing_state_.in_group && impl_->current_group_ && x_pt)
if (impl_->current_drawing_state_.in_group_ && impl_->current_group_ && x_pt)
x_pt = *x_pt * impl_->current_group_->scale_cx + impl_->current_group_->shift_x ;
// + (impl_->current_group_->flipH ? (impl_->current_group_->cx - 2 * x_pt): 0);
if (x_pt && !line->draw_line_attlist_.svg_x1_)
line->draw_line_attlist_.svg_x1_ = length(length(*x_pt,length::pt).get_value_unit(length::cm),length::cm);
if (impl_->current_drawing_state_.in_group && impl_->current_group_ && y_pt)
if (impl_->current_drawing_state_.in_group_ && impl_->current_group_ && y_pt)
y_pt = *y_pt * impl_->current_group_->scale_cy + impl_->current_group_->shift_y;
//+ (impl_->current_group_->flipV ? (impl_->current_group_->cy - 2 * y_pt): 0);
@ -1609,13 +1819,13 @@ void odf_drawing_context::set_position_line(_CP_OPT(double) & x_pt, _CP_OPT(doub
line->draw_line_attlist_.svg_y1_ = length(length(*y_pt,length::pt).get_value_unit(length::cm),length::cm);
///////////////////////////////////////
if (impl_->current_drawing_state_.in_group && impl_->current_group_ && x2_pt)
if (impl_->current_drawing_state_.in_group_ && impl_->current_group_ && x2_pt)
x2_pt = *x2_pt * impl_->current_group_->scale_cx + impl_->current_group_->shift_x ;
// + (impl_->current_group_->flipH ? (impl_->current_group_->cx - 2 * x_pt): 0);
if (x2_pt && !line->draw_line_attlist_.svg_x2_) line->draw_line_attlist_.svg_x2_ = length(length(*x2_pt,length::pt).get_value_unit(length::cm),length::cm);
if (impl_->current_drawing_state_.in_group && impl_->current_group_ && y2_pt)
if (impl_->current_drawing_state_.in_group_ && impl_->current_group_ && y2_pt)
y2_pt = *y2_pt * impl_->current_group_->scale_cy + impl_->current_group_->shift_y;
//+ (impl_->current_group_->flipV ? (impl_->current_group_->cy - 2 * y_pt): 0);
@ -1641,14 +1851,14 @@ void odf_drawing_context::set_position(_CP_OPT(double) & x_pt, _CP_OPT(double) &
{
double x = *x_pt;
if (impl_->current_drawing_state_.in_group)
if (impl_->current_drawing_state_.in_group_)
{
for( int i = impl_->group_list_.size() - 1; i >= 0 ; i--)
{
x = (x + impl_->group_list_[i]->shift_x) * impl_->group_list_[i]->scale_cx ;
}
}
if (!impl_->current_drawing_state_.svg_x_ || impl_->current_drawing_state_.in_group)
if (!impl_->current_drawing_state_.svg_x_ || impl_->current_drawing_state_.in_group_)
{
impl_->current_drawing_state_.svg_x_ = length(length(x , length::pt).get_value_unit(length::cm), length::cm);
}
@ -1658,7 +1868,7 @@ void odf_drawing_context::set_position(_CP_OPT(double) & x_pt, _CP_OPT(double) &
{
double y = *y_pt;
if (impl_->current_drawing_state_.in_group)
if (impl_->current_drawing_state_.in_group_)
{
for( int i = impl_->group_list_.size() - 1; i >= 0 ; i--)
{
@ -1666,7 +1876,7 @@ void odf_drawing_context::set_position(_CP_OPT(double) & x_pt, _CP_OPT(double) &
}
}
if (!impl_->current_drawing_state_.svg_y_ || impl_->current_drawing_state_.in_group)
if (!impl_->current_drawing_state_.svg_y_ || impl_->current_drawing_state_.in_group_)
{
impl_->current_drawing_state_.svg_y_ = length(length(y, length::pt).get_value_unit(length::cm),length::cm);
}
@ -1687,7 +1897,7 @@ void odf_drawing_context::get_size( _CP_OPT(double) & width_pt, _CP_OPT(double)
}
void odf_drawing_context::set_size( _CP_OPT(double) & width_pt, _CP_OPT(double) & height_pt)
{
if (impl_->current_drawing_state_.in_group)
if (impl_->current_drawing_state_.in_group_)
{
if (width_pt)
{
@ -1887,7 +2097,7 @@ void odf_drawing_context::set_textarea_font(std::wstring & latin, std::wstring &
if (!impl_->current_text_properties) return;
if (!ea.empty()) impl_->current_text_properties->content_.fo_font_family_ = ea;
if (!cs.empty()) impl_->current_text_properties->content_.style_font_family_complex_= cs;
if (!cs.empty()) impl_->current_text_properties->content_.style_font_family_complex_ = cs;
if (!latin.empty()) impl_->current_text_properties->content_.style_font_family_asian_ = latin;
}
@ -1929,7 +2139,7 @@ void odf_drawing_context::set_textarea_writing_mode(int mode)
style* style_ = NULL;
if(!draw->common_draw_attlists_.shape_with_text_and_styles_.common_shape_draw_attlist_.draw_text_style_name_)
{
impl_->styles_context_->create_style(L"",style_family::Paragraph, true, false, -1);
impl_->styles_context_->create_style(L"", style_family::Paragraph, true, false, -1);
office_element_ptr & style_shape_elm = impl_->styles_context_->last_state()->get_office_element();
style_ = dynamic_cast<style*>(style_shape_elm.get());
@ -1968,10 +2178,37 @@ void odf_drawing_context::set_textarea_writing_mode(int mode)
impl_->current_paragraph_properties->content_.style_writing_mode_ = odf_types::writing_mode(odf_types::writing_mode::LrTb);
break;
}
}
void odf_drawing_context::set_paragraph_properties(style_paragraph_properties *paragraph_properties)
{
if (impl_->current_drawing_state_.elements_.empty()) return;
if (!impl_->current_paragraph_properties)
{
draw_base* draw = dynamic_cast<draw_base*>(impl_->current_drawing_state_.elements_[0].elm.get());
if (draw)
{
if(!draw->common_draw_attlists_.shape_with_text_and_styles_.common_shape_draw_attlist_.draw_text_style_name_)
{
impl_->styles_context_->create_style(L"", style_family::Paragraph, true, false, -1);
office_element_ptr & style_shape_elm = impl_->styles_context_->last_state()->get_office_element();
style* style_ = dynamic_cast<style*>(style_shape_elm.get());
if (style_)
{
impl_->current_paragraph_properties = style_->content_.get_style_paragraph_properties();
draw->common_draw_attlists_.shape_with_text_and_styles_.common_shape_draw_attlist_.draw_text_style_name_ = style_->style_name_;
}
}
else
{
//??? find by name
}
}
}
if (impl_->current_paragraph_properties)
impl_->current_paragraph_properties ->apply_from(paragraph_properties);
}
void odf_drawing_context::set_textarea_padding(_CP_OPT(double) & left, _CP_OPT(double) & top, _CP_OPT(double) & right, _CP_OPT(double) & bottom)//in pt
{
if (!impl_->current_graphic_properties)return;
@ -2000,7 +2237,7 @@ void odf_drawing_context::start_image(std::wstring odf_path)
return;
}
impl_->current_drawing_state_.oox_shape_preset = 3000;
impl_->current_drawing_state_.oox_shape_preset_ = 3000;
start_frame();
@ -2047,7 +2284,7 @@ void odf_drawing_context::start_object(std::wstring name)
void odf_drawing_context::start_text_box()
{
impl_->current_drawing_state_.oox_shape_preset = 2000;
impl_->current_drawing_state_.oox_shape_preset_ = 2000;
start_frame();
@ -2092,7 +2329,7 @@ void odf_drawing_context::set_text_box_tableframe(bool val)
{
if (impl_->current_drawing_state_.elements_.empty()) return;
impl_->current_drawing_state_.text_box_tableframe = val;
impl_->current_drawing_state_.text_box_tableframe_ = val;
}
void odf_drawing_context::set_text_box_parent_style(std::wstring style_name)
@ -2218,7 +2455,7 @@ void odf_drawing_context::set_text(odf_text_context* text_context)
{
if (text_context == NULL || impl_->current_level_.size() < 1 ) return;
//if (impl_->is_presentation_ && *impl_->is_presentation_) return;
if (impl_->is_presentation_ && *impl_->is_presentation_) return;
for (size_t i = 0; i < text_context->text_elements_list_.size(); i++)
{
@ -2237,7 +2474,7 @@ void odf_drawing_context::set_text(odf_text_context* text_context)
}
if (impl_->current_drawing_state_.oox_shape_preset > 2000 && impl_->current_drawing_state_.oox_shape_preset < 3000)
if (impl_->current_drawing_state_.oox_shape_preset_ > 2000 && impl_->current_drawing_state_.oox_shape_preset_ < 3000)
{
//настройки цвета - перетащить в линии и заливки - так уж нужно wordart-у оо
style_text_properties *text_properties_ = text_context->get_text_properties();
@ -2747,7 +2984,7 @@ void odf_drawing_context::end_hatch_style()
void odf_drawing_context::start_bitmap_style()
{
if (!impl_->current_graphic_properties) return;
if (impl_->current_drawing_state_.oox_shape_preset == 3000) return;
if (impl_->current_drawing_state_.oox_shape_preset_ == 3000) return;
odf_writer::office_element_ptr fill_image_element;
@ -2843,7 +3080,7 @@ void odf_drawing_context::set_bitmap_link(std::wstring file_path)
std::wstring odf_ref_name ;
impl_->odf_context_->mediaitems()->add_or_find(file_path, _mediaitems::typeImage, odf_ref_name);
if (impl_->current_drawing_state_.oox_shape_preset == 3000)
if (impl_->current_drawing_state_.oox_shape_preset_ == 3000)
{
if (impl_->current_level_.size() < 1) return;

View File

@ -52,6 +52,7 @@ namespace odf_writer
class odf_conversion_context;
class odf_style_context;
class odf_text_context;
class style_paragraph_properties;
class odf_drawing_context
{
@ -124,21 +125,24 @@ public:
void start_frame ();
void end_frame ();
bool change_text_box_2_wordart();
void start_image (std::wstring file_path);
void start_image (std::wstring odf_file_path);
void end_image ();
bool change_text_box_2_wordart ();
bool is_wordart ();
void set_paragraph_properties (style_paragraph_properties *paragraph_properties);
void start_text_box ();
void set_text_box_min_size (bool val);
void set_text_box_min_size (double w_pt, double h_pt);
void set_text_box_parent_style (std::wstring style_name);
void set_text_box_tableframe (bool val);
void set_text_box_tableframe (bool val);
void end_text_box ();
void start_object(std::wstring name);
void end_object();
bool isLineShape();
void corrected_line_fill();
office_element_ptr & get_root_element();
@ -149,8 +153,12 @@ public:
bool is_exist_content();
//////////////////////////////////////////////////////////////////////////////////////
void set_path (std::wstring path_string);
void add_path_element (std::wstring command, const std::wstring & elm);
void add_path_element (std::wstring command, std::wstring elm);
void add_modifier (std::wstring modifier);
void add_formula (std::wstring name, std::wstring fmla);
void set_textarea (std::wstring l, std::wstring t, std::wstring r, std::wstring b);
void add_handle (std::wstring x, std::wstring y, std::wstring refX, std::wstring refY,
std::wstring minX, std::wstring maxX, std::wstring minY, std::wstring maxY);
void set_viewBox (double W, double H);

View File

@ -54,11 +54,12 @@ void odf_lists_styles_context::set_odf_context(odf_conversion_context * Context)
odf_context_ = Context;
}
void odf_lists_styles_context::process_styles(office_element_ptr root )
void odf_lists_styles_context::process_styles(office_element_ptr root, bool automatic)
{
for (size_t i = 0; i < lists_format_array_.size(); i++)
{
if (lists_format_array_[i].elements.size() < 1) continue;
if (lists_format_array_[i].elements.size() < 1) continue;
if (lists_format_array_[i].automatic != automatic) continue;
root->add_child_element(lists_format_array_[i].elements[0]);
}
@ -92,7 +93,13 @@ std::wstring odf_lists_styles_context::get_style_name1(int oox_style_num)
}
std::wstring odf_lists_styles_context::get_style_name(int oox_style_num)
{
if (link_format_map_.count(oox_style_num) > 0)
if (lists_format_array_.empty()) return L"";
if (oox_style_num < 0)
{
return lists_format_array_.back().odf_list_style_name;
}
else if (link_format_map_.count(oox_style_num) > 0)
{
return link_format_map_.at(oox_style_num);
}
@ -109,21 +116,30 @@ void odf_lists_styles_context::start_style(int based_number)
create_element(L"text", L"list-style", elm, odf_context_);
state.elements.push_back(elm);
state.oox_based_number = based_number;
state.odf_list_style_name = std::wstring(L"WWNum") + boost::lexical_cast<std::wstring>(based_number + 1);
if (based_number < 0)
{
state.oox_based_number = lists_format_array_.size();
state.odf_list_style_name = std::wstring(L"L") + boost::lexical_cast<std::wstring>(state.oox_based_number + 1);
state.automatic = true; //document automatic style
}
else
{
state.oox_based_number = based_number;
state.odf_list_style_name = std::wstring(L"WWNum") + boost::lexical_cast<std::wstring>(state.oox_based_number + 1);
state.automatic = false; //office style
}
text_list_style *style = dynamic_cast<text_list_style *>(elm.get());
if (style == NULL)return;
style->text_list_style_attr_.style_name_ = state.odf_list_style_name;
lists_format_array_.push_back(state); //перенести в end??
}
style_list_level_properties * odf_lists_styles_context::get_list_level_properties()
{
if (lists_format_array_.size() < 1) return NULL;
if (lists_format_array_.back().elements.size() <1) return NULL;
if (lists_format_array_.empty()) return NULL;
if (lists_format_array_.back().elements.empty()) return NULL;
text_list_level_style_number *style_number_ = dynamic_cast<text_list_level_style_number *>(lists_format_array_.back().elements.back().get());
text_list_level_style_bullet *style_bullet_ = dynamic_cast<text_list_level_style_bullet *>(lists_format_array_.back().elements.back().get());
@ -156,8 +172,8 @@ style_list_level_properties * odf_lists_styles_context::get_list_level_propertie
}
style_text_properties * odf_lists_styles_context::get_text_properties()
{
if (lists_format_array_.size() < 1) return NULL;
if (lists_format_array_.back().elements.size() <1) return NULL;
if (lists_format_array_.empty()) return NULL;
if (lists_format_array_.back().elements.empty()) return NULL;
text_list_level_style_number *style_number_ = dynamic_cast<text_list_level_style_number *>(lists_format_array_.back().elements.back().get());
text_list_level_style_bullet *style_bullet_ = dynamic_cast<text_list_level_style_bullet *>(lists_format_array_.back().elements.back().get());
@ -167,14 +183,14 @@ style_text_properties * odf_lists_styles_context::get_text_properties()
if (style_number_)
{
if (!style_number_->style_text_properties_)
create_element(L"style", L"text-properties",style_number_->style_text_properties_,odf_context_);
create_element(L"style", L"text-properties", style_number_->style_text_properties_, odf_context_);
props = dynamic_cast<style_text_properties *>(style_number_->style_text_properties_.get());
}
if (style_bullet_)
{
if (!style_bullet_->style_text_properties_)
create_element(L"style", L"text-properties",style_bullet_->style_text_properties_,odf_context_);
create_element(L"style", L"text-properties", style_bullet_->style_text_properties_, odf_context_);
props = dynamic_cast<style_text_properties *>(style_bullet_->style_text_properties_.get());
}
@ -190,8 +206,8 @@ style_text_properties * odf_lists_styles_context::get_text_properties()
style_list_level_label_alignment * odf_lists_styles_context::get_list_level_alignment_properties()
{
if (lists_format_array_.size() < 1) return NULL;
if (lists_format_array_.back().elements.size() <1) return NULL;
if (lists_format_array_.empty()) return NULL;
if (lists_format_array_.back().elements.empty()) return NULL;
text_list_level_style_number *style_number_ = dynamic_cast<text_list_level_style_number *>(lists_format_array_.back().elements.back().get());
text_list_level_style_bullet *style_bullet_ = dynamic_cast<text_list_level_style_bullet *>(lists_format_array_.back().elements.back().get());
@ -201,21 +217,21 @@ style_list_level_label_alignment * odf_lists_styles_context::get_list_level_alig
if (style_number_)
{
if (!style_number_->style_list_level_properties_)
create_element(L"style", L"list-level-properties",style_number_->style_list_level_properties_,odf_context_);
create_element(L"style", L"list-level-properties", style_number_->style_list_level_properties_, odf_context_);
props = dynamic_cast<style_list_level_properties *>(style_number_->style_list_level_properties_.get());
}
if (style_bullet_)
{
if (!style_bullet_->style_list_level_properties_)
create_element(L"style", L"list-level-properties",style_bullet_->style_list_level_properties_,odf_context_);
create_element(L"style", L"list-level-properties", style_bullet_->style_list_level_properties_, odf_context_);
props = dynamic_cast<style_list_level_properties *>(style_bullet_->style_list_level_properties_.get());
}
if (style_image_)
{
if (!style_image_->style_list_level_properties_)
create_element(L"style", L"list-level-properties",style_image_->style_list_level_properties_,odf_context_);
create_element(L"style", L"list-level-properties", style_image_->style_list_level_properties_, odf_context_);
props = dynamic_cast<style_list_level_properties *>(style_image_->style_list_level_properties_.get());
}
@ -223,14 +239,15 @@ style_list_level_label_alignment * odf_lists_styles_context::get_list_level_alig
if (!props->style_list_level_label_alignment_)
{
create_element(L"style", L"list-level-label-alignment" ,props->style_list_level_label_alignment_,odf_context_);
create_element(L"style", L"list-level-label-alignment" , props->style_list_level_label_alignment_, odf_context_);
}
return dynamic_cast<style_list_level_label_alignment *>(props->style_list_level_label_alignment_.get());
}
int odf_lists_styles_context::start_style_level(int level, int type)
{
if (lists_format_array_.size() < 1) return -1;
if (lists_format_array_.empty()) return -1;
int odf_type =1;
int format_type = -1;
@ -451,10 +468,10 @@ wchar_t convert_bullet_char(wchar_t c)
}
void odf_lists_styles_context::set_numeric_format(std::wstring val)
{
if (lists_format_array_.size() < 1) return;
if (lists_format_array_.back().elements.size() <1) return ;
if ( val.length() <1 )
return;
if ( lists_format_array_.empty() ) return;
if ( lists_format_array_.back().elements.empty() ) return;
if ( val.empty() ) return;
text_list_level_style_number *style_number_ = dynamic_cast<text_list_level_style_number *>(lists_format_array_.back().elements.back().get());
if (style_number_)
@ -522,10 +539,10 @@ void odf_lists_styles_context::set_numeric_format(std::wstring val)
}
void odf_lists_styles_context::set_bullet_char(std::wstring val)
{
if (lists_format_array_.size() < 1) return;
if (lists_format_array_.back().elements.size() <1) return ;
if ( val.length() <1 )
return;
if ( lists_format_array_.empty() ) return;
if ( lists_format_array_.back().elements.empty() ) return ;
if ( val.empty() ) return;
text_list_level_style_bullet *style_bullet_ = dynamic_cast<text_list_level_style_bullet *>(lists_format_array_.back().elements.back().get());
@ -536,20 +553,20 @@ void odf_lists_styles_context::set_bullet_char(std::wstring val)
void odf_lists_styles_context::set_bullet_image_size(double size)
{
if (size < 0.1) return;
if (lists_format_array_.size() < 1) return;
if (lists_format_array_.back().elements.size() <1) return ;
if (lists_format_array_.empty()) return;
if (lists_format_array_.back().elements.empty()) return ;
style_list_level_properties *props = get_list_level_properties();
if(!props) return;
props->fo_width_ = length(length(size,length::pt).get_value_unit(length::cm),length::cm);
props->fo_height_ = length(length(size,length::pt).get_value_unit(length::cm),length::cm);
props->fo_width_ = length(length(size, length::pt).get_value_unit(length::cm), length::cm);
props->fo_height_ = length(length(size, length::pt).get_value_unit(length::cm), length::cm);
}
void odf_lists_styles_context::set_bullet_image (std::wstring ref)
{
if (lists_format_array_.size() < 1) return;
if (lists_format_array_.back().elements.size() <1) return ;
if (lists_format_array_.empty()) return;
if (lists_format_array_.back().elements.empty()) return ;
text_list_level_style_image *style_image_ = dynamic_cast<text_list_level_style_image *>(lists_format_array_.back().elements.back().get());
@ -557,14 +574,14 @@ void odf_lists_styles_context::set_bullet_image (std::wstring ref)
style_image_->text_list_level_style_image_attr_.common_xlink_attlist_.href_ = ref;
style_image_->text_list_level_style_image_attr_.common_xlink_attlist_.type_= xlink_type::Simple;
style_image_->text_list_level_style_image_attr_.common_xlink_attlist_.show_ = xlink_show::Embed;
style_image_->text_list_level_style_image_attr_.common_xlink_attlist_.actuate_= xlink_actuate::OnLoad;
style_image_->text_list_level_style_image_attr_.common_xlink_attlist_.type_ = xlink_type::Simple;
style_image_->text_list_level_style_image_attr_.common_xlink_attlist_.show_ = xlink_show::Embed;
style_image_->text_list_level_style_image_attr_.common_xlink_attlist_.actuate_ = xlink_actuate::OnLoad;
}
void odf_lists_styles_context::set_start_number(int val)
{
if (lists_format_array_.size() < 1) return;
if (lists_format_array_.back().elements.size() <1) return ;
if (lists_format_array_.empty()) return;
if (lists_format_array_.back().elements.empty()) return ;
text_list_level_style_number *style_number_ = dynamic_cast<text_list_level_style_number *>(lists_format_array_.back().elements.back().get());
@ -574,8 +591,8 @@ void odf_lists_styles_context::set_start_number(int val)
}
void odf_lists_styles_context::set_text_style_name(std::wstring name)
{
if (lists_format_array_.size() < 1) return;
if (lists_format_array_.back().elements.size() <1) return ;
if (lists_format_array_.empty()) return;
if (lists_format_array_.back().elements.empty()) return ;
text_list_level_style_number *style_number_ = dynamic_cast<text_list_level_style_number *>(lists_format_array_.back().elements.back().get());
text_list_level_style_bullet *style_bullet_ = dynamic_cast<text_list_level_style_bullet *>(lists_format_array_.back().elements.back().get());

View File

@ -55,7 +55,7 @@ struct list_format_state
std::vector<office_element_ptr> elements;
std::wstring odf_list_style_name;
bool automatic;
};
class odf_lists_styles_context
@ -64,7 +64,7 @@ public:
odf_lists_styles_context();
void set_odf_context(odf_conversion_context * Context);
void start_style(int abstract_number);
void start_style(int abstract_number = -1);
int start_style_level(int level, int type);
style_list_level_properties * get_list_level_properties();
style_list_level_label_alignment * get_list_level_alignment_properties();
@ -84,9 +84,9 @@ public:
void add_style(int oox_style_num, int oox_based_num);
void process_styles(office_element_ptr root );
void process_styles(office_element_ptr root, bool automatic);
std::wstring get_style_name(int oox_style_num);
std::wstring get_style_name(int oox_style_num = -1);
std::wstring get_style_name1(int oox_style_num);
private:
std::vector<list_format_state> lists_format_array_;

View File

@ -161,6 +161,7 @@ void odf_style_context::process_automatic_styles(office_element_ptr root )
if (/*it->automatic_== true && */style_state_list_[i]->root_== false && style_state_list_[i]->odf_style_)
root->add_child_element(style_state_list_[i]->odf_style_);
}
lists_styles_context_.process_styles(root, true);
}
void odf_style_context::process_office_styles(office_element_ptr root )
@ -175,7 +176,7 @@ void odf_style_context::process_office_styles(office_element_ptr root )
root->add_child_element(style_state_list_[i]->odf_style_);
}
lists_styles_context_.process_styles(root );
lists_styles_context_.process_styles(root, false);
}
std::wstring odf_style_context::find_odf_style_name(int oox_id_style, style_family::type family, bool root, bool automatic)
{

View File

@ -56,7 +56,26 @@ odp_conversion_context::odp_conversion_context(package::odf_document * outputDoc
: odf_conversion_context (PresentationDocument, outputDocument), slide_context_(*this), text_context_(NULL)
{
}
odf_text_context* odp_conversion_context::text_context()
{
return text_context_;
}
odp_slide_context* odp_conversion_context::slide_context()
{
return &slide_context_;
}
odf_drawing_context* odp_conversion_context::drawing_context()
{
if (slide_context_.page_state_list_.empty()) return NULL;
return slide_context_.state().drawing_context();
}
odf_comment_context* odp_conversion_context::comment_context()
{
if (slide_context_.page_state_list_.empty()) return NULL;
return slide_context_.state().comment_context();
}
void odp_conversion_context::start_document()
{
@ -112,7 +131,7 @@ void odp_conversion_context::end_layout_slide()
void odp_conversion_context::start_text_context()
{
text_context_ = new odf_text_context(this);
text_context_->set_styles_context(slide_context_.get_styles_context());
}
void odp_conversion_context::end_text_context()
{
@ -128,13 +147,41 @@ void odp_conversion_context::end_drawings()
{
current_slide().drawing_context()->clear();
}
void odp_conversion_context::start_image(const std::wstring & image_file_name)
{
std::wstring odf_ref_name ;
mediaitems()->add_or_find(image_file_name,_mediaitems::typeImage,odf_ref_name);
current_slide().drawing_context()->start_image(odf_ref_name);
}
void odp_conversion_context::start_comment(int oox_comm_id)
{
office_element_ptr comm_elm;
create_element(L"office", L"annotation", comm_elm, this);
current_slide().comment_context()->start_comment(comm_elm, oox_comm_id);
current_slide().drawing_context()->start_drawing();
current_slide().drawing_context()->start_element(comm_elm);
}
void odp_conversion_context::start_comment_content()
{
current_slide().comment_context()->start_comment_content();
office_element_ptr & root_comm_element = current_slide().drawing_context()->get_current_element();
start_text_context();
text_context()->start_element(root_comm_element);
text_context()->start_paragraph();
}
void odp_conversion_context::end_comment_content()
{
text_context()->end_paragraph();
current_slide().comment_context()->end_comment_content();
text_context()->end_element();
end_text_context();
}
void odp_conversion_context::end_comment()
{
current_slide().drawing_context()->end_element();
current_slide().drawing_context()->end_drawing();
}
}
}

View File

@ -64,14 +64,18 @@ public:
virtual void start_text_context();
virtual void end_text_context();
virtual odf_drawing_context * drawing_context() {return current_slide().drawing_context();}
virtual odf_text_context * text_context() {return text_context_; }
odp_slide_context * slide_context() {return &slide_context_;}
virtual odf_drawing_context * drawing_context();
virtual odf_text_context * text_context();
odp_slide_context * slide_context();
odf_comment_context * comment_context();
void start_drawings();
void end_drawings();
virtual void start_image(const std::wstring & image_file_name);
void start_comment (int oox_comment_id);
void end_comment ();
void start_comment_content ();
void end_comment_content ();
private:
odp_slide_context slide_context_;

View File

@ -58,7 +58,7 @@ namespace odf_writer {
///////////////////////////////////////////////////////////////
odp_page_state::odp_page_state(odf_conversion_context * Context, office_element_ptr & elm)
: context_(Context), drawing_context_(Context)
: context_(Context), drawing_context_(Context), comment_context_(Context)
{
page_elm_ = elm;

View File

@ -40,11 +40,11 @@
#include"../../../Common/DocxFormat/Source/XML/Utils.h"
#include "odf_drawing_context.h"
#include "odf_comment_context.h"
#include "office_elements_create.h"
namespace cpdoccore {
namespace odf_types
@ -57,7 +57,6 @@ namespace odf_writer {
class odp_conversion_context;
class odf_text_context;
//class table_table;
class style;
@ -85,6 +84,7 @@ public:
///////////////////////////////
odf_drawing_context * drawing_context(){return &drawing_context_;}
odf_comment_context * comment_context(){return &comment_context_;}
std::wstring office_page_name_;
office_element_ptr page_elm_;
@ -94,6 +94,7 @@ private:
odf_conversion_context * context_;
odf_drawing_context drawing_context_;
odf_comment_context comment_context_;
friend class odp_slide_context;

View File

@ -53,6 +53,11 @@ void odp_slide_context::set_styles_context(odf_style_context* styles_context)
styles_context_ = styles_context;
}
odf_style_context* odp_slide_context::get_styles_context()
{
return styles_context_;
}
odp_page_state & odp_slide_context::state()
{
return page_state_list_.back();

View File

@ -53,11 +53,11 @@ public:
void start_page (office_element_ptr & elm);
void end_page ();
void set_styles_context (odf_style_context* styles_context);
void set_styles_context(odf_style_context* styles_context);
odf_style_context* get_styles_context();
odp_page_state & state();
odf_comment_context * comment_context();
odf_table_context * table_context();
void start_table ();

View File

@ -238,11 +238,11 @@ void ods_conversion_context::end_row()
//////////////////////
void ods_conversion_context::start_comment(int col, int row, std::wstring & author)
{
current_table().start_comment(col,row,author);
current_table().start_comment(col, row, author);
start_text_context();
////////////////
office_element_ptr paragr_elm;
create_element(L"text", L"p",paragr_elm,this);
create_element(L"text", L"p", paragr_elm, this);
current_text_context_->start_paragraph(paragr_elm);
}
@ -309,7 +309,7 @@ void ods_conversion_context::add_merge_cells(const std::wstring & ref)
void ods_conversion_context::start_cell(std::wstring & ref, int xfd_style)
{
int col=0, row=0;
int col = 0, row = 0;
utils::parsing_ref ( ref, col,row);
if (col > current_table().current_column()+1)
@ -389,11 +389,31 @@ void ods_conversion_context::start_rows()
void ods_conversion_context::end_rows()
{
//add default last row
int repeat = (std::max)(current_table().dimension_row,64) - current_table().current_row();
if (repeat < 0) repeat = 1;
int repeated = (std::max)(current_table().dimension_row, 64) - current_table().current_row();
if (repeated < 0) repeated = 1;
start_row(current_table().current_row()+1,repeat,0,true);
end_row();
while(true)
{
//делим на 3 - до, с комметом, после;
int comment_idx = current_table().is_row_comment(current_table().current_row() + 1, repeated);
if (comment_idx < 0) break;
int rows = current_table().comments_[comment_idx].row - current_table().current_row() - 1;
start_row(current_table().current_row() + 1, rows, 0, true);
end_row();
start_row(current_table().current_row() + 1, 1, 0, true);
end_row();
repeated -= (1 + rows);
}
if (repeated > 0)
{
start_row(current_table().current_row() + 1, repeated, 0, true);
end_row();
}
}
void ods_conversion_context::add_column(int start_column, int repeated, int level, bool _default)
@ -507,14 +527,7 @@ void ods_conversion_context::end_drawings()
{
current_table().drawing_context()->clear();
}
void ods_conversion_context::start_image(const std::wstring & image_file_name)
{
std::wstring odf_ref_name ;
mediaitems()->add_or_find(image_file_name,_mediaitems::typeImage,odf_ref_name);
current_table().drawing_context()->start_image(odf_ref_name);
}
double ods_conversion_context::convert_symbol_width(double val)
{
//width = ((int)((column_width * Digit_Width + 5) / Digit_Width * 256 )) / 256.;

View File

@ -101,8 +101,6 @@ public:
void start_drawings();
void end_drawings();
virtual void start_image(const std::wstring & image_file_name);
double convert_symbol_width(double val);
void add_defined_range (const std::wstring & name, const std::wstring & cell_range, int sheet_id, bool printable = false);

View File

@ -136,8 +136,8 @@ ods_table_state::ods_table_state(odf_conversion_context * Context, office_elemen
{
office_table_ = elm;
current_table_row_ =0;
current_table_column_ =0;
current_table_row_ = 0;
current_table_column_ = 0;
current_level_.push_back(office_table_);
@ -395,7 +395,7 @@ bool ods_table_state::is_cell_hyperlink()
bool ods_table_state::is_cell_comment()
{
if (cells_size_ <1)return false;
return cells_.back().comment_idx >=0 ? true : false;
return cells_.back().comment_idx >= 0 ? true : false;
}
int ods_table_state::is_cell_hyperlink(int col, int row)
@ -413,7 +413,18 @@ int ods_table_state::is_cell_comment(int col, int row, short repeate_col)
{
for (size_t i = 0; i < comments_.size(); i++)
{
if ((comments_[i].col < col+repeate_col && comments_[i].col >= col) && comments_[i].row == row)
if ((comments_[i].col < col + repeate_col && comments_[i].col >= col) && comments_[i].row == row)
{
return i;
}
}
return -1;
}
int ods_table_state::is_row_comment(int row, int repeate_row)
{
for (size_t i = 0; i < comments_.size(); i++)
{
if (comments_[i].row < row + repeate_row && comments_[i].row >= row)
{
return i;
}
@ -489,10 +500,10 @@ void ods_table_state::start_cell(office_element_ptr & elm, office_element_ptr &
state.empty = true;
state.elm = elm; state.repeated = 1; state.style_name = style_name; state.style_elm = style_elm;
state.row=current_table_row_; state.col =current_table_column_+1;
state.row = current_table_row_; state.col =current_table_column_ + 1;
state.hyperlink_idx = is_cell_hyperlink(state.col, state.row);
state.comment_idx = is_cell_comment(state.col, state.row);
state.comment_idx = is_cell_comment(state.col, state.row);
current_table_column_ += state.repeated;
cells_.push_back(state);
@ -1016,8 +1027,8 @@ void ods_table_state::end_cell()
void ods_table_state::add_default_cell( short repeated)
{
int comment_idx = is_cell_comment(current_table_column_+1 , current_table_row_, repeated);
if (comment_idx >=0 && repeated >1)
int comment_idx = is_cell_comment(current_table_column_ + 1 , current_table_row_, repeated);
if (comment_idx >= 0 && repeated > 1)
{
//делим на 3 - до, с комметом, после;
int c = current_table_column_;

View File

@ -300,6 +300,7 @@ public:
int is_cell_hyperlink (int col, int row);
bool is_cell_comment ();
int is_cell_comment (int col, int row, short repeate_col = 1);
int is_row_comment (int row, int repeate_row = 1);
ods_hyperlink_state & current_hyperlink();
@ -316,7 +317,8 @@ public:
odf_drawing_context * drawing_context(){return &drawing_context_;}
std::wstring office_table_name_;
std::wstring office_table_name_;
std::vector<ods_comment_state> comments_;
private:
odf_conversion_context * context_;
@ -342,9 +344,7 @@ private:
std::list<ods_cell_state> cells_;
long cells_size_;
std::vector<ods_hyperlink_state> hyperlinks_;
std::vector<ods_comment_state> comments_;
std::vector<ods_hyperlink_state> hyperlinks_;
std::vector<ods_shared_formula_state> shared_formulas_;
odf_drawing_context drawing_context_;

View File

@ -915,14 +915,6 @@ void odt_conversion_context::end_change (int id, int type)
// return (text_changes_state_.current_types.back() == 2);
//}
//--------------------------------------------------------------------------------------------------------
void odt_conversion_context::start_image(const std::wstring & image_file_name)
{
std::wstring odf_ref_name ;
mediaitems()->add_or_find(image_file_name, _mediaitems::typeImage,odf_ref_name);
drawing_context()->start_image(odf_ref_name);
}
void odt_conversion_context::start_drop_cap(style_paragraph_properties *paragraph_properties)
{

View File

@ -82,8 +82,7 @@ public:
void start_drawings ();
void end_drawings ();
virtual void start_image(const std::wstring & image_file_name);
void add_text_content (const std::wstring & text);
void add_text_content (const std::wstring & text);
void start_paragraph (bool styled = false);
void end_paragraph ();

View File

@ -50,6 +50,12 @@
namespace cpdoccore
{
oox_shape::oox_shape()
{
odf_type_name = L"ooxml-non-primitive";
view_box = L"0 0 0 0";
}
oox_shape_ptr oox_shape::create(int ooxPrstGeomType)
{
switch (ooxPrstGeomType)
@ -127,7 +133,7 @@ oox_shape_ptr oox_shape::create(int ooxPrstGeomType)
default:
if (ooxPrstGeomType > 2000) return boost::make_shared<oox_shape_textPlain>();
else return boost::make_shared<oox_shape>();
else return oox_shape_ptr();
}
}

View File

@ -48,6 +48,8 @@ namespace cpdoccore
public:
static oox_shape_ptr create(int ooxPrstGeomType);
oox_shape();
struct _equation
{
std::wstring name;
@ -66,20 +68,20 @@ namespace cpdoccore
void add(std::wstring name,std::wstring frmla)
{
_equation q = {name,frmla};
_equation q = {name, frmla};
equations.push_back(q);
}
std::vector<_equation> equations;
std::vector<_handle> handles;
std::vector<_equation> equations;
std::vector<_handle> handles;
std::wstring enhanced_path;
std::wstring modifiers;
std::wstring text_areas;
std::wstring view_box;
std::wstring enhanced_path;
std::wstring modifiers;
std::wstring text_areas;
std::wstring view_box;
_CP_OPT(std::wstring) sub_view_size;
_CP_OPT(std::wstring) glue_points;
std::wstring odf_type_name;
_CP_OPT(std::wstring) glue_points;
std::wstring odf_type_name;
};
};

File diff suppressed because it is too large Load Diff

View File

@ -181,6 +181,14 @@ void OoxConverter::convert(OOX::WritingElement *oox_unknown)
{
convert(dynamic_cast<PPTX::Logic::CustGeom*>(oox_unknown));
}break;
case OOX::et_a_ahXY:
{
convert(dynamic_cast<PPTX::Logic::AhXY*>(oox_unknown));
}break;
case OOX::et_a_ahPolar:
{
convert(dynamic_cast<PPTX::Logic::AhPolar*>(oox_unknown));
}break;
case OOX::et_a_lnTo:
{
convert(dynamic_cast<PPTX::Logic::LineTo*>(oox_unknown));

View File

@ -263,6 +263,7 @@ namespace PPTX
class Theme;
namespace Logic
{
class Bullet;
class ClrMap;
class SpTreeElem;
class GraphicFrame;
@ -322,6 +323,8 @@ namespace PPTX
class InnerShdw;
class OuterShdw;
class PrstShdw;
class AhXY;
class AhPolar;
}
}
@ -362,6 +365,7 @@ public:
void convert (double oox_font_size, _CP_OPT(cpdoccore::odf_types::font_size) & odf_font_size);
bool convert (std::wstring sSchemeColor, DWORD & argb);
void convert_font(PPTX::Theme *theme, std::wstring & font);
//.......................................................................................................................
void convert(OOX::WritingElement *oox_unknown);
//drawingML & pptx................................................................................................................................
@ -390,6 +394,7 @@ public:
void convert(PPTX::Logic::PathBase *oox_path);
void convert(PPTX::Logic::BodyPr *oox_bodyPr);
void convert(PPTX::Logic::UniFill *oox_fill, DWORD ARGB = 0);
void convert(PPTX::Logic::UniColor *color, DWORD & nARGB);
void convert(PPTX::Logic::UniColor *color, std::wstring & hexString, _CP_OPT(double) & opacity, DWORD ARGB = 0);
void convert(PPTX::Logic::NvSpPr *oox_nvSpPr);
void convert(PPTX::Logic::CNvPr *oox_cnvPr);
@ -399,10 +404,16 @@ public:
void convert(PPTX::Logic::NvCxnSpPr *oox_nvSpPr);
void convert(PPTX::Logic::NvGrpSpPr *oox_nvSpPr);
void convert(PPTX::Logic::NvPr *oox_nvPr);
void convert(PPTX::Logic::Paragraph *oox_para, PPTX::Logic::TextListStyle *oox_list_style = NULL);
void convert(PPTX::Logic::TextListStyle *oox_list_style, int level, cpdoccore::odf_writer::style_paragraph_properties * paragraph_properties);
void convert(PPTX::Logic::TextParagraphPr *oox_para_props, cpdoccore::odf_writer::style_paragraph_properties * paragraph_properties);
void convert(PPTX::Logic::RunProperties *oox_run_props, cpdoccore::odf_writer::style_text_properties * text_properties);
void convert(PPTX::Logic::Paragraph *oox_para, PPTX::Logic::TextListStyle *oox_list_style = NULL);
void convert_list_level (PPTX::Logic::TextParagraphPr *oox_para_props, int level);
void convert_list (PPTX::Logic::TextListStyle *oox_list_style);
void convert(PPTX::Logic::TextListStyle *oox_list_style, int level, cpdoccore::odf_writer::style_paragraph_properties *paragraph_properties,
cpdoccore::odf_writer::style_text_properties *text_properties);
void convert(PPTX::Logic::TextParagraphPr *oox_para_props, cpdoccore::odf_writer::style_paragraph_properties *paragraph_properties,
cpdoccore::odf_writer::style_text_properties *text_properties);
void convert(PPTX::Logic::RunProperties *oox_run_props, cpdoccore::odf_writer::style_text_properties *text_properties);
void convert(PPTX::Logic::Run *oox_run);
void convert(PPTX::Logic::Fld *oox_fld);
void convert(PPTX::Logic::Br *oox_br);
@ -417,6 +428,8 @@ public:
void convert(PPTX::Logic::QuadBezTo *oox_geom_path);
void convert(PPTX::Logic::CubicBezTo *oox_geom_path);
void convert(PPTX::Logic::Close *oox_geom_path);
void convert(PPTX::Logic::AhXY *oox_handle);
void convert(PPTX::Logic::AhPolar *oox_handle);
void convert(PPTX::Logic::EffectStyle *oox_effect);
void convert(PPTX::Logic::EffectLst *oox_effect_list);
void convert(PPTX::Logic::InnerShdw *oox_effect);

View File

@ -2248,32 +2248,25 @@ void DocxConverter::convert(SimpleTypes::CTheme<>* oox_font_theme, _CP_OPT(std::
case SimpleTypes::themeMajorAscii:
case SimpleTypes::themeMajorHAnsi :
font = docx_theme->themeElements.fontScheme.majorFont.latin.typeface;
if (font.length() > 0) odf_font_name = font;
break;
case SimpleTypes::themeMajorBidi:
font = docx_theme->themeElements.fontScheme.majorFont.cs.typeface;
if (font.length() > 0) odf_font_name = font;
break;
case SimpleTypes::themeMajorEastAsia:
font = docx_theme->themeElements.fontScheme.majorFont.ea.typeface;
if (font.length() > 0) odf_font_name = font;
break;
case SimpleTypes::themeMinorAscii:
case SimpleTypes::themeMinorHAnsi:
font = docx_theme->themeElements.fontScheme.minorFont.latin.typeface;
if (font.length() > 0) odf_font_name = font;
break;
case SimpleTypes::themeMinorBidi:
font = docx_theme->themeElements.fontScheme.minorFont.cs.typeface;
if (font.length() > 0) odf_font_name = font;
break;
case SimpleTypes::themeMinorEastAsia:
font = docx_theme->themeElements.fontScheme.minorFont.ea.typeface;
if (font.length() > 0) odf_font_name = font;
break;
}
if (!font.empty()) odf_font_name = font;
}
void DocxConverter::convert(OOX::Logic::CText *oox_text)
@ -3056,7 +3049,7 @@ void DocxConverter::convert(OOX::Numbering::CLvl* oox_num_lvl)
int type_list = odt_context->styles_context()->lists_styles().start_style_level(oox_num_lvl->m_oIlvl->GetValue(), oox_type_list );
if (type_list < 0) return;
odf_writer::style_list_level_properties * level_props = odt_context->styles_context()->lists_styles().get_list_level_properties();
odf_writer::style_list_level_properties * level_props = odt_context->styles_context()->lists_styles().get_list_level_properties();
odf_writer::style_list_level_label_alignment * aligment_props = odt_context->styles_context()->lists_styles().get_list_level_alignment_properties();
if (level_props == NULL)return;
@ -3108,8 +3101,8 @@ void DocxConverter::convert(OOX::Numbering::CLvl* oox_num_lvl)
}
}else
{
aligment_props->fo_text_indent_ = odf_types::length(0,odf_types::length::cm);
aligment_props->fo_margin_left_ = odf_types::length(0,odf_types::length::cm);
aligment_props->fo_text_indent_ = odf_types::length(0, odf_types::length::cm);
aligment_props->fo_margin_left_ = odf_types::length(0, odf_types::length::cm);
}
}
@ -3121,7 +3114,7 @@ void DocxConverter::convert(OOX::Numbering::CLvl* oox_num_lvl)
convert(oox_num_lvl->m_oRPr.GetPointer(), text_props);
//create text style for symbols list НА ЛОКАЛЬНОМ контексте - иначе пересечение имен стилей (todoo вытащить генерацию имен в общую часть)
styles_context->create_style(L"",odf_types::style_family::Text, false, true, -1);
styles_context->create_style(L"", odf_types::style_family::Text, false, true, -1);
odf_writer::odf_style_state_ptr style_state = styles_context->last_state(odf_types::style_family::Text);
if (style_state)
{
@ -3191,7 +3184,9 @@ void DocxConverter::convert(OOX::Numbering::CLvl* oox_num_lvl)
}
if (type_list == 2 || type_list == 3)
{
odt_context->styles_context()->lists_styles().set_bullet_image_size(size_bullet_number_marker);
}
if (oox_num_lvl->m_oLvlRestart.IsInit() && oox_num_lvl->m_oLvlRestart->m_oVal.IsInit() && type_list == 1)
{
@ -3399,7 +3394,7 @@ void DocxConverter::convert(OOX::Logic::CCommentRangeStart* oox_comm_start)
bool added = odt_context->start_comment(oox_comm_id);
if (added==false)
if (added == false)
{
convert_comment(oox_comm_id);
}

View File

@ -35,6 +35,7 @@
#include "../../../ASCOfficePPTXFile/PPTXFormat/Folder.h"
#include "../../../ASCOfficePPTXFile/PPTXFormat/Presentation.h"
#include "../../../ASCOfficePPTXFile/PPTXFormat/Slide.h"
#include "../../../ASCOfficePPTXFile/PPTXFormat/Logic/Table/Table.h"
#include <boost/lexical_cast.hpp>
@ -218,21 +219,20 @@ void PptxConverter::convert_styles()
odf_writer::style_paragraph_properties * paragraph_properties = odp_context->styles_context()->last_state()->get_paragraph_properties();
odf_writer::style_text_properties * text_properties = odp_context->styles_context()->last_state()->get_text_properties();
if (text_properties)
if (presentation->defaultTextStyle.IsInit())
{
text_properties->content_.fo_font_size_ = odf_types::font_size(odf_types::length(18, odf_types::length::pt));
}
if (slide->theme.IsInit() && text_properties)
{
if (slide->theme->themeElements.fontScheme.majorFont.latin.typeface.empty() == false)
text_properties->content_.fo_font_family_ = slide->theme->themeElements.fontScheme.majorFont.latin.typeface;
if (slide->theme->themeElements.fontScheme.majorFont.cs.typeface.empty() == false)
text_properties->content_.style_font_family_complex_ = slide->theme->themeElements.fontScheme.majorFont.cs.typeface;
OoxConverter::convert(presentation->defaultTextStyle->levels[9].GetPointer(), paragraph_properties, text_properties); //defPPr
OoxConverter::convert(presentation->defaultTextStyle->levels[0].GetPointer(), paragraph_properties, text_properties); //default text
if (slide->theme->themeElements.fontScheme.majorFont.ea.typeface.empty() == false)
text_properties->content_.style_font_family_asian_ = slide->theme->themeElements.fontScheme.majorFont.ea.typeface;
odp_context->styles_context()->create_default_style(odf_types::style_family::Paragraph);
paragraph_properties = odp_context->styles_context()->last_state()->get_paragraph_properties();
OoxConverter::convert(presentation->defaultTextStyle->levels[0].GetPointer(), paragraph_properties, text_properties); //default text
odp_context->styles_context()->create_default_style(odf_types::style_family::Text);
text_properties = odp_context->styles_context()->last_state()->get_text_properties();
OoxConverter::convert(presentation->defaultTextStyle->levels[0].GetPointer(), paragraph_properties, text_properties); //default text
}
//convert(presentation->defaultTextStyle.GetPointer()); //стили дефалтовых списков
@ -294,23 +294,34 @@ void PptxConverter::convert_slides()
{
continue;// странное ... слайд 38 в FY10_September_Partner_Call.pptx
}
current_theme = slide->theme.operator->();
current_clrMap = NULL;
std::wstring master_style_name;
std::wstring layout_style_name;
bool bShow = slide->show.get_value_or(true);
bool bShowMasterAnim = slide->showMasterPhAnim.get_value_or(true);
bool bShowMasterSp = slide->showMasterSp.get_value_or(true);
PPTX::Logic::TxStyles* current_txStyles = NULL;
if (slide->Master.IsInit())
{
current_clrMap = &slide->Master->clrMap;
current_clrMap = &slide->Master->clrMap;
current_txStyles = slide->Master->txStyles.GetPointer();
std::map<std::wstring, std::wstring>::iterator pFind = m_mapMasters.find(slide->Master->m_sOutputFilename + slide->Layout->m_sOutputFilename);
std::wstring master_name = (bShowMasterSp ? slide->Master->m_sOutputFilename : L"") + slide->Layout->m_sOutputFilename;
std::map<std::wstring, std::wstring>::iterator pFind = m_mapMasters.find(master_name);
if (pFind == m_mapMasters.end())
{
master_style_name = L"MasterPage";
if (slide->Master->cSld.attrName.IsInit()) master_style_name = slide->Master->cSld.attrName.get();
else if (current_theme->name.IsInit()) master_style_name = current_theme->name.get();
if (bShowMasterSp)
{
if (slide->Master->cSld.attrName.IsInit()) master_style_name = slide->Master->cSld.attrName.get();
else if (current_theme->name.IsInit()) master_style_name = current_theme->name.get();
}
master_style_name += L"_" ;
if (slide->Layout->cSld.attrName.IsInit()) master_style_name += slide->Layout->cSld.attrName.get();
else if (slide->Layout->attrType.IsInit()) master_style_name += slide->Layout->attrType->get();
@ -319,18 +330,20 @@ void PptxConverter::convert_slides()
odp_context->start_master_slide(master_style_name);
convert_common();
//if (slide->Layout->showMasterSp.IsInit() ? *slide->Layout->showMasterSp : true)
{
current_slide = slide->Master.operator->();
convert_slide(&slide->Master->cSld, false);
}
current_slide = slide->Master.operator->();
if (bShowMasterSp)
convert_slide(&slide->Master->cSld, current_txStyles, false);
else
convert(slide->Master->cSld.bg.GetPointer());
if (slide->Layout->clrMapOvr.IsInit() && slide->Layout->clrMapOvr->overrideClrMapping.IsInit())
current_clrMap = slide->Layout->clrMapOvr->overrideClrMapping.GetPointer();
current_slide = slide->Layout.operator->();
convert_slide(&slide->Layout->cSld, true);
convert_slide(&slide->Layout->cSld, current_txStyles, true);
odp_context->end_master_slide();
m_mapMasters.insert(std::make_pair(slide->Master->m_sOutputFilename + slide->Layout->m_sOutputFilename, master_style_name));
m_mapMasters.insert(std::make_pair(master_name, master_style_name));
}
else
{
@ -365,23 +378,22 @@ void PptxConverter::convert_slides()
odp_context->current_slide().set_master_page (master_style_name);
odp_context->current_slide().set_layout_page (layout_style_name);
//nullable_bool show;
//nullable_bool showMasterPhAnim;
//nullable_bool showMasterSp;
convert_slide(slide->cSld.GetPointer(), true);
convert_slide (slide->cSld.GetPointer(), current_txStyles, true);
convert (slide->comments.operator->());
convert (slide->Note.operator->());
convert (slide->timing.GetPointer(), slide->transition.GetPointer());
//nullable<Logic::Transition> transition;
//nullable<Logic::Timing> timing;
//smart_ptr<NotesSlide> Note;
//smart_ptr<PPTX::Comments> comments;
odp_context->end_slide();
}
}
void PptxConverter::convert(PPTX::NotesSlide *oox_note)
{
if (!oox_note) return;
}
void PptxConverter::convert(OOX::WritingElement *oox_unknown)
{
if (oox_unknown == NULL)return;
@ -394,7 +406,51 @@ void PptxConverter::convert(OOX::WritingElement *oox_unknown)
}break;
}
}
void PptxConverter::convert(PPTX::Comments *oox_comments)
{
if (!oox_comments) return;
for (size_t i = 0; i < oox_comments->m_arComments.size(); i++)
{
PPTX::Logic::Comment & oox_comment = oox_comments->m_arComments[i];
odp_context->start_comment(oox_comment.idx.get_value_or(-1));
odp_context->start_comment_content();
if (oox_comment.pos_x.IsInit() && oox_comment.pos_y.IsInit())
odp_context->comment_context()->set_position (*oox_comment.pos_x / 10., *oox_comment.pos_y / 10.); //pt
if (oox_comment.authorId.IsInit() && presentation->commentAuthors.IsInit())
{
for (size_t a = 0; a < presentation->commentAuthors->m_arAuthors.size(); a++)
{
PPTX::Logic::CommentAuthor & autor = presentation->commentAuthors->m_arAuthors[a];
if (autor.id.IsInit() && autor.id.get() == oox_comment.authorId.get())
{
odp_context->comment_context()->set_author(autor.name.get_value_or(L""));
odp_context->comment_context()->set_initials(autor.initials.get_value_or(L""));
break;
}
}
}
if (oox_comment.dt.IsInit()) odp_context->comment_context()->set_date(*oox_comment.dt);
if (oox_comment.text.IsInit()) odp_context->text_context()->add_text_content(*oox_comment.text);
odp_context->end_comment_content();
odp_context->end_comment();
}
}
void PptxConverter::convert(PPTX::Logic::Timing *oox_timing, PPTX::Logic::Transition *oox_transition)
{
if (!oox_timing) return;
if (!oox_timing->tnLst.IsInit()) return;
for (size_t i = 0; i < oox_timing->tnLst->list.size(); i++)
{
//oox_timing->tnLst[0]
}
}
void PptxConverter::convert(PPTX::Logic::TableProperties *oox_table_pr)
{
if (!oox_table_pr) return;
@ -879,14 +935,13 @@ void PptxConverter::convert(PPTX::Logic::Bg *oox_background)
odp_context->end_drawings();
}
void PptxConverter::convert_slide(PPTX::Logic::CSld *oox_slide, bool bPlaceholders)
void PptxConverter::convert_slide(PPTX::Logic::CSld *oox_slide, PPTX::Logic::TxStyles* txStyles, bool bPlaceholders)
{
if (oox_slide == NULL) return;
if (current_theme && current_clrMap)
current_theme->SetColorMap(*current_clrMap);
if (oox_slide->attrName.IsInit())
odp_context->current_slide().set_page_name(oox_slide->attrName.get());
@ -899,21 +954,49 @@ void PptxConverter::convert_slide(PPTX::Logic::CSld *oox_slide, bool bPlaceholde
if (pShape.IsInit() && pShape->nvSpPr.nvPr.ph.is_init())
{
if (bPlaceholders)
{
pShape->FillLevelUp();
PPTX::Logic::Shape update_shape;
if (pShape->levelUp)
pShape->levelUp->Merge(update_shape, true);
pShape->Merge(update_shape);
pShape->FillLevelUp();
OoxConverter::convert(&update_shape);
if (!bPlaceholders)
continue;
PPTX::Logic::TextListStyle * listMasterStyle = NULL;
if (txStyles)
{
std::wstring type = pShape->nvSpPr.nvPr.ph->type.get_value_or(_T("body"));
if ((type == L"title") || (type == L"ctrTitle"))
listMasterStyle = txStyles->titleStyle.GetPointer();
else if ((type == L"body") || (type == L"subTitle") || (type == L"obj"))
listMasterStyle = txStyles->bodyStyle.GetPointer();
else if (type != L"")
listMasterStyle = txStyles->otherStyle.GetPointer();
}
//else
PPTX::Logic::Shape update_shape;
if (listMasterStyle)
{
update_shape.txBody = new PPTX::Logic::TxBody();
PPTX::Logic::TextListStyle *newListStyle = new PPTX::Logic::TextListStyle();
for (int i = 0; i < 10; i++)
{
if(listMasterStyle->levels[i].is_init())
listMasterStyle->levels[i]->Merge(newListStyle->levels[i]);
}
update_shape.txBody->lstStyle.reset(newListStyle);
}
pShape->Merge(update_shape);
//if (pShape->IsListStyleEmpty() == false)
//{
// //create list style
//}else if (listMasterStyle)
//{
// OoxConverter::convert(pShape.operator->());
//}
OoxConverter::convert(&update_shape);
}
else
{

View File

@ -47,7 +47,9 @@ namespace OOX
namespace PPTX
{
class TableStyles;
class NotesSlide;
class Presentation;
class Comments;
class Folder;
namespace Logic
@ -63,6 +65,7 @@ namespace PPTX
class TableCell;
class TableCellProperties;
class TcBdr;
class TxStyles;
}
}
@ -103,10 +106,13 @@ namespace Oox2Odf
void convert(OOX::WritingElement *oox_unknown);
void convert_slide (PPTX::Logic::CSld *oox_slide, bool bPlaceholders = true);
void convert_layout (PPTX::Logic::CSld *oox_slide);
void convert_slide (PPTX::Logic::CSld *oox_slide, PPTX::Logic::TxStyles* txStyles, bool bPlaceholders = true);
void convert_layout (PPTX::Logic::CSld *oox_slide);
void convert (PPTX::Comments *oox_comments);
void convert (PPTX::NotesSlide *oox_note);
void convert(PPTX::Logic::Bg *oox_background);
void convert(PPTX::Logic::Timing *oox_timing, PPTX::Logic::Transition *oox_transition);
void convert(PPTX::Logic::Table *oox_table);
void convert(PPTX::Logic::TableRow *oox_table_row);

View File

@ -1748,236 +1748,6 @@ void XlsxConverter::convert(OOX::Spreadsheet::CFromTo* oox_from_to, oox_table_po
if (oox_from_to->m_oColOff.IsInit()) pos->col_off = oox_from_to->m_oColOff->GetValue();//pt
}
//void XlsxConverter::convert(OOX::Spreadsheet::CGroupShape* oox_group_shape)
//{
// if (!oox_group_shape)return;
// if (oox_group_shape->m_arrItems.size() < 1) return;
//
// ods_context->drawing_context()->start_group();
//
// if (oox_group_shape->m_oNvGroupSpPr.IsInit())
// {
// if (oox_group_shape->m_oNvGroupSpPr->m_oCNvPr.IsInit())
// {
// if (oox_group_shape->m_oNvGroupSpPr->m_oCNvPr->m_sName.IsInit())
// ods_context->drawing_context()->set_group_name(*oox_group_shape->m_oNvGroupSpPr->m_oCNvPr->m_sName);
// if (oox_group_shape->m_oNvGroupSpPr->m_oCNvPr->m_oId.IsInit())
// ods_context->drawing_context()->set_group_z_order(oox_group_shape->m_oNvGroupSpPr->m_oCNvPr->m_oId->GetValue());
// }
// }
//
// OoxConverter::convert(oox_group_shape->m_oGroupSpPr.GetPointer());
//
// for (unsigned int i=0; i < oox_group_shape->m_arrItems.size(); i++)
// {
// switch(oox_group_shape->m_arrItems[i]->getType())
// {
// case OOX::et_x_Shape:
// {
// OOX::Spreadsheet::CShape* item = dynamic_cast<OOX::Spreadsheet::CShape*>(oox_group_shape->m_arrItems[i]);
// convert(item);
// }break;
// case OOX::et_x_ConnShape:
// {
// OOX::Spreadsheet::CConnShape* item = dynamic_cast<OOX::Spreadsheet::CConnShape*>(oox_group_shape->m_arrItems[i]);
// convert(item);
// }break;
// case OOX::et_x_GroupShape:
// {
// OOX::Spreadsheet::CGroupShape* item = dynamic_cast<OOX::Spreadsheet::CGroupShape*>(oox_group_shape->m_arrItems[i]);
// convert(item);
// }break;
// case OOX::et_x_Pic:
// {
// OOX::Spreadsheet::CPic* item = dynamic_cast<OOX::Spreadsheet::CPic*>(oox_group_shape->m_arrItems[i]);
// convert(item);
// }break;
// }
// }
// ods_context->drawing_context()->end_group();
//}
//
//void XlsxConverter::convert(OOX::Spreadsheet::CShape* oox_shape)
//{
// if (!oox_shape)return;
// if (!oox_shape->m_oSpPr.IsInit()) return;
//
// ods_context->drawing_context()->start_drawing();
//
// int type = -1;
// if (oox_shape->m_oSpPr->m_oCustGeom.IsInit())
// {
// type = 1000;//6???
// }
// if (oox_shape->m_oSpPr->m_oPrstGeom.IsInit())
// {
// OOX::Drawing::CPresetGeometry2D * geometry = oox_shape->m_oSpPr->m_oPrstGeom.GetPointer();
// type =(geometry->m_oPrst.GetValue());
// }
//
// if ((oox_shape->m_oNvSpPr.IsInit()) && (oox_shape->m_oNvSpPr->m_oCNvSpPr.IsInit()))
// {
// if (oox_shape->m_oNvSpPr->m_oCNvSpPr->m_otxBox.GetValue() == 1)
// type = 2000; //textBox
// }
//
// if (type < 0)return;
///////////////////////////////////////////////////////////////////////////////////
// if (type == 2000) ods_context->drawing_context()->start_text_box();
// else ods_context->drawing_context()->start_shape(type);
//
// {
// OoxConverter::convert(oox_shape->m_oSpPr.GetPointer(), oox_shape->m_oShapeStyle.GetPointer());
//
// if (oox_shape->m_oNvSpPr.IsInit())
// {
// OoxConverter::convert(oox_shape->m_oNvSpPr->m_oCNvPr.GetPointer()); //имя, описалово, номер ...
// convert(oox_shape->m_oNvSpPr->m_oCNvSpPr.GetPointer()); //заблокированности ... todooo
// }
// if (oox_shape->m_oShapeStyle.IsInit())
// {
// //доп эффекты
//
// }
// if (oox_shape->m_oTxBody.IsInit())
// {
// ods_context->start_text_context();
// OoxConverter::convert(oox_shape->m_oTxBody->m_oBodyPr.GetPointer());
//
// for (unsigned int i=0 ; i < oox_shape->m_oTxBody->m_arrItems.size();i++)
// {
// OoxConverter::convert(oox_shape->m_oTxBody->m_arrItems[i]);
// }
// ods_context->drawing_context()->set_text( ods_context->text_context());
// ods_context->end_text_context();
//
// }
// }
// if (type == 2000)ods_context->drawing_context()->end_text_box();
// else ods_context->drawing_context()->end_shape();
//
// ods_context->drawing_context()->end_drawing();
//
//}
//
//void XlsxConverter::convert(OOX::Spreadsheet::CConnShape* oox_shape)
//{
// if (!oox_shape)return;
// if (!oox_shape->m_oSpPr.IsInit()) return;
//
// ods_context->drawing_context()->start_drawing();
//
// int type = -1;
// if (oox_shape->m_oSpPr->m_eGeomType == OOX::Drawing::geomtypeCustom)
// {
// type = 1000;//?????
// }
// else if (oox_shape->m_oSpPr->m_eGeomType == OOX::Drawing::geomtypePreset)
// {
// if (oox_shape->m_oSpPr->m_oPrstGeom.IsInit())
// {
// OOX::Drawing::CPresetGeometry2D * geometry = oox_shape->m_oSpPr->m_oPrstGeom.GetPointer();
// type = (int)(geometry->m_oPrst.GetValue());
// }
// }
// if (type < 0)return;
////////////////////////////////////////////////////////////////////////////////
// ods_context->drawing_context()->start_shape(type);
// {
// OoxConverter::convert(oox_shape->m_oSpPr.GetPointer(), oox_shape->m_oShapeStyle.GetPointer());
//
// //частенько приплывает из стиля заполенение объекта .. а он то одномерный :)
// odf_context()->drawing_context()->start_area_properties();
// odf_context()->drawing_context()->set_no_fill();
// odf_context()->drawing_context()->end_area_properties();
//
// if (oox_shape->m_oNvConnSpPr.IsInit())
// {
// if (oox_shape->m_oNvConnSpPr->m_oCNvPr.IsInit())
// {
// OoxConverter::convert(oox_shape->m_oNvConnSpPr->m_oCNvPr.GetPointer());
// }
//
// if (oox_shape->m_oNvConnSpPr->m_oCNvConnSpPr.IsInit())
// {
// }
// }
// //avLst
// }
// ods_context->drawing_context()->end_shape();
// ods_context->drawing_context()->end_drawing();
//}
//
//
//void XlsxConverter::convert(OOX::Spreadsheet::CPic* oox_picture)
//{
// if (!oox_picture)return;
// if (!oox_picture->m_oBlipFill.IsInit()) return; // невeрная структура оох
//
// ods_context->drawing_context()->start_drawing();
//
// std::wstring pathImage;
// double Width=0, Height = 0;
//
// if (oox_picture->m_oBlipFill->m_oBlip.IsInit())
// {
// std::wstring sID = oox_picture->m_oBlipFill->m_oBlip->m_oEmbed.GetValue();
// pathImage = find_link_by_id(sID,1);
//
// if (pathImage.empty())
// {
// sID = oox_picture->m_oBlipFill->m_oBlip->m_oLink.GetValue();
// //???
// }
// _graphics_utils_::GetResolution(pathImage.c_str(), Width, Height);
// }
// ods_context->start_image(pathImage);
// {
// if (oox_picture->m_oBlipFill->m_oTile.IsInit())
// {
// ods_context->drawing_context()->set_image_style_repeat(2);
// }
// if (oox_picture->m_oBlipFill->m_oStretch.IsInit())
// {
// ods_context->drawing_context()->set_image_style_repeat(1);
// }
// if (oox_picture->m_oBlipFill->m_oSrcRect.IsInit() && Width >0 && Height >0)
// {
// ods_context->drawing_context()->set_image_client_rect_inch(
// oox_picture->m_oBlipFill->m_oSrcRect->m_oL.GetValue()/100. * Width / currentSystemDPI ,
// oox_picture->m_oBlipFill->m_oSrcRect->m_oT.GetValue()/100. * Height / currentSystemDPI ,
// oox_picture->m_oBlipFill->m_oSrcRect->m_oR.GetValue()/100. * Width / currentSystemDPI ,
// oox_picture->m_oBlipFill->m_oSrcRect->m_oB.GetValue()/100. * Height / currentSystemDPI );
// }
// if (oox_picture->m_oNvPicPr.IsInit())
// {
// OoxConverter::convert(oox_picture->m_oNvPicPr->m_oCNvPr.GetPointer());
//
// if (oox_picture->m_oNvPicPr->m_oCNvPicPr.IsInit())
// {
// if (oox_picture->m_oNvPicPr->m_oCNvPicPr->m_oPicLocks.IsInit())
// {
// //if (oox_picture->m_oNvPicPr->m_oCNvPicPr->m_oPicLocks->m_oNoChangeAspect)
// //{
// //}
// //if (oox_picture->m_oNvPicPr->m_oCNvPicPr->m_oPicLocks->m_oNoCrop))
// //{
// //}
// //if (oox_picture->m_oNvPicPr->m_oCNvPicPr->m_oPicLocks->m_oNoResize)
// //{
// //}
// }
// //m_oExtLst
// }
// }
//
// OoxConverter::convert(oox_picture->m_oSpPr.GetPointer(), oox_picture->m_oShapeStyle.GetPointer());
//
// }
// ods_context->drawing_context()->end_image();
// ods_context->drawing_context()->end_drawing();
//}
//
void XlsxConverter::convert(OOX::Spreadsheet::CConditionalFormatting *oox_cond_fmt)
{
if (!oox_cond_fmt)return;

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="windows-1251"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8,00"
Version="8.00"
Name="Oox2OdfConverter"
ProjectGUID="{BEE01B53-244A-44E6-8947-ED9342D9247E}"
RootNamespace="Oox2OdfConverter"

View File

@ -912,16 +912,7 @@ HRESULT CDrawingConverter::SetMainDocument(BinDocxRW::CDocxSerializer* pDocument
m_pImageManager->m_nDocumentType = XMLWRITER_DOC_TYPE_DOCX;
return S_OK;
}
HRESULT CDrawingConverter::SetRelsPath(const std::wstring& bsRelsPath)
{
// чтобы не переоткрывать рельсы - посмотрим - может у нас уже есть такой??
m_strCurrentRelsPath = bsRelsPath;
return SetCurrentRelsPath();
}
std::wstring CDrawingConverter::GetRelsPath()
{
return m_strCurrentRelsPath;
}
HRESULT CDrawingConverter::SetMediaDstPath(const std::wstring& bsMediaPath)
{
m_pBinaryWriter->m_pCommon->m_pImageManager->m_strDstMedia = (std::wstring)bsMediaPath;
@ -1062,9 +1053,7 @@ PPTX::Logic::SpTreeElem CDrawingConverter::ObjectFromXml(const std::wstring& sXm
XmlUtils::CXmlNode oNodeContent;
oChilds.GetAt(0, oNodeContent);
std::wstring strCurrentRelsPath = m_strCurrentRelsPath;
if (L"dgm:relIds" == oNodeContent.GetName() && m_pBinaryWriter->m_pCommonRels->is_init())
if (L"dgm:relIds" == oNodeContent.GetName() && m_pBinaryWriter->m_pCurrentContainer->is_init())
{
doc_LoadDiagram(&oElem, oNodeContent, ppMainProps, true);
}
@ -1597,7 +1586,7 @@ void CDrawingConverter::doc_LoadDiagram(PPTX::Logic::SpTreeElem *result, XmlUtil
if (id_data.IsInit())
{
oFileData = (*m_pBinaryWriter->m_pCommonRels)->Find(*id_data);
oFileData = (*m_pBinaryWriter->m_pCurrentContainer)->Find(*id_data);
if (oFileData.is_init())
{
@ -1616,7 +1605,7 @@ void CDrawingConverter::doc_LoadDiagram(PPTX::Logic::SpTreeElem *result, XmlUtil
}
if (id_drawing.is_init())
{
oFileDrawing = (*m_pBinaryWriter->m_pCommonRels)->Find(*id_drawing);
oFileDrawing = (*m_pBinaryWriter->m_pCurrentContainer)->Find(*id_drawing);
pDiagramDrawing = dynamic_cast<OOX::CDiagramDrawing*>(oFileDrawing.operator->());
}
if (!pDiagramDrawing && pDiagramData)
@ -1641,8 +1630,7 @@ void CDrawingConverter::doc_LoadDiagram(PPTX::Logic::SpTreeElem *result, XmlUtil
{
result->InitElem(new PPTX::Logic::SpTree(*pDiagramDrawing->m_oShapeTree));
//to correct write blipFill rId to binary
m_strCurrentRelsPath = pDiagramDrawing->GetReadPath().GetPath();
SetCurrentRelsPath();
SetRels(pDiagramDrawing);
}
else
{//BG-FSC1.docx
@ -2604,10 +2592,10 @@ void CDrawingConverter::doc_LoadShape(PPTX::Logic::SpTreeElem *elem, XmlUtils::C
{
std::wstring sId = oNodeTextData.GetAttribute(L"id");
if (sId.length() > 0 && m_pBinaryWriter->m_pCommonRels->IsInit())
if (sId.length() > 0 && m_pBinaryWriter->m_pCurrentContainer->IsInit())
{
OOX::RId rId(sId);
smart_ptr<PPTX::LegacyDiagramText> pExt = (*m_pBinaryWriter->m_pCommonRels)->legacyDiagramText(rId);
smart_ptr<PPTX::LegacyDiagramText> pExt = (*m_pBinaryWriter->m_pCurrentContainer)->GetLegacyDiagramText(rId);
if (pExt.IsInit())
{
@ -5275,27 +5263,19 @@ void CDrawingConverter::Clear()
RELEASEOBJECT(pMem);
}
m_mapShapeTypes.clear();
m_mapRels.clear();
}
HRESULT CDrawingConverter::SetCurrentRelsPath()
void CDrawingConverter::SetRels(smart_ptr<OOX::IFileContainer> container)
{
std::map<std::wstring, smart_ptr<PPTX::CCommonRels>>::iterator pPair = m_mapRels.find(m_strCurrentRelsPath);
if (m_mapRels.end() == pPair)
{
smart_ptr<PPTX::CCommonRels> pCR = new PPTX::CCommonRels();
m_mapRels.insert(std::pair<std::wstring, NSCommon::smart_ptr<PPTX::CCommonRels>>(m_strCurrentRelsPath, pCR));
pPair = m_mapRels.find(m_strCurrentRelsPath);
OOX::CPath filename = m_strCurrentRelsPath;
pPair->second->_read(filename);
}
*m_pBinaryWriter->m_pCommonRels = pPair->second;
return S_OK;
*m_pBinaryWriter->m_pCurrentContainer = container;
}
void CDrawingConverter::SetRels(OOX::IFileContainer *container)
{
*m_pBinaryWriter->m_pCurrentContainer = smart_ptr<OOX::IFileContainer>(container);
m_pBinaryWriter->m_pCurrentContainer->AddRef();
}
smart_ptr<OOX::IFileContainer> CDrawingConverter::GetRels()
{
return *m_pBinaryWriter->m_pCurrentContainer;
}
void CDrawingConverter::SetFontManager(CFontManager* pFontManager)
{

View File

@ -63,6 +63,7 @@ namespace BinDocxRW
namespace OOX
{
class CContentTypes;
class IFileContainer;
}
namespace NSBinPptxRW
{
@ -186,9 +187,7 @@ namespace NSBinPptxRW
};
std::map<std::wstring, CShape*> m_mapShapeTypes;
std::map<std::wstring, NSCommon::smart_ptr<PPTX::CCommonRels>> m_mapRels;
std::wstring m_strCurrentRelsPath;
std::map<std::wstring, CShape*> m_mapShapeTypes;
NSBinPptxRW::CBinaryFileWriter* m_pBinaryWriter;
int m_lNextId;
@ -211,9 +210,11 @@ namespace NSBinPptxRW
~CDrawingConverter();
HRESULT SetMainDocument (BinDocxRW::CDocxSerializer* pDocument);
HRESULT SetRelsPath (const std::wstring& sRelsPath);
std::wstring GetRelsPath ();
void SetRels(OOX::IFileContainer *container);
void SetRels(smart_ptr<OOX::IFileContainer> container);
smart_ptr<OOX::IFileContainer> GetRels();
HRESULT SetMainDocument (BinDocxRW::CDocxSerializer* pDocument);
HRESULT SetMediaDstPath (const std::wstring& sMediaPath);
HRESULT SetEmbedDstPath (const std::wstring& sEmbedPath);

View File

@ -82,7 +82,8 @@ namespace NSBinPptxRW
FontsEmbedded = 44,
SlideNotesRels = 45,
NotesRels = 46
NotesRels = 46,
NotesMastersRels= 47
};
}
}

View File

@ -718,11 +718,12 @@ namespace NSBinPptxRW
}
CBinaryFileWriter::CBinaryFileWriter()
{
m_pMainDocument = NULL;
m_pCommon = new CCommonWriter();
m_pCommonRels = new NSCommon::smart_ptr<PPTX::CCommonRels>();
m_pTheme = new NSCommon::smart_ptr<PPTX::Theme>();
m_pClrMap = new NSCommon::smart_ptr<PPTX::Logic::ClrMap>();
m_pMainDocument = NULL;
m_pCommon = new CCommonWriter();
//m_pCommonRels = new NSCommon::smart_ptr<PPTX::CCommonRels>();
m_pCurrentContainer = new NSCommon::smart_ptr<OOX::IFileContainer>();
m_pTheme = new NSCommon::smart_ptr<PPTX::Theme>();
m_pClrMap = new NSCommon::smart_ptr<PPTX::Logic::ClrMap>();
Clear();
}
@ -730,7 +731,8 @@ namespace NSBinPptxRW
{
RELEASEARRAYOBJECTS (m_pStreamData);
RELEASEOBJECT (m_pCommon);
RELEASEOBJECT (m_pCommonRels);
//RELEASEOBJECT (m_pCommonRels);
RELEASEOBJECT (m_pCurrentContainer);
RELEASEOBJECT (m_pTheme);
RELEASEOBJECT (m_pClrMap);

View File

@ -51,6 +51,7 @@ namespace OOX
class OleObject;
class CContentTypes;
class WritingElement;
class IFileContainer;
}
namespace NSCommon
{
@ -63,7 +64,6 @@ namespace NSCommon
}
namespace PPTX
{
class CCommonRels;
class Theme;
namespace Logic
{
@ -154,6 +154,7 @@ namespace NSBinPptxRW
std::vector<LONG> m_oSlide_Layout_Rels;
std::vector<LONG> m_oSlide_Notes_Rels;
std::vector<LONG> m_oNote_Rels;
std::vector<LONG> m_oNotesMasters_Rels;
NSShapeImageGen::CImageManager* m_pImageManager;
@ -225,7 +226,7 @@ namespace NSBinPptxRW
CCommonWriter* m_pCommon;
std::wstring m_strMainFolder;
NSCommon::smart_ptr<PPTX::CCommonRels>* m_pCommonRels;
NSCommon::smart_ptr<OOX::IFileContainer>* m_pCurrentContainer;
BinDocxRW::CDocxSerializer * m_pMainDocument;
NSCommon::smart_ptr<PPTX::Theme>* m_pTheme;

View File

@ -147,13 +147,18 @@ namespace PPTX2EditorAdvanced
// проверяем theme
size_t pPointerTh = (size_t)(noteMaster->theme_.operator ->());
LONG nNotesMastersRelsIndex = -1;
std::map<size_t, LONG>::const_iterator pSearchTh = pCommon->themes.find(pPointerTh);
if (pSearchTh == pCommon->themes.end())
{
LONG lCountTh = (LONG)_themes.size();
pCommon->themes [pPointerTh] = lCountTh;
_themes.push_back(noteMaster->theme_);
nNotesMastersRelsIndex = lCountTh;
} else {
nNotesMastersRelsIndex = pSearchTh->second;
}
oBinaryWriter.m_pCommon->m_oNotesMasters_Rels.push_back(nNotesMastersRelsIndex);
}
// записываем все слайды
@ -490,6 +495,21 @@ namespace PPTX2EditorAdvanced
oBinaryWriter.EndRecord();
// ------------------------------------------------
// NoteRels --------------------------------------
oBinaryWriter.StartMainRecord(NSMainTables::NotesMastersRels);
oBinaryWriter.StartRecord(NSMainTables::NotesMastersRels);
oBinaryWriter.WriteBYTE(NSBinPptxRW::g_nodeAttributeStart);
_s_rels = oBinaryWriter.m_pCommon->m_oNotesMasters_Rels.size();
for (size_t i = 0; i < _s_rels; ++i)
{
oBinaryWriter.WriteInt1(0, oBinaryWriter.m_pCommon->m_oNotesMasters_Rels[i]);
}
oBinaryWriter.WriteBYTE(NSBinPptxRW::g_nodeAttributeEnd);
oBinaryWriter.EndRecord();
// ------------------------------------------------
oBinaryWriter.EndRecord();
}

View File

@ -44,7 +44,7 @@ namespace PPTX
{
public:
PPTX_LOGIC_BASE(CommentAuthor)
private:
nullable_int id;
nullable_int last_idx;
nullable_int clr_idx;
@ -52,8 +52,6 @@ namespace PPTX
nullable_string name;
nullable_string initials;
public:
virtual void fromXML(XmlUtils::CXmlNode& node)
{
node.ReadAttributeBase(L"id", id);
@ -138,10 +136,9 @@ namespace PPTX
class Authors : public WrapperFile
{
private:
public:
std::vector<PPTX::Logic::CommentAuthor> m_arAuthors;
public:
Authors()
{
}
@ -152,8 +149,6 @@ namespace PPTX
virtual ~Authors()
{
}
public:
virtual void read(const OOX::CPath& filename, FileMap& map)
{
XmlUtils::CXmlNode oNode;
@ -177,8 +172,6 @@ namespace PPTX
{
WrapperFile::write(filename, directory, content);
}
public:
virtual const OOX::FileType type() const
{
return OOX::Presentation::FileTypes::CommentAuthors;
@ -191,8 +184,6 @@ namespace PPTX
{
return type().DefaultFileName();
}
public:
virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
{
pWriter->WriteRecordArray(0, 0, m_arAuthors);

View File

@ -44,7 +44,7 @@ namespace PPTX
{
public:
PPTX_LOGIC_BASE(Comment)
private:
nullable_int authorId;
nullable_int idx;
nullable_string dt;
@ -59,8 +59,6 @@ namespace PPTX
nullable_string additional_data; // teamlab editor information!!!
public:
virtual void fromXML(XmlUtils::CXmlNode& node)
{
node.ReadAttributeBase(L"authorId", authorId);
@ -276,10 +274,9 @@ namespace PPTX
class Comments : public WrapperFile
{
private:
public:
std::vector<PPTX::Logic::Comment> m_arComments;
public:
Comments()
{
}
@ -291,7 +288,6 @@ namespace PPTX
{
}
public:
virtual void read(const OOX::CPath& filename, FileMap& map)
{
XmlUtils::CXmlNode oNode;
@ -315,7 +311,6 @@ namespace PPTX
WrapperFile::write(filename, directory, content);
}
public:
virtual const OOX::FileType type() const
{
return OOX::Presentation::FileTypes::SlideComments;
@ -328,8 +323,6 @@ namespace PPTX
{
return type().DefaultFileName();
}
public:
virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
{
pWriter->WriteRecordArray(0, 0, m_arComments);

View File

@ -34,7 +34,6 @@
#include "FileContainer.h"
#include "FileTypes.h"
#include "LegacyDiagramText.h"
#include "FileFactory.h"
#include "WrapperFile.h"
@ -241,13 +240,7 @@ namespace PPTX
}
}
}
smart_ptr<PPTX::LegacyDiagramText> FileContainer::legacyDiagramText(const OOX::RId& rId) const
{
std::map<std::wstring, smart_ptr<OOX::File>>::const_iterator pPair = m_mContainer.find(rId.get());
if (pPair == m_mContainer.end ())
return smart_ptr<LegacyDiagramText>();
return pPair->second.smart_dynamic_cast<LegacyDiagramText>();
}
void FileContainer::read(const OOX::CPath& filename, FileMap& map, IPPTXEvent* Event)
{
OOX::CRels rels(filename);
@ -304,25 +297,5 @@ namespace PPTX
content.Registration(type().OverrideType(), directory, m_WrittenFileName);
m_written = true;
}
//---------------------------------------------------------------------------------------------------------------------------
void CCommonRels::_read(const OOX::CRels& rels, const OOX::CPath& path)
{
size_t nCount = rels.m_arrRelations.size();
for (size_t i = 0; i < nCount; ++i)
{
OOX::Rels::CRelationShip* pRelation = rels.m_arrRelations[i];
OOX::CPath normPath = CorrectPathRels(path, pRelation);
smart_ptr<OOX::File> _file = PPTX::FileFactory::CreateFilePPTX_OnlyMedia(normPath, *pRelation);
Add(pRelation->rId(), _file);
}
}
void CCommonRels::_read(const OOX::CPath& filename)
{
OOX::CRels rels(filename);
OOX::CPath path = filename.GetDirectory();
_read(rels, path);
}
} // namespace PPTX

View File

@ -52,7 +52,6 @@ namespace PPTX
virtual ~FileContainer()
{
}
smart_ptr<PPTX::LegacyDiagramText> legacyDiagramText (const OOX::RId& rId) const;
protected:
void read(const OOX::CPath& filename);
@ -71,16 +70,6 @@ namespace PPTX
bool m_bCancelled;
};
class CCommonRels : public PPTX::FileContainer
{
public:
CCommonRels() : PPTX::FileContainer()
{
}
void _read(const OOX::CPath& filename);
void _read(const OOX::CRels& rels, const OOX::CPath& path);
};
} // namespace PPTX
#endif // PPTX_IFILE_CONTAINER_INCLUDE_H_

View File

@ -143,52 +143,4 @@ namespace PPTX
return smart_ptr<OOX::File>(new OOX::UnknowTypeFile());
}
const smart_ptr<OOX::File> FileFactory::CreateFilePPTX_OnlyMedia(const OOX::CPath& norm_filename, OOX::Rels::CRelationShip& relation)
{
bool bIsDownload = false;
std::wstring strFile = relation.Filename().GetPath();
int n1 = (int)strFile.find(_T("www"));
int n2 = (int)strFile.find(_T("http"));
int n3 = (int)strFile.find(_T("ftp"));
int n4 = (int)strFile.find(_T("https://"));
//если nI сранивать не с 0, то будут проблемы
//потому что в инсталяции мы кладем файлы в /var/www...
if (0 == n1 || 0 == n2 || 0 == n3 || 0 == n4)
bIsDownload = true;
OOX::CPath filename = norm_filename;
if (bIsDownload)
filename = relation.Filename();
std::wstring strT = relation.Type();
if (strT == OOX::FileTypes::Image ||
strT == OOX::FileTypes::Chart)
{
return smart_ptr<OOX::File>(new OOX::Image(filename));
}
else if(strT == OOX::FileTypes::Data)
return smart_ptr<OOX::File>(new OOX::CDiagramData(filename));
else if(strT == OOX::FileTypes::DiagDrawing)
return smart_ptr<OOX::File>(new OOX::CDiagramDrawing(filename));
else if(strT == OOX::FileTypes::HyperLink)
return smart_ptr<OOX::File>(new OOX::HyperLink(relation.Target()));
else if(strT == OOX::FileTypes::LegacyDiagramText)
return smart_ptr<OOX::File>(new PPTX::LegacyDiagramText(filename));
else if(strT == OOX::FileTypes::OleObject)
return smart_ptr<OOX::File>(new OOX::OleObject(filename));
else if ( strT == OOX::FileTypes::MicrosoftOfficeUnknown) //ms package
return smart_ptr<OOX::File>(new OOX::OleObject( filename, true ));
return smart_ptr<OOX::File>(new OOX::UnknowTypeFile());
}
} // namespace PPTX

View File

@ -42,6 +42,5 @@ namespace PPTX
{
public:
static const smart_ptr<OOX::File> CreateFilePPTX(const OOX::CPath& path, OOX::Rels::CRelationShip& relation, FileMap& map);
static const smart_ptr<OOX::File> CreateFilePPTX_OnlyMedia(const OOX::CPath& path, OOX::Rels::CRelationShip& relation);
};
} // namespace PPTX

View File

@ -38,24 +38,23 @@ namespace PPTX
{
namespace Logic
{
std::wstring Control::GetVmlXmlBySpid(std::wstring spid, std::wstring & rels) const
std::wstring Control::GetVmlXmlBySpid(std::wstring spid, smart_ptr<OOX::IFileContainer> & rels) const
{
std::wstring xml;
rels = _T("");
if(parentFileIs<PPTX::Slide>() && parentFileAs<PPTX::Slide>().Vml.IsInit())
{
xml = parentFileAs<PPTX::Slide>().GetVmlXmlBySpid(spid);
rels = parentFileAs<PPTX::Slide>().Vml->GetReadPath().GetPath();
rels = parentFileAs<PPTX::Slide>().Vml.smart_dynamic_cast<OOX::IFileContainer>();
}
else if(parentFileIs<PPTX::SlideLayout>() && parentFileAs<PPTX::SlideLayout>().Vml.IsInit())
{
xml= parentFileAs<PPTX::SlideLayout>().GetVmlXmlBySpid(spid);
rels = parentFileAs<PPTX::SlideLayout>().Vml->GetReadPath().GetPath();
rels = parentFileAs<PPTX::SlideLayout>().Vml.smart_dynamic_cast<OOX::IFileContainer>();
}
else if(parentFileIs<PPTX::SlideMaster>() && parentFileAs<PPTX::SlideMaster>().Vml.IsInit())
{
xml = parentFileAs<PPTX::SlideMaster>().GetVmlXmlBySpid(spid);
rels = parentFileAs<PPTX::SlideMaster>().Vml->GetReadPath().GetPath();
rels = parentFileAs<PPTX::SlideMaster>().Vml.smart_dynamic_cast<OOX::IFileContainer>();
}
return xml;
@ -67,7 +66,7 @@ namespace PPTX
std::wstring s = *spid;
if (s.length() < 8) s = _T("_x0000_s") + s;
std::wstring rels;
smart_ptr<OOX::IFileContainer> rels;
std::wstring xml = GetVmlXmlBySpid(s, rels);
if (xml.length() > 0)
@ -82,7 +81,7 @@ namespace PPTX
RELEASEOBJECT(oDrawingConverter.m_pBinaryWriter->m_pCommon->m_pImageManager);
oDrawingConverter.m_pBinaryWriter->m_pCommon->m_pImageManager = pImageManager;
oDrawingConverter.SetRelsPath(rels);
oDrawingConverter.SetRels(rels);
std::wstring *main_props = NULL;
HRESULT hRes = oDrawingConverter.AddObject(temp, &main_props);
@ -97,7 +96,7 @@ namespace PPTX
std::wstring s = *spid;
if (s.length() < 8) s = _T("_x0000_s") + s;
std::wstring rels;
smart_ptr<OOX::IFileContainer> rels;
std::wstring xml = GetVmlXmlBySpid(s, rels);
if (xml.length() > 0)
@ -113,7 +112,7 @@ namespace PPTX
std::wstring *main_props = NULL;
oDrawingConverter.SetRelsPath(rels);
oDrawingConverter.SetRels(rels);
HRESULT hRes = oDrawingConverter.AddObject(temp, &main_props);
if (hRes == S_OK && oDrawingConverter.m_pBinaryWriter->GetPosition() > 10)

View File

@ -50,7 +50,8 @@ namespace PPTX
public:
void AddObjectTo (const std::vector<SpTreeElem> *spTreeElements, NSShapeImageGen::CImageManager* pImageManager) const ;
std::wstring GetVmlXmlBySpid(std::wstring spid, std::wstring & rels) const ;
std::wstring GetVmlXmlBySpid(std::wstring spid, smart_ptr<OOX::IFileContainer> & rels) const ;
virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const ;

View File

@ -99,7 +99,7 @@ namespace PPTX
Effects[i].SetParentPointer(this);
}
std::wstring Blip::GetFullPicName(FileContainer* pRels)const
std::wstring Blip::GetFullPicName(OOX::IFileContainer* pRels)const
{
if(embed.IsInit())
{
@ -141,7 +141,7 @@ namespace PPTX
}
return _T("");
}
std::wstring Blip::GetFullOleName(const OOX::RId& oRId, FileContainer* pRels)const
std::wstring Blip::GetFullOleName(const OOX::RId& oRId, OOX::IFileContainer* pRels)const
{
smart_ptr<OOX::OleObject> pOleObject;

View File

@ -135,10 +135,10 @@ namespace PPTX
double dW = pWriter->GetShapeWidth(); //mm
double dH = pWriter->GetShapeHeight();
FileContainer* pRels = NULL;
OOX::IFileContainer* pRels = NULL;
if (pWriter->m_pCommonRels->is_init())
pRels = pWriter->m_pCommonRels->operator ->();
if (pWriter->m_pCurrentContainer->is_init())
pRels = pWriter->m_pCurrentContainer->operator ->();
std::wstring olePath;
if(!oleFilepathBin.empty())
@ -171,8 +171,8 @@ namespace PPTX
pWriter->EndRecord();
}
virtual std::wstring GetFullPicName(FileContainer* pRels = NULL)const;
virtual std::wstring GetFullOleName(const OOX::RId& pRId, FileContainer* pRels = NULL)const;
virtual std::wstring GetFullPicName(OOX::IFileContainer* pRels = NULL)const;
virtual std::wstring GetFullOleName(const OOX::RId& pRId, OOX::IFileContainer* pRels = NULL)const;
std::vector<UniEffect> Effects;

View File

@ -375,8 +375,8 @@ namespace PPTX
return;
}
std::wstring xml_object_vml;
std::wstring xml_object_rels;
std::wstring xml_object_vml;
smart_ptr<OOX::IFileContainer> xml_object_rels;
if (oleSpid.is_init())
{
@ -452,7 +452,7 @@ namespace PPTX
std::wstring *main_props = NULL;
oDrawingConverter.SetRelsPath(xml_object_rels);
oDrawingConverter.SetRels(xml_object_rels);
oDrawingConverter.SetAdditionalParam(L"xfrm_override", (BYTE*)xfrm.GetPointer(), sizeof(xfrm));
HRESULT hRes = oDrawingConverter.AddObject(temp, &main_props);
@ -613,35 +613,29 @@ namespace PPTX
{
nvGraphicFramePr.SetParentPointer(this);
if (xfrm.IsInit())
xfrm->SetParentPointer(this);
if(table.IsInit())
table->SetParentPointer(this);
if (smartArt.is_init())
smartArt->SetParentPointer(this);
if (chartRec.is_init())
chartRec->SetParentPointer(this);
if (olePic.is_init())
olePic->SetParentPointer(this);
if (xfrm.IsInit()) xfrm->SetParentPointer(this);
if (table.IsInit()) table->SetParentPointer(this);
if (smartArt.is_init()) smartArt->SetParentPointer(this);
if (chartRec.is_init()) chartRec->SetParentPointer(this);
if (olePic.is_init()) olePic->SetParentPointer(this);
}
std::wstring GraphicFrame::GetVmlXmlBySpid(std::wstring & rels)const
std::wstring GraphicFrame::GetVmlXmlBySpid(smart_ptr<OOX::IFileContainer> & rels)const
{
std::wstring xml;
rels = L"";
if(parentFileIs<PPTX::Slide>() && parentFileAs<PPTX::Slide>().Vml.IsInit())
{
xml = parentFileAs<PPTX::Slide>().GetVmlXmlBySpid(oleSpid.get_value_or(L""));
rels = parentFileAs<PPTX::Slide>().Vml->GetReadPath().GetPath();
rels = parentFileAs<PPTX::Slide>().Vml.smart_dynamic_cast<OOX::IFileContainer>();
}
else if(parentFileIs<PPTX::SlideLayout>() && parentFileAs<PPTX::SlideLayout>().Vml.IsInit())
{
xml= parentFileAs<PPTX::SlideLayout>().GetVmlXmlBySpid(oleSpid.get_value_or(L""));
rels = parentFileAs<PPTX::SlideLayout>().Vml->GetReadPath().GetPath();
xml = parentFileAs<PPTX::SlideLayout>().GetVmlXmlBySpid(oleSpid.get_value_or(L""));
rels = parentFileAs<PPTX::SlideLayout>().Vml.smart_dynamic_cast<OOX::IFileContainer>();
}
else if(parentFileIs<PPTX::SlideMaster>() && parentFileAs<PPTX::SlideMaster>().Vml.IsInit())
{
xml = parentFileAs<PPTX::SlideMaster>().GetVmlXmlBySpid(oleSpid.get_value_or(L""));
rels = parentFileAs<PPTX::SlideMaster>().Vml->GetReadPath().GetPath();
xml = parentFileAs<PPTX::SlideMaster>().GetVmlXmlBySpid(oleSpid.get_value_or(L""));
rels = parentFileAs<PPTX::SlideMaster>().Vml.smart_dynamic_cast<OOX::IFileContainer>();
}
return xml;

View File

@ -36,7 +36,6 @@
#include "./../WrapperWritingElement.h"
#include "NvGraphicFramePr.h"
#include "Xfrm.h"
#include "ShapeProperties.h"
#include "Table/Table.h"
#include "SmartArt.h"
#include "Pic.h"
@ -99,7 +98,7 @@ namespace PPTX
SpTreeElem element;
std::wstring GetVmlXmlBySpid(std::wstring & rels) const;
std::wstring GetVmlXmlBySpid(smart_ptr<OOX::IFileContainer> & rels) const;
protected:
virtual void FillParentPointersForChilds();
};

View File

@ -41,7 +41,7 @@ namespace PPTX
{
namespace Logic
{
std::wstring Hyperlink::GetFullHyperlinkName(FileContainer* pRels)const
std::wstring Hyperlink::GetFullHyperlinkName(OOX::IFileContainer* pRels)const
{
if(id.IsInit() && *id != _T(""))
{

View File

@ -113,9 +113,9 @@ namespace PPTX
if (id.is_init())
{
FileContainer* pRels = NULL;
if (pWriter->m_pCommonRels->is_init())
pRels = pWriter->m_pCommonRels->operator ->();
OOX::IFileContainer* pRels = NULL;
if (pWriter->m_pCurrentContainer->is_init())
pRels = pWriter->m_pCurrentContainer->operator ->();
std::wstring str = GetFullHyperlinkName(pRels);
pWriter->WriteString1(0, str);
@ -256,7 +256,7 @@ namespace PPTX
snd->SetParentPointer(this);
}
virtual std::wstring GetFullHyperlinkName(FileContainer* pRels)const;
virtual std::wstring GetFullHyperlinkName(OOX::IFileContainer* pRels)const;
};
} // namespace Logic
} // namespace PPTX

View File

@ -112,9 +112,9 @@ namespace PPTX
if(m_oId.IsInit() && ole_file.IsInit() == false)
{
FileContainer* pRels = NULL;
if (pWriter->m_pCommonRels->is_init())
pRels = pWriter->m_pCommonRels->operator ->();
OOX::IFileContainer* pRels = NULL;
if (pWriter->m_pCurrentContainer->is_init())
pRels = pWriter->m_pCurrentContainer->operator ->();
ole_file = GetOleObject(m_oId.get(), pRels);
}
@ -163,8 +163,8 @@ namespace PPTX
DocWrapper::FontProcessor fp;
NSBinPptxRW::CDrawingConverter oDrawingConverter;
NSBinPptxRW::CBinaryFileWriter* old_writer = oDrawingConverter.m_pBinaryWriter;
NSCommon::smart_ptr<PPTX::CCommonRels> old_rels = *pWriter->m_pCommonRels;
NSBinPptxRW::CBinaryFileWriter* old_writer = oDrawingConverter.m_pBinaryWriter;
NSCommon::smart_ptr<OOX::IFileContainer> old_rels = *pWriter->m_pCurrentContainer;
oDrawingConverter.m_pBinaryWriter = pWriter;
@ -176,7 +176,7 @@ namespace PPTX
pWriter->EndRecord();
oDrawingConverter.m_pBinaryWriter = old_writer;
*pWriter->m_pCommonRels = old_rels;
*pWriter->m_pCurrentContainer = old_rels;
}
else if (office_checker.nFileType == AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX)
//if ( std::wstring::npos != sProgID.find(L"Excel.Sheet")) //"ET.Xlsx.6" !!!
@ -189,7 +189,7 @@ namespace PPTX
NSBinPptxRW::CDrawingConverter oDrawingConverter;
NSBinPptxRW::CBinaryFileWriter* old_writer = oDrawingConverter.m_pBinaryWriter;
NSCommon::smart_ptr<PPTX::CCommonRels> old_rels = *pWriter->m_pCommonRels;
NSCommon::smart_ptr<OOX::IFileContainer> old_rels = *pWriter->m_pCurrentContainer;
oDrawingConverter.m_pBinaryWriter = pWriter;
@ -201,7 +201,7 @@ namespace PPTX
pWriter->EndRecord();
oDrawingConverter.m_pBinaryWriter = old_writer;
*pWriter->m_pCommonRels = old_rels;
*pWriter->m_pCurrentContainer = old_rels;
}
//else if (office_checker.nFileType == AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX)
//{
@ -469,7 +469,7 @@ namespace PPTX
return m_sProgId.IsInit() && (m_sData.IsInit() || m_oId.IsInit() || m_OleObjectFile.IsInit());
}
smart_ptr<OOX::OleObject> COLEObject::GetOleObject(const OOX::RId& oRId, FileContainer* pRels) const
smart_ptr<OOX::OleObject> COLEObject::GetOleObject(const OOX::RId& oRId, OOX::IFileContainer* pRels) const
{
smart_ptr<OOX::OleObject> ole_file = m_OleObjectFile;
if (ole_file.IsInit() == false)

View File

@ -198,7 +198,7 @@ namespace PPTX
bool isValid();
smart_ptr<OOX::OleObject> GetOleObject(const OOX::RId& oRId, FileContainer* pRels)const;
smart_ptr<OOX::OleObject> GetOleObject(const OOX::RId& oRId, OOX::IFileContainer* pRels)const;
std::wstring GetOleData (const std::wstring& sFilePath)const;
nullable_limit<Limit::OLEDrawAspectType>m_oDrawAspect;

View File

@ -43,8 +43,8 @@ namespace PPTX
{
Shape::Shape(std::wstring name_)
{
m_name = name_;
levelUp = NULL;
m_name = name_;
m_pLevelUp = NULL;
}
Shape::~Shape()
@ -53,21 +53,27 @@ namespace PPTX
Shape::Shape(XmlUtils::CXmlNode& node)
{
levelUp = NULL;
m_pLevelUp = NULL;
fromXML(node);
}
Shape::Shape(XmlUtils::CXmlLiteReader& oReader)
{
levelUp = NULL;
m_pLevelUp = NULL;
fromXML(oReader);
}
const Shape& Shape::operator =(XmlUtils::CXmlNode& node)
{
m_pLevelUp = NULL;
fromXML(node);
return *this;
}
const Shape& Shape::operator =(XmlUtils::CXmlLiteReader& oReader)
{
m_pLevelUp = NULL;
fromXML(oReader);
return *this;
}
@ -367,11 +373,11 @@ namespace PPTX
{
nvSpPr.SetParentPointer(this);
spPr.SetParentPointer(this);
if(style.IsInit())
if (style.IsInit())
style->SetParentPointer(this);
if(txBody.IsInit())
txBody->SetParentPointer(this);
levelUp = NULL;
if (txBody.IsInit())
txBody->SetParentPointer(this);
}
void Shape::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter)const
@ -431,258 +437,79 @@ namespace PPTX
pWriter->EndRecord();
}
void Shape::GetRect(Aggplus::RECT& pRect)const
void Shape::FillLevelUp()
{
pRect.bottom = 0;
pRect.left = 0;
pRect.right = 0;
pRect.top = 0;
if(spPr.xfrm.is_init())
if ((m_pLevelUp == NULL) && (nvSpPr.nvPr.ph.IsInit()))
{
pRect.left = spPr.xfrm->offX.get_value_or(0);
pRect.top = spPr.xfrm->offY.get_value_or(0);
pRect.right = pRect.left + spPr.xfrm->extX.get_value_or(0);
pRect.bottom = pRect.top + spPr.xfrm->extY.get_value_or(0);
}
if(parentIs<Logic::SpTree>())
parentAs<Logic::SpTree>().NormalizeRect(pRect);
}
void Shape::FillLevelUp()const
{
if((levelUp == NULL) && (nvSpPr.nvPr.ph.IsInit()))
{
if((nvSpPr.nvPr.ph->type.IsInit()) || (nvSpPr.nvPr.ph->idx.IsInit()))
if ((nvSpPr.nvPr.ph->type.IsInit()) || (nvSpPr.nvPr.ph->idx.IsInit()))
{
if(parentFileIs<Slide>())
parentFileAs<Slide>().Layout->GetLevelUp(*this);
if (parentFileIs<Slide>())
parentFileAs<Slide>().Layout->GetLevelUp(this);
else if(parentFileIs<SlideLayout>())
parentFileAs<SlideLayout>().Master->GetLevelUp(*this);
parentFileAs<SlideLayout>().Master->GetLevelUp(this);
}
}
}
void Shape::FillShapeProperties(ShapeProperties& props)
bool Shape::IsListStyleEmpty()
{
//props.SetParentFilePointer(*parentFile);
if(parentFileIs<SlideMaster>())
if ((m_pLevelUp) && (m_pLevelUp->IsListStyleEmpty() == false)) return false;
if (txBody.IsInit() == false) return true;
if (txBody->lstStyle.IsInit() == false) return true;
for (int i = 0; i < 10; i++)
{
std::wstring type = nvSpPr.nvPr.ph.IsInit()?nvSpPr.nvPr.ph->type.get_value_or(_T("body")):_T("");
//if( (nvSpPr->cNvSpPr->txBox.get_value_or(false)) && (type == "") )
// type = "text-box";
parentFileAs<SlideMaster>().FillShapeProperties(props, type);
props.FillFromTextBody(txBody);
if(style.IsInit())
props.FillFontRef(style->fontRef);
//props.SetParentFilePointer(parentFile);
if (txBody->lstStyle->levels[i].IsInit())
return false;
}
else if(parentFileIs<SlideLayout>())
{
//FillLevelUp();
//if(levelUp != NULL)
// levelUp->GetShapeProperties(props);
//else
//{
std::wstring type = nvSpPr.nvPr.ph.IsInit()?nvSpPr.nvPr.ph->type.get_value_or(_T("body")):_T("");
//if( (nvSpPr->cNvSpPr->txBox.get_value_or(false)) && (type == "") )
// type = "text-box";
parentFileAs<SlideLayout>().FillShapeProperties(props, type);
//}
props.FillFromTextBody(txBody);
if(style.IsInit())
props.FillFontRef(style->fontRef);
//props.SetParentFilePointer(parentFile);
}
else if(parentFileIs<Slide>())
{
//FillLevelUp();
//if(levelUp != NULL)
// levelUp->GetShapeProperties(props);
//else
//{
std::wstring type = nvSpPr.nvPr.ph.is_init()?nvSpPr.nvPr.ph->type.get_value_or(_T("body")):_T("");
//if( (nvSpPr->cNvSpPr->txBox.get_value_or(false)) && (type == "") )
// type = "text-box";
parentFileAs<Slide>().FillShapeProperties(props, type);
//}
props.FillFromTextBody(txBody);
if(style.IsInit())
props.FillFontRef(style->fontRef);
//props.SetParentFilePointer(parentFile);
}
props.SetParentFilePointer(parentFile);
return true;
}
void Shape::FillShapeTextProperties(CShapeTextProperties& props)
void Shape::Merge(Shape& shape, bool bIsSlidePlaceholder)
{
std::wstring type = nvSpPr.nvPr.ph.IsInit()?nvSpPr.nvPr.ph->type.get_value_or(_T("body")):_T("");
if (parentFileIs<SlideMaster>())
{
parentFileAs<SlideMaster>().FillShapeTextProperties(props, type);
props.FillFromTextBody(txBody, NULL);
if (style.IsInit())
props.FillFontRef(style->fontRef, isFontRefInSlide);
}
else if (parentFileIs<SlideLayout>())
{
parentFileAs<SlideLayout>().FillShapeTextProperties(props, type);
props.FillFromTextBody(txBody, NULL);
if(style.IsInit())
props.FillFontRef(style->fontRef, isFontRefInSlide);
}
else if (parentFileIs<Slide>())
{
parentFileAs<Slide>().FillShapeTextProperties(props, type);
props.FillFromTextBody(txBody, body);
if(style.IsInit())
props.FillFontRef(style->fontRef, isFontRefInSlide);
}
if (m_pLevelUp)
m_pLevelUp->Merge(shape, true);
props.SetParentFilePointer(parentFile);
}
DWORD Shape::GetFill(UniFill& fill)const
{
DWORD BGRA = 0;
//fill.SetParentFilePointer(*parentFile);
if(style.IsInit())
{
if(parentFileIs<PPTX::Slide>())
parentFileAs<PPTX::Slide>().theme->GetFillStyle(style->fillRef.idx.get_value_or(0), fill);
else if(parentFileIs<PPTX::SlideLayout>())
parentFileAs<PPTX::SlideLayout>().theme->GetFillStyle(style->fillRef.idx.get_value_or(0), fill);
else if(parentFileIs<PPTX::SlideMaster>())
parentFileAs<PPTX::SlideMaster>().theme->GetFillStyle(style->fillRef.idx.get_value_or(0), fill);
if (style->fillRef.Color.is_init())
{
if (fill.is<PPTX::Logic::SolidFill>())
{
fill.as<PPTX::Logic::SolidFill>().Color = style->fillRef.Color;
}
}
BGRA = style->fillRef.Color.GetBGRA();
}
if(spPr.Fill.is_init())
spPr.Fill.Merge(fill);
//if((!fill.is_init()) && (bMergeWithLevelUp))
//{
// FillLevelUp();
// if(levelUp != NULL)
// BGRA = levelUp->GetFill(fill);
//}
return BGRA;
}
DWORD Shape::GetLine(Ln& line)const
{
DWORD BGRA = 0;
if(style.IsInit())
{
if(parentFileIs<PPTX::Slide>())
parentFileAs<PPTX::Slide>().theme->GetLineStyle(style->lnRef.idx.get_value_or(0), line);
else if(parentFileIs<PPTX::SlideLayout>())
parentFileAs<PPTX::SlideLayout>().theme->GetLineStyle(style->lnRef.idx.get_value_or(0), line);
else if(parentFileIs<PPTX::SlideMaster>())
parentFileAs<PPTX::SlideMaster>().theme->GetLineStyle(style->lnRef.idx.get_value_or(0), line);
BGRA = style->lnRef.Color.GetBGRA();
}
if(spPr.ln.IsInit())
spPr.ln->Merge(line);
return BGRA;
}
void Shape::Merge(Shape& shape, bool bIsSlidePlaceholder)const
{
shape.nvSpPr = nvSpPr;
shape.m_name = m_name;
shape.nvSpPr = nvSpPr;
spPr.Merge(shape.spPr);
if(style.is_init())
if (style.is_init())
{
shape.isFontRefInSlide = bIsSlidePlaceholder;
shape.m_bIsFontRefInSlide = bIsSlidePlaceholder;
shape.style = style;
shape.style->SetParentFilePointer(parentFile);
}
if (!bIsSlidePlaceholder)
{
if(txBody.IsInit())
{
if(!shape.txBody.is_init())
shape.txBody = new TxBody();
txBody->Merge(shape.txBody);
if (txBody.IsInit())
{
if(!shape.txBody.is_init())
shape.txBody = new TxBody();
if (!bIsSlidePlaceholder)
{
txBody->Merge(shape.txBody);
shape.txBody->Paragrs = txBody->Paragrs;
}
}
else
{
if (txBody.is_init())
{
if(!shape.txBody.is_init())
shape.txBody = new TxBody();
else
{
if (txBody->bodyPr.IsInit())
txBody->bodyPr->Merge(shape.txBody->bodyPr);
if(txBody->lstStyle.is_init())
txBody->bodyPr->Merge(shape.txBody->bodyPr);
}
if (txBody->lstStyle.is_init())
{
if(!shape.txBody->lstStyle.is_init())
shape.txBody->lstStyle = new TextListStyle();
for (int i = 0; i < 10; i++)
{
for (int i = 0; i < 10; i++)
if(txBody->lstStyle->levels[i].is_init())
txBody->lstStyle->levels[i]->Merge(body[i]);
if(txBody->lstStyle->levels[i].is_init())
txBody->lstStyle->levels[i]->Merge(shape.txBody->lstStyle->levels[i]);
}
}
}
}
void Shape::GetShapeFullDescription(Shape& shape, int level)const
{
if(level == 0)
//shape.SetParentFilePointer(*parentFile);
shape.SetParentPointer(parentElement);
if(!nvSpPr.nvPr.ph.is_init())
{
Merge(shape);
return;
}
if(parentFileIs<PPTX::SlideMaster>())
{
Merge(shape);
return;
}
if(parentFileIs<PPTX::SlideLayout>())
{
FillLevelUp();
if(levelUp != NULL)
levelUp->GetShapeFullDescription(shape, level + 1);
Merge(shape);
return;
}
if(parentFileIs<PPTX::Slide>())
{
FillLevelUp();
if(levelUp != NULL)
levelUp->GetShapeFullDescription(shape, level + 1);
Merge(shape, true);
return;
}
}
void Shape::toXmlWriterVML(NSBinPptxRW::CXmlWriter *pWriter, NSCommon::smart_ptr<PPTX::Theme>& oTheme, NSCommon::smart_ptr<PPTX::Logic::ClrMap>& oClrMap, bool in_group)
{
std::wstring strPath, strTextRect;

View File

@ -38,8 +38,6 @@
#include "SpPr.h"
#include "ShapeStyle.h"
#include "TxBody.h"
#include "ShapeProperties.h"
#include "ShapeTextProperties.h"
#include "UniFill.h"
#include "Ln.h"
@ -303,19 +301,11 @@ namespace PPTX
}
std::wstring GetText()const{if(txBody.IsInit()) return txBody->GetText(); return _T(""); };
void GetShapeFullDescription(Shape& shape, int level = 0)const;
void GetRect(Aggplus::RECT& pRect)const;
DWORD GetFill(UniFill& fill)const;
DWORD GetLine(Ln& line)const;
void FillLevelUp();
void Merge(Shape& shape, bool bIsSlidePlaceholder = false);
bool IsListStyleEmpty();
void FillShapeProperties(ShapeProperties& props);
void FillShapeTextProperties(CShapeTextProperties& props);
void FillLevelUp()const;
mutable Shape const * levelUp;
void Merge(Shape& shape, bool bIsSlidePlaceholder = false)const;
public:
void SetLevelUpElement(const Shape& p)const{levelUp = &p;};
void SetLevelUpElement( Shape* p){m_pLevelUp = p;};
virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const;
void toXmlWriterVML (NSBinPptxRW::CXmlWriter* pWriter, smart_ptr<PPTX::Theme>& oTheme, smart_ptr<PPTX::Logic::ClrMap>& oClrMap, bool in_group = false);
@ -326,8 +316,9 @@ namespace PPTX
//-------------------------------------------------------------------------------------------------
std::wstring m_name;
bool m_bOleShape;
Shape * m_pLevelUp;
bool m_bIsFontRefInSlide;
//-------------------------------------------------------------------------------------------------
NvSpPr nvSpPr;
SpPr spPr;
nullable<ShapeStyle> style;
@ -338,10 +329,6 @@ namespace PPTX
nullable<OOX::Logic::CSdtContent> oTextBoxShape;
nullable<BodyPr> oTextBoxBodyPr;
bool isFontRefInSlide;
mutable nullable<TextParagraphPr> body[10];
// Attributes
nullable_bool attrUseBgFill;
protected:
virtual void FillParentPointersForChilds();

View File

@ -1,824 +0,0 @@
/*
* (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
*
*/
#include "ShapeProperties.h"
#include "Fills/SolidFill.h"
#include "Fills/GradFill.h"
#include "../Slide.h"
#include "../SlideLayout.h"
#include "../SlideMaster.h"
namespace PPTX
{
namespace Logic
{
ShapeProperties::ShapeProperties()
{
for(int i = 0; i < 10; i++)
{
TextParagraphPr ppr;
RunProperties rpr;
ppr.defRPr = rpr;
levels[i] = ppr;
masters[i] = ppr;
}
m_nTextType = 0;
}
ShapeProperties::~ShapeProperties()
{
}
void ShapeProperties::FillFromTextBody(const nullable<TxBody>& Src)
{
if(Src.IsInit())
{
if (Src->bodyPr.IsInit())
Src->bodyPr->Merge(bodyPr);
if(Src->lstStyle.IsInit())
{
for(int i = 0; i < 10; i++)
{
if(Src->lstStyle->levels[i].IsInit())
Src->lstStyle->levels[i]->Merge(levels[i]);
}
}
}
}
void ShapeProperties::FillFromTextListStyle(const nullable<TextListStyle>& Src)
{
if(Src.IsInit())
{
for(int i = 0; i < 10; i++)
{
if(Src->levels[i].IsInit())
Src->levels[i]->Merge(masters[i]);
}
}
}
void ShapeProperties::FillFromTextListStyle(const TextListStyle& Src)
{
for(int i = 0; i < 10; i++)
{
if(Src.levels[i].IsInit())
Src.levels[i]->Merge(masters[i]);
}
}
void ShapeProperties::FillFontRef(const FontRef& Src)
{
fontStyle = Src;
}
void ShapeProperties::FillMasterFontSize(int size)
{
for(int i = 0; i < 10; i++)
{
if(masters[i]->defRPr.IsInit())
masters[i]->defRPr->sz = size;
else
{
PPTX::Logic::RunProperties rpr;
rpr.sz = size;
masters[i]->defRPr = rpr;
}
}
}
std::wstring ShapeProperties::GetParagraphAlgn(int level, const nullable<TextParagraphPr>& pParagraph)const
{
if(pParagraph.IsInit())
if(pParagraph->algn.IsInit())
return pParagraph->algn->get();
//return levels[level]->algn.get_value_or(masters[level]->algn.get_value_or(0));
if (levels[level]->algn.is_init())
return levels[level]->algn.get_value();
if (masters[level]->algn.is_init())
return masters[level]->algn.get_value();
return _T("l");
}
int ShapeProperties::GetParagraphLeftMargin(int level, const nullable<TextParagraphPr>& pParagraph)const
{
if(pParagraph.IsInit())
if(pParagraph->marL.IsInit())
return pParagraph->marL.get();
//return levels[level]->marL.get_value_or(levels[9].marL.get_value_or(347663));
//return levels[level]->marL.get_value_or(masters[level]->marL.get_value_or(0));
if (levels[level]->marL.is_init())
return levels[level]->marL.get();
if (masters[level]->marL.is_init())
return masters[level]->marL.get();
return 0;
}
int ShapeProperties::GetParagraphIndent(int level, const nullable<TextParagraphPr>& pParagraph)const
{
if(pParagraph.IsInit())
if(pParagraph->indent.IsInit())
return pParagraph->indent.get();
//return levels[level]->indent.get_value_or(levels[9].indent.get_value_or(-342900));
//return levels[level]->indent.get_value_or(masters[level]->indent.get_value_or(0));
if (levels[level]->indent.is_init())
return levels[level]->indent.get();
if (masters[level]->indent.is_init())
return masters[level]->indent.get();
return 0;
}
int ShapeProperties::GetParagraphDefTabSz(int level, const nullable<TextParagraphPr>& pParagraph)const
{
if(pParagraph.IsInit())
if(pParagraph->defTabSz.IsInit())
return pParagraph->defTabSz.get();
//return levels[level]->defTabSz.get_value_or(levels[9].defTabSz.get_value_or(376300));
//return levels[level]->defTabSz.get_value_or(masters[level]->defTabSz.get_value_or(376300));
if (levels[level]->defTabSz.is_init())
return levels[level]->defTabSz.get();
if (masters[level]->defTabSz.is_init())
return masters[level]->defTabSz.get();
return 376300;
}
std::wstring ShapeProperties::GetParagraphFontAlgn(int level, const nullable<TextParagraphPr>& pParagraph)const
{
if(pParagraph.IsInit())
if(pParagraph->fontAlgn.IsInit())
return pParagraph->fontAlgn->get();
//return levels[level]->fontAlgn.get_value_or(levels[9].fontAlgn.get_value_or("base"));
//return levels[level]->fontAlgn.get_value_or(masters[level]->fontAlgn.get_value_or(_T("base")));
if (levels[level]->fontAlgn.is_init())
return levels[level]->fontAlgn.get_value();
if (masters[level]->fontAlgn.is_init())
return masters[level]->fontAlgn.get_value();
return _T("base");
}
bool ShapeProperties::GetParagraphLatinLnBrk(int level, const nullable<TextParagraphPr>& pParagraph)const
{
if(pParagraph.IsInit())
if(pParagraph->latinLnBrk.IsInit())
return pParagraph->latinLnBrk.get();
//return levels[level]->latinLnBrk.get_value_or(levels[9].latinLnBrk.get_value_or(true));
//return levels[level]->latinLnBrk.get_value_or(masters[level]->latinLnBrk.get_value_or(false));
if (levels[level]->latinLnBrk.is_init())
return levels[level]->latinLnBrk.get();
if (masters[level]->latinLnBrk.is_init())
return masters[level]->latinLnBrk.get();
return false;
}
bool ShapeProperties::GetParagraphRtl(int level, const nullable<TextParagraphPr>& pParagraph)const
{
if(pParagraph.IsInit())
if(pParagraph->rtl.IsInit())
return pParagraph->rtl.get();
//return levels[level]->rtl.get_value_or(levels[9].rtl.get_value_or(false));
//return levels[level]->rtl.get_value_or(masters[level]->rtl.get_value_or(false));
if (levels[level]->rtl.is_init())
return levels[level]->rtl.get();
if (masters[level]->rtl.is_init())
return masters[level]->rtl.get();
return false;
}
int ShapeProperties::GetParagraphLnSpc(int level, const nullable<TextParagraphPr>& pParagraph)const
{
if(pParagraph.IsInit())
if(pParagraph->lnSpc.IsInit())
return pParagraph->lnSpc->GetVal();
if(levels[level]->lnSpc.IsInit())
return levels[level]->lnSpc->GetVal();
if(masters[level]->lnSpc.IsInit())
return masters[level]->lnSpc->GetVal();
return 100;//0;
}
int ShapeProperties::GetParagraphSpcAft(int level, const nullable<TextParagraphPr>& pParagraph)const
{
if(pParagraph.IsInit())
if(pParagraph->spcAft.IsInit())
return pParagraph->spcAft->GetVal();
if(levels[level]->spcAft.IsInit())
return levels[level]->spcAft->GetVal();
if(masters[level]->spcAft.IsInit())
return masters[level]->spcAft->GetVal();
return 0;
}
int ShapeProperties::GetParagraphSpcBef(int level, const nullable<TextParagraphPr>& pParagraph)const
{
if(pParagraph.IsInit())
if(pParagraph->spcBef.IsInit())
return pParagraph->spcBef->GetVal();
if(levels[level]->spcBef.IsInit())
return levels[level]->spcBef->GetVal();
if(masters[level]->spcBef.IsInit())
return masters[level]->spcBef->GetVal();
return 0;
}
bool ShapeProperties::HasParagraphBullet(int level, const nullable<TextParagraphPr>& pParagraph)const
{
if(pParagraph.IsInit())
if(pParagraph->ParagraphBullet.is_init())
return pParagraph->ParagraphBullet.has_bullet();
if(levels[level]->ParagraphBullet.is_init())
return levels[level]->ParagraphBullet.has_bullet();
return masters[level]->ParagraphBullet.has_bullet();
}
bool ShapeProperties::GetRunBold(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
if(pRun.IsInit())
if(pRun->b.IsInit())
return pRun->b.get();
if(pParagraph.IsInit())
if(pParagraph->defRPr.IsInit())
if(pParagraph->defRPr->b.IsInit())
return pParagraph->defRPr->b.get();
//return levels[level].defRPr->b.get_value_or(levels[9].defRPr->b.get_value_or(false));
//return levels[level]->defRPr->b.get_value_or(masters[level]->defRPr->b.get_value_or(false));
if (levels[level]->defRPr->b.is_init())
return levels[level]->defRPr->b.get();
if (masters[level]->defRPr->b.is_init())
return masters[level]->defRPr->b.get();
return false;
}
bool ShapeProperties::GetRunItalic(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
if(pRun.IsInit())
if(pRun->i.IsInit())
return pRun->i.get();
if(pParagraph.IsInit())
if(pParagraph->defRPr.IsInit())
if(pParagraph->defRPr->i.IsInit())
return pParagraph->defRPr->i.get();
//return levels[level]->defRPr->i.get_value_or(levels[9].defRPr->i.get_value_or(false));
//return levels[level]->defRPr->i.get_value_or(masters[level]->defRPr->i.get_value_or(false));
if (levels[level]->defRPr->i.is_init())
return levels[level]->defRPr->i.get();
if (masters[level]->defRPr->i.is_init())
return masters[level]->defRPr->i.get();
return false;
}
std::wstring ShapeProperties::GetRunUnderline(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
if(pRun.IsInit())
if(pRun->u.IsInit())
return pRun->u->get();
if(pParagraph.IsInit())
if(pParagraph->defRPr.IsInit())
if(pParagraph->defRPr->u.IsInit())
return pParagraph->defRPr->u->get();
//return levels[level]->defRPr->u.get_value_or(masters[level]->defRPr->u.get_value_or(_T("none")));
if (levels[level]->defRPr->u.is_init())
return levels[level]->defRPr->u.get_value();
if (masters[level]->defRPr->u.is_init())
return masters[level]->defRPr->u.get_value();
return _T("none");
}
std::wstring ShapeProperties::GetRunStrike(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
if(pRun.IsInit())
if(pRun->strike.IsInit())
return pRun->strike->get();
if(pParagraph.IsInit())
if(pParagraph->defRPr.IsInit())
if(pParagraph->defRPr->strike.IsInit())
return pParagraph->defRPr->strike->get();
//return levels[level]->defRPr->strike.get_value_or(masters[level]->defRPr->strike.get_value_or(_T("noStrike")));
if (levels[level]->defRPr->strike.is_init())
return levels[level]->defRPr->strike.get_value();
if (masters[level]->defRPr->strike.is_init())
return masters[level]->defRPr->strike.get_value();
return _T("noStrike");
}
std::wstring ShapeProperties::GetRunCap(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
if(pRun.is_init())
if(pRun->cap.is_init())
return pRun->cap->get();
if(pParagraph.is_init())
if(pParagraph->defRPr.is_init())
if(pParagraph->defRPr->cap.is_init())
return pParagraph->defRPr->cap->get();
//return levels[level]->defRPr->cap.get_value_or(masters[level]->defRPr->cap.get_value_or(_T("none")));
if (levels[level]->defRPr->cap.is_init())
return levels[level]->defRPr->cap.get_value();
if (masters[level]->defRPr->cap.is_init())
return masters[level]->defRPr->cap.get_value();
return _T("none");
}
int ShapeProperties::GetRunBaseline(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
if(pRun.is_init())
if(pRun->baseline.is_init())
return pRun->baseline.get();
if(pParagraph.is_init())
if(pParagraph->defRPr.is_init())
if(pParagraph->defRPr->baseline.is_init())
return pParagraph->defRPr->baseline.get();
//return levels[level]->defRPr->baseline.get_value_or(masters[level]->defRPr->baseline.get_value_or(0));
if (levels[level]->defRPr->baseline.is_init())
return levels[level]->defRPr->baseline.get();
if (masters[level]->defRPr->baseline.is_init())
return masters[level]->defRPr->baseline.get();
return 0;
}
int ShapeProperties::GetRunSize(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
if(pRun.is_init())
if(pRun->sz.is_init())
return pRun->sz.get();
if(pParagraph.is_init())
if(pParagraph->defRPr.is_init())
if(pParagraph->defRPr->sz.is_init())
return pParagraph->defRPr->sz.get();
//return levels[level]->defRPr->sz.get_value_or(levels[9].defRPr->sz.get_value_or(1000));
//return levels[level]->defRPr->sz.get_value_or(masters[level]->defRPr->sz.get_value_or(1800));
if (levels[level]->defRPr->sz.is_init())
return levels[level]->defRPr->sz.get();
if (masters[level]->defRPr->sz.is_init())
return masters[level]->defRPr->sz.get();
return 1800;
}
int ShapeProperties::GetRunSize(int level)const
{
//return levels[level]->defRPr->sz.get_value_or(masters[level]->defRPr->sz.get_value_or(1800));
if (levels[level]->defRPr->sz.is_init())
return levels[level]->defRPr->sz.get();
if (masters[level]->defRPr->sz.is_init())
return masters[level]->defRPr->sz.get();
return 1800;
}
std::wstring ShapeProperties::GetRunFont(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph, LONG& lFontIndex)const
{
std::wstring strFontName = _T("");
if((pRun.is_init()) && (pRun->latin.is_init()))
strFontName = pRun->latin->typeface;
else if((pParagraph.is_init()) && (pParagraph->defRPr.is_init()) && (pParagraph->defRPr->latin.is_init()))
strFontName = pParagraph->defRPr->latin->typeface;
else
{
if(levels[level]->defRPr->latin.is_init())
strFontName = levels[level]->defRPr->latin->typeface;
else if(fontStyle.is_init())
strFontName = (fontStyle->idx->get() == _T("minor"))?_T("+mn-lt"):_T("+mj-lt");
else if(masters[level]->defRPr->latin.is_init())
strFontName = masters[level]->defRPr->latin->typeface;
}
if(strFontName == _T("+mj-lt"))
{
strFontName = MajorLatin.typeface;
lFontIndex = 0;
}
else if(strFontName == _T("+mn-lt"))
{
strFontName = MinorLatin.typeface;
lFontIndex = 1;
}
else if(strFontName == _T(""))
{
strFontName = MinorLatin.typeface;
lFontIndex = 1;
}
return strFontName;
}
std::wstring ShapeProperties::GetRunPanose(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
std::wstring panose = _T("");
std::wstring style = _T("");
if((pRun.is_init()) && (pRun->latin.is_init()))
panose = pRun->latin->panose.get_value_or(_T(""));
else if((pParagraph.is_init()) && (pParagraph->defRPr.is_init()) && (pParagraph->defRPr->latin.is_init()))
panose = pParagraph->defRPr->latin->panose.get_value_or(_T(""));
else
{
if(levels[level]->defRPr->latin.is_init())
panose = levels[level]->defRPr->latin->panose.get_value_or(_T(""));
else if(fontStyle.is_init())
style = fontStyle->idx.get_value_or(_T("major"));
else if(masters[level]->defRPr->latin.is_init())
panose = masters[level]->defRPr->latin->panose.get_value_or(_T(""));
}
if(style == _T("major"))
panose = MajorLatin.panose.get_value_or(_T(""));
else if(style == _T("minor"))
panose = MinorLatin.panose.get_value_or(_T(""));
return panose;
}
BYTE ShapeProperties::GetRunCharset(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
std::wstring charset = _T("");
std::wstring style = _T("");
if((pRun.is_init()) && (pRun->latin.is_init()))
charset = pRun->latin->charset.get_value_or(_T(""));
else if((pParagraph.is_init()) && (pParagraph->defRPr.is_init()) && (pParagraph->defRPr->latin.is_init()))
charset = pParagraph->defRPr->latin->charset.get_value_or(_T(""));
else
{
if(levels[level]->defRPr->latin.is_init())
charset = levels[level]->defRPr->latin->charset.get_value_or(_T(""));
else if(fontStyle.is_init())
style = fontStyle->idx.get_value_or(_T("major"));
else if(masters[level]->defRPr->latin.is_init())
charset = masters[level]->defRPr->latin->charset.get_value_or(_T(""));
}
if(style == _T("major"))
charset = MajorLatin.charset.get_value_or(_T(""));
else if(style == _T("minor"))
charset = MinorLatin.charset.get_value_or(_T(""));
if(charset == _T(""))
charset = _T("01");
return XmlUtils::GetInteger(charset);
}
BYTE ShapeProperties::GetRunPitchFamily(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
std::wstring pitchFamily = _T("");
std::wstring style = _T("");
if((pRun.is_init()) && (pRun->latin.is_init()))
pitchFamily = pRun->latin->pitchFamily.get_value_or(_T(""));
else if((pParagraph.is_init()) && (pParagraph->defRPr.is_init()) && (pParagraph->defRPr->latin.is_init()))
pitchFamily = pParagraph->defRPr->latin->pitchFamily.get_value_or(_T(""));
else
{
if(levels[level]->defRPr->latin.is_init())
pitchFamily = levels[level]->defRPr->latin->pitchFamily.get_value_or(_T(""));
else if(fontStyle.is_init())
style = fontStyle->idx.get_value_or(_T("major"));
else if(masters[level]->defRPr->latin.is_init())
pitchFamily = masters[level]->defRPr->latin->pitchFamily.get_value_or(_T(""));
}
if(style == _T("major"))
pitchFamily = MajorLatin.pitchFamily.get_value_or(_T(""));
else if(style == _T("minor"))
pitchFamily = MinorLatin.pitchFamily.get_value_or(_T(""));
if(pitchFamily == _T(""))
pitchFamily = _T("0");
return XmlUtils::GetInteger(pitchFamily);
}
DWORD ShapeProperties::GetRunRGBA(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
if(pRun.is_init())
{
if(pRun->Fill.is<SolidFill>())
return pRun->Fill.as<SolidFill>().Color.GetRGBA();
if(pRun->Fill.is<GradFill>())
return pRun->Fill.as<GradFill>().GetFrontColor().GetRGBA();
}
if((pParagraph.is_init()) && (pParagraph->defRPr.is_init()))
{
if(pParagraph->defRPr->Fill.is<SolidFill>())
return pParagraph->defRPr->Fill.as<SolidFill>().Color.GetRGBA();
if(pParagraph->defRPr->Fill.is<GradFill>())
return pParagraph->defRPr->Fill.as<GradFill>().GetFrontColor().GetRGBA();
}
if(levels[level]->defRPr->Fill.is<SolidFill>())
return levels[level]->defRPr->Fill.as<SolidFill>().Color.GetRGBA();
if(levels[level]->defRPr->Fill.is<GradFill>())
return levels[level]->defRPr->Fill.as<GradFill>().GetFrontColor().GetRGBA();
if(fontStyle.is_init())
return fontStyle->Color.GetRGBA();
if(masters[level]->defRPr->Fill.is<SolidFill>())
return masters[level]->defRPr->Fill.as<SolidFill>().Color.GetRGBA();
if(masters[level]->defRPr->Fill.is<GradFill>())
return masters[level]->defRPr->Fill.as<GradFill>().GetFrontColor().GetRGBA();
return 0;
}
DWORD ShapeProperties::GetRunARGB(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
if(pRun.is_init())
{
if(pRun->Fill.is<SolidFill>())
return pRun->Fill.as<SolidFill>().Color.GetARGB();
if(pRun->Fill.is<GradFill>())
return pRun->Fill.as<GradFill>().GetFrontColor().GetARGB();
}
if((pParagraph.is_init()) && (pParagraph->defRPr.is_init()))
{
if(pParagraph->defRPr->Fill.is<SolidFill>())
return pParagraph->defRPr->Fill.as<SolidFill>().Color.GetARGB();
if(pParagraph->defRPr->Fill.is<GradFill>())
return pParagraph->defRPr->Fill.as<GradFill>().GetFrontColor().GetARGB();
}
if(levels[level]->defRPr->Fill.is<SolidFill>())
return levels[level]->defRPr->Fill.as<SolidFill>().Color.GetARGB();
if(levels[level]->defRPr->Fill.is<GradFill>())
return levels[level]->defRPr->Fill.as<GradFill>().GetFrontColor().GetARGB();
if(fontStyle.is_init())
return fontStyle->Color.GetARGB();
if(masters[level]->defRPr->Fill.is<SolidFill>())
return masters[level]->defRPr->Fill.as<SolidFill>().Color.GetARGB();
if(masters[level]->defRPr->Fill.is<GradFill>())
return masters[level]->defRPr->Fill.as<GradFill>().GetFrontColor().GetARGB();
return 0;
}
DWORD ShapeProperties::GetRunBGRA(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
if(pRun.is_init())
{
if(pRun->Fill.is<SolidFill>())
return pRun->Fill.as<SolidFill>().Color.GetBGRA();
if(pRun->Fill.is<GradFill>())
return pRun->Fill.as<GradFill>().GetFrontColor().GetBGRA();
}
if((pParagraph.is_init()) && (pParagraph->defRPr.is_init()))
{
if(pParagraph->defRPr->Fill.is<SolidFill>())
return pParagraph->defRPr->Fill.as<SolidFill>().Color.GetBGRA();
if(pParagraph->defRPr->Fill.is<GradFill>())
return pParagraph->defRPr->Fill.as<GradFill>().GetFrontColor().GetBGRA();
}
if(levels[level]->defRPr->Fill.is<SolidFill>())
return levels[level]->defRPr->Fill.as<SolidFill>().Color.GetBGRA();
if(levels[level]->defRPr->Fill.is<GradFill>())
return levels[level]->defRPr->Fill.as<GradFill>().GetFrontColor().GetBGRA();
if(fontStyle.is_init())
return fontStyle->Color.GetBGRA();
if(masters[level]->defRPr->Fill.is<SolidFill>())
return masters[level]->defRPr->Fill.as<SolidFill>().Color.GetBGRA();
if(masters[level]->defRPr->Fill.is<GradFill>())
return masters[level]->defRPr->Fill.as<GradFill>().GetFrontColor().GetBGRA();
return 0;
}
DWORD ShapeProperties::GetRunABGR(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
if(pRun.is_init())
{
if(pRun->Fill.is<SolidFill>())
return pRun->Fill.as<SolidFill>().Color.GetABGR();
if(pRun->Fill.is<GradFill>())
return pRun->Fill.as<GradFill>().GetFrontColor().GetABGR();
}
if((pParagraph.is_init()) && (pParagraph->defRPr.is_init()))
{
if(pParagraph->defRPr->Fill.is<SolidFill>())
return pParagraph->defRPr->Fill.as<SolidFill>().Color.GetABGR();
if(pParagraph->defRPr->Fill.is<GradFill>())
return pParagraph->defRPr->Fill.as<GradFill>().GetFrontColor().GetABGR();
}
if(levels[level]->defRPr->Fill.is<SolidFill>())
return levels[level]->defRPr->Fill.as<SolidFill>().Color.GetABGR();
if(levels[level]->defRPr->Fill.is<GradFill>())
return levels[level]->defRPr->Fill.as<GradFill>().GetFrontColor().GetABGR();
if(fontStyle.is_init())
return fontStyle->Color.GetABGR();
if(masters[level]->defRPr->Fill.is<SolidFill>())
return masters[level]->defRPr->Fill.as<SolidFill>().Color.GetABGR();
if(masters[level]->defRPr->Fill.is<GradFill>())
return masters[level]->defRPr->Fill.as<GradFill>().GetFrontColor().GetABGR();
return 0;
}
PPTX::Logic::UniColor ShapeProperties::GetColor(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
if(pRun.is_init())
{
if(pRun->Fill.is<SolidFill>())
return pRun->Fill.as<SolidFill>().Color;
if(pRun->Fill.is<GradFill>())
return pRun->Fill.as<GradFill>().GetFrontColor();
}
if((pParagraph.is_init()) && (pParagraph->defRPr.is_init()))
{
if(pParagraph->defRPr->Fill.is<SolidFill>())
return pParagraph->defRPr->Fill.as<SolidFill>().Color;
if(pParagraph->defRPr->Fill.is<GradFill>())
return pParagraph->defRPr->Fill.as<GradFill>().GetFrontColor();
}
if(levels[level]->defRPr->Fill.is<SolidFill>())
return levels[level]->defRPr->Fill.as<SolidFill>().Color;
if(levels[level]->defRPr->Fill.is<GradFill>())
return levels[level]->defRPr->Fill.as<GradFill>().GetFrontColor();
if(fontStyle.is_init())
return fontStyle->Color;
if(masters[level]->defRPr->Fill.is<SolidFill>())
return masters[level]->defRPr->Fill.as<SolidFill>().Color;
if(masters[level]->defRPr->Fill.is<GradFill>())
return masters[level]->defRPr->Fill.as<GradFill>().GetFrontColor();
UniColor oUniColor;
return oUniColor;
}
PPTX::Logic::UniColor ShapeProperties::GetColorBullet(int level, const nullable<TextParagraphPr>& pParagraph)const
{
if(pParagraph.IsInit())
{
if(pParagraph->buColor.is_init())
{
if (pParagraph->buColor.is<Logic::BuClr>())
return pParagraph->buColor.as<Logic::BuClr>().Color;
PPTX::Logic::UniColor oColor;
return oColor;
}
}
if (levels[level]->buColor.is_init())
{
if (levels[level]->buColor.is<Logic::BuClr>())
return levels[level]->buColor.as<Logic::BuClr>().Color;
PPTX::Logic::UniColor oColor;
return oColor;
}
if (masters[level]->buColor.is_init())
{
if (masters[level]->buColor.is<Logic::BuClr>())
return masters[level]->buColor.as<Logic::BuClr>().Color;
PPTX::Logic::UniColor oColor;
return oColor;
}
PPTX::Logic::UniColor oColor;
return oColor;
}
void ShapeProperties::SetParentFilePointer(const WrapperFile* pFile)
{
if (bodyPr.IsInit())
bodyPr->SetParentFilePointer(pFile);
for(int i = 0; i < 10; i ++)
{
levels[i]->SetParentFilePointer(pFile);
masters[i]->SetParentFilePointer(pFile);
}
if(fontStyle.is_init())
fontStyle->SetParentFilePointer(pFile);
}
DWORD ShapeProperties::GetHyperlinkRGBA()const
{
if (!bodyPr.IsInit()) return 0;
if(bodyPr->parentFileIs<Slide>())
return bodyPr->parentFileAs<Slide>().GetRGBAFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideLayout>())
return bodyPr->parentFileAs<SlideLayout>().GetRGBAFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideMaster>())
return bodyPr->parentFileAs<SlideMaster>().GetRGBAFromMap(_T("hlink"));
else return 0;
}
DWORD ShapeProperties::GetHyperlinkARGB()const
{
if (!bodyPr.IsInit()) return 0;
if(bodyPr->parentFileIs<Slide>())
return bodyPr->parentFileAs<Slide>().GetARGBFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideLayout>())
return bodyPr->parentFileAs<SlideLayout>().GetARGBFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideMaster>())
return bodyPr->parentFileAs<SlideMaster>().GetARGBFromMap(_T("hlink"));
else return 0;
}
DWORD ShapeProperties::GetHyperlinkBGRA()const
{
if (!bodyPr.IsInit()) return 0;
if(bodyPr->parentFileIs<Slide>())
return bodyPr->parentFileAs<Slide>().GetBGRAFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideLayout>())
return bodyPr->parentFileAs<SlideLayout>().GetBGRAFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideMaster>())
return bodyPr->parentFileAs<SlideMaster>().GetBGRAFromMap(_T("hlink"));
else return 0;
}
DWORD ShapeProperties::GetHyperlinkABGR()const
{
if (!bodyPr.IsInit()) return 0;
if(bodyPr->parentFileIs<Slide>())
return bodyPr->parentFileAs<Slide>().GetABGRFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideLayout>())
return bodyPr->parentFileAs<SlideLayout>().GetABGRFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideMaster>())
return bodyPr->parentFileAs<SlideMaster>().GetABGRFromMap(_T("hlink"));
else return 0;
}
} // namespace Logic
} // namespace PPTX

View File

@ -1,130 +0,0 @@
/*
* (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
#ifndef PPTX_LOGIC_SHAPEPROPERTIES_INCLUDE_H_
#define PPTX_LOGIC_SHAPEPROPERTIES_INCLUDE_H_
#include "RunProperties.h"
#include "TextListStyle.h"
#include "TxBody.h"
#include "FontRef.h"
#include "TextParagraphPr.h"
#include "BodyPr.h"
#include "TextFont.h"
namespace PPTX
{
namespace Logic
{
class ShapeProperties
{
public:
ShapeProperties();
virtual ~ShapeProperties();
private:
nullable<FontRef> fontStyle;
nullable<TextParagraphPr> levels[10];
nullable<TextParagraphPr> masters[10];
nullable<BodyPr> bodyPr;
//std::string MajorLatin;
//std::string MinorLatin;
TextFont MajorLatin;
TextFont MinorLatin;
DWORD m_nTextType;
public:
void SetTextType(DWORD dwType) { m_nTextType = 0; }
DWORD GetTextType()const { return m_nTextType; }
void FillFromTextListStyle(const nullable<TextListStyle>& Src);
void FillFromTextListStyle(const TextListStyle& Src);
void FillFromTextBody(const nullable<TxBody>& Src);
void FillFontRef(const FontRef& Src);
void FillMasterFontSize(int size);
//void SetMajorLatin(const std::string& mjltFont){MajorLatin = mjltFont;};
//void SetMinorLatin(const std::string& mnltFont){MinorLatin = mnltFont;};
void SetMajorLatin(const TextFont& mjltFont){MajorLatin = mjltFont;};
void SetMinorLatin(const TextFont& mnltFont){MinorLatin = mnltFont;};
std::wstring GetAnchor()const{return bodyPr.IsInit() ? bodyPr->anchor.get_value_or(L"t") : L"t";};
std::wstring GetParagraphAlgn (int level, const nullable<TextParagraphPr>& pParagraph)const;
int GetParagraphLeftMargin (int level, const nullable<TextParagraphPr>& pParagraph)const;
int GetParagraphIndent (int level, const nullable<TextParagraphPr>& pParagraph)const;
int GetParagraphDefTabSz (int level, const nullable<TextParagraphPr>& pParagraph)const;
std::wstring GetParagraphFontAlgn (int level, const nullable<TextParagraphPr>& pParagraph)const;
bool GetParagraphLatinLnBrk (int level, const nullable<TextParagraphPr>& pParagraph)const;
bool GetParagraphRtl (int level, const nullable<TextParagraphPr>& pParagraph)const;
int GetParagraphLnSpc (int level, const nullable<TextParagraphPr>& pParagraph)const;
int GetParagraphSpcAft (int level, const nullable<TextParagraphPr>& pParagraph)const;
int GetParagraphSpcBef (int level, const nullable<TextParagraphPr>& pParagraph)const;
bool HasParagraphBullet (int level, const nullable<TextParagraphPr>& pParagraph)const;
bool GetRunBold (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
bool GetRunItalic (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
std::wstring GetRunUnderline (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
std::wstring GetRunStrike (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
std::wstring GetRunCap (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
int GetRunBaseline (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
int GetRunSize (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
int GetRunSize (int level)const;
std::wstring GetRunFont (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph, LONG& lFontIndex)const;
std::wstring GetRunPanose (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
BYTE GetRunCharset (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
BYTE GetRunPitchFamily (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
DWORD GetRunRGBA (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
DWORD GetRunARGB (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
DWORD GetRunBGRA (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
DWORD GetRunABGR (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
PPTX::Logic::UniColor GetColor(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
PPTX::Logic::UniColor GetColorBullet(int level, const nullable<TextParagraphPr>& pParagraph)const;
DWORD GetHyperlinkRGBA()const;
DWORD GetHyperlinkARGB()const;
DWORD GetHyperlinkBGRA()const;
DWORD GetHyperlinkABGR()const;
void SetParentFilePointer(const WrapperFile* pFile);
};
} // namespace Logic
} // namespace PPTX
#endif // PPTX_LOGIC_SHAPEPROPERTIES_INCLUDE_H

View File

@ -1,658 +0,0 @@
/*
* (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
*
*/
#include "ShapeTextProperties.h"
#include "Fills/SolidFill.h"
#include "Fills/GradFill.h"
#include "../Slide.h"
#include "../SlideLayout.h"
#include "../SlideMaster.h"
namespace PPTX
{
namespace Logic
{
AVSINLINE WORD GetTextAnchorFromStr(const std::wstring& str)
{
if (str == _T("t")) return 0;
if (str == _T("ctr")) return 1;
if (str == _T("b")) return 2;
return 0;
}
AVSINLINE WORD GetTextAlignFromStr(const std::wstring& str)
{
if (str == _T("l")) return 0;
if (str == _T("ctr")) return 1;
if (str == _T("r")) return 2;
if (str == _T("just")) return 3;
if (str == _T("dist")) return 4;
if (str == _T("thaiDist")) return 5;
if (str == _T("justLow")) return 6;
return 0;
}
AVSINLINE WORD GetFontAlignFromStr(const std::wstring& str)
{
if (str == _T("auto")) return 0;
if (str == _T("base")) return 0;
if (str == _T("t")) return 1;
if (str == _T("ctr")) return 2;
if (str == _T("b")) return 3;
return 0;
}
AVSINLINE int GetIntegerFromHex(const std::wstring& string)
{
return XmlUtils::GetInteger(string);
}
CShapeTextProperties::CShapeTextProperties()
{
m_lTextType = -1;
m_bIsFontRefFromSlide = false;
m_lMasterTextSize = -1;
m_bIsSlideShape = false;
m_masters = NULL;
m_pFile = NULL;
}
CShapeTextProperties::~CShapeTextProperties()
{
}
void CShapeTextProperties::FillTextType(const LONG& lTextMasterType)
{
m_lTextType = lTextMasterType;
}
void CShapeTextProperties::FillFromTextBody(const nullable<TxBody>& Src, const nullable<TextParagraphPr>* bodyStyles)
{
if (Src.IsInit())
{
if (Src->bodyPr.IsInit())
Src->bodyPr->Merge(bodyPr);
if (Src->lstStyle.IsInit())
{
for(int i = 0; i < 10; i++)
{
if(Src->lstStyle->levels[i].IsInit())
{
if (NULL == bodyStyles)
{
// не фик мучиться здесь с темами. Это ж не в слайде.
// А в слайде все будет круто
Src->lstStyle->levels[i]->Merge(m_body[i]);
}
else
{
Src->lstStyle->levels[i]->Merge(m_levels[i]);
}
}
}
}
}
if (NULL != bodyStyles)
{
m_bIsSlideShape = true;
for (int i = 0; i < 10; ++i)
{
m_body[i] = bodyStyles[i];
}
}
}
void CShapeTextProperties::FillFontRef(const FontRef& Src, const bool& bIsSlideProperty)
{
m_FontStyle = Src;
}
void CShapeTextProperties::FillMasterFontSize(int size)
{
m_lMasterTextSize = size;
}
nullable_base<WORD> CShapeTextProperties::GetParagraphAlgn(int level, const nullable<TextParagraphPr>& pParagraph)const
{
nullable_base<WORD> prop;
if (pParagraph.is_init())
if (pParagraph->algn.is_init())
prop = GetTextAlignFromStr(pParagraph->algn->get());
return prop;
}
nullable_base<LONG> CShapeTextProperties::GetParagraphLeftMargin(int level, const nullable<TextParagraphPr>& pParagraph)const
{
nullable_base<LONG> prop;
if (pParagraph.is_init())
if (pParagraph->marL.is_init())
prop = (LONG)pParagraph->marL.get();
return prop;
}
nullable_base<LONG> CShapeTextProperties::GetParagraphIndent(int level, const nullable<TextParagraphPr>& pParagraph)const
{
nullable_base<LONG> prop;
if (pParagraph.is_init())
if (pParagraph->indent.is_init())
prop = pParagraph->indent.get();
return prop;
}
nullable_base<LONG> CShapeTextProperties::GetParagraphDefTabSz(int level, const nullable<TextParagraphPr>& pParagraph)const
{
nullable_base<LONG> prop;
if (pParagraph.is_init())
if (pParagraph->defTabSz.is_init())
prop = (LONG)pParagraph->defTabSz.get();
return prop;
}
nullable_base<WORD> CShapeTextProperties::GetParagraphFontAlgn(int level, const nullable<TextParagraphPr>& pParagraph)const
{
nullable_base<WORD> prop;
if (pParagraph.is_init())
if (pParagraph->fontAlgn.is_init())
prop = (WORD)GetFontAlignFromStr(pParagraph->fontAlgn->get());
return prop;
}
nullable_base<WORD> CShapeTextProperties::GetParagraphLatinLnBrk(int level, const nullable<TextParagraphPr>& pParagraph)const
{
nullable_base<WORD> prop;
if (pParagraph.is_init())
if (pParagraph->latinLnBrk.is_init())
{
bool bWrap = pParagraph->latinLnBrk.get();
WORD lWrap = 0;
if (bWrap)
{
lWrap &= 0xFD;
lWrap |= 0x01;
}
else
{
lWrap &= 0xFE;
lWrap |= 0x02;
}
prop = lWrap;
}
return prop;
}
nullable_base<WORD> CShapeTextProperties::GetParagraphRtl(int level, const nullable<TextParagraphPr>& pParagraph)const
{
nullable_base<WORD> prop;
if (pParagraph.is_init())
if (pParagraph->rtl.is_init())
{
WORD lVal = 0;
if (pParagraph->rtl.get())
lVal = 1;
prop = lVal;
}
return prop;
}
nullable_base<LONG> CShapeTextProperties::GetParagraphLnSpc(int level, const nullable<TextParagraphPr>& pParagraph, const double& LnSpcReduction)const
{
nullable_base<LONG> prop;
if (pParagraph.is_init())
if (pParagraph->lnSpc.is_init())
{
int space = pParagraph->lnSpc->GetVal();
if (space < 0)
prop = (LONG)(space * 127 * (1 - LnSpcReduction));// - 13200;
else
prop = (LONG)(space * (1 - LnSpcReduction));
}
return prop;
}
nullable_base<LONG> CShapeTextProperties::GetParagraphSpcAft(int level, const nullable<TextParagraphPr>& pParagraph)const
{
nullable_base<LONG> prop;
if (pParagraph.is_init())
if (pParagraph->spcAft.is_init())
{
int space = pParagraph->spcAft->GetVal();
if (space < 0)
prop = (LONG)(space * 127);// - 13200;
else
prop = (LONG)space;
}
return prop;
}
nullable_base<LONG> CShapeTextProperties::GetParagraphSpcBef(int level, const nullable<TextParagraphPr>& pParagraph)const
{
nullable_base<LONG> prop;
if (pParagraph.is_init())
if (pParagraph->spcBef.is_init())
{
int space = pParagraph->spcBef->GetVal();
if (space < 0)
prop = (LONG)(space * 127);// - 13200;
else
prop = (LONG)space;
}
return prop;
}
nullable_base<bool> CShapeTextProperties::GetHasBullet(int level, const nullable<TextParagraphPr>& pParagraph)const
{
nullable_base<bool> prop;
if (pParagraph.is_init())
if (pParagraph->ParagraphBullet.is_init())
{
prop = (bool)pParagraph->ParagraphBullet.has_bullet();
return prop;
}
if (m_body[level].is_init())
if (m_body[level]->ParagraphBullet.is_init())
{
prop = (bool)m_body[level]->ParagraphBullet.has_bullet();
return prop;
}
if (m_levels[level].is_init())
if (m_levels[level]->ParagraphBullet.is_init())
{
prop = (bool)m_levels[level]->ParagraphBullet.has_bullet();
return prop;
}
return prop;
}
nullable_base<bool> CShapeTextProperties::GetRunBold(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
nullable_base<bool> prop;
if (pRun.is_init())
if (pRun->b.is_init())
{
prop = (bool)pRun->b.get();
return prop;
}
if (pParagraph.is_init())
if (pParagraph->defRPr.is_init())
if (pParagraph->defRPr->b.is_init())
{
prop = (bool)pParagraph->defRPr->b.get();
}
return prop;
}
nullable_base<bool> CShapeTextProperties::GetRunItalic(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
nullable_base<bool> prop;
if (pRun.is_init())
if (pRun->i.is_init())
{
prop = (bool)pRun->i.get();
return prop;
}
if (pParagraph.is_init())
if (pParagraph->defRPr.is_init())
if (pParagraph->defRPr->i.is_init())
{
prop = (bool)pParagraph->defRPr->i.get();
}
return prop;
}
nullable_base<bool> CShapeTextProperties::GetRunUnderline(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
nullable_base<bool> prop;
if (pRun.is_init())
if (pRun->u.is_init())
{
prop = (_T("none") != pRun->u->get()) ? true : false;
return prop;
}
if (pParagraph.is_init())
if (pParagraph->defRPr.is_init())
if (pParagraph->defRPr->u.is_init())
{
prop = (_T("none") != pParagraph->defRPr->u->get()) ? true : false;
return prop;
}
return prop;
}
nullable_base<bool> CShapeTextProperties::GetRunStrike(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
nullable_base<bool> prop;
if (pRun.is_init())
if (pRun->strike.is_init())
{
prop = (_T("noStrike") != pRun->strike->get()) ? true : false;
return prop;
}
if (pParagraph.is_init())
if (pParagraph->defRPr.is_init())
if (pParagraph->defRPr->strike.is_init())
prop = (_T("noStrike") != pParagraph->defRPr->strike->get()) ? true : false;
return prop;
}
nullable_base<WORD> CShapeTextProperties::GetRunCap(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
nullable_base<WORD> prop;
if (pRun.is_init())
if (pRun->cap.is_init())
{
std::wstring str = pRun->cap->get();
if (_T("all") == str)
prop = (WORD)1;
else if (_T("small") == str)
prop = (WORD)2;
else
prop = (WORD)0;
return prop;
}
if(pParagraph.is_init())
if(pParagraph->defRPr.is_init())
if(pParagraph->defRPr->cap.is_init())
{
std::wstring str = pParagraph->defRPr->cap->get();
if (_T("all") == str)
prop = (WORD)1;
else if (_T("small") == str)
prop = (WORD)2;
else
prop = (WORD)0;
}
return prop;
}
nullable_base<double> CShapeTextProperties::GetRunBaseline(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
nullable_base<double> prop;
if (pRun.is_init())
if (pRun->baseline.is_init())
{
prop = (double)pRun->baseline.get() / 1000;
return prop;
}
if (pParagraph.is_init())
if (pParagraph->defRPr.is_init())
if (pParagraph->defRPr->baseline.is_init())
prop = (double)pParagraph->defRPr->baseline.get() / 1000;
return prop;
}
nullable_base<WORD> CShapeTextProperties::GetRunSize(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph, const double& FontScale)const
{
nullable_base<WORD> prop;
if (pRun.is_init())
if (pRun->sz.is_init())
{
int size = pRun->sz.get();
prop = (WORD)((size * FontScale + 50) / 100);
return prop;
}
if (pParagraph.is_init())
if (pParagraph->defRPr.is_init())
if (pParagraph->defRPr->sz.is_init())
{
int size = pParagraph->defRPr->sz.get();
prop = (WORD)((size * FontScale + 50) / 100);
return prop;
}
if (-1 != m_lMasterTextSize)
{
bool bIsSetUp = false;
if (m_levels[level].is_init())
if (m_levels[level]->defRPr.is_init())
if (m_levels[level]->defRPr->sz.is_init())
bIsSetUp = true;
if (!bIsSetUp)
{
if (m_body[level].is_init())
if (m_body[level]->defRPr.is_init())
if (m_body[level]->defRPr->sz.is_init())
bIsSetUp = true;
}
if (!bIsSetUp)
prop = (WORD)((double)(m_lMasterTextSize * FontScale + 50) / 100);
}
return prop;
}
nullable_base<CFontInfo> CShapeTextProperties::GetRunFont(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
nullable_base<CFontInfo> prop;
if ((pRun.is_init()) && (pRun->latin.is_init()))
{
CFontInfo oInfo;
oInfo.strFontName = pRun->latin->typeface;
oInfo.strPanose = pRun->latin->panose.get_value_or(_T(""));
oInfo.strPitchFamily = pRun->latin->pitchFamily.get_value_or(_T(""));
oInfo.Charset = XmlUtils::GetInteger(pRun->latin->charset.get_value_or(_T("0")));
oInfo.FontRef = -1;
if (oInfo.strFontName == _T("+mj-lt"))
{
oInfo.strFontName = MajorLatin.typeface;
oInfo.FontRef = 0;
}
else if (oInfo.strFontName == _T("+mn-lt"))
{
oInfo.strFontName = MinorLatin.typeface;
oInfo.FontRef = 1;
}
else if (oInfo.strFontName == _T(""))
{
oInfo.strFontName = MinorLatin.typeface;
oInfo.FontRef = 1;
}
prop = oInfo;
}
else if ((pParagraph.is_init()) && (pParagraph->defRPr.is_init()) && (pParagraph->defRPr->latin.is_init()))
{
CFontInfo oInfo;
oInfo.strFontName = pParagraph->defRPr->latin->typeface;
oInfo.strPanose = pParagraph->defRPr->latin->panose.get_value_or(_T(""));
oInfo.strPitchFamily = pParagraph->defRPr->latin->pitchFamily.get_value_or(_T(""));
oInfo.Charset = XmlUtils::GetInteger(pParagraph->defRPr->latin->charset.get_value_or(_T("0")));
oInfo.FontRef = -1;
if (oInfo.strFontName == _T("+mj-lt"))
{
oInfo.strFontName = MajorLatin.typeface;
oInfo.FontRef = 0;
}
else if (oInfo.strFontName == _T("+mn-lt"))
{
oInfo.strFontName = MinorLatin.typeface;
oInfo.FontRef = 1;
}
else if (oInfo.strFontName == _T(""))
{
oInfo.strFontName = MinorLatin.typeface;
oInfo.FontRef = 1;
}
prop = oInfo;
}
return prop;
}
PPTX::Logic::UniColor CShapeTextProperties::GetColor(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const
{
PPTX::Logic::UniColor prop;
if (pRun.is_init())
{
if (pRun->Fill.is<SolidFill>())
{
prop = pRun->Fill.as<SolidFill>().Color;
return prop;
}
if (pRun->Fill.is<GradFill>())
{
prop = pRun->Fill.as<GradFill>().GetFrontColor();
return prop;
}
}
if ((pParagraph.is_init()) && (pParagraph->defRPr.is_init()))
{
if (pParagraph->defRPr->Fill.is<SolidFill>())
{
prop = pParagraph->defRPr->Fill.as<SolidFill>().Color;
return prop;
}
if (pParagraph->defRPr->Fill.is<GradFill>())
{
prop = pParagraph->defRPr->Fill.as<GradFill>().GetFrontColor();
return prop;
}
}
return prop;
}
PPTX::Logic::UniColor CShapeTextProperties::GetColorBullet(int level, const nullable<TextParagraphPr>& pParagraph)const
{
PPTX::Logic::UniColor prop;
if (pParagraph.is_init())
{
if (pParagraph->buColor.is_init())
{
if (pParagraph->buColor.is<Logic::BuClr>())
prop = pParagraph->buColor.as<Logic::BuClr>().Color;
}
}
return prop;
}
DWORD CShapeTextProperties::GetHyperlinkRGBA()const
{
if (!bodyPr.IsInit()) return 0;
if(bodyPr->parentFileIs<Slide>())
return bodyPr->parentFileAs<Slide>().GetRGBAFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideLayout>())
return bodyPr->parentFileAs<SlideLayout>().GetRGBAFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideMaster>())
return bodyPr->parentFileAs<SlideMaster>().GetRGBAFromMap(_T("hlink"));
else return 0;
}
DWORD CShapeTextProperties::GetHyperlinkARGB()const
{
if (!bodyPr.IsInit()) return 0;
if(bodyPr->parentFileIs<Slide>())
return bodyPr->parentFileAs<Slide>().GetARGBFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideLayout>())
return bodyPr->parentFileAs<SlideLayout>().GetARGBFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideMaster>())
return bodyPr->parentFileAs<SlideMaster>().GetARGBFromMap(_T("hlink"));
else return 0;
}
DWORD CShapeTextProperties::GetHyperlinkBGRA()const
{
if (!bodyPr.IsInit()) return 0;
if(bodyPr->parentFileIs<Slide>())
return bodyPr->parentFileAs<Slide>().GetBGRAFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideLayout>())
return bodyPr->parentFileAs<SlideLayout>().GetBGRAFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideMaster>())
return bodyPr->parentFileAs<SlideMaster>().GetBGRAFromMap(_T("hlink"));
else return 0;
}
DWORD CShapeTextProperties::GetHyperlinkABGR()const
{
if (!bodyPr.IsInit()) return 0;
if(bodyPr->parentFileIs<Slide>())
return bodyPr->parentFileAs<Slide>().GetABGRFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideLayout>())
return bodyPr->parentFileAs<SlideLayout>().GetABGRFromMap(_T("hlink"));
else if(bodyPr->parentFileIs<SlideMaster>())
return bodyPr->parentFileAs<SlideMaster>().GetABGRFromMap(_T("hlink"));
else return 0;
}
void CShapeTextProperties::SetParentFilePointer(const WrapperFile* pFile)
{
if (bodyPr.IsInit())
bodyPr->SetParentFilePointer(pFile);
m_pFile = pFile;
//for(int i = 0; i < 10; i ++)
//{
// m_levels[i]->SetParentFilePointer(pFile);
// m_body[i]->SetParentFilePointer(pFile);
//}
if(m_FontStyle.is_init())
m_FontStyle->SetParentFilePointer(pFile);
}
} // namespace Logic
} // namespace PPTX

View File

@ -1,176 +0,0 @@
/*
* (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
#ifndef PPTX_LOGIC_SHAPETEXTPROPERTIES_INCLUDE_H_
#define PPTX_LOGIC_SHAPETEXTPROPERTIES_INCLUDE_H_
#include "RunProperties.h"
#include "TextListStyle.h"
#include "TxBody.h"
#include "FontRef.h"
#include "TextParagraphPr.h"
#include "BodyPr.h"
#include "TextFont.h"
namespace PPTX
{
namespace Logic
{
class CFontInfo
{
public:
LONG FontRef;
std::wstring strFontName;
std::wstring strPanose;
std::wstring strPitchFamily;
BYTE Charset;
public:
CFontInfo()
{
FontRef = -1;
strFontName = _T("");
strPanose = _T("");
strPitchFamily = _T("");
Charset = 0;
}
CFontInfo(const CFontInfo& oSrc)
{
*this = oSrc;
}
CFontInfo& operator=(const CFontInfo& oSrc)
{
FontRef = oSrc.FontRef;
strFontName = oSrc.strFontName;
strPanose = oSrc.strPanose;
strPitchFamily = oSrc.strPitchFamily;
Charset = oSrc.Charset;
return *this;
}
};
class CShapeTextProperties
{
public:
CShapeTextProperties();
virtual ~CShapeTextProperties();
private:
nullable<FontRef> m_FontStyle;
LONG m_lTextType;
nullable<TextParagraphPr> m_levels[10];
nullable<TextParagraphPr> m_body[10];
nullable<BodyPr> bodyPr;
// просто указатель - он должен выставиться из темы
std::vector<nullable<TextParagraphPr>*>* m_masters;
TextFont MajorLatin;
TextFont MinorLatin;
bool m_bIsFontRefFromSlide;
int m_lMasterTextSize; // заглушка под таблицы.
bool m_bIsSlideShape;
const WrapperFile* m_pFile;
public:
void FillTextType(const LONG& lTextMasterType);
void FillFromTextBody(const nullable<TxBody>& Src, const nullable<TextParagraphPr>* bodyStyles);
void FillFontRef(const FontRef& Src, const bool& bIsSlideProperty);
void FillMasterFontSize(int size);
AVSINLINE void SetMajorLatin(const TextFont& mjltFont){MajorLatin = mjltFont;};
AVSINLINE void SetMinorLatin(const TextFont& mnltFont){MinorLatin = mnltFont;};
AVSINLINE void SetMasterStyles(std::vector<nullable<TextParagraphPr>*>* pStyles) { m_masters = pStyles; }
AVSINLINE nullable<TextParagraphPr>* GetLevels()
{
if (!m_bIsSlideShape)
return NULL;
return m_levels;
}
AVSINLINE nullable<TextParagraphPr>* GetLevelsBody() { return m_body; }
AVSINLINE LONG GetTextType() { return m_lTextType; }
AVSINLINE LONG GetFontRef(bool& bIsSlideSetUp)
{
bIsSlideSetUp = m_bIsFontRefFromSlide;
if (m_FontStyle.is_init() && m_FontStyle->idx.is_init())
{
return (m_FontStyle->idx->get() == _T("minor")) ? 1 : 0;
}
return -1;
}
std::wstring GetAnchor()const{return bodyPr.IsInit() ? bodyPr->anchor.get_value_or(L"t") : L"t"; };
nullable_base<WORD> GetParagraphAlgn (int level, const nullable<TextParagraphPr>& pParagraph)const;
nullable_base<LONG> GetParagraphLeftMargin (int level, const nullable<TextParagraphPr>& pParagraph)const;
nullable_base<LONG> GetParagraphIndent (int level, const nullable<TextParagraphPr>& pParagraph)const;
nullable_base<LONG> GetParagraphDefTabSz (int level, const nullable<TextParagraphPr>& pParagraph)const;
nullable_base<WORD> GetParagraphFontAlgn (int level, const nullable<TextParagraphPr>& pParagraph)const;
nullable_base<WORD> GetParagraphLatinLnBrk (int level, const nullable<TextParagraphPr>& pParagraph)const;
nullable_base<WORD> GetParagraphRtl (int level, const nullable<TextParagraphPr>& pParagraph)const;
nullable_base<LONG> GetParagraphLnSpc (int level, const nullable<TextParagraphPr>& pParagraph, const double& LnSpcReduction)const;
nullable_base<LONG> GetParagraphSpcAft (int level, const nullable<TextParagraphPr>& pParagraph)const;
nullable_base<LONG> GetParagraphSpcBef (int level, const nullable<TextParagraphPr>& pParagraph)const;
nullable_base<bool> GetHasBullet (int level, const nullable<TextParagraphPr>& pParagraph)const;
nullable_base<bool> GetRunBold (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
nullable_base<bool> GetRunItalic (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
nullable_base<bool> GetRunUnderline (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
nullable_base<bool> GetRunStrike (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
nullable_base<WORD> GetRunCap (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
nullable_base<double> GetRunBaseline (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
nullable_base<WORD> GetRunSize (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph, const double& FontScale)const;
nullable_base<CFontInfo> GetRunFont (int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
PPTX::Logic::UniColor GetColor(int level, const nullable<RunProperties>& pRun, const nullable<TextParagraphPr>& pParagraph)const;
PPTX::Logic::UniColor GetColorBullet(int level, const nullable<TextParagraphPr>& pParagraph)const;
DWORD GetHyperlinkRGBA()const;
DWORD GetHyperlinkARGB()const;
DWORD GetHyperlinkBGRA()const;
DWORD GetHyperlinkABGR()const;
void SetParentFilePointer(const WrapperFile* pFile);
};
} // namespace Logic
} // namespace PPTX
#endif // PPTX_LOGIC_SHAPETEXTPROPERTIES_INCLUDE_H_

View File

@ -36,7 +36,11 @@
#include "../SlideMaster.h"
#include "../../ASCOfficeDrawingConverter.h"
#include "../../../XlsxSerializerCom/Reader/ChartFromToBinary.h"
#include "../../../ASCOfficeDocxFile2/DocWrapper/XlsxSerializer.h"
#include "../../../ASCOfficeDocxFile2/BinWriter/BinWriters.h"
#include "../../../Common/DocxFormat/Source/DocxFormat/Diagram/DiagramData.h"
#include "../../../Common/DocxFormat/Source/DocxFormat/Diagram/DiagramDrawing.h"
@ -49,11 +53,11 @@ namespace PPTX
if (m_diag.IsInit())
return ;
FileContainer* pRels = NULL;
OOX::IFileContainer* pRels = NULL;
if (pWriter)
{
if (pWriter->m_pCommonRels->is_init())
pRels = pWriter->m_pCommonRels->operator ->();
if (pWriter->m_pCurrentContainer->is_init())
pRels = pWriter->m_pCurrentContainer->operator ->();
}
smart_ptr<OOX::File> oFileData;
@ -65,11 +69,8 @@ namespace PPTX
if(id_data.IsInit())
{
if (parentFileIs<Slide>()) oFileData = parentFileAs<Slide>().Find(*id_data);
else if (parentFileIs<SlideLayout>()) oFileData = parentFileAs<SlideLayout>().Find(*id_data);
else if (parentFileIs<SlideMaster>()) oFileData = parentFileAs<SlideMaster>().Find(*id_data);
else if (parentFileIs<Theme>()) oFileData = parentFileAs<Theme>().Find(*id_data);
else if (pRels != NULL) oFileData = pRels->Find(*id_data);
if (parentFileIs<OOX::IFileContainer>()) oFileData = parentFileAs<OOX::IFileContainer>().Find(*id_data);
else if (pRels != NULL) oFileData = pRels->Find(*id_data);
}
if (oFileData.IsInit())
@ -88,13 +89,10 @@ namespace PPTX
}
}
if (id_drawing.IsInit())
if (id_drawing.IsInit() && pDiagramData)
{
if (parentFileIs<Slide>()) oFileDrawing = parentFileAs<Slide>().Find(*id_drawing);
else if (parentFileIs<SlideLayout>()) oFileDrawing = parentFileAs<SlideLayout>().Find(*id_drawing);
else if (parentFileIs<SlideMaster>()) oFileDrawing = parentFileAs<SlideMaster>().Find(*id_drawing);
else if (parentFileIs<Theme>()) oFileDrawing = parentFileAs<Theme>().Find(*id_drawing);
else if (pRels != NULL) oFileDrawing = pRels->Find(*id_data);
if (parentFileIs<OOX::IFileContainer>()) oFileDrawing = parentFileAs<OOX::IFileContainer>().Find(*id_drawing);
else if (pRels != NULL) oFileDrawing = pRels->Find(*id_drawing);
}
else
{
@ -102,10 +100,7 @@ namespace PPTX
//пробуем по тому же пути с номером data.xml - ниже
}
}
if (oFileDrawing.IsInit())
{
pDiagramDrawing = dynamic_cast<OOX::CDiagramDrawing*>(oFileDrawing.operator->());
}
pDiagramDrawing = dynamic_cast<OOX::CDiagramDrawing*>(oFileDrawing.operator->());
if (!pDiagramDrawing && pDiagramData)
{
@ -127,8 +122,7 @@ namespace PPTX
m_diag = pDiagramDrawing->m_oShapeTree;
FillParentPointersForChilds();
m_oCommonRels = smart_ptr<PPTX::CCommonRels>( new PPTX::CCommonRels());
m_oCommonRels->_read(pDiagramDrawing->m_oReadPath);
m_pFileContainer = oFileDrawing.smart_dynamic_cast<OOX::IFileContainer>();
if (!m_diag->grpSpPr.xfrm.IsInit())
m_diag->grpSpPr.xfrm = new PPTX::Logic::Xfrm;
@ -138,46 +132,48 @@ namespace PPTX
//parse pDiagramData !!
}
}
void SmartArt::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
{
if (m_diag.is_init())
{
smart_ptr<OOX::IFileContainer> old = *pWriter->m_pCurrentContainer;
*pWriter->m_pCurrentContainer = m_pFileContainer;
if (pWriter->m_pMainDocument)
pWriter->m_pMainDocument->m_pParamsWriter->m_pCurRels = (OOX::IFileContainer*)m_pFileContainer.operator->();
m_diag->toPPTY(pWriter);
*pWriter->m_pCurrentContainer = old;
if (pWriter->m_pMainDocument)
pWriter->m_pMainDocument->m_pParamsWriter->m_pCurRels = old.operator->();
}
}
void ChartRec::toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
{
FileContainer* pRels = NULL;
if (pWriter->m_pCommonRels->is_init())
pRels = pWriter->m_pCommonRels->operator ->();
OOX::IFileContainer* pRels = NULL;
if (pWriter->m_pCurrentContainer->is_init())
pRels = pWriter->m_pCurrentContainer->operator ->();
std::wstring strDataPath = L"";
smart_ptr<OOX::File> file;
if(id_data.IsInit())
{
if(parentFileIs<Slide>())
strDataPath = parentFileAs<Slide>().GetMediaFullPathNameFromRId(*id_data);
else if(parentFileIs<SlideLayout>())
strDataPath = parentFileAs<SlideLayout>().GetMediaFullPathNameFromRId(*id_data);
else if(parentFileIs<SlideMaster>())
strDataPath = parentFileAs<SlideMaster>().GetMediaFullPathNameFromRId(*id_data);
else if(parentFileIs<Theme>())
strDataPath = parentFileAs<Theme>().GetMediaFullPathNameFromRId(*id_data);
else if (pRels != NULL)
{
smart_ptr<OOX::Image> p = pRels->GetImage(*id_data);
if (p.is_init())
strDataPath = p->filename().m_strFilename;
}
if(parentFileIs<OOX::IFileContainer>()) file = parentFileAs<OOX::IFileContainer>().Find(*id_data);
else if (pRels != NULL) file = pRels->Find(*id_data);
}
smart_ptr<OOX::Spreadsheet::CChartSpace> pChart = file.smart_dynamic_cast<OOX::Spreadsheet::CChartSpace>();
if (strDataPath.empty())
if (pChart.IsInit() == false)
return;
BinXlsxRW::CXlsxSerializer oXlsxSerializer;
NSBinPptxRW::CDrawingConverter oDrawingConverter;
NSBinPptxRW::CBinaryFileWriter* pOldWriter = oDrawingConverter.m_pBinaryWriter;
oDrawingConverter.m_pBinaryWriter = pWriter;
NSCommon::smart_ptr<PPTX::CCommonRels> pOldRels = *oDrawingConverter.m_pBinaryWriter->m_pCommonRels;
oDrawingConverter.SetRels(pChart.smart_dynamic_cast<OOX::IFileContainer>());
BinXlsxRW::BinaryChartWriter oBinaryChartWriter(*pWriter, &oDrawingConverter);
oBinaryChartWriter.WriteCT_ChartSpace(*pChart);
oXlsxSerializer.setDrawingConverter(&oDrawingConverter);
long lDataSize = 0;
oXlsxSerializer.loadChart(strDataPath, pWriter, lDataSize);
*oDrawingConverter.m_pBinaryWriter->m_pCommonRels = pOldRels;
oDrawingConverter.m_pBinaryWriter = pOldWriter;
}
std::wstring ChartRec::toXML() const

View File

@ -93,17 +93,7 @@ namespace PPTX
{
}
virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
{
if (m_diag.is_init())
{
smart_ptr<PPTX::CCommonRels> old = *pWriter->m_pCommonRels;
*pWriter->m_pCommonRels = m_oCommonRels;
m_diag->toPPTY(pWriter);
*pWriter->m_pCommonRels = old;
}
}
virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const;
virtual void fromPPTY(NSBinPptxRW::CBinaryFileReader* pReader)
{
pReader->SkipRecord();
@ -115,7 +105,7 @@ namespace PPTX
nullable<OOX::RId> id_style;
nullable<PPTX::Logic::SpTree> m_diag;
smart_ptr<PPTX::CCommonRels> m_oCommonRels;
smart_ptr<OOX::IFileContainer> m_pFileContainer;
protected:
virtual void FillParentPointersForChilds()
{

View File

@ -37,8 +37,6 @@
#include "./../Logic/NvGrpSpPr.h"
#include "./../Logic/GrpSpPr.h"
#include "SpTreeElem.h"
#include "ShapeProperties.h"
#include "ShapeTextProperties.h"
#include "../../../DesktopEditor/graphics/aggplustypes.h"

View File

@ -418,6 +418,8 @@ namespace PPTX
smart_ptr<PPTX::Logic::SpTree> oSpTree = m_elem.smart_dynamic_cast<PPTX::Logic::SpTree>();
if (oSpTree.IsInit()) oSpTree->toXmlWriterVML(pWriter, oTheme, oClrMap);
}break;
default:
break;
}
}

View File

@ -114,16 +114,5 @@ namespace PPTX
CellProperties->SetParentPointer(this);
}
void TableCell::GetShapeProperties(ShapeProperties& props)const
{
if(parentFileIs<Slide>())
{
parentFileAs<Slide>().FillShapeProperties(props, _T("table-cell"));
props.FillFromTextBody(txBody);
//props.SetParentFilePointer(parentFile);
}
}
} // namespace Logic
} // namespace PPTX

View File

@ -36,7 +36,6 @@
#include "./../../WrapperWritingElement.h"
#include "./../TxBody.h"
#include "TableCellProperties.h"
#include "../ShapeProperties.h"
namespace PPTX
{
@ -59,8 +58,6 @@ namespace PPTX
void ReadAttributes(XmlUtils::CXmlLiteReader& oReader);
virtual void GetShapeProperties(ShapeProperties& props)const;
virtual void toXmlWriter(NSBinPptxRW::CXmlWriter* pWriter) const
{
pWriter->StartNode(_T("a:tc"));

View File

@ -47,7 +47,6 @@ namespace PPTX
explicit TimeNodeBase(XmlUtils::CXmlNode& node);
const TimeNodeBase& operator =(XmlUtils::CXmlNode& node);
public:
virtual void fromXML(XmlUtils::CXmlNode& node);
virtual void GetTimeNodeFrom(XmlUtils::CXmlNode& element);
virtual bool is_init()const{return (m_node.IsInit());};
@ -61,7 +60,6 @@ namespace PPTX
template<class T> AVSINLINE const T& as() const { return m_node.as<T>(); }
virtual std::wstring toXML() const;
//public:
private:
smart_ptr<WrapperWritingElement> m_node;
protected:

View File

@ -46,7 +46,6 @@ namespace PPTX
public:
PPTX_LOGIC_BASE(Timing)
public:
virtual void fromXML(XmlUtils::CXmlNode& node)
{
tnLst = node.ReadNode(_T("p:tnLst"));
@ -76,7 +75,6 @@ namespace PPTX
pWriter->EndNode(_T("p:timing"));
}
public:
nullable<TnLst> tnLst;
nullable<BldLst> bldLst;
protected:

View File

@ -55,8 +55,6 @@ namespace PPTX
return *this;
}
public:
virtual void fromXML(XmlUtils::CXmlNode& node)
{
name = XmlUtils::GetNameNoNS(node.GetName());
@ -72,9 +70,8 @@ namespace PPTX
return XmlUtils::CreateNode(_T("p:") + name, oValue);
}
public:
std::vector<TimeNodeBase> list;
std::wstring name;
std::wstring name;
protected:
virtual void FillParentPointersForChilds()
{

View File

@ -138,7 +138,6 @@ namespace PPTX
pWriter->EndNode(_T("p:txStyles"));
}
public:
nullable<TextListStyle> titleStyle;
nullable<TextListStyle> bodyStyle;
nullable<TextListStyle> otherStyle;

View File

@ -52,7 +52,6 @@
#include "Logic/CxnSp.h"
#include "Logic/GraphicFrame.h"
#include "Logic/TxBody.h"
#include "Logic/ShapeProperties.h"
#include "Logic/SpTree.h"
#include "Logic/UniFill.h"
#include "Logic/UniColor.h"

View File

@ -41,7 +41,6 @@
#include "Logic/Transitions/Transition.h"
#include "Logic/Timing/Timing.h"
#include "Logic/ShapeProperties.h"
#include "Logic/Bg.h"
#include "Theme.h"
@ -73,8 +72,6 @@ namespace PPTX
virtual ~Slide()
{
}
public:
virtual void read(const OOX::CPath& filename, FileMap& map)
{
//FileContainer::read(filename, map);
@ -147,38 +144,7 @@ namespace PPTX
return type().DefaultFileName();
}
//-------------------------------------------------
virtual void FillShapeProperties(Logic::ShapeProperties& props, const std::wstring& type)const
{
if (Layout.IsInit())
Layout->FillShapeProperties(props, type);
}
virtual void FillShapeTextProperties(Logic::CShapeTextProperties& props, const std::wstring& type)const
{
if (Layout.IsInit())
Layout->FillShapeTextProperties(props, type);
}
virtual bool GetBackground(Logic::BgPr& bg, DWORD& ARGB)const
{
if (cSld->bg.is_init())
{
if(cSld->bg->bgPr.is_init())
bg = cSld->bg->bgPr.get();
else if(cSld->bg->bgRef.is_init())
{
ARGB = cSld->bg->bgRef->Color.GetARGB();
theme->themeElements.fmtScheme.GetFillStyle(cSld->bg->bgRef->idx.get_value_or(0), bg.Fill);
}
return true;
}
else//from slideLayout
{
if (Layout.IsInit())
Layout->GetBackground(bg, ARGB);
return false;
}
return false;
}
virtual std::wstring GetMediaFullPathNameFromRId(const OOX::RId& rid)const
{
smart_ptr<OOX::Image> p = GetImage(rid);
@ -362,7 +328,6 @@ namespace PPTX
pReader->Seek(end);
}
public:
nullable_bool show;
nullable_bool showMasterPhAnim;
nullable_bool showMasterSp;
@ -380,8 +345,7 @@ namespace PPTX
smart_ptr<TableStyles> tableStyles_;
smart_ptr<PPTX::Comments> comments;
public:
//--------------------------------------------------------------------------------------
void ApplyRels()
{
Layout = FileContainer::Get(OOX::Presentation::FileTypes::SlideLayout).smart_dynamic_cast<PPTX::SlideLayout>();//boost::shared_dynamic_cast<PPTX::SlideLayout, PPTX::File>(FileContainer::get(OOX::Presentation::FileTypes::SlideLayout));

View File

@ -46,7 +46,6 @@
#include "Logic/SpTreeElem.h"
#include "Logic/Shape.h"
#include "Logic/ShapeProperties.h"
#include "Theme.h"
#include "SlideMaster.h"
@ -73,8 +72,6 @@ namespace PPTX
virtual ~SlideLayout()
{
}
public:
virtual void read(const OOX::CPath& filename, FileMap& map)
{
m_sOutputFilename = filename.GetFilename();
@ -114,7 +111,6 @@ namespace PPTX
FileContainer::write(filename, directory, content);
}
public:
virtual const OOX::FileType type() const
{
return OOX::Presentation::FileTypes::SlideLayout;
@ -128,103 +124,40 @@ namespace PPTX
return type().DefaultFileName();
}
public:
virtual void GetLevelUp(const Logic::Shape& pShape)const
virtual void GetLevelUp(Logic::Shape* pShape)
{
if(pShape.nvSpPr.nvPr.ph.is_init())
{
std::wstring idx = /*pShape.nvSpPr->nvPr->ph.is_init()?*/pShape.nvSpPr.nvPr.ph->idx.get_value_or(_T("0"));//:"";
std::wstring type = /*pShape.nvSpPr->nvPr->ph.is_init()?*/pShape.nvSpPr.nvPr.ph->type.get_value_or(_T("body"));//:"";
if(type == _T("ctrTitle"))
type = _T("title");
if (!pShape) return;
size_t count = cSld.spTree.SpTreeElems.size();
for(size_t i = 0; i < count; ++i)
if(pShape->nvSpPr.nvPr.ph.is_init())
{
std::wstring idx = pShape->nvSpPr.nvPr.ph->idx.get_value_or(_T("0"));
std::wstring type = pShape->nvSpPr.nvPr.ph->type.get_value_or(_T("body"));
if(type == L"ctrTitle") type = L"title";
for(size_t i = 0; i < cSld.spTree.SpTreeElems.size(); ++i)
{
const PPTX::Logic::SpTreeElem* pElem = &cSld.spTree.SpTreeElems[i];
if(pElem->is<Logic::Shape>())
smart_ptr<Logic::Shape> pLayoutShape = cSld.spTree.SpTreeElems[i].GetElem().smart_dynamic_cast<Logic::Shape>();
if(pLayoutShape.IsInit())
{
const Logic::Shape& LayoutShape = pElem->as<Logic::Shape>();
if(LayoutShape.nvSpPr.nvPr.ph.is_init())
if(pLayoutShape->nvSpPr.nvPr.ph.is_init())
{
std::wstring lIdx = /*LayoutShape->nvSpPr->nvPr->ph.is_init()?*/LayoutShape.nvSpPr.nvPr.ph->idx.get_value_or(_T("0"));//:"";
std::wstring lType = /*LayoutShape->nvSpPr->nvPr->ph.is_init()?*/LayoutShape.nvSpPr.nvPr.ph->type.get_value_or(_T("body"));//:"";
if(lType == _T("ctrTitle"))
lType = _T("title");
std::wstring lIdx = pLayoutShape->nvSpPr.nvPr.ph->idx.get_value_or(_T("0"));
std::wstring lType = pLayoutShape->nvSpPr.nvPr.ph->type.get_value_or(_T("body"));
if(lType == _T("ctrTitle")) lType = _T("title");
if((type == lType) && (idx == lIdx))
{
pShape.SetLevelUpElement(LayoutShape);
pShape->SetLevelUpElement(pLayoutShape.operator->());
return;
}
//if(lType == "ctrTitle")
// lType = "title";
//if(idx == LayoutShape->nvSpPr->nvPr->idx.get_value_or("0"))
//{
// if((type == LayoutShape->nvSpPr->nvPr->type.get_value_or("")) || ((type == "") && (LayoutShape->nvSpPr->nvPr->type.get_value_or("") != "")))
// pShape->SetLevelUpElement(LayoutShape);
// return;
//}
//if((type == lType) && (type != ""))
//{
// if(idx == lIdx)
// {
// pShape.SetLevelUpElement(LayoutShape);
// return;
// }
// continue;
//}
//if((type == lType) && (type == ""))
//{
// if((idx == lIdx) && (idx != ""))
// {
// pShape.SetLevelUpElement(LayoutShape);
// return;
// }
//}
//if(type != lType)
//{
// if((idx == lIdx) && (idx != ""))
// {
// pShape.SetLevelUpElement(LayoutShape);
// return;
// }
//}
}
}
}
}
}
virtual void FillShapeProperties(Logic::ShapeProperties& props, const std::wstring& type)const
{
if(Master.IsInit())
Master->FillShapeProperties(props, type);
}
virtual void FillShapeTextProperties(Logic::CShapeTextProperties& props, const std::wstring& type)const
{
if(Master.IsInit())
Master->FillShapeTextProperties(props, type);
}
virtual void GetBackground(Logic::BgPr& bg, DWORD& ARGB)const
{
if(cSld.bg.is_init())
{
if(cSld.bg->bgPr.is_init())
bg = cSld.bg->bgPr.get();
else if(cSld.bg->bgRef.is_init())
{
ARGB = cSld.bg->bgRef->Color.GetARGB();
theme->themeElements.fmtScheme.GetFillStyle(cSld.bg->bgRef->idx.get_value_or(0), bg.Fill);
//bg.SetParentFilePointer(this);
}
}
else//from slideMaster
{
if(Master.IsInit())
Master->GetBackground(bg, ARGB);
}
}
virtual std::wstring GetMediaFullPathNameFromRId(const OOX::RId& rid)const
{
smart_ptr<OOX::Image> p = GetImage(rid);

View File

@ -45,7 +45,6 @@
#include "Logic/XmlId.h"
#include "Logic/Shape.h"
#include "Logic/ShapeProperties.h"
#include "Logic/TxBody.h"
#include "Logic/UniColor.h"
@ -72,8 +71,6 @@ namespace PPTX
virtual ~SlideMaster()
{
}
public:
virtual void read(const OOX::CPath& filename, FileMap& map)
{
m_sOutputFilename = filename.GetFilename();
@ -121,8 +118,6 @@ namespace PPTX
WrapperFile::write(filename, directory, content);
FileContainer::write(filename, directory, content);
}
public:
virtual const OOX::FileType type() const
{
return OOX::Presentation::FileTypes::SlideMaster;
@ -135,170 +130,38 @@ namespace PPTX
{
return type().DefaultFileName();
}
public:
void GetLevelUp(const Logic::Shape& pShape)const
void GetLevelUp(Logic::Shape* pShape)
{
if(pShape.nvSpPr.nvPr.ph.is_init())
{
std::wstring idx = /*pShape.nvSpPr->nvPr->ph.is_init()?*/pShape.nvSpPr.nvPr.ph->idx.get_value_or(_T("0"));//:"";
std::wstring type = /*pShape.nvSpPr->nvPr->ph.is_init()?*/pShape.nvSpPr.nvPr.ph->type.get_value_or(_T("body"));//:"";
if(type == _T("ctrTitle"))
type = _T("title");
if (!pShape) return;
size_t count = cSld.spTree.SpTreeElems.size();
for (size_t i = 0; i < count; ++i)
if(pShape->nvSpPr.nvPr.ph.is_init())
{
std::wstring idx = pShape->nvSpPr.nvPr.ph->idx.get_value_or(_T("0"));
std::wstring type = pShape->nvSpPr.nvPr.ph->type.get_value_or(_T("body"));
if (type == _T("ctrTitle")) type = _T("title");
for (size_t i = 0; i < cSld.spTree.SpTreeElems.size(); ++i)
{
const PPTX::Logic::SpTreeElem* pElem = &cSld.spTree.SpTreeElems[i];
if(pElem->is<Logic::Shape>())
smart_ptr<Logic::Shape> pMasterShape = cSld.spTree.SpTreeElems[i].GetElem().smart_dynamic_cast<Logic::Shape>();
if (pMasterShape.IsInit())
{
const Logic::Shape& MasterShape = pElem->as<Logic::Shape>();
if(MasterShape.nvSpPr.nvPr.ph.is_init())
if (pMasterShape->nvSpPr.nvPr.ph.is_init())
{
std::wstring lIdx = /*MasterShape->nvSpPr->nvPr->ph.is_init()?*/MasterShape.nvSpPr.nvPr.ph->idx.get_value_or(_T("0"));//:"";
std::wstring lType = /*MasterShape->nvSpPr->nvPr->ph.is_init()?*/MasterShape.nvSpPr.nvPr.ph->type.get_value_or(_T("body"));//:"";
if(lType == _T("ctrTitle"))
lType = _T("title");
if(type == lType)
std::wstring lIdx = pMasterShape->nvSpPr.nvPr.ph->idx.get_value_or(_T("0"));
std::wstring lType = pMasterShape->nvSpPr.nvPr.ph->type.get_value_or(_T("body"));
if (lType == L"ctrTitle") lType = L"title";
if (type == lType)
{
pShape.SetLevelUpElement(MasterShape);
pShape->SetLevelUpElement(pMasterShape.operator->());
return;
}
//if(idx == MasterShape->nvSpPr->nvPr->idx.get_value_or("0"))
//{
// if((type == MasterShape->nvSpPr->nvPr->type.get_value_or("")) || ((type == "") && (MasterShape->nvSpPr->nvPr->type.get_value_or("") != "")))
// pShape->SetLevelUpElement(MasterShape);
// return;
//}
//if((type == lType) && (type != ""))
//{
// //if(idx == lIdx)
// //{
// pShape.SetLevelUpElement(MasterShape);
// return;
// //}
// //continue;
//}
//if((type == lType) && (type == ""))
//{
// if((idx == lType) && (idx != ""))
// {
// pShape.SetLevelUpElement(MasterShape);
// return;
// }
//}
//if(type != lType)
//{
// if((idx == lIdx) && (idx != ""))
// {
// pShape.SetLevelUpElement(MasterShape);
// return;
// }
//}
}
}
}
}
}
void FillShapeProperties(Logic::ShapeProperties& props, const std::wstring& type)const
{
if((theme.IsInit()) && (theme->presentation.IsInit()))
{
PPTX::Presentation* pPres = const_cast<PPTX::Presentation*>(theme->presentation.operator->());
pPres->SetClrMap(clrMap);
pPres->SetClrScheme(theme->themeElements.clrScheme);
}
if((theme.IsInit()) && (type != _T("")))
theme->FillShapeProperties(props, type);
if(txStyles.is_init())
{
// props.FillFromTextListStyle(txStyles->otherStyle, true);
//if(type == "")
//{
// if(Theme->spDef.is_init())
// {
// props.FillFromTextListStyle(Theme->spDef->lstStyle, true);
// if(Theme->spDef->style.is_init())
// props.FillFontRef(Theme->spDef->style->fontRef.get());
// }
// else
// props.FillFromTextListStyle(txStyles->otherStyle, true);
// return;
//}
if((type == _T("title")) || (type == _T("ctrTitle")))
{
props.FillFromTextListStyle(txStyles->titleStyle);
props.SetTextType(1);
}
else if((type == _T("body")) || (type == _T("subTitle")) || (type == _T("obj")))
{
props.FillFromTextListStyle(txStyles->bodyStyle);
props.SetTextType(2);
}
else if(type != _T(""))
{
props.FillFromTextListStyle(txStyles->otherStyle);
props.SetTextType(3);
}
else
{
props.FillFromTextListStyle(txStyles->otherStyle);
props.SetTextType(3);
if(theme.IsInit())
theme->FillShapeProperties(props, type);
}
}
}
void FillShapeTextProperties(Logic::CShapeTextProperties& props, const std::wstring& type)const
{
if((theme.IsInit()) && (theme->presentation.IsInit()))
{
PPTX::Presentation* pPres = const_cast<PPTX::Presentation*>(theme->presentation.operator->());
pPres->SetClrMap(clrMap);
pPres->SetClrScheme(theme->themeElements.clrScheme);
}
if (type == _T("table-cell"))
props.FillMasterFontSize(1800);
if ((type == _T("title")) || (type == _T("ctrTitle")))
{
props.FillTextType(1);
}
else if ((type == _T("body")) || (type == _T("subTitle")) || (type == _T("obj")))
{
props.FillTextType(2);
}
else if (type != _T(""))
{
props.FillTextType(3);
}
else
{
props.FillTextType(0);
}
}
void GetBackground(Logic::BgPr& bg, DWORD& ARGB)const
{
if(cSld.bg.is_init())
{
if(cSld.bg->bgPr.is_init())
bg = cSld.bg->bgPr.get();
else if(cSld.bg->bgRef.is_init())
{
ARGB = cSld.bg->bgRef->Color.GetARGB();
theme->themeElements.fmtScheme.GetFillStyle(cSld.bg->bgRef->idx.get_value_or(0), bg.Fill);
// bg.SetParentFilePointer(this);
}
}
}
virtual std::wstring GetMediaFullPathNameFromRId(const OOX::RId& rid)const
{
smart_ptr<OOX::Image> p = GetImage(rid);
@ -321,8 +184,7 @@ namespace PPTX
return p->filename().m_strFilename;
}
//---------------------Colors from map---------------------------------------
//---------------------Colors from map---------------------------------------
DWORD GetRGBAFromMap(const std::wstring& str)const
{
return theme->GetRGBAFromScheme(clrMap.GetColorSchemeIndex(str));
@ -342,9 +204,7 @@ namespace PPTX
{
return theme->GetABGRFromScheme(clrMap.GetColorSchemeIndex(str));
}
//---------------------------Colors from scheme------------------------------
//---------------------------Colors from scheme------------------------------
DWORD GetRGBAFromScheme(const std::wstring& str)const
{
return theme->GetRGBAFromScheme(str);
@ -365,7 +225,7 @@ namespace PPTX
return theme->GetABGRFromScheme(str);
}
//void ApplyColors();
virtual void toPPTY(NSBinPptxRW::CBinaryFileWriter* pWriter) const
{
pWriter->StartRecord(NSBinPptxRW::NSMainTables::SlideMasters);
@ -476,7 +336,8 @@ namespace PPTX
pReader->Seek(end);
}
public:
Logic::CSld cSld;
Logic::ClrMap clrMap;
std::vector<Logic::XmlId> sldLayoutIdLst;
@ -490,7 +351,6 @@ namespace PPTX
smart_ptr<TableStyles> tableStyles;
smart_ptr<OOX::CVmlDrawing> Vml;
public:
void ApplyRels()
{
theme = (FileContainer::Get(OOX::FileTypes::Theme)).smart_dynamic_cast<PPTX::Theme>();

View File

@ -40,7 +40,6 @@
#include "Logic/DefaultShapeDefinition.h"
#include "Theme/ExtraClrScheme.h"
#include "Logic/ShapeProperties.h"
#include "Logic/ClrMap.h"
#include "Presentation.h"
@ -325,24 +324,6 @@ namespace PPTX
return GetABGRFromScheme(m_map->GetColorSchemeIndex(str));
}
virtual void FillShapeProperties(Logic::ShapeProperties& props, const std::wstring& type)const
{
if(presentation.IsInit())
{
props.FillFromTextListStyle(presentation->defaultTextStyle);
props.SetTextType(0);
}
if(type == _T("table-cell"))
props.FillMasterFontSize(1800);
//if(spDef.is_init())
//{
// props.FillFromTextListStyle(spDef->lstStyle, true);
// if(spDef->style.is_init())
// props.FillFontRef(spDef->style->fontRef.get());
//}
props.SetMajorLatin(themeElements.fontScheme.majorFont.latin);
props.SetMinorLatin(themeElements.fontScheme.minorFont.latin);
}
virtual std::wstring GetMediaFullPathNameFromRId(const OOX::RId& rid)const
{
smart_ptr<OOX::Image> p = GetImage(rid);

View File

@ -80,8 +80,6 @@ SOURCES += \
../../../PPTXFormat/Logic/NvGrpSpPr.cpp \
../../../PPTXFormat/Logic/Pic.cpp \
../../../PPTXFormat/Logic/Shape.cpp \
../../../PPTXFormat/Logic/ShapeProperties.cpp \
../../../PPTXFormat/Logic/ShapeTextProperties.cpp \
../../../PPTXFormat/Logic/SmartArt.cpp \
../../../PPTXFormat/Logic/SpPr.cpp \
../../../PPTXFormat/Logic/SpTree.cpp \
@ -400,9 +398,7 @@ HEADERS += pptxformatlib.h \
../../../PPTXFormat/Logic/RunProperties.h \
../../../PPTXFormat/Logic/Scene3d.h \
../../../PPTXFormat/Logic/Shape.h \
../../../PPTXFormat/Logic/ShapeProperties.h \
../../../PPTXFormat/Logic/ShapeStyle.h \
../../../PPTXFormat/Logic/ShapeTextProperties.h \
../../../PPTXFormat/Logic/SmartArt.h \
../../../PPTXFormat/Logic/Sp3d.h \
../../../PPTXFormat/Logic/SpPr.h \

View File

@ -51,8 +51,6 @@
#include "../../../PPTXFormat/Logic/NvGrpSpPr.cpp"
#include "../../../PPTXFormat/Logic/Pic.cpp"
#include "../../../PPTXFormat/Logic/Shape.cpp"
#include "../../../PPTXFormat/Logic/ShapeProperties.cpp"
#include "../../../PPTXFormat/Logic/ShapeTextProperties.cpp"
#include "../../../PPTXFormat/Logic/SmartArt.cpp"
#include "../../../PPTXFormat/Logic/SpPr.cpp"
#include "../../../PPTXFormat/Logic/SpTree.cpp"

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="windows-1251"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8,00"
Version="8.00"
Name="PPTXFormat"
ProjectGUID="{36636678-AE25-4BE6-9A34-2561D1BCF302}"
RootNamespace="PPTXFormat"
@ -2756,124 +2756,10 @@
RelativePath="..\.\PPTXFormat\Logic\Shape.h"
>
</File>
<File
RelativePath="..\.\PPTXFormat\Logic\ShapeProperties.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="./StdAfx.h"
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|x64"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="./StdAfx.h"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PrecompiledHeaderThrough="./StdAfx.h"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|x64"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="./StdAfx.h"
/>
</FileConfiguration>
<FileConfiguration
Name="ReleaseASC|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="./StdAfx.h"
/>
</FileConfiguration>
<FileConfiguration
Name="ReleaseOpenSource|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="./StdAfx.h"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\.\PPTXFormat\Logic\ShapeProperties.h"
>
</File>
<File
RelativePath="..\.\PPTXFormat\Logic\ShapeStyle.h"
>
</File>
<File
RelativePath="..\.\PPTXFormat\Logic\ShapeTextProperties.cpp"
>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="./StdAfx.h"
/>
</FileConfiguration>
<FileConfiguration
Name="Debug|x64"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="./StdAfx.h"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32"
>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
PrecompiledHeaderThrough="./StdAfx.h"
/>
</FileConfiguration>
<FileConfiguration
Name="Release|x64"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="./StdAfx.h"
/>
</FileConfiguration>
<FileConfiguration
Name="ReleaseASC|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="./StdAfx.h"
/>
</FileConfiguration>
<FileConfiguration
Name="ReleaseOpenSource|Win32"
>
<Tool
Name="VCCLCompilerTool"
PrecompiledHeaderThrough="./StdAfx.h"
/>
</FileConfiguration>
</File>
<File
RelativePath="..\.\PPTXFormat\Logic\ShapeTextProperties.h"
>
</File>
<File
RelativePath="..\.\PPTXFormat\Logic\Sp3d.h"
>

View File

@ -23,7 +23,7 @@ if "%platform%" == "win_64" (
if exist "%SCRIPTPATH%%platform%\icu.zip" (
echo "icu already downloaded"
) else (
Powershell.exe Invoke-WebRequest -OutFile %platform%\icu.zip "%URL%"
Powershell.exe Invoke-WebRequest -OutFile %platform%\icu.zip -UserAgent [Microsoft.PowerShell.Commands.PSUserAgent]::FireFox "%URL%"
)
SET UNSIP_PROGRAMM="C:\Program Files\7-Zip\7z.exe"

View File

@ -35,12 +35,13 @@
#include "ContentTypes.h"
#include "FileType.h"
#include "FileTypes.h"
#include "External/External.h"
#include "External/HyperLink.h"
#include "Media/Image.h"
#include "Media/OleObject.h"
#include "FileTypes.h"
#include "../../../../ASCOfficePPTXFile/PPTXFormat/LegacyDiagramText.h"
#include "../XlsxFormat/FileFactory_Spreadsheet.h"
namespace OOX
@ -252,7 +253,13 @@ namespace OOX
return smart_ptr<OleObject>();
return pPair->second.smart_dynamic_cast<OleObject>();
}
smart_ptr<PPTX::LegacyDiagramText> IFileContainer::GetLegacyDiagramText(const OOX::RId& rId) const
{
std::map<std::wstring, smart_ptr<OOX::File>>::const_iterator pPair = m_mContainer.find(rId.get());
if (pPair == m_mContainer.end ())
return smart_ptr<PPTX::LegacyDiagramText>();
return pPair->second.smart_dynamic_cast<PPTX::LegacyDiagramText>();
}
const bool IFileContainer::IsExist(const FileType& oType) const
{
for (std::map<std::wstring, smart_ptr<OOX::File>>::const_iterator it = m_mContainer.begin(); it != m_mContainer.end(); ++it)

View File

@ -48,7 +48,12 @@ namespace OOX
class Image;
class HyperLink;
class OleObject;
} // OOX
}
namespace PPTX
{
class LegacyDiagramText;
}
namespace OOX
{
@ -76,9 +81,10 @@ namespace OOX
void Read (const OOX::CPath& oRootPath, const OOX::CPath& oPath);
void ExtractPictures(const OOX::CPath& oPath) const;
virtual smart_ptr<Image> GetImage (const RId& rId) const;
virtual smart_ptr<HyperLink> GetHyperlink(const RId& rId) const;
virtual smart_ptr<OleObject> GetOleObject(const RId& rId) const;
virtual smart_ptr<Image> GetImage (const RId& rId) const;
virtual smart_ptr<HyperLink> GetHyperlink(const RId& rId) const;
virtual smart_ptr<OleObject> GetOleObject(const RId& rId) const;
virtual smart_ptr<PPTX::LegacyDiagramText> GetLegacyDiagramText (const OOX::RId& rId) const;
OOX::CRels* GetCurRls()
{

View File

@ -0,0 +1,427 @@
/*
* (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
*
*/
#ifndef _BUILD_BIGINTEGER_CROSSPLATFORM_H_
#define _BUILD_BIGINTEGER_CROSSPLATFORM_H_
#include <string>
class CBigInteger
{
protected:
std::string m_value;
bool m_isNegative;
public:
CBigInteger()
{
m_value = "0";
m_isNegative = false;
}
CBigInteger(unsigned char* data, int size)
{
m_isNegative = false;
m_value = "0";
for (int i = 0; i < size; i++)
{
CBigInteger tmp((int)data[i]);
for (int j = size - 1 - i; j > 0; --j)
tmp *= 256;
*this += tmp;
}
}
CBigInteger(std::string data, int nBase = 10)
{
m_isNegative = false;
if (10 == nBase)
{
m_value = data;
}
else
{
m_value = "0";
int len = (int)data.length();
for (int i = 0; i < len; i++)
{
int val = 0;
char _c = data[i];
if (_c >= '0' && _c <= '9')
val = _c - '0';
else if (_c >= 'A' && _c <= 'F')
val = 10 + _c - 'A';
else if (_c >= 'a' && _c <= 'f')
val = 10 + _c - 'a';
CBigInteger tmp(val);
for (int j = len - 1 - i; j > 0; --j)
tmp *= nBase;
*this += tmp;
}
}
}
CBigInteger(int value)
{
if (value < 0)
{
m_isNegative = true;
m_value = std::to_string(-value);
}
else
{
m_isNegative = false;
m_value = std::to_string(value);
}
}
std::string GetValue()
{
return m_value;
}
bool IsNegative()
{
return m_isNegative;
}
void operator = (CBigInteger b)
{
m_value = b.m_value;
m_isNegative = b.m_isNegative;
}
bool operator == (CBigInteger b)
{
return equals((*this) , b);
}
bool operator != (CBigInteger b)
{
return !equals((*this) , b);
}
bool operator > (CBigInteger b)
{
return greater((*this) , b);
}
bool operator < (CBigInteger b)
{
return less((*this) , b);
}
bool operator >= (CBigInteger b)
{
return equals((*this) , b) || greater((*this), b);
}
bool operator <= (CBigInteger b)
{
return equals((*this) , b) || less((*this) , b);
}
CBigInteger absolute()
{
return CBigInteger(m_value); // +ve by default
}
CBigInteger& operator ++()
{
// prefix
(*this) = (*this) + 1;
return (*this);
}
CBigInteger operator ++(int)
{
// postfix
CBigInteger before = (*this);
(*this) = (*this) + 1;
return before;
}
CBigInteger& operator --()
{
// prefix
(*this) = (*this) - 1;
return (*this);
}
CBigInteger operator --(int)
{
// postfix
CBigInteger before = (*this);
(*this) = (*this) - 1;
return before;
}
CBigInteger operator + (CBigInteger b)
{
CBigInteger addition;
if (m_isNegative == b.m_isNegative)
{
// both +ve or -ve
addition.m_value = (add(m_value, b.m_value));
addition.m_isNegative = m_isNegative;
}
else
{
// sign different
if (absolute() > b.absolute())
{
addition.m_value = subtract(m_value, b.m_value);
addition.m_isNegative = m_isNegative;
}
else
{
addition.m_value = subtract(b.m_value, m_value);
addition.m_isNegative = b.m_isNegative;
}
}
if (addition.m_value == "0") // avoid (-0) problem
addition.m_isNegative = false;
return addition;
}
CBigInteger operator - (CBigInteger b)
{
b.m_isNegative = !b.m_isNegative; // x - y = x + (-y)
return (*this) + b;
}
CBigInteger operator * (CBigInteger b)
{
CBigInteger mul;
mul.m_value = multiply(m_value, b.m_value);
mul.m_isNegative = (m_isNegative != b.m_isNegative);
if (mul.m_value == "0") // avoid (-0) problem
mul.m_isNegative = false;
return mul;
}
CBigInteger& operator += (CBigInteger b)
{
(*this) = (*this) + b;
return (*this);
}
CBigInteger& operator -= (CBigInteger b)
{
(*this) = (*this) - b;
return (*this);
}
CBigInteger& operator *= (CBigInteger b)
{
(*this) = (*this) * b;
return (*this);
}
CBigInteger operator -() { // unary minus sign
return (*this) * -1;
}
std::string ToString()
{
// for conversion from BigInteger to string
std::string signedString = ( m_isNegative ) ? "-" : ""; // if +ve, don't print + sign
signedString += m_value;
return signedString;
}
private:
bool equals(CBigInteger n1, CBigInteger n2)
{
return ((n1.m_value == n2.m_value) && (n1.m_isNegative == n2.m_isNegative));
}
bool less(CBigInteger n1, CBigInteger n2)
{
bool sign1 = n1.m_isNegative;
bool sign2 = n2.m_isNegative;
if (sign1 && !sign2)
return true;
else if (!sign1 && sign2)
return false;
else if (!sign1)
{
std::string::size_type _size1 = n1.m_value.length();
std::string::size_type _size2 = n2.m_value.length();
if (_size1 < _size2)
return true;
if (_size1 > _size2)
return false;
return n1.m_value < n2.m_value;
}
else
{
std::string::size_type _size1 = n1.m_value.length();
std::string::size_type _size2 = n2.m_value.length();
if (_size1 > _size2)
return true;
if (_size1 < _size2)
return false;
return n1.m_value.compare(n2.m_value) > 0;
}
}
bool greater(CBigInteger n1, CBigInteger n2)
{
return !equals(n1, n2) && !less(n1, n2);
}
std::string add(std::string number1, std::string number2)
{
std::string add = (number1.length() > number2.length()) ? number1 : number2;
char carry = '0';
int differenceInLength = (int)(number1.size() - number2.size());
if (differenceInLength > 0)
number2.insert(0, differenceInLength, '0');
else
number1.insert(0, -differenceInLength, '0');
if (differenceInLength < 0)
differenceInLength = -differenceInLength;
for (int i = number1.size() - 1; i >= 0; --i)
{
add[i] = ((carry-'0')+(number1[i]-'0')+(number2[i]-'0')) + '0';
if(i != 0)
{
if(add[i] > '9')
{
add[i] -= 10;
carry = '1';
}
else
{
carry = '0';
}
}
}
if (add[0] > '9')
{
add[0] -= 10;
add.insert(0, 1, '1');
}
return add;
}
std::string subtract(std::string number1, std::string number2)
{
std::string sub = (number1.length() > number2.length()) ? number1 : number2;
int differenceInLength = (int)(number1.size() - number2.size());
if (differenceInLength > 0)
number2.insert(0, differenceInLength, '0');
else
number1.insert(0, -differenceInLength, '0');
if (differenceInLength < 0)
differenceInLength = -differenceInLength;
for (int i = number1.length() - 1; i >= 0; --i)
{
if (number1[i] < number2[i])
{
number1[i] += 10;
number1[i-1]--;
}
sub[i] = ((number1[i]-'0')-(number2[i]-'0')) + '0';
}
while (sub[0]=='0' && sub.length() != 1) // erase leading zeros
sub.erase(0, 1);
return sub;
}
std::string multiply(std::string n1, std::string n2)
{
if (n1.length() > n2.length())
n1.swap(n2);
std::string res = "0";
for (int i = n1.length() - 1; i >= 0; --i)
{
std::string temp = n2;
int currentDigit = n1[i] - '0';
int carry = 0;
for (int j = temp.length() - 1; j >= 0; --j)
{
temp[j] = ((temp[j]-'0') * currentDigit) + carry;
if (temp[j] > 9)
{
carry = (temp[j] / 10);
temp[j] -= (carry * 10);
}
else
{
carry = 0;
}
temp[j] += '0'; // back to string mood
}
if (carry > 0)
temp.insert(0, 1, (carry+'0'));
temp.append((n1.length() - i - 1), '0'); // as like mult by 10, 100, 1000, 10000 and so on
res = add(res, temp); // O(n)
}
while (res[0] == '0' && res.length() != 1) // erase leading zeros
res.erase(0,1);
return res;
}
};
#endif //_BUILD_BIGINTEGER_CROSSPLATFORM_H_

View File

@ -9,6 +9,7 @@
#include "../../libxml2/entities.c"
#include "../../libxml2/error.c"
#include "../../libxml2/globals.c"
#include "../../libxml2/hash.c"
#include "../../libxml2/HTMLparser.c"
#include "../../libxml2/HTMLtree.c"
#include "../../libxml2/legacy.c"
@ -16,6 +17,7 @@
#include "../../libxml2/nanoftp.c"
#include "../../libxml2/nanohttp.c"
//#include "../../libxml2/parser.c"
#include "../../libxml2/parserInternals.c"
#include "../../libxml2/pattern.c"
#include "../../libxml2/relaxng.c"
#include "../../libxml2/SAX.c"
@ -40,5 +42,3 @@
#include "../../libxml2/xmlwriter.c"
#include "../../libxml2/xpath.c"
#include "../../libxml2/xpointer.c"
#include "../../libxml2/parserInternals.c"
#include "../../libxml2/hash.c"

View File

@ -593,7 +593,7 @@ Thu Apr 24 13:56:53 CEST 2008 Daniel Veillard <daniel@veillard.com>
Tue Apr 22 10:27:17 CEST 2008 Daniel Veillard <daniel@veillard.com>
* dict.c: improvement on the hashing of the dictionnary, with visible
* dict.c: improvement on the hashing of the dictionary, with visible
speed up as the number of strings in the hash increases, work from
Stefan Behnel
@ -2479,7 +2479,7 @@ Mon Jan 9 17:27:15 CET 2006 Kasimier Buchcik <libxml2-cvs@cazic.net>
Mon Jan 9 15:33:16 CET 2006 Daniel Veillard <daniel@veillard.com>
* parser.c: reverted first patches for #319279 which led to #326295
and fixed the problem in DoctRenderer() instead
and fixed the problem in xmlParseChunk() instead
* test/ent11 result//ent11*: added test for #326295 to the regression
suite
@ -5017,7 +5017,7 @@ Mon Jan 24 00:47:41 CET 2005 Daniel Veillard <daniel@veillard.com>
Sun Jan 23 23:54:39 CET 2005 Daniel Veillard <daniel@veillard.com>
* hash.c include/libxml/hash.h: added xmlHashCreateDict where
the hash reuses the dictionnary for internal strings
the hash reuses the dictionary for internal strings
* entities.c valid.c parser.c: reuse that new API, leads to a decent
speedup when parsing for example DocBook documents.
@ -5371,7 +5371,7 @@ Fri Nov 26 11:44:36 CET 2004 Daniel Veillard <daniel@veillard.com>
Wed Nov 24 13:41:52 CET 2004 Daniel Veillard <daniel@veillard.com>
* dict.c include/libxml/dict.h: added xmlDictExists() to the
dictionnary interface.
dictionary interface.
* xmlreader.c: applying xmlTextReaderHasAttributes fix for namespaces
from Rob Richards
@ -5697,7 +5697,7 @@ Tue Oct 26 23:57:02 CEST 2004 Daniel Veillard <daniel@veillard.com>
Tue Oct 26 18:09:59 CEST 2004 Daniel Veillard <daniel@veillard.com>
* debugXML.c include/libxml/xmlerror.h: added checking for names
values and dictionnaries generates a tons of errors
values and dictionaries generates a tons of errors
* SAX2.ccatalog.c parser.c relaxng.c tree.c xinclude.c xmlwriter.c
include/libxml/tree.h: fixing the errors in the regression tests
@ -7746,14 +7746,14 @@ Fri Jan 23 14:03:21 CET 2004 Daniel Veillard <daniel@veillard.com>
make tests
* xpath.c include/libxml/xpath.h: added xmlXPathCtxtCompile() to
compile an XPath expression within a context, currently the goal
is to be able to reuse the XSLT stylesheet dictionnary, but this
is to be able to reuse the XSLT stylesheet dictionary, but this
opens the door to others possible optimizations.
* dict.c include/libxml/dict.h: added xmlDictCreateSub() which allows
to build a new dictionnary based on another read-only dictionnary.
This is needed for XSLT to keep the stylesheet dictionnary read-only
to build a new dictionary based on another read-only dictionary.
This is needed for XSLT to keep the stylesheet dictionary read-only
while being able to reuse the strings for the transformation
dictionnary.
* xinclude.c: fixed a dictionnar reference counting problem occuring
dictionary.
* xinclude.c: fixed a dictionary reference counting problem occuring
when document parsing failed.
* testSAX.c: adding option --repeat for timing 100times the parsing
* doc/* : rebuilt all the docs
@ -7806,7 +7806,7 @@ Mon Jan 12 17:22:57 CET 2004 Daniel Veillard <daniel@veillard.com>
Thu Jan 8 17:57:50 CET 2004 Daniel Veillard <daniel@veillard.com>
* xmlschemas.c: removed a memory leak remaining from the switch
to a dictionnary for string allocations c.f. #130891
to a dictionary for string allocations c.f. #130891
Thu Jan 8 17:48:46 CET 2004 Daniel Veillard <daniel@veillard.com>
@ -7928,7 +7928,7 @@ Fri Jan 2 22:58:29 HKT 2004 William Brack <wbrack@mmm.com.hk>
Fri Jan 2 11:40:06 CET 2004 Daniel Veillard <daniel@veillard.com>
* SAX2.c: found and fixed a bug misallocating some non
blank text node strings from the dictionnary.
blank text node strings from the dictionary.
* xmlmemory.c: fixed a problem with the memory debug mutex
release.
@ -9386,7 +9386,7 @@ Sat Sep 27 01:25:39 CEST 2003 Daniel Veillard <daniel@veillard.com>
* parser.c: William's change allowed to spot a nasty bug in xmlDoRead
if the result is not well formed that ctxt->myDoc is not NULL
and uses the context dictionnary.
and uses the context dictionary.
Fri Sep 26 21:09:34 CEST 2003 Daniel Veillard <daniel@veillard.com>

Some files were not shown because too many files have changed in this diff Show More