mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-03-03 17:31:45 +08:00
Compare commits
7 Commits
core-win-3
...
core-linux
| Author | SHA1 | Date | |
|---|---|---|---|
| 4954ef2934 | |||
| 721e8800f1 | |||
| ef8e5cab6d | |||
| 028e58ad51 | |||
| 424e0e34cc | |||
| d8988cd101 | |||
| 440a884c0a |
@ -92,13 +92,16 @@ public:
|
||||
bool bResult = pInfo->ReadFromStream(&oUserAtom, pStream);
|
||||
|
||||
offsetToEdit = pInfo->m_oUser.m_nOffsetLastEdit;
|
||||
m_oCurrentUser.m_bIsEncrypt = pInfo->m_bEncrypt;
|
||||
|
||||
if (bResult == false)
|
||||
{
|
||||
delete pInfo;
|
||||
|
||||
if (pInfo->m_bEncrypt) return false;
|
||||
else continue;
|
||||
if (pInfo->m_bEncrypt)
|
||||
return false;
|
||||
else
|
||||
continue;
|
||||
}
|
||||
|
||||
m_arUsers.push_back(pInfo);
|
||||
|
||||
@ -116,7 +116,7 @@ bool CPPTFileReader::ReadPersists()
|
||||
CFStreamPtr pStream = GetDocumentStream();
|
||||
if (!pStream) return false;
|
||||
|
||||
if (m_oDocumentInfo.ReadFromStream(&m_oCurrentUser, pStream->stream_) == false) return false;
|
||||
return m_oDocumentInfo.ReadFromStream(&m_oCurrentUser, pStream->stream_);
|
||||
}
|
||||
void CPPTFileReader::ReadDocument()
|
||||
{
|
||||
|
||||
@ -60,7 +60,7 @@ int _tmain(int argc, _TCHAR* argv[])
|
||||
|
||||
pptFile.put_TempDirectory(tempPath);
|
||||
|
||||
HRESULT hRes = pptFile.LoadFromFile(sSrcPpt, dstTempPath, L"password");
|
||||
HRESULT hRes = pptFile.LoadFromFile(sSrcPpt, dstTempPath, L"");
|
||||
|
||||
if (hRes == S_OK)
|
||||
{
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of BkHim record in BIFF8
|
||||
class BkHim: public BiffRecordContinued
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(BkHim)
|
||||
@ -48,10 +46,9 @@ public:
|
||||
|
||||
BaseObjectPtr clone();
|
||||
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
static const ElementType type = typeBkHim;
|
||||
static const ElementType type = typeBkHim;
|
||||
|
||||
_UINT16 cf;
|
||||
_UINT32 lcb;
|
||||
|
||||
@ -52,8 +52,24 @@ BaseObjectPtr SXDBB::clone()
|
||||
|
||||
void SXDBB::readFields(CFRecord& record)
|
||||
{
|
||||
int skip = record.getDataSize() - record.getRdPtr();
|
||||
record.skipNunBytes(skip);
|
||||
unsigned int sz = record.getDataSize() - record.getRdPtr();
|
||||
|
||||
//std::list<CFRecordPtr>& recs = continue_records[rt_Continue];
|
||||
|
||||
//while (record.getRdPtr() + lcb > record.getDataSize() && !recs.empty())
|
||||
//{
|
||||
// record.appendRawData(recs.front());
|
||||
// recs.pop_front();
|
||||
//}
|
||||
|
||||
if (record.checkFitReadSafe(sz))
|
||||
{
|
||||
blob = boost::shared_array<char>(new char[sz]);
|
||||
|
||||
memcpy(blob.get(), record.getCurData<char>(), sz);
|
||||
|
||||
record.skipNunBytes(sz);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -31,12 +31,12 @@
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
#include "BiffRecordContinued.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
class SXDBB: public BiffRecord
|
||||
class SXDBB: public BiffRecordContinued
|
||||
{
|
||||
BIFF_RECORD_DEFINE_TYPE_INFO(SXDBB)
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(SXDBB)
|
||||
@ -50,6 +50,7 @@ public:
|
||||
|
||||
static const ElementType type = typeSXDBB;
|
||||
|
||||
boost::shared_array<char> blob;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -51,6 +51,23 @@ BaseObjectPtr SXDtr::clone()
|
||||
|
||||
void SXDtr::readFields(CFRecord& record)
|
||||
{
|
||||
record >> yr >> mon >> dom >> hr >> min >> sec;
|
||||
}
|
||||
|
||||
int SXDtr::serialize(std::wostream & strm)
|
||||
{
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"d")
|
||||
{
|
||||
std::wstringstream s;
|
||||
s << yr << L"-" << mon << L"-" << dom << L"T" << hr << L":" << min << L":" << sec;
|
||||
|
||||
CP_XML_ATTR(L"v", s.str());
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,7 +32,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
//#include "../Biff_structures/CellRangeRef.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
@ -49,8 +48,16 @@ public:
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
static const ElementType type = typeSXDtr;
|
||||
|
||||
unsigned short yr;
|
||||
unsigned short mon;
|
||||
unsigned char dom;
|
||||
unsigned char hr;
|
||||
unsigned char min;
|
||||
unsigned char sec;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -51,6 +51,7 @@ BaseObjectPtr SXFDBType::clone()
|
||||
|
||||
void SXFDBType::readFields(CFRecord& record)
|
||||
{
|
||||
record >> wTypeSql;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -50,7 +50,7 @@ public:
|
||||
|
||||
static const ElementType type = typeSXFDBType;
|
||||
|
||||
|
||||
short wTypeSql; //ODBCType enum
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -51,6 +51,7 @@ BaseObjectPtr SXInt::clone()
|
||||
|
||||
void SXInt::readFields(CFRecord& record)
|
||||
{
|
||||
record >> num;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,7 +32,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
//#include "../Biff_structures/CellRangeRef.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
@ -51,7 +50,7 @@ public:
|
||||
|
||||
static const ElementType type = typeSXInt;
|
||||
|
||||
|
||||
short num;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -39,7 +39,6 @@ SXNum::SXNum()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
SXNum::~SXNum()
|
||||
{
|
||||
}
|
||||
@ -51,7 +50,20 @@ BaseObjectPtr SXNum::clone()
|
||||
|
||||
void SXNum::readFields(CFRecord& record)
|
||||
{
|
||||
record >> num;
|
||||
}
|
||||
|
||||
int SXNum::serialize(std::wostream & strm)
|
||||
{
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"n")
|
||||
{
|
||||
CP_XML_ATTR(L"v", num.data.value);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -32,7 +32,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
//#include "../Biff_structures/CellRangeRef.h"
|
||||
#include "../Biff_structures/Xnum.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
@ -49,9 +49,11 @@ public:
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
static const ElementType type = typeSXNum;
|
||||
|
||||
|
||||
Xnum num;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -51,6 +51,13 @@ BaseObjectPtr SXPair::clone()
|
||||
|
||||
void SXPair::readFields(CFRecord& record)
|
||||
{
|
||||
unsigned short reserved1, flags;
|
||||
|
||||
record >> isxvd >> iCache >> reserved1 >> flags;
|
||||
|
||||
fFormula = GETBIT(flags, 0);
|
||||
fPhysical = GETBIT(flags, 3);
|
||||
fRelative = GETBIT(flags, 4);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -51,7 +51,12 @@ public:
|
||||
|
||||
static const ElementType type = typeSXPair;
|
||||
|
||||
unsigned short isxvd;
|
||||
short iCache;
|
||||
|
||||
bool fFormula;
|
||||
bool fPhysical;
|
||||
bool fRelative;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -51,6 +51,13 @@ BaseObjectPtr SXRng::clone()
|
||||
|
||||
void SXRng::readFields(CFRecord& record)
|
||||
{
|
||||
unsigned short flags;
|
||||
|
||||
record >> flags;
|
||||
|
||||
fAutoStart = GETBIT(flags, 0);
|
||||
fAutoEnd = GETBIT(flags, 1);
|
||||
iByType = GETBITS(flags, 2, 4);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -51,7 +51,9 @@ public:
|
||||
|
||||
static const ElementType type = typeSXRng;
|
||||
|
||||
|
||||
bool fAutoStart;
|
||||
bool fAutoEnd;
|
||||
unsigned char iByType;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -61,6 +61,17 @@ void SXString::readFields(CFRecord& record)
|
||||
record >> segment;
|
||||
}
|
||||
}
|
||||
|
||||
int SXString::serialize(std::wostream & strm)
|
||||
{
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"s")
|
||||
{
|
||||
CP_XML_ATTR(L"v", segment.value());
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -49,6 +49,8 @@ public:
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
static const ElementType type = typeSXString;
|
||||
|
||||
unsigned short cch;
|
||||
|
||||
@ -51,6 +51,10 @@ BaseObjectPtr SxBool::clone()
|
||||
|
||||
void SxBool::readFields(CFRecord& record)
|
||||
{
|
||||
unsigned short flags;
|
||||
record >> flags;
|
||||
|
||||
val = (flags != 0);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,7 +32,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
//#include "../Biff_structures/CellRangeRef.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
@ -51,7 +50,7 @@ public:
|
||||
|
||||
static const ElementType type = typeSxBool;
|
||||
|
||||
|
||||
bool val;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -51,6 +51,7 @@ BaseObjectPtr SxErr::clone()
|
||||
|
||||
void SxErr::readFields(CFRecord& record)
|
||||
{
|
||||
record >> wbe;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -51,7 +51,7 @@ public:
|
||||
|
||||
static const ElementType type = typeSxErr;
|
||||
|
||||
|
||||
unsigned short wbe;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -52,57 +52,7 @@ BaseObjectPtr SxFmla::clone()
|
||||
|
||||
void SxFmla::readFields(CFRecord& record)
|
||||
{
|
||||
//record >> csxformat >> cchErrorString >> cchNullString >> cchTag >> csxselect;
|
||||
|
||||
//_UINT32 flags;
|
||||
//record >> crwPage >> ccolPage >> flags;
|
||||
|
||||
//fAcrossPageLay = GETBIT(flags, 0);
|
||||
//cWrapPage = GETBITS(flags, 1, 9);
|
||||
//fEnableWizard = GETBIT(flags, 16);
|
||||
//fEnableDrilldown = GETBIT(flags, 17);
|
||||
//fEnableFieldDialog = GETBIT(flags, 18);
|
||||
//fPreserveFormatting = GETBIT(flags, 19);
|
||||
//fMergeLabels = GETBIT(flags, 20);
|
||||
//fDisplayErrorString = GETBIT(flags, 21);
|
||||
//fDisplayNullString = GETBIT(flags, 22);
|
||||
//fSubtotalHiddenPageItems = GETBIT(flags, 23);
|
||||
|
||||
//record >> cchPageFieldStyle >> cchTableStyle >> cchVacateStyle;
|
||||
|
||||
//if (cchErrorString > 0 && cchErrorString != 0xffff)
|
||||
//{
|
||||
// stError.setSize(cchErrorString);
|
||||
// record >> stError;
|
||||
//}
|
||||
//if (cchNullString > 0 && cchNullString != 0xffff)
|
||||
//{
|
||||
// stDisplayNull.setSize(cchNullString);
|
||||
// record >> stDisplayNull;
|
||||
//}
|
||||
//if (cchTag > 0 && cchTag != 0xffff)
|
||||
//{
|
||||
// stTag.setSize(cchTag);
|
||||
// record >> stTag;
|
||||
//}
|
||||
//if (cchPageFieldStyle > 0 && cchPageFieldStyle != 0xffff)
|
||||
//{
|
||||
// stPageFieldStyle.setSize(cchPageFieldStyle);
|
||||
// record >> stPageFieldStyle;
|
||||
//}
|
||||
//if (cchTableStyle > 0 && cchTableStyle != 0xffff)
|
||||
//{
|
||||
// stTableStyle.setSize(cchTableStyle);
|
||||
// record >> cchTableStyle;
|
||||
//}
|
||||
//if (cchVacateStyle > 0 && cchVacateStyle != 0xffff)
|
||||
//{
|
||||
// stVacateStyle.setSize(cchVacateStyle);
|
||||
// record >> cchVacateStyle;
|
||||
//}
|
||||
|
||||
//int skip = record.getDataSize() - record.getRdPtr();
|
||||
//record.skipNunBytes(skip);
|
||||
fmla.load(record);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,8 +32,9 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
//#include "../Biff_structures/BiffString.h"
|
||||
//#include "../Biff_structures/CellRangeRef.h"
|
||||
|
||||
#include "../Biff_structures/PivotParsedFormula.h"
|
||||
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
@ -52,36 +53,7 @@ public:
|
||||
|
||||
static const ElementType type = typeSxFmla;
|
||||
|
||||
//unsigned short csxformat;
|
||||
//unsigned short cchErrorString;
|
||||
//unsigned short cchNullString;
|
||||
//unsigned short cchTag;
|
||||
//unsigned short csxselect;
|
||||
|
||||
//DRw crwPage;
|
||||
//ColU ccolPage;
|
||||
|
||||
//bool fAcrossPageLay;
|
||||
//unsigned char cWrapPage;
|
||||
//bool fEnableWizard;
|
||||
//bool fEnableDrilldown;
|
||||
//bool fEnableFieldDialog;
|
||||
//bool fPreserveFormatting;
|
||||
//bool fMergeLabels;
|
||||
//bool fDisplayErrorString;
|
||||
//bool fDisplayNullString;
|
||||
//bool fSubtotalHiddenPageItems;
|
||||
|
||||
//unsigned short cchPageFieldStyle;
|
||||
//unsigned short cchTableStyle;
|
||||
//unsigned short cchVacateStyle;
|
||||
|
||||
//XLUnicodeStringNoCch stError;
|
||||
//XLUnicodeStringNoCch stDisplayNull;
|
||||
//XLUnicodeStringNoCch stTag;
|
||||
//XLUnicodeStringNoCch stPageFieldStyle;
|
||||
//XLUnicodeStringNoCch stTableStyle;
|
||||
//XLUnicodeStringNoCch stVacateStyle;
|
||||
PivotParsedFormula fmla;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -51,6 +51,10 @@ BaseObjectPtr SxName::clone()
|
||||
|
||||
void SxName::readFields(CFRecord& record)
|
||||
{
|
||||
unsigned short flags;
|
||||
record >> flags >> ifdb >> ifn >> csxpair;
|
||||
|
||||
fErrName = GETBIT(flags, 0);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -32,7 +32,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
//#include "../Biff_structures/CellRangeRef.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
@ -51,7 +50,10 @@ public:
|
||||
|
||||
static const ElementType type = typeSxName;
|
||||
|
||||
|
||||
bool fErrName;
|
||||
short ifdb;
|
||||
short ifn;
|
||||
unsigned short csxpair;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -39,7 +39,6 @@ SxNil::SxNil()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
SxNil::~SxNil()
|
||||
{
|
||||
}
|
||||
@ -53,5 +52,14 @@ void SxNil::readFields(CFRecord& record)
|
||||
{
|
||||
}
|
||||
|
||||
int SxNil::serialize(std::wostream & strm)
|
||||
{
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"m");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -32,7 +32,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "BiffRecord.h"
|
||||
//#include "../Biff_structures/CellRangeRef.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
@ -49,9 +48,9 @@ public:
|
||||
|
||||
void readFields(CFRecord& record);
|
||||
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
static const ElementType type = typeSxNil;
|
||||
|
||||
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -45,8 +45,6 @@ public:
|
||||
|
||||
BiffStructurePtr clone();
|
||||
void load(CFRecord& record);
|
||||
|
||||
|
||||
|
||||
std::vector<CellRangeRef> cell_ranges;
|
||||
|
||||
|
||||
@ -0,0 +1,58 @@
|
||||
/*
|
||||
* (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 "PivotParsedFormula.h"
|
||||
#include <Binary/CFRecord.h>
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
PivotParsedFormula::PivotParsedFormula()
|
||||
: ParsedFormula(CellRef())
|
||||
{
|
||||
}
|
||||
|
||||
BiffStructurePtr PivotParsedFormula::clone()
|
||||
{
|
||||
return BiffStructurePtr(new PivotParsedFormula(*this));
|
||||
}
|
||||
|
||||
void PivotParsedFormula::load(CFRecord& record)
|
||||
{
|
||||
unsigned short cce;
|
||||
|
||||
record >> cce >> cSxName;
|
||||
rgce.load(record, cce);
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* (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
|
||||
|
||||
#include "ParsedFormula.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
class PivotParsedFormula: public ParsedFormula
|
||||
{
|
||||
BASE_STRUCTURE_DEFINE_CLASS_NAME(PivotParsedFormula)
|
||||
public:
|
||||
PivotParsedFormula();
|
||||
|
||||
BiffStructurePtr clone();
|
||||
void load(CFRecord& record);
|
||||
|
||||
unsigned short cSxName;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -43,18 +43,15 @@ DREF::DREF()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
DREF::~DREF()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BaseObjectPtr DREF::clone()
|
||||
{
|
||||
return BaseObjectPtr(new DREF(*this));
|
||||
}
|
||||
|
||||
|
||||
// DREF = DConName / DConBin / DConRef
|
||||
const bool DREF::loadContent(BinProcessor& proc)
|
||||
{
|
||||
@ -68,8 +65,42 @@ const bool DREF::loadContent(BinProcessor& proc)
|
||||
}
|
||||
}
|
||||
}
|
||||
m_DCon = elements_.back();
|
||||
elements_.pop_back();
|
||||
return true;
|
||||
}
|
||||
|
||||
int DREF::serialize(std::wostream & strm)
|
||||
{
|
||||
if (!m_DCon)return 0;
|
||||
|
||||
DConName* name = dynamic_cast<DConName*>(m_DCon.get());
|
||||
DConBin* bin = dynamic_cast<DConBin*>(m_DCon.get());
|
||||
DConRef* ref = dynamic_cast<DConRef*>(m_DCon.get());
|
||||
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"cacheSource")
|
||||
{
|
||||
if (name)
|
||||
{
|
||||
CP_XML_ATTR(L"type", L"worksheet");
|
||||
CP_XML_NODE(L"worksheetSource")
|
||||
{
|
||||
CP_XML_ATTR(L"name", name->stName.value());
|
||||
}
|
||||
}
|
||||
else if(bin)
|
||||
{
|
||||
}
|
||||
else if(ref)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of DREF union of records
|
||||
class DREF: public CompositeObject
|
||||
{
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(DREF)
|
||||
@ -49,7 +47,11 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
static const ElementType type = typeDREF;
|
||||
int serialize(std::wostream & stream);
|
||||
|
||||
static const ElementType type = typeDREF;
|
||||
|
||||
BaseObjectPtr m_DCon;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -47,6 +47,10 @@ class Parenthesis_FDB: public ABNFParenthesis
|
||||
{
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(Parenthesis_FDB)
|
||||
public:
|
||||
Parenthesis_FDB(int count = 0)
|
||||
{
|
||||
m_count = count;
|
||||
}
|
||||
BaseObjectPtr clone()
|
||||
{
|
||||
return BaseObjectPtr(new Parenthesis_FDB(*this));
|
||||
@ -54,7 +58,9 @@ public:
|
||||
|
||||
const bool loadContent(BinProcessor& proc)
|
||||
{
|
||||
int count = proc.repeated<SXOPER>(0, 0);
|
||||
if (m_count < 1) return false;
|
||||
|
||||
int count = proc.repeated<SXOPER>(0, m_count);
|
||||
|
||||
if (!proc.optional<SXRANGE>())
|
||||
{
|
||||
@ -62,6 +68,8 @@ public:
|
||||
}
|
||||
return true;
|
||||
};
|
||||
private:
|
||||
int m_count;
|
||||
};
|
||||
|
||||
FDB::FDB()
|
||||
@ -91,6 +99,8 @@ const bool FDB::loadContent(BinProcessor& proc)
|
||||
}
|
||||
m_SXFDB = elements_.back();
|
||||
elements_.pop_back();
|
||||
|
||||
SXFDB* fdb = dynamic_cast<SXFDB*>(m_SXFDB.get());
|
||||
|
||||
if(proc.mandatory<SXFDBType>())
|
||||
{
|
||||
@ -103,31 +113,36 @@ const bool FDB::loadContent(BinProcessor& proc)
|
||||
m_SXFMLA = elements_.back();
|
||||
elements_.pop_back();
|
||||
}
|
||||
else if(proc.optional<Parenthesis_FDB>())
|
||||
else
|
||||
{
|
||||
int count = elements_.size();
|
||||
|
||||
while(count > 0)
|
||||
Parenthesis_FDB parenthesis_FDB(fdb->csxoper);
|
||||
|
||||
if (proc.optional(parenthesis_FDB))
|
||||
{
|
||||
SXOPER * oper = dynamic_cast<SXOPER*> (elements_.front().get());
|
||||
if (oper)
|
||||
int count = elements_.size();
|
||||
|
||||
while(count > 0)
|
||||
{
|
||||
m_arGRPSXOPER.push_back(elements_.front());
|
||||
}
|
||||
else
|
||||
{
|
||||
SXRANGE *range = dynamic_cast<SXRANGE*> (elements_.front().get());
|
||||
if (range)
|
||||
m_SXRANGE = elements_.front();
|
||||
SXOPER * oper = dynamic_cast<SXOPER*> (elements_.front().get());
|
||||
if (oper)
|
||||
{
|
||||
m_arGRPSXOPER.push_back(elements_.front());
|
||||
}
|
||||
else
|
||||
{
|
||||
SxIsxoper * isOper = dynamic_cast<SxIsxoper*> (elements_.front().get());
|
||||
if (isOper)
|
||||
m_arSxIsxoper.push_back(elements_.front());
|
||||
SXRANGE *range = dynamic_cast<SXRANGE*> (elements_.front().get());
|
||||
if (range)
|
||||
m_SXRANGE = elements_.front();
|
||||
else
|
||||
{
|
||||
SxIsxoper * isOper = dynamic_cast<SxIsxoper*> (elements_.front().get());
|
||||
if (isOper)
|
||||
m_arSxIsxoper.push_back(elements_.front());
|
||||
}
|
||||
}
|
||||
elements_.pop_front();
|
||||
count--;
|
||||
}
|
||||
elements_.pop_front();
|
||||
count--;
|
||||
}
|
||||
}
|
||||
|
||||
@ -140,5 +155,98 @@ const bool FDB::loadContent(BinProcessor& proc)
|
||||
return true;
|
||||
}
|
||||
|
||||
int FDB::serialize(std::wostream & strm)
|
||||
{
|
||||
SXFDB* fdb = dynamic_cast<SXFDB*>(m_SXFDB.get());
|
||||
SXFDBType* fdb_type = dynamic_cast<SXFDBType*>(m_SXFDBType.get());
|
||||
|
||||
if (!fdb || !fdb_type) return 0;
|
||||
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"cacheField")
|
||||
{
|
||||
CP_XML_ATTR(L"name", fdb->stFieldName.value());
|
||||
CP_XML_ATTR(L"numFmtId", fdb_type->wTypeSql);
|
||||
|
||||
switch(fdb_type->wTypeSql)//format code
|
||||
{
|
||||
case 0x0000:
|
||||
case 0x0001:
|
||||
case 0x0003:
|
||||
case 0x0004:
|
||||
case 0x0005:
|
||||
case 0x0006:
|
||||
case 0x0007:
|
||||
case 0x0008:
|
||||
case 0x000B:
|
||||
case 0x000C:
|
||||
case 0xFFF9:
|
||||
case 0xFFFE:
|
||||
break;
|
||||
}
|
||||
if(m_SXFMLA)
|
||||
{
|
||||
//{formula
|
||||
}
|
||||
//caption, databaseFields, ..
|
||||
|
||||
if (m_arSRCSXOPER.empty() == false)
|
||||
{
|
||||
CP_XML_NODE(L"sharedItems")
|
||||
{
|
||||
//CP_XML_ATTR(L"containsSemiMixedTypes", 0);
|
||||
CP_XML_ATTR(L"containsNonDate", fdb->fNonDates);
|
||||
CP_XML_ATTR(L"containsDate", fdb->fDateInField);
|
||||
CP_XML_ATTR(L"containsNumber", fdb->fNumField);
|
||||
CP_XML_ATTR(L"containsBlank", fdb->fTextEtcField);
|
||||
//CP_XML_ATTR(L"containsString", 0);
|
||||
if (fdb->fnumMinMaxValid)
|
||||
{
|
||||
if (fdb->fDateInField)
|
||||
{
|
||||
CP_XML_ATTR(L"minDate", 0); // "2007-11-18T00:00:00"
|
||||
CP_XML_ATTR(L"maxDate", 0); // "2007-12-25T00:00:00"
|
||||
}
|
||||
else if (fdb->fNumField)
|
||||
{
|
||||
CP_XML_ATTR(L"minValue", 0);
|
||||
CP_XML_ATTR(L"maxValue", 0);
|
||||
}
|
||||
}
|
||||
CP_XML_ATTR(L"count", fdb->catm);
|
||||
|
||||
for (size_t i = 0; i < m_arSRCSXOPER.size(); i++)
|
||||
{
|
||||
m_arSRCSXOPER[i]->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (m_arGRPSXOPER.empty() == false)
|
||||
{
|
||||
CP_XML_NODE(L"fieldGroup")
|
||||
{
|
||||
if (fdb->ifdbParent > 0)
|
||||
CP_XML_ATTR(L"par", fdb->ifdbParent);
|
||||
|
||||
if (m_SXRANGE)
|
||||
m_SXRANGE->serialize(CP_XML_STREAM());
|
||||
CP_XML_NODE(L"groupItems")
|
||||
{
|
||||
CP_XML_ATTR(L"count", m_arGRPSXOPER.size());
|
||||
for (size_t i = 0; i < m_arGRPSXOPER.size(); i++)
|
||||
{
|
||||
m_arGRPSXOPER[i]->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -47,6 +47,8 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
static const ElementType type = typeFDB;
|
||||
|
||||
BaseObjectPtr m_SXFDB;
|
||||
|
||||
@ -36,8 +36,6 @@
|
||||
namespace XLS
|
||||
{
|
||||
|
||||
|
||||
// Logical representation of GLOBALS union of records
|
||||
class GLOBALS: public CompositeObject
|
||||
{
|
||||
BASE_OBJECT_DEFINE_CLASS_NAME(GLOBALS)
|
||||
@ -49,7 +47,7 @@ public:
|
||||
|
||||
virtual const bool loadContent (BinProcessor& proc);
|
||||
|
||||
static const ElementType type = typeGLOBALS;
|
||||
static const ElementType type = typeGLOBALS;
|
||||
|
||||
int serialize(std::wostream & stream);
|
||||
|
||||
|
||||
@ -47,7 +47,6 @@ PIVOTCACHE::PIVOTCACHE()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
PIVOTCACHE::~PIVOTCACHE()
|
||||
{
|
||||
}
|
||||
|
||||
@ -31,10 +31,14 @@
|
||||
*/
|
||||
|
||||
#include "PIVOTCACHEDEFINITION.h"
|
||||
#include <Logic/Biff_records/SXStreamID.h>
|
||||
#include <Logic/Biff_records/SXVS.h>
|
||||
#include <Logic/Biff_unions/SXSRC.h>
|
||||
#include <Logic/Biff_unions/SXADDLCACHE.h>
|
||||
#include "PIVOTCACHE.h"
|
||||
#include "SXSRC.h"
|
||||
#include "SXADDLCACHE.h"
|
||||
|
||||
#include "../Biff_records/SXStreamID.h"
|
||||
#include "../Biff_records/SXVS.h"
|
||||
#include "../Biff_records/SXDB.h"
|
||||
#include "../Biff_records/SXDBEx.h"
|
||||
|
||||
namespace XLS
|
||||
{
|
||||
@ -59,6 +63,8 @@ BaseObjectPtr PIVOTCACHEDEFINITION::clone()
|
||||
// PIVOTCACHEDEFINITION = SXStreamID SXVS [SXSRC] [SXADDLCACHE]
|
||||
const bool PIVOTCACHEDEFINITION::loadContent(BinProcessor& proc)
|
||||
{
|
||||
global_info_ = proc.getGlobalWorkbookInfo();
|
||||
|
||||
if(!proc.mandatory<SXStreamID>())
|
||||
{
|
||||
return false;
|
||||
@ -83,6 +89,93 @@ const bool PIVOTCACHEDEFINITION::loadContent(BinProcessor& proc)
|
||||
}
|
||||
return true;
|
||||
}
|
||||
int PIVOTCACHEDEFINITION::serialize_definitions(std::wostream & strm)
|
||||
{
|
||||
SXStreamID* streamId = dynamic_cast<SXStreamID*>(m_SXStreamID.get());
|
||||
if (!streamId) return 0;
|
||||
|
||||
std::map<int, BaseObjectPtr>::iterator pFind = global_info_->mapPivotCache.find(streamId->idStm);
|
||||
if (pFind == global_info_->mapPivotCache.end()) return 0;
|
||||
|
||||
PIVOTCACHE* pivot_cache = dynamic_cast<PIVOTCACHE*>(pFind->second.get());
|
||||
if (!pivot_cache) return 0;
|
||||
|
||||
SXDB* db = dynamic_cast<SXDB*>(pivot_cache->m_SXDB.get());
|
||||
SXDBEx* db_ex = dynamic_cast<SXDBEx*>(pivot_cache->m_SXDBEx.get());
|
||||
|
||||
if (!db || !db_ex)return 0;
|
||||
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"pivotCacheDefinition")
|
||||
{
|
||||
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
|
||||
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
|
||||
|
||||
if (pivot_cache->m_arDBB.empty() == false)
|
||||
{
|
||||
CP_XML_ATTR(L"r:id", L"rId1" );
|
||||
}
|
||||
CP_XML_ATTR(L"recordCount", db->crdbUsed);
|
||||
CP_XML_ATTR(L"refreshedBy", db->rgb.value());
|
||||
CP_XML_ATTR(L"refreshedDate", db_ex->numDate.data.value);
|
||||
//createdVersion="1"
|
||||
//refreshedVersion="2"
|
||||
//upgradeOnRefresh="1">
|
||||
SXSRC* src = dynamic_cast<SXSRC*>(m_SXSRC.get());
|
||||
if (src)
|
||||
src->serialize(CP_XML_STREAM());
|
||||
|
||||
if (pivot_cache->m_arFDB.empty() == false)
|
||||
{
|
||||
CP_XML_NODE(L"cacheFields")
|
||||
{
|
||||
CP_XML_ATTR(L"count", pivot_cache->m_arFDB.size());
|
||||
|
||||
for (size_t i = 0; i < pivot_cache->m_arFDB.size(); i++)
|
||||
{
|
||||
pivot_cache->m_arFDB[i]->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int PIVOTCACHEDEFINITION::serialize_records(std::wostream & strm)
|
||||
{
|
||||
SXStreamID* streamId = dynamic_cast<SXStreamID*>(m_SXStreamID.get());
|
||||
if (!streamId) return 0;
|
||||
|
||||
std::map<int, BaseObjectPtr>::iterator pFind = global_info_->mapPivotCache.find(streamId->idStm);
|
||||
if (pFind == global_info_->mapPivotCache.end()) return 0;
|
||||
|
||||
PIVOTCACHE* pivot_cache = dynamic_cast<PIVOTCACHE*>(pFind->second.get());
|
||||
if (!pivot_cache) return 0;
|
||||
|
||||
if (pivot_cache->m_arDBB.empty()) return 0;
|
||||
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"pivotCacheRecords")
|
||||
{
|
||||
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
|
||||
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
|
||||
|
||||
CP_XML_ATTR(L"count", pivot_cache->m_arDBB.size());
|
||||
|
||||
for (size_t i = 0; i < pivot_cache->m_arDBB.size(); i++)
|
||||
{
|
||||
pivot_cache->m_arDBB[i]->serialize(CP_XML_STREAM());
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -48,6 +48,9 @@ public:
|
||||
BaseObjectPtr clone();
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
int serialize_definitions(std::wostream & stream);
|
||||
int serialize_records(std::wostream & stream);
|
||||
|
||||
static const ElementType type = typePIVOTCACHEDEFINITION;
|
||||
|
||||
@ -55,6 +58,8 @@ public:
|
||||
BaseObjectPtr m_SXVS;
|
||||
BaseObjectPtr m_SXSRC;
|
||||
BaseObjectPtr m_SXADDLCACHE;
|
||||
|
||||
GlobalWorkbookInfoPtr global_info_;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -45,7 +45,6 @@ SXOPER::SXOPER()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
SXOPER::~SXOPER()
|
||||
{
|
||||
}
|
||||
@ -79,8 +78,17 @@ const bool SXOPER::loadContent(BinProcessor& proc)
|
||||
else
|
||||
return false;
|
||||
|
||||
m_element = elements_.back();
|
||||
elements_.pop_back();
|
||||
|
||||
return true;
|
||||
}
|
||||
int SXOPER::serialize(std::wostream & strm)
|
||||
{
|
||||
if (!m_element) return 0;
|
||||
|
||||
m_element->serialize(strm);
|
||||
return 0;
|
||||
}
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -47,9 +47,11 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
static const ElementType type = typeSXOPER;
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
BaseObjectPtr m_SXOPER;
|
||||
static const ElementType type = typeSXOPER;
|
||||
|
||||
BaseObjectPtr m_element;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -92,10 +92,69 @@ const bool SXRANGE::loadContent(BinProcessor& proc)
|
||||
|
||||
if(proc.optional<Parenthesis_SXRANGE>())
|
||||
{
|
||||
while(elements_.empty() == false)
|
||||
{
|
||||
SXNum* num = dynamic_cast<SXNum*>(elements_.front().get());
|
||||
if (num)
|
||||
{
|
||||
m_arSXNum.push_back(elements_.front());
|
||||
}
|
||||
else
|
||||
{
|
||||
SXDtr* dtr = dynamic_cast<SXDtr*>(elements_.front().get());
|
||||
if (dtr)
|
||||
{
|
||||
m_arSXDtr.push_back(elements_.front());
|
||||
}
|
||||
}
|
||||
elements_.pop_front();
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int SXRANGE::serialize(std::wostream & strm)
|
||||
{
|
||||
SXRng* rng = dynamic_cast<SXRng*>(m_SXRng.get());
|
||||
|
||||
if (!rng) return 0;
|
||||
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"rangePr")
|
||||
{
|
||||
switch(rng->iByType)
|
||||
{
|
||||
case 0: CP_XML_ATTR(L"groupBy", L"range"); break;
|
||||
case 1: CP_XML_ATTR(L"groupBy", L"seconds"); break;
|
||||
case 2: CP_XML_ATTR(L"groupBy", L"minutes"); break;
|
||||
case 3: CP_XML_ATTR(L"groupBy", L"hours"); break;
|
||||
case 4: CP_XML_ATTR(L"groupBy", L"days"); break;
|
||||
case 5: CP_XML_ATTR(L"groupBy", L"months"); break;
|
||||
case 6: CP_XML_ATTR(L"groupBy", L"quarters"); break;
|
||||
case 7: CP_XML_ATTR(L"groupBy", L"years"); break;
|
||||
}
|
||||
if (m_arSXDtr.size() == 2)
|
||||
{
|
||||
SXDtr* startDate = dynamic_cast<SXDtr*>(m_arSXDtr[0].get());
|
||||
SXDtr* endDate = dynamic_cast<SXDtr*>(m_arSXDtr[1].get());
|
||||
|
||||
std::wstringstream s_start, s_end;
|
||||
s_start << startDate->yr << L"-" << startDate->mon << L"-" << startDate->dom << L"T" << startDate->hr << L":" << startDate->min << L":" << startDate->sec;
|
||||
s_end << endDate->yr << L"-" << endDate->mon << L"-" << endDate->dom << L"T" << endDate->hr << L":" << endDate->min << L":" << endDate->sec;
|
||||
|
||||
CP_XML_ATTR(L"startDate", s_start.str());
|
||||
CP_XML_ATTR(L"endDate", s_end.str());
|
||||
}
|
||||
if (m_arSXNum.size() == 3)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -47,9 +47,13 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
static const ElementType type = typeSXRANGE;
|
||||
int serialize(std::wostream & strm);
|
||||
|
||||
BaseObjectPtr m_SXRng;
|
||||
static const ElementType type = typeSXRANGE;
|
||||
|
||||
BaseObjectPtr m_SXRng;
|
||||
std::vector<BaseObjectPtr> m_arSXNum;
|
||||
std::vector<BaseObjectPtr> m_arSXDtr;
|
||||
};
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
@ -73,5 +73,13 @@ const bool SXSRC::loadContent(BinProcessor& proc)
|
||||
return true;
|
||||
}
|
||||
|
||||
int SXSRC::serialize(std::wostream & stream)
|
||||
{
|
||||
if (m_source)
|
||||
m_source->serialize(stream);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
} // namespace XLS
|
||||
|
||||
|
||||
@ -47,7 +47,9 @@ public:
|
||||
|
||||
virtual const bool loadContent(BinProcessor& proc);
|
||||
|
||||
static const ElementType type = typeSXSRC;
|
||||
int serialize(std::wostream & stream);
|
||||
|
||||
static const ElementType type = typeSXSRC;
|
||||
|
||||
BaseObjectPtr m_source;
|
||||
};
|
||||
|
||||
@ -1922,16 +1922,10 @@ void XlsConverter::convert(XLS::PIVOTCACHEDEFINITION * pivot_cached)
|
||||
{
|
||||
if (pivot_cached == NULL) return;
|
||||
|
||||
xlsx_context->start_pivot_cache();
|
||||
|
||||
pivot_cached->serialize(xlsx_context->current_pivot_cache().definitions());
|
||||
|
||||
//if (pivot_cached->is_records())//??
|
||||
{
|
||||
xlsx_context->current_pivot_cache().isRecordsPresent = true;
|
||||
|
||||
//pivot_cached->serialize_records(xlsx_context->current_pivot_cache().records());
|
||||
}
|
||||
std::wstringstream strmD, strmR;
|
||||
|
||||
xlsx_context->end_pivot_cache();
|
||||
pivot_cached->serialize_definitions(strmD);
|
||||
pivot_cached->serialize_records(strmR);
|
||||
|
||||
xlsx_context->get_pivots_context().add_cache(strmD.str(), strmR.str());
|
||||
}
|
||||
@ -84,17 +84,7 @@ xlsx_xml_worksheet & xlsx_conversion_context::current_sheet()
|
||||
throw std::runtime_error("internal error");
|
||||
}
|
||||
}
|
||||
xlsx_pivot_cache_context & xlsx_conversion_context::current_pivot_cache()
|
||||
{
|
||||
if (!pivot_caches_.empty())
|
||||
{
|
||||
return *pivot_caches_.back().get();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw std::runtime_error("internal error");
|
||||
}
|
||||
}
|
||||
|
||||
oox_chart_context & xlsx_conversion_context::current_chart()
|
||||
{
|
||||
if (!charts_.empty())
|
||||
@ -133,15 +123,6 @@ void xlsx_conversion_context::end_chart()
|
||||
{
|
||||
}
|
||||
|
||||
void xlsx_conversion_context::start_pivot_cache()
|
||||
{
|
||||
pivot_caches_.push_back(xlsx_pivot_cache_context::create());
|
||||
|
||||
}
|
||||
void xlsx_conversion_context::end_pivot_cache()
|
||||
{
|
||||
}
|
||||
|
||||
void xlsx_conversion_context::end_table()
|
||||
{
|
||||
get_table_context().serialize_hyperlinks(current_sheet().hyperlinks());
|
||||
@ -246,6 +227,7 @@ void xlsx_conversion_context::end_document()
|
||||
{
|
||||
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
|
||||
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
|
||||
CP_XML_ATTR(L"xmlns:mc", L"http://schemas.openxmlformats.org/markup-compatibility/2006");
|
||||
|
||||
CP_XML_NODE(L"bookViews")
|
||||
{
|
||||
@ -271,11 +253,12 @@ void xlsx_conversion_context::end_document()
|
||||
CP_XML_STREAM() << str_;
|
||||
}
|
||||
}
|
||||
if (!pivot_caches_.empty())
|
||||
int pivot_cache_count = xlsx_pivots_context_.get_cache_count();
|
||||
if (pivot_cache_count > 0)
|
||||
{
|
||||
CP_XML_NODE(L"pivotCaches")
|
||||
{
|
||||
for (size_t i = 0; i < pivot_caches_.size(); i++)
|
||||
for (int i = 0; i < pivot_cache_count; i++)
|
||||
{
|
||||
std::wstring rId = L"pcId" + std::to_wstring(i+1);
|
||||
static const std::wstring sType = L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheDefinition";
|
||||
@ -289,14 +272,10 @@ void xlsx_conversion_context::end_document()
|
||||
CP_XML_ATTR(L"r:id", rId);
|
||||
}
|
||||
|
||||
pivot_caches_[i]->dump_rels(content->get_rels());
|
||||
pivot_caches_[i]->write_to(content->definitions());
|
||||
xlsx_pivots_context_.dump_rels(i, content->get_rels());
|
||||
xlsx_pivots_context_.write_definitions_to(i, content->definitions());
|
||||
xlsx_pivots_context_.write_records_to(i, content->records());
|
||||
|
||||
if (pivot_caches_[i]->isRecordsPresent)
|
||||
{
|
||||
pivot_caches_[i]->write_records_to(content->records());
|
||||
|
||||
}
|
||||
output_document_->get_xl_files().add_pivot_cache(content);
|
||||
}
|
||||
}
|
||||
|
||||
@ -41,7 +41,7 @@
|
||||
#include "xlsx_drawing_context.h"
|
||||
#include "xlsx_chart_context.h"
|
||||
#include "xlsx_comments_context.h"
|
||||
#include "xlsx_pivot_cache_context.h"
|
||||
#include "xlsx_pivots_context.h"
|
||||
|
||||
#include "xlsx_output_xml.h"
|
||||
|
||||
@ -71,9 +71,6 @@ public:
|
||||
void start_chart();
|
||||
void end_chart();
|
||||
|
||||
void start_pivot_cache();
|
||||
void end_pivot_cache();
|
||||
|
||||
std::wostream & shared_strings() { return xlsx_shared_strings_; }
|
||||
std::wostream & defined_names() { return xlsx_defined_names_; }
|
||||
std::wostream & workbook_views() { return xlsx_workbook_views_; }
|
||||
@ -84,8 +81,8 @@ public:
|
||||
xlsx_xml_worksheet & current_sheet();
|
||||
|
||||
oox_chart_context & current_chart();
|
||||
xlsx_pivot_cache_context & current_pivot_cache();
|
||||
|
||||
xlsx_pivots_context & get_pivots_context() {return xlsx_pivots_context_;}
|
||||
xlsx_drawing_context & get_drawing_context();
|
||||
xlsx_drawing_context_handle & get_drawing_context_handle();
|
||||
xlsx_comments_context & get_comments_context();
|
||||
@ -102,7 +99,6 @@ private:
|
||||
|
||||
std::vector<xlsx_xml_worksheet_ptr> sheets_;
|
||||
std::vector<oox_chart_context_ptr> charts_;
|
||||
std::vector<xlsx_pivot_cache_context_ptr> pivot_caches_;
|
||||
|
||||
//std::wstringstream defaultOutput_;
|
||||
//std::pair<float,float> maxDigitSize_;
|
||||
@ -111,6 +107,7 @@ private:
|
||||
|
||||
size_t next_vml_file_id_; //используется для footer/header & comments
|
||||
|
||||
xlsx_pivots_context xlsx_pivots_context_;
|
||||
xlsx_table_context xlsx_table_context_;
|
||||
xlsx_text_context xlsx_text_context_;
|
||||
|
||||
|
||||
@ -1,155 +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 "xlsx_pivot_cache_context.h"
|
||||
|
||||
#include "oox_rels.h"
|
||||
#include "mediaitems_utils.h"
|
||||
|
||||
#include <boost/make_shared.hpp>
|
||||
#include <simple_xml_writer.h>
|
||||
|
||||
namespace oox {
|
||||
|
||||
class xlsx_pivot_cache_context::Impl
|
||||
{
|
||||
// struct rel_
|
||||
// {
|
||||
// rel_(bool is_internal, std::wstring const & rid, std::wstring const & target, external_items::Type type) :
|
||||
// is_internal_(is_internal),
|
||||
// rid_(rid),
|
||||
//target_(target),
|
||||
// type_(type)
|
||||
// {}
|
||||
|
||||
// bool is_internal_;
|
||||
// std::wstring rid_;
|
||||
// std::wstring target_;
|
||||
// external_items::Type type_;
|
||||
// };
|
||||
|
||||
public:
|
||||
Impl() {}
|
||||
|
||||
std::wstringstream definitionsData_;
|
||||
std::wstringstream recordsData_;
|
||||
|
||||
//rels rels_;
|
||||
|
||||
};
|
||||
|
||||
xlsx_pivot_cache_context_ptr xlsx_pivot_cache_context::create()
|
||||
{
|
||||
return boost::make_shared<xlsx_pivot_cache_context>();
|
||||
}
|
||||
|
||||
int countPivotCaches = 0;
|
||||
|
||||
xlsx_pivot_cache_context::xlsx_pivot_cache_context() : impl_(new xlsx_pivot_cache_context::Impl()), isRecordsPresent(false)
|
||||
{
|
||||
index = ++countPivotCaches;
|
||||
}
|
||||
std::wostream & xlsx_pivot_cache_context::definitions()
|
||||
{
|
||||
return impl_->definitionsData_;
|
||||
}
|
||||
std::wostream & xlsx_pivot_cache_context::records()
|
||||
{
|
||||
return impl_->recordsData_;
|
||||
}
|
||||
//void xlsx_pivot_cache_context::add_rels(
|
||||
// bool isInternal,
|
||||
// std::wstring const & rid,
|
||||
// std::wstring const & target,
|
||||
// external_items::Type type)
|
||||
//{
|
||||
// impl_->add_rels(isInternal, rid, target, type);
|
||||
//}
|
||||
void xlsx_pivot_cache_context::dump_rels(rels & Rels)
|
||||
{
|
||||
if (isRecordsPresent)
|
||||
{
|
||||
Rels.add(relationship(L"rId1",
|
||||
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheRecords",
|
||||
L"pivotCacheRecords" + std::to_wstring(index) + L".xml", L""));
|
||||
}
|
||||
}
|
||||
void xlsx_pivot_cache_context::write_to(std::wostream & strm)
|
||||
{
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"pivotCacheDefinition")
|
||||
{
|
||||
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
|
||||
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
|
||||
|
||||
if (isRecordsPresent)
|
||||
{
|
||||
CP_XML_ATTR(L"r:id", L"rId1" );
|
||||
}
|
||||
CP_XML_ATTR(L"recordCount", 0);
|
||||
//refreshedBy="Debra S Dalgleish"
|
||||
//refreshedDate="39449.496381365738"
|
||||
//createdVersion="1"
|
||||
//refreshedVersion="2"
|
||||
//recordCount="11"
|
||||
//upgradeOnRefresh="1">
|
||||
|
||||
CP_XML_STREAM() << impl_->definitionsData_.str();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void xlsx_pivot_cache_context::write_records_to(std::wostream & strm)
|
||||
{
|
||||
CP_XML_WRITER(strm)
|
||||
{
|
||||
CP_XML_NODE(L"pivotCacheRecords")
|
||||
{
|
||||
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
|
||||
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
|
||||
|
||||
CP_XML_ATTR(L"count", 0);
|
||||
|
||||
CP_XML_STREAM() << impl_->recordsData_.str();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
xlsx_pivot_cache_context::~xlsx_pivot_cache_context()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,95 @@
|
||||
/*
|
||||
* (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 "xlsx_pivots_context.h"
|
||||
|
||||
|
||||
#include <boost/make_shared.hpp>
|
||||
#include <simple_xml_writer.h>
|
||||
|
||||
namespace oox {
|
||||
|
||||
|
||||
|
||||
class xlsx_pivots_context::Impl
|
||||
{
|
||||
public:
|
||||
struct _pivot_cache
|
||||
{
|
||||
std::wstring definitionsData_;
|
||||
std::wstring recordsData_;
|
||||
};
|
||||
|
||||
Impl() {}
|
||||
|
||||
std::vector<_pivot_cache> caches_;
|
||||
};
|
||||
|
||||
xlsx_pivots_context::xlsx_pivots_context() : impl_(new xlsx_pivots_context::Impl())
|
||||
{
|
||||
}
|
||||
|
||||
void xlsx_pivots_context::add_cache(std::wstring definitions, std::wstring records)
|
||||
{
|
||||
Impl::_pivot_cache c = {definitions, records};
|
||||
impl_->caches_.push_back(c);
|
||||
}
|
||||
|
||||
int xlsx_pivots_context::get_cache_count()
|
||||
{
|
||||
return (int)impl_->caches_.size();
|
||||
}
|
||||
void xlsx_pivots_context::dump_rels(int index, rels & Rels)
|
||||
{
|
||||
if (!impl_->caches_[index].recordsData_.empty())
|
||||
{
|
||||
Rels.add(relationship(L"rId1",
|
||||
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheRecords",
|
||||
L"pivotCacheRecords" + std::to_wstring(index) + L".xml", L""));
|
||||
}
|
||||
}
|
||||
void xlsx_pivots_context::write_definitions_to(int index, std::wostream & strm)
|
||||
{
|
||||
strm << impl_->caches_[index].definitionsData_;
|
||||
}
|
||||
|
||||
void xlsx_pivots_context::write_records_to(int index, std::wostream & strm)
|
||||
{
|
||||
strm << impl_->caches_[index].recordsData_;
|
||||
}
|
||||
|
||||
xlsx_pivots_context::~xlsx_pivots_context()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -37,28 +37,19 @@ namespace oox {
|
||||
class xlsx_pivot_cache_context;
|
||||
typedef _CP_PTR(xlsx_pivot_cache_context) xlsx_pivot_cache_context_ptr;
|
||||
|
||||
class xlsx_pivot_cache_context
|
||||
class xlsx_pivots_context
|
||||
{
|
||||
public:
|
||||
xlsx_pivot_cache_context();
|
||||
~xlsx_pivot_cache_context();
|
||||
xlsx_pivots_context();
|
||||
~xlsx_pivots_context();
|
||||
|
||||
std::wostream & definitions();
|
||||
std::wostream & records();
|
||||
void add_cache(std::wstring definitions, std::wstring records);
|
||||
int get_cache_count();
|
||||
|
||||
void write_to(std::wostream & strm);
|
||||
void write_records_to(std::wostream & strm);
|
||||
void write_definitions_to (int index, std::wostream & strm);
|
||||
void write_records_to (int index, std::wostream & strm);
|
||||
|
||||
void dump_rels(rels & Rels);
|
||||
|
||||
static xlsx_pivot_cache_context_ptr create();
|
||||
//void add_rels( bool isInternal,
|
||||
// std::wstring const & rid,
|
||||
// std::wstring const & target,
|
||||
// external_items::Type type);
|
||||
|
||||
bool isRecordsPresent;
|
||||
int index;
|
||||
void dump_rels(int index, rels & Rels);
|
||||
private:
|
||||
class Impl;
|
||||
_CP_PTR(Impl) impl_;
|
||||
@ -613,6 +613,7 @@ SOURCES += \
|
||||
../XlsFormat/Logic/Biff_structures/DConnStringSequence.cpp \
|
||||
../XlsFormat/Logic/Biff_structures/TxtWf.cpp \
|
||||
../XlsFormat/Logic/Biff_structures/Xnum.cpp \
|
||||
../XlsFormat/Logic/Biff_structures/PivotParsedFormula.cpp \
|
||||
../XlsFormat/Logic/Biff_structures/ODRAW/MSOCR.cpp \
|
||||
../XlsFormat/Logic/Biff_structures/ODRAW/MSOSHADECOLOR.cpp \
|
||||
../XlsFormat/Logic/Biff_structures/ODRAW/OfficeArtBlip.cpp \
|
||||
@ -839,7 +840,7 @@ SOURCES += \
|
||||
../XlsXlsxConverter/xlsx_tablecontext.cpp \
|
||||
../XlsXlsxConverter/xlsx_textcontext.cpp \
|
||||
../XlsXlsxConverter/xlsx_chart_context.cpp \
|
||||
../XlsXlsxConverter/xlsx_pivot_cache_context.cpp \
|
||||
../XlsXlsxConverter/xlsx_pivots_context.cpp \
|
||||
../XlsXlsxConverter/xlsx_comments.cpp \
|
||||
../XlsXlsxConverter/xlsx_comments_context.cpp \
|
||||
|
||||
@ -1597,7 +1598,7 @@ HEADERS += \
|
||||
../XlsXlsxConverter/xlsx_conversion_context.h \
|
||||
../XlsXlsxConverter/xlsx_drawing_context.h \
|
||||
../XlsXlsxConverter/xlsx_drawings.h \
|
||||
../XlsXlsxConverter/xlsx_pivot_cache_context.cpp \
|
||||
../XlsXlsxConverter/xlsx_pivots_context.cpp \
|
||||
../XlsXlsxConverter/xlsx_hyperlinks.h \
|
||||
../XlsXlsxConverter/xlsx_output_xml.h \
|
||||
../XlsXlsxConverter/xlsx_package.h \
|
||||
|
||||
@ -618,6 +618,7 @@
|
||||
#include "../XlsFormat/Logic/Biff_structures/SharedProperty.cpp"
|
||||
#include "../XlsFormat/Logic/Biff_structures/AFDOperBoolErr.cpp"
|
||||
#include "../XlsFormat/Logic/Biff_structures/AFDOperXNum.cpp"
|
||||
#include "../XlsFormat/Logic/Biff_structures/PivotParsedFormula.cpp"
|
||||
|
||||
#include "../XlsFormat/Logic/Biff_unions/AI.cpp"
|
||||
#include "../XlsFormat/Logic/Biff_unions/ATTACHEDLABEL_bu.cpp"
|
||||
|
||||
@ -4237,6 +4237,14 @@
|
||||
RelativePath="..\XlsFormat\Logic\Biff_structures\PictFmlaKey.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\XlsFormat\Logic\Biff_structures\PivotParsedFormula.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\XlsFormat\Logic\Biff_structures\PivotParsedFormula.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\XlsFormat\Logic\Biff_structures\PropertyBag.cpp"
|
||||
>
|
||||
|
||||
@ -417,11 +417,11 @@
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\XlsXlsxConverter\xlsx_pivot_cache_context.cpp"
|
||||
RelativePath="..\XlsXlsxConverter\xlsx_pivots_context.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\XlsXlsxConverter\xlsx_pivot_cache_context.h"
|
||||
RelativePath="..\XlsXlsxConverter\xlsx_pivots_context.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
|
||||
38
DesktopEditor/doctrenderer/common.h
Normal file
38
DesktopEditor/doctrenderer/common.h
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2016
|
||||
*
|
||||
* 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 _BUILDER_COMMON_H
|
||||
#define _BUILDER_COMMON_H
|
||||
|
||||
#include "./../common/base_export.h"
|
||||
|
||||
#endif // _BUILDER_COMMON_H
|
||||
@ -32,7 +32,7 @@
|
||||
#ifndef DOCBUILDER_H
|
||||
#define DOCBUILDER_H
|
||||
|
||||
#include "../common/base_export.h"
|
||||
#include "./common.h"
|
||||
|
||||
namespace NSDoctRenderer
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user