openxml-docx 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +4 -4
  3. data/examples/drawing-ml +134 -0
  4. data/examples/table +28 -0
  5. data/lib/openxml/docx.rb +9 -0
  6. data/lib/openxml/docx/attribute_builder.rb +17 -4
  7. data/lib/openxml/docx/elements/absolute_position_tab.rb +4 -19
  8. data/lib/openxml/docx/elements/bidi_embed.rb +1 -10
  9. data/lib/openxml/docx/elements/bidi_override.rb +1 -9
  10. data/lib/openxml/docx/elements/break.rb +3 -14
  11. data/lib/openxml/docx/elements/control.rb +5 -2
  12. data/lib/openxml/docx/elements/deleted_text.rb +1 -1
  13. data/lib/openxml/docx/elements/drawing.rb +9 -0
  14. data/lib/openxml/docx/elements/element.rb +2 -1
  15. data/lib/openxml/docx/elements/embed_bold.rb +25 -0
  16. data/lib/openxml/docx/elements/embed_bold_italic.rb +25 -0
  17. data/lib/openxml/docx/elements/embed_italic.rb +25 -0
  18. data/lib/openxml/docx/elements/embed_regular.rb +25 -0
  19. data/lib/openxml/docx/elements/family.rb +22 -0
  20. data/lib/openxml/docx/elements/font.rb +14 -0
  21. data/lib/openxml/docx/elements/grid_column.rb +2 -2
  22. data/lib/openxml/docx/elements/group_shape.rb +10 -0
  23. data/lib/openxml/docx/elements/markup_compatibility_alternate_content.rb +10 -0
  24. data/lib/openxml/docx/elements/markup_compatibility_choice.rb +13 -0
  25. data/lib/openxml/docx/elements/markup_compatibility_fallback.rb +10 -0
  26. data/lib/openxml/docx/elements/paper_source.rb +4 -2
  27. data/lib/openxml/docx/elements/section_properties.rb +9 -0
  28. data/lib/openxml/docx/elements/symbol.rb +4 -2
  29. data/lib/openxml/docx/elements/table.rb +1 -1
  30. data/lib/openxml/docx/elements/table_cell.rb +2 -1
  31. data/lib/openxml/docx/elements/table_row.rb +7 -5
  32. data/lib/openxml/docx/elements/text.rb +1 -10
  33. data/lib/openxml/docx/elements/vml_container.rb +10 -0
  34. data/lib/openxml/docx/elements/word_processing_drawing_anchor.rb +23 -0
  35. data/lib/openxml/docx/elements/word_processing_drawing_effect_extent.rb +16 -0
  36. data/lib/openxml/docx/elements/word_processing_drawing_extent.rb +14 -0
  37. data/lib/openxml/docx/elements/word_processing_drawing_nv_graphic_frame_properties.rb +11 -0
  38. data/lib/openxml/docx/elements/word_processing_drawing_object_nv_properties.rb +17 -0
  39. data/lib/openxml/docx/elements/word_processing_drawing_position_h.rb +23 -0
  40. data/lib/openxml/docx/elements/word_processing_drawing_position_offset.rb +10 -0
  41. data/lib/openxml/docx/elements/word_processing_drawing_position_v.rb +23 -0
  42. data/lib/openxml/docx/elements/word_processing_drawing_simple_position.rb +13 -0
  43. data/lib/openxml/docx/elements/word_processing_drawing_wrap_none.rb +10 -0
  44. data/lib/openxml/docx/elements/word_processing_shapes_body_properties.rb +58 -0
  45. data/lib/openxml/docx/elements/word_processing_shapes_shape.rb +12 -0
  46. data/lib/openxml/docx/elements/word_processing_shapes_shape_properties.rb +23 -0
  47. data/lib/openxml/docx/package.rb +73 -1
  48. data/lib/openxml/docx/parts/document.rb +6 -24
  49. data/lib/openxml/docx/parts/fonts.rb +35 -0
  50. data/lib/openxml/docx/parts/footer.rb +32 -0
  51. data/lib/openxml/docx/parts/header.rb +32 -0
  52. data/lib/openxml/docx/parts/settings.rb +6 -2
  53. data/lib/openxml/docx/parts/styles.rb +5 -6
  54. data/lib/openxml/docx/properties.rb +0 -1
  55. data/lib/openxml/docx/properties/alignment.rb +1 -1
  56. data/lib/openxml/docx/properties/base_property.rb +13 -0
  57. data/lib/openxml/docx/properties/border.rb +11 -9
  58. data/lib/openxml/docx/properties/color.rb +6 -4
  59. data/lib/openxml/docx/properties/column.rb +4 -2
  60. data/lib/openxml/docx/properties/columns.rb +6 -4
  61. data/lib/openxml/docx/properties/complex_property.rb +1 -1
  62. data/lib/openxml/docx/properties/conditional_formatting.rb +14 -12
  63. data/lib/openxml/docx/properties/document_grid.rb +4 -10
  64. data/lib/openxml/docx/properties/east_asian_layout.rb +6 -11
  65. data/lib/openxml/docx/properties/font.rb +18 -22
  66. data/lib/openxml/docx/properties/footer_reference.rb +21 -0
  67. data/lib/openxml/docx/properties/frame.rb +16 -47
  68. data/lib/openxml/docx/properties/header_reference.rb +21 -0
  69. data/lib/openxml/docx/properties/indentation.rb +11 -8
  70. data/lib/openxml/docx/properties/language.rb +5 -3
  71. data/lib/openxml/docx/properties/latent_styles.rb +9 -6
  72. data/lib/openxml/docx/properties/latent_styles_exception.rb +9 -6
  73. data/lib/openxml/docx/properties/line_numbering.rb +5 -11
  74. data/lib/openxml/docx/properties/manual_width.rb +4 -2
  75. data/lib/openxml/docx/properties/numbering.rb +4 -2
  76. data/lib/openxml/docx/properties/page_borders.rb +6 -19
  77. data/lib/openxml/docx/properties/page_margins.rb +10 -7
  78. data/lib/openxml/docx/properties/page_numbering.rb +66 -74
  79. data/lib/openxml/docx/properties/page_size.rb +5 -12
  80. data/lib/openxml/docx/properties/shading.rb +46 -52
  81. data/lib/openxml/docx/properties/spacing.rb +9 -14
  82. data/lib/openxml/docx/properties/table_border.rb +12 -10
  83. data/lib/openxml/docx/properties/table_cell_border.rb +12 -10
  84. data/lib/openxml/docx/properties/table_cell_margin.rb +6 -4
  85. data/lib/openxml/docx/properties/table_cell_spacing.rb +5 -3
  86. data/lib/openxml/docx/properties/table_cell_width.rb +5 -3
  87. data/lib/openxml/docx/properties/table_indent.rb +5 -3
  88. data/lib/openxml/docx/properties/table_layout.rb +2 -4
  89. data/lib/openxml/docx/properties/table_look.rb +8 -6
  90. data/lib/openxml/docx/properties/table_p_pr.rb +11 -30
  91. data/lib/openxml/docx/properties/table_row_height.rb +13 -0
  92. data/lib/openxml/docx/properties/table_width.rb +5 -3
  93. data/lib/openxml/docx/properties/underline.rb +13 -12
  94. data/lib/openxml/docx/properties/wafter.rb +5 -3
  95. data/lib/openxml/docx/properties/wbefore.rb +5 -3
  96. data/lib/openxml/docx/root_namespaces.rb +74 -0
  97. data/lib/openxml/docx/section.rb +2 -0
  98. data/lib/openxml/docx/style.rb +4 -4
  99. data/lib/openxml/docx/version.rb +1 -1
  100. data/lib/openxml/drawingml.rb +17 -0
  101. data/lib/openxml/drawingml/elements.rb +13 -0
  102. data/lib/openxml/drawingml/elements/adjust_values_list.rb +11 -0
  103. data/lib/openxml/drawingml/elements/blip_fill.rb +14 -0
  104. data/lib/openxml/drawingml/elements/extension.rb +13 -0
  105. data/lib/openxml/drawingml/elements/extension_list.rb +11 -0
  106. data/lib/openxml/drawingml/elements/extents.rb +14 -0
  107. data/lib/openxml/drawingml/elements/graphic.rb +10 -0
  108. data/lib/openxml/drawingml/elements/graphic_data.rb +12 -0
  109. data/lib/openxml/drawingml/elements/graphic_frame_locks.rb +17 -0
  110. data/lib/openxml/drawingml/elements/head_end.rb +28 -0
  111. data/lib/openxml/drawingml/elements/no_fill.rb +10 -0
  112. data/lib/openxml/drawingml/elements/non_visual_drawing_properties.rb +17 -0
  113. data/lib/openxml/drawingml/elements/non_visual_picture_drawing_properties.rb +12 -0
  114. data/lib/openxml/drawingml/elements/non_visual_picture_properties.rb +10 -0
  115. data/lib/openxml/drawingml/elements/offset.rb +14 -0
  116. data/lib/openxml/drawingml/elements/outline.rb +36 -0
  117. data/lib/openxml/drawingml/elements/picture.rb +10 -0
  118. data/lib/openxml/drawingml/elements/preset_geometry.rb +210 -0
  119. data/lib/openxml/drawingml/elements/round.rb +10 -0
  120. data/lib/openxml/drawingml/elements/shape_guide.rb +40 -0
  121. data/lib/openxml/drawingml/elements/solid_fill.rb +10 -0
  122. data/lib/openxml/drawingml/elements/srgb_color.rb +14 -0
  123. data/lib/openxml/drawingml/elements/tail_end.rb +28 -0
  124. data/lib/openxml/drawingml/elements/transform_effect.rb +18 -0
  125. data/lib/openxml/drawingml/elements/wordprocessing_shape_group.rb +11 -0
  126. data/lib/openxml/vml.rb +17 -0
  127. data/lib/openxml/vml/elements.rb +13 -0
  128. data/lib/openxml/vml/elements/group.rb +88 -0
  129. data/lib/openxml/vml/elements/rectangle.rb +115 -0
  130. data/lib/openxml/vml/elements/rounded_rectangle.rb +121 -0
  131. data/openxml-docx.gemspec +1 -1
  132. data/spec/elements/absolute_position_tab_spec.rb +15 -47
  133. data/spec/elements/bidi_embed_spec.rb +4 -8
  134. data/spec/elements/bidi_override_spec.rb +4 -8
  135. data/spec/elements/break_spec.rb +8 -31
  136. data/spec/elements/content_part_spec.rb +2 -2
  137. data/spec/elements/control_spec.rb +6 -6
  138. data/spec/elements/deleted_text_spec.rb +2 -2
  139. data/spec/elements/drawing_spec.rb +11 -0
  140. data/spec/elements/drawingml/adjust_values_list_spec.rb +8 -0
  141. data/spec/elements/drawingml/blip_fill_spec.rb +34 -0
  142. data/spec/elements/drawingml/extension_list_spec.rb +8 -0
  143. data/spec/elements/drawingml/extension_spec.rb +19 -0
  144. data/spec/elements/drawingml/extents_spec.rb +33 -0
  145. data/spec/elements/drawingml/graphic_data_spec.rb +19 -0
  146. data/spec/elements/drawingml/graphic_frame_locks_spec.rb +78 -0
  147. data/spec/elements/drawingml/graphic_spec.rb +8 -0
  148. data/spec/elements/drawingml/head_end_spec.rb +45 -0
  149. data/spec/elements/drawingml/no_fill_spec.rb +8 -0
  150. data/spec/elements/drawingml/non_visual_drawing_properties_spec.rb +63 -0
  151. data/spec/elements/drawingml/non_visual_picture_drawing_properties_spec.rb +18 -0
  152. data/spec/elements/drawingml/non_visual_picture_properties_spec.rb +8 -0
  153. data/spec/elements/drawingml/offset_spec.rb +32 -0
  154. data/spec/elements/drawingml/outline_spec.rb +58 -0
  155. data/spec/elements/drawingml/picture_spec.rb +8 -0
  156. data/spec/elements/drawingml/preset_geometry_spec.rb +19 -0
  157. data/spec/elements/drawingml/round_spec.rb +8 -0
  158. data/spec/elements/drawingml/shape_guide_spec.rb +49 -0
  159. data/spec/elements/drawingml/solid_fill_spec.rb +8 -0
  160. data/spec/elements/drawingml/srgb_color_spec.rb +20 -0
  161. data/spec/elements/drawingml/tail_end_spec.rb +44 -0
  162. data/spec/elements/drawingml/transform_effect_spec.rb +80 -0
  163. data/spec/elements/drawingml/wordprocessing_shape_group_spec.rb +12 -0
  164. data/spec/elements/group_shape_spec.rb +11 -0
  165. data/spec/elements/markup_compatibility_alternate_content_spec.rb +11 -0
  166. data/spec/elements/markup_compatibility_choice_spec.rb +22 -0
  167. data/spec/elements/markup_compatibility_fallback_spec.rb +11 -0
  168. data/spec/elements/section_properties_spec.rb +12 -0
  169. data/spec/elements/symbol_spec.rb +4 -7
  170. data/spec/elements/text_spec.rb +2 -2
  171. data/spec/elements/vml/group_spec.rb +542 -0
  172. data/spec/elements/vml/rectangle_spec.rb +739 -0
  173. data/spec/elements/vml/rounded_rectangle_spec.rb +656 -0
  174. data/spec/elements/vml_container_spec.rb +11 -0
  175. data/spec/elements/word_processing_drawing_anchor_spec.rb +40 -0
  176. data/spec/elements/word_processing_drawing_effect_extent_spec.rb +57 -0
  177. data/spec/elements/word_processing_drawing_extent_spec.rb +34 -0
  178. data/spec/elements/word_processing_drawing_nv_graphic_frame_properties_spec.rb +11 -0
  179. data/spec/elements/word_processing_drawing_object_nv_properties_spec.rb +67 -0
  180. data/spec/elements/word_processing_drawing_position_h_spec.rb +21 -0
  181. data/spec/elements/word_processing_drawing_position_v_spec.rb +21 -0
  182. data/spec/elements/word_processing_drawing_simple_position_spec.rb +34 -0
  183. data/spec/elements/word_processing_drawing_wrap_none_spec.rb +12 -0
  184. data/spec/elements/word_processing_shapes_body_properties_spec.rb +223 -0
  185. data/spec/elements/word_processing_shapes_shape_properties_spec.rb +21 -0
  186. data/spec/elements/word_processing_shapes_shape_spec.rb +23 -0
  187. data/spec/parts/footer_spec.rb +33 -0
  188. data/spec/parts/header_spec.rb +33 -0
  189. data/spec/properties/footer_reference_spec.rb +32 -0
  190. data/spec/properties/header_reference_spec.rb +32 -0
  191. data/spec/properties/page_numbering_spec.rb +1 -1
  192. data/spec/properties/{table_cell_fit_text.rb → table_cell_fit_text_spec.rb} +0 -0
  193. data/spec/properties/{table_cell_width.rb → table_cell_width_spec.rb} +0 -0
  194. data/spec/properties/table_layout_spec.rb +14 -12
  195. data/spec/properties/{table_row_height.rb → table_row_height_spec.rb} +0 -0
  196. data/spec/section_spec.rb +2 -0
  197. data/spec/spec_helper.rb +2 -0
  198. data/spec/support/data/elements/grid_column_element.xml +1 -1
  199. data/spec/support/data/elements/table_grid_element.xml +1 -1
  200. data/spec/support/data/parts/document_with_children_part.xml +2 -1
  201. data/spec/support/data/parts/document_with_multiple_sections_part.xml +1 -1
  202. data/spec/support/data/parts/document_with_one_section_part.xml +1 -1
  203. data/spec/support/data/parts/empty_document_part.xml +1 -1
  204. data/spec/support/data/parts/empty_footer_part.xml +1 -0
  205. data/spec/support/data/parts/empty_header_part.xml +1 -0
  206. data/spec/support/data/parts/footer_with_children_part.xml +1 -0
  207. data/spec/support/data/parts/header_with_children_part.xml +1 -0
  208. data/spec/support/element_test_macros.rb +58 -9
  209. metadata +126 -9
  210. data/lib/openxml/docx/properties/tr_height.rb +0 -19
  211. data/lib/openxml/docx/properties/width_property.rb +0 -17
