openxml-docx 0.8.0 → 0.9.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.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/{example → examples/base} +1 -1
  4. data/examples/table +68 -0
  5. data/lib/openxml/docx/elements/grid_column.rb +12 -0
  6. data/lib/openxml/docx/elements/table.rb +30 -0
  7. data/lib/openxml/docx/elements/table_cell.rb +26 -0
  8. data/lib/openxml/docx/elements/table_grid.rb +10 -0
  9. data/lib/openxml/docx/elements/table_row.rb +36 -0
  10. data/lib/openxml/docx/package.rb +3 -0
  11. data/lib/openxml/docx/properties.rb +2 -0
  12. data/lib/openxml/docx/properties/base_property.rb +14 -0
  13. data/lib/openxml/docx/properties/cant_split.rb +8 -0
  14. data/lib/openxml/docx/properties/columns.rb +2 -0
  15. data/lib/openxml/docx/properties/grid_after.rb +8 -0
  16. data/lib/openxml/docx/properties/grid_before.rb +8 -0
  17. data/lib/openxml/docx/properties/grid_span.rb +8 -0
  18. data/lib/openxml/docx/properties/header.rb +8 -0
  19. data/lib/openxml/docx/properties/headers.rb +12 -0
  20. data/lib/openxml/docx/properties/hidden.rb +8 -0
  21. data/lib/openxml/docx/properties/hide_mark.rb +8 -0
  22. data/lib/openxml/docx/properties/no_wrap.rb +8 -0
  23. data/lib/openxml/docx/properties/table_border.rb +25 -0
  24. data/lib/openxml/docx/properties/table_borders.rb +13 -0
  25. data/lib/openxml/docx/properties/table_caption.rb +10 -0
  26. data/lib/openxml/docx/properties/table_cell_border.rb +25 -0
  27. data/lib/openxml/docx/properties/table_cell_borders.rb +13 -0
  28. data/lib/openxml/docx/properties/table_cell_cell_margin.rb +13 -0
  29. data/lib/openxml/docx/properties/table_cell_fit_text.rb +9 -0
  30. data/lib/openxml/docx/properties/table_cell_margin.rb +13 -0
  31. data/lib/openxml/docx/properties/table_cell_margins.rb +13 -0
  32. data/lib/openxml/docx/properties/table_cell_spacing.rb +13 -0
  33. data/lib/openxml/docx/properties/table_cell_width.rb +13 -0
  34. data/lib/openxml/docx/properties/table_description.rb +10 -0
  35. data/lib/openxml/docx/properties/table_header.rb +10 -0
  36. data/lib/openxml/docx/properties/table_indent.rb +13 -0
  37. data/lib/openxml/docx/properties/table_layout.rb +14 -0
  38. data/lib/openxml/docx/properties/table_look.rb +17 -0
  39. data/lib/openxml/docx/properties/table_overlap.rb +14 -0
  40. data/lib/openxml/docx/properties/table_p_pr.rb +41 -0
  41. data/lib/openxml/docx/properties/table_style.rb +10 -0
  42. data/lib/openxml/docx/properties/table_width.rb +13 -0
  43. data/lib/openxml/docx/properties/tr_height.rb +19 -0
  44. data/lib/openxml/docx/properties/valign.rb +13 -0
  45. data/lib/openxml/docx/properties/wafter.rb +12 -0
  46. data/lib/openxml/docx/properties/wbefore.rb +12 -0
  47. data/lib/openxml/docx/properties/width_property.rb +17 -0
  48. data/lib/openxml/docx/style.rb +17 -7
  49. data/lib/openxml/docx/version.rb +1 -1
  50. data/spec/elements/grid_column_spec.rb +15 -0
  51. data/spec/elements/table_cell_spec.rb +15 -0
  52. data/spec/elements/table_grid_spec.rb +17 -0
  53. data/spec/elements/table_row_spec.rb +18 -0
  54. data/spec/elements/table_spec.rb +21 -0
  55. data/spec/properties/border_spec.rb +21 -95
  56. data/spec/properties/cant_split_spec.rb +23 -0
  57. data/spec/properties/color_spec.rb +9 -29
  58. data/spec/properties/column_spec.rb +6 -22
  59. data/spec/properties/columns_spec.rb +4 -14
  60. data/spec/properties/conditional_formatting_spec.rb +12 -108
  61. data/spec/properties/document_grid_spec.rb +12 -53
  62. data/spec/properties/east_asian_layout_spec.rb +14 -74
  63. data/spec/properties/font_spec.rb +35 -238
  64. data/spec/properties/frame_spec.rb +48 -285
  65. data/spec/properties/grid_after_spec.rb +26 -0
  66. data/spec/properties/grid_before_spec.rb +26 -0
  67. data/spec/properties/grid_span_spec.rb +24 -0
  68. data/spec/properties/header_spec.rb +17 -0
  69. data/spec/properties/headers_spec.rb +39 -0
  70. data/spec/properties/hidden_spec.rb +23 -0
  71. data/spec/properties/hide_mark_spec.rb +23 -0
  72. data/spec/properties/indentation_spec.rb +32 -136
  73. data/spec/properties/language_spec.rb +3 -12
  74. data/spec/properties/latent_styles_exception_spec.rb +7 -22
  75. data/spec/properties/latent_styles_spec.rb +5 -18
  76. data/spec/properties/line_numbering_spec.rb +15 -68
  77. data/spec/properties/manual_width_spec.rb +8 -33
  78. data/spec/properties/no_wrap_spec.rb +23 -0
  79. data/spec/properties/numbering_spec.rb +4 -13
  80. data/spec/properties/page_margins_spec.rb +28 -114
  81. data/spec/properties/page_numbering_spec.rb +26 -367
  82. data/spec/properties/page_size_spec.rb +15 -62
  83. data/spec/properties/paper_source_spec.rb +8 -34
  84. data/spec/properties/shading_spec.rb +21 -92
  85. data/spec/properties/spacing_spec.rb +27 -119
  86. data/spec/properties/table_border_spec.rb +119 -0
  87. data/spec/properties/table_borders_spec.rb +41 -0
  88. data/spec/properties/table_caption_spec.rb +17 -0
  89. data/spec/properties/table_cell_border_spec.rb +119 -0
  90. data/spec/properties/table_cell_borders_spec.rb +40 -0
  91. data/spec/properties/table_cell_cell_margin_spec.rb +46 -0
  92. data/spec/properties/table_cell_fit_text.rb +23 -0
  93. data/spec/properties/table_cell_margin_spec.rb +40 -0
  94. data/spec/properties/table_cell_margins_spec.rb +46 -0
  95. data/spec/properties/table_cell_spacing_spec.rb +21 -0
  96. data/spec/properties/table_cell_width.rb +21 -0
  97. data/spec/properties/table_description_spec.rb +17 -0
  98. data/spec/properties/table_header_spec.rb +23 -0
  99. data/spec/properties/table_indent_spec.rb +43 -0
  100. data/spec/properties/table_layout_spec.rb +22 -0
  101. data/spec/properties/table_look_spec.rb +38 -0
  102. data/spec/properties/table_overlap_spec.rb +22 -0
  103. data/spec/properties/table_p_pr_spec.rb +68 -0
  104. data/spec/properties/table_row_height.rb +20 -0
  105. data/spec/properties/table_style_spec.rb +17 -0
  106. data/spec/properties/table_width_spec.rb +21 -0
  107. data/spec/properties/underline_spec.rb +14 -130
  108. data/spec/properties/valign_spec.rb +19 -0
  109. data/spec/properties/wafter_spec.rb +21 -0
  110. data/spec/properties/wbefore_spec.rb +21 -0
  111. data/spec/support/data/elements/grid_column_element.xml +4 -0
  112. data/spec/support/data/elements/table_cell_element.xml +8 -0
  113. data/spec/support/data/elements/table_element.xml +18 -0
  114. data/spec/support/data/elements/table_grid_element.xml +6 -0
  115. data/spec/support/data/elements/table_row_element.xml +13 -0
  116. data/spec/support/property_test_macros.rb +61 -0
  117. metadata +86 -3
