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
c6a05e49
Commit
c6a05e49
authored
Dec 01, 2016
by
ElenaSubbotina
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
OdfFormatReader - ..
parent
82e82971
Changes
20
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
195 additions
and
114 deletions
+195
-114
ASCOfficeOdfFile/src/docx/docx_conversion_context.cpp
ASCOfficeOdfFile/src/docx/docx_conversion_context.cpp
+12
-4
ASCOfficeOdfFile/src/docx/docx_drawing.cpp
ASCOfficeOdfFile/src/docx/docx_drawing.cpp
+5
-5
ASCOfficeOdfFile/src/docx/headers_footers.cpp
ASCOfficeOdfFile/src/docx/headers_footers.cpp
+5
-2
ASCOfficeOdfFile/src/docx/headers_footers.h
ASCOfficeOdfFile/src/docx/headers_footers.h
+7
-7
ASCOfficeOdfFile/src/docx/oox_conversion_context.cpp
ASCOfficeOdfFile/src/docx/oox_conversion_context.cpp
+1
-1
ASCOfficeOdfFile/src/docx/oox_conversion_context.h
ASCOfficeOdfFile/src/docx/oox_conversion_context.h
+3
-1
ASCOfficeOdfFile/src/docx/oox_drawing.cpp
ASCOfficeOdfFile/src/docx/oox_drawing.cpp
+17
-9
ASCOfficeOdfFile/src/docx/pptx_conversion_context.cpp
ASCOfficeOdfFile/src/docx/pptx_conversion_context.cpp
+10
-10
ASCOfficeOdfFile/src/docx/xlsxconversioncontext.cpp
ASCOfficeOdfFile/src/docx/xlsxconversioncontext.cpp
+1
-1
ASCOfficeOdfFile/src/odf/datatypes/custom_shape_types_convert.h
...iceOdfFile/src/odf/datatypes/custom_shape_types_convert.h
+3
-2
ASCOfficeOdfFile/src/odf/draw_frame_docx.cpp
ASCOfficeOdfFile/src/odf/draw_frame_docx.cpp
+3
-0
ASCOfficeOdfFile/src/odf/draw_shapes.cpp
ASCOfficeOdfFile/src/odf/draw_shapes.cpp
+20
-4
ASCOfficeOdfFile/src/odf/math_layout_elements.cpp
ASCOfficeOdfFile/src/odf/math_layout_elements.cpp
+2
-2
ASCOfficeOdfFile/src/odf/math_table_elements.cpp
ASCOfficeOdfFile/src/odf/math_table_elements.cpp
+2
-0
ASCOfficeOdfFile/src/odf/math_token_elements.cpp
ASCOfficeOdfFile/src/odf/math_token_elements.cpp
+3
-3
ASCOfficeOdfFile/src/odf/office_body.cpp
ASCOfficeOdfFile/src/odf/office_body.cpp
+0
-2
ASCOfficeOdfFile/src/odf/style_text_properties.cpp
ASCOfficeOdfFile/src/odf/style_text_properties.cpp
+65
-33
ASCOfficeOdfFile/src/odf/style_text_properties.h
ASCOfficeOdfFile/src/odf/style_text_properties.h
+3
-1
ASCOfficeOdfFile/src/odf/styles.cpp
ASCOfficeOdfFile/src/odf/styles.cpp
+11
-13
ASCOfficeOdfFile/src/odf/text_elements.cpp
ASCOfficeOdfFile/src/odf/text_elements.cpp
+22
-14
No files found.
ASCOfficeOdfFile/src/docx/docx_conversion_context.cpp
View file @
c6a05e49
...
...
@@ -82,6 +82,8 @@ void text_tracked_context::start_changes_content()
void
text_tracked_context
::
end_changes_content
()
{
docx_context_
.
finish_run
();
//0106GS-GettingStartedWithWriter_el.odt - удаленный заголовок
current_state_
.
content
.
push_back
(
changes_stream_
.
str
());
docx_context_
.
set_delete_text_state
(
false
);
...
...
@@ -130,7 +132,6 @@ text_tracked_context::_state & text_tracked_context::get_tracked_change(std::wst
//----------------------------------------------------------------------------------------------------------------
docx_conversion_context
::
docx_conversion_context
(
odf_reader
::
odf_document
*
OdfDocument
)
:
mediaitems_
(
OdfDocument
->
get_folder
()
),
next_dump_page_properties_
(
false
),
page_break_after_
(
false
),
page_break_before_
(
false
),
...
...
@@ -150,7 +151,8 @@ docx_conversion_context::docx_conversion_context(odf_reader::odf_document * OdfD
delayed_converting_
(
false
),
process_headers_footers_
(
false
),
process_comment_
(
false
),
math_context_
(
false
),
mediaitems_
(
OdfDocument
->
get_folder
()
),
math_context_
(
OdfDocument
->
odf_context
().
fontContainer
(),
false
),
odf_document_
(
OdfDocument
)
{
streams_man_
=
streams_man
::
create
(
temp_stream_
);
...
...
@@ -832,13 +834,19 @@ void docx_conversion_context::docx_serialize_paragraph_style(std::wostream & str
//in_styles = true -> styles.xml
//почему то конструкция <pPr><rPr/></pPr><rPr/> "не работает" в части в rPr в ms2010 )
{
bool
in_drawing
=
false
;
if
(
get_drawing_context
().
get_current_shape
()
||
get_drawing_context
().
get_current_frame
())
{
in_drawing
=
true
;
}
std
::
wstringstream
&
paragraph_style
=
get_styles_context
().
paragraph_nodes
();
std
::
wstringstream
&
run_style
=
get_styles_context
().
text_style
();
CP_XML_WRITER
(
strm
)
{
if
(
get_section_context
().
dump_
.
empty
()
==
false
&&
(
!
ParentId
.
empty
()
||
get_section_context
().
get
().
is_dump_
||
in_header_
)
&&
!
get_table_context
().
in_table
())
&&
!
get_table_context
().
in_table
()
&&
!
in_drawing
)
{
//две подряд секции или если стиль определен и в заголовки нельзя пихать !!!
CP_XML_NODE
(
L"w:pPr"
)
{
...
...
@@ -853,7 +861,7 @@ void docx_conversion_context::docx_serialize_paragraph_style(std::wostream & str
{
CP_XML_NODE
(
L"w:pPr"
)
{
if
(
!
get_table_context
().
in_table
()
)
if
(
!
get_table_context
().
in_table
()
&&
!
in_drawing
)
{
CP_XML_STREAM
()
<<
get_section_context
().
dump_
;
get_section_context
().
dump_
.
clear
();
...
...
ASCOfficeOdfFile/src/docx/docx_drawing.cpp
View file @
c6a05e49
...
...
@@ -270,7 +270,7 @@ void docx_serialize_shape_child(std::wostream & strm, _docx_drawing & val)
{
CP_XML_ATTR
(
L"txBox"
,
1
);
}
if
(
val
.
inGroup
==
false
)
if
(
val
.
inGroup
==
false
&&
val
.
sub_type
!=
1
&&
val
.
sub_type
!=
2
)
{
CP_XML_NODE
(
L"a:spLocks"
)
{
...
...
@@ -439,8 +439,6 @@ void docx_serialize_wps(std::wostream & strm, _docx_drawing & val)
{
std
::
wstring
relativeFrom
=
L"margin"
;
if
(
val
.
styleHorizontalRel
)
relativeFrom
=
val
.
styleHorizontalRel
->
get_type_str
();
if
(
relativeFrom
==
L"column"
)
relativeFrom
=
L"margin"
;
CP_XML_ATTR
(
L"relativeFrom"
,
relativeFrom
);
...
...
@@ -510,8 +508,10 @@ void docx_serialize_wps(std::wostream & strm, _docx_drawing & val)
}
if
(
val
.
pctHeight
)
{
std
::
wstring
relativeFrom
=
L"paragraph"
;
if
(
val
.
styleVerticalRel
)
relativeFrom
=
val
.
styleVerticalRel
->
get_type_str
();
std
::
wstring
relativeFrom
=
L"margin"
;
if
(
val
.
styleVerticalRel
)
relativeFrom
=
val
.
styleVerticalRel
->
get_type_str
();
if
(
relativeFrom
==
L"paragraph"
)
relativeFrom
=
L"margin"
;
CP_XML_NODE
(
L"wp14:sizeRelV"
)
{
...
...
ASCOfficeOdfFile/src/docx/headers_footers.cpp
View file @
c6a05e49
...
...
@@ -97,9 +97,12 @@ void headers_footers::dump_rels(rels & Rels) const//внешние релсы
}
}
bool
headers_footers
::
write_sectPr
(
const
std
::
wstring
&
StyleName
,
std
::
wostream
&
_Wostream
)
const
bool
headers_footers
::
write_sectPr
(
const
std
::
wstring
&
StyleName
,
bool
next_page
/*not used*/
,
std
::
wostream
&
_Wostream
)
{
if
(
!
instances_
.
count
(
StyleName
))
return
false
;
if
(
!
instances_
.
count
(
StyleName
))
return
false
;
if
(
last_write_style_
==
StyleName
)
return
true
;
last_write_style_
=
StyleName
;
bool
first
=
false
,
left
=
false
;
bool
res
=
false
;
...
...
ASCOfficeOdfFile/src/docx/headers_footers.h
View file @
c6a05e49
...
...
@@ -49,7 +49,8 @@ namespace oox {
class
headers_footers
{
public:
headers_footers
()
:
size_
(
0
),
enable_write_
(
false
){}
headers_footers
()
:
size_
(
0
)
{}
enum
Type
{
header
,
footer
,
headerLeft
,
footerLeft
,
headerFirst
,
footerFirst
,
none
};
std
::
wstring
add
(
const
std
::
wstring
&
StyleName
,
const
std
::
wstring
&
Content
,
Type
type
,
rels
&
_rels
);
...
...
@@ -66,18 +67,17 @@ public:
};
void
dump_rels
(
rels
&
Rels
)
const
;
bool
write_sectPr
(
const
std
::
wstring
&
StyleName
,
std
::
wostream
&
_Wostream
)
const
;
bool
write_sectPr
(
const
std
::
wstring
&
StyleName
,
bool
next_page
,
std
::
wostream
&
_Wostream
)
;
typedef
boost
::
shared_ptr
<
instance
>
instance_ptr
;
typedef
std
::
vector
<
instance_ptr
>
instances_array
;
typedef
boost
::
unordered_map
<
std
::
wstring
,
instances_array
>
instances_map
;
const
instances_map
&
instances
()
const
{
return
instances_
;
}
bool
get_enable_write
(){
return
enable_write_
;}
void
set_enable_write
(
bool
val
){
enable_write_
=
val
;}
const
instances_map
&
instances
()
const
{
return
instances_
;
}
private:
bool
enable_write_
;
std
::
wstring
last_write_style_
;
static
std
::
wstring
create_id
(
size_t
i
);
static
std
::
wstring
create_name
(
size_t
i
,
Type
_Type
);
instances_map
instances_
;
...
...
ASCOfficeOdfFile/src/docx/oox_conversion_context.cpp
View file @
c6a05e49
...
...
@@ -144,7 +144,7 @@ void styles_context::docx_serialize_table_style(std::wostream & strm, std::wstri
}
namespace
oox
{
math_context
::
math_context
(
bool
graphic
)
:
base_font_size_
(
12
)
math_context
::
math_context
(
odf_reader
::
fonts_container
&
fonts
,
bool
graphic
)
:
base_font_size_
(
12
),
fonts_container_
(
fonts
)
{
graphRPR_
=
graphic
;
...
...
ASCOfficeOdfFile/src/docx/oox_conversion_context.h
View file @
c6a05e49
...
...
@@ -44,6 +44,7 @@ namespace odf_reader
{
class
style_instance
;
class
style_text_properties
;
class
fonts_container
;
typedef
boost
::
shared_ptr
<
style_text_properties
>
style_text_properties_ptr
;
};
...
...
@@ -90,7 +91,7 @@ namespace oox {
class
math_context
:
boost
::
noncopyable
{
public:
math_context
(
bool
graphic
=
false
);
math_context
(
odf_reader
::
fonts_container
&
fonts
,
bool
graphic
=
false
);
void
start
();
std
::
wstring
end
();
...
...
@@ -99,6 +100,7 @@ namespace oox {
std
::
wstringstream
&
math_style_stream
()
{
return
math_style_stream_
;
}
odf_reader
::
fonts_container
&
fonts_container_
;
int
base_font_size_
;
odf_reader
::
style_text_properties_ptr
text_properties_
;
...
...
ASCOfficeOdfFile/src/docx/oox_drawing.cpp
View file @
c6a05e49
...
...
@@ -260,8 +260,8 @@ void oox_serialize_bodyPr(std::wostream & strm, _oox_drawing & val, const std::w
if
(
val
.
inGroup
==
false
)
{
_CP_OPT
(
int
)
iWrap
;
odf_reader
::
GetProperty
(
prop
,
L"text-wrap"
,
iWrap
);
if
((
iWrap
)
&&
(
*
iWrap
==
0
))
CP_XML_ATTR
(
L"wrap"
,
L"none"
);
odf_reader
::
GetProperty
(
prop
,
L"text-wrap"
,
iWrap
);
if
((
iWrap
)
&&
(
*
iWrap
==
0
))
CP_XML_ATTR
(
L"wrap"
,
L"none"
);
}
_CP_OPT
(
int
)
iAlign
;
...
...
@@ -419,13 +419,13 @@ void oox_serialize_xfrm(std::wostream & strm, _oox_drawing & val, const std::wst
std
::
wstring
xfrm
=
name_space
+
L":xfrm"
;
_CP_OPT
(
double
)
dRotate
;
odf_reader
::
GetProperty
(
val
.
additional
,
L"svg:rotate"
,
dRotate
);
odf_reader
::
GetProperty
(
val
.
additional
,
L"svg:rotate"
,
dRotate
);
_CP_OPT
(
double
)
dSkewX
;
odf_reader
::
GetProperty
(
val
.
additional
,
L"svg:skewX"
,
dSkewX
);
odf_reader
::
GetProperty
(
val
.
additional
,
L"svg:skewX"
,
dSkewX
);
_CP_OPT
(
double
)
dSkewY
;
odf_reader
::
GetProperty
(
val
.
additional
,
L"svg:skewY"
,
dSkewY
);
odf_reader
::
GetProperty
(
val
.
additional
,
L"svg:skewY"
,
dSkewY
);
_CP_OPT
(
double
)
dRotateAngle
;
...
...
@@ -443,7 +443,7 @@ void oox_serialize_xfrm(std::wostream & strm, _oox_drawing & val, const std::wst
{
if
(
dRotateAngle
)
{
double
d
=
360
-
dRotateAngle
.
get
()
*
180.
/
3.14159265358979323846
;
double
d
=
360
-
dRotateAngle
.
get
()
*
180.
/
3.14159265358979323846
;
d
*=
60000
;
//60 000 per 1 gr - 19.5.5 oox
CP_XML_ATTR
(
L"rot"
,
(
int
)
d
);
}
...
...
@@ -456,11 +456,19 @@ void oox_serialize_xfrm(std::wostream & strm, _oox_drawing & val, const std::wst
CP_XML_NODE
(
L"a:off"
)
{
CP_XML_ATTR
(
L"x"
,
val
.
x
);
CP_XML_ATTR
(
L"y"
,
val
.
y
);
if
(
val
.
inGroup
)
{
CP_XML_ATTR
(
L"x"
,
val
.
x
);
CP_XML_ATTR
(
L"y"
,
val
.
y
);
}
else
{
CP_XML_ATTR
(
L"x"
,
0
);
CP_XML_ATTR
(
L"y"
,
0
);
}
}
if
(
val
.
cx
>
0
||
val
.
cy
>
0
)
if
(
val
.
cx
>
0
||
val
.
cy
>
0
)
{
CP_XML_NODE
(
L"a:ext"
)
{
...
...
ASCOfficeOdfFile/src/docx/pptx_conversion_context.cpp
View file @
c6a05e49
...
...
@@ -61,16 +61,16 @@ namespace package
class
pptx_document
;
}
pptx_conversion_context
::
pptx_conversion_context
(
odf_reader
::
odf_document
*
odfDocument
)
:
output_document_
(
NULL
)
,
odf_document_
(
odfDocument
)
,
pptx_text_context_
(
odf_document_
->
odf_context
(),
*
this
)
,
pptx_table_context_
(
*
this
)
,
pptx_comments_context_
(
comments_context_handle_
)
,
pptx_slide_context_
(
*
this
/*, pptx_text_context_*/
)
,
math_context_
(
true
)
,
last_idx_placeHolder
(
1
)
,
last_uniq_big_id
(
1
)
pptx_conversion_context
::
pptx_conversion_context
(
odf_reader
::
odf_document
*
odfDocument
)
:
output_document_
(
NULL
)
,
odf_document_
(
odfDocument
)
,
pptx_text_context_
(
odf_document_
->
odf_context
(),
*
this
)
,
pptx_table_context_
(
*
this
)
,
pptx_comments_context_
(
comments_context_handle_
)
,
pptx_slide_context_
(
*
this
/*, pptx_text_context_*/
)
,
math_context_
(
odf_document_
->
odf_context
().
fontContainer
(),
true
)
,
last_idx_placeHolder
(
1
)
,
last_uniq_big_id
(
1
)
{
applicationFonts_
=
new
CApplicationFonts
();
}
...
...
ASCOfficeOdfFile/src/docx/xlsxconversioncontext.cpp
View file @
c6a05e49
...
...
@@ -66,7 +66,7 @@ xlsx_conversion_context::xlsx_conversion_context(odf_reader::odf_document * odfD
num_format_context_
(
odf_document_
->
odf_context
()),
xlsx_text_context_
(
odf_document_
->
odf_context
().
styleContainer
()),
xlsx_table_context_
(
this
,
xlsx_text_context_
),
math_context_
(
true
),
math_context_
(
odf_document_
->
odf_context
().
fontContainer
(),
true
),
xlsx_style_
(
this
),
maxDigitSize_
(
std
::
pair
<
float
,
float
>
(
-
1.0
,
-
1.0
)
),
...
...
ASCOfficeOdfFile/src/odf/datatypes/custom_shape_types_convert.h
View file @
c6a05e49
...
...
@@ -52,10 +52,10 @@ static const _shape_converter _OO_OOX_custom_shapes[]=
{
L"hexagon"
,
L"hexagon"
,
0
,
0
,
0
},
{
L"octagon"
,
L"octagon"
,
0
,
0
,
0
},
{
L"star4"
,
L"star4"
,
1
,
0
,
50000
},
{
L"star5"
,
L"star5"
,
1
,
0
,
50000
},
{
L"star5"
,
L"star5"
,
0
,
0
,
50000
},
//??? 19098 неверно
{
L"star8"
,
L"star8"
,
1
,
0
,
50000
},
{
L"star24"
,
L"star24"
,
1
,
0
,
50000
},
{
L"star6"
,
L"star6"
,
1
,
0
,
50000
},
{
L"star6"
,
L"star6"
,
0
,
0
,
50000
},
{
L"star12"
,
L"star12"
,
1
,
0
,
50000
},
{
L"round-rectangle"
,
L"roundRect"
,
0
,
0
,
0
},
{
L"ellipse"
,
L"ellipse"
,
0
,
0
,
0
},
...
...
@@ -137,6 +137,7 @@ static const _shape_converter _OO_OOX_custom_shapes[]=
{
L"mso-spt14"
,
L"thickArrow"
,
0
,
0
,
0
},
{
L"mso-spt17"
,
L"Balloon"
,
0
,
0
,
0
},
{
L"mso-spt18"
,
L"irregularSeal1"
,
0
,
0
,
0
},
{
L"mso-spt19"
,
L"rect"
,
0
,
0
,
0
},
{
L"mso-spt24"
,
L"textBox"
,
0
,
0
,
0
},
{
L"mso-spt25"
,
L""
,
0
,
0
,
0
},
{
L"mso-spt26"
,
L""
,
0
,
0
,
0
},
...
...
ASCOfficeOdfFile/src/odf/draw_frame_docx.cpp
View file @
c6a05e49
...
...
@@ -1286,7 +1286,10 @@ void draw_text_box::docx_convert(oox::docx_conversion_context & Context)
if
(
drawing
.
cx
>
max_x
)
drawing
.
cy
=
max_x
;
}
if
(
auto_fit_shape
)
{
drawing
.
additional
.
push_back
(
_property
(
L"text-wrap"
,
0
));
drawing
.
additional
.
push_back
(
_property
(
L"auto-grow-height"
,
auto_fit_shape
));
}
else
if
(
auto_fit_text
)
drawing
.
additional
.
push_back
(
_property
(
L"fit-to-size"
,
auto_fit_text
));
...
...
ASCOfficeOdfFile/src/odf/draw_shapes.cpp
View file @
c6a05e49
...
...
@@ -230,7 +230,11 @@ void draw_path::add_attributes( const xml::attributes_wc_ptr & Attributes )
}
void
draw_path
::
reset_svg_path
()
{
if
(
draw_path_attlist_
.
svg_d_
)
if
(
!
draw_path_attlist_
.
svg_d_
)
{
bad_shape_
=
true
;
}
else
{
std
::
vector
<
svg_path
::
_polyline
>
o_Polyline_pt
;
std
::
vector
<
svg_path
::
_polyline
>
o_Polyline_cm
;
...
...
@@ -286,7 +290,11 @@ void draw_polygon::add_attributes( const xml::attributes_wc_ptr & Attributes )
}
void
draw_polygon
::
reset_polygon_path
()
{
if
(
draw_polygon_attlist_
.
draw_points_
)
if
(
!
draw_polygon_attlist_
.
draw_points_
)
{
bad_shape_
=
true
;
}
else
{
std
::
vector
<
svg_path
::
_polyline
>
o_Polyline_pt
;
std
::
vector
<
svg_path
::
_polyline
>
o_Polyline_cm
;
...
...
@@ -338,7 +346,11 @@ void draw_polyline::add_attributes( const xml::attributes_wc_ptr & Attributes )
}
void
draw_polyline
::
reset_polyline_path
()
{
if
(
draw_polyline_attlist_
.
draw_points_
)
if
(
!
draw_polyline_attlist_
.
draw_points_
)
{
bad_shape_
=
true
;
}
else
{
std
::
vector
<
svg_path
::
_polyline
>
o_Polyline_pt
;
std
::
vector
<
svg_path
::
_polyline
>
o_Polyline_cm
;
...
...
@@ -601,7 +613,11 @@ void draw_connector::add_attributes( const xml::attributes_wc_ptr & Attributes )
}
void
draw_connector
::
reset_svg_path
()
{
if
(
draw_connector_attlist_
.
svg_d_
)
if
(
!
draw_connector_attlist_
.
svg_d_
)
{
bad_shape_
=
true
;
}
else
{
std
::
vector
<
svg_path
::
_polyline
>
o_Polyline_pt
;
std
::
vector
<
svg_path
::
_polyline
>
o_Polyline_cm
;
...
...
ASCOfficeOdfFile/src/odf/math_layout_elements.cpp
View file @
c6a05e49
...
...
@@ -292,7 +292,7 @@ void math_mstyle::oox_convert(oox::math_context & Context)
{
CP_XML_NODE
(
L"m:ctrlPr"
)
{
Context
.
text_properties_
->
content
().
oox_convert
(
CP_XML_STREAM
(),
Context
.
graphRPR_
);
Context
.
text_properties_
->
content
().
oox_convert
(
CP_XML_STREAM
(),
Context
.
graphRPR_
,
Context
.
fonts_container_
);
}
}
}
...
...
@@ -317,7 +317,7 @@ void math_mstyle::oox_convert(oox::math_context & Context)
{
CP_XML_NODE
(
L"m:ctrlPr"
)
{
Context
.
text_properties_
->
content
().
oox_convert
(
CP_XML_STREAM
(),
Context
.
graphRPR_
);
Context
.
text_properties_
->
content
().
oox_convert
(
CP_XML_STREAM
(),
Context
.
graphRPR_
,
Context
.
fonts_container_
);
}
}
}
...
...
ASCOfficeOdfFile/src/odf/math_table_elements.cpp
View file @
c6a05e49
...
...
@@ -94,8 +94,10 @@ void math_mtr::oox_convert(oox::math_context & Context)
strm
<<
L"<m:mr>"
;
for
(
int
i
=
0
;
i
<
content_
.
size
();
i
++
)
{
strm
<<
L"<m:e>"
;
office_math_element
*
math_element
=
dynamic_cast
<
office_math_element
*>
(
content_
[
i
].
get
());
math_element
->
oox_convert
(
Context
);
strm
<<
L"</m:e>"
;
}
strm
<<
L"</m:mr>"
;
}
...
...
ASCOfficeOdfFile/src/odf/math_token_elements.cpp
View file @
c6a05e49
...
...
@@ -114,7 +114,7 @@ void math_mi::oox_convert(oox::math_context & Context)
}
}
Context
.
text_properties_
->
content
().
oox_convert
(
CP_XML_STREAM
(),
Context
.
graphRPR_
);
Context
.
text_properties_
->
content
().
oox_convert
(
CP_XML_STREAM
(),
Context
.
graphRPR_
,
Context
.
fonts_container_
);
CP_XML_NODE
(
L"m:t"
)
{
...
...
@@ -162,7 +162,7 @@ void math_mo::oox_convert(oox::math_context & Context)
{
// + доп стили текста ... todoooo
Context
.
text_properties_
->
content
().
oox_convert
(
CP_XML_STREAM
(),
Context
.
graphRPR_
);
Context
.
text_properties_
->
content
().
oox_convert
(
CP_XML_STREAM
(),
Context
.
graphRPR_
,
Context
.
fonts_container_
);
CP_XML_NODE
(
L"m:t"
)
{
...
...
@@ -203,7 +203,7 @@ void math_mn::oox_convert(oox::math_context & Context)
{
// + доп стили текста ... todoooo
Context
.
text_properties_
->
content
().
oox_convert
(
CP_XML_STREAM
(),
Context
.
graphRPR_
);
Context
.
text_properties_
->
content
().
oox_convert
(
CP_XML_STREAM
(),
Context
.
graphRPR_
,
Context
.
fonts_container_
);
CP_XML_NODE
(
L"m:t"
)
{
...
...
ASCOfficeOdfFile/src/odf/office_body.cpp
View file @
c6a05e49
...
...
@@ -128,8 +128,6 @@ void office_body::docx_convert(oox::docx_conversion_context & Context)
if
(
content_
)
content_
->
docx_convert
(
Context
);
Context
.
get_headers_footers
().
set_enable_write
(
true
);
if
(
!
Context
.
get_section_context
().
dump_
.
empty
()
&&
!
Context
.
get_table_context
().
in_table
())
{
Context
.
output_stream
()
<<
Context
.
get_section_context
().
dump_
;
...
...
ASCOfficeOdfFile/src/odf/style_text_properties.cpp
View file @
c6a05e49
...
...
@@ -276,18 +276,20 @@ void text_format_properties_content::pptx_convert_as_list(oox::pptx_conversion_c
{
std
::
wstring
w_font
=
(
fo_font_family_
?
*
fo_font_family_
:
L""
);
if
(
w_font
.
length
()
<
1
)
if
(
w_font
.
empty
()
)
{
std
::
wstring
w_ascii
=
(
style_font_name_
?
*
style_font_name_
:
L""
);
std
::
wstring
w_eastAsia
=
(
style_font_name_asian_
?
*
style_font_name_asian_
:
L""
);
std
::
wstring
w_cs
=
(
style_font_name_complex_
?
*
style_font_name_complex_
:
L""
);
std
::
wstring
w_ascii
=
(
style_font_name_
?
*
style_font_name_
:
L""
);
std
::
wstring
w_eastAsia
=
(
style_font_name_asian_
?
*
style_font_name_asian_
:
L""
);
std
::
wstring
w_cs
=
(
style_font_name_complex_
?
*
style_font_name_complex_
:
L""
);
fonts_container
&
fonts
=
Context
.
root
()
->
odf_context
().
fontContainer
();
font_instance
*
font
=
fonts
.
font_by_style_name
(
w_ascii
);
if
(
font
==
NULL
)
font
=
fonts
.
font_by_style_name
(
w_eastAsia
);
if
(
font
==
NULL
)
font
=
fonts
.
font_by_style_name
(
w_cs
);
if
(
font
)
w_font
=
font
->
name
();
font_instance
*
font
=
fonts
.
font_by_style_name
(
w_ascii
);
if
(
font
==
NULL
)
font
=
fonts
.
font_by_style_name
(
w_eastAsia
);
if
(
font
==
NULL
)
font
=
fonts
.
font_by_style_name
(
w_cs
);
if
(
font
)
w_font
=
font
->
name
();
//'Arial' глючит
removeCharsFromString
(
w_font
,
_T
(
"'"
));
...
...
@@ -852,22 +854,38 @@ void text_format_properties_content::docx_convert(oox::docx_conversion_context &
if
(
style_font_name_
||
style_font_name_asian_
||
style_font_name_complex_
||
fo_font_family_
)
{
fonts_container
&
fonts
=
Context
.
root
()
->
odf_context
().
fontContainer
();
std
::
wstring
w_eastAsia
;
std
::
wstring
w_hAnsi
;
std
::
wstring
w_cs
;
std
::
wstring
w_ascii
=
w_hAnsi
=
w_cs
=
(
style_font_name_
?
*
style_font_name_
:
L""
);
std
::
wstring
w_ascii
=
w_hAnsi
=
w_cs
=
(
fo_font_family_
?
*
fo_font_family_
:
L""
);
_rPr
<<
L"<w:rFonts "
;
if
(
!
w_ascii
.
empty
())
_rPr
<<
L"w:ascii=
\"
"
<<
w_ascii
<<
"
\"
"
;
if
(
!
w_hAnsi
.
empty
())
_rPr
<<
L"w:hAnsi=
\"
"
<<
w_hAnsi
<<
"
\"
"
;
if
(
!
w_eastAsia
.
empty
())
_rPr
<<
L"w:eastAsia=
\"
"
<<
w_eastAsia
<<
"
\"
"
;
if
(
!
w_cs
.
empty
())
_rPr
<<
L"w:cs=
\"
"
<<
w_cs
<<
"
\"
"
;
if
(
style_font_name_complex_
)
{
font_instance
*
font
=
fonts
.
font_by_style_name
(
*
style_font_name_complex_
);
if
(
font
)
w_cs
=
font
->
name
();
}
if
(
style_font_name_asian_
)
{
font_instance
*
font
=
fonts
.
font_by_style_name
(
*
style_font_name_asian_
);
if
(
font
)
w_eastAsia
=
font
->
name
();
}
if
(
style_font_name_
)
{
font_instance
*
font
=
fonts
.
font_by_style_name
(
*
style_font_name_
);
if
(
font
)
w_ascii
=
w_hAnsi
=
font
->
name
();
}
_rPr
<<
L" />"
;
_rPr
<<
L"<w:rFonts"
;
if
(
!
w_ascii
.
empty
())
_rPr
<<
L" w:ascii=
\"
"
<<
w_ascii
<<
"
\"
"
;
if
(
!
w_hAnsi
.
empty
())
_rPr
<<
L" w:hAnsi=
\"
"
<<
w_hAnsi
<<
"
\"
"
;
if
(
!
w_eastAsia
.
empty
())
_rPr
<<
L" w:eastAsia=
\"
"
<<
w_eastAsia
<<
"
\"
"
;
if
(
!
w_cs
.
empty
())
_rPr
<<
L" w:cs=
\"
"
<<
w_cs
<<
"
\"
"
;
_rPr
<<
L"/>"
;
}
_CP_OPT
(
color
)
color_text
=
fo_color_
;
...
...
@@ -974,12 +992,12 @@ void text_format_properties_content::docx_convert(oox::docx_conversion_context &
}
void
text_format_properties_content
::
oox_convert
(
std
::
wostream
&
_rPr
,
bool
graphic
)
void
text_format_properties_content
::
oox_convert
(
std
::
wostream
&
_rPr
,
bool
graphic
,
fonts_container
&
fonts
)
{
const
int
W
=
process_font_weight
(
fo_font_weight_
);
const
int
fontStyle
=
process_font_style
(
fo_font_style_
);
const
int
WCs
=
process_font_weight
(
style_font_weight_complex_
);
if
(
graphic
)
{
_rPr
<<
L"<a:rPr"
;
...
...
@@ -1324,19 +1342,33 @@ void text_format_properties_content::oox_convert (std::wostream & _rPr, bool gra
std
::
wstring
w_eastAsia
;
std
::
wstring
w_hAnsi
;
std
::
wstring
w_cs
;
std
::
wstring
w_ascii
=
w_hAnsi
=
w_cs
=
(
style_font_name_
?
*
style_font_name_
:
L""
);
_rPr
<<
L"<w:rFonts "
;
if
(
!
w_ascii
.
empty
())
_rPr
<<
L"w:ascii=
\"
"
<<
w_ascii
<<
"
\"
"
;
if
(
!
w_hAnsi
.
empty
())
_rPr
<<
L"w:hAnsi=
\"
"
<<
w_hAnsi
<<
"
\"
"
;
if
(
!
w_eastAsia
.
empty
())
_rPr
<<
L"w:eastAsia=
\"
"
<<
w_eastAsia
<<
"
\"
"
;
if
(
!
w_cs
.
empty
())
_rPr
<<
L"w:cs=
\"
"
<<
w_cs
<<
"
\"
"
;
std
::
wstring
w_ascii
=
w_hAnsi
=
w_cs
=
(
fo_font_family_
?
*
fo_font_family_
:
L""
);
if
(
style_font_name_complex_
)
{
font_instance
*
font
=
fonts
.
font_by_style_name
(
*
style_font_name_complex_
);
if
(
font
)
w_cs
=
font
->
name
();
}
if
(
style_font_name_asian_
)
{
font_instance
*
font
=
fonts
.
font_by_style_name
(
*
style_font_name_asian_
);
if
(
font
)
w_eastAsia
=
font
->
name
();
}
if
(
style_font_name_
)
{
font_instance
*
font
=
fonts
.
font_by_style_name
(
*
style_font_name_
);
if
(
font
)
w_ascii
=
w_hAnsi
=
font
->
name
();
}
_rPr
<<
L" />"
;
_rPr
<<
L"<w:rFonts"
;
if
(
!
w_ascii
.
empty
())
_rPr
<<
L" w:ascii=
\"
"
<<
w_ascii
<<
"
\"
"
;
if
(
!
w_hAnsi
.
empty
())
_rPr
<<
L" w:hAnsi=
\"
"
<<
w_hAnsi
<<
"
\"
"
;
if
(
!
w_eastAsia
.
empty
())
_rPr
<<
L" w:eastAsia=
\"
"
<<
w_eastAsia
<<
"
\"
"
;
if
(
!
w_cs
.
empty
())
_rPr
<<
L" w:cs=
\"
"
<<
w_cs
<<
"
\"
"
;
_rPr
<<
L"/>"
;
}
_CP_OPT
(
color
)
color_text
=
fo_color_
;
...
...
ASCOfficeOdfFile/src/odf/style_text_properties.h
View file @
c6a05e49
...
...
@@ -69,6 +69,7 @@ namespace cpdoccore {
namespace
odf_reader
{
class
style_instance
;
class
fonts_container
;
// 15.4
class
text_format_properties_content
:
public
oox
::
conversion_element
...
...
@@ -79,7 +80,8 @@ public:
void
docx_convert
(
oox
::
docx_conversion_context
&
Context
);
void
pptx_convert
(
oox
::
pptx_conversion_context
&
Context
);
void
pptx_convert_as_list
(
oox
::
pptx_conversion_context
&
Context
);
void
oox_convert
(
std
::
wostream
&
stream
,
bool
graphic
);
void
oox_convert
(
std
::
wostream
&
stream
,
bool
graphic
,
fonts_container
&
fonts
);
void
apply_from
(
const
text_format_properties_content
&
Other
);
void
apply_to
(
std
::
vector
<
_property
>
&
properties
);
...
...
ASCOfficeOdfFile/src/odf/styles.cpp
View file @
c6a05e49
...
...
@@ -1134,14 +1134,14 @@ void style_page_layout_properties_attlist::docx_convert_serialize(std::wostream
CP_XML_NODE
(
L"w:pgMar"
)
{
CP_XML_ATTR
(
L"w:header"
,
process_page_margin
(
common_vertical_margin_attlist_
.
fo_margin_top_
)
);
CP_XML_ATTR
(
L"w:footer"
,
process_page_margin
(
common_vertical_margin_attlist_
.
fo_margin_bottom_
)
);
CP_XML_ATTR
(
L"w:gutter"
,
0
);
CP_XML_ATTR
(
L"w:left"
,
process_page_margin
(
common_horizontal_margin_attlist_
.
fo_margin_left_
,
margin_left_length
)
);
CP_XML_ATTR
(
L"w:right"
,
process_page_margin
(
common_horizontal_margin_attlist_
.
fo_margin_right_
,
margin_right_length
)
);
CP_XML_ATTR
(
L"w:top"
,
process_page_margin
(
common_vertical_margin_attlist_
.
fo_margin_top_
,
Context
.
get_header_footer_context
().
header
())
);
CP_XML_ATTR
(
L"w:bottom"
,
process_page_margin
(
common_vertical_margin_attlist_
.
fo_margin_bottom_
,
Context
.
get_header_footer_context
().
footer
())
);
CP_XML_ATTR
(
L"w:header"
,
process_page_margin
(
common_vertical_margin_attlist_
.
fo_margin_top_
)
);
CP_XML_ATTR
(
L"w:footer"
,
process_page_margin
(
common_vertical_margin_attlist_
.
fo_margin_bottom_
)
);
CP_XML_ATTR
(
L"w:gutter"
,
0
);
}
}
...
...
@@ -1286,19 +1286,17 @@ void style_page_layout_properties::docx_convert_serialize(std::wostream & strm,
{
Context
.
process_section
(
CP_XML_STREAM
(),
columns
);
bool
next_page
=
Context
.
is_next_dump_page_properties
();
CP_XML_NODE
(
L"w:type"
)
{
if
(
Context
.
is_next_dump_page_properties
())
{
CP_XML_ATTR
(
L"w:val"
,
L"nextPage"
);
}
else
{
CP_XML_ATTR
(
L"w:val"
,
L"continuous"
);
}
if
(
next_page
)
CP_XML_ATTR
(
L"w:val"
,
L"nextPage"
);
else
CP_XML_ATTR
(
L"w:val"
,
L"continuous"
);
}
std
::
wstring
masterPageName
=
Context
.
get_master_page_name
();
bool
res
=
Context
.
get_headers_footers
().
write_sectPr
(
masterPageName
,
strm
);
bool
res
=
Context
.
get_headers_footers
().
write_sectPr
(
masterPageName
,
next_page
,
strm
);
if
(
res
==
false
)
{
// default???
...
...
@@ -1308,7 +1306,7 @@ void style_page_layout_properties::docx_convert_serialize(std::wostream & strm,
Context
.
remove_page_properties
();
Context
.
add_page_properties
(
masterPageNameLayout
);
bool
res
=
Context
.
get_headers_footers
().
write_sectPr
(
masterPageName
,
strm
);
bool
res
=
Context
.
get_headers_footers
().
write_sectPr
(
masterPageName
,
next_page
,
strm
);
}
oox
::
section_context
::
_section
&
section
=
Context
.
get_section_context
().
get
();
...
...
ASCOfficeOdfFile/src/odf/text_elements.cpp
View file @
c6a05e49
...
...
@@ -137,7 +137,14 @@ typedef std::map<std::wstring, oox::text_tracked_context::_state>::iterator map_
int
process_paragraph_attr
(
const
paragraph_attrs
&
Attr
,
oox
::
docx_conversion_context
&
Context
)
{
if
(
!
Attr
.
text_style_name_
.
empty
())
bool
in_drawing
=
false
;
if
(
Context
.
get_drawing_context
().
get_current_shape
()
||
Context
.
get_drawing_context
().
get_current_frame
())
{
in_drawing
=
true
;
}
if
(
!
Attr
.
text_style_name_
.
empty
())
{
if
(
style_instance
*
styleInst
=
Context
.
root
()
->
odf_context
().
styleContainer
().
style_by_name
(
Attr
.
text_style_name_
.
style_name
(),
style_family
::
Paragraph
,
Context
.
process_headers_footers_
)
...
...
@@ -188,9 +195,10 @@ int process_paragraph_attr(const paragraph_attrs & Attr, oox::docx_conversion_co
const
std
::
wstring
id
=
Context
.
styles_map_
.
get
(
styleInst
->
name
(),
styleInst
->
type
()
);
Context
.
output_stream
()
<<
L"<w:pPr>"
;
//todooo причесать
if
(
!
Context
.
get_section_context
().
dump_
.
empty
()
&&
!
Context
.
get_table_context
().
in_table
()
&&
(
Context
.
get_process_note
()
==
oox
::
docx_conversion_context
::
noNote
))
if
(
!
Context
.
get_section_context
().
dump_
.
empty
()
&&
!
Context
.
get_table_context
().
in_table
()
&&
(
Context
.
get_process_note
()
==
oox
::
docx_conversion_context
::
noNote
)
&&
!
in_drawing
)
{
if
(
Context
.
is_paragraph_header
()
)
{
...
...
@@ -236,9 +244,10 @@ int process_paragraph_attr(const paragraph_attrs & Attr, oox::docx_conversion_co
}
}
}
if
(
!
Context
.
get_section_context
().
dump_
.
empty
()
&&
!
Context
.
get_table_context
().
in_table
()
&&
(
Context
.
get_process_note
()
==
oox
::
docx_conversion_context
::
noNote
))
if
(
!
Context
.
get_section_context
().
dump_
.
empty
()
&&
!
Context
.
get_table_context
().
in_table
()
&&
(
Context
.
get_process_note
()
==
oox
::
docx_conversion_context
::
noNote
)
&&
!
in_drawing
)
{
Context
.
output_stream
()
<<
L"<w:pPr>"
;
Context
.
output_stream
()
<<
Context
.
get_section_context
().
dump_
;
...
...
@@ -361,18 +370,18 @@ void paragraph::docx_convert(oox::docx_conversion_context & Context)
{
const
std
::
wstring
&
styleName
=
attrs_
.
text_style_name_
.
style_name
();
bool
drawing
=
false
;
bool
in_
drawing
=
false
;
if
(
Context
.
get_drawing_context
().
get_current_shape
()
||
Context
.
get_drawing_context
().
get_current_frame
())
{
drawing
=
true
;
in_
drawing
=
true
;
}
bool
bIsNewParagraph
=
true
;
bool
is_empty
=
content_
.
empty
();
if
(
Context
.
get_paragraph_state
()
&&
(
Context
.
get_process_note
()
==
oox
::
docx_conversion_context
::
noNote
)
&&
!
drawing
)
if
(
Context
.
get_paragraph_state
()
&&
(
Context
.
get_process_note
()
==
oox
::
docx_conversion_context
::
noNote
)
&&
!
in_
drawing
)
{
//вложеннные элементы ... или после графики embedded_linux_kernel_and_drivers_labs_zh_TW.odt
bIsNewParagraph
=
false
;
...
...
@@ -425,8 +434,6 @@ void paragraph::docx_convert(oox::docx_conversion_context & Context)
Context
.
remove_page_properties
();
Context
.
add_page_properties
(
masterPageNameLayout
);
Context
.
set_page_break
(
true
);
is_empty
=
false
;
}
...
...
@@ -453,7 +460,8 @@ void paragraph::docx_convert(oox::docx_conversion_context & Context)
if
(
Context
.
get_page_break
())
{
if
(
Context
.
process_headers_footers_
==
false
)
_Wostream
<<
L"<w:lastRenderedPageBreak/>"
;
//_Wostream << L"<w:lastRenderedPageBreak/>";
_Wostream
<<
L"<w:br w:type=
\"
page
\"
/>"
;
Context
.
set_page_break
(
false
);
}
elm
->
docx_convert
(
Context
);
...
...
@@ -482,7 +490,7 @@ void paragraph::docx_convert(oox::docx_conversion_context & Context)
is_empty
=
false
;
Context
.
add_new_run
(
_T
(
""
));
_Wostream
<<
L"<w:br w:type=
\"
page
\"
/>"
;
_Wostream
<<
L"<w:br w:type=
\"
page
\"
/>"
;
Context
.
finish_run
();
}
...
...
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