Compare commits

...

33 Commits

Author SHA1 Message Date
8a75916944 XlsFormat - pivots dB connections 2017-07-12 16:40:36 +03:00
da45eb4f33 XlsFormat - pivots... 2017-07-12 11:25:12 +03:00
59d75ed148 XlsFormat - fix pivots 2017-07-06 19:09:06 +03:00
ccc4d751d0 Merge remote-tracking branch 'origin/hotfix/v4.4.2' into develop 2017-07-06 15:40:57 +03:00
a020d3dbf9 PptxFormat - fix audio wav files, fix old standart ole
XlsFormat - fix custom shape with connectors
2017-07-06 15:40:10 +03:00
7852b7fbe8 . 2017-07-06 15:35:14 +03:00
a64fd8792d Fixed build error 2017-07-06 12:19:50 +03:00
32448298a3 Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop
* 'develop' of https://github.com/ONLYOFFICE/core:
  .
  OdfFormatReader - fix spreadsheets margins PptFormatReader - fix previous users picture, fix read picture stream version up
  XlsFormat - convert pivot tables
  debug
  .
  .
2017-07-05 15:35:54 +03:00
b3384f1466 chart-settings seralize 2017-07-05 15:35:46 +03:00
93274395a9 . 2017-07-05 13:55:37 +03:00
2726e14445 Merge remote-tracking branch 'origin/hotfix/v4.4.2' into develop 2017-07-05 13:46:05 +03:00
75e32a1562 OdfFormatReader - fix spreadsheets margins
PptFormatReader - fix previous users picture, fix read picture stream
version up
2017-07-05 13:44:50 +03:00
8c2637b89c Merge tag 'v4.4.1' into develop
v4.4.1
2017-07-05 11:48:04 +03:00
ef389872df Merge branch 'release/v4.4.1' 2017-07-05 11:47:48 +03:00
6fc611fdfc XlsFormat - convert pivot tables 2017-07-04 18:50:39 +03:00
0cabb63336 debug 2017-07-04 13:54:52 +03:00
f501bf7930 remove curl for ios 2017-07-04 11:52:23 +03:00
7b617dc9e9 fix curl path 2017-07-04 10:40:26 +03:00
245f989ae3 XlsFormat... 2017-07-03 19:27:46 +03:00
429729b979 remade build.bat 2017-07-03 18:17:49 +03:00
d709652992 debug 2017-07-03 17:01:02 +03:00
776d799fd2 Debug 2017-07-03 16:50:49 +03:00
a975cb8261 Merge pull request #32 from ONLYOFFICE/feature/lenas-fixes
Feature/lenas fixies
2017-07-03 16:36:04 +03:00
c932b5af26 Merge branch 'develop' of https://github.com/ONLYOFFICE/core into develop
* 'develop' of https://github.com/ONLYOFFICE/core:
  XlsFormat - convert pivot tables view
  Added scripts for fetching and building curl
  Removed curl sources
  refactoring
  refactoring
  XlsFormat ...
  XlsFormat ...
  .
  .
  .
  .
  min command length
  XlsFormat - convert piot cache
  x2t - return error code by PptConvert
  memset before readlink.
2017-07-03 16:06:14 +03:00
423e8dda86 chart-settings seralize 2017-07-03 16:06:02 +03:00
afcf6b079e . 2017-07-03 15:56:21 +03:00
3ed2224f93 . 2017-07-03 15:56:08 +03:00
5307855120 XlsFormat - convert pivot tables view 2017-07-03 15:10:00 +03:00
3c9a91af45 Added scripts for fetching and building curl 2017-07-03 14:46:56 +03:00
9f06f94c93 Removed curl sources 2017-07-03 12:45:30 +03:00
4954ef2934 refactoring 2017-07-03 10:27:49 +03:00
721e8800f1 refactoring 2017-07-03 10:27:23 +03:00
ef8e5cab6d XlsFormat ... 2017-07-02 17:49:41 +03:00
2876 changed files with 2151 additions and 530938 deletions

View File

@ -49,8 +49,8 @@
6967917D1D9E8AEE002CA4BA /* BinReaderWriterDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 696791791D9E8AEE002CA4BA /* BinReaderWriterDefines.h */; };
6967917E1D9E8AEE002CA4BA /* BinWriters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6967917A1D9E8AEE002CA4BA /* BinWriters.cpp */; };
6967917F1D9E8AEE002CA4BA /* BinWriters.h in Headers */ = {isa = PBXBuildFile; fileRef = 6967917B1D9E8AEE002CA4BA /* BinWriters.h */; };
69BBDF251F0B8AAC00EB1BF7 /* FileDownloader_mac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 69BBDF241F0B8AAC00EB1BF7 /* FileDownloader_mac.mm */; };
69F181AF1C77274E00B2952B /* FileDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 69F181AD1C77274E00B2952B /* FileDownloader.h */; };
69F181B51C77276D00B2952B /* FileDownloader_curl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 69F181B31C77276D00B2952B /* FileDownloader_curl.cpp */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
@ -97,8 +97,8 @@
696791791D9E8AEE002CA4BA /* BinReaderWriterDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BinReaderWriterDefines.h; path = ../../BinWriter/BinReaderWriterDefines.h; sourceTree = "<group>"; };
6967917A1D9E8AEE002CA4BA /* BinWriters.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BinWriters.cpp; path = ../../BinWriter/BinWriters.cpp; sourceTree = "<group>"; };
6967917B1D9E8AEE002CA4BA /* BinWriters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BinWriters.h; path = ../../BinWriter/BinWriters.h; sourceTree = "<group>"; };
69BBDF241F0B8AAC00EB1BF7 /* FileDownloader_mac.mm */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp.preprocessed; fileEncoding = 4; name = FileDownloader_mac.mm; path = ../../../Common/FileDownloader/FileDownloader_mac.mm; sourceTree = "<group>"; };
69F181AD1C77274E00B2952B /* FileDownloader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileDownloader.h; path = ../../../Common/FileDownloader/FileDownloader.h; sourceTree = "<group>"; };
69F181B31C77276D00B2952B /* FileDownloader_curl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileDownloader_curl.cpp; path = ../../../Common/FileDownloader/FileDownloader_curl.cpp; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -230,7 +230,7 @@
isa = PBXGroup;
children = (
69F181AD1C77274E00B2952B /* FileDownloader.h */,
69F181B31C77276D00B2952B /* FileDownloader_curl.cpp */,
69BBDF241F0B8AAC00EB1BF7 /* FileDownloader_mac.mm */,
);
name = Common;
sourceTree = "<group>";
@ -339,7 +339,6 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
69F181B51C77276D00B2952B /* FileDownloader_curl.cpp in Sources */,
17C1FE961ACC42C4006B99B3 /* Common.cpp in Sources */,
17C1FE971ACC42C4006B99B3 /* ChartFromToBinary.cpp in Sources */,
17C1FE981ACC42C4006B99B3 /* CSVReader.cpp in Sources */,
@ -348,6 +347,7 @@
17C1FE9B1ACC42C4006B99B3 /* CSVWriter.cpp in Sources */,
69414A301CB51666003E771B /* ChartWriter.cpp in Sources */,
6967917E1D9E8AEE002CA4BA /* BinWriters.cpp in Sources */,
69BBDF251F0B8AAC00EB1BF7 /* FileDownloader_mac.mm in Sources */,
17C1FE9C1ACC42C4006B99B3 /* XlsxSerializer.cpp in Sources */,
690FE0851E9BBD68004B26D0 /* Readers.cpp in Sources */,
17C1FE9D1ACC42C4006B99B3 /* FontProcessor.cpp in Sources */,
@ -379,6 +379,7 @@
unix,
_IOS,
DONT_WRITE_EMBEDDED_FONTS,
_XCODE,
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
HEADER_SEARCH_PATHS = (
@ -416,6 +417,7 @@
unix,
_IOS,
DONT_WRITE_EMBEDDED_FONTS,
_XCODE,
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
HEADER_SEARCH_PATHS = (

View File

@ -189,14 +189,14 @@ void xlsx_xml_worksheet::write_to(std::wostream & strm)
CP_XML_STREAM() << impl_->hyperlinks_.str();
}
}
CP_XML_STREAM() << impl_->drawing_.str();
if (!impl_->page_props_.str().empty())
{
CP_XML_STREAM() << impl_->page_props_.str();
}//props выше legacyDrawing !!
CP_XML_STREAM() << impl_->drawing_.str();
if (impl_->commentsId_.length()>0)
{
CP_XML_NODE(L"legacyDrawing")

View File

@ -601,12 +601,14 @@ void CPPTUserInfo::LoadNotes(DWORD dwNoteID, CSlide* pNotes)
CSlideInfo* pNotesWrapper = &m_arNotesWrapper.back();
int indexUser = pRecordSlide->m_IndexUser;
int indexUser = pRecordSlide->m_IndexUser;
if (m_pDocumentInfo->m_arUsers[indexUser]->m_arOffsetPictures.empty())
pNotesWrapper->m_parEmptyPictures = &m_pDocumentInfo->m_arUsers[0]->m_arOffsetPictures;
else
pNotesWrapper->m_parEmptyPictures = &m_pDocumentInfo->m_arUsers[indexUser]->m_arOffsetPictures;
pNotesWrapper->m_parEmptyPictures = &m_pDocumentInfo->m_arUsers[indexUser]->m_arOffsetPictures;
pNotesWrapper->m_mapFilePictures = &m_pDocumentInfo->m_mapStoreImageFile;
//грузим placeholder
pNotesWrapper->m_arTextPlaceHolders = pRecordSlide->m_oPersist.m_arTextAttrs;
std::vector<CRecordNotesAtom*> oArrayNotesAtoms;
@ -627,6 +629,9 @@ void CPPTUserInfo::LoadNotes(DWORD dwNoteID, CSlide* pNotes)
//????? у заметок нет слайда !!!
}
//-----------------------------------------------------
size_t index = pPairSlide->second->m_Index;
if (index >= m_arSlides.size())
return;
CSlide* pSlide = m_arSlides[pPairSlide->second->m_Index];
pNotes->m_lSlideID = pPairSlide->second->m_Index;
@ -796,12 +801,14 @@ void CPPTUserInfo::LoadSlide(DWORD dwSlideID, CSlide* pSlide)
CSlideInfo* pSlideWrapper = &m_arSlideWrapper.back();
int indexUser = pRecordSlide->m_IndexUser;
int indexUser = pRecordSlide->m_IndexUser;
pSlideWrapper->m_parEmptyPictures = &m_pDocumentInfo->m_arUsers[indexUser]->m_arOffsetPictures;
if (m_pDocumentInfo->m_arUsers[indexUser]->m_arOffsetPictures.empty())
pSlideWrapper->m_parEmptyPictures = &m_pDocumentInfo->m_arUsers[0]->m_arOffsetPictures;
else
pSlideWrapper->m_parEmptyPictures = &m_pDocumentInfo->m_arUsers[indexUser]->m_arOffsetPictures;
pSlideWrapper->m_mapFilePictures = &m_pDocumentInfo->m_mapStoreImageFile;
// вот, грузим placeholder
pSlideWrapper->m_arTextPlaceHolders = pRecordSlide->m_oPersist.m_arTextAttrs;
// записываем шрифты
@ -1402,7 +1409,11 @@ void CPPTUserInfo::LoadMainMaster(DWORD dwMasterID, const LONG& lOriginWidth, co
indexUser = pPairMaster1->second->m_IndexUser;
pMasterWrapper->m_arTextPlaceHolders = pPairMaster1->second->m_oPersist.m_arTextAttrs;
}
pMasterWrapper->m_parEmptyPictures = &m_pDocumentInfo->m_arUsers[indexUser]->m_arOffsetPictures;
if (m_pDocumentInfo->m_arUsers[indexUser]->m_arOffsetPictures.empty() == false)
pMasterWrapper->m_parEmptyPictures = &m_pDocumentInfo->m_arUsers[indexUser]->m_arOffsetPictures;
else
pMasterWrapper->m_parEmptyPictures = &m_pDocumentInfo->m_arUsers[0]->m_arOffsetPictures;
pMasterWrapper->m_mapFilePictures = &m_pDocumentInfo->m_mapStoreImageFile;
// читаем настройки текстовых стилей -----------------------------------------------
@ -1784,11 +1795,13 @@ void CPPTUserInfo::LoadNoMainMaster(DWORD dwMasterID, const LONG& lOriginWidth,
CSlideInfo* pMasterWrapper = &m_arMasterWrapper[m_arMasterWrapper.size() - 1];
// вот, грузим placeholder
pMasterWrapper->m_arTextPlaceHolders = pCurMaster->m_oPersist.m_arTextAttrs;
pMasterWrapper->m_parEmptyPictures = &m_pDocumentInfo->m_arUsers[pCurMaster->m_IndexUser]->m_arOffsetPictures;
pMasterWrapper->m_arTextPlaceHolders = pCurMaster->m_oPersist.m_arTextAttrs;
pMasterWrapper->m_mapFilePictures = &m_pDocumentInfo->m_mapStoreImageFile;
if (m_pDocumentInfo->m_arUsers[pCurMaster->m_IndexUser]->m_arOffsetPictures.empty() == false)
pMasterWrapper->m_parEmptyPictures = &m_pDocumentInfo->m_arUsers[pCurMaster->m_IndexUser]->m_arOffsetPictures;
else
pMasterWrapper->m_parEmptyPictures = &m_pDocumentInfo->m_arUsers[0]->m_arOffsetPictures;
std::map<DWORD, LONG>::iterator pPairTheme = m_mapMasterToTheme.find(dwID);

View File

@ -232,10 +232,12 @@ void CPPTFileReader::ReadPictures()
while (true)
{
if (pStream->isEOF())
break;
//if (pStream->isEOF()) случаются неверно записанные стримы
// break;
int pos = pStream->getStreamPointer();
if (pos >= pStream->getStreamSize())
break;
SRecordHeader oHeader;
if (pDecryptor)
@ -256,6 +258,9 @@ void CPPTFileReader::ReadPictures()
else
oHeader.ReadFromStream(pStream->stream_);
if (oHeader.RecType == 0 && oHeader.RecLen == 0 )
break;// окончание стрима забито нулями (выравнивание)
CRecordOfficeArtBlip art_blip;
art_blip.m_strTmpDirectory = m_strTmpDirectory;
art_blip.m_oDocumentInfo = &m_oDocumentInfo;

View File

@ -250,12 +250,26 @@ namespace PPTX
}
else if (L"oleObj" == strName)
{
olePic = oNode.ReadNode(L"p:pic");
olePic = oNode.ReadNode(L"p:pic"); //нормальный вариант объекта
if (olePic.IsInit())
{
olePic->fromXMLOle(oNode);
result = true;
}
else
{
olePic.Init(); //старый вариант описания объекта через spid в VmlDrawing
olePic->spPr.xfrm;
Logic::PrstGeom* geom = new Logic::PrstGeom();
geom->prst = L"rect";
olePic->spPr.Geometry.m_geometry.reset(geom);
olePic->fromXMLOle(oNode);
result = true;
}
if (olePic->spPr.xfrm.IsInit() == false)
olePic->spPr.xfrm = xfrm;
}
else if (L"AlternateContent" == strName)
{

View File

@ -619,6 +619,45 @@ namespace PPTX
if(oleObject.IsInit())
{
pWriter->StartRecord(SPTREE_TYPE_OLE);
if (oleObject->m_sShapeId.IsInit() && (!blipFill.blip->embed.IsInit() && blipFill.blip->oleFilepathImage.empty()) &&
parentFileIs<PPTX::Slide>() && parentFileAs<PPTX::Slide>().Vml.IsInit())
{
OOX::CVmlDrawing *pVml = parentFileAs<PPTX::Slide>().Vml.operator->();
std::map<std::wstring, OOX::CVmlDrawing::_vml_shape>::iterator pPair = pVml->m_mapShapes.find(*oleObject->m_sShapeId);
if (pVml->m_mapShapes.end() != pPair)
{
pPair->second.bUsed = true;
OOX::Vml::CShape* pShape = dynamic_cast<OOX::Vml::CShape*>(pPair->second.pElement);
for(size_t j = 0; (pShape) && (j < pShape->m_arrItems.size()); ++j)
{
OOX::WritingElement* pChildElemShape = pShape->m_arrItems[j];
if(OOX::et_v_imagedata == pChildElemShape->getType())
{
OOX::Vml::CImageData* pImageData = static_cast<OOX::Vml::CImageData*>(pChildElemShape);
std::wstring sIdImageFileCache;
if (pImageData->m_oRelId.IsInit()) sIdImageFileCache = pImageData->m_oRelId->GetValue();
else if (pImageData->m_rId.IsInit()) sIdImageFileCache = pImageData->m_rId->GetValue();
if (!sIdImageFileCache.empty())
{
//ищем физический файл ( rId относительно vml_drawing)
smart_ptr<OOX::File> pFile = pVml->Find(sIdImageFileCache);
if (pFile.IsInit() && ( OOX::FileTypes::Image == pFile->type()))
{
OOX::Image* pImageFileCache = static_cast<OOX::Image*>(pFile.operator->());
blipFill.blip->oleFilepathImage = pImageFileCache->filename().GetPath();
}
}
}
}
}
}
}
else if (nvPicPr.nvPr.media.is_init())
{
@ -630,10 +669,17 @@ namespace PPTX
blipFill.blip->mediaFilepath = mediaFile->filename().GetPath();
}
if (nvPicPr.nvPr.media.as<MediaFile>().name == L"audioFile")
if (nvPicPr.nvPr.media.is<MediaFile>())
{
if (nvPicPr.nvPr.media.as<MediaFile>().name == L"audioFile")
pWriter->StartRecord(SPTREE_TYPE_AUDIO);
else if (nvPicPr.nvPr.media.as<MediaFile>().name == L"videoFile")
pWriter->StartRecord(SPTREE_TYPE_VIDEO);
}
else if (nvPicPr.nvPr.media.is<WavAudioFile>() || nvPicPr.nvPr.media.is<AudioCD>())
{
pWriter->StartRecord(SPTREE_TYPE_AUDIO);
else if (nvPicPr.nvPr.media.as<MediaFile>().name == L"videoFile")
pWriter->StartRecord(SPTREE_TYPE_VIDEO);
}
else
pWriter->StartRecord(SPTREE_TYPE_PIC);
}
@ -1338,6 +1384,7 @@ namespace PPTX
blipFill.blip.Init();
blipFill.blip->oleRid = oleObject->m_oId->get();
}
node.ReadAttributeBase(L"spid", oleObject->m_sShapeId);
}
} // namespace Logic
} // namespace PPTX