@@ -0,0 +1,13 @@
1
+ require "openxml/docx/properties/table_cell_border"
2
+
3
+ module OpenXml
4
+ module Docx
5
+ module Properties
6
+ class TableCellBorders < ContainerProperty
7
+ tag :tcBorders
8
+ child_class :table_cell_border
9
+
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require "openxml/docx/properties/table_cell_margin"
2
+
3
+ module OpenXml
4
+ module Docx
5
+ module Properties
6
+ class TableCellCellMargin < ContainerProperty
7
+ tag :tcMar
8
+ child_class :table_cell_margin
9
+
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class TableCellFitText < BooleanProperty
5
+ tag :tcFitText
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class TableCellMargin < WidthProperty
5
+ tag_is_one_of %i(top start bottom end)
6
+
7
+ attribute :type, expects: :valid_width_type
8
+ attribute :width, expects: :positive_integer, displays_as: :w
9
+
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require "openxml/docx/properties/table_cell_margin"
2
+
3
+ module OpenXml
4
+ module Docx
5
+ module Properties
6
+ class TableCellMargins < ContainerProperty
7
+ tag :tblCellMar
8
+ child_class :table_cell_margin
9
+
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class TableCellSpacing < WidthProperty
5
+ tag :tblCellSpacing
6
+
7
+ attribute :type, expects: :valid_width_type
8
+ attribute :width, expects: :positive_integer, displays_as: :w
9
+
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class TableCellWidth < WidthProperty
5
+ tag :tcW
6
+
7
+ attribute :type, expects: :valid_width_type
8
+ attribute :width, expects: :positive_integer, displays_as: :w
9
+
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,10 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class TableDescription < StringProperty
5
+ tag :tblDescription
6
+
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class TableHeader < ToggleProperty
5
+ tag :tblHeader
6
+
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class TableIndent < WidthProperty
5
+ tag :tblInd
6
+
7
+ attribute :type, expects: :valid_width_type
8
+ attribute :width, expects: :positive_integer, displays_as: :w
9
+
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class TableLayout < ValueProperty
5
+ tag :tblLayout
6
+
7
+ def ok_values
8
+ %i(autofit fixed)
9
+ end
10
+
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,17 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class TableLook < ComplexProperty
5
+ tag :tblLook
6
+
7
+ attribute :firstColumn, expects: :true_or_false
8
+ attribute :firstRow, expects: :true_or_false
9
+ attribute :lastColumn, expects: :true_or_false
10
+ attribute :lastRow, expects: :true_or_false
11
+ attribute :noHBand, expects: :true_or_false
12
+ attribute :noVBand, expects: :true_or_false
13
+
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,14 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class TableOverlap < ValueProperty
5
+ tag :tblOverlap
6
+
7
+ def ok_values
8
+ %i(never overlap)
9
+ end
10
+
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,41 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class TablePPr < ComplexProperty
5
+ tag :tblpPr
6
+
7
+ attribute :bottomFromText, expects: :positive_integer
8
+ attribute :horizAnchor, expects: :valid_anchor
9
+ attribute :leftFromText, expects: :positive_integer
10
+ attribute :rightFromText, expects: :positive_integer
11
+ attribute :tblpX, expects: :integer
12
+ attribute :tblpXSpec, expects: :valid_x_spec
13
+ attribute :tblpY, expects: :integer
14
+ attribute :tblpYSpec, expects: :valid_y_spec
15
+ attribute :topFromText, expects: :positive_integer
16
+ attribute :vertAnchor, expects: :valid_anchor
17
+
18
+ private
19
+
20
+ def valid_anchor(value)
21
+ list = %i(margin page text)
22
+ message = "Invalid #{name}: must be one of #{list.join(", ")} (was #{value.inspect})"
23
+ raise ArgumentError, message unless list.include? value
24
+ end
25
+
26
+ def valid_x_spec(value)
27
+ list = %i(center inside left outside right)
28
+ message = "Invalid #{name}: must be one of #{list.join(", ")} (was #{value.inspect})"
29
+ raise ArgumentError, message unless list.include? value
30
+ end
31
+
32
+ def valid_y_spec(value)
33
+ list = %i(bottom center inline inside outside top)
34
+ message = "Invalid #{name}: must be one of #{list.join(", ")} (was #{value.inspect})"
35
+ raise ArgumentError, message unless list.include? value
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,10 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class TableStyle < StringProperty
5
+ tag :tblStyle
6
+
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class TableWidth < WidthProperty
5
+ tag :tblW
6
+
7
+ attribute :type, expects: :valid_width_type
8
+ attribute :width, expects: :positive_integer, displays_as: :w
9
+
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class TrHeight < ComplexProperty
5
+
6
+ attribute :hRule, expects: :valid_hrule
7
+ attribute :val, expects: :positive_integer
8
+
9
+ private
10
+ def valid_hrule(value)
11
+ list = %i(auto atLeast exact).include? value
12
+ message = "Invalid #{name}: must be one of #{list.join(", ")} (was #{value.inspect})"
13
+ raise ArgumentError, message unless list.include? value
14
+ end
15
+
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class VAlign < ValueProperty
5
+
6
+ def ok_values
7
+ %i(both bottom center top)
8
+ end
9
+
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class WAfter < WidthProperty
5
+
6
+ attribute :type, expects: :valid_width_type
7
+ attribute :width, expects: :positive_integer, displays_as: :w
8
+
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class WBefore < WidthProperty
5
+
6
+ attribute :type, expects: :valid_width_type
7
+ attribute :width, expects: :positive_integer, displays_as: :w
8
+
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,17 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class WidthProperty < ComplexProperty
5
+
6
+ protected
7
+
8
+ def valid_width_type(value)
9
+ list = %i(auto dxa nil pct)
10
+ message = "Invalid #{name}: must be one of #{list.join(", ")} (was #{value.inspect})"
11
+ raise ArgumentError, message unless list.include? value
12
+ end
13
+
14
+ end
15
+ end
16
+ end
17
+ end
@@ -4,7 +4,7 @@ module OpenXml
4
4
  include AttributeBuilder