@@ -2,17 +2,19 @@ module OpenXml
2
2
  module Docx
3
3
  module Properties
4
4
  class TableBorder < ComplexProperty
5
- tag_is_one_of %i(top start bottom end insideH insideV)
5
+ tag_is_one_of %i(top start bottom end insideH insideV left right)
6
6
 
7
- attribute :color, expects: :hex_color
8
- attribute :frame, expects: :true_or_false
9
- attribute :shadow, expects: :true_or_false
10
- attribute :space, expects: :positive_integer
11
- attribute :theme_color, expects: :valid_theme_color
12
- attribute :theme_shade, expects: :hex_digit
13
- attribute :theme_tint, expects: :hex_digit
14
- attribute :value, expects: :valid_type, displays_as: :val
15
- attribute :width, expects: :positive_integer, displays_as: :sz
7
+ with_namespace :w do
8
+ attribute :color, expects: :hex_color
9
+ attribute :frame, expects: :true_or_false
10
+ attribute :shadow, expects: :true_or_false
11
+ attribute :space, expects: :positive_integer
12
+ attribute :theme_color, expects: :valid_theme_color
13
+ attribute :theme_shade, expects: :hex_digit
14
+ attribute :theme_tint, expects: :hex_digit
15
+ attribute :value, expects: :valid_type, displays_as: :val
16
+ attribute :width, expects: :positive_integer, displays_as: :sz
17
+ end
16
18
 
17
19
  def initialize(tag, value)
18
20
  super tag
@@ -2,17 +2,19 @@ module OpenXml
2
2
  module Docx
3
3
  module Properties
4
4
  class TableCellBorder < ComplexProperty
5
- tag_is_one_of %i(top start bottom end insideH insideV tl2br tr2bl)
5
+ tag_is_one_of %i(top start bottom end insideH insideV tl2br tr2bl left right)
6
6
 
7
- attribute :color, expects: :hex_color
8
- attribute :frame, expects: :true_or_false
9
- attribute :shadow, expects: :true_or_false
10
- attribute :space, expects: :positive_integer
11
- attribute :theme_color, expects: :valid_theme_color
12
- attribute :theme_shade, expects: :hex_digit
13
- attribute :theme_tint, expects: :hex_digit
14
- attribute :value, expects: :valid_type, displays_as: :val
15
- attribute :width, expects: :positive_integer, displays_as: :sz
7
+ with_namespace :w do
8
+ attribute :color, expects: :hex_color
9
+ attribute :frame, expects: :true_or_false
10
+ attribute :shadow, expects: :true_or_false
11
+ attribute :space, expects: :positive_integer
12
+ attribute :theme_color, expects: :valid_theme_color
13
+ attribute :theme_shade, expects: :hex_digit
14
+ attribute :theme_tint, expects: :hex_digit
15
+ attribute :value, expects: :valid_type, displays_as: :val
16
+ attribute :width, expects: :positive_integer, displays_as: :sz
17
+ end
16
18
 
17
19
  def initialize(tag, value)
18
20
  super tag
@@ -1,11 +1,13 @@
1
1
  module OpenXml
2
2
  module Docx
3
3
  module Properties
4
- class TableCellMargin < WidthProperty
5
- tag_is_one_of %i(top start bottom end)
4
+ class TableCellMargin < ComplexProperty
5
+ tag_is_one_of %i(top start bottom end left right)
6
6
 
7
- attribute :type, expects: :valid_width_type
8
- attribute :width, expects: :positive_integer, displays_as: :w
7
+ with_namespace :w do
8
+ attribute :type, one_of: %i(auto dxa nil pct)
9
+ attribute :width, expects: :positive_integer, displays_as: :w
10
+ end
9
11
 
10
12
  end
11
13
  end
@@ -1,11 +1,13 @@
1
1
  module OpenXml
2
2
  module Docx
3
3
  module Properties
4
- class TableCellSpacing < WidthProperty
4
+ class TableCellSpacing < ComplexProperty
5
5
  tag :tblCellSpacing
6
6
 
7
- attribute :type, expects: :valid_width_type
8
- attribute :width, expects: :positive_integer, displays_as: :w
7
+ with_namespace :w do
8
+ attribute :type, one_of: %i(auto dxa nil pct)
9
+ attribute :width, expects: :positive_integer, displays_as: :w
10
+ end
9
11
 
10
12
  end
11
13
  end
@@ -1,11 +1,13 @@
1
1
  module OpenXml
2
2
  module Docx
3
3
  module Properties
4
- class TableCellWidth < WidthProperty
4
+ class TableCellWidth < ComplexProperty
5
5
  tag :tcW
6
6
 
7
- attribute :type, expects: :valid_width_type
8
- attribute :width, expects: :positive_integer, displays_as: :w
7
+ with_namespace :w do
8
+ attribute :type, one_of: %i(auto dxa nil pct)
9
+ attribute :width, expects: :positive_integer, displays_as: :w
10
+ end
9
11
 
10
12
  end
11
13
  end
@@ -1,11 +1,13 @@
1
1
  module OpenXml
2
2
  module Docx
3
3
  module Properties
4
- class TableIndent < WidthProperty
4
+ class TableIndent < ComplexProperty
5
5
  tag :tblInd
6
6
 
7
- attribute :type, expects: :valid_width_type
8
- attribute :width, expects: :positive_integer, displays_as: :w
7
+ with_namespace :w do
8
+ attribute :type, one_of: %i(auto dxa nil pct)
9
+ attribute :width, expects: :positive_integer, displays_as: :w
10
+ end
9
11
 
10
12
  end
11
13
  end
@@ -1,12 +1,10 @@
1
1
  module OpenXml
2
2
  module Docx
3
3
  module Properties
4
- class TableLayout < ValueProperty
4
+ class TableLayout < ComplexProperty
5
5
  tag :tblLayout
6
6
 
7
- def ok_values
8
- %i(autofit fixed)
9
- end
7
+ attribute :type, one_of: %i(autofit fixed), namespace: :w
10
8
 
11
9
  end
12
10
  end
@@ -4,12 +4,14 @@ module OpenXml
4
4
  class TableLook < ComplexProperty
5
5
  tag :tblLook
6
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
7
+ with_namespace :w do
8
+ attribute :firstColumn, expects: :true_or_false
9
+ attribute :firstRow, expects: :true_or_false
10
+ attribute :lastColumn, expects: :true_or_false
11
+ attribute :lastRow, expects: :true_or_false
12
+ attribute :noHBand, expects: :true_or_false
13
+ attribute :noVBand, expects: :true_or_false
14
+ end
13
15
 
14
16
  end
15
17
  end
@@ -4,37 +4,18 @@ module OpenXml
4
4
  class TablePPr < ComplexProperty
5
5
  tag :tblpPr
6
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
7
+ with_namespace :w do
8
+ attribute :bottomFromText, expects: :positive_integer
9
+ attribute :horizAnchor, one_of: %i(margin page text)
10
+ attribute :leftFromText, expects: :positive_integer
11
+ attribute :rightFromText, expects: :positive_integer
12
+ attribute :tblpX, expects: :integer
13
+ attribute :tblpXSpec, one_of: %i(center inside left outside right)
14
+ attribute :tblpY, expects: :integer
15
+ attribute :tblpYSpec, one_of: %i(bottom center inline inside outside top)
16
+ attribute :topFromText, expects: :positive_integer
17
+ attribute :vertAnchor, one_of: %i(margin page text)
30
18
  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
19
  end
39
20
  end
40
21
  end
@@ -0,0 +1,13 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class TableRowHeight < ComplexProperty
5
+ tag :trHeight
6
+
7
+ attribute :hRule, one_of: %i(auto atLeast exact), namespace: :w
8
+ attribute :val, expects: :positive_integer, namespace: :w
9
+
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,11 +1,13 @@
1
1
  module OpenXml
2
2
  module Docx
3
3
  module Properties
4
- class TableWidth < WidthProperty
4
+ class TableWidth < ComplexProperty
5
5
  tag :tblW
6
6
 
7
- attribute :type, expects: :valid_width_type
8
- attribute :width, expects: :positive_integer, displays_as: :w
7
+ with_namespace :w do
8
+ attribute :type, one_of: %i(auto dxa nil pct)
9
+ attribute :width, expects: :positive_integer, displays_as: :w
10
+ end
9
11
 
