goldendocx 0.2.2

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.
Files changed (152) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +2 -0
  3. data/.rubocop.yml +47 -0
  4. data/CHANGELOG.md +43 -0
  5. data/Gemfile +6 -0
  6. data/Gemfile.lock +101 -0
  7. data/README.md +76 -0
  8. data/Rakefile +10 -0
  9. data/coverage/.last_run.json +5 -0
  10. data/demo/charts/create_bar_chart.rb +30 -0
  11. data/demo/charts/create_column_chart.rb +29 -0
  12. data/demo/charts/create_doughnut_chart.rb +28 -0
  13. data/demo/charts/create_line_chart.rb +41 -0
  14. data/demo/images/append_image.rb +21 -0
  15. data/demo/images/append_styled_image.rb +14 -0
  16. data/demo/tables/create_embed_image_table.rb +42 -0
  17. data/demo/tables/create_plain_table.rb +22 -0
  18. data/demo/tables/create_styled_table.rb +36 -0
  19. data/demo/templates/bg.png +0 -0
  20. data/demo/templates/blankDocument.docx +0 -0
  21. data/demo/templates/image_base64 +1 -0
  22. data/demo/templates/styles/reportLabel +19 -0
  23. data/demo/templates/styles/reportSubTitle +20 -0
  24. data/demo/templates/styles/reportTable +27 -0
  25. data/demo/templates/styles/reportTitle +19 -0
  26. data/demo/texts/append_plain_text.rb +13 -0
  27. data/demo/texts/append_styled_text.rb +23 -0
  28. data/lib/goldendocx/charts/category_axis.rb +20 -0
  29. data/lib/goldendocx/charts/properties/auto_title_deleted_property.rb +16 -0
  30. data/lib/goldendocx/charts/properties/axis_property.rb +16 -0
  31. data/lib/goldendocx/charts/properties/bar_chart_property.rb +28 -0
  32. data/lib/goldendocx/charts/properties/chart_property.rb +16 -0
  33. data/lib/goldendocx/charts/properties/column_chart_property.rb +28 -0
  34. data/lib/goldendocx/charts/properties/cross_axis_property.rb +16 -0
  35. data/lib/goldendocx/charts/properties/data_lables_property.rb +16 -0
  36. data/lib/goldendocx/charts/properties/direction_property.rb +16 -0
  37. data/lib/goldendocx/charts/properties/doughnut_chart_property.rb +17 -0
  38. data/lib/goldendocx/charts/properties/grouping_property.rb +16 -0
  39. data/lib/goldendocx/charts/properties/hole_property.rb +16 -0
  40. data/lib/goldendocx/charts/properties/index_property.rb +16 -0
  41. data/lib/goldendocx/charts/properties/label_hidden_property.rb +16 -0
  42. data/lib/goldendocx/charts/properties/layout_property.rb +14 -0
  43. data/lib/goldendocx/charts/properties/line_chart_property.rb +24 -0
  44. data/lib/goldendocx/charts/properties/marker_property.rb +16 -0
  45. data/lib/goldendocx/charts/properties/number_list_property.rb +17 -0
  46. data/lib/goldendocx/charts/properties/order_property.rb +16 -0
  47. data/lib/goldendocx/charts/properties/plot_area_property.rb +23 -0
  48. data/lib/goldendocx/charts/properties/point_count_property.rb +16 -0
  49. data/lib/goldendocx/charts/properties/point_property.rb +18 -0
  50. data/lib/goldendocx/charts/properties/rounded_corner_property.rb +16 -0
  51. data/lib/goldendocx/charts/properties/series_category_property.rb +16 -0
  52. data/lib/goldendocx/charts/properties/series_text_property.rb +16 -0
  53. data/lib/goldendocx/charts/properties/series_value_property.rb +16 -0
  54. data/lib/goldendocx/charts/properties/smooth_property.rb +14 -0
  55. data/lib/goldendocx/charts/properties/string_list_property.rb +17 -0
  56. data/lib/goldendocx/charts/properties/symbol_property.rb +16 -0
  57. data/lib/goldendocx/charts/properties/text_value_property.rb +16 -0
  58. data/lib/goldendocx/charts/properties.rb +12 -0
  59. data/lib/goldendocx/charts/reference.rb +16 -0
  60. data/lib/goldendocx/charts/series.rb +57 -0
  61. data/lib/goldendocx/charts/value_axis.rb +20 -0
  62. data/lib/goldendocx/charts.rb +26 -0
  63. data/lib/goldendocx/components/bar_chart.rb +17 -0
  64. data/lib/goldendocx/components/chart.rb +55 -0
  65. data/lib/goldendocx/components/column_chart.rb +17 -0
  66. data/lib/goldendocx/components/doughnut_chart.rb +17 -0
  67. data/lib/goldendocx/components/image.rb +77 -0
  68. data/lib/goldendocx/components/line_chart.rb +17 -0
  69. data/lib/goldendocx/components/paragraph.rb +23 -0
  70. data/lib/goldendocx/components/properties/align_property.rb +16 -0
  71. data/lib/goldendocx/components/properties/bold_property.rb +16 -0
  72. data/lib/goldendocx/components/properties/color_property.rb +16 -0
  73. data/lib/goldendocx/components/properties/drawing.rb +16 -0
  74. data/lib/goldendocx/components/properties/extents_property.rb +17 -0
  75. data/lib/goldendocx/components/properties/graphic_data_property.rb +17 -0
  76. data/lib/goldendocx/components/properties/graphic_frame_locks_property.rb +18 -0
  77. data/lib/goldendocx/components/properties/graphic_frame_property.rb +16 -0
  78. data/lib/goldendocx/components/properties/graphic_property.rb +16 -0
  79. data/lib/goldendocx/components/properties/inline.rb +20 -0
  80. data/lib/goldendocx/components/properties/non_visual_property.rb +17 -0
  81. data/lib/goldendocx/components/properties/padding_property.rb +19 -0
  82. data/lib/goldendocx/components/properties/property.rb +17 -0
  83. data/lib/goldendocx/components/properties/run.rb +20 -0
  84. data/lib/goldendocx/components/properties/run_property.rb +17 -0
  85. data/lib/goldendocx/components/properties/style_property.rb +16 -0
  86. data/lib/goldendocx/components/properties/textual.rb +16 -0
  87. data/lib/goldendocx/components/properties.rb +12 -0
  88. data/lib/goldendocx/components/table.rb +44 -0
  89. data/lib/goldendocx/components/text.rb +35 -0
  90. data/lib/goldendocx/components.rb +16 -0
  91. data/lib/goldendocx/configuration.rb +18 -0
  92. data/lib/goldendocx/content_types/default.rb +22 -0
  93. data/lib/goldendocx/content_types/override.rb +22 -0
  94. data/lib/goldendocx/document.rb +51 -0
  95. data/lib/goldendocx/documents/body.rb +90 -0
  96. data/lib/goldendocx/documents/document.rb +29 -0
  97. data/lib/goldendocx/documents/element.rb +23 -0
  98. data/lib/goldendocx/documents/relationship.rb +17 -0
  99. data/lib/goldendocx/documents/relationships.rb +39 -0
  100. data/lib/goldendocx/documents/style.rb +21 -0
  101. data/lib/goldendocx/documents/styles.rb +74 -0
  102. data/lib/goldendocx/documents/unparsed_style.rb +17 -0
  103. data/lib/goldendocx/documents.rb +10 -0
  104. data/lib/goldendocx/docx.rb +108 -0
  105. data/lib/goldendocx/element.rb +192 -0
  106. data/lib/goldendocx/images/picture.rb +41 -0
  107. data/lib/goldendocx/images/properties/blip_property.rb +16 -0
  108. data/lib/goldendocx/images/properties/drawing_property.rb +14 -0
  109. data/lib/goldendocx/images/properties/extents_property.rb +17 -0
  110. data/lib/goldendocx/images/properties/fill_rectangle_property.rb +14 -0
  111. data/lib/goldendocx/images/properties/image_data_property.rb +17 -0
  112. data/lib/goldendocx/images/properties/non_visual_drawing_property.rb +17 -0
  113. data/lib/goldendocx/images/properties/non_visual_picture_property.rb +17 -0
  114. data/lib/goldendocx/images/properties/picture_fill_property.rb +17 -0
  115. data/lib/goldendocx/images/properties/picture_shape_property.rb +16 -0
  116. data/lib/goldendocx/images/properties/shape_property.rb +30 -0
  117. data/lib/goldendocx/images/properties/stretch_property.rb +17 -0
  118. data/lib/goldendocx/images/properties/transform_property.rb +16 -0
  119. data/lib/goldendocx/images/properties.rb +12 -0
  120. data/lib/goldendocx/images/shape.rb +32 -0
  121. data/lib/goldendocx/images.rb +12 -0
  122. data/lib/goldendocx/parts/content_types.rb +63 -0
  123. data/lib/goldendocx/parts/documents.rb +103 -0
  124. data/lib/goldendocx/parts/media.rb +43 -0
  125. data/lib/goldendocx/parts.rb +10 -0
  126. data/lib/goldendocx/tables/cell.rb +33 -0
  127. data/lib/goldendocx/tables/header_cell.rb +16 -0
  128. data/lib/goldendocx/tables/header_row.rb +14 -0
  129. data/lib/goldendocx/tables/image_cell.rb +23 -0
  130. data/lib/goldendocx/tables/properties/cell_property.rb +19 -0
  131. data/lib/goldendocx/tables/properties/cell_width_property.rb +17 -0
  132. data/lib/goldendocx/tables/properties/grid_column_property.rb +16 -0
  133. data/lib/goldendocx/tables/properties/grid_property.rb +16 -0
  134. data/lib/goldendocx/tables/properties/grid_span_property.rb +16 -0
  135. data/lib/goldendocx/tables/properties/header_row_property.rb +14 -0
  136. data/lib/goldendocx/tables/properties/property.rb +17 -0
  137. data/lib/goldendocx/tables/properties/row_height_property.rb +17 -0
  138. data/lib/goldendocx/tables/properties/row_property.rb +16 -0
  139. data/lib/goldendocx/tables/properties/shading_property.rb +18 -0
  140. data/lib/goldendocx/tables/properties/style_property.rb +16 -0
  141. data/lib/goldendocx/tables/properties/vertical_align_property.rb +16 -0
  142. data/lib/goldendocx/tables/properties/width_property.rb +17 -0
  143. data/lib/goldendocx/tables/properties.rb +12 -0
  144. data/lib/goldendocx/tables/row.rb +28 -0
  145. data/lib/goldendocx/tables.rb +19 -0
  146. data/lib/goldendocx/units.rb +11 -0
  147. data/lib/goldendocx/version.rb +5 -0
  148. data/lib/goldendocx/xml_serializers/nokogiri.rb +66 -0
  149. data/lib/goldendocx/xml_serializers/ox.rb +63 -0
  150. data/lib/goldendocx.rb +72 -0
  151. data/sig/goldendocx.rbs +4 -0
  152. metadata +347 -0
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Images
5
+ module Properties
6
+ class ShapeProperty
7
+ include Goldendocx::Element
8
+
9
+ # 1 : 0.618
10
+ DEFAULT_SHAPE_WIDTH = Goldendocx::Units::EMU_PER_CENTIMETER * 15
11
+ DEFAULT_SHAPE_HEIGHT = Goldendocx::Units::EMU_PER_CENTIMETER * 9.27
12
+
13
+ attr_accessor :width, :height
14
+
15
+ namespace :v
16
+ tag :shape
17
+
18
+ attribute :style, method: :formatted_style
19
+
20
+ embeds_one :image_data, class_name: 'Goldendocx::Images::Properties::ImageDataProperty', auto_build: true
21
+
22
+ def formatted_style
23
+ height = ((self.height || DEFAULT_SHAPE_HEIGHT) / Goldendocx::Units::EMU_PER_CENTIMETER).round(2)
24
+ width = ((self.width || DEFAULT_SHAPE_WIDTH) / Goldendocx::Units::EMU_PER_CENTIMETER).round(2)
25
+ "height:#{height}cm;width:#{width}cm"
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Images
5
+ module Properties
6
+ class StretchProperty
7
+ include Goldendocx::Element
8
+
9
+ namespace :a
10
+ tag :stretch
11
+
12
+ embeds_one :fill_rectangle, class_name: 'Goldendocx::Images::Properties::FillRectangleProperty',
13
+ auto_build: true
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Images
5
+ module Properties
6
+ class TransformProperty
7
+ include Goldendocx::Element
8
+
9
+ namespace :a
10
+ tag :xfrm
11
+
12
+ embeds_one :extents, class_name: 'Goldendocx::Images::Properties::ExtentsProperty', auto_build: true
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Images
5
+ module Properties
6
+ end
7
+ end
8
+ end
9
+
10
+ Dir.glob(File.join(File.dirname(__FILE__), 'properties', '*.rb').to_s).sort.each do |file|
11
+ require file
12
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Images
5
+ class Shape
6
+ include Goldendocx::Element
7
+
8
+ namespace :w
9
+ tag :pict
10
+
11
+ embeds_one :property, class_name: 'Goldendocx::Images::Properties::ShapeProperty', auto_build: true
12
+
13
+ def initialize(**attributes)
14
+ attributes.each do |name, value|
15
+ send("#{name}=", value) if respond_to?("#{name}=")
16
+ end
17
+ end
18
+
19
+ def width=(width)
20
+ property.width = width if width
21
+ end
22
+
23
+ def height=(height)
24
+ property.height = height if height
25
+ end
26
+
27
+ def relationship_id=(relationship_id)
28
+ property.image_data.relationship_id = relationship_id if relationship_id
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Images
5
+ end
6
+ end
7
+
8
+ require 'goldendocx/images/properties'
9
+
10
+ Dir.glob(File.join(File.dirname(__FILE__), 'images', '*.rb').to_s).sort.each do |file|
11
+ require file
12
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'goldendocx/content_types/default'
4
+ require 'goldendocx/content_types/override'
5
+
6
+ module Goldendocx
7
+ module Parts
8
+ class ContentTypes
9
+ include Goldendocx::Document
10
+
11
+ XML_PATH = '[Content_Types].xml'
12
+ NAMESPACE = 'http://schemas.openxmlformats.org/package/2006/content-types'
13
+
14
+ attr_reader :defaults, :overrides
15
+
16
+ tag :Types
17
+ attribute :xmlns, default: NAMESPACE, readonly: true
18
+
19
+ class << self
20
+ def read_from(docx_file)
21
+ content_types = Goldendocx::Parts::ContentTypes.new
22
+ content_types.read_defaults(docx_file)
23
+ content_types.read_overrides(docx_file)
24
+ content_types
25
+ end
26
+ end
27
+
28
+ def initialize
29
+ @defaults = []
30
+ @overrides = []
31
+ end
32
+
33
+ def read_defaults(docx_file)
34
+ @defaults = Goldendocx.xml_serializer.parse(docx_file.read(XML_PATH), %w[Types Default]).map do |node|
35
+ Goldendocx::ContentTypes::Default.new(node[:Extension], node[:ContentType])
36
+ end
37
+ end
38
+
39
+ def read_overrides(docx_file)
40
+ @overrides = Goldendocx.xml_serializer.parse(docx_file.read(XML_PATH), %w[Types Override]).map do |node|
41
+ Goldendocx::ContentTypes::Override.new(node[:PartName], node[:ContentType])
42
+ end
43
+ end
44
+
45
+ def add_default(extension, content_type)
46
+ new_default = Goldendocx::ContentTypes::Default.new(extension, content_type)
47
+ defaults << new_default if defaults.none?(new_default)
48
+ end
49
+
50
+ def add_override(part_name, content_type)
51
+ new_override = Goldendocx::ContentTypes::Override.new(part_name, content_type)
52
+ overrides << new_override if overrides.none?(new_override)
53
+ end
54
+
55
+ def to_document_xml
56
+ super do |xml|
57
+ defaults.each { |default| xml << default }
58
+ overrides.each { |override| xml << override }
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Parts hold entries at directory word/
4
+ module Goldendocx
5
+ module Parts
6
+ class Documents
7
+ XML_PATH = 'word/'
8
+
9
+ attr_reader :document, # document.xml
10
+ :styles, # styles.xml
11
+ :relationships, # _rels/document.xml.rels
12
+ :charts, # charts/
13
+ :medias # New Medias to media/
14
+
15
+ attr_accessor :media_amount # Entries amount in directory media/ for generating relationship id
16
+
17
+ class << self
18
+ def read_from(docx_file)
19
+ parts = Goldendocx::Parts::Documents.new
20
+ parts.document.read_from(docx_file)
21
+ parts.styles.read_from(docx_file)
22
+ parts.relationships.read_from(docx_file)
23
+ parts.media_amount = docx_file.entries.count { |entry| entry.name.start_with?('word/media/') }
24
+ parts
25
+ end
26
+ end
27
+
28
+ def initialize
29
+ @document = Goldendocx::Documents::Document.new
30
+ @styles = Goldendocx::Documents::Styles.new
31
+ @relationships = Goldendocx::Documents::Relationships.new
32
+ @medias = []
33
+ end
34
+
35
+ def write_stream(zos)
36
+ styles.write_to(zos)
37
+ relationships.write_to(zos)
38
+ document.write_to(zos)
39
+ medias.each { |media| media.write_to(zos) }
40
+ document.body.charts.each { |chart| chart.write_to(zos) }
41
+ end
42
+
43
+ def create_text(text, options = {})
44
+ paragraph = document.body.create_text(text, options)
45
+
46
+ style = styles.find_text_style(options[:style])
47
+ paragraph.style = style.id if style
48
+
49
+ paragraph
50
+ end
51
+
52
+ def create_table(options = {})
53
+ table = document.body.create_table(options)
54
+
55
+ style = styles.find_table_style(options[:style])
56
+ table.style = style.id if style
57
+
58
+ table
59
+ end
60
+
61
+ def create_image(image_data, options = {})
62
+ image_media = add_image_media(image_data, options)
63
+ relationship_id = relationships.add_relationship(image_media.type, image_media.target)
64
+
65
+ document.body.create_image(relationship_id, options)
66
+ end
67
+
68
+ def create_embed_image(image_data, options = {})
69
+ image_media = add_image_media(image_data, options)
70
+ relationship_id = relationships.add_relationship(image_media.type, image_media.target)
71
+
72
+ document.body.create_embed_image(relationship_id, options)
73
+ end
74
+
75
+ def add_image_media(image_data, _options = {})
76
+ extension = 'png'
77
+ # Add to media
78
+ @media_amount += 1
79
+ image_name = "image#{media_amount}.#{extension}"
80
+ Goldendocx::Parts::Media.new(image_name, image_data).tap do |media|
81
+ medias << media
82
+ end
83
+ end
84
+
85
+ def create_chart(chart_type, width, height)
86
+ document.body.ensure_chart_type(chart_type)
87
+
88
+ chart_id = document.body.charts.size + 1
89
+
90
+ relationship_id = relationships.add_relationship(
91
+ Goldendocx::Charts::RELATIONSHIP_TYPE,
92
+ format(Goldendocx::Charts::RELATIONSHIP_NAME_PATTERN, id: chart_id)
93
+ )
94
+
95
+ document.body.create_chart(chart_type, chart_id, relationship_id, width: width, height: height)
96
+ end
97
+
98
+ def add_style(fragment)
99
+ styles.add_style(fragment)
100
+ end
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ # A parts holds media
4
+ module Goldendocx
5
+ module Parts
6
+ class Media
7
+ BASE64_PNG_PATTERN = %r{
8
+ ^data:image/png;base64,
9
+ (?<data>(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?)$
10
+ }x.freeze
11
+
12
+ def initialize(name, data)
13
+ @name = name
14
+ @data = data
15
+ end
16
+
17
+ def target
18
+ "media/#{@name}"
19
+ end
20
+
21
+ def type
22
+ 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image'
23
+ end
24
+
25
+ def input_stream
26
+ return StringIO.new(BASE64_PNG_PATTERN.match(@data)['data'].unpack1('m'), 'rb') if base64_png_data?
27
+
28
+ @data
29
+ end
30
+
31
+ def write_to(zos)
32
+ zos.put_next_entry "word/#{target}"
33
+ zos.write input_stream.read
34
+ end
35
+
36
+ private
37
+
38
+ def base64_png_data?
39
+ @data.is_a?(String) && @data.match?(BASE64_PNG_PATTERN)
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Parts
5
+ end
6
+ end
7
+
8
+ Dir.glob(File.join(File.dirname(__FILE__), 'parts', '*.rb').to_s).sort.each do |file|
9
+ require file
10
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Tables
5
+ class Cell
6
+ include Goldendocx::Element
7
+
8
+ namespace :w
9
+ tag :tc
10
+
11
+ embeds_one :property, class_name: 'Goldendocx::Tables::Properties::CellProperty', auto_build: true
12
+ embeds_one :text, class_name: 'Goldendocx::Components::Text', auto_build: true
13
+
14
+ def initialize(**attributes)
15
+ attributes.each do |name, value|
16
+ send("#{name}=", value) if respond_to?("#{name}=")
17
+ end
18
+ end
19
+
20
+ def content=(content)
21
+ text.run.build_text.value = content.to_s if content
22
+ end
23
+
24
+ def align=(align)
25
+ text.property.align.align = align if align
26
+ end
27
+
28
+ def span=(span)
29
+ property.grid_span.span = span if span
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Tables
5
+ class HeaderCell < Cell
6
+ def initialize(**attributes)
7
+ super
8
+ property.build_shading(value: :clear, color: :auto, fill: DEFAULT_BACKGROUND_COLOR)
9
+ end
10
+
11
+ def width=(width, type: :dxa)
12
+ property.width.assign_attributes(width: width, type: type)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Tables
5
+ class HeaderRow < Row
6
+ include Goldendocx::Element
7
+
8
+ namespace :w
9
+ tag :tr
10
+
11
+ embeds_one :header_row, class_name: 'Goldendocx::Tables::Properties::HeaderRowProperty', auto_build: true
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Tables
5
+ class ImageCell < Cell
6
+ embeds_one :image, class_name: 'Goldendocx::Components::Image'
7
+
8
+ def image=(image)
9
+ build_image(
10
+ relationship_id: image.relationship_id,
11
+ width: image.width,
12
+ height: image.height
13
+ )
14
+ end
15
+
16
+ def content=(content)
17
+ return unless content
18
+
19
+ image.build_run.build_text.value = content
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Tables
5
+ module Properties
6
+ class CellProperty
7
+ include Goldendocx::Element
8
+
9
+ namespace :w
10
+ tag :tcPr
11
+
12
+ embeds_one :width, class_name: 'Goldendocx::Tables::Properties::CellWidthProperty', auto_build: true
13
+ embeds_one :vertical_align, class_name: 'Goldendocx::Tables::Properties::VerticalAlignProperty', auto_build: true
14
+ embeds_one :grid_span, class_name: 'Goldendocx::Tables::Properties::GridSpanProperty', auto_build: true
15
+ embeds_one :shading, class_name: 'Goldendocx::Tables::Properties::ShadingProperty', auto_build: true
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Tables
5
+ module Properties
6
+ class CellWidthProperty
7
+ include Goldendocx::Element
8
+
9
+ namespace :w
10
+ tag :tcW
11
+
12
+ attribute :width, namespace: :w, alias_name: :w
13
+ attribute :type, namespace: :w, default: :auto
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Tables
5
+ module Properties
6
+ class GridColumnProperty
7
+ include Goldendocx::Element
8
+
9
+ namespace :w
10
+ tag :gridCol
11
+
12
+ attribute :width, alias_name: :w, namespace: :w, default: Goldendocx::Tables::DEFAULT_CELL_DXA_WIDTH
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Tables
5
+ module Properties
6
+ class GridProperty
7
+ include Goldendocx::Element
8
+
9
+ namespace :w
10
+ tag :tblGrid
11
+
12
+ embeds_many :grid_columns, class_name: 'Goldendocx::Tables::Properties::GridColumnProperty'
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Tables
5
+ module Properties
6
+ class GridSpanProperty
7
+ include Goldendocx::Element
8
+
9
+ namespace :w
10
+ tag :gridSpan
11
+
12
+ attribute :span, alias_name: :val, namespace: :w
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Tables
5
+ module Properties
6
+ class HeaderRowProperty
7
+ include Goldendocx::Element
8
+
9
+ namespace :w
10
+ tag :tblHeader
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Tables
5
+ module Properties
6
+ class Property
7
+ include Goldendocx::Element
8
+
9
+ namespace :w
10
+ tag :tblPr
11
+
12
+ embeds_one :table_style, class_name: 'Goldendocx::Tables::Properties::StyleProperty', auto_build: true
13
+ embeds_one :table_width, class_name: 'Goldendocx::Tables::Properties::WidthProperty', auto_build: true
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Tables
5
+ module Properties
6
+ class RowHeightProperty
7
+ include Goldendocx::Element
8
+
9
+ namespace :w
10
+ tag :trHeight
11
+
12
+ attribute :height, alias_name: :val, namespace: :w, default: Goldendocx::Tables::DEFAULT_CELL_DXA_HEIGHT
13
+ attribute :rule, alias_name: :hRule, namespace: :w, default: :atLeast
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Tables
5
+ module Properties
6
+ class RowProperty
7
+ include Goldendocx::Element
8
+
9
+ namespace :w
10
+ tag :trPr
11
+
12
+ embeds_one :height, class_name: 'Goldendocx::Tables::Properties::RowHeightProperty', auto_build: true
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Tables
5
+ module Properties
6
+ class ShadingProperty
7
+ include Goldendocx::Element
8
+
9
+ namespace :w
10
+ tag :shd
11
+
12
+ attribute :value, alias_name: :val, namespace: :w
13
+ attribute :color, namespace: :w
14
+ attribute :fill, namespace: :w
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Tables
5
+ module Properties
6
+ class StyleProperty
7
+ include Goldendocx::Element
8
+
9
+ namespace :w
10
+ tag :tblStyle
11
+
12
+ attribute :style_id, alias_name: :val, namespace: :w
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Tables
5
+ module Properties
6
+ class VerticalAlignProperty
7
+ include Goldendocx::Element
8
+
9
+ namespace :w
10
+ tag :vAlign
11
+
12
+ attribute :align, alias_name: :val, namespace: :w, default: :center
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Tables
5
+ module Properties
6
+ class WidthProperty
7
+ include Goldendocx::Element
8
+
9
+ namespace :w
10
+ tag :tblW
11
+
12
+ attribute :width, alias_name: :w, namespace: :w, default: Goldendocx::Tables::DEFAULT_TABLE_DXA_WIDTH
13
+ attribute :type, namespace: :w, default: :dxa
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldendocx
4
+ module Tables
5
+ module Properties
6
+ end
7
+ end
8
+ end
9
+
10
+ Dir.glob(File.join(File.dirname(__FILE__), 'properties', '*.rb').to_s).sort.each do |file|
11
+ require file
12
+ end