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
56bb39f7
Commit
56bb39f7
authored
Sep 19, 2017
by
ElenaSubbotina
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/hotfix/v5.0.1' into develop
parents
48d4b72d
60bcca00
Changes
73
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
73 changed files
with
2279 additions
and
649 deletions
+2279
-649
ASCOfficeDocFile/DocDocxConverter/DocumentMapping.cpp
ASCOfficeDocFile/DocDocxConverter/DocumentMapping.cpp
+1
-1
ASCOfficeDocFile/DocDocxConverter/OfficeDrawing/PathParser.h
ASCOfficeDocFile/DocDocxConverter/OfficeDrawing/PathParser.h
+8
-1
ASCOfficeDocFile/DocDocxConverter/OfficeDrawing/ShapeContainer.h
...ceDocFile/DocDocxConverter/OfficeDrawing/ShapeContainer.h
+19
-2
ASCOfficeOdfFile/OdfFileTest/OdfFileTest.cpp
ASCOfficeOdfFile/OdfFileTest/OdfFileTest.cpp
+72
-16
ASCOfficeOdfFile/OdfFileTest/OdfFileTest.vcproj
ASCOfficeOdfFile/OdfFileTest/OdfFileTest.vcproj
+8
-0
ASCOfficeOdfFile/formulasconvert/formulasconvert_odf.cpp
ASCOfficeOdfFile/formulasconvert/formulasconvert_odf.cpp
+31
-28
ASCOfficeOdfFile/include/cpdoccore/odf/odf_document.h
ASCOfficeOdfFile/include/cpdoccore/odf/odf_document.h
+9
-3
ASCOfficeOdfFile/src/ConvertOO2OOX.cpp
ASCOfficeOdfFile/src/ConvertOO2OOX.cpp
+0
-8
ASCOfficeOdfFile/src/docx/mediaitems.h
ASCOfficeOdfFile/src/docx/mediaitems.h
+1
-0
ASCOfficeOdfFile/src/docx/oox_chart_context.cpp
ASCOfficeOdfFile/src/docx/oox_chart_context.cpp
+52
-3
ASCOfficeOdfFile/src/docx/oox_chart_context.h
ASCOfficeOdfFile/src/docx/oox_chart_context.h
+6
-0
ASCOfficeOdfFile/src/docx/oox_chart_series.cpp
ASCOfficeOdfFile/src/docx/oox_chart_series.cpp
+12
-4
ASCOfficeOdfFile/src/docx/oox_drawing.cpp
ASCOfficeOdfFile/src/docx/oox_drawing.cpp
+5
-5
ASCOfficeOdfFile/src/docx/oox_drawing_fills.cpp
ASCOfficeOdfFile/src/docx/oox_drawing_fills.cpp
+1
-1
ASCOfficeOdfFile/src/docx/oox_package.cpp
ASCOfficeOdfFile/src/docx/oox_package.cpp
+1
-0
ASCOfficeOdfFile/src/docx/xlsx_pivots_context.cpp
ASCOfficeOdfFile/src/docx/xlsx_pivots_context.cpp
+752
-116
ASCOfficeOdfFile/src/docx/xlsx_pivots_context.h
ASCOfficeOdfFile/src/docx/xlsx_pivots_context.h
+24
-7
ASCOfficeOdfFile/src/docx/xlsx_table_state.cpp
ASCOfficeOdfFile/src/docx/xlsx_table_state.cpp
+3
-2
ASCOfficeOdfFile/src/docx/xlsx_utils.cpp
ASCOfficeOdfFile/src/docx/xlsx_utils.cpp
+8
-3
ASCOfficeOdfFile/src/docx/xlsx_utils.h
ASCOfficeOdfFile/src/docx/xlsx_utils.h
+2
-0
ASCOfficeOdfFile/src/docx/xlsxconversioncontext.cpp
ASCOfficeOdfFile/src/docx/xlsxconversioncontext.cpp
+16
-0
ASCOfficeOdfFile/src/docx/xlsxconversioncontext.h
ASCOfficeOdfFile/src/docx/xlsxconversioncontext.h
+3
-0
ASCOfficeOdfFile/src/odf/chart_build_oox.cpp
ASCOfficeOdfFile/src/odf/chart_build_oox.cpp
+143
-61
ASCOfficeOdfFile/src/odf/chart_build_oox.h
ASCOfficeOdfFile/src/odf/chart_build_oox.h
+11
-1
ASCOfficeOdfFile/src/odf/datatypes/color.cpp
ASCOfficeOdfFile/src/odf/datatypes/color.cpp
+3
-2
ASCOfficeOdfFile/src/odf/datatypes/dategroup.cpp
ASCOfficeOdfFile/src/odf/datatypes/dategroup.cpp
+94
-0
ASCOfficeOdfFile/src/odf/datatypes/dategroup.h
ASCOfficeOdfFile/src/odf/datatypes/dategroup.h
+78
-0
ASCOfficeOdfFile/src/odf/draw_frame.cpp
ASCOfficeOdfFile/src/odf/draw_frame.cpp
+21
-5
ASCOfficeOdfFile/src/odf/draw_frame.h
ASCOfficeOdfFile/src/odf/draw_frame.h
+16
-18
ASCOfficeOdfFile/src/odf/draw_frame_docx.cpp
ASCOfficeOdfFile/src/odf/draw_frame_docx.cpp
+11
-8
ASCOfficeOdfFile/src/odf/draw_frame_pptx.cpp
ASCOfficeOdfFile/src/odf/draw_frame_pptx.cpp
+16
-12
ASCOfficeOdfFile/src/odf/draw_frame_xlsx.cpp
ASCOfficeOdfFile/src/odf/draw_frame_xlsx.cpp
+36
-20
ASCOfficeOdfFile/src/odf/font_face.cpp
ASCOfficeOdfFile/src/odf/font_face.cpp
+14
-1
ASCOfficeOdfFile/src/odf/font_face.h
ASCOfficeOdfFile/src/odf/font_face.h
+24
-2
ASCOfficeOdfFile/src/odf/odf_content_xml.cpp
ASCOfficeOdfFile/src/odf/odf_content_xml.cpp
+9
-1
ASCOfficeOdfFile/src/odf/odf_document.cpp
ASCOfficeOdfFile/src/odf/odf_document.cpp
+3
-1
ASCOfficeOdfFile/src/odf/odf_document_impl.cpp
ASCOfficeOdfFile/src/odf/odf_document_impl.cpp
+128
-58
ASCOfficeOdfFile/src/odf/odf_document_impl.h
ASCOfficeOdfFile/src/odf/odf_document_impl.h
+12
-9
ASCOfficeOdfFile/src/odf/office_binary_data.cpp
ASCOfficeOdfFile/src/odf/office_binary_data.cpp
+28
-1
ASCOfficeOdfFile/src/odf/office_binary_data.h
ASCOfficeOdfFile/src/odf/office_binary_data.h
+3
-5
ASCOfficeOdfFile/src/odf/office_chart.cpp
ASCOfficeOdfFile/src/odf/office_chart.cpp
+20
-18
ASCOfficeOdfFile/src/odf/office_chart.h
ASCOfficeOdfFile/src/odf/office_chart.h
+28
-31
ASCOfficeOdfFile/src/odf/office_document.h
ASCOfficeOdfFile/src/odf/office_document.h
+3
-7
ASCOfficeOdfFile/src/odf/office_elements_type.h
ASCOfficeOdfFile/src/odf/office_elements_type.h
+3
-0
ASCOfficeOdfFile/src/odf/office_spreadsheet.cpp
ASCOfficeOdfFile/src/odf/office_spreadsheet.cpp
+4
-4
ASCOfficeOdfFile/src/odf/style_text_properties.cpp
ASCOfficeOdfFile/src/odf/style_text_properties.cpp
+27
-14
ASCOfficeOdfFile/src/odf/table_data_pilot_tables.cpp
ASCOfficeOdfFile/src/odf/table_data_pilot_tables.cpp
+122
-51
ASCOfficeOdfFile/src/odf/table_data_pilot_tables.h
ASCOfficeOdfFile/src/odf/table_data_pilot_tables.h
+60
-12
ASCOfficeOdfFile/win32/cpcommon.vcproj
ASCOfficeOdfFile/win32/cpcommon.vcproj
+8
-0
ASCOfficePPTFile/PptFormatTest/PptFormatTest.cpp
ASCOfficePPTFile/PptFormatTest/PptFormatTest.cpp
+1
-1
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_records/AxcExt.cpp
...ceXlsFile2/source/XlsFormat/Logic/Biff_records/AxcExt.cpp
+2
-0
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_records/Scatter.h
...iceXlsFile2/source/XlsFormat/Logic/Biff_records/Scatter.h
+0
-3
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_structures/ODRAW/OfficeArtFOPTE.h
...ce/XlsFormat/Logic/Biff_structures/ODRAW/OfficeArtFOPTE.h
+1
-1
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/AI.cpp
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/AI.cpp
+18
-0
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/AI.h
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/AI.h
+2
-3
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/ATTACHEDLABEL_bu.cpp
...2/source/XlsFormat/Logic/Biff_unions/ATTACHEDLABEL_bu.cpp
+16
-2
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/AXES.cpp
...fficeXlsFile2/source/XlsFormat/Logic/Biff_unions/AXES.cpp
+18
-12
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/AXES.h
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/AXES.h
+2
-0
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/DVAXIS.cpp
...iceXlsFile2/source/XlsFormat/Logic/Biff_unions/DVAXIS.cpp
+40
-34
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/IVAXIS.cpp
...iceXlsFile2/source/XlsFormat/Logic/Biff_unions/IVAXIS.cpp
+26
-5
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/SERIESAXIS.cpp
...lsFile2/source/XlsFormat/Logic/Biff_unions/SERIESAXIS.cpp
+7
-5
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/SS.cpp
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/SS.cpp
+16
-15
ASCOfficeXlsFile2/source/XlsFormat/Logic/ChartSheetSubstream.cpp
...ceXlsFile2/source/XlsFormat/Logic/ChartSheetSubstream.cpp
+6
-4
ASCOfficeXlsFile2/source/XlsXlsxConverter/XlsConverter.cpp
ASCOfficeXlsFile2/source/XlsXlsxConverter/XlsConverter.cpp
+4
-4
ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.cpp
...XlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.cpp
+6
-6
ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.h
...ceXlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.h
+2
-2
Common/OfficeFileFormatChecker.h
Common/OfficeFileFormatChecker.h
+1
-0
Common/OfficeFileFormatChecker2.cpp
Common/OfficeFileFormatChecker2.cpp
+41
-5
Common/OfficeFileFormats.h
Common/OfficeFileFormats.h
+3
-0
X2tConverter/src/ASCConverters.cpp
X2tConverter/src/ASCConverters.cpp
+82
-3
X2tConverter/src/ASCConverters.h
X2tConverter/src/ASCConverters.h
+6
-1
X2tConverter/src/cextracttools.cpp
X2tConverter/src/cextracttools.cpp
+16
-1
X2tConverter/src/cextracttools.h
X2tConverter/src/cextracttools.h
+4
-0
No files found.
ASCOfficeDocFile/DocDocxConverter/DocumentMapping.cpp
View file @
56bb39f7
...
...
@@ -902,7 +902,7 @@ namespace DocFileFormat
{
int
shape_type
=
oPicture
.
shapeContainer
->
getShapeType
();
if
(
shape_type
!=
msosptPictureFrame
)
picture
=
false
;
if
(
shape_type
!=
msosptPictureFrame
)
picture
=
false
;
//шаблон 1.doc картинка в колонтитуле
}
if
(
picture
)
...
...
ASCOfficeDocFile/DocDocxConverter/OfficeDrawing/PathParser.h
View file @
56bb39f7
...
...
@@ -149,7 +149,14 @@ namespace DocFileFormat
point
.
y
=
guides
[
index
].
param3
;
}
}
if
((
size_t
)
point
.
y
>
0xffff
)
{
point
.
y
&=
0xffff
;
}
if
((
size_t
)
point
.
x
>
0xffff
)
{
point
.
x
&=
0xffff
;
}
m_arPoints
.
push_back
(
point
);
}
}
...
...
ASCOfficeDocFile/DocDocxConverter/OfficeDrawing/ShapeContainer.h
View file @
56bb39f7
...
...
@@ -63,8 +63,25 @@ namespace DocFileFormat
Shape
*
sh
=
dynamic_cast
<
Shape
*>
(
*
iter
);
if
(
sh
)
{
if
(
sh
->
shapeType
)
return
sh
->
shapeType
->
GetTypeCode
();
else
return
0
;
if
(
sh
->
shapeType
)
{
return
sh
->
shapeType
->
GetTypeCode
();
}
else
{
for
(
std
::
vector
<
Record
*>::
const_iterator
iter1
=
this
->
Children
.
begin
();
iter1
!=
this
->
Children
.
end
();
iter1
++
)
{
ShapeOptions
*
sh_options
=
dynamic_cast
<
ShapeOptions
*>
(
*
iter1
);
if
(
sh_options
)
{
if
(
sh_options
->
OptionsByID
.
end
()
!=
sh_options
->
OptionsByID
.
find
(
Pib
))
{
return
msosptPictureFrame
;
}
}
}
return
0
;
}
}
}
return
0
;
...
...
ASCOfficeOdfFile/OdfFileTest/OdfFileTest.cpp
View file @
56bb39f7
...
...
@@ -34,9 +34,11 @@
#include <stdio.h>
#include <tchar.h>
#include "../../Common/OfficeFileFormatChecker.h"
#include "../../OfficeUtils/src/OfficeUtils.h"
#include "../../DesktopEditor/common/Directory.h"
#include "../src/ConvertOO2OOX.h"
#include "../include/logging.h"
#if defined(_WIN64)
...
...
@@ -45,30 +47,55 @@
#pragma comment(lib, "../../build/bin/icu/win_32/icuuc.lib")
#endif
HRESULT
convert_single
(
std
::
wstring
srcFileName
)
{
HRESULT
hr
=
S_OK
;
COfficeFileFormatChecker
fileChecker
(
srcFileName
);
int
_tmain
(
int
argc
,
_TCHAR
*
argv
[])
{
if
(
argc
<
2
)
return
1
;
std
::
wstring
dstPath
=
srcFileName
;
// + ; //xlsx pptx docx
switch
(
fileChecker
.
nFileType
)
{
case
AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT
:
case
AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT_FLAT
:
dstPath
+=
L"-my.docx"
;
break
;
HRESULT
hr
=
S_OK
;
//////////////////////////////////////////////////////////////////////////
std
::
wstring
srcFileName
=
argv
[
1
];
std
::
wstring
dstPath
=
argc
>
2
?
argv
[
2
]
:
srcFileName
+
L"-my.docx"
;
//xlsx pptx docx
case
AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS
:
case
AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS_FLAT
:
dstPath
+=
L"-my.xlsx"
;
break
;
std
::
wstring
outputDir
=
NSDirectory
::
GetFolderPath
(
dstPath
);
case
AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP
:
case
AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP_FLAT
:
dstPath
+=
L"-my.pptx"
;
break
;
default:
return
S_FALSE
;
}
//---------------------------------------------------------------------------------------------------
COfficeUtils
oCOfficeUtils
(
NULL
);
std
::
wstring
srcTempPath
=
NSDirectory
::
CreateDirectoryWithUniqueName
(
outputDir
);
std
::
wstring
outputDir
=
NSDirectory
::
GetFolderPath
(
dstPath
);
std
::
wstring
dstTempPath
=
NSDirectory
::
CreateDirectoryWithUniqueName
(
outputDir
);
std
::
wstring
srcTempPath
;
// распаковываем исходник во временную директорию
COfficeUtils
oCOfficeUtils
(
NULL
);
if
(
S_OK
!=
oCOfficeUtils
.
ExtractToDirectory
(
srcFileName
.
c_str
(),
srcTempPath
.
c_str
(),
NULL
,
0
))
return
S_FALSE
;
if
(
fileChecker
.
nFileType
==
AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT
||
fileChecker
.
nFileType
==
AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS
||
fileChecker
.
nFileType
==
AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP
)
{
srcTempPath
=
NSDirectory
::
CreateDirectoryWithUniqueName
(
outputDir
);
if
(
S_OK
!=
oCOfficeUtils
.
ExtractToDirectory
(
srcFileName
.
c_str
(),
srcTempPath
.
c_str
(),
NULL
,
0
))
return
S_FALSE
;
}
else
// flat
{
srcTempPath
=
srcFileName
;
}
_CP_LOG
<<
L"[info] "
<<
srcFileName
<<
std
::
endl
;
hr
=
ConvertOO2OOX
(
srcTempPath
,
dstTempPath
,
L"C:
\\
Windows
\\
Fonts"
,
false
,
NULL
);
NSDirectory
::
DeleteDirectory
(
srcTempPath
);
if
(
srcTempPath
!=
srcFileName
)
{
NSDirectory
::
DeleteDirectory
(
srcTempPath
);
}
if
(
hr
!=
S_OK
)
return
hr
;
...
...
@@ -77,6 +104,35 @@ int _tmain(int argc, _TCHAR* argv[])
NSDirectory
::
DeleteDirectory
(
dstTempPath
);
////////////////////////////////////////////////////////////////////////
return
0
;
return
hr
;
}
HRESULT
convert_directory
(
std
::
wstring
pathName
)
{
HRESULT
hr
=
S_OK
;
std
::
vector
<
std
::
wstring
>
arFiles
=
NSDirectory
::
GetFiles
(
pathName
,
false
);
for
(
size_t
i
=
0
;
i
<
arFiles
.
size
();
i
++
)
{
convert_single
(
arFiles
[
i
]);
}
return
S_OK
;
}
int
_tmain
(
int
argc
,
_TCHAR
*
argv
[])
{
if
(
argc
<
2
)
return
1
;
HRESULT
hr
=
-
1
;
if
(
NSFile
::
CFileBinary
::
Exists
(
argv
[
1
]))
{
hr
=
convert_single
(
argv
[
1
]);
}
else
if
(
NSDirectory
::
Exists
(
argv
[
1
]))
{
hr
=
convert_directory
(
argv
[
1
]);
}
return
hr
;
}
\ No newline at end of file
ASCOfficeOdfFile/OdfFileTest/OdfFileTest.vcproj
View file @
56bb39f7
...
...
@@ -336,6 +336,14 @@
Filter=
"cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier=
"{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath=
"..\..\Common\OfficeFileFormatChecker.h"
>
</File>
<File
RelativePath=
"..\..\Common\OfficeFileFormatChecker2.cpp"
>
</File>
<File
RelativePath=
"..\..\Common\3dParty\pole\pole.cpp"
>
...
...
ASCOfficeOdfFile/formulasconvert/formulasconvert_odf.cpp
View file @
56bb39f7
...
...
@@ -389,29 +389,37 @@ namespace formulasconvert {
}
std
::
wstring
forbidden_formulas
[]
=
{
L"NULLFORMULA"
//L"BETADIST",
//L"CEILING",
//L"FLOOR",
//L"RANK",
//L"ROUND",
//L"ROUNDDOWN",
//L"ROUNDUP",
//L"SUBTOTAL",
//L"FORMULA",
//L"ISREF"
};
bool
is_forbidden
(
const
std
::
wstring
&
formula
)
{
for
(
size_t
i
=
0
;
i
<
1
/*forbidden_formulas.size()*/
;
i
++
)
//std::wstring forbidden_formulas[] =
//{
// L"NULLFORMULA"
// //L"BETADIST",
// //L"CEILING",
// //L"FLOOR",
// //L"RANK",
// //L"ROUND",
// //L"ROUNDDOWN",
// //L"ROUNDUP",
// //L"SUBTOTAL",
// //L"FORMULA",
// //L"ISREF"
//};
std
::
wstring
is_forbidden
(
const
std
::
wstring
&
formula
)
{
std
::
wstring
result
=
formula
;
std
::
map
<
std
::
wstring
,
std
::
wstring
>
forbidden_formulas
;
forbidden_formulas
.
insert
(
std
::
make_pair
(
L"FORMULA"
,
L"_xlfn.FORMULATEXT"
));
for
(
std
::
map
<
std
::
wstring
,
std
::
wstring
>::
iterator
it
=
forbidden_formulas
.
begin
();
it
!=
forbidden_formulas
.
end
();
it
++
)
{
if
(
boost
::
algorithm
::
contains
(
formula
,
forbidden_formulas
[
i
]))
return
true
;
if
(
boost
::
algorithm
::
contains
(
formula
,
it
->
first
))
{
XmlUtils
::
replace_all
(
result
,
it
->
first
,
it
->
second
);
}
}
return
false
;
return
result
;
}
// заменить вертикальную черту во всех вхождениях в фигурных скобках, но не внутри строк
...
...
@@ -437,10 +445,7 @@ namespace formulasconvert {
std
::
wstring
odf2oox_converter
::
Impl
::
convert
(
const
std
::
wstring
&
expr
)
{
if
(
is_forbidden
(
expr
))
return
L"NULLFORMULA()"
;
std
::
wstring
workstr
=
expr
;
std
::
wstring
workstr
=
is_forbidden
(
expr
);
//boost::wregex complexRef(L"('(?!\\s\\'){0,1}.*?')");// Better_Donut.ods- cell(c27)
//std::wstring workstr = boost::regex_replace(
// expr,
...
...
@@ -517,10 +522,8 @@ namespace formulasconvert {
std
::
wstring
odf2oox_converter
::
Impl
::
convert_chart_distance
(
const
std
::
wstring
&
expr
)
{
if
(
is_forbidden
(
expr
))
return
L"NULLFORMULA()"
;
std
::
wstring
workstr
=
is_forbidden
(
expr
);
std
::
wstring
workstr
=
expr
;
boost
::
wregex
complexRef
(
L"('(?!
\\
s
\\
'){0,1}.*?')"
);
// поиск того что в апострофах и замена там
workstr
=
boost
::
regex_replace
(
...
...
ASCOfficeOdfFile/include/cpdoccore/odf/odf_document.h
View file @
56bb39f7
...
...
@@ -35,11 +35,15 @@
#include "../CPSharedPtr.h"
#include "../CPScopedPtr.h"
struct
ProgressCallback
;
namespace
cpdoccore
{
namespace
xml
{
class
sax
;
}
namespace
oox
{
class
docx_conversion_context
;
class
xlsx_conversion_context
;
...
...
@@ -54,9 +58,10 @@ class odf_document
{
public:
odf_document
(
const
std
::
wstring
&
Folder
,
const
ProgressCallback
*
CallBack
);
~
odf_document
();
odf_document
(
xml
::
sax
*
Reader
);
~
odf_document
();
public:
odf_read_context
&
odf_context
();
bool
docx_convert
(
oox
::
docx_conversion_context
&
Context
);
...
...
@@ -77,6 +82,7 @@ private:
_CP_SCOPED_PTR
(
Impl
)
impl_
;
};
typedef
shared_ptr
<
odf_document
>::
Type
odf_document_ptr
;
}
}
\ No newline at end of file
ASCOfficeOdfFile/src/ConvertOO2OOX.cpp
View file @
56bb39f7
...
...
@@ -97,14 +97,6 @@ HRESULT ConvertOO2OOX(const std::wstring & srcPath, const std::wstring & dstPath
if
(
encrypted
)
return
AVS_ERROR_DRM
;
//if (type<1)
//{
// if (ext == L".odt")type = 1;
// if (ext == L".ods")type = 2;
// if (ext == L".odp")type = 3;
//}
if
(
bOnlyPresentation
&&
type
!=
3
)
return
AVS_ERROR_UNEXPECTED
;
switch
(
type
)
...
...
ASCOfficeOdfFile/src/docx/mediaitems.h
View file @
56bb39f7
...
...
@@ -127,6 +127,7 @@ public:
if
(
sExt
==
L"m4v"
)
return
typeVideo
;
if
(
sExt
==
L"mp4"
)
return
typeVideo
;
if
(
sExt
==
L"mov"
)
return
typeVideo
;
if
(
sExt
==
L"mkv"
)
return
typeVideo
;
return
typeMedia
;
}
...
...
ASCOfficeOdfFile/src/docx/oox_chart_context.cpp
View file @
56bb39f7
...
...
@@ -118,6 +118,23 @@ void oox_chart_context::serialize(std::wostream & strm)
{
CP_XML_ATTR
(
L"val"
,
L"en-US"
);
}
if
(
pivot_source_
.
empty
()
==
false
)
{
set_cache_only
(
true
);
CP_XML_NODE
(
L"c:pivotSource"
)
{
CP_XML_NODE
(
L"c:name"
)
{
CP_XML_STREAM
()
<<
pivot_source_
;
}
CP_XML_NODE
(
L"c:fmtId"
)
{
CP_XML_ATTR
(
L"val"
,
0
);
}
}
}
CP_XML_NODE
(
L"c:chart"
)
{
if
(
plot_area_
.
current_chart_
->
is3D_
)
...
...
@@ -148,10 +165,42 @@ void oox_chart_context::serialize(std::wostream & strm)
shape
.
set
(
graphic_properties_
,
fill_
);
shape
.
oox_serialize
(
CP_XML_STREAM
());
if
(
pivot_source_
.
empty
()
==
false
)
{
CP_XML_NODE
(
L"c:extLst"
)
{
CP_XML_NODE
(
L"c:ext"
)
{
CP_XML_ATTR
(
L"uri"
,
L"{781A3756-C4B2-4CAC-9D66-4F8BD8637D16}"
);
CP_XML_ATTR
(
L"xmlns:c14"
,
L"http://schemas.microsoft.com/office/drawing/2007/8/2/chart"
);
CP_XML_NODE
(
L"c14:pivotOptions"
)
{
CP_XML_NODE
(
L"c14:dropZoneFilter"
)
{
CP_XML_ATTR
(
L"val"
,
1
);
}
CP_XML_NODE
(
L"c14:dropZoneCategories"
)
{
CP_XML_ATTR
(
L"val"
,
1
);
}
CP_XML_NODE
(
L"c14:dropZoneData"
)
{
CP_XML_ATTR
(
L"val"
,
1
);
}
CP_XML_NODE
(
L"c14:dropZoneSeries"
)
{
CP_XML_ATTR
(
L"val"
,
1
);
}
CP_XML_NODE
(
L"c14:dropZonesVisible"
)
{
CP_XML_ATTR
(
L"val"
,
1
);
}
}
}
}
}
}
}
}
oox_chart_context
::~
oox_chart_context
()
...
...
@@ -160,7 +209,7 @@ oox_chart_context::~oox_chart_context()
void
oox_chart_context
::
set_cache_only
(
bool
val
)
{
for
(
in
t
i
=
0
;
i
<
plot_area_
.
charts_
.
size
();
i
++
)
for
(
size_
t
i
=
0
;
i
<
plot_area_
.
charts_
.
size
();
i
++
)
{
plot_area_
.
charts_
[
i
]
->
set_cache_only
(
val
);
}
...
...
ASCOfficeOdfFile/src/docx/oox_chart_context.h
View file @
56bb39f7
...
...
@@ -63,6 +63,10 @@ public:
void
serialize
(
std
::
wostream
&
strm
);
void
dump_rels
(
rels
&
Rels
);
void
set_pivot_chart
(
const
std
::
wstring
&
source
)
{
pivot_source_
=
source
;
}
void
set_title
(
odf_reader
::
chart
::
title
&
t
)
{
title_
.
set_content
(
t
);
...
...
@@ -130,6 +134,8 @@ private:
cpdoccore
::
oox
::
oox_plot_area
plot_area_
;
cpdoccore
::
oox
::
oox_chart_legend
legend_
;
std
::
wstring
pivot_source_
;
std
::
vector
<
odf_reader
::
_property
>
graphic_properties_
;
_oox_fill
fill_
;
};
...
...
ASCOfficeOdfFile/src/docx/oox_chart_series.cpp
View file @
56bb39f7
...
...
@@ -37,6 +37,8 @@
#include <cpdoccore/xml/simple_xml_writer.h>
#include "../odf/style_text_properties.h"
#include "xlsx_utils.h"
#include "oox_chart_series.h"
#include "../formulasconvert/formulasconvert.h"
...
...
@@ -258,8 +260,11 @@ void oox_chart_series::oox_serialize_common(std::wostream & _Wostream)
CP_XML_ATTR
(
L"idx"
,
j
);
double
val
=
0
;
try
{
val
=
boost
::
lexical_cast
<
double
>
(
v
);}
catch
(...){}
if
(
oox
::
IsNumber
(
v
))
{
try
{
val
=
boost
::
lexical_cast
<
double
>
(
v
);}
catch
(...){}
}
CP_XML_NODE
(
L"c:v"
)
{
CP_XML_CONTENT
(
val
);
...
...
@@ -293,8 +298,11 @@ void oox_chart_series::oox_serialize_common(std::wostream & _Wostream)
CP_XML_ATTR
(
L"idx"
,
j
);
double
val
=
0
;
try
{
val
=
boost
::
lexical_cast
<
double
>
(
v
);}
catch
(...){}
if
(
oox
::
IsNumber
(
v
))
{
try
{
val
=
boost
::
lexical_cast
<
double
>
(
v
);}
catch
(...){}
}
CP_XML_NODE
(
L"c:v"
)
{
CP_XML_CONTENT
(
val
);
...
...
ASCOfficeOdfFile/src/docx/oox_drawing.cpp
View file @
56bb39f7
...
...
@@ -171,7 +171,7 @@ void oox_serialize_ln(std::wostream & strm, const std::vector<odf_reader::_prope
if
(
color
.
empty
()
)
{
if
(
always_draw
)
color
=
L"000000"
;
else
color
=
L"
ffffff
"
;
else
color
=
L"
FFFFFFFF
"
;
}
CP_XML_NODE
(
L"a:srgbClr"
)
...
...
@@ -232,11 +232,11 @@ void oox_serialize_aLst(std::wostream & strm, const std::vector<odf_reader::_pro
if
(
values
[
i
].
empty
())
continue
;
CP_XML_NODE
(
L"a:gd"
)
{
if
(
values
.
size
()
>
1
||
bModifiers
)
//
if (values.size() > 1 || bModifiers)
//весьма странное .. для некоторых модификаторов (напр math...) нужно указывать множественность их
CP_XML_ATTR
(
L"name"
,
L"adj"
+
std
::
to_wstring
(
i
+
1
));
else
CP_XML_ATTR
(
L"name"
,
L"adj"
);
//
else
//
CP_XML_ATTR(L"name", L"adj");
CP_XML_ATTR
(
L"fmla"
,
L"val "
+
values
[
i
]);
}
...
...
@@ -263,8 +263,8 @@ void _oox_drawing::serialize_bodyPr(std::wostream & strm, const std::wstring & n
odf_reader
::
GetProperty
(
prop
,
L"text-padding-bottom"
,
dPaddingBottom
);
if
(
dPaddingLeft
)
CP_XML_ATTR
(
L"lIns"
,
(
int
)(
*
dPaddingLeft
));
if
(
dPaddingRight
)
CP_XML_ATTR
(
L"rIns"
,
(
int
)(
*
dPaddingRight
));
if
(
dPaddingTop
)
CP_XML_ATTR
(
L"tIns"
,
(
int
)(
*
dPaddingTop
));
if
(
dPaddingRight
)
CP_XML_ATTR
(
L"rIns"
,
(
int
)(
*
dPaddingRight
));
if
(
dPaddingBottom
)
CP_XML_ATTR
(
L"bIns"
,
(
int
)(
*
dPaddingBottom
));
if
(
inGroup
==
false
)
...
...
ASCOfficeOdfFile/src/docx/oox_drawing_fills.cpp
View file @
56bb39f7
...
...
@@ -168,7 +168,7 @@ void oox_serialize_bitmap_fill(std::wostream & strm, const _oox_fill & val)
{
if
(
val
.
bitmap
->
isInternal
)
{
CP_XML_ATTR
(
L"xmlns:r"
,
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships"
);
//
CP_XML_ATTR(L"xmlns:r", L"http://schemas.openxmlformats.org/officeDocument/2006/relationships");
CP_XML_ATTR
(
L"r:embed"
,
val
.
bitmap
->
rId
);
}
else
...
...
ASCOfficeOdfFile/src/docx/oox_package.cpp
View file @
56bb39f7
...
...
@@ -81,6 +81,7 @@ static std::wstring get_mime_type(const std::wstring & extension)
else
if
(
L"mov"
==
extension
)
return
L"video/unknown"
;
else
if
(
L"mp4"
==
extension
)
return
L"video/unknown"
;
else
if
(
L"m4v"
==
extension
)
return
L"video/unknown"
;
else
if
(
L"mkv"
==
extension
)
return
L"video/unknown"
;
else
if
(
L"bin"
==
extension
)
return
L"application/vnd.openxmlformats-officedocument.oleObject"
;
else
if
(
L"xlsx"
==
extension
)
return
L"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
;
...
...
ASCOfficeOdfFile/src/docx/xlsx_pivots_context.cpp
View file @
56bb39f7
This diff is collapsed.
Click to expand it.
ASCOfficeOdfFile/src/docx/xlsx_pivots_context.h
View file @
56bb39f7
...
...
@@ -49,21 +49,36 @@ public:
void
start_table
();
int
end_table
();
void
start_field
();
void
set_field_name
(
std
::
wstring
name
);
void
set_field_type
(
int
type
);
void
set_field_function
(
int
type
);
void
set_field_user_function
(
std
::
wstring
f
);
void
add_field_subtotal
(
int
function_type
);
void
add_field_cache
(
int
index
,
std
::
wstring
value
);
void
start_field
();
void
set_field_name
(
std
::
wstring
name
);
void
set_field_type
(
int
type
,
int
hierarchy
);
void
set_field_function
(
int
type
);
void
set_field_user_function
(
std
::
wstring
f
);
void
add_field_subtotal
(
int
function_type
);
void
add_field_cache
(
int
index
,
std
::
wstring
value
);
void
set_field_show_empty
(
bool
val
);
void
set_field_data_layout
(
bool
val
);
void
set_field_sort
(
int
type
);
void
set_field_groups
(
int
type
);
void
set_repeat_item_labels
(
bool
val
);
void
end_field
();
int
get_count
();
void
set_view_name
(
std
::
wstring
name
);
void
set_view_target_range
(
std
::
wstring
ref
);
void
set_view_target_table_name
(
std
::
wstring
name
);
void
add_button_header
(
std
::
wstring
ref
);
void
set_identify_categories
(
bool
val
);
void
set_drill
(
bool
val
);
void
set_source_range
(
std
::
wstring
table_name
,
std
::
wstring
ref
);
void
set_source_database
(
std
::
wstring
database
,
std
::
wstring
table_name
);
void
set_source_database_query
(
std
::
wstring
database
,
std
::
wstring
query
);
void
set_source_database_sql
(
std
::
wstring
database
,
std
::
wstring
sql
);
void
write_cache_definitions_to
(
int
index
,
std
::
wostream
&
strm
);
void
write_cache_records_to
(
int
index
,
std
::
wostream
&
strm
);
...
...
@@ -74,6 +89,8 @@ public:
void
dump_rels_cache
(
int
index
,
rels
&
Rels
);
void
dump_rels_view
(
int
index
,
rels
&
Rels
);
std
::
wstring
get_chart_source
(
std
::
wstring
name
);
void
add_connections
(
std
::
wstring
connections
);
bool
is_connections
();
...
...
ASCOfficeOdfFile/src/docx/xlsx_table_state.cpp
View file @
56bb39f7
...
...
@@ -394,6 +394,7 @@ void xlsx_table_state::serialize_table_format (std::wostream & strm)
{
CP_XML_NODE
(
L"dimension"
)
{
if
(
current_table_column_
<
0
)
current_table_column_
=
columns_count_
;
std
::
wstring
ref2
=
getCellAddress
(
current_table_column_
,
current_table_row_
);
CP_XML_ATTR
(
L"ref"
,
L"A1:"
+
ref2
);
}
...
...
@@ -433,10 +434,10 @@ void xlsx_table_state::serialize_table_format (std::wostream & strm)
{
CP_XML_NODE
(
L"selection"
)
{
CP_XML_ATTR
(
L"sqref"
,
getCellAddress
(
col
,
row
));
CP_XML_ATTR
(
L"activeCellId"
,
0
);
CP_XML_ATTR
(
L"activeCell"
,
getCellAddress
(
col
,
row
));
CP_XML_ATTR
(
L"activeCellId"
,
0
);
CP_XML_ATTR
(
L"pane"
,
L"topLeft"
);
CP_XML_ATTR
(
L"sqref"
,
getCellAddress
(
col
,
row
));
}
}
...
...
ASCOfficeOdfFile/src/docx/xlsx_utils.cpp
View file @
56bb39f7
...
...
@@ -30,7 +30,6 @@
*
*/
#include "xlsx_utils.h"
#include <boost/lexical_cast.hpp>
...
...
@@ -46,6 +45,14 @@ namespace cpdoccore {
namespace
oox
{
bool
IsNumber
(
const
std
::
wstring
&
value
)
{
boost
::
wregex
rule
(
L"
\\
-?^[0-9]*[.,]?[0-9]*$"
);
boost
::
match_results
<
std
::
wstring
::
const_iterator
>
results
;
return
boost
::
regex_search
(
value
/*.begin(), value.end(), results*/
,
rule
);
}
std
::
wstring
getColAddress
(
size_t
col
)
{
static
const
size_t
r
=
(
L'Z'
-
L'A'
+
1
);
...
...
@@ -62,8 +69,6 @@ std::wstring getColAddress(size_t col)
return
std
::
wstring
(
1
,
(
wchar_t
)(
L'A'
+
col
));
}
std
::
wstring
getRowAddress
(
size_t
row
)
{
return
std
::
to_wstring
(
row
+
1
);
...
...
ASCOfficeOdfFile/src/docx/xlsx_utils.h
View file @
56bb39f7
...
...
@@ -40,6 +40,8 @@ namespace cpdoccore {
namespace
oox
{
bool
IsNumber
(
const
std
::
wstring
&
value
);
std
::
wstring
getColAddress
(
size_t
col
);
std
::
wstring
getRowAddress
(
size_t
row
);
...
...
ASCOfficeOdfFile/src/docx/xlsxconversioncontext.cpp
View file @
56bb39f7
...
...
@@ -447,6 +447,18 @@ void xlsx_conversion_context::end_table()
get_table_context
().
dump_rels_hyperlinks
(
current_sheet
().
sheet_rels
());
get_table_context
().
dump_rels_ole_objects
(
current_sheet
().
sheet_rels
());
typedef
std
::
multimap
<
std
::
wstring
,
int
>
_mapPivotsTableView
;
std
::
pair
<
_mapPivotsTableView
::
iterator
,
_mapPivotsTableView
::
iterator
>
range
;
range
=
mapPivotsTableView_
.
equal_range
(
current_sheet
().
name
());
for
(
_mapPivotsTableView
::
iterator
it
=
range
.
first
;
it
!=
range
.
second
;
++
it
)
{
current_sheet
().
sheet_rels
().
add
(
oox
::
relationship
(
L"pvId"
+
std
::
to_wstring
(
it
->
second
),
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/pivotTable"
,
L"../pivotTables/pivotTable"
+
std
::
to_wstring
(
it
->
second
)
+
L".xml"
));
}
if
(
!
get_drawing_context
().
empty
())
{
std
::
wstringstream
strm
;
...
...
@@ -702,6 +714,10 @@ void xlsx_conversion_context::end_hyperlink(std::wstring const & href)
xlsx_text_context_
.
end_span2
();
}
}
void
xlsx_conversion_context
::
add_pivot_sheet_source
(
const
std
::
wstring
&
sheet_name
,
int
index_table_view
)
{
//ващето в либре жесткая привязка что на одном листе тока одна сводная может быть ..
mapPivotsTableView_
.
insert
(
std
::
make_pair
(
sheet_name
,
index_table_view
));
}
void
xlsx_conversion_context
::
start_conditional_format
(
std
::
wstring
ref
)
{
...
...
ASCOfficeOdfFile/src/docx/xlsxconversioncontext.h
View file @
56bb39f7
...
...
@@ -137,6 +137,8 @@ public:
void
end_hyperlink
(
std
::
wstring
const
&
href
);
//------------------------------------------------------------------------------------
void
add_pivot_sheet_source
(
const
std
::
wstring
&
sheet_name
,
int
index_table_view
);
void
start_conditional_format
(
std
::
wstring
ref
);
void
end_conditional_format
(){}
...
...
@@ -200,6 +202,7 @@ private:
num_format_context
num_format_context_
;
size_t
default_style_
;
mediaitems
mediaitems_
;
std
::
multimap
<
std
::
wstring
,
int
>
mapPivotsTableView_
;
xlsx_style_manager
xlsx_style_
;
xlsx_defined_names
xlsx_defined_names_
;
...
...
ASCOfficeOdfFile/src/odf/chart_build_oox.cpp
View file @
56bb39f7
This diff is collapsed.
Click to expand it.
ASCOfficeOdfFile/src/odf/chart_build_oox.h
View file @
56bb39f7
...
...
@@ -111,6 +111,7 @@ public:
width_pt_
(
0
),
height_pt_
(
0
),
in_axis_
(
false
),
bPivotChart_
(
false
),
current_table_column_
(
0
),
current_table_row_
(
0
),
columns_spanned_num_
(
0
),
...
...
@@ -124,6 +125,8 @@ public:
{
}
void
set_pivot_source
(
std
::
wstring
const
&
val
);
void
set_width
(
double
valPt
);
void
set_height
(
double
valPt
);
...
...
@@ -170,6 +173,9 @@ public:
std
::
wstring
style_name_
;
std
::
wstring
name_
;
std
::
wstring
pivot_source_
;
bool
bPivotChart_
;
bool
in_axis_
;
std
::
vector
<
chart
::
axis
>
axises_
;
std
::
vector
<
chart
::
series
>
series_
;
...
...
@@ -195,6 +201,7 @@ public:
oox
::
_oox_fill
chart_fill_
;
std
::
vector
<
_cell
>
cash_values
;
std
::
map
<
std
::
wstring
,
_cell
>
cash_pivot
;
//---------------------------------------
std
::
wstring
target_table_
;
...
...
@@ -216,6 +223,8 @@ public:
class
process_build_object
:
public
base_visitor
,
public
visitor
<
office_document
>
,
public
const_visitor
<
office_document_content
>
,
public
visitor
<
office_document_content
>
,
...
...
@@ -283,7 +292,8 @@ private:
virtual
void
on_not_impl
(
std
::
string
const
&
message
);
public:
virtual
void
visit
(
office_document
&
val
);
virtual
void
visit
(
const
office_document_content
&
val
);
virtual
void
visit
(
office_document_content
&
val
);
...
...
ASCOfficeOdfFile/src/odf/datatypes/color.cpp
View file @
56bb39f7
...
...
@@ -86,7 +86,8 @@ const std::wstring color::get_hex_value() const
{
boost
::
algorithm
::
trim
(
tmp
);
boost
::
algorithm
::
trim_left_if
(
tmp
,
boost
::
algorithm
::
is_any_of
(
"#"
));
return
tmp
;
return
XmlUtils
::
GetUpper
(
tmp
);
}
else
if
(
tmp
.
size
()
==
6
)
{
...
...
@@ -96,7 +97,7 @@ const std::wstring color::get_hex_value() const
unsigned
int
t
=
0
;
if
((
s
<<
tmp
)
&&
(
s
>>
std
::
hex
>>
t
)
&&
(
s
>>
std
::
ws
).
eof
())
{
return
tmp
;
return
XmlUtils
::
GetUpper
(
tmp
)
;
}
}
catch
(...)
...
...
ASCOfficeOdfFile/src/odf/datatypes/dategroup.cpp
0 → 100644
View file @
56bb39f7
/*
* (c) Copyright Ascensio System SIA 2010-2017
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
* EU, LV-1021.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
#include "dategroup.h"
#include <boost/algorithm/string.hpp>
#include <ostream>
namespace
cpdoccore
{
namespace
odf_types
{
std
::
wostream
&
operator
<<
(
std
::
wostream
&
_Wostream
,
const
date_group
&
_Val
)
{
switch
(
_Val
.
get_type
())
{
case
date_group
:
:
seconds
:
_Wostream
<<
L"seconds"
;
break
;
case
date_group
:
:
minutes
:
_Wostream
<<
L"minutes"
;
break
;
case
date_group
:
:
hours
:
_Wostream
<<
L"hours"
;
break
;
case
date_group
:
:
days
:
_Wostream
<<
L"days"
;
break
;
case
date_group
:
:
months
:
_Wostream
<<
L"months"
;
break
;
case
date_group
:
:
quarters
:
_Wostream
<<
L"quarters"
;
break
;
case
date_group
:
:
years
:
_Wostream
<<
L"years"
;
break
;
default:
break
;
}
return
_Wostream
;
}
date_group
date_group
::
parse
(
const
std
::
wstring
&
Str
)
{
std
::
wstring
tmp
=
Str
;
boost
::
algorithm
::
to_lower
(
tmp
);
if
(
tmp
==
L"seconds"
)
return
date_group
(
seconds
);
else
if
(
tmp
==
L"minutes"
)
return
date_group
(
minutes
);
else
if
(
tmp
==
L"hours"
)
return
date_group
(
hours
);
else
if
(
tmp
==
L"days"
)
return
date_group
(
days
);
else
if
(
tmp
==
L"months"
)
return
date_group
(
months
);
else
if
(
tmp
==
L"quarters"
)
return
date_group
(
quarters
);
else
if
(
tmp
==
L"years"
)
return
date_group
(
years
);
else
{
return
date_group
(
months
);
}
}
}
}
ASCOfficeOdfFile/src/odf/datatypes/dategroup.h
0 → 100644
View file @
56bb39f7
/*
* (c) Copyright Ascensio System SIA 2010-2017
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
* EU, LV-1021.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
#pragma once
#include <iosfwd>
#include <string>
#include "odfattributes.h"
namespace
cpdoccore
{
namespace
odf_types
{
class
date_group
{
public:
enum
type
{
seconds
,
minutes
,
hours
,
days
,
months
,
quarters
,
years
};
date_group
()
{}
date_group
(
type
_Type
)
:
type_
(
_Type
)
{}
type
get_type
()
const
{
return
type_
;
};
static
date_group
parse
(
const
std
::
wstring
&
Str
);
private:
type
type_
;
};
std
::
wostream
&
operator
<<
(
std
::
wostream
&
_Wostream
,
const
date_group
&
_Val
);
}
APPLY_PARSE_XML_ATTRIBUTES
(
odf_types
::
date_group
);
}
ASCOfficeOdfFile/src/odf/draw_frame.cpp
View file @
56bb39f7
...
...
@@ -105,7 +105,10 @@ void draw_image::add_child_element( xml::sax * Reader, const std::wstring & Ns,
//CP_NOT_APPLICABLE_ELM();
}
}
std
::
wostream
&
draw_image
::
text_to_stream
(
std
::
wostream
&
_Wostream
)
const
{
return
_Wostream
;
}
// draw:chart
////////////////////////////////////////////////////////////////////////////////////////////////////
const
wchar_t
*
draw_chart
::
ns
=
L"draw"
;
...
...
@@ -151,6 +154,13 @@ void draw_g::add_child_element( xml::sax * Reader, const std::wstring & Ns, cons
{
CP_CREATE_ELEMENT
(
content_
);
}
std
::
wostream
&
draw_g
::
text_to_stream
(
std
::
wostream
&
_Wostream
)
const
{
CP_SERIALIZE_TEXT
(
content_
);
return
_Wostream
;
}
// draw:frame
//////////////////////////////////////////////////////////////////////////////////////////////////
const
wchar_t
*
draw_frame
::
ns
=
L"draw"
;
...
...
@@ -261,7 +271,11 @@ void draw_object::add_attributes( const xml::attributes_wc_ptr & Attributes )
void
draw_object
::
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
)
{
CP_NOT_APPLICABLE_ELM
();
// TODO
if
CP_CHECK_NAME
(
L"office"
,
L"document"
)
{
//embedded
odf_document_
=
odf_document_ptr
(
new
odf_document
(
Reader
));
}
}
// draw:object
...
...
@@ -328,8 +342,10 @@ std::wstring draw_object_ole::detectObject(const std::wstring &fileName)
}
std
::
wstring
draw_object
::
office_convert
(
odf_document
*
odfDocument
,
int
type
)
std
::
wstring
draw_object
::
office_convert
(
odf_document
_ptr
odfDocument
,
int
type
)
{
if
(
!
odfDocument
)
return
L""
;
std
::
wstring
href_result
;
std
::
wstring
folderPath
=
odfDocument
->
get_folder
();
std
::
wstring
objectOutPath
=
NSDirectory
::
CreateDirectoryWithUniqueName
(
folderPath
);
...
...
@@ -337,7 +353,7 @@ std::wstring draw_object::office_convert(odf_document * odfDocument, int type)
if
(
type
==
1
)
{
oox
::
package
::
docx_document
outputDocx
;
oox
::
docx_conversion_context
conversionDocxContext
(
odfDocument
);
oox
::
docx_conversion_context
conversionDocxContext
(
odfDocument
.
get
()
);
conversionDocxContext
.
set_output_document
(
&
outputDocx
);
//conversionContext.set_font_directory (fontsPath);
...
...
@@ -356,7 +372,7 @@ std::wstring draw_object::office_convert(odf_document * odfDocument, int type)
if
(
type
==
2
)
{
oox
::
package
::
xlsx_document
outputXlsx
;
oox
::
xlsx_conversion_context
conversionXlsxContext
(
odfDocument
);
oox
::
xlsx_conversion_context
conversionXlsxContext
(
odfDocument
.
get
()
);
conversionXlsxContext
.
set_output_document
(
&
outputXlsx
);
//conversionContext.set_font_directory (fontsPath);
...
...
ASCOfficeOdfFile/src/odf/draw_frame.h
View file @
56bb39f7
...
...
@@ -49,13 +49,14 @@ namespace cpdoccore {
namespace
odf_reader
{
/// draw-image-attlist
class
odf_document
;
typedef
shared_ptr
<
odf_document
>::
Type
odf_document_ptr
;
class
draw_image_attlist
{
public:
void
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
);
public:
_CP_OPT
(
std
::
wstring
)
draw_filter_name_
;
};
...
...
@@ -69,7 +70,9 @@ public:
static
const
ElementType
type
=
typeDrawImage
;
CPDOCCORE_DEFINE_VISITABLE
();
virtual
void
docx_convert
(
oox
::
docx_conversion_context
&
Context
);
virtual
std
::
wostream
&
text_to_stream
(
std
::
wostream
&
_Wostream
)
const
;
virtual
void
docx_convert
(
oox
::
docx_conversion_context
&
Context
);
virtual
void
xlsx_convert
(
oox
::
xlsx_conversion_context
&
Context
);
virtual
void
pptx_convert
(
oox
::
pptx_conversion_context
&
Context
);
...
...
@@ -79,14 +82,15 @@ private:
draw_image_attlist
draw_image_attlist_
;
odf_types
::
common_xlink_attlist
common_xlink_attlist_
;
office_element_ptr
office_binary_data_
;
office_element_ptr
office_binary_data_
;
office_element_ptr_array
content_
;
};
CP_REGISTER_OFFICE_ELEMENT2
(
draw_image
);
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//draw-chart-attlist
//------------------------------------------------------------------------------------------------------
class
draw_chart_attlist
{
public:
...
...
@@ -134,7 +138,6 @@ class draw_frame_attlist
public:
void
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
);
public:
_CP_OPT
(
std
::
wstring
)
draw_copy_of_
;
_CP_OPT
(
odf_types
::
length_or_percent
)
fo_min_width_
;
_CP_OPT
(
odf_types
::
length_or_percent
)
fo_min_height_
;
...
...
@@ -191,15 +194,12 @@ private:
CP_REGISTER_OFFICE_ELEMENT2
(
draw_frame
);
//-------------------------------------------------------------------------------------------------------------
//draw-frame-attlist
class
draw_g_attlist
{
public:
void
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
);
};
class
draw_g
:
public
office_element_impl
<
draw_g
>
{
public:
...
...
@@ -209,7 +209,9 @@ public:
static
const
ElementType
type
=
typeDrawG
;
CPDOCCORE_DEFINE_VISITABLE
();
virtual
void
docx_convert
(
oox
::
docx_conversion_context
&
Context
);
virtual
std
::
wostream
&
text_to_stream
(
std
::
wostream
&
_Wostream
)
const
;
virtual
void
docx_convert
(
oox
::
docx_conversion_context
&
Context
);
virtual
void
xlsx_convert
(
oox
::
xlsx_conversion_context
&
Context
);
virtual
void
pptx_convert
(
oox
::
pptx_conversion_context
&
Context
);
...
...
@@ -226,7 +228,6 @@ private:
CP_REGISTER_OFFICE_ELEMENT2
(
draw_g
);
//-------------------------------------------------------------------------------------------------------------
// draw-text-box-attlist
class
draw_text_box_attlist
{
public:
...
...
@@ -268,7 +269,6 @@ private:
CP_REGISTER_OFFICE_ELEMENT2
(
draw_text_box
);
//-------------------------------------------------------------------------------------------------------------
/// draw-object-attlist
class
draw_object_attlist
{
public:
...
...
@@ -280,7 +280,6 @@ public:
};
// draw:object
class
draw_object
:
public
office_element_impl
<
draw_object
>
{
public:
...
...
@@ -297,16 +296,17 @@ public:
draw_object_attlist
draw_object_attlist_
;
odf_types
::
common_xlink_attlist
common_xlink_attlist_
;
odf_document_ptr
odf_document_
;
private:
virtual
void
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
);
virtual
void
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
);
std
::
wstring
office_convert
(
odf_document
*
odfDocument
,
int
type
);
std
::
wstring
office_convert
(
odf_document
_ptr
odfDocument
,
int
type
);
};
CP_REGISTER_OFFICE_ELEMENT2
(
draw_object
);
// draw:object-ole
class
draw_object_ole
:
public
office_element_impl
<
draw_object
>
{
public:
...
...
@@ -332,7 +332,6 @@ private:
CP_REGISTER_OFFICE_ELEMENT2
(
draw_object_ole
);
// draw:param
class
draw_param
:
public
office_element_impl
<
draw_param
>
{
public:
...
...
@@ -356,7 +355,6 @@ private:
CP_REGISTER_OFFICE_ELEMENT2
(
draw_param
);
// draw:plugin
class
draw_plugin
:
public
office_element_impl
<
draw_plugin
>
{
public:
...
...
ASCOfficeOdfFile/src/odf/draw_frame_docx.cpp
View file @
56bb39f7
...
...
@@ -1408,22 +1408,25 @@ void draw_object::docx_convert(oox::docx_conversion_context & Context)
{
std
::
wstring
href
=
common_xlink_attlist_
.
href_
.
get_value_or
(
L""
);
std
::
wstring
folderPath
=
Context
.
root
()
->
get_folder
();
std
::
wstring
objectPath
=
folderPath
+
FILE_SEPARATOR_STR
+
href
;
if
(
!
odf_document_
)
{
std
::
wstring
folderPath
=
Context
.
root
()
->
get_folder
();
std
::
wstring
objectPath
=
folderPath
+
FILE_SEPARATOR_STR
+
href
;
//normalize path
??? todooo
XmlUtils
::
replace_all
(
objectPath
,
FILE_SEPARATOR_STR
+
std
::
wstring
(
L"./"
),
FILE_SEPARATOR_STR
);
// normalize path ?
??? todooo
XmlUtils
::
replace_all
(
objectPath
,
FILE_SEPARATOR_STR
+
std
::
wstring
(
L"./"
),
FILE_SEPARATOR_STR
);
cpdoccore
::
odf_reader
::
odf_document
objectSubDoc
(
objectPath
,
NULL
);
odf_document_
=
odf_document_ptr
(
new
odf_document
(
objectPath
,
NULL
));
}
//---------------------------------------------------------------------------------------------------------------------
draw_frame
*
frame
=
NULL
;
oox
::
_docx_drawing
*
drawing
=
NULL
;
office_element
*
contentSubDoc
=
o
bjectSubDoc
.
get_impl
()
->
get_content
()
;
office_element
*
contentSubDoc
=
o
df_document_
?
odf_document_
->
get_impl
()
->
get_content
()
:
NULL
;
object_odf_context
objectBuild
(
href
);
if
(
contentSubDoc
)
{
process_build_object
process_build_object_
(
objectBuild
,
o
bjectSubDoc
.
odf_context
());
process_build_object
process_build_object_
(
objectBuild
,
o
df_document_
->
odf_context
());
contentSubDoc
->
accept
(
process_build_object_
);
objectBuild
.
docx_convert
(
Context
);
...
...
@@ -1493,7 +1496,7 @@ void draw_object::docx_convert(oox::docx_conversion_context & Context)
bool
&
use_image_replace
=
Context
.
get_drawing_context
().
get_use_image_replace
();
use_image_replace
=
true
;
std
::
wstring
href_new
=
office_convert
(
&
objectSubDoc
,
2
);
std
::
wstring
href_new
=
office_convert
(
odf_document_
,
2
);
if
(
!
href_new
.
empty
())
{
...
...
ASCOfficeOdfFile/src/odf/draw_frame_pptx.cpp
View file @
56bb39f7
...
...
@@ -255,18 +255,22 @@ void draw_text_box::pptx_convert(oox::pptx_conversion_context & Context)
}
void
draw_object
::
pptx_convert
(
oox
::
pptx_conversion_context
&
Context
)
{
try
{
try
{
std
::
wstring
href
=
common_xlink_attlist_
.
href_
.
get_value_or
(
L""
);
std
::
wstring
folderPath
=
Context
.
root
()
->
get_folder
();
std
::
wstring
objectPath
=
folderPath
+
FILE_SEPARATOR_STR
+
href
;
if
(
!
odf_document_
)
{
std
::
wstring
folderPath
=
Context
.
root
()
->
get_folder
();
std
::
wstring
objectPath
=
folderPath
+
FILE_SEPARATOR_STR
+
href
;
//normalize path
??? todooo
XmlUtils
::
replace_all
(
objectPath
,
FILE_SEPARATOR_STR
+
std
::
wstring
(
L"./"
),
FILE_SEPARATOR_STR
);
// normalize path ?
??? todooo
XmlUtils
::
replace_all
(
objectPath
,
FILE_SEPARATOR_STR
+
std
::
wstring
(
L"./"
),
FILE_SEPARATOR_STR
);
cpdoccore
::
odf_reader
::
odf_document
objectSubDoc
(
objectPath
,
NULL
);
odf_document_
=
odf_document_ptr
(
new
odf_document
(
objectPath
,
NULL
));
}
//---------------------------------------------------------------------------------------------------------------------
office_element
*
contentSubDoc
=
o
bjectSubDoc
.
get_impl
()
->
get_content
()
;
office_element
*
contentSubDoc
=
o
df_document_
?
odf_document_
->
get_impl
()
->
get_content
()
:
NULL
;
if
(
!
contentSubDoc
)
{
//здесь другой формат xml (не Open Office)
...
...
@@ -275,13 +279,13 @@ void draw_object::pptx_convert(oox::pptx_conversion_context & Context)
}
object_odf_context
objectBuild
(
href
);
process_build_object
process_build_object_
(
objectBuild
,
o
bjectSubDoc
.
odf_context
()
);
contentSubDoc
->
accept
(
process_build_object_
);
process_build_object
process_build_object_
(
objectBuild
,
o
df_document_
->
odf_context
()
);
contentSubDoc
->
accept
(
process_build_object_
);
//---------------------------------------------------------------------------------------------------------------------
if
(
objectBuild
.
object_type_
==
1
)
//диаграмма
{
const
std
::
wstring
href_draw
=
common_xlink_attlist_
.
href_
.
get_value_or
(
L""
);
const
std
::
wstring
href_draw
=
common_xlink_attlist_
.
href_
.
get_value_or
(
L"
Chart
"
);
objectBuild
.
pptx_convert
(
Context
);
Context
.
get_slide_context
().
set_chart
(
href_draw
);
// в рисовательной части только место объекта, рамочки ... и релсы
...
...
@@ -290,7 +294,7 @@ void draw_object::pptx_convert(oox::pptx_conversion_context & Context)
{
Context
.
get_slide_context
().
set_use_image_replacement
();
std
::
wstring
href_new
=
office_convert
(
&
objectSubDoc
,
1
);
std
::
wstring
href_new
=
office_convert
(
odf_document_
,
1
);
if
(
!
href_new
.
empty
())
{
...
...
@@ -324,7 +328,7 @@ void draw_object::pptx_convert(oox::pptx_conversion_context & Context)
{
Context
.
get_slide_context
().
set_use_image_replacement
();
std
::
wstring
href_new
=
office_convert
(
&
objectSubDoc
,
2
);
std
::
wstring
href_new
=
office_convert
(
odf_document_
,
2
);
if
(
!
href_new
.
empty
())
{
...
...
ASCOfficeOdfFile/src/odf/draw_frame_xlsx.cpp
View file @
56bb39f7
...
...
@@ -203,8 +203,19 @@ void draw_frame::xlsx_convert(oox::xlsx_conversion_context & Context)
void
draw_image
::
xlsx_convert
(
oox
::
xlsx_conversion_context
&
Context
)
{
const
std
::
wstring
href
=
common_xlink_attlist_
.
href_
.
get_value_or
(
L""
);
Context
.
get_drawing_context
().
set_image
(
href
);
std
::
wstring
href
=
common_xlink_attlist_
.
href_
.
get_value_or
(
L""
);
if
(
href
.
empty
()
&&
office_binary_data_
)
{
office_binary_data
*
binary_data
=
dynamic_cast
<
office_binary_data
*>
(
office_binary_data_
.
get
());
if
(
binary_data
)
{
href
=
binary_data
->
write_to
(
Context
.
root
()
->
get_folder
());
}
}
Context
.
get_drawing_context
().
set_image
(
href
);
////////////////////////////////////в принципе достаточно общая часть ...
Context
.
get_text_context
().
start_drawing_content
();
//... если в объекте есть текст он привяжется к объекту - иначе к ячейке
...
...
@@ -246,34 +257,39 @@ void draw_text_box::xlsx_convert(oox::xlsx_conversion_context & Context)
if
(
text_content_
.
length
()
>
0
)
{
Context
.
get_drawing_context
().
set_property
(
_property
(
L"text-content"
,
text_content_
));
Context
.
get_drawing_context
().
set_property
(
_property
(
L"text-content"
,
text_content_
));
}
}
void
draw_object
::
xlsx_convert
(
oox
::
xlsx_conversion_context
&
Context
)
{
try
{
std
::
wstring
href
=
common_xlink_attlist_
.
href_
.
get_value_or
(
L""
);
std
::
wstring
folderPath
=
Context
.
root
()
->
get_folder
();
std
::
wstring
objectPath
=
folderPath
+
FILE_SEPARATOR_STR
+
href
;
try
{
std
::
wstring
href
=
common_xlink_attlist_
.
href_
.
get_value_or
(
L""
);
if
(
!
odf_document_
)
{
std
::
wstring
folderPath
=
Context
.
root
()
->
get_folder
();
std
::
wstring
objectPath
=
folderPath
+
FILE_SEPARATOR_STR
+
href
;
// normalize path ???? todooo
XmlUtils
::
replace_all
(
objectPath
,
FILE_SEPARATOR_STR
+
std
::
wstring
(
L"./"
),
FILE_SEPARATOR_STR
);
// normalize path ???? todooo
XmlUtils
::
replace_all
(
objectPath
,
FILE_SEPARATOR_STR
+
std
::
wstring
(
L"./"
),
FILE_SEPARATOR_STR
);
cpdoccore
::
odf_reader
::
odf_document
objectSubDoc
(
objectPath
,
NULL
);
//---------------------------------------------------------------------------------------------------------------------
office_element
*
contentSubDoc
=
objectSubDoc
.
get_impl
()
->
get_content
();
odf_document_
=
odf_document_ptr
(
new
odf_document
(
objectPath
,
NULL
));
}
office_element
*
contentSubDoc
=
odf_document_
?
odf_document_
->
get_impl
()
->
get_content
()
:
NULL
;
if
(
!
contentSubDoc
)
{
//здесь другой формат xml (не Open Office)
//временно - замещающая картинка(если она конечно присутствует)
return
;
}
object_odf_context
objectBuild
(
href
);
if
(
contentSubDoc
)
{
process_build_object
process_build_object_
(
objectBuild
,
objectSubDoc
.
odf_context
());
contentSubDoc
->
accept
(
process_build_object_
);
}
process_build_object
process_build_object_
(
objectBuild
,
odf_document_
->
odf_context
()
);
contentSubDoc
->
accept
(
process_build_object_
);
//---------------------------------------------------------------------------------------------------------------------
if
(
objectBuild
.
object_type_
==
1
)
//диаграмма
{
const
std
::
wstring
href_draw
=
common_xlink_attlist_
.
href_
.
get_value_or
(
L""
);
const
std
::
wstring
href_draw
=
common_xlink_attlist_
.
href_
.
get_value_or
(
L"
chart
"
);
objectBuild
.
xlsx_convert
(
Context
);
Context
.
get_drawing_context
().
set_chart
(
href_draw
);
// в рисовательной части только место объекта, рамочки ... и релсы
...
...
@@ -282,7 +298,7 @@ void draw_object::xlsx_convert(oox::xlsx_conversion_context & Context)
{
Context
.
get_drawing_context
().
set_use_image_replacement
();
std
::
wstring
href_new
=
office_convert
(
&
objectSubDoc
,
1
);
std
::
wstring
href_new
=
office_convert
(
odf_document_
,
1
);
if
(
!
href_new
.
empty
())
{
...
...
ASCOfficeOdfFile/src/odf/font_face.cpp
View file @
56bb39f7
...
...
@@ -41,9 +41,22 @@
namespace
cpdoccore
{
namespace
odf_reader
{
const
wchar_t
*
svg_desc
::
ns
=
L"svg"
;
const
wchar_t
*
svg_desc
::
name
=
L"desc"
;
std
::
wostream
&
svg_desc
::
text_to_stream
(
std
::
wostream
&
_Wostream
)
const
{
_Wostream
<<
text_
;
return
_Wostream
;
}
void
svg_desc
::
add_text
(
const
std
::
wstring
&
Text
)
{
text_
=
Text
;
}
// svg:font-face-uri
//
////////////////////////////////////////////////////////////////////////////////////////////////
//
---------------------------------------------------------------------------------------
const
wchar_t
*
svg_font_face_uri
::
ns
=
L"svg"
;
const
wchar_t
*
svg_font_face_uri
::
name
=
L"font-face-uri"
;
...
...
ASCOfficeOdfFile/src/odf/font_face.h
View file @
56bb39f7
...
...
@@ -58,7 +58,6 @@ public:
odf_types
::
common_xlink_attlist
common_xlink_attlist_
;
};
// svg:font-face-uri
class
svg_font_face_uri
:
public
office_element_impl
<
svg_font_face_uri
>
{
...
...
@@ -80,7 +79,31 @@ private:
virtual
void
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
);
virtual
void
add_text
(
const
std
::
wstring
&
Text
);
};
CP_REGISTER_OFFICE_ELEMENT2
(
svg_font_face_uri
);
// svg:desc
class
svg_desc
:
public
office_element_impl
<
svg_desc
>
{
public:
static
const
wchar_t
*
ns
;
static
const
wchar_t
*
name
;
static
const
xml
::
NodeType
xml_type
=
xml
::
typeElement
;
static
const
ElementType
type
=
typeSvgDesc
;
CPDOCCORE_DEFINE_VISITABLE
();
virtual
std
::
wostream
&
text_to_stream
(
std
::
wostream
&
_Wostream
)
const
;
std
::
wstring
text_
;
private:
virtual
void
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
){}
virtual
void
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
){}
virtual
void
add_text
(
const
std
::
wstring
&
Text
);
};
CP_REGISTER_OFFICE_ELEMENT2
(
svg_desc
);
// svg:font-face-format
class
svg_font_face_format
:
public
office_element_impl
<
svg_font_face_format
>
{
public:
...
...
@@ -100,7 +123,6 @@ private:
virtual
void
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
);
virtual
void
add_text
(
const
std
::
wstring
&
Text
);
};
CP_REGISTER_OFFICE_ELEMENT2
(
svg_font_face_format
);
// svg:font-face-name
...
...
ASCOfficeOdfFile/src/odf/odf_content_xml.cpp
View file @
56bb39f7
...
...
@@ -64,7 +64,11 @@ void content_xml_t::add_attributes( const xml::attributes_wc_ptr & Attributes )
void
content_xml_t
::
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
)
{
if
CP_CHECK_NAME
(
L"office"
,
L"document-content"
)
if
CP_CHECK_NAME
(
L"office"
,
L"document"
)
{
create_element_and_read
(
Reader
,
Ns
,
Name
,
xml_content_
,
getContext
(),
true
);
}
else
if
CP_CHECK_NAME
(
L"office"
,
L"document-content"
)
{
create_element_and_read
(
Reader
,
Ns
,
Name
,
xml_content_
,
getContext
(),
true
);
}
...
...
@@ -84,6 +88,10 @@ void content_xml_t::add_child_element( xml::sax * Reader, const std::wstring & N
{
create_element_and_read
(
Reader
,
Ns
,
Name
,
xml_content_
,
getContext
(),
true
);
}
else
if
CP_CHECK_NAME
(
L"manifest"
,
L"manifest"
)
{
create_element_and_read
(
Reader
,
Ns
,
Name
,
xml_content_
,
getContext
(),
true
);
}
}
void
content_xml_t
::
add_text
(
const
std
::
wstring
&
Text
)
...
...
ASCOfficeOdfFile/src/odf/odf_document.cpp
View file @
56bb39f7
...
...
@@ -38,7 +38,9 @@
namespace
cpdoccore
{
namespace
odf_reader
{
odf_document
::
odf_document
(
const
std
::
wstring
&
Folder
,
const
ProgressCallback
*
CallBack
)
:
impl_
(
new
Impl
(
Folder
,
CallBack
))
odf_document
::
odf_document
(
const
std
::
wstring
&
Folder
,
const
ProgressCallback
*
CallBack
)
:
impl_
(
new
Impl
(
Folder
,
CallBack
))
{}
odf_document
::
odf_document
(
xml
::
sax
*
Reader
)
:
impl_
(
new
Impl
(
Reader
))
{}
odf_document
::~
odf_document
()
...
...
ASCOfficeOdfFile/src/odf/odf_document_impl.cpp
View file @
56bb39f7
...
...
@@ -106,47 +106,122 @@ content_xml_t_ptr read_file_content(const std::wstring & Path)
return
result
;
}
content_xml_t_ptr
read_file_content
(
xml
::
sax
*
reader_owner
)
{
if
(
!
reader_owner
)
return
content_xml_t_ptr
();
content_xml_t_ptr
result
(
new
content_xml_t
()
);
const
std
::
wstring
namespacePrefix
=
reader_owner
->
namespacePrefix
();
const
std
::
wstring
localName
=
reader_owner
->
nodeLocalName
();
result
->
add_child_element
(
reader_owner
,
namespacePrefix
,
localName
);
return
result
;
}
}
odf_document
::
Impl
::
Impl
(
xml
::
sax
*
Reader
)
:
context_
(
new
odf_read_context
()),
base_folder_
(
L""
),
pCallBack
(
NULL
),
bUserStopConvert
(
0
)
{
office_mime_type_
=
0
;
encrypted
=
false
;
odf_document
::
Impl
::
Impl
(
const
std
::
wstring
&
folderPath
,
const
ProgressCallback
*
CallBack
)
:
context_
(
new
odf_read_context
()),
base_folder_
(
folderPath
),
pCallBack
(
CallBack
),
bUserStopConvert
(
0
)
content_xml_
=
read_file_content
(
Reader
);
if
(
content_xml_
)
{
_CP_LOG
<<
L"[info] parse fonts"
<<
std
::
endl
;
parse_fonts
(
content_xml_
->
get_content
());
_CP_LOG
<<
L"[info] parse styles"
<<
std
::
endl
;
parse_styles
(
content_xml_
->
get_content
());
_CP_LOG
<<
L"[info] parse manifest"
<<
std
::
endl
;
parse_manifests
(
content_xml_
->
get_content
());
_CP_LOG
<<
L"[info] parse settings"
<<
std
::
endl
;
parse_settings
(
content_xml_
->
get_content
());
tmp_folder_
=
NSDirectory
::
CreateDirectoryWithUniqueName
(
NSDirectory
::
GetTempPath
());
}
}
odf_document
::
Impl
::
Impl
(
const
std
::
wstring
&
srcPath
,
const
ProgressCallback
*
CallBack
)
:
context_
(
new
odf_read_context
()),
pCallBack
(
CallBack
),
bUserStopConvert
(
0
)
{
office_mime_type_
=
0
;
encrypted
=
false
;
std
::
wstring
content_xml
=
folderPath
+
FILE_SEPARATOR_STR
+
L"content.xml"
;
std
::
wstring
styles_xml
=
folderPath
+
FILE_SEPARATOR_STR
+
L"styles.xml"
;
std
::
wstring
meta_xml
=
folderPath
+
FILE_SEPARATOR_STR
+
L"meta.xml"
;
std
::
wstring
settings_xml
=
folderPath
+
FILE_SEPARATOR_STR
+
L"settings.xml"
;
std
::
wstring
manifest_xml
=
folderPath
+
FILE_SEPARATOR_STR
+
L"META-INF"
+
FILE_SEPARATOR_STR
+
L"manifest.xml"
;
if
(
NSDirectory
::
Exists
(
srcPath
))
{
base_folder_
=
srcPath
;
std
::
wstring
content_xml
=
srcPath
+
FILE_SEPARATOR_STR
+
L"content.xml"
;
std
::
wstring
styles_xml
=
srcPath
+
FILE_SEPARATOR_STR
+
L"styles.xml"
;
std
::
wstring
meta_xml
=
srcPath
+
FILE_SEPARATOR_STR
+
L"meta.xml"
;
std
::
wstring
settings_xml
=
srcPath
+
FILE_SEPARATOR_STR
+
L"settings.xml"
;
std
::
wstring
manifest_xml
=
srcPath
+
FILE_SEPARATOR_STR
+
L"META-INF"
+
FILE_SEPARATOR_STR
+
L"manifest.xml"
;
_CP_LOG
<<
L"[info] read manifest.xml"
<<
std
::
endl
;
manifest_xml_
=
read_file_content
(
manifest_xml
);
_CP_LOG
<<
L"[info] read manifest.xml"
<<
std
::
endl
;
manifest_xml_
=
read_file_content
(
manifest_xml
);
_CP_LOG
<<
L"[info] read settings.xml"
<<
std
::
endl
;
settings_xml_
=
read_file_content
(
settings_xml
);
_CP_LOG
<<
L"[info] read settings.xml"
<<
std
::
endl
;
settings_xml_
=
read_file_content
(
settings_xml
);
_CP_LOG
<<
L"[info] read content.xml"
<<
std
::
endl
;
content_xml_
=
read_file_content
(
content_xml
);
_CP_LOG
<<
L"[info] read content.xml"
<<
std
::
endl
;
content_xml_
=
read_file_content
(
content_xml
);
_CP_LOG
<<
L"[info] read styles.xml"
<<
std
::
endl
;
styles_xml_
=
read_file_content
(
styles_xml
);
_CP_LOG
<<
L"[info] read styles.xml"
<<
std
::
endl
;
styles_xml_
=
read_file_content
(
styles_xml
);
//----------------------------------------------------------------------------------------
_CP_LOG
<<
L"[info] parse fonts"
<<
std
::
endl
;
parse_fonts
(
content_xml_
?
content_xml_
->
get_content
()
:
NULL
);
_CP_LOG
<<
L"[info] parse fonts"
<<
std
::
endl
;
parse_fonts
();
_CP_LOG
<<
L"[info] parse styles"
<<
std
::
endl
;
parse_styles
(
styles_xml_
?
styles_xml_
->
get_content
()
:
NULL
);
_CP_LOG
<<
L"[info] parse manifest"
<<
std
::
endl
;
parse_manifests
(
manifest_xml_
?
manifest_xml_
->
get_content
()
:
NULL
);
_CP_LOG
<<
L"[info] parse settings"
<<
std
::
endl
;
parse_settings
(
settings_xml_
?
settings_xml_
->
get_content
()
:
NULL
);
}
else
{
_CP_LOG
<<
L"[info] read flat document"
<<
std
::
endl
;
content_xml_
=
read_file_content
(
srcPath
);
if
(
content_xml_
)
{
_CP_LOG
<<
L"[info] parse fonts"
<<
std
::
endl
;
parse_fonts
(
content_xml_
->
get_content
());
_CP_LOG
<<
L"[info] parse styles"
<<
std
::
endl
;
parse_styles
(
content_xml_
->
get_content
());
_CP_LOG
<<
L"[info] parse styles
"
<<
std
::
endl
;
parse_styles
(
);
_CP_LOG
<<
L"[info] parse manifest
"
<<
std
::
endl
;
parse_manifests
(
content_xml_
->
get_content
()
);
_CP_LOG
<<
L"[info] parse manifest
"
<<
std
::
endl
;
parse_manifests
(
);
_CP_LOG
<<
L"[info] parse settings
"
<<
std
::
endl
;
parse_settings
(
content_xml_
->
get_content
()
);
_CP_LOG
<<
L"[info] parse settings"
<<
std
::
endl
;
parse_settings
();
tmp_folder_
=
NSDirectory
::
CreateDirectoryWithUniqueName
(
NSDirectory
::
GetTempPath
());
}
}
UpdateProgress
(
400000
);
}
odf_document
::
Impl
::~
Impl
()
{
if
(
!
tmp_folder_
.
empty
())
NSDirectory
::
DeleteDirectory
(
tmp_folder_
);
}
const
std
::
wstring
&
odf_document
::
Impl
::
get_folder
()
const
{
if
(
!
base_folder_
.
empty
())
return
base_folder_
;
else
return
tmp_folder_
;
}
bool
odf_document
::
Impl
::
UpdateProgress
(
long
nComplete
)
{
if
(
pCallBack
)
...
...
@@ -162,17 +237,11 @@ bool odf_document::Impl::UpdateProgress(long nComplete)
return
false
;
}
void
odf_document
::
Impl
::
parse_fonts
()
void
odf_document
::
Impl
::
parse_fonts
(
office_element
*
element
)
{
do
{
if
(
!
content_xml_
)
{
_CP_LOG
<<
L"[warning] empty content xml
\n
"
;
break
;
}
office_document_base
*
document
=
dynamic_cast
<
office_document_base
*>
(
content_xml_
->
get_content
()
);
office_document_base
*
document
=
dynamic_cast
<
office_document_base
*>
(
element
);
if
(
!
document
)
{
_CP_LOG
<<
L"[warning] empty document
\n
"
;
...
...
@@ -236,15 +305,12 @@ void odf_document::Impl::parse_fonts()
}
while
(
0
);
}
void
odf_document
::
Impl
::
parse_manifests
()
void
odf_document
::
Impl
::
parse_manifests
(
office_element
*
element
)
{
if
(
!
manifest_xml_
)
return
;
office_document_base
*
document
=
dynamic_cast
<
office_document_base
*>
(
manifest_xml_
->
get_content
()
);
office_document_base
*
document
=
dynamic_cast
<
office_document_base
*>
(
element
);
if
(
!
document
)
return
;
int
res
=-
1
;
for
(
size_t
i
=
0
;
i
<
document
->
manifests_
.
size
();
i
++
)
{
office_element_ptr
&
elm
=
document
->
manifests_
[
i
];
...
...
@@ -252,34 +318,44 @@ void odf_document::Impl::parse_manifests()
manifest_entry
*
entry
=
dynamic_cast
<
manifest_entry
*>
(
elm
.
get
());
if
(
!
entry
)
continue
;
if
(
entry
->
full_path_
==
L"content.xml"
&&
entry
->
encryption_
)
encrypted
=
true
;
if
(
entry
->
full_path_
==
L"content.xml"
&&
entry
->
encryption_
)
encrypted
=
true
;
if
(
entry
->
full_path_
==
L"/"
)
if
(
entry
->
full_path_
==
L"/"
)
{
res
=
entry
->
media_type_
.
find
(
L"application/vnd.oasis.opendocument.text"
);
if
(
res
>=
0
)
if
(
std
::
wstring
::
npos
!=
entry
->
media_type_
.
find
(
L"application/vnd.oasis.opendocument.text"
))
{
office_mime_type_
=
1
;
}
res
=
entry
->
media_type_
.
find
(
L"application/vnd.oasis.opendocument.spreadsheet"
);
if
(
res
>=
0
)
else
if
(
std
::
wstring
::
npos
!=
entry
->
media_type_
.
find
(
L"application/vnd.oasis.opendocument.spreadsheet"
))
{
office_mime_type_
=
2
;
}
res
=
entry
->
media_type_
.
find
(
L"application/vnd.oasis.opendocument.presentation"
);
if
(
res
>=
0
)
else
if
(
std
::
wstring
::
npos
!=
entry
->
media_type_
.
find
(
L"application/vnd.oasis.opendocument.presentation"
))
{
office_mime_type_
=
3
;
}
}
}
if
(
!
office_mime_type_
&&
!
document
->
office_mimetype_
.
empty
())
{
if
(
std
::
wstring
::
npos
!=
document
->
office_mimetype_
.
find
(
L"application/vnd.oasis.opendocument.text"
))
{
office_mime_type_
=
1
;
}
else
if
(
std
::
wstring
::
npos
!=
document
->
office_mimetype_
.
find
(
L"application/vnd.oasis.opendocument.spreadsheet"
))
{
office_mime_type_
=
2
;
}
else
if
(
std
::
wstring
::
npos
!=
document
->
office_mimetype_
.
find
(
L"application/vnd.oasis.opendocument.presentation"
))
{
office_mime_type_
=
3
;
}
}
}
void
odf_document
::
Impl
::
parse_settings
()
void
odf_document
::
Impl
::
parse_settings
(
office_element
*
element
)
{
if
(
!
settings_xml_
)
return
;
office_document_base
*
document
=
dynamic_cast
<
office_document_base
*>
(
settings_xml_
->
get_content
()
);
office_document_base
*
document
=
dynamic_cast
<
office_document_base
*>
(
element
);
if
(
!
document
)
return
;
office_settings
*
settings
=
dynamic_cast
<
office_settings
*>
(
document
->
office_settings_
.
get
());
...
...
@@ -358,20 +434,14 @@ void odf_document::Impl::parse_settings()
}
}
void
odf_document
::
Impl
::
parse_styles
()
void
odf_document
::
Impl
::
parse_styles
(
office_element
*
element
)
{
do
{
if
(
!
styles_xml_
)
{
_CP_LOG
<<
L"[warning] empty styles xml
\n
"
;
break
;
}
office_document_base
*
document
=
dynamic_cast
<
office_document_base
*>
(
styles_xml_
->
get_content
()
);
office_document_base
*
document
=
dynamic_cast
<
office_document_base
*>
(
element
);
if
(
!
document
)
{
_CP_LOG
<<
L"[warning] empty
document
\n
"
;
_CP_LOG
<<
L"[warning] empty
styles
\n
"
;
break
;
}
...
...
ASCOfficeOdfFile/src/odf/odf_document_impl.h
View file @
56bb39f7
...
...
@@ -54,16 +54,19 @@ class odf_document::Impl
{
public:
Impl
(
const
std
::
wstring
&
Folder
,
const
ProgressCallback
*
CallBack
);
Impl
(
xml
::
sax
*
Reader
);
virtual
~
Impl
();
odf_read_context
&
odf_context
();
bool
docx_convert
(
oox
::
docx_conversion_context
&
Context
);
bool
xlsx_convert
(
oox
::
xlsx_conversion_context
&
Context
);
bool
pptx_convert
(
oox
::
pptx_conversion_context
&
Context
);
const
std
::
wstring
&
get_folder
()
const
{
return
base_folder_
;
}
const
std
::
wstring
&
get_folder
()
const
;
const
office_element
*
get_content
()
const
;
office_element
*
get_content
();
const
office_element
*
get_content
()
const
;
office_element
*
get_content
();
long
get_office_mime_type
()
{
return
office_mime_type_
;}
...
...
@@ -77,20 +80,20 @@ private:
odf_read_context_ptr
context_
;
void
parse_styles
(
);
void
parse_fonts
(
);
void
parse_manifests
();
void
parse_settings
(
);
void
parse_styles
(
office_element
*
element
);
void
parse_fonts
(
office_element
*
elemen
);
void
parse_manifests
(
office_element
*
element
);
void
parse_settings
(
office_element
*
element
);
private:
content_xml_t_ptr
content_xml_
;
content_xml_t_ptr
styles_xml_
;
content_xml_t_ptr
meta_xml_
;
content_xml_t_ptr
settings_xml_
;
content_xml_t_ptr
manifest_xml_
;
private:
std
::
wstring
base_folder_
;
std
::
wstring
tmp_folder_
;
long
office_mime_type_
;
bool
encrypted
;
...
...
ASCOfficeOdfFile/src/odf/office_binary_data.cpp
View file @
56bb39f7
...
...
@@ -61,7 +61,34 @@ void office_binary_data::add_child_element( xml::sax * Reader, const std::wstrin
void
office_binary_data
::
add_text
(
const
std
::
wstring
&
Text
)
{
base64Binary_
=
Text
;
base64Binary_
=
std
::
string
(
Text
.
begin
(),
Text
.
end
());
}
std
::
wstring
office_binary_data
::
write_to
(
const
std
::
wstring
&
path
)
{
std
::
wstring
result
;
NSFile
::
CBase64Converter
base64
;
int
nLength
=
0
;
unsigned
char
*
pData
=
NULL
;
NSFile
::
CBase64Converter
::
Decode
(
base64Binary_
.
c_str
(),
base64Binary_
.
length
(),
pData
,
nLength
);
if
(
pData
)
{
NSFile
::
CFileBinary
file
;
std
::
wstring
bin_file
=
file
.
CreateTempFileWithUniqueName
(
path
+
FILE_SEPARATOR_STR
,
L"bin"
);
if
(
file
.
CreateFileW
(
bin_file
))
{
file
.
WriteFile
(
pData
,
nLength
);
file
.
CloseFile
();
int
pos
=
bin_file
.
rfind
(
FILE_SEPARATOR_STR
);
result
=
bin_file
.
substr
(
pos
+
1
);
}
delete
[]
pData
;
pData
=
NULL
;
}
return
result
;
}
}
...
...
ASCOfficeOdfFile/src/odf/office_binary_data.h
View file @
56bb39f7
...
...
@@ -53,17 +53,15 @@ public:
CPDOCCORE_DEFINE_VISITABLE
();
public:
virtual
std
::
wostream
&
text_to_stream
(
std
::
wostream
&
_Wostream
)
const
;
std
::
wstring
write_to
(
const
std
::
wstring
&
path
);
private:
virtual
void
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
);
virtual
void
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
);
virtual
void
add_text
(
const
std
::
wstring
&
Text
);
private:
std
::
wstring
base64Binary_
;
virtual
void
add_text
(
const
std
::
wstring
&
Text
);
std
::
string
base64Binary_
;
};
CP_REGISTER_OFFICE_ELEMENT2
(
office_binary_data
);
...
...
ASCOfficeOdfFile/src/odf/office_chart.cpp
View file @
56bb39f7
...
...
@@ -63,9 +63,10 @@ void chart_chart_attlist::add_attributes( const xml::attributes_wc_ptr & Attribu
common_draw_size_attlist_
.
add_attributes
(
Attributes
);
common_attlist_
.
add_attributes
(
Attributes
);
CP_APPLY_ATTR
(
L"chart:class"
,
chart_class_
,
std
::
wstring
(
L""
));
CP_APPLY_ATTR
(
L"chart:column-mapping"
,
chart_column_mapping_
);
CP_APPLY_ATTR
(
L"chart:row-mapping"
,
chart_row_mapping_
);
CP_APPLY_ATTR
(
L"chart:class"
,
chart_class_
,
std
::
wstring
(
L""
));
CP_APPLY_ATTR
(
L"chart:column-mapping"
,
chart_column_mapping_
);
CP_APPLY_ATTR
(
L"chart:row-mapping"
,
chart_row_mapping_
);
CP_APPLY_ATTR
(
L"loext:data-pilot-source"
,
loext_data_pilot_source_
);
}
// chart:chart
...
...
@@ -75,7 +76,7 @@ const wchar_t * chart_chart::name = L"chart";
void
chart_chart
::
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
)
{
chart_chart_
attlist_
.
add_attributes
(
Attributes
);
attlist_
.
add_attributes
(
Attributes
);
}
void
chart_chart
::
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
)
...
...
@@ -97,7 +98,7 @@ const wchar_t * chart_title::name = L"title";
void
chart_title
::
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
)
{
chart_title_
attlist_
.
add_attributes
(
Attributes
);
attlist_
.
add_attributes
(
Attributes
);
}
void
chart_title
::
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
)
...
...
@@ -117,7 +118,7 @@ const wchar_t * chart_subtitle::name = L"subtitle";
void
chart_subtitle
::
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
)
{
chart_title_
attlist_
.
add_attributes
(
Attributes
);
attlist_
.
add_attributes
(
Attributes
);
}
void
chart_subtitle
::
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
)
...
...
@@ -157,7 +158,7 @@ const wchar_t * chart_legend::name = L"legend";
void
chart_legend
::
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
)
{
chart_legend_
attlist_
.
add_attributes
(
Attributes
);
attlist_
.
add_attributes
(
Attributes
);
}
void
chart_legend
::
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
)
...
...
@@ -194,7 +195,7 @@ const wchar_t * chart_plot_area::name = L"plot-area";
void
chart_plot_area
::
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
)
{
chart_plot_area_
attlist_
.
add_attributes
(
Attributes
);
attlist_
.
add_attributes
(
Attributes
);
}
void
chart_plot_area
::
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
)
...
...
@@ -217,7 +218,7 @@ const wchar_t * chart_wall::name = L"wall";
void
chart_wall
::
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
)
{
chart_wall_
attlist_
.
add_attributes
(
Attributes
);
attlist_
.
add_attributes
(
Attributes
);
}
void
chart_wall
::
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
)
...
...
@@ -256,7 +257,7 @@ const wchar_t * chart_axis::name = L"axis";
void
chart_axis
::
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
)
{
chart_axis_
attlist_
.
add_attributes
(
Attributes
);
attlist_
.
add_attributes
(
Attributes
);
}
void
chart_axis
::
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
)
...
...
@@ -279,7 +280,7 @@ const wchar_t * chart_grid::name = L"grid";
void
chart_grid
::
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
)
{
chart_grid_
attlist_
.
add_attributes
(
Attributes
);
attlist_
.
add_attributes
(
Attributes
);
}
void
chart_grid
::
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
)
...
...
@@ -306,11 +307,12 @@ void chart_categories::add_child_element( xml::sax * Reader, const std::wstring
void
chart_series_attlist
::
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
)
{
CP_APPLY_ATTR
(
L"chart:values-cell-range-address"
,
chart_values_cell_range_address_
);
CP_APPLY_ATTR
(
L"chart:label-cell-"
,
chart_label_cell_address_
);
CP_APPLY_ATTR
(
L"chart:class"
,
chart_class_
);
CP_APPLY_ATTR
(
L"chart:attached-axis"
,
chart_attached_axis_
);
common_attlist_
.
add_attributes
(
Attributes
);
CP_APPLY_ATTR
(
L"chart:values-cell-range-address"
,
chart_values_cell_range_address_
);
CP_APPLY_ATTR
(
L"chart:label-cell-address"
,
chart_label_cell_address_
);
CP_APPLY_ATTR
(
L"chart:class"
,
chart_class_
);
CP_APPLY_ATTR
(
L"chart:attached-axis"
,
chart_attached_axis_
);
common_attlist_
.
add_attributes
(
Attributes
);
}
// chart:categories
...
...
@@ -320,7 +322,7 @@ const wchar_t * chart_series::name = L"series";
void
chart_series
::
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
)
{
chart_series_
attlist_
.
add_attributes
(
Attributes
);
attlist_
.
add_attributes
(
Attributes
);
}
void
chart_series
::
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
)
...
...
@@ -358,7 +360,7 @@ const wchar_t * chart_data_point::name = L"data-point";
void
chart_data_point
::
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
)
{
chart_data_point_
attlist_
.
add_attributes
(
Attributes
);
attlist_
.
add_attributes
(
Attributes
);
}
void
chart_data_point
::
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
)
...
...
ASCOfficeOdfFile/src/odf/office_chart.h
View file @
56bb39f7
...
...
@@ -82,12 +82,12 @@ class chart_chart_attlist
public:
void
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
);
public:
odf_types
::
common_draw_size_attlist
common_draw_size_attlist_
;
common_chart_attlist
common_attlist_
;
std
::
wstring
chart_class_
;
_CP_OPT
(
std
::
wstring
)
chart_column_mapping_
;
_CP_OPT
(
std
::
wstring
)
chart_row_mapping_
;
_CP_OPT
(
std
::
wstring
)
loext_data_pilot_source_
;
};
// chart:chart
...
...
@@ -105,8 +105,8 @@ private:
virtual
void
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
);
public:
chart_chart_attlist
chart_chart_
attlist_
;
office_element_ptr_array
content_
;
chart_chart_attlist
attlist_
;
office_element_ptr_array
content_
;
};
CP_REGISTER_OFFICE_ELEMENT2
(
chart_chart
);
...
...
@@ -139,7 +139,7 @@ private:
virtual
void
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
);
public:
chart_title_attlist
chart_title_
attlist_
;
chart_title_attlist
attlist_
;
office_element_ptr
text_p_
;
};
...
...
@@ -160,8 +160,8 @@ private:
virtual
void
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
);
public:
chart_title_attlist
chart_title_
attlist_
;
office_element_ptr
text_p_
;
chart_title_attlist
attlist_
;
office_element_ptr
text_p_
;
};
...
...
@@ -183,7 +183,7 @@ private:
public:
common_chart_attlist
common_attlist_
;
office_element_ptr
text_p_
;
office_element_ptr
text_p_
;
};
...
...
@@ -195,11 +195,11 @@ public:
void
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
);
public:
_CP_OPT
(
std
::
wstring
)
chart_legend_position_
;
_CP_OPT
(
std
::
wstring
)
chart_legend_align_
;
_CP_OPT
(
std
::
wstring
)
chart_legend_position_
;
_CP_OPT
(
std
::
wstring
)
chart_legend_align_
;
odf_types
::
common_draw_position_attlist
common_draw_position_attlist_
;
_CP_OPT
(
std
::
wstring
)
style_legend_expansion_
;
_CP_OPT
(
double
)
style_legend_expansion_aspect_ratio_
;
_CP_OPT
(
std
::
wstring
)
style_legend_expansion_
;
_CP_OPT
(
double
)
style_legend_expansion_aspect_ratio_
;
common_chart_attlist
common_attlist_
;
};
...
...
@@ -219,7 +219,7 @@ private:
virtual
void
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
);
public:
chart_legend_attlist
chart_legend_
attlist_
;
chart_legend_attlist
attlist_
;
};
...
...
@@ -234,7 +234,7 @@ public:
public:
odf_types
::
common_draw_position_attlist
common_draw_position_attlist_
;
odf_types
::
common_draw_size_attlist
common_draw_size_attlist_
;
common_chart_attlist
common_attlist_
;
common_chart_attlist
common_attlist_
;
_CP_OPT
(
std
::
wstring
)
table_cell_range_address_
;
_CP_OPT
(
std
::
wstring
)
chart_data_source_has_labels_
;
...
...
@@ -257,9 +257,8 @@ private:
virtual
void
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
);
public:
chart_plot_area_attlist
chart_plot_area_attlist_
;
office_element_ptr_array
content_
;
chart_plot_area_attlist
attlist_
;
office_element_ptr_array
content_
;
};
CP_REGISTER_OFFICE_ELEMENT2
(
chart_plot_area
);
...
...
@@ -270,7 +269,7 @@ public:
void
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
);
public:
_CP_OPT
(
odf_types
::
length
)
svg_width_
;
_CP_OPT
(
odf_types
::
length
)
svg_width_
;
common_chart_attlist
common_attlist_
;
};
...
...
@@ -289,7 +288,7 @@ private:
virtual
void
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
);
public:
chart_wall_attlist
chart_wall_
attlist_
;
chart_wall_attlist
attlist_
;
};
CP_REGISTER_OFFICE_ELEMENT2
(
chart_wall
);
...
...
@@ -310,7 +309,7 @@ private:
virtual
void
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
);
public:
common_chart_attlist
common_attlist_
;
common_chart_attlist
common_attlist_
;
};
...
...
@@ -322,8 +321,8 @@ public:
void
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
);
public:
_CP_OPT
(
std
::
wstring
)
chart_dimension_
;
_CP_OPT
(
std
::
wstring
)
chart_name_
;
_CP_OPT
(
std
::
wstring
)
chart_dimension_
;
_CP_OPT
(
std
::
wstring
)
chart_name_
;
common_chart_attlist
common_attlist_
;
};
...
...
@@ -342,9 +341,8 @@ private:
virtual
void
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
);
public:
chart_axis_attlist
chart_axis_attlist_
;
office_element_ptr_array
content_
;
chart_axis_attlist
attlist_
;
office_element_ptr_array
content_
;
};
...
...
@@ -376,7 +374,7 @@ private:
virtual
void
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
);
public:
chart_grid_attlist
chart_grid_
attlist_
;
chart_grid_attlist
attlist_
;
};
...
...
@@ -432,9 +430,8 @@ private:
virtual
void
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
);
public:
chart_series_attlist
chart_series_attlist_
;
office_element_ptr_array
content_
;
chart_series_attlist
attlist_
;
office_element_ptr_array
content_
;
};
...
...
@@ -486,7 +483,7 @@ private:
virtual
void
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
);
public:
chart_data_point_attlist
chart_data_point_
attlist_
;
chart_data_point_attlist
attlist_
;
};
...
...
@@ -550,8 +547,8 @@ private:
virtual
void
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
);
public:
common_chart_attlist
common_attlist_
;
_CP_OPT
(
bool
)
display_r_square_
;
common_chart_attlist
common_attlist_
;
_CP_OPT
(
bool
)
display_r_square_
;
};
...
...
ASCOfficeOdfFile/src/odf/office_document.h
View file @
56bb39f7
...
...
@@ -41,7 +41,6 @@
namespace
cpdoccore
{
namespace
odf_reader
{
// office_document_base
class
office_document_base
:
public
office_element
{
public:
...
...
@@ -67,6 +66,8 @@ public:
// office-document-attrs
// office-document-common-attrs
office_element_ptr
office_body_
;
// office-body
office_element_ptr
office_meta_
;
// office-meta
office_element_ptr
office_settings_
;
// office-settings
office_element_ptr
office_scripts_
;
...
...
@@ -75,14 +76,9 @@ public:
office_element_ptr
office_styles_
;
// office-styles
office_element_ptr
office_automatic_styles_
;
// office-automatic-styles
office_element_ptr
office_master_styles_
;
// office-master-styles
office_element_ptr_array
manifests_
;
// manifests
public:
office_element_ptr
office_body_
;
// office-body
office_element_ptr_array
manifests_
;
// manifests
friend
class
odf_document
;
};
...
...
ASCOfficeOdfFile/src/odf/office_elements_type.h
View file @
56bb39f7
...
...
@@ -190,6 +190,7 @@ enum ElementType
typeStyleFontFace
,
typeSvgDesc
,
typeSvgFontFaceUri
,
typeSvgFontFaceFormat
,
typeSvgFontFaceName
,
...
...
@@ -234,7 +235,9 @@ enum ElementType
typeTableDatabaseSourceQuery
,
typeTableDatabaseSourceSql
,
typeTableSourceCellRange
,
typeTableSourceCellRanges
,
typeTableSourceService
,
typeTableDataPilotGrandTotal
,
typeTableDataPilotSubtotals
,
typeTableDataPilotSubtotal
,
typeTableDataPilotGroupMember
,
...
...
ASCOfficeOdfFile/src/odf/office_spreadsheet.cpp
View file @
56bb39f7
...
...
@@ -88,13 +88,13 @@ void office_spreadsheet::xlsx_convert(oox::xlsx_conversion_context & Context)
if
(
database_ranges_
)
database_ranges_
->
xlsx_convert
(
Context
);
if
(
data_pilot_tables_
)
data_pilot_tables_
->
xlsx_convert
(
Context
);
for
(
size_t
i
=
0
;
i
<
content_
.
size
();
i
++
)
{
content_
[
i
]
->
xlsx_convert
(
Context
);
}
if
(
data_pilot_tables_
)
data_pilot_tables_
->
xlsx_convert
(
Context
);
}
Context
.
end_office_spreadsheet
();
}
...
...
ASCOfficeOdfFile/src/odf/style_text_properties.cpp
View file @
56bb39f7
...
...
@@ -318,8 +318,30 @@ void text_format_properties_content::drawing_serialize(std::wostream & strm, std
CP_XML_NODE
(
node
)
//a:rPr & a:defRPr
{
//attr
const
int
W
=
process_font_weight
(
fo_font_weight_
);
if
(
W
>
0
)
CP_XML_ATTR
(
L"b"
,
true
);
if
(
fo_language_
||
style_language_asian_
||
style_language_complex_
)
{
std
::
wstring
w_val
;
if
(
fo_language_
)
{
w_val
=
*
fo_language_
;
if
(
fo_country_
)
w_val
+=
L"-"
+
*
fo_country_
;
}
else
if
(
style_language_asian_
)
{
w_val
=
*
style_language_asian_
;
if
(
style_country_asian_
)
w_val
+=
L"-"
+
*
style_country_asian_
;
}
else
if
(
style_language_complex_
)
{
w_val
=
*
style_language_complex_
;
if
(
style_country_complex_
)
w_val
+=
L"-"
+
*
style_country_complex_
;
}
if
(
w_val
.
empty
()
==
false
)
{
CP_XML_ATTR
(
L"lang"
,
w_val
);
}
}
const
int
fontStyle
=
process_font_style
(
fo_font_style_
);
if
(
fontStyle
>
0
)
CP_XML_ATTR
(
L"i"
,
true
);
...
...
@@ -354,6 +376,9 @@ void text_format_properties_content::drawing_serialize(std::wostream & strm, std
CP_XML_ATTR
(
L"cap"
,
"small"
);
}
}
const
int
W
=
process_font_weight
(
fo_font_weight_
);
if
(
W
>
0
)
CP_XML_ATTR
(
L"b"
,
true
);
// underline
line_width
under
=
style_text_underline_width_
.
get_value_or
(
line_width
::
Auto
);
bool
underlineBold
=
under
.
get_type
()
==
line_width
::
Bold
||
...
...
@@ -433,18 +458,6 @@ void text_format_properties_content::drawing_serialize(std::wostream & strm, std
CP_XML_ATTR
(
L"spc"
,(
int
)(
20.0
*
fo_letter_spacing_
->
get_length
().
get_value_unit
(
length
::
pt
)));
}
if
(
fo_language_
||
style_language_asian_
||
style_language_complex_
)
{
std
::
wstring
w_val
;
if
(
fo_language_
)
w_val
=
*
fo_language_
;
else
if
(
fo_country_
)
w_val
=
*
fo_country_
;
else
if
(
style_country_asian_
)
w_val
=
*
style_country_asian_
;
else
if
(
style_language_asian_
)
w_val
=
*
style_language_asian_
;
else
if
(
style_language_complex_
)
w_val
=
*
style_language_complex_
;
else
if
(
style_country_complex_
)
w_val
=
*
style_country_complex_
;
CP_XML_ATTR
(
L"lang"
,
w_val
);
}
if
(
style_text_position_
)
{
if
(
style_text_position_
->
get_type
()
==
text_position
::
Percent
)
...
...
ASCOfficeOdfFile/src/odf/table_data_pilot_tables.cpp
View file @
56bb39f7
This diff is collapsed.
Click to expand it.
ASCOfficeOdfFile/src/odf/table_data_pilot_tables.h
View file @
56bb39f7
...
...
@@ -46,6 +46,7 @@
#include "datatypes/tabletype.h"
#include "datatypes/tablefunction.h"
#include "datatypes/tableorder.h"
#include "datatypes/dategroup.h"
namespace
cpdoccore
{
namespace
odf_reader
{
...
...
@@ -96,10 +97,11 @@ public:
_CP_OPT
(
odf_types
::
grand_total
)
table_grand_total_
;
_CP_OPT
(
odf_types
::
Bool
)
table_identify_categories_
;
_CP_OPT
(
odf_types
::
Bool
)
table_ignore_empty_rows_
;
_CP_OPT
(
odf_types
::
Bool
)
table_show_filter_button_
;
bool
table_show_filter_button_
;
office_element_ptr
source_
;
office_element_ptr_array
fields_
;
office_element_ptr
grand_total_
;
};
CP_REGISTER_OFFICE_ELEMENT2
(
table_data_pilot_table
);
...
...
@@ -136,6 +138,30 @@ public:
CP_REGISTER_OFFICE_ELEMENT2
(
table_data_pilot_field
);
//-------------------------------------------------------------------------------------
class
table_data_pilot_grand_total
:
public
office_element_impl
<
table_data_pilot_grand_total
>
{
public:
static
const
wchar_t
*
ns
;
static
const
wchar_t
*
name
;
static
const
xml
::
NodeType
xml_type
=
xml
::
typeElement
;
static
const
ElementType
type
=
typeTableDataPilotGrandTotal
;
CPDOCCORE_DEFINE_VISITABLE
();
virtual
void
xlsx_convert
(
oox
::
xlsx_conversion_context
&
Context
);
private:
virtual
void
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
);
virtual
void
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
){}
public:
_CP_OPT
(
std
::
wstring
)
table_display_name_
;
_CP_OPT
(
odf_types
::
Bool
)
table_display_
;
_CP_OPT
(
odf_types
::
table_orientation
)
table_orientation_
;
};
CP_REGISTER_OFFICE_ELEMENT2
(
table_data_pilot_grand_total
);
//-------------------------------------------------------------------------------------
class
table_data_pilot_field_reference
:
public
office_element_impl
<
table_data_pilot_field_reference
>
{
public:
...
...
@@ -178,7 +204,7 @@ private:
public:
_CP_OPT
(
std
::
wstring
)
table_database_name_
;
_CP_OPT
(
std
::
wstring
)
table_
database_
table_name_
;
_CP_OPT
(
std
::
wstring
)
table_table_name_
;
};
CP_REGISTER_OFFICE_ELEMENT2
(
table_database_source_table
);
...
...
@@ -253,6 +279,27 @@ public:
CP_REGISTER_OFFICE_ELEMENT2
(
table_source_cell_range
);
//-------------------------------------------------------------------------------------
class
table_source_cell_ranges
:
public
office_element_impl
<
table_source_cell_ranges
>
{
public:
static
const
wchar_t
*
ns
;
static
const
wchar_t
*
name
;
static
const
xml
::
NodeType
xml_type
=
xml
::
typeElement
;
static
const
ElementType
type
=
typeTableSourceCellRanges
;
CPDOCCORE_DEFINE_VISITABLE
();
virtual
void
xlsx_convert
(
oox
::
xlsx_conversion_context
&
Context
);
private:
virtual
void
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
);
virtual
void
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
){}
public:
_CP_OPT
(
std
::
wstring
)
table_cell_ranges_address_
;
};
CP_REGISTER_OFFICE_ELEMENT2
(
table_source_cell_ranges
);
//-------------------------------------------------------------------------------------
class
table_source_service
:
public
office_element_impl
<
table_source_service
>
{
...
...
@@ -297,6 +344,7 @@ private:
public:
_CP_OPT
(
odf_types
::
Bool
)
table_show_empty_
;
_CP_OPT
(
odf_types
::
Bool
)
calcext_repeat_item_labels_
;
office_element_ptr
members_
;
office_element_ptr
subtotals_
;
...
...
@@ -323,13 +371,13 @@ private:
virtual
void
add_child_element
(
xml
::
sax
*
Reader
,
const
std
::
wstring
&
Ns
,
const
std
::
wstring
&
Name
);
public:
_CP_OPT
(
std
::
wstring
)
table_date_end_
;
_CP_OPT
(
std
::
wstring
)
table_date_start_
;
_CP_OPT
(
std
::
wstring
)
table_start
;
//double 18.2 or auto.
_CP_OPT
(
std
::
wstring
)
table_end_
;
//double 18.2 or auto.
_CP_OPT
(
std
::
wstring
)
table_grouped_by_
;
//seconds, minutes, hours, days, months, quarters or years.
_CP_OPT
(
std
::
wstring
)
table_source_field_name_
;
_CP_OPT
(
double
)
table_step
;
_CP_OPT
(
std
::
wstring
)
table_date_end_
;
_CP_OPT
(
std
::
wstring
)
table_date_start_
;
_CP_OPT
(
std
::
wstring
)
table_start
;
//double 18.2 or auto.
_CP_OPT
(
std
::
wstring
)
table_end_
;
//double 18.2 or auto.
_CP_OPT
(
odf_types
::
date_group
)
table_grouped_by_
;
_CP_OPT
(
std
::
wstring
)
table_source_field_name_
;
_CP_OPT
(
double
)
table_step
;
office_element_ptr_array
content_
;
};
...
...
@@ -478,7 +526,7 @@ public:
static
const
ElementType
type
=
typeTableDataLayoutInfo
;
CPDOCCORE_DEFINE_VISITABLE
();
virtual
void
xlsx_convert
(
oox
::
xlsx_conversion_context
&
Context
);
virtual
void
xlsx_convert
(
oox
::
xlsx_conversion_context
&
Context
){}
private:
virtual
void
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
);
...
...
@@ -500,7 +548,7 @@ public:
static
const
ElementType
type
=
typeTableDataSortInfo
;
CPDOCCORE_DEFINE_VISITABLE
();
virtual
void
xlsx_convert
(
oox
::
xlsx_conversion_context
&
Context
);
virtual
void
xlsx_convert
(
oox
::
xlsx_conversion_context
&
Context
){}
private:
virtual
void
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
);
...
...
@@ -523,7 +571,7 @@ public:
static
const
ElementType
type
=
typeTableDataDisplayInfo
;
CPDOCCORE_DEFINE_VISITABLE
();
virtual
void
xlsx_convert
(
oox
::
xlsx_conversion_context
&
Context
);
virtual
void
xlsx_convert
(
oox
::
xlsx_conversion_context
&
Context
){}
private:
virtual
void
add_attributes
(
const
xml
::
attributes_wc_ptr
&
Attributes
);
...
...
ASCOfficeOdfFile/win32/cpcommon.vcproj
View file @
56bb39f7
...
...
@@ -449,6 +449,14 @@
RelativePath=
"..\src\odf\datatypes\common_attlists.h"
>
</File>
<File
RelativePath=
"..\src\odf\datatypes\dategroup.cpp"
>
</File>
<File
RelativePath=
"..\src\odf\datatypes\dategroup.h"
>
</File>
<File
RelativePath=
"..\src\odf\datatypes\direction.cpp"
>
...
...
ASCOfficePPTFile/PptFormatTest/PptFormatTest.cpp
View file @
56bb39f7
...
...
@@ -60,7 +60,7 @@ int _tmain(int argc, _TCHAR* argv[])
pptFile
.
put_TempDirectory
(
tempPath
);
HRESULT
hRes
=
pptFile
.
LoadFromFile
(
sSrcPpt
,
dstTempPath
,
L""
);
HRESULT
hRes
=
pptFile
.
LoadFromFile
(
sSrcPpt
,
dstTempPath
,
L"
password
"
);
if
(
hRes
==
S_OK
)
{
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_records/AxcExt.cpp
View file @
56bb39f7
...
...
@@ -73,6 +73,8 @@ int AxcExt::serialize(std::wostream & _stream)
CP_XML_WRITER
(
_stream
)
{
CP_XML_NODE
(
L"c:auto"
)
{
CP_XML_ATTR
(
L"val"
,
!
fAutoCross
);
}
if
(
fAutoMax
==
false
)
{
CP_XML_NODE
(
L"c:max"
)
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_records/Scatter.h
View file @
56bb39f7
...
...
@@ -36,8 +36,6 @@
namespace
XLS
{
// Logical representation of Scatter record in BIFF8
class
Scatter
:
public
BiffRecord
{
BIFF_RECORD_DEFINE_TYPE_INFO
(
Scatter
)
...
...
@@ -48,7 +46,6 @@ public:
BaseObjectPtr
clone
();
void
readFields
(
CFRecord
&
record
);
static
const
ElementType
type
=
typeScatter
;
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_structures/ODRAW/OfficeArtFOPTE.h
View file @
56bb39f7
...
...
@@ -539,7 +539,7 @@ class cropFromLeft : public FixedPoint
{
BASE_STRUCTURE_DEFINE_CLASS_NAME
(
cropFromLeft
)
};
class
cropFromRight
:
public
OfficeArtFOPTE
class
cropFromRight
:
public
FixedPoint
{
BASE_STRUCTURE_DEFINE_CLASS_NAME
(
cropFromRight
)
};
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/AI.cpp
View file @
56bb39f7
...
...
@@ -75,6 +75,24 @@ const bool AI::loadContent(BinProcessor& proc)
return
true
;
}
bool
AI
::
empty
()
{
if
(
!
m_SeriesText
&&
!
m_BRAI
)
return
true
;
BRAI
*
brai
=
dynamic_cast
<
BRAI
*>
(
m_BRAI
.
get
());
if
(
brai
)
{
std
::
wstring
forumla
=
brai
->
formula
.
getAssembledFormula
();
return
forumla
.
empty
();
}
SeriesText
*
text
=
dynamic_cast
<
SeriesText
*>
(
m_SeriesText
.
get
());
if
(
text
)
{
return
text
->
stText
.
value
().
empty
();
}
return
false
;
}
int
AI
::
serialize
(
std
::
wostream
&
_stream
)
{
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/AI.h
View file @
56bb39f7
...
...
@@ -35,9 +35,6 @@
namespace
XLS
{
// Logical representation of AI union of records
class
AI
:
public
CompositeObject
{
BASE_OBJECT_DEFINE_CLASS_NAME
(
AI
)
...
...
@@ -51,6 +48,8 @@ public:
int
serialize
(
std
::
wostream
&
_stream
);
bool
empty
();
BaseObjectPtr
m_SeriesText
;
BaseObjectPtr
m_BRAI
;
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/ATTACHEDLABEL_bu.cpp
View file @
56bb39f7
...
...
@@ -216,15 +216,29 @@ int ATTACHEDLABEL::serialize(std::wostream & _stream, bool isPosition)
int
count_runs
=
allRuns
?
allRuns
->
rgRuns
.
size
()
:
0
;
Text
*
textProps
=
dynamic_cast
<
Text
*>
(
m_TextProperties
.
get
());
bool
rtl
=
false
;
if
((
textProps
)
&&
(
textProps
->
iReadingOrder
==
(
unsigned
char
)
2
))
rtl
=
true
;
FRAME
*
FRAME_
=
dynamic_cast
<
FRAME
*>
(
m_FRAME
.
get
());
Pos
*
Pos_
=
dynamic_cast
<
Pos
*>
(
m_Pos
.
get
());
if
(
FRAME_
&&
Pos_
)
if
(
Pos_
)
{
Pos_
->
m_Frame
=
FRAME_
?
FRAME_
->
m_Frame
:
NULL
;
}
else
if
(
isPosition
&&
textProps
)
{
Pos_
->
m_Frame
=
FRAME_
->
m_Frame
;
m_Pos
=
BaseObjectPtr
(
new
Pos
());
Pos_
=
dynamic_cast
<
Pos
*>
(
m_Pos
.
get
());
Pos_
->
mdTopLt
=
2
;
Pos_
->
mdBotRt
=
2
;
Pos_
->
x1
=
textProps
->
x
;
Pos_
->
y1
=
textProps
->
y
;
Pos_
->
x2
=
textProps
->
dx
;
Pos_
->
y2
=
textProps
->
dx
;
}
CP_XML_WRITER
(
_stream
)
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/AXES.cpp
View file @
56bb39f7
...
...
@@ -48,6 +48,7 @@ namespace XLS
AXES
::
AXES
()
{
bAxisCategories
=
false
;
}
...
...
@@ -152,6 +153,8 @@ const bool AXES::loadContent(BinProcessor& proc)
if
(
iv
)
{
bAxisCategories
=
true
;
id
=
iv
->
id
;
type
=
1
;
...
...
@@ -234,7 +237,7 @@ int AXES::serialize(std::wostream & _stream, bool secondary)
break
;
}
}
}
CP_XML_WRITER
(
_stream
)
{
for
(
size_t
i
=
0
;
i
<
m_arAxes
.
size
();
i
++
)
...
...
@@ -246,8 +249,8 @@ int AXES::serialize(std::wostream & _stream, bool secondary)
std
::
wstring
node_ax_type
=
L"c:valAx"
;
if
(
iv
)
{
if
(
iv
->
bDataAxis
)
node_ax_type
=
L"c:dateAx"
;
else
node_ax_type
=
L"c:catAx"
;
if
(
iv
->
bDataAxis
)
node_ax_type
=
L"c:dateAx"
;
else
node_ax_type
=
L"c:catAx"
;
iv
->
m_bSecondary
=
secondary
;
}
...
...
@@ -273,7 +276,7 @@ int AXES::serialize(std::wostream & _stream, bool secondary)
l_
->
m_bUsed
=
true
;
break
;
}
if
(
l_
->
m_iLinkObject
==
3
&&
l_
->
m_bUsed
==
false
&&
iv
)
if
(
l_
->
m_iLinkObject
==
3
&&
l_
->
m_bUsed
==
false
&&
((
bAxisCategories
&&
iv
)
||
(
!
bAxisCategories
&&
(
dv
||
ser
)))
)
{
label
=
l_
;
l_
->
m_bUsed
=
true
;
...
...
@@ -315,18 +318,21 @@ int AXES::serialize(std::wostream & _stream, bool secondary)
{
if
(
m_arAxesId
[
i
].
second
==
3
&&
m_arAxesId
[
j
].
second
==
1
)
continue
;
CP_XML_NODE
(
L"c:crossAx"
){
CP_XML_ATTR
(
L"val"
,
m_arAxesId
[
j
].
first
);}
CP_XML_NODE
(
L"c:crossAx"
)
{
CP_XML_ATTR
(
L"val"
,
m_arAxesId
[
j
].
first
);}
}
}
CP_XML_NODE
(
L"c:crossBetween"
)
if
(
dv
)
{
if
((
iv
==
NULL
&&
iv_CatSerRange
)
&&
(
iv_CatSerRange
->
fBetween
==
false
))
{
CP_XML_ATTR
(
L"val"
,
L"midCat"
);
}
else
CP_XML_NODE
(
L"c:crossBetween"
)
{
CP_XML_ATTR
(
L"val"
,
L"between"
);
if
((
iv_CatSerRange
)
&&
(
iv_CatSerRange
->
fBetween
==
false
))
{
CP_XML_ATTR
(
L"val"
,
L"midCat"
);
}
else
{
CP_XML_ATTR
(
L"val"
,
L"between"
);
}
}
}
}
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/AXES.h
View file @
56bb39f7
...
...
@@ -59,6 +59,8 @@ public:
BaseObjectPtr
m_PlotArea_FRAME
;
BaseObjectPtr
m_Wall_FRAME
;
BaseObjectPtr
m_Floor_FRAME
;
bool
bAxisCategories
;
};
}
// namespace XLS
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/DVAXIS.cpp
View file @
56bb39f7
...
...
@@ -136,31 +136,33 @@ int DVAXIS::serialize(std::wostream & _stream)
}
CP_XML_NODE
(
L"c:scaling"
)
{
if
((
value_range
)
&&
(
value_range
->
fLog
==
true
))
{
CP_XML_NODE
(
L"c:logBase"
)
{
CP_XML_ATTR
(
L"val"
,
10
);
}
bLogarithScale
=
true
;
}
CP_XML_NODE
(
L"c:orientation"
)
{
if
((
value_range
)
&&
(
value_range
->
fReversed
))
CP_XML_ATTR
(
L"val"
,
L"maxMin"
);
else
CP_XML_ATTR
(
L"val"
,
L"minMax"
);
}
if
((
value_range
)
&&
(
value_range
->
fAutoMax
==
false
))
{
CP_XML_NODE
(
L"c:max"
)
{
if
(
bLogarithScale
)
CP_XML_ATTR
(
L"val"
,
pow
(
10
,
value_range
->
numMax
));
else
CP_XML_ATTR
(
L"val"
,
value_range
->
numMax
);
}
}
if
((
value_range
)
&&
(
value_range
->
fAutoMin
==
false
))
if
(
value_range
)
{
CP_XML_NODE
(
L"c:min"
)
if
(
value_range
->
fLog
==
true
)
{
if
(
bLogarithScale
)
CP_XML_ATTR
(
L"val"
,
pow
(
10
,
value_range
->
numMin
));
else
CP_XML_ATTR
(
L"val"
,
value_range
->
numMin
);
CP_XML_NODE
(
L"c:logBase"
)
{
CP_XML_ATTR
(
L"val"
,
10
);
}
bLogarithScale
=
true
;
}
if
(
value_range
->
fAutoMax
==
false
)
{
CP_XML_NODE
(
L"c:max"
)
{
if
(
bLogarithScale
)
CP_XML_ATTR
(
L"val"
,
pow
(
10
,
value_range
->
numMax
));
else
CP_XML_ATTR
(
L"val"
,
value_range
->
numMax
);
}
}
if
(
value_range
->
fAutoMin
==
false
)
{
CP_XML_NODE
(
L"c:min"
)
{
if
(
bLogarithScale
)
CP_XML_ATTR
(
L"val"
,
pow
(
10
,
value_range
->
numMin
));
else
CP_XML_ATTR
(
L"val"
,
value_range
->
numMin
);
}
}
}
}
...
...
@@ -187,26 +189,30 @@ int DVAXIS::serialize(std::wostream & _stream)
//----------------------------------------------------------------------------------------------
m_AXS
->
serialize
(
_stream
);
CP_XML_NODE
(
L"c:crosses"
)
if
(
value_range
)
{
if
((
value_range
)
&&
(
value_range
->
fMaxCross
==
true
))
CP_XML_ATTR
(
L"val"
,
L"max"
);
else
CP_XML_ATTR
(
L"val"
,
L"autoZero"
);
}
if
((
value_range
)
&&
(
value_range
->
fAutoMajor
==
false
))
{
CP_XML_NODE
(
L"c:majorUnit"
)
CP_XML_NODE
(
L"c:crosses"
)
{
if
(
bLogarithScale
)
CP_XML_ATTR
(
L"val"
,
pow
(
10
,
value_range
->
numMajor
)
);
else
CP_XML_ATTR
(
L"val"
,
value_range
->
numMajor
);
if
(
value_range
->
fMaxCross
==
true
)
CP_XML_ATTR
(
L"val"
,
L"max"
);
else
CP_XML_ATTR
(
L"val"
,
L"autoZero"
);
}
}
if
((
value_range
)
&&
(
value_range
->
fAutoMinor
==
false
))
{
CP_XML_NODE
(
L"c:minorUnit"
)
CP_XML_NODE
(
L"c:auto"
)
{
CP_XML_ATTR
(
L"val"
,
!
value_range
->
fAutoCross
);
}
if
(
value_range
->
fAutoMajor
==
false
)
{
CP_XML_NODE
(
L"c:majorUnit"
)
{
if
(
bLogarithScale
)
CP_XML_ATTR
(
L"val"
,
pow
(
10
,
value_range
->
numMajor
));
else
CP_XML_ATTR
(
L"val"
,
value_range
->
numMajor
);
}
}
if
(
value_range
->
fAutoMinor
==
false
)
{
if
(
bLogarithScale
)
CP_XML_ATTR
(
L"val"
,
pow
(
10
,
value_range
->
numMinor
));
else
CP_XML_ATTR
(
L"val"
,
value_range
->
numMinor
);
CP_XML_NODE
(
L"c:minorUnit"
)
{
if
(
bLogarithScale
)
CP_XML_ATTR
(
L"val"
,
pow
(
10
,
value_range
->
numMinor
));
else
CP_XML_ATTR
(
L"val"
,
value_range
->
numMinor
);
}
}
}
}
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/IVAXIS.cpp
View file @
56bb39f7
...
...
@@ -153,7 +153,6 @@ int IVAXIS::serialize(std::wostream & _stream)
CP_XML_NODE
(
L"c:orientation"
){
CP_XML_ATTR
(
L"val"
,
L"minMax"
);
}
}
}
CP_XML_NODE
(
L"c:auto"
)
{
CP_XML_ATTR
(
L"val"
,
0
);
}
CP_XML_NODE
(
L"c:delete"
){
CP_XML_ATTR
(
L"val"
,
0
);
}
//-------------------------------------------------------------------------------
...
...
@@ -181,11 +180,33 @@ int IVAXIS::serialize(std::wostream & _stream)
if
(
m_AxcExt
)
m_AxcExt
->
serialize
(
_stream
);
CP_XML_NODE
(
L"c:crosses"
)
if
(
cat_ser_range
)
{
if
((
cat_ser_range
)
&&
(
cat_ser_range
->
fMaxCross
==
true
))
CP_XML_ATTR
(
L"val"
,
L"max"
);
else
CP_XML_ATTR
(
L"val"
,
L"autoZero"
);
}
CP_XML_NODE
(
L"c:crosses"
)
{
if
(
cat_ser_range
->
fMaxCross
==
true
)
CP_XML_ATTR
(
L"val"
,
L"max"
);
else
CP_XML_ATTR
(
L"val"
,
L"autoZero"
);
}
}
if
(
m_CatLab
)
{
CatLab
*
label
=
dynamic_cast
<
CatLab
*>
(
m_CatLab
.
get
());
CP_XML_NODE
(
L"c:lblAlgn"
)
{
switch
(
label
->
at
)
{
case
0x0001
:
CP_XML_ATTR
(
L"val"
,
L"l"
);
break
;
case
0x0003
:
CP_XML_ATTR
(
L"val"
,
L"r"
);
break
;
case
0x0002
:
default:
CP_XML_ATTR
(
L"val"
,
L"ctr"
);
break
;
}
}
CP_XML_NODE
(
L"c:lblOffset"
)
{
CP_XML_ATTR
(
L"val"
,
label
->
wOffset
);
}
}
}
return
axes_type
;
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/SERIESAXIS.cpp
View file @
56bb39f7
...
...
@@ -153,7 +153,6 @@ int SERIESAXIS::serialize(std::wostream & _stream)
CP_XML_NODE
(
L"c:orientation"
){
CP_XML_ATTR
(
L"val"
,
L"minMax"
);
}
}
}
CP_XML_NODE
(
L"c:auto"
)
{
CP_XML_ATTR
(
L"val"
,
0
);
}
CP_XML_NODE
(
L"c:delete"
){
CP_XML_ATTR
(
L"val"
,
0
);
}
//-------------------------------------------------------------------------------
...
...
@@ -178,11 +177,14 @@ int SERIESAXIS::serialize(std::wostream & _stream)
//-----------------------------------------------------------------------------------
m_AXS
->
serialize
(
_stream
);
CP_XML_NODE
(
L"c:crosses"
)
if
(
cat_ser_range
)
{
if
((
cat_ser_range
)
&&
(
cat_ser_range
->
fMaxCross
==
true
))
CP_XML_ATTR
(
L"val"
,
L"max"
);
else
CP_XML_ATTR
(
L"val"
,
L"autoZero"
);
}
CP_XML_NODE
(
L"c:crosses"
)
{
if
(
cat_ser_range
->
fMaxCross
==
true
)
CP_XML_ATTR
(
L"val"
,
L"max"
);
else
CP_XML_ATTR
(
L"val"
,
L"autoZero"
);
}
}
}
return
axes_type
;
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/Biff_unions/SS.cpp
View file @
56bb39f7
...
...
@@ -385,7 +385,8 @@ int SS::serialize(std::wostream & _stream, int series_type, int indPt)
if
(
series_type
==
CHART_TYPE_Scatter
||
series_type
==
CHART_TYPE_Stock
)
//points only - todooo сделать дефолтовые точки ala 95 стиль & stork
{
CP_XML_NODE
(
L"a:noFill"
);
m_isAutoLine
=
false
;
//CP_XML_NODE(L"a:noFill");
}
else
{
...
...
@@ -445,20 +446,20 @@ int SS::serialize2(std::wostream & _stream, int series_type)
}
}
if
(
m_isAutoLine
==
false
&&
(
series_type
==
CHART_TYPE_Line
||
series_type
==
CHART_TYPE_Radar
||
series_type
==
CHART_TYPE_Scatter
))
{
if
(
series_format
)
{
CP_XML_NODE
(
L"c:smooth"
)
{
CP_XML_ATTR
(
L"val"
,
series_format
->
fSmoothedLine
);
}
}
else
CP_XML_NODE
(
L"c:smooth"
)
{
CP_XML_ATTR
(
L"val"
,
0
);
}
}
//
if (m_isAutoLine == false && ( series_type == CHART_TYPE_Line ||
// series_type == CHART_TYPE_Radar/*
||
// series_type == CHART_TYPE_Scatter*/
))
//
{
//
if (series_format)
//
{
//
CP_XML_NODE(L"c:smooth")
//
{
//
CP_XML_ATTR(L"val", series_format->fSmoothedLine);
//
}
//
}
//
else
//
CP_XML_NODE(L"c:smooth") { CP_XML_ATTR(L"val", 0); }
//
}
}
return
0
;
}
...
...
ASCOfficeXlsFile2/source/XlsFormat/Logic/ChartSheetSubstream.cpp
View file @
56bb39f7
...
...
@@ -629,10 +629,10 @@ int ChartSheetSubstream::serialize_title (std::wostream & _stream)
if
(
title_label
==
NULL
)
return
0
;
AI
*
title_text
=
dynamic_cast
<
AI
*>
(
title_label
->
m_AI
.
get
());
if
(
title_text
==
NULL
)
return
0
;
if
(
!
title_text
->
m_SeriesText
&&
!
title_text
->
m_BRAI
)
return
0
;
// если не выкидывать будет рисоваться placeholder
if
(
title_text
==
NULL
)
return
0
;
if
(
title_text
->
empty
())
return
0
;
CP_XML_WRITER
(
_stream
)
{
CP_XML_NODE
(
L"c:title"
)
...
...
@@ -753,6 +753,8 @@ int ChartSheetSubstream::serialize_plot_area (std::wostream & _stream)
PlotAreaPos
->
serialize
(
CP_XML_STREAM
());
}
int
series_order
=
0
;
for
(
std
::
unordered_map
<
int
,
std
::
vector
<
int
>>::
iterator
it
=
m_mapTypeChart
.
begin
();
it
!=
m_mapTypeChart
.
end
();
it
++
)
{
CRT
*
crt
=
dynamic_cast
<
CRT
*>
(
parent0
->
m_arCRT
[
it
->
first
].
get
());
...
...
@@ -799,7 +801,7 @@ int ChartSheetSubstream::serialize_plot_area (std::wostream & _stream)
CP_XML_NODE
(
L"c:ser"
)
{
CP_XML_NODE
(
L"c:idx"
)
{
CP_XML_ATTR
(
L"val"
,
series_id
);
}
CP_XML_NODE
(
L"c:order"
)
{
CP_XML_ATTR
(
L"val"
,
series_
id
);
}
CP_XML_NODE
(
L"c:order"
)
{
CP_XML_ATTR
(
L"val"
,
series_
order
++
);
}
series
->
m_arAI
[
0
]
->
serialize
(
CP_XML_STREAM
());
...
...
ASCOfficeXlsFile2/source/XlsXlsxConverter/XlsConverter.cpp
View file @
56bb39f7
...
...
@@ -1475,22 +1475,22 @@ void XlsConverter::convert_blip(std::vector<ODRAW::OfficeArtFOPTEPtr> & props)
case
0x100
:
{
if
(
fixed_point
)
xlsx_context
->
get_drawing_context
().
set_crop_top
(
fixed_point
->
dVal
);
xlsx_context
->
get_drawing_context
().
set_crop_top
(
fixed_point
->
dVal
*
10
);
}
break
;
case
0x101
:
{
if
(
fixed_point
)
xlsx_context
->
get_drawing_context
().
set_crop_bottom
(
fixed_point
->
dVal
);
xlsx_context
->
get_drawing_context
().
set_crop_bottom
(
fixed_point
->
dVal
*
10
);
}
break
;
case
0x102
:
{
if
(
fixed_point
)
xlsx_context
->
get_drawing_context
().
set_crop_left
(
fixed_point
->
dVal
);
xlsx_context
->
get_drawing_context
().
set_crop_left
(
fixed_point
->
dVal
*
10
);
}
break
;
case
0x103
:
{
if
(
fixed_point
)
xlsx_context
->
get_drawing_context
().
set_crop_right
(
fixed_point
->
dVal
);
xlsx_context
->
get_drawing_context
().
set_crop_right
(
fixed_point
->
dVal
*
10
);
}
break
;
case
0x104
:
{
...
...
ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.cpp
View file @
56bb39f7
...
...
@@ -514,8 +514,8 @@ void xlsx_drawing_context::end_drawing(_drawing_state_ptr & drawing_state)
if
(
drawing_state
->
id
<
0
)
drawing_state
->
id
=
count_object
+
0x20000
;
if
(
drawing_state
->
type
==
external_items
::
typeImage
||
drawing_state
->
shape_id
==
msosptPictureFrame
)
if
(
drawing_state
->
type
==
external_items
::
typeImage
||
(
drawing_state
->
type
==
external_items
::
typeShape
&&
drawing_state
->
shape_id
==
msosptPictureFrame
)
)
{
drawing_state
->
type
=
external_items
::
typeImage
;
...
...
@@ -1687,10 +1687,10 @@ void xlsx_drawing_context::serialize_bitmap_fill(std::wostream & stream, _drawin
{
if
(
fill
.
texture_crop_enabled
)
{
CP_XML_ATTR
(
L"l"
,
static_cast
<
size_t
>
(
fill
.
texture_crop
[
0
]
));
CP_XML_ATTR
(
L"t"
,
static_cast
<
size_t
>
(
fill
.
texture_crop
[
1
]
));
CP_XML_ATTR
(
L"r"
,
static_cast
<
size_t
>
(
fill
.
texture_crop
[
2
]
));
CP_XML_ATTR
(
L"b"
,
static_cast
<
size_t
>
(
fill
.
texture_crop
[
3
]
));
CP_XML_ATTR
(
L"l"
,
static_cast
<
long
>
(
fill
.
texture_crop
[
0
]
*
10000
));
CP_XML_ATTR
(
L"t"
,
static_cast
<
long
>
(
fill
.
texture_crop
[
1
]
*
10000
));
CP_XML_ATTR
(
L"r"
,
static_cast
<
long
>
(
fill
.
texture_crop
[
2
]
*
10000
));
CP_XML_ATTR
(
L"b"
,
static_cast
<
long
>
(
fill
.
texture_crop
[
3
]
*
10000
));
}
}
if
(
fill
.
texture_mode
==
textureStretch
)
...
...
ASCOfficeXlsFile2/source/XlsXlsxConverter/xlsx_drawing_context.h
View file @
56bb39f7
...
...
@@ -239,7 +239,7 @@ public:
{
color
.
SetRGB
(
0xff
,
0xff
,
0xff
);
angle
=
opacity
=
opacity2
=
focus
=
0
;
type
=
fillSolid
;
memset
(
texture_crop
,
0
,
4
*
sizeof
(
int
));
memset
(
texture_crop
,
0
,
4
*
sizeof
(
double
));
texture_crop_enabled
=
false
;
}
_color
color
;
...
...
@@ -252,7 +252,7 @@ public:
double
angle
;
std
::
wstring
texture_target
;
int
texture_crop
[
4
];
double
texture_crop
[
4
];
bool
texture_crop_enabled
;
_texture_mode
texture_mode
;
...
...
Common/OfficeFileFormatChecker.h
View file @
56bb39f7
...
...
@@ -73,6 +73,7 @@ public:
bool
isRtfFormatFile
(
unsigned
char
*
pBuffer
,
int
dwBytes
);
bool
isHtmlFormatFile
(
unsigned
char
*
pBuffer
,
int
dwBytes
,
bool
testCloseTag
);
bool
isPdfFormatFile
(
unsigned
char
*
pBuffer
,
int
dwBytes
);
bool
isOpenOfficeFlatFormatFile
(
unsigned
char
*
pBuffer
,
int
dwBytes
);
bool
isBinaryDoctFormatFile
(
unsigned
char
*
pBuffer
,
int
dwBytes
);
bool
isBinaryXlstFormatFile
(
unsigned
char
*
pBuffer
,
int
dwBytes
);
...
...
Common/OfficeFileFormatChecker2.cpp
View file @
56bb39f7
...
...
@@ -233,8 +233,7 @@ bool COfficeFileFormatChecker::isOfficeFile(const std::wstring & fileName)
else
if
(
isOnlyOfficeFormatFile
(
fileName
)
)
return
true
;
else
if
(
isXpsFile
(
fileName
)
)
return
true
;
}
//-----------------------------------------------------------------------------------------------
// others
{
NSFile
::
CFileBinary
file
;
...
...
@@ -272,7 +271,7 @@ bool COfficeFileFormatChecker::isOfficeFile(const std::wstring & fileName)
{
nFileType
=
AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU
;
}
else
if
(
isHtmlFormatFile
(
buffer
,
sizeRead
,
false
))
else
if
(
isHtmlFormatFile
(
buffer
,
sizeRead
,
false
))
{
long
fileSize
=
file
.
GetFileSize
();
if
(
fileSize
>
MIN_SIZE_BUFFER
)
...
...
@@ -290,14 +289,18 @@ bool COfficeFileFormatChecker::isOfficeFile(const std::wstring & fileName)
{
nFileType
=
AVS_OFFICESTUDIO_FILE_DOCUMENT_FB2
;
}
/////////////////////////////////////////////////////////////////////////
else
if
(
isOpenOfficeFlatFormatFile
(
buffer
,
sizeRead
)
)
{
//nFileType
}
//------------------------------------------------------------------------------------------------
file
.
CloseFile
();
if
(
buffer
)
delete
[]
buffer
;
buffer
=
NULL
;
}
if
(
nFileType
!=
AVS_OFFICESTUDIO_FILE_UNKNOWN
)
return
true
;
//------------------------------------------------------------------------------------------------
//// by Extension
std
::
wstring
::
size_type
nExtPos
=
fileName
.
rfind
(
L'.'
);
...
...
@@ -546,6 +549,39 @@ bool COfficeFileFormatChecker::isOpenOfficeFormatFile(const std::wstring & fileN
return
false
;
}
bool
COfficeFileFormatChecker
::
isOpenOfficeFlatFormatFile
(
unsigned
char
*
pBuffer
,
int
dwBytes
)
{
const
char
*
odfFormatLine
=
"office:document xmlns:office=
\"
urn:oasis:names:tc:opendocument:xmlns:office:1.0
\"
"
;
std
::
string
xml_string
((
char
*
)
pBuffer
,
dwBytes
);
if
(
std
::
string
::
npos
==
xml_string
.
find
(
odfFormatLine
))
{
return
false
;
}
const
char
*
odtFormatLine
=
"application/vnd.oasis.opendocument.text"
;
const
char
*
odsFormatLine
=
"application/vnd.oasis.opendocument.spreadsheet"
;
const
char
*
odpFormatLine
=
"application/vnd.oasis.opendocument.presentation"
;
if
(
std
::
string
::
npos
!=
xml_string
.
find
(
odtFormatLine
))
{
nFileType
=
AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT_FLAT
;
}
else
if
(
std
::
string
::
npos
!=
xml_string
.
find
(
odsFormatLine
))
{
nFileType
=
AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS_FLAT
;
}
else
if
(
std
::
string
::
npos
!=
xml_string
.
find
(
odpFormatLine
))
{
nFileType
=
AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP_FLAT
;
}
if
(
nFileType
!=
AVS_OFFICESTUDIO_FILE_UNKNOWN
)
return
true
;
return
false
;
}
std
::
wstring
COfficeFileFormatChecker
::
GetExtensionByType
(
int
type
)
{
switch
(
type
)
...
...
Common/OfficeFileFormats.h
View file @
56bb39f7
...
...
@@ -47,6 +47,7 @@
#define AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCM AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x000b
#define AVS_OFFICESTUDIO_FILE_DOCUMENT_DOTX AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x000c
#define AVS_OFFICESTUDIO_FILE_DOCUMENT_DOTM AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x000d
#define AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT_FLAT AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x000e
#define AVS_OFFICESTUDIO_FILE_PRESENTATION 0x0080
#define AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0001
...
...
@@ -57,6 +58,7 @@
#define AVS_OFFICESTUDIO_FILE_PRESENTATION_PPSM AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0006
#define AVS_OFFICESTUDIO_FILE_PRESENTATION_POTX AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0007
#define AVS_OFFICESTUDIO_FILE_PRESENTATION_POTM AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0008
#define AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP_FLAT AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0009
#define AVS_OFFICESTUDIO_FILE_SPREADSHEET 0x0100
#define AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0001
...
...
@@ -66,6 +68,7 @@
#define AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSM AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0005
#define AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLTX AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0006
#define AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLTM AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0007
#define AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS_FLAT AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0008
#define AVS_OFFICESTUDIO_FILE_CROSSPLATFORM 0x0200
#define AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0001
...
...
X2tConverter/src/ASCConverters.cpp
View file @
56bb39f7
...
...
@@ -2158,7 +2158,7 @@ namespace NExtractTools
return
S_OK
==
txtFile
.
txt_SaveToFile
(
sTo
,
sDocxDir
,
params
.
getXmlOptions
())
?
0
:
AVS_FILEUTILS_ERROR_CONVERT
;
}
//odf
int
odf2oot
(
const
std
::
wstring
&
sFrom
,
const
std
::
wstring
&
sTo
,
const
std
::
wstring
&
sTemp
,
InputParams
&
params
)
{
std
::
wstring
sResultDoctDir
=
sTemp
+
FILE_SEPARATOR_STR
+
_T
(
"doct_unpacked"
);
...
...
@@ -2228,6 +2228,61 @@ namespace NExtractTools
return
S_OK
==
ConvertOO2OOX
(
sTempUnpackedOdf
,
sTo
,
params
.
getFontPath
(),
false
,
NULL
)
?
0
:
AVS_FILEUTILS_ERROR_CONVERT
;
}
//odf flat
int
odf_flat2oot
(
const
std
::
wstring
&
sFrom
,
const
std
::
wstring
&
sTo
,
const
std
::
wstring
&
sTemp
,
InputParams
&
params
)
{
std
::
wstring
sResultDoctDir
=
sTemp
+
FILE_SEPARATOR_STR
+
_T
(
"doct_unpacked"
);
std
::
wstring
sResultDoctFileEditor
=
sResultDoctDir
+
FILE_SEPARATOR_STR
+
_T
(
"Editor.bin"
);
NSDirectory
::
CreateDirectory
(
sResultDoctDir
);
int
nRes
=
odf_flat2oot_bin
(
sFrom
,
sResultDoctFileEditor
,
sTemp
,
params
);
if
(
SUCCEEDED_X2T
(
nRes
))
{
COfficeUtils
oCOfficeUtils
(
NULL
);
nRes
=
(
S_OK
==
oCOfficeUtils
.
CompressFileOrDirectory
(
sResultDoctDir
,
sTo
))
?
nRes
:
AVS_FILEUTILS_ERROR_CONVERT
;
}
return
nRes
;
}
int
odf_flat2oot_bin
(
const
std
::
wstring
&
sFrom
,
const
std
::
wstring
&
sTo
,
const
std
::
wstring
&
sTemp
,
InputParams
&
params
)
{
std
::
wstring
sTempUnpackedOox
=
sTemp
+
FILE_SEPARATOR_STR
+
_T
(
"oox_unpacked"
);
NSDirectory
::
CreateDirectory
(
sTempUnpackedOox
);
if
(
S_OK
==
ConvertOO2OOX
(
sFrom
,
sTempUnpackedOox
,
params
.
getFontPath
(),
false
,
NULL
))
{
BinDocxRW
::
CDocxSerializer
m_oCDocxSerializer
;
m_oCDocxSerializer
.
setFontDir
(
params
.
getFontPath
());
int
res
=
m_oCDocxSerializer
.
saveToFile
(
sTo
,
sTempUnpackedOox
,
params
.
getXmlOptions
())
?
0
:
AVS_FILEUTILS_ERROR_CONVERT
;
return
res
;
}
return
AVS_FILEUTILS_ERROR_CONVERT
;
}
int
odf_flat2oox
(
const
std
::
wstring
&
sFrom
,
const
std
::
wstring
&
sTo
,
const
std
::
wstring
&
sTemp
,
InputParams
&
params
)
{
std
::
wstring
sTempUnpackedOox
=
sTemp
+
FILE_SEPARATOR_STR
+
_T
(
"oox_unpacked"
);
NSDirectory
::
CreateDirectory
(
sTempUnpackedOox
);
int
nRes
=
odf_flat2oox_dir
(
sFrom
,
sTempUnpackedOox
,
sTemp
,
params
);
if
(
SUCCEEDED_X2T
(
nRes
))
{
COfficeUtils
oCOfficeUtils
(
NULL
);
nRes
=
(
S_OK
==
oCOfficeUtils
.
CompressFileOrDirectory
(
sTempUnpackedOox
,
sTo
,
true
))
?
nRes
:
AVS_FILEUTILS_ERROR_CONVERT
;
}
return
nRes
;
}
int
odf_flat2oox_dir
(
const
std
::
wstring
&
sFrom
,
const
std
::
wstring
&
sTo
,
const
std
::
wstring
&
sTemp
,
InputParams
&
params
)
{
return
S_OK
==
ConvertOO2OOX
(
sFrom
,
sTo
,
params
.
getFontPath
(),
false
,
NULL
)
?
0
:
AVS_FILEUTILS_ERROR_CONVERT
;
}
// docx -> odt
int
docx2odt
(
const
std
::
wstring
&
sFrom
,
const
std
::
wstring
&
sTo
,
const
std
::
wstring
&
sTemp
,
InputParams
&
params
)
{
...
...
@@ -3005,6 +3060,10 @@ namespace NExtractTools
{
nRes
=
odf2oox_dir
(
sFrom
,
sDocxDir
,
sTemp
,
params
);
}
else
if
(
AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT_FLAT
==
nFormatFrom
)
{
nRes
=
odf_flat2oox_dir
(
sFrom
,
sDocxDir
,
sTemp
,
params
);
}
else
if
(
AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF
==
nFormatFrom
)
{
nRes
=
rtf2docx_dir
(
sFrom
,
sDocxDir
,
sTemp
,
params
);
...
...
@@ -3196,7 +3255,11 @@ namespace NExtractTools
{
nRes
=
odf2oox_dir
(
sFrom
,
sXlsxDir
,
sTemp
,
params
);
}
else
else
if
(
AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS_FLAT
==
nFormatFrom
)
{
nRes
=
odf_flat2oox_dir
(
sFrom
,
sXlsxDir
,
sTemp
,
params
);
}
else
nRes
=
AVS_FILEUTILS_ERROR_CONVERT
;
if
(
SUCCEEDED_X2T
(
nRes
))
{
...
...
@@ -3342,7 +3405,11 @@ namespace NExtractTools
{
nRes
=
odf2oox_dir
(
sFrom
,
sPptxDir
,
sTemp
,
params
);
}
else
if
(
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPSX
==
nFormatFrom
)
else
if
(
AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP_FLAT
==
nFormatFrom
)
{
nRes
=
odf_flat2oox_dir
(
sFrom
,
sPptxDir
,
sTemp
,
params
);
}
else
if
(
AVS_OFFICESTUDIO_FILE_PRESENTATION_PPSX
==
nFormatFrom
)
{
nRes
=
ppsx2pptx_dir
(
sFrom
,
sPptxDir
,
params
);
}
...
...
@@ -3923,6 +3990,18 @@ namespace NExtractTools
case
TCD_ODF2OOT_BIN
:
{
result
=
odf2oot_bin
(
sFileFrom
,
sFileTo
,
sTempDir
,
oInputParams
);
}
break
;
case
TCD_ODF_FLAT2OOX
:
{
result
=
odf_flat2oox
(
sFileFrom
,
sFileTo
,
sTempDir
,
oInputParams
);
}
break
;
case
TCD_ODF_FLAT2OOT
:
{
result
=
odf_flat2oot
(
sFileFrom
,
sFileTo
,
sTempDir
,
oInputParams
);
}
break
;
case
TCD_ODF_FLAT2OOT_BIN
:
{
result
=
odf_flat2oot_bin
(
sFileFrom
,
sFileTo
,
sTempDir
,
oInputParams
);
}
break
;
case
TCD_DOCX2ODT
:
{
...
...
X2tConverter/src/ASCConverters.h
View file @
56bb39f7
...
...
@@ -149,7 +149,12 @@ namespace NExtractTools
int
odf2oot
(
const
std
::
wstring
&
sFrom
,
const
std
::
wstring
&
sTo
,
const
std
::
wstring
&
sTemp
,
InputParams
&
params
);
int
odf2oot_bin
(
const
std
::
wstring
&
sFrom
,
const
std
::
wstring
&
sTo
,
const
std
::
wstring
&
sTemp
,
InputParams
&
params
);
int
docx2odt
(
const
std
::
wstring
&
sFrom
,
const
std
::
wstring
&
sTo
,
const
std
::
wstring
&
sTemp
,
InputParams
&
params
);
int
odf_flat2oox
(
const
std
::
wstring
&
sFrom
,
const
std
::
wstring
&
sTo
,
const
std
::
wstring
&
sTemp
,
InputParams
&
params
);
int
odf_flat2oox_dir
(
const
std
::
wstring
&
sFrom
,
const
std
::
wstring
&
sTo
,
const
std
::
wstring
&
sTemp
,
InputParams
&
params
);
int
odf_flat2oot
(
const
std
::
wstring
&
sFrom
,
const
std
::
wstring
&
sTo
,
const
std
::
wstring
&
sTemp
,
InputParams
&
params
);
int
odf_flat2oot_bin
(
const
std
::
wstring
&
sFrom
,
const
std
::
wstring
&
sTo
,
const
std
::
wstring
&
sTemp
,
InputParams
&
params
);
int
docx2odt
(
const
std
::
wstring
&
sFrom
,
const
std
::
wstring
&
sTo
,
const
std
::
wstring
&
sTemp
,
InputParams
&
params
);
int
docx_dir2odt
(
const
std
::
wstring
&
sFrom
,
const
std
::
wstring
&
sTo
,
const
std
::
wstring
&
sTemp
,
InputParams
&
params
);
int
xlsx2ods
(
const
std
::
wstring
&
sFrom
,
const
std
::
wstring
&
sTo
,
const
std
::
wstring
&
sTemp
,
InputParams
&
params
);
int
xlsx_dir2ods
(
const
std
::
wstring
&
sFrom
,
const
std
::
wstring
&
sTo
,
const
std
::
wstring
&
sTemp
,
InputParams
&
params
);
...
...
X2tConverter/src/cextracttools.cpp
View file @
56bb39f7
...
...
@@ -268,7 +268,7 @@ namespace NExtractTools
case
AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT
:
case
AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS
:
case
AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP
:
{
{
if
(
0
==
sExt2
.
compare
(
_T
(
".bin"
)))
res
=
TCD_ODF2OOT_BIN
;
else
if
(
0
==
sExt2
.
compare
(
_T
(
".doct"
))
||
0
==
sExt2
.
compare
(
_T
(
".xlst"
))
||
...
...
@@ -279,6 +279,21 @@ namespace NExtractTools
else
if
(
0
==
sExt2
.
compare
(
_T
(
".docm"
))
||
0
==
sExt2
.
compare
(
_T
(
".xlsm"
))
||
0
==
sExt2
.
compare
(
_T
(
".pptm"
)))
res
=
TCD_ODF2OOX
;
}
break
;
case
AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT_FLAT
:
case
AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS_FLAT
:
case
AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP_FLAT
:
{
if
(
0
==
sExt2
.
compare
(
_T
(
".bin"
)))
res
=
TCD_ODF_FLAT2OOT_BIN
;
else
if
(
0
==
sExt2
.
compare
(
_T
(
".doct"
))
||
0
==
sExt2
.
compare
(
_T
(
".xlst"
))
||
0
==
sExt2
.
compare
(
_T
(
".pptt"
)))
res
=
TCD_ODF_FLAT2OOT
;
else
if
(
0
==
sExt2
.
compare
(
_T
(
".docx"
))
||
0
==
sExt2
.
compare
(
_T
(
".xlsx"
))
||
0
==
sExt2
.
compare
(
_T
(
".pptx"
)))
res
=
TCD_ODF_FLAT2OOX
;
else
if
(
0
==
sExt2
.
compare
(
_T
(
".docm"
))
||
0
==
sExt2
.
compare
(
_T
(
".xlsm"
))
||
0
==
sExt2
.
compare
(
_T
(
".pptm"
)))
res
=
TCD_ODF_FLAT2OOX
;
}
break
;
case
AVS_OFFICESTUDIO_FILE_OTHER_MS_OFFCRYPTO
:
{
...
...
X2tConverter/src/cextracttools.h
View file @
56bb39f7
...
...
@@ -137,6 +137,10 @@ namespace NExtractTools
TCD_ODF2OOX
,
TCD_ODF2OOT
,
TCD_ODF2OOT_BIN
,
//odf flat 2
TCD_ODF_FLAT2OOX
,
TCD_ODF_FLAT2OOT
,
TCD_ODF_FLAT2OOT_BIN
,
//2 odt
TCD_DOCX2ODT
,
TCD_DOCT2ODT
,
...
...
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