openxml-docx 0.8.0.beta1

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 (331) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/.travis.yml +6 -0
  4. data/Gemfile +3 -0
  5. data/Gemfile.lock +56 -0
  6. data/LICENSE.txt +20 -0
  7. data/README.md +67 -0
  8. data/Rakefile +6 -0
  9. data/example +23 -0
  10. data/lib/openxml-docx.rb +1 -0
  11. data/lib/openxml/docx.rb +20 -0
  12. data/lib/openxml/docx/attribute_builder.rb +298 -0
  13. data/lib/openxml/docx/elements.rb +13 -0
  14. data/lib/openxml/docx/elements/absolute_position_tab.rb +31 -0
  15. data/lib/openxml/docx/elements/bidi_embed.rb +19 -0
  16. data/lib/openxml/docx/elements/bidi_override.rb +19 -0
  17. data/lib/openxml/docx/elements/break.rb +26 -0
  18. data/lib/openxml/docx/elements/carriage_return.rb +10 -0
  19. data/lib/openxml/docx/elements/container.rb +37 -0
  20. data/lib/openxml/docx/elements/content_part.rb +10 -0
  21. data/lib/openxml/docx/elements/control.rb +12 -0
  22. data/lib/openxml/docx/elements/deleted_text.rb +10 -0
  23. data/lib/openxml/docx/elements/dirty.rb +8 -0
  24. data/lib/openxml/docx/elements/element.rb +64 -0
  25. data/lib/openxml/docx/elements/last_rendered_page_break.rb +8 -0
  26. data/lib/openxml/docx/elements/long_day.rb +10 -0
  27. data/lib/openxml/docx/elements/long_month.rb +10 -0
  28. data/lib/openxml/docx/elements/long_year.rb +10 -0
  29. data/lib/openxml/docx/elements/nonbreaking_hyphen.rb +9 -0
  30. data/lib/openxml/docx/elements/optional_hyphen.rb +10 -0
  31. data/lib/openxml/docx/elements/page_number.rb +9 -0
  32. data/lib/openxml/docx/elements/paper_source.rb +13 -0
  33. data/lib/openxml/docx/elements/paragraph.rb +58 -0
  34. data/lib/openxml/docx/elements/ruby.rb +48 -0
  35. data/lib/openxml/docx/elements/run.rb +51 -0
  36. data/lib/openxml/docx/elements/short_day.rb +10 -0
  37. data/lib/openxml/docx/elements/short_month.rb +10 -0
  38. data/lib/openxml/docx/elements/short_year.rb +10 -0
  39. data/lib/openxml/docx/elements/symbol.rb +13 -0
  40. data/lib/openxml/docx/elements/tab.rb +8 -0
  41. data/lib/openxml/docx/elements/text.rb +30 -0
  42. data/lib/openxml/docx/package.rb +34 -0
  43. data/lib/openxml/docx/parts.rb +10 -0
  44. data/lib/openxml/docx/parts/document.rb +66 -0
  45. data/lib/openxml/docx/parts/settings.rb +22 -0
  46. data/lib/openxml/docx/parts/styles.rb +50 -0
  47. data/lib/openxml/docx/properties.rb +21 -0
  48. data/lib/openxml/docx/properties/alignment.rb +14 -0
  49. data/lib/openxml/docx/properties/auto_adjust_right_indent.rb +11 -0
  50. data/lib/openxml/docx/properties/auto_space_de.rb +10 -0
  51. data/lib/openxml/docx/properties/auto_space_dn.rb +10 -0
  52. data/lib/openxml/docx/properties/base_property.rb +50 -0
  53. data/lib/openxml/docx/properties/bidi.rb +8 -0
  54. data/lib/openxml/docx/properties/bold.rb +10 -0
  55. data/lib/openxml/docx/properties/boolean_property.rb +17 -0
  56. data/lib/openxml/docx/properties/border.rb +24 -0
  57. data/lib/openxml/docx/properties/caps.rb +8 -0
  58. data/lib/openxml/docx/properties/character_spacing.rb +10 -0
  59. data/lib/openxml/docx/properties/color.rb +13 -0
  60. data/lib/openxml/docx/properties/column.rb +18 -0
  61. data/lib/openxml/docx/properties/columns.rb +15 -0
  62. data/lib/openxml/docx/properties/complex_bold.rb +10 -0
  63. data/lib/openxml/docx/properties/complex_font_size.rb +10 -0
  64. data/lib/openxml/docx/properties/complex_italics.rb +10 -0
  65. data/lib/openxml/docx/properties/complex_property.rb +19 -0
  66. data/lib/openxml/docx/properties/complex_script_formatting.rb +10 -0
  67. data/lib/openxml/docx/properties/compress_punctuation.rb +10 -0
  68. data/lib/openxml/docx/properties/conditional_formatting.rb +23 -0
  69. data/lib/openxml/docx/properties/container_property.rb +65 -0
  70. data/lib/openxml/docx/properties/contextual_spacing.rb +8 -0
  71. data/lib/openxml/docx/properties/div_id.rb +8 -0
  72. data/lib/openxml/docx/properties/document_grid.rb +22 -0
  73. data/lib/openxml/docx/properties/double_strikethrough.rb +10 -0
  74. data/lib/openxml/docx/properties/east_asian_layout.rb +22 -0
  75. data/lib/openxml/docx/properties/effect.rb +13 -0
  76. data/lib/openxml/docx/properties/emboss.rb +8 -0
  77. data/lib/openxml/docx/properties/emphasis.rb +14 -0
  78. data/lib/openxml/docx/properties/expansion.rb +20 -0
  79. data/lib/openxml/docx/properties/font.rb +34 -0
  80. data/lib/openxml/docx/properties/font_size.rb +10 -0
  81. data/lib/openxml/docx/properties/form_protection.rb +9 -0
  82. data/lib/openxml/docx/properties/frame.rb +59 -0
  83. data/lib/openxml/docx/properties/hidden_style.rb +9 -0
  84. data/lib/openxml/docx/properties/hidden_text.rb +10 -0
  85. data/lib/openxml/docx/properties/highlight.rb +13 -0
  86. data/lib/openxml/docx/properties/imprint.rb +8 -0
  87. data/lib/openxml/docx/properties/indentation.rb +18 -0
  88. data/lib/openxml/docx/properties/integer_property.rb +17 -0
  89. data/lib/openxml/docx/properties/italics.rb +10 -0
  90. data/lib/openxml/docx/properties/keep_lines.rb +8 -0
  91. data/lib/openxml/docx/properties/keep_next.rb +8 -0
  92. data/lib/openxml/docx/properties/kerning.rb +10 -0
  93. data/lib/openxml/docx/properties/kinsoku.rb +8 -0
  94. data/lib/openxml/docx/properties/language.rb +21 -0
  95. data/lib/openxml/docx/properties/latent_styles.rb +23 -0
  96. data/lib/openxml/docx/properties/latent_styles_exception.rb +21 -0
  97. data/lib/openxml/docx/properties/line_numbering.rb +23 -0
  98. data/lib/openxml/docx/properties/linked_style.rb +18 -0
  99. data/lib/openxml/docx/properties/manual_width.rb +13 -0
  100. data/lib/openxml/docx/properties/math.rb +10 -0
  101. data/lib/openxml/docx/properties/mirror_indent.rb +8 -0
  102. data/lib/openxml/docx/properties/next_style.rb +17 -0
  103. data/lib/openxml/docx/properties/no_proof.rb +8 -0
  104. data/lib/openxml/docx/properties/numbering.rb +22 -0
  105. data/lib/openxml/docx/properties/on_off_property.rb +17 -0
  106. data/lib/openxml/docx/properties/outline.rb +8 -0
  107. data/lib/openxml/docx/properties/outline_level.rb +10 -0
  108. data/lib/openxml/docx/properties/overflow_punctuation.rb +10 -0
  109. data/lib/openxml/docx/properties/page_borders.rb +61 -0
  110. data/lib/openxml/docx/properties/page_break_before.rb +8 -0
  111. data/lib/openxml/docx/properties/page_margins.rb +17 -0
  112. data/lib/openxml/docx/properties/page_numbering.rb +89 -0
  113. data/lib/openxml/docx/properties/page_size.rb +23 -0
  114. data/lib/openxml/docx/properties/paragraph_borders.rb +45 -0
  115. data/lib/openxml/docx/properties/paragraph_style.rb +10 -0
  116. data/lib/openxml/docx/properties/parent_style.rb +17 -0
  117. data/lib/openxml/docx/properties/personal.rb +8 -0
  118. data/lib/openxml/docx/properties/personal_compose.rb +8 -0
  119. data/lib/openxml/docx/properties/personal_reply.rb +8 -0
  120. data/lib/openxml/docx/properties/phonetic_guide_alignment.rb +15 -0
  121. data/lib/openxml/docx/properties/phonetic_guide_base_font_size.rb +10 -0
  122. data/lib/openxml/docx/properties/phonetic_guide_font_size.rb +10 -0
  123. data/lib/openxml/docx/properties/phonetic_guide_font_size_raise.rb +10 -0
  124. data/lib/openxml/docx/properties/phonetic_guide_language.rb +19 -0
  125. data/lib/openxml/docx/properties/position.rb +8 -0
  126. data/lib/openxml/docx/properties/positive_integer_property.rb +17 -0
  127. data/lib/openxml/docx/properties/primary_style.rb +9 -0
  128. data/lib/openxml/docx/properties/right_to_left.rb +10 -0
  129. data/lib/openxml/docx/properties/rtl_gutter.rb +8 -0
  130. data/lib/openxml/docx/properties/run_style.rb +10 -0
  131. data/lib/openxml/docx/properties/section_type.rb +15 -0
  132. data/lib/openxml/docx/properties/semi_hidden.rb +8 -0
  133. data/lib/openxml/docx/properties/shading.rb +64 -0
  134. data/lib/openxml/docx/properties/shadow.rb +8 -0
  135. data/lib/openxml/docx/properties/small_caps.rb +8 -0
  136. data/lib/openxml/docx/properties/snap_to_grid.rb +8 -0
  137. data/lib/openxml/docx/properties/spacing.rb +25 -0
  138. data/lib/openxml/docx/properties/spec_vanish.rb +8 -0
  139. data/lib/openxml/docx/properties/strikethrough.rb +10 -0
  140. data/lib/openxml/docx/properties/string_property.rb +17 -0
  141. data/lib/openxml/docx/properties/style.rb +17 -0
  142. data/lib/openxml/docx/properties/style_aliases.rb +9 -0
  143. data/lib/openxml/docx/properties/style_auto_redefinition.rb +9 -0
  144. data/lib/openxml/docx/properties/style_lock.rb +9 -0
  145. data/lib/openxml/docx/properties/style_name.rb +10 -0
  146. data/lib/openxml/docx/properties/supress_auto_hyphens.rb +8 -0
  147. data/lib/openxml/docx/properties/supress_line_numbers.rb +8 -0
  148. data/lib/openxml/docx/properties/supress_overlap.rb +8 -0
  149. data/lib/openxml/docx/properties/tab.rb +71 -0
  150. data/lib/openxml/docx/properties/tabs.rb +10 -0
  151. data/lib/openxml/docx/properties/text_alignment.rb +13 -0
  152. data/lib/openxml/docx/properties/text_direction.rb +13 -0
  153. data/lib/openxml/docx/properties/textbox_tight_wrap.rb +13 -0
  154. data/lib/openxml/docx/properties/toggle_property.rb +17 -0
  155. data/lib/openxml/docx/properties/ui_priority.rb +8 -0
  156. data/lib/openxml/docx/properties/underline.rb +24 -0
  157. data/lib/openxml/docx/properties/unhide_when_used.rb +8 -0
  158. data/lib/openxml/docx/properties/value_property.rb +31 -0
  159. data/lib/openxml/docx/properties/vertical_alignment.rb +14 -0
  160. data/lib/openxml/docx/properties/vertical_text_alignment.rb +14 -0
  161. data/lib/openxml/docx/properties/web_hidden.rb +8 -0
  162. data/lib/openxml/docx/properties/widow_control.rb +8 -0
  163. data/lib/openxml/docx/properties/word_wrap.rb +8 -0
  164. data/lib/openxml/docx/property_builder.rb +74 -0
  165. data/lib/openxml/docx/section.rb +36 -0
  166. data/lib/openxml/docx/style.rb +84 -0
  167. data/lib/openxml/docx/version.rb +5 -0
  168. data/openxml-docx.gemspec +32 -0
  169. data/spec/elements/absolute_position_tab_spec.rb +84 -0
  170. data/spec/elements/bidi_embed_spec.rb +31 -0
  171. data/spec/elements/bidi_override_spec.rb +31 -0
  172. data/spec/elements/break_spec.rb +55 -0
  173. data/spec/elements/carriage_return_spec.rb +12 -0
  174. data/spec/elements/content_part_spec.rb +18 -0
  175. data/spec/elements/control_spec.rb +41 -0
  176. data/spec/elements/deleted_text_spec.rb +24 -0
  177. data/spec/elements/dirty_spec.rb +12 -0
  178. data/spec/elements/last_rendered_page_break_spec.rb +12 -0
  179. data/spec/elements/long_day_spec.rb +12 -0
  180. data/spec/elements/long_month_spec.rb +12 -0
  181. data/spec/elements/long_year_spec.rb +12 -0
  182. data/spec/elements/nonbreaking_hyphen_spec.rb +12 -0
  183. data/spec/elements/optional_hyphen_spec.rb +12 -0
  184. data/spec/elements/page_number_spec.rb +12 -0
  185. data/spec/elements/paragraph_spec.rb +33 -0
  186. data/spec/elements/ruby_spec.rb +66 -0
  187. data/spec/elements/run_spec.rb +15 -0
  188. data/spec/elements/short_day_spec.rb +12 -0
  189. data/spec/elements/short_month_spec.rb +12 -0
  190. data/spec/elements/short_year_spec.rb +12 -0
  191. data/spec/elements/symbol_spec.rb +34 -0
  192. data/spec/elements/tab_spec.rb +12 -0
  193. data/spec/elements/text_spec.rb +24 -0
  194. data/spec/package_spec.rb +36 -0
  195. data/spec/parts/document_spec.rb +95 -0
  196. data/spec/parts/settings_spec.rb +13 -0
  197. data/spec/parts/styles_spec.rb +27 -0
  198. data/spec/properties/alignment_spec.rb +58 -0
  199. data/spec/properties/auto_adjust_right_indent_spec.rb +23 -0
  200. data/spec/properties/auto_space_de_spec.rb +23 -0
  201. data/spec/properties/auto_space_dn_spec.rb +23 -0
  202. data/spec/properties/bidi_spec.rb +23 -0
  203. data/spec/properties/bold_spec.rb +23 -0
  204. data/spec/properties/border_spec.rb +156 -0
  205. data/spec/properties/caps_spec.rb +23 -0
  206. data/spec/properties/character_spacing_spec.rb +26 -0
  207. data/spec/properties/color_spec.rb +49 -0
  208. data/spec/properties/column_spec.rb +46 -0
  209. data/spec/properties/columns_spec.rb +174 -0
  210. data/spec/properties/complex_bold_spec.rb +23 -0
  211. data/spec/properties/complex_font_size_spec.rb +24 -0
  212. data/spec/properties/complex_italics_spec.rb +23 -0
  213. data/spec/properties/complex_script_formatting_spec.rb +23 -0
  214. data/spec/properties/compress_punctuation_spec.rb +23 -0
  215. data/spec/properties/conditional_formatting_spec.rb +160 -0
  216. data/spec/properties/contextual_spacing_spec.rb +23 -0
  217. data/spec/properties/div_id_spec.rb +17 -0
  218. data/spec/properties/document_grid_spec.rb +78 -0
  219. data/spec/properties/double_strikethrough_spec.rb +23 -0
  220. data/spec/properties/east_asian_layout_spec.rb +115 -0
  221. data/spec/properties/effect_spec.rb +43 -0
  222. data/spec/properties/emboss_spec.rb +23 -0
  223. data/spec/properties/emphasis_spec.rb +37 -0
  224. data/spec/properties/expansion_spec.rb +34 -0
  225. data/spec/properties/font_size_spec.rb +24 -0
  226. data/spec/properties/font_spec.rb +273 -0
  227. data/spec/properties/form_protection_spec.rb +23 -0
  228. data/spec/properties/frame_spec.rb +338 -0
  229. data/spec/properties/hidden_style_spec.rb +23 -0
  230. data/spec/properties/hidden_text_spec.rb +23 -0
  231. data/spec/properties/highlight_spec.rb +97 -0
  232. data/spec/properties/imprint_spec.rb +23 -0
  233. data/spec/properties/indentation_spec.rb +176 -0
  234. data/spec/properties/italics_spec.rb +23 -0
  235. data/spec/properties/keep_lines_spec.rb +23 -0
  236. data/spec/properties/keep_next_spec.rb +23 -0
  237. data/spec/properties/kerning_spec.rb +24 -0
  238. data/spec/properties/kinsoku_spec.rb +23 -0
  239. data/spec/properties/language_spec.rb +29 -0
  240. data/spec/properties/latent_styles_exception_spec.rb +83 -0
  241. data/spec/properties/latent_styles_spec.rb +336 -0
  242. data/spec/properties/line_numbering_spec.rb +96 -0
  243. data/spec/properties/linked_style_spec.rb +17 -0
  244. data/spec/properties/manual_width_spec.rb +55 -0
  245. data/spec/properties/math_spec.rb +23 -0
  246. data/spec/properties/mirror_indent_spec.rb +23 -0
  247. data/spec/properties/next_style_spec.rb +17 -0
  248. data/spec/properties/no_proof_spec.rb +23 -0
  249. data/spec/properties/numbering_spec.rb +46 -0
  250. data/spec/properties/outline_level_spec.rb +20 -0
  251. data/spec/properties/outline_spec.rb +23 -0
  252. data/spec/properties/overflow_punctuation_spec.rb +23 -0
  253. data/spec/properties/page_borders_spec.rb +129 -0
  254. data/spec/properties/page_break_before_spec.rb +23 -0
  255. data/spec/properties/page_margins_spec.rb +150 -0
  256. data/spec/properties/page_numbering_spec.rb +395 -0
  257. data/spec/properties/page_size_spec.rb +90 -0
  258. data/spec/properties/paper_source_spec.rb +56 -0
  259. data/spec/properties/paragraph_borders_spec.rb +66 -0
  260. data/spec/properties/paragraph_style_spec.rb +12 -0
  261. data/spec/properties/parent_style_spec.rb +17 -0
  262. data/spec/properties/personal_compose_spec.rb +23 -0
  263. data/spec/properties/personal_reply_spec.rb +23 -0
  264. data/spec/properties/personal_spec.rb +23 -0
  265. data/spec/properties/phonetic_guide_alignment_spec.rb +42 -0
  266. data/spec/properties/phonetic_guide_base_font_size_spec.rb +25 -0
  267. data/spec/properties/phonetic_guide_font_size_raise_spec.rb +25 -0
  268. data/spec/properties/phonetic_guide_font_size_spec.rb +25 -0
  269. data/spec/properties/phonetic_guide_language_spec.rb +12 -0
  270. data/spec/properties/position_spec.rb +26 -0
  271. data/spec/properties/primary_style_spec.rb +23 -0
  272. data/spec/properties/right_to_left_spec.rb +23 -0
  273. data/spec/properties/rtl_gutter_spec.rb +23 -0
  274. data/spec/properties/run_style_spec.rb +12 -0
  275. data/spec/properties/section_type_spec.rb +33 -0
  276. data/spec/properties/semi_hidden_spec.rb +23 -0
  277. data/spec/properties/shading_spec.rb +135 -0
  278. data/spec/properties/shadow_property_spec.rb +23 -0
  279. data/spec/properties/small_caps_spec.rb +22 -0
  280. data/spec/properties/snap_to_grid_spec.rb +23 -0
  281. data/spec/properties/spacing_spec.rb +159 -0
  282. data/spec/properties/spec_vanish_spec.rb +23 -0
  283. data/spec/properties/strikethrough_spec.rb +23 -0
  284. data/spec/properties/style_aliases_spec.rb +22 -0
  285. data/spec/properties/style_auto_redefinition_spec.rb +23 -0
  286. data/spec/properties/style_lock_spec.rb +23 -0
  287. data/spec/properties/style_name_spec.rb +17 -0
  288. data/spec/properties/supress_auto_hyphens_spec.rb +23 -0
  289. data/spec/properties/supress_line_numbers_spec.rb +23 -0
  290. data/spec/properties/supress_overlap_spec.rb +23 -0
  291. data/spec/properties/tab_spec.rb +45 -0
  292. data/spec/properties/tabs_spec.rb +39 -0
  293. data/spec/properties/text_alignment_spec.rb +33 -0
  294. data/spec/properties/text_direction_spec.rb +42 -0
  295. data/spec/properties/textbox_tight_wrap_spec.rb +33 -0
  296. data/spec/properties/ui_priority_spec.rb +22 -0
  297. data/spec/properties/underline_spec.rb +161 -0
  298. data/spec/properties/unhide_when_used_spec.rb +23 -0
  299. data/spec/properties/vertical_alignment_spec.rb +26 -0
  300. data/spec/properties/vertical_text_alignment_spec.rb +28 -0
  301. data/spec/properties/web_hidden_spec.rb +23 -0
  302. data/spec/properties/widow_control_spec.rb +23 -0
  303. data/spec/properties/word_wrap_spec.rb +23 -0
  304. data/spec/section_spec.rb +44 -0
  305. data/spec/spec_helper.rb +14 -0
  306. data/spec/style_spec.rb +108 -0
  307. data/spec/support/data/elements/break_element.xml +4 -0
  308. data/spec/support/data/elements/break_with_attributes_element.xml +4 -0
  309. data/spec/support/data/elements/paragraph_element.xml +8 -0
  310. data/spec/support/data/elements/paragraph_with_runs_element.xml +14 -0
  311. data/spec/support/data/elements/run_element.xml +8 -0
  312. data/spec/support/data/elements/symbol_element.xml +4 -0
  313. data/spec/support/data/elements/text_element.xml +4 -0
  314. data/spec/support/data/parts/content_types_part.xml +1 -0
  315. data/spec/support/data/parts/document_with_children_part.xml +1 -0
  316. data/spec/support/data/parts/document_with_multiple_sections_part.xml +24 -0
  317. data/spec/support/data/parts/document_with_one_section_part.xml +16 -0
  318. data/spec/support/data/parts/empty_document_part.xml +1 -0
  319. data/spec/support/data/parts/global_rels_part.xml +1 -0
  320. data/spec/support/data/parts/rels_part.xml +1 -0
  321. data/spec/support/data/parts/settings_part.xml +1 -0
  322. data/spec/support/data/parts/styles_part.xml +1 -0
  323. data/spec/support/data/parts/styles_with_custom_style_part.xml +20 -0
  324. data/spec/support/data/styles/character_styles.xml +15 -0
  325. data/spec/support/data/styles/paragraph_styles.xml +11 -0
  326. data/spec/support/element_test_macros.rb +193 -0
  327. data/spec/support/part_test_macros.rb +27 -0
  328. data/spec/support/property_test_macros.rb +116 -0
  329. data/spec/support/style_test_macros.rb +33 -0
  330. data/spec/support/value_property_test_macros.rb +69 -0
  331. metadata +486 -0