View File

@ -259,7 +259,7 @@ namespace PPTX
void toXmlWriterVML(NSBinPptxRW::CXmlWriter* pWriter, smart_ptr<PPTX::Theme>& oTheme, smart_ptr<PPTX::Logic::ClrMap>& oClrMap, bool in_group = false);
//----------------------------------------------------------------------
NvPicPr nvPicPr;
BlipFill blipFill;
mutable BlipFill blipFill;
SpPr spPr;
nullable<ShapeStyle> style;
//internal

View File

@ -35,11 +35,11 @@
namespace XLS
{
DbOrParamQry::DbOrParamQry()
DbOrParamQry::DbOrParamQry(int typeRecord_)
{
typeRecord = typeRecord_;
}
DbOrParamQry::~DbOrParamQry()
{
}
@ -52,10 +52,32 @@ BaseObjectPtr DbOrParamQry::clone()
void DbOrParamQry::readFields(CFRecord& record)
{
#pragma message("####################### DbOrParamQry record is not implemented")
Log::error("DbOrParamQry record is not implemented.");
size_t size = record.getDataSize() - record.getRdPtr();
record.skipNunBytes(record.getDataSize() - record.getRdPtr());
if (typeRecord == 1)
{
unsigned short flags;
record >> param.wTypeSql >> flags >> param.grbit >> param.fVal;
param.pbt = GETBITS(flags, 0, 1);
param.fNonDefaultName = GETBIT(flags, 2);
}
else
{
unsigned short flags;
record >> flags >> query.cparams >> query.cstQuery >> query.cstWebPost >> query.cstSQLSav >> query.cstOdbcConn;
query.dbt = GETBITS(flags, 0, 2);
query.fOdbcConn = GETBIT(flags, 3);
query.fSql = GETBIT(flags, 4);
query.fSqlSav = GETBIT(flags, 5);
query.fWeb = GETBIT(flags, 6);
query.fSavePwd = GETBIT(flags, 7);
query.fTablesOnlyHTML = GETBIT(flags, 8);
}
}
} // namespace XLS

View File

@ -36,24 +36,48 @@
namespace XLS
{
// Logical representation of DbOrParamQry record in BIFF8
class DbOrParamQry: public BiffRecord
{
BIFF_RECORD_DEFINE_TYPE_INFO(DbOrParamQry)
BASE_OBJECT_DEFINE_CLASS_NAME(DbOrParamQry)
public:
DbOrParamQry();
DbOrParamQry(int typeRecord = 2);
~DbOrParamQry();
BaseObjectPtr clone();
void readFields(CFRecord& record);
static const ElementType type = typeDbOrParamQry;
static const ElementType type = typeDbOrParamQry;
int typeRecord;
//PARAMQRY_Fixed - 8 bytes + variable
struct
{
unsigned short wTypeSql;
unsigned char pbt;
bool fNonDefaultName;
unsigned short grbit;
unsigned short fVal;
}param;
//---------------------------------------
struct
{
unsigned char dbt;
bool fOdbcConn;
bool fSql;
bool fSqlSav;
bool fWeb;
bool fSavePwd;
bool fTablesOnlyHTML;
short cparams;
short cstQuery;
short cstWebPost;
short cstSQLSav;
short cstOdbcConn;
}query;
};
} // namespace XLS

View File

@ -52,24 +52,13 @@ BaseObjectPtr SXDBB::clone()
void SXDBB::readFields(CFRecord& record)
{
unsigned int sz = record.getDataSize() - record.getRdPtr();
size = record.getDataSize() - record.getRdPtr();
//std::list<CFRecordPtr>& recs = continue_records[rt_Continue];
blob = boost::shared_array<unsigned char>(new unsigned char[size]);
//while (record.getRdPtr() + lcb > record.getDataSize() && !recs.empty())
//{
// record.appendRawData(recs.front());
// recs.pop_front();
//}
memcpy(blob.get(), record.getCurData<unsigned char>(), size);
if (record.checkFitReadSafe(sz))
{
blob = boost::shared_array<char>(new char[sz]);
memcpy(blob.get(), record.getCurData<char>(), sz);
record.skipNunBytes(sz);
}
record.skipNunBytes(size);
}
} // namespace XLS

View File

@ -50,7 +50,8 @@ public:
static const ElementType type = typeSXDBB;
boost::shared_array<char> blob;
boost::shared_array<unsigned char> blob;
unsigned int size;
};
} // namespace XLS

View File

@ -39,12 +39,10 @@ SXDI::SXDI()
{
}
SXDI::~SXDI()
{
}
BaseObjectPtr SXDI::clone()
{
return BaseObjectPtr(new SXDI(*this));
@ -61,5 +59,22 @@ void SXDI::readFields(CFRecord& record)
}
}
int SXDI::serialize(std::wostream & strm)
{
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"dataField")
{
if (stName.value().empty() == false)
CP_XML_ATTR(L"name", stName.value());
CP_XML_ATTR(L"fld", isxvdData);
CP_XML_ATTR(L"baseField", df);
CP_XML_ATTR(L"baseItem", isxvi);
CP_XML_ATTR(L"numFmtId", ifmt);
}
}
return 0;
}
} // namespace XLS

View File

@ -49,6 +49,8 @@ public:
void readFields(CFRecord& record);
int serialize(std::wostream & strm);
static const ElementType type = typeSXDI;
short isxvdData;

View File

@ -53,6 +53,29 @@ void SXDtr::readFields(CFRecord& record)
{
record >> yr >> mon >> dom >> hr >> min >> sec;
}
std::wstring SXDtr::get_string_date()
{
std::wstringstream s;
s << yr << L"-" << (mon < 10 ? L"0" : L"") << mon << L"-" << (dom < 10 ? L"0" : L"") << dom << L"T"
<< (hr < 10 ? L"0" : L"") << hr << L":" << (min < 10 ? L"0" : L"") << min << L":" << (sec < 10 ? L"0" : L"") << sec;
return s.str();
}
int SXDtr::serialize(std::wostream & strm)
{
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"d")
{
CP_XML_ATTR(L"v", get_string_date());
}
}
return 0;
}
} // namespace XLS

View File

@ -32,7 +32,6 @@
#pragma once
#include "BiffRecord.h"
//#include "../Biff_structures/CellRangeRef.h"
namespace XLS
{
@ -49,6 +48,8 @@ public:
void readFields(CFRecord& record);
int serialize(std::wostream & strm);
static const ElementType type = typeSXDtr;
unsigned short yr;
@ -58,6 +59,8 @@ public:
unsigned char min;
unsigned char sec;
std::wstring get_string_date();
};
} // namespace XLS

View File

@ -69,6 +69,11 @@ void SXFDB::readFields(CFRecord& record)
fServerBased = GETBIT(flags, 13);
fCantGetUniqueItems = GETBIT(flags, 14);
fCalculatedField = GETBIT(flags, 15);
GlobalWorkbookInfoPtr global_info = record.getGlobalWorkbookInfo();
global_info->arPivotCacheFieldShortSize.push_back(fShortIitms);
global_info->arPivotCacheFields.push_back(fAllAtoms);
}
} // namespace XLS

View File

@ -51,6 +51,9 @@ BaseObjectPtr SXFormula::clone()
void SXFormula::readFields(CFRecord& record)
{
unsigned short reserved;
record >> reserved >> ifdb;
}
} // namespace XLS

View File

@ -50,7 +50,7 @@ public:
static const ElementType type = typeSXFormula;
short ifdb;
};
} // namespace XLS

View File

@ -35,8 +35,9 @@
namespace XLS
{
SXLI::SXLI()
SXLI::SXLI(int count_)
{
count = count_;
}
@ -50,17 +51,15 @@ BaseObjectPtr SXLI::clone()
}
void SXLI::readFields(CFRecord& record)
{// 0 or 2 records SXLIItem
int size_item = (record.getDataSize() - record.getRdPtr()) / 2;
if (size_item < 8)
{
while(true)
{
//??
return;
}
int size_item = record.getDataSize() - record.getRdPtr();
for (int k = 0; k < 2; k++)
{
if (size_item < 8)
{
break;
}
SXLIItem item;
unsigned short flags;
@ -74,13 +73,24 @@ void SXLI::readFields(CFRecord& record)
item.fGrand = GETBIT(flags, 11);
item.fMultiDataOnAxis = GETBIT(flags, 12);
int count = (size_item - 8) / 2;
if (item.fGrand)
item.isxviMac = 1;
for (int i = 0; i < count; i++)
if (item.cSic > item.isxviMac)
item.cSic = item.isxviMac;
if (item.fSbt && item.itmType < 0x000D)
item.isxviMac++;
for (short i = 0; i < count/*item.isxviMac*/; i++)
{
short val; record >> val;
item.rgisxvi.push_back(val);
if (val >= 0x0000 && val <= 0x7EF4)
{
item.rgisxvi.push_back(val);
}
}
m_arItems.push_back(item);
}
}

View File

@ -55,7 +55,7 @@ class SXLI: public BiffRecordContinued
BIFF_RECORD_DEFINE_TYPE_INFO(SXLI)
BASE_OBJECT_DEFINE_CLASS_NAME(SXLI)
public:
SXLI();
SXLI(int count_);
~SXLI();
BaseObjectPtr clone();
@ -65,6 +65,7 @@ public:
static const ElementType type = typeSXLI;
std::vector<SXLIItem> m_arItems;
int count;
};
} // namespace XLS

View File

@ -39,7 +39,6 @@ SXNum::SXNum()
{
}
SXNum::~SXNum()
{
}
@ -54,5 +53,17 @@ 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

View File

@ -49,6 +49,8 @@ public:
void readFields(CFRecord& record);
int serialize(std::wostream & strm);
static const ElementType type = typeSXNum;
Xnum num;

View File

@ -31,7 +31,7 @@
*/
#include "SXString.h"
#include "../../../../../Common/DocxFormat/Source/XML/Utils.h"
namespace XLS
{
@ -39,12 +39,10 @@ SXString::SXString()
{
}
SXString::~SXString()
{
}
BaseObjectPtr SXString::clone()
{
return BaseObjectPtr(new SXString(*this));
@ -61,6 +59,27 @@ 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;
}
std::wstring SXString::value()
{
std::wstring s = segment.value();
XmlUtils::replace_all(s, L"\x0d", L"_x000d_");
XmlUtils::replace_all(s, L"\x0a", L"_x000a_");
return s;
}
} // namespace XLS

View File

@ -49,6 +49,10 @@ public:
void readFields(CFRecord& record);
std::wstring value();
int serialize(std::wostream & strm);
static const ElementType type = typeSXString;
unsigned short cch;

View File

@ -57,8 +57,8 @@ void SXVI::readFields(CFRecord& record)
fHidden = GETBIT(flags, 0);
fHideDetail = GETBIT(flags, 1);
fFormula = GETBIT(flags, 4);
fMissing = GETBIT(flags, 5);
fFormula = GETBIT(flags, 3);
fMissing = GETBIT(flags, 4);
if (cchName > 0 && cchName < 0xFFFF)
{
@ -67,6 +67,39 @@ void SXVI::readFields(CFRecord& record)
}
}
int SXVI::serialize(std::wostream & strm)
{
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"item")
{
if (fMissing) CP_XML_ATTR(L"m", 1);
if (fHidden) CP_XML_ATTR(L"h", 1);
if (fHideDetail)CP_XML_ATTR(L"sd", 1);
if (fFormula) CP_XML_ATTR(L"f", 1);
if (itmType == 0)
{
CP_XML_ATTR(L"x", iCache);
}
switch(itmType)
{
case 0x0001: CP_XML_ATTR(L"t", L"default"); break;
case 0x0002: CP_XML_ATTR(L"t", L"sum"); break;
case 0x0003: CP_XML_ATTR(L"t", L"countA"); break;
case 0x0004: CP_XML_ATTR(L"t", L"avg"); break;
case 0x0005: CP_XML_ATTR(L"t", L"max"); break;
case 0x0006: CP_XML_ATTR(L"t", L"min"); break;
case 0x0007: CP_XML_ATTR(L"t", L"product"); break;
case 0x0008: CP_XML_ATTR(L"t", L"count"); break;
case 0x0009: CP_XML_ATTR(L"t", L"stdDev"); break;
case 0x000a: CP_XML_ATTR(L"t", L"stdDevP"); break;
case 0x000b: CP_XML_ATTR(L"t", L"var"); break;
case 0x000c: CP_XML_ATTR(L"t", L"varP"); break;
}
}
}
return 0;
}
} // namespace XLS

View File

@ -48,6 +48,8 @@ public:
void readFields(CFRecord& record);
int serialize(std::wostream & strm);
static const ElementType type = typeSXVI;
unsigned short itmType; //enum

View File

@ -56,6 +56,18 @@ void SxBool::readFields(CFRecord& record)
val = (flags != 0);
}
int SxBool::serialize(std::wostream & strm)
{
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"b")
{
CP_XML_ATTR(L"v", val);
}
}
return 0;
}
} // namespace XLS

View File

@ -48,6 +48,8 @@ public:
void readFields(CFRecord& record);
int serialize(std::wostream & strm);
static const ElementType type = typeSxBool;
bool val;

View File

@ -54,7 +54,6 @@ public:
DXFN dxfn;
XFExtNoFRT xfext;
};
} // namespace XLS

View File

@ -53,7 +53,7 @@ BaseObjectPtr SxFilt::clone()
void SxFilt::readFields(CFRecord& record)
{
unsigned short flags1;
unsigned char flags2;
unsigned short flags2;
record >> flags1 >> isxvd >> flags2 >> grbitSbt >> cisxvi;
@ -63,7 +63,8 @@ void SxFilt::readFields(CFRecord& record)
sxaxisData = GETBIT(flags1, 3);
iDim = GETBITS(flags1, 4, 15);
fSelected = GETBIT(flags2, 0);
isxvd = GETBITS(flags2, 0, 9);
fSelected = GETBIT(flags2, 10);
}
} // namespace XLS

View File

@ -58,7 +58,7 @@ public:
unsigned short isxvd;
bool fSelected;
unsigned short grbitSbt;
short grbitSbt;
unsigned short cisxvi;
};

View File

@ -51,7 +51,6 @@ public:
static const ElementType type = typeSxIvd;
std::vector<short> rgSxivd;
};
} // namespace XLS

View File

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

View File

@ -48,6 +48,8 @@ public:
void readFields(CFRecord& record);
int serialize(std::wostream & strm);
static const ElementType type = typeSxNil;
};

View File

@ -45,7 +45,6 @@ Sxvd::~Sxvd()
{
}
BaseObjectPtr Sxvd::clone()
{
return BaseObjectPtr(new Sxvd(*this));

View File

@ -750,7 +750,7 @@ class pConnectionSitesDir : public OfficeArtFOPTE
virtual void ReadComplexData(XLS::CFRecord& record);
IMsoArray<ODRAW::FixedPoint> complex;
IMsoArray<OSHARED::FixedPoint> complex;
};
class pInscribe : public OfficeArtFOPTE

View File

@ -45,13 +45,51 @@ BiffStructurePtr PtgSxName::clone()
void PtgSxName::loadFields(CFRecord& record)
{
record >> sxIndex;
global_info = record.getGlobalWorkbookInfo();
}
void PtgSxName::assemble(AssemblerStack& ptg_stack, PtgQueue& extra_data, bool full_ref)
{
Log::info("PtgSxName structure is not assemble.");
//RevNamePtr tab_id;
//if(!extra_data.empty() && (tab_id = boost::dynamic_pointer_cast<RevName>(extra_data.front())))
//{
// Log::error("PtgNameX struct for revisions is not assemble.");
// ptg_stack.push(L"#REF!");
// extra_data.pop();
// return;
//}
std::wstring _Name;
if(sxIndex > 0 && sxIndex <= global_info->AddinUdfs.size() && !(_Name = global_info->AddinUdfs[sxIndex - 1]).empty())
{
ptg_stack.push(_Name);
}
else if(sxIndex > 0 && sxIndex <= global_info->xti_parsed.size())
{
std::wstring sheet = global_info->xti_parsed[sxIndex-1];
if (!sheet.empty()) sheet += L"!";
if (sxIndex > 0 && sxIndex <= global_info->arDefineNames.size())
{
_Name = global_info->arDefineNames[sxIndex - 1];
}
if (sheet.empty() && _Name.empty() && sxIndex <= global_info->arExternalNames.size() && sxIndex > 0)
{
_Name = global_info->arExternalNames[sxIndex - 1];
}
ptg_stack.push(sheet + _Name);
}
else
{
Log::warning("PtgSxName structure is not assemble.");
ptg_stack.push(L""); // This would let us to continue without an error
}
ptg_stack.push(L"#REF!");
}

View File

@ -44,14 +44,13 @@ class PtgSxName: public OperandPtg
public:
BiffStructurePtr clone();
virtual void loadFields(CFRecord& record);
virtual void loadFields(CFRecord& record);
virtual void assemble(AssemblerStack& ptg_stack, PtgQueue& extra_data, bool full_ref = false);
private:
_UINT32 sxIndex;
private:
GlobalWorkbookInfoPtr global_info;
};
} // namespace XLS

