Commit bab31c41 authored by Elen.Subbotina's avatar Elen.Subbotina Committed by Alexander Trofimov

XlsFile2 правка багов по результатам тестирования + расширены автофигуры

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@64343 954022d7-b5bf-4e40-9824-e11837661b57
parent a8deb86c
...@@ -152,11 +152,23 @@ void CFRecord::appendRawData(CFRecordPtr where_from) ...@@ -152,11 +152,23 @@ void CFRecord::appendRawData(CFRecordPtr where_from)
void CFRecord::appendRawData(const char* raw_data, const size_t size) void CFRecord::appendRawData(const char* raw_data, const size_t size)
{ {
char* data_new = new char[size_ + size]; char* data_new = new char[size_ + size];
if (data_ && size_ > 0)
{
memcpy(data_new, data_, size_); memcpy(data_new, data_, size_);
}
if (raw_data && size > 0)
{
memcpy(data_new + size_, raw_data, size); memcpy(data_new + size_, raw_data, size);
}
size_ += size; size_ += size;
std::swap(data_, data_new); std::swap(data_, data_new);
if (data_new)
{
delete[] data_new; delete[] data_new;
data_new = NULL;
}
} }
......
...@@ -23,9 +23,19 @@ const bool BiffRecordSplit::storeRecordAndDecideProceeding(CFRecordPtr record) ...@@ -23,9 +23,19 @@ const bool BiffRecordSplit::storeRecordAndDecideProceeding(CFRecordPtr record)
{ {
useContinueRecords(*record); useContinueRecords(*record);
record->resetPointerToBegin(); record->resetPointerToBegin();
if(isStartingRecord(*record)) if(isStartingRecord(*record))
{ {
stored_record = record; if (stored_record)
{
stored_record->appendRawData(record->getData(), record->getDataSize());
}
else
{
stored_record = CFRecordPtr(new CFRecord(record->getTypeId(), record->getGlobalWorkbookInfo()));
stored_record->appendRawData(record->getData(), record->getDataSize());
}
} }
else if(stored_record == NULL) else if(stored_record == NULL)
{ {
...@@ -34,8 +44,9 @@ const bool BiffRecordSplit::storeRecordAndDecideProceeding(CFRecordPtr record) ...@@ -34,8 +44,9 @@ const bool BiffRecordSplit::storeRecordAndDecideProceeding(CFRecordPtr record)
} }
else else
{ {
record->insertDataFromRecordToBeginning(stored_record); //record->insertDataFromRecordToBeginning(stored_record);
stored_record = record; //stored_record = record;
stored_record->appendRawData(record->getData(), record->getDataSize());
} }
stored_record->resetPointerToBegin(); stored_record->resetPointerToBegin();
bool is_end = isEndingRecord(*stored_record); bool is_end = isEndingRecord(*stored_record);
......
...@@ -48,6 +48,7 @@ int Blank::serialize(std::wostream & stream) ...@@ -48,6 +48,7 @@ int Blank::serialize(std::wostream & stream)
{ {
CP_XML_ATTR(L"r", ref); CP_XML_ATTR(L"r", ref);
int st = (int)cell.ixfe - cellStyleXfs_count;
if ((cell.ixfe.value()) && (cell.ixfe > cellStyleXfs_count)) if ((cell.ixfe.value()) && (cell.ixfe > cellStyleXfs_count))
{ {
CP_XML_ATTR(L"s", cell.ixfe - cellStyleXfs_count); CP_XML_ATTR(L"s", cell.ixfe - cellStyleXfs_count);
......
...@@ -6,17 +6,36 @@ namespace XLS ...@@ -6,17 +6,36 @@ namespace XLS
Continue::Continue() Continue::Continue()
{ {
m_pData = NULL;
m_iDataSize = 0;
} }
Continue::~Continue() Continue::~Continue()
{ {
if (m_pData)
{
delete []m_pData;
}
m_pData = NULL;
m_iDataSize = 0;
} }
BaseObjectPtr Continue::clone() BaseObjectPtr Continue::clone()
{ {
return BaseObjectPtr(new Continue(*this)); Continue* n = new Continue(*this);
if (n)
{
n->m_iDataSize = m_iDataSize;
if (m_pData)
{
n->m_pData = new char[m_iDataSize];
memcpy(n->m_pData, m_pData, m_iDataSize);
}
}
return BaseObjectPtr(n);
} }
...@@ -24,16 +43,16 @@ void Continue::writeFields(CFRecord& record) ...@@ -24,16 +43,16 @@ void Continue::writeFields(CFRecord& record)
{ {
#pragma message("####################### Continue record is not implemented") #pragma message("####################### Continue record is not implemented")
Log::error("Continue record is not implemented."); Log::error("Continue record is not implemented.");
//record << some_value;
} }
void Continue::readFields(CFRecord& record) void Continue::readFields(CFRecord& record)
{ {
#pragma message("####################### Continue record is not implemented") m_iDataSize = record.getDataSize();
Log::error("Continue record is not implemented."); m_pData = new char[m_iDataSize];
memcpy(m_pData, record.getData(), m_iDataSize);
//record >> some_value; record.skipNunBytes(m_iDataSize);
} }
} // namespace XLS } // namespace XLS
......
...@@ -21,6 +21,9 @@ public: ...@@ -21,6 +21,9 @@ public:
void readFields(CFRecord& record); void readFields(CFRecord& record);
static const ElementType type = typeContinue; static const ElementType type = typeContinue;
char* m_pData;
int m_iDataSize;
}; };
} // namespace XLS } // namespace XLS
......
...@@ -50,6 +50,7 @@ int LabelSst::serialize(std::wostream & stream) ...@@ -50,6 +50,7 @@ int LabelSst::serialize(std::wostream & stream)
{ {
CP_XML_ATTR(L"r", ref); CP_XML_ATTR(L"r", ref);
int st = (int)cell.ixfe - cellStyleXfs_count;
if ((cell.ixfe.value()) && (cell.ixfe > cellStyleXfs_count)) if ((cell.ixfe.value()) && (cell.ixfe > cellStyleXfs_count))
{ {
CP_XML_ATTR(L"s", cell.ixfe - cellStyleXfs_count); CP_XML_ATTR(L"s", cell.ixfe - cellStyleXfs_count);
......
...@@ -27,11 +27,24 @@ void MsoDrawing::writeFields(CFRecord& record) ...@@ -27,11 +27,24 @@ void MsoDrawing::writeFields(CFRecord& record)
record << rgChildRec; record << rgChildRec;
} }
void MsoDrawing::resetToBegin()
{
if (stored_record)
{
stored_record->resetPointerToBegin();
}
}
void MsoDrawing::readFields() void MsoDrawing::readFields()
{ {
if (stored_record)
{
rgChildRec.rh_own.recLen = stored_record->getDataSize(); rgChildRec.rh_own.recLen = stored_record->getDataSize();
rgChildRec.loadFields(*stored_record); rgChildRec.loadFields(*stored_record);
}
isReading = true;
} }
void MsoDrawing::readFields(CFRecord& record) void MsoDrawing::readFields(CFRecord& record)
......
...@@ -18,15 +18,17 @@ public: ...@@ -18,15 +18,17 @@ public:
BaseObjectPtr clone(); BaseObjectPtr clone();
void writeFields(CFRecord& record); void writeFields (CFRecord& record);
void readFields(CFRecord& record); void readFields (CFRecord& record);
void readFields(); void readFields ();
void resetToBegin ();
static const ElementType type = typeMsoDrawing; static const ElementType type = typeMsoDrawing;
//----------------------------- //-----------------------------
virtual const bool isStartingRecord(CFRecord& record); virtual const bool isStartingRecord (CFRecord& record);
virtual const bool isEndingRecord(CFRecord& record); virtual const bool isEndingRecord (CFRecord& record);
virtual void useContinueRecords(CFRecord& record); virtual void useContinueRecords (CFRecord& record);
//----------------------------- //-----------------------------
ODRAW::OfficeArtDgContainer rgChildRec; ODRAW::OfficeArtDgContainer rgChildRec;
......
...@@ -72,6 +72,10 @@ void MulBlank::readFields(CFRecord& record) ...@@ -72,6 +72,10 @@ void MulBlank::readFields(CFRecord& record)
//------------------ //------------------
record >> rw >> colFirst; record >> rw >> colFirst;
int r = rw;
int colL = colLast;
int colF = colFirst;
rgixfe.load(record, colLast - colFirst + 1); rgixfe.load(record, colLast - colFirst + 1);
record.skipNunBytes(sizeof(unsigned short)); record.skipNunBytes(sizeof(unsigned short));
...@@ -97,14 +101,26 @@ int MulBlank::serialize(std::wostream & stream) ...@@ -97,14 +101,26 @@ int MulBlank::serialize(std::wostream & stream)
if(( (i-colFirst) < rgixfe.rgixfe.size()) && (rgixfe.rgixfe[i-colFirst] > cellStyleXfs_count)) if(( (i-colFirst) < rgixfe.rgixfe.size()) && (rgixfe.rgixfe[i-colFirst] > cellStyleXfs_count))
{ {
int st = (int)rgixfe.rgixfe[i-colFirst] - cellStyleXfs_count;
CP_XML_ATTR(L"s", rgixfe.rgixfe[i-colFirst] - cellStyleXfs_count); CP_XML_ATTR(L"s", rgixfe.rgixfe[i-colFirst] - cellStyleXfs_count);
} }
else if ((rgixfe.common_ixfe > 0) && (rgixfe.common_ixfe > cellStyleXfs_count)) else if ((rgixfe.common_ixfe > 0) && (rgixfe.common_ixfe > cellStyleXfs_count))
{ {
int st = (int)rgixfe.common_ixfe - cellStyleXfs_count;
CP_XML_ATTR(L"s", rgixfe.common_ixfe - cellStyleXfs_count); CP_XML_ATTR(L"s", rgixfe.common_ixfe - cellStyleXfs_count);
} }
} }
//if(( (i-colFirst) < rgixfe.rgixfe.size()) && (rgixfe.rgixfe[i-colFirst] > cellStyleXfs_count))
//{
// CP_XML_NODE(L"c")
// {
// CP_XML_ATTR(L"r", ref);
//
// int st = (int)rgixfe.rgixfe[i-colFirst] - cellStyleXfs_count;
// CP_XML_ATTR(L"s", rgixfe.rgixfe[i-colFirst] - cellStyleXfs_count);
// }
//}
} }
} }
return 0; return 0;
...@@ -122,8 +138,10 @@ BiffStructurePtr IXFCellMulBlankSpecial::clone() ...@@ -122,8 +138,10 @@ BiffStructurePtr IXFCellMulBlankSpecial::clone()
void IXFCellMulBlankSpecial::load(CFRecord& record, const size_t num_cells) void IXFCellMulBlankSpecial::load(CFRecord& record, const size_t num_cells)
{ {
size_t sz = (record.getDataSize() - record.getRdPtr()-2)/2;
unsigned short ixfe; unsigned short ixfe;
for(size_t i = 0; i < num_cells; ++i) for(size_t i = 0; i < (std::min)(sz, num_cells); ++i) //Lighting Load Calculation.xls -
{ {
record >> ixfe; record >> ixfe;
rgixfe.push_back(ixfe); rgixfe.push_back(ixfe);
......
#include "Obj.h" #include "Obj.h"
#include <Logic/Biff_records/MsoDrawing.h> #include <Logic/Biff_records/MsoDrawing.h>
#include <Logic/Biff_structures/ODRAW/SimpleOfficeArtContainers.h>
namespace XLS namespace XLS
{ {
Obj::Obj()
{
}
Obj::~Obj() Obj::~Obj()
{ {
} }
...@@ -174,44 +168,12 @@ void Obj::readFields(CFRecord& record) ...@@ -174,44 +168,12 @@ void Obj::readFields(CFRecord& record)
{ {
while( !recs.empty() ) while( !recs.empty() )
{ {
record.appendRawData(recs.front()); mso_drawing_->storeRecordAndDecideProceeding(recs.front());
recs.pop_front(); recs.pop_front();
} }
} }
} }
if (record.getRdPtr() < record.getDataSize() - 8)
{
ODRAW::OfficeArtRecordHeader rh_child;
record >> rh_child;
record.RollRdPtrBack(rh_child.size());
if (rh_child.recType == ODRAW::OfficeArtContainer::SpContainer)
{
m_OfficeArtSpContainer = ODRAW::OfficeArtRecordPtr(new ODRAW::OfficeArtSpContainer(ODRAW::OfficeArtRecord::CA_Sheet));
record >> *m_OfficeArtSpContainer;
}
int sz_skip = record.getDataSize() - record.getRdPtr();
if (sz_skip > 0)
{
record.skipNunBytes(sz_skip);
}
}
// unsigned char* Add = NULL;
//int size = 0;
//if (record.getRdPtr() < record.getDataSize())
//{
// size = record.getDataSize() - record.getRdPtr();
// Add = new unsigned char [size];
// memcpy(Add, record.getData(), size);
// record.skipNunBytes(size);
//}
//if (Add)
//{
// delete []Add;
//}
} }
......
...@@ -15,25 +15,20 @@ ...@@ -15,25 +15,20 @@
#include <Logic/Biff_structures/FtLbsData.h> #include <Logic/Biff_structures/FtLbsData.h>
#include <Logic/Biff_structures/FtGboData.h> #include <Logic/Biff_structures/FtGboData.h>
namespace ODRAW #include <Logic/Biff_records/MsoDrawing.h>
{
class OfficeArtRecord;
typedef boost::shared_ptr<OfficeArtRecord> OfficeArtRecordPtr;
}
namespace XLS namespace XLS
{ {
//class MsoDrawing;
//typedef boost::shared_ptr<MsoDrawing> MsoDrawingPtr;
// Logical representation of Obj record in BIFF8 // Logical representation of Obj record in BIFF8
class Obj : public BiffRecordContinued class Obj : public BiffRecordContinued
{ {
BIFF_RECORD_DEFINE_TYPE_INFO(Obj) BIFF_RECORD_DEFINE_TYPE_INFO(Obj)
BASE_OBJECT_DEFINE_CLASS_NAME(Obj) BASE_OBJECT_DEFINE_CLASS_NAME(Obj)
public: public:
Obj(); Obj(MsoDrawingPtr mso_drawing) : mso_drawing_(mso_drawing)
{
}
~Obj(); ~Obj();
BaseObjectPtr clone(); BaseObjectPtr clone();
...@@ -59,7 +54,8 @@ public: ...@@ -59,7 +54,8 @@ public:
FtLbsData list; FtLbsData list;
FtGboData gbo; FtGboData gbo;
ODRAW::OfficeArtRecordPtr m_OfficeArtSpContainer; MsoDrawingPtr mso_drawing_;
//BO_ATTRIB_MARKUP_BEGIN //BO_ATTRIB_MARKUP_BEGIN
//BO_ATTRIB_MARKUP_COMPLEX(cmo) //BO_ATTRIB_MARKUP_COMPLEX(cmo)
//if(0x08 == cmo.ot) //if(0x08 == cmo.ot)
......
#include "TxO.h" #include "TxO.h"
#include <Logic/Biff_structures/ODRAW/SimpleOfficeArtContainers.h>
#include <Logic/Biff_records/Font.h> #include <Logic/Biff_records/Font.h>
#include <simple_xml_writer.h> #include <simple_xml_writer.h>
...@@ -10,12 +9,6 @@ ...@@ -10,12 +9,6 @@
namespace XLS namespace XLS
{ {
TxO::TxO():fmla(false)
{
cbRuns = 0;
}
TxO::~TxO() TxO::~TxO()
{ {
} }
...@@ -56,18 +49,18 @@ void TxO::readFields(CFRecord& record) ...@@ -56,18 +49,18 @@ void TxO::readFields(CFRecord& record)
fmla.load(record); fmla.load(record);
std::list<CFRecordPtr>& recs = continue_records[rt_Continue]; std::list<CFRecordPtr>& recs = continue_records[rt_Continue];
if ( recs.size() )
if ( cbRuns )
{ {
while( !recs.empty() ) if (record.getRdPtr() >= record.getDataSize())
{
int sz = recs.size()-1;
for(int i = 0; i < sz; i++)
{ {
record.appendRawData(recs.front()); record.appendRawData(recs.front());
recs.pop_front(); recs.pop_front();
} }
} }
if ( cbRuns )
{
commentText.setSize(cchText); commentText.setSize(cchText);
record >> commentText; record >> commentText;
...@@ -75,17 +68,10 @@ void TxO::readFields(CFRecord& record) ...@@ -75,17 +68,10 @@ void TxO::readFields(CFRecord& record)
TxOruns.load(record); TxOruns.load(record);
} }
if (record.getRdPtr() < record.getDataSize() - 8) while( !recs.empty() )
{
ODRAW::OfficeArtRecordHeader rh_child;
record >> rh_child;
record.RollRdPtrBack(rh_child.size());
if (rh_child.recType == ODRAW::OfficeArtContainer::SpContainer)
{ {
m_OfficeArtSpContainer = ODRAW::OfficeArtRecordPtr(new ODRAW::OfficeArtSpContainer(ODRAW::OfficeArtRecord::CA_Sheet)); mso_drawing_->storeRecordAndDecideProceeding(recs.front());
record >> *m_OfficeArtSpContainer; recs.pop_front();
}
} }
} }
...@@ -122,6 +108,12 @@ int TxO::serialize (std::wostream & _stream) ...@@ -122,6 +108,12 @@ int TxO::serialize (std::wostream & _stream)
{ {
//CP_XML_ATTR(L"xml:space", L"preserve"); //CP_XML_ATTR(L"xml:space", L"preserve");
if (run->formatRun.ich > str_.length())
{
//
run->formatRun.ich = 0;
}
std::wstring str_part = str_.substr( run->formatRun.ich, end_string - run->formatRun.ich); std::wstring str_part = str_.substr( run->formatRun.ich, end_string - run->formatRun.ich);
CP_XML_STREAM() << xml::utils::replace_text_to_xml(str_part); CP_XML_STREAM() << xml::utils::replace_text_to_xml(str_part);
......
...@@ -5,12 +5,7 @@ ...@@ -5,12 +5,7 @@
#include <Logic/Biff_structures/FontIndex.h> #include <Logic/Biff_structures/FontIndex.h>
#include <Logic/Biff_structures/ObjFmla.h> #include <Logic/Biff_structures/ObjFmla.h>
#include <Logic/Biff_structures/TxORuns.h> #include <Logic/Biff_structures/TxORuns.h>
#include <Logic/Biff_records/MsoDrawing.h>
namespace ODRAW
{
class OfficeArtRecord;
typedef boost::shared_ptr<OfficeArtRecord> OfficeArtRecordPtr;
}
namespace XLS namespace XLS
{ {
...@@ -22,7 +17,10 @@ class TxO: public BiffRecordContinued ...@@ -22,7 +17,10 @@ class TxO: public BiffRecordContinued
BIFF_RECORD_DEFINE_TYPE_INFO(TxO) BIFF_RECORD_DEFINE_TYPE_INFO(TxO)
BASE_OBJECT_DEFINE_CLASS_NAME(TxO) BASE_OBJECT_DEFINE_CLASS_NAME(TxO)
public: public:
TxO(); TxO(MsoDrawingPtr mso_drawing) : mso_drawing_(mso_drawing), fmla(false)
{
cbRuns = 0;
}
~TxO(); ~TxO();
BaseObjectPtr clone(); BaseObjectPtr clone();
...@@ -51,7 +49,7 @@ public: ...@@ -51,7 +49,7 @@ public:
TxORuns TxOruns; TxORuns TxOruns;
XLUnicodeStringNoCch commentText; XLUnicodeStringNoCch commentText;
ODRAW::OfficeArtRecordPtr m_OfficeArtSpContainer; MsoDrawingPtr mso_drawing_;
}; };
......
...@@ -98,7 +98,7 @@ int FillInfo::serialize(std::wostream & stream) ...@@ -98,7 +98,7 @@ int FillInfo::serialize(std::wostream & stream)
case 2://rgb case 2://rgb
CP_XML_ATTR(L"rgb", STR::toARGB(foreFillInfo_.xclrValue)); break; CP_XML_ATTR(L"rgb", STR::toARGB(foreFillInfo_.xclrValue)); break;
case 3://theme color case 3://theme color
CP_XML_ATTR(L"theme", foreFillInfo_.xclrValue + 1); CP_XML_ATTR(L"theme", foreFillInfo_.xclrValue/* + 1*/);
CP_XML_ATTR(L"tint", foreFillInfo_.nTintShade / 32767.0); break; CP_XML_ATTR(L"tint", foreFillInfo_.nTintShade / 32767.0); break;
case 4://not set case 4://not set
break; break;
...@@ -120,7 +120,7 @@ int FillInfo::serialize(std::wostream & stream) ...@@ -120,7 +120,7 @@ int FillInfo::serialize(std::wostream & stream)
case 2://rgb case 2://rgb
CP_XML_ATTR(L"rgb", STR::toARGB(backFillInfo_.xclrValue)); break; CP_XML_ATTR(L"rgb", STR::toARGB(backFillInfo_.xclrValue)); break;
case 3://theme color case 3://theme color
CP_XML_ATTR(L"theme", backFillInfo_.xclrValue + 1); CP_XML_ATTR(L"theme", backFillInfo_.xclrValue /*+ 1*/);
CP_XML_ATTR(L"tint", backFillInfo_.nTintShade / 32767.0); break; CP_XML_ATTR(L"tint", backFillInfo_.nTintShade / 32767.0); break;
case 4://not set case 4://not set
break; break;
......
...@@ -34,8 +34,11 @@ void OfficeArtContainer::loadFields(XLS::CFRecord& record) ...@@ -34,8 +34,11 @@ void OfficeArtContainer::loadFields(XLS::CFRecord& record)
while(record.getRdPtr() < container_beginning_ptr + rh_own.recLen - 8) while(record.getRdPtr() < container_beginning_ptr + rh_own.recLen - 8)
{ {
if (record.getRdPtr() >= record.getDataSize()) break;
OfficeArtRecordHeader rh_child; OfficeArtRecordHeader rh_child;
record >> rh_child; record >> rh_child;
size_t child_beginning_ptr = record.getRdPtr(); size_t child_beginning_ptr = record.getRdPtr();
record.RollRdPtrBack(rh_child.size()); record.RollRdPtrBack(rh_child.size());
...@@ -62,6 +65,10 @@ void OfficeArtContainer::loadFields(XLS::CFRecord& record) ...@@ -62,6 +65,10 @@ void OfficeArtContainer::loadFields(XLS::CFRecord& record)
art_record = OfficeArtRecordPtr(new OfficeArtSpContainer(anchor_type_)); art_record = OfficeArtRecordPtr(new OfficeArtSpContainer(anchor_type_));
break; break;
case SolverContainer:
art_record = OfficeArtRecordPtr(new OfficeArtSolverContainer);
break;
case FSPGR: case FSPGR:
art_record = OfficeArtRecordPtr(new OfficeArtFSPGR); art_record = OfficeArtRecordPtr(new OfficeArtFSPGR);
break; break;
......
...@@ -51,6 +51,25 @@ void OfficeArtDgContainer::loadFields(XLS::CFRecord& record) ...@@ -51,6 +51,25 @@ void OfficeArtDgContainer::loadFields(XLS::CFRecord& record)
{ {
switch(child_records[i]->rh_own.recType) switch(child_records[i]->rh_own.recType)
{ {
case ODRAW::OfficeArtRecord::DgContainer:
{
OfficeArtDgContainer * dg = dynamic_cast<OfficeArtDgContainer *>(child_records[i].get());
if (dg)
{
for (int i = 0 ; i < dg->child_records.size(); i++)
{
child_records.push_back(dg->child_records[i]);
}
dg->child_records.clear();
if (dg->m_OfficeArtSpgrContainer) m_OfficeArtSpgrContainer = dg->m_OfficeArtSpgrContainer;
if (dg->m_OfficeArtFDG) m_OfficeArtFDG = dg->m_OfficeArtFDG;
if (dg->m_OfficeArtSpContainer.size() > 0)
m_OfficeArtSpContainer.insert(m_OfficeArtSpContainer.end(), dg->m_OfficeArtSpContainer.begin(), dg->m_OfficeArtSpContainer.end());
}
child_records.erase(child_records.begin() + i, child_records.begin() + i + 1); i--;
}break;
case ODRAW::OfficeArtRecord::FDG: case ODRAW::OfficeArtRecord::FDG:
{ {
m_OfficeArtFDG = child_records[i]; m_OfficeArtFDG = child_records[i];
......
...@@ -18,23 +18,6 @@ XLS::BiffStructurePtr OfficeArtFRITContainer::clone() ...@@ -18,23 +18,6 @@ XLS::BiffStructurePtr OfficeArtFRITContainer::clone()
} }
//void OfficeArtFRITContainer::setXMLAttributes(MSXML2::IXMLDOMElementPtr xml_tag)
//{
// std::for_each(rgfrit.begin(), rgfrit.end(), boost::bind(&OfficeArtFRIT::toXML, _1, xml_tag));
//}
//
//void OfficeArtFRITContainer::getXMLAttributes(MSXML2::IXMLDOMElementPtr xml_tag)
//{
// OfficeArtFRIT frit;
// size_t number = 0;
// while(frit.fromXML(xml_tag, ++number, false))
// {
// rgfrit.push_back(frit);
// }
//}
void OfficeArtFRITContainer::storeFields(XLS::CFRecord& record) void OfficeArtFRITContainer::storeFields(XLS::CFRecord& record)
{ {
record << rgfrit; record << rgfrit;
......
...@@ -23,6 +23,10 @@ void OfficeArtClientData::loadFields(XLS::CFRecord& record) ...@@ -23,6 +23,10 @@ void OfficeArtClientData::loadFields(XLS::CFRecord& record)
{ {
} }
} }
void OfficeArtSolverContainer::loadFields(XLS::CFRecord& record)
{
//array of OfficeArtSolverContainerFileBlock
}
void OfficeArtDggContainer::loadFields(XLS::CFRecord& record) void OfficeArtDggContainer::loadFields(XLS::CFRecord& record)
{ {
......
...@@ -33,6 +33,17 @@ public: ...@@ -33,6 +33,17 @@ public:
std::vector<OfficeArtContainerPtr> m_OfficeArtSpgrContainerFileBlock; std::vector<OfficeArtContainerPtr> m_OfficeArtSpgrContainerFileBlock;
}; };
class OfficeArtSolverContainer : public OfficeArtRecord
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(OfficeArtSolverContainer)
public:
OfficeArtSolverContainer() : OfficeArtRecord(0x0F, SolverContainer) {}
XLS::BiffStructurePtr clone() { return XLS::BiffStructurePtr(new OfficeArtSolverContainer(*this)); }
void loadFields(XLS::CFRecord& record);
void storeFields(XLS::CFRecord& record) {}
};
class OfficeArtSpContainer : public OfficeArtContainer class OfficeArtSpContainer : public OfficeArtContainer
{ {
BASE_STRUCTURE_DEFINE_CLASS_NAME(OfficeArtSpContainer) BASE_STRUCTURE_DEFINE_CLASS_NAME(OfficeArtSpContainer)
......
#pragma once #pragma once
#include <Logic/CompositeObject.h> #include <Logic/CompositeObject.h>
#include <Logic/Biff_records/MsoDrawing.h>
namespace XLS namespace XLS
{ {
...@@ -11,7 +12,9 @@ class CHART: public CompositeObject ...@@ -11,7 +12,9 @@ class CHART: public CompositeObject
{ {
BASE_OBJECT_DEFINE_CLASS_NAME(CHART) BASE_OBJECT_DEFINE_CLASS_NAME(CHART)
public: public:
CHART(); CHART(MsoDrawingPtr mso_drawing) : mso_drawing_(mso_drawing)
{
}
~CHART(); ~CHART();
BaseObjectPtr clone(); BaseObjectPtr clone();
...@@ -19,6 +22,8 @@ public: ...@@ -19,6 +22,8 @@ public:
virtual const bool loadContent(BinProcessor& proc); virtual const bool loadContent(BinProcessor& proc);
static const ElementType type = typeCHART; static const ElementType type = typeCHART;
MsoDrawingPtr mso_drawing_;
}; };
} // namespace XLS } // namespace XLS
......
...@@ -2,16 +2,11 @@ ...@@ -2,16 +2,11 @@
#include "CHART.h" #include "CHART.h"
#include <Logic/Biff_records/BOF.h> #include <Logic/Biff_records/BOF.h>
#include <Logic/ChartSheetSubstream.h> #include <Logic/ChartSheetSubstream.h>
#include <Logic/Biff_records/Continue.h>
namespace XLS namespace XLS
{ {
CHART::CHART()
{
}
CHART::~CHART() CHART::~CHART()
{ {
} }
...@@ -38,6 +33,21 @@ const bool CHART::loadContent(BinProcessor& proc) ...@@ -38,6 +33,21 @@ const bool CHART::loadContent(BinProcessor& proc)
return false; return false;
} }
int count = proc.repeated<Continue>(0, 0);
while (count > 0)
{
Continue* c = dynamic_cast<Continue*>(elements_.back().get());
if (c)
{
CFRecordPtr r = CFRecordPtr(new CFRecord(CFRecordType::ANY_TYPE, proc.getGlobalWorkbookInfo()));
r->appendRawData(c->m_pData, c->m_iDataSize);
mso_drawing_->storeRecordAndDecideProceeding(r);
}
count--;
}
// reader.SeekNextSubstream(); // reader.SeekNextSubstream();
return true; return true;
} }
......
#pragma once #pragma once
#include <Logic/CompositeObject.h> #include <Logic/CompositeObject.h>
#include <Logic/Biff_records/MsoDrawing.h>
namespace XLS namespace XLS
{ {
...@@ -11,7 +12,9 @@ class OBJ: public CompositeObject ...@@ -11,7 +12,9 @@ class OBJ: public CompositeObject
{ {
BASE_OBJECT_DEFINE_CLASS_NAME(OBJ) BASE_OBJECT_DEFINE_CLASS_NAME(OBJ)
public: public:
OBJ(); OBJ(MsoDrawingPtr mso_drawing) : mso_drawing_(mso_drawing)
{
}
~OBJ(); ~OBJ();
BaseObjectPtr clone(); BaseObjectPtr clone();
...@@ -21,6 +24,8 @@ public: ...@@ -21,6 +24,8 @@ public:
BaseObjectPtr m_Obj; BaseObjectPtr m_Obj;
static const ElementType type = typeOBJ; static const ElementType type = typeOBJ;
MsoDrawingPtr mso_drawing_;
}; };
} // namespace XLS } // namespace XLS
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#include <Logic/Biff_unions/OBJ.h> #include <Logic/Biff_unions/OBJ.h>
#include <Logic/Biff_unions/CHART.h> #include <Logic/Biff_unions/CHART.h>
#include <Logic/Biff_records/Continue.h> #include <Logic/Biff_records/Continue.h>
#include <Logic/Biff_records/Obj.h>
namespace XLS namespace XLS
{ {
...@@ -26,6 +27,9 @@ class Parenthesis_OBJECTS_2: public ABNFParenthesis ...@@ -26,6 +27,9 @@ class Parenthesis_OBJECTS_2: public ABNFParenthesis
{ {
BASE_OBJECT_DEFINE_CLASS_NAME(Parenthesis_OBJECTS_2) BASE_OBJECT_DEFINE_CLASS_NAME(Parenthesis_OBJECTS_2)
public: public:
Parenthesis_OBJECTS_2(MsoDrawingPtr mso_drawing) : mso_drawing_(mso_drawing)
{
}
BaseObjectPtr clone() BaseObjectPtr clone()
{ {
return BaseObjectPtr(new Parenthesis_OBJECTS_2(*this)); return BaseObjectPtr(new Parenthesis_OBJECTS_2(*this));
...@@ -33,12 +37,19 @@ public: ...@@ -33,12 +37,19 @@ public:
const bool loadContent(BinProcessor& proc) const bool loadContent(BinProcessor& proc)
{ {
bool res = proc.optional<OBJ>() || OBJ OBJ_(mso_drawing_);
proc.optional<TEXTOBJECT>() || bool res1 = proc.optional(OBJ_);
proc.optional<CHART>() ;
TEXTOBJECT TEXTOBJECT_(mso_drawing_);
bool res2 = proc.optional(TEXTOBJECT_);
CHART CHART_(mso_drawing_);
bool res3 = proc.optional(CHART_);
return res; return res1 || res2 || res3;
}; }
MsoDrawingPtr mso_drawing_;
}; };
...@@ -66,10 +77,9 @@ public: ...@@ -66,10 +77,9 @@ public:
{ {
bool res = proc.mandatory(*mso_drawing_); bool res = proc.mandatory(*mso_drawing_);
Parenthesis_OBJECTS_2 parenthesis_objects_2; Parenthesis_OBJECTS_2 parenthesis_objects_2(mso_drawing_);
int count = proc.repeated(parenthesis_objects_2, 0, 0); int count = proc.repeated(parenthesis_objects_2, 0, 0);
//int count_continue = proc.repeated<Continue>(0,0);
return res || count>0; return res || count>0;
} }
...@@ -110,7 +120,20 @@ const bool OBJECTS::loadContentRead(BinReaderProcessor& proc) ...@@ -110,7 +120,20 @@ const bool OBJECTS::loadContentRead(BinReaderProcessor& proc)
elements_.erase(elem); elements_.erase(elem);
break; break;
} }
}
//int count_2 = proc.repeated(parenthesis_objects_1, 0, 0);
if (m_MsoDrawing->isReading == false)
{
try
{
m_MsoDrawing->resetToBegin();
m_MsoDrawing->readFields();
}
catch(...)
{
}
} }
return count_1 > 0 || count_4 > 0; return count_1 > 0 || count_4 > 0;
......
...@@ -5,13 +5,6 @@ ...@@ -5,13 +5,6 @@
namespace XLS namespace XLS
{ {
OBJ::OBJ()
{
}
OBJ::~OBJ() OBJ::~OBJ()
{ {
} }
...@@ -26,7 +19,9 @@ BaseObjectPtr OBJ::clone() ...@@ -26,7 +19,9 @@ BaseObjectPtr OBJ::clone()
// OBJ = Obj *Continue // OBJ = Obj *Continue
const bool OBJ::loadContent(BinProcessor& proc) const bool OBJ::loadContent(BinProcessor& proc)
{ {
if(!proc.mandatory<Obj>()) Obj Obj_(mso_drawing_);
if(!proc.mandatory(Obj_))
{ {
return false; return false;
} }
......
...@@ -8,11 +8,6 @@ namespace XLS ...@@ -8,11 +8,6 @@ namespace XLS
{ {
TEXTOBJECT::TEXTOBJECT()
{
}
TEXTOBJECT::~TEXTOBJECT() TEXTOBJECT::~TEXTOBJECT()
{ {
} }
...@@ -27,7 +22,8 @@ BaseObjectPtr TEXTOBJECT::clone() ...@@ -27,7 +22,8 @@ BaseObjectPtr TEXTOBJECT::clone()
// TEXTOBJECT = TxO *Continue // TEXTOBJECT = TxO *Continue
const bool TEXTOBJECT::loadContent(BinProcessor& proc) const bool TEXTOBJECT::loadContent(BinProcessor& proc)
{ {
if(!proc.mandatory<TxO>()) TxO TxO_(mso_drawing_);
if(!proc.mandatory(TxO_))
{ {
return false; return false;
} }
......
#pragma once #pragma once
#include <Logic/CompositeObject.h> #include <Logic/CompositeObject.h>
#include <Logic/Biff_records/MsoDrawing.h>
namespace XLS namespace XLS
{ {
...@@ -11,7 +12,9 @@ class TEXTOBJECT: public CompositeObject ...@@ -11,7 +12,9 @@ class TEXTOBJECT: public CompositeObject
{ {
BASE_OBJECT_DEFINE_CLASS_NAME(TEXTOBJECT) BASE_OBJECT_DEFINE_CLASS_NAME(TEXTOBJECT)
public: public:
TEXTOBJECT(); TEXTOBJECT(MsoDrawingPtr mso_drawing) : mso_drawing_(mso_drawing)
{
}
~TEXTOBJECT(); ~TEXTOBJECT();
BaseObjectPtr clone(); BaseObjectPtr clone();
...@@ -21,6 +24,7 @@ public: ...@@ -21,6 +24,7 @@ public:
static const ElementType type = typeTEXTOBJECT; static const ElementType type = typeTEXTOBJECT;
BaseObjectPtr m_TxO; BaseObjectPtr m_TxO;
MsoDrawingPtr mso_drawing_;
}; };
} // namespace XLS } // namespace XLS
......
...@@ -241,7 +241,7 @@ namespace oox ...@@ -241,7 +241,7 @@ namespace oox
case msosptCan : return L"can"; case msosptCan : return L"can";
case msosptDonut : return L"donut"; case msosptDonut : return L"donut";
case msosptStraightConnector1 : return L"straightConnector1"; case msosptStraightConnector1 : return L"straightConnector1";
case msosptBentConnector2 : return L"bentConnector2 "; case msosptBentConnector2 : return L"bentConnector2";
case msosptBentConnector3 : return L"bentConnector3"; case msosptBentConnector3 : return L"bentConnector3";
case msosptBentConnector4 : return L"bentConnector4"; case msosptBentConnector4 : return L"bentConnector4";
case msosptBentConnector5 : return L"bentConnector5"; case msosptBentConnector5 : return L"bentConnector5";
...@@ -249,9 +249,9 @@ namespace oox ...@@ -249,9 +249,9 @@ namespace oox
case msosptCurvedConnector3 : return L"curvedConnector3"; case msosptCurvedConnector3 : return L"curvedConnector3";
case msosptCurvedConnector4 : return L"curvedConnector4"; case msosptCurvedConnector4 : return L"curvedConnector4";
case msosptCurvedConnector5 : return L"curvedConnector5"; case msosptCurvedConnector5 : return L"curvedConnector5";
case msosptCallout1 : return L"callout1 "; case msosptCallout1 : return L"callout1";
case msosptCallout2 : return L"callout2 "; case msosptCallout2 : return L"callout2";
case msosptCallout3 : return L"callout3 "; case msosptCallout3 : return L"callout3";
case msosptAccentCallout1 : return L"accentCallout1"; case msosptAccentCallout1 : return L"accentCallout1";
case msosptAccentCallout2 : return L"accentCallout2"; case msosptAccentCallout2 : return L"accentCallout2";
case msosptAccentCallout3 : return L"accentCallout3"; case msosptAccentCallout3 : return L"accentCallout3";
...@@ -276,7 +276,7 @@ namespace oox ...@@ -276,7 +276,7 @@ namespace oox
case msosptFoldedCorner : return L"foldedCorner"; case msosptFoldedCorner : return L"foldedCorner";
case msosptLeftArrow : return L"leftArrow"; case msosptLeftArrow : return L"leftArrow";
case msosptDownArrow : return L"downArrow"; case msosptDownArrow : return L"downArrow";
case msosptUpArrow : return L"upArrow "; case msosptUpArrow : return L"upArrow";
case msosptLeftRightArrow : return L"leftRightArrow"; case msosptLeftRightArrow : return L"leftRightArrow";
case msosptUpDownArrow : return L"upDownArrow"; case msosptUpDownArrow : return L"upDownArrow";
case msosptIrregularSeal1 : return L"irregularSeal1"; case msosptIrregularSeal1 : return L"irregularSeal1";
...@@ -310,7 +310,7 @@ namespace oox ...@@ -310,7 +310,7 @@ namespace oox
case msosptCircularArrow : return L"circularArrow"; case msosptCircularArrow : return L"circularArrow";
//case msosptNotchedCircularArrow : return L"notchedCircularArrow"; //case msosptNotchedCircularArrow : return L"notchedCircularArrow";
case msosptUturnArrow : return L"uturnArrow"; case msosptUturnArrow : return L"uturnArrow";
case msosptCurvedRightArrow : return L"curvedRightArrow "; case msosptCurvedRightArrow : return L"curvedRightArrow";
case msosptCurvedLeftArrow : return L"curvedLeftArrow"; case msosptCurvedLeftArrow : return L"curvedLeftArrow";
case msosptCurvedUpArrow : return L"curvedUpArrow"; case msosptCurvedUpArrow : return L"curvedUpArrow";
case msosptCurvedDownArrow : return L"curvedDownArrow"; case msosptCurvedDownArrow : return L"curvedDownArrow";
...@@ -328,12 +328,12 @@ namespace oox ...@@ -328,12 +328,12 @@ namespace oox
case msosptFlowChartPreparation : return L"flowChartPreparation"; case msosptFlowChartPreparation : return L"flowChartPreparation";
case msosptFlowChartManualInput : return L"flowChartManualInput"; case msosptFlowChartManualInput : return L"flowChartManualInput";
case msosptFlowChartManualOperation : return L"flowChartManualOperation"; case msosptFlowChartManualOperation : return L"flowChartManualOperation";
case msosptFlowChartConnector : return L"flowChartConnector "; case msosptFlowChartConnector : return L"flowChartConnector";
case msosptFlowChartPunchedCard : return L"flowChartPunchedCard"; case msosptFlowChartPunchedCard : return L"flowChartPunchedCard";
case msosptFlowChartPunchedTape : return L"flowChartPunchedTape "; case msosptFlowChartPunchedTape : return L"flowChartPunchedTape";
case msosptFlowChartSummingJunction : return L"flowChartSummingJunction"; case msosptFlowChartSummingJunction : return L"flowChartSummingJunction";
case msosptFlowChartOr : return L"flowChartOr"; case msosptFlowChartOr : return L"flowChartOr";
case msosptFlowChartCollate : return L"flowChartCollate "; case msosptFlowChartCollate : return L"flowChartCollate";
case msosptFlowChartSort : return L"flowChartSort"; case msosptFlowChartSort : return L"flowChartSort";
case msosptFlowChartExtract : return L"flowChartExtract"; case msosptFlowChartExtract : return L"flowChartExtract";
case msosptFlowChartMerge : return L"flowChartMerge"; case msosptFlowChartMerge : return L"flowChartMerge";
...@@ -362,7 +362,7 @@ namespace oox ...@@ -362,7 +362,7 @@ namespace oox
case msosptActionButtonHelp : return L"actionButtonHelp"; case msosptActionButtonHelp : return L"actionButtonHelp";
case msosptActionButtonInformation : return L"actionButtonInformation"; case msosptActionButtonInformation : return L"actionButtonInformation";
case msosptActionButtonForwardNext : return L"actionButtonForwardNext"; case msosptActionButtonForwardNext : return L"actionButtonForwardNext";
case msosptActionButtonBackPrevious : return L"actionButtonBackPrevious "; case msosptActionButtonBackPrevious : return L"actionButtonBackPrevious";
case msosptActionButtonEnd : return L"actionButtonEnd"; case msosptActionButtonEnd : return L"actionButtonEnd";
case msosptActionButtonBeginning : return L"actionButtonBeginning"; case msosptActionButtonBeginning : return L"actionButtonBeginning";
case msosptActionButtonReturn : return L"actionButtonReturn"; case msosptActionButtonReturn : return L"actionButtonReturn";
...@@ -381,7 +381,7 @@ namespace oox ...@@ -381,7 +381,7 @@ namespace oox
case msosptTextHexagon : return L"textHexagon"; case msosptTextHexagon : return L"textHexagon";
case msosptTextCurve : return L"textCurve"; case msosptTextCurve : return L"textCurve";
case msosptTextWave : return L"textWave"; case msosptTextWave : return L"textWave";
case msosptTextRing : return L"textRing "; case msosptTextRing : return L"textRing";
case msosptTextOnCurve : return L"textOnCurve"; case msosptTextOnCurve : return L"textOnCurve";
case msosptTextOnRing : return L"textOnRing"; case msosptTextOnRing : return L"textOnRing";
case msosptTextPlainText : return L"textPlain"; case msosptTextPlainText : return L"textPlain";
...@@ -416,13 +416,13 @@ namespace oox ...@@ -416,13 +416,13 @@ namespace oox
case msosptTextDeflateTop : return L"textDeflateTop"; case msosptTextDeflateTop : return L"textDeflateTop";
case msosptTextDeflateInflate : return L"textDeflateInflate"; case msosptTextDeflateInflate : return L"textDeflateInflate";
case msosptTextDeflateInflateDeflate : return L"textDeflateInflateDeflat"; case msosptTextDeflateInflateDeflate : return L"textDeflateInflateDeflat";
case msosptTextFadeRight : return L"textFadeRight "; case msosptTextFadeRight : return L"textFadeRight";
case msosptTextFadeLeft : return L"textFadeLeft"; case msosptTextFadeLeft : return L"textFadeLeft";
case msosptTextFadeUp : return L"textFadeUp"; case msosptTextFadeUp : return L"textFadeUp";
case msosptTextFadeDown : return L"textFadeDown"; case msosptTextFadeDown : return L"textFadeDown";
case msosptTextSlantUp : return L"textSlantUp"; case msosptTextSlantUp : return L"textSlantUp";
case msosptTextSlantDown : return L"textSlantDown"; case msosptTextSlantDown : return L"textSlantDown";
case msosptTextCanUp : return L"textCanUp "; case msosptTextCanUp : return L"textCanUp";
case msosptTextCanDown : return L"textCanDown"; case msosptTextCanDown : return L"textCanDown";
} }
return L""; return L"";
......
...@@ -523,55 +523,46 @@ void XlsConverter::convert(XLS::OBJECTS* objects) ...@@ -523,55 +523,46 @@ void XlsConverter::convert(XLS::OBJECTS* objects)
{ {
short type_object = -1; short type_object = -1;
ODRAW::OfficeArtSpContainer *sp = NULL;
ODRAW::OfficeArtSpContainer *sp_text = NULL;
ODRAW::OfficeArtSpContainer *sp_common = NULL;
XLS::OBJ * OBJ = dynamic_cast<XLS::OBJ*> (elem->get()); XLS::OBJ * OBJ = dynamic_cast<XLS::OBJ*> (elem->get());
XLS::TEXTOBJECT * TEXTOBJECT = NULL; XLS::TEXTOBJECT * TEXTOBJECT = NULL;
XLS::CHART * CHART = NULL;
std::list<XLS::BaseObjectPtr>::iterator elem_next = boost::next(elem); std::list<XLS::BaseObjectPtr>::iterator elem_next = boost::next(elem);
if ( elem_next !=objects->elements_.end() ) if ( elem_next !=objects->elements_.end() )
{ {
TEXTOBJECT = dynamic_cast<XLS::TEXTOBJECT*>(elem_next->get()); TEXTOBJECT = dynamic_cast<XLS::TEXTOBJECT*>(elem_next->get());
CHART = dynamic_cast<XLS::CHART*> (elem_next->get());
} }
XLS::CHART * CHART = dynamic_cast<XLS::CHART*> (elem->get());
XLS::Obj * obj = NULL; XLS::Obj * obj = NULL;
XLS::TxO * text_obj = NULL; XLS::TxO * text_obj = NULL;
XLS::ChartSheetSubstream * chart = NULL; XLS::ChartSheetSubstream * chart = NULL;
if (OBJ) obj = dynamic_cast<XLS::Obj*>(OBJ->m_Obj.get()); if (OBJ) obj = dynamic_cast<XLS::Obj *>(OBJ->m_Obj.get());
if (TEXTOBJECT) text_obj = dynamic_cast<XLS::TxO *>(TEXTOBJECT->m_TxO.get()); if (TEXTOBJECT) text_obj = dynamic_cast<XLS::TxO *>(TEXTOBJECT->m_TxO.get());
if (CHART) chart = dynamic_cast<XLS::ChartSheetSubstream *>(CHART->elements_.back().get()); if (CHART) chart = dynamic_cast<XLS::ChartSheetSubstream *>(CHART->elements_.back().get());
if (obj) if (obj) type_object = obj->cmo.ot;
{ if (chart) type_object = 0x0005;
type_object = obj->cmo.ot; //тут тип шейпа ВРАНЬЕ !!! пример - 7.SINIF I.DÖNEM III.YAZILI SINAV.xls
if (obj->m_OfficeArtSpContainer)
sp = dynamic_cast<ODRAW::OfficeArtSpContainer*>(obj->m_OfficeArtSpContainer.get());
}
if (text_obj) if (text_obj)
{ {
if (type_object <0) type_object = 0x0006; if (type_object <0) type_object = 0x0006;
if (text_obj->m_OfficeArtSpContainer)
{
sp_text = dynamic_cast<ODRAW::OfficeArtSpContainer*>(text_obj->m_OfficeArtSpContainer.get());
}
}
if (chart)
{
type_object = 0x0005;
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
if ( (spgr) && (ind+1< spgr->child_records.size())) ODRAW::OfficeArtSpContainer *sp = NULL;
ODRAW::OfficeArtSpContainer *sp_text = NULL;
if ( spgr)
{ {
sp_common = dynamic_cast<ODRAW::OfficeArtSpContainer*>(spgr->child_records[ind+1].get()); if (ind + 1 < spgr->child_records.size())
sp = dynamic_cast<ODRAW::OfficeArtSpContainer*>(spgr->child_records[ind+1].get());
if (text_obj && ind + 2 < spgr->child_records.size())
sp_text = dynamic_cast<ODRAW::OfficeArtSpContainer*>(spgr->child_records[ind+2].get());
} }
if (note && text_obj) if (note && text_obj)
{ {
//convert_comment(text_obj/*, note_obj*/); //convert_comment(text_obj/*, note_obj*/);
...@@ -584,9 +575,8 @@ void XlsConverter::convert(XLS::OBJECTS* objects) ...@@ -584,9 +575,8 @@ void XlsConverter::convert(XLS::OBJECTS* objects)
if (xlsx_context->get_drawing_context().start_drawing(type_object)) if (xlsx_context->get_drawing_context().start_drawing(type_object))
{ {
convert(sp_text);
convert(sp); convert(sp);
convert(sp_common); convert(sp_text);
if (text_obj) if (text_obj)
{ {
...@@ -595,7 +585,9 @@ void XlsConverter::convert(XLS::OBJECTS* objects) ...@@ -595,7 +585,9 @@ void XlsConverter::convert(XLS::OBJECTS* objects)
xlsx_context->get_drawing_context().set_text(strm.str()); xlsx_context->get_drawing_context().set_text(strm.str());
} }
if (chart)
{
}
xlsx_context->get_drawing_context().end_drawing(); xlsx_context->get_drawing_context().end_drawing();
} }
else else
...@@ -605,10 +597,10 @@ void XlsConverter::convert(XLS::OBJECTS* objects) ...@@ -605,10 +597,10 @@ void XlsConverter::convert(XLS::OBJECTS* objects)
note = true; note = true;
} }
} }
if ( sp == NULL ) ind++; ind++;
if ( spgr ) if ( spgr )
{ {
while (ind+1 < spgr->child_records.size()) // бывает что эти элементы не привязаны к sp, а "лежат" сверху - FilterClickColour_2003.xls while (ind + 1 < spgr->child_records.size()) // бывает что эти элементы не привязаны к sp, а "лежат" сверху - FilterClickColour_2003.xls
{ {
ODRAW::OfficeArtClientData* client_data = NULL; ODRAW::OfficeArtClientData* client_data = NULL;
ODRAW::OfficeArtClientTextbox* text_client_data = NULL; ODRAW::OfficeArtClientTextbox* text_client_data = NULL;
...@@ -622,10 +614,10 @@ void XlsConverter::convert(XLS::OBJECTS* objects) ...@@ -622,10 +614,10 @@ void XlsConverter::convert(XLS::OBJECTS* objects)
}else break; }else break;
} }
} }
if (TEXTOBJECT) if (TEXTOBJECT || CHART)
{ {
elem++; elem++;
if ( sp_text == NULL ) ind++; ind++;
} }
} }
} }
......
...@@ -311,7 +311,7 @@ void xlsx_drawing_context::serialize_shape() ...@@ -311,7 +311,7 @@ void xlsx_drawing_context::serialize_shape()
} }
} }
} }
//serialize_fill(CP_XML_STREAM()); serialize_fill(CP_XML_STREAM());
serialize_line(CP_XML_STREAM()); serialize_line(CP_XML_STREAM());
} }
serialize_text(CP_XML_STREAM()); serialize_text(CP_XML_STREAM());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment