uniword 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +428 -0
- data/CONTRIBUTING.md +479 -0
- data/LICENSE.txt +25 -0
- data/README.adoc +2186 -0
- data/exe/uniword +6 -0
- data/lib/uniword/accessibility/accessibility_checker.rb +115 -0
- data/lib/uniword/accessibility/accessibility_profile.rb +133 -0
- data/lib/uniword/accessibility/accessibility_report.rb +212 -0
- data/lib/uniword/accessibility/accessibility_rule.rb +93 -0
- data/lib/uniword/accessibility/accessibility_violation.rb +80 -0
- data/lib/uniword/accessibility/rules/color_usage_rule.rb +30 -0
- data/lib/uniword/accessibility/rules/contrast_ratio_rule.rb +31 -0
- data/lib/uniword/accessibility/rules/descriptive_headings_rule.rb +99 -0
- data/lib/uniword/accessibility/rules/document_title_rule.rb +64 -0
- data/lib/uniword/accessibility/rules/heading_structure_rule.rb +127 -0
- data/lib/uniword/accessibility/rules/image_alt_text_rule.rb +89 -0
- data/lib/uniword/accessibility/rules/language_specification_rule.rb +55 -0
- data/lib/uniword/accessibility/rules/list_structure_rule.rb +33 -0
- data/lib/uniword/accessibility/rules/reading_order_rule.rb +30 -0
- data/lib/uniword/accessibility/rules/table_headers_rule.rb +61 -0
- data/lib/uniword/accessibility/rules.rb +18 -0
- data/lib/uniword/accessibility.rb +12 -0
- data/lib/uniword/assembly/assembly_manifest.rb +189 -0
- data/lib/uniword/assembly/component_registry.rb +260 -0
- data/lib/uniword/assembly/cross_reference_resolver.rb +241 -0
- data/lib/uniword/assembly/document_assembler.rb +296 -0
- data/lib/uniword/assembly/toc.rb +227 -0
- data/lib/uniword/assembly/toc_entry.rb +124 -0
- data/lib/uniword/assembly/toc_instruction.rb +92 -0
- data/lib/uniword/assembly/variable_substitutor.rb +238 -0
- data/lib/uniword/assembly.rb +14 -0
- data/lib/uniword/batch/batch_result.rb +244 -0
- data/lib/uniword/batch/document_processor.rb +339 -0
- data/lib/uniword/batch/processing_stage.rb +92 -0
- data/lib/uniword/batch/stages/compress_images_stage.rb +187 -0
- data/lib/uniword/batch/stages/convert_format_stage.rb +117 -0
- data/lib/uniword/batch/stages/normalize_styles_stage.rb +174 -0
- data/lib/uniword/batch/stages/quality_check_stage.rb +149 -0
- data/lib/uniword/batch/stages/update_metadata_stage.rb +103 -0
- data/lib/uniword/batch/stages/validate_links_stage.rb +203 -0
- data/lib/uniword/batch.rb +16 -0
- data/lib/uniword/bibliography/author.rb +80 -0
- data/lib/uniword/bibliography/city.rb +22 -0
- data/lib/uniword/bibliography/corporate.rb +22 -0
- data/lib/uniword/bibliography/day.rb +22 -0
- data/lib/uniword/bibliography/edition.rb +22 -0
- data/lib/uniword/bibliography/first.rb +22 -0
- data/lib/uniword/bibliography/first_name.rb +22 -0
- data/lib/uniword/bibliography/guid.rb +22 -0
- data/lib/uniword/bibliography/issue.rb +22 -0
- data/lib/uniword/bibliography/last.rb +22 -0
- data/lib/uniword/bibliography/last_name.rb +22 -0
- data/lib/uniword/bibliography/lcid.rb +22 -0
- data/lib/uniword/bibliography/locale_id.rb +22 -0
- data/lib/uniword/bibliography/month.rb +22 -0
- data/lib/uniword/bibliography/name_list.rb +23 -0
- data/lib/uniword/bibliography/pages.rb +22 -0
- data/lib/uniword/bibliography/person.rb +27 -0
- data/lib/uniword/bibliography/publisher.rb +22 -0
- data/lib/uniword/bibliography/ref_order.rb +22 -0
- data/lib/uniword/bibliography/source.rb +169 -0
- data/lib/uniword/bibliography/source_tag.rb +22 -0
- data/lib/uniword/bibliography/source_type.rb +22 -0
- data/lib/uniword/bibliography/sources.rb +29 -0
- data/lib/uniword/bibliography/tag.rb +22 -0
- data/lib/uniword/bibliography/title.rb +22 -0
- data/lib/uniword/bibliography/url.rb +22 -0
- data/lib/uniword/bibliography/volume_number.rb +22 -0
- data/lib/uniword/bibliography/year.rb +22 -0
- data/lib/uniword/bibliography.rb +45 -0
- data/lib/uniword/bookmark.rb +103 -0
- data/lib/uniword/builder/bibliography_builder.rb +188 -0
- data/lib/uniword/builder/chart_builder.rb +365 -0
- data/lib/uniword/builder/comment_builder.rb +54 -0
- data/lib/uniword/builder/document_builder.rb +548 -0
- data/lib/uniword/builder/footnote_builder.rb +102 -0
- data/lib/uniword/builder/header_footer_builder.rb +79 -0
- data/lib/uniword/builder/image_builder.rb +316 -0
- data/lib/uniword/builder/list_builder.rb +51 -0
- data/lib/uniword/builder/numbering_builder.rb +42 -0
- data/lib/uniword/builder/paragraph_builder.rb +228 -0
- data/lib/uniword/builder/run_builder.rb +285 -0
- data/lib/uniword/builder/sdt_builder.rb +205 -0
- data/lib/uniword/builder/section_builder.rb +170 -0
- data/lib/uniword/builder/style_builder.rb +129 -0
- data/lib/uniword/builder/table_builder.rb +111 -0
- data/lib/uniword/builder/table_cell_builder.rb +138 -0
- data/lib/uniword/builder/table_row_builder.rb +65 -0
- data/lib/uniword/builder/theme_builder.rb +98 -0
- data/lib/uniword/builder/toc_builder.rb +54 -0
- data/lib/uniword/builder/watermark_builder.rb +95 -0
- data/lib/uniword/builder.rb +232 -0
- data/lib/uniword/chart/area3_d_chart.rb +35 -0
- data/lib/uniword/chart/area_chart.rb +33 -0
- data/lib/uniword/chart/auto_title_deleted.rb +22 -0
- data/lib/uniword/chart/axis_id.rb +22 -0
- data/lib/uniword/chart/axis_position.rb +22 -0
- data/lib/uniword/chart/bar3_d_chart.rb +39 -0
- data/lib/uniword/chart/bar_chart.rb +37 -0
- data/lib/uniword/chart/bubble_chart.rb +37 -0
- data/lib/uniword/chart/bubble_size.rb +25 -0
- data/lib/uniword/chart/cat_ax.rb +45 -0
- data/lib/uniword/chart/category_axis_data.rb +29 -0
- data/lib/uniword/chart/chart.rb +33 -0
- data/lib/uniword/chart/chart_reference.rb +24 -0
- data/lib/uniword/chart/chart_space.rb +35 -0
- data/lib/uniword/chart/color_map_override.rb +22 -0
- data/lib/uniword/chart/data_label.rb +35 -0
- data/lib/uniword/chart/data_labels.rb +41 -0
- data/lib/uniword/chart/date_ax.rb +45 -0
- data/lib/uniword/chart/diagram_reference.rb +24 -0
- data/lib/uniword/chart/doughnut_chart.rb +31 -0
- data/lib/uniword/chart/drop_lines.rb +23 -0
- data/lib/uniword/chart/error_bar_type.rb +22 -0
- data/lib/uniword/chart/error_bars.rb +37 -0
- data/lib/uniword/chart/error_direction.rb +22 -0
- data/lib/uniword/chart/explosion.rb +22 -0
- data/lib/uniword/chart/gap_width.rb +22 -0
- data/lib/uniword/chart/hi_low_lines.rb +23 -0
- data/lib/uniword/chart/index.rb +22 -0
- data/lib/uniword/chart/layout.rb +23 -0
- data/lib/uniword/chart/legend.rb +33 -0
- data/lib/uniword/chart/legend_entry.rb +27 -0
- data/lib/uniword/chart/legend_position.rb +22 -0
- data/lib/uniword/chart/line3_d_chart.rb +35 -0
- data/lib/uniword/chart/line_chart.rb +41 -0
- data/lib/uniword/chart/major_gridlines.rb +23 -0
- data/lib/uniword/chart/marker.rb +27 -0
- data/lib/uniword/chart/marker_size.rb +22 -0
- data/lib/uniword/chart/marker_style.rb +22 -0
- data/lib/uniword/chart/minor_gridlines.rb +23 -0
- data/lib/uniword/chart/number_reference.rb +25 -0
- data/lib/uniword/chart/numbering_format.rb +24 -0
- data/lib/uniword/chart/order.rb +22 -0
- data/lib/uniword/chart/orientation.rb +22 -0
- data/lib/uniword/chart/pie3_d_chart.rb +27 -0
- data/lib/uniword/chart/pie_chart.rb +29 -0
- data/lib/uniword/chart/plot_area.rb +35 -0
- data/lib/uniword/chart/plot_vis_only.rb +22 -0
- data/lib/uniword/chart/radar_chart.rb +31 -0
- data/lib/uniword/chart/scaling.rb +29 -0
- data/lib/uniword/chart/scatter_chart.rb +31 -0
- data/lib/uniword/chart/ser_ax.rb +43 -0
- data/lib/uniword/chart/series.rb +29 -0
- data/lib/uniword/chart/series_text.rb +25 -0
- data/lib/uniword/chart/shape_properties.rb +22 -0
- data/lib/uniword/chart/show_category_name.rb +22 -0
- data/lib/uniword/chart/show_legend_key.rb +22 -0
- data/lib/uniword/chart/show_value.rb +22 -0
- data/lib/uniword/chart/smooth.rb +22 -0
- data/lib/uniword/chart/stock_chart.rb +33 -0
- data/lib/uniword/chart/style.rb +22 -0
- data/lib/uniword/chart/surface3_d_chart.rb +29 -0
- data/lib/uniword/chart/surface_chart.rb +29 -0
- data/lib/uniword/chart/text_properties.rb +22 -0
- data/lib/uniword/chart/tick_label_position.rb +22 -0
- data/lib/uniword/chart/title.rb +31 -0
- data/lib/uniword/chart/trendline.rb +35 -0
- data/lib/uniword/chart/trendline_type.rb +22 -0
- data/lib/uniword/chart/up_down_bars.rb +27 -0
- data/lib/uniword/chart/val_ax.rb +49 -0
- data/lib/uniword/chart/values.rb +25 -0
- data/lib/uniword/chart/x_values.rb +25 -0
- data/lib/uniword/chart/y_values.rb +25 -0
- data/lib/uniword/chart.rb +105 -0
- data/lib/uniword/cli.rb +737 -0
- data/lib/uniword/column_configuration.rb +111 -0
- data/lib/uniword/comment.rb +147 -0
- data/lib/uniword/comment_range.rb +122 -0
- data/lib/uniword/comments_part.rb +130 -0
- data/lib/uniword/configuration/configuration_loader.rb +168 -0
- data/lib/uniword/configuration.rb +7 -0
- data/lib/uniword/content_types/default.rb +24 -0
- data/lib/uniword/content_types/override.rb +24 -0
- data/lib/uniword/content_types/types.rb +26 -0
- data/lib/uniword/content_types.rb +76 -0
- data/lib/uniword/customxml/custom_xml.rb +29 -0
- data/lib/uniword/customxml/custom_xml_attribute.rb +26 -0
- data/lib/uniword/customxml/custom_xml_block.rb +29 -0
- data/lib/uniword/customxml/custom_xml_cell.rb +29 -0
- data/lib/uniword/customxml/custom_xml_del_range_start.rb +26 -0
- data/lib/uniword/customxml/custom_xml_ins_range_end.rb +22 -0
- data/lib/uniword/customxml/custom_xml_ins_range_start.rb +26 -0
- data/lib/uniword/customxml/custom_xml_move_from_range_end.rb +22 -0
- data/lib/uniword/customxml/custom_xml_move_from_range_start.rb +26 -0
- data/lib/uniword/customxml/custom_xml_move_to_range_end.rb +22 -0
- data/lib/uniword/customxml/custom_xml_move_to_range_start.rb +26 -0
- data/lib/uniword/customxml/custom_xml_properties.rb +27 -0
- data/lib/uniword/customxml/custom_xml_row.rb +29 -0
- data/lib/uniword/customxml/custom_xml_run.rb +29 -0
- data/lib/uniword/customxml/data_binding.rb +26 -0
- data/lib/uniword/customxml/data_store_item.rb +24 -0
- data/lib/uniword/customxml/element_name.rb +22 -0
- data/lib/uniword/customxml/name.rb +22 -0
- data/lib/uniword/customxml/namespace_uri.rb +22 -0
- data/lib/uniword/customxml/placeholder.rb +22 -0
- data/lib/uniword/customxml/placeholder_text.rb +22 -0
- data/lib/uniword/customxml/prefix_mappings.rb +22 -0
- data/lib/uniword/customxml/schema_reference.rb +41 -0
- data/lib/uniword/customxml/showing_placeholder.rb +24 -0
- data/lib/uniword/customxml/showing_placeholder_header.rb +22 -0
- data/lib/uniword/customxml/smart_tag.rb +29 -0
- data/lib/uniword/customxml/smart_tag_attribute.rb +24 -0
- data/lib/uniword/customxml/smart_tag_element.rb +22 -0
- data/lib/uniword/customxml/smart_tag_name.rb +22 -0
- data/lib/uniword/customxml/smart_tag_properties.rb +23 -0
- data/lib/uniword/customxml/smart_tag_type.rb +26 -0
- data/lib/uniword/customxml/smart_tag_uri.rb +22 -0
- data/lib/uniword/customxml/store_item_id.rb +22 -0
- data/lib/uniword/customxml/x_path.rb +22 -0
- data/lib/uniword/customxml/x_path_expression.rb +22 -0
- data/lib/uniword/customxml.rb +53 -0
- data/lib/uniword/document_factory.rb +214 -0
- data/lib/uniword/document_properties/app_version.rb +22 -0
- data/lib/uniword/document_properties/application.rb +22 -0
- data/lib/uniword/document_properties/bool_value.rb +22 -0
- data/lib/uniword/document_properties/company.rb +22 -0
- data/lib/uniword/document_properties/custom_properties.rb +23 -0
- data/lib/uniword/document_properties/custom_property.rb +37 -0
- data/lib/uniword/document_properties/doc_security.rb +22 -0
- data/lib/uniword/document_properties/extended_properties.rb +41 -0
- data/lib/uniword/document_properties/file_time.rb +22 -0
- data/lib/uniword/document_properties/heading_pairs.rb +23 -0
- data/lib/uniword/document_properties/hyperlinks_changed.rb +22 -0
- data/lib/uniword/document_properties/i4.rb +22 -0
- data/lib/uniword/document_properties/links_up_to_date.rb +22 -0
- data/lib/uniword/document_properties/lpw_str.rb +22 -0
- data/lib/uniword/document_properties/manager.rb +22 -0
- data/lib/uniword/document_properties/scale_crop.rb +22 -0
- data/lib/uniword/document_properties/shared_doc.rb +22 -0
- data/lib/uniword/document_properties/titles_of_parts.rb +23 -0
- data/lib/uniword/document_properties/variant.rb +25 -0
- data/lib/uniword/document_properties/vector.rb +27 -0
- data/lib/uniword/document_properties.rb +32 -0
- data/lib/uniword/document_variables/data_type.rb +22 -0
- data/lib/uniword/document_variables/default_value.rb +22 -0
- data/lib/uniword/document_variables/doc_var.rb +24 -0
- data/lib/uniword/document_variables/doc_vars.rb +23 -0
- data/lib/uniword/document_variables/read_only.rb +24 -0
- data/lib/uniword/document_variables/variable_binding.rb +26 -0
- data/lib/uniword/document_variables/variable_collection.rb +25 -0
- data/lib/uniword/document_variables/variable_expression.rb +22 -0
- data/lib/uniword/document_variables/variable_format.rb +22 -0
- data/lib/uniword/document_variables/variable_scope.rb +22 -0
- data/lib/uniword/document_variables.rb +23 -0
- data/lib/uniword/document_writer.rb +157 -0
- data/lib/uniword/drawingml/adjust_value_list.rb +22 -0
- data/lib/uniword/drawingml/alpha.rb +22 -0
- data/lib/uniword/drawingml/alpha_bi_level.rb +22 -0
- data/lib/uniword/drawingml/alpha_modulation.rb +22 -0
- data/lib/uniword/drawingml/alpha_modulation_fixed.rb +22 -0
- data/lib/uniword/drawingml/alpha_offset.rb +22 -0
- data/lib/uniword/drawingml/arc_to.rb +28 -0
- data/lib/uniword/drawingml/background_color.rb +24 -0
- data/lib/uniword/drawingml/bevel_top.rb +26 -0
- data/lib/uniword/drawingml/bi_level.rb +22 -0
- data/lib/uniword/drawingml/blip.rb +30 -0
- data/lib/uniword/drawingml/blip_fill.rb +28 -0
- data/lib/uniword/drawingml/blue.rb +22 -0
- data/lib/uniword/drawingml/blur.rb +24 -0
- data/lib/uniword/drawingml/body_properties.rb +22 -0
- data/lib/uniword/drawingml/camera.rb +24 -0
- data/lib/uniword/drawingml/close_path.rb +18 -0
- data/lib/uniword/drawingml/color_scheme.rb +381 -0
- data/lib/uniword/drawingml/complex_script_font.rb +24 -0
- data/lib/uniword/drawingml/custom_dash.rb +22 -0
- data/lib/uniword/drawingml/custom_geometry.rb +24 -0
- data/lib/uniword/drawingml/dash_stop.rb +24 -0
- data/lib/uniword/drawingml/default_paragraph_properties.rb +24 -0
- data/lib/uniword/drawingml/duotone.rb +22 -0
- data/lib/uniword/drawingml/east_asian_font.rb +24 -0
- data/lib/uniword/drawingml/effect_container.rb +22 -0
- data/lib/uniword/drawingml/effect_list.rb +30 -0
- data/lib/uniword/drawingml/extension.rb +53 -0
- data/lib/uniword/drawingml/extension_list.rb +25 -0
- data/lib/uniword/drawingml/extents.rb +24 -0
- data/lib/uniword/drawingml/extra_color_scheme_list.rb +20 -0
- data/lib/uniword/drawingml/fill_overlay.rb +22 -0
- data/lib/uniword/drawingml/fill_to_rect.rb +28 -0
- data/lib/uniword/drawingml/font_reference.rb +23 -0
- data/lib/uniword/drawingml/font_scheme.rb +241 -0
- data/lib/uniword/drawingml/foreground_color.rb +24 -0
- data/lib/uniword/drawingml/format_scheme.rb +141 -0
- data/lib/uniword/drawingml/gamma.rb +18 -0
- data/lib/uniword/drawingml/geometry_guide.rb +24 -0
- data/lib/uniword/drawingml/glow.rb +26 -0
- data/lib/uniword/drawingml/gradient_fill.rb +29 -0
- data/lib/uniword/drawingml/gradient_stop.rb +26 -0
- data/lib/uniword/drawingml/gradient_stop_list.rb +23 -0
- data/lib/uniword/drawingml/graphic.rb +21 -0
- data/lib/uniword/drawingml/graphic_data.rb +27 -0
- data/lib/uniword/drawingml/grayscale.rb +18 -0
- data/lib/uniword/drawingml/green.rb +22 -0
- data/lib/uniword/drawingml/group_locking.rb +35 -0
- data/lib/uniword/drawingml/group_shape_properties.rb +21 -0
- data/lib/uniword/drawingml/gvml.rb +26 -0
- data/lib/uniword/drawingml/gvml_connector.rb +25 -0
- data/lib/uniword/drawingml/gvml_connector_non_visual.rb +23 -0
- data/lib/uniword/drawingml/gvml_graphic_frame_non_visual.rb +23 -0
- data/lib/uniword/drawingml/gvml_graphical_object_frame.rb +25 -0
- data/lib/uniword/drawingml/gvml_group_shape.rb +36 -0
- data/lib/uniword/drawingml/gvml_group_shape_non_visual.rb +23 -0
- data/lib/uniword/drawingml/gvml_picture.rb +27 -0
- data/lib/uniword/drawingml/gvml_picture_non_visual.rb +23 -0
- data/lib/uniword/drawingml/gvml_shape.rb +27 -0
- data/lib/uniword/drawingml/gvml_shape_non_visual.rb +23 -0
- data/lib/uniword/drawingml/gvml_text_shape.rb +25 -0
- data/lib/uniword/drawingml/gvml_use_shape_rectangle.rb +17 -0
- data/lib/uniword/drawingml/hue.rb +22 -0
- data/lib/uniword/drawingml/hue_modulation.rb +22 -0
- data/lib/uniword/drawingml/hue_offset.rb +22 -0
- data/lib/uniword/drawingml/inner_shadow.rb +30 -0
- data/lib/uniword/drawingml/inverse_gamma.rb +18 -0
- data/lib/uniword/drawingml/level1_paragraph_properties.rb +24 -0
- data/lib/uniword/drawingml/level2_paragraph_properties.rb +24 -0
- data/lib/uniword/drawingml/level3_paragraph_properties.rb +24 -0
- data/lib/uniword/drawingml/light_rig.rb +26 -0
- data/lib/uniword/drawingml/line_defaults.rb +27 -0
- data/lib/uniword/drawingml/line_join_miter.rb +22 -0
- data/lib/uniword/drawingml/line_join_round.rb +18 -0
- data/lib/uniword/drawingml/line_properties.rb +36 -0
- data/lib/uniword/drawingml/line_to.rb +22 -0
- data/lib/uniword/drawingml/linear_gradient.rb +24 -0
- data/lib/uniword/drawingml/list_style.rb +28 -0
- data/lib/uniword/drawingml/luminance.rb +22 -0
- data/lib/uniword/drawingml/luminance_modulation.rb +22 -0
- data/lib/uniword/drawingml/luminance_offset.rb +22 -0
- data/lib/uniword/drawingml/move_to.rb +22 -0
- data/lib/uniword/drawingml/no_fill.rb +18 -0
- data/lib/uniword/drawingml/non_visual_connector_properties.rb +21 -0
- data/lib/uniword/drawingml/non_visual_drawing_properties.rb +24 -0
- data/lib/uniword/drawingml/non_visual_graphic_frame_properties.rb +21 -0
- data/lib/uniword/drawingml/non_visual_group_drawing_shape_properties.rb +21 -0
- data/lib/uniword/drawingml/non_visual_picture_properties.rb +25 -0
- data/lib/uniword/drawingml/non_visual_shape_properties.rb +22 -0
- data/lib/uniword/drawingml/object_defaults.rb +23 -0
- data/lib/uniword/drawingml/office_art_extension.rb +21 -0
- data/lib/uniword/drawingml/office_art_extension_list.rb +21 -0
- data/lib/uniword/drawingml/offset.rb +24 -0
- data/lib/uniword/drawingml/outer_shadow.rb +38 -0
- data/lib/uniword/drawingml/path_gradient.rb +24 -0
- data/lib/uniword/drawingml/path_list.rb +22 -0
- data/lib/uniword/drawingml/pattern_fill.rb +26 -0
- data/lib/uniword/drawingml/picture_locking.rb +35 -0
- data/lib/uniword/drawingml/preset_dash.rb +22 -0
- data/lib/uniword/drawingml/preset_geometry.rb +24 -0
- data/lib/uniword/drawingml/preset_shadow.rb +26 -0
- data/lib/uniword/drawingml/red.rb +22 -0
- data/lib/uniword/drawingml/red_modulation.rb +22 -0
- data/lib/uniword/drawingml/red_offset.rb +22 -0
- data/lib/uniword/drawingml/reflection.rb +36 -0
- data/lib/uniword/drawingml/relative_rect.rb +27 -0
- data/lib/uniword/drawingml/rotation.rb +26 -0
- data/lib/uniword/drawingml/saturation.rb +22 -0
- data/lib/uniword/drawingml/saturation_modulation.rb +22 -0
- data/lib/uniword/drawingml/saturation_offset.rb +22 -0
- data/lib/uniword/drawingml/scene_3d.rb +24 -0
- data/lib/uniword/drawingml/scheme_color.rb +43 -0
- data/lib/uniword/drawingml/shade.rb +22 -0
- data/lib/uniword/drawingml/shape.rb +24 -0
- data/lib/uniword/drawingml/shape_3d.rb +28 -0
- data/lib/uniword/drawingml/shape_defaults.rb +27 -0
- data/lib/uniword/drawingml/shape_properties.rb +24 -0
- data/lib/uniword/drawingml/shape_style.rb +27 -0
- data/lib/uniword/drawingml/soft_edge.rb +22 -0
- data/lib/uniword/drawingml/solid_fill.rb +24 -0
- data/lib/uniword/drawingml/source_rect.rb +28 -0
- data/lib/uniword/drawingml/srgb_color.rb +43 -0
- data/lib/uniword/drawingml/stretch.rb +18 -0
- data/lib/uniword/drawingml/style_matrix.rb +27 -0
- data/lib/uniword/drawingml/style_matrix_reference.rb +25 -0
- data/lib/uniword/drawingml/style_reference.rb +23 -0
- data/lib/uniword/drawingml/text_body.rb +25 -0
- data/lib/uniword/drawingml/text_character_properties.rb +33 -0
- data/lib/uniword/drawingml/text_defaults.rb +27 -0
- data/lib/uniword/drawingml/text_font.rb +24 -0
- data/lib/uniword/drawingml/text_paragraph.rb +23 -0
- data/lib/uniword/drawingml/text_paragraph_properties.rb +26 -0
- data/lib/uniword/drawingml/text_run.rb +23 -0
- data/lib/uniword/drawingml/theme.rb +263 -0
- data/lib/uniword/drawingml/tile.rb +32 -0
- data/lib/uniword/drawingml/tile_rect.rb +28 -0
- data/lib/uniword/drawingml/tint.rb +22 -0
- data/lib/uniword/drawingml/transform2_d.rb +24 -0
- data/lib/uniword/drawingml.rb +190 -0
- data/lib/uniword/element.rb +52 -0
- data/lib/uniword/element_registry.rb +111 -0
- data/lib/uniword/endnote.rb +66 -0
- data/lib/uniword/errors.rb +140 -0
- data/lib/uniword/field.rb +76 -0
- data/lib/uniword/footer.rb +41 -0
- data/lib/uniword/footnote.rb +65 -0
- data/lib/uniword/format_converter.rb +350 -0
- data/lib/uniword/format_detector.rb +142 -0
- data/lib/uniword/glossary/auto_text.rb +24 -0
- data/lib/uniword/glossary/category_name.rb +22 -0
- data/lib/uniword/glossary/doc_part.rb +25 -0
- data/lib/uniword/glossary/doc_part_behavior.rb +22 -0
- data/lib/uniword/glossary/doc_part_behaviors.rb +23 -0
- data/lib/uniword/glossary/doc_part_body.rb +30 -0
- data/lib/uniword/glossary/doc_part_category.rb +25 -0
- data/lib/uniword/glossary/doc_part_description.rb +22 -0
- data/lib/uniword/glossary/doc_part_gallery.rb +22 -0
- data/lib/uniword/glossary/doc_part_id.rb +22 -0
- data/lib/uniword/glossary/doc_part_name.rb +22 -0
- data/lib/uniword/glossary/doc_part_properties.rb +35 -0
- data/lib/uniword/glossary/doc_part_type.rb +22 -0
- data/lib/uniword/glossary/doc_part_types.rb +25 -0
- data/lib/uniword/glossary/doc_parts.rb +22 -0
- data/lib/uniword/glossary/equation.rb +24 -0
- data/lib/uniword/glossary/glossary_document.rb +32 -0
- data/lib/uniword/glossary/style_id.rb +22 -0
- data/lib/uniword/glossary/text_box.rb +24 -0
- data/lib/uniword/glossary.rb +33 -0
- data/lib/uniword/header.rb +41 -0
- data/lib/uniword/html_importer.rb +55 -0
- data/lib/uniword/hyperlink.rb +76 -0
- data/lib/uniword/image.rb +244 -0
- data/lib/uniword/infrastructure/mime_packager.rb +155 -0
- data/lib/uniword/infrastructure/mime_parser.rb +195 -0
- data/lib/uniword/infrastructure/xml_namespace_normalizer.rb +105 -0
- data/lib/uniword/infrastructure/zip_extractor.rb +133 -0
- data/lib/uniword/infrastructure/zip_packager.rb +249 -0
- data/lib/uniword/infrastructure.rb +10 -0
- data/lib/uniword/lazy_loader.rb +118 -0
- data/lib/uniword/line_numbering.rb +129 -0
- data/lib/uniword/loggable.rb +57 -0
- data/lib/uniword/logger.rb +75 -0
- data/lib/uniword/math/accent.rb +25 -0
- data/lib/uniword/math/accent_properties.rb +25 -0
- data/lib/uniword/math/argument_properties.rb +22 -0
- data/lib/uniword/math/bar.rb +25 -0
- data/lib/uniword/math/bar_properties.rb +25 -0
- data/lib/uniword/math/begin_char.rb +22 -0
- data/lib/uniword/math/border_box.rb +25 -0
- data/lib/uniword/math/border_box_properties.rb +39 -0
- data/lib/uniword/math/box.rb +25 -0
- data/lib/uniword/math/box_properties.rb +33 -0
- data/lib/uniword/math/char.rb +22 -0
- data/lib/uniword/math/control_properties.rb +27 -0
- data/lib/uniword/math/degree.rb +26 -0
- data/lib/uniword/math/delimiter.rb +25 -0
- data/lib/uniword/math/delimiter_properties.rb +33 -0
- data/lib/uniword/math/denominator.rb +26 -0
- data/lib/uniword/math/element.rb +56 -0
- data/lib/uniword/math/end_char.rb +22 -0
- data/lib/uniword/math/equation_array.rb +25 -0
- data/lib/uniword/math/equation_array_properties.rb +33 -0
- data/lib/uniword/math/fraction.rb +27 -0
- data/lib/uniword/math/fraction_properties.rb +25 -0
- data/lib/uniword/math/function.rb +27 -0
- data/lib/uniword/math/function_name.rb +26 -0
- data/lib/uniword/math/function_properties.rb +23 -0
- data/lib/uniword/math/group_char.rb +25 -0
- data/lib/uniword/math/group_char_properties.rb +29 -0
- data/lib/uniword/math/lim.rb +26 -0
- data/lib/uniword/math/lower_limit.rb +27 -0
- data/lib/uniword/math/lower_limit_properties.rb +23 -0
- data/lib/uniword/math/math_break.rb +22 -0
- data/lib/uniword/math/math_font.rb +22 -0
- data/lib/uniword/math/math_properties.rb +53 -0
- data/lib/uniword/math/math_run.rb +42 -0
- data/lib/uniword/math/math_run_properties.rb +37 -0
- data/lib/uniword/math/math_simple_int_val.rb +24 -0
- data/lib/uniword/math/math_simple_val.rb +24 -0
- data/lib/uniword/math/math_style.rb +22 -0
- data/lib/uniword/math/math_text.rb +23 -0
- data/lib/uniword/math/matrix.rb +25 -0
- data/lib/uniword/math/matrix_column.rb +23 -0
- data/lib/uniword/math/matrix_column_properties.rb +24 -0
- data/lib/uniword/math/matrix_columns.rb +23 -0
- data/lib/uniword/math/matrix_properties.rb +37 -0
- data/lib/uniword/math/matrix_row.rb +23 -0
- data/lib/uniword/math/nary.rb +29 -0
- data/lib/uniword/math/nary_properties.rb +33 -0
- data/lib/uniword/math/numerator.rb +26 -0
- data/lib/uniword/math/o_math.rb +54 -0
- data/lib/uniword/math/o_math_para.rb +25 -0
- data/lib/uniword/math/o_math_para_properties.rb +22 -0
- data/lib/uniword/math/phantom.rb +25 -0
- data/lib/uniword/math/phantom_properties.rb +33 -0
- data/lib/uniword/math/plurimath_adapter.rb +289 -0
- data/lib/uniword/math/pre_sub_superscript.rb +29 -0
- data/lib/uniword/math/pre_sub_superscript_properties.rb +23 -0
- data/lib/uniword/math/radical.rb +27 -0
- data/lib/uniword/math/radical_properties.rb +25 -0
- data/lib/uniword/math/separator_char.rb +22 -0
- data/lib/uniword/math/sub.rb +26 -0
- data/lib/uniword/math/sub_superscript.rb +29 -0
- data/lib/uniword/math/sub_superscript_properties.rb +25 -0
- data/lib/uniword/math/subscript.rb +27 -0
- data/lib/uniword/math/subscript_properties.rb +23 -0
- data/lib/uniword/math/sup.rb +26 -0
- data/lib/uniword/math/superscript.rb +27 -0
- data/lib/uniword/math/superscript_properties.rb +23 -0
- data/lib/uniword/math/upper_limit.rb +27 -0
- data/lib/uniword/math/upper_limit_properties.rb +23 -0
- data/lib/uniword/math.rb +90 -0
- data/lib/uniword/math_equation.rb +158 -0
- data/lib/uniword/metadata/metadata.rb +345 -0
- data/lib/uniword/metadata/metadata_extractor.rb +403 -0
- data/lib/uniword/metadata/metadata_index.rb +455 -0
- data/lib/uniword/metadata/metadata_manager.rb +334 -0
- data/lib/uniword/metadata/metadata_updater.rb +243 -0
- data/lib/uniword/metadata/metadata_validator.rb +326 -0
- data/lib/uniword/metadata.rb +12 -0
- data/lib/uniword/mhtml/css_number_formatter.rb +127 -0
- data/lib/uniword/mhtml/document.rb +160 -0
- data/lib/uniword/mhtml/header_footer_part.rb +12 -0
- data/lib/uniword/mhtml/html_part.rb +108 -0
- data/lib/uniword/mhtml/image_part.rb +29 -0
- data/lib/uniword/mhtml/math_converter.rb +153 -0
- data/lib/uniword/mhtml/metadata/document_properties.rb +65 -0
- data/lib/uniword/mhtml/metadata/latent_styles.rb +33 -0
- data/lib/uniword/mhtml/metadata/office_document_settings.rb +22 -0
- data/lib/uniword/mhtml/metadata/word_document_settings.rb +47 -0
- data/lib/uniword/mhtml/metadata.rb +12 -0
- data/lib/uniword/mhtml/mhtml_package.rb +67 -0
- data/lib/uniword/mhtml/mime_part.rb +68 -0
- data/lib/uniword/mhtml/namespaces.rb +31 -0
- data/lib/uniword/mhtml/numbering_configuration.rb +49 -0
- data/lib/uniword/mhtml/styles_configuration.rb +57 -0
- data/lib/uniword/mhtml/theme.rb +50 -0
- data/lib/uniword/mhtml/theme_part.rb +19 -0
- data/lib/uniword/mhtml/word_css.rb +220 -0
- data/lib/uniword/mhtml/wordstyle.css +998 -0
- data/lib/uniword/mhtml/xml_part.rb +18 -0
- data/lib/uniword/mhtml.rb +31 -0
- data/lib/uniword/office/bottom.rb +22 -0
- data/lib/uniword/office/brightness.rb +22 -0
- data/lib/uniword/office/button.rb +26 -0
- data/lib/uniword/office/callout.rb +36 -0
- data/lib/uniword/office/callout_anchor.rb +22 -0
- data/lib/uniword/office/checkbox.rb +24 -0
- data/lib/uniword/office/color_menu.rb +24 -0
- data/lib/uniword/office/color_mru.rb +24 -0
- data/lib/uniword/office/complex.rb +22 -0
- data/lib/uniword/office/diagram.rb +36 -0
- data/lib/uniword/office/diffusity.rb +22 -0
- data/lib/uniword/office/document_protection.rb +26 -0
- data/lib/uniword/office/document_view.rb +22 -0
- data/lib/uniword/office/edge.rb +24 -0
- data/lib/uniword/office/extrusion.rb +54 -0
- data/lib/uniword/office/extrusion_color.rb +24 -0
- data/lib/uniword/office/extrusion_color_mode.rb +22 -0
- data/lib/uniword/office/extrusion_ok.rb +22 -0
- data/lib/uniword/office/field.rb +24 -0
- data/lib/uniword/office/forms.rb +22 -0
- data/lib/uniword/office/id_map.rb +24 -0
- data/lib/uniword/office/ink.rb +24 -0
- data/lib/uniword/office/ink_annotation.rb +24 -0
- data/lib/uniword/office/left.rb +22 -0
- data/lib/uniword/office/lock.rb +30 -0
- data/lib/uniword/office/metal.rb +22 -0
- data/lib/uniword/office/proof_state.rb +24 -0
- data/lib/uniword/office/regroup.rb +22 -0
- data/lib/uniword/office/regroup_table.rb +22 -0
- data/lib/uniword/office/relation_table.rb +22 -0
- data/lib/uniword/office/right.rb +22 -0
- data/lib/uniword/office/rules.rb +22 -0
- data/lib/uniword/office/shape_defaults.rb +29 -0
- data/lib/uniword/office/shape_layout.rb +25 -0
- data/lib/uniword/office/signature_line.rb +40 -0
- data/lib/uniword/office/skew.rb +28 -0
- data/lib/uniword/office/specularity.rb +22 -0
- data/lib/uniword/office/top.rb +22 -0
- data/lib/uniword/office/writing_style.rb +28 -0
- data/lib/uniword/office/zoom.rb +22 -0
- data/lib/uniword/office.rb +57 -0
- data/lib/uniword/ooxml/additional_characteristics.rb +43 -0
- data/lib/uniword/ooxml/app_properties.rb +130 -0
- data/lib/uniword/ooxml/core_properties.rb +69 -0
- data/lib/uniword/ooxml/custom_properties.rb +132 -0
- data/lib/uniword/ooxml/docx_package.rb +989 -0
- data/lib/uniword/ooxml/dotx_package.rb +247 -0
- data/lib/uniword/ooxml/namespaces.rb +363 -0
- data/lib/uniword/ooxml/package_file.rb +227 -0
- data/lib/uniword/ooxml/relationships/hyperlink_relationship.rb +24 -0
- data/lib/uniword/ooxml/relationships/image_relationship.rb +22 -0
- data/lib/uniword/ooxml/relationships/office_document_relationship.rb +24 -0
- data/lib/uniword/ooxml/relationships/package_relationship.rb +29 -0
- data/lib/uniword/ooxml/relationships/package_relationships.rb +51 -0
- data/lib/uniword/ooxml/relationships/relationship.rb +30 -0
- data/lib/uniword/ooxml/relationships/relationships.rb +43 -0
- data/lib/uniword/ooxml/relationships.rb +24 -0
- data/lib/uniword/ooxml/schema/attribute_definition.rb +159 -0
- data/lib/uniword/ooxml/schema/child_definition.rb +125 -0
- data/lib/uniword/ooxml/schema/element_definition.rb +155 -0
- data/lib/uniword/ooxml/schema/element_serializer.rb +319 -0
- data/lib/uniword/ooxml/schema/ooxml_schema.rb +226 -0
- data/lib/uniword/ooxml/schema.rb +16 -0
- data/lib/uniword/ooxml/schema_library.rb +38 -0
- data/lib/uniword/ooxml/styleset_package.rb +122 -0
- data/lib/uniword/ooxml/theme_package.rb +222 -0
- data/lib/uniword/ooxml/thmx_package.rb +127 -0
- data/lib/uniword/ooxml/types/cp_description_type.rb +17 -0
- data/lib/uniword/ooxml/types/cp_keywords_type.rb +17 -0
- data/lib/uniword/ooxml/types/cp_last_modified_by_type.rb +17 -0
- data/lib/uniword/ooxml/types/cp_revision_type.rb +17 -0
- data/lib/uniword/ooxml/types/dc_creator_type.rb +17 -0
- data/lib/uniword/ooxml/types/dc_subject_type.rb +17 -0
- data/lib/uniword/ooxml/types/dc_title_type.rb +17 -0
- data/lib/uniword/ooxml/types/dcterms_created_type.rb +24 -0
- data/lib/uniword/ooxml/types/dcterms_modified_type.rb +24 -0
- data/lib/uniword/ooxml/types/dcterms_w3cdtf_type.rb +49 -0
- data/lib/uniword/ooxml/types/mc_ignorable_type.rb +18 -0
- data/lib/uniword/ooxml/types/on_off_type.rb +64 -0
- data/lib/uniword/ooxml/types/ooxml_boolean.rb +49 -0
- data/lib/uniword/ooxml/types/ooxml_boolean_optional.rb +57 -0
- data/lib/uniword/ooxml/types/variant_types.rb +308 -0
- data/lib/uniword/ooxml/types.rb +76 -0
- data/lib/uniword/ooxml.rb +40 -0
- data/lib/uniword/page_borders.rb +117 -0
- data/lib/uniword/paragraph_border.rb +113 -0
- data/lib/uniword/picture/fill_rect.rb +28 -0
- data/lib/uniword/picture/non_visual_picture_drawing_properties.rb +25 -0
- data/lib/uniword/picture/non_visual_picture_properties.rb +25 -0
- data/lib/uniword/picture/picture.rb +27 -0
- data/lib/uniword/picture/picture_blip_fill.rb +27 -0
- data/lib/uniword/picture/picture_locks.rb +24 -0
- data/lib/uniword/picture/picture_shape_properties.rb +27 -0
- data/lib/uniword/picture/picture_source_rect.rb +28 -0
- data/lib/uniword/picture/picture_stretch.rb +23 -0
- data/lib/uniword/picture/tile.rb +30 -0
- data/lib/uniword/picture.rb +25 -0
- data/lib/uniword/presentationml/audio.rb +26 -0
- data/lib/uniword/presentationml/body_properties.rb +30 -0
- data/lib/uniword/presentationml/break.rb +22 -0
- data/lib/uniword/presentationml/color_map.rb +28 -0
- data/lib/uniword/presentationml/common_slide_data.rb +27 -0
- data/lib/uniword/presentationml/common_time_node.rb +33 -0
- data/lib/uniword/presentationml/connection_shape.rb +25 -0
- data/lib/uniword/presentationml/embed.rb +22 -0
- data/lib/uniword/presentationml/embedded_font.rb +24 -0
- data/lib/uniword/presentationml/end_conditions_list.rb +23 -0
- data/lib/uniword/presentationml/end_paragraph_run_properties.rb +26 -0
- data/lib/uniword/presentationml/extension.rb +22 -0
- data/lib/uniword/presentationml/extension_list.rb +23 -0
- data/lib/uniword/presentationml/field.rb +31 -0
- data/lib/uniword/presentationml/graphic_frame.rb +27 -0
- data/lib/uniword/presentationml/group_shape.rb +29 -0
- data/lib/uniword/presentationml/handout_master.rb +25 -0
- data/lib/uniword/presentationml/handout_master_id_list.rb +22 -0
- data/lib/uniword/presentationml/list_style.rb +29 -0
- data/lib/uniword/presentationml/non_visual_shape_properties.rb +27 -0
- data/lib/uniword/presentationml/notes.rb +27 -0
- data/lib/uniword/presentationml/notes_master_id_list.rb +22 -0
- data/lib/uniword/presentationml/notes_size.rb +24 -0
- data/lib/uniword/presentationml/ole_object.rb +26 -0
- data/lib/uniword/presentationml/paragraph.rb +31 -0
- data/lib/uniword/presentationml/paragraph_properties.rb +30 -0
- data/lib/uniword/presentationml/parallel_time_node.rb +23 -0
- data/lib/uniword/presentationml/picture.rb +27 -0
- data/lib/uniword/presentationml/presentation.rb +39 -0
- data/lib/uniword/presentationml/run.rb +25 -0
- data/lib/uniword/presentationml/run_properties.rb +34 -0
- data/lib/uniword/presentationml/sequence_time_node.rb +27 -0
- data/lib/uniword/presentationml/shape.rb +27 -0
- data/lib/uniword/presentationml/shape_properties.rb +31 -0
- data/lib/uniword/presentationml/shape_tree.rb +35 -0
- data/lib/uniword/presentationml/slide.rb +33 -0
- data/lib/uniword/presentationml/slide_id.rb +24 -0
- data/lib/uniword/presentationml/slide_id_list.rb +23 -0
- data/lib/uniword/presentationml/slide_layout.rb +33 -0
- data/lib/uniword/presentationml/slide_master.rb +33 -0
- data/lib/uniword/presentationml/slide_master_id.rb +24 -0
- data/lib/uniword/presentationml/slide_master_id_list.rb +23 -0
- data/lib/uniword/presentationml/slide_size.rb +26 -0
- data/lib/uniword/presentationml/start_conditions_list.rb +23 -0
- data/lib/uniword/presentationml/text_body.rb +27 -0
- data/lib/uniword/presentationml/time_node_list.rb +25 -0
- data/lib/uniword/presentationml/timing.rb +25 -0
- data/lib/uniword/presentationml/transition.rb +33 -0
- data/lib/uniword/presentationml/video.rb +24 -0
- data/lib/uniword/presentationml.rb +67 -0
- data/lib/uniword/properties/alignment.rb +26 -0
- data/lib/uniword/properties/bold.rb +40 -0
- data/lib/uniword/properties/boolean_formatting.rb +214 -0
- data/lib/uniword/properties/border.rb +48 -0
- data/lib/uniword/properties/borders.rb +39 -0
- data/lib/uniword/properties/cell_vertical_align.rb +32 -0
- data/lib/uniword/properties/cell_width.rb +28 -0
- data/lib/uniword/properties/character_spacing.rb +34 -0
- data/lib/uniword/properties/color_value.rb +57 -0
- data/lib/uniword/properties/contextual_spacing.rb +32 -0
- data/lib/uniword/properties/emphasis_mark.rb +35 -0
- data/lib/uniword/properties/font_size.rb +26 -0
- data/lib/uniword/properties/highlight.rb +28 -0
- data/lib/uniword/properties/indentation.rb +28 -0
- data/lib/uniword/properties/italic.rb +40 -0
- data/lib/uniword/properties/kerning.rb +34 -0
- data/lib/uniword/properties/language.rb +39 -0
- data/lib/uniword/properties/margin.rb +22 -0
- data/lib/uniword/properties/numbering_id.rb +26 -0
- data/lib/uniword/properties/numbering_level.rb +26 -0
- data/lib/uniword/properties/numbering_properties.rb +25 -0
- data/lib/uniword/properties/outline.rb +33 -0
- data/lib/uniword/properties/outline_level.rb +26 -0
- data/lib/uniword/properties/position.rb +33 -0
- data/lib/uniword/properties/run_fonts.rb +38 -0
- data/lib/uniword/properties/shading.rb +41 -0
- data/lib/uniword/properties/spacing.rb +28 -0
- data/lib/uniword/properties/style_reference.rb +81 -0
- data/lib/uniword/properties/tab_stop.rb +45 -0
- data/lib/uniword/properties/table_cell_margin.rb +33 -0
- data/lib/uniword/properties/table_indent.rb +23 -0
- data/lib/uniword/properties/table_justification.rb +22 -0
- data/lib/uniword/properties/table_look.rb +36 -0
- data/lib/uniword/properties/table_width.rb +28 -0
- data/lib/uniword/properties/tabs.rb +64 -0
- data/lib/uniword/properties/text_fill.rb +38 -0
- data/lib/uniword/properties/text_outline.rb +34 -0
- data/lib/uniword/properties/underline.rb +32 -0
- data/lib/uniword/properties/vertical_align.rb +26 -0
- data/lib/uniword/properties/width_scale.rb +34 -0
- data/lib/uniword/properties.rb +71 -0
- data/lib/uniword/quality/document_checker.rb +150 -0
- data/lib/uniword/quality/quality_report.rb +317 -0
- data/lib/uniword/quality/quality_rule.rb +153 -0
- data/lib/uniword/quality/rules/heading_hierarchy_rule.rb +83 -0
- data/lib/uniword/quality/rules/image_alt_text_rule.rb +87 -0
- data/lib/uniword/quality/rules/link_validation_rule.rb +136 -0
- data/lib/uniword/quality/rules/paragraph_length_rule.rb +77 -0
- data/lib/uniword/quality/rules/style_consistency_rule.rb +116 -0
- data/lib/uniword/quality/rules/table_header_rule.rb +69 -0
- data/lib/uniword/quality.rb +16 -0
- data/lib/uniword/resource/cache.rb +82 -0
- data/lib/uniword/resource/cache_paths.rb +29 -0
- data/lib/uniword/resource/cache_version.rb +49 -0
- data/lib/uniword/resource/color_transformer.rb +134 -0
- data/lib/uniword/resource/font_substitutor.rb +60 -0
- data/lib/uniword/resource/importer.rb +114 -0
- data/lib/uniword/resource/resource_location.rb +35 -0
- data/lib/uniword/resource/resource_resolver.rb +100 -0
- data/lib/uniword/resource/theme_processor.rb +107 -0
- data/lib/uniword/resource.rb +19 -0
- data/lib/uniword/revision.rb +200 -0
- data/lib/uniword/schema/model_generator.rb +182 -0
- data/lib/uniword/schema/schema_loader.rb +90 -0
- data/lib/uniword/schema.rb +8 -0
- data/lib/uniword/section.rb +183 -0
- data/lib/uniword/section_properties.rb +180 -0
- data/lib/uniword/serialization/ooxml_serializer.rb +30 -0
- data/lib/uniword/shading.rb +109 -0
- data/lib/uniword/shared_types/angle.rb +22 -0
- data/lib/uniword/shared_types/boolean_value.rb +24 -0
- data/lib/uniword/shared_types/decimal_number.rb +22 -0
- data/lib/uniword/shared_types/emu_measure.rb +22 -0
- data/lib/uniword/shared_types/fixed_percentage.rb +22 -0
- data/lib/uniword/shared_types/hex_color.rb +22 -0
- data/lib/uniword/shared_types/on_off.rb +24 -0
- data/lib/uniword/shared_types/percent_value.rb +22 -0
- data/lib/uniword/shared_types/pixel_measure.rb +22 -0
- data/lib/uniword/shared_types/point_measure.rb +22 -0
- data/lib/uniword/shared_types/positive_percentage.rb +22 -0
- data/lib/uniword/shared_types/string_type.rb +22 -0
- data/lib/uniword/shared_types/text_alignment.rb +22 -0
- data/lib/uniword/shared_types/twips_measure.rb +22 -0
- data/lib/uniword/shared_types/vertical_alignment.rb +22 -0
- data/lib/uniword/shared_types.rb +31 -0
- data/lib/uniword/spreadsheetml/alignment.rb +32 -0
- data/lib/uniword/spreadsheetml/authors.rb +23 -0
- data/lib/uniword/spreadsheetml/auto_filter.rb +25 -0
- data/lib/uniword/spreadsheetml/bold.rb +22 -0
- data/lib/uniword/spreadsheetml/book_views.rb +23 -0
- data/lib/uniword/spreadsheetml/border.rb +31 -0
- data/lib/uniword/spreadsheetml/borders.rb +25 -0
- data/lib/uniword/spreadsheetml/calc_properties.rb +26 -0
- data/lib/uniword/spreadsheetml/cell.rb +31 -0
- data/lib/uniword/spreadsheetml/cell_format.rb +41 -0
- data/lib/uniword/spreadsheetml/cell_formats.rb +25 -0
- data/lib/uniword/spreadsheetml/cell_formula.rb +28 -0
- data/lib/uniword/spreadsheetml/cell_style.rb +31 -0
- data/lib/uniword/spreadsheetml/cell_style_xfs.rb +23 -0
- data/lib/uniword/spreadsheetml/cell_styles.rb +23 -0
- data/lib/uniword/spreadsheetml/cell_value.rb +22 -0
- data/lib/uniword/spreadsheetml/chartsheet.rb +25 -0
- data/lib/uniword/spreadsheetml/col.rb +32 -0
- data/lib/uniword/spreadsheetml/col_breaks.rb +25 -0
- data/lib/uniword/spreadsheetml/color.rb +28 -0
- data/lib/uniword/spreadsheetml/color_filter.rb +23 -0
- data/lib/uniword/spreadsheetml/colors.rb +21 -0
- data/lib/uniword/spreadsheetml/cols.rb +23 -0
- data/lib/uniword/spreadsheetml/comment.rb +27 -0
- data/lib/uniword/spreadsheetml/comment_list.rb +23 -0
- data/lib/uniword/spreadsheetml/comments.rb +25 -0
- data/lib/uniword/spreadsheetml/conditional_formatting.rb +25 -0
- data/lib/uniword/spreadsheetml/conditional_formatting_rule.rb +27 -0
- data/lib/uniword/spreadsheetml/custom_filter.rb +23 -0
- data/lib/uniword/spreadsheetml/custom_filters.rb +23 -0
- data/lib/uniword/spreadsheetml/custom_workbook_views.rb +23 -0
- data/lib/uniword/spreadsheetml/data_validation.rb +43 -0
- data/lib/uniword/spreadsheetml/data_validations.rb +25 -0
- data/lib/uniword/spreadsheetml/date_group_item.rb +33 -0
- data/lib/uniword/spreadsheetml/defined_name.rb +28 -0
- data/lib/uniword/spreadsheetml/defined_names.rb +23 -0
- data/lib/uniword/spreadsheetml/dimension.rb +22 -0
- data/lib/uniword/spreadsheetml/drawing.rb +22 -0
- data/lib/uniword/spreadsheetml/dynamic_filter.rb +25 -0
- data/lib/uniword/spreadsheetml/external_reference.rb +21 -0
- data/lib/uniword/spreadsheetml/external_references.rb +23 -0
- data/lib/uniword/spreadsheetml/file_sharing.rb +22 -0
- data/lib/uniword/spreadsheetml/file_version.rb +24 -0
- data/lib/uniword/spreadsheetml/fill.rb +23 -0
- data/lib/uniword/spreadsheetml/fills.rb +25 -0
- data/lib/uniword/spreadsheetml/filter.rb +21 -0
- data/lib/uniword/spreadsheetml/filter_column.rb +37 -0
- data/lib/uniword/spreadsheetml/filters.rb +27 -0
- data/lib/uniword/spreadsheetml/font.rb +31 -0
- data/lib/uniword/spreadsheetml/font_name.rb +22 -0
- data/lib/uniword/spreadsheetml/font_size.rb +22 -0
- data/lib/uniword/spreadsheetml/fonts.rb +25 -0
- data/lib/uniword/spreadsheetml/hyperlink.rb +30 -0
- data/lib/uniword/spreadsheetml/hyperlinks.rb +23 -0
- data/lib/uniword/spreadsheetml/icon_filter.rb +23 -0
- data/lib/uniword/spreadsheetml/italic.rb +22 -0
- data/lib/uniword/spreadsheetml/legacy_drawing.rb +22 -0
- data/lib/uniword/spreadsheetml/merge_cell.rb +22 -0
- data/lib/uniword/spreadsheetml/merge_cells.rb +25 -0
- data/lib/uniword/spreadsheetml/number_format.rb +24 -0
- data/lib/uniword/spreadsheetml/number_formats.rb +25 -0
- data/lib/uniword/spreadsheetml/ole_object.rb +24 -0
- data/lib/uniword/spreadsheetml/ole_objects.rb +23 -0
- data/lib/uniword/spreadsheetml/ole_size.rb +21 -0
- data/lib/uniword/spreadsheetml/pattern_fill.rb +27 -0
- data/lib/uniword/spreadsheetml/phonetic_pr.rb +35 -0
- data/lib/uniword/spreadsheetml/phonetic_properties.rb +24 -0
- data/lib/uniword/spreadsheetml/pivot_caches.rb +23 -0
- data/lib/uniword/spreadsheetml/pivot_table.rb +24 -0
- data/lib/uniword/spreadsheetml/pivot_table_definition.rb +26 -0
- data/lib/uniword/spreadsheetml/protected_ranges.rb +23 -0
- data/lib/uniword/spreadsheetml/query_table.rb +24 -0
- data/lib/uniword/spreadsheetml/rich_text_run.rb +25 -0
- data/lib/uniword/spreadsheetml/row.rb +33 -0
- data/lib/uniword/spreadsheetml/row_breaks.rb +25 -0
- data/lib/uniword/spreadsheetml/run_properties.rb +29 -0
- data/lib/uniword/spreadsheetml/scenarios.rb +27 -0
- data/lib/uniword/spreadsheetml/shared_string_table.rb +27 -0
- data/lib/uniword/spreadsheetml/sheet.rb +28 -0
- data/lib/uniword/spreadsheetml/sheet_data.rb +23 -0
- data/lib/uniword/spreadsheetml/sheet_format_pr.rb +33 -0
- data/lib/uniword/spreadsheetml/sheet_protection.rb +28 -0
- data/lib/uniword/spreadsheetml/sheet_view.rb +30 -0
- data/lib/uniword/spreadsheetml/sheet_views.rb +23 -0
- data/lib/uniword/spreadsheetml/sheets.rb +23 -0
- data/lib/uniword/spreadsheetml/sort_condition.rb +33 -0
- data/lib/uniword/spreadsheetml/sort_state.rb +23 -0
- data/lib/uniword/spreadsheetml/sparkline_group.rb +24 -0
- data/lib/uniword/spreadsheetml/sparkline_groups.rb +23 -0
- data/lib/uniword/spreadsheetml/string_item.rb +27 -0
- data/lib/uniword/spreadsheetml/table.rb +35 -0
- data/lib/uniword/spreadsheetml/table_column.rb +24 -0
- data/lib/uniword/spreadsheetml/table_columns.rb +25 -0
- data/lib/uniword/spreadsheetml/table_formula.rb +23 -0
- data/lib/uniword/spreadsheetml/table_parts.rb +23 -0
- data/lib/uniword/spreadsheetml/table_style_info.rb +30 -0
- data/lib/uniword/spreadsheetml/table_styles.rb +23 -0
- data/lib/uniword/spreadsheetml/text.rb +24 -0
- data/lib/uniword/spreadsheetml/top10.rb +27 -0
- data/lib/uniword/spreadsheetml/workbook.rb +31 -0
- data/lib/uniword/spreadsheetml/workbook_properties.rb +26 -0
- data/lib/uniword/spreadsheetml/workbook_protection.rb +24 -0
- data/lib/uniword/spreadsheetml/workbook_view.rb +26 -0
- data/lib/uniword/spreadsheetml/worksheet/sheet_format_pr.rb +35 -0
- data/lib/uniword/spreadsheetml/worksheet.rb +33 -0
- data/lib/uniword/spreadsheetml.rb +121 -0
- data/lib/uniword/streaming_parser.rb +277 -0
- data/lib/uniword/styles.rb +14 -0
- data/lib/uniword/styleset.rb +166 -0
- data/lib/uniword/stylesets/package.rb +107 -0
- data/lib/uniword/stylesets/styleset_importer.rb +96 -0
- data/lib/uniword/stylesets/yaml_styleset_loader.rb +58 -0
- data/lib/uniword/stylesets.rb +9 -0
- data/lib/uniword/tab_stop.rb +85 -0
- data/lib/uniword/table_border.rb +87 -0
- data/lib/uniword/template/helpers/conditional_helper.rb +107 -0
- data/lib/uniword/template/helpers/filter_helper.rb +124 -0
- data/lib/uniword/template/helpers/loop_helper.rb +119 -0
- data/lib/uniword/template/helpers/variable_helper.rb +85 -0
- data/lib/uniword/template/helpers.rb +12 -0
- data/lib/uniword/template/template.rb +147 -0
- data/lib/uniword/template/template_context.rb +103 -0
- data/lib/uniword/template/template_marker.rb +121 -0
- data/lib/uniword/template/template_parser.rb +186 -0
- data/lib/uniword/template/template_renderer.rb +204 -0
- data/lib/uniword/template/template_validator.rb +202 -0
- data/lib/uniword/template/variable_resolver.rb +195 -0
- data/lib/uniword/template.rb +14 -0
- data/lib/uniword/text_box.rb +55 -0
- data/lib/uniword/text_frame.rb +168 -0
- data/lib/uniword/theme/media_file.rb +128 -0
- data/lib/uniword/theme/theme_applicator.rb +141 -0
- data/lib/uniword/theme/theme_loader.rb +107 -0
- data/lib/uniword/theme/theme_package_reader.rb +102 -0
- data/lib/uniword/theme/theme_variant.rb +87 -0
- data/lib/uniword/theme/theme_xml_parser.rb +239 -0
- data/lib/uniword/theme_writer.rb +58 -0
- data/lib/uniword/themes/theme.rb +159 -0
- data/lib/uniword/themes/theme_importer.rb +138 -0
- data/lib/uniword/themes/theme_transformation.rb +202 -0
- data/lib/uniword/themes.rb +23 -0
- data/lib/uniword/tracked_changes.rb +231 -0
- data/lib/uniword/transformation/html_to_ooxml_converter.rb +541 -0
- data/lib/uniword/transformation/hyperlink_transformation_rule.rb +72 -0
- data/lib/uniword/transformation/image_transformation_rule.rb +69 -0
- data/lib/uniword/transformation/ooxml_to_html_converter.rb +172 -0
- data/lib/uniword/transformation/ooxml_to_mhtml_converter.rb +1406 -0
- data/lib/uniword/transformation/paragraph_transformation_rule.rb +166 -0
- data/lib/uniword/transformation/run_transformation_rule.rb +76 -0
- data/lib/uniword/transformation/table_transformation_rule.rb +120 -0
- data/lib/uniword/transformation/transformation_rule.rb +91 -0
- data/lib/uniword/transformation/transformation_rule_registry.rb +133 -0
- data/lib/uniword/transformation/transformer.rb +386 -0
- data/lib/uniword/transformation.rb +18 -0
- data/lib/uniword/validation/checkers/external_link_checker.rb +200 -0
- data/lib/uniword/validation/checkers/file_reference_checker.rb +196 -0
- data/lib/uniword/validation/checkers/footnote_reference_checker.rb +178 -0
- data/lib/uniword/validation/checkers/internal_link_checker.rb +181 -0
- data/lib/uniword/validation/checkers.rb +12 -0
- data/lib/uniword/validation/document_validator.rb +272 -0
- data/lib/uniword/validation/layer_validation_result.rb +157 -0
- data/lib/uniword/validation/layer_validator.rb +104 -0
- data/lib/uniword/validation/link_checker.rb +94 -0
- data/lib/uniword/validation/link_validator.rb +318 -0
- data/lib/uniword/validation/validation_report.rb +409 -0
- data/lib/uniword/validation/validation_result.rb +215 -0
- data/lib/uniword/validation/validators/content_type_validator.rb +159 -0
- data/lib/uniword/validation/validators/document_semantics_validator.rb +152 -0
- data/lib/uniword/validation/validators/file_structure_validator.rb +101 -0
- data/lib/uniword/validation/validators/ooxml_part_validator.rb +128 -0
- data/lib/uniword/validation/validators/relationship_validator.rb +146 -0
- data/lib/uniword/validation/validators/xml_schema_validator.rb +120 -0
- data/lib/uniword/validation/validators/zip_integrity_validator.rb +110 -0
- data/lib/uniword/validation/validators.rb +15 -0
- data/lib/uniword/validation.rb +15 -0
- data/lib/uniword/validators/element_validator.rb +97 -0
- data/lib/uniword/validators/paragraph_validator.rb +122 -0
- data/lib/uniword/validators/table_validator.rb +140 -0
- data/lib/uniword/validators.rb +9 -0
- data/lib/uniword/version.rb +5 -0
- data/lib/uniword/visitor/base_visitor.rb +81 -0
- data/lib/uniword/visitor/text_extractor.rb +119 -0
- data/lib/uniword/visitor.rb +8 -0
- data/lib/uniword/vml/arc.rb +41 -0
- data/lib/uniword/vml/background.rb +33 -0
- data/lib/uniword/vml/curve.rb +36 -0
- data/lib/uniword/vml/fill.rb +32 -0
- data/lib/uniword/vml/formula.rb +23 -0
- data/lib/uniword/vml/formulas.rb +24 -0
- data/lib/uniword/vml/group.rb +30 -0
- data/lib/uniword/vml/handle.rb +39 -0
- data/lib/uniword/vml/handles.rb +24 -0
- data/lib/uniword/vml/image.rb +47 -0
- data/lib/uniword/vml/imagedata.rb +34 -0
- data/lib/uniword/vml/line.rb +34 -0
- data/lib/uniword/vml/oval.rb +34 -0
- data/lib/uniword/vml/path.rb +28 -0
- data/lib/uniword/vml/polyline.rb +32 -0
- data/lib/uniword/vml/rect.rb +34 -0
- data/lib/uniword/vml/roundrect.rb +39 -0
- data/lib/uniword/vml/shadow.rb +33 -0
- data/lib/uniword/vml/shape.rb +73 -0
- data/lib/uniword/vml/shapetype.rb +32 -0
- data/lib/uniword/vml/stroke.rb +34 -0
- data/lib/uniword/vml/textbox.rb +28 -0
- data/lib/uniword/vml/textpath.rb +25 -0
- data/lib/uniword/vml/wrap.rb +24 -0
- data/lib/uniword/vml.rb +39 -0
- data/lib/uniword/vml_office/vml_anchor_lock.rb +22 -0
- data/lib/uniword/vml_office/vml_bottom.rb +24 -0
- data/lib/uniword/vml_office/vml_callout.rb +35 -0
- data/lib/uniword/vml_office/vml_clip_path.rb +24 -0
- data/lib/uniword/vml_office/vml_color_mru.rb +24 -0
- data/lib/uniword/vml_office/vml_column.rb +24 -0
- data/lib/uniword/vml_office/vml_complex.rb +22 -0
- data/lib/uniword/vml_office/vml_complex_extension.rb +24 -0
- data/lib/uniword/vml_office/vml_diagram.rb +32 -0
- data/lib/uniword/vml_office/vml_entry.rb +24 -0
- data/lib/uniword/vml_office/vml_extrusion.rb +43 -0
- data/lib/uniword/vml_office/vml_id_map.rb +24 -0
- data/lib/uniword/vml_office/vml_ink.rb +26 -0
- data/lib/uniword/vml_office/vml_left.rb +24 -0
- data/lib/uniword/vml_office/vml_lock.rb +37 -0
- data/lib/uniword/vml_office/vml_office_fill.rb +32 -0
- data/lib/uniword/vml_office/vml_proxy.rb +28 -0
- data/lib/uniword/vml_office/vml_regroup.rb +22 -0
- data/lib/uniword/vml_office/vml_relation_table.rb +24 -0
- data/lib/uniword/vml_office/vml_right.rb +24 -0
- data/lib/uniword/vml_office/vml_rule.rb +26 -0
- data/lib/uniword/vml_office/vml_rules.rb +24 -0
- data/lib/uniword/vml_office/vml_shape_defaults.rb +53 -0
- data/lib/uniword/vml_office/vml_shape_layout.rb +70 -0
- data/lib/uniword/vml_office/vml_signature_line.rb +38 -0
- data/lib/uniword/vml_office/vml_skew.rb +29 -0
- data/lib/uniword/vml_office/vml_top.rb +24 -0
- data/lib/uniword/vml_office/vml_wrap_block.rb +24 -0
- data/lib/uniword/vml_office/vml_wrap_coords.rb +22 -0
- data/lib/uniword/vml_office.rb +47 -0
- data/lib/uniword/vml_word/border_bottom.rb +29 -0
- data/lib/uniword/vml_word/border_left.rb +29 -0
- data/lib/uniword/vml_word/border_right.rb +29 -0
- data/lib/uniword/vml_word/border_top.rb +29 -0
- data/lib/uniword/vml_word.rb +17 -0
- data/lib/uniword/warnings/warning.rb +130 -0
- data/lib/uniword/warnings/warning_collector.rb +229 -0
- data/lib/uniword/warnings/warning_report.rb +159 -0
- data/lib/uniword/warnings.rb +9 -0
- data/lib/uniword/word2010_ext/wrap.rb +26 -0
- data/lib/uniword/word2010_ext.rb +14 -0
- data/lib/uniword/word_implementation.rb +58 -0
- data/lib/uniword/word_implementation_factory.rb +15 -0
- data/lib/uniword/word_implementation_linux.rb +42 -0
- data/lib/uniword/word_implementation_macos.rb +41 -0
- data/lib/uniword/word_implementation_null.rb +34 -0
- data/lib/uniword/word_implementation_windows.rb +75 -0
- data/lib/uniword/wordprocessing_group.rb +29 -0
- data/lib/uniword/wordprocessing_shape.rb +48 -0
- data/lib/uniword/wordprocessingml/abstract_num.rb +27 -0
- data/lib/uniword/wordprocessingml/abstract_num_id.rb +22 -0
- data/lib/uniword/wordprocessingml/alternate_content.rb +24 -0
- data/lib/uniword/wordprocessingml/anchor.rb +35 -0
- data/lib/uniword/wordprocessingml/based_on.rb +22 -0
- data/lib/uniword/wordprocessingml/body.rb +95 -0
- data/lib/uniword/wordprocessingml/bookmark_end.rb +22 -0
- data/lib/uniword/wordprocessingml/bookmark_start.rb +24 -0
- data/lib/uniword/wordprocessingml/border.rb +30 -0
- data/lib/uniword/wordprocessingml/break.rb +24 -0
- data/lib/uniword/wordprocessingml/carriage_return.rb +17 -0
- data/lib/uniword/wordprocessingml/character_style.rb +199 -0
- data/lib/uniword/wordprocessingml/choice.rb +24 -0
- data/lib/uniword/wordprocessingml/cnf_style.rb +52 -0
- data/lib/uniword/wordprocessingml/columns.rb +26 -0
- data/lib/uniword/wordprocessingml/comment_range_end.rb +22 -0
- data/lib/uniword/wordprocessingml/comment_range_start.rb +22 -0
- data/lib/uniword/wordprocessingml/comment_reference.rb +22 -0
- data/lib/uniword/wordprocessingml/compat.rb +35 -0
- data/lib/uniword/wordprocessingml/compat_setting.rb +26 -0
- data/lib/uniword/wordprocessingml/deleted_text.rb +29 -0
- data/lib/uniword/wordprocessingml/doc_defaults.rb +25 -0
- data/lib/uniword/wordprocessingml/doc_grid.rb +25 -0
- data/lib/uniword/wordprocessingml/doc_pr.rb +26 -0
- data/lib/uniword/wordprocessingml/document_root.rb +251 -0
- data/lib/uniword/wordprocessingml/drawing.rb +24 -0
- data/lib/uniword/wordprocessingml/emboss.rb +24 -0
- data/lib/uniword/wordprocessingml/endnote.rb +27 -0
- data/lib/uniword/wordprocessingml/endnote_ref.rb +20 -0
- data/lib/uniword/wordprocessingml/endnote_reference.rb +22 -0
- data/lib/uniword/wordprocessingml/endnotes.rb +23 -0
- data/lib/uniword/wordprocessingml/extent.rb +24 -0
- data/lib/uniword/wordprocessingml/fallback.rb +24 -0
- data/lib/uniword/wordprocessingml/field_char.rb +24 -0
- data/lib/uniword/wordprocessingml/font.rb +110 -0
- data/lib/uniword/wordprocessingml/font_table.rb +30 -0
- data/lib/uniword/wordprocessingml/fonts.rb +23 -0
- data/lib/uniword/wordprocessingml/footer.rb +25 -0
- data/lib/uniword/wordprocessingml/footer_reference.rb +27 -0
- data/lib/uniword/wordprocessingml/footnote.rb +27 -0
- data/lib/uniword/wordprocessingml/footnote_ref.rb +20 -0
- data/lib/uniword/wordprocessingml/footnote_reference.rb +22 -0
- data/lib/uniword/wordprocessingml/footnotes.rb +23 -0
- data/lib/uniword/wordprocessingml/graphic.rb +23 -0
- data/lib/uniword/wordprocessingml/graphic_data.rb +22 -0
- data/lib/uniword/wordprocessingml/grid_after.rb +17 -0
- data/lib/uniword/wordprocessingml/grid_before.rb +17 -0
- data/lib/uniword/wordprocessingml/grid_col.rb +22 -0
- data/lib/uniword/wordprocessingml/header.rb +25 -0
- data/lib/uniword/wordprocessingml/header_reference.rb +27 -0
- data/lib/uniword/wordprocessingml/hyperlink.rb +73 -0
- data/lib/uniword/wordprocessingml/imprint.rb +24 -0
- data/lib/uniword/wordprocessingml/inline.rb +27 -0
- data/lib/uniword/wordprocessingml/instr_text.rb +32 -0
- data/lib/uniword/wordprocessingml/last_rendered_page_break.rb +16 -0
- data/lib/uniword/wordprocessingml/latent_styles.rb +59 -0
- data/lib/uniword/wordprocessingml/level.rb +103 -0
- data/lib/uniword/wordprocessingml/link.rb +22 -0
- data/lib/uniword/wordprocessingml/lvl_jc.rb +22 -0
- data/lib/uniword/wordprocessingml/lvl_text.rb +22 -0
- data/lib/uniword/wordprocessingml/mc_requires.rb +11 -0
- data/lib/uniword/wordprocessingml/multi_level_type.rb +22 -0
- data/lib/uniword/wordprocessingml/next.rb +22 -0
- data/lib/uniword/wordprocessingml/no_break_hyphen.rb +17 -0
- data/lib/uniword/wordprocessingml/no_wrap.rb +16 -0
- data/lib/uniword/wordprocessingml/num.rb +25 -0
- data/lib/uniword/wordprocessingml/num_fmt.rb +22 -0
- data/lib/uniword/wordprocessingml/numbering.rb +25 -0
- data/lib/uniword/wordprocessingml/numbering_configuration.rb +173 -0
- data/lib/uniword/wordprocessingml/numbering_definition.rb +155 -0
- data/lib/uniword/wordprocessingml/numbering_elements.rb +78 -0
- data/lib/uniword/wordprocessingml/numbering_instance.rb +55 -0
- data/lib/uniword/wordprocessingml/numbering_level.rb +90 -0
- data/lib/uniword/wordprocessingml/object.rb +24 -0
- data/lib/uniword/wordprocessingml/outline.rb +24 -0
- data/lib/uniword/wordprocessingml/p_pr_default.rb +23 -0
- data/lib/uniword/wordprocessingml/page_margins.rb +34 -0
- data/lib/uniword/wordprocessingml/page_numbering.rb +24 -0
- data/lib/uniword/wordprocessingml/page_size.rb +26 -0
- data/lib/uniword/wordprocessingml/paragraph.rb +197 -0
- data/lib/uniword/wordprocessingml/paragraph_borders.rb +58 -0
- data/lib/uniword/wordprocessingml/paragraph_properties.rb +339 -0
- data/lib/uniword/wordprocessingml/paragraph_style.rb +163 -0
- data/lib/uniword/wordprocessingml/pict.rb +23 -0
- data/lib/uniword/wordprocessingml/picture.rb +27 -0
- data/lib/uniword/wordprocessingml/position_tab.rb +26 -0
- data/lib/uniword/wordprocessingml/proof_err.rb +20 -0
- data/lib/uniword/wordprocessingml/r_pr_default.rb +23 -0
- data/lib/uniword/wordprocessingml/recipient_data.rb +25 -0
- data/lib/uniword/wordprocessingml/recipients.rb +21 -0
- data/lib/uniword/wordprocessingml/run.rb +254 -0
- data/lib/uniword/wordprocessingml/run_properties.rb +701 -0
- data/lib/uniword/wordprocessingml/section_properties.rb +55 -0
- data/lib/uniword/wordprocessingml/semi_hidden.rb +27 -0
- data/lib/uniword/wordprocessingml/settings.rb +606 -0
- data/lib/uniword/wordprocessingml/shading.rb +30 -0
- data/lib/uniword/wordprocessingml/shadow.rb +24 -0
- data/lib/uniword/wordprocessingml/shape.rb +26 -0
- data/lib/uniword/wordprocessingml/simple_field.rb +27 -0
- data/lib/uniword/wordprocessingml/simple_pos.rb +24 -0
- data/lib/uniword/wordprocessingml/soft_hyphen.rb +17 -0
- data/lib/uniword/wordprocessingml/start.rb +22 -0
- data/lib/uniword/wordprocessingml/structured_document_tag/alias.rb +21 -0
- data/lib/uniword/wordprocessingml/structured_document_tag/appearance.rb +22 -0
- data/lib/uniword/wordprocessingml/structured_document_tag/bibliography.rb +18 -0
- data/lib/uniword/wordprocessingml/structured_document_tag/content.rb +32 -0
- data/lib/uniword/wordprocessingml/structured_document_tag/data_binding.rb +27 -0
- data/lib/uniword/wordprocessingml/structured_document_tag/date.rb +75 -0
- data/lib/uniword/wordprocessingml/structured_document_tag/doc_part_obj.rb +57 -0
- data/lib/uniword/wordprocessingml/structured_document_tag/end_properties.rb +24 -0
- data/lib/uniword/wordprocessingml/structured_document_tag/id.rb +21 -0
- data/lib/uniword/wordprocessingml/structured_document_tag/placeholder.rb +33 -0
- data/lib/uniword/wordprocessingml/structured_document_tag/run_properties.rb +83 -0
- data/lib/uniword/wordprocessingml/structured_document_tag/showing_placeholder_header.rb +18 -0
- data/lib/uniword/wordprocessingml/structured_document_tag/tag.rb +21 -0
- data/lib/uniword/wordprocessingml/structured_document_tag/temporary.rb +19 -0
- data/lib/uniword/wordprocessingml/structured_document_tag/text.rb +18 -0
- data/lib/uniword/wordprocessingml/structured_document_tag.rb +62 -0
- data/lib/uniword/wordprocessingml/structured_document_tag_properties.rb +53 -0
- data/lib/uniword/wordprocessingml/style.rb +383 -0
- data/lib/uniword/wordprocessingml/style_name.rb +45 -0
- data/lib/uniword/wordprocessingml/styles/character_style_definition.rb +45 -0
- data/lib/uniword/wordprocessingml/styles/list_style_definition.rb +74 -0
- data/lib/uniword/wordprocessingml/styles/paragraph_style_definition.rb +54 -0
- data/lib/uniword/wordprocessingml/styles/semantic_style.rb +58 -0
- data/lib/uniword/wordprocessingml/styles/style_definition.rb +61 -0
- data/lib/uniword/wordprocessingml/styles/style_library.rb +207 -0
- data/lib/uniword/wordprocessingml/styles/table_style_definition.rb +60 -0
- data/lib/uniword/wordprocessingml/styles.rb +13 -0
- data/lib/uniword/wordprocessingml/styles_configuration.rb +352 -0
- data/lib/uniword/wordprocessingml/symbol.rb +24 -0
- data/lib/uniword/wordprocessingml/tab.rb +23 -0
- data/lib/uniword/wordprocessingml/tab_stop.rb +58 -0
- data/lib/uniword/wordprocessingml/table.rb +72 -0
- data/lib/uniword/wordprocessingml/table_borders.rb +33 -0
- data/lib/uniword/wordprocessingml/table_cell.rb +80 -0
- data/lib/uniword/wordprocessingml/table_cell_borders.rb +29 -0
- data/lib/uniword/wordprocessingml/table_cell_margin.rb +29 -0
- data/lib/uniword/wordprocessingml/table_cell_properties.rb +60 -0
- data/lib/uniword/wordprocessingml/table_grid.rb +23 -0
- data/lib/uniword/wordprocessingml/table_properties.rb +352 -0
- data/lib/uniword/wordprocessingml/table_row.rb +79 -0
- data/lib/uniword/wordprocessingml/table_row_properties.rb +58 -0
- data/lib/uniword/wordprocessingml/table_style.rb +20 -0
- data/lib/uniword/wordprocessingml/text.rb +81 -0
- data/lib/uniword/wordprocessingml/text_box_content.rb +27 -0
- data/lib/uniword/wordprocessingml/text_direction.rb +19 -0
- data/lib/uniword/wordprocessingml/tr_height.rb +21 -0
- data/lib/uniword/wordprocessingml/ui_priority.rb +22 -0
- data/lib/uniword/wordprocessingml/val_int.rb +18 -0
- data/lib/uniword/wordprocessingml/w14_attributes.rb +47 -0
- data/lib/uniword/wordprocessingml/web_settings.rb +43 -0
- data/lib/uniword/wordprocessingml/width_after.rb +19 -0
- data/lib/uniword/wordprocessingml/width_before.rb +19 -0
- data/lib/uniword/wordprocessingml/zoom.rb +22 -0
- data/lib/uniword/wordprocessingml.rb +237 -0
- data/lib/uniword/wordprocessingml_2010/checkbox.rb +27 -0
- data/lib/uniword/wordprocessingml_2010/checked_state.rb +24 -0
- data/lib/uniword/wordprocessingml_2010/conditional_format_style.rb +30 -0
- data/lib/uniword/wordprocessingml_2010/conflict_deletion.rb +26 -0
- data/lib/uniword/wordprocessingml_2010/conflict_insertion.rb +26 -0
- data/lib/uniword/wordprocessingml_2010/conflict_mode.rb +22 -0
- data/lib/uniword/wordprocessingml_2010/custom_xml_conflict_insertion.rb +24 -0
- data/lib/uniword/wordprocessingml_2010/doc_id.rb +22 -0
- data/lib/uniword/wordprocessingml_2010/doc_part_gallery.rb +22 -0
- data/lib/uniword/wordprocessingml_2010/doc_part_obj.rb +27 -0
- data/lib/uniword/wordprocessingml_2010/entity_picker.rb +22 -0
- data/lib/uniword/wordprocessingml_2010/ligatures.rb +22 -0
- data/lib/uniword/wordprocessingml_2010/number_form.rb +22 -0
- data/lib/uniword/wordprocessingml_2010/para_id.rb +22 -0
- data/lib/uniword/wordprocessingml_2010/props3d.rb +26 -0
- data/lib/uniword/wordprocessingml_2010/sdt_content.rb +23 -0
- data/lib/uniword/wordprocessingml_2010/sdt_properties.rb +27 -0
- data/lib/uniword/wordprocessingml_2010/structured_document_tag.rb +25 -0
- data/lib/uniword/wordprocessingml_2010/text_fill.rb +27 -0
- data/lib/uniword/wordprocessingml_2010/text_glow.rb +25 -0
- data/lib/uniword/wordprocessingml_2010/text_id.rb +22 -0
- data/lib/uniword/wordprocessingml_2010/text_outline.rb +28 -0
- data/lib/uniword/wordprocessingml_2010/text_reflection.rb +28 -0
- data/lib/uniword/wordprocessingml_2010/text_shadow.rb +28 -0
- data/lib/uniword/wordprocessingml_2010/unchecked_state.rb +24 -0
- data/lib/uniword/wordprocessingml_2010.rb +44 -0
- data/lib/uniword/wordprocessingml_2013/chart_props.rb +25 -0
- data/lib/uniword/wordprocessingml_2013/chart_tracking_ref_based.rb +22 -0
- data/lib/uniword/wordprocessingml_2013/comment_author.rb +26 -0
- data/lib/uniword/wordprocessingml_2013/comment_collapsed.rb +22 -0
- data/lib/uniword/wordprocessingml_2013/comment_done.rb +22 -0
- data/lib/uniword/wordprocessingml_2013/comment_ex.rb +26 -0
- data/lib/uniword/wordprocessingml_2013/comments_ids.rb +23 -0
- data/lib/uniword/wordprocessingml_2013/doc_part_anchor.rb +22 -0
- data/lib/uniword/wordprocessingml_2013/document_part.rb +22 -0
- data/lib/uniword/wordprocessingml_2013/footnote_columns.rb +22 -0
- data/lib/uniword/wordprocessingml_2013/people_group.rb +25 -0
- data/lib/uniword/wordprocessingml_2013/person.rb +26 -0
- data/lib/uniword/wordprocessingml_2013/presence_info.rb +24 -0
- data/lib/uniword/wordprocessingml_2013/repeating_section.rb +25 -0
- data/lib/uniword/wordprocessingml_2013/repeating_section_item.rb +22 -0
- data/lib/uniword/wordprocessingml_2013/sdt_appearance.rb +22 -0
- data/lib/uniword/wordprocessingml_2013/sdt_color.rb +22 -0
- data/lib/uniword/wordprocessingml_2013/sdt_data_binding.rb +24 -0
- data/lib/uniword/wordprocessingml_2013/web_extension.rb +22 -0
- data/lib/uniword/wordprocessingml_2013/web_extension_linked.rb +22 -0
- data/lib/uniword/wordprocessingml_2013.rb +38 -0
- data/lib/uniword/wordprocessingml_2016/cell_rsid.rb +22 -0
- data/lib/uniword/wordprocessingml_2016/chart_color_style.rb +22 -0
- data/lib/uniword/wordprocessingml_2016/chart_style2016.rb +22 -0
- data/lib/uniword/wordprocessingml_2016/comments_ext.rb +24 -0
- data/lib/uniword/wordprocessingml_2016/conflict_mode2016.rb +22 -0
- data/lib/uniword/wordprocessingml_2016/content_id.rb +22 -0
- data/lib/uniword/wordprocessingml_2016/data_binding2016.rb +26 -0
- data/lib/uniword/wordprocessingml_2016/extension.rb +25 -0
- data/lib/uniword/wordprocessingml_2016/extension_list.rb +23 -0
- data/lib/uniword/wordprocessingml_2016/persistent_document_id.rb +22 -0
- data/lib/uniword/wordprocessingml_2016/row_rsid.rb +22 -0
- data/lib/uniword/wordprocessingml_2016/sdt_appearance2016.rb +22 -0
- data/lib/uniword/wordprocessingml_2016/separator_extension.rb +22 -0
- data/lib/uniword/wordprocessingml_2016/table_rsid.rb +22 -0
- data/lib/uniword/wordprocessingml_2016/web_video_property.rb +24 -0
- data/lib/uniword/wordprocessingml_2016.rb +33 -0
- data/lib/uniword/wp_drawing/align.rb +22 -0
- data/lib/uniword/wp_drawing/allow_overlap.rb +22 -0
- data/lib/uniword/wp_drawing/anchor.rb +80 -0
- data/lib/uniword/wp_drawing/behind_doc.rb +22 -0
- data/lib/uniword/wp_drawing/c_nv_graphic_frame_pr.rb +23 -0
- data/lib/uniword/wp_drawing/doc_pr.rb +30 -0
- data/lib/uniword/wp_drawing/doc_properties.rb +27 -0
- data/lib/uniword/wp_drawing/effect_extent.rb +28 -0
- data/lib/uniword/wp_drawing/extent.rb +24 -0
- data/lib/uniword/wp_drawing/hidden.rb +22 -0
- data/lib/uniword/wp_drawing/inline.rb +38 -0
- data/lib/uniword/wp_drawing/layout_in_cell.rb +22 -0
- data/lib/uniword/wp_drawing/line_to.rb +24 -0
- data/lib/uniword/wp_drawing/locked.rb +22 -0
- data/lib/uniword/wp_drawing/non_visual_drawing_props.rb +20 -0
- data/lib/uniword/wp_drawing/pos_offset.rb +22 -0
- data/lib/uniword/wp_drawing/position_h.rb +27 -0
- data/lib/uniword/wp_drawing/position_v.rb +27 -0
- data/lib/uniword/wp_drawing/relative_height.rb +22 -0
- data/lib/uniword/wp_drawing/simple_pos.rb +24 -0
- data/lib/uniword/wp_drawing/size_rel_h.rb +25 -0
- data/lib/uniword/wp_drawing/size_rel_v.rb +25 -0
- data/lib/uniword/wp_drawing/start.rb +24 -0
- data/lib/uniword/wp_drawing/wrap_none.rb +18 -0
- data/lib/uniword/wp_drawing/wrap_polygon.rb +27 -0
- data/lib/uniword/wp_drawing/wrap_square.rb +33 -0
- data/lib/uniword/wp_drawing/wrap_through.rb +29 -0
- data/lib/uniword/wp_drawing/wrap_tight.rb +29 -0
- data/lib/uniword/wp_drawing/wrap_top_and_bottom.rb +27 -0
- data/lib/uniword/wp_drawing.rb +55 -0
- data/lib/uniword.rb +295 -0
- metadata +1386 -0
|
@@ -0,0 +1,1406 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'nokogiri'
|
|
4
|
+
|
|
5
|
+
module Uniword
|
|
6
|
+
module Transformation
|
|
7
|
+
# Converts OOXML DocumentRoot to Mhtml::Document for full-fidelity MHT output.
|
|
8
|
+
#
|
|
9
|
+
# This is COMPLETELY SEPARATE from OoxmlToHtmlConverter which produces HTML5.
|
|
10
|
+
# This converter produces Word HTML4 with proper MIME multipart structure.
|
|
11
|
+
#
|
|
12
|
+
# @example Transform DOCX to MHT
|
|
13
|
+
# docx_doc = Uniword::Ooxml::DocxPackage.from_file("document.docx")
|
|
14
|
+
# mhtml_doc = OoxmlToMhtmlConverter.document_to_mht(docx_doc)
|
|
15
|
+
# output = Uniword::Infrastructure::MimePackager.new(mhtml_doc).build_mime_content
|
|
16
|
+
#
|
|
17
|
+
class OoxmlToMhtmlConverter
|
|
18
|
+
# Convert OOXML DocumentRoot to Mhtml::Document
|
|
19
|
+
#
|
|
20
|
+
# @param document [Uniword::Wordprocessingml::DocumentRoot] OOXML document
|
|
21
|
+
# @param core_properties [Uniword::Ooxml::CoreProperties] Optional core properties
|
|
22
|
+
# (if not provided, uses document.core_properties which may be lazily initialized)
|
|
23
|
+
# @param relationships [Uniword::Ooxml::Relationships::PackageRelationships] Optional relationships
|
|
24
|
+
# @param document_name [String] Optional document name (e.g., 'blank'). If not provided,
|
|
25
|
+
# extracts from relationships or defaults to 'document'
|
|
26
|
+
# @return [Uniword::Mhtml::Document] MHT document model
|
|
27
|
+
def self.document_to_mht(document, core_properties = nil, relationships = nil,
|
|
28
|
+
document_name = nil)
|
|
29
|
+
converter = new(document, core_properties, relationships, document_name)
|
|
30
|
+
converter.build_mhtml_document
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Convert OOXML DocumentRoot to HTML body content (for Mhtml::HtmlPart)
|
|
34
|
+
#
|
|
35
|
+
# @param document [Uniword::Wordprocessingml::DocumentRoot] OOXML document
|
|
36
|
+
# @param core_properties [Uniword::Ooxml::CoreProperties] Optional core properties
|
|
37
|
+
# @param relationships [Uniword::Ooxml::Relationships::PackageRelationships] Optional relationships
|
|
38
|
+
# @return [String] Word HTML4 body content
|
|
39
|
+
def self.document_to_html_body(document, core_properties = nil, relationships = nil)
|
|
40
|
+
converter = new(document, core_properties, relationships)
|
|
41
|
+
converter.build_html_body
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def initialize(document, core_properties = nil, relationships = nil, document_name = nil)
|
|
45
|
+
@document = document
|
|
46
|
+
@relationships = relationships
|
|
47
|
+
@provided_document_name = document_name
|
|
48
|
+
# Use provided core_properties if given, otherwise use document's (which may be lazily initialized)
|
|
49
|
+
@core_properties = core_properties
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Get the core properties to use (provided or from document)
|
|
53
|
+
def core_properties
|
|
54
|
+
@core_properties || @document.core_properties
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Build the complete Mhtml::Document
|
|
58
|
+
def build_mhtml_document
|
|
59
|
+
mhtml_doc = Uniword::Mhtml::Document.new
|
|
60
|
+
|
|
61
|
+
# Build HTML content
|
|
62
|
+
html_content = build_html_body
|
|
63
|
+
html_part = Uniword::Mhtml::HtmlPart.new
|
|
64
|
+
html_part.content_type = 'text/html'
|
|
65
|
+
html_part.content_transfer_encoding = 'quoted-printable'
|
|
66
|
+
html_part.raw_content = html_content
|
|
67
|
+
html_part.content_location = "file:///C:/D057922B/#{document_name}.htm"
|
|
68
|
+
|
|
69
|
+
mhtml_doc.html_part = html_part
|
|
70
|
+
mhtml_doc.parts << html_part
|
|
71
|
+
|
|
72
|
+
# Build metadata
|
|
73
|
+
mhtml_doc.document_properties = build_document_properties
|
|
74
|
+
|
|
75
|
+
# Build filelist.xml
|
|
76
|
+
filelist_part = build_filelist_part
|
|
77
|
+
mhtml_doc.parts << filelist_part if filelist_part
|
|
78
|
+
|
|
79
|
+
# Build image parts from document.image_parts
|
|
80
|
+
image_parts = build_image_parts
|
|
81
|
+
image_parts.each do |image_part|
|
|
82
|
+
mhtml_doc.parts << image_part
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Generate deterministic boundary based on document name
|
|
86
|
+
# Word uses format: ----=_NextPart_XXXX.XXXX
|
|
87
|
+
hash = document_name.gsub(/[^a-zA-Z0-9]/, '').upcase[0..7] || 'DOC'
|
|
88
|
+
mhtml_doc.boundary = "----=_NextPart_01DC60F8.#{hash}"
|
|
89
|
+
|
|
90
|
+
mhtml_doc
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Build the HTML body content
|
|
94
|
+
def build_html_body
|
|
95
|
+
body = @document.body
|
|
96
|
+
return '' unless body
|
|
97
|
+
|
|
98
|
+
paragraphs_html = body.elements.map do |element|
|
|
99
|
+
element_to_html(element)
|
|
100
|
+
end.join("\n")
|
|
101
|
+
|
|
102
|
+
wrap_html_document(paragraphs_html)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
private
|
|
106
|
+
|
|
107
|
+
# Build document properties from core properties
|
|
108
|
+
def build_document_properties
|
|
109
|
+
props = Uniword::Mhtml::Metadata::DocumentProperties.new
|
|
110
|
+
cp = core_properties
|
|
111
|
+
|
|
112
|
+
if cp
|
|
113
|
+
props.author = cp.creator.to_s if cp.respond_to?(:creator) && cp.creator
|
|
114
|
+
# Use .value for date types, not .to_s (which returns object inspect)
|
|
115
|
+
props.created = cp.created.value.to_s if cp.respond_to?(:created) && cp.created
|
|
116
|
+
if cp.respond_to?(:last_modified_by) && cp.last_modified_by
|
|
117
|
+
props.last_author = cp.last_modified_by.to_s
|
|
118
|
+
end
|
|
119
|
+
props.last_saved = cp.modified.value.to_s if cp.respond_to?(:modified) && cp.modified
|
|
120
|
+
props.pages = cp.pages.to_s if cp.respond_to?(:pages) && cp.pages
|
|
121
|
+
props.words = cp.words.to_s if cp.respond_to?(:words) && cp.words
|
|
122
|
+
props.characters = cp.characters.to_s if cp.respond_to?(:characters) && cp.characters
|
|
123
|
+
props.application = 'Microsoft Word'
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
props
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# Build filelist.xml part
|
|
130
|
+
def build_filelist_part
|
|
131
|
+
# Build file list entries for images
|
|
132
|
+
image_entries = if @document.image_parts && !@document.image_parts.empty?
|
|
133
|
+
@document.image_parts.map do |_r_id, image_data|
|
|
134
|
+
%(<o:File HRef="#{image_data[:target]}"/>)
|
|
135
|
+
end.join("\n ")
|
|
136
|
+
else
|
|
137
|
+
''
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
filelist_xml = <<~XML
|
|
141
|
+
<xml xmlns:o="urn:schemas-microsoft-com:office:office">
|
|
142
|
+
<o:MainFile HRef="../#{document_name}.htm"/>
|
|
143
|
+
<o:File HRef="filelist.xml"/>
|
|
144
|
+
#{image_entries}
|
|
145
|
+
</xml>
|
|
146
|
+
XML
|
|
147
|
+
|
|
148
|
+
part = Uniword::Mhtml::XmlPart.new
|
|
149
|
+
part.content_type = 'text/xml; charset="utf-8"'
|
|
150
|
+
part.content_transfer_encoding = 'quoted-printable'
|
|
151
|
+
part.raw_content = filelist_xml
|
|
152
|
+
part.content_location = "file:///C:/D057922B/#{document_name}.fld/filelist.xml"
|
|
153
|
+
|
|
154
|
+
part
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# Build image parts from document.image_parts
|
|
158
|
+
#
|
|
159
|
+
# Each image in document.image_parts is a hash with:
|
|
160
|
+
# - data: binary image content
|
|
161
|
+
# - content_type: MIME type (e.g., 'image/png')
|
|
162
|
+
# - target: filename (e.g., 'image1.png')
|
|
163
|
+
#
|
|
164
|
+
# @return [Array<Uniword::Mhtml::ImagePart>] Array of image MIME parts
|
|
165
|
+
def build_image_parts
|
|
166
|
+
return [] unless @document.image_parts && !@document.image_parts.empty?
|
|
167
|
+
|
|
168
|
+
@document.image_parts.map do |_r_id, image_data|
|
|
169
|
+
part = Uniword::Mhtml::ImagePart.new
|
|
170
|
+
part.content_type = image_data[:content_type] || 'image/png'
|
|
171
|
+
part.content_transfer_encoding = 'base64'
|
|
172
|
+
part.raw_content = image_data[:data] # Binary data - MimePackager handles base64 encoding
|
|
173
|
+
# Use Content-Location matching the target filename in the MHT structure
|
|
174
|
+
part.content_location = "file:///C:/D057922B/#{document_name}.fld/#{image_data[:target]}"
|
|
175
|
+
part
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
# Wrap HTML content in full Word HTML document
|
|
180
|
+
def wrap_html_document(body_html)
|
|
181
|
+
metadata_comments = build_metadata_comments
|
|
182
|
+
meta_tags = build_meta_tags
|
|
183
|
+
link_tags = build_link_tags
|
|
184
|
+
style_block = build_style_block
|
|
185
|
+
|
|
186
|
+
<<~HTML
|
|
187
|
+
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
|
188
|
+
xmlns:w="urn:schemas-microsoft-com:office:word"
|
|
189
|
+
xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
|
|
190
|
+
xmlns="http://www.w3.org/TR/REC-html40">
|
|
191
|
+
<head>
|
|
192
|
+
#{meta_tags}
|
|
193
|
+
#{link_tags}
|
|
194
|
+
<!--[if gte mso 9]><xml>
|
|
195
|
+
<o:DocumentProperties xmlns:o="urn:schemas-microsoft-com:office:office">
|
|
196
|
+
#{metadata_comments}
|
|
197
|
+
</o:DocumentProperties>
|
|
198
|
+
#{build_custom_document_properties}
|
|
199
|
+
<o:OfficeDocumentSettings xmlns:o="urn:schemas-microsoft-com:office:office">
|
|
200
|
+
<o:AllowPNG/>
|
|
201
|
+
</o:OfficeDocumentSettings>
|
|
202
|
+
</xml><![endif]-->
|
|
203
|
+
<link rel=themeData href="#{document_name}.fld/themedata.thmx">
|
|
204
|
+
<link rel=colorSchemeMapping href="#{document_name}.fld/colorschememapping.xml">
|
|
205
|
+
<!--[if gte mso 9]><xml>
|
|
206
|
+
<w:WordDocument xmlns:w="urn:schemas-microsoft-com:office:word">
|
|
207
|
+
<w:TrackMoves>false</w:TrackMoves>
|
|
208
|
+
<w:TrackFormatting/>
|
|
209
|
+
<w:PunctuationKerning/>
|
|
210
|
+
<w:ValidateAgainstSchemas/>
|
|
211
|
+
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
|
|
212
|
+
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
|
|
213
|
+
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
|
|
214
|
+
<w:DoNotPromoteQF/>
|
|
215
|
+
<w:LidThemeOther>en-US</w:LidThemeOther>
|
|
216
|
+
<w:LidThemeAsian>ZH-CN</w:LidThemeAsian>
|
|
217
|
+
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
|
|
218
|
+
<w:Compatibility>
|
|
219
|
+
<w:BreakWrappedTables/>
|
|
220
|
+
<w:SnapToGridInCell/>
|
|
221
|
+
<w:WrapTextWithPunct/>
|
|
222
|
+
<w:UseAsianBreakRules/>
|
|
223
|
+
<w:DontGrowAutofit/>
|
|
224
|
+
<w:SplitPgBreakAndParaMark/>
|
|
225
|
+
<w:EnableOpenTypeKerning/>
|
|
226
|
+
<w:DontFlipMirrorIndents/>
|
|
227
|
+
<w:OverrideTableStyleHps/>
|
|
228
|
+
<w:UseFELayout/>
|
|
229
|
+
</w:Compatibility>
|
|
230
|
+
<w:MathPr>
|
|
231
|
+
<w:MathFont w:val="Cambria Math"/>
|
|
232
|
+
<w:brkBin w:val="before"/>
|
|
233
|
+
<w:brkBinSub w:val="--"/>
|
|
234
|
+
<w:smallFrac w:val="off"/>
|
|
235
|
+
<w:dispDef/>
|
|
236
|
+
<w:lMargin w:val="0"/>
|
|
237
|
+
<w:rMargin w:val="0"/>
|
|
238
|
+
<w:defJc w:val="centerGroup"/>
|
|
239
|
+
<w:wrapIndent w:val="1440"/>
|
|
240
|
+
<w:intLim w:val="subSup"/>
|
|
241
|
+
<w:naryLim w:val="undOvr"/>
|
|
242
|
+
</w:MathPr>
|
|
243
|
+
</w:WordDocument>
|
|
244
|
+
</xml><![endif]-->
|
|
245
|
+
<!--[if !mso]>
|
|
246
|
+
<style>
|
|
247
|
+
v:* {behavior:url(#default#VML);}
|
|
248
|
+
o:* {behavior:url(#default#VML);}
|
|
249
|
+
w:* {behavior:url(#default#VML);}
|
|
250
|
+
.shape {behavior:url(#default#VML);}
|
|
251
|
+
</style>
|
|
252
|
+
<![endif]-->
|
|
253
|
+
#{build_latent_styles}
|
|
254
|
+
#{style_block}
|
|
255
|
+
<!--[if gte mso 10]>
|
|
256
|
+
<style>
|
|
257
|
+
/* Style Definitions */
|
|
258
|
+
table.MsoNormalTable
|
|
259
|
+
{mso-style-name:"Table Normal";
|
|
260
|
+
mso-tstyle-rowband-size:0;
|
|
261
|
+
mso-tstyle-colband-size:0;
|
|
262
|
+
mso-style-noshow:yes;
|
|
263
|
+
mso-style-priority:99;
|
|
264
|
+
mso-style-parent:"";
|
|
265
|
+
mso-padding-alt:0in 5.4pt 0in 5.4pt;
|
|
266
|
+
mso-para-margin-top:0in;
|
|
267
|
+
mso-para-margin-right:0in;
|
|
268
|
+
mso-para-margin-bottom:8.0pt;
|
|
269
|
+
mso-para-margin-left:0in;
|
|
270
|
+
line-height:115%;
|
|
271
|
+
mso-pagination:widow-orphan;
|
|
272
|
+
font-size:12.0pt;
|
|
273
|
+
font-family:"Aptos",sans-serif;
|
|
274
|
+
mso-ascii-font-family:Aptos;
|
|
275
|
+
mso-ascii-theme-font:minor-latin;
|
|
276
|
+
mso-hansi-font-family:Aptos;
|
|
277
|
+
mso-hansi-theme-font:minor-latin;
|
|
278
|
+
mso-font-kerning:1.0pt;
|
|
279
|
+
mso-ligatures:standardcontextual;}
|
|
280
|
+
</style>
|
|
281
|
+
<![endif]-->
|
|
282
|
+
</head>
|
|
283
|
+
<body lang=EN-US style='tab-interval:.5in;word-wrap:break-word'>
|
|
284
|
+
|
|
285
|
+
<div class=WordSection1>
|
|
286
|
+
|
|
287
|
+
#{body_html}
|
|
288
|
+
|
|
289
|
+
</div>
|
|
290
|
+
|
|
291
|
+
</body>
|
|
292
|
+
</html>
|
|
293
|
+
HTML
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
# Build the o:DocumentProperties content lines
|
|
297
|
+
def build_metadata_comments
|
|
298
|
+
props = core_properties
|
|
299
|
+
return '' unless props
|
|
300
|
+
|
|
301
|
+
author = props.respond_to?(:creator) ? props.creator : nil
|
|
302
|
+
last_author = props.respond_to?(:last_modified_by) ? props.last_modified_by : nil
|
|
303
|
+
revision = props.respond_to?(:revision) ? props.revision : nil
|
|
304
|
+
# created and modified are specialized types, use .value to get the actual date
|
|
305
|
+
created = props.respond_to?(:created) && props.created ? props.created.value : nil
|
|
306
|
+
last_saved = props.respond_to?(:modified) && props.modified ? props.modified.value : nil
|
|
307
|
+
|
|
308
|
+
# Calculate document statistics
|
|
309
|
+
stats = calculate_document_stats
|
|
310
|
+
|
|
311
|
+
doc_props = []
|
|
312
|
+
doc_props << " <o:Author>#{escape_xml(author)}</o:Author>" if author
|
|
313
|
+
doc_props << " <o:LastAuthor>#{escape_xml(last_author)}</o:LastAuthor>" if last_author
|
|
314
|
+
doc_props << " <o:Revision>#{escape_xml(revision)}</o:Revision>" if revision
|
|
315
|
+
doc_props << ' <o:TotalTime>0</o:TotalTime>'
|
|
316
|
+
doc_props << " <o:Created>#{escape_xml(created)}</o:Created>" if created
|
|
317
|
+
doc_props << " <o:LastSaved>#{escape_xml(last_saved)}</o:LastSaved>" if last_saved
|
|
318
|
+
doc_props << " <o:Pages>#{stats[:pages]}</o:Pages>"
|
|
319
|
+
doc_props << " <o:Words>#{stats[:words]}</o:Words>"
|
|
320
|
+
doc_props << " <o:Characters>#{stats[:characters]}</o:Characters>"
|
|
321
|
+
doc_props << " <o:Lines>#{stats[:lines]}</o:Lines>"
|
|
322
|
+
doc_props << " <o:Paragraphs>#{stats[:paragraphs]}</o:Paragraphs>"
|
|
323
|
+
doc_props << " <o:CharactersWithSpaces>#{stats[:characters_with_spaces]}</o:CharactersWithSpaces>"
|
|
324
|
+
doc_props << ' <o:Version>16.00</o:Version>'
|
|
325
|
+
|
|
326
|
+
doc_props.join("\n")
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
# Calculate document statistics from content
|
|
330
|
+
#
|
|
331
|
+
# @return [Hash] Statistics hash with :words, :characters, :paragraphs, :lines, :pages
|
|
332
|
+
def calculate_document_stats
|
|
333
|
+
words = 0
|
|
334
|
+
characters = 0
|
|
335
|
+
paragraphs = 0
|
|
336
|
+
lines = 0
|
|
337
|
+
|
|
338
|
+
body = @document.body
|
|
339
|
+
unless body
|
|
340
|
+
return { words: 0, characters: 0, paragraphs: 0, lines: 0, pages: 1,
|
|
341
|
+
characters_with_spaces: 0 }
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
body.elements.each do |element|
|
|
345
|
+
next unless element.is_a?(Uniword::Wordprocessingml::Paragraph)
|
|
346
|
+
|
|
347
|
+
paragraphs += 1
|
|
348
|
+
para_words = 0
|
|
349
|
+
para_chars = 0
|
|
350
|
+
|
|
351
|
+
element.runs.each do |run|
|
|
352
|
+
text = run.text.to_s
|
|
353
|
+
characters += text.length
|
|
354
|
+
para_chars += text.length
|
|
355
|
+
words += text.split.length
|
|
356
|
+
para_words += text.split.length
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
# Estimate lines from paragraph (rough: 12pt font, 6 lines per inch, 11 inch page)
|
|
360
|
+
para_lines = [1, (para_chars / 80.0).ceil].max
|
|
361
|
+
lines += para_lines
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
# Rough page estimate: ~500 words per page, 24 lines per page
|
|
365
|
+
pages = [1, (words / 500.0).ceil, (lines / 24.0).ceil].max
|
|
366
|
+
|
|
367
|
+
{
|
|
368
|
+
words: words,
|
|
369
|
+
characters: characters,
|
|
370
|
+
paragraphs: paragraphs,
|
|
371
|
+
lines: lines,
|
|
372
|
+
pages: pages,
|
|
373
|
+
characters_with_spaces: characters + paragraphs # rough estimate
|
|
374
|
+
}
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
# Build o:CustomDocumentProperties for AssetID and other custom fields
|
|
378
|
+
#
|
|
379
|
+
# @return [String] CustomDocumentProperties XML or empty string
|
|
380
|
+
def build_custom_document_properties
|
|
381
|
+
# Check if document has custom properties with AssetID
|
|
382
|
+
asset_id = custom_property('AssetID')
|
|
383
|
+
return '' unless asset_id
|
|
384
|
+
|
|
385
|
+
<<~XML
|
|
386
|
+
<o:CustomDocumentProperties xmlns:o="urn:schemas-microsoft-com:office:office">
|
|
387
|
+
<o:AssetID dt:dt="string">#{escape_xml(asset_id)}</o:AssetID>
|
|
388
|
+
</o:CustomDocumentProperties>
|
|
389
|
+
XML
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
# Get a custom document property by name
|
|
393
|
+
#
|
|
394
|
+
# @param name [String] Property name
|
|
395
|
+
# @return [String, nil] Property value or nil
|
|
396
|
+
def custom_property(name)
|
|
397
|
+
# Try to get from core_properties via custom_properties hash
|
|
398
|
+
if @document.respond_to?(:core_properties) && @document.core_properties
|
|
399
|
+
cp = @document.core_properties
|
|
400
|
+
if cp.respond_to?(:custom_properties) && cp.custom_properties
|
|
401
|
+
return cp.custom_properties[name]
|
|
402
|
+
end
|
|
403
|
+
end
|
|
404
|
+
nil
|
|
405
|
+
end
|
|
406
|
+
|
|
407
|
+
# Build meta tags for the head
|
|
408
|
+
def build_meta_tags
|
|
409
|
+
<<~META
|
|
410
|
+
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
|
|
411
|
+
<meta name=ProgId content=Word.Document>
|
|
412
|
+
<meta name=Generator content="Microsoft Word 15">
|
|
413
|
+
<meta name=Originator content="Microsoft Word 15">
|
|
414
|
+
META
|
|
415
|
+
end
|
|
416
|
+
|
|
417
|
+
# Build link tags for the head
|
|
418
|
+
def build_link_tags
|
|
419
|
+
<<~LINK
|
|
420
|
+
<link rel=File-List href="#{document_name}.fld/filelist.xml">
|
|
421
|
+
LINK
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
# Get document name - use provided name, or extract from relationships, or default
|
|
425
|
+
def document_name
|
|
426
|
+
@document_name ||= @provided_document_name || begin
|
|
427
|
+
# Try package_rels (has the main document relationship)
|
|
428
|
+
if @relationships
|
|
429
|
+
rel = @relationships.relationships.find do |r|
|
|
430
|
+
r.target.to_s.include?('document.xml')
|
|
431
|
+
end
|
|
432
|
+
if rel
|
|
433
|
+
target = rel.target # e.g., "word/document.xml"
|
|
434
|
+
# Extract "document" from "word/document.xml"
|
|
435
|
+
parts = target.split('/')
|
|
436
|
+
return parts.last.sub(/\.xml$/, '') if parts.last
|
|
437
|
+
end
|
|
438
|
+
end
|
|
439
|
+
# Fallback to document_rels from document itself
|
|
440
|
+
location = @document.document_rels&.relationships&.first&.target || 'document'
|
|
441
|
+
File.basename(location, '.*')
|
|
442
|
+
rescue StandardError
|
|
443
|
+
'document'
|
|
444
|
+
end
|
|
445
|
+
end
|
|
446
|
+
|
|
447
|
+
# Build the w:LatentStyles block with all 376 entries
|
|
448
|
+
def build_latent_styles
|
|
449
|
+
<<~LATENT
|
|
450
|
+
<!--[if gte mso 9]><xml>
|
|
451
|
+
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="false"
|
|
452
|
+
DefSemiHidden="false" DefQFormat="false" DefPriority="99"
|
|
453
|
+
LatentStyleCount="376">
|
|
454
|
+
<w:LsdException Locked="false" Priority="0" QFormat="true" Name="Normal"/>
|
|
455
|
+
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 1"/>
|
|
456
|
+
<w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 2"/>
|
|
457
|
+
<w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 3"/>
|
|
458
|
+
<w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 4"/>
|
|
459
|
+
<w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 5"/>
|
|
460
|
+
<w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 6"/>
|
|
461
|
+
<w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 7"/>
|
|
462
|
+
<w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 8"/>
|
|
463
|
+
<w:LsdException Locked="false" Priority="9" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="heading 9"/>
|
|
464
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 1"/>
|
|
465
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 2"/>
|
|
466
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 3"/>
|
|
467
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 4"/>
|
|
468
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 5"/>
|
|
469
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 6"/>
|
|
470
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 7"/>
|
|
471
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 8"/>
|
|
472
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index 9"/>
|
|
473
|
+
<w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 1"/>
|
|
474
|
+
<w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 2"/>
|
|
475
|
+
<w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 3"/>
|
|
476
|
+
<w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 4"/>
|
|
477
|
+
<w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 5"/>
|
|
478
|
+
<w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 6"/>
|
|
479
|
+
<w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 7"/>
|
|
480
|
+
<w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 8"/>
|
|
481
|
+
<w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" Name="toc 9"/>
|
|
482
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Normal Indent"/>
|
|
483
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="footnote text"/>
|
|
484
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="annotation text"/>
|
|
485
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="header"/>
|
|
486
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="footer"/>
|
|
487
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="index heading"/>
|
|
488
|
+
<w:LsdException Locked="false" Priority="35" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="caption"/>
|
|
489
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="table of figures"/>
|
|
490
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="envelope address"/>
|
|
491
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="envelope return"/>
|
|
492
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="footnote reference"/>
|
|
493
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="annotation reference"/>
|
|
494
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="line number"/>
|
|
495
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="page number"/>
|
|
496
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="endnote reference"/>
|
|
497
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="endnote text"/>
|
|
498
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="table of authorities"/>
|
|
499
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="macro"/>
|
|
500
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="toa heading"/>
|
|
501
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List"/>
|
|
502
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet"/>
|
|
503
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number"/>
|
|
504
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 2"/>
|
|
505
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 3"/>
|
|
506
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 4"/>
|
|
507
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List 5"/>
|
|
508
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 2"/>
|
|
509
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 3"/>
|
|
510
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 4"/>
|
|
511
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Bullet 5"/>
|
|
512
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 2"/>
|
|
513
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 3"/>
|
|
514
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 4"/>
|
|
515
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Number 5"/>
|
|
516
|
+
<w:LsdException Locked="false" Priority="10" QFormat="true" Name="Title"/>
|
|
517
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Closing"/>
|
|
518
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Signature"/>
|
|
519
|
+
<w:LsdException Locked="false" Priority="1" SemiHidden="true" UnhideWhenUsed="true" Name="Default Paragraph Font"/>
|
|
520
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text"/>
|
|
521
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text Indent"/>
|
|
522
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue"/>
|
|
523
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 2"/>
|
|
524
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 3"/>
|
|
525
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 4"/>
|
|
526
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="List Continue 5"/>
|
|
527
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Message Header"/>
|
|
528
|
+
<w:LsdException Locked="false" Priority="11" QFormat="true" Name="Subtitle"/>
|
|
529
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Salutation"/>
|
|
530
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Date"/>
|
|
531
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text First Indent"/>
|
|
532
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text First Indent 2"/>
|
|
533
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Note Heading"/>
|
|
534
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text 2"/>
|
|
535
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text 3"/>
|
|
536
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text Indent 2"/>
|
|
537
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Body Text Indent 3"/>
|
|
538
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Block Text"/>
|
|
539
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Hyperlink"/>
|
|
540
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="FollowedHyperlink"/>
|
|
541
|
+
<w:LsdException Locked="false" Priority="22" QFormat="true" Name="Strong"/>
|
|
542
|
+
<w:LsdException Locked="false" Priority="20" QFormat="true" Name="Emphasis"/>
|
|
543
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Document Map"/>
|
|
544
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Plain Text"/>
|
|
545
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="E-mail Signature"/>
|
|
546
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Top of Form"/>
|
|
547
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Bottom of Form"/>
|
|
548
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Normal (Web)"/>
|
|
549
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Acronym"/>
|
|
550
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Address"/>
|
|
551
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Cite"/>
|
|
552
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Code"/>
|
|
553
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Definition"/>
|
|
554
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Keyboard"/>
|
|
555
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Preformatted"/>
|
|
556
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Sample"/>
|
|
557
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Typewriter"/>
|
|
558
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="HTML Variable"/>
|
|
559
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Normal Table"/>
|
|
560
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="annotation subject"/>
|
|
561
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="No List"/>
|
|
562
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Outline List 1"/>
|
|
563
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Outline List 2"/>
|
|
564
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Outline List 3"/>
|
|
565
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Simple 1"/>
|
|
566
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Simple 2"/>
|
|
567
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Simple 3"/>
|
|
568
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 1"/>
|
|
569
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 2"/>
|
|
570
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 3"/>
|
|
571
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Classic 4"/>
|
|
572
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Colorful 1"/>
|
|
573
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Colorful 2"/>
|
|
574
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Colorful 3"/>
|
|
575
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 1"/>
|
|
576
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 2"/>
|
|
577
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 3"/>
|
|
578
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 4"/>
|
|
579
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Columns 5"/>
|
|
580
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 1"/>
|
|
581
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 2"/>
|
|
582
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 3"/>
|
|
583
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 4"/>
|
|
584
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 5"/>
|
|
585
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 6"/>
|
|
586
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 7"/>
|
|
587
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Grid 8"/>
|
|
588
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 1"/>
|
|
589
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 2"/>
|
|
590
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 3"/>
|
|
591
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 4"/>
|
|
592
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 5"/>
|
|
593
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 6"/>
|
|
594
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 7"/>
|
|
595
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table List 8"/>
|
|
596
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table 3D effects 1"/>
|
|
597
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table 3D effects 2"/>
|
|
598
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table 3D effects 3"/>
|
|
599
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Contemporary"/>
|
|
600
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Elegant"/>
|
|
601
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Professional"/>
|
|
602
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Subtle 1"/>
|
|
603
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Subtle 2"/>
|
|
604
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Web 1"/>
|
|
605
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Web 2"/>
|
|
606
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Web 3"/>
|
|
607
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Balloon Text"/>
|
|
608
|
+
<w:LsdException Locked="false" Priority="39" Name="Table Grid"/>
|
|
609
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Table Theme"/>
|
|
610
|
+
<w:LsdException Locked="false" SemiHidden="true" Name="Placeholder Text"/>
|
|
611
|
+
<w:LsdException Locked="false" Priority="1" QFormat="true" Name="No Spacing"/>
|
|
612
|
+
<w:LsdException Locked="false" Priority="60" Name="Light Shading"/>
|
|
613
|
+
<w:LsdException Locked="false" Priority="61" Name="Light List"/>
|
|
614
|
+
<w:LsdException Locked="false" Priority="62" Name="Light Grid"/>
|
|
615
|
+
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1"/>
|
|
616
|
+
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2"/>
|
|
617
|
+
<w:LsdException Locked="false" Priority="65" Name="Medium List 1"/>
|
|
618
|
+
<w:LsdException Locked="false" Priority="66" Name="Medium List 2"/>
|
|
619
|
+
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1"/>
|
|
620
|
+
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2"/>
|
|
621
|
+
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3"/>
|
|
622
|
+
<w:LsdException Locked="false" Priority="70" Name="Dark List"/>
|
|
623
|
+
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading"/>
|
|
624
|
+
<w:LsdException Locked="false" Priority="72" Name="Colorful List"/>
|
|
625
|
+
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid"/>
|
|
626
|
+
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 1"/>
|
|
627
|
+
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 1"/>
|
|
628
|
+
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 1"/>
|
|
629
|
+
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 1"/>
|
|
630
|
+
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 1"/>
|
|
631
|
+
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 1"/>
|
|
632
|
+
<w:LsdException Locked="false" SemiHidden="true" Name="Revision"/>
|
|
633
|
+
<w:LsdException Locked="false" Priority="34" QFormat="true" Name="List Paragraph"/>
|
|
634
|
+
<w:LsdException Locked="false" Priority="29" QFormat="true" Name="Quote"/>
|
|
635
|
+
<w:LsdException Locked="false" Priority="30" QFormat="true" Name="Intense Quote"/>
|
|
636
|
+
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 1"/>
|
|
637
|
+
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 1"/>
|
|
638
|
+
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 1"/>
|
|
639
|
+
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 1"/>
|
|
640
|
+
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 1"/>
|
|
641
|
+
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 1"/>
|
|
642
|
+
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 1"/>
|
|
643
|
+
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 1"/>
|
|
644
|
+
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 2"/>
|
|
645
|
+
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 2"/>
|
|
646
|
+
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 2"/>
|
|
647
|
+
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 2"/>
|
|
648
|
+
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 2"/>
|
|
649
|
+
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 2"/>
|
|
650
|
+
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 2"/>
|
|
651
|
+
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 2"/>
|
|
652
|
+
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 2"/>
|
|
653
|
+
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 2"/>
|
|
654
|
+
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 2"/>
|
|
655
|
+
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 2"/>
|
|
656
|
+
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 2"/>
|
|
657
|
+
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 2"/>
|
|
658
|
+
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 3"/>
|
|
659
|
+
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 3"/>
|
|
660
|
+
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 3"/>
|
|
661
|
+
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 3"/>
|
|
662
|
+
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 3"/>
|
|
663
|
+
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 3"/>
|
|
664
|
+
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 3"/>
|
|
665
|
+
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 3"/>
|
|
666
|
+
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 3"/>
|
|
667
|
+
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 3"/>
|
|
668
|
+
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 3"/>
|
|
669
|
+
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 3"/>
|
|
670
|
+
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 3"/>
|
|
671
|
+
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 3"/>
|
|
672
|
+
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 4"/>
|
|
673
|
+
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 4"/>
|
|
674
|
+
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 4"/>
|
|
675
|
+
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 4"/>
|
|
676
|
+
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 4"/>
|
|
677
|
+
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 4"/>
|
|
678
|
+
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 4"/>
|
|
679
|
+
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 4"/>
|
|
680
|
+
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 4"/>
|
|
681
|
+
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 4"/>
|
|
682
|
+
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 4"/>
|
|
683
|
+
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 4"/>
|
|
684
|
+
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 4"/>
|
|
685
|
+
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 4"/>
|
|
686
|
+
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 5"/>
|
|
687
|
+
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 5"/>
|
|
688
|
+
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 5"/>
|
|
689
|
+
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 5"/>
|
|
690
|
+
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 5"/>
|
|
691
|
+
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 5"/>
|
|
692
|
+
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 5"/>
|
|
693
|
+
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 5"/>
|
|
694
|
+
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 5"/>
|
|
695
|
+
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 5"/>
|
|
696
|
+
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 5"/>
|
|
697
|
+
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 5"/>
|
|
698
|
+
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 5"/>
|
|
699
|
+
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 5"/>
|
|
700
|
+
<w:LsdException Locked="false" Priority="60" Name="Light Shading Accent 6"/>
|
|
701
|
+
<w:LsdException Locked="false" Priority="61" Name="Light List Accent 6"/>
|
|
702
|
+
<w:LsdException Locked="false" Priority="62" Name="Light Grid Accent 6"/>
|
|
703
|
+
<w:LsdException Locked="false" Priority="63" Name="Medium Shading 1 Accent 6"/>
|
|
704
|
+
<w:LsdException Locked="false" Priority="64" Name="Medium Shading 2 Accent 6"/>
|
|
705
|
+
<w:LsdException Locked="false" Priority="65" Name="Medium List 1 Accent 6"/>
|
|
706
|
+
<w:LsdException Locked="false" Priority="66" Name="Medium List 2 Accent 6"/>
|
|
707
|
+
<w:LsdException Locked="false" Priority="67" Name="Medium Grid 1 Accent 6"/>
|
|
708
|
+
<w:LsdException Locked="false" Priority="68" Name="Medium Grid 2 Accent 6"/>
|
|
709
|
+
<w:LsdException Locked="false" Priority="69" Name="Medium Grid 3 Accent 6"/>
|
|
710
|
+
<w:LsdException Locked="false" Priority="70" Name="Dark List Accent 6"/>
|
|
711
|
+
<w:LsdException Locked="false" Priority="71" Name="Colorful Shading Accent 6"/>
|
|
712
|
+
<w:LsdException Locked="false" Priority="72" Name="Colorful List Accent 6"/>
|
|
713
|
+
<w:LsdException Locked="false" Priority="73" Name="Colorful Grid Accent 6"/>
|
|
714
|
+
<w:LsdException Locked="false" Priority="19" QFormat="true" Name="Subtle Emphasis"/>
|
|
715
|
+
<w:LsdException Locked="false" Priority="21" QFormat="true" Name="Intense Emphasis"/>
|
|
716
|
+
<w:LsdException Locked="false" Priority="31" QFormat="true" Name="Subtle Reference"/>
|
|
717
|
+
<w:LsdException Locked="false" Priority="32" QFormat="true" Name="Intense Reference"/>
|
|
718
|
+
<w:LsdException Locked="false" Priority="33" QFormat="true" Name="Book Title"/>
|
|
719
|
+
<w:LsdException Locked="false" Priority="37" SemiHidden="true" UnhideWhenUsed="true" Name="Bibliography"/>
|
|
720
|
+
<w:LsdException Locked="false" Priority="39" SemiHidden="true" UnhideWhenUsed="true" QFormat="true" Name="TOC Heading"/>
|
|
721
|
+
<w:LsdException Locked="false" Priority="41" Name="Plain Table 1"/>
|
|
722
|
+
<w:LsdException Locked="false" Priority="42" Name="Plain Table 2"/>
|
|
723
|
+
<w:LsdException Locked="false" Priority="43" Name="Plain Table 3"/>
|
|
724
|
+
<w:LsdException Locked="false" Priority="44" Name="Plain Table 4"/>
|
|
725
|
+
<w:LsdException Locked="false" Priority="45" Name="Plain Table 5"/>
|
|
726
|
+
<w:LsdException Locked="false" Priority="40" Name="Grid Table Light"/>
|
|
727
|
+
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light"/>
|
|
728
|
+
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2"/>
|
|
729
|
+
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3"/>
|
|
730
|
+
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4"/>
|
|
731
|
+
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark"/>
|
|
732
|
+
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful"/>
|
|
733
|
+
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful"/>
|
|
734
|
+
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 1"/>
|
|
735
|
+
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 1"/>
|
|
736
|
+
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 1"/>
|
|
737
|
+
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 1"/>
|
|
738
|
+
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 1"/>
|
|
739
|
+
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 1"/>
|
|
740
|
+
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 1"/>
|
|
741
|
+
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 2"/>
|
|
742
|
+
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 2"/>
|
|
743
|
+
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 2"/>
|
|
744
|
+
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 2"/>
|
|
745
|
+
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 2"/>
|
|
746
|
+
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 2"/>
|
|
747
|
+
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 2"/>
|
|
748
|
+
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 3"/>
|
|
749
|
+
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 3"/>
|
|
750
|
+
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 3"/>
|
|
751
|
+
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 3"/>
|
|
752
|
+
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 3"/>
|
|
753
|
+
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 3"/>
|
|
754
|
+
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 3"/>
|
|
755
|
+
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 4"/>
|
|
756
|
+
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 4"/>
|
|
757
|
+
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 4"/>
|
|
758
|
+
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 4"/>
|
|
759
|
+
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 4"/>
|
|
760
|
+
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 4"/>
|
|
761
|
+
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 4"/>
|
|
762
|
+
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 5"/>
|
|
763
|
+
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 5"/>
|
|
764
|
+
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 5"/>
|
|
765
|
+
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 5"/>
|
|
766
|
+
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 5"/>
|
|
767
|
+
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 5"/>
|
|
768
|
+
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 5"/>
|
|
769
|
+
<w:LsdException Locked="false" Priority="46" Name="Grid Table 1 Light Accent 6"/>
|
|
770
|
+
<w:LsdException Locked="false" Priority="47" Name="Grid Table 2 Accent 6"/>
|
|
771
|
+
<w:LsdException Locked="false" Priority="48" Name="Grid Table 3 Accent 6"/>
|
|
772
|
+
<w:LsdException Locked="false" Priority="49" Name="Grid Table 4 Accent 6"/>
|
|
773
|
+
<w:LsdException Locked="false" Priority="50" Name="Grid Table 5 Dark Accent 6"/>
|
|
774
|
+
<w:LsdException Locked="false" Priority="51" Name="Grid Table 6 Colorful Accent 6"/>
|
|
775
|
+
<w:LsdException Locked="false" Priority="52" Name="Grid Table 7 Colorful Accent 6"/>
|
|
776
|
+
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light"/>
|
|
777
|
+
<w:LsdException Locked="false" Priority="47" Name="List Table 2"/>
|
|
778
|
+
<w:LsdException Locked="false" Priority="48" Name="List Table 3"/>
|
|
779
|
+
<w:LsdException Locked="false" Priority="49" Name="List Table 4"/>
|
|
780
|
+
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark"/>
|
|
781
|
+
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful"/>
|
|
782
|
+
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful"/>
|
|
783
|
+
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 1"/>
|
|
784
|
+
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 1"/>
|
|
785
|
+
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 1"/>
|
|
786
|
+
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 1"/>
|
|
787
|
+
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 1"/>
|
|
788
|
+
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 1"/>
|
|
789
|
+
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 1"/>
|
|
790
|
+
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 2"/>
|
|
791
|
+
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 2"/>
|
|
792
|
+
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 2"/>
|
|
793
|
+
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 2"/>
|
|
794
|
+
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 2"/>
|
|
795
|
+
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 2"/>
|
|
796
|
+
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 2"/>
|
|
797
|
+
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 3"/>
|
|
798
|
+
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 3"/>
|
|
799
|
+
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 3"/>
|
|
800
|
+
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 3"/>
|
|
801
|
+
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 3"/>
|
|
802
|
+
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 3"/>
|
|
803
|
+
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 3"/>
|
|
804
|
+
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 4"/>
|
|
805
|
+
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 4"/>
|
|
806
|
+
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 4"/>
|
|
807
|
+
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 4"/>
|
|
808
|
+
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 4"/>
|
|
809
|
+
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 4"/>
|
|
810
|
+
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 4"/>
|
|
811
|
+
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 5"/>
|
|
812
|
+
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 5"/>
|
|
813
|
+
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 5"/>
|
|
814
|
+
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 5"/>
|
|
815
|
+
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 5"/>
|
|
816
|
+
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 5"/>
|
|
817
|
+
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 5"/>
|
|
818
|
+
<w:LsdException Locked="false" Priority="46" Name="List Table 1 Light Accent 6"/>
|
|
819
|
+
<w:LsdException Locked="false" Priority="47" Name="List Table 2 Accent 6"/>
|
|
820
|
+
<w:LsdException Locked="false" Priority="48" Name="List Table 3 Accent 6"/>
|
|
821
|
+
<w:LsdException Locked="false" Priority="49" Name="List Table 4 Accent 6"/>
|
|
822
|
+
<w:LsdException Locked="false" Priority="50" Name="List Table 5 Dark Accent 6"/>
|
|
823
|
+
<w:LsdException Locked="false" Priority="51" Name="List Table 6 Colorful Accent 6"/>
|
|
824
|
+
<w:LsdException Locked="false" Priority="52" Name="List Table 7 Colorful Accent 6"/>
|
|
825
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Mention"/>
|
|
826
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Smart Hyperlink"/>
|
|
827
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Hashtag"/>
|
|
828
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Unresolved Mention"/>
|
|
829
|
+
<w:LsdException Locked="false" SemiHidden="true" UnhideWhenUsed="true" Name="Smart Link"/>
|
|
830
|
+
</w:LatentStyles>
|
|
831
|
+
</xml><![endif]-->
|
|
832
|
+
LATENT
|
|
833
|
+
end
|
|
834
|
+
|
|
835
|
+
# Build the CSS style block
|
|
836
|
+
def build_style_block
|
|
837
|
+
<<~STYLE
|
|
838
|
+
<style>
|
|
839
|
+
<!--
|
|
840
|
+
/* Font Definitions */
|
|
841
|
+
@font-face
|
|
842
|
+
{font-family:"Cambria Math";
|
|
843
|
+
panose-1:2 4 5 3 5 4 6 3 2 4;
|
|
844
|
+
mso-font-charset:0;
|
|
845
|
+
mso-generic-font-family:roman;
|
|
846
|
+
mso-font-pitch:variable;
|
|
847
|
+
mso-font-signature:-536870145 1107305727 0 0 415 0;}
|
|
848
|
+
@font-face
|
|
849
|
+
{font-family:DengXian;
|
|
850
|
+
panose-1:2 1 6 0 3 1 1 1 1 1;
|
|
851
|
+
mso-font-alt:等线;
|
|
852
|
+
mso-font-charset:134;
|
|
853
|
+
mso-generic-font-family:modern;
|
|
854
|
+
mso-font-pitch:fixed;
|
|
855
|
+
mso-font-signature:1 135135232 16 0 262144 0;}
|
|
856
|
+
@font-face
|
|
857
|
+
{font-family:Aptos;
|
|
858
|
+
panose-1:2 11 0 4 2 2 2 2 2 4;
|
|
859
|
+
mso-font-charset:0;
|
|
860
|
+
mso-generic-font-family:swiss;
|
|
861
|
+
mso-font-pitch:variable;
|
|
862
|
+
mso-font-signature:536871559 3 0 0 415 0;}
|
|
863
|
+
@font-face
|
|
864
|
+
{font-family:"\\@DengXian";
|
|
865
|
+
panose-1:2 1 6 0 3 1 1 1 1 1;
|
|
866
|
+
mso-font-charset:134;
|
|
867
|
+
mso-generic-font-family:auto;
|
|
868
|
+
mso-font-pitch:variable;
|
|
869
|
+
mso-font-signature:-1610612033 953122042 22 0 262159 0;}
|
|
870
|
+
/* Style Definitions */
|
|
871
|
+
p.MsoNormal, li.MsoNormal, div.MsoNormal
|
|
872
|
+
{mso-style-unhide:no;
|
|
873
|
+
mso-style-qformat:yes;
|
|
874
|
+
mso-style-parent:"";
|
|
875
|
+
margin-top:0in;
|
|
876
|
+
margin-right:0in;
|
|
877
|
+
margin-bottom:8.0pt;
|
|
878
|
+
margin-left:0in;
|
|
879
|
+
line-height:115%;
|
|
880
|
+
mso-pagination:widow-orphan;
|
|
881
|
+
font-size:12.0pt;
|
|
882
|
+
font-family:"Aptos",sans-serif;
|
|
883
|
+
mso-ascii-font-family:Aptos;
|
|
884
|
+
mso-ascii-theme-font:minor-latin;
|
|
885
|
+
mso-fareast-font-family:DengXian;
|
|
886
|
+
mso-fareast-theme-font:minor-fareast;
|
|
887
|
+
mso-hansi-font-family:Aptos;
|
|
888
|
+
mso-hansi-theme-font:minor-latin;
|
|
889
|
+
mso-bidi-font-family:"Times New Roman";
|
|
890
|
+
mso-bidi-theme-font:minor-bidi;
|
|
891
|
+
mso-font-kerning:1.0pt;
|
|
892
|
+
mso-ligatures:standardcontextual;}
|
|
893
|
+
h1
|
|
894
|
+
{mso-style-priority:9;
|
|
895
|
+
mso-style-unhide:no;
|
|
896
|
+
mso-style-qformat:yes;
|
|
897
|
+
mso-style-link:"Heading 1 Char";
|
|
898
|
+
mso-style-next:Normal;
|
|
899
|
+
margin-top:.25in;
|
|
900
|
+
margin-right:0in;
|
|
901
|
+
margin-bottom:4.0pt;
|
|
902
|
+
margin-left:0in;
|
|
903
|
+
line-height:115%;
|
|
904
|
+
mso-pagination:widow-orphan lines-together;
|
|
905
|
+
page-break-after:avoid;
|
|
906
|
+
mso-outline-level:1;
|
|
907
|
+
font-size:20.0pt;
|
|
908
|
+
font-family:"Aptos Display",sans-serif;
|
|
909
|
+
mso-ascii-font-family:"Aptos Display";
|
|
910
|
+
mso-ascii-theme-font:major-latin;
|
|
911
|
+
mso-fareast-font-family:"DengXian Light";
|
|
912
|
+
mso-fareast-theme-font:major-fareast;
|
|
913
|
+
mso-hansi-font-family:"Aptos Display";
|
|
914
|
+
mso-hansi-theme-font:major-latin;
|
|
915
|
+
mso-bidi-font-family:"Times New Roman";
|
|
916
|
+
mso-bidi-theme-font:major-bidi;
|
|
917
|
+
color:#0F4761;
|
|
918
|
+
mso-themecolor:accent1;
|
|
919
|
+
mso-themeshade:191;
|
|
920
|
+
mso-font-kerning:1.0pt;
|
|
921
|
+
mso-ligatures:standardcontextual;
|
|
922
|
+
font-weight:normal;}
|
|
923
|
+
h2
|
|
924
|
+
{mso-style-noshow:yes;
|
|
925
|
+
mso-style-priority:9;
|
|
926
|
+
mso-style-qformat:yes;
|
|
927
|
+
mso-style-link:"Heading 2 Char";
|
|
928
|
+
mso-style-next:Normal;
|
|
929
|
+
margin-top:8.0pt;
|
|
930
|
+
margin-right:0in;
|
|
931
|
+
margin-bottom:4.0pt;
|
|
932
|
+
margin-left:0in;
|
|
933
|
+
line-height:115%;
|
|
934
|
+
mso-pagination:widow-orphan lines-together;
|
|
935
|
+
page-break-after:avoid;
|
|
936
|
+
mso-outline-level:2;
|
|
937
|
+
font-size:16.0pt;
|
|
938
|
+
font-family:"Aptos Display",sans-serif;
|
|
939
|
+
mso-ascii-font-family:"Aptos Display";
|
|
940
|
+
mso-ascii-theme-font:major-latin;
|
|
941
|
+
mso-fareast-font-family:"DengXian Light";
|
|
942
|
+
mso-fareast-theme-font:major-fareast;
|
|
943
|
+
mso-hansi-font-family:"Aptos Display";
|
|
944
|
+
mso-hansi-theme-font:major-latin;
|
|
945
|
+
mso-bidi-font-family:"Times New Roman";
|
|
946
|
+
mso-bidi-theme-font:major-bidi;
|
|
947
|
+
color:#0F4761;
|
|
948
|
+
mso-themecolor:accent1;
|
|
949
|
+
mso-themeshade:191;
|
|
950
|
+
mso-font-kerning:1.0pt;
|
|
951
|
+
mso-ligatures:standardcontextual;
|
|
952
|
+
font-weight:normal;}
|
|
953
|
+
h3
|
|
954
|
+
{mso-style-noshow:yes;
|
|
955
|
+
mso-style-priority:9;
|
|
956
|
+
mso-style-qformat:yes;
|
|
957
|
+
mso-style-link:"Heading 3 Char";
|
|
958
|
+
mso-style-next:Normal;
|
|
959
|
+
margin-top:8.0pt;
|
|
960
|
+
margin-right:0in;
|
|
961
|
+
margin-bottom:4.0pt;
|
|
962
|
+
margin-left:0in;
|
|
963
|
+
line-height:115%;
|
|
964
|
+
mso-pagination:widow-orphan lines-together;
|
|
965
|
+
page-break-after:avoid;
|
|
966
|
+
mso-outline-level:3;
|
|
967
|
+
font-size:14.0pt;
|
|
968
|
+
font-family:"Aptos",sans-serif;
|
|
969
|
+
mso-ascii-font-family:Aptos;
|
|
970
|
+
mso-ascii-theme-font:minor-latin;
|
|
971
|
+
mso-fareast-font-family:"DengXian Light";
|
|
972
|
+
mso-fareast-theme-font:major-fareast;
|
|
973
|
+
mso-hansi-font-family:Aptos;
|
|
974
|
+
mso-hansi-theme-font:minor-latin;
|
|
975
|
+
mso-bidi-font-family:"Times New Roman";
|
|
976
|
+
mso-bidi-theme-font:major-bidi;
|
|
977
|
+
color:#0F4761;
|
|
978
|
+
mso-themecolor:accent1;
|
|
979
|
+
mso-themeshade:191;
|
|
980
|
+
mso-font-kerning:1.0pt;
|
|
981
|
+
mso-ligatures:standardcontextual;
|
|
982
|
+
font-weight:normal;}
|
|
983
|
+
h4
|
|
984
|
+
{mso-style-noshow:yes;
|
|
985
|
+
mso-style-priority:9;
|
|
986
|
+
mso-style-qformat:yes;
|
|
987
|
+
mso-style-link:"Heading 4 Char";
|
|
988
|
+
mso-style-next:Normal;
|
|
989
|
+
margin-top:4.0pt;
|
|
990
|
+
margin-right:0in;
|
|
991
|
+
margin-bottom:2.0pt;
|
|
992
|
+
margin-left:0in;
|
|
993
|
+
line-height:115%;
|
|
994
|
+
mso-pagination:widow-orphan lines-together;
|
|
995
|
+
page-break-after:avoid;
|
|
996
|
+
mso-outline-level:4;
|
|
997
|
+
font-size:12.0pt;
|
|
998
|
+
font-family:"Aptos",sans-serif;
|
|
999
|
+
mso-ascii-font-family:Aptos;
|
|
1000
|
+
mso-ascii-theme-font:minor-latin;
|
|
1001
|
+
mso-fareast-font-family:"DengXian Light";
|
|
1002
|
+
mso-fareast-theme-font:major-fareast;
|
|
1003
|
+
mso-hansi-font-family:Aptos;
|
|
1004
|
+
mso-hansi-theme-font:minor-latin;
|
|
1005
|
+
mso-bidi-font-family:"Times New Roman";
|
|
1006
|
+
mso-bidi-theme-font:major-bidi;
|
|
1007
|
+
color:#0F4761;
|
|
1008
|
+
mso-themecolor:accent1;
|
|
1009
|
+
mso-themeshade:191;
|
|
1010
|
+
mso-font-kerning:1.0pt;
|
|
1011
|
+
mso-ligatures:standardcontextual;
|
|
1012
|
+
font-weight:normal;
|
|
1013
|
+
font-style:italic;}
|
|
1014
|
+
h5
|
|
1015
|
+
{mso-style-noshow:yes;
|
|
1016
|
+
mso-style-priority:9;
|
|
1017
|
+
mso-style-qformat:yes;
|
|
1018
|
+
mso-style-link:"Heading 5 Char";
|
|
1019
|
+
mso-style-next:Normal;
|
|
1020
|
+
margin-top:4.0pt;
|
|
1021
|
+
margin-right:0in;
|
|
1022
|
+
margin-bottom:2.0pt;
|
|
1023
|
+
margin-left:0in;
|
|
1024
|
+
line-height:115%;
|
|
1025
|
+
mso-pagination:widow-orphan lines-together;
|
|
1026
|
+
page-break-after:avoid;
|
|
1027
|
+
mso-outline-level:5;
|
|
1028
|
+
font-size:12.0pt;
|
|
1029
|
+
font-family:"Aptos",sans-serif;
|
|
1030
|
+
mso-ascii-font-family:Aptos;
|
|
1031
|
+
mso-ascii-theme-font:minor-latin;
|
|
1032
|
+
mso-fareast-font-family:"DengXian Light";
|
|
1033
|
+
mso-fareast-theme-font:major-fareast;
|
|
1034
|
+
mso-hansi-font-family:Aptos;
|
|
1035
|
+
mso-hansi-theme-font:minor-latin;
|
|
1036
|
+
mso-bidi-font-family:"Times New Roman";
|
|
1037
|
+
mso-bidi-theme-font:major-bidi;
|
|
1038
|
+
color:#0F4761;
|
|
1039
|
+
mso-themecolor:accent1;
|
|
1040
|
+
mso-themeshade:191;
|
|
1041
|
+
mso-font-kerning:1.0pt;
|
|
1042
|
+
mso-ligatures:standardcontextual;
|
|
1043
|
+
font-weight:normal;}
|
|
1044
|
+
h6
|
|
1045
|
+
{mso-style-noshow:yes;
|
|
1046
|
+
mso-style-priority:9;
|
|
1047
|
+
mso-style-qformat:yes;
|
|
1048
|
+
mso-style-link:"Heading 6 Char";
|
|
1049
|
+
mso-style-next:Normal;
|
|
1050
|
+
margin-top:2.0pt;
|
|
1051
|
+
margin-right:0in;
|
|
1052
|
+
margin-bottom:0in;
|
|
1053
|
+
margin-left:0in;
|
|
1054
|
+
line-height:115%;
|
|
1055
|
+
mso-pagination:widow-orphan lines-together;
|
|
1056
|
+
page-break-after:avoid;
|
|
1057
|
+
mso-outline-level:6;
|
|
1058
|
+
font-size:12.0pt;
|
|
1059
|
+
font-family:"Aptos",sans-serif;
|
|
1060
|
+
mso-ascii-font-family:Aptos;
|
|
1061
|
+
mso-ascii-theme-font:minor-latin;
|
|
1062
|
+
mso-fareast-font-family:"DengXian Light";
|
|
1063
|
+
mso-fareast-theme-font:major-fareast;
|
|
1064
|
+
mso-hansi-font-family:Aptos;
|
|
1065
|
+
mso-hansi-theme-font:minor-latin;
|
|
1066
|
+
mso-bidi-font-family:"Times New Roman";
|
|
1067
|
+
mso-bidi-theme-font:major-bidi;
|
|
1068
|
+
color:#595959;
|
|
1069
|
+
mso-themecolor:text1;
|
|
1070
|
+
mso-themetint:166;
|
|
1071
|
+
mso-font-kerning:1.0pt;
|
|
1072
|
+
mso-ligatures:standardcontextual;
|
|
1073
|
+
font-weight:normal;
|
|
1074
|
+
font-style:italic;}
|
|
1075
|
+
p.MsoTitle, li.MsoTitle, div.MsoTitle
|
|
1076
|
+
{mso-style-priority:10;
|
|
1077
|
+
mso-style-unhide:no;
|
|
1078
|
+
mso-style-qformat:yes;
|
|
1079
|
+
mso-style-link:"Title Char";
|
|
1080
|
+
mso-style-next:Normal;
|
|
1081
|
+
margin-top:0in;
|
|
1082
|
+
margin-right:0in;
|
|
1083
|
+
margin-bottom:4.0pt;
|
|
1084
|
+
margin-left:0in;
|
|
1085
|
+
mso-add-space:auto;
|
|
1086
|
+
mso-pagination:widow-orphan;
|
|
1087
|
+
font-size:28.0pt;
|
|
1088
|
+
font-family:"Aptos Display",sans-serif;
|
|
1089
|
+
mso-ascii-font-family:"Aptos Display";
|
|
1090
|
+
mso-ascii-theme-font:major-latin;
|
|
1091
|
+
mso-fareast-font-family:"DengXian Light";
|
|
1092
|
+
mso-fareast-theme-font:major-fareast;
|
|
1093
|
+
mso-hansi-font-family:"Aptos Display";
|
|
1094
|
+
mso-hansi-theme-font:major-latin;
|
|
1095
|
+
mso-bidi-font-family:"Times New Roman";
|
|
1096
|
+
mso-bidi-theme-font:major-bidi;
|
|
1097
|
+
letter-spacing:-.5pt;
|
|
1098
|
+
mso-font-kerning:14.0pt;
|
|
1099
|
+
mso-ligatures:standardcontextual;}
|
|
1100
|
+
p.MsoSubtitle, li.MsoSubtitle, div.MsoSubtitle
|
|
1101
|
+
{mso-style-priority:11;
|
|
1102
|
+
mso-style-unhide:no;
|
|
1103
|
+
mso-style-qformat:yes;
|
|
1104
|
+
mso-style-link:"Subtitle Char";
|
|
1105
|
+
mso-style-next:Normal;
|
|
1106
|
+
margin-top:0in;
|
|
1107
|
+
margin-right:0in;
|
|
1108
|
+
margin-bottom:8.0pt;
|
|
1109
|
+
margin-left:0in;
|
|
1110
|
+
line-height:115%;
|
|
1111
|
+
mso-pagination:widow-orphan;
|
|
1112
|
+
font-size:14.0pt;
|
|
1113
|
+
font-family:"Aptos",sans-serif;
|
|
1114
|
+
mso-ascii-font-family:Aptos;
|
|
1115
|
+
mso-ascii-theme-font:minor-latin;
|
|
1116
|
+
mso-fareast-font-family:"DengXian Light";
|
|
1117
|
+
mso-fareast-theme-font:major-fareast;
|
|
1118
|
+
mso-hansi-font-family:"Aptos Display";
|
|
1119
|
+
mso-hansi-theme-font:major-latin;
|
|
1120
|
+
mso-bidi-font-family:"Times New Roman";
|
|
1121
|
+
mso-bidi-theme-font:major-bidi;
|
|
1122
|
+
color:#595959;
|
|
1123
|
+
mso-themecolor:text1;
|
|
1124
|
+
mso-themetint:166;
|
|
1125
|
+
letter-spacing:.75pt;
|
|
1126
|
+
mso-font-kerning:1.0pt;
|
|
1127
|
+
mso-ligatures:standardcontextual;}
|
|
1128
|
+
@page WordSection1
|
|
1129
|
+
{size:8.5in 11.0in;
|
|
1130
|
+
margin:1.0in 1.0in 1.0in 1.0in;
|
|
1131
|
+
mso-header-margin:.5in;
|
|
1132
|
+
mso-footer-margin:.5in;
|
|
1133
|
+
mso-paper-source:0;}
|
|
1134
|
+
div.WordSection1
|
|
1135
|
+
{page:WordSection1;}
|
|
1136
|
+
-->
|
|
1137
|
+
</style>
|
|
1138
|
+
STYLE
|
|
1139
|
+
end
|
|
1140
|
+
|
|
1141
|
+
# Convert an OOXML element to HTML
|
|
1142
|
+
def element_to_html(element)
|
|
1143
|
+
case element
|
|
1144
|
+
when Uniword::Wordprocessingml::Paragraph
|
|
1145
|
+
paragraph_to_html(element)
|
|
1146
|
+
when Uniword::Wordprocessingml::Table
|
|
1147
|
+
table_to_html(element)
|
|
1148
|
+
else
|
|
1149
|
+
''
|
|
1150
|
+
end
|
|
1151
|
+
end
|
|
1152
|
+
|
|
1153
|
+
# Convert OOXML Paragraph to HTML
|
|
1154
|
+
def paragraph_to_html(paragraph)
|
|
1155
|
+
style_class = style_to_css_class(paragraph.style)
|
|
1156
|
+
|
|
1157
|
+
# Build paragraph content including SDTs inline
|
|
1158
|
+
content = paragraph_content_to_html(paragraph)
|
|
1159
|
+
|
|
1160
|
+
if content.strip.empty?
|
|
1161
|
+
%(<p#{style_class}><o:p> </o:p></p>)
|
|
1162
|
+
else
|
|
1163
|
+
%(<p#{style_class}>#{content}</p>)
|
|
1164
|
+
end
|
|
1165
|
+
end
|
|
1166
|
+
|
|
1167
|
+
# Get paragraph content including runs, hyperlinks, SDTs
|
|
1168
|
+
def paragraph_content_to_html(paragraph)
|
|
1169
|
+
# Process runs and hyperlinks in order
|
|
1170
|
+
parts = paragraph.runs.map do |run|
|
|
1171
|
+
# SDT elements can appear in runs collection when parsed from MHT
|
|
1172
|
+
if run.is_a?(Uniword::Wordprocessingml::StructuredDocumentTag)
|
|
1173
|
+
sdt_to_inline_html(run)
|
|
1174
|
+
else
|
|
1175
|
+
run_to_html(run)
|
|
1176
|
+
end
|
|
1177
|
+
end
|
|
1178
|
+
|
|
1179
|
+
paragraph.hyperlinks.each do |hyperlink|
|
|
1180
|
+
parts << hyperlink_to_html(hyperlink)
|
|
1181
|
+
end
|
|
1182
|
+
|
|
1183
|
+
# Process SDTs - in DOCX SDTs can be block elements, but in MHT they're inline
|
|
1184
|
+
paragraph.sdts.each do |sdt|
|
|
1185
|
+
parts << sdt_to_inline_html(sdt)
|
|
1186
|
+
end
|
|
1187
|
+
|
|
1188
|
+
parts.join
|
|
1189
|
+
end
|
|
1190
|
+
|
|
1191
|
+
# Convert OOXML Run to HTML
|
|
1192
|
+
def run_to_html(run)
|
|
1193
|
+
text = run.text.to_s
|
|
1194
|
+
return '' if text.empty?
|
|
1195
|
+
|
|
1196
|
+
# Escape raw text first, then apply formatting around it
|
|
1197
|
+
escaped = escape_html(text)
|
|
1198
|
+
|
|
1199
|
+
props = run.properties
|
|
1200
|
+
escaped = apply_run_formatting(escaped, props) if props
|
|
1201
|
+
|
|
1202
|
+
escaped
|
|
1203
|
+
end
|
|
1204
|
+
|
|
1205
|
+
# Apply run formatting (text must already be HTML-escaped)
|
|
1206
|
+
def apply_run_formatting(text, props)
|
|
1207
|
+
result = text
|
|
1208
|
+
|
|
1209
|
+
# Bold/Italic: element presence means true (value may be nil)
|
|
1210
|
+
result = "<strong>#{result}</strong>" if props.bold && props.bold.value != false
|
|
1211
|
+
result = "<em>#{result}</em>" if props.italic && props.italic.value != false
|
|
1212
|
+
result = "<u>#{result}</u>" if props.underline&.value
|
|
1213
|
+
|
|
1214
|
+
result = %(<span style="color:#{props.color.value}">#{result}</span>) if props.color&.value
|
|
1215
|
+
|
|
1216
|
+
if props.size&.value
|
|
1217
|
+
size_pt = props.size.value.to_f / 2
|
|
1218
|
+
result = %(<span style="font-size:#{size_pt}pt">#{result}</span>)
|
|
1219
|
+
end
|
|
1220
|
+
|
|
1221
|
+
if props.font.respond_to?(:ascii) && props.font.ascii
|
|
1222
|
+
result = %(<span style="font-family:'#{props.font.ascii}'">#{result}</span>)
|
|
1223
|
+
elsif props.font.is_a?(String) && !props.font.empty?
|
|
1224
|
+
result = %(<span style="font-family:'#{props.font}'">#{result}</span>)
|
|
1225
|
+
end
|
|
1226
|
+
|
|
1227
|
+
result
|
|
1228
|
+
end
|
|
1229
|
+
|
|
1230
|
+
# Convert OOXML Hyperlink to HTML
|
|
1231
|
+
def hyperlink_to_html(hyperlink)
|
|
1232
|
+
url = resolve_hyperlink_url(hyperlink)
|
|
1233
|
+
return '' unless url
|
|
1234
|
+
|
|
1235
|
+
# Get hyperlink text from runs
|
|
1236
|
+
text = hyperlink.runs.map { |r| r.text.to_s }.join
|
|
1237
|
+
|
|
1238
|
+
%(<a href="#{escape_html(url)}">#{escape_html(text)}</a>)
|
|
1239
|
+
end
|
|
1240
|
+
|
|
1241
|
+
# Resolve hyperlink URL from relationship or anchor
|
|
1242
|
+
def resolve_hyperlink_url(hyperlink)
|
|
1243
|
+
# Internal anchor link
|
|
1244
|
+
return "##{hyperlink.anchor}" if hyperlink.anchor
|
|
1245
|
+
|
|
1246
|
+
# External link via relationship ID
|
|
1247
|
+
if hyperlink.id && @relationships
|
|
1248
|
+
rel = @relationships.relationships.find { |r| r.id == hyperlink.id }
|
|
1249
|
+
return rel.target if rel && rel.target_mode == 'External'
|
|
1250
|
+
end
|
|
1251
|
+
|
|
1252
|
+
nil
|
|
1253
|
+
end
|
|
1254
|
+
|
|
1255
|
+
# Convert OOXML SDT block to inline MHT SDT
|
|
1256
|
+
def sdt_to_inline_html(sdt)
|
|
1257
|
+
return '' unless sdt.content
|
|
1258
|
+
|
|
1259
|
+
sdt_props = sdt.properties
|
|
1260
|
+
sdt_content = sdt.content
|
|
1261
|
+
|
|
1262
|
+
# Extract text content
|
|
1263
|
+
text = extract_sdt_text(sdt_content)
|
|
1264
|
+
|
|
1265
|
+
# Build inline SDT
|
|
1266
|
+
sdt_attrs = build_sdt_attrs(sdt_props)
|
|
1267
|
+
|
|
1268
|
+
if text.empty?
|
|
1269
|
+
%(<w:sdt#{sdt_attrs}><w:sdtPr></w:sdtPr></w:sdt>)
|
|
1270
|
+
else
|
|
1271
|
+
%(<w:sdt#{sdt_attrs}><w:sdtPr></w:sdtPr><w:sdtContent><span>#{escape_html(text)}</span></w:sdtContent></w:sdt>)
|
|
1272
|
+
end
|
|
1273
|
+
end
|
|
1274
|
+
|
|
1275
|
+
# Extract text from SDT content
|
|
1276
|
+
def extract_sdt_text(content)
|
|
1277
|
+
return '' unless content
|
|
1278
|
+
|
|
1279
|
+
# Content uses mixed_content - serialize back to XML and extract text
|
|
1280
|
+
xml = content.to_xml
|
|
1281
|
+
# Parse the XML to extract text content
|
|
1282
|
+
doc = Nokogiri::HTML(xml)
|
|
1283
|
+
doc.text.gsub(/\s+/, ' ').strip
|
|
1284
|
+
end
|
|
1285
|
+
|
|
1286
|
+
# Build SDT attribute string
|
|
1287
|
+
def build_sdt_attrs(props)
|
|
1288
|
+
return '' unless props
|
|
1289
|
+
|
|
1290
|
+
attrs = []
|
|
1291
|
+
|
|
1292
|
+
# ID attribute
|
|
1293
|
+
attrs << %(w:id="#{props.id.value}") if props.id.respond_to?(:value) && props.id.value
|
|
1294
|
+
|
|
1295
|
+
# ShowingPlcHdr attribute
|
|
1296
|
+
attrs << 'w:showingPlcHdr="t"' if props.showing_placeholder_header
|
|
1297
|
+
|
|
1298
|
+
# Temporary attribute
|
|
1299
|
+
attrs << 'w:temporary="t"' if props.temporary
|
|
1300
|
+
|
|
1301
|
+
# DocPart attribute (UUID from placeholder.doc_part)
|
|
1302
|
+
if props.placeholder&.doc_part
|
|
1303
|
+
doc_part = props.placeholder.doc_part
|
|
1304
|
+
if doc_part.respond_to?(:value) && doc_part.value
|
|
1305
|
+
attrs << %(w:docPart="#{doc_part.value}")
|
|
1306
|
+
end
|
|
1307
|
+
end
|
|
1308
|
+
|
|
1309
|
+
# Text attribute
|
|
1310
|
+
if props.text.respond_to?(:value) && props.text.value
|
|
1311
|
+
attrs << %(w:text="#{props.text.value}")
|
|
1312
|
+
end
|
|
1313
|
+
|
|
1314
|
+
# Tag attribute
|
|
1315
|
+
if props.tag.respond_to?(:value) && props.tag.value
|
|
1316
|
+
attrs << %(w:tag="#{escape_xml(props.tag.value)}")
|
|
1317
|
+
end
|
|
1318
|
+
|
|
1319
|
+
# Alias attribute
|
|
1320
|
+
if props.alias_name.respond_to?(:value) && props.alias_name.value
|
|
1321
|
+
attrs << %(w:alias="#{escape_xml(props.alias_name.value)}")
|
|
1322
|
+
end
|
|
1323
|
+
|
|
1324
|
+
attrs.empty? ? '' : " #{attrs.join(' ')}"
|
|
1325
|
+
end
|
|
1326
|
+
|
|
1327
|
+
# Convert OOXML Table to HTML
|
|
1328
|
+
def table_to_html(table)
|
|
1329
|
+
rows = table.rows || []
|
|
1330
|
+
|
|
1331
|
+
rows_html = rows.map do |row|
|
|
1332
|
+
cells = row.cells || []
|
|
1333
|
+
cells_html = cells.map { |cell| table_cell_to_html(cell) }.join
|
|
1334
|
+
|
|
1335
|
+
%(<tr>#{cells_html}</tr>)
|
|
1336
|
+
end.join("\n")
|
|
1337
|
+
|
|
1338
|
+
<<~HTML
|
|
1339
|
+
<table>
|
|
1340
|
+
#{rows_html}
|
|
1341
|
+
</table>
|
|
1342
|
+
HTML
|
|
1343
|
+
end
|
|
1344
|
+
|
|
1345
|
+
# Convert OOXML TableCell to HTML
|
|
1346
|
+
def table_cell_to_html(cell)
|
|
1347
|
+
paragraphs = cell.paragraphs || []
|
|
1348
|
+
|
|
1349
|
+
content = paragraphs.map do |para|
|
|
1350
|
+
paragraph_to_html(para)
|
|
1351
|
+
end.join("\n")
|
|
1352
|
+
|
|
1353
|
+
<<~HTML
|
|
1354
|
+
<td>
|
|
1355
|
+
#{content}
|
|
1356
|
+
</td>
|
|
1357
|
+
HTML
|
|
1358
|
+
end
|
|
1359
|
+
|
|
1360
|
+
# Map OOXML style to CSS class
|
|
1361
|
+
def style_to_css_class(style)
|
|
1362
|
+
return ' class=MsoNormal' unless style
|
|
1363
|
+
|
|
1364
|
+
# Handle StyleReference wrapper object or string
|
|
1365
|
+
style_value = style.is_a?(String) ? style : style.to_s
|
|
1366
|
+
|
|
1367
|
+
case style_value
|
|
1368
|
+
when 'Title' then ' class=MsoTitle'
|
|
1369
|
+
when 'Title2' then ' class=MsoTitle2'
|
|
1370
|
+
when 'Subtitle' then ' class=MsoSubtitle'
|
|
1371
|
+
when 'Heading1' then ' class=MsoHeading1'
|
|
1372
|
+
when 'Heading2' then ' class=MsoHeading2'
|
|
1373
|
+
when 'Heading3' then ' class=MsoHeading3'
|
|
1374
|
+
when 'Heading4' then ' class=MsoHeading4'
|
|
1375
|
+
when 'Heading5' then ' class=MsoHeading5'
|
|
1376
|
+
when 'Heading6' then ' class=MsoHeading6'
|
|
1377
|
+
when 'TOC1', 'TOC2', 'TOC3', 'TOC4', 'TOC5', 'TOC6', 'TOC7', 'TOC8', 'TOC9'
|
|
1378
|
+
' class=MsoToc1'
|
|
1379
|
+
when 'SectionTitle' then ' class=SectionTitle'
|
|
1380
|
+
else
|
|
1381
|
+
' class=MsoNormal'
|
|
1382
|
+
end
|
|
1383
|
+
end
|
|
1384
|
+
|
|
1385
|
+
# Escape HTML special characters
|
|
1386
|
+
def escape_html(text)
|
|
1387
|
+
text.to_s
|
|
1388
|
+
.gsub('&', '&')
|
|
1389
|
+
.gsub('<', '<')
|
|
1390
|
+
.gsub('>', '>')
|
|
1391
|
+
.gsub('"', '"')
|
|
1392
|
+
.gsub("'", ''')
|
|
1393
|
+
end
|
|
1394
|
+
|
|
1395
|
+
# Escape XML special characters
|
|
1396
|
+
def escape_xml(text)
|
|
1397
|
+
text.to_s
|
|
1398
|
+
.gsub('&', '&')
|
|
1399
|
+
.gsub('<', '<')
|
|
1400
|
+
.gsub('>', '>')
|
|
1401
|
+
.gsub('"', '"')
|
|
1402
|
+
.gsub("'", ''')
|
|
1403
|
+
end
|
|
1404
|
+
end
|
|
1405
|
+
end
|
|
1406
|
+
end
|