ooxml_parser 0.6.0 → 0.8.1

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 (95) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ooxml_parser.rb +1 -0
  3. data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart.rb +6 -0
  4. data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart/series.rb +2 -2
  5. data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart/series/series_text.rb +0 -2
  6. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/docx_drawing.rb +1 -20
  7. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/docx_drawing_distance_from_text.rb +3 -0
  8. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/docx_drawing_properties.rb +51 -4
  9. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/ooxml_coordinates.rb +1 -0
  10. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/ooxml_size.rb +4 -1
  11. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_blip.rb +1 -0
  12. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_blip/file_reference.rb +4 -0
  13. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_picture.rb +0 -2
  14. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/docx_shape/ooxml_text_box.rb +1 -3
  15. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/color/docx_color_scheme.rb +1 -0
  16. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/custom_geometry/docx_custom_geometry/docx_shape_line_path/docx_shape_line_element.rb +0 -2
  17. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_line.rb +1 -0
  18. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_properties.rb +12 -4
  19. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_size.rb +10 -3
  20. data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/old_docx_picture.rb +1 -3
  21. data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/shape/old_docx_shape_properties.rb +1 -3
  22. data/lib/ooxml_parser/common_parser/common_data/borders_properties.rb +3 -0
  23. data/lib/ooxml_parser/common_parser/common_data/color.rb +45 -79
  24. data/lib/ooxml_parser/common_parser/common_data/color/color_helper.rb +4 -3
  25. data/lib/ooxml_parser/common_parser/common_data/color/color_indexes.list +66 -0
  26. data/lib/ooxml_parser/common_parser/common_data/color/ooxml_color.rb +5 -0
  27. data/lib/ooxml_parser/common_parser/common_data/colors/color_properties.rb +8 -2
  28. data/lib/ooxml_parser/common_parser/common_data/colors/hsl_color.rb +11 -0
  29. data/lib/ooxml_parser/common_parser/common_data/colors/scheme_color.rb +1 -0
  30. data/lib/ooxml_parser/common_parser/common_data/colors/theme_colors.rb +4 -0
  31. data/lib/ooxml_parser/common_parser/common_data/content_types.rb +2 -0
  32. data/lib/ooxml_parser/common_parser/common_data/content_types/content_type_default.rb +3 -0
  33. data/lib/ooxml_parser/common_parser/common_data/content_types/content_type_override.rb +3 -0
  34. data/lib/ooxml_parser/common_parser/common_data/coordinates.rb +7 -0
  35. data/lib/ooxml_parser/common_parser/common_data/hyperlink.rb +14 -3
  36. data/lib/ooxml_parser/common_parser/common_data/ooxml_document_object.rb +28 -2
  37. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run.rb +3 -0
  38. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run/run_properties.rb +31 -15
  39. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run/run_properties/outline.rb +4 -2
  40. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/numbering_properties.rb +2 -0
  41. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/paragraph_borders.rb +1 -0
  42. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/spacing.rb +16 -13
  43. data/lib/ooxml_parser/common_parser/common_data/table.rb +2 -0
  44. data/lib/ooxml_parser/common_parser/common_data/table/margins/paragraph_margins.rb +3 -0
  45. data/lib/ooxml_parser/common_parser/common_data/table/margins/table_margins.rb +7 -0
  46. data/lib/ooxml_parser/common_parser/common_data/table/properties/table_position.rb +1 -0
  47. data/lib/ooxml_parser/common_parser/common_data/table/properties/table_style_properties/table_style_properties_helper.rb +4 -4
  48. data/lib/ooxml_parser/common_parser/common_data/table/row/cell/cell_properties.rb +4 -5
  49. data/lib/ooxml_parser/common_parser/common_data/table/row/cell/properties/borders.rb +6 -0
  50. data/lib/ooxml_parser/common_parser/common_data/table/table_grid.rb +3 -0
  51. data/lib/ooxml_parser/common_parser/common_data/underline.rb +7 -2
  52. data/lib/ooxml_parser/docx_parser/docx_data/document_structure.rb +41 -9
  53. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/comments/comment.rb +3 -0
  54. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/document_style.rb +2 -0
  55. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph.rb +25 -8
  56. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/bookmark_end.rb +1 -1
  57. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/comment_range_start.rb +1 -0
  58. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/pre_sub_superscript.rb +3 -0
  59. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run.rb +13 -3
  60. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/docx_paragraph_run_helpers.rb +4 -1
  61. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/shape.rb +0 -2
  62. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/frame_properties.rb +3 -0
  63. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/indents.rb +4 -2
  64. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/header_footer.rb +8 -4
  65. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/numbering.rb +5 -0
  66. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/columns.rb +3 -1
  67. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/note.rb +6 -2
  68. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/page_size.rb +1 -0
  69. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/styles.rb +2 -0
  70. data/lib/ooxml_parser/docx_parser/docx_parser.rb +3 -0
  71. data/lib/ooxml_parser/name.rb +1 -0
  72. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation.rb +2 -0
  73. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/presentation_theme.rb +3 -0
  74. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/presentation_theme/theme_color.rb +3 -0
  75. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb +5 -2
  76. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing/time_node.rb +3 -0
  77. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide_helper.rb +15 -1
  78. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/transition/transition.rb +3 -0
  79. data/lib/ooxml_parser/pptx_parser/pptx_parser.rb +4 -1
  80. data/lib/ooxml_parser/version.rb +2 -1
  81. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook.rb +21 -2
  82. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/chartsheet.rb +3 -0
  83. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache.rb +41 -0
  84. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache/pivot_cache_definition.rb +37 -0
  85. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache/pivot_cache_definition/cache_source.rb +33 -0
  86. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache/pivot_cache_definition/cache_source/worksheet_source.rb +26 -0
  87. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet.rb +2 -0
  88. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/cell_xfs/xf.rb +5 -0
  89. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/fills/fill.rb +2 -0
  90. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/fonts/font.rb +3 -0
  91. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet.rb +5 -0
  92. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/excel_comments.rb +4 -0
  93. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_column_properties.rb +4 -0
  94. data/lib/ooxml_parser/xlsx_parser/xlsx_parser.rb +3 -0
  95. metadata +65 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: af046e45d945d773885e2c8c9c8becef406a7e0c50a1f71161e1252b73295441
