ooxml_parser 0.6.0 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ooxml_parser.rb +1 -0
  3. data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart.rb +6 -0
  4. data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart/series.rb +2 -2
  5. data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart/series/series_text.rb +0 -2
  6. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/docx_drawing.rb +1 -20
  7. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/docx_drawing_distance_from_text.rb +3 -0
  8. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/docx_drawing_properties.rb +51 -4
  9. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/ooxml_coordinates.rb +1 -0
  10. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/ooxml_size.rb +4 -1
  11. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_blip.rb +1 -0
  12. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_blip/file_reference.rb +4 -0
  13. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_picture.rb +0 -2
  14. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/docx_shape/ooxml_text_box.rb +1 -3
  15. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/color/docx_color_scheme.rb +1 -0
  16. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/custom_geometry/docx_custom_geometry/docx_shape_line_path/docx_shape_line_element.rb +0 -2
  17. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_line.rb +1 -0
  18. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_properties.rb +12 -4
  19. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_size.rb +10 -3
  20. data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/old_docx_picture.rb +1 -3
  21. data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/shape/old_docx_shape_properties.rb +1 -3
  22. data/lib/ooxml_parser/common_parser/common_data/borders_properties.rb +3 -0
  23. data/lib/ooxml_parser/common_parser/common_data/color.rb +45 -79
  24. data/lib/ooxml_parser/common_parser/common_data/color/color_helper.rb +4 -3
  25. data/lib/ooxml_parser/common_parser/common_data/color/color_indexes.list +66 -0
  26. data/lib/ooxml_parser/common_parser/common_data/color/ooxml_color.rb +5 -0
  27. data/lib/ooxml_parser/common_parser/common_data/colors/color_properties.rb +8 -2
  28. data/lib/ooxml_parser/common_parser/common_data/colors/hsl_color.rb +11 -0
  29. data/lib/ooxml_parser/common_parser/common_data/colors/scheme_color.rb +1 -0
  30. data/lib/ooxml_parser/common_parser/common_data/colors/theme_colors.rb +4 -0
  31. data/lib/ooxml_parser/common_parser/common_data/content_types.rb +2 -0
  32. data/lib/ooxml_parser/common_parser/common_data/content_types/content_type_default.rb +3 -0
  33. data/lib/ooxml_parser/common_parser/common_data/content_types/content_type_override.rb +3 -0
  34. data/lib/ooxml_parser/common_parser/common_data/coordinates.rb +7 -0
  35. data/lib/ooxml_parser/common_parser/common_data/hyperlink.rb +14 -3
  36. data/lib/ooxml_parser/common_parser/common_data/ooxml_document_object.rb +28 -2
  37. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run.rb +3 -0
  38. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run/run_properties.rb +31 -15
  39. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run/run_properties/outline.rb +4 -2
  40. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/numbering_properties.rb +2 -0
  41. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/paragraph_borders.rb +1 -0
  42. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/spacing.rb +16 -13
  43. data/lib/ooxml_parser/common_parser/common_data/table.rb +2 -0
  44. data/lib/ooxml_parser/common_parser/common_data/table/margins/paragraph_margins.rb +3 -0
  45. data/lib/ooxml_parser/common_parser/common_data/table/margins/table_margins.rb +7 -0
  46. data/lib/ooxml_parser/common_parser/common_data/table/properties/table_position.rb +1 -0
  47. data/lib/ooxml_parser/common_parser/common_data/table/properties/table_style_properties/table_style_properties_helper.rb +4 -4
  48. data/lib/ooxml_parser/common_parser/common_data/table/row/cell/cell_properties.rb +4 -5
  49. data/lib/ooxml_parser/common_parser/common_data/table/row/cell/properties/borders.rb +6 -0
  50. data/lib/ooxml_parser/common_parser/common_data/table/table_grid.rb +3 -0
  51. data/lib/ooxml_parser/common_parser/common_data/underline.rb +7 -2
  52. data/lib/ooxml_parser/docx_parser/docx_data/document_structure.rb +41 -9
  53. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/comments/comment.rb +3 -0
  54. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/document_style.rb +2 -0
  55. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph.rb +25 -8
  56. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/bookmark_end.rb +1 -1
  57. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/comment_range_start.rb +1 -0
  58. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/pre_sub_superscript.rb +3 -0
  59. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run.rb +13 -3
  60. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/docx_paragraph_run_helpers.rb +4 -1
  61. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/shape.rb +0 -2
  62. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/frame_properties.rb +3 -0
  63. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/indents.rb +4 -2
  64. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/header_footer.rb +8 -4
  65. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/numbering.rb +5 -0
  66. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/columns.rb +3 -1
  67. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/note.rb +6 -2
  68. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/page_size.rb +1 -0
  69. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/styles.rb +2 -0
  70. data/lib/ooxml_parser/docx_parser/docx_parser.rb +3 -0
  71. data/lib/ooxml_parser/name.rb +1 -0
  72. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation.rb +2 -0
  73. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/presentation_theme.rb +3 -0
  74. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/presentation_theme/theme_color.rb +3 -0
  75. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb +5 -2
  76. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing/time_node.rb +3 -0
  77. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide_helper.rb +15 -1
  78. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/transition/transition.rb +3 -0
  79. data/lib/ooxml_parser/pptx_parser/pptx_parser.rb +4 -1
  80. data/lib/ooxml_parser/version.rb +2 -1
  81. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook.rb +21 -2
  82. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/chartsheet.rb +3 -0
  83. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache.rb +41 -0
  84. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache/pivot_cache_definition.rb +37 -0
  85. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache/pivot_cache_definition/cache_source.rb +33 -0
  86. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache/pivot_cache_definition/cache_source/worksheet_source.rb +26 -0
  87. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet.rb +2 -0
  88. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/cell_xfs/xf.rb +5 -0
  89. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/fills/fill.rb +2 -0
  90. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/fonts/font.rb +3 -0
  91. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet.rb +5 -0
  92. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/excel_comments.rb +4 -0
  93. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_column_properties.rb +4 -0
  94. data/lib/ooxml_parser/xlsx_parser/xlsx_parser.rb +3 -0
  95. metadata +65 -4
