ooxml_parser 0.2.0 → 0.3.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 +5 -5
- data/README.md +17 -1
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/alternate_content/chart_style.rb +4 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart_axis.rb +9 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart_axis/scaling.rb +20 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/ooxml_size.rb +1 -1
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_blip/file_reference.rb +3 -2
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_body_properties/ooxml_shape_body_properties.rb +8 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_properties/text_box.rb +1 -1
- data/lib/ooxml_parser/common_parser/common_data/borders_properties.rb +2 -2
- data/lib/ooxml_parser/common_parser/common_data/color.rb +11 -20
- data/lib/ooxml_parser/common_parser/common_data/color/color_helper.rb +1 -1
- data/lib/ooxml_parser/common_parser/common_data/color/ooxml_color.rb +57 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/theme_colors.rb +3 -6
- data/lib/ooxml_parser/common_parser/common_data/coordinates.rb +17 -1
- data/lib/ooxml_parser/common_parser/common_data/hyperlink.rb +12 -1
- data/lib/ooxml_parser/common_parser/common_data/ooxml_document_object.rb +4 -4
- data/lib/ooxml_parser/common_parser/common_data/ooxml_document_object/ooxml_document_object_helper.rb +30 -1
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_properties.rb +5 -2
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run.rb +9 -1
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run/run_properties.rb +1 -1
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run/text.rb +23 -0
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/paragraph_borders.rb +2 -2
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/spacing.rb +0 -1
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/tabs.rb +2 -2
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/{tab_list/presentation_tab.rb → tabs/tab.rb} +17 -4
- data/lib/ooxml_parser/common_parser/common_data/table.rb +1 -1
- data/lib/ooxml_parser/common_parser/common_data/table/margins/table_margins.rb +1 -3
- data/lib/ooxml_parser/common_parser/common_data/table/properties/table_style.rb +31 -37
- data/lib/ooxml_parser/common_parser/common_data/table/properties/table_style_properties.rb +4 -0
- data/lib/ooxml_parser/common_parser/common_data/table/properties/table_style_properties/table_style_properties_helper.rb +2 -2
- data/lib/ooxml_parser/common_parser/common_data/table/row/cell/cell.rb +4 -4
- data/lib/ooxml_parser/common_parser/common_data/table/row/cell/properties/border.rb +1 -1
- data/lib/ooxml_parser/common_parser/common_data/table/table_properties.rb +1 -16
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure.rb +14 -7
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/comment.rb +2 -2
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/comments_extended.rb +39 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/comments_extended/comment_extended.rb +24 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/document_background.rb +9 -12
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/document_style.rb +1 -1
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph.rb +51 -73
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/delimeter.rb +2 -2
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_helper.rb +8 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run.rb +8 -56
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/docx_paragraph_run_helpers.rb +2 -12
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/inserted.rb +15 -1
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/sdt/sdt_content.rb +30 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/sdt/sdt_properties.rb +28 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/structured_document_tag.rb +26 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/header_footer.rb +1 -1
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/note.rb +10 -10
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/page_margins.rb +9 -16
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/page_properties.rb +11 -9
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation.rb +5 -2
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/presentation_theme/theme_color.rb +1 -3
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb +35 -24
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/common_slide_data.rb +26 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/common_slide_data/shape_tree.rb +33 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/connection_shape.rb +5 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/graphic_frame/graphic_frame.rb +2 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/presentation_notes.rb +21 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/shapes_grouping.rb +2 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide_helper.rb +3 -3
- data/lib/ooxml_parser/version.rb +1 -1
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook.rb +1 -1
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/fills/fill.rb +20 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/fills/fill/pattern_fill.rb +2 -2
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/fonts/font.rb +5 -1
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet.rb +10 -1
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/ole_objects.rb +18 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/sheet_view.rb +1 -1
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/table_part.rb +7 -1
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/table_part/autofilter.rb +34 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/table_part/autofilter/filter_column.rb +28 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/table_part/extension_list/extension.rb +5 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/table_part/extension_list/extension/sparkline_groups.rb +31 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/table_part/extension_list/extension/sparkline_groups/sparkline_group.rb +113 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/table_part/table_style_info.rb +41 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_drawing.rb +5 -11
- metadata +31 -14
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/tab_list.rb +0 -36
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/tabs/paragraph_tab.rb +0 -26
|
@@ -2,11 +2,12 @@ require_relative 'paragrpah_properties/numbering_properties'
|
|
|
2
2
|
require_relative 'paragrpah_properties/paragraph_borders'
|
|
3
3
|
require_relative 'paragrpah_properties/paragraph_spacing'
|
|
4
4
|
require_relative 'paragrpah_properties/spacing'
|
|
5
|
-
require_relative 'paragrpah_properties/tab_list'
|
|
6
5
|
require_relative 'paragrpah_properties/tabs'
|
|
7
6
|
module OoxmlParser
|
|
8
7
|
class ParagraphProperties < OOXMLDocumentObject
|
|
9
8
|
attr_accessor :align, :numbering, :level, :spacing, :spacing_before, :spacing_after, :indent, :margin_left, :margin_right
|
|
9
|
+
# @return [FrameProperties] frame properties
|
|
10
|
+
attr_reader :frame_properties
|
|
10
11
|
# @return [Tabs] list of tabs
|
|
11
12
|
attr_accessor :tabs
|
|
12
13
|
# @return [RunProperties] properties of run
|
|
@@ -68,10 +69,12 @@ module OoxmlParser
|
|
|
68
69
|
when 'buAutoNum'
|
|
69
70
|
@numbering.type = node_child.attribute('type').value.to_sym
|
|
70
71
|
@numbering.start_at = node_child.attribute('startAt').value if node_child.attribute('startAt')
|
|
72
|
+
when 'framePr'
|
|
73
|
+
@frame_properties = FrameProperties.new(parent: self).parse(node_child)
|
|
71
74
|
when 'tabs'
|
|
72
75
|
@tabs = Tabs.new(parent: self).parse(node_child)
|
|
73
76
|
when 'tabLst'
|
|
74
|
-
@tabs =
|
|
77
|
+
@tabs = Tabs.new(parent: self).parse(node_child)
|
|
75
78
|
when 'ind'
|
|
76
79
|
@indent = Indents.new(parent: self).parse(node_child)
|
|
77
80
|
when 'rPr'
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
require_relative 'paragraph_run/run_properties'
|
|
2
|
+
require_relative 'paragraph_run/text'
|
|
2
3
|
module OoxmlParser
|
|
3
4
|
# Class for parsing `r` tags
|
|
4
5
|
class ParagraphRun < OOXMLDocumentObject
|
|
5
6
|
attr_accessor :properties, :text
|
|
7
|
+
# @return [Text] text of run
|
|
8
|
+
attr_reader :t
|
|
9
|
+
# @return [Tab] tab of paragraph
|
|
10
|
+
attr_reader :tab
|
|
6
11
|
|
|
7
12
|
def initialize(properties = RunProperties.new, text = '', parent: nil)
|
|
8
13
|
@properties = properties
|
|
@@ -19,7 +24,10 @@ module OoxmlParser
|
|
|
19
24
|
when 'rPr'
|
|
20
25
|
@properties = RunProperties.new(parent: self).parse(node_child)
|
|
21
26
|
when 't'
|
|
22
|
-
@
|
|
27
|
+
@t = Text.new(parent: self).parse(node_child)
|
|
28
|
+
@text = t.text
|
|
29
|
+
when 'tab'
|
|
30
|
+
@tab = Tab.new(parent: self).parse(node_child)
|
|
23
31
|
end
|
|
24
32
|
end
|
|
25
33
|
self
|
|
@@ -89,7 +89,7 @@ module OoxmlParser
|
|
|
89
89
|
when 'spacing'
|
|
90
90
|
@spacing = RunSpacing.new(parent: self).parse(node_child)
|
|
91
91
|
when 'color'
|
|
92
|
-
@color =
|
|
92
|
+
@color = OoxmlColor.new(parent: self).parse(node_child)
|
|
93
93
|
when 'solidFill'
|
|
94
94
|
@font_color = Color.parse_color(node_child.xpath('*').first)
|
|
95
95
|
when 'latin'
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module OoxmlParser
|
|
2
|
+
# Class for parsing `t` tags
|
|
3
|
+
class Text < OOXMLDocumentObject
|
|
4
|
+
# @return [Symbol] space values
|
|
5
|
+
attr_reader :space
|
|
6
|
+
# @return [String] text value
|
|
7
|
+
attr_reader :text
|
|
8
|
+
|
|
9
|
+
# Parse Text object
|
|
10
|
+
# @param node [Nokogiri::XML:Element] node to parse
|
|
11
|
+
# @return [Text] result of parsing
|
|
12
|
+
def parse(node)
|
|
13
|
+
@text = node.text
|
|
14
|
+
node.attributes.each do |key, value|
|
|
15
|
+
case key
|
|
16
|
+
when 'space'
|
|
17
|
+
@space = value_to_symbol(value)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
self
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/paragraph_borders.rb
CHANGED
|
@@ -22,8 +22,8 @@ module OoxmlParser
|
|
|
22
22
|
result << :bottom if @bottom.val == :single
|
|
23
23
|
result << :inner if @between.val == :single
|
|
24
24
|
return :none if result == []
|
|
25
|
-
return :all if result == [
|
|
26
|
-
return :outer if result == [
|
|
25
|
+
return :all if result == %i[left right top bottom inner]
|
|
26
|
+
return :outer if result == %i[left right top bottom]
|
|
27
27
|
result.first if result.size == 1
|
|
28
28
|
end
|
|
29
29
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
require_relative 'tabs/
|
|
1
|
+
require_relative 'tabs/tab'
|
|
2
2
|
module OoxmlParser
|
|
3
3
|
# Class for working with `w:tabs`
|
|
4
4
|
class Tabs < OOXMLDocumentObject
|
|
@@ -27,7 +27,7 @@ module OoxmlParser
|
|
|
27
27
|
node.xpath('*').each do |node_child|
|
|
28
28
|
case node_child.name
|
|
29
29
|
when 'tab'
|
|
30
|
-
@tabs_array <<
|
|
30
|
+
@tabs_array << Tab.new(parent: self).parse(node_child)
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
self
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
module OoxmlParser
|
|
2
|
-
# Class for storing `a:tab` data
|
|
3
|
-
class
|
|
2
|
+
# Class for storing `w:tab`, `a:tab` data
|
|
3
|
+
class Tab < OOXMLDocumentObject
|
|
4
4
|
# @return [Symbol] Specifies the style of the tab.
|
|
5
5
|
attr_accessor :value
|
|
6
|
+
# @return [Symbol] Specifies the leader symbol of tab
|
|
7
|
+
attr_reader :leader
|
|
6
8
|
# @return [OOxmlSize] Specifies the position of the tab stop.
|
|
7
9
|
attr_accessor :position
|
|
8
10
|
|
|
@@ -14,13 +16,24 @@ module OoxmlParser
|
|
|
14
16
|
def parse(node)
|
|
15
17
|
node.attributes.each do |key, value|
|
|
16
18
|
case key
|
|
17
|
-
when 'algn'
|
|
19
|
+
when 'algn', 'val'
|
|
18
20
|
@value = value_to_symbol(value)
|
|
21
|
+
when 'leader'
|
|
22
|
+
@leader = value_to_symbol(value)
|
|
19
23
|
when 'pos'
|
|
20
|
-
@position = OoxmlSize.new(value.value.to_f,
|
|
24
|
+
@position = OoxmlSize.new(value.value.to_f, position_unit(node))
|
|
21
25
|
end
|
|
22
26
|
end
|
|
23
27
|
self
|
|
24
28
|
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
# @param node [Nokogiri::XML:Element] node to determine size
|
|
33
|
+
# @return [Symbol] type of size unit
|
|
34
|
+
def position_unit(node)
|
|
35
|
+
return :emu if node.namespace.prefix == 'a'
|
|
36
|
+
:dxa
|
|
37
|
+
end
|
|
25
38
|
end
|
|
26
39
|
end
|
|
@@ -28,7 +28,7 @@ module OoxmlParser
|
|
|
28
28
|
def parse(node,
|
|
29
29
|
number = 0,
|
|
30
30
|
default_table_properties = TableProperties.new)
|
|
31
|
-
table_properties = default_table_properties.
|
|
31
|
+
table_properties = default_table_properties.dup
|
|
32
32
|
table_properties.jc = :left
|
|
33
33
|
node.xpath('*').each do |node_child|
|
|
34
34
|
case node_child.name
|
|
@@ -16,9 +16,7 @@ module OoxmlParser
|
|
|
16
16
|
instance_variables.each do |current_attribute|
|
|
17
17
|
next if current_attribute == :@parent
|
|
18
18
|
next if current_attribute == :@is_default
|
|
19
|
-
unless instance_variable_get(current_attribute) == other.instance_variable_get(current_attribute)
|
|
20
|
-
return false
|
|
21
|
-
end
|
|
19
|
+
return false unless instance_variable_get(current_attribute) == other.instance_variable_get(current_attribute)
|
|
22
20
|
end
|
|
23
21
|
true
|
|
24
22
|
end
|
|
@@ -10,45 +10,39 @@ module OoxmlParser
|
|
|
10
10
|
# @param style_id [String] id to parse
|
|
11
11
|
# @return [TableStyle] result of parsing
|
|
12
12
|
def parse(style_id: nil)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
@southwest_cell = TableElement.new(parent: self).parse(style_node_child)
|
|
44
|
-
when 'neCell'
|
|
45
|
-
@northeast_cell = TableElement.new(parent: self).parse(style_node_child)
|
|
46
|
-
when 'nwCell'
|
|
47
|
-
@northwest_cell = TableElement.new(parent: self).parse(style_node_child)
|
|
48
|
-
end
|
|
13
|
+
nodes = get_style_node(style_id)
|
|
14
|
+
return nil unless nodes
|
|
15
|
+
nodes.xpath('*').each do |style_node_child|
|
|
16
|
+
case style_node_child.name
|
|
17
|
+
when 'wholeTbl'
|
|
18
|
+
@whole_table = TableElement.new(parent: self).parse(style_node_child)
|
|
19
|
+
when 'band1H'
|
|
20
|
+
@banding_1_horizontal = TableElement.new(parent: self).parse(style_node_child)
|
|
21
|
+
when 'band2H', 'band2Horz'
|
|
22
|
+
@banding_2_horizontal = TableElement.new(parent: self).parse(style_node_child)
|
|
23
|
+
when 'band1V'
|
|
24
|
+
@banding_1_vertical = TableElement.new(parent: self).parse(style_node_child)
|
|
25
|
+
when 'band2V'
|
|
26
|
+
@banding_2_vertical = TableElement.new(parent: self).parse(style_node_child)
|
|
27
|
+
when 'lastCol'
|
|
28
|
+
@last_column = TableElement.new(parent: self).parse(style_node_child)
|
|
29
|
+
when 'firstCol'
|
|
30
|
+
@first_column = TableElement.new(parent: self).parse(style_node_child)
|
|
31
|
+
when 'lastRow'
|
|
32
|
+
@last_row = TableElement.new(parent: self).parse(style_node_child)
|
|
33
|
+
when 'firstRow'
|
|
34
|
+
@first_row = TableElement.new(parent: self).parse(style_node_child)
|
|
35
|
+
when 'seCell'
|
|
36
|
+
@southeast_cell = TableElement.new(parent: self).parse(style_node_child)
|
|
37
|
+
when 'swCell'
|
|
38
|
+
@southwest_cell = TableElement.new(parent: self).parse(style_node_child)
|
|
39
|
+
when 'neCell'
|
|
40
|
+
@northeast_cell = TableElement.new(parent: self).parse(style_node_child)
|
|
41
|
+
when 'nwCell'
|
|
42
|
+
@northwest_cell = TableElement.new(parent: self).parse(style_node_child)
|
|
49
43
|
end
|
|
50
44
|
end
|
|
51
|
-
@id = style_id
|
|
45
|
+
@id = style_id
|
|
52
46
|
self
|
|
53
47
|
end
|
|
54
48
|
|
|
@@ -10,6 +10,8 @@ module OoxmlParser
|
|
|
10
10
|
attr_accessor :table_cell_properties
|
|
11
11
|
# @return [TableProperties] properties of table
|
|
12
12
|
attr_accessor :table_properties
|
|
13
|
+
# @return [TableRowProperties] properties of table row
|
|
14
|
+
attr_reader :table_row_properties
|
|
13
15
|
# @return [ParagraphProperties] properties of paragraph
|
|
14
16
|
attr_accessor :paragraph_properties
|
|
15
17
|
alias cell_properties table_cell_properties
|
|
@@ -40,6 +42,8 @@ module OoxmlParser
|
|
|
40
42
|
@table_cell_properties = CellProperties.new(parent: self).parse(node_child)
|
|
41
43
|
when 'tblPr'
|
|
42
44
|
@table_properties = TableProperties.new(parent: self).parse(node_child)
|
|
45
|
+
when 'trPr'
|
|
46
|
+
@table_row_properties = TableRowProperties.new(parent: self).parse(node_child)
|
|
43
47
|
when 'pPr'
|
|
44
48
|
@paragraph_properties = ParagraphProperties.new(parent: self).parse(node_child)
|
|
45
49
|
end
|
|
@@ -15,7 +15,7 @@ module OoxmlParser
|
|
|
15
15
|
first_row: :firstRow,
|
|
16
16
|
last_row: :lastRow }.freeze
|
|
17
17
|
|
|
18
|
-
TABLE_STYLES_NAMES_HASH.
|
|
18
|
+
TABLE_STYLES_NAMES_HASH.each_key do |table_style_name|
|
|
19
19
|
define_method(table_style_name) do
|
|
20
20
|
@table_style_properties_list.each do |table_style|
|
|
21
21
|
return table_style if table_style.type == TABLE_STYLES_NAMES_HASH[table_style_name]
|
|
@@ -29,7 +29,7 @@ module OoxmlParser
|
|
|
29
29
|
# with `ooxml_parser` 0.1.2 and earlier
|
|
30
30
|
# @return [Nothing]
|
|
31
31
|
def fill_empty_table_styles
|
|
32
|
-
TABLE_STYLES_NAMES_HASH.
|
|
32
|
+
TABLE_STYLES_NAMES_HASH.each_value do |current_table_style|
|
|
33
33
|
style_exist = false
|
|
34
34
|
@table_style_properties_list.each do |existing_style|
|
|
35
35
|
style_exist = true if existing_style.type == current_table_style
|
|
@@ -34,10 +34,10 @@ module OoxmlParser
|
|
|
34
34
|
when 'tcPr'
|
|
35
35
|
@properties = CellProperties.new(parent: self).parse(node_child)
|
|
36
36
|
when 'p'
|
|
37
|
-
@elements << DocumentStructure.default_table_paragraph_style.
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
@elements << DocumentStructure.default_table_paragraph_style.dup.parse(node_child,
|
|
38
|
+
0,
|
|
39
|
+
DocumentStructure.default_table_run_style,
|
|
40
|
+
parent: self)
|
|
41
41
|
when 'tbl'
|
|
42
42
|
@elements << Table.new(parent: self).parse(node_child)
|
|
43
43
|
end
|
|
@@ -10,7 +10,7 @@ require_relative 'table_properties/table_borders'
|
|
|
10
10
|
module OoxmlParser
|
|
11
11
|
# Class for parsing `w:tblPr` tags
|
|
12
12
|
class TableProperties < OOXMLDocumentObject
|
|
13
|
-
attr_accessor :jc, :table_width, :table_borders, :
|
|
13
|
+
attr_accessor :jc, :table_width, :table_borders, :table_positon, :table_cell_margin, :table_indent, :stretching, :table_style, :row_banding_size,
|
|
14
14
|
:column_banding_size, :table_look, :grid_column, :style
|
|
15
15
|
# @return [TableStyleColumnBandSize] table style column band size
|
|
16
16
|
attr_accessor :table_style_column_band_size
|
|
@@ -35,21 +35,6 @@ module OoxmlParser
|
|
|
35
35
|
@parent = parent
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
def copy
|
|
39
|
-
table = TableProperties.new
|
|
40
|
-
table.jc = @jc
|
|
41
|
-
table.table_width = @table_width
|
|
42
|
-
table.shade = @shade
|
|
43
|
-
table.stretching = @stretching
|
|
44
|
-
table.table_borders = @table_borders
|
|
45
|
-
table.table_properties = @table_properties
|
|
46
|
-
table.table_cell_margin = @table_cell_margin
|
|
47
|
-
table.table_indent = @table_indent
|
|
48
|
-
table.grid_column = @grid_column
|
|
49
|
-
table.style = style
|
|
50
|
-
table
|
|
51
|
-
end
|
|
52
|
-
|
|
53
38
|
# Parse TableProperties object
|
|
54
39
|
# @param node [Nokogiri::XML:Element] node to parse
|
|
55
40
|
# @return [TableProperties] result of parsing
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# noinspection RubyInstanceMethodNamingConvention
|
|
2
2
|
require_relative 'document_structure/comment'
|
|
3
|
+
require_relative 'document_structure/comments_extended'
|
|
3
4
|
require_relative 'document_structure/docx_paragraph'
|
|
4
5
|
require_relative 'document_structure/document_background'
|
|
5
6
|
require_relative 'document_structure/document_properties'
|
|
@@ -25,6 +26,8 @@ module OoxmlParser
|
|
|
25
26
|
attr_accessor :theme_colors
|
|
26
27
|
# @return [DocumentSettings] settings
|
|
27
28
|
attr_accessor :settings
|
|
29
|
+
# @return [CommentsExtended] extended comments
|
|
30
|
+
attr_accessor :comments_extended
|
|
28
31
|
|
|
29
32
|
def initialize
|
|
30
33
|
@elements = []
|
|
@@ -147,19 +150,22 @@ module OoxmlParser
|
|
|
147
150
|
end
|
|
148
151
|
document.xpath('w:body').each do |body|
|
|
149
152
|
body.xpath('*').each do |element|
|
|
150
|
-
|
|
153
|
+
case element.name
|
|
154
|
+
when 'p'
|
|
151
155
|
child = element.child
|
|
152
156
|
unless child.nil? && doc_structure.elements.last.class == Table
|
|
153
|
-
paragraph_style = DocumentStructure.default_paragraph_style.
|
|
157
|
+
paragraph_style = DocumentStructure.default_paragraph_style.dup.parse(element, number, DocumentStructure.default_run_style, parent: doc_structure)
|
|
154
158
|
number += 1
|
|
155
|
-
doc_structure.elements << paragraph_style.
|
|
159
|
+
doc_structure.elements << paragraph_style.dup
|
|
156
160
|
end
|
|
157
|
-
|
|
161
|
+
when 'tbl'
|
|
158
162
|
table = Table.new(parent: doc_structure).parse(element,
|
|
159
163
|
number,
|
|
160
164
|
TableProperties.new)
|
|
161
165
|
number += 1
|
|
162
166
|
doc_structure.elements << table
|
|
167
|
+
when 'sdt'
|
|
168
|
+
doc_structure.elements << StructuredDocumentTag.new(parent: self).parse(element)
|
|
163
169
|
end
|
|
164
170
|
end
|
|
165
171
|
body.xpath('w:sectPr').each do |sect_pr|
|
|
@@ -172,7 +178,8 @@ module OoxmlParser
|
|
|
172
178
|
end
|
|
173
179
|
OOXMLDocumentObject.xmls_stack.pop
|
|
174
180
|
doc_structure.document_properties = DocumentProperties.new(parent: doc_structure).parse
|
|
175
|
-
doc_structure.comments = Comment.parse_list
|
|
181
|
+
doc_structure.comments = Comment.parse_list(parent: doc_structure)
|
|
182
|
+
doc_structure.comments_extended = CommentsExtended.new(parent: doc_structure).parse
|
|
176
183
|
doc_structure.settings = DocumentSettings.new(parent: doc_structure).parse
|
|
177
184
|
doc_structure
|
|
178
185
|
end
|
|
@@ -194,9 +201,9 @@ module OoxmlParser
|
|
|
194
201
|
end
|
|
195
202
|
end
|
|
196
203
|
end
|
|
197
|
-
DocumentStructure.default_table_paragraph_style = DocumentStructure.default_paragraph_style.
|
|
204
|
+
DocumentStructure.default_table_paragraph_style = DocumentStructure.default_paragraph_style.dup
|
|
198
205
|
DocumentStructure.default_table_paragraph_style.spacing = Spacing.new(0, 0, 1, :auto)
|
|
199
|
-
DocumentStructure.default_table_run_style = DocumentStructure.default_run_style.
|
|
206
|
+
DocumentStructure.default_table_run_style = DocumentStructure.default_run_style.dup
|
|
200
207
|
doc.search('//w:style').each do |style|
|
|
201
208
|
next if style.attribute('default').nil?
|
|
202
209
|
next unless (style.attribute('default').value == '1' || style.attribute('default').value == 'on' || style.attribute('default').value == 'true') && style.attribute('type').value == 'table'
|
|
@@ -8,7 +8,7 @@ module OoxmlParser
|
|
|
8
8
|
@paragraphs = paragraphs
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
def self.parse_list
|
|
11
|
+
def self.parse_list(parent: nil)
|
|
12
12
|
comments = []
|
|
13
13
|
comments_filename = "#{OOXMLDocumentObject.path_to_folder}/#{OOXMLDocumentObject.root_subfolder}/comments.xml"
|
|
14
14
|
return [] unless File.exist?(comments_filename)
|
|
@@ -17,7 +17,7 @@ module OoxmlParser
|
|
|
17
17
|
document.xpath('w:comment').each do |comment_tag|
|
|
18
18
|
comment = Comment.new(comment_tag.attribute('id').value)
|
|
19
19
|
comment_tag.xpath('w:p').each_with_index do |p, index|
|
|
20
|
-
comment.paragraphs << DocxParagraph.new.parse(p, index)
|
|
20
|
+
comment.paragraphs << DocxParagraph.new.parse(p, index, parent: parent)
|
|
21
21
|
end
|
|
22
22
|
comments << comment.dup
|
|
23
23
|
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require_relative 'comments_extended/comment_extended'
|
|
2
|
+
module OoxmlParser
|
|
3
|
+
# Class for parsing `commentsExtended.xml` file
|
|
4
|
+
class CommentsExtended < OOXMLDocumentObject
|
|
5
|
+
def initialize(parent: nil)
|
|
6
|
+
@comments_extended_array = []
|
|
7
|
+
@parent = parent
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# @return [Array, CommentsExtended] accessor
|
|
11
|
+
def [](key)
|
|
12
|
+
@comments_extended_array[key]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Parse CommentsExtended object
|
|
16
|
+
# @return [CommentsExtended] result of parsing
|
|
17
|
+
def parse
|
|
18
|
+
file_to_parse = OOXMLDocumentObject.path_to_folder + 'word/commentsExtended.xml'
|
|
19
|
+
return nil unless File.exist?(file_to_parse)
|
|
20
|
+
doc = Nokogiri::XML(File.open(file_to_parse))
|
|
21
|
+
doc.xpath('w15:commentsEx/*').each do |node_child|
|
|
22
|
+
case node_child.name
|
|
23
|
+
when 'commentEx'
|
|
24
|
+
@comments_extended_array << CommentExtended.new(parent: self).parse(node_child)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
self
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# @param id [Integer] id of comment
|
|
31
|
+
# @return [CommentExtended] comment by id
|
|
32
|
+
def by_id(id)
|
|
33
|
+
@comments_extended_array.each do |cur_comment|
|
|
34
|
+
return cur_comment if cur_comment.paragraph_id == id
|
|
35
|
+
end
|
|
36
|
+
nil
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|