ooxml_parser 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.overcommit.yml +35 -0
- data/Changelog.md +25 -0
- data/LICENSE.txt +661 -0
- data/README.md +26 -0
- data/circle.yml +3 -0
- data/lib/ooxml_parser/common_parser/common_data/alingment.rb +56 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/alternate_content.rb +34 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart.rb +123 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart_axis.rb +34 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart_axis_title.rb +38 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart_cells_range.rb +23 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart_legend.rb +33 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart_point.rb +11 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart_style/office_2007_chart_style.rb +17 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart_style/office_2010_chart_style.rb +17 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/display_labels_properties.rb +26 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/docx_drawing.rb +49 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/docx_drawing_distance_from_text.rb +23 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/docx_drawing_position.rb +35 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/docx_drawing_properties.rb +11 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/docx_wrap_drawing.rb +39 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/ooxml_coordinates.rb +32 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/docx_graphic.rb +34 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/group/docx_group_element.rb +10 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/group/docx_grouped_drawing.rb +34 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_blip.rb +27 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_picture.rb +26 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/docx_shape.rb +25 -0
- 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
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_body_properties/ooxml_shape_body_properties.rb +30 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/color/docx_color_scheme.rb +37 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/color/docx_pattern_fill.rb +20 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/color/gradient_color/docx_gradient_color.rb +30 -0
- 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
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/color/solid_color/docx_solid_color.rb +10 -0
- 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
- 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
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/custom_geometry/ooxml_custom_geometry.rb +23 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_color.rb +43 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_line.rb +54 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_properties/text_box.rb +25 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_properties.rb +40 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_size.rb +31 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/line/line_end/line_size.rb +20 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/line/line_end.rb +21 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_style/docx_shape_style.rb +5 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/group/old_docx_group.rb +31 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/group/old_docx_group_element.rb +10 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/group/old_docx_group_properties.rb +6 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/old_docx_picture.rb +26 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/shape/old_docx_shape.rb +24 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/shape/old_docx_shape_fill.rb +26 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/shape/old_docx_shape_properties.rb +24 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/shape/common_non_visual_properties.rb +25 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/shape/non_visual_properties.rb +19 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/shape/non_visual_shape_properties.rb +20 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/shape/shape.rb +28 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/shape/shape_placeholder.rb +18 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/shape/shape_properties/ooxml_shift.rb +15 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/shape/shape_properties/transform_effect.rb +28 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/shape/shape_properties.rb +13 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/shape/text_body/ooxml_text_box.rb +26 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/shape/text_body/text_body.rb +23 -0
- data/lib/ooxml_parser/common_parser/common_data/borders_properties.rb +58 -0
- data/lib/ooxml_parser/common_parser/common_data/color.rb +473 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/color_alpha_channel.rb +14 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/color_properties.rb +21 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/hsl_color.rb +150 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/image/fill_rectangle.rb +22 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/image/stretching.rb +11 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/image_fill.rb +32 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/image_properties.rb +16 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/presentation_fill/gradient_color/gradient_stop.rb +15 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/presentation_fill/gradient_color/linear_gradient.rb +10 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/presentation_fill/gradient_color.rb +35 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/presentation_fill/presentation_pattern.rb +22 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/presentation_fill.rb +33 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/scheme_color.rb +14 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/theme_colors.rb +22 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/tile.rb +21 -0
- data/lib/ooxml_parser/common_parser/common_data/coordinates.rb +127 -0
- data/lib/ooxml_parser/common_parser/common_data/font_style.rb +101 -0
- data/lib/ooxml_parser/common_parser/common_data/hyperlink.rb +53 -0
- data/lib/ooxml_parser/common_parser/common_data/ooxml_document_object.rb +87 -0
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_properties.rb +48 -0
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run/run_properties/outline.rb +23 -0
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run/run_properties/strikeout.rb +16 -0
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run/run_properties.rb +79 -0
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run.rb +24 -0
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/numbering/numbering_properties/numbering_level.rb +25 -0
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/numbering/numbering_properties.rb +69 -0
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/numbering.rb +18 -0
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/spacing.rb +115 -0
- data/lib/ooxml_parser/common_parser/common_data/paragraph.rb +35 -0
- data/lib/ooxml_parser/common_parser/common_data/table/margins/paragraph_margins.rb +35 -0
- data/lib/ooxml_parser/common_parser/common_data/table/margins/table_margins.rb +47 -0
- data/lib/ooxml_parser/common_parser/common_data/table/properties/table_cell_margin.rb +20 -0
- data/lib/ooxml_parser/common_parser/common_data/table/properties/table_element.rb +20 -0
- data/lib/ooxml_parser/common_parser/common_data/table/properties/table_look.rb +43 -0
- data/lib/ooxml_parser/common_parser/common_data/table/properties/table_position.rb +49 -0
- data/lib/ooxml_parser/common_parser/common_data/table/properties/table_style.rb +83 -0
- data/lib/ooxml_parser/common_parser/common_data/table/properties/table_style_elements.rb +21 -0
- data/lib/ooxml_parser/common_parser/common_data/table/properties/whole_table/line_join.rb +19 -0
- data/lib/ooxml_parser/common_parser/common_data/table/properties/whole_table/table_cell_style.rb +20 -0
- data/lib/ooxml_parser/common_parser/common_data/table/row/cell/cell.rb +43 -0
- data/lib/ooxml_parser/common_parser/common_data/table/row/cell/cell_properties.rb +142 -0
- data/lib/ooxml_parser/common_parser/common_data/table/row/cell/merge.rb +18 -0
- data/lib/ooxml_parser/common_parser/common_data/table/row/cell/properties/border.rb +25 -0
- data/lib/ooxml_parser/common_parser/common_data/table/row/cell/properties/borders.rb +125 -0
- data/lib/ooxml_parser/common_parser/common_data/table/row/cell/properties/table_cell_line.rb +35 -0
- data/lib/ooxml_parser/common_parser/common_data/table/row/row/table_row_properties.rb +22 -0
- data/lib/ooxml_parser/common_parser/common_data/table/row/row.rb +33 -0
- data/lib/ooxml_parser/common_parser/common_data/table/table_grid.rb +9 -0
- data/lib/ooxml_parser/common_parser/common_data/table/table_properties.rb +77 -0
- data/lib/ooxml_parser/common_parser/common_data/table.rb +41 -0
- data/lib/ooxml_parser/common_parser/common_data/underline.rb +40 -0
- data/lib/ooxml_parser/common_parser/common_document_structure.rb +7 -0
- data/lib/ooxml_parser/configuration.rb +20 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/comment.rb +28 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/document_background.rb +10 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/document_properties.rb +21 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/document_style.rb +70 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/accent.rb +11 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/bar.rb +10 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/box.rb +11 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/delimeter.rb +12 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/fraction.rb +11 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/function.rb +11 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/group_char.rb +13 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/index.rb +12 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/limit.rb +12 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/matrix/matrix_row.rb +10 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/matrix.rb +10 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/operator.rb +13 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/radical.rb +11 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula.rb +203 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/shape/offset.rb +10 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/shape/shadow.rb +10 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/shape/shape_properties/shape_margins.rb +11 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/shape/shape_properties/shape_size.rb +10 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/shape/shape_properties/stroke.rb +10 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/shape/shape_properties.rb +16 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/shape.rb +40 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/text_fill.rb +13 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/text_outline.rb +22 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run.rb +388 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/frame_properties.rb +46 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/indents.rb +87 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/paragraph_style/bookmark.rb +10 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/paragraph_style/paragraph_tab.rb +19 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/paragraph_style/style_parametres.rb +35 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/paragraph_style.rb +56 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph.rb +324 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/header_footer.rb +37 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/image.rb +15 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/columns/column.rb +10 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/columns.rb +37 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/document_grid.rb +29 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/note.rb +49 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/page_margins.rb +42 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/page_properties.rb +88 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/size.rb +84 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure.rb +232 -0
- data/lib/ooxml_parser/docx_parser/docx_parser.rb +16 -0
- data/lib/ooxml_parser/helpers/string_helper.rb +22 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/presentation_comment/presentation_comment_author.rb +25 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/presentation_comment.rb +31 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/presentation_theme/theme_color.rb +40 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/presentation_theme.rb +44 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/background.rb +19 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/graphic_frame/graphic_frame.rb +34 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/presentation_alternate_content.rb +25 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/shape/non_visual_shape_properties/hyperlinks/hyperlink_for_hover.rb +23 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/shape/shape_properties/extents.rb +10 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/shape/shape_properties/offset.rb +10 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/shape/text_body/paragraph.rb +10 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/shape/text_body/text_field.rb +18 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/shapes_grouping/shapes_grouping.rb +9 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/shapes_grouping/grouping_properties.rb +16 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/shapes_grouping.rb +30 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing/animation_effect/animation_effect.rb +22 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing/set_time_node/behavior/behavior.rb +28 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing/set_time_node/behavior/target_element.rb +31 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing/set_time_node/set_time_node.rb +20 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing/time_node/common_timing/condition.rb +26 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing/time_node/common_timing.rb +33 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing/time_node.rb +52 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing.rb +23 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/transition/sound_action/sound/sound.rb +18 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/transition/sound_action/sound_action.rb +18 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/transition/transition.rb +43 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/transition/transition_properties/transition_properties.rb +9 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb +110 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide_size.rb +20 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation.rb +62 -0
- data/lib/ooxml_parser/pptx_parser/pptx_parser.rb +15 -0
- data/lib/ooxml_parser/version.rb +6 -0
- 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
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/excel_comments/excel_comment/excel_comment_character.rb +25 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/excel_comments/excel_comment.rb +20 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/excel_comments.rb +43 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/sheet_format_properties.rb +21 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/sheet_view/pane.rb +23 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/sheet_view.rb +18 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_column_properties.rb +24 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_drawing/xlsx_drawing_position/xlsx_drawing_position_parameters.rb +22 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_drawing/xlsx_drawing_position.rb +22 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_drawing/xlsx_shape_grouping.rb +37 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_drawing.rb +49 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_row/xlsx_cell/cell_style/alignment.rb +30 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_row/xlsx_cell/cell_style/foreground_color.rb +25 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_row/xlsx_cell/cell_style/ooxml_font.rb +38 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_row/xlsx_cell/cell_style.rb +95 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_row/xlsx_cell.rb +47 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_row.rb +19 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_table.rb +30 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet.rb +74 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook.rb +108 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_parser.rb +15 -0
- data/lib/ooxml_parser.rb +35 -0
- data/ooxml_parser.gemspec +30 -0
- metadata +310 -0
@@ -0,0 +1,32 @@
|
|
1
|
+
require_relative 'tile'
|
2
|
+
require_relative 'image_properties'
|
3
|
+
require_relative 'image/stretching'
|
4
|
+
module OoxmlParser
|
5
|
+
class ImageFill < OOXMLDocumentObject
|
6
|
+
attr_accessor :path, :stretch, :tile, :properties
|
7
|
+
|
8
|
+
alias path_to_media_file path
|
9
|
+
|
10
|
+
def initialize(path = '')
|
11
|
+
@path = path
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.parse(blip_fill_node)
|
15
|
+
image = ImageFill.new
|
16
|
+
blip_fill_node.xpath('*').each do |blip_fill_node_child|
|
17
|
+
case blip_fill_node_child.name
|
18
|
+
when 'blip'
|
19
|
+
path_to_original_image = OOXMLDocumentObject.get_link_from_rels(blip_fill_node_child.attribute('embed').value)
|
20
|
+
FileUtils.copy(dir + path_to_original_image, OOXMLDocumentObject.media_folder + File.basename(path_to_original_image))
|
21
|
+
image.path = OOXMLDocumentObject.media_folder + File.basename(path_to_original_image)
|
22
|
+
image.properties = ImageProperties.parse(blip_fill_node_child)
|
23
|
+
when 'stretch'
|
24
|
+
image.stretch = Stretching.parse(blip_fill_node_child) # !blip_fill_node_child.xpath('a:fillRect').first.nil?
|
25
|
+
when 'tile'
|
26
|
+
image.tile = Tile.parse(blip_fill_node_child)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
image
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module OoxmlParser
|
2
|
+
class ImageProperties
|
3
|
+
attr_accessor :alpha_modulate_fixed_effect
|
4
|
+
|
5
|
+
def self.parse(blip_properties_node)
|
6
|
+
properties = ImageProperties.new
|
7
|
+
blip_properties_node.xpath('*').each do |property_node|
|
8
|
+
case property_node.name
|
9
|
+
when 'alphaModFix'
|
10
|
+
properties.alpha_modulate_fixed_effect = (property_node.attribute('amt').value.to_f / 1_000.0).round(1)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
properties
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module OoxmlParser
|
2
|
+
class GradientStop < OOXMLDocumentObject
|
3
|
+
attr_accessor :position, :color
|
4
|
+
|
5
|
+
def initialize(position)
|
6
|
+
@position = position
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.parse(gs_node)
|
10
|
+
gradient_stop = GradientStop.new(gs_node.attribute('pos').value.to_i / 1_000)
|
11
|
+
gs_node.xpath('*').each { |color_node| gradient_stop.color = Color.parse_color(color_node) }
|
12
|
+
gradient_stop
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require_relative 'gradient_color/gradient_stop'
|
2
|
+
require_relative 'gradient_color/linear_gradient'
|
3
|
+
module OoxmlParser
|
4
|
+
class GradientColor
|
5
|
+
attr_accessor :gradient_stops, :path
|
6
|
+
|
7
|
+
def initialize(colors = [])
|
8
|
+
@gradient_stops = colors
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.parse(gradient_fill_node)
|
12
|
+
gradient_color = GradientColor.new
|
13
|
+
gradient_fill_node.xpath('*').each do |gradient_fill_node_child|
|
14
|
+
case gradient_fill_node_child.name
|
15
|
+
when 'gsLst'
|
16
|
+
begin
|
17
|
+
gradient_fill_node_child.xpath('//a:gs')
|
18
|
+
namespace = 'a'
|
19
|
+
rescue Nokogiri::XML::XPath::SyntaxError
|
20
|
+
namespace = 'w14'
|
21
|
+
end
|
22
|
+
gradient_fill_node_child.xpath("#{namespace}:gs").each do |gradient_stop_node|
|
23
|
+
gradient_color.gradient_stops << GradientStop.parse(gradient_stop_node)
|
24
|
+
end
|
25
|
+
when 'path'
|
26
|
+
gradient_color.path = gradient_fill_node_child.attribute('path').value.to_sym
|
27
|
+
when 'lin'
|
28
|
+
gradient_color.path = LinearGradient.new(gradient_fill_node_child.attribute('ang').value.to_f / 100_000.0,
|
29
|
+
gradient_fill_node_child.attribute('scaled').value.to_i)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
gradient_color
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/ooxml_parser/common_parser/common_data/colors/presentation_fill/presentation_pattern.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module OoxmlParser
|
2
|
+
class PresentationPattern < OOXMLDocumentObject
|
3
|
+
attr_accessor :preset, :foreground_color, :background_color
|
4
|
+
|
5
|
+
def initialize(preset = nil)
|
6
|
+
@preset = preset
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.parse(pattern_node)
|
10
|
+
pattern = PresentationPattern.new(pattern_node.attribute('prst').value.to_sym)
|
11
|
+
pattern_node.xpath('*').each do |color_node|
|
12
|
+
case color_node.name
|
13
|
+
when 'fgClr'
|
14
|
+
pattern.foreground_color = Color.parse_color(color_node.xpath('*').first)
|
15
|
+
when 'bgClr'
|
16
|
+
pattern.background_color = Color.parse_color(color_node.xpath('*').first)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
pattern
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require_relative 'image_fill'
|
2
|
+
require_relative 'presentation_fill/gradient_color'
|
3
|
+
require_relative 'presentation_fill/presentation_pattern'
|
4
|
+
module OoxmlParser
|
5
|
+
class PresentationFill < OOXMLDocumentObject
|
6
|
+
attr_accessor :type, :image, :color, :pattern
|
7
|
+
|
8
|
+
def self.parse(parent_fill_node)
|
9
|
+
fill = PresentationFill.new
|
10
|
+
return nil if parent_fill_node.xpath('*').empty?
|
11
|
+
parent_fill_node.xpath('*').each do |fill_node|
|
12
|
+
case fill_node.name
|
13
|
+
when 'gradFill'
|
14
|
+
fill.type = :gradient
|
15
|
+
fill.color = GradientColor.parse(fill_node)
|
16
|
+
when 'solidFill'
|
17
|
+
fill.type = :solid
|
18
|
+
fill.color = Color.parse_color(fill_node.xpath('*').first)
|
19
|
+
when 'blipFill'
|
20
|
+
fill.type = :image
|
21
|
+
fill.image = ImageFill.parse(fill_node)
|
22
|
+
when 'pattFill'
|
23
|
+
fill.type = :pattern
|
24
|
+
fill.pattern = PresentationPattern.parse(fill_node)
|
25
|
+
when 'noFill'
|
26
|
+
fill.type = :noneColor
|
27
|
+
fill.color = :none
|
28
|
+
end
|
29
|
+
end
|
30
|
+
fill
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module OoxmlParser
|
2
|
+
class SchemeColor
|
3
|
+
attr_accessor :value, :properties, :converted_color
|
4
|
+
|
5
|
+
def initialize(value = nil, converted_color = 0)
|
6
|
+
@value = value
|
7
|
+
@converted_color = converted_color
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_s
|
11
|
+
@converted_color.to_s
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Class for hold ThemeColors list
|
2
|
+
module OoxmlParser
|
3
|
+
class ThemeColors
|
4
|
+
class << self
|
5
|
+
# @return [Hash] list of colors
|
6
|
+
attr_accessor :list
|
7
|
+
|
8
|
+
def parse_color_theme(color_theme_node)
|
9
|
+
themes_array = ThemeColors.list.to_a
|
10
|
+
# TODO: if no swap performed - incorrect color parsing. But don't know why it needed
|
11
|
+
themes_array[0], themes_array[1] = themes_array[1], themes_array[0]
|
12
|
+
themes_array[2], themes_array[3] = themes_array[3], themes_array[2]
|
13
|
+
hls = HSLColor.rgb_to_hsl(themes_array[color_theme_node.attribute('theme').value.to_i][1])
|
14
|
+
tint = 0
|
15
|
+
unless color_theme_node.attribute('tint').nil?
|
16
|
+
tint = color_theme_node.attribute('tint').value.to_f
|
17
|
+
end
|
18
|
+
hls.calculate_rgb_with_tint(tint)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module OoxmlParser
|
2
|
+
class Tile < OOXMLDocumentObject
|
3
|
+
attr_accessor :offset, :ratio, :flip, :align
|
4
|
+
|
5
|
+
def initialize(offset = nil, ratio = nil)
|
6
|
+
@offset = offset
|
7
|
+
@ratio = ratio
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.parse(tile_node)
|
11
|
+
tile = Tile.new(OOXMLShift.parse(tile_node, 'tx', 'ty'), OOXMLShift.parse(tile_node, 'sx', 'sy'))
|
12
|
+
tile_node.attributes.each do |key, value|
|
13
|
+
case key
|
14
|
+
when 'algn'
|
15
|
+
tile.align = Alignment.parse(value)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
tile
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
module OoxmlParser
|
2
|
+
class Coordinates
|
3
|
+
attr_accessor :row, :column, :list
|
4
|
+
|
5
|
+
def initialize(row = nil, column = nil, list = nil)
|
6
|
+
@row = row.nil? ? row : row.to_i
|
7
|
+
@column = column
|
8
|
+
@list = list
|
9
|
+
end
|
10
|
+
|
11
|
+
class << self
|
12
|
+
# @param [String] string to parse
|
13
|
+
# @return [Coordinates]
|
14
|
+
def parse_coordinates_from_string(string)
|
15
|
+
coordinates = Coordinates.new
|
16
|
+
begin
|
17
|
+
coordinates.list = string.match(/'\w+'/)[0].delete("''")
|
18
|
+
rescue StandardError
|
19
|
+
'Raise Exception'
|
20
|
+
end
|
21
|
+
string = string.split('!').last
|
22
|
+
if coordinates?(string)
|
23
|
+
coordinates.row = string.scan(/[0-9]/).join('').to_i
|
24
|
+
coordinates.column = string.scan(/[A-Z]/).join('')
|
25
|
+
end
|
26
|
+
coordinates
|
27
|
+
end
|
28
|
+
|
29
|
+
def parser_coordinates_range(arguments_string)
|
30
|
+
sheet_name = 'Sheet1'
|
31
|
+
|
32
|
+
if arguments_string.include?('!')
|
33
|
+
sheet_name, arguments_string = arguments_string.split('!')
|
34
|
+
end
|
35
|
+
|
36
|
+
range = arguments_string.split(':')
|
37
|
+
|
38
|
+
difference = []
|
39
|
+
symbols_from = range.first.scan(/[a-zA-z]/).join
|
40
|
+
symbols_to = range.last.scan(/[a-zA-z]/).join
|
41
|
+
digits_from = range.first.scan(/[0-9]/).join
|
42
|
+
digits_to = range.last.scan(/[0-9]/).join
|
43
|
+
|
44
|
+
difference[0] = [symbols_from, symbols_to] unless symbols_from == symbols_to
|
45
|
+
difference[1] = [digits_from, digits_to] unless digits_from == digits_to
|
46
|
+
arguments_array = []
|
47
|
+
case difference.length
|
48
|
+
when 0
|
49
|
+
arguments_array << Coordinates.new(digits_from, symbols_from)
|
50
|
+
when 1
|
51
|
+
(difference.first.first..difference.first.last).each do |symbol|
|
52
|
+
arguments_array << Coordinates.new(digits_from, symbol, sheet_name)
|
53
|
+
end
|
54
|
+
when 2
|
55
|
+
case difference.first
|
56
|
+
when nil
|
57
|
+
(difference.last.first..difference.last.last).each do |digit|
|
58
|
+
arguments_array << Coordinates.new(digit, symbols_from, sheet_name)
|
59
|
+
end
|
60
|
+
else
|
61
|
+
(difference.first.first..difference.first.last).each do |symbol|
|
62
|
+
(difference.last.first..difference.last.last).each do |digit|
|
63
|
+
arguments_array << Coordinates.new(digit, symbol, sheet_name)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
else
|
68
|
+
raise 'Wrong arguments format'
|
69
|
+
end
|
70
|
+
arguments_array
|
71
|
+
end
|
72
|
+
|
73
|
+
# This method check is argument contains coordinate
|
74
|
+
# @param [String] string
|
75
|
+
def coordinates?(string)
|
76
|
+
!/^([A-Z]+)(\d+)$/.match(string).nil?
|
77
|
+
end
|
78
|
+
|
79
|
+
# @param [String or Fixnum] number to convert
|
80
|
+
# @return [String] column's name
|
81
|
+
# This method takes string like '12' or '45' etc.
|
82
|
+
# and converts into spreadsheet column's name
|
83
|
+
# StringHelper.get_column_name('12') #=> "L"
|
84
|
+
# StringHelper.get_column_name('45') #=> "AS"
|
85
|
+
# StringHelper.get_column_name('287') #=> "KA"
|
86
|
+
def get_column_name(number)
|
87
|
+
(number.to_i > 0 ? ('A'..'Z').to_a[(number.to_i - 1) % 26] + get_column_name((number.to_i - 1) / 26).reverse : '').reverse
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
# get_column_number -> integer
|
92
|
+
# @return [Integer] number of column
|
93
|
+
# This method takes @column string
|
94
|
+
# and converts into integer
|
95
|
+
def get_column_number
|
96
|
+
@column.reverse.each_char.reduce(0) do |result, char|
|
97
|
+
result + (char.downcase.ord - 96) * (26**@column.reverse.index(char))
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
# Compares rows of two cells
|
102
|
+
# @param [Coordinates] other_cell other cell coordinates
|
103
|
+
# @return [true, false] true, if row greater, than other row
|
104
|
+
def row_greater_that_other?(other_cell)
|
105
|
+
@row > other_cell.row
|
106
|
+
end
|
107
|
+
|
108
|
+
# Compares columns of two cells
|
109
|
+
# @param [Coordinates] other_cell other cell coordinates
|
110
|
+
# @return [true, false] true, if column greater, than other row
|
111
|
+
def column_greater_that_other?(other_cell)
|
112
|
+
get_column_number > other_cell.get_column_number
|
113
|
+
end
|
114
|
+
|
115
|
+
def to_s
|
116
|
+
"#{@column}#{@row} #{@list ? "list: #{@list}" : ''}"
|
117
|
+
end
|
118
|
+
|
119
|
+
def nil?
|
120
|
+
@column.nil? && @list.nil? && @row.nil?
|
121
|
+
end
|
122
|
+
|
123
|
+
def ==(other)
|
124
|
+
other.is_a?(Coordinates) ? (@row == other.row && @column == other.column) : false
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require_relative 'underline'
|
2
|
+
# @author Pavel.Lobashov
|
3
|
+
# Class for working with font styles (bold,italic,underlined,strike)
|
4
|
+
# noinspection RubyClassMethodNamingConvention
|
5
|
+
module OoxmlParser
|
6
|
+
class FontStyle
|
7
|
+
# @return [false,true] is bold?
|
8
|
+
attr_accessor :bold
|
9
|
+
# @return [false,true] is bold?
|
10
|
+
attr_accessor :italic
|
11
|
+
# @return [Underline] underline type
|
12
|
+
attr_accessor :underlined
|
13
|
+
# @return [Strike] strike type
|
14
|
+
attr_accessor :strike
|
15
|
+
|
16
|
+
# Default constructor
|
17
|
+
# @param [true, false] bold is bold?
|
18
|
+
# @param [true, false] italic is italic?
|
19
|
+
# @param [true, false, String] underlined if not false or nil - default Underline, else none
|
20
|
+
# @param [Symbol] strike string with strike type
|
21
|
+
# @return [FontStyle] new font style
|
22
|
+
def initialize(bold = false, italic = false, underlined = Underline.new(:none), strike = :none)
|
23
|
+
@bold = bold
|
24
|
+
@italic = italic
|
25
|
+
@underlined = (underlined == false || underlined.nil?) ? Underline.new(:none) : underlined
|
26
|
+
@strike = strike
|
27
|
+
end
|
28
|
+
|
29
|
+
class << self
|
30
|
+
# Generate all possible combination of styles without parameter stoke (8)
|
31
|
+
# @return [Array] with all FontStyle
|
32
|
+
def generate_all_styles_without_stroke
|
33
|
+
styles_array = []
|
34
|
+
styles_array << FontStyle.new(true, true, Underline.new(:single), :none)
|
35
|
+
styles_array << FontStyle.new(true, true, nil, :none)
|
36
|
+
styles_array << FontStyle.new(true, false, Underline.new(:single), :none)
|
37
|
+
styles_array << FontStyle.new(true, false, nil, :none)
|
38
|
+
|
39
|
+
styles_array << FontStyle.new(false, true, Underline.new(:single), :none)
|
40
|
+
styles_array << FontStyle.new(false, true, nil, :none)
|
41
|
+
styles_array << FontStyle.new(false, false, Underline.new(:single), :none)
|
42
|
+
styles_array << FontStyle.new(false, false, nil, :none)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Generate all possible combination of styles (16)
|
46
|
+
# @return [Array] with all FontStyle
|
47
|
+
def generate_all_styles
|
48
|
+
styles_array = []
|
49
|
+
styles_array << generate_all_styles_without_stroke
|
50
|
+
|
51
|
+
styles_array << FontStyle.new(true, true, Underline.new(:single), :single)
|
52
|
+
styles_array << FontStyle.new(true, true, nil, :single)
|
53
|
+
styles_array << FontStyle.new(true, false, Underline.new(:single), :single)
|
54
|
+
styles_array << FontStyle.new(false, true, Underline.new(:single), :single)
|
55
|
+
|
56
|
+
styles_array << FontStyle.new(true, false, nil, :single)
|
57
|
+
styles_array << FontStyle.new(false, false, Underline.new(:single), :single)
|
58
|
+
styles_array << FontStyle.new(false, true, nil, :single)
|
59
|
+
styles_array << FontStyle.new(false, false, nil, :single)
|
60
|
+
styles_array.flatten
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# Default == operator
|
65
|
+
# @return [true, false] true if two same, false if different
|
66
|
+
def ==(other)
|
67
|
+
(@bold == other.bold) && (@italic == other.italic) && (@underlined == other.underlined) && (@strike == other.strike)
|
68
|
+
end
|
69
|
+
|
70
|
+
# Default + operator
|
71
|
+
# @return [FontStyle] the result of overlapping of two styles
|
72
|
+
def +(other)
|
73
|
+
result = FontStyle.new
|
74
|
+
result.bold = (other.bold == @bold) ? @bold : other.bold
|
75
|
+
result.italic = (other.italic == @italic) ? @italic : other.italic
|
76
|
+
result.underlined = (other.underlined == @underlined) ? @underlined : other.underlined
|
77
|
+
result.strike = (other.strike == @strike) ? @strike : other.strike
|
78
|
+
result
|
79
|
+
end
|
80
|
+
|
81
|
+
# Default to_s operator
|
82
|
+
# @return [String] with text representation
|
83
|
+
def to_s
|
84
|
+
"Bold: #{@bold}, Italic: #{@italic}, Underlined: #{@underlined}, Strike: #{@strike}"
|
85
|
+
end
|
86
|
+
|
87
|
+
def copy
|
88
|
+
return dup if underlined.nil?
|
89
|
+
other = FontStyle.new
|
90
|
+
instance_variables.each do |variable|
|
91
|
+
case variable
|
92
|
+
when @underlined
|
93
|
+
other.instance_variable_set(variable, underlined.copy)
|
94
|
+
else
|
95
|
+
other.instance_variable_set(variable, instance_variable_get(variable))
|
96
|
+
end
|
97
|
+
end
|
98
|
+
other
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module OoxmlParser
|
2
|
+
class Hyperlink < OOXMLDocumentObject
|
3
|
+
attr_accessor :url, :tooltip, :coordinates, :id, :highlight_click, :action
|
4
|
+
|
5
|
+
def initialize(link = nil, tooltip = nil, coordinates = nil)
|
6
|
+
@url = link
|
7
|
+
@tooltip = tooltip
|
8
|
+
@coordinates = coordinates
|
9
|
+
end
|
10
|
+
|
11
|
+
alias link url
|
12
|
+
alias link_to url
|
13
|
+
alias link= url=
|
14
|
+
alias link_to= url=
|
15
|
+
|
16
|
+
def self.parse(on_click_hyperlink_node)
|
17
|
+
hyperlink = Hyperlink.new
|
18
|
+
on_click_hyperlink_node.attributes.each do |key, value|
|
19
|
+
case key
|
20
|
+
when 'location'
|
21
|
+
hyperlink.url = Coordinates.parse_coordinates_from_string(value.value)
|
22
|
+
when 'id'
|
23
|
+
hyperlink.url = OOXMLDocumentObject.get_link_from_rels(on_click_hyperlink_node.attribute('id').value)
|
24
|
+
when 'tooltip'
|
25
|
+
hyperlink.tooltip = value.value
|
26
|
+
when 'ref'
|
27
|
+
hyperlink.coordinates = Coordinates.parse_coordinates_from_string(value.value)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
action = on_click_hyperlink_node.attribute('action').value unless on_click_hyperlink_node.attribute('action').nil?
|
31
|
+
case action
|
32
|
+
when 'ppaction://hlinkshowjump?jump=previousslide'
|
33
|
+
hyperlink.action = :previous_slide
|
34
|
+
when 'ppaction://hlinkshowjump?jump=nextslide'
|
35
|
+
hyperlink.action = :next_slide
|
36
|
+
when 'ppaction://hlinkshowjump?jump=firstslide'
|
37
|
+
hyperlink.action = :first_slide
|
38
|
+
when 'ppaction://hlinkshowjump?jump=lastslide'
|
39
|
+
hyperlink.action = :last_slide
|
40
|
+
when 'ppaction://hlinksldjump'
|
41
|
+
hyperlink.action = :slide
|
42
|
+
hyperlink.link_to = OOXMLDocumentObject.get_link_from_rels(on_click_hyperlink_node.attribute('id').value).scan(/\d+/).join('').to_i
|
43
|
+
else
|
44
|
+
unless on_click_hyperlink_node.attribute('id').nil?
|
45
|
+
hyperlink.action = :external_link
|
46
|
+
hyperlink.link_to = OOXMLDocumentObject.get_link_from_rels(on_click_hyperlink_node.attribute('id').value)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
hyperlink.highlight_click = StringHelper.to_bool(on_click_hyperlink_node.attribute('highlightClick').value) unless on_click_hyperlink_node.attribute('highlightClick').nil?
|
50
|
+
hyperlink
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
require 'nokogiri'
|
3
|
+
require 'xmlsimple'
|
4
|
+
require 'zip'
|
5
|
+
|
6
|
+
module OoxmlParser
|
7
|
+
class OOXMLDocumentObject
|
8
|
+
DEFAULT_DIRECTORY_FOR_MEDIA = '/tmp'.freeze
|
9
|
+
|
10
|
+
class << self
|
11
|
+
attr_accessor :namespace_prefix
|
12
|
+
attr_accessor :root_subfolder
|
13
|
+
attr_accessor :theme
|
14
|
+
attr_accessor :xmls_stack
|
15
|
+
attr_accessor :path_to_folder
|
16
|
+
|
17
|
+
def copy_file_and_rename_to_zip(path)
|
18
|
+
file_name = File.basename(path)
|
19
|
+
tmp_folder = "/tmp/office_open_xml_parser_#{SecureRandom.uuid}"
|
20
|
+
file_path = "#{tmp_folder}/#{file_name}"
|
21
|
+
FileUtils.rm_rf(tmp_folder) if File.directory?(tmp_folder)
|
22
|
+
FileUtils.mkdir_p(tmp_folder)
|
23
|
+
path = "#{Dir.pwd}/#{path}" unless path[0] == '/'
|
24
|
+
raise "Cannot find file by path #{path}" unless File.exist?(path)
|
25
|
+
FileUtils.cp path, tmp_folder
|
26
|
+
file_path
|
27
|
+
end
|
28
|
+
|
29
|
+
def unzip_file(path_to_file, destination)
|
30
|
+
Zip.warn_invalid_date = false
|
31
|
+
Zip::File.open(path_to_file) do |zip_file|
|
32
|
+
raise LoadError, "There is no files in zip #{path_to_file}" if zip_file.entries.empty?
|
33
|
+
zip_file.each do |file|
|
34
|
+
file_path = File.join(destination, file.name)
|
35
|
+
FileUtils.mkdir_p(File.dirname(file_path))
|
36
|
+
zip_file.extract(file, file_path) unless File.exist?(file_path)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def dir
|
42
|
+
OOXMLDocumentObject.path_to_folder + File.dirname(OOXMLDocumentObject.xmls_stack.last) + '/'
|
43
|
+
end
|
44
|
+
|
45
|
+
def current_xml
|
46
|
+
OOXMLDocumentObject.path_to_folder + OOXMLDocumentObject.xmls_stack.last
|
47
|
+
end
|
48
|
+
|
49
|
+
def add_to_xmls_stack(path)
|
50
|
+
OOXMLDocumentObject.xmls_stack << if path.include?('..')
|
51
|
+
"#{File.dirname(OOXMLDocumentObject.xmls_stack.last)}/#{path}"
|
52
|
+
else
|
53
|
+
path
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def get_link_from_rels(id)
|
58
|
+
rels_path = dir + "_rels/#{File.basename(OOXMLDocumentObject.xmls_stack.last)}.rels"
|
59
|
+
raise LoadError, "Cannot find .rels file by path: #{rels_path}" unless File.exist?(rels_path)
|
60
|
+
relationships = XmlSimple.xml_in(File.open(rels_path))
|
61
|
+
relationships['Relationship'].each { |relationship| return relationship['Target'] if id == relationship['Id'] }
|
62
|
+
end
|
63
|
+
|
64
|
+
def media_folder
|
65
|
+
path = "#{DEFAULT_DIRECTORY_FOR_MEDIA}/media_from_#{@file_name}"
|
66
|
+
FileUtils.mkdir(path) unless File.exist?(path)
|
67
|
+
path + '/'
|
68
|
+
end
|
69
|
+
|
70
|
+
def option_enabled?(node, attribute_name = 'val')
|
71
|
+
return true if node.to_s == '1'
|
72
|
+
return false if node.to_s == '0'
|
73
|
+
return false if node.attribute(attribute_name).nil?
|
74
|
+
status = node.attribute(attribute_name).value
|
75
|
+
status == 'true' || status == 'on' || status == '1'
|
76
|
+
end
|
77
|
+
|
78
|
+
def copy_media_file(path_to_file)
|
79
|
+
folder_to_save_media = '/tmp/media_from_' + File.basename(OOXMLDocumentObject.path_to_folder)
|
80
|
+
path_to_copied_file = folder_to_save_media + '/' + File.basename(path_to_file)
|
81
|
+
FileUtils.mkdir(folder_to_save_media) unless File.exist?(folder_to_save_media)
|
82
|
+
FileUtils.copy_file(OOXMLDocumentObject.path_to_folder + path_to_file, path_to_copied_file)
|
83
|
+
path_to_copied_file
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require_relative 'paragrpah_properties/spacing'
|
2
|
+
require_relative 'paragrpah_properties/numbering'
|
3
|
+
module OoxmlParser
|
4
|
+
class ParagraphProperties < OOXMLDocumentObject
|
5
|
+
attr_accessor :align, :numbering, :level, :spacing, :spacing_before, :spacing_after, :indent, :margin_left, :margin_right,
|
6
|
+
:tabs
|
7
|
+
|
8
|
+
def initialize(numbering = Numbering.new)
|
9
|
+
@numbering = numbering
|
10
|
+
@spacing = Spacing.new(0, 0, 1, :multiple)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.parse(paragraph_props_node)
|
14
|
+
paragraph_properties = ParagraphProperties.new
|
15
|
+
paragraph_properties.spacing.parse(paragraph_props_node)
|
16
|
+
paragraph_props_node.attributes.each do |key, value|
|
17
|
+
case key
|
18
|
+
when 'algn'
|
19
|
+
paragraph_properties.align = Alignment.parse(value)
|
20
|
+
when 'lvl'
|
21
|
+
paragraph_properties.level = value.value.to_i
|
22
|
+
when 'indent'
|
23
|
+
paragraph_properties.indent = (value.value.to_f / 360_000.0).round(2)
|
24
|
+
when 'marR'
|
25
|
+
paragraph_properties.margin_right = (value.value.to_f / 360_000.0).round(2)
|
26
|
+
when 'marL'
|
27
|
+
paragraph_properties.margin_left = (value.value.to_f / 360_000.0).round(2)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
paragraph_props_node.xpath('*').each do |properties_element|
|
31
|
+
case properties_element.name
|
32
|
+
when 'buSzPct'
|
33
|
+
paragraph_properties.numbering.size = properties_element.attribute('val').value
|
34
|
+
when 'buFont'
|
35
|
+
paragraph_properties.numbering.font = properties_element.attribute('typeface').value
|
36
|
+
when 'buChar'
|
37
|
+
paragraph_properties.numbering.symbol = properties_element.attribute('char').value
|
38
|
+
when 'buAutoNum'
|
39
|
+
paragraph_properties.numbering.type = properties_element.attribute('type').value.to_sym
|
40
|
+
paragraph_properties.numbering.start_at = properties_element.attribute('startAt').value
|
41
|
+
when 'tabLst'
|
42
|
+
paragraph_properties.tabs = ParagraphTab.parse(properties_element)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
paragraph_properties
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run/run_properties/outline.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# Class for parsing Run Outline properties
|
2
|
+
module OoxmlParser
|
3
|
+
class Outline < OOXMLDocumentObject
|
4
|
+
attr_accessor :width
|
5
|
+
attr_accessor :color_scheme
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@width = 0
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.parse(node)
|
12
|
+
outline = Outline.new
|
13
|
+
node.attributes.each do |key, value|
|
14
|
+
case key
|
15
|
+
when 'w'
|
16
|
+
outline.width = (value.value.to_f / 12_699.3).round(2)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
outline.color_scheme = DocxColorScheme.parse(node)
|
20
|
+
outline
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|