@@ -6,7 +6,7 @@ module OoxmlParser
6
6
  # @return [Integer] id of bookmark
7
7
  attr_reader :id
8
8
 
9
- # Parse BookmarkStart object
9
+ # Parse BookmarkEnd object
10
10
  # @param node [Nokogiri::XML:Element] node to parse
11
11
  # @return [BookmarkEnd] result of parsing
12
12
  def parse(node)
@@ -19,6 +19,7 @@ module OoxmlParser
19
19
  self
20
20
  end
21
21
 
22
+ # @return [Comment] object of current comment range
22
23
  def comment
23
24
  root_object.comments.comments_array.detect { |comment| comment.id == id }
24
25
  end
@@ -12,6 +12,9 @@ module OoxmlParser
12
12
  # @return [DocxFormula] base
13
13
  attr_accessor :base
14
14
 
15
+ # Parse PreSubSuperscript
16
+ # @param [Nokogiri::XML:Node] node with PreSubSuperscript
17
+ # @return [PreSubSuperscript] result of parsing
15
18
  def parse(node)
16
19
  node.xpath('*').each do |node_child|
17
20
  case node_child.name
@@ -41,12 +41,16 @@ module OoxmlParser
41
41
  @parent = parent
42
42
  end
43
43
 
44
+ # Constructor for copy of object
45
+ # @param source [DocxParagraphRun] original object
46
+ # @return [void]
44
47
  def initialize_copy(source)
45
48
  super
46
49
  @drawings = source.drawings.clone
47
50
  @comments = source.comments.clone
48
51
  end
49
52
 
