ooxml_parser 0.5.1 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ooxml_parser.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/alternate_content/choice.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/alternate_content/choice/math_text.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/alternate_content/choice/math_text/math_paragraph.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart.rb +6 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart/series.rb +2 -2
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart/series/series_text.rb +0 -2
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/docx_drawing.rb +1 -20
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/docx_drawing_distance_from_text.rb +3 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/docx_drawing_properties.rb +51 -4
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/ooxml_coordinates.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/ooxml_size.rb +4 -1
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_blip.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_blip/file_reference.rb +4 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_picture.rb +0 -2
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/docx_shape.rb +3 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/docx_shape/ooxml_text_box.rb +1 -3
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/docx_shape/shape_style.rb +42 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/docx_shape/shape_style/effect_reference.rb +35 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/docx_shape/shape_style/fill_reference.rb +35 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/docx_shape/shape_style/font_reference.rb +35 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/docx_shape/shape_style/line_reference.rb +35 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/color/docx_color_scheme.rb +1 -0
- 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
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_line.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_properties.rb +12 -4
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_size.rb +10 -3
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/old_docx_picture.rb +1 -3
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/shape/old_docx_shape_properties.rb +1 -3
- data/lib/ooxml_parser/common_parser/common_data/borders_properties.rb +3 -0
- data/lib/ooxml_parser/common_parser/common_data/color.rb +48 -82
- data/lib/ooxml_parser/common_parser/common_data/color/color_helper.rb +4 -3
- data/lib/ooxml_parser/common_parser/common_data/color/color_indexes.list +66 -0
- data/lib/ooxml_parser/common_parser/common_data/color/ooxml_color.rb +5 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/color_properties.rb +8 -2
- data/lib/ooxml_parser/common_parser/common_data/colors/hsl_color.rb +11 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/scheme_color.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/theme_colors.rb +4 -0
- data/lib/ooxml_parser/common_parser/common_data/content_types.rb +2 -0
- data/lib/ooxml_parser/common_parser/common_data/content_types/content_type_default.rb +3 -0
- data/lib/ooxml_parser/common_parser/common_data/content_types/content_type_override.rb +3 -0
- data/lib/ooxml_parser/common_parser/common_data/coordinates.rb +7 -0
- data/lib/ooxml_parser/common_parser/common_data/hyperlink.rb +14 -3
- data/lib/ooxml_parser/common_parser/common_data/ooxml_document_object.rb +28 -2
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run.rb +3 -0
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run/run_properties.rb +28 -12
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run/run_properties/outline.rb +4 -2
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/numbering_properties.rb +2 -0
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/paragraph_borders.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/spacing.rb +16 -13
- data/lib/ooxml_parser/common_parser/common_data/table.rb +2 -0
- data/lib/ooxml_parser/common_parser/common_data/table/margins/paragraph_margins.rb +3 -0
- data/lib/ooxml_parser/common_parser/common_data/table/margins/table_margins.rb +7 -0
- data/lib/ooxml_parser/common_parser/common_data/table/properties/table_position.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/table/properties/table_style_properties.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/table/properties/table_style_properties/table_style_properties_helper.rb +4 -4
- data/lib/ooxml_parser/common_parser/common_data/table/row/cell/cell_properties.rb +4 -5
- data/lib/ooxml_parser/common_parser/common_data/table/row/cell/properties/borders.rb +6 -0
- data/lib/ooxml_parser/common_parser/common_data/table/table_grid.rb +3 -0
- data/lib/ooxml_parser/common_parser/common_data/underline.rb +7 -2
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure.rb +41 -9
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/comments/comment.rb +3 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/document_style.rb +3 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph.rb +25 -8
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/bookmark_end.rb +1 -1
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/comment_range_start.rb +1 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/pre_sub_superscript.rb +3 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run.rb +13 -3
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/docx_paragraph_run_helpers.rb +4 -1
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/shape.rb +0 -2
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/frame_properties.rb +3 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/indents.rb +4 -2
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/header_footer.rb +8 -4
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/numbering.rb +5 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/columns.rb +3 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/note.rb +6 -2
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/page_size.rb +1 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/styles.rb +2 -0
- data/lib/ooxml_parser/docx_parser/docx_parser.rb +3 -0
- data/lib/ooxml_parser/name.rb +1 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation.rb +2 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/presentation_theme.rb +3 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/presentation_theme/theme_color.rb +3 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb +5 -2
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing/time_node.rb +3 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide_helper.rb +15 -1
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/transition/transition.rb +3 -0
- data/lib/ooxml_parser/pptx_parser/pptx_parser.rb +4 -1
- data/lib/ooxml_parser/version.rb +2 -1
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook.rb +21 -2
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/chartsheet.rb +3 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache.rb +41 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache/pivot_cache_definition.rb +37 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache/pivot_cache_definition/cache_source.rb +33 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache/pivot_cache_definition/cache_source/worksheet_source.rb +26 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet.rb +2 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/cell_xfs/xf.rb +5 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/fills/fill.rb +2 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/fonts/font.rb +3 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet.rb +5 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/excel_comments.rb +4 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_column_properties.rb +4 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_parser.rb +3 -0
- metadata +70 -4
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module OoxmlParser
|
4
|
+
# Class for parsing `a:lnRef` tags
|
5
|
+
class LineReference < OOXMLDocumentObject
|
6
|
+
# @return [Integer] Style Matrix Index
|
7
|
+
attr_reader :index
|
8
|
+
# @return [Color] scheme color of LineReference
|
9
|
+
attr_reader :scheme_color
|
10
|
+
|
11
|
+
def initialize(parent: nil)
|
12
|
+
@parent = parent
|
13
|
+
end
|
14
|
+
|
15
|
+
# Parse LineReference object
|
16
|
+
# @param node [Nokogiri::XML:Element] node to parse
|
17
|
+
# @return [LineReference] result of parsing
|
18
|
+
def parse(node)
|
19
|
+
node.attributes.each do |key, value|
|
20
|
+
case key
|
21
|
+
when 'idx'
|
22
|
+
@index = value.value.to_f
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
node.xpath('*').each do |node_child|
|
27
|
+
case node_child.name
|
28
|
+
when 'schemeClr'
|
29
|
+
@scheme_color = Color.new(parent: self).parse_scheme_color(node_child)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
self
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -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
|
-
|
14
|
-
|
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
|
-
|
7
|
-
|
8
|
-
|
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
|
data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/old_docx_picture.rb
CHANGED
@@ -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
|
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, :
|
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
|
@@ -93,15 +20,17 @@ module OoxmlParser
|
|
93
20
|
attr_accessor :blue
|
94
21
|
# @return [String] Value of Color Style
|
95
22
|
attr_accessor :style
|
23
|
+
|
96
24
|
alias set_style style=
|
97
25
|
# @return [String] color scheme of color
|
98
26
|
attr_accessor :scheme
|
99
27
|
|
100
28
|
# @return [Integer] Value of alpha-channel
|
101
29
|
attr_accessor :alpha_channel
|
30
|
+
|
102
31
|
alias set_alpha_channel alpha_channel=
|
103
32
|
|
104
|
-
|
33
|
+
# @return [ColorProperties] properties of color
|
105
34
|
attr_accessor :properties
|
106
35
|
|
107
36
|
# Value of color if non selected
|
@@ -117,6 +46,7 @@ module OoxmlParser
|
|
117
46
|
@parent = parent
|
118
47
|
end
|
119
48
|
|
49
|
+
# @return [String] result of convert of object to string
|
120
50
|
def to_s
|
121
51
|
if @red == VALUE_FOR_NONE_COLOR && @green == VALUE_FOR_NONE_COLOR && @blue == VALUE_FOR_NONE_COLOR
|
122
52
|
'none'
|
@@ -125,38 +55,46 @@ module OoxmlParser
|
|
125
55
|
end
|
126
56
|
end
|
127
57
|
|
58
|
+
# @return [String] inspect of object for debug means
|
128
59
|
def inspect
|
129
60
|
to_s
|
130
61
|
end
|
131
62
|
|
63
|
+
# @return [String] color in hex value
|
132
64
|
def to_hex
|
133
65
|
(@red.to_s(16).rjust(2, '0') + @green.to_s(16).rjust(2, '0') + @blue.to_s(16).rjust(2, '0')).upcase
|
134
66
|
end
|
135
67
|
|
136
68
|
alias to_int16 to_hex
|
137
69
|
|
70
|
+
# @return [True, False] is color default
|
138
71
|
def none?
|
139
72
|
(@red == VALUE_FOR_NONE_COLOR) && (@green == VALUE_FOR_NONE_COLOR) && (@blue == VALUE_FOR_NONE_COLOR) ||
|
140
73
|
(style == :nil)
|
141
74
|
end
|
142
75
|
|
76
|
+
# @return [True, False] is color not default
|
143
77
|
def any?
|
144
78
|
!none?
|
145
79
|
end
|
146
80
|
|
81
|
+
# @return [True, False] is color white
|
147
82
|
def white?
|
148
83
|
(@red == 255) && (@green == 255) && (@blue == 255)
|
149
84
|
end
|
150
85
|
|
86
|
+
# Method to copy object
|
87
|
+
# @return [Color] copied object
|
151
88
|
def copy
|
152
89
|
Color.new(@red, @green, @blue)
|
153
90
|
end
|
154
91
|
|
92
|
+
# Compare this object to other
|
93
|
+
# @param other [Object] any other object
|
94
|
+
# @return [True, False] result of comparision
|
155
95
|
def ==(other)
|
156
96
|
if other.is_a?(Color)
|
157
|
-
if
|
158
|
-
false
|
159
|
-
elsif (@red == other.red) && (@green == other.green) && (@blue == other.blue)
|
97
|
+
if (@red == other.red) && (@green == other.green) && (@blue == other.blue)
|
160
98
|
true
|
161
99
|
elsif (none? && other.white?) || (white? && other.none?)
|
162
100
|
true
|
@@ -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 =
|
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
|
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
|
@@ -9,15 +9,16 @@ module OoxmlParser
|
|
9
9
|
return self if %w[auto null].include?(hex_string)
|
10
10
|
|
11
11
|
char_array = hex_string.split(//)
|
12
|
-
|
12
|
+
case char_array.length
|
13
|
+
when 3
|
13
14
|
@red = char_array[0].hex
|
14
15
|
@green = char_array[1].hex
|
15
16
|
@blue = char_array[2].hex
|
16
|
-
|
17
|
+
when 6
|
17
18
|
@red = (char_array[0] + char_array[1]).hex
|
18
19
|
@green = (char_array[2] + char_array[3]).hex
|
19
20
|
@blue = (char_array[4] + char_array[5]).hex
|
20
|
-
|
21
|
+
when 8
|
21
22
|
@alpha_channel = (char_array[0] + char_array[1]).hex
|
22
23
|
@red = (char_array[2] + char_array[3]).hex
|
23
24
|
@green = (char_array[4] + char_array[5]).hex
|