View File

@ -55,10 +55,13 @@ BiffStructurePtr XFExtNoFRT::clone()
void XFExtNoFRT::load(CFRecord& record)
{
if (record.isEOF()) return;
record.skipNunBytes(6); // reserved
unsigned short cexts;
record >> cexts;
for(unsigned short i = 0; i < cexts; ++i)
for(unsigned short i = 0; !record.isEOF() && i < cexts; ++i)
{
ExtProp prop;
record >> prop;

View File

@ -57,7 +57,7 @@ public:
unsigned char Byte4;
unsigned short type;
unsigned short fExprO;
};
}bytes;
double value;
} data;
};

View File

@ -38,12 +38,15 @@
namespace XLS
{
DBB::DBB()
{
bString = false;
bDate = false;
bNumber = false;
bEmpty = false;
bBool = false;
}
DBB::~DBB()
{
}
@ -53,7 +56,6 @@ BaseObjectPtr DBB::clone()
return BaseObjectPtr(new DBB(*this));
}
// DBB = [SXDBB] *SXOPER
const bool DBB::loadContent(BinProcessor& proc)
{
@ -66,6 +68,13 @@ const bool DBB::loadContent(BinProcessor& proc)
while(count--)
{
m_arSXOPER.push_back(elements_.front()); elements_.pop_front();
SXOPER* operatr = dynamic_cast<SXOPER*>(m_arSXOPER.back().get());
bString |= operatr->bString;
bDate |= operatr->bDate;
bNumber |= operatr->bNumber;
bEmpty |= operatr->bEmpty;
bBool |= operatr->bBool;
}
if (!m_SXDBB && m_arSXOPER.empty())
@ -73,6 +82,50 @@ const bool DBB::loadContent(BinProcessor& proc)
return true;
}
int DBB::serialize(std::wostream & strm)
{
SXDBB* dbb = dynamic_cast<SXDBB*>(m_SXDBB.get());
if (!dbb && m_arSXOPER.empty()) return 0;
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"r")
{
int indexOPER = 0;
size_t posBlob = 0;
for (size_t i = 0; i < arPivotCacheFields.size(); i++)
{
if(arPivotCacheFields[i] == false)
{
m_arSXOPER[indexOPER++]->serialize(CP_XML_STREAM());
}
else
{
if (arPivotCacheFieldShortSize[i])//fShortIitms
{
unsigned short * values = (unsigned short *)(dbb->blob.get() + posBlob);
CP_XML_NODE(L"x")
{
CP_XML_ATTR(L"v", *values);
}
posBlob+=2;
}
else
{
unsigned char * values = (unsigned char *)(dbb->blob.get() + posBlob);
CP_XML_NODE(L"x")
{
CP_XML_ATTR(L"v", *values);
}
posBlob++;
}
}
}
}
}
return 0;
}
} // namespace XLS

View File

@ -47,10 +47,22 @@ public:
virtual const bool loadContent(BinProcessor& proc);
int serialize(std::wostream & strm);
static const ElementType type = typeDBB;
BaseObjectPtr m_SXDBB;
std::vector<BaseObjectPtr> m_arSXOPER;
//---------------------------------------------------
std::vector<bool> arPivotCacheFields;
std::vector<bool> arPivotCacheFieldShortSize;
bool bString;
bool bDate;
bool bNumber;
bool bEmpty;
bool bBool;
};
} // namespace XLS

View File

@ -63,7 +63,8 @@ public:
{
return false;
}
proc.mandatory<DbOrParamQry>();
DbOrParamQry param(1);
proc.mandatory(param);
return true;
};
};
@ -80,11 +81,14 @@ public:
const bool loadContent(BinProcessor& proc)
{
if(!proc.mandatory<DbOrParamQry>())
DbOrParamQry param(1);
if(!proc.mandatory(param))
{
return false;
}
proc.repeated<Parenthesis_DBQUERY_3>(0, 0);
int count = proc.repeated<Parenthesis_DBQUERY_3>(0, 0);
return true;
};
};
@ -105,8 +109,11 @@ public:
{
return false;
}
proc.repeated<SXString>(0, 0);
int count = proc.repeated<SXString>(0, 0);
proc.optional<Parenthesis_DBQUERY_2>();
return true;
};
};
@ -117,20 +124,126 @@ BaseObjectPtr DBQUERY::clone()
return BaseObjectPtr(new DBQUERY(*this));
}
// DBQUERY = DbOrParamQry [1*SXString [DbOrParamQry *(SXString DbOrParamQry)]] *SXString
const bool DBQUERY::loadContent(BinProcessor& proc)
{
global_info = proc.getGlobalWorkbookInfo();
if(!proc.mandatory<DbOrParamQry>())
{
return false;
}
proc.optional<Parenthesis_DBQUERY_1>();
proc.repeated<SXString>(0, 0);
m_DbQry = elements_.front(); elements_.pop_front();
proc.optional<Parenthesis_DBQUERY_1>();
while(!elements_.empty())
{
SXString* str = dynamic_cast<SXString*>(elements_.front().get());
if (!str)
{
m_DbParam = elements_.front(); elements_.pop_front();
break;
}
m_arSXString.push_back(str->value());
elements_.pop_front();
}
while(!elements_.empty())
{
SXString* str = dynamic_cast<SXString*>(elements_.front().get());
if (str)
{
_DbParam a;
a.string = str->value();
m_arParams.push_back(a);
}
else
{
DbOrParamQry* param = dynamic_cast<DbOrParamQry*>(elements_.front().get());
if (param)
{
m_arParams.back().param = elements_.front();
}
}
elements_.pop_front();
}
int count = proc.repeated<SXString>(0, 0);
while(!elements_.empty())
{
SXString* str = dynamic_cast<SXString*>(elements_.front().get());
if (str)
{
m_arSXString.push_back(str->value());
}
elements_.pop_front();
}
return true;
}
int DBQUERY::serialize(std::wostream & strm)
{
connectionId = ++global_info->connectionId;
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"cacheSource")
{
CP_XML_ATTR(L"type", L"external");
CP_XML_ATTR(L"connectionId", connectionId); //connectionId in connections(root)
}
}
serialize_connection(global_info->connections_stream);
return 0;
}
int DBQUERY::serialize_connection(std::wostream & strm)
{
DbOrParamQry* queryOrParam = dynamic_cast<DbOrParamQry*>(m_DbQry.get());
if (!queryOrParam) return 0;
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"connection")
{
CP_XML_ATTR(L"id", 1); //connectionId in connections(root)
CP_XML_ATTR(L"name", L"Connection");
CP_XML_ATTR(L"type", queryOrParam->query.dbt);
//switch(queryOrParam->query.dbt)
//{
// case 0x1: CP_XML_ATTR(L"type", 1); break;
// case 0x2:
// case 0x3:
// case 0x4:
// case 0x5:
// case 0x6:
// case 0x7:
//}
if (queryOrParam->query.fSavePwd) CP_XML_ATTR(L"savePassword", 1);
if (queryOrParam->query.fSavePwd) CP_XML_ATTR(L"refreshedVersion", 1);
int index = 0;
CP_XML_NODE(L"dbPr")
{
if (index < m_arSXString.size())
{
CP_XML_ATTR(L"command", m_arSXString[index]);
}
index++;
if (index < m_arSXString.size())
{
CP_XML_ATTR(L"connection", m_arSXString[index]);
}
index++;
}
}
}
return 0;
}
} // namespace XLS

View File

@ -35,9 +35,12 @@
namespace XLS
{
struct _DbParam
{
std::wstring string;
BaseObjectPtr param;
};
// Logical representation of DBQUERY union of records
class DBQUERY: public CompositeObject
{
BASE_OBJECT_DEFINE_CLASS_NAME(DBQUERY)
@ -49,6 +52,18 @@ public:
virtual const bool loadContent(BinProcessor& proc);
int serialize(std::wostream & stream);
int serialize_connection(std::wostream & strm);
BaseObjectPtr m_DbQry;
BaseObjectPtr m_DbParam;
std::vector<_DbParam> m_arParams;
std::vector<std::wstring> m_arSXString;
//------------------------------------------------------
GlobalWorkbookInfoPtr global_info;
int connectionId;
};
} // namespace XLS

View File

@ -36,8 +36,6 @@
namespace XLS
{
// Logical representation of DBQUERYEXT union of records
class DBQUERYEXT: public CompositeObject
{
BASE_OBJECT_DEFINE_CLASS_NAME(DBQUERYEXT)
@ -49,6 +47,11 @@ public:
virtual const bool loadContent(BinProcessor& proc);
BaseObjectPtr m_TxtQry;
BaseObjectPtr m_DBQueryExt;
BaseObjectPtr m_ExtString;
std::vector<BaseObjectPtr> m_arExtString;
};
} // namespace XLS

View File

@ -31,10 +31,11 @@
*/
#include "DBQUERYEXT.h"
#include <Logic/Biff_records/DBQueryExt.h>
#include <Logic/Biff_records/ExtString.h>
#include <Logic/Biff_records/OleDbConn.h>
#include <Logic/Biff_records/TxtQry.h>
#include "../Biff_records/DBQueryExt.h"
#include "../Biff_records/ExtString.h"
#include "../Biff_records/OleDbConn.h"
#include "../Biff_records/TxtQry.h"
namespace XLS
{
@ -84,11 +85,30 @@ const bool DBQUERYEXT::loadContent(BinProcessor& proc)
{
return false;
}
proc.optional<ExtString>();
proc.repeated<Parenthesis_DBQUERYEXT_1>(0, 4);
m_DBQueryExt = elements_.back();
elements_.pop_back();
if (proc.optional<ExtString>())
{
m_ExtString = elements_.back();
elements_.pop_back();
}
int count = proc.repeated<Parenthesis_DBQUERYEXT_1>(0, 4);
//....
if(proc.optional<TxtQry>())
{
proc.repeated<ExtString>(0, 0);
m_TxtQry = elements_.back();
elements_.pop_back();
int count = proc.repeated<ExtString>(0, 0);
while(count--)
{
m_arExtString.insert(m_arExtString.begin(), elements_.back());
elements_.pop_back();
}
}
return true;

View File

@ -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,84 @@ 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)
{
switch(bin->nBuiltin)
{
case 0x0004:/*Database*/
case 0x000d:/*_FilterDatabase*/
{
CP_XML_ATTR(L"type", L"external");
//connectionId in connections(root)
}break;
case 0x0000:/*Consolidate_Area*/
//{
// CP_XML_ATTR(L"type", L"consolidation");
// CP_XML_NODE(L"consolidation")
// {
// CP_XML_ATTR(L"name", bin->stFile.value());
// }
//}break;
case 0x0001:/*Auto_Open*/
case 0x0002:/*Auto_Close*/
case 0x0003:/*Extract*/
case 0x0005:/*Criteria*/
case 0x0006:/*Print_Area*/
case 0x0007:/*Print_Titles*/
case 0x0008:/*Recorder*/
case 0x0009:/*Data_Form*/
case 0x000a:/*Auto_Activate*/
case 0x000b:/*Auto_Deactivate*/
case 0x000c:/*Sheet_Title*/
{
CP_XML_ATTR(L"type", L"scenario");
CP_XML_NODE(L"worksheetSource")
{
CP_XML_ATTR(L"name", bin->stFile.value());
}
}break;
}
}
else if(ref)
{
CP_XML_ATTR(L"type", L"worksheet");
CP_XML_NODE(L"worksheetSource")
{
CP_XML_ATTR(L"ref", ref->ref.toString());
CP_XML_ATTR(L"sheet", ref->stFile);
}
}
}
}
return 0;
}
} // namespace XLS

View File

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

View File

@ -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,18 +68,24 @@ public:
}
return true;
};
private:
int m_count;
};
FDB::FDB()
{
bString = false;
bDate = false;
bNumber = false;
bEmpty = false;
bInteger = false;
bBool = false;
}
FDB::~FDB()
{
}
BaseObjectPtr FDB::clone()
{
return BaseObjectPtr(new FDB(*this));
@ -91,6 +103,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 +117,41 @@ 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 * operatr = dynamic_cast<SXOPER*> (elements_.front().get());
if (operatr)
{
m_arGRPSXOPER.push_back(elements_.front());
//bString |= operatr->bString;
//bDate |= operatr->bDate;
//bNumber |= operatr->bNumber;
//bEmpty |= operatr->bEmpty;
}
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--;
}
}
@ -135,10 +159,157 @@ const bool FDB::loadContent(BinProcessor& proc)
while(count--)
{
m_arSRCSXOPER.push_back(elements_.front()); elements_.pop_front();
SXOPER* operatr = dynamic_cast<SXOPER*> (m_arSRCSXOPER.back().get());
bString |= operatr->bString;
bDate |= operatr->bDate;
bNumber |= operatr->bNumber;
bEmpty |= operatr->bEmpty;
bInteger|= operatr->bInteger;
bBool |= operatr->bBool;
}
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());
if (fdb_type->wTypeSql > 0)
{
CP_XML_ATTR(L"numFmtId", fdb_type->wTypeSql);
//CP_XML_ATTR(L"sqlType", fdb_type->wTypeSql); //in db
}
if (m_arSRCSXOPER.empty() && m_arGRPSXOPER.empty() == false)
{
CP_XML_ATTR(L"databaseField", 0);
}
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
}
if (m_arSRCSXOPER.empty() == false)
{
CP_XML_NODE(L"sharedItems")
{
//использовать поля присутствия из xls низя - они частенько записаны неверно!!
//if (!fdb->fNonDates) CP_XML_ATTR(L"containsNonDate", fdb->fNonDates);
//if (fdb->fDateInField) CP_XML_ATTR(L"containsDate", fdb->fDateInField);
//if (fdb->fNumField) CP_XML_ATTR(L"containsNumber", fdb->fNumField);
////CP_XML_ATTR(L"containsBlank", fdb->fTextEtcField);
//if (m_arSRCSXOPER.empty())
//{
// if (!fdb->fTextEtcField)
// {
// CP_XML_ATTR(L"containsString", 0);
// }
// else if (fdb->fNumField || fdb->fDateInField)
// {
// CP_XML_ATTR(L"containsBlank", 1);
// CP_XML_ATTR(L"containsString", 0);
// }
//}
if (bInteger)
{
if (bNumber) bInteger = false;
else bNumber = true;
}
if ((bDate & bNumber) || (bNumber & bString))
{
CP_XML_ATTR(L"containsSemiMixedTypes", 1);
}
else if ( bDate & bString)
{
CP_XML_ATTR(L"containsMixedTypes", 1);
}
else if (!bEmpty && !bString && !bBool)
{
CP_XML_ATTR(L"containsSemiMixedTypes", 0);
}
if (bNumber) CP_XML_ATTR(L"containsNumber", 1);
if (bDate) CP_XML_ATTR(L"containsDate", 1);
if (bEmpty) CP_XML_ATTR(L"containsBlank", 1);
if (bInteger) CP_XML_ATTR(L"containsInteger", 1);
if (!bString && (bInteger || bDate || bNumber || bEmpty))
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", m_arSRCSXOPER.size());
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

View File

@ -47,6 +47,8 @@ public:
virtual const bool loadContent(BinProcessor& proc);
int serialize(std::wostream & strm);
static const ElementType type = typeFDB;
BaseObjectPtr m_SXFDB;
@ -57,6 +59,14 @@ public:
std::vector<BaseObjectPtr> m_arGRPSXOPER;
BaseObjectPtr m_SXRANGE;
std::vector<BaseObjectPtr> m_arSxIsxoper;
bool bString;
bool bDate;
bool bNumber;
bool bEmpty;
bool bInteger;
bool bBool;
};
} // namespace XLS

View File

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

View File