53
+ # @return [Array, nil] Drawings of Run
50
54
  def drawing
51
55
  # TODO: Rewrite all tests without this methos
52
56
  @drawings.empty? ? nil : drawings.first
@@ -64,6 +68,9 @@ module OoxmlParser
64
68
  !@break
65
69
  end
66
70
 
71
+ # Compare this object to other
72
+ # @param other [Object] any other object
73
+ # @return [True, False] result of comparision
67
74
  def ==(other)
68
75
  ignored_attributes = %i[@number @parent]
69
76
  all_instance_variables = instance_variables
@@ -74,12 +81,17 @@ module OoxmlParser
74
81
  true
75
82
  end
76
83
 
84
+ # Parse object
85
+ # @param r_tag [Nokogiri::XML:Node] node with DocxParagraphRun
86
+ # @param char_number [Integer] number of run
87
+ # @param parent [OOXMLDocumentObject] parent of run
88
+ # @return [void]
77
89
  def parse(r_tag, char_number, parent: nil)
78
90
  @parent = parent
79
91
  r_tag.xpath('*').each do |node_child|
80
92
  case node_child.name
81
93
  when 'rPr'
82
- parse_properties(node_child, DocumentStructure.default_run_style)
94
+ parse_properties(node_child)
83
95
  @run_properties = RunProperties.new(parent: self).parse(node_child)
84
96
  when 'instrText'
85
97
  if node_child.text.include?('HYPERLINK')
@@ -121,8 +133,6 @@ module OoxmlParser
121
133
  @shape = Shape.new(parent: self).parse(pict_node_child, :shape)
122
134
  when 'rect'
123
135
  @shape = Shape.new(parent: self).parse(pict_node_child, :rectangle)
124
- when 'oval'
125
- @shape = Shape.new(parent: self).parse(pict_node_child, :oval)
126
136
  end
127
137
  end
128
138
  when 'object'
@@ -3,7 +3,10 @@
3
3
  module OoxmlParser
4
4
  # Module for some helpers for ParagraphRun
5
5
  module DocxParagraphRunHelpers
6
- def parse_properties(node, _default_character = DocumentStructure.default_run_style)
6
+ # Parse other properties
7
+ # @param node [Nokogiri::XML:Element] node to parse
8
+ # @return [DocxParagraphRun] result of parse
9
+ def parse_properties(node)
7
10
  self.font_style = FontStyle.new
8
11
  node.xpath('*').each do |node_child|
9
12
  case node_child.name
@@ -53,8 +53,6 @@ module OoxmlParser
53
53
  @properties.margins.top = property.split(':').last
54
54
  elsif property.include?('margin-left')
55
55
  @properties.margins.left = property.split(':').last
56
- elsif property.include?('margin-right')
57
- @properties.margins.right = property.split(':').last
58
56
  elsif property.include?('width')
59
57
  @properties.size.width = property.split(':').last
60
58
  elsif property.include?('height')
@@ -7,6 +7,9 @@ module OoxmlParser
7
7
  :horizontal_align, :vertical_align, :anchor_lock, :vertical_space, :horizontal_space,
8
8
  :horizontal_position, :vertical_position
9
9
 
10
+ # Parse FrameProperties
11
+ # @param node [Nokogiri::XML:Element] with FrameProperties
12
+ # @return [FrameProperties] parsed result
10
13
  def parse(node)
11
14
  node.attributes.each do |key, value|
12
15
  case key
@@ -22,9 +22,11 @@ module OoxmlParser
22
22
  alias right right_indent
23
23
  alias hanging hanging_indent
24
24
 
25
+ # Convert to string
26
+ # @return [String] result of conversion
25
27
  def to_s
26
- "first line indent: #{@first_line_indent}, left indent: #{@left_indent},
27
- right indent: #{@right_indent}, hanging indent: #{@hanging_indent}"
28
+ "first line indent: #{@first_line_indent}, left indent: #{@left_indent}, "\
29
+ "right indent: #{@right_indent}, hanging indent: #{@hanging_indent}"
28
30
  end