10
12
  end
11
13
  end
@@ -4,20 +4,21 @@ module OpenXml
4
4
  class Underline < ComplexProperty
5
5
  tag :u
6
6
 
7
- VALID_UNDERLINE_TYPES = %i(dash dashDotDotHeavy dashDotHeavy dashedHeavy dashLong dashLongHeavy dotDash dotDotDash dotted dottedHeavy double none single thick wave wavyDouble wavyHeavy words)
7
+ VALID_UNDERLINE_TYPES =
8
8
 
9
- attribute :color, expects: :hex_color
10
- attribute :theme_color, expects: :valid_theme_color
11
- attribute :theme_shade, expects: :hex_digit
12
- attribute :theme_tint, expects: :hex_digit
13
- attribute :type, expects: :valid_underline_type, displays_as: :val
14
-
15
- private
16
-
17
- def valid_underline_type(value)
18
- valid_in? value, VALID_UNDERLINE_TYPES
9
+ with_namespace :w do
10
+ attribute :color, expects: :hex_color
11
+ attribute :theme_color, expects: :valid_theme_color
12
+ attribute :theme_shade, expects: :hex_digit
13
+ attribute :theme_tint, expects: :hex_digit
14
+ attribute :type, displays_as: :val, one_of: %i(dash dashDotDotHeavy
15
+ dashDotHeavy dashedHeavy
16
+ dashLong dashLongHeavy
17
+ dotDash dotDotDash
18
+ dotted dottedHeavy double
19
+ none single thick wave
20
+ wavyDouble wavyHeavy words)
19
21
  end
20
-
21
22
  end
22
23
  end
23
24
  end
@@ -1,10 +1,12 @@
1
1
  module OpenXml
2
2
  module Docx
3
3
  module Properties
4
- class WAfter < WidthProperty
4
+ class WAfter < ComplexProperty
5
5
 
6
- attribute :type, expects: :valid_width_type
7
- attribute :width, expects: :positive_integer, displays_as: :w
6
+ with_namespace :w do
7
+ attribute :type, one_of: %i(auto dxa nil pct)
8
+ attribute :width, expects: :positive_integer, displays_as: :w
9
+ end
8
10
 
9
11
  end
10
12
  end
@@ -1,10 +1,12 @@
1
1
  module OpenXml
2
2
  module Docx
3
3
  module Properties
4
- class WBefore < WidthProperty
4
+ class WBefore < ComplexProperty
5
5
 
6
- attribute :type, expects: :valid_width_type
7
- attribute :width, expects: :positive_integer, displays_as: :w
6
+ with_namespace :w do
7
+ attribute :type, one_of: %i(auto dxa nil pct)
8
+ attribute :width, expects: :positive_integer, displays_as: :w
9
+ end
8
10
 
9
11
  end
10
12
  end