@ -47,7 +47,6 @@ PIVOTCACHE::PIVOTCACHE()
{
}
PIVOTCACHE::~PIVOTCACHE()
{
}
@ -61,6 +60,11 @@ BaseObjectPtr PIVOTCACHE::clone()
// PIVOTCACHE = SXDB SXDBEx *SXFORMULA *FDB *DBB EOF
const bool PIVOTCACHE::loadContent(BinProcessor& proc)
{
GlobalWorkbookInfoPtr global_info = proc.getGlobalWorkbookInfo();
global_info->arPivotCacheFieldShortSize.clear();
global_info->arPivotCacheFields.clear();
if(!proc.mandatory<SXDB>())
{
return false;
@ -91,6 +95,11 @@ const bool PIVOTCACHE::loadContent(BinProcessor& proc)
while(count--)
{
m_arDBB.push_back(elements_.front()); elements_.pop_front();
DBB* dbb = dynamic_cast<DBB*>(m_arDBB.back().get());
dbb->arPivotCacheFieldShortSize = global_info->arPivotCacheFieldShortSize;
dbb->arPivotCacheFields = global_info->arPivotCacheFields;
}
if (proc.optional<EOF_T>())
{

View File

@ -55,6 +55,8 @@ public:
std::vector<BaseObjectPtr> m_arFDB;
std::vector<BaseObjectPtr> m_arDBB;
std::vector<bool> m_arAllAtoms;
};
} // namespace XLS

View File

@ -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,105 @@ 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"enableRefresh", 1);
CP_XML_ATTR(L"refreshedBy", db->rgb.value());
CP_XML_ATTR(L"refreshedDate", db_ex->numDate.data.value);
CP_XML_ATTR(L"recordCount", db->crdbUsed);
//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());
}
}
}
if (pivot_cache->m_arSXFORMULA.empty() == false)
{
CP_XML_NODE(L"calculatedItems")
{
CP_XML_ATTR(L"count", pivot_cache->m_arSXFORMULA.size());
for (size_t i = 0; i < pivot_cache->m_arSXFORMULA.size(); i++)
{
pivot_cache->m_arSXFORMULA[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

View File

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

View File

@ -31,34 +31,31 @@
*/
#include "PIVOTCORE.h"
#include <Logic/Biff_records/SxView.h>
#include <Logic/Biff_unions/PIVOTVD.h>
#include <Logic/Biff_unions/PIVOTIVD.h>
#include <Logic/Biff_unions/PIVOTPI.h>
#include <Logic/Biff_records/SXDI.h>
#include <Logic/Biff_unions/PIVOTLI.h>
#include <Logic/Biff_unions/PIVOTEX.h>
#include "PIVOTVD.h"
#include "PIVOTIVD.h"
#include "PIVOTPI.h"
#include "PIVOTLI.h"
#include "PIVOTEX.h"
#include "../Biff_records/SXDI.h"
#include "../Biff_records/SxView.h"
namespace XLS
{
PIVOTCORE::PIVOTCORE()
{
}
PIVOTCORE::~PIVOTCORE()
{
}
BaseObjectPtr PIVOTCORE::clone()
{
return BaseObjectPtr(new PIVOTCORE(*this));
}
// PIVOTCORE = SxView *PIVOTVD *2PIVOTIVD [PIVOTPI] *SXDI *PIVOTLI PIVOTEX
const bool PIVOTCORE::loadContent(BinProcessor& proc)
{
@ -69,6 +66,8 @@ const bool PIVOTCORE::loadContent(BinProcessor& proc)
m_SxView = elements_.back();
elements_.pop_back();
SxView* sxView = dynamic_cast<SxView*>(m_SxView.get());
int count = 0;
count = proc.repeated<PIVOTVD>(0, 0);
@ -93,12 +92,21 @@ const bool PIVOTCORE::loadContent(BinProcessor& proc)
{
m_arSXDI.push_back(elements_.front()); elements_.pop_front();
}
count = proc.repeated<PIVOTLI>(0, 0);
while(count--)
PIVOTLI rwLines(sxView->cDimRw);
if (proc.optional(rwLines))
{
m_arPIVOTLI.push_back(elements_.front()); elements_.pop_front();
}
PIVOTLI colLines(sxView->cDimCol);
if (proc.optional(colLines))
{
m_arPIVOTLI.push_back(elements_.front()); elements_.pop_front();
}
//count = proc.repeated<PIVOTLI>(0, 0);
//while(count--)
//{
// m_arPIVOTLI.push_back(elements_.front()); elements_.pop_front();
//}
if (proc.mandatory<PIVOTEX>())
{

View File

@ -55,7 +55,6 @@ BaseObjectPtr PIVOTFRT9::clone()
return BaseObjectPtr(new PIVOTFRT9(*this));
}
// PIVOTFRT9 = QsiSXTag [DBQUERYEXT] [PIVOTVIEWEX] SXViewEx9
const bool PIVOTFRT9::loadContent(BinProcessor& proc)
{

View File

@ -31,13 +31,12 @@
*/
#include "PIVOTIVD.h"
#include <Logic/Biff_records/SxIvd.h>
#include <Logic/Biff_records/Continue.h>
#include "../Biff_records/SxIvd.h"
#include "../Biff_records/Continue.h"
namespace XLS
{
PIVOTIVD::PIVOTIVD()
{
}
@ -53,7 +52,6 @@ BaseObjectPtr PIVOTIVD::clone()
return BaseObjectPtr(new PIVOTIVD(*this));
}
// PIVOTIVD = SxIvd *Continue
const bool PIVOTIVD::loadContent(BinProcessor& proc)
{
@ -68,6 +66,21 @@ const bool PIVOTIVD::loadContent(BinProcessor& proc)
return true;
}
int PIVOTIVD::serialize(std::wostream & strm)
{
SxIvd* vd = dynamic_cast<SxIvd*>(m_SxIvd.get());
CP_XML_WRITER(strm)
{
for (size_t i = 0; i < vd->rgSxivd.size(); i++)
{
CP_XML_NODE(L"field")
{
CP_XML_ATTR(L"x", vd->rgSxivd[i]);
}
}
}
return 0;
}
} // namespace XLS

View File

@ -47,6 +47,8 @@ public:
virtual const bool loadContent(BinProcessor& proc);
int serialize(std::wostream & strm);
static const ElementType type = typePIVOTIVD;
BaseObjectPtr m_SxIvd;

View File

@ -31,40 +31,89 @@
*/
#include "PIVOTLI.h"
#include <Logic/Biff_records/SXLI.h>
#include <Logic/Biff_records/Continue.h>
#include "../Biff_records/SXLI.h"
#include "../Biff_records/Continue.h"
namespace XLS
{
PIVOTLI::PIVOTLI()
PIVOTLI::PIVOTLI(int count_lines_)
{
count_lines = count_lines_;
}
PIVOTLI::~PIVOTLI()
{
}
BaseObjectPtr PIVOTLI::clone()
{
return BaseObjectPtr(new PIVOTLI(*this));
}
// PIVOTLI = SXLI *Continue
const bool PIVOTLI::loadContent(BinProcessor& proc)
{
if(!proc.mandatory<SXLI>())
SXLI sx_line(count_lines);
if(!proc.mandatory(sx_line))
{
return false;
}
m_SXLI = elements_.back();
elements_.pop_back();
proc.repeated<Continue>(0, 0);
return true;
}
int PIVOTLI::serialize(std::wostream & strm)
{
SXLI* line_items = dynamic_cast<SXLI*>(m_SXLI.get());
if (!line_items) return 0;
CP_XML_WRITER(strm)
{
for (size_t i = 0; i < line_items->m_arItems.size(); i++)
{
CP_XML_NODE(L"i")
{
switch(line_items->m_arItems[i].itmType)
{
case 0x0001: CP_XML_ATTR(L"t", L"default"); break;
case 0x0002: CP_XML_ATTR(L"t", L"sum"); break;
case 0x0003: CP_XML_ATTR(L"t", L"countA"); break;
case 0x0004: CP_XML_ATTR(L"t", L"count"); break;
case 0x0005: CP_XML_ATTR(L"t", L"avg"); break;
case 0x0006: CP_XML_ATTR(L"t", L"max"); break;
case 0x0007: CP_XML_ATTR(L"t", L"min"); break;
case 0x0008: CP_XML_ATTR(L"t", L"product"); break;
case 0x0009: CP_XML_ATTR(L"t", L"stdDev"); break;
case 0x000A: CP_XML_ATTR(L"t", L"stdDevP"); break;
case 0x000B: CP_XML_ATTR(L"t", L"var"); break;
case 0x000C: CP_XML_ATTR(L"t", L"varP"); break;
case 0x000D: CP_XML_ATTR(L"t", L"grand"); break;
case 0x000E: CP_XML_ATTR(L"t", L"blank"); break;
}
if (line_items->m_arItems[i].cSic > 0 && line_items->m_arItems[i].itmType == 0)//??
{
CP_XML_ATTR(L"r", line_items->m_arItems[i].cSic);
}
for (size_t j = line_items->m_arItems[i].cSic; j < line_items->m_arItems[i].rgisxvi.size(); j++)
{
CP_XML_NODE(L"x")
{
CP_XML_ATTR(L"v", line_items->m_arItems[i].rgisxvi[j]);
}
}
}
}
}
return 0;
}
} // namespace XLS

View File

@ -36,20 +36,24 @@
namespace XLS
{
// Logical representation of PIVOTLI union of records
class PIVOTLI: public CompositeObject
{
BASE_OBJECT_DEFINE_CLASS_NAME(PIVOTLI)
public:
PIVOTLI();
PIVOTLI(int count_lines_);
~PIVOTLI();
BaseObjectPtr clone();
virtual const bool loadContent(BinProcessor& proc);
static const ElementType type = typePIVOTLI;
int serialize(std::wostream & strm);
static const ElementType type = typePIVOTLI;
BaseObjectPtr m_SXLI;
int count_lines;
};
} // namespace XLS

View File

@ -31,13 +31,12 @@
*/
#include "PIVOTPI.h"
#include <Logic/Biff_records/SXPI.h>
#include <Logic/Biff_records/Continue.h>
#include "../Biff_records/SXPI.h"
#include "../Biff_records/Continue.h"
namespace XLS
{
PIVOTPI::PIVOTPI()
{
}
@ -53,7 +52,6 @@ BaseObjectPtr PIVOTPI::clone()
return BaseObjectPtr(new PIVOTPI(*this));
}
// PIVOTPI = SXPI *Continue
const bool PIVOTPI::loadContent(BinProcessor& proc)
{
@ -69,5 +67,22 @@ const bool PIVOTPI::loadContent(BinProcessor& proc)
return true;
}
int PIVOTPI::serialize(std::wostream & strm)
{
SXPI* page_items = dynamic_cast<SXPI*>(m_SXPI.get());
if (!page_items) return 0;
CP_XML_WRITER(strm)
{
for (size_t i = 0; i < page_items->m_arItems.size(); i++)
{
CP_XML_NODE(L"pageField")
{
CP_XML_ATTR(L"fld", page_items->m_arItems[i].isxvd);
CP_XML_ATTR(L"hier",0);
}
}
}
}
} // namespace XLS

View File

@ -47,6 +47,8 @@ public:
virtual const bool loadContent(BinProcessor& proc);
int serialize(std::wostream & strm);
static const ElementType type = typePIVOTPI;
BaseObjectPtr m_SXPI;

View File

@ -31,30 +31,26 @@
*/
#include "PIVOTVD.h"
#include <Logic/Biff_records/Sxvd.h>
#include <Logic/Biff_records/SXVI.h>
#include <Logic/Biff_records/SXVDEx.h>
#include "../Biff_records/Sxvd.h"
#include "../Biff_records/SXVI.h"
#include "../Biff_records/SXVDEx.h"
namespace XLS
{
PIVOTVD::PIVOTVD()
{
}
PIVOTVD::~PIVOTVD()
{
}
BaseObjectPtr PIVOTVD::clone()
{
return BaseObjectPtr(new PIVOTVD(*this));
}
// PIVOTVD = Sxvd *SXVI SXVDEx
const bool PIVOTVD::loadContent(BinProcessor& proc)
{
@ -79,6 +75,92 @@ const bool PIVOTVD::loadContent(BinProcessor& proc)
return true;
}
int PIVOTVD::serialize(std::wostream & strm)
{
Sxvd* vd = dynamic_cast<Sxvd*>(m_Sxvd.get());
SXVDEx* vd_ex = dynamic_cast<SXVDEx*>(m_SXVDEx.get());
if (!vd || !vd_ex) return 0;
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"pivotField")
{
if (vd->sxaxis.bRw) CP_XML_ATTR(L"axis", L"axisRow");
else if (vd->sxaxis.bCol) CP_XML_ATTR(L"axis", L"axisCol");
else if (vd->sxaxis.bPage) CP_XML_ATTR(L"axis", L"axisPage");
else if (vd->sxaxis.bData)
{
CP_XML_ATTR(L"dataField", 1);
}
CP_XML_ATTR(L"compact", 0);
if (vd_ex->ifmt > 0)
{
CP_XML_ATTR(L"numFmtId", vd_ex->ifmt);
}
if (vd->stName.value().empty() == false)
CP_XML_ATTR(L"name", vd->stName.value());
if (vd->fCounta) CP_XML_ATTR(L"countASubtotal", 1);
if (vd->fCount) CP_XML_ATTR(L"countSubtotal", 1);
if (vd->fSum) CP_XML_ATTR(L"sumSubtotal", 1);
if (vd->fAverage) CP_XML_ATTR(L"avgSubtotal", 1);
if (vd->fMax) CP_XML_ATTR(L"maxSubtotal", 1);
if (vd->fMin) CP_XML_ATTR(L"minSubtotal", 1);
if (vd->fProduct) CP_XML_ATTR(L"productSubtotal", 1);
if (vd->fStdev) CP_XML_ATTR(L"stdSubtotal", 1);
if (vd->fStdevp) CP_XML_ATTR(L"stdDevSubtotal", 1);
if (vd->fVariance) CP_XML_ATTR(L"varSubtotal", 1);
if (vd->fVariancep) CP_XML_ATTR(L"varPSubtotal", 1);
CP_XML_ATTR(L"outline", vd_ex->fOutline);
CP_XML_ATTR(L"subtotalTop", vd_ex->fSubtotalAtTop);
CP_XML_ATTR(L"showAll", vd_ex->fShowAllItems);
if (vd_ex->fNotDragToData) CP_XML_ATTR(L"dragToData", 0);
if (!vd_ex->fDragToRow) CP_XML_ATTR(L"dragToRow", 0);
if (!vd_ex->fDragToColumn) CP_XML_ATTR(L"dragToCol", 0);
if (!vd_ex->fDragToPage) CP_XML_ATTR(L"dragToPage", 0);
if (vd_ex->fHideNewItems) CP_XML_ATTR(L"hideNewItems", 1);
if (vd_ex->fInsertBlankRow) CP_XML_ATTR(L"insertBlankRow", 1);
if (vd_ex->fPageBreaksBetweenItems) CP_XML_ATTR(L"insertPageBreak", 1);
if (!vd_ex->fTopAutoShow) CP_XML_ATTR(L"topAutoShow", 0);
//if (!vd_ex->fDragToHide) CP_XML_ATTR(L"dragOff", 0); //??
if (vd_ex->fServerBased) CP_XML_ATTR(L"serverField", 1);
//CP_XML_ATTR(L"", vd_ex->fCalculatedField);
CP_XML_ATTR(L"includeNewItemsInFilter", 1);
//CP_XML_ATTR(L"nonAutoSortDefault", !vd_ex->fAutoSort);
if (vd_ex->fAutoSort)
{
// vd_ex->isxdiAutoSort
if (vd_ex->fAscendSort) CP_XML_ATTR(L"sortType", L"ascending");
}
if (vd_ex->isxdiAutoShow >= 0)
{
CP_XML_ATTR(L"rankBy", vd_ex->isxdiAutoShow);
}
if (!vd->fDefault) CP_XML_ATTR(L"defaultSubtotal", 0);
if (!m_arSXVI.empty())
{
CP_XML_NODE(L"items")
{
CP_XML_ATTR(L"count", m_arSXVI.size());
for (size_t i = 0; i < m_arSXVI.size(); i++)
{
m_arSXVI[i]->serialize(CP_XML_STREAM());
}
}
}
}
}
return 0;
}
} // namespace XLS

View File

@ -49,6 +49,8 @@ public:
static const ElementType type = typePIVOTVD;
int serialize(std::wostream & strm);
BaseObjectPtr m_Sxvd;
std::vector<BaseObjectPtr> m_arSXVI;
BaseObjectPtr m_SXVDEx;

View File

@ -31,29 +31,34 @@
*/
#include "PIVOTVIEW.h"
#include <Logic/Biff_unions/PIVOTCORE.h>
#include <Logic/Biff_unions/PIVOTFRT.h>
#include "PIVOTCORE.h"
#include "PIVOTFRT.h"
#include "PIVOTVD.h"
#include "PIVOTIVD.h"
#include "PIVOTPI.h"
#include "PIVOTLI.h"
#include "PIVOTEX.h"
#include "../Biff_records/SXDI.h"
#include "../Biff_records/SxView.h"
namespace XLS
{
PIVOTVIEW::PIVOTVIEW()
{
indexCache = -1;
}
PIVOTVIEW::~PIVOTVIEW()
{
}
BaseObjectPtr PIVOTVIEW::clone()
{
return BaseObjectPtr(new PIVOTVIEW(*this));
}
// PIVOTVIEW = PIVOTCORE [PIVOTFRT]
const bool PIVOTVIEW::loadContent(BinProcessor& proc)
{
@ -73,5 +78,135 @@ const bool PIVOTVIEW::loadContent(BinProcessor& proc)
return true;
}
int PIVOTVIEW::serialize(std::wostream & strm)
{
PIVOTCORE* core = dynamic_cast<PIVOTCORE*>(m_PIVOTCORE.get());
if (!core) return 0;
SxView* view = dynamic_cast<SxView*>(core->m_SxView.get());
if (!view) return 0;
PIVOTFRT* frt = dynamic_cast<PIVOTFRT*>(m_PIVOTFRT.get());
indexCache = view->iCache;
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"pivotTableDefinition")
{
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
CP_XML_ATTR(L"name", view->stTable.value());
CP_XML_ATTR(L"cacheId", view->iCache);
CP_XML_ATTR(L"useAutoFormatting", view->fAutoFormat);
CP_XML_ATTR(L"dataOnRows", view->sxaxis4Data.bRw);
CP_XML_ATTR(L"autoFormatId", view->itblAutoFmt);
CP_XML_ATTR(L"applyNumberFormats", view->fAtrNum);
CP_XML_ATTR(L"applyBorderFormats", view->fAtrBdr);
CP_XML_ATTR(L"applyFontFormats", view->fAtrFnt);
CP_XML_ATTR(L"applyPatternFormats", view->fAtrPat);
CP_XML_ATTR(L"applyAlignmentFormats", view->fAtrAlc);
CP_XML_ATTR(L"applyWidthHeightFormats", view->fAtrProc);
if (!view->stData.value().empty())
{
CP_XML_ATTR(L"dataCaption", view->stData.value());
}
//updatedVersion="2"
//asteriskTotals="1"
//showMemberPropertyTips="0"
//itemPrintTitles="1"
//createdVersion="1"
//indent="0"
//compact="0"
//compactData="0"
//gridDropZones="1"
CP_XML_NODE(L"location")
{
CP_XML_ATTR(L"ref", view->ref.toString());
CP_XML_ATTR(L"firstHeaderRow", view->rwFirstHead - view->ref.rowFirst );
CP_XML_ATTR(L"firstDataRow", view->rwFirstData - view->ref.rowFirst);
CP_XML_ATTR(L"firstDataCol", view->colFirstData - view->ref.columnFirst);
CP_XML_ATTR(L"rowPageCount", 1);
CP_XML_ATTR(L"colPageCount", 1);
}
CP_XML_NODE(L"pivotFields")
{
CP_XML_ATTR(L"count", view->cDim);//Sxvd
for (size_t i = 0; i < core->m_arPIVOTVD.size(); i++)
{
core->m_arPIVOTVD[i]->serialize(CP_XML_STREAM());
}
}
if (core->m_arPIVOTIVD.size() >= 1)
{
CP_XML_NODE(L"rowFields")
{
CP_XML_ATTR(L"count", view->cDimRw);
PIVOTIVD* ivd = dynamic_cast<PIVOTIVD*>(core->m_arPIVOTIVD[0].get());
ivd->serialize(CP_XML_STREAM());
}
}
if (core->m_arPIVOTLI.size() >= 1)//0 or 2
{
CP_XML_NODE(L"rowItems")
{
CP_XML_ATTR(L"count", view->cRw);
PIVOTLI* line = dynamic_cast<PIVOTLI*>(core->m_arPIVOTLI[0].get());
line->serialize(CP_XML_STREAM());
}
}
if (core->m_arPIVOTIVD.size() == 2)//0 or 2
{
CP_XML_NODE(L"colFields")
{
CP_XML_ATTR(L"count", view->cDimCol);
PIVOTIVD* ivd = dynamic_cast<PIVOTIVD*>(core->m_arPIVOTIVD[1].get());
ivd->serialize(CP_XML_STREAM());
}
}
if (core->m_arPIVOTLI.size() == 2)//0 or 2
{
CP_XML_NODE(L"colItems")
{
CP_XML_ATTR(L"count", view->cCol);
PIVOTLI* line = dynamic_cast<PIVOTLI*>(core->m_arPIVOTLI[1].get());
line->serialize(CP_XML_STREAM());
}
}
if (core->m_PIVOTPI)
{
CP_XML_NODE(L"pageFields")
{
CP_XML_ATTR(L"count", view->cDimPg);
core->m_PIVOTPI->serialize(CP_XML_STREAM());
}
}
CP_XML_NODE(L"dataFields")
{
CP_XML_ATTR(L"count", view->cDimData);
for (size_t i = 0; i < core->m_arSXDI.size(); i++)
{
core->m_arSXDI[i]->serialize(CP_XML_STREAM());
}
}
//CP_XML_NODE(L"pivotTableStyleInfo")
//{
// CP_XML_ATTR(L"showRowHeaders", 1);
// CP_XML_ATTR(L"showColHeaders", 1);
// CP_XML_ATTR(L"showRowStripes", 0);
// CP_XML_ATTR(L"showColStripes", 0);
// CP_XML_ATTR(L"showLastColumn", 1);
//}
}
}
return 0;
}
} // namespace XLS

View File

@ -47,10 +47,14 @@ public:
virtual const bool loadContent(BinProcessor& proc);
int serialize(std::wostream & strm);
static const ElementType type = typePIVOTVIEW;
BaseObjectPtr m_PIVOTCORE;
BaseObjectPtr m_PIVOTFRT;
//----------------------------------
int indexCache;
};
} // namespace XLS