4
- data.tar.gz: 16e54721a7a8c6f066693343ad8950c88d136531b9f6a3a53d7d7154c199c699
3
+ metadata.gz: 07201a9a59d3d4b457115c2faf6c3e419eb9322064c25e8d793adb7439cd70ba
4
+ data.tar.gz: 18fe77d063dc4e6ef7554abcec151ab5987eb1754a6dcba80cbc258092e3a460
5
5
  SHA512:
6
- metadata.gz: 216969571d18f07e04e10c7499628dc59d131a531a7cf1f8abdaf390bba04f04912b5f4f3bc268cd06b45d4853eb9fe3347a1ef136cfa56f2e8f6b88fccde7ab
7
- data.tar.gz: a14b99b7e06bfd36c38fe2e52774e617cc60f94193314b5bad6200fe5d973cc854a8774aa7a43bdcd556bfec6a2f53c0dee59ff978442f49663bd8e3c43a5d2d
6
+ metadata.gz: a4583846a0c88a4dbb30c2ad727c3f444f15ef340904532cdc106b0cad70eaa2ee71ca5f8cdc6e26adac38e0caed12ca78519499b5a4391d7b0e9869a418488e
7
+ data.tar.gz: 35385dccda157dd0fef6d22c9ce0dde82630ab5861513eaee733f379532388722449fd993ff69327ca2b66f95b2219646d21bfa7b75439b6085db5cd1500fa22
@@ -29,6 +29,7 @@ module OoxmlParser
29
29
  @configuration ||= Configuration.new
30
30
  end
31
31
 
32
+ # Reset settings to default
32
33
  def self.reset
33
34
  @configuration = Configuration.new
34
35
  end
@@ -41,6 +41,9 @@ module OoxmlParser
41
41
  @parent = parent
42
42
  end
43
43
 
44
+ # Parse properties of Chart
45
+ # @param chart_prop_node [Nokogiri::XML:Element] node to parse
46
+ # @return [void]
44
47
  def parse_properties(chart_prop_node)
45
48
  chart_prop_node.xpath('*').each do |chart_props_node_child|
46
49
  case chart_props_node_child.name