@@ -0,0 +1,74 @@
1
+ module OpenXml
2
+ module Docx
3
+ module RootNamespaces
4
+
5
+ POSSIBLE_NAMESPACES = {
6
+ wpc: "http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas".freeze,
7
+ mo: "http://schemas.microsoft.com/office/mac/office/2008/main".freeze,
8
+ mv: "urn:schemas-microsoft-com:mac:vml".freeze,
9
+ o: "urn:schemas-microsoft-com:office:office".freeze,
10
+ r: "http://schemas.openxmlformats.org/officeDocument/2006/relationships".freeze,
11
+ m: "http://schemas.openxmlformats.org/officeDocument/2006/math".freeze,
12
+ v: "urn:schemas-microsoft-com:vml".freeze,
13
+ wp14: "http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing".freeze,
14
+ wp: "http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing".freeze,
15
+ w10: "urn:schemas-microsoft-com:office:word".freeze,
16
+ w14: "http://schemas.microsoft.com/office/word/2010/wordml".freeze,
17
+ w15: "http://schemas.microsoft.com/office/word/2012/wordml".freeze,
18
+ wpg: "http://schemas.microsoft.com/office/word/2010/wordprocessingGroup".freeze,
19
+ wpi: "http://schemas.microsoft.com/office/word/2010/wordprocessingInk".freeze,
20
+ wne: "http://schemas.microsoft.com/office/word/2006/wordml".freeze,
21
+ wps: "http://schemas.microsoft.com/office/word/2010/wordprocessingShape".freeze,
22
+ w: "http://schemas.openxmlformats.org/wordprocessingml/2006/main".freeze,
23
+ mc: "http://schemas.openxmlformats.org/markup-compatibility/2006".freeze,
24
+ a: "http://schemas.openxmlformats.org/drawingml/2006/main".freeze,
25
+ a14: "http://schemas.microsoft.com/office/drawing/2010/main".freeze,
26
+ pic: "http://purl.oclc.org/ooxml/drawingml/main".freeze
27
+ }
28
+
29
+ def self.included(base)
30
+ base.extend ClassMethods
31
+ end
32
+
33
+ module ClassMethods
34
+
35
+ def use_namespaces(*args)
36
+ args.each do |arg|
37
+ prefix = arg.to_sym
38
+ raise ArgumentError, "Reference to undefined namespace prefix: #{prefix}" if POSSIBLE_NAMESPACES[prefix].nil?
39
+ active_namespaces << prefix unless active_namespaces.include?(prefix)
40
+ end
41
+ end
42
+ alias :use_namespace :use_namespaces
43
+
44
+ def can_ignore(*args)
45
+ args.each { |arg| ignorable_namespaces[arg.to_sym] = true }
46
+ end
47
+
48
+ def ignorable_namespaces
49
+ @ignorable_namespaces ||= {}
50
+ end
51
+
52
+ def active_namespaces
53
+ @active_namespaces ||= []
54
+ end
55
+
56
+ end
57
+
58
+ private
59
+
60
+ def root_namespaces
61
+ namespace_defs = {}
62
+ unless self.class.ignorable_namespaces.empty?
63
+ namespace_defs["mc:Ignorable"] = self.class.ignorable_namespaces.keys.join(" ")
64
+ self.class.use_namespace :mc
65
+ end
66
+ self.class.active_namespaces.map do |prefix|
67
+ namespace_defs["xmlns:#{prefix}"] = POSSIBLE_NAMESPACES[prefix]
68
+ end
69
+ namespace_defs
70
+ end
71
+
72
+ end
73
+ end
74
+ end
@@ -7,6 +7,8 @@ module OpenXml
7
7
 
8
8
  property :columns
9
9
  property :document_grid
10
+ property :footer_reference
11
+ property :header_reference
10
12
  property :line_numbering
11
13
  property :page_borders
12
14
  property :page_margins
@@ -6,10 +6,10 @@ module OpenXml
6
6
 
7
7
  attr_reader :paragraph, :character, :table, :type
8
8
 
9
- attribute :custom, expects: :true_or_false, displays_as: :customStyle
10
- attribute :default, expects: :true_or_false
11
- attribute :id, expects: :string, displays_as: :styleId
12
- attribute :type, expects: :valid_style_type
9
+ attribute :custom, expects: :true_or_false, displays_as: :customStyle, namespace: :w
10
+ attribute :default, expects: :true_or_false, namespace: :w
11
+ attribute :id, expects: :string, displays_as: :styleId, namespace: :w
12
+ attribute :type, expects: :valid_style_type, namespace: :w
13
13
 
14
14
  value_property :auto_redefine, as: :style_auto_redefinition
15
15
  value_property :hidden_style
@@ -1,5 +1,5 @@
1
1
  module OpenXml
2
2
  module Docx
3
- VERSION = "0.9.0"
3
+ VERSION = "0.10.0"
4
4
  end
5
5
  end
@@ -0,0 +1,17 @@
1
+ module OpenXml
2
+ module DrawingML
3
+ end
4
+ end
5
+
6
+ # For now, we'll rely on Docx's basic implementations
7
+ require "openxml/docx/attribute_builder"
8
+ require "openxml/docx/property_builder"
9
+ require "openxml/docx/properties"
10
+ require "openxml/docx/elements"
11
+ require "openxml/docx/package"
12
+ require "openxml/docx/parts"
13
+ require "openxml/docx/section"
14
+ require "openxml/docx/style"
15
+
16
+ # And then add our own stuff
17
+ require "openxml/drawingml/elements"