@@ -0,0 +1,13 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class TextDirection < ValueProperty
5
+
6
+ def ok_values
7
+ %i(lr lrV rl rlV tb tbV)
8
+ end
9
+
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class TextboxTightWrap < ValueProperty
5
+
6
+ def ok_values
7
+ %i(allLines firstAndLastLine firstLineOnly lastLineOnly none)
8
+ end
9
+
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class ToggleProperty < ValueProperty
5
+
6
+ def ok_values
7
+ [nil, true, false]
8
+ end
9
+
10
+ def to_xml(xml)
11
+ xml["w"].public_send(tag) if value
12
+ end
13
+
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,8 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class UiPriority < IntegerProperty
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,24 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class Underline < ComplexProperty
5
+ tag :u
6
+
7
+ VALID_UNDERLINE_TYPES = %i(dash dashDotDotHeavy dashDotHeavy dashedHeavy dashLong dashLongHeavy dotDash dotDotDash dotted dottedHeavy double none single thick wave wavyDouble wavyHeavy words)
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
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,8 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class UnhideWhenUsed < ToggleProperty
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,31 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class ValueProperty < BaseProperty
5
+ attr_reader :value
6
+
7
+ def initialize(value)
8
+ @value = value
9
+ raise ArgumentError, invalid_message unless valid?
10
+ end
11
+
12
+ def valid?
13
+ ok_values.member? value
14
+ end
15
+
16
+ def invalid_message
17
+ "Invalid value for #{name}; acceptable values are #{ok_values.join(", ")} (provided: #{value.inspect})"
18
+ end
19
+
20
+ def render?
21
+ !value.nil?
22
+ end
23
+
24
+ def to_xml(xml)
25
+ xml["w"].public_send(tag, "w:val" => value)
26
+ end
27
+
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,14 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class VerticalAlignment < ValueProperty
5
+ tag :vertAlign
6
+
7
+ def ok_values
8
+ %i(baseline subscript superscript)
9
+ end
10
+
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class VerticalTextAlignment < ValueProperty
5
+ tag :vAlign
6
+
7
+ def ok_values
8
+ %i(both bottom center top)
9
+ end
10
+
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,8 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class WebHidden < ToggleProperty
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class WidowControl < OnOffProperty
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module OpenXml
2
+ module Docx
3
+ module Properties
4
+ class WordWrap < OnOffProperty
5
+ end
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,74 @@
1
+ module OpenXml
2
+ module Docx
3
+ module PropertyBuilder
4
+
5
+ def self.included(base)
6
+ base.extend ClassMethods
7
+ end
8
+
9
+ module ClassMethods
10
+ def properties_tag(*args)
11
+ @properties_tag = args.first if args.any?
12
+ @properties_tag
13
+ end
14
+
15
+ def value_property(name, as: nil)
16
+ attr_reader name
17
+
18
+ properties[name] = (as || name).to_s
19
+
20
+ class_eval <<-CODE, __FILE__, __LINE__ + 1
21
+ def #{name}=(value)
22
+ property_key = "#{name}".to_sym
23
+ class_name = properties[property_key].split("_").map(&:capitalize).join
24
+ prop_class = OpenXml::Docx::Properties.const_get class_name
25
+ instance_variable_set "@#{name}", prop_class.new(value)
26
+ end
27
+ CODE
28
+ end
29
+
30
+ def property(name, as: nil)
31
+ properties[name] = (as || name).to_s
32
+
33
+ class_eval <<-CODE, __FILE__, __LINE__ + 1
34
+ def #{name}
35
+ property_key = "#{name}".to_sym
36
+ class_name = properties[property_key].split("_").map(&:capitalize).join
37
+ prop_class = OpenXml::Docx::Properties.const_get class_name
38
+
39
+ if instance_variable_get("@#{name}").nil?
40
+ instance_variable_set "@#{name}", prop_class.new
41
+ end
42
+
43
+ instance_variable_get "@#{name}"
44
+ end
45
+ CODE
46
+ end
47
+
48
+ def properties
49
+ @properties ||= {}
50
+ end
51
+ end
52
+
53
+ def property_xml(xml)
54
+ props = properties.keys.map(&method(:send)).compact
55
+ return if props.none?(&:render?)
56
+
57
+ xml[namespace].public_send(properties_tag) {
58
+ props.each { |prop| prop.to_xml(xml) }
59
+ }
60
+ end
61
+
62
+ private
63
+
64
+ def properties
65
+ self.class.properties
66
+ end
67
+
68
+ def properties_tag
69
+ self.class.properties_tag
70
+ end
71
+
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,36 @@
1
+ module OpenXml
2
+ module Docx
3
+ class Section
4
+ include PropertyBuilder
5
+
6
+ properties_tag :sectPr
7
+
8
+ property :columns
9
+ property :document_grid
10
+ property :line_numbering
11
+ property :page_borders
12
+ property :page_margins
13
+ property :page_numbering
14
+ property :page_size
15
+ property :paper_source
16
+
17
+ value_property :bidi
18
+ value_property :form_protection
19
+ value_property :rtl_gutter
20
+ value_property :text_direction
21
+ value_property :type, as: :section_type
22
+ value_property :vertical_alignment, as: :vertical_text_alignment
23
+
24
+ def to_xml(xml)
25
+ property_xml xml
26
+ end
27
+
28
+ private
29
+
30
+ def namespace
31
+ :w
32
+ end
33
+
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,84 @@
1
+ module OpenXml
2
+ module Docx
3
+ class Style
4
+ include AttributeBuilder
5
+ include PropertyBuilder
6
+
7
+ attr_reader :paragraph, :character, :type
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
13
+
14
+ value_property :auto_redefine, as: :style_auto_redefinition
15
+ value_property :hidden_style
16
+ value_property :linked_style
17
+ value_property :locked, as: :style_lock
18
+ value_property :next_style
19
+ value_property :parent_style
20
+ value_property :personal
21
+ value_property :personal_compose
22
+ value_property :personal_reply
23
+ value_property :primary_style
24
+ value_property :semi_hidden
25
+ value_property :style_name
26
+ value_property :ui_priority
27
+ value_property :unhide_when_used
28
+
29
+ def initialize(type)
30
+ self.type = type
31
+ end
32
+
33
+ def type=(value)
34
+ @type = value
35
+ send "install_#{value}_properties"
36
+ end
37
+
38
+ def tag
39
+ :style
40
+ end
41
+
42
+ def name
43
+ "style"
44
+ end
45
+
46
+ def to_xml(xml)
47
+ xml["w"].public_send(tag, xml_attributes) {
48
+ property_xml(xml)
49
+ }
50
+ end
51
+
52
+ def paragraph_style?
53
+ type == :paragraph
54
+ end
55
+
56
+ VALID_STYLE_TYPES = %i(character paragraph)
57
+
58
+ private
59
+
60
+ def install_paragraph_properties
61
+ @character = nil
62
+ @paragraph = OpenXml::Docx::Elements::Paragraph.new
63
+ end
64
+
65
+ def install_character_properties
66
+ @paragraph = nil
67
+ @character = OpenXml::Docx::Elements::Run.new
68
+ end
69
+
70
+ def property_xml(xml)
71
+ if paragraph_style?
72
+ paragraph.property_xml(xml)
73
+ else
74
+ character.property_xml(xml)
75
+ end
76
+ end
77
+
78
+ def valid_style_type(value)
79
+ valid_in? value, VALID_STYLE_TYPES
80
+ end
81
+
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,5 @@
1
+ module OpenXml
2
+ module Docx
3
+ VERSION = "0.8.0.beta1"
4
+ end
5
+ end
@@ -0,0 +1,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "openxml/docx/version"
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "openxml-docx"
8
+ gem.version = OpenXml::Docx::VERSION
9
+ gem.authors = ["Gene Doyel"]
10
+ gem.email = ["genedoyel@gmail.com"]
11
+
12
+ gem.description = %q{Create Microsoft Word (.docx) files.}
13
+ gem.summary = %q{Using a simple API, create docx files programmatically, including bullet points, titles, headings, page breaks and tables!}
14
+ gem.license = "MIT"
15
+ gem.homepage = "https://github.com/openxml/openxml-docx"
16
+
17
+ gem.files = `git ls-files`.split($/)
18
+ gem.test_files = Dir.glob("test/**/*_test.rb")
19
+ gem.require_paths = ["lib"]
20
+
21
+ gem.required_ruby_version = "~> 2.0"
22
+
23
+ gem.add_dependency "nokogiri"
24
+ gem.add_dependency "open_xml_package", "0.1.0.beta1"
25
+
26
+ gem.add_development_dependency "pry"
27
+ gem.add_development_dependency "rspec"
28
+ gem.add_development_dependency "rake"
29
+ gem.add_development_dependency "rr"
30
+ gem.add_development_dependency "simplecov"
31
+ gem.add_development_dependency "timecop"
32
+ end
@@ -0,0 +1,84 @@
1
+ require "spec_helper"
2
+
3
+ describe OpenXml::Docx::Elements::AbsolutePositionTab do
4
+ include ElementTestMacros
5
+
6
+ it_should_use tag: :ptab, name: "absolute_position_tab"
7
+
8
+ for_attribute(:alignment) do
9
+ with_value(:center) do
10
+ it_should_assign_successfully
11
+ it_should_output "<w:ptab w:alignment=\"center\"/>"
12
+ end
13
+
14
+ with_value(:left) do
15
+ it_should_assign_successfully
16
+ it_should_output "<w:ptab w:alignment=\"left\"/>"
17
+ end
18
+
19
+ with_value(:right) do
20
+ it_should_assign_successfully
21
+ it_should_output "<w:ptab w:alignment=\"right\"/>"
22
+ end
23
+
24
+ with_value(:somethingElse) do
25
+ it_should_raise_an_exception
26
+ end
27
+ end
28
+
29
+ for_attribute(:leader) do
30
+ with_value(:dot) do
31
+ it_should_assign_successfully
32
+ it_should_output "<w:ptab w:leader=\"dot\"/>"
33
+ end
34
+
35
+ with_value(:hyphen) do
36
+ it_should_assign_successfully
37
+ it_should_output "<w:ptab w:leader=\"hyphen\"/>"
38
+ end
39
+
40
+ with_value(:middleDot) do
41
+ it_should_assign_successfully
42
+ it_should_output "<w:ptab w:leader=\"middleDot\"/>"
43
+ end
44
+
45
+ with_value(:none) do
46
+ it_should_assign_successfully
47
+ it_should_output "<w:ptab w:leader=\"none\"/>"
48
+ end
49
+
50
+ with_value(:underscore) do
51
+ it_should_assign_successfully
52
+ it_should_output "<w:ptab w:leader=\"underscore\"/>"
53
+ end
54
+
55
+ with_value(:somethingElse) do
56
+ it_should_raise_an_exception
57
+ end
58
+ end
59
+
60
+ for_attribute(:relativeTo) do
61
+ with_value(:indent) do
62
+ it_should_assign_successfully
63
+ it_should_output "<w:ptab w:relativeTo=\"indent\"/>"
64
+ end
65
+
66
+ with_value(:margin) do
67
+ it_should_assign_successfully
68
+ it_should_output "<w:ptab w:relativeTo=\"margin\"/>"
69
+ end
70
+
71
+ with_value(:somethingElse) do
72
+ it_should_raise_an_exception
73
+ end
74
+ end
75
+
76
+ with_no_attributes_set do
77
+ it_should_output "<w:ptab/>", assign: false
78
+ end
79
+
80
+ with_these_attributes_set(alignment: :center, relativeTo: :margin) do
81
+ it_should_output "<w:ptab w:alignment=\"center\" w:relativeTo=\"margin\"/>", assign: false
82
+ end
83
+
84
+ end