@@ -71,6 +74,9 @@ module OoxmlParser
71
74
  extend Gem::Deprecate
72
75
  deprecate :data, 'series points interface', 2020, 1
73
76
 
77
+ # Parse Chart
78
+ # @param parent [OOOXMLDocumentObject] parent of chart
79
+ # @return [Chart] result of parsing
74
80
  def self.parse(parent: nil)
75
81
  chart = Chart.new(parent: parent)
76
82
  chart_xml = chart.parse_xml(OOXMLDocumentObject.current_xml)
@@ -11,7 +11,7 @@ module OoxmlParser
11
11
  attr_reader :order
12
12
  # @return [SeriesText] text of series
13
13
  attr_accessor :text
14
- # @return [Categories] categories of chart
14
+ # @return [SeriesText] categories of chart
15
15
  attr_accessor :categories
16
16
  # @return [DisplayLabelsProperties]
17
17
  attr_accessor :display_labels
@@ -35,7 +35,7 @@ module OoxmlParser
35
35
  when 'tx'
36
36
  @text = SeriesText.new(parent: self).parse(node_child)
37
37
  when 'cat'
38
- @categories = Categories.new(parent: self).parse(node_child)
38
+ @categories = SeriesText.new(parent: self).parse(node_child)
39
39
  when 'dLbls'
40
40
  @display_labels = DisplayLabelsProperties.new(parent: self).parse(node_child)
41
41
  when 'val'
@@ -20,6 +20,4 @@ module OoxmlParser
20
20
  self
21
21
  end
22
22
  end
23
-
24
- Categories = SeriesText
25
23
  end
@@ -30,34 +30,15 @@ module OoxmlParser
30
30
  when 'inline'
31
31
  @type = :inline
32
32
  end
33
- @properties.distance_from_text = DocxDrawingDistanceFromText.new(parent: self).parse(node_child)
34
- @properties.wrap = DocxWrapDrawing.new(parent: self).parse(node_child)
35
- node_child.attributes.each do |key, value|
36
- case key
37
- when 'relativeHeight'
38
- @properties.relative_height = value.value.to_i
39
- end
40
- end
41
33
  node_child.xpath('*').each do |content_node_child|
42
34
  case content_node_child.name
43
- when 'simplePos'
44
- @properties.simple_position = OOXMLCoordinates.parse(content_node_child)
45
- when 'extent'
46
- @properties.object_size = OOXMLCoordinates.parse(content_node_child, x_attr: 'cx', y_attr: 'cy', unit: :emu)
47
35
  when 'graphic'
48
36
  @graphic = DocxGraphic.new(parent: self).parse(content_node_child)
49
- when 'positionV'
50
- @properties.vertical_position = DocxDrawingPosition.new(parent: self).parse(content_node_child)
51
- when 'positionH'
52
- @properties.horizontal_position = DocxDrawingPosition.new(parent: self).parse(content_node_child)
53
- when 'sizeRelH'
54
- @properties.size_relative_horizontal = SizeRelativeHorizontal.new(parent: self).parse(content_node_child)
55
- when 'sizeRelV'
56
- @properties.size_relative_vertical = SizeRelativeVertical.new(parent: self).parse(content_node_child)
57
37
  when 'docPr'
58
38
  @doc_properties = DocProperties.new(parent: self).parse(content_node_child)
59
39
  end
60
40
  end
41
+ @properties.parse(node_child)
61
42
  end
62
43
  self
63
44
  end
@@ -5,6 +5,9 @@ module OoxmlParser
5
5
  class DocxDrawingDistanceFromText < OOXMLDocumentObject
6
6
  attr_accessor :top, :bottom, :left, :right
7
7
 
8
+ # Parse DocxDrawingDistanceFromText object
9
+ # @param node [Nokogiri::XML:Element] node to parse
10
+ # @return [DocxDrawingDistanceFromText] result of parsing
8
11
  def parse(node)
9
12
  node.attributes.each do |key, value|
10
13
  case key
@@ -8,9 +8,56 @@ require_relative 'docx_wrap_drawing'
8
8
  module OoxmlParser
9
9
  # Docx Drawing Properties
10
10
  class DocxDrawingProperties < OOXMLDocumentObject
