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
4ea68435
Commit
4ea68435
authored
Jun 24, 2016
by
ElenaSubbotina
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
OdfFormatReader - charts - поправлены тектурные заливки. Небольшой рефакторинг.
parent
f0941c0c
Changes
54
Hide whitespace changes
Inline
Side-by-side
Showing
54 changed files
with
573 additions
and
573 deletions
+573
-573
ASCOfficeOdfFile/linux/OdfFileReaderLib.pro
ASCOfficeOdfFile/linux/OdfFileReaderLib.pro
+2
-2
ASCOfficeOdfFile/src/docx/docx_conversion_context.cpp
ASCOfficeOdfFile/src/docx/docx_conversion_context.cpp
+5
-5
ASCOfficeOdfFile/src/docx/docx_conversion_context.h
ASCOfficeOdfFile/src/docx/docx_conversion_context.h
+4
-5
ASCOfficeOdfFile/src/docx/docx_drawing.cpp
ASCOfficeOdfFile/src/docx/docx_drawing.cpp
+8
-8
ASCOfficeOdfFile/src/docx/docx_package.cpp
ASCOfficeOdfFile/src/docx/docx_package.cpp
+7
-0
ASCOfficeOdfFile/src/docx/docx_package.h
ASCOfficeOdfFile/src/docx/docx_package.h
+1
-1
ASCOfficeOdfFile/src/docx/docx_table_context.h
ASCOfficeOdfFile/src/docx/docx_table_context.h
+5
-3
ASCOfficeOdfFile/src/docx/drawing_object_description.h
ASCOfficeOdfFile/src/docx/drawing_object_description.h
+1
-1
ASCOfficeOdfFile/src/docx/headers_footers.h
ASCOfficeOdfFile/src/docx/headers_footers.h
+1
-1
ASCOfficeOdfFile/src/docx/hyperlinks.cpp
ASCOfficeOdfFile/src/docx/hyperlinks.cpp
+1
-1
ASCOfficeOdfFile/src/docx/mediaitems.cpp
ASCOfficeOdfFile/src/docx/mediaitems.cpp
+12
-17
ASCOfficeOdfFile/src/docx/mediaitems.h
ASCOfficeOdfFile/src/docx/mediaitems.h
+23
-25
ASCOfficeOdfFile/src/docx/mediaitems_utils.cpp
ASCOfficeOdfFile/src/docx/mediaitems_utils.cpp
+3
-3
ASCOfficeOdfFile/src/docx/mediaitems_utils.h
ASCOfficeOdfFile/src/docx/mediaitems_utils.h
+1
-1
ASCOfficeOdfFile/src/docx/oox_chart_context.cpp
ASCOfficeOdfFile/src/docx/oox_chart_context.cpp
+47
-22
ASCOfficeOdfFile/src/docx/oox_chart_context.h
ASCOfficeOdfFile/src/docx/oox_chart_context.h
+13
-8
ASCOfficeOdfFile/src/docx/oox_chart_shape.cpp
ASCOfficeOdfFile/src/docx/oox_chart_shape.cpp
+2
-4
ASCOfficeOdfFile/src/docx/oox_chart_shape.h
ASCOfficeOdfFile/src/docx/oox_chart_shape.h
+2
-30
ASCOfficeOdfFile/src/docx/oox_drawing.cpp
ASCOfficeOdfFile/src/docx/oox_drawing.cpp
+1
-1
ASCOfficeOdfFile/src/docx/oox_drawing.h
ASCOfficeOdfFile/src/docx/oox_drawing.h
+2
-2
ASCOfficeOdfFile/src/docx/oox_package.cpp
ASCOfficeOdfFile/src/docx/oox_package.cpp
+2
-2
ASCOfficeOdfFile/src/docx/oox_package.h
ASCOfficeOdfFile/src/docx/oox_package.h
+1
-1
ASCOfficeOdfFile/src/docx/oox_rels.cpp
ASCOfficeOdfFile/src/docx/oox_rels.cpp
+111
-111
ASCOfficeOdfFile/src/docx/oox_rels.h
ASCOfficeOdfFile/src/docx/oox_rels.h
+112
-97
ASCOfficeOdfFile/src/docx/pptx_comments.cpp
ASCOfficeOdfFile/src/docx/pptx_comments.cpp
+1
-1
ASCOfficeOdfFile/src/docx/pptx_conversion_context.cpp
ASCOfficeOdfFile/src/docx/pptx_conversion_context.cpp
+4
-18
ASCOfficeOdfFile/src/docx/pptx_conversion_context.h
ASCOfficeOdfFile/src/docx/pptx_conversion_context.h
+1
-1
ASCOfficeOdfFile/src/docx/pptx_drawing.cpp
ASCOfficeOdfFile/src/docx/pptx_drawing.cpp
+4
-4
ASCOfficeOdfFile/src/docx/pptx_drawings.cpp
ASCOfficeOdfFile/src/docx/pptx_drawings.cpp
+33
-47
ASCOfficeOdfFile/src/docx/pptx_drawings.h
ASCOfficeOdfFile/src/docx/pptx_drawings.h
+2
-2
ASCOfficeOdfFile/src/docx/pptx_output_xml.h
ASCOfficeOdfFile/src/docx/pptx_output_xml.h
+1
-1
ASCOfficeOdfFile/src/docx/pptx_package.cpp
ASCOfficeOdfFile/src/docx/pptx_package.cpp
+7
-0
ASCOfficeOdfFile/src/docx/pptx_slide_context.cpp
ASCOfficeOdfFile/src/docx/pptx_slide_context.cpp
+25
-25
ASCOfficeOdfFile/src/docx/pptx_slide_context.h
ASCOfficeOdfFile/src/docx/pptx_slide_context.h
+1
-1
ASCOfficeOdfFile/src/docx/pptx_table_context.cpp
ASCOfficeOdfFile/src/docx/pptx_table_context.cpp
+2
-2
ASCOfficeOdfFile/src/docx/pptx_text_context.h
ASCOfficeOdfFile/src/docx/pptx_text_context.h
+7
-7
ASCOfficeOdfFile/src/docx/xlsx_comments.cpp
ASCOfficeOdfFile/src/docx/xlsx_comments.cpp
+1
-1
ASCOfficeOdfFile/src/docx/xlsx_drawing.cpp
ASCOfficeOdfFile/src/docx/xlsx_drawing.cpp
+4
-8
ASCOfficeOdfFile/src/docx/xlsx_drawing_context.cpp
ASCOfficeOdfFile/src/docx/xlsx_drawing_context.cpp
+18
-18
ASCOfficeOdfFile/src/docx/xlsx_drawings.cpp
ASCOfficeOdfFile/src/docx/xlsx_drawings.cpp
+29
-43
ASCOfficeOdfFile/src/docx/xlsx_drawings.h
ASCOfficeOdfFile/src/docx/xlsx_drawings.h
+4
-4
ASCOfficeOdfFile/src/docx/xlsx_hyperlinks.cpp
ASCOfficeOdfFile/src/docx/xlsx_hyperlinks.cpp
+1
-1
ASCOfficeOdfFile/src/docx/xlsx_output_xml.h
ASCOfficeOdfFile/src/docx/xlsx_output_xml.h
+1
-1
ASCOfficeOdfFile/src/docx/xlsx_package.cpp
ASCOfficeOdfFile/src/docx/xlsx_package.cpp
+8
-1
ASCOfficeOdfFile/src/docx/xlsxconversioncontext.cpp
ASCOfficeOdfFile/src/docx/xlsxconversioncontext.cpp
+4
-4
ASCOfficeOdfFile/src/docx/xlsxconversioncontext.h
ASCOfficeOdfFile/src/docx/xlsxconversioncontext.h
+1
-1
ASCOfficeOdfFile/src/odf/chart_build_oox.cpp
ASCOfficeOdfFile/src/odf/chart_build_oox.cpp
+9
-4
ASCOfficeOdfFile/src/odf/chart_build_oox.h
ASCOfficeOdfFile/src/odf/chart_build_oox.h
+7
-3
ASCOfficeOdfFile/src/odf/draw_common.cpp
ASCOfficeOdfFile/src/odf/draw_common.cpp
+9
-2
ASCOfficeOdfFile/src/odf/draw_frame_docx.cpp
ASCOfficeOdfFile/src/odf/draw_frame_docx.cpp
+10
-10
ASCOfficeOdfFile/src/odf/draw_frame_pptx.cpp
ASCOfficeOdfFile/src/odf/draw_frame_pptx.cpp
+1
-1
ASCOfficeOdfFile/src/odf/draw_frame_xlsx.cpp
ASCOfficeOdfFile/src/odf/draw_frame_xlsx.cpp
+1
-1
ASCOfficeOdfFile/src/odf/table_pptx.cpp
ASCOfficeOdfFile/src/odf/table_pptx.cpp
+2
-2
ASCOfficeOdfFile/win32/cpodf.vcproj
ASCOfficeOdfFile/win32/cpodf.vcproj
+8
-8
No files found.
ASCOfficeOdfFile/linux/OdfFileReaderLib.pro
View file @
4ea68435
...
...
@@ -269,7 +269,6 @@ SOURCES += \
..
/
src
/
docx
/
docx_conversion_context
.
cpp
\
..
/
src
/
docx
/
docx_drawing
.
cpp
\
..
/
src
/
docx
/
docx_package
.
cpp
\
..
/
src
/
docx
/
docx_rels
.
cpp
\
..
/
src
/
docx
/
docx_table_context
.
cpp
\
..
/
src
/
docx
/
headers_footers
.
cpp
\
..
/
src
/
docx
/
hyperlinks
.
cpp
\
...
...
@@ -291,6 +290,7 @@ SOURCES += \
..
/
src
/
docx
/
oox_plot_area
.
cpp
\
..
/
src
/
docx
/
oox_title
.
cpp
\
..
/
src
/
docx
/
oox_types_chart
.
cpp
\
..
/
src
/
docx
/
oox_rels
.
cpp
\
..
/
src
/
docx
/
pptx_comments
.
cpp
\
..
/
src
/
docx
/
pptx_comments_context
.
cpp
\
..
/
src
/
docx
/
pptx_conversion_context
.
cpp
\
...
...
@@ -517,7 +517,6 @@ HEADERS += \
..
/
src
/
docx
/
docx_conversion_state
.
h
\
..
/
src
/
docx
/
docx_drawing
.
h
\
..
/
src
/
docx
/
docx_package
.
h
\
..
/
src
/
docx
/
docx_rels
.
h
\
..
/
src
/
docx
/
docx_table_context
.
h
\
..
/
src
/
docx
/
drawing_object_description
.
h
\
..
/
src
/
docx
/
headers_footers
.
h
\
...
...
@@ -542,6 +541,7 @@ HEADERS += \
..
/
src
/
docx
/
ooxtablerowspanned
.
h
\
..
/
src
/
docx
/
oox_title
.
h
\
..
/
src
/
docx
/
oox_types_chart
.
h
\
..
/
src
/
docx
/
oox_rels
.
h
\
..
/
src
/
docx
/
pptx_comments
.
h
\
..
/
src
/
docx
/
pptx_comments_context
.
h
\
..
/
src
/
docx
/
pptx_conversion_context
.
h
\
...
...
ASCOfficeOdfFile/src/docx/docx_conversion_context.cpp
View file @
4ea68435
...
...
@@ -47,7 +47,7 @@
#include "../odf/datatypes/style_ref.h"
#include "docx_package.h"
#include "
doc
x_rels.h"
#include "
oo
x_rels.h"
#include "logging.h"
#include "../../DesktopEditor/fontengine/ApplicationFonts.h"
...
...
@@ -193,10 +193,9 @@ void docx_conversion_context::end_math_formula()
process_math_formula_
=
false
;
}
void
docx_conversion_context
::
start_chart
(
std
::
wstring
const
&
name
)
void
docx_conversion_context
::
start_chart
(
std
::
wstring
name
)
{
charts_
.
push_back
(
oox_chart_context
::
create
(
name
));
charts_
.
push_back
(
oox_chart_context_ptr
(
new
oox_chart_context
(
mediaitems_
,
name
)));
}
void
docx_conversion_context
::
end_chart
()
{
...
...
@@ -264,7 +263,7 @@ void docx_conversion_context::dump_notes(rels & Rels) const
notes_context_
.
dump_rels
(
Rels
);
}
std
::
wstring
docx_conversion_context
::
add_mediaitem
(
const
std
::
wstring
&
uri
,
mediaitems
::
Type
type
,
bool
&
isInternal
,
std
::
wstring
&
ref
)
std
::
wstring
docx_conversion_context
::
add_mediaitem
(
const
std
::
wstring
&
uri
,
Rels
Type
type
,
bool
&
isInternal
,
std
::
wstring
&
ref
)
{
return
mediaitems_
.
add_or_find
(
uri
,
type
,
isInternal
,
ref
);
}
...
...
@@ -324,6 +323,7 @@ void docx_conversion_context::end_document()
package
::
chart_content_ptr
content
=
package
::
chart_content
::
create
();
chart
->
serialize
(
content
->
content
());
chart
->
dump_rels
(
content
->
get_rel_file
()
->
get_rels
());
output_document_
->
get_word_files
().
add_charts
(
content
);
...
...
ASCOfficeOdfFile/src/docx/docx_conversion_context.h
View file @
4ea68435
...
...
@@ -510,7 +510,7 @@ public:
hyperlinks
::
_ref
last_hyperlink
();
void
dump_hyperlinks
(
rels
&
Rels
,
hyperlinks
::
_type_place
type
);
std
::
wstring
add_mediaitem
(
const
std
::
wstring
&
uri
,
mediaitems
::
Type
type
,
bool
&
isInternal
,
std
::
wstring
&
ref
);
std
::
wstring
add_mediaitem
(
const
std
::
wstring
&
uri
,
Rels
Type
type
,
bool
&
isInternal
,
std
::
wstring
&
ref
);
void
dump_mediaitems
(
rels
&
Rels
);
void
dump_headers_footers
(
rels
&
Rels
)
const
;
...
...
@@ -626,7 +626,7 @@ public:
void
add_note_reference
();
oox_chart_context
&
current_chart
();
void
start_chart
(
std
::
wstring
const
&
name
);
void
start_chart
(
std
::
wstring
name
);
void
end_chart
();
void
start_comment
()
{
process_comment_
=
true
;}
...
...
@@ -645,6 +645,7 @@ public:
drop_cap_context
&
get_drop_cap_context
(){
return
drop_cap_context_
;}
styles_map
styles_map_
;
private:
std
::
wstringstream
document_xml_
;
std
::
wstringstream
styles_xml_
;
...
...
@@ -680,9 +681,7 @@ private:
bool
page_break_before_
;
bool
page_break_
;
bool
in_automatic_style_
;
bool
in_automatic_style_
;
std
::
wstring
text_list_style_name_
;
std
::
list
<
std
::
wstring
>
list_style_stack_
;
...
...
ASCOfficeOdfFile/src/docx/docx_drawing.cpp
View file @
4ea68435
...
...
@@ -350,22 +350,22 @@ void docx_serialize_common(std::wostream & strm, _docx_drawing & val)
CP_XML_ATTR
(
L"xmlns:a"
,
L"http://schemas.openxmlformats.org/drawingml/2006/main"
);
CP_XML_NODE
(
L"a:graphicData"
)
{
if
(
val
.
type
==
mediaitems
::
typeShape
)
if
(
val
.
type
==
typeShape
)
{
CP_XML_ATTR
(
L"uri"
,
L"http://schemas.microsoft.com/office/word/2010/wordprocessingShape"
);
docx_serialize_shape_child
(
CP_XML_STREAM
(),
val
);
}
else
if
(
val
.
type
==
mediaitems
::
typeImage
)
else
if
(
val
.
type
==
typeImage
)
{
CP_XML_ATTR
(
L"uri"
,
L"http://schemas.openxmlformats.org/drawingml/2006/picture"
);
docx_serialize_image_child
(
CP_XML_STREAM
(),
val
);
}
else
if
(
val
.
type
==
mediaitems
::
typeChart
)
else
if
(
val
.
type
==
typeChart
)
{
CP_XML_ATTR
(
L"uri"
,
L"http://schemas.openxmlformats.org/drawingml/2006/chart"
);
docx_serialize_chart_child
(
CP_XML_STREAM
(),
val
);
}
else
if
(
val
.
type
==
mediaitems
::
typeGroup
)
else
if
(
val
.
type
==
typeGroupShape
)
{
CP_XML_ATTR
(
L"uri"
,
L"http://schemas.microsoft.com/office/word/2010/wordprocessingGroup"
);
docx_serialize_group_child
(
CP_XML_STREAM
(),
val
);
...
...
@@ -376,19 +376,19 @@ void docx_serialize_common(std::wostream & strm, _docx_drawing & val)
}
void
docx_serialize_child
(
std
::
wostream
&
strm
,
_docx_drawing
&
val
)
{
if
(
val
.
type
==
mediaitems
::
typeShape
)
if
(
val
.
type
==
typeShape
)
{
docx_serialize_shape_child
(
strm
,
val
);
}
else
if
(
val
.
type
==
mediaitems
::
typeImage
)
else
if
(
val
.
type
==
typeImage
)
{
docx_serialize_image_child
(
strm
,
val
);
}
else
if
(
val
.
type
==
mediaitems
::
typeChart
)
else
if
(
val
.
type
==
typeChart
)
{
docx_serialize_chart_child
(
strm
,
val
);
}
else
if
(
val
.
type
==
mediaitems
::
typeGroup
)
else
if
(
val
.
type
==
typeGroupShape
)
{
docx_serialize_group_child
(
strm
,
val
);
}
...
...
ASCOfficeOdfFile/src/docx/docx_package.cpp
View file @
4ea68435
...
...
@@ -216,6 +216,13 @@ void docx_charts_files::write(const std::wstring & RootPath)
contentTypes
->
add_override
(
std
::
wstring
(
L"/word/charts/"
)
+
fileName
,
kWSConType
);
package
::
simple_element
(
fileName
,
item
->
str
()).
write
(
path
);
rels_files
relFiles
;
item
->
get_rel_file
()
->
set_file_name
(
fileName
+
L".rels"
);
relFiles
.
add_rel_file
(
item
->
get_rel_file
());
relFiles
.
write
(
path
);
}
}
}
...
...
ASCOfficeOdfFile/src/docx/docx_package.h
View file @
4ea68435
...
...
@@ -37,7 +37,7 @@
#include <cpdoccore/CPSharedPtr.h>
#include "
doc
x_rels.h"
#include "
oo
x_rels.h"
#include "docx_content_type.h"
#include "oox_package.h"
...
...
ASCOfficeOdfFile/src/docx/docx_table_context.h
View file @
4ea68435
...
...
@@ -47,10 +47,12 @@ public:
docx_table_state
(
docx_conversion_context
&
Context
,
const
std
::
wstring
&
StyleName
);
std
::
wstring
current_style
()
const
{
return
table_style_
;
}
void
start_column
(
unsigned
int
repeated
,
const
std
::
wstring
&
defaultCellStyleName
);
std
::
wstring
get_default_cell_style_col
(
unsigned
int
column
);
void
start_column
(
unsigned
int
repeated
,
const
std
::
wstring
&
defaultCellStyleName
);
std
::
wstring
get_default_cell_style_col
(
unsigned
int
column
);
std
::
wstring
get_default_cell_style_row
();
void
start_row
(
const
std
::
wstring
&
StyleName
,
const
std
::
wstring
&
defaultCellStyleName
);
void
start_row
(
const
std
::
wstring
&
StyleName
,
const
std
::
wstring
&
defaultCellStyleName
);
void
end_row
();
std
::
wstring
current_row_style
()
const
;
...
...
ASCOfficeOdfFile/src/docx/drawing_object_description.h
View file @
4ea68435
...
...
@@ -49,7 +49,7 @@ struct _rect
struct
drawing_object_description
{
oox
::
mediaitems
::
Type
type_
;
oox
::
Rels
Type
type_
;
std
::
wstring
name_
;
_CP_OPT
(
_rect
)
svg_rect_
;
...
...
ASCOfficeOdfFile/src/docx/headers_footers.h
View file @
4ea68435
...
...
@@ -35,7 +35,7 @@
#include <string>
#include <boost/unordered_map.hpp>
#include "
doc
x_rels.h"
#include "
oo
x_rels.h"
namespace
cpdoccore
{
namespace
odf_reader
{
...
...
ASCOfficeOdfFile/src/docx/hyperlinks.cpp
View file @
4ea68435
...
...
@@ -31,7 +31,7 @@
*/
#include "hyperlinks.h"
#include "
doc
x_rels.h"
#include "
oo
x_rels.h"
#include <boost/foreach.hpp>
#include <boost/lexical_cast.hpp>
...
...
ASCOfficeOdfFile/src/docx/mediaitems.cpp
View file @
4ea68435
...
...
@@ -39,7 +39,6 @@
#include <cpdoccore/xml/utils.h>
#include "docx_rels.h"
#include "mediaitems_utils.h"
#include "../../Common/DocxFormat/Source/Base/Base.h"
...
...
@@ -51,7 +50,7 @@ namespace oox {
mediaitems
::
item
::
item
(
std
::
wstring
const
&
_href
,
Type
_type
,
Rels
Type
_type
,
std
::
wstring
const
&
_outputName
,
bool
_mediaInternal
,
std
::
wstring
const
&
_Id
...
...
@@ -67,27 +66,27 @@ mediaitems::item::item( std::wstring const & _href,
count_used
=
0
;
}
std
::
wstring
mediaitems
::
add_or_find
(
const
std
::
wstring
&
href
,
Type
type
,
bool
&
isInternal
)
std
::
wstring
mediaitems
::
add_or_find
(
const
std
::
wstring
&
href
,
Rels
Type
type
,
bool
&
isInternal
)
{
std
::
wstring
ref
;
return
add_or_find
(
href
,
type
,
isInternal
,
ref
);
}
std
::
wstring
static
get_default_file_name
(
mediaitems
::
Type
type
)
std
::
wstring
static
get_default_file_name
(
Rels
Type
type
)
{
switch
(
type
)
{
case
mediaitems
:
:
typeImage
:
case
typeImage
:
return
L"image"
;
case
mediaitems
:
:
typeChart
:
case
typeChart
:
return
L"chart"
;
case
mediaitems
:
:
typeMedia
:
case
typeMedia
:
return
L"media"
;
default:
return
L""
;
}
}
std
::
wstring
mediaitems
::
create_file_name
(
const
std
::
wstring
&
uri
,
mediaitems
::
Type
type
,
size_t
Num
)
std
::
wstring
mediaitems
::
create_file_name
(
const
std
::
wstring
&
uri
,
Rels
Type
type
,
size_t
Num
)
{
if
(
uri
.
empty
())
return
L""
;
...
...
@@ -126,7 +125,7 @@ std::wstring mediaitems::create_file_name(const std::wstring & uri, mediaitems::
std
::
wstring
mediaitems
::
add_or_find
(
const
std
::
wstring
&
href
,
Type
type
,
bool
&
isInternal
,
std
::
wstring
&
ref
)
std
::
wstring
mediaitems
::
add_or_find
(
const
std
::
wstring
&
href
,
Rels
Type
type
,
bool
&
isInternal
,
std
::
wstring
&
ref
)
{
const
bool
isMediaInternal
=
utils
::
media
::
is_internal
(
href
,
odf_packet_
);
...
...
@@ -139,14 +138,10 @@ std::wstring mediaitems::add_or_find(const std::wstring & href, Type type, bool
}
int
number
=
0
;
if
(
type
==
typeChart
)
number
=
count_charts
+
1
;
else
if
(
type
==
typeImage
)
number
=
count_image
+
1
;
else
if
(
type
==
typeShape
)
number
=
count_shape
+
1
;
else
if
(
type
==
typeMedia
)
number
=
count_media
+
1
;
if
(
type
==
typeChart
)
number
=
count_charts
+
1
;
else
if
(
type
==
typeImage
)
number
=
count_image
+
1
;
else
if
(
type
==
typeShape
)
number
=
count_shape
+
1
;
else
if
(
type
==
typeMedia
)
number
=
count_media
+
1
;
else
number
=
items_
.
size
()
+
1
;
...
...
ASCOfficeOdfFile/src/docx/mediaitems.h
View file @
4ea68435
...
...
@@ -34,43 +34,41 @@
#include <vector>
#include <string>
#include "oox_rels.h"
namespace
cpdoccore
{
namespace
oox
{
class
rels
;
class
mediaitems
{
public:
enum
Type
{
typeUnknown
=
0
,
typeImage
,
typeChart
,
typeShape
,
typeTable
,
typeHyperlink
,
typeComment
,
typeMedia
,
typeGroup
};
mediaitems
(
const
std
::
wstring
&
odfPacket
)
:
odf_packet_
(
odfPacket
)
{
count_charts
=
0
;
count_shape
=
0
;
count_image
=
0
;
count_tables
=
0
;
count_media
=
0
;
count_charts
=
0
;
count_shape
=
0
;
count_image
=
0
;
count_tables
=
0
;
count_media
=
0
;
}
struct
item
{
item
(
std
::
wstring
const
&
_href
,
Type
_type
,
std
::
wstring
const
&
_outputName
,
bool
_mediaInternal
,
std
::
wstring
const
&
_Id
);
item
(
std
::
wstring
const
&
_href
,
RelsType
_type
,
std
::
wstring
const
&
_outputName
,
bool
_mediaInternal
,
std
::
wstring
const
&
_Id
);
std
::
wstring
href
;
Type
type
;
std
::
wstring
outputName
;
bool
mediaInternal
;
bool
valid
;
std
::
wstring
Id
;
int
count_used
;
int
count_add
;
std
::
wstring
href
;
RelsType
type
;
std
::
wstring
outputName
;
bool
mediaInternal
;
bool
valid
;
std
::
wstring
Id
;
int
count_used
;
int
count_add
;
};
typedef
std
::
vector
<
item
>
items_array
;
...
...
@@ -80,14 +78,14 @@ public:
size_t
count_shape
;
size_t
count_tables
;
std
::
wstring
add_or_find
(
const
std
::
wstring
&
href
,
Type
type
,
bool
&
isInternal
);
//возможны ссылки на один и тот же объект
std
::
wstring
add_or_find
(
const
std
::
wstring
&
href
,
Type
type
,
bool
&
isInternal
,
std
::
wstring
&
ref
);
std
::
wstring
add_or_find
(
const
std
::
wstring
&
href
,
Rels
Type
type
,
bool
&
isInternal
);
//возможны ссылки на один и тот же объект
std
::
wstring
add_or_find
(
const
std
::
wstring
&
href
,
Rels
Type
type
,
bool
&
isInternal
,
std
::
wstring
&
ref
);
void
dump_rels
(
rels
&
Rels
);
items_array
&
items
()
{
return
items_
;
}
private:
std
::
wstring
create_file_name
(
const
std
::
wstring
&
uri
,
mediaitems
::
Type
type
,
size_t
Num
);
std
::
wstring
create_file_name
(
const
std
::
wstring
&
uri
,
Rels
Type
type
,
size_t
Num
);
items_array
items_
;
std
::
wstring
odf_packet_
;
...
...
ASCOfficeOdfFile/src/docx/mediaitems_utils.cpp
View file @
4ea68435
...
...
@@ -60,13 +60,13 @@ bool is_internal(const std::wstring & uri, const std::wstring & packetRoot)
return
FileSystem
::
Directory
::
IsExist
(
resultPath
);
}
std
::
wstring
get_rel_type
(
mediaitems
::
Type
type
)
std
::
wstring
get_rel_type
(
Rels
Type
type
)
{
switch
(
type
)
{
case
mediaitems
:
:
typeImage
:
case
typeImage
:
return
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image"
;
case
mediaitems
:
:
typeChart
:
case
typeChart
:
return
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart"
;
default:
return
L""
;
...
...
ASCOfficeOdfFile/src/docx/mediaitems_utils.h
View file @
4ea68435
...
...
@@ -42,7 +42,7 @@ namespace utils {
namespace
media
{
bool
is_internal
(
const
std
::
wstring
&
uri
,
const
std
::
wstring
&
packetRoot
);
std
::
wstring
get_rel_type
(
mediaitems
::
Type
type
);
std
::
wstring
get_rel_type
(
Rels
Type
type
);
}
}
...
...
ASCOfficeOdfFile/src/docx/oox_chart_context.cpp
View file @
4ea68435
...
...
@@ -35,7 +35,7 @@
#include <vector>
#include <cpdoccore/xml/simple_xml_writer.h>
#include "mediaitems_utils.h"
#include "
doc
x_rels.h"
#include "
oo
x_rels.h"
#include "oox_chart_context.h"
...
...
@@ -45,8 +45,7 @@ namespace oox {
class
oox_chart_context
::
Impl
{
public:
Impl
(){}
Impl
(
std
::
wstring
const
&
name
){}
Impl
(
std
::
wstring
name
){}
std
::
wstring
name_
;
std
::
wstringstream
chartData_
;
...
...
@@ -55,26 +54,57 @@ public:
std
::
wstring
drawingId_
;
};
oox_chart_context_ptr
oox_chart_context
::
create
()
{
return
boost
::
make_shared
<
oox_chart_context
>
();
}
oox_chart_context_ptr
oox_chart_context
::
create
(
std
::
wstring
const
&
name
)
{
return
boost
::
make_shared
<
oox_chart_context
>
(
name
);
}
oox_chart_context
::
oox_chart_context
()
:
impl_
(
new
oox_chart_context
::
Impl
())
oox_chart_context
::
oox_chart_context
(
mediaitems
&
m
,
std
::
wstring
name
)
:
impl_
(
new
oox_chart_context
::
Impl
(
name
)),
mediaitems_
(
m
)
{
}
oox_chart_context
::
oox_chart_context
(
std
::
wstring
const
&
name
)
:
impl_
(
new
oox_chart_context
::
Impl
(
name
))
void
oox_chart_context
::
reset_fill
(
oox
::
_oox_fill
&
f
)
{
if
(
f
.
bitmap
)
{
bool
isInternal
=
true
;
std
::
wstring
ref
;
f
.
bitmap
->
rId
=
mediaitems_
.
add_or_find
(
f
.
bitmap
->
xlink_href_
,
typeImage
,
isInternal
,
ref
);
rels_
.
push_back
(
_rel
(
isInternal
,
f
.
bitmap
->
rId
,
ref
,
typeImage
));
}
}
std
::
wostream
&
oox_chart_context
::
chartData
()
{
return
impl_
->
chartData_
;
}
void
oox_chart_context
::
dump_rels
(
rels
&
Rels
)
{
for
(
int
i
=
0
;
i
<
rels_
.
size
();
i
++
)
{
_rel
&
r
=
rels_
[
i
];
if
(
r
.
type
==
typeImage
)
{
Rels
.
add
(
relationship
(
r
.
rid
,
utils
::
media
::
get_rel_type
(
r
.
type
),
r
.
is_internal
?
std
::
wstring
(
L"../"
)
+
r
.
ref
:
r
.
ref
,
(
r
.
is_internal
?
L""
:
L"External"
)
)
);
}
else
if
(
r
.
type
==
typeHyperlink
)
{
Rels
.
add
(
relationship
(
r
.
rid
,
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"
,
r
.
ref
,
L"External"
)
);
}
}
}
void
oox_chart_context
::
serialize
(
std
::
wostream
&
strm
)
{
CP_XML_WRITER
(
strm
)
...
...
@@ -97,9 +127,9 @@ void oox_chart_context::serialize(std::wostream & strm)
CP_XML_NODE
(
L"c:floor"
);
CP_XML_NODE
(
L"c:backWall"
);
}
title_
.
oox_serialize
(
CP_XML_STREAM
());
title_
.
oox_serialize
(
CP_XML_STREAM
());
plot_area_
.
oox_serialize
(
CP_XML_STREAM
());
legend_
.
oox_serialize
(
CP_XML_STREAM
());
legend_
.
oox_serialize
(
CP_XML_STREAM
());
CP_XML_NODE
(
L"c:plotVisOnly"
)
{
...
...
@@ -115,7 +145,7 @@ void oox_chart_context::serialize(std::wostream & strm)
}
}
oox_chart_shape
shape
;
shape
.
set
(
graphic_properties_
,
fill_
);
shape
.
set
(
graphic_properties_
,
fill_
);
shape
.
oox_serialize
(
CP_XML_STREAM
());
...
...
@@ -129,11 +159,6 @@ oox_chart_context::~oox_chart_context()
{
}
bool
oox_chart_context
::
empty
()
const
{
return
false
;
//impl_->empty();
}
void
oox_chart_context
::
set_cache_only
(
bool
val
)
{
for
(
int
i
=
0
;
i
<
plot_area_
.
charts_
.
size
();
i
++
)
...
...
ASCOfficeOdfFile/src/docx/oox_chart_context.h
View file @
4ea68435
...
...
@@ -40,6 +40,7 @@
#include "oox_title.h"
#include "oox_plot_area.h"
#include "oox_chart_legend.h"
#include "oox_rels.h"
namespace
cpdoccore
{
namespace
oox
{
...
...
@@ -49,22 +50,19 @@ class oox_chart_context;
typedef
_CP_PTR
(
oox_chart_context
)
oox_chart_context_ptr
;
class
oox_chart_context
/*: noncopyable*/
class
oox_chart_context
{
public:
oox_chart_context
();
oox_chart_context
(
std
::
wstring
const
&
name
);
oox_chart_context
(
mediaitems
&
mediaitems_
,
std
::
wstring
name
);
~
oox_chart_context
();
std
::
wostream
&
chartData
();
bool
empty
()
const
;
void
reset_fill
(
oox
::
_oox_fill
&
fill_
)
;
void
serialize
(
std
::
wostream
&
strm
);
void
dump_rels
(
rels
&
Rels
);
static
oox_chart_context_ptr
create
(
std
::
wstring
const
&
name
);
static
oox_chart_context_ptr
create
();
void
set_title
(
odf_reader
::
chart
::
title
&
t
)
{
title_
.
set_content
(
t
);
...
...
@@ -91,26 +89,31 @@ public:
}
void
set_wall
(
odf_reader
::
chart
::
simple
&
l
)
{
reset_fill
(
l
.
fill_
);
//plot_area_.wall_graphic_properties_ = l.graphic_properties_;
plot_area_
.
graphic_properties_
=
l
.
graphic_properties_
;
plot_area_
.
fill_
=
l
.
fill_
;
}
void
set_floor
(
odf_reader
::
chart
::
simple
&
l
)
{
reset_fill
(
l
.
fill_
);
//floor_.content_= l;
}
void
set_legend
(
odf_reader
::
chart
::
simple
&
l
)
{
reset_fill
(
l
.
fill_
);
legend_
.
content_
=
l
;
}
void
set_chart_graphic_properties
(
std
::
vector
<
odf_reader
::
_property
>
&
prop
,
_oox_fill
&
fill
)
{
reset_fill
(
fill
);
graphic_properties_
=
prop
;
fill_
=
fill
;
}
void
set_plot_area_properties
(
std
::
vector
<
odf_reader
::
_property
>
&
prop
,
_oox_fill
&
fill
)
{
reset_fill
(
fill
);
plot_area_
.
properties_
=
prop
;
plot_area_
.
fill_
=
fill
;
}
...
...
@@ -120,13 +123,15 @@ private:
class
Impl
;
_CP_SCOPED_PTR
(
Impl
)
impl_
;
mediaitems
&
mediaitems_
;
std
::
vector
<
_rel
>
rels_
;
cpdoccore
::
oox
::
oox_title
title_
;
cpdoccore
::
oox
::
oox_plot_area
plot_area_
;
cpdoccore
::
oox
::
oox_chart_legend
legend_
;
std
::
vector
<
odf_reader
::
_property
>
graphic_properties_
;
_oox_fill
fill_
;
};
//autoTitleDeleted (Auto Title Is Deleted) §21.2.2.7
//backWall (Back Wall) §21.2.2.11
...
...
ASCOfficeOdfFile/src/docx/oox_chart_shape.cpp
View file @
4ea68435
...
...
@@ -40,16 +40,14 @@
namespace
cpdoccore
{
namespace
oox
{
void
oox_chart_shape
::
oox_serialize
(
std
::
wostream
&
_Wostream
)
{
CP_XML_WRITER
(
_Wostream
)
{
CP_XML_NODE
(
L"c:spPr"
)
{
oox_serialize_fill
(
CP_XML_STREAM
(),
fill_
);
oox_serialize_ln
(
CP_XML_STREAM
(),
content_
);
oox_serialize_fill
(
CP_XML_STREAM
(),
fill_
);
oox_serialize_ln
(
CP_XML_STREAM
(),
content_
);
}
}
...
...
ASCOfficeOdfFile/src/docx/oox_chart_shape.h
View file @
4ea68435
...
...
@@ -43,46 +43,18 @@ namespace oox {
void
oox_serialize_default_text
(
std
::
wostream
&
_Wostream
,
std
::
vector
<
odf_reader
::
_property
>&
properties
);
class
oox_chart_shape
:
boost
::
noncopyable
class
oox_chart_shape
:
boost
::
noncopyable
{
public:
oox_chart_shape
(){}
~
oox_chart_shape
(){}
void
set
(
std
::
vector
<
odf_reader
::
_property
>
&
prop
,
_oox_fill
&
fill
);
void
set
(
std
::
vector
<
odf_reader
::
_property
>
&
prop
,
_oox_fill
&
fill
);
void
oox_serialize
(
std
::
wostream
&
_Wostream
);
private:
std
::
vector
<
odf_reader
::
_property
>
content_
;
_oox_fill
fill_
;
private:
//grpFill (Group Fill) §20.1.8.35
//pattFill (Pattern Fill) §20.1.8.47
//noFill (No Fill) §20.1.8.44
//blipFill (Picture Fill) §20.1.8.14
//solidFill (Solid Fill) §20.1.8.54
//gradFill (Gradient Fill) §20.1.8.33
//ln (Outline) §20.1.2.2.24
//friend void xlsx_serialize(std::wostream & _Wostream, const oox_chart_shape & legend_);
//custGeom (Custom Geometry) §20.1.9.8
//effectDag (Effect Container) §20.1.8.25
//effectLst (Effect Container) §20.1.8.26
//extLst (Extension List) §20.1.2.2.15
//prstGeom (Preset geometry) §20.1.9.18
//scene3d (3D Scene Properties) §20.1.4.1.26
//sp3d (Apply 3D shape properties) §20.1.5.12
//xfrm (2D Transform for Individual Objects) §20.1.7.6
};
}
...
...
ASCOfficeOdfFile/src/docx/oox_drawing.cpp
View file @
4ea68435
...
...
@@ -462,7 +462,7 @@ void oox_serialize_xfrm(std::wostream & strm, _oox_drawing & val, const std::wst
_CP_LOG
<<
L"[error!!!] not set size object
\n
"
;
}
if
(
val
.
type
==
mediaitems
::
typeGroup
)
if
(
val
.
type
==
typeGroupShape
)
{
CP_XML_NODE
(
L"a:chOff"
)
{
...
...
ASCOfficeOdfFile/src/docx/oox_drawing.h
View file @
4ea68435
...
...
@@ -69,10 +69,10 @@ namespace oox {
};
struct
_oox_drawing
{
_oox_drawing
()
:
type
(
mediaitems
::
typeUnknown
),
id
(
0
),
x
(
0
),
y
(
0
),
cx
(
0
),
cy
(
0
),
sub_type
(
0
),
inGroup
(
false
),
name
(
L"object"
)
_oox_drawing
()
:
type
(
typeUnknown
),
id
(
0
),
x
(
0
),
y
(
0
),
cx
(
0
),
cy
(
0
),
sub_type
(
0
),
inGroup
(
false
),
name
(
L"object"
)
{
}
mediaitems
::
Type
type
;
Rels
Type
type
;
bool
inGroup
;
size_t
id
;
...
...
ASCOfficeOdfFile/src/docx/oox_package.cpp
View file @
4ea68435
...
...
@@ -121,7 +121,7 @@ void content_types_file::set_media(mediaitems & _Mediaitems)
{
BOOST_FOREACH
(
mediaitems
::
item
&
item
,
_Mediaitems
.
items
()
)
{
if
((
item
.
type
==
mediaitems
::
typeImage
||
item
.
type
==
mediaitems
::
typeMedia
)
&&
item
.
mediaInternal
)
if
((
item
.
type
==
typeImage
||
item
.
type
==
typeMedia
)
&&
item
.
mediaInternal
)
{
int
n
=
item
.
outputName
.
rfind
(
L"."
);
if
(
n
>
0
)
...
...
@@ -282,7 +282,7 @@ void media::write(const std::wstring & RootPath)
BOOST_FOREACH
(
mediaitems
::
item
&
item
,
mediaitems_
.
items
()
)
{
if
(
item
.
mediaInternal
&&
item
.
valid
&&
item
.
type
==
mediaitems
::
typeImage
)
if
(
item
.
mediaInternal
&&
item
.
valid
&&
item
.
type
==
typeImage
)
{
std
::
wstring
&
file_name
=
item
.
href
;
std
::
wstring
file_name_out
=
RootPath
+
FILE_SEPARATOR_STR
+
item
.
outputName
;
...
...
ASCOfficeOdfFile/src/docx/oox_package.h
View file @
4ea68435
...
...
@@ -37,7 +37,7 @@
#include <cpdoccore/CPNoncopyable.h>
#include "docx_content_type.h"
#include "
doc
x_rels.h"
#include "
oo
x_rels.h"
#include "../../../Common/DocxFormat/Source/Base/Base.h"
#include "../../../Common/DocxFormat/Source/SystemUtility/FileSystem/Directory.h"
...
...
ASCOfficeOdfFile/src/docx/
doc
x_rels.cpp
→
ASCOfficeOdfFile/src/docx/
oo
x_rels.cpp
View file @
4ea68435
/*
* (c) Copyright Ascensio System SIA 2010-2016
*
* 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 "
docx_rels.h"
#include <cpdoccore/xml/attributes.h>
#include <boost/foreach.hpp>
#include "namespaces.h"
#include <cpdoccore/xml/simple_xml_writer.h>
namespace
cpdoccore
{
namespace
oox
{
const
wchar_t
*
relationship
::
ns
=
L""
;
const
wchar_t
*
relationship
::
name
=
L"Relationship"
;
::
std
::
wostream
&
relationship
::
xml_to_stream
(
::
std
::
wostream
&
_Wostream
)
const
{
CP_XML_WRITER
(
_Wostream
)
{
CP_XML_NODE
(
L"Relationship"
)
{
CP_XML_ATTR
(
L"Id"
,
id
());
CP_XML_ATTR
(
L"Type"
,
type
());
CP_XML_ATTR
(
L"Target"
,
target
());
if
(
!
target_mode
().
empty
())
CP_XML_ATTR
(
L"TargetMode"
,
target_mode
());
}
}
//_Wostream << L"<Relationship ";
//CP_XML_SERIALIZE_ATTR(L"Id", id());
//CP_XML_SERIALIZE_ATTR(L"Type", type());
//CP_XML_SERIALIZE_ATTR(L"Target", target());
//
//if (!target_mode().empty())
//{
// CP_XML_SERIALIZE_ATTR(L"TargetMode", target_mode());
//}
//_Wostream << L" />";
return
_Wostream
;
}
const
wchar_t
*
rels
::
ns
=
L""
;
const
wchar_t
*
rels
::
name
=
L"Relationships"
;
::
std
::
wostream
&
rels
::
xml_to_stream
(
::
std
::
wostream
&
_Wostream
)
const
{
CP_XML_WRITER
(
_Wostream
)
{
CP_XML_NODE
(
L"Relationships"
)
{
CP_XML_ATTR
(
L"xmlns"
,
xmlns
::
rels
.
value
);
BOOST_FOREACH
(
const
relationship
&
r
,
relationship_
)
{
r
.
xml_to_stream
(
CP_XML_STREAM
());
}
}
// "Relationships"
}
//_Wostream << L"<Relationships ";
//CP_XML_SERIALIZE_ATTR(L"xmlns", xmlns::rels.value);
//_Wostream << L">";
//BOOST_FOREACH(const relationship & r, relationship_)
//{
// r.xml_to_stream(_Wostream);
//}
//_Wostream << L"</Relationships>";
return
_Wostream
;
}
void
rels
::
add
(
relationship
const
&
r
)
{
relationships
().
push_back
(
r
);
}
}
}
/*
* (c) Copyright Ascensio System SIA 2010-2016
*
* 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 "
oox_rels.h"
#include <cpdoccore/xml/attributes.h>
#include <boost/foreach.hpp>
#include "namespaces.h"
#include <cpdoccore/xml/simple_xml_writer.h>
namespace
cpdoccore
{
namespace
oox
{
const
wchar_t
*
relationship
::
ns
=
L""
;
const
wchar_t
*
relationship
::
name
=
L"Relationship"
;
::
std
::
wostream
&
relationship
::
xml_to_stream
(
::
std
::
wostream
&
_Wostream
)
const
{
CP_XML_WRITER
(
_Wostream
)
{
CP_XML_NODE
(
L"Relationship"
)
{
CP_XML_ATTR
(
L"Id"
,
id
());
CP_XML_ATTR
(
L"Type"
,
type
());
CP_XML_ATTR
(
L"Target"
,
target
());
if
(
!
target_mode
().
empty
())
CP_XML_ATTR
(
L"TargetMode"
,
target_mode
());
}
}
//_Wostream << L"<Relationship ";
//CP_XML_SERIALIZE_ATTR(L"Id", id());
//CP_XML_SERIALIZE_ATTR(L"Type", type());
//CP_XML_SERIALIZE_ATTR(L"Target", target());
//
//if (!target_mode().empty())
//{
// CP_XML_SERIALIZE_ATTR(L"TargetMode", target_mode());
//}
//_Wostream << L" />";
return
_Wostream
;
}
const
wchar_t
*
rels
::
ns
=
L""
;
const
wchar_t
*
rels
::
name
=
L"Relationships"
;
::
std
::
wostream
&
rels
::
xml_to_stream
(
::
std
::
wostream
&
_Wostream
)
const
{
CP_XML_WRITER
(
_Wostream
)
{
CP_XML_NODE
(
L"Relationships"
)
{
CP_XML_ATTR
(
L"xmlns"
,
xmlns
::
rels
.
value
);
BOOST_FOREACH
(
const
relationship
&
r
,
relationship_
)
{
r
.
xml_to_stream
(
CP_XML_STREAM
());
}
}
// "Relationships"
}
//_Wostream << L"<Relationships ";
//CP_XML_SERIALIZE_ATTR(L"xmlns", xmlns::rels.value);
//_Wostream << L">";
//BOOST_FOREACH(const relationship & r, relationship_)
//{
// r.xml_to_stream(_Wostream);
//}
//_Wostream << L"</Relationships>";
return
_Wostream
;
}
void
rels
::
add
(
relationship
const
&
r
)
{
relationships
().
push_back
(
r
);
}
}
}
ASCOfficeOdfFile/src/docx/
doc
x_rels.h
→
ASCOfficeOdfFile/src/docx/
oo
x_rels.h
View file @
4ea68435
/*
* (c) Copyright Ascensio System SIA 2010-2016
*
* 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 <string>
#include <vector>
#include <iosfwd>
#include <cpdoccore/xml/xmlelement.h>
#include <cpdoccore/CPSharedPtr.h>
namespace
cpdoccore
{
namespace
oox
{
class
relationship
:
public
xml
::
element_impl
<
relationship
>
{
public:
static
const
wchar_t
*
ns
;
static
const
wchar_t
*
name
;
static
const
xml
::
NodeType
xml_type
=
xml
::
typeElement
;
public:
relationship
()
{}
relationship
(
const
std
::
wstring
&
Id
,
const
std
::
wstring
&
Type
,
const
std
::
wstring
&
Target
,
const
std
::
wstring
&
TargetMode
=
L""
)
:
id_
(
Id
),
type_
(
Type
),
target_
(
Target
),
target_mode_
(
TargetMode
)
{}
virtual
::
std
::
wostream
&
xml_to_stream
(
::
std
::
wostream
&
_Wostream
)
const
;
public:
const
std
::
wstring
&
id
()
const
{
return
id_
;
}
const
std
::
wstring
&
type
()
const
{
return
type_
;
}
const
std
::
wstring
&
target
()
const
{
return
target_
;
}
const
std
::
wstring
&
target_mode
()
const
{
return
target_mode_
;
}
private:
std
::
wstring
id_
;
std
::
wstring
type_
;
std
::
wstring
target_
;
std
::
wstring
target_mode_
;
};
class
rels
;
typedef
_CP_PTR
(
rels
)
rels_ptr
;
// rels
class
rels
:
public
xml
::
element_impl
<
rels
>
{
public:
static
const
wchar_t
*
ns
;
static
const
wchar_t
*
name
;
static
const
xml
::
NodeType
xml_type
=
xml
::
typeElement
;
public:
virtual
::
std
::
wostream
&
xml_to_stream
(
::
std
::
wostream
&
_Wostream
)
const
;
std
::
vector
<
relationship
>
&
relationships
()
{
return
relationship_
;
}
void
add
(
relationship
const
&
r
);
bool
empty
()
{
return
relationship_
.
empty
();
}
private:
std
::
vector
<
relationship
>
relationship_
;
};
}
}
/*
* (c) Copyright Ascensio System SIA 2010-2016
*
* 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 <string>
#include <vector>
#include <iosfwd>
#include <cpdoccore/xml/xmlelement.h>
#include <cpdoccore/CPSharedPtr.h>
namespace
cpdoccore
{
namespace
oox
{
enum
RelsType
{
typeUnknown
=
0
,
typeImage
,
typeChart
,
typeShape
,
typeTable
,
typeHyperlink
,
typeComment
,
typeMedia
,
typeGroupShape
};
struct
_rel
{
_rel
(
bool
is_internal_
,
std
::
wstring
const
&
rid_
,
std
::
wstring
const
&
ref_
,
RelsType
const
&
type_
)
:
is_internal
(
is_internal_
),
rid
(
rid_
),
ref
(
ref_
),
type
(
type_
)
{}
bool
is_internal
;
std
::
wstring
rid
;
std
::
wstring
ref
;
RelsType
type
;
};
class
relationship
:
public
xml
::
element_impl
<
relationship
>
{
public:
static
const
wchar_t
*
ns
;
static
const
wchar_t
*
name
;
static
const
xml
::
NodeType
xml_type
=
xml
::
typeElement
;
relationship
()
{}
relationship
(
const
std
::
wstring
&
Id
,
const
std
::
wstring
&
Type
,
const
std
::
wstring
&
Target
,
const
std
::
wstring
&
TargetMode
=
L""
)
:
id_
(
Id
),
type_
(
Type
),
target_
(
Target
),
target_mode_
(
TargetMode
)
{}
virtual
::
std
::
wostream
&
xml_to_stream
(
::
std
::
wostream
&
_Wostream
)
const
;
const
std
::
wstring
&
id
()
const
{
return
id_
;
}
const
std
::
wstring
&
type
()
const
{
return
type_
;
}
const
std
::
wstring
&
target
()
const
{
return
target_
;
}
const
std
::
wstring
&
target_mode
()
const
{
return
target_mode_
;
}
private:
std
::
wstring
id_
;
std
::
wstring
type_
;
std
::
wstring
target_
;
std
::
wstring
target_mode_
;
};
class
rels
;
typedef
_CP_PTR
(
rels
)
rels_ptr
;
// rels
class
rels
:
public
xml
::
element_impl
<
rels
>
{
public:
static
const
wchar_t
*
ns
;
static
const
wchar_t
*
name
;
static
const
xml
::
NodeType
xml_type
=
xml
::
typeElement
;
public:
virtual
::
std
::
wostream
&
xml_to_stream
(
::
std
::
wostream
&
_Wostream
)
const
;
std
::
vector
<
relationship
>
&
relationships
()
{
return
relationship_
;
}
void
add
(
relationship
const
&
r
);
bool
empty
()
{
return
relationship_
.
empty
();
}
private:
std
::
vector
<
relationship
>
relationship_
;
};
}
}
ASCOfficeOdfFile/src/docx/pptx_comments.cpp
View file @
4ea68435
...
...
@@ -34,7 +34,7 @@
#include <boost/foreach.hpp>
#include <vector>
#include <cpdoccore/xml/simple_xml_writer.h>
#include "
doc
x_rels.h"
#include "
oo
x_rels.h"
namespace
cpdoccore
{
namespace
oox
{
...
...
ASCOfficeOdfFile/src/docx/pptx_conversion_context.cpp
View file @
4ea68435
...
...
@@ -90,21 +90,6 @@ void pptx_conversion_context::set_font_directory(std::wstring pathFonts)
if
(
applicationFonts_
)
applicationFonts_
->
InitializeFromFolder
(
pathFonts
);
}
//
//void pptx_conversion_context::start_chart(std::wstring const & name)
//{
// charts_.push_back(oox_chart_context::create(name));
// //добавляем новую форму для диаграммы
// //в ней будет информационная часть - и она пишется каждый раз в свою xml (их - по числу диаграмм)
// //этот контекст нужно передавать в файл
//
//}
//
//void pptx_conversion_context::end_chart()
//{
// //current_chart().set_drawing_link(current_sheet().get_drawing_link());
// //излишняя инфа
//}
void
pptx_conversion_context
::
process_layouts
()
{
...
...
@@ -299,6 +284,7 @@ void pptx_conversion_context::end_document()
package
::
chart_content_ptr
content
=
package
::
chart_content
::
create
();
chart
->
serialize
(
content
->
content
());
chart
->
dump_rels
(
content
->
get_rel_file
()
->
get_rels
());
output_document_
->
get_ppt_files
().
add_charts
(
content
);
...
...
@@ -523,7 +509,7 @@ void pptx_conversion_context::end_page()
const
std
::
pair
<
std
::
wstring
,
std
::
wstring
>
commentsName
=
comments_context_handle_
.
add_comments_xml
(
strm
.
str
(),
get_comments_context
().
get_comments
()
);
get_slide_context
().
add_rels
(
false
,
commentsName
.
second
,
L"../comments/"
+
commentsName
.
first
,
mediaitems
::
typeComment
);
get_slide_context
().
add_rels
(
false
,
commentsName
.
second
,
L"../comments/"
+
commentsName
.
first
,
typeComment
);
}
get_slide_context
().
serialize_background
(
current_slide
().
Background
());
...
...
@@ -578,9 +564,9 @@ void pptx_conversion_context::start_office_presentation()
void
pptx_conversion_context
::
end_office_presentation
()
{
}
void
pptx_conversion_context
::
start_chart
(
std
::
wstring
const
&
name
)
void
pptx_conversion_context
::
start_chart
(
std
::
wstring
name
)
{
charts_
.
push_back
(
oox_chart_context
::
create
(
name
));
charts_
.
push_back
(
oox_chart_context
_ptr
(
new
oox_chart_context
(
get_mediaitems
(),
name
)
));
//добавляем новую форму для диаграммы
//в ней будет информационная часть - и она пишется каждый раз в свою xml (их - по числу диаграмм)
//этот контекст нужно передавать в файл
...
...
ASCOfficeOdfFile/src/docx/pptx_conversion_context.h
View file @
4ea68435
...
...
@@ -73,7 +73,7 @@ public:
void
start_document
();
void
end_document
();
void
start_chart
(
std
::
wstring
const
&
name
);
void
start_chart
(
std
::
wstring
name
);
void
end_chart
();
void
start_body
();
...
...
ASCOfficeOdfFile/src/docx/pptx_drawing.cpp
View file @
4ea68435
...
...
@@ -260,19 +260,19 @@ void pptx_serialize_table(std::wostream & strm, _pptx_drawing & val)
void
pptx_serialize
(
std
::
wostream
&
strm
,
_pptx_drawing
&
val
)
{
if
(
val
.
type
==
mediaitems
::
typeShape
)
if
(
val
.
type
==
typeShape
)
{
pptx_serialize_shape
(
strm
,
val
);
}
else
if
(
val
.
type
==
mediaitems
::
typeImage
)
else
if
(
val
.
type
==
typeImage
)
{
pptx_serialize_image
(
strm
,
val
);
}
else
if
(
val
.
type
==
mediaitems
::
typeChart
)
else
if
(
val
.
type
==
typeChart
)
{
pptx_serialize_chart
(
strm
,
val
);
}
else
if
(
val
.
type
==
mediaitems
::
typeTable
)
else
if
(
val
.
type
==
typeTable
)
{
pptx_serialize_table
(
strm
,
val
);
}
...
...
ASCOfficeOdfFile/src/docx/pptx_drawings.cpp
View file @
4ea68435
...
...
@@ -30,12 +30,12 @@
*
*/
#include <boost/foreach.hpp>
#include <vector>
#include <cpdoccore/xml/simple_xml_writer.h>
#include "mediaitems_utils.h"
#include "
doc
x_rels.h"
#include "
oo
x_rels.h"
#include "pptx_drawings.h"
#include "pptx_drawing.h"
...
...
@@ -45,43 +45,30 @@ namespace oox {
class
pptx_drawings
::
Impl
{
struct
rel_
{
rel_
(
bool
is_internal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
mediaitems
::
Type
type
)
:
is_internal_
(
is_internal
),
rid_
(
rid
),
ref_
(
ref
),
type_
(
type
)
{}
bool
is_internal_
;
std
::
wstring
rid_
;
std
::
wstring
ref_
;
mediaitems
::
Type
type_
;
};
public:
void
add
(
_pptx_drawing
const
&
d
,
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
mediaitems
::
Type
type
)
Rels
Type
type
)
{
pptx_drawings_
.
push_back
(
d
);
bool
present
=
false
;
BOOST_FOREACH
(
rel_
const
&
r
,
pptx_drawing_rels_
)
BOOST_FOREACH
(
_rel
const
&
r
,
pptx_drawing_rels_
)
{
if
(
r
.
rid
_
==
rid
&&
r
.
ref_
==
ref
)
if
(
r
.
rid
==
rid
&&
r
.
ref
==
ref
)
present
=
true
;
}
if
(
!
present
)
{
pptx_drawing_rels_
.
push_back
(
rel_
(
isInternal
,
rid
,
ref
,
type
));
pptx_drawing_rels_
.
push_back
(
_rel
(
isInternal
,
rid
,
ref
,
type
));
}
BOOST_FOREACH
(
_hlink_desc
h
,
d
.
hlinks
)
{
pptx_drawing_rels_
.
push_back
(
rel_
(
false
,
h
.
hId
,
h
.
hRef
,
mediaitems
::
typeHyperlink
));
pptx_drawing_rels_
.
push_back
(
_rel
(
false
,
h
.
hId
,
h
.
hRef
,
typeHyperlink
));
}
}
...
...
@@ -89,18 +76,18 @@ public:
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
mediaitems
::
Type
type
)
Rels
Type
type
)
{
bool
present
=
false
;
BOOST_FOREACH
(
rel_
const
&
r
,
pptx_drawing_rels_
)
BOOST_FOREACH
(
_rel
const
&
r
,
pptx_drawing_rels_
)
{
if
(
r
.
rid
_
==
rid
&&
r
.
ref_
==
ref
)
if
(
r
.
rid
==
rid
&&
r
.
ref
==
ref
)
present
=
true
;
}
if
(
!
present
)
{
pptx_drawing_rels_
.
push_back
(
rel_
(
isInternal
,
rid
,
ref
,
type
));
pptx_drawing_rels_
.
push_back
(
_rel
(
isInternal
,
rid
,
ref
,
type
));
}
}
void
serialize
(
std
::
wostream
&
strm
)
...
...
@@ -118,43 +105,43 @@ public:
void
dump_rels
(
rels
&
Rels
)
{
BOOST_FOREACH
(
rel_
const
&
r
,
pptx_drawing_rels_
)
BOOST_FOREACH
(
_rel
const
&
r
,
pptx_drawing_rels_
)
{
if
(
r
.
type
_
==
mediaitems
::
typeChart
)
//временно - нужно потом все загнать в релс
if
(
r
.
type
==
typeChart
)
//временно - нужно потом все загнать в релс
{
Rels
.
add
(
relationship
(
r
.
rid
_
,
utils
::
media
::
get_rel_type
(
r
.
type
_
),
(
r
.
is_internal
_
?
std
::
wstring
(
L"../"
)
+
r
.
ref_
:
r
.
ref_
),
(
r
.
is_internal
_
?
L""
:
L"External"
)
r
.
rid
,
utils
::
media
::
get_rel_type
(
r
.
type
),
(
r
.
is_internal
?
std
::
wstring
(
L"../"
)
+
r
.
ref
:
r
.
ref
),
(
r
.
is_internal
?
L""
:
L"External"
)
)
);
}
else
if
(
r
.
type
_
==
mediaitems
::
typeImage
)
else
if
(
r
.
type
==
typeImage
)
{
Rels
.
add
(
relationship
(
r
.
rid
_
,
utils
::
media
::
get_rel_type
(
r
.
type
_
),
r
.
is_internal
_
?
std
::
wstring
(
L"../"
)
+
r
.
ref_
:
r
.
ref_
,
(
r
.
is_internal
_
?
L""
:
L"External"
)
r
.
rid
,
utils
::
media
::
get_rel_type
(
r
.
type
),
r
.
is_internal
?
std
::
wstring
(
L"../"
)
+
r
.
ref
:
r
.
ref
,
(
r
.
is_internal
?
L""
:
L"External"
)
)
);
}
else
if
(
r
.
type
_
==
mediaitems
::
typeHyperlink
)
else
if
(
r
.
type
==
typeHyperlink
)
{
Rels
.
add
(
relationship
(
r
.
rid
_
,
r
.
rid
,
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"
,
r
.
ref
_
,
r
.
ref
,
L"External"
)
);
}
else
if
(
r
.
type
_
==
mediaitems
::
typeComment
)
else
if
(
r
.
type
==
typeComment
)
{
Rels
.
add
(
relationship
(
r
.
rid
_
,
r
.
rid
,
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments"
,
r
.
ref
_
)
r
.
ref
)
);
}
}
...
...
@@ -162,9 +149,8 @@ public:
private:
std
::
vector
<
_pptx_drawing
>
pptx_drawings_
;
std
::
vector
<
rel_
>
pptx_drawing_rels_
;
std
::
vector
<
_pptx_drawing
>
pptx_drawings_
;
std
::
vector
<
_rel
>
pptx_drawing_rels_
;
};
pptx_drawings
::
pptx_drawings
()
:
impl_
(
new
pptx_drawings
::
Impl
()
)
...
...
@@ -179,7 +165,7 @@ void pptx_drawings::add(_pptx_drawing const & d,
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
mediaitems
::
Type
type
)
Rels
Type
type
)
{
impl_
->
add
(
d
,
isInternal
,
rid
,
ref
,
type
);
}
...
...
@@ -187,7 +173,7 @@ void pptx_drawings::add(/**/
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
mediaitems
::
Type
type
)
Rels
Type
type
)
{
impl_
->
add
(
isInternal
,
rid
,
ref
,
type
);
}
...
...
ASCOfficeOdfFile/src/docx/pptx_drawings.h
View file @
4ea68435
...
...
@@ -57,13 +57,13 @@ public:
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
mediaitems
::
Type
type
Rels
Type
type
);
void
add
(
/**/
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
mediaitems
::
Type
type
Rels
Type
type
);
bool
empty
()
const
;
...
...
ASCOfficeOdfFile/src/docx/pptx_output_xml.h
View file @
4ea68435
...
...
@@ -36,7 +36,7 @@
#include <cpdoccore/CPScopedPtr.h>
#include <cpdoccore/CPNoncopyable.h>
#include "
doc
x_rels.h"
#include "
oo
x_rels.h"
namespace
cpdoccore
{
namespace
oox
{
...
...
ASCOfficeOdfFile/src/docx/pptx_package.cpp
View file @
4ea68435
...
...
@@ -284,6 +284,13 @@ void ppt_charts_files::write(const std::wstring & RootPath)
contentTypes
->
add_override
(
std
::
wstring
(
L"/ppt/charts/"
)
+
fileName
,
kWSConType
);
package
::
simple_element
(
fileName
,
item
->
str
()).
write
(
path
);
rels_files
relFiles
;
item
->
get_rel_file
()
->
set_file_name
(
fileName
+
L".rels"
);
relFiles
.
add_rel_file
(
item
->
get_rel_file
());
relFiles
.
write
(
path
);
}
}
}
...
...
ASCOfficeOdfFile/src/docx/pptx_slide_context.cpp
View file @
4ea68435
...
...
@@ -90,7 +90,7 @@ public:
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
mediaitems
::
Type
type
)
Rels
Type
type
)
{
pptx_drawings_
->
add
(
d
,
isInternal
,
rid
,
ref
,
type
);
}
...
...
@@ -98,7 +98,7 @@ public:
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
mediaitems
::
Type
type
)
Rels
Type
type
)
{
pptx_drawings_
->
add
(
isInternal
,
rid
,
ref
,
type
);
}
...
...
@@ -322,8 +322,8 @@ void pptx_slide_context::add_background(_oox_fill & fill)
bool
isMediaInternal
=
false
;
std
::
wstring
ref
;
fill
.
bitmap
->
rId
=
get_mediaitems
().
add_or_find
(
fill
.
bitmap
->
xlink_href_
,
oox
::
mediaitems
::
typeImage
,
isMediaInternal
,
ref
);
add_rels
(
isMediaInternal
,
fill
.
bitmap
->
rId
,
ref
,
oox
::
mediaitems
::
typeImage
);
fill
.
bitmap
->
rId
=
get_mediaitems
().
add_or_find
(
fill
.
bitmap
->
xlink_href_
,
typeImage
,
isMediaInternal
,
ref
);
add_rels
(
isMediaInternal
,
fill
.
bitmap
->
rId
,
ref
,
typeImage
);
}
impl_
->
background_fill_
=
fill
;
...
...
@@ -337,19 +337,19 @@ void pptx_slide_context::set_name(std::wstring const & name)
void
pptx_slide_context
::
start_shape
(
int
type
)
{
impl_
->
object_description_
.
type_
=
mediaitems
::
typeShape
;
impl_
->
object_description_
.
type_
=
typeShape
;
impl_
->
object_description_
.
shape_type_
=
type
;
//2,3...
}
void
pptx_slide_context
::
start_image
(
std
::
wstring
const
&
path
)
{
impl_
->
object_description_
.
type_
=
mediaitems
::
typeImage
;
impl_
->
object_description_
.
type_
=
typeImage
;
impl_
->
object_description_
.
xlink_href_
=
path
;
}
void
pptx_slide_context
::
start_table
()
{
impl_
->
object_description_
.
type_
=
mediaitems
::
typeTable
;
impl_
->
object_description_
.
type_
=
typeTable
;
}
void
pptx_slide_context
::
set_use_image_replacement
()
...
...
@@ -363,7 +363,7 @@ void pptx_slide_context::start_object_ole()
void
pptx_slide_context
::
start_chart
(
std
::
wstring
const
&
path
)
{
impl_
->
object_description_
.
type_
=
mediaitems
::
typeChart
;
impl_
->
object_description_
.
type_
=
typeChart
;
impl_
->
object_description_
.
xlink_href_
=
path
;
}
void
pptx_slide_context
::
end_object_ole
()
...
...
@@ -431,8 +431,8 @@ void pptx_slide_context::process_images()
GetProperty
(
pic
.
additional_
,
L"text-content"
,
sTextContent
);
if
(
sTextContent
)
//в ms office на картинке нельзя сделать надпись - меняем тип на рект с заливкой картинкой
{
drawing
.
type
=
mediaitems
::
typeShape
;
drawing
.
sub_type
=
2
;
//rect
drawing
.
type
=
typeShape
;
drawing
.
sub_type
=
2
;
//rect
}
...
...
@@ -444,15 +444,15 @@ void pptx_slide_context::process_images()
std
::
wstring
ref
;
/// это ссылка на выходной внешний объект
bool
isMediaInternal
=
false
;
drawing
.
fill
.
bitmap
->
rId
=
impl_
->
get_mediaitems
().
add_or_find
(
pic
.
xlink_href_
,
mediaitems
::
typeImage
,
isMediaInternal
,
ref
);
drawing
.
fill
.
bitmap
->
rId
=
impl_
->
get_mediaitems
().
add_or_find
(
pic
.
xlink_href_
,
typeImage
,
isMediaInternal
,
ref
);
if
(
drawing
.
type
==
mediaitems
::
typeShape
)
if
(
drawing
.
type
==
typeShape
)
{
impl_
->
add_additional_rels
(
isMediaInternal
,
drawing
.
fill
.
bitmap
->
rId
,
ref
,
mediaitems
::
typeImage
);
//собственно это не объект, а доп рел и ref объекта
impl_
->
add_additional_rels
(
isMediaInternal
,
drawing
.
fill
.
bitmap
->
rId
,
ref
,
typeImage
);
//собственно это не объект, а доп рел и ref объекта
isMediaInternal
=
true
;
std
::
wstring
rId
=
impl_
->
get_mediaitems
().
add_or_find
(
L""
,
mediaitems
::
typeShape
,
isMediaInternal
,
ref
);
impl_
->
add_drawing
(
drawing
,
isMediaInternal
,
rId
,
ref
,
mediaitems
::
typeShape
);
//объект
isMediaInternal
=
true
;
std
::
wstring
rId
=
impl_
->
get_mediaitems
().
add_or_find
(
L""
,
typeShape
,
isMediaInternal
,
ref
);
impl_
->
add_drawing
(
drawing
,
isMediaInternal
,
rId
,
ref
,
typeShape
);
//объект
}
else
{
...
...
@@ -477,8 +477,8 @@ void pptx_slide_context::process_charts()
////////////////////////////////////////////////////////////////
std
::
wstring
ref
;
bool
isMediaInternal
=
true
;
drawing
.
chartId
=
impl_
->
get_mediaitems
().
add_or_find
(
pic
.
xlink_href_
,
mediaitems
::
typeChart
,
isMediaInternal
,
ref
);
impl_
->
add_drawing
(
drawing
,
isMediaInternal
,
drawing
.
chartId
,
ref
,
mediaitems
::
typeChart
);
drawing
.
chartId
=
impl_
->
get_mediaitems
().
add_or_find
(
pic
.
xlink_href_
,
typeChart
,
isMediaInternal
,
ref
);
impl_
->
add_drawing
(
drawing
,
isMediaInternal
,
drawing
.
chartId
,
ref
,
typeChart
);
}
}
...
...
@@ -499,8 +499,8 @@ void pptx_slide_context::process_tables()
////////////////////////////////////////////////////////////////
std
::
wstring
ref
;
bool
isMediaInternal
=
true
;
std
::
wstring
rId
=
impl_
->
get_mediaitems
().
add_or_find
(
L""
,
mediaitems
::
typeTable
,
isMediaInternal
,
ref
);
impl_
->
add_drawing
(
drawing
,
isMediaInternal
,
rId
,
ref
,
mediaitems
::
typeTable
);
std
::
wstring
rId
=
impl_
->
get_mediaitems
().
add_or_find
(
L""
,
typeTable
,
isMediaInternal
,
ref
);
impl_
->
add_drawing
(
drawing
,
isMediaInternal
,
rId
,
ref
,
typeTable
);
}
}
...
...
@@ -547,11 +547,11 @@ void pptx_slide_context::process_shapes()
if
(
drawing
.
fill
.
bitmap
)
{
drawing
.
fill
.
bitmap
->
rId
=
impl_
->
get_mediaitems
().
add_or_find
(
drawing
.
fill
.
bitmap
->
xlink_href_
,
mediaitems
::
typeImage
,
isMediaInternal
,
ref
);
impl_
->
add_additional_rels
(
isMediaInternal
,
drawing
.
fill
.
bitmap
->
rId
,
ref
,
mediaitems
::
typeImage
);
drawing
.
fill
.
bitmap
->
rId
=
impl_
->
get_mediaitems
().
add_or_find
(
drawing
.
fill
.
bitmap
->
xlink_href_
,
typeImage
,
isMediaInternal
,
ref
);
impl_
->
add_additional_rels
(
isMediaInternal
,
drawing
.
fill
.
bitmap
->
rId
,
ref
,
typeImage
);
}
std
::
wstring
rId
=
impl_
->
get_mediaitems
().
add_or_find
(
L""
,
mediaitems
::
typeShape
,
isMediaInternal
,
ref
);
std
::
wstring
rId
=
impl_
->
get_mediaitems
().
add_or_find
(
L""
,
typeShape
,
isMediaInternal
,
ref
);
////////////////////////////////////////////////////////////////
_CP_OPT
(
std
::
wstring
)
sPlaceHolderType
;
...
...
@@ -567,7 +567,7 @@ void pptx_slide_context::process_shapes()
drawing
.
sub_type
=
pic
.
type_
;
impl_
->
add_drawing
(
drawing
,
isMediaInternal
,
rId
,
ref
,
mediaitems
::
typeShape
);
impl_
->
add_drawing
(
drawing
,
isMediaInternal
,
rId
,
ref
,
typeShape
);
}
}
...
...
@@ -581,7 +581,7 @@ mediaitems & pptx_slide_context::get_mediaitems()
return
impl_
->
get_mediaitems
();
}
void
pptx_slide_context
::
add_rels
(
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
mediaitems
::
Type
type
)
void
pptx_slide_context
::
add_rels
(
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
Rels
Type
type
)
{
impl_
->
add_additional_rels
(
isInternal
,
rid
,
ref
,
type
);
}
...
...
ASCOfficeOdfFile/src/docx/pptx_slide_context.h
View file @
4ea68435
...
...
@@ -113,7 +113,7 @@ public:
void
add_rels
(
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
mediaitems
::
Type
type
);
Rels
Type
type
);
void
set_footer
();
void
set_header
();
...
...
ASCOfficeOdfFile/src/docx/pptx_table_context.cpp
View file @
4ea68435
...
...
@@ -378,8 +378,8 @@ void oox_serialize_tcPr(std::wostream & strm, std::vector<const odf_reader::styl
{
bool
isMediaInternal
=
false
;
std
::
wstring
ref
;
fill
.
bitmap
->
rId
=
Context
.
get_slide_context
().
get_mediaitems
().
add_or_find
(
fill
.
bitmap
->
xlink_href_
,
oox
::
mediaitems
::
typeImage
,
isMediaInternal
,
ref
);
Context
.
get_slide_context
().
add_rels
(
isMediaInternal
,
fill
.
bitmap
->
rId
,
ref
,
oox
::
mediaitems
::
typeImage
);
fill
.
bitmap
->
rId
=
Context
.
get_slide_context
().
get_mediaitems
().
add_or_find
(
fill
.
bitmap
->
xlink_href_
,
oox
::
typeImage
,
isMediaInternal
,
ref
);
Context
.
get_slide_context
().
add_rels
(
isMediaInternal
,
fill
.
bitmap
->
rId
,
ref
,
oox
::
typeImage
);
}
oox
::
oox_serialize_fill
(
CP_XML_STREAM
(),
fill
);
/////////////////////////////////////////////////////////////////////////////////
...
...
ASCOfficeOdfFile/src/docx/pptx_text_context.h
View file @
4ea68435
...
...
@@ -76,18 +76,18 @@ public:
void
start_paragraph
(
const
std
::
wstring
&
styleName
);
void
end_paragraph
();
void
start_span
(
const
std
::
wstring
&
styleName
);
void
end_span
();
std
::
wstring
end_span2
();
void
start_span
(
const
std
::
wstring
&
styleName
);
void
end_span
();
std
::
wstring
end_span2
();
void
start_comment_content
();
std
::
wstring
end_comment_content
();
void
start_comment_content
();
std
::
wstring
end_comment_content
();
void
start_base_style
(
const
std
::
wstring
baseStyleName
,
const
odf_types
::
style_family
::
type
baseStyleType
);
void
end_base_style
();
void
start_object
();
std
::
wstring
end_object
();
void
start_object
();
std
::
wstring
end_object
();
void
start_hyperlink
();
void
end_hyperlink
(
std
::
wstring
hId
);
...
...
ASCOfficeOdfFile/src/docx/xlsx_comments.cpp
View file @
4ea68435
...
...
@@ -31,7 +31,7 @@
*/
#include "xlsx_comments.h"
#include "
doc
x_rels.h"
#include "
oo
x_rels.h"
#include <vector>
#include <cpdoccore/xml/simple_xml_writer.h>
...
...
ASCOfficeOdfFile/src/docx/xlsx_drawing.cpp
View file @
4ea68435
...
...
@@ -36,13 +36,9 @@
#include "../odf/datatypes/custom_shape_types_convert.h"
namespace
cpdoccore
{
namespace
oox
{
namespace
{
std
::
wostream
&
operator
<<
(
std
::
wostream
&
strm
,
xlsx_drawing_position
::
type_t
t
)
...
...
@@ -248,19 +244,19 @@ void xlsx_serialize_chart(std::wostream & strm, _xlsx_drawing & val)
}
void
xlsx_serialize_object
(
std
::
wostream
&
strm
,
_xlsx_drawing
&
val
)
{
if
(
val
.
type
==
mediaitems
::
typeShape
)
if
(
val
.
type
==
typeShape
)
{
xlsx_serialize_shape
(
strm
,
val
);
}
else
if
(
val
.
type
==
mediaitems
::
typeImage
)
else
if
(
val
.
type
==
typeImage
)
{
xlsx_serialize_image
(
strm
,
val
);
}
else
if
(
val
.
type
==
mediaitems
::
typeChart
)
else
if
(
val
.
type
==
typeChart
)
{
xlsx_serialize_chart
(
strm
,
val
);
}
else
if
(
val
.
type
==
mediaitems
::
typeGroup
)
else
if
(
val
.
type
==
typeGroupShape
)
{
xlsx_serialize_group
(
strm
,
val
);
}
...
...
ASCOfficeOdfFile/src/docx/xlsx_drawing_context.cpp
View file @
4ea68435
...
...
@@ -158,7 +158,7 @@ xlsx_drawing_context::xlsx_drawing_context(xlsx_drawing_context_handle & h)
void
xlsx_drawing_context
::
clear
()
{
impl_
->
object_description_
.
type_
=
mediaitems
::
typeUnknown
;
impl_
->
object_description_
.
type_
=
typeUnknown
;
impl_
->
object_description_
.
in_group_
=
false
;
impl_
->
object_description_
.
xlink_href_
=
L""
;
impl_
->
object_description_
.
name_
=
L""
;
...
...
@@ -183,7 +183,7 @@ void xlsx_drawing_context::start_group(std::wstring const & name)
{
start_drawing
(
name
);
impl_
->
object_description_
.
type_
=
mediaitems
::
typeGroup
;
impl_
->
object_description_
.
type_
=
typeGroupShape
;
impl_
->
object_description_
.
svg_rect_
=
_rect
();
impl_
->
object_description_
.
svg_rect_
->
x
=
impl_
->
object_description_
.
svg_rect_
->
y
=
0x7fffffff
;
...
...
@@ -263,7 +263,7 @@ void xlsx_drawing_context::end_drawing()
void
xlsx_drawing_context
::
start_shape
(
int
type
)
{
impl_
->
object_description_
.
type_
=
mediaitems
::
typeShape
;
impl_
->
object_description_
.
type_
=
typeShape
;
impl_
->
object_description_
.
shape_type_
=
type
;
//2,3...
}
...
...
@@ -282,7 +282,7 @@ void xlsx_drawing_context::end_object_ole()
void
xlsx_drawing_context
::
start_image
(
std
::
wstring
const
&
path
)
{
impl_
->
object_description_
.
type_
=
mediaitems
::
typeImage
;
impl_
->
object_description_
.
type_
=
typeImage
;
impl_
->
object_description_
.
xlink_href_
=
path
;
}
void
xlsx_drawing_context
::
end_image
()
...
...
@@ -291,7 +291,7 @@ void xlsx_drawing_context::end_image()
}
void
xlsx_drawing_context
::
start_chart
(
std
::
wstring
const
&
path
)
{
impl_
->
object_description_
.
type_
=
mediaitems
::
typeChart
;
impl_
->
object_description_
.
type_
=
typeChart
;
impl_
->
object_description_
.
xlink_href_
=
path
;
}
void
xlsx_drawing_context
::
end_chart
()
...
...
@@ -496,7 +496,7 @@ void xlsx_drawing_context::process_image(drawing_object_description & obj,_xlsx_
if
(
sTextContent
)
//в ms office на картинке нельзя сделать надпись - меняем тип на рект с заливкой картинкой
{
drawing
.
type
=
mediaitems
::
typeShape
;
drawing
.
type
=
typeShape
;
drawing
.
sub_type
=
2
;
//rect
}
std
::
wstring
fileName
=
odf_packet_path_
+
FILE_SEPARATOR_STR
+
obj
.
xlink_href_
;
...
...
@@ -507,20 +507,20 @@ void xlsx_drawing_context::process_image(drawing_object_description & obj,_xlsx_
std
::
wstring
ref
;
/// это ссылка на выходной внешний объект
bool
isMediaInternal
=
false
;
drawing
.
fill
.
bitmap
->
rId
=
impl_
->
get_mediaitems
().
add_or_find
(
obj
.
xlink_href_
,
mediaitems
::
typeImage
,
isMediaInternal
,
ref
);
drawing
.
fill
.
bitmap
->
rId
=
impl_
->
get_mediaitems
().
add_or_find
(
obj
.
xlink_href_
,
typeImage
,
isMediaInternal
,
ref
);
if
(
drawing
.
type
==
mediaitems
::
typeShape
)
if
(
drawing
.
type
==
typeShape
)
{
impl_
->
get_drawings
()
->
add
(
isMediaInternal
,
drawing
.
fill
.
bitmap
->
rId
,
ref
,
mediaitems
::
typeImage
);
//собственно это не объект, а доп рел и ref объекта
impl_
->
get_drawings
()
->
add
(
isMediaInternal
,
drawing
.
fill
.
bitmap
->
rId
,
ref
,
typeImage
);
//собственно это не объект, а доп рел и ref объекта
isMediaInternal
=
true
;
std
::
wstring
rId
=
impl_
->
get_mediaitems
().
add_or_find
(
L""
,
mediaitems
::
typeShape
,
isMediaInternal
,
ref
);
std
::
wstring
rId
=
impl_
->
get_mediaitems
().
add_or_find
(
L""
,
typeShape
,
isMediaInternal
,
ref
);
xlsx_drawings_
->
add
(
drawing
,
isMediaInternal
,
rId
,
ref
,
mediaitems
::
typeShape
);
//объект
xlsx_drawings_
->
add
(
drawing
,
isMediaInternal
,
rId
,
ref
,
typeShape
);
//объект
}
else
{
xlsx_drawings_
->
add
(
drawing
,
isMediaInternal
,
drawing
.
fill
.
bitmap
->
rId
,
ref
,
mediaitems
::
typeImage
);
//объект
xlsx_drawings_
->
add
(
drawing
,
isMediaInternal
,
drawing
.
fill
.
bitmap
->
rId
,
ref
,
typeImage
);
//объект
if
(
drawing
.
inGroup
)
impl_
->
get_drawings
()
->
add
(
isMediaInternal
,
drawing
.
fill
.
bitmap
->
rId
,
ref
,
obj
.
type_
);
// не объект
...
...
@@ -596,18 +596,18 @@ void xlsx_drawing_context::process_objects(std::vector<drawing_object_descriptio
std
::
wstring
ref
;
bool
isMediaInternal
=
true
;
drawing
.
fill
.
bitmap
->
rId
=
impl_
->
get_mediaitems
().
add_or_find
(
drawing
.
fill
.
bitmap
->
xlink_href_
,
mediaitems
::
typeImage
,
isMediaInternal
,
ref
);
impl_
->
get_drawings
()
->
add
(
isMediaInternal
,
drawing
.
fill
.
bitmap
->
rId
,
ref
,
mediaitems
::
typeImage
);
//собственно это не объект, а доп рел и ref объекта
drawing
.
fill
.
bitmap
->
rId
=
impl_
->
get_mediaitems
().
add_or_find
(
drawing
.
fill
.
bitmap
->
xlink_href_
,
typeImage
,
isMediaInternal
,
ref
);
impl_
->
get_drawings
()
->
add
(
isMediaInternal
,
drawing
.
fill
.
bitmap
->
rId
,
ref
,
typeImage
);
//собственно это не объект, а доп рел и ref объекта
}
process_common_properties
(
obj
,
drawing
,
table_metrics
);
switch
(
obj
.
type_
)
{
case
mediaitems
:
:
typeChart
:
process_chart
(
obj
,
drawing
,
xlsx_drawings_
);
break
;
case
mediaitems
:
:
typeImage
:
process_image
(
obj
,
drawing
,
xlsx_drawings_
);
break
;
case
mediaitems
:
:
typeShape
:
process_shape
(
obj
,
drawing
,
xlsx_drawings_
);
break
;
case
mediaitems
:
:
typeGroup
:
process_group
(
obj
,
table_metrics
,
drawing
,
xlsx_drawings_
);
break
;
case
typeChart
:
process_chart
(
obj
,
drawing
,
xlsx_drawings_
);
break
;
case
typeImage
:
process_image
(
obj
,
drawing
,
xlsx_drawings_
);
break
;
case
typeShape
:
process_shape
(
obj
,
drawing
,
xlsx_drawings_
);
break
;
case
typeGroupShape
:
process_group
(
obj
,
table_metrics
,
drawing
,
xlsx_drawings_
);
break
;
}
}
}
...
...
ASCOfficeOdfFile/src/docx/xlsx_drawings.cpp
View file @
4ea68435
...
...
@@ -32,63 +32,50 @@
#include "xlsx_drawings.h"
#include "xlsx_drawing.h"
#include <boost/foreach.hpp>
#include <vector>
#include <cpdoccore/xml/simple_xml_writer.h>
#include "mediaitems_utils.h"
#include "
doc
x_rels.h"
#include "
oo
x_rels.h"
namespace
cpdoccore
{
namespace
oox
{
class
xlsx_drawings
::
Impl
{
struct
rel_
{
rel_
(
bool
is_internal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
mediaitems
::
Type
type
)
:
is_internal_
(
is_internal
),
rid_
(
rid
),
ref_
(
ref
),
type_
(
type
)
{}
bool
is_internal_
;
std
::
wstring
rid_
;
std
::
wstring
ref_
;
mediaitems
::
Type
type_
;
};
public:
void
add
(
_xlsx_drawing
const
&
d
,
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
mediaitems
::
Type
type
)
void
add
(
_xlsx_drawing
const
&
d
,
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
Rels
Type
type
)
{
xlsx_drawings_
.
push_back
(
d
);
bool
present
=
false
;
BOOST_FOREACH
(
rel_
const
&
r
,
xlsx_drawing_rels_
)
BOOST_FOREACH
(
_rel
const
&
r
,
xlsx_drawing_rels_
)
{
if
(
r
.
rid
_
==
rid
&&
r
.
ref_
==
ref
)
if
(
r
.
rid
==
rid
&&
r
.
ref
==
ref
)
present
=
true
;
}
if
(
!
present
)
{
xlsx_drawing_rels_
.
push_back
(
rel_
(
isInternal
,
rid
,
ref
,
type
));
xlsx_drawing_rels_
.
push_back
(
_rel
(
isInternal
,
rid
,
ref
,
type
));
}
BOOST_FOREACH
(
_hlink_desc
h
,
d
.
hlinks
)
{
xlsx_drawing_rels_
.
push_back
(
rel_
(
false
,
h
.
hId
,
h
.
hRef
,
mediaitems
::
typeHyperlink
));
xlsx_drawing_rels_
.
push_back
(
_rel
(
false
,
h
.
hId
,
h
.
hRef
,
typeHyperlink
));
}
}
void
add
(
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
mediaitems
::
Type
type
)
void
add
(
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
Rels
Type
type
)
{
bool
present
=
false
;
BOOST_FOREACH
(
rel_
const
&
r
,
xlsx_drawing_rels_
)
BOOST_FOREACH
(
_rel
const
&
r
,
xlsx_drawing_rels_
)
{
if
(
r
.
rid
_
==
rid
&&
r
.
ref_
==
ref
)
if
(
r
.
rid
==
rid
&&
r
.
ref
==
ref
)
present
=
true
;
}
if
(
!
present
)
{
xlsx_drawing_rels_
.
push_back
(
rel_
(
isInternal
,
rid
,
ref
,
type
));
xlsx_drawing_rels_
.
push_back
(
_rel
(
isInternal
,
rid
,
ref
,
type
));
}
}
...
...
@@ -129,35 +116,34 @@ public:
void
dump_rels
(
rels
&
Rels
)
{
BOOST_FOREACH
(
rel_
const
&
r
,
xlsx_drawing_rels_
)
BOOST_FOREACH
(
_rel
const
&
r
,
xlsx_drawing_rels_
)
{
if
(
r
.
type
_
==
mediaitems
::
typeChart
)
//временно - нужно потом все загнать в релс
if
(
r
.
type
==
typeChart
)
{
Rels
.
add
(
relationship
(
r
.
rid
_
,
utils
::
media
::
get_rel_type
(
r
.
type
_
),
(
r
.
is_internal
_
?
std
::
wstring
(
L"../"
)
+
r
.
ref_
:
r
.
ref_
),
(
r
.
is_internal
_
?
L""
:
L"External"
)
r
.
rid
,
utils
::
media
::
get_rel_type
(
r
.
type
),
(
r
.
is_internal
?
std
::
wstring
(
L"../"
)
+
r
.
ref
:
r
.
ref
),
(
r
.
is_internal
?
L""
:
L"External"
)
)
);
}
else
if
(
r
.
type
_
==
mediaitems
::
typeImage
)
else
if
(
r
.
type
==
typeImage
)
{
Rels
.
add
(
relationship
(
r
.
rid
_
,
utils
::
media
::
get_rel_type
(
r
.
type
_
),
r
.
is_internal
_
?
std
::
wstring
(
L"../"
)
+
r
.
ref_
:
r
.
ref_
,
(
r
.
is_internal
_
?
L""
:
L"External"
)
r
.
rid
,
utils
::
media
::
get_rel_type
(
r
.
type
),
r
.
is_internal
?
std
::
wstring
(
L"../"
)
+
r
.
ref
:
r
.
ref
,
(
r
.
is_internal
?
L""
:
L"External"
)
)
);
}
//typeShape внутренний рисованый объект - релсов нет
else
if
(
r
.
type_
==
mediaitems
::
typeHyperlink
)
//заместо гипрелинка пользуем неизвестный ... поменять ... временно .. сделать красиво
else
if
(
r
.
type
==
typeHyperlink
)
{
Rels
.
add
(
relationship
(
r
.
rid
_
,
r
.
rid
,
L"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"
,
r
.
ref
_
,
r
.
ref
,
L"External"
)
);
}
...
...
@@ -169,7 +155,7 @@ public:
private:
std
::
vector
<
_xlsx_drawing
>
xlsx_drawings_
;
std
::
vector
<
rel_
>
xlsx_drawing_rels_
;
std
::
vector
<
_rel
>
xlsx_drawing_rels_
;
};
xlsx_drawings
::
xlsx_drawings
(
bool
inGroup_
)
:
impl_
(
new
xlsx_drawings
::
Impl
()
)
...
...
@@ -182,12 +168,12 @@ xlsx_drawings::~xlsx_drawings()
}
void
xlsx_drawings
::
add
(
_xlsx_drawing
const
&
d
,
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
mediaitems
::
Type
type
)
std
::
wstring
const
&
ref
,
Rels
Type
type
)
{
impl_
->
add
(
d
,
isInternal
,
rid
,
ref
,
type
);
}
void
xlsx_drawings
::
add
(
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
mediaitems
::
Type
type
)
void
xlsx_drawings
::
add
(
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
Rels
Type
type
)
{
impl_
->
add
(
isInternal
,
rid
,
ref
,
type
);
}
...
...
ASCOfficeOdfFile/src/docx/xlsx_drawings.h
View file @
4ea68435
...
...
@@ -35,7 +35,8 @@
#include <cpdoccore/CPScopedPtr.h>
#include <cpdoccore/CPSharedPtr.h>
#include <cpdoccore/xml/attributes.h>
#include "mediaitems.h"
#include "oox_rels.h"
namespace
cpdoccore
{
namespace
oox
{
...
...
@@ -55,7 +56,6 @@ struct drawing_elm
};
struct
_xlsx_drawing
;
class
rels
;
class
xlsx_drawings
{
...
...
@@ -65,8 +65,8 @@ public:
static
xlsx_drawings_ptr
create
(
bool
inGroup
);
public:
void
add
(
_xlsx_drawing
const
&
d
,
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
mediaitems
::
Type
type
);
void
add
(
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
mediaitems
::
Type
type
);
void
add
(
_xlsx_drawing
const
&
d
,
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
Rels
Type
type
);
void
add
(
bool
isInternal
,
std
::
wstring
const
&
rid
,
std
::
wstring
const
&
ref
,
Rels
Type
type
);
bool
empty
()
const
;
void
dump_rels
(
rels
&
Rels
);
...
...
ASCOfficeOdfFile/src/docx/xlsx_hyperlinks.cpp
View file @
4ea68435
...
...
@@ -37,7 +37,7 @@
#include <cpdoccore/xml/simple_xml_writer.h>
#include "xlsx_hyperlinks.h"
#include "
doc
x_rels.h"
#include "
oo
x_rels.h"
#include "../formulasconvert/formulasconvert.h"
namespace
cpdoccore
{
...
...
ASCOfficeOdfFile/src/docx/xlsx_output_xml.h
View file @
4ea68435
...
...
@@ -36,7 +36,7 @@
#include <cpdoccore/CPScopedPtr.h>
#include <cpdoccore/CPNoncopyable.h>
#include "
doc
x_rels.h"
#include "
oo
x_rels.h"
namespace
cpdoccore
{
namespace
oox
{
...
...
ASCOfficeOdfFile/src/docx/xlsx_package.cpp
View file @
4ea68435
...
...
@@ -285,7 +285,14 @@ void xl_charts_files::write(const std::wstring & RootPath)
contentTypes
->
add_override
(
std
::
wstring
(
L"/xl/charts/"
)
+
fileName
,
kWSConType
);
package
::
simple_element
(
fileName
,
item
->
str
()).
write
(
path
);
}
rels_files
relFiles
;
item
->
get_rel_file
()
->
set_file_name
(
fileName
+
L".rels"
);
relFiles
.
add_rel_file
(
item
->
get_rel_file
());
relFiles
.
write
(
path
);
}
}
}
//////////////////////////
...
...
ASCOfficeOdfFile/src/docx/xlsxconversioncontext.cpp
View file @
4ea68435
...
...
@@ -94,9 +94,9 @@ void xlsx_conversion_context::set_font_directory(std::wstring pathFonts)
applicationFonts_
->
InitializeFromFolder
(
pathFonts
);
}
void
xlsx_conversion_context
::
start_chart
(
std
::
wstring
const
&
name
)
void
xlsx_conversion_context
::
start_chart
(
std
::
wstring
name
)
{
charts_
.
push_back
(
oox_chart_context
::
create
(
name
));
charts_
.
push_back
(
oox_chart_context
_ptr
(
new
oox_chart_context
(
mediaitems_
,
name
)
));
//добавляем новую форму для диаграммы
//в ней будет информационная часть - и она пишется каждый раз в свою xml (их - по числу диаграмм)
//этот контекст нужно передавать в файл
...
...
@@ -198,9 +198,9 @@ void xlsx_conversion_context::end_document()
package
::
chart_content_ptr
content
=
package
::
chart_content
::
create
();
chart
->
serialize
(
content
->
content
());
chart
->
dump_rels
(
content
->
get_rel_file
()
->
get_rels
());
output_document_
->
get_xl_files
().
add_charts
(
content
);
}
//workbook_content << L"<calcPr iterateCount=\"100\" refMode=\"A1\" iterate=\"false\" iterateDelta=\"0.0001\" />";
...
...
ASCOfficeOdfFile/src/docx/xlsxconversioncontext.h
View file @
4ea68435
...
...
@@ -81,7 +81,7 @@ public:
void
start_document
();
void
end_document
();
void
start_chart
(
std
::
wstring
const
&
name
);
void
start_chart
(
std
::
wstring
name
);
void
end_chart
();
void
start_body
();
...
...
ASCOfficeOdfFile/src/odf/chart_build_oox.cpp
View file @
4ea68435
...
...
@@ -496,7 +496,7 @@ void process_build_chart::ApplyChartProperties(std::wstring style, std::vector<_
}
}
}
void
process_build_chart
::
ApplyTextProperties
(
std
::
wstring
style
,
std
::
vector
<
_property
>
&
propertiesOut
)
void
process_build_chart
::
ApplyTextProperties
(
std
::
wstring
style
,
std
::
vector
<
_property
>
&
propertiesOut
)
{
style_instance
*
styleInst
=
styles_
.
style_by_name
(
style
,
odf_types
::
style_family
::
Chart
,
false
/*Context.process_headers_footers_*/
);
if
(
styleInst
)
...
...
@@ -505,14 +505,19 @@ void process_build_chart::ApplyTextProperties(std::wstring style,std::vector<_pr
properties
.
apply_to
(
propertiesOut
);
}
}
void
process_build_chart
::
ApplyGraphicProperties
(
std
::
wstring
style
,
std
::
vector
<
_property
>
&
propertiesOut
,
oox
::
_oox_fill
&
fill
)
void
process_build_chart
::
ApplyGraphicProperties
(
std
::
wstring
style
,
std
::
vector
<
_property
>
&
propertiesOut
,
oox
::
_oox_fill
&
fill
)
{
style_instance
*
styleInst
=
styles_
.
style_by_name
(
style
,
odf_types
::
style_family
::
Chart
,
false
/*Context.process_headers_footers_*/
);
style_instance
*
styleInst
=
styles_
.
style_by_name
(
style
,
odf_types
::
style_family
::
Chart
,
false
/*Context.process_headers_footers_*/
);
if
(
styleInst
)
{
graphic_format_properties
properties
=
calc_graphic_properties_content
(
styleInst
);
Compute_GraphicFill
(
properties
.
common_draw_fill_attlist_
,
properties
.
style_background_image_
,
draw_styles_
,
fill
);
Compute_GraphicFill
(
properties
.
common_draw_fill_attlist_
,
properties
.
style_background_image_
,
draw_styles_
,
fill
);
if
(
fill
.
bitmap
)
{
fill
.
bitmap
->
xlink_href_
=
chart_build_
.
baseRef_
+
FILE_SEPARATOR_STR
+
fill
.
bitmap
->
xlink_href_
;
}
properties
.
apply_to
(
propertiesOut
);
}
}
...
...
ASCOfficeOdfFile/src/odf/chart_build_oox.h
View file @
4ea68435
...
...
@@ -106,7 +106,10 @@ public:
std
::
wstring
val
;
};
chart_build
()
:
width_pt_
(
0
),
height_pt_
(
0
),
in_axis_
(
false
),
chart_build
(
std
::
wstring
ref
)
:
width_pt_
(
0
),
height_pt_
(
0
),
in_axis_
(
false
),
current_table_column_
(
0
),
current_table_row_
(
0
),
columns_spanned_num_
(
0
),
...
...
@@ -115,6 +118,7 @@ public:
object_type_
(
0
),
office_text_
(
NULL
),
office_math_
(
NULL
),
baseRef_
(
ref
),
baseFontHeight_
(
12
)
{
}
...
...
@@ -156,8 +160,8 @@ public:
office_text
*
office_text_
;
office_math
*
office_math_
;
int
baseFontHeight_
;
int
baseFontHeight_
;
std
::
wstring
baseRef_
;
//---------------------------------------------------------------
std
::
wstring
str_class_
;
chart
::
class_type
class_
;
...
...
ASCOfficeOdfFile/src/odf/draw_common.cpp
View file @
4ea68435
...
...
@@ -364,10 +364,15 @@ void Compute_GraphicFill(const common_draw_fill_attlist & props, const office_el
{
if
(
fill
.
type
<
1
)
fill
.
type
=
0
;
if
(
props
.
draw_opacity_
)
fill
.
opacity
=
props
.
draw_opacity_
->
get_value
();
if
(
props
.
draw_opacity_
)
{
fill
.
opacity
=
props
.
draw_opacity_
->
get_value
();
}
if
(
props
.
draw_opacity_name_
)
{
const
std
::
wstring
style_name
=
L"opacity:"
+
*
props
.
draw_opacity_name_
;
if
(
office_element_ptr
style
=
styles
.
find_by_style_name
(
style_name
))
{
if
(
draw_opacity
*
image_style
=
dynamic_cast
<
draw_opacity
*>
(
style
.
get
()))
...
...
@@ -392,16 +397,18 @@ void Compute_GraphicFill(const common_draw_fill_attlist & props, const office_el
fill
.
solid
->
color
=
props
.
draw_fill_color_
->
get_hex_value
();
if
(
fill
.
type
==
0
)
fill
.
type
=
1
;
//в этом случае тип может и не быть задан явно
}
if
(
props
.
draw_fill_image_name_
)
{
const
std
::
wstring
style_name
=
L"bitmap:"
+
*
props
.
draw_fill_image_name_
;
if
(
office_element_ptr
style
=
styles
.
find_by_style_name
(
style_name
))
{
if
(
draw_fill_image
*
fill_image
=
dynamic_cast
<
draw_fill_image
*>
(
style
.
get
()))
{
fill
.
bitmap
=
oox
::
oox_bitmap_fill
::
create
();
fill
.
bitmap
->
xlink_href_
=
fill_image
->
xlink_attlist_
.
href_
.
get_value_or
(
L""
);
fill
.
bitmap
->
bTile
=
true
;
fill
.
bitmap
->
xlink_href_
=
fill_image
->
xlink_attlist_
.
href_
.
get_value_or
(
L""
);
}
}
}
...
...
ASCOfficeOdfFile/src/odf/draw_frame_docx.cpp
View file @
4ea68435
...
...
@@ -860,7 +860,7 @@ void common_draw_docx_convert(oox::docx_conversion_context & Context, const unio
if
((
drawing
.
fill
.
bitmap
)
&&
(
drawing
.
fill
.
bitmap
->
rId
.
length
()
<
1
))
{
std
::
wstring
href
=
drawing
.
fill
.
bitmap
->
xlink_href_
;
drawing
.
fill
.
bitmap
->
rId
=
Context
.
add_mediaitem
(
href
,
oox
::
mediaitems
::
typeImage
,
drawing
.
fill
.
bitmap
->
isInternal
,
href
);
drawing
.
fill
.
bitmap
->
rId
=
Context
.
add_mediaitem
(
href
,
oox
::
typeImage
,
drawing
.
fill
.
bitmap
->
isInternal
,
href
);
}
////////////////////////////////////////////////////
...
...
@@ -965,7 +965,7 @@ void common_draw_docx_convert(oox::docx_conversion_context & Context, const unio
drawing
.
y
=
val
>=
0
?
val
:
0
;
//??? todooo отрицательные величины ...
}
if
(
drawing
.
inGroup
&&
drawing
.
type
!=
oox
::
mediaitems
::
typeGroup
)
if
(
drawing
.
inGroup
&&
drawing
.
type
!=
oox
::
typeGroupShape
)
{
Context
.
get_drawing_context
().
set_position_child_group
(
drawing
.
x
,
drawing
.
y
);
Context
.
get_drawing_context
().
set_size_child_group
(
drawing
.
cx
+
drawing
.
x
,
drawing
.
cy
+
drawing
.
y
);
...
...
@@ -986,7 +986,7 @@ void draw_shape::docx_convert(oox::docx_conversion_context & Context)
oox
::
_docx_drawing
drawing
=
oox
::
_docx_drawing
();
drawing
.
type
=
oox
::
mediaitems
::
typeShape
;
drawing
.
type
=
oox
::
typeShape
;
drawing
.
id
=
Context
.
get_drawing_context
().
get_current_shape_id
();
drawing
.
name
=
Context
.
get_drawing_context
().
get_current_object_name
();
drawing
.
inGroup
=
Context
.
get_drawing_context
().
in_group
();
...
...
@@ -1074,7 +1074,7 @@ void draw_image::docx_convert(oox::docx_conversion_context & Context)
//--------------------------------------------------
oox
::
_docx_drawing
drawing
=
oox
::
_docx_drawing
();
drawing
.
type
=
oox
::
mediaitems
::
typeImage
;
drawing
.
type
=
oox
::
typeImage
;
drawing
.
id
=
Context
.
get_drawing_context
().
get_current_frame_id
();
drawing
.
name
=
Context
.
get_drawing_context
().
get_current_object_name
();
drawing
.
inGroup
=
Context
.
get_drawing_context
().
in_group
();
...
...
@@ -1098,7 +1098,7 @@ void draw_image::docx_convert(oox::docx_conversion_context & Context)
drawing
.
fill
.
bitmap
=
oox
::
oox_bitmap_fill
::
create
();
drawing
.
fill
.
type
=
2
;
drawing
.
fill
.
bitmap
->
isInternal
=
false
;
drawing
.
fill
.
bitmap
->
rId
=
Context
.
add_mediaitem
(
href
,
oox
::
mediaitems
::
typeImage
,
drawing
.
fill
.
bitmap
->
isInternal
,
href
);
drawing
.
fill
.
bitmap
->
rId
=
Context
.
add_mediaitem
(
href
,
oox
::
typeImage
,
drawing
.
fill
.
bitmap
->
isInternal
,
href
);
drawing
.
fill
.
bitmap
->
bStretch
=
true
;
const
_CP_OPT
(
style_ref
)
&
styleRef
=
frame
->
common_draw_attlists_
.
shape_with_text_and_styles_
.
...
...
@@ -1183,7 +1183,7 @@ void draw_text_box::docx_convert(oox::docx_conversion_context & Context)
return
;
oox
::
_docx_drawing
drawing
=
oox
::
_docx_drawing
();
drawing
.
type
=
oox
::
mediaitems
::
typeShape
;
drawing
.
type
=
oox
::
typeShape
;
drawing
.
id
=
Context
.
get_drawing_context
().
get_current_frame_id
();
drawing
.
name
=
Context
.
get_drawing_context
().
get_current_object_name
();
drawing
.
inGroup
=
Context
.
get_drawing_context
().
in_group
();
...
...
@@ -1262,7 +1262,7 @@ void draw_g::docx_convert(oox::docx_conversion_context & Context)
oox
::
_docx_drawing
drawing
=
oox
::
_docx_drawing
();
drawing
.
inGroup
=
Context
.
get_drawing_context
().
in_group
();
drawing
.
type
=
oox
::
mediaitems
::
typeGroup
;
drawing
.
type
=
oox
::
typeGroupShape
;
Context
.
get_drawing_context
().
start_group
();
...
...
@@ -1390,7 +1390,7 @@ void draw_object::docx_convert(oox::docx_conversion_context & Context)
//функциональная часть
office_element
*
contentSubDoc
=
objectSubDoc
.
get_impl
()
->
get_content
();
draw_frame
*
frame
=
NULL
;
chart_build
objectBuild
;
chart_build
objectBuild
(
href
)
;
//if (!contentSubDoc)//Diagramma.odt - кривые ссылки на объекты
// return;
...
...
@@ -1410,7 +1410,7 @@ void draw_object::docx_convert(oox::docx_conversion_context & Context)
{
oox
::
_docx_drawing
drawing
=
oox
::
_docx_drawing
();
drawing
.
type
=
oox
::
mediaitems
::
typeChart
;
drawing
.
type
=
oox
::
typeChart
;
drawing
.
id
=
Context
.
get_drawing_context
().
get_current_frame_id
();
drawing
.
name
=
Context
.
get_drawing_context
().
get_current_object_name
();
...
...
@@ -1442,7 +1442,7 @@ void draw_object::docx_convert(oox::docx_conversion_context & Context)
{
oox
::
_docx_drawing
drawing
=
oox
::
_docx_drawing
();
drawing
.
type
=
oox
::
mediaitems
::
typeShape
;
drawing
.
type
=
oox
::
typeShape
;
drawing
.
id
=
Context
.
get_drawing_context
().
get_current_frame_id
();
drawing
.
name
=
Context
.
get_drawing_context
().
get_current_object_name
();
drawing
.
inGroup
=
Context
.
get_drawing_context
().
in_group
();
...
...
ASCOfficeOdfFile/src/odf/draw_frame_pptx.cpp
View file @
4ea68435
...
...
@@ -301,7 +301,7 @@ void draw_object::pptx_convert(oox::pptx_conversion_context & Context)
}
chart_build
objectBuild
;
chart_build
objectBuild
(
href
)
;
process_build_chart
process_build_object_
(
objectBuild
,
objectSubDoc
.
odf_context
());
contentSubDoc
->
accept
(
process_build_object_
);
...
...
ASCOfficeOdfFile/src/odf/draw_frame_xlsx.cpp
View file @
4ea68435
...
...
@@ -269,7 +269,7 @@ void draw_object::xlsx_convert(oox::xlsx_conversion_context & Context)
///////////////////////////////////////////////////////////////////////////
//функциональная часть
const
office_element
*
contentSubDoc
=
objectSubDoc
.
get_impl
()
->
get_content
();
chart_build
objectBuild
;
chart_build
objectBuild
(
href
)
;
if
(
contentSubDoc
)
{
...
...
ASCOfficeOdfFile/src/odf/table_pptx.cpp
View file @
4ea68435
...
...
@@ -213,8 +213,8 @@ void table_table::pptx_convert(oox::pptx_conversion_context & Context)
{
bool
isMediaInternal
=
false
;
std
::
wstring
ref
;
fill
.
bitmap
->
rId
=
Context
.
get_slide_context
().
get_mediaitems
().
add_or_find
(
fill
.
bitmap
->
xlink_href_
,
oox
::
mediaitems
::
typeImage
,
isMediaInternal
,
ref
);
Context
.
get_slide_context
().
add_rels
(
isMediaInternal
,
fill
.
bitmap
->
rId
,
ref
,
oox
::
mediaitems
::
typeImage
);
fill
.
bitmap
->
rId
=
Context
.
get_slide_context
().
get_mediaitems
().
add_or_find
(
fill
.
bitmap
->
xlink_href_
,
oox
::
typeImage
,
isMediaInternal
,
ref
);
Context
.
get_slide_context
().
add_rels
(
isMediaInternal
,
fill
.
bitmap
->
rId
,
ref
,
oox
::
typeImage
);
}
oox
::
oox_serialize_fill
(
_Wostream
,
fill
);
}
...
...
ASCOfficeOdfFile/win32/cpodf.vcproj
View file @
4ea68435
...
...
@@ -518,14 +518,6 @@
RelativePath=
"..\src\docx\docx_package.h"
>
</File>
<File
RelativePath=
"..\src\docx\docx_rels.cpp"
>
</File>
<File
RelativePath=
"..\src\docx\docx_rels.h"
>
</File>
<File
RelativePath=
"..\src\docx\docx_table_context.cpp"
>
...
...
@@ -974,6 +966,14 @@
RelativePath=
"..\src\docx\oox_package.h"
>
</File>
<File
RelativePath=
"..\src\docx\oox_rels.cpp"
>
</File>
<File
RelativePath=
"..\src\docx\oox_rels.h"
>
</File>
<File
RelativePath=
"..\src\docx\ooxtablerowspanned.h"
>
...
...
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