29
31
 
30
32
  # Parse Indents
@@ -3,8 +3,14 @@
3
3
  module OoxmlParser
4
4
  # Class Header Footer classes
5
5
  class HeaderFooter < OOXMLDocumentObject
6
- attr_accessor :id, :elements, :type
7
- attr_accessor :path_suffix
6
+ # @return [Integer] id of header-footer
7
+ attr_reader :id
8
+ # @return [Array<OOXMLDocumentObject>] list of elements if object
9
+ attr_reader :elements
10
+ # @return [Symbol] `:header` or `:footer`
11
+ attr_reader :type
12
+ # @return [String] suffix for object files
13
+ attr_reader :path_suffix
8
14
 
9
15
  def initialize(type = :header, parent: nil)
10
16
  @type = type
@@ -32,8 +38,6 @@ module OoxmlParser
32
38
  when 'endnoteReference'
33
39
  @path_suffix = 'endnote'
34
40
  @type = :footer
35
- else
36
- warn "Unknown HeaderFooter type: #{node.name}"
37
41
  end
38
42
  end
39
43
 
@@ -17,6 +17,9 @@ module OoxmlParser
17
17
  @parent = parent
18
18
  end
19
19
 
20
+ # Get properties by number id
21
+ # @param num_id [Integer] index of number id
22
+ # @return [nil, AbstractNumbering] result of search
20
23
  def properties_by_num_id(num_id)
21
24
  abstract_num_id = nil
22
25
  @numbering_definition_list.each do |num_def|
@@ -32,6 +35,8 @@ module OoxmlParser
32
35
  end
33
36
  end
34
37
 
38
+ # Parse Numbering data
39
+ # @return [Numbering] result of parse
35
40
  def parse
36
41
  numbering_xml = OOXMLDocumentObject.path_to_folder + 'word/numbering.xml'
37
42
  return nil unless File.exist?(numbering_xml)
@@ -4,10 +4,12 @@ require_relative 'columns/column'
4
4
  module OoxmlParser
5
5
  # Class for data of Columns
6
6
  class Columns < OOXMLDocumentObject
7
+ # @return [Integer] count of columns
7
8
  attr_accessor :count
9
+ # @return [True, False] is columns are equal width
8
10
  attr_accessor :equal_width
9
-
10
11
  alias equal_width? equal_width
12
+ # @return [Array<Column>] list of colujmns
11
13
  attr_accessor :column_array
12
14
  # @return [Boolean] Draw Line Between Columns
13
15
  attr_reader :separator
@@ -9,6 +9,9 @@ module OoxmlParser
9
9
  @elements = []
10
10
  end
11
11
 
12
+ # Parse note data
13
+ # @param params [Hash] data to parse
14
+ # @return [Note] result of parsing
12
15
  def self.parse(params)
13
16
  note = Note.new
14
17
  note.type = params[:type]
@@ -23,10 +26,11 @@ module OoxmlParser
23
26
  doc.search(xpath_note).each do |ftr|
24
27
  number = 0
25
28
  ftr.xpath('*').each do |sub_element|
26
- if sub_element.name == 'p'
29
+ case sub_element.name
30
+ when 'p'
27
31
  note.elements << params[:default_paragraph].dup.parse(sub_element, number, params[:default_character], parent: note)
28
32
  number += 1
29
- elsif sub_element.name == 'tbl'
33
+ when 'tbl'
30
34
  note.elements << Table.new(parent: note).parse(sub_element, number)
31
35
  number += 1
32
36
  end
@@ -11,6 +11,7 @@ module OoxmlParser
11
11
  @orientation = orientation
12
12
  end
13
13
 
14
+ # @return [String] convert to string
14
15
  def to_s
15
16
  'Height: ' + @height.to_s + ' Width: ' + @width.to_s + ' Orientation: ' + @orientation.to_s