11
- attr_accessor :distance_from_text, :simple_position, :wrap, :object_size, :vertical_position, :horizontal_position,
12
- :relative_height
13
- attr_accessor :size_relative_horizontal
14
- attr_accessor :size_relative_vertical
11
+ # @return [DocxDrawingDistanceFromText] distance from text
12
+ attr_reader :distance_from_text
13
+ # @return [DocxWrapDrawing] wrap of drawing
14
+ attr_reader :wrap
15
+ # @return [Integer] relative height of object
16
+ attr_reader :relative_height
17
+ # @return [OOXMLCoordinates] simple position of object
18
+ attr_reader :simple_position
19
+ # @return [OOXMLCoordinates] size of object
20
+ attr_reader :object_size
21
+ # @return [DocxDrawingPosition] vertical position
22
+ attr_reader :vertical_position
23
+ # @return [DocxDrawingPosition] horizontal position
24
+ attr_reader :horizontal_position
25
+ # @return [SizeRelativeHorizontal] size of drawing relative to horizontal
26
+ attr_reader :size_relative_horizontal
27
+ # @return [SizeRelativeVertical] size of drawing relative to vertical
28
+ attr_reader :size_relative_vertical
29
+
30
+ # Parse DocxDrawingProperties
31
+ # @param [Nokogiri::XML:Node] node with DocxDrawingProperties
32
+ # @return [DocxDrawingProperties] result of parsing
33
+ def parse(node)
34
+ @distance_from_text = DocxDrawingDistanceFromText.new(parent: self).parse(node)
35
+ @wrap = DocxWrapDrawing.new(parent: self).parse(node)
36
+
37
+ node.attributes.each do |key, value|
38
+ case key
39
+ when 'relativeHeight'
40
+ @relative_height = value.value.to_i
41
+ end
42
+ end
43
+
44
+ node.xpath('*').each do |content_node_child|
45
+ case content_node_child.name
46
+ when 'simplePos'
47
+ @simple_position = OOXMLCoordinates.parse(content_node_child)
48
+ when 'extent'
49
+ @object_size = OOXMLCoordinates.parse(content_node_child, x_attr: 'cx', y_attr: 'cy', unit: :emu)
50
+ when 'positionV'
51
+ @vertical_position = DocxDrawingPosition.new(parent: self).parse(content_node_child)
52
+ when 'positionH'
53
+ @horizontal_position = DocxDrawingPosition.new(parent: self).parse(content_node_child)
54
+ when 'sizeRelH'
55
+ @size_relative_horizontal = SizeRelativeHorizontal.new(parent: self).parse(content_node_child)
56
+ when 'sizeRelV'
57
+ @size_relative_vertical = SizeRelativeVertical.new(parent: self).parse(content_node_child)
58
+ end
59
+ end
60
+ self
61
+ end
15
62
  end
16
63
  end
@@ -18,6 +18,7 @@ module OoxmlParser
18
18
  end
19
19
  end
20
20
 
21
+ # @return [String] result of convert of object to string
21
22
  def to_s
22
23
  '(' + @x.to_s + '; ' + @y.to_s + ')'
23
24
  end
@@ -28,6 +28,9 @@ module OoxmlParser
28
28
  self
29
29
  end
30
30
 
31
+ # Compare this object to other
32
+ # @param other [Object] any other object
33
+ # @return [True, False] result of comparision
31
34
  def ==(other)
32
35
  (to_base_unit.value - other.to_base_unit.value).abs < 10**(OoxmlParser.configuration.accuracy + 2)
33
36
  end
@@ -40,7 +43,7 @@ module OoxmlParser
40
43
  # @return [String] string representation of size
41
44
  def to_s(unit = :centimeter)
42
45
  converted = to_unit(unit)
43
- "#{converted.value} #{converted.unit}"
46
+ "#{converted.value.to_f} #{converted.unit}"
44
47
  end
45
48
 
46
49
  # Convert all values to one same base unit
@@ -10,6 +10,7 @@ module OoxmlParser
10
10
 
11
11
  alias path path_to_media_file
12
12
 
13
+ # @return [String] result of convert of object to string
13
14
  def to_str
14
15
  path_to_media_file
15
16
  end
@@ -10,6 +10,9 @@ module OoxmlParser
10
10
  # @return [String] content of file
11
11
  attr_accessor :content
