ooxml_parser 0.35.0 → 0.36.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart/series/series_text.rb +5 -0
  3. data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart.rb +72 -72
  4. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_properties/text_box.rb +5 -5
  5. data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/shape/old_docx_shape.rb +1 -1
  6. data/lib/ooxml_parser/common_parser/common_data/color/color_helper.rb +3 -9
  7. data/lib/ooxml_parser/common_parser/common_data/color.rb +11 -3
  8. data/lib/ooxml_parser/common_parser/common_data/ooxml_document_object.rb +2 -0
  9. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_properties/spacing/{line_spacing.rb → spacing_valued_child.rb} +13 -4
  10. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_properties/spacing.rb +9 -21
  11. data/lib/ooxml_parser/common_parser/common_data/table/row/cell/cell.rb +4 -4
  12. data/lib/ooxml_parser/common_parser/common_document_structure.rb +12 -2
  13. data/lib/ooxml_parser/docx_parser/document_structure/default_style_helper.rb +27 -27
  14. data/lib/ooxml_parser/docx_parser/document_structure/docx_paragraph/docx_paragraph_run/shape.rb +1 -1
  15. data/lib/ooxml_parser/docx_parser/document_structure/docx_paragraph.rb +12 -21
  16. data/lib/ooxml_parser/docx_parser/document_structure/header_footer.rb +1 -1
  17. data/lib/ooxml_parser/docx_parser/document_structure/page_properties/note.rb +14 -7
  18. data/lib/ooxml_parser/docx_parser/document_structure/page_properties/page_properties.rb +15 -2
  19. data/lib/ooxml_parser/docx_parser/document_structure.rb +13 -9
  20. data/lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/{time_node → time_node_list/time_node}/common_timing.rb +3 -3
  21. data/lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/{time_node.rb → time_node_list/time_node.rb} +0 -26
  22. data/lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/time_node_list.rb +40 -0
  23. data/lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing.rb +2 -2
  24. data/lib/ooxml_parser/version.rb +1 -1
  25. data/lib/ooxml_parser/xlsx_parser/workbook/worksheet/{xlsx_column_properties.rb → xlsx_columns/xlsx_column_properties.rb} +0 -13
  26. data/lib/ooxml_parser/xlsx_parser/workbook/worksheet/xlsx_columns.rb +28 -0
  27. data/lib/ooxml_parser/xlsx_parser/workbook/worksheet.rb +2 -2
  28. metadata +15 -13
  29. /data/lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/{animation_effect → time_node_list/animation_effect}/animation_effect.rb +0 -0
  30. /data/lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/{set_time_node → time_node_list/set_time_node}/behavior/behavior.rb +0 -0
  31. /data/lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/{set_time_node → time_node_list/set_time_node}/behavior/target_element.rb +0 -0
  32. /data/lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/{set_time_node → time_node_list/set_time_node}/set_time_node.rb +0 -0
  33. /data/lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/{time_node → time_node_list/time_node}/common_timing/codition_list/condition.rb +0 -0
  34. /data/lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/{time_node → time_node_list/time_node}/common_timing/condition_list.rb +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 836b1f53810ef1ab5717cf7652d4b7a95dcc3a85bc4ec9cf752737a8358e4bbf
4
- data.tar.gz: d34904dbdfd71e530fd6e4841350d5a2e4aa451e276f9ceae3e5def4ba6cf88a
3
+ metadata.gz: a8c7e158e72093d65c4d1b16f922e74a2247e56a59fee2f2927b78cc5f1db5f2
4
+ data.tar.gz: c492e2f255c1333576ace90867e0ef05901737e84be8419eea65afdac7704fcc
5
5
  SHA512:
6
- metadata.gz: b6bd00887e2cfb939a2e398a7bb11563257d4eb7e3bd472660fca7075beeb49dc7a6bd4a4690ca7058d94df535080d5a08e92a1875f2c45391c67c12563dbf8d
7
- data.tar.gz: 73964ba2f185ada0b486b63b40e69c379ad2b3b46687b635c5a19cb04a1466e900fb1b9a16be678dfaed8f7f450c56b311d9c472247594128392aea4202d071c
6
+ metadata.gz: b4e27b723b95306eb10460667885db44490f774bc386ae8dc73868ef3ad41ccf5c71c3b48cec2f0187a6fc56926eb9fd966180b141bf46706666dfe3c5934627
7
+ data.tar.gz: 0b0fef55b19efde661e3c8440ba797fecc20c29465962d2cdd9daaf95c36b5149594d3376c6705a606ff8dac28cb9b9df5edb2abb77fa2b49e67af508025c40b
@@ -19,5 +19,10 @@ module OoxmlParser
19
19
  end
20
20
  self
21
21
  end
22
+
23
+ alias string reference
24
+
25
+ extend Gem::Deprecate
26
+ deprecate :string, 'reference', 2069, 1
22
27
  end
23
28
  end
@@ -67,7 +67,7 @@ module OoxmlParser
67
67
  next unless val
68
68
  next if val.xpath('c:numRef').empty?
69
69
 
70
- @data << ChartCellsRange.new(parent: self).parse(val.xpath('c:numRef').first).dup
70
+ @data << ChartCellsRange.new(parent: self).parse(val.xpath('c:numRef').first)
71
71
  when 'dLbls'
72
72
  @display_labels = DisplayLabelsProperties.new(parent: self).parse(chart_props_node_child)
73
73
  when 'varyColors'
@@ -86,77 +86,7 @@ module OoxmlParser
86
86
  chart_xml.xpath('*').each do |chart_node|
87
87
  case chart_node.name
88
88
  when 'chartSpace'
