ooxml_parser 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|