ooxml_parser 0.25.0 → 0.26.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/common_parser/common_data/alternate_content/drawing/drawing_properties/docx_wrap_drawing.rb +19 -3
- data/lib/ooxml_parser/common_parser/common_data/color.rb +3 -1
- data/lib/ooxml_parser/docx_parser/document_structure/docx_paragraph/docx_paragraph_run.rb +0 -1
- data/lib/ooxml_parser/docx_parser/document_structure/docx_paragraph.rb +0 -1
- data/lib/ooxml_parser/docx_parser/document_structure.rb +0 -1
- data/lib/ooxml_parser/version.rb +1 -1
- data/lib/ooxml_parser/xlsx_parser/workbook/worksheet/xlsx_column_properties.rb +32 -4
- data/lib/ooxml_parser/xlsx_parser/workbook/worksheet/xlsx_row/xlsx_cell.rb +9 -0
- data/lib/ooxml_parser/xlsx_parser/workbook/worksheet/xlsx_row.rb +19 -3
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8d10481491c8a8bb901c8514f5a7c19ee3b6482e8fb943f39b9191dbd057d395
|
4
|
+
data.tar.gz: efbdbe106e2e88c584e428b8536cedb96972033434b5e1457f6ae2b31946cdd4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b553b7f055d43a6a355592ac8c2d28b085795b0faadf12531f119d4a1d15b1c7bcd45a5a661aad611799aa3286266469b88c12792bb4c3bba0b6c3fac2a0f54d
|
7
|
+
data.tar.gz: 1a68d32efafe9ee2921ffd6c75a794dd340a4b6d814e4aa7daa6348fb1246644a12b99a071df7e7e1bfe84de02f15c96a4068f6227008ec051a1932b0bdb01db
|
@@ -4,6 +4,16 @@ module OoxmlParser
|
|
4
4
|
# Docx Wrap Drawing
|
5
5
|
class DocxWrapDrawing < OOXMLDocumentObject
|
6
6
|
attr_accessor :wrap_text, :distance_from_text
|
7
|
+
# @return [Boolean] Specifies whether this floating DrawingML
|
8
|
+
# object is displayed behind the text of the
|
9
|
+
# document when the document is displayed.
|
10
|
+
# When a DrawingML object is displayed
|
11
|
+
# within a WordprocessingML document,
|
12
|
+
# that object can intersect with text in the
|
13
|
+
# document. This attribute shall determine
|
14
|
+
# whether the text or the object is rendered on
|
15
|
+
# top in case of overlapping.
|
16
|
+
attr_reader :behind_doc
|
7
17
|
|
8
18
|
def initialize(parent: nil)
|
9
19
|
@wrap_text = :none
|
@@ -14,10 +24,16 @@ module OoxmlParser
|
|
14
24
|
# @param node [Nokogiri::XML:Element] node to parse
|
15
25
|
# @return [DocxWrapDrawing] result of parsing
|
16
26
|
def parse(node)
|
17
|
-
|
18
|
-
|
19
|
-
|
27
|
+
node.attributes.each do |key, value|
|
28
|
+
case key
|
29
|
+
when 'behindDoc'
|
30
|
+
@behind_doc = attribute_enabled?(value)
|
31
|
+
end
|
20
32
|
end
|
33
|
+
|
34
|
+
@wrap_text = :behind if @behind_doc == true
|
35
|
+
@wrap_text = :infront if @behind_doc == false
|
36
|
+
|
21
37
|
node.xpath('*').each do |node_child|
|
22
38
|
case node_child.name
|
23
39
|
when 'wrapSquare'
|
@@ -60,8 +60,10 @@ module OoxmlParser
|
|
60
60
|
to_s
|
61
61
|
end
|
62
62
|
|
63
|
-
# @return [String] color in hex value
|
63
|
+
# @return [String, nil] color in hex value or `nil` if color is not defined
|
64
64
|
def to_hex
|
65
|
+
return nil if none?
|
66
|
+
|
65
67
|
(@red.to_s(16).rjust(2, '0') + @green.to_s(16).rjust(2, '0') + @blue.to_s(16).rjust(2, '0')).upcase
|
66
68
|
end
|
67
69
|
|
data/lib/ooxml_parser/version.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
module OoxmlParser
|
4
4
|
# Properties of XLSX column
|
5
5
|
class XlsxColumnProperties < OOXMLDocumentObject
|
6
|
-
attr_accessor :
|
6
|
+
attr_accessor :style
|
7
7
|
# @return [True, False] is width custom
|
8
8
|
attr_accessor :custom_width
|
9
9
|
# @return [True, False] Flag indicating if the
|
@@ -12,6 +12,14 @@ module OoxmlParser
|
|
12
12
|
# @return [True, False] Flag indicating if the
|
13
13
|
# specified column(s) is hidden
|
14
14
|
attr_reader :hidden
|
15
|
+
# @return [Integer] First column affected by this 'column info' record.
|
16
|
+
attr_reader :min
|
17
|
+
# @return [Integer] Last column affected by this 'column info' record.
|
18
|
+
attr_reader :max
|
19
|
+
# @return [Float] width in pixel, as stored in xml structure
|
20
|
+
attr_reader :width_raw
|
21
|
+
# @return [Float] width, in readable format
|
22
|
+
attr_reader :width
|
15
23
|
|
16
24
|
# Parse XlsxColumnProperties object
|
17
25
|
# @param node [Nokogiri::XML:Element] node to parse
|
@@ -20,13 +28,14 @@ module OoxmlParser
|
|
20
28
|
node.attributes.each do |key, value|
|
21
29
|
case key
|
22
30
|
when 'min'
|
23
|
-
@
|
31
|
+
@min = value.value.to_i
|
24
32
|
when 'max'
|
25
|
-
@
|
33
|
+
@max = value.value.to_i
|
26
34
|
when 'style'
|
27
35
|
@style = root_object.style_sheet.cell_xfs.xf_array[value.value.to_i]
|
28
36
|
when 'width'
|
29
|
-
@
|
37
|
+
@width_raw = value.value.to_f
|
38
|
+
@width = calculate_width(@width_raw)
|
30
39
|
when 'customWidth'
|
31
40
|
@custom_width = option_enabled?(node, 'customWidth')
|
32
41
|
when 'bestFit'
|
@@ -38,6 +47,13 @@ module OoxmlParser
|
|
38
47
|
self
|
39
48
|
end
|
40
49
|
|
50
|
+
alias from min
|
51
|
+
alias to max
|
52
|
+
|
53
|
+
extend Gem::Deprecate
|
54
|
+
deprecate :from, 'min', 2099, 1
|
55
|
+
deprecate :to, 'max', 2099, 1
|
56
|
+
|
41
57
|
# Parse list of XlsxColumnProperties
|
42
58
|
# @param columns_width_node [Nokogiri::XML:Element] node to parse
|
43
59
|
# @param parent [OOXMLDocumentObject] parent of result objects
|
@@ -50,5 +66,17 @@ module OoxmlParser
|
|
50
66
|
end
|
51
67
|
columns
|
52
68
|
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
# TODO: Currently width calculation use some magick number from old time ago
|
73
|
+
# Actual formula is way more complicated and require data about
|
74
|
+
# font max width for single character.
|
75
|
+
# Read more in ECMA-376, §18.3.1.13
|
76
|
+
# @param [Float] value raw value for width
|
77
|
+
# @return [Float] width value
|
78
|
+
def calculate_width(value)
|
79
|
+
value - 0.7109375
|
80
|
+
end
|
53
81
|
end
|
54
82
|
end
|
@@ -12,6 +12,8 @@ module OoxmlParser
|
|
12
12
|
attr_reader :style_index
|
13
13
|
# @return [String] value of cell
|
14
14
|
attr_reader :value
|
15
|
+
# @return [String] An A-1 style reference to a cell.
|
16
|
+
attr_reader :reference
|
15
17
|
# @return [String] type of string
|
16
18
|
attr_reader :type
|
17
19
|
|
@@ -31,6 +33,8 @@ module OoxmlParser
|
|
31
33
|
@style_index = value.value.to_i
|
32
34
|
when 't'
|
33
35
|
@type = value.value.to_s
|
36
|
+
when 'r'
|
37
|
+
@reference = value.value.to_s
|
34
38
|
end
|
35
39
|
end
|
36
40
|
node.xpath('*').each do |node_child|
|
@@ -60,6 +64,11 @@ module OoxmlParser
|
|
60
64
|
@raw_text
|
61
65
|
end
|
62
66
|
|
67
|
+
# @return [Coordinates] coordinates of cell
|
68
|
+
def coordinates
|
69
|
+
@coordinates ||= Coordinates.new.parse_string(@reference)
|
70
|
+
end
|
71
|
+
|
63
72
|
private
|
64
73
|
|
65
74
|
# @return [Nothing] parse text data
|
@@ -4,13 +4,17 @@ require_relative 'xlsx_row/xlsx_cell'
|
|
4
4
|
module OoxmlParser
|
5
5
|
# Single Row of XLSX
|
6
6
|
class XlsxRow < OOXMLDocumentObject
|
7
|
-
attr_accessor :
|
7
|
+
attr_accessor :height, :style, :hidden
|
8
8
|
# @return [True, False] true if the row height has been manually set.
|
9
9
|
attr_accessor :custom_height
|
10
|
-
# @return [Integer] Indicates to which row in the sheet
|
10
|
+
# @return [Integer] Indicates to which row in the sheet
|
11
|
+
# this <row> definition corresponds.
|
11
12
|
attr_accessor :index
|
13
|
+
# @return [Array<Cells>] cells of row, as in xml structure
|
14
|
+
attr_reader :cells_raw
|
12
15
|
|
13
16
|
def initialize(parent: nil)
|
17
|
+
@cells_raw = []
|
14
18
|
@cells = []
|
15
19
|
super
|
16
20
|
end
|
@@ -34,10 +38,22 @@ module OoxmlParser
|
|
34
38
|
node.xpath('*').each do |node_child|
|
35
39
|
case node_child.name
|
36
40
|
when 'c'
|
37
|
-
@
|
41
|
+
@cells_raw << XlsxCell.new(parent: self).parse(node_child)
|
38
42
|
end
|
39
43
|
end
|
40
44
|
self
|
41
45
|
end
|
46
|
+
|
47
|
+
# @return [Array<XlsxCell, nil>] list of cell in row, with nil,
|
48
|
+
# if cell data is not stored in xml
|
49
|
+
def cells
|
50
|
+
return @cells if @cells.any?
|
51
|
+
|
52
|
+
cells_raw.each do |cell|
|
53
|
+
@cells[cell.coordinates.column_number.to_i - 1] = cell
|
54
|
+
end
|
55
|
+
|
56
|
+
@cells
|
57
|
+
end
|
42
58
|
end
|
43
59
|
end
|
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.
|
4
|
+
version: 0.26.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: 2022-
|
13
|
+
date: 2022-08-22 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: nokogiri
|
@@ -605,7 +605,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
605
605
|
- !ruby/object:Gem::Version
|
606
606
|
version: '0'
|
607
607
|
requirements: []
|
608
|
-
rubygems_version: 3.3.
|
608
|
+
rubygems_version: 3.3.20
|
609
609
|
signing_key:
|
610
610
|
specification_version: 4
|
611
611
|
summary: OoxmlParser Gem
|