ooxml_parser 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +17 -1
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/alternate_content/chart_style.rb +4 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart_axis.rb +9 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart_axis/scaling.rb +20 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/ooxml_size.rb +1 -1
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_blip/file_reference.rb +3 -2
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_body_properties/ooxml_shape_body_properties.rb +8 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_properties/text_box.rb +1 -1
- data/lib/ooxml_parser/common_parser/common_data/borders_properties.rb +2 -2
- data/lib/ooxml_parser/common_parser/common_data/color.rb +11 -20
- data/lib/ooxml_parser/common_parser/common_data/color/color_helper.rb +1 -1
- data/lib/ooxml_parser/common_parser/common_data/color/ooxml_color.rb +57 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/theme_colors.rb +3 -6
- data/lib/ooxml_parser/common_parser/common_data/coordinates.rb +17 -1
- data/lib/ooxml_parser/common_parser/common_data/hyperlink.rb +12 -1
- data/lib/ooxml_parser/common_parser/common_data/ooxml_document_object.rb +4 -4
- data/lib/ooxml_parser/common_parser/common_data/ooxml_document_object/ooxml_document_object_helper.rb +30 -1
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_properties.rb +5 -2
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run.rb +9 -1
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run/run_properties.rb +1 -1
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run/text.rb +23 -0
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/paragraph_borders.rb +2 -2
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/spacing.rb +0 -1
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/tabs.rb +2 -2
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/{tab_list/presentation_tab.rb → tabs/tab.rb} +17 -4
- data/lib/ooxml_parser/common_parser/common_data/table.rb +1 -1
- data/lib/ooxml_parser/common_parser/common_data/table/margins/table_margins.rb +1 -3
- data/lib/ooxml_parser/common_parser/common_data/table/properties/table_style.rb +31 -37
- data/lib/ooxml_parser/common_parser/common_data/table/properties/table_style_properties.rb +4 -0
- data/lib/ooxml_parser/common_parser/common_data/table/properties/table_style_properties/table_style_properties_helper.rb +2 -2
- data/lib/ooxml_parser/common_parser/common_data/table/row/cell/cell.rb +4 -4
- data/lib/ooxml_parser/common_parser/common_data/table/row/cell/properties/border.rb +1 -1
- data/lib/ooxml_parser/common_parser/common_data/table/table_properties.rb +1 -16
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure.rb +14 -7
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/comment.rb +2 -2
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/comments_extended.rb +39 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/comments_extended/comment_extended.rb +24 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/document_background.rb +9 -12
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/document_style.rb +1 -1
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph.rb +51 -73
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/delimeter.rb +2 -2
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_helper.rb +8 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run.rb +8 -56
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/docx_paragraph_run_helpers.rb +2 -12
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/inserted.rb +15 -1
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/sdt/sdt_content.rb +30 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/sdt/sdt_properties.rb +28 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/structured_document_tag.rb +26 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/header_footer.rb +1 -1
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/note.rb +10 -10
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/page_margins.rb +9 -16
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/page_properties.rb +11 -9
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation.rb +5 -2
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/presentation_theme/theme_color.rb +1 -3
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb +35 -24
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/common_slide_data.rb +26 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/common_slide_data/shape_tree.rb +33 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/connection_shape.rb +5 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/graphic_frame/graphic_frame.rb +2 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/presentation_notes.rb +21 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/shapes_grouping.rb +2 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide_helper.rb +3 -3
- data/lib/ooxml_parser/version.rb +1 -1
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook.rb +1 -1
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/fills/fill.rb +20 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/fills/fill/pattern_fill.rb +2 -2
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/fonts/font.rb +5 -1
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet.rb +10 -1
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/ole_objects.rb +18 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/sheet_view.rb +1 -1
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/table_part.rb +7 -1
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/table_part/autofilter.rb +34 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/table_part/autofilter/filter_column.rb +28 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/table_part/extension_list/extension.rb +5 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/table_part/extension_list/extension/sparkline_groups.rb +31 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/table_part/extension_list/extension/sparkline_groups/sparkline_group.rb +113 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/table_part/table_style_info.rb +41 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_drawing.rb +5 -11
- metadata +31 -14
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/tab_list.rb +0 -36
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/tabs/paragraph_tab.rb +0 -26
@@ -61,21 +61,11 @@ module OoxmlParser
|
|
61
61
|
unless node_child.attribute('fill').value == 'auto' || node_child.attribute('fill').value == '' || node_child.attribute('fill').value == 'null'
|
62
62
|
self.background_color = Color.new(parent: self).parse_hex_string(node_child.attribute('fill').value)
|
63
63
|
end
|
64
|
-
when 'uCs'
|
64
|
+
when 'u', 'uCs'
|
65
65
|
font_style.underlined = Underline.new
|
66
66
|
if option_enabled?(node_child)
|
67
67
|
font_style.underlined.style = node_child.attribute('val').value
|
68
|
-
unless node_child.attribute('color').nil?
|
69
|
-
font_style.underlined.color = Color.new(parent: font_style.underlined).parse_hex_string(node_child.attribute('color').value)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
when 'u'
|
73
|
-
font_style.underlined = Underline.new
|
74
|
-
if option_enabled?(node_child)
|
75
|
-
font_style.underlined.style = node_child.attribute('val').value
|
76
|
-
unless node_child.attribute('color').nil?
|
77
|
-
font_style.underlined.color = Color.new(parent: font_style.underlined).parse_hex_string(node_child.attribute('color').value)
|
78
|
-
end
|
68
|
+
font_style.underlined.color = Color.new(parent: font_style.underlined).parse_hex_string(node_child.attribute('color').value) unless node_child.attribute('color').nil?
|
79
69
|
end
|
80
70
|
when 'strike'
|
81
71
|
font_style.strike = :single if option_enabled?(node_child)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
1
3
|
module OoxmlParser
|
2
4
|
# Class for parsing `w:ins` tag - Inserted Run Content
|
3
5
|
class Inserted < OOXMLDocumentObject
|
@@ -23,7 +25,7 @@ module OoxmlParser
|
|
23
25
|
when 'author'
|
24
26
|
@author = value.value.to_s
|
25
27
|
when 'date'
|
26
|
-
@date =
|
28
|
+
@date = parse_date(value.value.to_s)
|
27
29
|
when 'oouserid'
|
28
30
|
@user_id = value.value.to_s
|
29
31
|
end
|
@@ -37,5 +39,17 @@ module OoxmlParser
|
|
37
39
|
end
|
38
40
|
self
|
39
41
|
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
# Parse date and handle incorrect dates
|
46
|
+
# @param value [Sting] value of date
|
47
|
+
# @return [DateTime, String] if date correct or incorrect
|
48
|
+
def parse_date(value)
|
49
|
+
DateTime.parse(value)
|
50
|
+
rescue ArgumentError
|
51
|
+
warn "Date #{value} is incorrect format"
|
52
|
+
value
|
53
|
+
end
|
40
54
|
end
|
41
55
|
end
|
data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/sdt/sdt_content.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
module OoxmlParser
|
2
|
+
# Class for parsing `w:w:sdtContent` tags
|
3
|
+
class SDTContent < OOXMLDocumentObject
|
4
|
+
# @return [Array, ParagraphRun] runs of sdt
|
5
|
+
attr_reader :runs
|
6
|
+
# @return [Array, ParagraphRun] paragraphs of sdt
|
7
|
+
attr_reader :paragraphs
|
8
|
+
|
9
|
+
def initialize(parent: nil)
|
10
|
+
@runs = []
|
11
|
+
@paragraphs = []
|
12
|
+
@parent = parent
|
13
|
+
end
|
14
|
+
|
15
|
+
# Parse SDTContent object
|
16
|
+
# @param node [Nokogiri::XML:Element] node to parse
|
17
|
+
# @return [SDTContent] result of parsing
|
18
|
+
def parse(node)
|
19
|
+
node.xpath('*').each do |node_child|
|
20
|
+
case node_child.name
|
21
|
+
when 'p'
|
22
|
+
@paragraphs << DocxParagraph.new(parent: self).parse(node_child)
|
23
|
+
when 'r'
|
24
|
+
@runs << ParagraphRun.new(parent: self).parse(node_child)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
self
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/sdt/sdt_properties.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
module OoxmlParser
|
2
|
+
# Class for parsing `w:sdtPr` tags
|
3
|
+
class SDTProperties < OOXMLDocumentObject
|
4
|
+
# @return [ValuedChild] alias value
|
5
|
+
attr_reader :alias
|
6
|
+
# @return [ValuedChild] tag value
|
7
|
+
attr_reader :tag
|
8
|
+
# @return [ValuedChild] Locking Setting
|
9
|
+
attr_reader :lock
|
10
|
+
|
11
|
+
# Parse SDTProperties object
|
12
|
+
# @param node [Nokogiri::XML:Element] node to parse
|
13
|
+
# @return [SDTProperties] result of parsing
|
14
|
+
def parse(node)
|
15
|
+
node.xpath('*').each do |node_child|
|
16
|
+
case node_child.name
|
17
|
+
when 'alias'
|
18
|
+
@alias = ValuedChild.new(:string, parent: self).parse(node_child)
|
19
|
+
when 'tag'
|
20
|
+
@tag = ValuedChild.new(:string, parent: self).parse(node_child)
|
21
|
+
when 'lock'
|
22
|
+
@lock = ValuedChild.new(:symbol, parent: self).parse(node_child)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
self
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative 'sdt/sdt_content'
|
2
|
+
require_relative 'sdt/sdt_properties'
|
3
|
+
module OoxmlParser
|
4
|
+
# Class for parsing `w:std`
|
5
|
+
class StructuredDocumentTag < OOXMLDocumentObject
|
6
|
+
# @return [SDTContent] content of sdt
|
7
|
+
attr_reader :sdt_content
|
8
|
+
# @return [SDTProperties] properties of sdt
|
9
|
+
attr_reader :properties
|
10
|
+
|
11
|
+
# Parse StructuredDocumentTag object
|
12
|
+
# @param node [Nokogiri::XML:Element] node to parse
|
13
|
+
# @return [StructuredDocumentTag] result of parsing
|
14
|
+
def parse(node)
|
15
|
+
node.xpath('*').each do |node_child|
|
16
|
+
case node_child.name
|
17
|
+
when 'sdtContent'
|
18
|
+
@sdt_content = SDTContent.new(parent: self).parse(node_child)
|
19
|
+
when 'sdtPr'
|
20
|
+
@properties = SDTProperties.new(parent: self).parse(node_child)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
self
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -46,7 +46,7 @@ module OoxmlParser
|
|
46
46
|
next unless footnote.attribute('id').value.to_i == @id
|
47
47
|
paragraph_number = 0
|
48
48
|
footnote.xpath('w:p').each do |paragraph|
|
49
|
-
@elements << DocumentStructure.default_paragraph_style.
|
49
|
+
@elements << DocumentStructure.default_paragraph_style.dup.parse(paragraph, paragraph_number, DocumentStructure.default_run_style, parent: self)
|
50
50
|
paragraph_number += 1
|
51
51
|
end
|
52
52
|
end
|
@@ -6,15 +6,15 @@ module OoxmlParser
|
|
6
6
|
@elements = []
|
7
7
|
end
|
8
8
|
|
9
|
-
def self.parse(
|
9
|
+
def self.parse(params)
|
10
10
|
note = Note.new
|
11
|
-
note.type = type
|
12
|
-
note.assigned_to = assigned_to
|
13
|
-
note.parent = parent
|
14
|
-
doc = Nokogiri::XML(File.open(OOXMLDocumentObject.path_to_folder + "word/#{target}"))
|
15
|
-
if type.include?('footer')
|
11
|
+
note.type = params[:type]
|
12
|
+
note.assigned_to = params[:assigned_to]
|
13
|
+
note.parent = params[:parent]
|
14
|
+
doc = Nokogiri::XML(File.open(OOXMLDocumentObject.path_to_folder + "word/#{params[:target]}"))
|
15
|
+
if note.type.include?('footer')
|
16
16
|
xpath_note = '//w:ftr'
|
17
|
-
elsif type.include?('header')
|
17
|
+
elsif note.type.include?('header')
|
18
18
|
xpath_note = '//w:hdr'
|
19
19
|
else
|
20
20
|
raise "Cannot parse unknown Note type: #{type}"
|
@@ -23,19 +23,19 @@ module OoxmlParser
|
|
23
23
|
number = 0
|
24
24
|
ftr.xpath('*').each do |sub_element|
|
25
25
|
if sub_element.name == 'p'
|
26
|
-
note.elements << default_paragraph.
|
26
|
+
note.elements << params[:default_paragraph].dup.parse(sub_element, number, params[:default_character], parent: note)
|
27
27
|
number += 1
|
28
28
|
elsif sub_element.name == 'tbl'
|
29
29
|
note.elements << Table.new(parent: note).parse(sub_element, number)
|
30
30
|
number += 1
|
31
31
|
elsif sub_element.name == 'std'
|
32
32
|
sub_element.xpath('w:p').each do |p|
|
33
|
-
note.elements << default_paragraph.copy.parse(p, number, default_character)
|
33
|
+
note.elements << params[:default_paragraph].copy.parse(p, number, params[:default_character])
|
34
34
|
number += 1
|
35
35
|
end
|
36
36
|
sub_element.xpath('w:sdtContent').each do |sdt_content|
|
37
37
|
sdt_content.xpath('w:p').each do |p|
|
38
|
-
note.elements << default_paragraph.copy.parse(p, number, default_character)
|
38
|
+
note.elements << params[:default_paragraph].copy.parse(p, number, params[:default_character])
|
39
39
|
number += 1
|
40
40
|
end
|
41
41
|
end
|
data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/page_margins.rb
CHANGED
@@ -3,22 +3,15 @@ module OoxmlParser
|
|
3
3
|
class PageMargins < OOXMLDocumentObject
|
4
4
|
attr_accessor :top, :bottom, :left, :right, :footer, :gutter, :header
|
5
5
|
|
6
|
-
def initialize(
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
@
|
15
|
-
@bottom = bottom
|
16
|
-
@left = left
|
17
|
-
@right = right
|
18
|
-
@header = header
|
19
|
-
@footer = footer
|
20
|
-
@gutter = gutter
|
21
|
-
@parent = parent
|
6
|
+
def initialize(params)
|
7
|
+
@top = params[:top]
|
8
|
+
@bottom = params[:bottom]
|
9
|
+
@left = params[:left]
|
10
|
+
@right = params[:right]
|
11
|
+
@header = params[:header]
|
12
|
+
@footer = params[:footer]
|
13
|
+
@gutter = params[:gutter]
|
14
|
+
@parent = params[:parent]
|
22
15
|
end
|
23
16
|
|
24
17
|
# Parse BordersProperties
|
data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/page_properties.rb
CHANGED
@@ -10,6 +10,8 @@ module OoxmlParser
|
|
10
10
|
:notes
|
11
11
|
# @return [FootnoteProperties] properties of footnote
|
12
12
|
attr_accessor :footnote_properties
|
13
|
+
# @return [True, False] Specifies whether the section should have a different header and footer for its first page
|
14
|
+
attr_reader :title_page
|
13
15
|
|
14
16
|
def initialize(parent: nil)
|
15
17
|
@notes = []
|
@@ -26,12 +28,8 @@ module OoxmlParser
|
|
26
28
|
@size = PageSize.new.parse(pg_size_subnode)
|
27
29
|
when 'pgBorders'
|
28
30
|
page_borders = Borders.new
|
29
|
-
unless pg_size_subnode.attribute('display').nil?
|
30
|
-
|
31
|
-
end
|
32
|
-
unless pg_size_subnode.attribute('offsetFrom').nil?
|
33
|
-
page_borders.offset_from = pg_size_subnode.attribute('offsetFrom').value.to_sym
|
34
|
-
end
|
31
|
+
page_borders.display = pg_size_subnode.attribute('display').value.to_sym unless pg_size_subnode.attribute('display').nil?
|
32
|
+
page_borders.offset_from = pg_size_subnode.attribute('offsetFrom').value.to_sym unless pg_size_subnode.attribute('offsetFrom').nil?
|
35
33
|
pg_size_subnode.xpath('w:bottom').each do |bottom|
|
36
34
|
page_borders.bottom = BordersProperties.new(parent: page_borders).parse(bottom)
|
37
35
|
end
|
@@ -57,14 +55,18 @@ module OoxmlParser
|
|
57
55
|
@text_direction = pg_size_subnode.attribute('val').value
|
58
56
|
when 'docGrid'
|
59
57
|
@document_grid = DocumentGrid.new(parent: self).parse(pg_size_subnode)
|
58
|
+
when 'titlePg'
|
59
|
+
@title_page = option_enabled?(pg_size_subnode)
|
60
60
|
when 'cols'
|
61
61
|
@columns = Columns.new.parse(pg_size_subnode)
|
62
62
|
when 'headerReference', 'footerReference'
|
63
63
|
target = OOXMLDocumentObject.get_link_from_rels(pg_size_subnode.attribute('id').value)
|
64
64
|
OOXMLDocumentObject.add_to_xmls_stack("word/#{target}")
|
65
|
-
note = Note.parse(default_paragraph
|
66
|
-
|
67
|
-
|
65
|
+
note = Note.parse(default_paragraph: default_paragraph,
|
66
|
+
default_character: default_character,
|
67
|
+
target: target,
|
68
|
+
assigned_to: pg_size_subnode.attribute('type').value,
|
69
|
+
type: File.basename(target).sub('.xml', ''),
|
68
70
|
parent: self)
|
69
71
|
@notes << note
|
70
72
|
OOXMLDocumentObject.xmls_stack.pop
|
@@ -7,6 +7,8 @@ module OoxmlParser
|
|
7
7
|
class Presentation < CommonDocumentStructure
|
8
8
|
include PresentationHelpers
|
9
9
|
attr_accessor :slides, :theme, :slide_size, :comments
|
10
|
+
# @return [Relationships] relationships of presentation
|
11
|
+
attr_accessor :relationships
|
10
12
|
|
11
13
|
def initialize(slides = [], theme = nil, comments = [])
|
12
14
|
@slides = slides
|
@@ -32,18 +34,19 @@ module OoxmlParser
|
|
32
34
|
silde_id_node.attribute_nodes.select { |node| id = node.to_s if node.namespace && node.namespace.prefix == 'r' }
|
33
35
|
presentation.slides << Slide.new(parent: presentation,
|
34
36
|
xml_path: "#{OOXMLDocumentObject.root_subfolder}/#{OOXMLDocumentObject.get_link_from_rels(id)}")
|
35
|
-
|
37
|
+
.parse
|
36
38
|
end
|
37
39
|
end
|
38
40
|
end
|
39
41
|
presentation.comments = PresentationComment.parse_list
|
40
42
|
OOXMLDocumentObject.xmls_stack.pop
|
43
|
+
presentation.relationships = Relationships.parse_rels("#{OOXMLDocumentObject.path_to_folder}/ppt/_rels/presentation.xml.rels")
|
41
44
|
presentation
|
42
45
|
end
|
43
46
|
|
44
47
|
class << self
|
45
48
|
# @return [FontStyle] current font_style
|
46
|
-
|
49
|
+
attr_writer :current_font_style
|
47
50
|
|
48
51
|
def current_font_style
|
49
52
|
@current_font_style = FontStyle.new if @current_font_style.nil?
|
@@ -14,9 +14,7 @@ module OoxmlParser
|
|
14
14
|
else
|
15
15
|
all_instance_variables = instance_variables
|
16
16
|
all_instance_variables.each do |current_attributes|
|
17
|
-
unless instance_variable_get(current_attributes) == other.instance_variable_get(current_attributes)
|
18
|
-
return false
|
19
|
-
end
|
17
|
+
return false unless instance_variable_get(current_attributes) == other.instance_variable_get(current_attributes)
|
20
18
|
end
|
21
19
|
true
|
22
20
|
end
|
@@ -1,5 +1,8 @@
|
|
1
1
|
require_relative 'slide/presentation_alternate_content'
|
2
2
|
require_relative 'slide/background'
|
3
|
+
require_relative 'slide/common_slide_data'
|
4
|
+
require_relative 'slide/connection_shape.rb'
|
5
|
+
require_relative 'slide/presentation_notes.rb'
|
3
6
|
require_relative 'slide/graphic_frame/graphic_frame'
|
4
7
|
require_relative 'slide/slide/shapes_grouping'
|
5
8
|
require_relative 'slide/slide/timing'
|
@@ -8,50 +11,47 @@ module OoxmlParser
|
|
8
11
|
# Class for parsing `slide.xml`
|
9
12
|
class Slide < OOXMLDocumentObject
|
10
13
|
include SlideHelper
|
11
|
-
attr_accessor :
|
14
|
+
attr_accessor :transition, :timing, :alternate_content
|
15
|
+
# @return [CommonSlideData] common slide data
|
16
|
+
attr_reader :common_slide_data
|
17
|
+
# @return [Relationships] relationships of slide
|
18
|
+
attr_reader :relationships
|
19
|
+
# @return [String] name of slide
|
20
|
+
attr_reader :name
|
21
|
+
# @return [Notes] note of slide
|
22
|
+
attr_reader :note
|
12
23
|
|
13
24
|
def initialize(parent: nil, xml_path: nil)
|
14
|
-
@elements = []
|
15
|
-
@background = nil
|
16
25
|
@parent = parent
|
17
26
|
@xml_path = xml_path
|
18
27
|
end
|
19
28
|
|
20
29
|
def with_data?
|
21
|
-
return true unless
|
22
|
-
|
30
|
+
return true unless background.nil?
|
31
|
+
elements.each do |current_element|
|
23
32
|
return true if current_element.with_data?
|
24
33
|
end
|
25
34
|
false
|
26
35
|
end
|
27
36
|
|
37
|
+
def elements
|
38
|
+
@common_slide_data.shape_tree.elements
|
39
|
+
end
|
40
|
+
|
41
|
+
def background
|
42
|
+
@common_slide_data.background
|
43
|
+
end
|
44
|
+
|
28
45
|
# Parse Slide object
|
29
46
|
# @return [Slide] result of parsing
|
30
47
|
def parse
|
31
48
|
OOXMLDocumentObject.add_to_xmls_stack(@xml_path)
|
49
|
+
@name = File.basename(@xml_path, '.*')
|
32
50
|
node = Nokogiri::XML(File.open(OOXMLDocumentObject.current_xml))
|
33
51
|
node.xpath('//p:sld/*').each do |node_child|
|
34
52
|
case node_child.name
|
35
53
|
when 'cSld'
|
36
|
-
|
37
|
-
case common_slide_node_child.name
|
38
|
-
when 'spTree'
|
39
|
-
common_slide_node_child.xpath('*').each do |slide_element_node|
|
40
|
-
case slide_element_node.name
|
41
|
-
when 'sp'
|
42
|
-
@elements << DocxShape.new(parent: self).parse(slide_element_node).dup
|
43
|
-
when 'pic'
|
44
|
-
@elements << DocxPicture.new(parent: self).parse(slide_element_node)
|
45
|
-
when 'graphicFrame'
|
46
|
-
@elements << GraphicFrame.new(parent: self).parse(slide_element_node)
|
47
|
-
when 'grpSp'
|
48
|
-
@elements << ShapesGrouping.new(parent: self).parse(slide_element_node)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
when 'bg'
|
52
|
-
@background = Background.new(parent: self).parse(common_slide_node_child)
|
53
|
-
end
|
54
|
-
end
|
54
|
+
@common_slide_data = CommonSlideData.new(parent: self).parse(node_child)
|
55
55
|
when 'timing'
|
56
56
|
@timing = Timing.new(parent: self).parse(node_child)
|
57
57
|
when 'transition'
|
@@ -61,7 +61,18 @@ module OoxmlParser
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
OOXMLDocumentObject.xmls_stack.pop
|
64
|
+
@relationships = Relationships.parse_rels("#{OOXMLDocumentObject.path_to_folder}#{File.dirname(@xml_path)}/_rels/#{@name}.xml.rels")
|
65
|
+
parse_note
|
64
66
|
self
|
65
67
|
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
# Parse slide notes if present
|
72
|
+
def parse_note
|
73
|
+
notes_target = @relationships.target_by_type('notes')
|
74
|
+
return nil unless notes_target
|
75
|
+
@note = PresentationNotes.new(parent: self).parse("#{OOXMLDocumentObject.path_to_folder}#{File.dirname(@xml_path)}/#{notes_target}")
|
76
|
+
end
|
66
77
|
end
|
67
78
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative 'common_slide_data/shape_tree'
|
2
|
+
|
3
|
+
module OoxmlParser
|
4
|
+
# Class for parsing `cSld` tag
|
5
|
+
class CommonSlideData < OOXMLDocumentObject
|
6
|
+
# @return [ShapeTree] tree of shape
|
7
|
+
attr_reader :shape_tree
|
8
|
+
# @return [Background] background
|
9
|
+
attr_reader :background
|
10
|
+
|
11
|
+
# Parse CommonSlideData object
|
12
|
+
# @param node [Nokogiri::XML:Element] node to parse
|
13
|
+
# @return [CommonSlideData] result of parsing
|
14
|
+
def parse(node)
|
15
|
+
node.xpath('*').each do |node_child|
|
16
|
+
case node_child.name
|
17
|
+
when 'spTree'
|
18
|
+
@shape_tree = ShapeTree.new(parent: self).parse(node_child)
|
19
|
+
when 'bg'
|
20
|
+
@background = Background.new(parent: self).parse(node_child)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
self
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|