View File

@ -39,23 +39,19 @@
namespace XLS
{
PIVOTVIEWEX::PIVOTVIEWEX()
{
}
PIVOTVIEWEX::~PIVOTVIEWEX()
{
}
BaseObjectPtr PIVOTVIEWEX::clone()
{
return BaseObjectPtr(new PIVOTVIEWEX(*this));
}
// PIVOTVIEWEX = SXViewEx *PIVOTTH *SXPIEx *PIVOTVDTEX
const bool PIVOTVIEWEX::loadContent(BinProcessor& proc)
{

View File

@ -38,6 +38,28 @@
namespace XLS
{
// (SxName *SXPair)
class Parenthesis_SXFMLA: public ABNFParenthesis
{
BASE_OBJECT_DEFINE_CLASS_NAME(Parenthesis_SXFMLA)
public:
BaseObjectPtr clone()
{
return BaseObjectPtr(new Parenthesis_SXFMLA(*this));
}
const bool loadContent(BinProcessor& proc)
{
if(!proc.mandatory<SxName>())
{
return false;
}
int count = proc.repeated<SXPair>(0, 0);
return true;
};
};
SXFMLA::SXFMLA()
{
@ -57,6 +79,8 @@ BaseObjectPtr SXFMLA::clone()
// SXFMLA = SxFmla *(SxName *SXPair)
const bool SXFMLA::loadContent(BinProcessor& proc)
{
GlobalWorkbookInfoPtr global_info = proc.getGlobalWorkbookInfo();
if(!proc.mandatory<SxFmla>())
{
return false;
@ -64,6 +88,34 @@ const bool SXFMLA::loadContent(BinProcessor& proc)
m_SxFmla = elements_.back();
elements_.pop_back();
int count = proc.repeated<Parenthesis_SXFMLA>(0, 0);
while(!elements_.empty())
{
if (dynamic_cast<SxName*>(elements_.front().get()))
{
_sx_name sx_name;
sx_name.name = elements_.front(); elements_.pop_front();
global_info->arPivotSxNames.push_back(sx_name);
}
else
{
while(!elements_.empty())
{
if (dynamic_cast<SxName*>(elements_.front().get()))
{
break;
}
else
{
global_info->arPivotSxNames.back().pair.push_back(elements_.front());
elements_.pop_front();
}
}
}
}
return true;
}

View File

@ -35,11 +35,11 @@
namespace XLS
{
class SXFMLA: public CompositeObject
{
BASE_OBJECT_DEFINE_CLASS_NAME(SXFMLA)
public:
SXFMLA();
~SXFMLA();
@ -49,7 +49,7 @@ public:
static const ElementType type = typeSXFMLA;
BaseObjectPtr m_SxFmla;
BaseObjectPtr m_SxFmla;
};
} // namespace XLS

View File

@ -34,7 +34,11 @@
#include "SXFMLA_bu.h"
#include "PIVOTRULE.h"
#include "../Biff_records/SXFormula.h"
#include "../Biff_records/SxFmla.h"
#include "../Biff_records/SxName.h"
#include "../Biff_records/SXPair.h"
namespace XLS
{
@ -56,6 +60,8 @@ BaseObjectPtr SXFORMULA::clone()
// SXFORMULA = SXFMLA PIVOTRULE SXFormula
const bool SXFORMULA::loadContent(BinProcessor& proc)
{
global_info = proc.getGlobalWorkbookInfo();
if(!proc.mandatory<SXFMLA>())
{
return false;
@ -74,6 +80,29 @@ const bool SXFORMULA::loadContent(BinProcessor& proc)
elements_.pop_back();
} return true;
}
int SXFORMULA::serialize(std::wostream & strm)
{
SXFMLA* fmla = dynamic_cast<SXFMLA*>(m_SXFMLA.get());
if (!fmla) return 0;
SxFmla* sx_fmla = dynamic_cast<SxFmla*>(fmla->m_SxFmla.get());
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"calculatedItem")
{
CP_XML_ATTR(L"formula", sx_fmla->fmla.getAssembledFormula());
//for (size_t j = 0; j < global_info->arPivotSxNames.size(); j++)//???
//{
// SxName *name = dynamic_cast<SxName*>(global_info->arPivotSxNames[j].m_SxName.get());
// CP_XML_NODE(L"pivotArea")
// {
// }
//}
}
}
return 0;
}
} // namespace XLS

View File

@ -47,11 +47,15 @@ public:
virtual const bool loadContent(BinProcessor& proc);
int serialize(std::wostream & stream);
static const ElementType type = typeSXFORMULA;
BaseObjectPtr m_SXFMLA;
BaseObjectPtr m_PIVOTRULE;
BaseObjectPtr m_SXFormula;
GlobalWorkbookInfoPtr global_info;
};
} // namespace XLS

View File

@ -43,9 +43,14 @@ namespace XLS
SXOPER::SXOPER()
{
bString = false;
bDate = false;
bNumber = false;
bEmpty = false;
bInteger= false;
bBool = false;
}
SXOPER::~SXOPER()
{
}
@ -60,27 +65,51 @@ const bool SXOPER::loadContent(BinProcessor& proc)
{
if(proc.optional<SxNil>())
{
bEmpty = true;
}
else if(proc.optional<SXNum>())
{
SXNum *num = dynamic_cast<SXNum*>(elements_.back().get());
if (num)
{
bInteger = (num->num.data.bytes.Byte1==num->num.data.bytes.Byte2 &&
num->num.data.bytes.Byte2==num->num.data.bytes.Byte3 &&
num->num.data.bytes.Byte3==num->num.data.bytes.Byte4 &&
num->num.data.bytes.Byte4==0);
}
bNumber = !bInteger;
}
else if(proc.optional<SxBool>())
{
bBool = true;
}
else if(proc.optional<SxErr>())
{
bNumber = true;
}
else if(proc.optional<SXString>())
{
bString = true;
}
else if(proc.optional<SXDtr>())
{
bDate =true;
}
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

View File

@ -47,9 +47,18 @@ 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;
bool bString;
bool bDate;
bool bNumber;
bool bEmpty;
bool bInteger;
bool bBool;
};
} // namespace XLS

View File

@ -92,10 +92,65 @@ 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());
CP_XML_ATTR(L"startDate", startDate->get_string_date());
CP_XML_ATTR(L"endDate", endDate->get_string_date());
}
if (m_arSXNum.size() == 3)
{
}
}
}
return 0;
}
} // namespace XLS

View File

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

View File

@ -54,7 +54,6 @@ BaseObjectPtr SXSRC::clone()
return BaseObjectPtr(new SXSRC(*this));
}
// SXSRC = DREF / SXTBL / DBQUERY
const bool SXSRC::loadContent(BinProcessor& proc)
{
@ -73,5 +72,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

View File

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

View File

@ -31,11 +31,12 @@
*/
#include "XFS.h"
#include <Logic/Biff_records/XF.h>
#include <Logic/Biff_records/XFCRC.h>
#include <Logic/Biff_records/XFExt.h>
#include <Logic/Biff_structures/ExtProp.h>
#include "../Biff_records/XF.h"
#include "../Biff_records/XFCRC.h"
#include "../Biff_records/XFExt.h"
#include "../Biff_structures/ExtProp.h"
namespace XLS
{

View File

@ -114,6 +114,8 @@ GlobalWorkbookInfo::GlobalWorkbookInfo(const unsigned short code_page, XlsConver
cellStyleXfs_count = 0;
cellStyleDxfs_count = 0;
connectionId = 0;
defaultDigitFontSize = std::pair<float, float>(0, 0);
applicationFonts = NULL;
}

View File

@ -60,6 +60,13 @@ static const std::wstring DefaultPalette[] = {
L"00003366", L"00339966", L"00003300", L"00333300", L"00993300", L"00993366", L"00333399", L"00333333"
};
struct _sx_name
{
BaseObjectPtr name;
std::vector<BaseObjectPtr> pair;
};
class GlobalWorkbookInfo
{
public:
@ -75,7 +82,6 @@ public:
unsigned int GenerateAXESId();
unsigned short CodePage;
CRYPT::DecryptorPtr decryptor;
std::wstring password;
@ -100,6 +106,10 @@ public:
const static unsigned int initial_AXES_id = 0x2000000;
std::map<int, BaseObjectPtr> mapPivotCache;
std::vector<bool> arPivotCacheFields;
std::vector<bool> arPivotCacheFieldShortSize;
std::vector<_sx_name> arPivotSxNames;
std::map<std::wstring, std::vector<std::wstring>> mapDefineNames;
std::vector<std::wstring> arDefineNames;
std::vector<std::wstring> arExternalNames;
@ -132,6 +142,9 @@ public:
int cellStyleDxfs_count;
std::wstringstream users_Dxfs_stream;
std::wstringstream connections_stream;
int connectionId;
XlsConverter *xls_converter;

View File

@ -218,7 +218,6 @@ XlsConverter::XlsConverter(const std::wstring & xls_file, const std::wstring & _
xls_global_info->mapPivotCache.insert(std::make_pair(index, pivot_cache));
}
}
}
catch(...)
{
@ -533,6 +532,7 @@ void XlsConverter::convert(XLS::GlobalsSubstream* global)
{
convert((XLS::PIVOTCACHEDEFINITION*)global->m_arPIVOTCACHEDEFINITION[i].get());
}
xlsx_context->get_pivots_context().add_connections(xls_global_info->connections_stream.str());
}
typedef boost::unordered_map<XLS::FillInfo, int> mapFillInfo;
@ -1916,22 +1916,28 @@ void XlsConverter::convert(XLS::PIVOTVIEW * pivot_view)
{
if (pivot_view == NULL) return;
std::wstringstream strm;
pivot_view->serialize(strm);
int index_view = xlsx_context->get_pivots_context().add_view(strm.str(), pivot_view->indexCache);
if (index_view > 0)
{
xlsx_context->current_sheet().sheet_rels().add(oox::relationship(L"pvId" + std::to_wstring(index_view),
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotTable",
L"../pivotTables/pivotTable" + std::to_wstring(index_view) + L".xml"));
}
}
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());
}

View File

@ -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,20 +272,35 @@ 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_cache(i, content->get_rels());
xlsx_pivots_context_.write_cache_definitions_to(i, content->definitions());
xlsx_pivots_context_.write_cache_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);
}
}
}
}
int pivot_view_count = xlsx_pivots_context_.get_view_count();
if (pivot_view_count > 0)
{
for (int i = 0; i < pivot_view_count; i++)
{
package::pivot_table_content_ptr content = package::pivot_table_content::create();
xlsx_pivots_context_.dump_rels_view(i, content->get_rels());
xlsx_pivots_context_.write_table_view_to(i, content->content());
output_document_->get_xl_files().add_pivot_table(content);
}
}
if (xlsx_pivots_context_.is_connections())
{
std::wstringstream strm;
xlsx_pivots_context_.write_connections_to(strm);
output_document_->get_xl_files().set_connections( package::simple_element::create(L"connections.xml", strm.str()) );
}
}
output_document_->get_xl_files().set_workbook( package::simple_element::create(L"workbook.xml", strm_workbook.str()) );
output_document_->content_type().set_media(get_mediaitems());
@ -315,10 +313,8 @@ void xlsx_conversion_context::end_document()
output_document_->get_xl_files().set_vml_drawings(drawings_vml);
package::xl_comments_ptr comments = package::xl_comments::create(xlsx_comments_context_handle_.content());
output_document_->get_xl_files().set_comments(comments);
output_document_->get_xl_files().set_comments(comments);
}
}
}

View File

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

View File