12
12
 
13
+ # Parse FileReference object
14
+ # @param node [Nokogiri::XML:Element] node to parse
15
+ # @return [FileReference] result of parsing
13
16
  def parse(node)
14
17
  node.attributes.each do |key, value|
15
18
  case key
@@ -26,6 +29,7 @@ module OoxmlParser
26
29
  return self
27
30
  end
28
31
  return self if @path == 'NULL'
32
+ return self if @path.match?(URI::DEFAULT_PARSER.make_regexp)
29
33
 
30
34
  full_path_to_file = OOXMLDocumentObject.path_to_folder + OOXMLDocumentObject.root_subfolder + @path.gsub('..', '')
31
35
  if File.exist?(full_path_to_file)
@@ -28,6 +28,4 @@ module OoxmlParser
28
28
  self
29
29
  end
30
30
  end
31
-
32
- Picture = DocxPicture
33
31
  end
@@ -3,7 +3,7 @@
3
3
  module OoxmlParser
4
4
  # Class for parsing `txbx` tags
5
5
  class OOXMLTextBox < OOXMLDocumentObject
6
- attr_accessor :properties, :elements
6
+ attr_accessor :elements
7
7
 
8
8
  def initialize(parent: nil)
9
9
  @elements = []
@@ -21,8 +21,6 @@ module OoxmlParser
21
21
  @elements << DocxParagraph.new(parent: self).parse(node_child, index)
22
22
  when 'tbl'
23
23
  @elements << Table.new(parent: self).parse(node_child, index)
24
- when 'bodyPr'
25
- @properties = OOXMLShapeBodyProperties.new(parent: self).parse(node_child)
26
24
  end
27
25
  end
28
26
  self
@@ -35,6 +35,7 @@ module OoxmlParser
35
35
  self
36
36
  end
37
37
 
38
+ # @return [String] result of convert of object to string
38
39
  def to_s
39
40
  "Color: #{@color}, type: #{type}"
40
41
  end
@@ -23,8 +23,6 @@ module OoxmlParser
23
23
  @type = :arc
24
24
  when 'cubicBezTo'
25
25
  @type = :cubic_bezier
26
- when 'quadBezTo'
27
- @type = :quadratic_bezier
28
26
  when 'close'
29
27
  @type = :close
30
28
  end
@@ -16,6 +16,7 @@ module OoxmlParser
16
16
  @parent = parent
17
17
  end
18
18
 
19
+ # @return [Integer] stroke size of object
19
20
  def stroke_size
20
21
  if @color_scheme.nil? || @color_scheme.color == :none
21
22
  0
@@ -10,8 +10,18 @@ require_relative 'custom_geometry/ooxml_custom_geometry'
10
10
  module OoxmlParser
11
11
  # DOCX Shape Properties
12
12
  class DocxShapeProperties < OOXMLDocumentObject
13
- attr_accessor :shape_size, :preset_geometry, :fill_color, :text_box, :line, :custom_geometry
14
- attr_accessor :blip_fill
13
+ # @return [DocxShapeSize] size of shape
14
+ attr_reader :shape_size
15
+ # @return [PresetGeometry] preset geometry of object
16
+ attr_reader :preset_geometry
17
+ # @return [DocxColor] color of object
18
+ attr_reader :fill_color
19
+ # @return [DocxShapeLine] line info
20
+ attr_reader :line
21
+ # @return [PresetGeometry] is some geometry custom
22
+ attr_reader :custom_geometry
23
+ # @return [BlipFill] BlipFill data
24
+ attr_reader :blip_fill
15
25
 
16
26
  alias transform shape_size
17
27
  alias fill fill_color
@@ -33,8 +43,6 @@ module OoxmlParser
33
43
  @shape_size = DocxShapeSize.new(parent: self).parse(node_child)
34
44
  when 'prstGeom'
35
45
  @preset_geometry = PresetGeometry.new(parent: self).parse(node_child)
36
- when 'txbx'
37
- @text_box = TextBox.parse_list(node_child)
38
46
  when 'ln'
39
47
  @line = DocxShapeLine.new(parent: self).parse(node_child)
40
48
  when 'blipFill'
@@ -3,9 +3,16 @@
3
3
  module OoxmlParser