16
17
  end
@@ -14,6 +14,8 @@ module OoxmlParser
14
14
  @parent = parent
15
15
  end
16
16
 
17
+ # Parse styles data
18
+ # @return [Styles] result of parsing
17
19
  def parse
18
20
  doc = parse_xml(OOXMLDocumentObject.path_to_folder + 'word/styles.xml')
19
21
  doc.xpath('w:styles/*').each do |node_child|
@@ -7,6 +7,9 @@ require_relative 'docx_data/document_structure'
7
7
  module OoxmlParser
8
8
  # Basic class for DocxParser
9
9
  class DocxParser
10
+ # Parse docx file
11
+ # @param path_to_file [String] file path
12
+ # @return [DocumentStructure] result of parse
10
13
  def self.parse_docx(path_to_file)
11
14
  Parser.parse_format(path_to_file) do
12
15
  DocumentStructure.parse
@@ -3,6 +3,7 @@
3
3
  module OoxmlParser
4
4
  # This module holds name of product
5
5
  module Name
6
+ # [String] name of the gem
6
7
  STRING = 'ooxml_parser'
7
8
  end
8
9
  end
@@ -27,6 +27,8 @@ module OoxmlParser
27
27
  super
28
28
  end
29
29
 
30
+ # Parse data of presentation
31
+ # @return [Presentation] parsed presentation
30
32
  def parse
31
33
  @content_types = ContentTypes.new(parent: self).parse
32
34
  OOXMLDocumentObject.root_subfolder = 'ppt/'
@@ -14,6 +14,9 @@ module OoxmlParser
14
14
  @color_scheme = color_scheme
15
15
  end
16
16
 
17
+ # Parse PresentationTheme
18
+ # @param file [String] path to file to parse
19
+ # @return [PresentationTheme] result of parsing
17
20
  def self.parse(file)
18
21
  OOXMLDocumentObject.theme = PresentationTheme.new
19
22
  OOXMLDocumentObject.add_to_xmls_stack(file)
@@ -11,6 +11,9 @@ module OoxmlParser
11
11
  @parent = parent
12
12
  end
13
13
 
14
+ # Compare ThemeColor with other object
15
+ # @param other [Object] object to compare
16
+ # @return [True, False] result of comparision
14
17
  def ==(other)
15
18
  if other.is_a?(Color)
16
19
  @color == other
@@ -3,8 +3,8 @@
3
3
  require_relative 'slide/presentation_alternate_content'
4
4
  require_relative 'slide/background'
5
5
  require_relative 'slide/common_slide_data'
6
- require_relative 'slide/connection_shape.rb'
7
- require_relative 'slide/presentation_notes.rb'
6
+ require_relative 'slide/connection_shape'
7
+ require_relative 'slide/presentation_notes'
8
8
  require_relative 'slide/graphic_frame/graphic_frame'
9
9
  require_relative 'slide/slide/shapes_grouping'
10
10
  require_relative 'slide/slide/timing'
@@ -28,6 +28,7 @@ module OoxmlParser
28
28
  @xml_path = xml_path
29
29
  end
30
30
 
31
+ # @return [True, False] is slide with data
31
32
  def with_data?
32
33
  return true unless background.nil?
33
34
 
@@ -37,10 +38,12 @@ module OoxmlParser
37
38
  false
38
39
  end
39
40
 
41
+ # @return <Array> List of elements on slide
40
42
  def elements
41
43
  @common_slide_data.shape_tree.elements
42
44
  end
43
45
 
46
+ # @return [Background] background of slide
44
47
  def background
45
48
  @common_slide_data.background
46
49
  end
@@ -30,6 +30,9 @@ module OoxmlParser
30
30
  self
31
31
  end
32
32
 
33
+ # Parse list of timing nodes
34
+ # @param timing_list_node [Nokogiri::XML::Element] node to parse
35
+ # @return [Array<TimeNode>] list of nodes
33
36
  def self.parse_list(timing_list_node)