89
- chart_node.xpath('*').each do |chart_space_node_child|
90
- case chart_space_node_child.name
91
- when 'AlternateContent'
92
- @alternate_content = AlternateContent.new(parent: self).parse(chart_space_node_child)
93
- when 'spPr'
94
- @shape_properties = DocxShapeProperties.new(parent: self).parse(chart_space_node_child)
95
- when 'chart'
96
- chart_space_node_child.xpath('*').each do |chart_node_child|
97
- case chart_node_child.name
98
- when 'plotArea'
99
- chart_node_child.xpath('*').each do |plot_area_node_child|
100
- next unless type.empty?
101
-
102
- case plot_area_node_child.name
103
- when 'barChart'
104
- @type = :bar
105
- bar_dir_node = plot_area_node_child.xpath('c:barDir')
106
- @type = :column if bar_dir_node.first.attribute('val').value == 'col'
107
- parse_properties(plot_area_node_child)
108
- when 'lineChart'
109
- @type = :line
110
- parse_properties(plot_area_node_child)
111
- when 'areaChart'
112
- @type = :area
113
- parse_properties(plot_area_node_child)
114
- when 'bubbleChart'
115
- @type = :bubble
116
- parse_properties(plot_area_node_child)
117
- when 'doughnutChart'
118
- @type = :doughnut
119
- parse_properties(plot_area_node_child)
120
- when 'pieChart'
121
- @type = :pie
122
- parse_properties(plot_area_node_child)
123
- when 'scatterChart'
124
- @type = :point
125
- parse_properties(plot_area_node_child)
126
- when 'radarChart'
127
- @type = :radar
128
- parse_properties(plot_area_node_child)
129
- when 'stockChart'
130
- @type = :stock
131
- parse_properties(plot_area_node_child)
132
- when 'surface3DChart'
133
- @type = :surface_3d
134
- parse_properties(plot_area_node_child)
135
- when 'line3DChart'
136
- @type = :line_3d
137
- parse_properties(plot_area_node_child)
138
- when 'bar3DChart'
139
- @type = :bar_3d
140
- parse_properties(plot_area_node_child)
141
- when 'pie3DChart'
142
- @type = :pie_3d
143
- parse_properties(plot_area_node_child)
144
- end
145
- end
146
- parse_axis(chart_node_child)
147
- @plot_area = PlotArea.new(parent: self).parse(chart_node_child)
148
- when 'title'
149
- @title = ChartAxisTitle.new(parent: self).parse(chart_node_child)
150
- when 'legend'
151
- @legend = ChartLegend.new(parent: self).parse(chart_node_child)
152
- when 'view3D'
153
- @view_3d = View3D.new(parent: self).parse(chart_node_child)
154
- when 'pivotFmts'
155
- @pivot_formats = PivotFormats.new(parent: self).parse(chart_node_child)
156
- end
157
- end
158
- end
159
- end
89
+ parse_chart_space(chart_node)
160
90
  end
161
91
  end
162
92
  parse_relationships
@@ -166,6 +96,76 @@ module OoxmlParser
166
96
 
167
97
  private
168
98
 
99
+ # Parse 'chartSpace' node
100
+ # @return [nil]
101
+ def parse_chart_space(chart_space_node)
102
+ chart_space_node.xpath('*').each do |chart_space_node_child|
103
+ case chart_space_node_child.name
104
+ when 'AlternateContent'
105
+ @alternate_content = AlternateContent.new(parent: self).parse(chart_space_node_child)
106
+ when 'spPr'
107
+ @shape_properties = DocxShapeProperties.new(parent: self).parse(chart_space_node_child)
108
+ when 'chart'
109
+ chart_space_node_child.xpath('*').each do |chart_node_child|
110
+ case chart_node_child.name
111
+ when 'plotArea'
112
+ chart_node_child.xpath('*').each do |plot_area_node_child|
113
+ next unless type.empty?
114
+
115
+ parse_chart_type(plot_area_node_child)
116
+ parse_properties(plot_area_node_child)
117
+ end
118
+ parse_axis(chart_node_child)
119
+ @plot_area = PlotArea.new(parent: self).parse(chart_node_child)
120
+ when 'title'
121
+ @title = ChartAxisTitle.new(parent: self).parse(chart_node_child)
122
+ when 'legend'
123
+ @legend = ChartLegend.new(parent: self).parse(chart_node_child)
124
+ when 'view3D'
125
+ @view_3d = View3D.new(parent: self).parse(chart_node_child)
126
+ when 'pivotFmts'
127
+ @pivot_formats = PivotFormats.new(parent: self).parse(chart_node_child)
128
+ end
129
+ end
130
+ end
131
+ end
132
+ end
133
+
134
+ # Parse chart type and properties
135
+ # @return [nil]
136
+ def parse_chart_type(plot_area_node_child)
137
+ case plot_area_node_child.name
138
+ when 'barChart'
139
+ @type = :bar
140
+ bar_dir_node = plot_area_node_child.xpath('c:barDir')
141
+ @type = :column if bar_dir_node.first.attribute('val').value == 'col'
142
+ when 'lineChart'
143
+ @type = :line
144
+ when 'areaChart'
145
+ @type = :area
146
+ when 'bubbleChart'
147
+ @type = :bubble
148
+ when 'doughnutChart'
149
+ @type = :doughnut
150
+ when 'pieChart'
151
+ @type = :pie
152
+ when 'scatterChart'
153
+ @type = :point
154
+ when 'radarChart'
155
+ @type = :radar
156
+ when 'stockChart'
157
+ @type = :stock
158
+ when 'surface3DChart'
159
+ @type = :surface_3d
160
+ when 'line3DChart'
161
+ @type = :line_3d
162
+ when 'bar3DChart'
163
+ @type = :bar_3d
164
+ when 'pie3DChart'
165
+ @type = :pie_3d
166
+ end
167
+ end
168
+
169
169
  # Perform parsing of axis info
170
170
  # @param node [Nokogiri::XML:Element] node to parse
171
171
  # @return [void]
@@ -2,20 +2,20 @@
2
2
 
3
3
  module OoxmlParser
4
4
  # Class for working with TextBox (w:txbxContent)
5
- class TextBox
5
+ class TextBox < OOXMLDocumentObject
6
6
  # Parse TextBox List
7
7
  # @param [Nokogiri::XML:Node] node with TextBox
8
8
  # @return [Array] array of elements
9
- def self.parse_list(node, parent: nil)
9
+ def parse_list(node)
10
10
  elements = []