4
4
  # Docx Shape Size
5
5
  class DocxShapeSize < OOXMLDocumentObject
6
- attr_accessor :rotation, :offset, :extent
7
- attr_accessor :child_offset
8
- attr_accessor :child_extent
6
+ # @return [OoxmlSize] rotation info
7
+ attr_reader :rotation
8
+ # @return [OOXMLCoordinates] offset info
9
+ attr_reader :offset
10
+ # @return [OOXMLCoordinates] extent info
11
+ attr_reader :extent
12
+ # @return [OOXMLCoordinates] child offset
13
+ attr_reader :child_offset
14
+ # @return [OOXMLCoordinates] child extent
15
+ attr_reader :child_extent
9
16
  # @return [True, False] is image flipped horizontally
10
17
  attr_reader :flip_horizontal
11
18
  # @return [True, False] is image flipped vertically
@@ -6,7 +6,7 @@ require_relative 'group/old_docx_group'
6
6
  module OoxmlParser
7
7
  # Fallback DOCX Picture
8
8
  class OldDocxPicture < OOXMLDocumentObject
9
- attr_accessor :data, :type, :style_number
9
+ attr_accessor :data, :type
10
10
 
11
11
  # Parse OldDocxPicture object
12
12
  # @param node [Nokogiri::XML:Element] node to parse
@@ -20,8 +20,6 @@ module OoxmlParser
20
20
  when 'group'
21
21
  @type = :group
22
22
  @data = OldDocxGroup.new(parent: self).parse(node_child)
23
- when 'style'
24
- @style_number = node_child.attribute('val').value.to_i
25
23
  end
26
24
  end
27
25
  self
@@ -3,7 +3,7 @@
3
3
  module OoxmlParser
4
4
  # Fallback DOCX Shape Properties
5
5
  class OldDocxShapeProperties < OOXMLDocumentObject
6
- attr_accessor :fill_color, :opacity, :stroke_color, :stroke_weight
6
+ attr_accessor :fill_color, :stroke_color, :stroke_weight
7
7
 
8
8
  # Parse OldDocxShapeProperties object
9
9
  # @param node [Nokogiri::XML:Element] node to parse
@@ -13,8 +13,6 @@ module OoxmlParser
13
13
  case key
14
14
  when 'fillcolor'
15
15
  @fill_color = Color.new(parent: self).parse_hex_string(value.value.delete('#'))
16
- when 'opacity'
17
- @opacity = value.value.to_f
18
16
  when 'strokecolor'
19
17
  @stroke_color = Color.new(parent: self).parse_hex_string(value.value.delete('#'))
20
18
  when 'strokeweight'
@@ -27,12 +27,15 @@ module OoxmlParser
27
27
  size.zero? && val == :none
28
28
  end
29
29
 
30
+ # @return [String] result of convert of object to string
30
31
  def to_s
31
32
  return '' if nil?
32
33
 
33
34
  "borders color: #{@color}, size: #{size}, space: #{@space}, value: #{@val}"
34
35
  end
35
36
 
37
+ # Method to copy object
38
+ # @return [BordersProperties] copied object
36
39
  def copy
37
40
  BordersProperties.new(@color, size, @val, @space)
38
41
  end
@@ -12,79 +12,6 @@ module OoxmlParser
12
12
  # Class for Color in RGB
13
13
  class Color < OOXMLDocumentObject
14
14
  include ColorHelper
15
- # @return [Array] Deprecated Indexed colors
16
- # List of color duplicated from `OpenXML Sdk IndexedColors` class
17
- # See https://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.indexedcolors.aspx
18
- COLOR_INDEXED =
19
- %w[
20
- 000000
21
- FFFFFF
22
- FF0000
23
- 00FF00
24
- 0000FF
25
- FFFF00
26
- FF00FF
27
- 00FFFF
28
- 000000
29
- FFFFFF
30
- FF0000
31
- 00FF00
32
- 0000FF
33
- FFFF00
34
- FF00FF
35
- 00FFFF
36
- 800000
37
- 008000
38
- 000080
39
- 808000
40
- 800080
41
- 008080
42
- C0C0C0
43
- 808080
44
- 9999FF
45
- 993366
46
- FFFFCC
47
- CCFFFF
48
- 660066
49
- FF8080
50
- 0066CC
51
- CCCCFF
52
- 000080
53
- FF00FF
54
- FFFF00
55
- 00FFFF
56
- 800080
57
- 800000
58
- 008080
59
- 0000FF
60
- 00CCFF
61
- CCFFFF
62
- CCFFCC
63
- FFFF99
64
- 99CCFF
65
- FF99CC
66
- CC99FF
67
- FFCC99
68
- 3366FF
69
- 33CCCC
70
- 99CC00
71
- FFCC00
72
- FF9900
73
- FF6600
74
- 666699
75
- 969696
76
- 003366
77
- 339966
78
- 003300
79
- 333300
80
- 993300
81
- 993366
82
- 333399
83
- 333333
84
- n/a
85
- n/a
86
- ].freeze
87
-
88
15
  # @return [Integer] Value of Red Part