34
37
  timings = []
35
38
  timing_list_node.xpath('*').each do |time_node|
@@ -3,10 +3,12 @@
3
3
  module OoxmlParser
4
4
  # Methods to help working with slide data
5
5
  module SlideHelper
6
+ # @return [Array] list of not empty element on slide
6
7
  def nonempty_elements
7
8
  elements.reject { |cur_shape| cur_shape.text_body.paragraphs.first.characters.empty? }
8
9
  end
9
10
 
11
+ # @return [Array<GraphicFrame>] list GraphicFrame elements on slide
10
12
  def graphic_frames
11
13
  elements.select { |cur_element| cur_element.is_a?(GraphicFrame) }
12
14
  end
@@ -17,7 +19,7 @@ module OoxmlParser
17
19
  def transform_of_object(object)
18
20
  case object
19
21
  when :image
20
- elements.find { |e| e.is_a? Picture }.properties.transform
22
+ elements.find { |e| e.is_a? DocxPicture }.properties.transform
21
23
  when :chart
22
24
  elements.find { |e| e.is_a? GraphicFrame }.transform
23
25
  when :table
@@ -29,6 +31,10 @@ module OoxmlParser
29
31
  end
30
32
  end
31
33
 
34
+ # Get horizontal align of object on slide
35
+ # @param object [Symbol] object to get
36
+ # @param slide_size [SlideSize] size of slide
37
+ # @return [Symbol] type of align
32
38
  def content_horizontal_align(object, slide_size)
33
39
  transform = transform_of_object(object)
34
40
  return :left if transform.offset.x.zero?
@@ -38,6 +44,10 @@ module OoxmlParser
38
44
  :unknown
39
45
  end
40
46
 
47
+ # Get vertical align of object on slide
48
+ # @param object [Symbol] object to get
49
+ # @param slide_size [SlideSize] size of slide
50
+ # @return [Symbol] type of align
41
51
  def content_vertical_align(object, slide_size)
42
52
  transform = transform_of_object(object)
43
53
  return :top if transform.offset.y.zero?
@@ -47,6 +57,10 @@ module OoxmlParser
47
57
  :unknown
48
58
  end
49
59
 
60
+ # Get content distribution of object
61
+ # @param object [Symbol] object to get
62
+ # @param slide_size [SlideSize] size of slide
63
+ # @return [Array<Symbol>] type of align
50
64
  def content_distribute(object, slide_size)
51
65
  return %i[horizontally vertically] if content_horizontal_align(object, slide_size) == :center && content_vertical_align(object, slide_size) == :middle
52
66
  return [:horizontally] if content_horizontal_align(object, slide_size) == :center
@@ -7,6 +7,9 @@ module OoxmlParser
7
7
  class Transition < OOXMLDocumentObject
8
8
  attr_accessor :speed, :properties, :sound_action, :advance_on_click, :delay, :duration
9
9
 
10
+ # Parse Transition object
11
+ # @param node [Nokogiri::XML:Element] node to parse
12
+ # @return [Transition] result of parsing
10
13
  def parse(node)
11
14
  node.xpath('*').each do |node_child|
12
15
  @properties = TransitionProperties.new(parent: self).parse(node_child)
@@ -1,10 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'pptx_data/presentation.rb'
3
+ require_relative 'pptx_data/presentation'
4
4
 
5
5
  module OoxmlParser
6
6
  # Basic class for parsing pptx
7
7
  class PptxParser
8
+ # Parse pptx file
9
+ # @param path_to_file [String] file path
10
+ # @return [Presentation] result of parse
8
11
  def self.parse_pptx(path_to_file)
9
12
  Parser.parse_format(path_to_file) do
10
13
  Presentation.new.parse
@@ -3,6 +3,7 @@
3
3
  module OoxmlParser
4
4
  # This module holds the RuboCop version information.