@ -2423,7 +2423,7 @@ void xlsx_drawing_context::set_custom_connection(std::vector<ODRAW::MSOPOINT>& p
current_drawing_states->back()->custom_connection = points;
}
void xlsx_drawing_context::set_custom_connectionDir(std::vector<ODRAW::FixedPoint>& points)
void xlsx_drawing_context::set_custom_connectionDir(std::vector<OSHARED::FixedPoint>& points)
{
if (current_drawing_states == NULL) return;
if (current_drawing_states->empty()) return;

View File

@ -182,7 +182,7 @@ public:
std::vector<ODRAW::MSOPOINT> custom_verticles;
std::vector<ODRAW::ADJH> custom_adjustHandles;
std::vector<ODRAW::MSOPOINT> custom_connection;
std::vector<ODRAW::FixedPoint> custom_connectionDir;
std::vector<OSHARED::FixedPoint>custom_connectionDir;
std::vector<ODRAW::MSORECT> custom_inscribe;
_rect custom_rect;
@ -413,7 +413,7 @@ public:
void set_custom_adjustValues(std::vector<_CP_OPT(int)> & values);
void set_custom_path (int type_path);
void set_custom_connection (std::vector<ODRAW::MSOPOINT> & points);
void set_custom_connectionDir(std::vector<ODRAW::FixedPoint>& points);
void set_custom_connectionDir(std::vector<OSHARED::FixedPoint>& points);
void set_custom_inscribe (std::vector<ODRAW::MSORECT> & rects);
void set_custom_x_limo (int val);
void set_custom_y_limo (int val);

View File

@ -53,7 +53,6 @@ xlsx_content_types_file::xlsx_content_types_file()
content_type_.add_override(L"/_rels/.rels", L"application/vnd.openxmlformats-package.relationships+xml");
content_type_.add_override(L"/xl/_rels/workbook.xml.rels", L"application/vnd.openxmlformats-package.relationships+xml");
content_type_.add_override(L"/xl/sharedStrings.xml", L"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml");
content_type_.add_override(L"/xl/workbook.xml", L"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml");
content_type_.add_override(L"/xl/styles.xml", L"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml");
content_type_.add_override(L"/docProps/app.xml", L"application/vnd.openxmlformats-officedocument.extended-properties+xml");
@ -89,13 +88,20 @@ _CP_PTR(pivot_cache_content) pivot_cache_content::create()
{
return boost::make_shared<pivot_cache_content>();
}
//--------------------------------------------------------------------------------------------
pivot_table_content::pivot_table_content() : rels_file_(rels_file::create(L""))
{
}
_CP_PTR(pivot_table_content) pivot_table_content::create()
{
return boost::make_shared<pivot_table_content>();
}
//--------------------------------------------------------------------------------------------
sheet_content::sheet_content() : rels_(rels_file::create(L""))
{
}
//--------------------------------------------------------------------------------------------
_CP_PTR(sheet_content) sheet_content::create()
{
return boost::make_shared<sheet_content>();
@ -169,21 +175,37 @@ void xl_files::write(const std::wstring & RootPath)
std::wstring path = RootPath + FILE_SEPARATOR_STR + L"xl";
NSDirectory::CreateDirectory(path.c_str());
sheets_files_.set_rels(&rels_files_);
{
pivot_cache_files_.set_rels(&rels_files_);
pivot_cache_files_.set_main_document(get_main_document());
pivot_cache_files_.write(path);
}
{
pivot_table_files_.set_main_document(get_main_document());
pivot_table_files_.write(path);
}
sheets_files_.set_rels(&rels_files_);
sheets_files_.set_main_document( this->get_main_document() );
sheets_files_.write(path);
int index = 1;
if (true)
{
//workbook_->hyperlinks->write(path);
rels_files_.add( relationship( L"hId1", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument", L"xl/workbook.xml" ) );
}
if (sharedStrings_)
{
sharedStrings_->write(path);
rels_files_.add( relationship( L"shId1", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings", L"sharedStrings.xml" ) );
}
content_type & contentTypes = this->get_main_document()->content_type().get_content_type();
contentTypes.add_override(L"/xl/sharedStrings.xml", L"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml");
}
if (connections_)
{
connections_->write(path);
rels_files_.add( relationship( L"cnId1", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/connections", L"connections.xml" ) );
content_type & contentTypes = this->get_main_document()->content_type().get_content_type();
contentTypes.add_override(L"/xl/connections.xml", L"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml");
}
if (styles_)
{
@ -206,16 +228,11 @@ void xl_files::write(const std::wstring & RootPath)
media_->set_main_document(get_main_document());
media_->write(path);
}
{
charts_files_.set_main_document(get_main_document());
charts_files_.write(path);
}
{
pivot_cache_files_.set_rels(&rels_files_);
pivot_cache_files_.set_main_document(get_main_document());
pivot_cache_files_.write(path);
}
if (drawings_)
{
drawings_->set_main_document(get_main_document());
@ -249,6 +266,10 @@ void xl_files::set_sharedStrings(element_ptr Element)
{
sharedStrings_ = Element;
}
void xl_files::set_connections(element_ptr Element)
{
connections_ = Element;
}
void xl_files::add_sheet(sheet_content_ptr sheet)
{
@ -281,6 +302,10 @@ void xl_files::add_pivot_cache(pivot_cache_content_ptr pivot_cache)
{
pivot_cache_files_.add_pivot_cache(pivot_cache);
}
void xl_files::add_pivot_table(pivot_table_content_ptr pivot_table)
{
pivot_table_files_.add_pivot_table(pivot_table);
}
//----------------------------------------------------------------------------------------
void xl_pivot_cache_files::add_pivot_cache(pivot_cache_content_ptr pivot_cache)
{
@ -326,7 +351,7 @@ void xl_pivot_cache_files::write(const std::wstring & RootPath)
{
const std::wstring fileNameR = std::wstring(L"pivotCacheRecords") + std::to_wstring(i + 1) + L".xml";
contentTypes.add_override(std::wstring(L"/xl/pivotCache/") + fileNameR, kWSConTypeD);
contentTypes.add_override(std::wstring(L"/xl/pivotCache/") + fileNameR, kWSConTypeR);
package::simple_element(fileNameR, content_records).write(path);
}
@ -334,6 +359,41 @@ void xl_pivot_cache_files::write(const std::wstring & RootPath)
}
}
//----------------------------------------------------------------------------------------
void xl_pivot_table_files::add_pivot_table(pivot_table_content_ptr pivot_table)
{
pivot_tables_.push_back(pivot_table);
}
void xl_pivot_table_files::write(const std::wstring & RootPath)
{
std::wstring path = RootPath + FILE_SEPARATOR_STR + L"pivotTables";
NSDirectory::CreateDirectory(path.c_str());
content_type & contentTypes = this->get_main_document()->content_type().get_content_type();
static const std::wstring kWSConType = L"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml";
for (size_t i = 0; i < pivot_tables_.size(); i++)
{
if (pivot_tables_[i])
{
const std::wstring fileName = std::wstring(L"pivotTable") + std::to_wstring(i + 1) + L".xml";
contentTypes.add_override(std::wstring(L"/xl/pivotTables/") + fileName, kWSConType);
package::simple_element(fileName, pivot_tables_[i]->str()).write(path);
if (pivot_tables_[i]->get_rels().empty() == false)
{
rels_files relFiles;
pivot_tables_[i]->rels_file_->set_file_name(fileName + L".rels");
relFiles.add_rel_file(pivot_tables_[i]->rels_file_);
relFiles.write(path);
}
}
}
}
//----------------------------------------------------------------------------------------
void xl_charts_files::add_chart(chart_content_ptr chart)
{
charts_.push_back(chart);

View File

@ -89,6 +89,26 @@ private:
rels_file_ptr definitions_rels_file_;
};
//------------------------------------------------------------------------
class pivot_table_content;
typedef _CP_PTR(pivot_table_content) pivot_table_content_ptr;
class pivot_table_content : boost::noncopyable
{
public:
pivot_table_content();
static _CP_PTR(pivot_table_content) create();
std::wostream & content() { return content_; }
rels & get_rels() { return rels_file_->get_rels(); }
std::wstring str() { return content_.str(); }
friend class xl_pivot_table_files;
private:
std::wstringstream content_;
rels_file_ptr rels_file_;
};
//------------------------------------------------------------------------
class sheets_files : public element
{
public:
@ -119,7 +139,16 @@ public:
std::vector<chart_content_ptr> charts_;
};
class xl_pivot_table_files : public element
{
public:
xl_pivot_table_files(){}
void add_pivot_table(pivot_table_content_ptr pivot_table);
virtual void write(const std::wstring & RootPath);
std::vector<pivot_table_content_ptr> pivot_tables_;
};
class xl_pivot_cache_files : public element
{
public:
@ -194,23 +223,26 @@ public:
void set_workbook (element_ptr Element);
void set_styles (element_ptr Element);
void set_sharedStrings (element_ptr Element);
void set_connections (element_ptr Element);
void add_sheet (sheet_content_ptr sheet);
void set_media (external_items & _Mediaitems);
void set_drawings (element_ptr Element);
void set_vml_drawings (element_ptr Element);
void set_comments (element_ptr Element);
void add_charts (chart_content_ptr chart);
void add_pivot_cache (pivot_cache_content_ptr pivot);
void add_pivot_cache (pivot_cache_content_ptr cache);
void add_pivot_table (pivot_table_content_ptr table);
private:
rels_files rels_files_;
sheets_files sheets_files_;
xl_charts_files charts_files_;
xl_pivot_cache_files pivot_cache_files_;
xl_pivot_table_files pivot_table_files_;
element_ptr theme_;
element_ptr workbook_;
element_ptr connections_;
element_ptr styles_;
element_ptr sharedStrings_;
element_ptr media_;

View File

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

View File

@ -0,0 +1,149 @@
/*
* (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_;
};
struct _pivot_view
{
std::wstring data_;
int indexCache_;
};
Impl() {}
std::vector<_pivot_cache> caches_;
std::vector<_pivot_view> views_;
std::wstring connections_;
};
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();
}
bool xlsx_pivots_context::is_connections()
{
return !impl_->connections_.empty();
}
void xlsx_pivots_context::dump_rels_cache(int index, rels & Rels)
{
if (impl_->caches_[index].recordsData_.empty() == false)
{
Rels.add(relationship(L"rId1",
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheRecords",
L"pivotCacheRecords" + std::to_wstring(index + 1) + L".xml", L""));
}
}
void xlsx_pivots_context::dump_rels_view(int index, rels & Rels)
{
if (impl_->views_[index].indexCache_ >= 0)
{
Rels.add(relationship(L"rId1",
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotCacheDefinition",
L"../pivotCache/pivotCacheDefinition" + std::to_wstring(impl_->views_[index].indexCache_ + 1) + L".xml", L""));
}
}
void xlsx_pivots_context::write_cache_definitions_to(int index, std::wostream & strm)
{
strm << impl_->caches_[index].definitionsData_;
}
void xlsx_pivots_context::write_connections_to(std::wostream & strm)
{
CP_XML_WRITER(strm)
{
CP_XML_NODE(L"connections")
{
CP_XML_ATTR(L"xmlns", L"http://schemas.openxmlformats.org/spreadsheetml/2006/main");
CP_XML_STREAM() << impl_->connections_;
}
}
}
void xlsx_pivots_context::write_cache_records_to(int index, std::wostream & strm)
{
strm << impl_->caches_[index].recordsData_;
}
void xlsx_pivots_context::write_table_view_to(int index, std::wostream & strm)
{
strm << impl_->views_[index].data_;
}
int xlsx_pivots_context::add_view(std::wstring table_view, int indexCache)
{
if (table_view.empty()) return 0;
Impl::_pivot_view v = {table_view, indexCache};
impl_->views_.push_back(v);
return (int)impl_->views_.size();
}
void xlsx_pivots_context::add_connections(std::wstring connections)
{
if (connections.empty()) return;
impl_->connections_ = connections;
}
int xlsx_pivots_context::get_view_count()
{
return (int)impl_->views_.size();
}
xlsx_pivots_context::~xlsx_pivots_context()
{
}
}

View File

@ -37,28 +37,30 @@ 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();
int add_view(std::wstring table_view, int indexCache);
int get_view_count();
void write_to(std::wostream & strm);
void write_records_to(std::wostream & strm);
void add_cache(std::wstring definitions, std::wstring records);
int get_cache_count();
void dump_rels(rels & Rels);
void write_cache_definitions_to (int index, std::wostream & strm);
void write_cache_records_to (int index, std::wostream & strm);
void write_connections_to (std::wostream & strm);
static xlsx_pivot_cache_context_ptr create();
//void add_rels( bool isInternal,
// std::wstring const & rid,
// std::wstring const & target,
// external_items::Type type);
void write_table_view_to (int index, std::wostream & strm);
void dump_rels_cache(int index, rels & Rels);
void dump_rels_view (int index, rels & Rels);
void add_connections(std::wstring connections);
bool is_connections();
bool isRecordsPresent;
int index;
private:
class Impl;
_CP_PTR(Impl) impl_;

View File

@ -840,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 \
@ -1598,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 \

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +0,0 @@
@CMAKE_CONFIGURABLE_FILE_CONTENT@

View File

@ -1,535 +0,0 @@
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://curl.haxx.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
***************************************************************************/
#ifdef TIME_WITH_SYS_TIME
/* Time with sys/time test */
#include <sys/types.h>
#include <sys/time.h>
#include <time.h>
int
main ()
{
if ((struct tm *) 0)
return 0;
;
return 0;
}
#endif
#ifdef HAVE_FCNTL_O_NONBLOCK
/* headers for FCNTL_O_NONBLOCK test */
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
/* */
#if defined(sun) || defined(__sun__) || \
defined(__SUNPRO_C) || defined(__SUNPRO_CC)
# if defined(__SVR4) || defined(__srv4__)
# define PLATFORM_SOLARIS
# else
# define PLATFORM_SUNOS4
# endif
#endif
#if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX41)
# define PLATFORM_AIX_V3
#endif
/* */
#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) || defined(__BEOS__)
#error "O_NONBLOCK does not work on this platform"
#endif
int
main ()
{
/* O_NONBLOCK source test */
int flags = 0;
if(0 != fcntl(0, F_SETFL, flags | O_NONBLOCK))
return 1;
return 0;
}
#endif
/* tests for gethostbyaddr_r or gethostbyname_r */
#if defined(HAVE_GETHOSTBYADDR_R_5_REENTRANT) || \
defined(HAVE_GETHOSTBYADDR_R_7_REENTRANT) || \
defined(HAVE_GETHOSTBYADDR_R_8_REENTRANT) || \
defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT) || \
defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) || \
defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
# define _REENTRANT
/* no idea whether _REENTRANT is always set, just invent a new flag */
# define TEST_GETHOSTBYFOO_REENTRANT
#endif
#if defined(HAVE_GETHOSTBYADDR_R_5) || \
defined(HAVE_GETHOSTBYADDR_R_7) || \
defined(HAVE_GETHOSTBYADDR_R_8) || \
defined(HAVE_GETHOSTBYNAME_R_3) || \
defined(HAVE_GETHOSTBYNAME_R_5) || \
defined(HAVE_GETHOSTBYNAME_R_6) || \
defined(TEST_GETHOSTBYFOO_REENTRANT)
#include <sys/types.h>
#include <netdb.h>
int main(void)
{
char *address = "example.com";
int length = 0;
int type = 0;
struct hostent h;
int rc = 0;
#if defined(HAVE_GETHOSTBYADDR_R_5) || \
defined(HAVE_GETHOSTBYADDR_R_5_REENTRANT) || \
\
defined(HAVE_GETHOSTBYNAME_R_3) || \
defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT)
struct hostent_data hdata;
#elif defined(HAVE_GETHOSTBYADDR_R_7) || \
defined(HAVE_GETHOSTBYADDR_R_7_REENTRANT) || \
defined(HAVE_GETHOSTBYADDR_R_8) || \
defined(HAVE_GETHOSTBYADDR_R_8_REENTRANT) || \
\
defined(HAVE_GETHOSTBYNAME_R_5) || \
defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) || \
defined(HAVE_GETHOSTBYNAME_R_6) || \
defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
char buffer[8192];
int h_errnop;
struct hostent *hp;
#endif
#ifndef gethostbyaddr_r
(void)gethostbyaddr_r;
#endif
#if defined(HAVE_GETHOSTBYADDR_R_5) || \
defined(HAVE_GETHOSTBYADDR_R_5_REENTRANT)
rc = gethostbyaddr_r(address, length, type, &h, &hdata);
#elif defined(HAVE_GETHOSTBYADDR_R_7) || \
defined(HAVE_GETHOSTBYADDR_R_7_REENTRANT)
hp = gethostbyaddr_r(address, length, type, &h, buffer, 8192, &h_errnop);
(void)hp;
#elif defined(HAVE_GETHOSTBYADDR_R_8) || \
defined(HAVE_GETHOSTBYADDR_R_8_REENTRANT)
rc = gethostbyaddr_r(address, length, type, &h, buffer, 8192, &hp, &h_errnop);
#endif
#if defined(HAVE_GETHOSTBYNAME_R_3) || \
defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT)
rc = gethostbyname_r(address, &h, &hdata);
#elif defined(HAVE_GETHOSTBYNAME_R_5) || \
defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT)
rc = gethostbyname_r(address, &h, buffer, 8192, 0, &h_errnop);
(void)hp; /* not used for test */
#elif defined(HAVE_GETHOSTBYNAME_R_6) || \
defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
rc = gethostbyname_r(address, &h, buffer, 8192, &hp, &h_errnop);
#endif
(void)length;
(void)type;
(void)rc;
return 0;
}
#endif
#ifdef HAVE_SOCKLEN_T
#ifdef _WIN32
#include <ws2tcpip.h>
#else
#include <sys/types.h>
#include <sys/socket.h>
#endif
int
main ()
{
if ((socklen_t *) 0)
return 0;
if (sizeof (socklen_t))
return 0;
;
return 0;
}
#endif
#ifdef HAVE_IN_ADDR_T
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
int
main ()
{
if ((in_addr_t *) 0)
return 0;
if (sizeof (in_addr_t))
return 0;
;
return 0;
}
#endif
#ifdef HAVE_BOOL_T
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_STDBOOL_H
#include <stdbool.h>
#endif
int
main ()
{
if (sizeof (bool *) )
return 0;
;
return 0;
}
#endif
#ifdef STDC_HEADERS
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <float.h>
int main() { return 0; }
#endif
#ifdef RETSIGTYPE_TEST
#include <sys/types.h>
#include <signal.h>
#ifdef signal
# undef signal
#endif
#ifdef __cplusplus
extern "C" void (*signal (int, void (*)(int)))(int);
#else
void (*signal ()) ();
#endif
int
main ()
{
return 0;
}
#endif
#ifdef HAVE_INET_NTOA_R_DECL
#include <arpa/inet.h>
typedef void (*func_type)();
int main()
{
#ifndef inet_ntoa_r
func_type func;
func = (func_type)inet_ntoa_r;
#endif
return 0;
}
#endif
#ifdef HAVE_INET_NTOA_R_DECL_REENTRANT
#define _REENTRANT
#include <arpa/inet.h>
typedef void (*func_type)();
int main()
{
#ifndef inet_ntoa_r
func_type func;
func = (func_type)&inet_ntoa_r;
#endif
return 0;
}
#endif
#ifdef HAVE_GETADDRINFO
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
int main(void) {
struct addrinfo hints, *ai;
int error;
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
#ifndef getaddrinfo
(void)getaddrinfo;
#endif
error = getaddrinfo("127.0.0.1", "8080", &hints, &ai);
if (error) {
return 1;
}
return 0;
}
#endif
#ifdef HAVE_FILE_OFFSET_BITS
#ifdef _FILE_OFFSET_BITS
#undef _FILE_OFFSET_BITS
#endif
#define _FILE_OFFSET_BITS 64
#include <sys/types.h>
/* Check that off_t can represent 2**63 - 1 correctly.
We can't simply define LARGE_OFF_T to be 9223372036854775807,
since some C++ compilers masquerading as C compilers
incorrectly reject 9223372036854775807. */
#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
&& LARGE_OFF_T % 2147483647 == 1)
? 1 : -1];
int main () { ; return 0; }
#endif
#ifdef HAVE_IOCTLSOCKET
/* includes start */
#ifdef HAVE_WINDOWS_H
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
# include <windows.h>
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# else
# ifdef HAVE_WINSOCK_H
# include <winsock.h>
# endif
# endif
#endif
int
main ()
{
/* ioctlsocket source code */
int socket;
unsigned long flags = ioctlsocket(socket, FIONBIO, &flags);
;
return 0;
}
#endif
#ifdef HAVE_IOCTLSOCKET_CAMEL
/* includes start */
#ifdef HAVE_WINDOWS_H
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
# include <windows.h>
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# else
# ifdef HAVE_WINSOCK_H
# include <winsock.h>
# endif
# endif
#endif
int
main ()
{
/* IoctlSocket source code */
if(0 != IoctlSocket(0, 0, 0))
return 1;
;
return 0;
}
#endif
#ifdef HAVE_IOCTLSOCKET_CAMEL_FIONBIO
/* includes start */
#ifdef HAVE_WINDOWS_H
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
# include <windows.h>
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# else
# ifdef HAVE_WINSOCK_H
# include <winsock.h>
# endif
# endif
#endif
int
main ()
{
/* IoctlSocket source code */
long flags = 0;
if(0 != ioctlsocket(0, FIONBIO, &flags))
return 1;
;
return 0;
}
#endif
#ifdef HAVE_IOCTLSOCKET_FIONBIO
/* includes start */
#ifdef HAVE_WINDOWS_H
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
# include <windows.h>
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# else
# ifdef HAVE_WINSOCK_H
# include <winsock.h>
# endif
# endif
#endif
int
main ()
{
int flags = 0;
if(0 != ioctlsocket(0, FIONBIO, &flags))
return 1;
;
return 0;
}
#endif
#ifdef HAVE_IOCTL_FIONBIO
/* headers for FIONBIO test */
/* includes start */
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_SYS_IOCTL_H
# include <sys/ioctl.h>
#endif
#ifdef HAVE_STROPTS_H
# include <stropts.h>
#endif
int
main ()
{
int flags = 0;
if(0 != ioctl(0, FIONBIO, &flags))
return 1;
;
return 0;
}
#endif
#ifdef HAVE_IOCTL_SIOCGIFADDR
/* headers for FIONBIO test */
/* includes start */
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_SYS_IOCTL_H
# include <sys/ioctl.h>
#endif
#ifdef HAVE_STROPTS_H
# include <stropts.h>
#endif
#include <net/if.h>
int
main ()
{
struct ifreq ifr;
if(0 != ioctl(0, SIOCGIFADDR, &ifr))
return 1;
;
return 0;
}
#endif
#ifdef HAVE_SETSOCKOPT_SO_NONBLOCK
/* includes start */
#ifdef HAVE_WINDOWS_H
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
# include <windows.h>
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# else
# ifdef HAVE_WINSOCK_H
# include <winsock.h>
# endif
# endif
#endif
/* includes start */
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
/* includes end */
int
main ()
{
if(0 != setsockopt(0, SOL_SOCKET, SO_NONBLOCK, 0, 0))
return 1;
;
return 0;
}
#endif
#ifdef HAVE_GLIBC_STRERROR_R
#include <string.h>
#include <errno.h>
int
main () {
char buffer[1024]; /* big enough to play with */
char *string =
strerror_r(EACCES, buffer, sizeof(buffer));
/* this should've returned a string */
if(!string || !string[0])
return 99;
return 0;
}
#endif
#ifdef HAVE_POSIX_STRERROR_R
#include <string.h>
#include <errno.h>
int
main () {
char buffer[1024]; /* big enough to play with */
int error =
strerror_r(EACCES, buffer, sizeof(buffer));
/* This should've returned zero, and written an error string in the
buffer.*/
if(!buffer[0] || error)
return 99;
return 0;
}
#endif

View File

@ -1,289 +0,0 @@
# - Try to find the GSS Kerberos library
# Once done this will define
#
# GSS_ROOT_DIR - Set this variable to the root installation of GSS
#
# Read-Only variables:
# GSS_FOUND - system has the Heimdal library
# GSS_FLAVOUR - "MIT" or "Heimdal" if anything found.
# GSS_INCLUDE_DIR - the Heimdal include directory
# GSS_LIBRARIES - The libraries needed to use GSS
# GSS_LINK_DIRECTORIES - Directories to add to linker search path
# GSS_LINKER_FLAGS - Additional linker flags
# GSS_COMPILER_FLAGS - Additional compiler flags
# GSS_VERSION - This is set to version advertised by pkg-config or read from manifest.
# In case the library is found but no version info availabe it'll be set to "unknown"
set(_MIT_MODNAME mit-krb5-gssapi)
set(_HEIMDAL_MODNAME heimdal-gssapi)
include(CheckIncludeFile)
include(CheckIncludeFiles)
include(CheckTypeSize)
set(_GSS_ROOT_HINTS
"${GSS_ROOT_DIR}"
"$ENV{GSS_ROOT_DIR}"
)
# try to find library using system pkg-config if user didn't specify root dir
if(NOT GSS_ROOT_DIR AND NOT "$ENV{GSS_ROOT_DIR}")
if(UNIX)
find_package(PkgConfig QUIET)
pkg_search_module(_GSS_PKG ${_MIT_MODNAME} ${_HEIMDAL_MODNAME})
list(APPEND _GSS_ROOT_HINTS "${_GSS_PKG_PREFIX}")
elseif(WIN32)
list(APPEND _GSS_ROOT_HINTS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MIT\\Kerberos;InstallDir]")
endif()
endif()
if(NOT _GSS_FOUND) #not found by pkg-config. Let's take more traditional approach.
find_file(_GSS_CONFIGURE_SCRIPT
NAMES
"krb5-config"
HINTS
${_GSS_ROOT_HINTS}
PATH_SUFFIXES
bin
NO_CMAKE_PATH
NO_CMAKE_ENVIRONMENT_PATH
)
# if not found in user-supplied directories, maybe system knows better
find_file(_GSS_CONFIGURE_SCRIPT
NAMES
"krb5-config"
PATH_SUFFIXES
bin
)
if(_GSS_CONFIGURE_SCRIPT)
execute_process(
COMMAND ${_GSS_CONFIGURE_SCRIPT} "--cflags" "gssapi"
OUTPUT_VARIABLE _GSS_CFLAGS
RESULT_VARIABLE _GSS_CONFIGURE_FAILED
)
message(STATUS "CFLAGS: ${_GSS_CFLAGS}")
if(NOT _GSS_CONFIGURE_FAILED) # 0 means success
# should also work in an odd case when multiple directories are given
string(STRIP "${_GSS_CFLAGS}" _GSS_CFLAGS)
string(REGEX REPLACE " +-I" ";" _GSS_CFLAGS "${_GSS_CFLAGS}")
string(REGEX REPLACE " +-([^I][^ \\t;]*)" ";-\\1"_GSS_CFLAGS "${_GSS_CFLAGS}")
foreach(_flag ${_GSS_CFLAGS})
if(_flag MATCHES "^-I.*")
string(REGEX REPLACE "^-I" "" _val "${_flag}")
list(APPEND _GSS_INCLUDE_DIR "${_val}")
else()
list(APPEND _GSS_COMPILER_FLAGS "${_flag}")
endif()
endforeach()
endif()
execute_process(
COMMAND ${_GSS_CONFIGURE_SCRIPT} "--libs" "gssapi"
OUTPUT_VARIABLE _GSS_LIB_FLAGS
RESULT_VARIABLE _GSS_CONFIGURE_FAILED
)
message(STATUS "LDFLAGS: ${_GSS_LIB_FLAGS}")
if(NOT _GSS_CONFIGURE_FAILED) # 0 means success
# this script gives us libraries and link directories. Blah. We have to deal with it.
string(STRIP "${_GSS_LIB_FLAGS}" _GSS_LIB_FLAGS)
string(REGEX REPLACE " +-(L|l)" ";-\\1" _GSS_LIB_FLAGS "${_GSS_LIB_FLAGS}")
string(REGEX REPLACE " +-([^Ll][^ \\t;]*)" ";-\\1"_GSS_LIB_FLAGS "${_GSS_LIB_FLAGS}")
foreach(_flag ${_GSS_LIB_FLAGS})
if(_flag MATCHES "^-l.*")
string(REGEX REPLACE "^-l" "" _val "${_flag}")
list(APPEND _GSS_LIBRARIES "${_val}")
elseif(_flag MATCHES "^-L.*")
string(REGEX REPLACE "^-L" "" _val "${_flag}")
list(APPEND _GSS_LINK_DIRECTORIES "${_val}")
else()
list(APPEND _GSS_LINKER_FLAGS "${_flag}")
endif()
endforeach()
endif()
execute_process(
COMMAND ${_GSS_CONFIGURE_SCRIPT} "--version"
OUTPUT_VARIABLE _GSS_VERSION
RESULT_VARIABLE _GSS_CONFIGURE_FAILED
)
# older versions may not have the "--version" parameter. In this case we just don't care.
if(_GSS_CONFIGURE_FAILED)
set(_GSS_VERSION 0)
endif()
execute_process(
COMMAND ${_GSS_CONFIGURE_SCRIPT} "--vendor"
OUTPUT_VARIABLE _GSS_VENDOR
RESULT_VARIABLE _GSS_CONFIGURE_FAILED
)
# older versions may not have the "--vendor" parameter. In this case we just don't care.
if(_GSS_CONFIGURE_FAILED)
set(GSS_FLAVOUR "Heimdal") # most probably, shouldn't really matter
else()
if(_GSS_VENDOR MATCHES ".*H|heimdal.*")
set(GSS_FLAVOUR "Heimdal")
else()
set(GSS_FLAVOUR "MIT")
endif()
endif()
else() # either there is no config script or we are on platform that doesn't provide one (Windows?)
find_path(_GSS_INCLUDE_DIR
NAMES
"gssapi/gssapi.h"
HINTS
${_GSS_ROOT_HINTS}
PATH_SUFFIXES
include
inc
)
if(_GSS_INCLUDE_DIR) #jay, we've found something
set(CMAKE_REQUIRED_INCLUDES "${_GSS_INCLUDE_DIR}")
check_include_files( "gssapi/gssapi_generic.h;gssapi/gssapi_krb5.h" _GSS_HAVE_MIT_HEADERS)
if(_GSS_HAVE_MIT_HEADERS)
set(GSS_FLAVOUR "MIT")
else()
# prevent compiling the header - just check if we can include it
set(CMAKE_REQUIRED_DEFINITIONS "-D__ROKEN_H__")
check_include_file( "roken.h" _GSS_HAVE_ROKEN_H)
check_include_file( "heimdal/roken.h" _GSS_HAVE_HEIMDAL_ROKEN_H)
if(_GSS_HAVE_ROKEN_H OR _GSS_HAVE_HEIMDAL_ROKEN_H)
set(GSS_FLAVOUR "Heimdal")
endif()
set(CMAKE_REQUIRED_DEFINITIONS "")
endif()
else()
# I'm not convienced if this is the right way but this is what autotools do at the moment
find_path(_GSS_INCLUDE_DIR
NAMES
"gssapi.h"
HINTS
${_GSS_ROOT_HINTS}
PATH_SUFFIXES
include
inc
)
if(_GSS_INCLUDE_DIR)
set(GSS_FLAVOUR "Heimdal")
endif()
endif()
# if we have headers, check if we can link libraries
if(GSS_FLAVOUR)
set(_GSS_LIBDIR_SUFFIXES "")
set(_GSS_LIBDIR_HINTS ${_GSS_ROOT_HINTS})
get_filename_component(_GSS_CALCULATED_POTENTIAL_ROOT "${_GSS_INCLUDE_DIR}" PATH)
list(APPEND _GSS_LIBDIR_HINTS ${_GSS_CALCULATED_POTENTIAL_ROOT})
if(WIN32)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
list(APPEND _GSS_LIBDIR_SUFFIXES "lib/AMD64")
if(GSS_FLAVOUR STREQUAL "MIT")
set(_GSS_LIBNAME "gssapi64")
else()
set(_GSS_LIBNAME "libgssapi")
endif()
else()
list(APPEND _GSS_LIBDIR_SUFFIXES "lib/i386")
if(GSS_FLAVOUR STREQUAL "MIT")
set(_GSS_LIBNAME "gssapi32")
else()
set(_GSS_LIBNAME "libgssapi")
endif()
endif()
else()
list(APPEND _GSS_LIBDIR_SUFFIXES "lib;lib64") # those suffixes are not checked for HINTS
if(GSS_FLAVOUR STREQUAL "MIT")
set(_GSS_LIBNAME "gssapi_krb5")
else()
set(_GSS_LIBNAME "gssapi")
endif()
endif()
find_library(_GSS_LIBRARIES
NAMES
${_GSS_LIBNAME}
HINTS
${_GSS_LIBDIR_HINTS}
PATH_SUFFIXES
${_GSS_LIBDIR_SUFFIXES}
)
endif()
endif()
else()
if(_GSS_PKG_${_MIT_MODNAME}_VERSION)
set(GSS_FLAVOUR "MIT")
set(_GSS_VERSION _GSS_PKG_${_MIT_MODNAME}_VERSION)
else()
set(GSS_FLAVOUR "Heimdal")
set(_GSS_VERSION _GSS_PKG_${_MIT_HEIMDAL}_VERSION)
endif()
endif()
set(GSS_INCLUDE_DIR ${_GSS_INCLUDE_DIR})
set(GSS_LIBRARIES ${_GSS_LIBRARIES})
set(GSS_LINK_DIRECTORIES ${_GSS_LINK_DIRECTORIES})
set(GSS_LINKER_FLAGS ${_GSS_LINKER_FLAGS})
set(GSS_COMPILER_FLAGS ${_GSS_COMPILER_FLAGS})
set(GSS_VERSION ${_GSS_VERSION})
if(GSS_FLAVOUR)
if(NOT GSS_VERSION AND GSS_FLAVOUR STREQUAL "Heimdal")
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(HEIMDAL_MANIFEST_FILE "Heimdal.Application.amd64.manifest")
else()
set(HEIMDAL_MANIFEST_FILE "Heimdal.Application.x86.manifest")
endif()
if(EXISTS "${GSS_INCLUDE_DIR}/${HEIMDAL_MANIFEST_FILE}")
file(STRINGS "${GSS_INCLUDE_DIR}/${HEIMDAL_MANIFEST_FILE}" heimdal_version_str
REGEX "^.*version=\"[0-9]\\.[^\"]+\".*$")
string(REGEX MATCH "[0-9]\\.[^\"]+"
GSS_VERSION "${heimdal_version_str}")
endif()
if(NOT GSS_VERSION)
set(GSS_VERSION "Heimdal Unknown")
endif()
elseif(NOT GSS_VERSION AND GSS_FLAVOUR STREQUAL "MIT")
get_filename_component(_MIT_VERSION "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MIT\\Kerberos\\SDK\\CurrentVersion;VersionString]" NAME CACHE)
if(WIN32 AND _MIT_VERSION)
set(GSS_VERSION "${_MIT_VERSION}")
else()
set(GSS_VERSION "MIT Unknown")
endif()
endif()
endif()
include(FindPackageHandleStandardArgs)
set(_GSS_REQUIRED_VARS GSS_LIBRARIES GSS_FLAVOUR)
find_package_handle_standard_args(GSS
REQUIRED_VARS
${_GSS_REQUIRED_VARS}
VERSION_VAR
GSS_VERSION
FAIL_MESSAGE
"Could NOT find GSS, try to set the path to GSS root folder in the system variable GSS_ROOT_DIR"
)
mark_as_advanced(GSS_INCLUDE_DIR GSS_LIBRARIES)

View File

@ -1,95 +0,0 @@
#File defines convenience macros for available feature testing
# This macro checks if the symbol exists in the library and if it
# does, it prepends library to the list. It is intended to be called
# multiple times with a sequence of possibly dependent libraries in
# order of least-to-most-dependent. Some libraries depend on others
# to link correctly.
macro(CHECK_LIBRARY_EXISTS_CONCAT LIBRARY SYMBOL VARIABLE)
check_library_exists("${LIBRARY};${CURL_LIBS}" ${SYMBOL} "${CMAKE_LIBRARY_PATH}"
${VARIABLE})
if(${VARIABLE})
set(CURL_LIBS ${LIBRARY} ${CURL_LIBS})
endif(${VARIABLE})
endmacro(CHECK_LIBRARY_EXISTS_CONCAT)
# Check if header file exists and add it to the list.
# This macro is intended to be called multiple times with a sequence of
# possibly dependent header files. Some headers depend on others to be
# compiled correctly.
macro(CHECK_INCLUDE_FILE_CONCAT FILE VARIABLE)
check_include_files("${CURL_INCLUDES};${FILE}" ${VARIABLE})
if(${VARIABLE})
set(CURL_INCLUDES ${CURL_INCLUDES} ${FILE})
set(CURL_TEST_DEFINES "${CURL_TEST_DEFINES} -D${VARIABLE}")
endif(${VARIABLE})
endmacro(CHECK_INCLUDE_FILE_CONCAT)
# For other curl specific tests, use this macro.
macro(CURL_INTERNAL_TEST CURL_TEST)
if(NOT DEFINED "${CURL_TEST}")
set(MACRO_CHECK_FUNCTION_DEFINITIONS
"-D${CURL_TEST} ${CURL_TEST_DEFINES} ${CMAKE_REQUIRED_FLAGS}")
if(CMAKE_REQUIRED_LIBRARIES)
set(CURL_TEST_ADD_LIBRARIES
"-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
endif(CMAKE_REQUIRED_LIBRARIES)
message(STATUS "Performing Curl Test ${CURL_TEST}")
try_compile(${CURL_TEST}
${CMAKE_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/CMake/CurlTests.c
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
"${CURL_TEST_ADD_LIBRARIES}"
OUTPUT_VARIABLE OUTPUT)
if(${CURL_TEST})
set(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}")
message(STATUS "Performing Curl Test ${CURL_TEST} - Success")
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
"Performing Curl Test ${CURL_TEST} passed with the following output:\n"
"${OUTPUT}\n")
else(${CURL_TEST})
message(STATUS "Performing Curl Test ${CURL_TEST} - Failed")
set(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}")
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
"Performing Curl Test ${CURL_TEST} failed with the following output:\n"
"${OUTPUT}\n")
endif(${CURL_TEST})
endif()
endmacro(CURL_INTERNAL_TEST)
macro(CURL_INTERNAL_TEST_RUN CURL_TEST)
if(NOT DEFINED "${CURL_TEST}_COMPILE")
set(MACRO_CHECK_FUNCTION_DEFINITIONS
"-D${CURL_TEST} ${CMAKE_REQUIRED_FLAGS}")
if(CMAKE_REQUIRED_LIBRARIES)
set(CURL_TEST_ADD_LIBRARIES
"-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}")
endif(CMAKE_REQUIRED_LIBRARIES)
message(STATUS "Performing Curl Test ${CURL_TEST}")
try_run(${CURL_TEST} ${CURL_TEST}_COMPILE
${CMAKE_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/CMake/CurlTests.c
CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS}
"${CURL_TEST_ADD_LIBRARIES}"
OUTPUT_VARIABLE OUTPUT)
if(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
set(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}")
message(STATUS "Performing Curl Test ${CURL_TEST} - Success")
else(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
message(STATUS "Performing Curl Test ${CURL_TEST} - Failed")
set(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}")
file(APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
"Performing Curl Test ${CURL_TEST} failed with the following output:\n"
"${OUTPUT}")
if(${CURL_TEST}_COMPILE)
file(APPEND
"${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
"There was a problem running this test\n")
endif(${CURL_TEST}_COMPILE)
file(APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log"
"\n\n")
endif(${CURL_TEST}_COMPILE AND NOT ${CURL_TEST})
endif()
endmacro(CURL_INTERNAL_TEST_RUN)

View File

@ -1,229 +0,0 @@
include(CheckCSourceCompiles)
# The begin of the sources (macros and includes)
set(_source_epilogue "#undef inline")
macro(add_header_include check header)
if(${check})
set(_source_epilogue "${_source_epilogue}\n#include <${header}>")
endif(${check})
endmacro(add_header_include)
set(signature_call_conv)
if(HAVE_WINDOWS_H)
add_header_include(HAVE_WINDOWS_H "windows.h")
add_header_include(HAVE_WINSOCK2_H "winsock2.h")
add_header_include(HAVE_WINSOCK_H "winsock.h")
set(_source_epilogue
"${_source_epilogue}\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif")
set(signature_call_conv "PASCAL")
if(HAVE_LIBWS2_32)
set(CMAKE_REQUIRED_LIBRARIES ws2_32)
endif()
else(HAVE_WINDOWS_H)
add_header_include(HAVE_SYS_TYPES_H "sys/types.h")
add_header_include(HAVE_SYS_SOCKET_H "sys/socket.h")
endif(HAVE_WINDOWS_H)
check_c_source_compiles("${_source_epilogue}
int main(void) {
recv(0, 0, 0, 0);
return 0;
}" curl_cv_recv)
if(curl_cv_recv)
if(NOT DEFINED curl_cv_func_recv_args OR "${curl_cv_func_recv_args}" STREQUAL "unknown")
foreach(recv_retv "int" "ssize_t" )
foreach(recv_arg1 "int" "ssize_t" "SOCKET")
foreach(recv_arg2 "void *" "char *")
foreach(recv_arg3 "size_t" "int" "socklen_t" "unsigned int")
foreach(recv_arg4 "int" "unsigned int")
if(NOT curl_cv_func_recv_done)
unset(curl_cv_func_recv_test CACHE)
check_c_source_compiles("
${_source_epilogue}
extern ${recv_retv} ${signature_call_conv}
recv(${recv_arg1}, ${recv_arg2}, ${recv_arg3}, ${recv_arg4});
int main(void) {
${recv_arg1} s=0;
${recv_arg2} buf=0;
${recv_arg3} len=0;
${recv_arg4} flags=0;
${recv_retv} res = recv(s, buf, len, flags);
(void) res;
return 0;
}"
curl_cv_func_recv_test)
message(STATUS
"Tested: ${recv_retv} recv(${recv_arg1}, ${recv_arg2}, ${recv_arg3}, ${recv_arg4})")
if(curl_cv_func_recv_test)
set(curl_cv_func_recv_args
"${recv_arg1},${recv_arg2},${recv_arg3},${recv_arg4},${recv_retv}")
set(RECV_TYPE_ARG1 "${recv_arg1}")
set(RECV_TYPE_ARG2 "${recv_arg2}")
set(RECV_TYPE_ARG3 "${recv_arg3}")
set(RECV_TYPE_ARG4 "${recv_arg4}")
set(RECV_TYPE_RETV "${recv_retv}")
set(HAVE_RECV 1)
set(curl_cv_func_recv_done 1)
endif(curl_cv_func_recv_test)
endif(NOT curl_cv_func_recv_done)
endforeach(recv_arg4)
endforeach(recv_arg3)
endforeach(recv_arg2)
endforeach(recv_arg1)
endforeach(recv_retv)
else()
string(REGEX REPLACE "^([^,]*),[^,]*,[^,]*,[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG1 "${curl_cv_func_recv_args}")
string(REGEX REPLACE "^[^,]*,([^,]*),[^,]*,[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG2 "${curl_cv_func_recv_args}")
string(REGEX REPLACE "^[^,]*,[^,]*,([^,]*),[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG3 "${curl_cv_func_recv_args}")
string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,([^,]*),[^,]*$" "\\1" RECV_TYPE_ARG4 "${curl_cv_func_recv_args}")
string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,[^,]*,([^,]*)$" "\\1" RECV_TYPE_RETV "${curl_cv_func_recv_args}")
endif()
if("${curl_cv_func_recv_args}" STREQUAL "unknown")
message(FATAL_ERROR "Cannot find proper types to use for recv args")
endif("${curl_cv_func_recv_args}" STREQUAL "unknown")
else(curl_cv_recv)
message(FATAL_ERROR "Unable to link function recv")
endif(curl_cv_recv)
set(curl_cv_func_recv_args "${curl_cv_func_recv_args}" CACHE INTERNAL "Arguments for recv")
set(HAVE_RECV 1)
check_c_source_compiles("${_source_epilogue}
int main(void) {
send(0, 0, 0, 0);
return 0;
}" curl_cv_send)
if(curl_cv_send)
if(NOT DEFINED curl_cv_func_send_args OR "${curl_cv_func_send_args}" STREQUAL "unknown")
foreach(send_retv "int" "ssize_t" )
foreach(send_arg1 "int" "ssize_t" "SOCKET")
foreach(send_arg2 "const void *" "void *" "char *" "const char *")
foreach(send_arg3 "size_t" "int" "socklen_t" "unsigned int")
foreach(send_arg4 "int" "unsigned int")
if(NOT curl_cv_func_send_done)
unset(curl_cv_func_send_test CACHE)
check_c_source_compiles("
${_source_epilogue}
extern ${send_retv} ${signature_call_conv}
send(${send_arg1}, ${send_arg2}, ${send_arg3}, ${send_arg4});
int main(void) {
${send_arg1} s=0;
${send_arg2} buf=0;
${send_arg3} len=0;
${send_arg4} flags=0;
${send_retv} res = send(s, buf, len, flags);
(void) res;
return 0;
}"
curl_cv_func_send_test)
message(STATUS
"Tested: ${send_retv} send(${send_arg1}, ${send_arg2}, ${send_arg3}, ${send_arg4})")
if(curl_cv_func_send_test)
string(REGEX REPLACE "(const) .*" "\\1" send_qual_arg2 "${send_arg2}")
string(REGEX REPLACE "const (.*)" "\\1" send_arg2 "${send_arg2}")
set(curl_cv_func_send_args
"${send_arg1},${send_arg2},${send_arg3},${send_arg4},${send_retv},${send_qual_arg2}")
set(SEND_TYPE_ARG1 "${send_arg1}")
set(SEND_TYPE_ARG2 "${send_arg2}")
set(SEND_TYPE_ARG3 "${send_arg3}")
set(SEND_TYPE_ARG4 "${send_arg4}")
set(SEND_TYPE_RETV "${send_retv}")
set(HAVE_SEND 1)
set(curl_cv_func_send_done 1)
endif(curl_cv_func_send_test)
endif(NOT curl_cv_func_send_done)
endforeach(send_arg4)
endforeach(send_arg3)
endforeach(send_arg2)
endforeach(send_arg1)
endforeach(send_retv)
else()
string(REGEX REPLACE "^([^,]*),[^,]*,[^,]*,[^,]*,[^,]*,[^,]*$" "\\1" SEND_TYPE_ARG1 "${curl_cv_func_send_args}")
string(REGEX REPLACE "^[^,]*,([^,]*),[^,]*,[^,]*,[^,]*,[^,]*$" "\\1" SEND_TYPE_ARG2 "${curl_cv_func_send_args}")
string(REGEX REPLACE "^[^,]*,[^,]*,([^,]*),[^,]*,[^,]*,[^,]*$" "\\1" SEND_TYPE_ARG3 "${curl_cv_func_send_args}")
string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,([^,]*),[^,]*,[^,]*$" "\\1" SEND_TYPE_ARG4 "${curl_cv_func_send_args}")
string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,[^,]*,([^,]*),[^,]*$" "\\1" SEND_TYPE_RETV "${curl_cv_func_send_args}")
string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,([^,]*)$" "\\1" SEND_QUAL_ARG2 "${curl_cv_func_send_args}")
endif()
if("${curl_cv_func_send_args}" STREQUAL "unknown")
message(FATAL_ERROR "Cannot find proper types to use for send args")
endif("${curl_cv_func_send_args}" STREQUAL "unknown")
set(SEND_QUAL_ARG2 "const")
else(curl_cv_send)
message(FATAL_ERROR "Unable to link function send")
endif(curl_cv_send)
set(curl_cv_func_send_args "${curl_cv_func_send_args}" CACHE INTERNAL "Arguments for send")
set(HAVE_SEND 1)
check_c_source_compiles("${_source_epilogue}
int main(void) {
int flag = MSG_NOSIGNAL;
(void)flag;
return 0;
}" HAVE_MSG_NOSIGNAL)
if(NOT HAVE_WINDOWS_H)
add_header_include(HAVE_SYS_TIME_H "sys/time.h")
add_header_include(TIME_WITH_SYS_TIME "time.h")
add_header_include(HAVE_TIME_H "time.h")
endif()
check_c_source_compiles("${_source_epilogue}
int main(void) {
struct timeval ts;
ts.tv_sec = 0;
ts.tv_usec = 0;
(void)ts;
return 0;
}" HAVE_STRUCT_TIMEVAL)
include(CheckCSourceRuns)
set(CMAKE_REQUIRED_FLAGS)
if(HAVE_SYS_POLL_H)
set(CMAKE_REQUIRED_FLAGS "-DHAVE_SYS_POLL_H")
endif(HAVE_SYS_POLL_H)
check_c_source_runs("
#ifdef HAVE_SYS_POLL_H
# include <sys/poll.h>
#endif
int main(void) {
return poll((void *)0, 0, 10 /*ms*/);
}" HAVE_POLL_FINE)
set(HAVE_SIG_ATOMIC_T 1)
set(CMAKE_REQUIRED_FLAGS)
if(HAVE_SIGNAL_H)
set(CMAKE_REQUIRED_FLAGS "-DHAVE_SIGNAL_H")
set(CMAKE_EXTRA_INCLUDE_FILES "signal.h")
endif(HAVE_SIGNAL_H)
check_type_size("sig_atomic_t" SIZEOF_SIG_ATOMIC_T)
if(HAVE_SIZEOF_SIG_ATOMIC_T)
check_c_source_compiles("
#ifdef HAVE_SIGNAL_H
# include <signal.h>
#endif
int main(void) {
static volatile sig_atomic_t dummy = 0;
(void)dummy;
return 0;
}" HAVE_SIG_ATOMIC_T_NOT_VOLATILE)
if(NOT HAVE_SIG_ATOMIC_T_NOT_VOLATILE)
set(HAVE_SIG_ATOMIC_T_VOLATILE 1)
endif(NOT HAVE_SIG_ATOMIC_T_NOT_VOLATILE)
endif(HAVE_SIZEOF_SIG_ATOMIC_T)
if(HAVE_WINDOWS_H)
set(CMAKE_EXTRA_INCLUDE_FILES winsock2.h)
else()
set(CMAKE_EXTRA_INCLUDE_FILES)
if(HAVE_SYS_SOCKET_H)
set(CMAKE_EXTRA_INCLUDE_FILES sys/socket.h)
endif(HAVE_SYS_SOCKET_H)
endif()
check_type_size("struct sockaddr_storage" SIZEOF_STRUCT_SOCKADDR_STORAGE)
if(HAVE_SIZEOF_STRUCT_SOCKADDR_STORAGE)
set(HAVE_STRUCT_SOCKADDR_STORAGE 1)
endif(HAVE_SIZEOF_STRUCT_SOCKADDR_STORAGE)

View File

@ -1,125 +0,0 @@
if(NOT UNIX)
if(WIN32)
set(HAVE_LIBDL 0)
set(HAVE_LIBUCB 0)
set(HAVE_LIBSOCKET 0)
set(NOT_NEED_LIBNSL 0)
set(HAVE_LIBNSL 0)
set(HAVE_GETHOSTNAME 1)
set(HAVE_LIBZ 0)
set(HAVE_LIBCRYPTO 0)
set(HAVE_DLOPEN 0)
set(HAVE_ALLOCA_H 0)
set(HAVE_ARPA_INET_H 0)
set(HAVE_DLFCN_H 0)
set(HAVE_FCNTL_H 1)
set(HAVE_INTTYPES_H 0)
set(HAVE_IO_H 1)
set(HAVE_MALLOC_H 1)
set(HAVE_MEMORY_H 1)
set(HAVE_NETDB_H 0)
set(HAVE_NETINET_IF_ETHER_H 0)
set(HAVE_NETINET_IN_H 0)
set(HAVE_NET_IF_H 0)
set(HAVE_PROCESS_H 1)
set(HAVE_PWD_H 0)
set(HAVE_SETJMP_H 1)
set(HAVE_SGTTY_H 0)
set(HAVE_SIGNAL_H 1)
set(HAVE_SOCKIO_H 0)
set(HAVE_STDINT_H 0)
set(HAVE_STDLIB_H 1)
set(HAVE_STRINGS_H 0)
set(HAVE_STRING_H 1)
set(HAVE_SYS_PARAM_H 0)
set(HAVE_SYS_POLL_H 0)
set(HAVE_SYS_SELECT_H 0)
set(HAVE_SYS_SOCKET_H 0)
set(HAVE_SYS_SOCKIO_H 0)
set(HAVE_SYS_STAT_H 1)
set(HAVE_SYS_TIME_H 0)
set(HAVE_SYS_TYPES_H 1)
set(HAVE_SYS_UTIME_H 1)
set(HAVE_TERMIOS_H 0)
set(HAVE_TERMIO_H 0)
set(HAVE_TIME_H 1)
set(HAVE_UNISTD_H 0)
set(HAVE_UTIME_H 0)
set(HAVE_X509_H 0)
set(HAVE_ZLIB_H 0)
set(HAVE_SIZEOF_LONG_DOUBLE 1)
set(SIZEOF_LONG_DOUBLE 8)
set(HAVE_SOCKET 1)
set(HAVE_POLL 0)
set(HAVE_SELECT 1)
set(HAVE_STRDUP 1)
set(HAVE_STRSTR 1)
set(HAVE_STRTOK_R 0)
set(HAVE_STRFTIME 1)
set(HAVE_UNAME 0)
set(HAVE_STRCASECMP 0)
set(HAVE_STRICMP 1)
set(HAVE_STRCMPI 1)
set(HAVE_GETHOSTBYADDR 1)
set(HAVE_GETTIMEOFDAY 0)
set(HAVE_INET_ADDR 1)
set(HAVE_INET_NTOA 1)
set(HAVE_INET_NTOA_R 0)
set(HAVE_TCGETATTR 0)
set(HAVE_TCSETATTR 0)
set(HAVE_PERROR 1)
set(HAVE_CLOSESOCKET 1)
set(HAVE_SETVBUF 0)
set(HAVE_SIGSETJMP 0)
set(HAVE_GETPASS_R 0)
set(HAVE_STRLCAT 0)
set(HAVE_GETPWUID 0)
set(HAVE_GETEUID 0)
set(HAVE_UTIME 1)
set(HAVE_RAND_EGD 0)
set(HAVE_RAND_SCREEN 0)
set(HAVE_RAND_STATUS 0)
set(HAVE_GMTIME_R 0)
set(HAVE_LOCALTIME_R 0)
set(HAVE_GETHOSTBYADDR_R 0)
set(HAVE_GETHOSTBYNAME_R 0)
set(HAVE_SIGNAL_FUNC 1)
set(HAVE_SIGNAL_MACRO 0)
set(HAVE_GETHOSTBYADDR_R_5 0)
set(HAVE_GETHOSTBYADDR_R_5_REENTRANT 0)
set(HAVE_GETHOSTBYADDR_R_7 0)
set(HAVE_GETHOSTBYADDR_R_7_REENTRANT 0)
set(HAVE_GETHOSTBYADDR_R_8 0)
set(HAVE_GETHOSTBYADDR_R_8_REENTRANT 0)
set(HAVE_GETHOSTBYNAME_R_3 0)
set(HAVE_GETHOSTBYNAME_R_3_REENTRANT 0)
set(HAVE_GETHOSTBYNAME_R_5 0)
set(HAVE_GETHOSTBYNAME_R_5_REENTRANT 0)
set(HAVE_GETHOSTBYNAME_R_6 0)
set(HAVE_GETHOSTBYNAME_R_6_REENTRANT 0)
set(TIME_WITH_SYS_TIME 0)
set(HAVE_O_NONBLOCK 0)
set(HAVE_IN_ADDR_T 0)
set(HAVE_INET_NTOA_R_DECL 0)
set(HAVE_INET_NTOA_R_DECL_REENTRANT 0)
if(ENABLE_IPV6)
set(HAVE_GETADDRINFO 1)
else()
set(HAVE_GETADDRINFO 0)
endif()
set(STDC_HEADERS 1)
set(RETSIGTYPE_TEST 1)
set(HAVE_SIGACTION 0)
set(HAVE_MACRO_SIGSETJMP 0)
else(WIN32)
message("This file should be included on Windows platform only")
endif(WIN32)
endif(NOT UNIX)

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