89
16
  attr_accessor :red
90
17
  # @return [Integer] Value of Green Part
@@ -103,7 +30,7 @@ module OoxmlParser
103
30
 
104
31
  alias set_alpha_channel alpha_channel=
105
32
 
106
- attr_accessor :position
33
+ # @return [ColorProperties] properties of color
107
34
  attr_accessor :properties
108
35
 
109
36
  # Value of color if non selected
@@ -119,6 +46,7 @@ module OoxmlParser
119
46
  @parent = parent
120
47
  end
121
48
 
49
+ # @return [String] result of convert of object to string
122
50
  def to_s
123
51
  if @red == VALUE_FOR_NONE_COLOR && @green == VALUE_FOR_NONE_COLOR && @blue == VALUE_FOR_NONE_COLOR
124
52
  'none'
@@ -127,33 +55,43 @@ module OoxmlParser
127
55
  end
128
56
  end
129
57
 
58
+ # @return [String] inspect of object for debug means
130
59
  def inspect
131
60
  to_s
132
61
  end
133
62
 
63
+ # @return [String] color in hex value
134
64
  def to_hex
135
65
  (@red.to_s(16).rjust(2, '0') + @green.to_s(16).rjust(2, '0') + @blue.to_s(16).rjust(2, '0')).upcase
136
66
  end
137
67
 
138
68
  alias to_int16 to_hex
139
69
 
70
+ # @return [True, False] is color default
140
71
  def none?
141
72
  (@red == VALUE_FOR_NONE_COLOR) && (@green == VALUE_FOR_NONE_COLOR) && (@blue == VALUE_FOR_NONE_COLOR) ||
142
73
  (style == :nil)
143
74
  end
144
75
 
76
+ # @return [True, False] is color not default
145
77
  def any?
146
78
  !none?
147
79
  end
148
80
 
81
+ # @return [True, False] is color white
149
82
  def white?
150
83
  (@red == 255) && (@green == 255) && (@blue == 255)
151
84
  end
152
85
 
86
+ # Method to copy object
87
+ # @return [Color] copied object
153
88
  def copy
154
89
  Color.new(@red, @green, @blue)
155
90
  end
156
91
 
92
+ # Compare this object to other
93
+ # @param other [Object] any other object
94
+ # @return [True, False] result of comparision
157
95
  def ==(other)
158
96
  if other.is_a?(Color)
159
97
  if (@red == other.red) && (@green == other.green) && (@blue == other.blue)
@@ -190,18 +128,27 @@ module OoxmlParser
190
128
  (self.red - red).abs < delta && (self.green - green).abs < delta && (self.blue - blue).abs < delta ? true : false
191
129
  end
192
130
 
131
+ # Apply tint to color
132
+ # @param tint [Integer] tint to apply
133
+ # @return [void]
193
134
  def calculate_with_tint!(tint)
194
135
  @red += (tint.to_f * (255 - @red)).to_i
195
136
  @green += (tint.to_f * (255 - @green)).to_i
196
137
  @blue += (tint.to_f * (255 - @blue)).to_i
197
138
  end
198
139
 
140
+ # Apply shade to color
141
+ # @param shade [Integer] shade to apply
142
+ # @return [void]
199
143
  def calculate_with_shade!(shade)
200
144
  @red = (@red * shade.to_f).to_i
201
145
  @green = (@green * shade.to_f).to_i
202
146
  @blue = (@blue * shade.to_f).to_i