5
5
  module Version
6
- STRING = '0.6.0'
6
+ # [String] Version of Gem
7
+ STRING = '0.8.1'
7
8
  end
8
9
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'workbook/chartsheet'
4
+ require_relative 'workbook/pivot_cache'
4
5
  require_relative 'workbook/shared_string_table'
5
6
  require_relative 'workbook/style_sheet'
6
7
  require_relative 'workbook/worksheet'
@@ -18,12 +19,20 @@ module OoxmlParser
18
19
  attr_accessor :style_sheet
19
20
  # @return [SharedStringTable] styles of book
20
21
  attr_accessor :shared_strings_table
22
+ # @return [Array<PivotCache>] list of pivot caches
23
+ attr_accessor :pivot_caches
21
24
 
22
25
  def initialize(params = {})
23
26
  @worksheets = []
27
+ @pivot_caches = []
24
28
  super
25
29
  end
26
30
 
31
+ # Return cell by coordinates
32
+ # @param column [String, Integer] number or numeric digit of column
33
+ # @param row [Integer] row to find
34
+ # @param sheet [Integer] number of sheet
35
+ # @return [XlsxCell] result
27
36
  def cell(column, row, sheet = 0)
28
37
  column = Coordinates.new(row, column).column_number unless StringHelper.numeric?(column.to_s)
29
38
 
@@ -88,6 +97,8 @@ module OoxmlParser
88
97
  @shared_strings_table = SharedStringTable.new(parent: self).parse(shared_string_file)
89
98
  end
90
99
 
100
+ # Parse content of Workbook
101
+ # @return [XLSXWorkbook]
91
102
  def parse
92
103
  @content_types = ContentTypes.new(parent: self).parse
93
104
  @relationships = Relationships.new(parent: self).parse_file("#{OOXMLDocumentObject.path_to_folder}xl/_rels/workbook.xml.rels")
@@ -95,10 +106,10 @@ module OoxmlParser
95
106
  OOXMLDocumentObject.xmls_stack = []
96
107
  OOXMLDocumentObject.root_subfolder = 'xl/'
97
108
  OOXMLDocumentObject.add_to_xmls_stack('xl/workbook.xml')
98
- doc = Nokogiri::XML.parse(File.open(OOXMLDocumentObject.current_xml))
109
+ @doc = Nokogiri::XML.parse(File.open(OOXMLDocumentObject.current_xml))
99
110
  @theme = PresentationTheme.parse("xl/#{link_to_theme_xml}") if link_to_theme_xml
100
111
  @style_sheet = StyleSheet.new(parent: self).parse
101
- doc.xpath('xmlns:workbook/xmlns:sheets/xmlns:sheet').each do |sheet|
112
+ @doc.xpath('xmlns:workbook/xmlns:sheets/xmlns:sheet').each do |sheet|
102
113
  file = @relationships.target_by_id(sheet.attribute('id').value)
103
114
  if file.start_with?('worksheets')
104
115
  @worksheets << Worksheet.new(parent: self).parse(file)
@@ -107,6 +118,7 @@ module OoxmlParser
107
118
  @worksheets << Chartsheet.new(parent: self).parse(file)
108
119
  end
109
120
  end
121
+ parse_pivot_cache
110
122
  OOXMLDocumentObject.xmls_stack.pop
111
123
  self
112
124
  end
@@ -116,5 +128,12 @@ module OoxmlParser
116
128
  def link_to_theme_xml
117
129
  relationships.target_by_type('theme').first
118
130
  end
131
+
132
+ # Perform parsing of pivot cache
133
+ def parse_pivot_cache
134
+ @doc.xpath('xmlns:workbook/xmlns:pivotCaches/xmlns:pivotCache').each do |pivot_cache|
135
+ @pivot_caches << PivotCache.new(parent: self).parse(pivot_cache)
136
+ end
137
+ end
119
138
  end
120
139
  end