ooxml_parser 0.5.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) 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/alternate_content/choice.rb +1 -0
  4. data/lib/ooxml_parser/common_parser/common_data/alternate_content/alternate_content/choice/math_text.rb +1 -0
  5. data/lib/ooxml_parser/common_parser/common_data/alternate_content/alternate_content/choice/math_text/math_paragraph.rb +1 -0
  6. data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart.rb +6 -0
  7. data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart/series.rb +2 -2
  8. data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart/series/series_text.rb +0 -2
  9. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/docx_drawing.rb +1 -20
  10. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/docx_drawing_distance_from_text.rb +3 -0
  11. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/docx_drawing_properties.rb +51 -4
  12. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/ooxml_coordinates.rb +1 -0
  13. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/ooxml_size.rb +4 -1
  14. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_blip.rb +1 -0
  15. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_blip/file_reference.rb +4 -0
  16. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_picture.rb +0 -2
  17. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/docx_shape.rb +3 -0
  18. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/docx_shape/ooxml_text_box.rb +1 -3
  19. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/docx_shape/shape_style.rb +42 -0
  20. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/docx_shape/shape_style/effect_reference.rb +35 -0
  21. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/docx_shape/shape_style/fill_reference.rb +35 -0
  22. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/docx_shape/shape_style/font_reference.rb +35 -0
  23. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/docx_shape/shape_style/line_reference.rb +35 -0
  24. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/color/docx_color_scheme.rb +1 -0
  25. 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
  26. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_line.rb +1 -0
  27. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_properties.rb +12 -4
  28. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_size.rb +10 -3
  29. data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/old_docx_picture.rb +1 -3
  30. data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/shape/old_docx_shape_properties.rb +1 -3
  31. data/lib/ooxml_parser/common_parser/common_data/borders_properties.rb +3 -0
  32. data/lib/ooxml_parser/common_parser/common_data/color.rb +48 -82
  33. data/lib/ooxml_parser/common_parser/common_data/color/color_helper.rb +4 -3
  34. data/lib/ooxml_parser/common_parser/common_data/color/color_indexes.list +66 -0
  35. data/lib/ooxml_parser/common_parser/common_data/color/ooxml_color.rb +5 -0
  36. data/lib/ooxml_parser/common_parser/common_data/colors/color_properties.rb +8 -2
  37. data/lib/ooxml_parser/common_parser/common_data/colors/hsl_color.rb +11 -0
  38. data/lib/ooxml_parser/common_parser/common_data/colors/scheme_color.rb +1 -0
  39. data/lib/ooxml_parser/common_parser/common_data/colors/theme_colors.rb +4 -0
  40. data/lib/ooxml_parser/common_parser/common_data/content_types.rb +2 -0
  41. data/lib/ooxml_parser/common_parser/common_data/content_types/content_type_default.rb +3 -0
  42. data/lib/ooxml_parser/common_parser/common_data/content_types/content_type_override.rb +3 -0
  43. data/lib/ooxml_parser/common_parser/common_data/coordinates.rb +7 -0
  44. data/lib/ooxml_parser/common_parser/common_data/hyperlink.rb +14 -3
  45. data/lib/ooxml_parser/common_parser/common_data/ooxml_document_object.rb +28 -2
  46. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run.rb +3 -0
  47. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run/run_properties.rb +28 -12
  48. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run/run_properties/outline.rb +4 -2
  49. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/numbering_properties.rb +2 -0
  50. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/paragraph_borders.rb +1 -0
  51. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/spacing.rb +16 -13
  52. data/lib/ooxml_parser/common_parser/common_data/table.rb +2 -0
  53. data/lib/ooxml_parser/common_parser/common_data/table/margins/paragraph_margins.rb +3 -0
  54. data/lib/ooxml_parser/common_parser/common_data/table/margins/table_margins.rb +7 -0
  55. data/lib/ooxml_parser/common_parser/common_data/table/properties/table_position.rb +1 -0
  56. data/lib/ooxml_parser/common_parser/common_data/table/properties/table_style_properties.rb +1 -0
  57. data/lib/ooxml_parser/common_parser/common_data/table/properties/table_style_properties/table_style_properties_helper.rb +4 -4
  58. data/lib/ooxml_parser/common_parser/common_data/table/row/cell/cell_properties.rb +4 -5
  59. data/lib/ooxml_parser/common_parser/common_data/table/row/cell/properties/borders.rb +6 -0
  60. data/lib/ooxml_parser/common_parser/common_data/table/table_grid.rb +3 -0
  61. data/lib/ooxml_parser/common_parser/common_data/underline.rb +7 -2
  62. data/lib/ooxml_parser/docx_parser/docx_data/document_structure.rb +41 -9
  63. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/comments/comment.rb +3 -0
  64. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/document_style.rb +3 -0
  65. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph.rb +25 -8
  66. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/bookmark_end.rb +1 -1
  67. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/comment_range_start.rb +1 -0
  68. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/pre_sub_superscript.rb +3 -0
  69. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run.rb +13 -3
  70. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/docx_paragraph_run_helpers.rb +4 -1
  71. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/shape.rb +0 -2
  72. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/frame_properties.rb +3 -0
  73. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/indents.rb +4 -2
  74. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/header_footer.rb +8 -4
  75. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/numbering.rb +5 -0
  76. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/columns.rb +3 -0
  77. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/note.rb +6 -2
  78. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/page_size.rb +1 -0
  79. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/styles.rb +2 -0
  80. data/lib/ooxml_parser/docx_parser/docx_parser.rb +3 -0
  81. data/lib/ooxml_parser/name.rb +1 -0
  82. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation.rb +2 -0
  83. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/presentation_theme.rb +3 -0
  84. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/presentation_theme/theme_color.rb +3 -0
  85. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb +5 -2
  86. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing/time_node.rb +3 -0
  87. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide_helper.rb +15 -1
  88. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/transition/transition.rb +3 -0
  89. data/lib/ooxml_parser/pptx_parser/pptx_parser.rb +4 -1
  90. data/lib/ooxml_parser/version.rb +2 -1
  91. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook.rb +21 -2
  92. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/chartsheet.rb +3 -0
  93. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache.rb +41 -0
  94. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache/pivot_cache_definition.rb +37 -0
  95. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache/pivot_cache_definition/cache_source.rb +33 -0
  96. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache/pivot_cache_definition/cache_source/worksheet_source.rb +26 -0
  97. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet.rb +2 -0
  98. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/cell_xfs/xf.rb +5 -0
  99. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/fills/fill.rb +2 -0
  100. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/fonts/font.rb +3 -0
  101. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet.rb +5 -0
  102. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/excel_comments.rb +4 -0
  103. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_column_properties.rb +4 -0
  104. data/lib/ooxml_parser/xlsx_parser/xlsx_parser.rb +3 -0
  105. metadata +70 -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,9 +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
11
  alias equal_width? equal_width
12
+ # @return [Array<Column>] list of colujmns
10
13
  attr_accessor :column_array
11
14
  # @return [Boolean] Draw Line Between Columns
12
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.5.1'
6
+ # [String] Version of Gem
7
+ STRING = '0.8.0'
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