5
5
  include PropertyBuilder
6
6
 
7
- attr_reader :paragraph, :character, :type
7
+ attr_reader :paragraph, :character, :table, :type
8
8
 
9
9
  attribute :custom, expects: :true_or_false, displays_as: :customStyle
10
10
  attribute :default, expects: :true_or_false
@@ -53,26 +53,36 @@ module OpenXml
53
53
  type == :paragraph
54
54
  end
55
55
 
56
- VALID_STYLE_TYPES = %i(character paragraph)
56
+ def character_style?
57
+ type == :character
58
+ end
59
+
60
+ VALID_STYLE_TYPES = %i(character paragraph table)
57
61
 
58
62
  private
59
63
 
60
64
  def install_paragraph_properties
61
65
  @character = nil
66
+ @table = nil
62
67
  @paragraph = OpenXml::Docx::Elements::Paragraph.new
63
68
  end
64
69
 
65
70
  def install_character_properties
66
71
  @paragraph = nil
72
+ @table = nil
67
73
  @character = OpenXml::Docx::Elements::Run.new
68
74
  end
69
75
 
76
+ def install_table_properties
77
+ @character = nil
78
+ @paragraph = nil
79
+ @table = OpenXml::Docx::Elements::Table.new
80
+ end
81
+
70
82
  def property_xml(xml)
