ooxml_parser 0.1.1

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 (223) hide show
  1. checksums.yaml +7 -0
  2. data/.overcommit.yml +35 -0
  3. data/Changelog.md +25 -0
  4. data/LICENSE.txt +661 -0
  5. data/README.md +26 -0
  6. data/circle.yml +3 -0
  7. data/lib/ooxml_parser/common_parser/common_data/alingment.rb +56 -0
  8. data/lib/ooxml_parser/common_parser/common_data/alternate_content/alternate_content.rb +34 -0
  9. data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart.rb +123 -0
  10. data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart_axis.rb +34 -0
  11. data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart_axis_title.rb +38 -0
  12. data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart_cells_range.rb +23 -0
  13. data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart_legend.rb +33 -0
  14. data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart_point.rb +11 -0
  15. data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart_style/office_2007_chart_style.rb +17 -0
  16. data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart_style/office_2010_chart_style.rb +17 -0
  17. data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/display_labels_properties.rb +26 -0
  18. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/docx_drawing.rb +49 -0
  19. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/docx_drawing_distance_from_text.rb +23 -0
  20. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/docx_drawing_position.rb +35 -0
  21. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/docx_drawing_properties.rb +11 -0
  22. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/docx_wrap_drawing.rb +39 -0
  23. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/ooxml_coordinates.rb +32 -0
  24. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/docx_graphic.rb +34 -0
  25. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/group/docx_group_element.rb +10 -0
  26. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/group/docx_grouped_drawing.rb +34 -0
  27. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_blip.rb +27 -0
  28. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_picture.rb +26 -0
  29. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/docx_shape.rb +25 -0
  30. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_body_properties/ooxml_shape_body_properties/preset_text_warp.rb +16 -0
  31. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_body_properties/ooxml_shape_body_properties.rb +30 -0
  32. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/color/docx_color_scheme.rb +37 -0
  33. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/color/docx_pattern_fill.rb +20 -0
  34. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/color/gradient_color/docx_gradient_color.rb +30 -0
  35. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/color/gradient_color/docx_single_gradient_color.rb +6 -0
  36. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/color/solid_color/docx_solid_color.rb +10 -0
  37. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/custom_geometry/docx_custom_geometry/docx_shape_line_element.rb +10 -0
  38. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/custom_geometry/docx_custom_geometry/docx_shape_line_path.rb +44 -0
  39. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/custom_geometry/ooxml_custom_geometry.rb +23 -0
  40. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_color.rb +43 -0
  41. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_line.rb +54 -0
  42. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_properties/text_box.rb +25 -0
  43. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_properties.rb +40 -0
  44. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_size.rb +31 -0
  45. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/line/line_end/line_size.rb +20 -0
  46. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/line/line_end.rb +21 -0
  47. data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_style/docx_shape_style.rb +5 -0
  48. data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/group/old_docx_group.rb +31 -0
  49. data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/group/old_docx_group_element.rb +10 -0
  50. data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/group/old_docx_group_properties.rb +6 -0
  51. data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/old_docx_picture.rb +26 -0
  52. data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/shape/old_docx_shape.rb +24 -0
  53. data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/shape/old_docx_shape_fill.rb +26 -0
  54. data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/shape/old_docx_shape_properties.rb +24 -0
  55. data/lib/ooxml_parser/common_parser/common_data/alternate_content/shape/common_non_visual_properties.rb +25 -0
  56. data/lib/ooxml_parser/common_parser/common_data/alternate_content/shape/non_visual_properties.rb +19 -0
  57. data/lib/ooxml_parser/common_parser/common_data/alternate_content/shape/non_visual_shape_properties.rb +20 -0
  58. data/lib/ooxml_parser/common_parser/common_data/alternate_content/shape/shape.rb +28 -0
  59. data/lib/ooxml_parser/common_parser/common_data/alternate_content/shape/shape_placeholder.rb +18 -0
  60. data/lib/ooxml_parser/common_parser/common_data/alternate_content/shape/shape_properties/ooxml_shift.rb +15 -0
  61. data/lib/ooxml_parser/common_parser/common_data/alternate_content/shape/shape_properties/transform_effect.rb +28 -0
  62. data/lib/ooxml_parser/common_parser/common_data/alternate_content/shape/shape_properties.rb +13 -0
  63. data/lib/ooxml_parser/common_parser/common_data/alternate_content/shape/text_body/ooxml_text_box.rb +26 -0
  64. data/lib/ooxml_parser/common_parser/common_data/alternate_content/shape/text_body/text_body.rb +23 -0
  65. data/lib/ooxml_parser/common_parser/common_data/borders_properties.rb +58 -0
  66. data/lib/ooxml_parser/common_parser/common_data/color.rb +473 -0
  67. data/lib/ooxml_parser/common_parser/common_data/colors/color_alpha_channel.rb +14 -0
  68. data/lib/ooxml_parser/common_parser/common_data/colors/color_properties.rb +21 -0
  69. data/lib/ooxml_parser/common_parser/common_data/colors/hsl_color.rb +150 -0
  70. data/lib/ooxml_parser/common_parser/common_data/colors/image/fill_rectangle.rb +22 -0
  71. data/lib/ooxml_parser/common_parser/common_data/colors/image/stretching.rb +11 -0
  72. data/lib/ooxml_parser/common_parser/common_data/colors/image_fill.rb +32 -0
  73. data/lib/ooxml_parser/common_parser/common_data/colors/image_properties.rb +16 -0
  74. data/lib/ooxml_parser/common_parser/common_data/colors/presentation_fill/gradient_color/gradient_stop.rb +15 -0
  75. data/lib/ooxml_parser/common_parser/common_data/colors/presentation_fill/gradient_color/linear_gradient.rb +10 -0
  76. data/lib/ooxml_parser/common_parser/common_data/colors/presentation_fill/gradient_color.rb +35 -0
  77. data/lib/ooxml_parser/common_parser/common_data/colors/presentation_fill/presentation_pattern.rb +22 -0
  78. data/lib/ooxml_parser/common_parser/common_data/colors/presentation_fill.rb +33 -0
  79. data/lib/ooxml_parser/common_parser/common_data/colors/scheme_color.rb +14 -0
  80. data/lib/ooxml_parser/common_parser/common_data/colors/theme_colors.rb +22 -0
  81. data/lib/ooxml_parser/common_parser/common_data/colors/tile.rb +21 -0
  82. data/lib/ooxml_parser/common_parser/common_data/coordinates.rb +127 -0
  83. data/lib/ooxml_parser/common_parser/common_data/font_style.rb +101 -0
  84. data/lib/ooxml_parser/common_parser/common_data/hyperlink.rb +53 -0
  85. data/lib/ooxml_parser/common_parser/common_data/ooxml_document_object.rb +87 -0
  86. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_properties.rb +48 -0
  87. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run/run_properties/outline.rb +23 -0
  88. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run/run_properties/strikeout.rb +16 -0
  89. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run/run_properties.rb +79 -0
  90. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run.rb +24 -0
  91. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/numbering/numbering_properties/numbering_level.rb +25 -0
  92. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/numbering/numbering_properties.rb +69 -0
  93. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/numbering.rb +18 -0
  94. data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/spacing.rb +115 -0
  95. data/lib/ooxml_parser/common_parser/common_data/paragraph.rb +35 -0
  96. data/lib/ooxml_parser/common_parser/common_data/table/margins/paragraph_margins.rb +35 -0
  97. data/lib/ooxml_parser/common_parser/common_data/table/margins/table_margins.rb +47 -0
  98. data/lib/ooxml_parser/common_parser/common_data/table/properties/table_cell_margin.rb +20 -0
  99. data/lib/ooxml_parser/common_parser/common_data/table/properties/table_element.rb +20 -0
  100. data/lib/ooxml_parser/common_parser/common_data/table/properties/table_look.rb +43 -0
  101. data/lib/ooxml_parser/common_parser/common_data/table/properties/table_position.rb +49 -0
  102. data/lib/ooxml_parser/common_parser/common_data/table/properties/table_style.rb +83 -0
  103. data/lib/ooxml_parser/common_parser/common_data/table/properties/table_style_elements.rb +21 -0
  104. data/lib/ooxml_parser/common_parser/common_data/table/properties/whole_table/line_join.rb +19 -0
  105. data/lib/ooxml_parser/common_parser/common_data/table/properties/whole_table/table_cell_style.rb +20 -0
  106. data/lib/ooxml_parser/common_parser/common_data/table/row/cell/cell.rb +43 -0
  107. data/lib/ooxml_parser/common_parser/common_data/table/row/cell/cell_properties.rb +142 -0
  108. data/lib/ooxml_parser/common_parser/common_data/table/row/cell/merge.rb +18 -0
  109. data/lib/ooxml_parser/common_parser/common_data/table/row/cell/properties/border.rb +25 -0
  110. data/lib/ooxml_parser/common_parser/common_data/table/row/cell/properties/borders.rb +125 -0
  111. data/lib/ooxml_parser/common_parser/common_data/table/row/cell/properties/table_cell_line.rb +35 -0
  112. data/lib/ooxml_parser/common_parser/common_data/table/row/row/table_row_properties.rb +22 -0
  113. data/lib/ooxml_parser/common_parser/common_data/table/row/row.rb +33 -0
  114. data/lib/ooxml_parser/common_parser/common_data/table/table_grid.rb +9 -0
  115. data/lib/ooxml_parser/common_parser/common_data/table/table_properties.rb +77 -0
  116. data/lib/ooxml_parser/common_parser/common_data/table.rb +41 -0
  117. data/lib/ooxml_parser/common_parser/common_data/underline.rb +40 -0
  118. data/lib/ooxml_parser/common_parser/common_document_structure.rb +7 -0
  119. data/lib/ooxml_parser/configuration.rb +20 -0
  120. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/comment.rb +28 -0
  121. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/document_background.rb +10 -0
  122. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/document_properties.rb +21 -0
  123. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/document_style.rb +70 -0
  124. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/accent.rb +11 -0
  125. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/bar.rb +10 -0
  126. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/box.rb +11 -0
  127. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/delimeter.rb +12 -0
  128. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/fraction.rb +11 -0
  129. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/function.rb +11 -0
  130. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/group_char.rb +13 -0
  131. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/index.rb +12 -0
  132. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/limit.rb +12 -0
  133. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/matrix/matrix_row.rb +10 -0
  134. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/matrix.rb +10 -0
  135. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/operator.rb +13 -0
  136. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/radical.rb +11 -0
  137. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula.rb +203 -0
  138. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/shape/offset.rb +10 -0
  139. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/shape/shadow.rb +10 -0
  140. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/shape/shape_properties/shape_margins.rb +11 -0
  141. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/shape/shape_properties/shape_size.rb +10 -0
  142. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/shape/shape_properties/stroke.rb +10 -0
  143. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/shape/shape_properties.rb +16 -0
  144. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/shape.rb +40 -0
  145. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/text_fill.rb +13 -0
  146. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/text_outline.rb +22 -0
  147. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run.rb +388 -0
  148. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/frame_properties.rb +46 -0
  149. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/indents.rb +87 -0
  150. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/paragraph_style/bookmark.rb +10 -0
  151. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/paragraph_style/paragraph_tab.rb +19 -0
  152. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/paragraph_style/style_parametres.rb +35 -0
  153. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/paragraph_style.rb +56 -0
  154. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph.rb +324 -0
  155. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/header_footer.rb +37 -0
  156. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/image.rb +15 -0
  157. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/columns/column.rb +10 -0
  158. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/columns.rb +37 -0
  159. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/document_grid.rb +29 -0
  160. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/note.rb +49 -0
  161. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/page_margins.rb +42 -0
  162. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/page_properties.rb +88 -0
  163. data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/size.rb +84 -0
  164. data/lib/ooxml_parser/docx_parser/docx_data/document_structure.rb +232 -0
  165. data/lib/ooxml_parser/docx_parser/docx_parser.rb +16 -0
  166. data/lib/ooxml_parser/helpers/string_helper.rb +22 -0
  167. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/presentation_comment/presentation_comment_author.rb +25 -0
  168. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/presentation_comment.rb +31 -0
  169. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/presentation_theme/theme_color.rb +40 -0
  170. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/presentation_theme.rb +44 -0
  171. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/background.rb +19 -0
  172. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/graphic_frame/graphic_frame.rb +34 -0
  173. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/presentation_alternate_content.rb +25 -0
  174. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/shape/non_visual_shape_properties/hyperlinks/hyperlink_for_hover.rb +23 -0
  175. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/shape/shape_properties/extents.rb +10 -0
  176. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/shape/shape_properties/offset.rb +10 -0
  177. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/shape/text_body/paragraph.rb +10 -0
  178. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/shape/text_body/text_field.rb +18 -0
  179. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/shapes_grouping/shapes_grouping.rb +9 -0
  180. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/shapes_grouping/grouping_properties.rb +16 -0
  181. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/shapes_grouping.rb +30 -0
  182. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing/animation_effect/animation_effect.rb +22 -0
  183. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing/set_time_node/behavior/behavior.rb +28 -0
  184. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing/set_time_node/behavior/target_element.rb +31 -0
  185. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing/set_time_node/set_time_node.rb +20 -0
  186. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing/time_node/common_timing/condition.rb +26 -0
  187. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing/time_node/common_timing.rb +33 -0
  188. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing/time_node.rb +52 -0
  189. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing.rb +23 -0
  190. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/transition/sound_action/sound/sound.rb +18 -0
  191. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/transition/sound_action/sound_action.rb +18 -0
  192. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/transition/transition.rb +43 -0
  193. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/transition/transition_properties/transition_properties.rb +9 -0
  194. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb +110 -0
  195. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide_size.rb +20 -0
  196. data/lib/ooxml_parser/pptx_parser/pptx_data/presentation.rb +62 -0
  197. data/lib/ooxml_parser/pptx_parser/pptx_parser.rb +15 -0
  198. data/lib/ooxml_parser/version.rb +6 -0
  199. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/excel_comments/excel_comment/excel_comment_character/excel_comment_character_properties.rb +27 -0
  200. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/excel_comments/excel_comment/excel_comment_character.rb +25 -0
  201. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/excel_comments/excel_comment.rb +20 -0
  202. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/excel_comments.rb +43 -0
  203. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/sheet_format_properties.rb +21 -0
  204. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/sheet_view/pane.rb +23 -0
  205. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/sheet_view.rb +18 -0
  206. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_column_properties.rb +24 -0
  207. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_drawing/xlsx_drawing_position/xlsx_drawing_position_parameters.rb +22 -0
  208. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_drawing/xlsx_drawing_position.rb +22 -0
  209. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_drawing/xlsx_shape_grouping.rb +37 -0
  210. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_drawing.rb +49 -0
  211. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_row/xlsx_cell/cell_style/alignment.rb +30 -0
  212. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_row/xlsx_cell/cell_style/foreground_color.rb +25 -0
  213. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_row/xlsx_cell/cell_style/ooxml_font.rb +38 -0
  214. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_row/xlsx_cell/cell_style.rb +95 -0
  215. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_row/xlsx_cell.rb +47 -0
  216. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_row.rb +19 -0
  217. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_table.rb +30 -0
  218. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet.rb +74 -0
  219. data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook.rb +108 -0
  220. data/lib/ooxml_parser/xlsx_parser/xlsx_parser.rb +15 -0
  221. data/lib/ooxml_parser.rb +35 -0
  222. data/ooxml_parser.gemspec +30 -0
  223. metadata +310 -0