203
147
  end
204
148
 
149
+ # Parse color scheme data
150
+ # @param scheme_color_node [Nokogiri::XML:Element] node to parse
151
+ # @return [Color] result of parsing
205
152
  def parse_scheme_color(scheme_color_node)
206
153
  color = root_object.theme.color_scheme[scheme_color_node.attribute('val').value.to_sym].color
207
154
  hls = HSLColor.rgb_to_hsl(color)
@@ -229,6 +176,9 @@ module OoxmlParser
229
176
  self
230
177
  end
231
178
 
179
+ # Parse color model data
180
+ # @param color_model_parent_node [Nokogiri::XML:Element] node to parse
181
+ # @return [Color] result of parsing
232
182
  def parse_color_model(color_model_parent_node)
233
183
  color = nil
234
184
  tint = nil
@@ -240,9 +190,6 @@ module OoxmlParser
240
190
  end
241
191
  end
242
192
  case color_model_node.name
243
- when 'scrgbClr'
244
- color = Color.new(color_model_node.attribute('r').value.to_i, color_model_node.attribute('g').value.to_i, color_model_node.attribute('b').value.to_i)
245
- color.alpha_channel = ColorAlphaChannel.parse(color_model_node)
246
193
  when 'srgbClr'
247
194
  color = Color.new.parse_hex_string(color_model_node.attribute('val').value)
248
195
  color.alpha_channel = ColorAlphaChannel.parse(color_model_node)
@@ -261,6 +208,9 @@ module OoxmlParser
261
208
  self
262
209
  end
263
210
 
211
+ # Parse color data
212
+ # @param color_node [Nokogiri::XML:Element] node to parse
213
+ # @return [Color] result of parsing
264
214
  def parse_color(color_node)
265
215
  case color_node.name
266
216
  when 'srgbClr'
@@ -280,6 +230,7 @@ module OoxmlParser
280
230
  end
281
231
 
282
232
  class << self
233
+ # @return [Color] random color
283
234
  def generate_random_color
284
235
  Color.new(rand(256), rand(256), rand(256))
285
236
  end
@@ -293,19 +244,31 @@ module OoxmlParser
293
244
  const_array_name.map { |current_color| Color.parse_string(current_color) }
294
245
  end
295
246
 
247
+ # @param index [Integer] index to get
248
+ # @return [Color] color by it's index
296
249
  def get_rgb_by_color_index(index)
297
- color_by_index = COLOR_INDEXED[index]
250
+ color_by_index = color_indexes[index]
298
251
  return :unknown if color_by_index.nil?
299
252
 
300
253
  color_by_index == 'n/a' ? Color.new : Color.new.parse_hex_string(color_by_index)
301
254
  end
302
255
 
256
+ # @return [Array] Deprecated Indexed colors
257
+ # List of color duplicated from `OpenXML Sdk IndexedColors` class
258
+ # See https://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.indexedcolors.aspx
259
+ def color_indexes
260
+ @color_indexes ||= File.readlines("#{__dir__}/color/color_indexes.list", chomp: true)
261
+ end
262
+
263
+ # Parse color from string
264
+ # @param str [String] string to parse
265
+ # @return [Color] result of parsing
303
266
  def parse_string(str)
304
267
  return str if str.is_a?(Color)
305
268
  return Color.new(VALUE_FOR_NONE_COLOR, VALUE_FOR_NONE_COLOR, VALUE_FOR_NONE_COLOR) if str == 'none' || str == '' || str == 'transparent' || str.nil?
306
269
 
307
270
  split = if str.include?('RGB (') || str.include?('rgb(')
308
- str.gsub(/[(RGBrgb\(\) )]/, '').split(',')
271
+ str.gsub(/[(RGBrgb() )]/, '').split(',')
309
272
  elsif str.include?('RGB ') || str.include?('rgb')
310
273
  str.gsub(/RGB |rgb/, '').split(', ')
311
274
  else
@@ -317,6 +280,9 @@ module OoxmlParser
317
280
 
318
281
  alias parse parse_string
319
282
 
283
+ # Convert other object type to Color
284
+ # @param something [Object] object to convert
285
+ # @return [Color] result of conversion
320
286
  def to_color(something)
321
287
  case something
322
288
  when SchemeColor