11
11
  text_box_content_node = node.xpath('w:txbxContent').first
12
12
 
13
13
  text_box_content_node&.xpath('*')&.each_with_index do |textbox_element, i|
14
14
  case textbox_element.name
15
15
  when 'p'
16
- DocumentStructure.default_paragraph_style = DocxParagraph.new
17
- DocumentStructure.default_paragraph_style.spacing = Spacing.new(0, 0.35, 1.15, :multiple)
18
- elements << DocumentStructure.default_paragraph_style.dup.parse(textbox_element, i, parent: parent)
16
+ textbox_paragraph = DocxParagraph.new
17
+ textbox_paragraph.spacing = Spacing.new(0, 0.35, 1.15, :multiple)
18
+ elements << textbox_paragraph.parse(textbox_element, i, parent: parent)
19
19
  when 'tbl'
20
20
  elements << Table.new(parent: parent).parse(textbox_element, i)
21
21
  end
@@ -16,7 +16,7 @@ module OoxmlParser
16
16
  node.xpath('*').each do |node_child|
17
17
  case node_child.name
18
18
  when 'textbox'
19
- @text_box = TextBox.parse_list(node_child, parent: self)
19
+ @text_box = TextBox.new(parent: parent).parse_list(node_child)
20
20
  when 'imagedata'
21
21
  @file_reference = FileReference.new(parent: self).parse(node_child)
22
22
  when 'fill'
@@ -5,12 +5,6 @@ module OoxmlParser
5
5
  module ColorHelper
6
6
  # @return [String] value for auto string
7
7
  AUTO_STRING_VALUE = 'auto'
8
- # @return [Regexp] regexp for hex string with 3 digits
9
- REGEXP_THREE_DIGITS = /(.)(.)(.)/.freeze
10
- # @return [Regexp] regexp for hex string with 6 digits
11
- REGEXP_SIX_DIGITS = /(..)(..)(..)/.freeze
12
- # @return [Regexp] regexp for hex string with 8 digits
13
- REGEXP_EIGHT_DIGITS = /(..)(..)(..)(..)/.freeze
14
8
 
15
9
  # Parse string in hex
16
10
  # @param [String] hex_string with or without alpha-channel
@@ -19,11 +13,11 @@ module OoxmlParser
19
13
 
20
14
  case hex_string.length
21
15
  when 3
22
- @red, @green, @blue = hex_string.match(REGEXP_THREE_DIGITS).captures.map(&:hex)
16
+ @red, @green, @blue = hex_string.chars.map(&:hex)
23
17
  when 6
24
- @red, @green, @blue = hex_string.match(REGEXP_SIX_DIGITS).captures.map(&:hex)
18
+ @red, @green, @blue = hex_string.unpack('A2A2A2').map(&:hex)
25
19
  when 8
26
- @alpha_channel, @red, @green, @blue = hex_string.match(REGEXP_EIGHT_DIGITS).captures.map(&:hex)
20
+ @alpha_channel, @red, @green, @blue = hex_string.unpack('A2A2A2A2').map(&:hex)
27
21
  end
28
22
  self
29
23
  end
@@ -112,6 +112,16 @@ module OoxmlParser
112
112
  end
113
113
  end
114
114
 
115
+ # Check if other color is within delta with current color
116
+ # @param other [Color] color to compare
117
+ # @param delta [Integer] max delta for each of specters
118
+ # @return [True, False] result of comparison
119
+ def within_delta?(other, delta)
120
+ (red - other.red).abs < delta &&
121
+ (green - other.green).abs < delta &&
122
+ (blue - other.blue).abs < delta
123
+ end
124
+
115
125
  # To compare color, which look alike
116
126
  # @param [String or Color] color_to_check color to compare
117
127
  # @param [Integer] delta max delta for each of specters
@@ -128,9 +138,7 @@ module OoxmlParser
128
138
  return false if !none? && color_to_check.none?
129
139
  return true if self == color_to_check
130
140
 
131
- (red - color_to_check.red).abs < delta &&
132
- (green - color_to_check.green).abs < delta &&
133
- (blue - color_to_check.blue).abs < delta
141
+ within_delta?(color_to_check, delta)
134
142
  end
135
143
 
136
144
  # Apply tint to color
@@ -47,6 +47,8 @@ module OoxmlParser
47
47
  return true if value.to_s == 'true'
48
48
  return false if value.to_s == '0'
49
49
  return false if value.to_s == 'false'
50
+
51
+ raise ArgumentError, "Invalid value for boolean attribute: #{value}"
50
52
  end
51
53
 
52
54
  # @return [Nokogiri::XML::Document] result of parsing xml via nokogiri
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OoxmlParser
4
- # Class to describe spacing
5
- class LineSpacing < OOXMLDocumentObject
4
+ # Class to describe spacing valued child
5
+ class SpacingValuedChild < OOXMLDocumentObject
6
6
  # @return [ValuedChild] spacing percent
7
7
  attr_reader :spacing_percent
8
8
  # @return [ValuedChild] spacing point
@@ -15,14 +15,23 @@ module OoxmlParser
15
15
  node.xpath('*').each do |node_child|
16
16
  case node_child.name
17
17
  when 'spcPct'
18
- @spacing_percent = ValuedChild.new(:integer, parent: self).parse(node_child)
18
+ @spacing_percent = ValuedChild.new(:float, parent: self).parse(node_child)
19
19
  when 'spcPts'
20
- @spacing_points = ValuedChild.new(:integer, parent: self).parse(node_child)
20
+ @spacing_points = ValuedChild.new(:float, parent: self).parse(node_child)
21
21
  end
22
22
  end
23
23
  self
24
24
  end
25
25
 
26
+ # Convert to OoxmlSize
27
+ # @return [OoxmlSize]
28
+ def to_ooxml_size
29
+ return OoxmlSize.new(@spacing_percent.value, :one_1000th_percent) if @spacing_percent
30
+ return OoxmlSize.new(@spacing_points.value, :spacing_point) if @spacing_points
31
+
32
+ raise 'Unknown spacing child type'
33
+ end
34
+
26
35
  # @return [Symbol] rule used to determine line spacing
27
36
  def rule
28
37
  return :multiple if @spacing_percent
@@ -2,7 +2,7 @@
2
2
 
3
3
  # @author Pavel.Lobashov
4
4
 
5
- require_relative 'spacing/line_spacing'
5
+ require_relative 'spacing/spacing_valued_child'
6
6
  module OoxmlParser
7
7
  # Class to describe spacing
8
8
  class Spacing
@@ -69,30 +69,18 @@ module OoxmlParser
69
69
  # @param [Nokogiri::XML:Element] node with Spacing
70
70
  # @return [Nothing]
71
71
  def parse(node)
72
- node.xpath('*').each do |spacing_node_child|
73
- case spacing_node_child.name
72
+ node.xpath('*').each do |node_child|
73
+ case node_child.name
74
74
  when 'lnSpc'
75
- self.line = Spacing.parse_spacing_value(spacing_node_child)
76
- @line_spacing = LineSpacing.new(parent: self).parse(spacing_node_child)
75
+ @line_spacing = SpacingValuedChild.new(parent: self).parse(node_child)
76
+ self.line = @line_spacing.to_ooxml_size
77
77
  self.line_rule = @line_spacing.rule
78
78
  when 'spcBef'
79
- self.before = Spacing.parse_spacing_value(spacing_node_child)
79
+ @spacing_before = SpacingValuedChild.new(parent: self).parse(node_child)
80
+ self.before = @spacing_before.to_ooxml_size
80
81
  when 'spcAft'
81
- self.after = Spacing.parse_spacing_value(spacing_node_child)
82
- end
83
- end
84
- end
85
-
86
- # Parse values of spacing number
87
- # @param [Nokogiri::XML:Element] node with Spacing
88
- # @return [Float] value of spacing number
89
- def self.parse_spacing_value(node)
90
- node.xpath('*').each do |spacing_node_child|
91
- case spacing_node_child.name
92
- when 'spcPct'
93
- return OoxmlSize.new(spacing_node_child.attribute('val').value.to_f, :one_1000th_percent)
94
- when 'spcPts'
95
- return OoxmlSize.new(spacing_node_child.attribute('val').value.to_f, :spacing_point)
82
+ @spacing_after = SpacingValuedChild.new(parent: self).parse(node_child)
83
+ self.after = @spacing_after.to_ooxml_size
96
84
  end
97
85
  end
98
86
  end
@@ -36,10 +36,10 @@ module OoxmlParser
36
36
  when 'tcPr'
37
37
  @properties = CellProperties.new(parent: self).parse(node_child)
38
38
  when 'p'
39
- @elements << DocumentStructure.default_table_paragraph_style.dup.parse(node_child,
40
- 0,
41
- DocumentStructure.default_table_run_style,
42
- parent: self)
39
+ @elements << root_object.default_table_paragraph_style.dup.parse(node_child,
40
+ 0,
41
+ root_object.default_table_run_style,
42
+ parent: self)
43
43
  when 'sdt'
44
44
  @elements << StructuredDocumentTag.new(parent: self).parse(node_child)
45
45
  when 'tbl'
@@ -27,6 +27,7 @@ module OoxmlParser
27
27
  @default_font_style = FontStyle.new
28
28
  @unpacked_folder = params.fetch(:unpacked_folder, nil)
29
29
  @xmls_stack = []
30
+ @relationships_cache = {}
30
31
  super(parent: nil)
31
32
  end
32
33
 
@@ -56,8 +57,17 @@ module OoxmlParser
56
57
  rels_path = dir + "_rels/#{File.basename(@xmls_stack.last)}.rels"
57
58
  raise LoadError, "Cannot find .rels file by path: #{rels_path}" unless File.exist?(rels_path)
58
59
 
59
- relationships = Relationships.new.parse_file(rels_path)
60
- relationships.target_by_id(id)
60
+ cache_relationships(rels_path)
61
+ @relationships_cache[rels_path].target_by_id(id)
62
+ end
63
+
64
+ private
65
+
66
+ # Store relationships to cache
67
+ def cache_relationships(rels_path)
68
+ return if @relationships_cache.key?(rels_path)
69
+
70
+ @relationships_cache[rels_path] = Relationships.new.parse_file(rels_path)
61
71
  end
62
72
  end
63
73
  end
@@ -9,19 +9,19 @@ module OoxmlParser
9
9
  parse_default_style_paragraph_properties
10
10
  parse_default_style_run_properties
11
11
  parse_default_character_style
12
- DocumentStructure.default_table_paragraph_style = DocumentStructure.default_paragraph_style.dup
13
- DocumentStructure.default_table_paragraph_style.spacing = Spacing.new(0, 0, 1, :auto)
14
- DocumentStructure.default_table_run_style = DocumentStructure.default_run_style.dup
12
+ root_object.default_table_paragraph_style = root_object.default_paragraph_style.dup
13
+ root_object.default_table_paragraph_style.spacing = Spacing.new(0, 0, 1, :auto)
14
+ root_object.default_table_run_style = root_object.default_run_style.dup
15
15
  parse_default_table_style
16
16
  end
17
17
 
18
18
  # Perform parsing styles.xml
19
19
  def parse_styles
20
20
  file = "#{root_object.unpacked_folder}/word/styles.xml"
21
- DocumentStructure.default_paragraph_style = DocxParagraph.new(parent: self)
22
- DocumentStructure.default_table_paragraph_style = DocxParagraph.new(parent: self)
23
- DocumentStructure.default_run_style = DocxParagraphRun.new(parent: self)
24
- DocumentStructure.default_table_run_style = DocxParagraphRun.new(parent: self)
21
+ root_object.default_paragraph_style = DocxParagraph.new(parent: self)
22
+ root_object.default_table_paragraph_style = DocxParagraph.new(parent: self)
23
+ root_object.default_run_style = DocxParagraphRun.new(parent: self)
24
+ root_object.default_table_run_style = DocxParagraphRun.new(parent: self)
25
25
 
26
26
  return unless File.exist?(file)
27
27
 
@@ -29,18 +29,18 @@ module OoxmlParser
29
29
  @numbering = Numbering.new(parent: self).parse
30
30
 
31
31
  if @styles&.document_defaults&.paragraph_properties_default
32
- DocumentStructure.default_paragraph_style = DocxParagraph.new(parent: self)
33
- .parse(@styles.document_defaults
34
- .paragraph_properties_default
35
- .raw_node, 0)
32
+ root_object.default_paragraph_style = DocxParagraph.new(parent: self)
33
+ .parse(@styles.document_defaults
34
+ .paragraph_properties_default
35
+ .raw_node, 0)
36
36
  end
37
37
  if @styles&.document_defaults&.run_properties_default&.run_properties
38
- DocumentStructure.default_run_style = DocxParagraphRun.new(parent: self)
39
- .parse_properties(@styles
40
- .document_defaults
41
- .run_properties_default
42
- .run_properties
43
- .raw_node)
38
+ root_object.default_run_style = DocxParagraphRun.new(parent: self)
39
+ .parse_properties(@styles
40
+ .document_defaults
41
+ .run_properties_default
42
+ .run_properties
43
+ .raw_node)
44
44
  end
45
45
  parse_default_style
46
46
  end
@@ -50,16 +50,16 @@ module OoxmlParser
50
50
  def parse_default_style_paragraph_properties
51
51
  return unless @styles&.default_style(:paragraph)&.paragraph_properties_node
52
52
 
53
- DocxParagraph.new.parse_paragraph_style(@styles.default_style(:paragraph)
54
- .paragraph_properties_node,
55
- DocumentStructure.default_run_style)
53
+ DocxParagraph.new(parent: self).parse_paragraph_style(@styles.default_style(:paragraph)
54
+ .paragraph_properties_node,
55
+ root_object.default_run_style)
56
56
  end
57
57
 
58
58
  def parse_default_style_run_properties
59
59
  return unless @styles&.default_style(:paragraph)&.run_properties_node
60
60
 