@@ -0,0 +1,324 @@
1
+ # noinspection RubyTooManyInstanceVariablesInspection
2
+ require_relative 'docx_paragraph/docx_paragraph_run'
3
+ require_relative 'docx_paragraph/indents'
4
+ require_relative 'docx_paragraph/frame_properties'
5
+ require_relative 'docx_paragraph/docx_formula'
6
+ require_relative 'docx_paragraph/paragraph_style'
7
+ module OoxmlParser
8
+ class DocxParagraph < OOXMLDocumentObject
9
+ attr_accessor :number, :bookmark_start, :bookmark_end, :align, :spacing, :background_color, :ind, :numbering,
10
+ :character_style_array, :horizontal_line, :page_break, :kinoku, :borders, :keep_lines,
11
+ :contextual_spacing, :sector_properties, :page_numbering, :section_break, :style, :keep_next,
12
+ :orphan_control, :tabs, :frame_properties
13
+
14
+ def initialize
15
+ @number = 0
16
+ @bookmark_start = []
17
+ @bookmark_end = []
18
+ @align = 'left'
19
+ @spacing = Spacing.new
20
+ @background_color = nil
21
+ @ind = Indents.new
22
+ @kinoku = false
23
+ @numbering = nil
24
+ @character_style_array = []
25
+ @horizontal_line = false
26
+ @page_break = false
27
+ @borders = Borders.new
28
+ @keep_lines = false
29
+ @contextual_spacing = false
30
+ @sector_properties = nil
31
+ @page_numbering = false
32
+ @section_break = nil
33
+ @style = nil
34
+ @keep_next = false
35
+ @orphan_control = true
36
+ @tabs = []
37
+ @frame_properties = nil
38
+ end
39
+
40
+ def copy
41
+ paragraph = DocxParagraph.new
42
+ paragraph.number = number
43
+ paragraph.bookmark_start = @bookmark_start.dup
44
+ paragraph.bookmark_end = @bookmark_end.dup
45
+ paragraph.align = @align
46
+ paragraph.spacing = @spacing.copy
47
+ paragraph.background_color = @background_color
48
+ paragraph.ind = @ind.copy
49
+ paragraph.numbering = @numbering
50
+ paragraph.character_style_array = @character_style_array
51
+ paragraph.horizontal_line = @horizontal_line
52
+ paragraph.page_break = @page_break
53
+ paragraph.kinoku = @kinoku
54
+ paragraph.borders = @borders
55
+ paragraph.keep_lines = @keep_lines
56
+ paragraph.contextual_spacing = @contextual_spacing
57
+ paragraph.sector_properties = @sector_properties
58
+ paragraph.page_numbering = @page_numbering
59
+ paragraph.section_break = @section_break
60
+ paragraph.style = @style
61
+ paragraph.keep_next = @keep_next
62
+ paragraph.orphan_control = @orphan_control
63
+ paragraph.tabs = @tabs.dup
64
+ paragraph.frame_properties = @frame_properties
65
+ paragraph
66
+ end
67
+
68
+ def nonempty_runs
69
+ @character_style_array.select do |cur_run|
70
+ if cur_run.is_a?(DocxParagraphRun)
71
+ (!cur_run.text.empty? || !cur_run.alternate_content.nil? || !cur_run.drawing.nil?)
72
+ elsif cur_run.is_a?(DocxFormula)
73
+ true
74
+ end
75
+ end
76
+ end
77
+
78
+ def remove_empty_runs
79
+ nonempty = nonempty_runs
80
+ @character_style_array.each do |cur_run|
81
+ @character_style_array.delete(cur_run) unless nonempty.include?(cur_run)
82
+ end
83
+ end
84
+
85
+ def ==(other)
86
+ character_style_array.each do |current_run|
87
+ character_style_array.delete(current_run) if current_run.text.empty?
88
+ end
89
+ other.character_style_array.each do |current_run|
90
+ other.character_style_array.delete(current_run) if current_run.text.empty?
91
+ end
92
+ ignored_attributes = [:@number]
93
+ all_instance_variables = instance_variables
94
+ significan_attribues = all_instance_variables - ignored_attributes
95
+ significan_attribues.each do |current_attributes|
96
+ unless instance_variable_get(current_attributes) == other.instance_variable_get(current_attributes)
97
+ return false
98
+ end
99
+ end
100
+ true
101
+ end
102
+
103
+ def self.parse(p_tag, par_number = 0, default_paragraph = DocxParagraph.new, default_character = DocxParagraphRun.new)
104
+ paragraph_style = default_paragraph.copy
105
+ default_character_style = default_character.copy
106
+ character_styles_array = []
107
+ custom_character_style = DocxParagraphRun.new
108
+ char_number = 0
109
+ comments = []
110
+ p_tag.xpath('w:bookmarkStart').each do |bookmark_start|
111
+ paragraph_style.bookmark_start << Bookmark.new(bookmark_start.attribute('id').value, bookmark_start.attribute('name').value)
112
+ end
113
+ p_tag.xpath('w:bookmarkEnd').each do |bookmark_end|
114
+ paragraph_style.bookmark_end << Bookmark.new(bookmark_end.attribute('id').value)
115
+ end
116
+ p_tag.xpath('*').each do |p_element|
117
+ if p_element.name == 'pPr'
118
+ p_props = p_tag.xpath('w:pPr')
119
+ DocxParagraph.parse_paragraph_style(p_props, paragraph_style, custom_character_style)
120
+ p_tag.xpath('w:pict').each do |pict|
121
+ pict.xpath('v:rect').each do
122
+ paragraph_style.horizontal_line = true
123
+ end
124
+ end
125
+ elsif p_element.name == 'commentRangeStart'
126
+ comments << p_element.attribute('id').value
127
+ elsif p_element.name == 'fldSimple'
128
+ instruction = p_element.attribute('instr').to_s
129
+ paragraph_style.page_numbering = true if instruction.include?('PAGE')
130
+ p_element.xpath('w:r').each do |r_tag|
131
+ character_style = DocxParagraphRun.parse_character(r_tag, default_character_style.copy, char_number)
132
+ character_style.page_number = paragraph_style.page_numbering
133
+ character_style.instruction = instruction
134
+ character_styles_array << character_style.copy
135
+ char_number += 1
136
+ end
137
+ elsif p_element.name == 'r'
138
+ character_style = custom_character_style.copy
139
+ p_element.xpath('w:instrText').each do |insrt_text|
140
+ if insrt_text.text.include?('PAGE')
141
+ paragraph_style.page_numbering = true
142
+ end
143
+ end
144
+ character_style = DocxParagraphRun.parse_character(p_element, character_style, char_number)
145
+ character_style.comments = comments.dup
146
+ character_styles_array << character_style.copy
147
+ unless character_style.shape.nil?
148
+ character_styles_array.last.shape = character_style.shape
149
+ end
150
+ char_number += 1
151
+ elsif p_element.name == 'hyperlink'
152
+ character_style = default_character_style.copy
153
+ if !p_element.attribute('id').nil?
154
+ character_style.link = Hyperlink.parse(p_element)
155
+ else
156
+ unless p_element.attribute('anchor').nil?
157
+ character_style.link = p_element.attribute('anchor').value
158
+ end
159
+ end
160
+ p_element.xpath('w:r').each do |r_tag|
161
+ character_style = DocxParagraphRun.parse_character(r_tag, character_style, char_number)
162
+ character_styles_array << character_style.copy
163
+ char_number += 1
164
+ end
165
+ p_element.xpath('w:fldSimple').each do |simple_field|
166
+ instruction = simple_field.attribute('instr').to_s
167
+ paragraph_style.page_numbering = true if instruction.include?('PAGE')
168
+ simple_field.xpath('w:r').each do |r_tag|
169
+ character_style = DocxParagraphRun.parse_character(r_tag, character_style.copy, char_number)
170
+ character_style.page_number = paragraph_style.page_numbering
171
+ character_style.instruction = instruction
172
+ character_styles_array << character_style.copy
173
+ char_number += 1
174
+ end
175
+ end
176
+ elsif p_element.name == 'oMathPara'
177
+ p_element.xpath('m:oMath').each do |o_math|
178
+ character_styles_array << DocxFormula.parse(o_math)
179
+ end
180
+ elsif p_element.name == 'commentRangeEnd'
181
+ comments.each_with_index do |comment, index|
182
+ if comment == p_element.attribute('id').value
183
+ comments.delete_at(index)
184
+ break
185
+ end
186
+ end
187
+ end
188
+ end
189
+ paragraph_style.number = par_number
190
+ if character_styles_array.last.class == DocxParagraphRun
191
+ character_styles_array.last.text = character_styles_array.last.text.rstrip
192
+ end
193
+ paragraph_style.character_style_array = character_styles_array
194
+ paragraph_style
195
+ end
196
+
197
+ def self.parse_paragraph_style(paragraph_pr_tag, paragraph_style = DocxParagraph.new, default_char_style = DocxParagraphRun.new)
198
+ paragraph_pr_tag.xpath('w:tabs').each do |tabs_node|
199
+ tabs_node.xpath('w:tab').each { |tab_node| paragraph_style.tabs << ParagraphTab.new(tab_node.attribute('val').value.to_sym, (tab_node.attribute('pos').value.to_f / 566.9).round(2)) }
200
+ end
201
+ paragraph_pr_tag.xpath('w:pageBreakBefore').each do |page_break_before|
202
+ if page_break_before.attribute('val').nil? || page_break_before.attribute('val').value != 'false'
203
+ paragraph_style.page_break = true
204
+ end
205
+ end
206
+ paragraph_pr_tag.xpath('w:pBdr').each do |paragraph_br|
207
+ paragraph_style.borders = Borders.new
208
+ paragraph_br.xpath('w:bottom').each do |bottom|
209
+ paragraph_style.borders.bottom = BordersProperties.parse(bottom)
210
+ end
211
+ paragraph_br.xpath('w:left').each do |left|
212
+ paragraph_style.borders.left = BordersProperties.parse(left)
213
+ end
214
+ paragraph_br.xpath('w:top').each do |top|
215
+ paragraph_style.borders.top = BordersProperties.parse(top)
216
+ end
217
+ paragraph_br.xpath('w:right').each do |right|
218
+ paragraph_style.borders.right = BordersProperties.parse(right)
219
+ end
220
+ paragraph_br.xpath('w:between').each do |between|
221
+ paragraph_style.borders.between = BordersProperties.parse(between)
222
+ end
223
+ paragraph_br.xpath('w:bar').each do |bar|
224
+ paragraph_style.borders.bar = BordersProperties.parse(bar)
225
+ end
226
+ end
227
+ paragraph_pr_tag.xpath('w:keepLines').each do |keep_lines|
228
+ if keep_lines.attribute('val').nil?
229
+ paragraph_style.keep_lines = true
230
+ else
231
+ unless keep_lines.attribute('val').value == 'false'
232
+ paragraph_style.keep_lines = true
233
+ end
234
+ end
235
+ end
236
+ paragraph_pr_tag.xpath('w:widowControl').each do |widow_control_node|
237
+ paragraph_style.orphan_control = OOXMLDocumentObject.option_enabled?(widow_control_node)
238
+ end
239
+ paragraph_pr_tag.xpath('w:keepNext').each do |_|
240
+ paragraph_style.keep_next = true
241
+ end
242
+ paragraph_style.contextual_spacing = true unless paragraph_pr_tag.xpath('w:contextualSpacing').empty?
243
+ paragraph_pr_tag.xpath('w:shd').each do |shd|
244
+ background_color_string = shd.attribute('fill').value
245
+ paragraph_style.background_color = Color.from_int16(background_color_string)
246
+ unless shd.attribute('val').nil?
247
+ paragraph_style.background_color.set_style(shd.attribute('val').value)
248
+ end
249
+ end
250
+ paragraph_pr_tag.xpath('w:pStyle').each do |p_style|
251
+ parse_paragraph_style_xml(p_style.attribute('val').value, paragraph_style, default_char_style)
252
+ end
253
+ paragraph_pr_tag.xpath('w:ind').each do |ind|
254
+ paragraph_style.ind = Indents.parse(ind)
255
+ end
256
+ paragraph_pr_tag.xpath('w:kinoku').each do
257
+ paragraph_style.kinoku = true
258
+ end
259
+ paragraph_pr_tag.xpath('w:framePr').each do |frame_pr_node|
260
+ paragraph_style.frame_properties = FrameProperties.parse(frame_pr_node)
261
+ end
262
+ paragraph_pr_tag.xpath('w:numPr').each do |num_pr|
263
+ numbering = Numbering.new
264
+ num_pr.xpath('w:ilvl').each do |ilvl|
265
+ numbering.ilvl = ilvl.attribute('val').value
266
+ end
267
+ num_pr.xpath('w:numId').each do |num_id|
268
+ numbering.numbering_properties = NumberingProperties.parse(num_id.attribute('val').value) if File.exist?(OOXMLDocumentObject.path_to_folder + 'word/numbering.xml')
269
+ end
270
+ paragraph_style.numbering = numbering
271
+ end
272
+ paragraph_pr_tag.xpath('w:jc').each do |jc|
273
+ paragraph_style.align = jc.attribute('val').value.to_sym unless jc.attribute('val').nil?
274
+ paragraph_style.align = :justify if jc.attribute('val').value == 'both'
275
+ end
276
+ paragraph_pr_tag.xpath('w:framePr').each do |frame_pr_node|
277
+ paragraph_style.frame_properties = FrameProperties.parse(frame_pr_node)
278
+ end
279
+ paragraph_pr_tag.xpath('w:spacing').each do |spacing|
280
+ unless spacing.attribute('before').nil?
281
+ paragraph_style.spacing.before = (spacing.attribute('before').value.to_f / 566.9).round(2)
282
+ end
283
+ unless spacing.attribute('after').nil?
284
+ paragraph_style.spacing.after = (spacing.attribute('after').value.to_f / 566.9).round(2)
285
+ end
286
+ unless spacing.attribute('lineRule').nil?
287
+ paragraph_style.spacing.line_rule = spacing.attribute('lineRule').value.sub('atLeast', 'at_least').to_sym
288
+ end
289
+ unless spacing.attribute('line').nil?
290
+ paragraph_style.spacing.line = (paragraph_style.spacing.line_rule == :auto ? (spacing.attribute('line').value.to_f / 240.0).round(2) : (spacing.attribute('line').value.to_f / 566.9).round(2))
291
+ end
292
+ end
293
+ paragraph_pr_tag.xpath('w:sectPr').each do |sect_pr|
294
+ paragraph_style.sector_properties = PageProperties.parse(sect_pr, paragraph_style, default_char_style)
295
+ paragraph_style.section_break = case paragraph_style.sector_properties.type
296
+ when 'oddPage'
297
+ 'Odd page'
298
+ when 'evenPage'
299
+ 'Even page'
300
+ when 'continuous'
301
+ 'Current Page'
302
+ else
303
+ 'Next Page'
304
+ end
305
+ end
306
+ paragraph_style
307
+ end
308
+
309
+ def self.parse_paragraph_style_xml(id, paragraph_style, character_style)
310
+ doc = Nokogiri::XML(File.open(OOXMLDocumentObject.path_to_folder + 'word/styles.xml'))
311
+ doc.search('//w:style').each do |style|
312
+ next unless style.attribute('styleId').value == id
313
+ style.xpath('w:pPr').each do |p_pr|
314
+ parse_paragraph_style(p_pr, paragraph_style, character_style)
315
+ paragraph_style.style = StyleParametres.parse(style)
316
+ end
317
+ style.xpath('w:rPr').each do |r_pr|
318
+ DocxParagraphRun.parse(r_pr, character_style, @default_character)
319
+ end
320
+ break
321
+ end
322
+ end
323
+ end
324
+ end
@@ -0,0 +1,37 @@
1
+ module OoxmlParser
2
+ class HeaderFooter < OOXMLDocumentObject
3
+ attr_accessor :id, :description, :type
4
+
5
+ def initialize(type = :header)
6
+ @type = type
7
+ end
8
+
9
+ def parse(type, id, default_paragraph, default_character)
10
+ if type == :header
11
+ doc = Nokogiri::XML(File.open(OOXMLDocumentObject.path_to_folder + 'word/footnotes.xml'))
12
+ doc.search('//w:footnote').each do |footnote|
13
+ next unless footnote.attribute('id').value == id
14
+ description = []
15
+ paragraph_number = 0
16
+ footnote.xpath('w:p').each do |paragraph|
17
+ description << DocxParagraph.parse(paragraph, paragraph_number, default_paragraph, default_character)
18
+ paragraph_number += 1
19
+ end
20
+ return description
21
+ end
22
+ elsif type == :header
23
+ doc = Nokogiri::XML(File.open(OOXMLDocumentObject.path_to_folder + 'word/endnotes.xml'))
24
+ doc.search('//w:endnote').each do |footnote|
25
+ next unless footnote.attribute('id').value == id
26
+ description = []
27
+ paragraph_number = 0
28
+ footnote.xpath('w:p').each do |paragraph|
29
+ description << DocxParagraph.parse(paragraph, paragraph_number, default_paragraph, default_character)
30
+ paragraph_number += 1
31
+ end
32
+ return description
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,15 @@
1
+ # Image Data
2
+ module OoxmlParser
3
+ class Image
4
+ attr_accessor :path, :start_x, :start_y, :end_x, :end_y, :wrap_text
5
+
6
+ def initialize
7
+ @path = nil
8
+ @start_x = 0
9
+ @start_y = 0
10
+ @end_x = nil
11
+ @end_y = nil
12
+ @wrap_text = 'In text'
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,10 @@
1
+ module OoxmlParser
2
+ class Column
3
+ attr_accessor :width, :space, :separator
4
+
5
+ def initialize(width = nil, space = nil)
6
+ @width = width
7
+ @space = space
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,37 @@
1
+ require_relative 'columns/column'
2
+ module OoxmlParser
3
+ class Columns < OOXMLDocumentObject
4
+ attr_accessor :separator
5
+ attr_accessor :count
6
+ attr_accessor :equal_width
7
+ alias equal_width? equal_width
8
+ attr_accessor :column_array
9
+
10
+ def initialize(columns_count)
11
+ @count = columns_count
12
+ @column_array = []
13
+ end
14
+
15
+ # @return [Array, Column] accessor
16
+ def [](key)
17
+ @column_array[key]
18
+ end
19
+
20
+ # Parse Columns data
21
+ # @param [Nokogiri::XML:Element] node with Columns data
22
+ # @return [DocumentGrid] value of Columns data
23
+ def self.parse(columns_grid)
24
+ columns_count = 1
25
+ columns_count = columns_grid.attribute('num').value.to_i unless columns_grid.attribute('num').nil?
26
+ columns = Columns.new(columns_count)
27
+ columns.separator = columns_grid.attribute('sep').value unless columns_grid.attribute('sep').nil?
28
+ columns.equal_width = option_enabled?(columns_grid, 'equalWidth') unless columns_grid.attribute('equalWidth').nil?
29
+ columns_grid.xpath('w:col').each do |col|
30
+ width = (col.attribute('w').value.to_f / OoxmlParser.configuration.units_delimiter).round(2)
31
+ space = (col.attribute('space').value.to_f / OoxmlParser.configuration.units_delimiter).round(2) unless col.attribute('space').nil?
32
+ columns.column_array << Column.new(width, space)
33
+ end
34
+ columns
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,29 @@
1
+ module OoxmlParser
2
+ class DocumentGrid
3
+ attr_accessor :type, :line_pitch, :char_space
4
+
5
+ def initialize(type = nil, line_pitch = nil, char_space = nil)
6
+ @type = type
7
+ @line_pitch = line_pitch
8
+ @char_space = char_space
9
+ end
10
+
11
+ # Parse DocumentGrid
12
+ # @param [Nokogiri::XML:Element] node with DocumentGrid
13
+ # @return [DocumentGrid] value of DocumentGrid
14
+ def self.parse(node)
15
+ document_grid = DocumentGrid.new
16
+ node.attributes.each do |key, value|
17
+ case key
18
+ when 'charSpace'
19
+ document_grid.char_space = value.value
20
+ when 'linePitch'
21
+ document_grid.line_pitch = value.value.to_i
22
+ when 'type'
23
+ document_grid.type = value.value
24
+ end
25
+ end
26
+ document_grid
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,49 @@
1
+ module OoxmlParser
2
+ class Note < OOXMLDocumentObject
3
+ attr_accessor :type, :elements, :assigned_to
4
+
5
+ def initialize(type = nil, elements = [], assigned_to = nil)
6
+ @type = type
7
+ @elements = elements
8
+ @assigned_to = assigned_to
9
+ end
10
+
11
+ def self.parse(default_paragraph, default_character, target, assigned_to, type)
12
+ note = Note.new
13
+ note.type = type
14
+ note.assigned_to = assigned_to
15
+ doc = Nokogiri::XML(File.open(OOXMLDocumentObject.path_to_folder + "word/#{target}"))
16
+ if type.include?('footer')
17
+ xpath_note = '//w:ftr'
18
+ elsif type.include?('header')
19
+ xpath_note = '//w:hdr'
20
+ else
21
+ raise "Cannot parse unknown Note type: #{type}"
22
+ end
23
+ doc.search(xpath_note).each do |ftr|
24
+ number = 0
25
+ ftr.xpath('*').each do |sub_element|
26
+ if sub_element.name == 'p'
27
+ note.elements << DocxParagraph.parse(sub_element, number, default_paragraph, default_character)
28
+ number += 1
29
+ elsif sub_element.name == 'tbl'
30
+ note.elements << Table.parse(sub_element, number)
31
+ number += 1
32
+ elsif sub_element.name == 'std'
33
+ sub_element.xpath('w:p').each do |p|
34
+ note.elements << DocxParagraph.parse(p, number, default_paragraph, default_character)
35
+ number += 1
36
+ end
37
+ sub_element.xpath('w:sdtContent').each do |sdt_content|
38
+ sdt_content.xpath('w:p').each do |p|
39
+ note.elements << DocxParagraph.parse(p, number, default_paragraph, default_character)
40
+ number += 1
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ note
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,42 @@
1
+ module OoxmlParser
2
+ class PageMargins
3
+ attr_accessor :top, :bottom, :left, :right, :footer, :gutter, :header
4
+
5
+ def initialize(top: nil, bottom: nil, left: nil, right: nil, header: nil, footer: nil, gutter: nil)
6
+ @top = top
7
+ @bottom = bottom
8
+ @left = left
9
+ @right = right
10
+ @header = header
11
+ @footer = footer
12
+ @gutter = gutter
13
+ end
14
+
15
+ def ==(other)
16
+ other.class == PageMargins &&
17
+ @top == other.top &&
18
+ @bottom == other.bottom &&
19
+ @left == other.left &&
20
+ @right == other.right &&
21
+ @footer == other.footer &&
22
+ @header == other.header &&
23
+ @gutter == other.gutter
24
+ end
25
+
26
+ # Parse BordersProperties
27
+ # @param [Nokogiri::XML:Element] node with PageMargins
28
+ # @return [PageMargins] value of PageMargins
29
+ def self.parse(node)
30
+ margins = PageMargins.new
31
+ # TODO: implement and understand, why 566.929, but not `unit_delimiter`
32
+ margins.top = (node.attribute('top').value.to_f / 566.929).round(2)
33
+ margins.left = (node.attribute('left').value.to_f / 566.929).round(2)
34
+ margins.right = (node.attribute('right').value.to_f / 566.929).round(2)
35
+ margins.bottom = (node.attribute('bottom').value.to_f / 566.929).round(2)
36
+ margins.header = (node.attribute('header').value.to_f / 566.929).round(2) unless node.attribute('header').nil?
37
+ margins.footer = (node.attribute('footer').value.to_f / 566.929).round(2) unless node.attribute('footer').nil?
38
+ margins.gutter = (node.attribute('gutter').value.to_f / 566.929).round(2)
39
+ margins
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,88 @@
1
+ require_relative 'document_grid'
2
+ require_relative 'size'
3
+ require_relative 'page_margins'
4
+ require_relative 'columns'
5
+ require_relative 'note'
6
+ module OoxmlParser
7
+ class PageProperties < OOXMLDocumentObject
8
+ attr_accessor :type, :size, :margins, :document_grid, :num_type, :form_prot, :text_direction, :page_borders, :columns,
9
+ :notes
10
+
11
+ def initialize
12
+ @type = nil
13
+ @size = nil
14
+ @margins = nil
15
+ @document_grid = nil
16
+ @num_type = nil
17
+ @form_prot = nil
18
+ @text_direction = nil
19
+ @columns = nil
20
+ @notes = []
21
+ end
22
+
23
+ def self.parse(sect_pr, default_paragraph, default_character)
24
+ page_properties = PageProperties.new
25
+ sect_pr.xpath('w:pgSz').each do |pg_sz|
26
+ page_properties.size = Size.parse(pg_sz)
27
+ end
28
+ sect_pr.xpath('w:pgBorders').each do |pg_borders|
29
+ page_borders = Borders.new
30
+ unless pg_borders.attribute('display').nil?
31
+ page_borders.display = pg_borders.attribute('display').value
32
+ end
33
+ unless pg_borders.attribute('offsetFrom').nil?
34
+ page_borders.offset_from = pg_borders.attribute('offsetFrom').value
35
+ end
36
+ pg_borders.xpath('w:bottom').each do |bottom|
37
+ page_borders.bottom = BordersProperties.parse(bottom)
38
+ end
39
+ pg_borders.xpath('w:left').each do |left|
40
+ page_borders.bottom = BordersProperties.parse(left)
41
+ end
42
+ pg_borders.xpath('w:top').each do |top|
43
+ page_borders.bottom = BordersProperties.parse(top)
44
+ end
45
+ pg_borders.xpath('w:right').each do |right|
46
+ page_borders.bottom = BordersProperties.parse(right)
47
+ end
48
+ page_properties.page_border = page_borders
49
+ end
50
+ sect_pr.xpath('w:type').each do |type|
51
+ page_properties.type = type.attribute('val').value
52
+ end
53
+ sect_pr.xpath('w:pgMar').each do |pg_mar|
54
+ page_properties.margins = PageMargins.parse(pg_mar)
55
+ end
56
+ sect_pr.xpath('w:pgNumType').each do |pg_num_type|
57
+ page_properties.num_type = pg_num_type.attribute('fmt').value unless pg_num_type.attribute('fmt').nil?
58
+ end
59
+ sect_pr.xpath('w:formProt').each do |form_prot|
60
+ page_properties.form_prot = form_prot.attribute('val').value
61
+ end
62
+ sect_pr.xpath('w:textDirection').each do |text_direction|
63
+ page_properties.text_direction = text_direction.attribute('val').value
64
+ end
65
+ sect_pr.xpath('w:docGrid').each do |doc_grid|
66
+ page_properties.document_grid = DocumentGrid.parse(doc_grid)
67
+ end
68
+ sect_pr.xpath('w:cols').each do |columns_grid|
69
+ page_properties.columns = Columns.parse(columns_grid)
70
+ end
71
+ sect_pr.xpath('w:headerReference').each do |header_reference|
72
+ target = OOXMLDocumentObject.get_link_from_rels(header_reference.attribute('id').value)
73
+ OOXMLDocumentObject.add_to_xmls_stack("word/#{target}")
74
+ note = Note.parse(default_paragraph, default_character, target, header_reference.attribute('type').value, File.basename(target).sub('.xml', ''))
75
+ page_properties.notes << note
76
+ OOXMLDocumentObject.xmls_stack.pop
77
+ end
78
+ sect_pr.xpath('w:footerReference').each do |footer_reference|
79
+ target = OOXMLDocumentObject.get_link_from_rels(footer_reference.attribute('id').value)
80
+ OOXMLDocumentObject.add_to_xmls_stack("word/#{target}")
81
+ note = Note.parse(default_paragraph, default_character, target, footer_reference.attribute('type').value, File.basename(target).sub('.xml', ''))
82
+ page_properties.notes << note
83
+ OOXMLDocumentObject.xmls_stack.pop
84
+ end
85
+ page_properties
86
+ end
87
+ end
88
+ end