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

XlsFile2 fix errors

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@64259 954022d7-b5bf-4e40-9824-e11837661b57
parent f2fe81de
...@@ -189,11 +189,11 @@ const std::string int2str(const int val, const int radix) ...@@ -189,11 +189,11 @@ const std::string int2str(const int val, const int radix)
const std::wstring int2wstr(const int val, const int radix) const std::wstring int2wstr(const int val, const int radix)
{ {
#if defined(_WIN32) || defined(_WIN64) #if defined(_WIN32) || defined(_WIN64)
static wchar_t num_buf[10]={}; static wchar_t num_buf[20]={};
_itow_s(val, num_buf, 9, radix); _itow_s(val, num_buf, 19, radix);
return std::wstring(num_buf); return std::wstring(num_buf);
#else #else
static char num_buf[10]={}; static char num_buf[20]={};
sprintf( num_buf, "%d", val); sprintf( num_buf, "%d", val);
std::string a_str(num_buf); std::string a_str(num_buf);
return std::wstring(a_str.begin(), a_str.end()); return std::wstring(a_str.begin(), a_str.end());
...@@ -379,6 +379,11 @@ const std::wstring toARGB(const unsigned int rgba) ...@@ -379,6 +379,11 @@ const std::wstring toARGB(const unsigned int rgba)
static_cast<unsigned char>((rgba >> 16) & 0xff), static_cast<unsigned char>((rgba >> 24) & 0xff)); static_cast<unsigned char>((rgba >> 16) & 0xff), static_cast<unsigned char>((rgba >> 24) & 0xff));
} }
const std::wstring toRGB(const unsigned int rgba)
{
return toRGB(static_cast<unsigned char>(rgba & 0xff), static_cast<unsigned char>((rgba >> 8) & 0xff),
static_cast<unsigned char>((rgba >> 16) & 0xff));
}
const std::wstring toARGB(const unsigned char red, const unsigned char green, const unsigned char blue, const unsigned char alpha) const std::wstring toARGB(const unsigned char red, const unsigned char green, const unsigned char blue, const unsigned char alpha)
{ {
......
...@@ -45,6 +45,7 @@ namespace STR ...@@ -45,6 +45,7 @@ namespace STR
const std::wstring unescape_ST_Xstring(const std::wstring& str); const std::wstring unescape_ST_Xstring(const std::wstring& str);
const std::wstring toARGB(const unsigned int rgba); const std::wstring toARGB(const unsigned int rgba);
const std::wstring toARGB(const unsigned char red, const unsigned char green, const unsigned char blue, const unsigned char alpha); const std::wstring toARGB(const unsigned char red, const unsigned char green, const unsigned char blue, const unsigned char alpha);
const std::wstring toRGB(const unsigned int rgba);
const std::wstring toRGB(const unsigned char red, const unsigned char green, const unsigned char blue); const std::wstring toRGB(const unsigned char red, const unsigned char green, const unsigned char blue);
const bool fromARGB(const std::wstring& argb, unsigned char& red, unsigned char& green, unsigned char& blue, unsigned char& alpha); const bool fromARGB(const std::wstring& argb, unsigned char& red, unsigned char& green, unsigned char& blue, unsigned char& alpha);
const size_t hex_str2int(const std::wstring& hex); const size_t hex_str2int(const std::wstring& hex);
......
...@@ -29,13 +29,19 @@ CompoundFile::CompoundFile(const std::wstring & file_path, const ReadWriteMode m ...@@ -29,13 +29,19 @@ CompoundFile::CompoundFile(const std::wstring & file_path, const ReadWriteMode m
case cf_ReadMode: case cf_ReadMode:
{ {
if (storage_->open(false, false) == false) if (storage_->open(false, false) == false)
throw; {
delete storage_;
storage_ = NULL;
}
}break; }break;
case cf_WriteMode: case cf_WriteMode:
{ {
if (storage_->open(true, true) == false) if (storage_->open(true, true) == false)
throw; {
delete storage_;
storage_ = NULL;
}
}break; }break;
} }
} }
...@@ -133,10 +139,12 @@ void CompoundFile::closeNamedStream(const std::string& name) ...@@ -133,10 +139,12 @@ void CompoundFile::closeNamedStream(const std::string& name)
// Opens a stream in the storage (shall be called not more than once per stream) // Opens a stream in the storage (shall be called not more than once per stream)
POLE::Stream* CompoundFile::openStream(const std::string & stream_name) POLE::Stream* CompoundFile::openStream(const std::string & stream_name)
{ {
if (storage_ == NULL) return NULL;
POLE::Stream* pStream = new POLE::Stream(storage_, stream_name); POLE::Stream* pStream = new POLE::Stream(storage_, stream_name);
if(pStream == NULL) if(pStream == NULL)
{ {
throw;// EXCEPT::RT::CompoundFileFormatError(std::string("Error opening \"") + static_cast<char*>(stream_name) + "\" stream", hres); return NULL;
} }
if ((pStream) && (pStream->size() > 0)) if ((pStream) && (pStream->size() > 0))
return pStream; return pStream;
...@@ -147,10 +155,12 @@ POLE::Stream* CompoundFile::openStream(const std::string & stream_name) ...@@ -147,10 +155,12 @@ POLE::Stream* CompoundFile::openStream(const std::string & stream_name)
// Creates a new stream in the storage // Creates a new stream in the storage
POLE::Stream* CompoundFile::createStream(const std::string & stream_name) POLE::Stream* CompoundFile::createStream(const std::string & stream_name)
{ {
if (storage_ == NULL) return NULL;
POLE::Stream* pStream = new POLE::Stream(storage_, stream_name, true); POLE::Stream* pStream = new POLE::Stream(storage_, stream_name, true);
if(pStream == NULL) if(pStream == NULL)
{ {
throw;// EXCEPT::RT::CompoundFileFormatError(std::string("Error creating \"") + static_cast<char*>(stream_name) + "\" stream", hres); return NULL;
} }
return pStream; return pStream;
} }
......
...@@ -142,7 +142,7 @@ int Font::serialize_rPr(std::wostream & stream) ...@@ -142,7 +142,7 @@ int Font::serialize_rPr(std::wostream & stream)
case 2://rgb case 2://rgb
CP_XML_NODE(L"a:srgbClr") CP_XML_NODE(L"a:srgbClr")
{ {
CP_XML_ATTR(L"val", STR::toARGB(color_ext.xclrValue)); CP_XML_ATTR(L"val", STR::toRGB(color_ext.xclrValue));
}break; }break;
case 3://theme color case 3://theme color
CP_XML_NODE(L"a:schemeClr") CP_XML_NODE(L"a:schemeClr")
......
...@@ -191,6 +191,13 @@ void Obj::readFields(CFRecord& record) ...@@ -191,6 +191,13 @@ void Obj::readFields(CFRecord& record)
m_OfficeArtSpContainer = ODRAW::OfficeArtRecordPtr(new ODRAW::OfficeArtSpContainer(ODRAW::OfficeArtRecord::CA_Sheet)); m_OfficeArtSpContainer = ODRAW::OfficeArtRecordPtr(new ODRAW::OfficeArtSpContainer(ODRAW::OfficeArtRecord::CA_Sheet));
record >> *m_OfficeArtSpContainer; record >> *m_OfficeArtSpContainer;
} }
int sz_skip = record.getDataSize() - record.getRdPtr();
if (sz_skip > 0)
{
record.skipNunBytes(sz_skip);
}
} }
// unsigned char* Add = NULL; // unsigned char* Add = NULL;
//int size = 0; //int size = 0;
......
...@@ -33,6 +33,16 @@ void Palette::writeFields(CFRecord& record) ...@@ -33,6 +33,16 @@ void Palette::writeFields(CFRecord& record)
} }
} }
const std::wstring standart_color[8] = {
L"00000000",
L"00FFFFFF",
L"00FF0000",
L"0000FF00",
L"000000FF",
L"00FFFF00",
L"00FF00FF",
L"0000FFFF"};
void Palette::readFields(CFRecord& record) void Palette::readFields(CFRecord& record)
{ {
...@@ -41,25 +51,24 @@ void Palette::readFields(CFRecord& record) ...@@ -41,25 +51,24 @@ void Palette::readFields(CFRecord& record)
unsigned short ccv; unsigned short ccv;
record >> ccv; record >> ccv;
for(int i = 0; i < 8; ++i)
{
global_info->RegisterPaletteColor(i, standart_color[i].substr(2,6));
}
for(int i = 0; i < ccv; ++i) for(int i = 0; i < ccv; ++i)
{ {
LongRGBPtr rgb(new LongRGB); LongRGBPtr rgb(new LongRGB);
record >> *rgb; record >> *rgb;
rgColor.push_back(rgb); rgColor.push_back(rgb);
global_info->RegisterPaletteColor(i, rgb->argb); std::wstring rgb_color = STR::toRGB(rgb->red, rgb->green, rgb->blue);
global_info->RegisterPaletteColor(i+8, rgb_color);
} }
} }
const std::wstring standart_color[8] = {
L"00000000",
L"00FFFFFF",
L"00FF0000",
L"0000FF00",
L"000000FF",
L"00FFFF00",
L"00FF00FF",
L"0000FFFF"};
int Palette::serialize(std::wostream & stream) int Palette::serialize(std::wostream & stream)
{ {
......
...@@ -106,7 +106,7 @@ int SST::serialize(std::wostream & stream) ...@@ -106,7 +106,7 @@ int SST::serialize(std::wostream & stream)
{ {
CP_XML_NODE(L"t") CP_XML_NODE(L"t")
{ {
CP_XML_STREAM() << xml::utils::replace_text_to_xml(richText->str_); CP_XML_STREAM() << STR::escape_ST_Xstring(xml::utils::replace_text_to_xml(richText->str_));
} }
} }
} }
......
...@@ -36,7 +36,7 @@ void ExtNameParsedFormula::load(CFRecord& record) // Maybe this class shouldn't ...@@ -36,7 +36,7 @@ void ExtNameParsedFormula::load(CFRecord& record) // Maybe this class shouldn't
{ {
unsigned short cb; unsigned short cb;
record >> cb; record >> cb;
if(cb) if(cb && record.getDataSize() > record.getRdPtr())
{ {
unsigned char extPtg; unsigned char extPtg;
record >> extPtg; record >> extPtg;
......
...@@ -27,7 +27,7 @@ public: ...@@ -27,7 +27,7 @@ public:
record >> nElems >> nElemsAlloc >> cbElem; record >> nElems >> nElemsAlloc >> cbElem;
while(nElems--) while(nElems--)
{ {
Type element; Type element(cbElem);
record >> element; record >> element;
data.push_back(element); data.push_back(element);
} }
......
...@@ -7,8 +7,15 @@ namespace ODRAW ...@@ -7,8 +7,15 @@ namespace ODRAW
MSOSHADECOLOR::MSOSHADECOLOR() MSOSHADECOLOR::MSOSHADECOLOR()
{ {
cbElement = 4;
}
MSOSHADECOLOR::MSOSHADECOLOR(unsigned short cbElement_)
{
if (cbElement_ == 0xFFF0)
{
cbElement = 2;
}
} }
XLS::BiffStructurePtr MSOSHADECOLOR::clone() XLS::BiffStructurePtr MSOSHADECOLOR::clone()
{ {
return XLS::BiffStructurePtr(new MSOSHADECOLOR(*this)); return XLS::BiffStructurePtr(new MSOSHADECOLOR(*this));
......
...@@ -18,6 +18,8 @@ class MSOSHADECOLOR : public XLS::BiffStructure ...@@ -18,6 +18,8 @@ class MSOSHADECOLOR : public XLS::BiffStructure
BASE_STRUCTURE_DEFINE_CLASS_NAME(MSOSHADECOLOR) BASE_STRUCTURE_DEFINE_CLASS_NAME(MSOSHADECOLOR)
public: public:
MSOSHADECOLOR(); MSOSHADECOLOR();
MSOSHADECOLOR(unsigned short cbElement_);
XLS::BiffStructurePtr clone(); XLS::BiffStructurePtr clone();
static const XLS::ElementType type = XLS::typeMSOSHADECOLOR; static const XLS::ElementType type = XLS::typeMSOSHADECOLOR;
...@@ -25,7 +27,8 @@ public: ...@@ -25,7 +27,8 @@ public:
virtual void load(XLS::CFRecord& record); virtual void load(XLS::CFRecord& record);
virtual void store(XLS::CFRecord& record); virtual void store(XLS::CFRecord& record);
OfficeArtCOLORREF color; unsigned short cbElement;
OfficeArtCOLORREF color;
OSHARED::FixedPoint position; OSHARED::FixedPoint position;
}; };
......
...@@ -121,4 +121,92 @@ void OfficeArtClientAnchorSheet::loadFields(XLS::CFRecord& record) ...@@ -121,4 +121,92 @@ void OfficeArtClientAnchorSheet::loadFields(XLS::CFRecord& record)
} }
//-------------------------------------------------------------------------------------
OfficeArtChildAnchor::OfficeArtChildAnchor()
: OfficeArtRecord(0x00, ChildAnchor)
{
}
XLS::BiffStructurePtr OfficeArtChildAnchor::clone()
{
return XLS::BiffStructurePtr(new OfficeArtChildAnchor(*this));
}
int OfficeArtChildAnchor::serialize(std::wostream &stream)
{
//-------------------------------------------------
CP_XML_WRITER(stream)
{
CP_XML_NODE(L"xdr:from")
{
CP_XML_NODE(L"xdr:colOff")
{
CP_XML_STREAM() << boost::lexical_cast<std::wstring>(_dxL );
}
CP_XML_NODE(L"xdr:rowOff")
{
CP_XML_STREAM() << boost::lexical_cast<std::wstring>(_dyT);
}
}
CP_XML_NODE(L"xdr:to")
{
CP_XML_NODE(L"xdr:colOff")
{
CP_XML_STREAM() << boost::lexical_cast<std::wstring>(_dxR );
}
CP_XML_NODE(L"xdr:rowOff")
{
CP_XML_STREAM() << boost::lexical_cast<std::wstring>(_dyB);
}
}
}
return 0;
}
void OfficeArtChildAnchor::loadFields(XLS::CFRecord& record)
{
XLS::GlobalWorkbookInfoPtr global_info = record.getGlobalWorkbookInfo();
record >> dxL >> dyT >> dxR >> dyB;
//----------------------------------------------------------------------------------------------------
double kfCol = 17640 / 256.;
double kfRow = ( 360000 * 2.54 / 72) / 256. ;
//if (global_info->customColumnsWidth.find(colL) != global_info->customColumnsWidth.end())
//{
// _dxL = dxL * kfCol * global_info->customColumnsWidth[colL];
//}
//else
_dxL = dxL * kfCol * global_info->defaultColumnWidth;
//if (global_info->customColumnsWidth.find(colR) != global_info->customColumnsWidth.end())
//{
// _dxR = dxR * kfCol * global_info->customColumnsWidth[colR];
//}
//else
_dxR = dxR * kfCol * global_info->defaultColumnWidth;
//---------------------------------------------------------------------------------------------------
//if (global_info->customRowsHeight.find(rwT) != global_info->customRowsHeight.end())
//{
// _dyT = dyT * kfRow * global_info->customRowsHeight[rwT];
//}
//else
_dyT = dyT * kfRow * global_info->defaultRowHeight;
//if (global_info->customRowsHeight.find(rwB) != global_info->customRowsHeight.end())
//{
// _dyB = dyB * kfRow * global_info->customRowsHeight[rwB];
//}
//else
_dyB = dyB * kfRow * global_info->defaultRowHeight;
}
} // namespace XLS } // namespace XLS
...@@ -46,5 +46,30 @@ public: ...@@ -46,5 +46,30 @@ public:
typedef boost::shared_ptr<OfficeArtClientAnchorSheet> OfficeArtClientAnchorSheetPtr; typedef boost::shared_ptr<OfficeArtClientAnchorSheet> OfficeArtClientAnchorSheetPtr;
class OfficeArtChildAnchor : public OfficeArtRecord
{
BASE_STRUCTURE_DEFINE_CLASS_NAME(OfficeArtChildAnchor)
public:
OfficeArtChildAnchor();
XLS::BiffStructurePtr clone();
static const XLS::ElementType type = XLS::typeOfficeArtChildAnchor;
virtual void loadFields(XLS::CFRecord& record);
virtual void storeFields(XLS::CFRecord& record){}
int serialize(std::wostream & stream);
short dxL;
short dyT;
short dxR;
short dyB;
unsigned int _dxL;
unsigned int _dyT;
unsigned int _dxR;
unsigned int _dyB;
};
typedef boost::shared_ptr<OfficeArtChildAnchor> OfficeArtChildAnchorPtr;
} // namespace XLS } // namespace XLS
...@@ -74,6 +74,10 @@ void OfficeArtContainer::loadFields(XLS::CFRecord& record) ...@@ -74,6 +74,10 @@ void OfficeArtContainer::loadFields(XLS::CFRecord& record)
art_record = OfficeArtRecordPtr(new OfficeArtFOPT); art_record = OfficeArtRecordPtr(new OfficeArtFOPT);
break; break;
case ChildAnchor:
art_record = OfficeArtRecordPtr(new OfficeArtChildAnchor);
break;
case ClientAnchor: case ClientAnchor:
switch(anchor_type_) switch(anchor_type_)
{ {
...@@ -143,7 +147,7 @@ void OfficeArtContainer::loadFields(XLS::CFRecord& record) ...@@ -143,7 +147,7 @@ void OfficeArtContainer::loadFields(XLS::CFRecord& record)
Log::warning(std::wstring(L"Wrong data parsed in OfficeArt record of type 0x") + Log::warning(std::wstring(L"Wrong data parsed in OfficeArt record of type 0x") +
STR::int2hex_wstr(rh_child.recType, sizeof(rh_child.recType))); STR::int2hex_wstr(rh_child.recType, sizeof(rh_child.recType)));
record.RollRdPtrBack( record.getRdPtr() - child_beginning_ptr + rh_child.recLen); record.RollRdPtrBack( record.getRdPtr() - (child_beginning_ptr + rh_child.recLen));
} }
} }
} }
......
...@@ -522,6 +522,21 @@ void pihlShape::ReadComplexData(XLS::CFRecord& record) ...@@ -522,6 +522,21 @@ void pihlShape::ReadComplexData(XLS::CFRecord& record)
record >> IHlink_complex; record >> IHlink_complex;
} }
MSOPOINT::MSOPOINT()
{
cbElement = 4;
}
MSOPOINT::MSOPOINT(unsigned short cbElement_)
{
cbElement = 4;
if (cbElement_ == 0xfff0)
{
cbElement = 2;
}
}
XLS::BiffStructurePtr MSOPOINT::clone() XLS::BiffStructurePtr MSOPOINT::clone()
{ {
return XLS::BiffStructurePtr(new MSOPOINT(*this)); return XLS::BiffStructurePtr(new MSOPOINT(*this));
...@@ -529,7 +544,29 @@ XLS::BiffStructurePtr MSOPOINT::clone() ...@@ -529,7 +544,29 @@ XLS::BiffStructurePtr MSOPOINT::clone()
void MSOPOINT::load(XLS::CFRecord& record) void MSOPOINT::load(XLS::CFRecord& record)
{ {
record >> x >> y; if (cbElement == 4)
{
record >> x >> y;
}
else
{
unsigned char x_;
record >> x_;
y = GETBITS(x_,0 , 3) << 8;
x = GETBITS(x_,4 , 8) << 8;
}
}
MSOPATHINFO::MSOPATHINFO()
{
cbElement = 4;
}
MSOPATHINFO::MSOPATHINFO(unsigned short cbElement_)
{
cbElement = 4;
if (cbElement_ == 0xfff0)
cbElement = 2;
} }
XLS::BiffStructurePtr MSOPATHINFO::clone() XLS::BiffStructurePtr MSOPATHINFO::clone()
...@@ -546,15 +583,16 @@ void MSOPATHINFO::load(XLS::CFRecord& record) ...@@ -546,15 +583,16 @@ void MSOPATHINFO::load(XLS::CFRecord& record)
EscapeCode = msopathEscapeExtension; EscapeCode = msopathEscapeExtension;
VertexCount = 0; VertexCount = 0;
Segments = 0;
if (msopathEscape == typeSegment) if (msopathEscape == typeSegment || msopathClientEscape == typeSegment)
{ {
EscapeCode = (MSOPATHESCAPE) BitmaskToInt (val, 0x1F00); EscapeCode = (MSOPATHESCAPE) BitmaskToInt (val, 0x1F00);
VertexCount = BitmaskToInt (val, 0x00FF); VertexCount = BitmaskToInt (val, 0x00FF);
} }
else else
{ {
Segments = BitmaskToInt (val, 0x1FFF); Segments = BitmaskToInt (val, 0x1FFF);
} }
} }
......
...@@ -507,7 +507,9 @@ class MSOPOINT : public XLS::BiffStructure ...@@ -507,7 +507,9 @@ class MSOPOINT : public XLS::BiffStructure
{ {
BASE_STRUCTURE_DEFINE_CLASS_NAME(MSOPOINT) BASE_STRUCTURE_DEFINE_CLASS_NAME(MSOPOINT)
MSOPOINT(){} MSOPOINT(unsigned short cbElement_);
MSOPOINT();
XLS::BiffStructurePtr clone(); XLS::BiffStructurePtr clone();
virtual void load(XLS::CFRecord& record); virtual void load(XLS::CFRecord& record);
...@@ -517,13 +519,17 @@ class MSOPOINT : public XLS::BiffStructure ...@@ -517,13 +519,17 @@ class MSOPOINT : public XLS::BiffStructure
int x; int x;
int y; int y;
int cbElement;
}; };
class MSOPATHINFO : public XLS::BiffStructure class MSOPATHINFO : public XLS::BiffStructure
{ {
BASE_STRUCTURE_DEFINE_CLASS_NAME(MSOPATHINFO) BASE_STRUCTURE_DEFINE_CLASS_NAME(MSOPATHINFO)
MSOPATHINFO(){} MSOPATHINFO();
MSOPATHINFO(unsigned short cbElement_);
XLS::BiffStructurePtr clone(); XLS::BiffStructurePtr clone();
virtual void load(XLS::CFRecord& record); virtual void load(XLS::CFRecord& record);
...@@ -541,6 +547,7 @@ class MSOPATHINFO : public XLS::BiffStructure ...@@ -541,6 +547,7 @@ class MSOPATHINFO : public XLS::BiffStructure
// msopathEscape, // msopathEscape,
// msopathClientEscape // msopathClientEscape
//}; //};
unsigned short cbElement;
MSOPATHTYPE typeSegment; MSOPATHTYPE typeSegment;
short Segments; short Segments;
......
...@@ -50,7 +50,7 @@ public: ...@@ -50,7 +50,7 @@ public:
ClientTextbox = 0xF00D, // Implemented ClientTextbox = 0xF00D, // Implemented
ChildAnchor = 0xF00F, ChildAnchor = 0xF00F, // Implemented
ClientAnchor = 0xF010, // Implemented ClientAnchor = 0xF010, // Implemented
ClientData = 0xF011, // Implemented ClientData = 0xF011, // Implemented
FConnectorRule = 0xF012, FConnectorRule = 0xF012,
......
...@@ -46,6 +46,8 @@ void PtgExtraArray::load(CFRecord& record) ...@@ -46,6 +46,8 @@ void PtgExtraArray::load(CFRecord& record)
record >> cols >> rows; record >> cols >> rows;
for(int i = 0; i < (cols + 1) * (rows + 1); ++i) for(int i = 0; i < (cols + 1) * (rows + 1); ++i)
{ {
if (record.getRdPtr() >= record.getDataSize())
break;
unsigned char rec_type; unsigned char rec_type;
record >> rec_type; record >> rec_type;
SerArPtr ser(SerAr::createSerAr(rec_type)); SerArPtr ser(SerAr::createSerAr(rec_type));
......
...@@ -75,7 +75,7 @@ int XLUnicodeRichExtendedString::serialize (std::wostream & _stream) ...@@ -75,7 +75,7 @@ int XLUnicodeRichExtendedString::serialize (std::wostream & _stream)
std::wstring str_part = str_.substr( start_string, rgRun[i].ich - start_string ); std::wstring str_part = str_.substr( start_string, rgRun[i].ich - start_string );
start_string = rgRun[i].ich; start_string = rgRun[i].ich;
CP_XML_STREAM() << xml::utils::replace_text_to_xml(str_part); CP_XML_STREAM() << STR::escape_ST_Xstring(xml::utils::replace_text_to_xml(str_part));
} }
} }
} }
......
...@@ -40,7 +40,10 @@ const bool LBL::loadContent(BinProcessor& proc) ...@@ -40,7 +40,10 @@ const bool LBL::loadContent(BinProcessor& proc)
Lbl *lbl = dynamic_cast<Lbl*>(m_Lbl.get()); Lbl *lbl = dynamic_cast<Lbl*>(m_Lbl.get());
XLUnicodeStringNoCch name = lbl->getName(); std::wstring name;
if (lbl->fBuiltin) name = lbl->Name.value().get_value_or(L"");
if (name.empty()) name = lbl->Name_bin.value();
NameCmt namecmt(name); NameCmt namecmt(name);
if (proc.optional(namecmt)) if (proc.optional(namecmt))
......
...@@ -626,6 +626,7 @@ enum ElementType ...@@ -626,6 +626,7 @@ enum ElementType
typeOfficeArtClientAnchorChart, typeOfficeArtClientAnchorChart,
typeOfficeArtClientAnchorHF, typeOfficeArtClientAnchorHF,
typeOfficeArtClientAnchorSheet, typeOfficeArtClientAnchorSheet,
typeOfficeArtChildAnchor,
typeOfficeArtColorMRUContainer, typeOfficeArtColorMRUContainer,
typeOfficeArtContainer, typeOfficeArtContainer,
typeOfficeArtFDG, typeOfficeArtFDG,
......
...@@ -799,14 +799,14 @@ void XlsConverter::convert_geometry(std::vector<ODRAW::OfficeArtFOPTEPtr> & prop ...@@ -799,14 +799,14 @@ void XlsConverter::convert_geometry(std::vector<ODRAW::OfficeArtFOPTEPtr> & prop
int count_point[] = { 1, 3, 1, 0}; int count_point[] = { 1, 3, 1, 0};
for (int i = 0 ; i < command.size(); i++) for (int i = 0 ; i < command.size(); i++)
{ {
if (command[i].typeSegment == ODRAW::msopathEnd) break; //if (command[i].typeSegment == ODRAW::msopathEnd) break;
if (command[i].typeSegment > 4) continue; if (command[i].typeSegment > 3) continue;
CP_XML_NODE(comm[command[i].typeSegment]) CP_XML_NODE(comm[command[i].typeSegment])
{ {
for (int j=0 ; j < count_point[command[i].typeSegment]; j ++) for (int j=0 ; j < count_point[command[i].typeSegment]; j ++)
{ {
if (ind_point > points.size()) if (ind_point >= points.size())
break; break;
CP_XML_NODE(L"a:pt") CP_XML_NODE(L"a:pt")
{ {
......
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