71
- if paragraph_style?
72
- paragraph.property_xml(xml)
73
- else
74
- character.property_xml(xml)
75
- end
83
+ return paragraph.property_xml(xml) if paragraph_style?
84
+ return character.property_xml(xml) if character_style?
85
+ table.property_xml(xml)
76
86
  end
77
87
 
78
88
  def valid_style_type(value)
@@ -1,5 +1,5 @@
1
1
  module OpenXml
2
2
  module Docx
3
- VERSION = "0.8.0"
3
+ VERSION = "0.9.0"
4
4
  end
5
5
  end
@@ -0,0 +1,15 @@
1
+ require "spec_helper"
2
+
3
+ describe OpenXml::Docx::Elements::GridColumn do
4
+ include ElementTestMacros
5
+
6
+ context "after creation" do
7
+ before(:each) do
8
+ @instance = described_class.new
9
+ instance.w = 1
10
+ end
11
+
12
+ it_should_output_correct_xml
13
+ end
14
+
15
+ end
@@ -0,0 +1,15 @@
1
+ require "spec_helper"
2
+
3
+ describe OpenXml::Docx::Elements::TableCell do
4
+ include ElementTestMacros
5
+
6
+ context "after creation" do
7
+ before(:each) do
8
+ @instance = described_class.new
9
+ instance.no_wrap = true
10
+ end
11
+
12
+ it_should_output_correct_xml
13
+ end
14
+
15
+ end
@@ -0,0 +1,17 @@
1
+ require "spec_helper"
2
+
3
+ describe OpenXml::Docx::Elements::TableGrid do
4
+ include ElementTestMacros
5
+
6
+ context "after creation" do
7
+ before(:each) do
8
+ @instance = described_class.new
9
+ column = OpenXml::Docx::Elements::GridColumn.new
10
+ column.w = 1
11
+ instance << column
12
+ end
13
+
14
+ it_should_output_correct_xml
15
+ end
16
+
17
+ end