Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
onlyoffice_core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boris Kocherov
onlyoffice_core
Commits
1e0f4d6f
Commit
1e0f4d6f
authored
Oct 19, 2017
by
ElenaSubbotina
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
XlsFormat - developers controls (buttons, options, ....), fix vba stream
parent
a038e156
Changes
20
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
663 additions
and
292 deletions
+663
-292
ASCOfficeXlsFile2/source/XlsFormat/Binary/CompoundFile.cpp
ASCOfficeXlsFile2/source/XlsFormat/Binary/CompoundFile.cpp
+16
-13
ASCOfficeXlsFile2/source/XlsFormat/Binary/CompoundFile.h
ASCOfficeXlsFile2/source/XlsFormat/Binary/CompoundFile.h
+1
-1
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_records/Font.h
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_records/Font.h
+2
-4
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_records/Note.cpp
...ficeXlsFile2/source/XlsFormat/Logic/Biff_records/Note.cpp
+0
-2
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_records/Note.h
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_records/Note.h
+3
-8
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_records/TxO.cpp
...fficeXlsFile2/source/XlsFormat/Logic/Biff_records/TxO.cpp
+72
-7
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_records/TxO.h
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_records/TxO.h
+7
-8
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_structures/NoteSh.cpp
...lsFile2/source/XlsFormat/Logic/Biff_structures/NoteSh.cpp
+0
-3
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_structures/NoteSh.h
...eXlsFile2/source/XlsFormat/Logic/Biff_structures/NoteSh.h
+0
-1
ASCOfficeXlsFile2/source/XlsXlsxConverter/ConvertShapes/GraphicsPath.h
...ile2/source/XlsXlsxConverter/ConvertShapes/GraphicsPath.h
+1
-83
ASCOfficeXlsFile2/source/XlsXlsxConverter/XlsConverter.cpp
ASCOfficeXlsFile2/source/XlsXlsxConverter/XlsConverter.cpp
+20
-8
ASCOfficeXlsFile2/source/XlsXlsxConverter/external_items.h
ASCOfficeXlsFile2/source/XlsXlsxConverter/external_items.h
+18
-1
ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.cpp
...XlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.cpp
+383
-73
ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.h
...ceXlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.h
+26
-16
ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_output_xml.cpp
...fficeXlsFile2/source/XlsXlsxConverter/xlsx_output_xml.cpp
+9
-9
ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_output_xml.h
ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_output_xml.h
+1
-1
ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_tablecontext.cpp
...iceXlsFile2/source/XlsXlsxConverter/xlsx_tablecontext.cpp
+10
-8
Common/3dParty/pole/pole.cpp
Common/3dParty/pole/pole.cpp
+91
-46
Common/3dParty/pole/pole.h
Common/3dParty/pole/pole.h
+1
-0
XlsxSerializerCom/Reader/BinaryWriter.h
XlsxSerializerCom/Reader/BinaryWriter.h
+2
-0
No files found.
ASCOfficeXlsFile2/source/XlsFormat/Binary/CompoundFile.cpp
View file @
1e0f4d6f
...
...
@@ -97,9 +97,9 @@ CompoundFile::CompoundFile(const std::wstring & file_path, const ReadWriteMode m
Open
(
file_path
,
mode
);
}
void
CompoundFile
::
copy_stream
(
std
::
string
streamName
,
POLE
::
Storage
*
storageOut
,
bool
bWithRoot
)
void
CompoundFile
::
copy_stream
(
std
::
string
streamName
Open
,
std
::
string
streamNameCreate
,
POLE
::
Storage
*
storageOut
,
bool
bWithRoot
)
{
POLE
::
Stream
*
stream
=
new
POLE
::
Stream
(
storage_
,
streamName
);
POLE
::
Stream
*
stream
=
new
POLE
::
Stream
(
storage_
,
streamName
Open
);
if
(
!
stream
)
return
;
stream
->
seek
(
0
);
...
...
@@ -107,12 +107,12 @@ void CompoundFile::copy_stream(std::string streamName, POLE::Storage * storageOu
if
(
bWithRoot
==
false
)
{
int
pos
=
streamName
.
find
(
"/"
);
int
pos
=
streamName
Create
.
find
(
"/"
);
if
(
pos
>=
0
)
streamName
=
streamNam
e
.
substr
(
pos
+
1
);
streamName
Create
=
streamNameCreat
e
.
substr
(
pos
+
1
);
}
POLE
::
Stream
*
streamNew
=
new
POLE
::
Stream
(
storageOut
,
streamName
,
true
,
size_stream
);
POLE
::
Stream
*
streamNew
=
new
POLE
::
Stream
(
storageOut
,
streamName
Create
,
true
,
size_stream
);
if
(
!
streamNew
)
return
;
unsigned
char
*
data_stream
=
new
unsigned
char
[
size_stream
];
...
...
@@ -135,7 +135,8 @@ void CompoundFile::copy_stream(std::string streamName, POLE::Storage * storageOu
void
CompoundFile
::
copy
(
int
indent
,
std
::
string
path
,
POLE
::
Storage
*
storageOut
,
bool
bWithRoot
,
bool
bSortFiles
)
{
std
::
list
<
std
::
string
>
entries
,
entries_files
,
entries_dir
;
entries
=
storage_
->
entries
(
path
);
entries
=
storage_
->
entries_with_prefix
(
path
);
for
(
std
::
list
<
std
::
string
>::
iterator
it
=
entries
.
begin
();
it
!=
entries
.
end
();
it
++
)
{
...
...
@@ -157,16 +158,18 @@ void CompoundFile::copy( int indent, std::string path, POLE::Storage * storageOu
copy
(
indent
+
1
,
fullname
+
"/"
,
storageOut
,
bWithRoot
,
bSortFiles
);
}
if
(
bSortFiles
)
{
entries_files
.
sort
();
//todooo ??? со спецсимволами выше
}
entries_files
.
sort
();
for
(
std
::
list
<
std
::
string
>::
iterator
it
=
entries_files
.
begin
();
it
!=
entries_files
.
end
();
it
++
)
{
std
::
string
fullname
=
path
+
*
it
;
std
::
string
createName
=
path
+
*
it
;
std
::
string
openName
;
if
(
it
->
at
(
0
)
<
32
)
openName
=
path
+
it
->
substr
(
1
);
else
openName
=
path
+
*
it
;
copy_stream
(
fulln
ame
,
storageOut
,
bWithRoot
);
copy_stream
(
openName
,
createN
ame
,
storageOut
,
bWithRoot
);
}
}
CFStreamPtr
CompoundFile
::
getWorkbookStream
()
...
...
ASCOfficeXlsFile2/source/XlsFormat/Binary/CompoundFile.h
View file @
1e0f4d6f
...
...
@@ -65,7 +65,7 @@ public:
POLE
::
Storage
*
storage_
;
private:
void
copy_stream
(
std
::
string
streamName
,
POLE
::
Storage
*
storageOut
,
bool
bWithRoot
=
true
);
void
copy_stream
(
std
::
string
streamName
Open
,
std
::
string
streamNameCreate
,
POLE
::
Storage
*
storageOut
,
bool
bWithRoot
=
true
);
POLE
::
Stream
*
openStream
(
const
std
::
string
&
stream_name
);
// Opens a stream in the storage (shall be called not more than once per stream)
POLE
::
Stream
*
createStream
(
const
std
::
string
&
stream_name
);
// Creates a new stream in the storage
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_records/Font.h
View file @
1e0f4d6f
...
...
@@ -32,14 +32,12 @@
#pragma once
#include "BiffRecord.h"
#include
<Logic/Biff_structures/BiffString.h>
#include
<Logic/Biff_structures/BorderFillInfo.h>
#include
"../Biff_structures/BiffString.h"
#include
"../Biff_structures/BorderFillInfo.h"
namespace
XLS
{
// Logical representation of Font record in BIFF8
class
Font
:
public
BiffRecord
{
BIFF_RECORD_DEFINE_TYPE_INFO
(
Font
)
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_records/Note.cpp
View file @
1e0f4d6f
...
...
@@ -39,12 +39,10 @@ Note::Note()
{
}
Note
::~
Note
()
{
}
BaseObjectPtr
Note
::
clone
()
{
return
BaseObjectPtr
(
new
Note
(
*
this
));
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_records/Note.h
View file @
1e0f4d6f
...
...
@@ -32,13 +32,11 @@
#pragma once
#include "BiffRecord.h"
#include
<Logic/Biff_structures/NoteSh.h>
#include
<Logic/Biff_structures/NoteRR.h>
#include
"../Biff_structures/NoteSh.h"
#include
"../Biff_structures/NoteRR.h"
namespace
XLS
{
// Logical representation of Note record in BIFF8
class
Note
:
public
BiffRecord
{
BIFF_RECORD_DEFINE_TYPE_INFO
(
Note
)
...
...
@@ -49,15 +47,12 @@ public:
BaseObjectPtr
clone
();
void
readFields
(
CFRecord
&
record
);
static
const
ElementType
type
=
typeNote
;
static
const
ElementType
type
=
typeNote
;
NoteSh
note_sh
;
// NoteRR note_rr;
};
}
// namespace XLS
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_records/TxO.cpp
View file @
1e0f4d6f
...
...
@@ -56,11 +56,11 @@ BaseObjectPtr TxO::clone()
void
TxO
::
readFields
(
CFRecord
&
record
)
{
pGlobalWorkbookInfoPtr
=
record
.
getGlobalWorkbookInfo
();
global_info
=
record
.
getGlobalWorkbookInfo
();
unsigned
short
flags
;
if
(
pGlobalWorkbookInfoPtr
->
Version
<
0x0600
)
if
(
global_info
->
Version
<
0x0600
)
{
short
mnLinkSize
;
short
mnButtonFlags
;
...
...
@@ -154,6 +154,71 @@ void TxO::readFields(CFRecord& record)
fSecretEdit
=
GETBIT
(
flags
,
15
);
}
int
TxO
::
serialize_vml
(
std
::
wostream
&
_stream
)
{
std
::
wstring
str_
=
rawText
.
value
();
int
str_size
=
str_
.
size
();
int
iFmt
=
0
;
CP_XML_WRITER
(
_stream
)
{
for
(
size_t
i
=
0
;
i
<
TxOruns
.
rgTxoRuns
.
size
();
i
++
)
{
Run
*
run
=
dynamic_cast
<
Run
*>
(
TxOruns
.
rgTxoRuns
[
i
].
get
());
if
(
run
==
NULL
)
continue
;
int
end_string
=
str_size
;
if
(
i
<
TxOruns
.
rgTxoRuns
.
size
()
-
1
)
{
Run
*
run_next
=
dynamic_cast
<
Run
*>
(
TxOruns
.
rgTxoRuns
[
i
+
1
].
get
());
if
(
run_next
)
end_string
=
run_next
->
formatRun
.
ich
;
}
CP_XML_NODE
(
L"div"
)
{
//style='text-align:left'
CP_XML_NODE
(
L"font"
)
{
iFmt
=
run
->
formatRun
.
ifnt
;
Font
*
font
=
NULL
;
if
((
global_info
->
m_arFonts
)
&&
(
iFmt
>=
0
&&
iFmt
<
global_info
->
m_arFonts
->
size
()))
{
font
=
dynamic_cast
<
Font
*>
(
global_info
->
m_arFonts
->
at
(
iFmt
).
get
());
}
if
(
font
)
{
if
(
font
->
dyHeight
>
0
)
CP_XML_ATTR
(
L"size"
,
font
->
dyHeight
);
if
(
font
->
bls
==
700
)
CP_XML_ATTR
(
L"bold"
,
true
);
if
(
font
->
fItalic
)
CP_XML_ATTR
(
L"italic"
,
true
);
if
(
!
font
->
fontName
.
value
().
empty
())
{
CP_XML_ATTR
(
L"face"
,
font
->
fontName
.
value
());
}
if
(
font
->
icv
<
0x7fff
)
{
}
else
CP_XML_ATTR
(
L"color"
,
L"auto"
);
}
if
(
run
->
formatRun
.
ich
>
str_
.
length
())
{
//ошибка
run
->
formatRun
.
ich
=
0
;
}
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
);
}
}
}
}
return
0
;
}
int
TxO
::
serialize
(
std
::
wostream
&
_stream
)
{
...
...
@@ -163,7 +228,7 @@ int TxO::serialize (std::wostream & _stream)
int
Fmt
=
0
;
std
::
wstring
namespace_
=
L"a:"
;
oox
::
external_items
::
Type
type
=
pGlobalWorkbookInfoPtr
->
xls_converter
->
xlsx_context
->
get_drawing_context
().
getType
();
oox
::
external_items
::
Type
type
=
global_info
->
xls_converter
->
xlsx_context
->
get_drawing_context
().
getType
();
if
(
type
==
oox
::
external_items
::
typeComment
)
namespace_
.
clear
();
...
...
@@ -215,13 +280,13 @@ int TxO::serialize (std::wostream & _stream)
}
int
TxO
::
serialize_rPr
(
std
::
wostream
&
_stream
,
int
iFmt
,
std
::
wstring
namespace_
)
{
if
(
!
pGlobalWorkbookInfoPtr
)
return
0
;
if
(
!
pGlobalWorkbookInfoPtr
->
m_arFonts
)
return
0
;
if
(
!
global_info
)
return
0
;
if
(
!
global_info
->
m_arFonts
)
return
0
;
int
sz
=
pGlobalWorkbookInfoPtr
->
m_arFonts
->
size
();
int
sz
=
global_info
->
m_arFonts
->
size
();
if
(
iFmt
-
1
>=
sz
||
iFmt
<
1
)
return
0
;
Font
*
font
=
dynamic_cast
<
Font
*>
(
pGlobalWorkbookInfoPtr
->
m_arFonts
->
at
(
iFmt
-
1
).
get
());
Font
*
font
=
dynamic_cast
<
Font
*>
(
global_info
->
m_arFonts
->
at
(
iFmt
-
1
).
get
());
if
(
!
font
)
return
0
;
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_records/TxO.h
View file @
1e0f4d6f
...
...
@@ -32,17 +32,15 @@
#pragma once
#include "BiffRecordContinued.h"
#include
<Logic/Biff_structures/ControlInfo.h>
#include
<Logic/Biff_structures/FontIndex.h>
#include
<Logic/Biff_structures/ObjFmla.h>
#include
<Logic/Biff_structures/TxORuns.h>
#include
<Logic/Biff_records/MsoDrawing.h>
#include
"MsoDrawing.h"
#include
"../Biff_structures/ControlInfo.h"
#include
"../Biff_structures/FontIndex.h"
#include
"../Biff_structures/ObjFmla.h"
#include
"../Biff_structures/TxORuns.h"
namespace
XLS
{
// Logical representation of TxO record in BIFF8
class
TxO
:
public
BiffRecordContinued
{
BIFF_RECORD_DEFINE_TYPE_INFO
(
TxO
)
...
...
@@ -68,8 +66,9 @@ public:
int
serialize
(
std
::
wostream
&
_stream
);
int
serialize_rPr
(
std
::
wostream
&
_stream
,
int
iFmt
,
std
::
wstring
namespace_
=
L"a:"
);
int
serialize_vml
(
std
::
wostream
&
_stream
);
GlobalWorkbookInfoPtr
pGlobalWorkbookInfoPtr
;
GlobalWorkbookInfoPtr
global_info
;
unsigned
char
hAlignment
;
unsigned
char
vAlignment
;
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_structures/NoteSh.cpp
View file @
1e0f4d6f
...
...
@@ -37,7 +37,6 @@
namespace
XLS
{
NoteSh
::
NoteSh
()
{
x_
=
y_
=
0
;
...
...
@@ -47,14 +46,12 @@ NoteSh::NoteSh()
fColHidden
=
false
;
}
NoteSh
::
NoteSh
(
CFRecord
&
record
)
{
x_
=
y_
=
0
;
load
(
record
);
}
BiffStructurePtr
NoteSh
::
clone
()
{
return
BiffStructurePtr
(
new
NoteSh
(
*
this
));
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_structures/NoteSh.h
View file @
1e0f4d6f
...
...
@@ -52,7 +52,6 @@ public:
virtual
void
load
(
CFRecord
&
record
);
Rw
row
;
Col
col
;
bool
fShow
;
...
...
ASCOfficeXlsFile2/source/XlsXlsxConverter/ConvertShapes/GraphicsPath.h
View file @
1e0f4d6f
...
...
@@ -137,41 +137,6 @@ namespace NSCustomShapesConvert
}
};
//class CRectF
//{
//public:
// float X;
// float Y;
// float Width;
// float Height;
//public:
// CRectF()
// {
// X = 0;
// Y = 0;
// Width = 0;
// Height = 0;
// }
// CRectF(const CRectF& oSrc)
// {
// *this = oSrc;
// }
// CRectF& operator=(const CRectF& oSrc)
// {
// X = oSrc.X;
// Y = oSrc.Y;
// Width = oSrc.Width;
// Height = oSrc.Height;
// return *this;
// }
// bool Equals(const CRect& oSrc)
// {
// return ((X == oSrc.X) && (Y == oSrc.Y) && (Width == oSrc.Width) && (Height == oSrc.Height));
// }
//};
class
CGeomShapeInfo
{
public:
...
...
@@ -314,7 +279,7 @@ namespace NSCustomShapesConvert
enum
RulesType
{
// VML
// VML
rtLineTo
=
0
,
// 2*
rtCurveTo
=
1
,
// 6*
rtMoveTo
=
2
,
// 2
...
...
@@ -360,58 +325,14 @@ namespace NSCustomShapesConvert
class
CGraphicPath
{
public:
//virtual void InternalFromXmlNode(XmlUtils::CXmlNode& oXmlNode)
//{
// Metric = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("metric"), _T("0")));
// m_bStroke = (1 == XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("stroke"), _T("0"))));
// m_bFill = (1 == XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("fill"), _T("0"))));
// m_dWidthMM = XmlUtils::GetDouble(oXmlNode.GetAttributeOrValue(_T("widthmm"), _T("210")));
// m_dHeightMM = XmlUtils::GetDouble(oXmlNode.GetAttributeOrValue(_T("heightmm"), _T("190")));
// m_dAngle = XmlUtils::GetDouble(oXmlNode.GetAttributeOrValue(_T("angle"), _T("0")));
// m_lFlags = XmlUtils::GetInteger(oXmlNode.GetAttributeOrValue(_T("flags"), _T("0")));
// m_oBounds.left = XmlUtils::GetDouble(oXmlNode.GetAttributeOrValue(_T("bounds-left"), _T("0")));
// m_oBounds.top = XmlUtils::GetDouble(oXmlNode.GetAttributeOrValue(_T("bounds-top"), _T("0")));
// m_oBounds.right = XmlUtils::GetDouble(oXmlNode.GetAttributeOrValue(_T("bounds-right"), _T("0")));
// m_oBounds.bottom = XmlUtils::GetDouble(oXmlNode.GetAttributeOrValue(_T("bounds-bottom"), _T("0")));
// XmlUtils::CXmlNodes oNodes;
// oXmlNode.GetNodes(_T("part"), oNodes);
// for (int nIndex = 0; nIndex < oNodes.GetCount(); ++nIndex)
// {
// CPart oPart;
// XmlUtils::CXmlNode oNode;
// oNodes.GetAt(nIndex, oNode);
// oPart.FromXmlNode(oNode);
// m_arParts.push_back(oPart);
// }
// //XmlUtils::CXmlNode oPenNode;
// //if (oXmlNode.GetNode(_T("pen"), oPenNode))
// //{
// // Pen.FromXmlNode(oPenNode);
// //}
// //XmlUtils::CXmlNode oBrushNode;
// //if (oXmlNode.GetNode(_T("brush"), oBrushNode))
// //{
// // Brush.FromXmlNode(oBrushNode);
// //}
//}
virtual
void
InternalClear
()
{
m_lFlags
=
0
;
}
public:
CGraphicPath
()
{
InternalClear
();
}
public:
class
CPart
{
public:
...
...
@@ -1028,9 +949,6 @@ namespace NSCustomShapesConvert
{
m_arParts
.
clear
();
}
public:
std
::
vector
<
CPart
>
m_arParts
;
int
m_lFlags
;
...
...
ASCOfficeXlsFile2/source/XlsXlsxConverter/XlsConverter.cpp
View file @
1e0f4d6f
...
...
@@ -1040,7 +1040,7 @@ void XlsConverter::convert(XLS::OBJECTS* objects, XLS::WorksheetSubstream * shee
if
(
text_obj
)
{
if
(
type_object
<
0
)
type_object
=
0x0006
;
if
(
type_object
<
0
)
type_object
=
0x0006
;
}
//-----------------------------------------------------------------------------
...
...
@@ -1115,7 +1115,7 @@ void XlsConverter::convert(XLS::OBJECTS* objects, XLS::WorksheetSubstream * shee
void
XlsConverter
::
convert
(
ODRAW
::
OfficeArtSpgrContainer
*
spgr
)
{
if
(
spgr
==
NULL
)
return
;
if
(
spgr
->
anchor_type_
!=
ODRAW
::
OfficeArtRecord
::
CA_HF
)
return
;
//todooo проверить что тока для header/footer это нужно
if
(
spgr
->
anchor_type_
!=
ODRAW
::
OfficeArtRecord
::
CA_HF
)
return
;
for
(
size_t
i
=
0
;
i
<
spgr
->
child_records
.
size
();
i
++
)
{
...
...
@@ -1123,7 +1123,7 @@ void XlsConverter::convert(ODRAW::OfficeArtSpgrContainer * spgr)
if
(
xlsx_context
->
get_drawing_context
().
start_drawing
(
type_object
))
{
xlsx_context
->
get_drawing_context
().
set_mode_
vmlwrite
(
true
);
xlsx_context
->
get_drawing_context
().
set_mode_
HF
(
true
);
convert
(
spgr
->
child_records
[
i
].
get
());
xlsx_context
->
get_drawing_context
().
end_drawing
();
...
...
@@ -1515,7 +1515,7 @@ void XlsConverter::convert_blip(std::vector<ODRAW::OfficeArtFOPTEPtr> & props)
std
::
wstring
target
;
int
id
=
props
[
i
]
->
op
;
if
(
xlsx_context
->
get_drawing_context
().
get_mode_
vmlwrite
())
if
(
xlsx_context
->
get_drawing_context
().
get_mode_
HF
())
id
+=
3000
;
std
::
wstring
rId
=
xlsx_context
->
get_mediaitems
().
find_image
(
id
,
target
,
isIternal
);
...
...
@@ -1894,9 +1894,6 @@ void XlsConverter::convert(XLS::TxO * text_obj)
{
if
(
text_obj
==
NULL
)
return
;
std
::
wstringstream
strm
;
text_obj
->
serialize
(
strm
);
int
rot
=
text_obj
->
rot
;
if
(
rot
>
0
)
...
...
@@ -1928,7 +1925,14 @@ void XlsConverter::convert(XLS::TxO * text_obj)
xlsx_context
->
get_drawing_context
().
set_text_align
(
text_obj
->
hAlignment
);
xlsx_context
->
get_drawing_context
().
set_text_vert_align
(
text_obj
->
vAlignment
);
std
::
wstringstream
strm
,
strm_vml
;
text_obj
->
serialize
(
strm
);
xlsx_context
->
get_drawing_context
().
set_text
(
strm
.
str
());
text_obj
->
serialize_vml
(
strm_vml
);
xlsx_context
->
get_drawing_context
().
set_text_vml
(
strm_vml
.
str
());
}
void
XlsConverter
::
convert
(
XLS
::
Obj
*
obj
)
...
...
@@ -1991,9 +1995,17 @@ void XlsConverter::convert(XLS::Obj * obj)
if
(
obj
->
list
.
fExist
)
{
}
bool
full_ref
=
false
;
if
(
obj
->
cmo
.
ot
>
0x06
)
full_ref
=
true
;
if
(
obj
->
linkFmla
.
fExist
&&
obj
->
linkFmla
.
fmla
.
bFmlaExist
)
{
std
::
wstring
link
=
obj
->
linkFmla
.
fmla
.
fmla
.
getAssembledFormula
(
full_ref
);
xlsx_context
->
get_drawing_context
().
set_object_link
(
link
);
}
if
(
obj
->
macro
.
fExist
&&
obj
->
macro
.
fmla
.
bFmlaExist
)
{
std
::
wstring
macro
=
obj
->
macro
.
fmla
.
fmla
.
getAssembledFormula
();
std
::
wstring
macro
=
obj
->
macro
.
fmla
.
fmla
.
getAssembledFormula
(
full_ref
);
xlsx_context
->
get_drawing_context
().
set_macro
(
macro
);
}
}
...
...
ASCOfficeXlsFile2/source/XlsXlsxConverter/external_items.h
View file @
1e0f4d6f
...
...
@@ -41,7 +41,22 @@ class rels;
class
external_items
{
public:
enum
Type
{
typeUnknown
=
0
,
typeImage
,
typeChart
,
typeShape
,
typeTable
,
typeHyperlink
,
typeComment
,
typeMedia
,
typeGroup
,
typeExternalLink
,
typeOleObject
,
typeActiveX
};
enum
Type
{
typeUnknown
=
0
,
typeImage
,
typeChart
,
typeShape
,
typeTable
,
typeHyperlink
,
typeComment
,
typeMedia
,
typeGroup
,
typeExternalLink
,
typeOleObject
,
typeActiveX
,
typeControl
};
external_items
()
{
...
...
@@ -52,6 +67,7 @@ public:
count_media
=
0
;
count_activeX
=
0
;
count_embeddings
=
0
;
count_controls
=
0
;
}
struct
item
...
...
@@ -79,6 +95,7 @@ public:
size_t
count_tables
;
size_t
count_activeX
;
size_t
count_embeddings
;
size_t
count_controls
;
//std::wstring add_or_find(const std::wstring & href, Type type, bool & isInternal);//возможны ссылки на один и тот же объект
std
::
wstring
add_image
(
const
std
::
wstring
&
file_name
,
int
bin_id
);
...
...
ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.cpp
View file @
1e0f4d6f
This diff is collapsed.
Click to expand it.
ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.h
View file @
1e0f4d6f
...
...
@@ -135,7 +135,7 @@ public:
flipH
(
false
),
flipV
(
false
),
bTextBox
(
false
),
type_anchor
(
0
),
vml
write
_mode_
(
false
),
vml
_HF
_mode_
(
false
),
hidden
(
false
)
{
id
=
-
1
;
...
...
@@ -143,18 +143,21 @@ public:
parent_drawing_states
=
NULL
;
custom_path
=
-
1
;
custom_x_limo
=
0x80000000
;
custom_y_limo
=
0x80000000
;
custom_y_limo
=
0x80000000
;
type_control
=
-
1
;
}
external_items
::
Type
type
;
bool
hidden
;
std
::
wstring
name
;
std
::
wstring
description
;
std
::
wstring
macro
;
std
::
wstring
objectId
;
std
::
wstring
objectProgId
;
int
type_control
;
struct
_anchor
{
int
colFrom
=
-
1
;
...
...
@@ -172,8 +175,10 @@ public:
int
type_anchor
;
bool
vmlwrite_mode_
;
bool
vml_HF_mode_
;
std
::
wstring
shape
;
std
::
wstring
vml_shape
;
int
id
;
MSOSPT
shape_id
;
...
...
@@ -204,7 +209,8 @@ public:
margins
.
left
=
margins
.
right
=
0x00016530
;
margins
.
top
=
margins
.
bottom
=
0x0000b298
;
}
std
::
wstring
content
;
//c форматированием
std
::
wstring
content
;
//c форматированием oox
std
::
wstring
vml_content
;
//c форматированием vml
int
wrap
;
int
align
;
int
vert_align
;
...
...
@@ -289,11 +295,13 @@ public:
}
line
;
struct
_object
{
_object
()
{
visible
=
fals
e
;
col
=
row
=
0
;
id
=
0
;}
_object
()
{
visible
=
tru
e
;
col
=
row
=
0
;
id
=
0
;}
int
id
;
bool
visible
;
int
col
;
int
row
;
std
::
wstring
macro
;
std
::
wstring
link
;
}
object
;
//for group
std
::
vector
<
_drawing_state_ptr
>
drawing_states
;
...
...
@@ -317,10 +325,11 @@ public:
xlsx_drawings_rels_ptr
get_rels
();
xlsx_drawings_rels_ptr
get_vml_HF_rels
();
xlsx_drawings_rels_ptr
get_vml_
comments_
rels
();
xlsx_drawings_rels_ptr
get_vml_rels
();
xlsx_drawings_rels_ptr
get_sheet_rels
();
bool
empty
();
bool
empty_vml
();
bool
empty_vml_HF
();
void
start_group
();
...
...
@@ -330,14 +339,15 @@ public:
void
start_shape
(
int
type
);
void
start_chart
();
void
start_comment
();
void
start_control
(
int
type
);
void
set_id
(
int
id
);
void
set_FlipH
();
void
set_FlipV
();
void
set_shape_id
(
int
id
);
//--------------------------------------------------------------------------------------
void
set_mode_
vmlwrite
(
bool
val
);
bool
get_mode_
vmlwrite
();
void
set_mode_
HF
(
bool
val
);
bool
get_mode_
HF
();
//--------------------------------------------------------------------------------------
void
set_name
(
const
std
::
wstring
&
str
);
void
set_description
(
const
std
::
wstring
&
str
);
...
...
@@ -392,6 +402,7 @@ public:
void
set_hyperlink
(
const
std
::
wstring
&
link
,
const
std
::
wstring
&
display
,
bool
is_external
);
void
set_text
(
const
std
::
wstring
&
text
);
void
set_text_vml
(
const
std
::
wstring
&
text
);
void
set_text_wrap
(
int
val
);
void
set_text_align
(
int
val
);
void
set_text_vert_align
(
int
val
);
...
...
@@ -412,6 +423,7 @@ public:
void
set_object_id
(
int
val
);
void
set_object_visible
(
bool
val
);
void
set_object_anchor
(
int
col
,
int
row
);
void
set_object_link
(
const
std
::
wstring
&
text
);
//---------------------------------------------------------------------------------------------
void
set_custom_rect
(
_rect
&
rect
);
void
set_custom_verticles
(
std
::
vector
<
ODRAW
::
MSOPOINT
>
&
points
);
...
...
@@ -431,8 +443,7 @@ public:
void
serialize_chart
(
_drawing_state_ptr
&
drawing_state
,
std
::
wstring
rId
);
void
serialize_pic
(
_drawing_state_ptr
&
drawing_state
,
std
::
wstring
rId
);
void
serialize_object
(
_drawing_state_ptr
&
drawing_state
,
std
::
wstring
rId
);
void
serialize_shape_comment
(
_drawing_state_ptr
&
drawing_state
);
//part of vml shape
void
serialize_control
(
_drawing_state_ptr
&
drawing_state
);
//-----------------------------------------------------------------------------------
void
serialize_vml_shape
(
_drawing_state_ptr
&
drawing_state
);
void
serialize_vml_pic
(
_drawing_state_ptr
&
drawing_state
,
std
::
wstring
rId
);
...
...
@@ -441,12 +452,11 @@ public:
void
serialize_fill
(
std
::
wostream
&
stream
);
//-----------------------------------------------------------------------------------
void
serialize
(
std
::
wostream
&
stream
,
_drawing_state_ptr
&
drawing_state
);
void
serialize_vml
(
std
::
wostream
&
stream
,
_drawing_state_ptr
&
drawing_state
);
void
serialize_object
(
std
::
wostream
&
stream
,
_drawing_state_ptr
&
drawing_state
);
void
serialize_objects
(
std
::
wostream
&
stream
);
//-----------------------------------------------------------------------------------
void
serialize_vml_HF
(
std
::
wostream
&
stream
);
void
serialize_vml_comments
(
std
::
wostream
&
stream
);
void
serialize_objects
(
std
::
wostream
&
stream
);
void
serialize_vml
(
std
::
wostream
&
stream
);
void
serialize
(
std
::
wostream
&
stream
);
//-----------------------------------------------------------------------------------
bool
is_lined_shape
(
_drawing_state_ptr
&
drawing_state
);
...
...
@@ -459,7 +469,7 @@ private:
xlsx_drawing_context_handle
&
handle_
;
xlsx_drawings_rels_ptr
rels_
;
xlsx_drawings_rels_ptr
vml_
comments_
rels_
;
xlsx_drawings_rels_ptr
vml_rels_
;
xlsx_drawings_rels_ptr
vml_HF_rels_
;
xlsx_drawings_rels_ptr
sheet_rels_
;
...
...
@@ -469,7 +479,7 @@ private:
std
::
vector
<
_hlink_desc
>
hlinks_
;
std
::
vector
<
_drawing_state_ptr
>
drawing_states_vml_HF
;
std
::
vector
<
_drawing_state_ptr
>
drawing_states_vml
_comments
;
std
::
vector
<
_drawing_state_ptr
>
drawing_states_vml
;
std
::
vector
<
_drawing_state_ptr
>
drawing_states
;
std
::
vector
<
_drawing_state_ptr
>*
current_drawing_states
;
...
...
ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_output_xml.cpp
View file @
1e0f4d6f
...
...
@@ -78,8 +78,8 @@ public:
std
::
wstring
vml_drawingName_
;
std
::
wstring
vml_drawingId_
;
std
::
wstring
vml_
drawingName_HF
_
;
std
::
wstring
vml_
drawingId_HF
_
;
std
::
wstring
vml_
HF_drawingName
_
;
std
::
wstring
vml_
HF_drawingId
_
;
};
std
::
wstring
xlsx_xml_worksheet
::
name
()
const
...
...
@@ -223,18 +223,18 @@ void xlsx_xml_worksheet::write_to(std::wostream & strm)
CP_XML_STREAM
()
<<
impl_
->
drawing_
.
str
();
if
(
!
impl_
->
commentsId_
.
empty
()
&&
!
impl_
->
vml_drawingId_
.
empty
())
if
(
!
impl_
->
vml_drawingId_
.
empty
())
{
CP_XML_NODE
(
L"legacyDrawing"
)
{
CP_XML_ATTR
(
L"r:id"
,
impl_
->
vml_drawingId_
);
}
}
if
(
!
impl_
->
vml_
drawingId_HF
_
.
empty
())
if
(
!
impl_
->
vml_
HF_drawingId
_
.
empty
())
{
CP_XML_NODE
(
L"legacyDrawingHF"
)
{
CP_XML_ATTR
(
L"r:id"
,
impl_
->
vml_
drawingId_HF
_
);
CP_XML_ATTR
(
L"r:id"
,
impl_
->
vml_
HF_drawingId
_
);
}
}
if
(
!
impl_
->
ole_objects_
.
str
().
empty
())
...
...
@@ -271,10 +271,10 @@ void xlsx_xml_worksheet::set_vml_drawing_link(std::wstring const & fileName, std
impl_
->
vml_drawingName_
=
fileName
;
impl_
->
vml_drawingId_
=
id
;
}
void
xlsx_xml_worksheet
::
set_vml_
drawing_link_HF
(
std
::
wstring
const
&
fileName
,
std
::
wstring
const
&
id
)
void
xlsx_xml_worksheet
::
set_vml_
HF_drawing_link
(
std
::
wstring
const
&
fileName
,
std
::
wstring
const
&
id
)
{
impl_
->
vml_
drawingName_HF
_
=
fileName
;
impl_
->
vml_
drawingId_HF
_
=
id
;
impl_
->
vml_
HF_drawingName
_
=
fileName
;
impl_
->
vml_
HF_drawingId
_
=
id
;
}
std
::
pair
<
std
::
wstring
,
std
::
wstring
>
xlsx_xml_worksheet
::
get_drawing_link
()
const
{
...
...
@@ -290,7 +290,7 @@ std::pair<std::wstring, std::wstring> xlsx_xml_worksheet::get_vml_drawing_link()
}
std
::
pair
<
std
::
wstring
,
std
::
wstring
>
xlsx_xml_worksheet
::
get_vml_drawing_HF_link
()
const
{
return
std
::
pair
<
std
::
wstring
,
std
::
wstring
>
(
impl_
->
vml_
drawingName_HF_
,
impl_
->
vml_drawingId_HF
_
);
return
std
::
pair
<
std
::
wstring
,
std
::
wstring
>
(
impl_
->
vml_
HF_drawingName_
,
impl_
->
vml_HF_drawingId
_
);
}
}
...
...
ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_output_xml.h
View file @
1e0f4d6f
...
...
@@ -77,7 +77,7 @@ public:
void
set_vml_drawing_link
(
std
::
wstring
const
&
fileName
,
std
::
wstring
const
&
id
);
void
set_comments_link
(
std
::
wstring
const
&
fileName
,
std
::
wstring
const
&
id
);
void
set_state
(
std
::
wstring
const
&
state
);
void
set_vml_
drawing_link_HF
(
std
::
wstring
const
&
fileName
,
std
::
wstring
const
&
id
);
void
set_vml_
HF_drawing_link
(
std
::
wstring
const
&
fileName
,
std
::
wstring
const
&
id
);
std
::
pair
<
std
::
wstring
,
std
::
wstring
>
get_drawing_link
()
const
;
std
::
pair
<
std
::
wstring
,
std
::
wstring
>
get_vml_drawing_link
()
const
;
...
...
ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_tablecontext.cpp
View file @
1e0f4d6f
...
...
@@ -104,25 +104,27 @@ void xlsx_table_context::end_table()
const
std
::
pair
<
std
::
wstring
,
std
::
wstring
>
vmlDrawingName
=
context_
.
get_drawing_context_handle
().
add_drawing_vml
(
strm
.
str
(),
get_drawing_context
().
get_vml_HF_rels
());
context_
.
current_sheet
().
set_vml_drawing_link_HF
(
vmlDrawingName
.
first
,
vmlDrawingName
.
second
);
context_
.
current_sheet
().
set_vml_HF_drawing_link
(
vmlDrawingName
.
first
,
vmlDrawingName
.
second
);
}
if
(
!
get_drawing_context
().
empty_vml
())
{
std
::
wstringstream
strm
;
get_drawing_context
().
serialize_vml
(
strm
);
const
std
::
pair
<
std
::
wstring
,
std
::
wstring
>
vmlDrawingName
=
context_
.
get_drawing_context_handle
().
add_drawing_vml
(
strm
.
str
(),
get_drawing_context
().
get_vml_rels
());
context_
.
current_sheet
().
set_vml_drawing_link
(
vmlDrawingName
.
first
,
vmlDrawingName
.
second
);
}
if
(
!
get_comments_context
().
empty
())
{
std
::
wstringstream
strm
;
get_comments_context
().
write_comments
(
strm
);
std
::
wstringstream
vml_strm
;
get_drawing_context
().
serialize_vml_comments
(
vml_strm
);
const
std
::
pair
<
std
::
wstring
,
std
::
wstring
>
commentsName
=
context_
.
get_comments_context_handle
().
add_comments_xml
(
strm
.
str
(),
context_
.
get_comments_context
().
get_comments
());
const
std
::
pair
<
std
::
wstring
,
std
::
wstring
>
vmlDrawingName
=
context_
.
get_drawing_context_handle
().
add_drawing_vml
(
vml_strm
.
str
(),
get_drawing_context
().
get_vml_comments_rels
());
context_
.
current_sheet
().
set_comments_link
(
commentsName
.
first
,
commentsName
.
second
);
context_
.
current_sheet
().
set_vml_drawing_link
(
vmlDrawingName
.
first
,
vmlDrawingName
.
second
);
}
}
...
...
Common/3dParty/pole/pole.cpp
View file @
1e0f4d6f
...
...
@@ -125,6 +125,7 @@ class DirEntry
public:
DirEntry
()
:
valid
(),
name
(),
dir
(),
size
(),
start
(),
prev
(),
next
(),
child
()
{}
bool
valid
;
// false if invalid (should be skipped)
unsigned
char
prefix
;
std
::
string
name
;
// the name, not in unicode anymore
bool
dir
;
// true if directory
uint64
size
;
// size (not valid if directory)
...
...
@@ -805,49 +806,67 @@ DirEntry* DirTree::entry( const std::string& name, bool create, int64 bigBlockSi
}
else
{
// not found among children
if
(
!
create
||
!
io
->
writeable
)
std
::
vector
<
uint64
>
chi
=
children
(
index
);
for
(
unsigned
i
=
0
;
i
<
chi
.
size
();
i
++
)
{
DirEntry
*
ce
=
entry
(
chi
[
i
]
);
if
(
ce
)
if
(
ce
->
valid
&&
(
ce
->
name
.
length
()
>
1
)
)
if
(
ce
->
name
==
*
it
)
{
child
=
chi
[
i
];
break
;
}
}
}
if
(
child
>
0
)
{
index
=
child
;
}
else
{
// not found among children ..wrong header???
if
(
!
create
||
!
io
->
writeable
)
{
return
(
DirEntry
*
)
0
;
}
// create a new entry
uint64
parent2
=
index
;
index
=
unused
();
DirEntry
*
e
=
entry
(
index
);
e
->
valid
=
true
;
e
->
name
=
*
it
;
e
->
dir
=
(
levelsLeft
>
0
);
if
(
!
e
->
dir
)
e
->
size
=
streamSize
;
else
e
->
size
=
0
;
e
->
start
=
AllocTable
::
Eof
;
e
->
child
=
End
;
if
(
closest
==
End
)
{
return
(
DirEntry
*
)
0
;
e
->
prev
=
End
;
e
->
next
=
entry
(
parent2
)
->
child
;
entry
(
parent2
)
->
child
=
index
;
markAsDirty
(
parent2
,
bigBlockSize
);
}
else
{
DirEntry
*
closeE
=
entry
(
closest
);
if
(
closeE
->
compare
(
*
e
)
<
0
)
{
e
->
prev
=
closeE
->
next
;
e
->
next
=
End
;
closeE
->
next
=
index
;
}
else
{
e
->
next
=
closeE
->
prev
;
e
->
prev
=
End
;
closeE
->
prev
=
index
;
}
markAsDirty
(
closest
,
bigBlockSize
);
}
// create a new entry
uint64
parent2
=
index
;
index
=
unused
();
DirEntry
*
e
=
entry
(
index
);
e
->
valid
=
true
;
e
->
name
=
*
it
;
e
->
dir
=
(
levelsLeft
>
0
);
if
(
!
e
->
dir
)
e
->
size
=
streamSize
;
else
e
->
size
=
0
;
e
->
start
=
AllocTable
::
Eof
;
e
->
child
=
End
;
if
(
closest
==
End
)
{
e
->
prev
=
End
;
e
->
next
=
entry
(
parent2
)
->
child
;
entry
(
parent2
)
->
child
=
index
;
markAsDirty
(
parent2
,
bigBlockSize
);
}
else
{
DirEntry
*
closeE
=
entry
(
closest
);
if
(
closeE
->
compare
(
*
e
)
<
0
)
{
e
->
prev
=
closeE
->
next
;
e
->
next
=
End
;
closeE
->
next
=
index
;
}
else
{
e
->
next
=
closeE
->
prev
;
e
->
prev
=
End
;
closeE
->
prev
=
index
;
}
markAsDirty
(
closest
,
bigBlockSize
);
}
markAsDirty
(
index
,
bigBlockSize
);
uint64
bbidx
=
index
/
(
bigBlockSize
/
128
);
std
::
vector
<
uint64
>
blocks
=
io
->
bbat
->
follow
(
io
->
header
->
dirent_start
);
...
...
@@ -937,7 +956,7 @@ void DirTree::load( unsigned char* buffer, uint64 size )
uint64
p
=
i
*
128
;
// would be < 32 if first char in the name isn't printable
unsigned
prefix
=
32
;
unsigned
char
prefix
=
32
;
// parse name of this entry, which stored as Unicode 16-bit
std
::
string
name
;
...
...
@@ -949,7 +968,7 @@ void DirTree::load( unsigned char* buffer, uint64 size )
// first char isn't printable ? remove it...
if
(
buffer
[
p
]
<
32
)
{
prefix
=
buffer
[
0
];
prefix
=
name
[
0
];
name
.
erase
(
0
,
1
);
}
...
...
@@ -959,6 +978,7 @@ void DirTree::load( unsigned char* buffer, uint64 size )
DirEntry
e
;
e
.
valid
=
(
type
!=
0
);
e
.
name
=
name
;
e
.
prefix
=
prefix
;
e
.
start
=
readU32
(
buffer
+
0x74
+
p
);
e
.
size
=
readU32
(
buffer
+
0x78
+
p
);
e
.
prev
=
readU32
(
buffer
+
0x44
+
p
);
...
...
@@ -2225,12 +2245,35 @@ std::list<std::string> Storage::entries( const std::string& path )
uint64
parent
=
dt
->
indexOf
(
e
);
std
::
vector
<
uint64
>
children
=
dt
->
children
(
parent
);
for
(
uint64
i
=
0
;
i
<
children
.
size
();
i
++
)
localResult
.
push_back
(
dt
->
entry
(
children
[
i
]
)
->
name
);
{
localResult
.
push_back
(
dt
->
entry
(
children
[
i
]
)
->
name
);
}
}
return
localResult
;
}
std
::
list
<
std
::
string
>
Storage
::
entries_with_prefix
(
const
std
::
string
&
path
)
{
std
::
list
<
std
::
string
>
localResult
;
DirTree
*
dt
=
io
->
dirtree
;
DirEntry
*
e
=
dt
->
entry
(
path
,
false
);
if
(
e
&&
e
->
dir
)
{
uint64
parent
=
dt
->
indexOf
(
e
);
std
::
vector
<
uint64
>
children
=
dt
->
children
(
parent
);
for
(
uint64
i
=
0
;
i
<
children
.
size
();
i
++
)
{
std
::
string
val
;
if
(
dt
->
entry
(
children
[
i
]
)
->
prefix
!=
32
)
val
=
(
char
)
dt
->
entry
(
children
[
i
]
)
->
prefix
;
val
+=
dt
->
entry
(
children
[
i
]
)
->
name
;
localResult
.
push_back
(
val
);
}
}
return
localResult
;
}
bool
Storage
::
isDirectory
(
const
std
::
string
&
name
)
{
DirEntry
*
e
=
io
->
dirtree
->
entry
(
name
,
false
);
...
...
@@ -2271,7 +2314,9 @@ void CollectStreams( std::list<std::string>& result, DirTree* tree, DirEntry* pa
DirEntry
*
c
=
tree
->
entry
(
parent
->
child
);
std
::
queue
<
DirEntry
*>
queue
;
if
(
c
)
queue
.
push
(
c
);
while
(
!
queue
.
empty
()
)
{
while
(
!
queue
.
empty
()
)
{
DirEntry
*
e
=
queue
.
front
();
queue
.
pop
();
if
(
e
->
dir
)
...
...
Common/3dParty/pole/pole.h
View file @
1e0f4d6f
...
...
@@ -124,6 +124,7 @@ public:
* Finds all stream and directories in given path.
**/
std
::
list
<
std
::
string
>
entries
(
const
std
::
string
&
path
=
"/"
);
std
::
list
<
std
::
string
>
entries_with_prefix
(
const
std
::
string
&
path
=
"/"
);
/**
* Returns true if specified entry name is a directory.
...
...
XlsxSerializerCom/Reader/BinaryWriter.h
View file @
1e0f4d6f
...
...
@@ -3019,6 +3019,8 @@ namespace BinXlsxRW
else
pCellAnchor
=
new
OOX
::
Spreadsheet
::
CCellAnchor
(
eAnchorType
);
pCellAnchor
->
m_bShapeOle
=
true
;
PPTX
::
Logic
::
Pic
*
olePic
=
new
PPTX
::
Logic
::
Pic
;
olePic
->
oleObject
.
Init
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment