ooxml_parser 0.35.0 → 0.36.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 (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