ooxml_parser 0.6.0 → 0.7.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.
- checksums.yaml +4 -4
- data/lib/ooxml_parser.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/drawing_properties/docx_drawing_distance_from_text.rb +3 -0
- 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/ooxml_text_box.rb +1 -3
- 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 +1 -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 +36 -4
- data/lib/ooxml_parser/common_parser/common_data/color/ooxml_color.rb +5 -0
- 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/ooxml_document_object.rb +24 -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 +0 -8
- 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/table_style_properties_helper.rb +4 -4
- data/lib/ooxml_parser/common_parser/common_data/table/row/cell/cell_properties.rb +4 -7
- 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 +4 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure.rb +27 -3
- 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 +2 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph.rb +22 -1
- 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 +2 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/header_footer.rb +0 -2
- 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/note.rb +3 -0
- 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 +3 -0
- 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 +3 -0
- 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 +64 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ee9d17ca1564f942a23f3ec27f80e47c92720dcc772f78ce9c05f5b4a083aab4
|
|
4
|
+
data.tar.gz: c7aacc7ac67a9e03aab11180a3d0815c985f10e99494e14ddb65dafc0996d722
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c9962f8a0a55810dcfe9fccf3f5915059eb1ea89343054fdaefbc835aa8bfdcbd6f492e1684e3944579b90196bf3cde395f34384411f3e8e27fcbb77a89d7e0a
|
|
7
|
+
data.tar.gz: c3422025469da1f6a10c385a0b7bb06d499aaa4e8f6c9c897f40b22a4caf0927288bcd9807e9e859b60f1017e5d31e00caba66dfc29b9d928dd156b5f471abd1
|
data/lib/ooxml_parser.rb
CHANGED
|
@@ -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 [
|
|
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 =
|
|
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'
|
|
@@ -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
|
|
@@ -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,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)
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
module OoxmlParser
|
|
4
4
|
# Class for parsing `txbx` tags
|
|
5
5
|
class OOXMLTextBox < OOXMLDocumentObject
|
|
6
|
-
attr_accessor :
|
|
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
|
|
@@ -10,7 +10,7 @@ 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, :
|
|
13
|
+
attr_accessor :shape_size, :preset_geometry, :fill_color, :line, :custom_geometry
|
|
14
14
|
attr_accessor :blip_fill
|
|
15
15
|
|
|
16
16
|
alias transform shape_size
|
|
@@ -33,8 +33,6 @@ module OoxmlParser
|
|
|
33
33
|
@shape_size = DocxShapeSize.new(parent: self).parse(node_child)
|
|
34
34
|
when 'prstGeom'
|
|
35
35
|
@preset_geometry = PresetGeometry.new(parent: self).parse(node_child)
|
|
36
|
-
when 'txbx'
|
|
37
|
-
@text_box = TextBox.parse_list(node_child)
|
|
38
36
|
when 'ln'
|
|
39
37
|
@line = DocxShapeLine.new(parent: self).parse(node_child)
|
|
40
38
|
when 'blipFill'
|
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
|
|
@@ -119,6 +119,7 @@ module OoxmlParser
|
|
|
119
119
|
@parent = parent
|
|
120
120
|
end
|
|
121
121
|
|
|
122
|
+
# @return [String] result of convert of object to string
|
|
122
123
|
def to_s
|
|
123
124
|
if @red == VALUE_FOR_NONE_COLOR && @green == VALUE_FOR_NONE_COLOR && @blue == VALUE_FOR_NONE_COLOR
|
|
124
125
|
'none'
|
|
@@ -127,33 +128,43 @@ module OoxmlParser
|
|
|
127
128
|
end
|
|
128
129
|
end
|
|
129
130
|
|
|
131
|
+
# @return [String] inspect of object for debug means
|
|
130
132
|
def inspect
|
|
131
133
|
to_s
|
|
132
134
|
end
|
|
133
135
|
|
|
136
|
+
# @return [String] color in hex value
|
|
134
137
|
def to_hex
|
|
135
138
|
(@red.to_s(16).rjust(2, '0') + @green.to_s(16).rjust(2, '0') + @blue.to_s(16).rjust(2, '0')).upcase
|
|
136
139
|
end
|
|
137
140
|
|
|
138
141
|
alias to_int16 to_hex
|
|
139
142
|
|
|
143
|
+
# @return [True, False] is color default
|
|
140
144
|
def none?
|
|
141
145
|
(@red == VALUE_FOR_NONE_COLOR) && (@green == VALUE_FOR_NONE_COLOR) && (@blue == VALUE_FOR_NONE_COLOR) ||
|
|
142
146
|
(style == :nil)
|
|
143
147
|
end
|
|
144
148
|
|
|
149
|
+
# @return [True, False] is color not default
|
|
145
150
|
def any?
|
|
146
151
|
!none?
|
|
147
152
|
end
|
|
148
153
|
|
|
154
|
+
# @return [True, False] is color white
|
|
149
155
|
def white?
|
|
150
156
|
(@red == 255) && (@green == 255) && (@blue == 255)
|
|
151
157
|
end
|
|
152
158
|
|
|
159
|
+
# Method to copy object
|
|
160
|
+
# @return [Color] copied object
|
|
153
161
|
def copy
|
|
154
162
|
Color.new(@red, @green, @blue)
|
|
155
163
|
end
|
|
156
164
|
|
|
165
|
+
# Compare this object to other
|
|
166
|
+
# @param other [Object] any other object
|
|
167
|
+
# @return [True, False] result of comparision
|
|
157
168
|
def ==(other)
|
|
158
169
|
if other.is_a?(Color)
|
|
159
170
|
if (@red == other.red) && (@green == other.green) && (@blue == other.blue)
|
|
@@ -190,18 +201,27 @@ module OoxmlParser
|
|
|
190
201
|
(self.red - red).abs < delta && (self.green - green).abs < delta && (self.blue - blue).abs < delta ? true : false
|
|
191
202
|
end
|
|
192
203
|
|
|
204
|
+
# Apply tint to color
|
|
205
|
+
# @param tint [Integer] tint to apply
|
|
206
|
+
# @return [void]
|
|
193
207
|
def calculate_with_tint!(tint)
|
|
194
208
|
@red += (tint.to_f * (255 - @red)).to_i
|
|
195
209
|
@green += (tint.to_f * (255 - @green)).to_i
|
|
196
210
|
@blue += (tint.to_f * (255 - @blue)).to_i
|
|
197
211
|
end
|
|
198
212
|
|
|
213
|
+
# Apply shade to color
|
|
214
|
+
# @param shade [Integer] shade to apply
|
|
215
|
+
# @return [void]
|
|
199
216
|
def calculate_with_shade!(shade)
|
|
200
217
|
@red = (@red * shade.to_f).to_i
|
|
201
218
|
@green = (@green * shade.to_f).to_i
|
|
202
219
|
@blue = (@blue * shade.to_f).to_i
|
|
203
220
|
end
|
|
204
221
|
|
|
222
|
+
# Parse color scheme data
|
|
223
|
+
# @param scheme_color_node [Nokogiri::XML:Element] node to parse
|
|
224
|
+
# @return [Color] result of parsing
|
|
205
225
|
def parse_scheme_color(scheme_color_node)
|
|
206
226
|
color = root_object.theme.color_scheme[scheme_color_node.attribute('val').value.to_sym].color
|
|
207
227
|
hls = HSLColor.rgb_to_hsl(color)
|
|
@@ -229,6 +249,9 @@ module OoxmlParser
|
|
|
229
249
|
self
|
|
230
250
|
end
|
|
231
251
|
|
|
252
|
+
# Parse color model data
|
|
253
|
+
# @param color_model_parent_node [Nokogiri::XML:Element] node to parse
|
|
254
|
+
# @return [Color] result of parsing
|
|
232
255
|
def parse_color_model(color_model_parent_node)
|
|
233
256
|
color = nil
|
|
234
257
|
tint = nil
|
|
@@ -240,9 +263,6 @@ module OoxmlParser
|
|
|
240
263
|
end
|
|
241
264
|
end
|
|
242
265
|
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
266
|
when 'srgbClr'
|
|
247
267
|
color = Color.new.parse_hex_string(color_model_node.attribute('val').value)
|
|
248
268
|
color.alpha_channel = ColorAlphaChannel.parse(color_model_node)
|
|
@@ -261,6 +281,9 @@ module OoxmlParser
|
|
|
261
281
|
self
|
|
262
282
|
end
|
|
263
283
|
|
|
284
|
+
# Parse color data
|
|
285
|
+
# @param color_node [Nokogiri::XML:Element] node to parse
|
|
286
|
+
# @return [Color] result of parsing
|
|
264
287
|
def parse_color(color_node)
|
|
265
288
|
case color_node.name
|
|
266
289
|
when 'srgbClr'
|
|
@@ -280,6 +303,7 @@ module OoxmlParser
|
|
|
280
303
|
end
|
|
281
304
|
|
|
282
305
|
class << self
|
|
306
|
+
# @return [Color] random color
|
|
283
307
|
def generate_random_color
|
|
284
308
|
Color.new(rand(256), rand(256), rand(256))
|
|
285
309
|
end
|
|
@@ -293,6 +317,8 @@ module OoxmlParser
|
|
|
293
317
|
const_array_name.map { |current_color| Color.parse_string(current_color) }
|
|
294
318
|
end
|
|
295
319
|
|
|
320
|
+
# @param index [Integer] index to get
|
|
321
|
+
# @return [Color] color by it's index
|
|
296
322
|
def get_rgb_by_color_index(index)
|
|
297
323
|
color_by_index = COLOR_INDEXED[index]
|
|
298
324
|
return :unknown if color_by_index.nil?
|
|
@@ -300,12 +326,15 @@ module OoxmlParser
|
|
|
300
326
|
color_by_index == 'n/a' ? Color.new : Color.new.parse_hex_string(color_by_index)
|
|
301
327
|
end
|
|
302
328
|
|
|
329
|
+
# Parse color from string
|
|
330
|
+
# @param str [String] string to parse
|
|
331
|
+
# @return [Color] result of parsing
|
|
303
332
|
def parse_string(str)
|
|
304
333
|
return str if str.is_a?(Color)
|
|
305
334
|
return Color.new(VALUE_FOR_NONE_COLOR, VALUE_FOR_NONE_COLOR, VALUE_FOR_NONE_COLOR) if str == 'none' || str == '' || str == 'transparent' || str.nil?
|
|
306
335
|
|
|
307
336
|
split = if str.include?('RGB (') || str.include?('rgb(')
|
|
308
|
-
str.gsub(/[(RGBrgb
|
|
337
|
+
str.gsub(/[(RGBrgb() )]/, '').split(',')
|
|
309
338
|
elsif str.include?('RGB ') || str.include?('rgb')
|
|
310
339
|
str.gsub(/RGB |rgb/, '').split(', ')
|
|
311
340
|
else
|
|
@@ -317,6 +346,9 @@ module OoxmlParser
|
|
|
317
346
|
|
|
318
347
|
alias parse parse_string
|
|
319
348
|
|
|
349
|
+
# Convert other object type to Color
|
|
350
|
+
# @param something [Object] object to convert
|
|
351
|
+
# @return [Color] result of conversion
|
|
320
352
|
def to_color(something)
|
|
321
353
|
case something
|
|
322
354
|
when SchemeColor
|
|
@@ -18,6 +18,8 @@ module OoxmlParser
|
|
|
18
18
|
# @return [Color] rgb color
|
|
19
19
|
attr_reader :rgb
|
|
20
20
|
|
|
21
|
+
# Convert OoxmlColor to other color type
|
|
22
|
+
# @return [Object] result of conversion
|
|
21
23
|
def to_color
|
|
22
24
|
return Color.get_rgb_by_color_index(indexed) if indexed
|
|
23
25
|
return ThemeColors.new(parent: self).parse_color_theme(theme, tint) if theme
|
|
@@ -26,6 +28,9 @@ module OoxmlParser
|
|
|
26
28
|
value
|
|
27
29
|
end
|
|
28
30
|
|
|
31
|
+
# Compare this object to other
|
|
32
|
+
# @param other [Object] any other object
|
|
33
|
+
# @return [True, False] result of comparision
|
|
29
34
|
def ==(other)
|
|
30
35
|
return to_color == other if other.is_a?(Color)
|
|
31
36
|
return to_color == other if other.is_a?(Symbol)
|
|
@@ -19,6 +19,9 @@ module OoxmlParser
|
|
|
19
19
|
@l = lightness
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
# Convert rgb color to hsl
|
|
23
|
+
# @param rgb_color [Color] color to convert
|
|
24
|
+
# @return [HSLColor] result of convert
|
|
22
25
|
def self.rgb_to_hsl(rgb_color)
|
|
23
26
|
hls_color = HSLColor.new
|
|
24
27
|
red = rgb_color.red.to_f # / 255.0
|
|
@@ -50,6 +53,7 @@ module OoxmlParser
|
|
|
50
53
|
end
|
|
51
54
|
|
|
52
55
|
# Chroma - The "colorfulness relative to the brightness of a similarly illuminated white".
|
|
56
|
+
# @return [Color] result
|
|
53
57
|
def to_rgb
|
|
54
58
|
chroma = (1 - (2 * @l - 1).abs) * @s
|
|
55
59
|
x = chroma * (1 - ((@h / 60.0) % 2.0 - 1).abs)
|
|
@@ -73,6 +77,10 @@ module OoxmlParser
|
|
|
73
77
|
Color.new(((rgb.red + m) * 255.0).round, ((rgb.green + m) * 255.0).round, ((rgb.blue + m) * 255.0).round)
|
|
74
78
|
end
|
|
75
79
|
|
|
80
|
+
# Get lum value of color
|
|
81
|
+
# @param tint [Integer] tint to apply
|
|
82
|
+
# @param lum [Integer] lum without tint
|
|
83
|
+
# @return [Integer] result
|
|
76
84
|
def calculate_lum_value(tint, lum)
|
|
77
85
|
if tint.nil?
|
|
78
86
|
lum
|
|
@@ -81,6 +89,9 @@ module OoxmlParser
|
|
|
81
89
|
end
|
|
82
90
|
end
|
|
83
91
|
|
|
92
|
+
# Convert to rgb with applied tint
|
|
93
|
+
# @param tint [Integer] tint to apply
|
|
94
|
+
# @return [Color] result of covert
|
|
84
95
|
def calculate_rgb_with_tint(tint)
|
|
85
96
|
self.l = calculate_lum_value(tint, @l * 255.0) / 255.0
|
|
86
97
|
to_rgb
|