61
- DocumentStructure.default_run_style
62
- .parse_properties(@styles.default_style(:paragraph)
61
+ root_object.default_run_style
62
+ .parse_properties(@styles.default_style(:paragraph)
63
63
  .run_properties_node)
64
64
  end
65
65
 
@@ -67,8 +67,8 @@ module OoxmlParser
67
67
  def parse_default_character_style
68
68
  return unless @styles&.default_style(:character)&.run_properties_node
69
69
 
70
- DocumentStructure.default_run_style
71
- .parse_properties(@styles.default_style(:character)
70
+ root_object.default_run_style
71
+ .parse_properties(@styles.default_style(:character)
72
72
  .run_properties_node)
73
73
  end
74
74
 
@@ -76,9 +76,9 @@ module OoxmlParser
76
76
  def parse_default_table_style
77
77
  return unless @styles&.default_style(:table)&.run_properties_node
78
78
 
79
- DocumentStructure.default_table_run_style
80
- .parse_properties(@styles.default_style(:table)
81
- .run_properties_node)
79
+ root_object.default_table_run_style
80
+ .parse_properties(@styles.default_style(:table)
81
+ .run_properties_node)
82
82
  end
83
83
  end
84
84
  end
@@ -38,7 +38,7 @@ module OoxmlParser
38
38
  node.xpath('*').each do |node_child|
39
39
  case node_child.name
40
40
  when 'textbox'
41
- @elements = TextBox.parse_list(node_child, parent: self)
41
+ @elements = TextBox.new(parent: parent).parse_list(node_child)
42
42
  end
43
43
  end
44
44
  self
@@ -109,7 +109,6 @@ module OoxmlParser
109
109
  custom_character_style = default_character_style.dup
110
110
  custom_character_style.parent = self
111
111
  char_number = 0
112
- comments = []
113
112
  node.attributes.each do |key, value|
114
113
  case key
115
114
  when 'paraId'
@@ -136,27 +135,26 @@ module OoxmlParser
136
135
  @page_numbering = true if field_simple.page_numbering?
137
136
  character_styles_array += field_simple.runs
138
137
  when 'r'
139
- character_style = custom_character_style.dup
138
+ run = custom_character_style.dup
140
139
  node_child.xpath('w:instrText').each do |insrt_text|
141
140
  @page_numbering = true if insrt_text.text.include?('PAGE')
142
141
  end
143
- character_style.parse(node_child, char_number, parent: self)
144
- character_style.comments = comments.dup
145
- character_styles_array << character_style.dup
146
- character_styles_array.last.shape = character_style.shape if character_style.shape
142
+ run.parse(node_child, char_number, parent: self)
143
+ character_styles_array << run
147
144
  char_number += 1
148
145
  when 'hyperlink'
149
146
  @hyperlink = Hyperlink.new(parent: self).parse(node_child)
150
- character_style = default_character_style.dup
151
- character_style.parent = self
147
+ hyperlink_run = default_character_style.dup
148
+ hyperlink_run.parent = self
152
149
  if @hyperlink.id
153
- character_style.link = Hyperlink.new(parent: character_style).parse(node_child)
150
+ @hyperlink.parent = hyperlink_run
151
+ hyperlink_run.link = @hyperlink
154
152
  elsif @hyperlink.anchor
155
- character_style.link = @hyperlink.anchor
153
+ hyperlink_run.link = @hyperlink.anchor
156
154
  end
157
155
  node_child.xpath('w:r').each do |r_tag|
158
- character_style.parse(r_tag, char_number, parent: self)
159
- character_styles_array << character_style.dup
156
+ hyperlink_run.parse(r_tag, char_number, parent: self)
157
+ character_styles_array << hyperlink_run
160
158
  char_number += 1
161
159
  end
162
160
  node_child.xpath('w:fldSimple').each do |simple_field|
@@ -206,7 +204,7 @@ module OoxmlParser
206
204
  @paragraph_style_ref = ParagraphStyleRef.new(parent: self).parse(node_child)
207
205
  fill_style_data(default_char_style)
208
206
  when 'ind'
209
- @ind = DocumentStructure.default_paragraph_style.instance_variable_get(:@ind).dup.parse(node_child)
207
+ @ind = root_object.default_paragraph_style.instance_variable_get(:@ind).dup.parse(node_child)
210
208
  when 'numPr'
211
209
  @numbering = NumberingProperties.new(parent: self).parse(node_child)
212
210
  when 'jc'
@@ -218,14 +216,7 @@ module OoxmlParser
218
216
  @spacing = @spacing.fetch_from_valued_spacing(@valued_spacing)
219
217
  when 'sectPr'
220
218
  @sector_properties = PageProperties.new(parent: self).parse(node_child, self, default_char_style)
221
- @section_break = case @sector_properties.type
222
- when 'oddPage'
223
- 'Odd page'
224
- when 'continuous'
225
- 'Current Page'
226
- else
227
- 'Next Page'
228
- end
219
+ @section_break ||= @sector_properties.section_break
229
220
  end
230
221
  end
231
222
  @parent = parent
@@ -65,7 +65,7 @@ module OoxmlParser
65
65
 
66
66
  paragraph_number = 0
67
67
  footnote.xpath('w:p').each do |paragraph|
68
- @elements << DocumentStructure.default_paragraph_style.dup.parse(paragraph, paragraph_number, DocumentStructure.default_run_style, parent: self)
68
+ @elements << root_object.default_paragraph_style.dup.parse(paragraph, paragraph_number, root_object.default_run_style, parent: self)
69
69
  paragraph_number += 1
70
70
  end
71
71
  end
@@ -5,11 +5,23 @@ module OoxmlParser
5
5
  class Note < OOXMLDocumentObject
6
6
  attr_accessor :type, :elements, :assigned_to
7
7
 
8
- def initialize
8
+ def initialize(type: 'unknown')
9
9
  @elements = []
10
+ @type = type
10
11
  super(parent: nil)
11
12
  end
12
13
 
14
+ # @return [String] xpath for note in xml object
15
+ def note_base_xpath
16
+ @note_base_xpath ||= if @type.include?('footer')
17
+ '//w:ftr'
18
+ elsif @type.include?('header')
19
+ '//w:hdr'
20
+ else
21
+ raise NameError, "Unknown note type: #{@type}"
22
+ end
23
+ end
24
+
13
25
  # Parse note data
14
26
  # @param params [Hash] data to parse
15
27
  # @return [Note] result of parsing
@@ -18,12 +30,7 @@ module OoxmlParser
18
30
  @assigned_to = params[:assigned_to]
19
31
  @parent = params[:parent]
20
32
  doc = parse_xml(file_path(params[:target]))
21
- if @type.include?('footer')
22
- xpath_note = '//w:ftr'
23
- elsif @type.include?('header')
24
- xpath_note = '//w:hdr'
25
- end
26
- doc.search(xpath_note).each do |ftr|
33
+ doc.search(note_base_xpath).each do |ftr|
27
34
  number = 0
28
35
  ftr.xpath('*').each do |sub_element|
29
36
  case sub_element.name
@@ -19,9 +19,10 @@ module OoxmlParser
19
19
  # @return [True, False] Specifies whether the section should have a different header and footer for its first page
20
20
  attr_reader :title_page
21
21
 
22
- def initialize(parent: nil)
22
+ def initialize(parent: nil, type: nil)
23
23
  @notes = []
24
- super
24
+ @type = type
25
+ super(parent: parent)
25
26
  end
26
27
 
27
28
  # Parse PageProperties data
@@ -87,5 +88,17 @@ module OoxmlParser
87
88
  end
88
89
  self
89
90
  end
91
+
92
+ # @return [String] type of section break
93
+ def section_break
94
+ @section_break ||= case type
95
+ when 'oddPage'
96
+ 'Odd page'
97
+ when 'continuous'
98
+ 'Current Page'
99
+ else
100
+ 'Next Page'
101
+ end
102
+ end
90
103
  end
91
104
  end
@@ -45,6 +45,14 @@ module OoxmlParser
45
45
  attr_accessor :comments_document
46
46
  # @return [CommentsExtended] extended comments
47
47
  attr_accessor :comments_extended
48
+ # @return [DocxParagraph] default paragraph style
49
+ attr_accessor :default_paragraph_style
50
+ # @return [DocxParagraphRun] default run style
51
+ attr_accessor :default_run_style
52
+ # @return [DocxParagraph] default table paragraph style
53
+ attr_accessor :default_table_paragraph_style
54
+ # @return [DocxParagraphRun] default table run style
55
+ attr_accessor :default_table_run_style
48
56
 
49
57
  def initialize(params = {})
50
58
  @elements = []
@@ -162,8 +170,8 @@ module OoxmlParser
162
170
  @content_types = ContentTypes.new(parent: self).parse
163
171
  @root_subfolder = 'word/'
164
172
  @comments = []
165
- DocumentStructure.default_paragraph_style = DocxParagraph.new
166
- DocumentStructure.default_run_style = DocxParagraphRun.new(parent: self)
173
+ @default_paragraph_style = DocxParagraph.new
174
+ @default_run_style = DocxParagraphRun.new(parent: self)
167
175
  @theme = PresentationTheme.new(parent: self).parse('word/theme/theme1.xml')
168
176
  @relationships = Relationships.new(parent: self).parse_file("#{root_object.unpacked_folder}word/_rels/document.xml.rels")
169
177
  parse_styles
@@ -180,7 +188,7 @@ module OoxmlParser
180
188
  when 'p'
181
189
  child = element.child
182
190
  unless child.nil? && @elements.last.instance_of?(Table)
183
- paragraph_style = DocumentStructure.default_paragraph_style.dup.parse(element, number, DocumentStructure.default_run_style, parent: self)
191
+ paragraph_style = default_paragraph_style.dup.parse(element, number, default_run_style, parent: self)
184
192
  number += 1
185
193
  @elements << paragraph_style.dup
186
194
  end
@@ -196,8 +204,8 @@ module OoxmlParser
196
204
  end
197
205
  body.xpath('w:sectPr').each do |sect_pr|
198
206
  @page_properties = PageProperties.new(parent: self).parse(sect_pr,
199
- DocumentStructure.default_paragraph_style,
200
- DocumentStructure.default_run_style)
207
+ default_paragraph_style,
208
+ default_run_style)
201
209
  @notes = page_properties.notes # keep copy of notes to compatibility with previous docx models
202
210
  end
203
211
  end
@@ -212,9 +220,5 @@ module OoxmlParser
212
220
  @settings = DocumentSettings.new(parent: self).parse
213
221
  self
214
222
  end
215
-
216
- class << self
217
- attr_accessor :default_table_run_style, :default_table_paragraph_style, :default_paragraph_style, :default_run_style
218
- end
219
223
  end
220
224
  end
@@ -3,14 +3,14 @@
3
3
  require_relative 'common_timing/condition_list'
4
4
  module OoxmlParser
5
5
  # Class for data of CommonTiming
6
- class CommonTiming
6
+ class CommonTiming < OOXMLDocumentObject
7
7
  attr_accessor :id, :duration, :restart, :children, :start_conditions, :end_conditions
8
8
 
9
9
  def initialize(parent: nil)
10
10
  @children = []
11
11
  @start_conditions = []
12
12
  @end_conditions = []
13
- @parent = parent
13
+ super(parent: parent)
14
14
  end
15
15
 
16
16
  # Parse CommonTiming object
@@ -35,7 +35,7 @@ module OoxmlParser
35
35
  when 'endCondLst'
36
36
  @end_conditions = ConditionList.new(parent: self).parse(node_child)
37
37
  when 'childTnLst'
38
- @children = TimeNode.parse_list(node_child)
38
+ @children = TimeNodeList.new(parent: self).parse(node_child).elements
39
39
  end
40
40
  end
41
41
  self
@@ -29,31 +29,5 @@ module OoxmlParser
29
29
  end
30
30
  self
31
31
  end
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
36
- def self.parse_list(timing_list_node)
37
- timings = []
38
- timing_list_node.xpath('*').each do |time_node|
39
- case time_node.name
40
- when 'par'
41
- timings << TimeNode.new(:parallel, parent: timings).parse(time_node)
42
- when 'seq'
43
- timings << TimeNode.new(:sequence, parent: timings).parse(time_node)
44
- when 'anim'
45
- timings << TimeNode.new(:animate, parent: timings).parse(time_node)
46
- when 'set'
47
- timings << SetTimeNode.new(parent: timings).parse(time_node)
48
- when 'animEffect'
49
- timings << AnimationEffect.new(parent: timings).parse(time_node)
50
- when 'video'
51
- timings << :video
52
- when 'audio'
53
- timings << TimeNode.new(:audio, parent: timings).parse(time_node)
54
- end
55
- end
56
- timings
57
- end
58
32
  end
59
33
  end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'time_node_list/time_node'
4
+ module OoxmlParser
5
+ # Class for parsing TimeNodeList object <p:tnLst>
6
+ class TimeNodeList < OOXMLDocumentObject
7
+ # @return [Array<Object>] list of elements
8
+ attr_reader :elements
9
+
10
+ def initialize(parent: nil)
11
+ @elements = []
12
+ super
13
+ end
14
+
15
+ # Parse TimeNodeList
16
+ # @param node [Nokogiri::XML::Element] node to parse
17
+ # @return [TimeNodeList] value of TimeNodeList
18
+ def parse(node)
19
+ node.xpath('*').each do |node_child|
20
+ case node_child.name
21
+ when 'par'
22
+ @elements << TimeNode.new(:parallel, parent: self).parse(node_child)
23
+ when 'seq'
24
+ @elements << TimeNode.new(:sequence, parent: self).parse(node_child)
25
+ when 'anim'
26
+ @elements << TimeNode.new(:animate, parent: self).parse(node_child)
27
+ when 'set'
28
+ @elements << SetTimeNode.new(parent: self).parse(node_child)
29
+ when 'animEffect'
30
+ @elements << AnimationEffect.new(parent: self).parse(node_child)
31
+ when 'video'
32
+ @elements << :video
33
+ when 'audio'
34
+ @elements << TimeNode.new(:audio, parent: self).parse(node_child)
35
+ end
36
+ end
37
+ self
38
+ end
39
+ end
40
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'timing/time_node'
3
+ require_relative 'timing/time_node_list'
4
4
  module OoxmlParser
5
5
  # Class for parsing `timing`
6
6
  class Timing < OOXMLDocumentObject
@@ -20,7 +20,7 @@ module OoxmlParser
20
20
  node.xpath('*').each do |node_child|
21
21
  case node_child.name
22
22
  when 'tnLst'
23
- @time_node_list = TimeNode.parse_list(node_child)
23
+ @time_node_list = TimeNodeList.new(parent: self).parse(node_child).elements
24
24
  end
25
25
  end
26
26
  self
@@ -4,6 +4,6 @@ module OoxmlParser
4
4
  # This module holds the RuboCop version information.
5
5
  module Version
6
6
  # [String] Version of Gem
7
- STRING = '0.35.0'
7
+ STRING = '0.36.0'
8
8
  end
9
9
  end
@@ -54,19 +54,6 @@ module OoxmlParser
54
54
  deprecate :from, 'min', 2099, 1
55
55
  deprecate :to, 'max', 2099, 1
56
56
 
57
- # Parse list of XlsxColumnProperties
58
- # @param columns_width_node [Nokogiri::XML:Element] node to parse
59
- # @param parent [OOXMLDocumentObject] parent of result objects
60
- # @return [Array<XlsxColumnProperties>] list of XlsxColumnProperties
61
- def self.parse_list(columns_width_node, parent: nil)
62
- columns = []
63
- columns_width_node.xpath('xmlns:col').each do |col_node|
64
- col = XlsxColumnProperties.new(parent: parent).parse(col_node)
65
- columns << col
66
- end
67
- columns
68
- end
69
-
70
57
  private
71
58
 
72
59
  # TODO: Currently width calculation use some magick number from old time ago
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'xlsx_columns/xlsx_column_properties'
4
+ module OoxmlParser
5
+ # Class for parsing XlsxColumns object <cols>
6
+ class XlsxColumns < OOXMLDocumentObject
7
+ # @return [Array<XlsxColumnProperties>] list of elements
8
+ attr_reader :elements
9
+
10
+ def initialize(parent: nil)
11
+ @elements = []
12
+ super
13
+ end
14
+
15
+ # Parse XlsxColumns
16
+ # @param node [Nokogiri::XML::Element] node to parse
17
+ # @return [XlsxColumns] value of TimeNodeList
18
+ def parse(node)
19
+ node.xpath('*').each do |node_child|
20
+ case node_child.name
21
+ when 'col'
22
+ @elements << XlsxColumnProperties.new(parent: parent).parse(node_child)
23
+ end
24
+ end
25
+ self
26
+ end
27
+ end
28
+ end
@@ -7,7 +7,7 @@ require_relative 'worksheet/sheet_format_properties'
7
7
  require_relative 'worksheet/sheet_view'
8
8
  require_relative 'worksheet/table_part'
9
9
  require_relative 'worksheet/worksheet_helper'
10
- require_relative 'worksheet/xlsx_column_properties'
10
+ require_relative 'worksheet/xlsx_columns'
11
11
  require_relative 'worksheet/xlsx_drawing'
12
12
  require_relative 'worksheet/xlsx_row'
13
13
  require_relative 'worksheet/xlsx_header_footer'
@@ -119,7 +119,7 @@ module OoxmlParser
119
119
  @hyperlinks << Hyperlink.new(parent: self).parse(hyperlink_node).dup
120
120
  end
121
121
  when 'cols'
122
- @columns = XlsxColumnProperties.parse_list(worksheet_node_child, parent: self)
122
+ @columns = XlsxColumns.new(parent: self).parse(worksheet_node_child).elements
123
123
  when 'autoFilter'
124
124
  @autofilter = Autofilter.new(parent: self).parse(worksheet_node_child)
125
125
  when 'tableParts'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ooxml_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.35.0
4
+ version: 0.36.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ONLYOFFICE
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2023-04-20 00:00:00.000000000 Z
13
+ date: 2023-05-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri
@@ -318,7 +318,7 @@ files:
318
318
  - lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_properties/paragraph_spacing.rb
319
319
  - lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_properties/paragraph_style_ref.rb
320
320
  - lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_properties/spacing.rb
321
- - lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_properties/spacing/line_spacing.rb
321
+ - lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_properties/spacing/spacing_valued_child.rb
322
322
  - lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_properties/tabs.rb
323
323
  - lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_properties/tabs/tab.rb
324
324
  - lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run.rb
@@ -488,14 +488,15 @@ files:
488
488
  - lib/ooxml_parser/pptx_parser/presentation/slide/presentation_notes.rb
489
489
  - lib/ooxml_parser/pptx_parser/presentation/slide/slide/shapes_grouping.rb
490
490
  - lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing.rb
491
- - lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/animation_effect/animation_effect.rb
492
- - lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/set_time_node/behavior/behavior.rb
493
- - lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/set_time_node/behavior/target_element.rb
494
- - lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/set_time_node/set_time_node.rb
495
- - lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/time_node.rb
496
- - lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/time_node/common_timing.rb
497
- - lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/time_node/common_timing/codition_list/condition.rb
498
- - lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/time_node/common_timing/condition_list.rb
491
+ - lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/time_node_list.rb
492
+ - lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/time_node_list/animation_effect/animation_effect.rb
493
+ - lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/time_node_list/set_time_node/behavior/behavior.rb
494
+ - lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/time_node_list/set_time_node/behavior/target_element.rb
495
+ - lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/time_node_list/set_time_node/set_time_node.rb
496
+ - lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/time_node_list/time_node.rb
497
+ - lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/time_node_list/time_node/common_timing.rb
498
+ - lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/time_node_list/time_node/common_timing/codition_list/condition.rb
499
+ - lib/ooxml_parser/pptx_parser/presentation/slide/slide/timing/time_node_list/time_node/common_timing/condition_list.rb
499
500
  - lib/ooxml_parser/pptx_parser/presentation/slide/slide_helper.rb
500
501
  - lib/ooxml_parser/pptx_parser/presentation/slide/transition/transition.rb
501
502
  - lib/ooxml_parser/pptx_parser/presentation/slide/transition/transition/sound_action.rb
@@ -591,7 +592,8 @@ files:
591
592
  - lib/ooxml_parser/xlsx_parser/workbook/worksheet/table_part/table_columns/table_column.rb
592
593
  - lib/ooxml_parser/xlsx_parser/workbook/worksheet/table_part/table_style_info.rb
593
594
  - lib/ooxml_parser/xlsx_parser/workbook/worksheet/worksheet_helper.rb
594
- - lib/ooxml_parser/xlsx_parser/workbook/worksheet/xlsx_column_properties.rb
595
+ - lib/ooxml_parser/xlsx_parser/workbook/worksheet/xlsx_columns.rb
596
+ - lib/ooxml_parser/xlsx_parser/workbook/worksheet/xlsx_columns/xlsx_column_properties.rb
595
597
  - lib/ooxml_parser/xlsx_parser/workbook/worksheet/xlsx_drawing.rb
596
598
  - lib/ooxml_parser/xlsx_parser/workbook/worksheet/xlsx_drawing/client_data.rb
597
599
  - lib/ooxml_parser/xlsx_parser/workbook/worksheet/xlsx_drawing/xlsx_drawing_position_parameters.rb
@@ -625,7 +627,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
625
627
  - !ruby/object:Gem::Version
626
628
  version: '0'
627
629
  requirements: []
628
- rubygems_version: 3.4.12
630
+ rubygems_version: 3.4.13
629
631
  signing_key:
630
632
  specification_version: 4
631
633
  summary: OoxmlParser Gem