uniword 1.2.5 → 1.3.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.
Files changed (191) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +223 -0
  3. data/CONTRIBUTING.md +1 -1
  4. data/config/ooxml/schemas/shared_types.yml +5 -4
  5. data/data/schemas/ecma/dc.xsd +118 -0
  6. data/data/schemas/ecma/dcmitype.xsd +50 -0
  7. data/data/schemas/ecma/dcterms.xsd +331 -0
  8. data/data/schemas/ecma/opc-coreProperties.xsd +2 -2
  9. data/data/schemas/ecma/xml.xsd +117 -0
  10. data/lib/uniword/builder/bibliography_builder.rb +1 -1
  11. data/lib/uniword/builder/chart_builder.rb +19 -9
  12. data/lib/uniword/builder/comment_anchorer.rb +221 -0
  13. data/lib/uniword/builder/document_builder.rb +97 -6
  14. data/lib/uniword/builder/image_builder.rb +6 -5
  15. data/lib/uniword/builder/run_utils.rb +2 -0
  16. data/lib/uniword/builder.rb +1 -0
  17. data/lib/uniword/cli/fonts_cli.rb +52 -0
  18. data/lib/uniword/cli/main.rb +110 -11
  19. data/lib/uniword/cli/page_cli.rb +85 -0
  20. data/lib/uniword/cli/styles_cli.rb +204 -0
  21. data/lib/uniword/cli/theme_cli.rb +88 -0
  22. data/lib/uniword/cli/toc_cli.rb +22 -2
  23. data/lib/uniword/comment.rb +20 -15
  24. data/lib/uniword/comment_range.rb +3 -3
  25. data/lib/uniword/comments_part.rb +51 -19
  26. data/lib/uniword/configuration/configuration_loader.rb +5 -3
  27. data/lib/uniword/configuration.rb +93 -1
  28. data/lib/uniword/content_types.rb +19 -39
  29. data/lib/uniword/document_factory.rb +9 -1
  30. data/lib/uniword/document_writer.rb +16 -5
  31. data/lib/uniword/docx/chart_part.rb +34 -0
  32. data/lib/uniword/docx/custom_xml_item.rb +83 -0
  33. data/lib/uniword/docx/header_footer_part.rb +140 -0
  34. data/lib/uniword/docx/header_footer_part_collection.rb +135 -0
  35. data/lib/uniword/docx/header_footer_view.rb +225 -0
  36. data/lib/uniword/docx/id_allocator.rb +130 -36
  37. data/lib/uniword/docx/package.rb +223 -35
  38. data/lib/uniword/docx/package_defaults.rb +58 -78
  39. data/lib/uniword/docx/package_integrity_checker.rb +312 -0
  40. data/lib/uniword/docx/package_serialization.rb +103 -231
  41. data/lib/uniword/docx/part.rb +106 -0
  42. data/lib/uniword/docx/part_collection.rb +123 -0
  43. data/lib/uniword/docx/reconciler/body.rb +59 -68
  44. data/lib/uniword/docx/reconciler/fix.rb +46 -0
  45. data/lib/uniword/docx/reconciler/fix_codes.rb +37 -30
  46. data/lib/uniword/docx/reconciler/helpers.rb +9 -1
  47. data/lib/uniword/docx/reconciler/notes.rb +17 -8
  48. data/lib/uniword/docx/reconciler/package_structure.rb +169 -221
  49. data/lib/uniword/docx/reconciler/parts.rb +36 -13
  50. data/lib/uniword/docx/reconciler/referential_integrity.rb +297 -123
  51. data/lib/uniword/docx/reconciler/tables.rb +78 -16
  52. data/lib/uniword/docx/reconciler/theme.rb +7 -4
  53. data/lib/uniword/docx/reconciler.rb +36 -14
  54. data/lib/uniword/docx.rb +10 -0
  55. data/lib/uniword/drawingml/blip.rb +0 -1
  56. data/lib/uniword/drawingml/color_scheme.rb +5 -6
  57. data/lib/uniword/drawingml/font_scheme.rb +4 -8
  58. data/lib/uniword/drawingml/theme.rb +12 -6
  59. data/lib/uniword/errors.rb +8 -1
  60. data/lib/uniword/footer.rb +4 -0
  61. data/lib/uniword/header.rb +4 -0
  62. data/lib/uniword/hyperlink.rb +1 -1
  63. data/lib/uniword/image.rb +6 -6
  64. data/lib/uniword/lazy_loader.rb +1 -2
  65. data/lib/uniword/model_attribute_access.rb +20 -4
  66. data/lib/uniword/ooxml/dotx_package.rb +42 -2
  67. data/lib/uniword/ooxml/part_definition.rb +171 -0
  68. data/lib/uniword/ooxml/part_registry.rb +311 -0
  69. data/lib/uniword/ooxml/relationships/image_relationship.rb +1 -1
  70. data/lib/uniword/ooxml/relationships/package_relationships.rb +20 -22
  71. data/lib/uniword/ooxml/schema/element_serializer.rb +8 -7
  72. data/lib/uniword/ooxml/types/hex_color_value.rb +38 -0
  73. data/lib/uniword/ooxml/types/ooxml_boolean.rb +27 -14
  74. data/lib/uniword/ooxml/types/ooxml_boolean_optional.rb +21 -16
  75. data/lib/uniword/ooxml/types/theme_color_value.rb +22 -0
  76. data/lib/uniword/ooxml/types/unsigned_decimal_number.rb +30 -0
  77. data/lib/uniword/ooxml/types.rb +10 -0
  78. data/lib/uniword/ooxml.rb +2 -0
  79. data/lib/uniword/properties/alignment.rb +8 -3
  80. data/lib/uniword/properties/border.rb +52 -6
  81. data/lib/uniword/properties/cell_vertical_align.rb +4 -1
  82. data/lib/uniword/properties/color_value.rb +8 -3
  83. data/lib/uniword/properties/highlight.rb +9 -5
  84. data/lib/uniword/properties/shading.rb +4 -3
  85. data/lib/uniword/properties/tab_stop.rb +6 -1
  86. data/lib/uniword/properties/table_justification.rb +4 -1
  87. data/lib/uniword/properties/underline.rb +4 -2
  88. data/lib/uniword/properties/vertical_align.rb +6 -3
  89. data/lib/uniword/review/review_manager.rb +23 -9
  90. data/lib/uniword/revision.rb +9 -9
  91. data/lib/uniword/schema/model_generator.rb +31 -15
  92. data/lib/uniword/shared_types/hex_color.rb +4 -1
  93. data/lib/uniword/shared_types/pixel_measure.rb +4 -1
  94. data/lib/uniword/shared_types/point_measure.rb +4 -1
  95. data/lib/uniword/shared_types/text_alignment.rb +6 -1
  96. data/lib/uniword/shared_types/twips_measure.rb +4 -1
  97. data/lib/uniword/spreadsheetml/phonetic_pr.rb +1 -1
  98. data/lib/uniword/spreadsheetml/shared_string_table.rb +2 -2
  99. data/lib/uniword/spreadsheetml/table_formula.rb +1 -1
  100. data/lib/uniword/template/variable_resolver.rb +40 -7
  101. data/lib/uniword/themes/theme_transformation.rb +55 -41
  102. data/lib/uniword/toc/toc_generator.rb +2 -0
  103. data/lib/uniword/validation/engine.rb +35 -0
  104. data/lib/uniword/validation/link_checker.rb +1 -1
  105. data/lib/uniword/validation/opc_validator.rb +0 -1
  106. data/lib/uniword/validation/report/layer_result.rb +0 -1
  107. data/lib/uniword/validation/report/terminal_formatter.rb +0 -1
  108. data/lib/uniword/validation/report/verification_report.rb +0 -2
  109. data/lib/uniword/validation/report.rb +20 -0
  110. data/lib/uniword/validation/rules/base.rb +10 -2
  111. data/lib/uniword/validation/rules/bookmark_pairing_rule.rb +38 -0
  112. data/lib/uniword/validation/rules/bookmark_uniqueness_rule.rb +48 -0
  113. data/lib/uniword/validation/rules/bookmarks_rule.rb +0 -2
  114. data/lib/uniword/validation/rules/content_types_coverage_rule.rb +0 -2
  115. data/lib/uniword/validation/rules/core_properties_namespace_rule.rb +0 -2
  116. data/lib/uniword/validation/rules/document_body_rule.rb +25 -0
  117. data/lib/uniword/validation/rules/document_context.rb +7 -0
  118. data/lib/uniword/validation/rules/empty_paragraphs_rule.rb +27 -0
  119. data/lib/uniword/validation/rules/font_table_signature_rule.rb +0 -2
  120. data/lib/uniword/validation/rules/fonts_rule.rb +0 -2
  121. data/lib/uniword/validation/rules/footnotes_rule.rb +0 -2
  122. data/lib/uniword/validation/rules/headers_footers_rule.rb +0 -2
  123. data/lib/uniword/validation/rules/images_rule.rb +0 -2
  124. data/lib/uniword/validation/rules/mc_ignorable_namespace_rule.rb +0 -2
  125. data/lib/uniword/validation/rules/model_context.rb +32 -0
  126. data/lib/uniword/validation/rules/model_rule.rb +34 -0
  127. data/lib/uniword/validation/rules/numbering_preservation_rule.rb +0 -2
  128. data/lib/uniword/validation/rules/numbering_rule.rb +0 -2
  129. data/lib/uniword/validation/rules/relationship_integrity_rule.rb +0 -1
  130. data/lib/uniword/validation/rules/rsid_rule.rb +0 -2
  131. data/lib/uniword/validation/rules/section_properties_rule.rb +0 -2
  132. data/lib/uniword/validation/rules/settings_rule.rb +0 -2
  133. data/lib/uniword/validation/rules/settings_values_rule.rb +0 -2
  134. data/lib/uniword/validation/rules/style_references_rule.rb +0 -2
  135. data/lib/uniword/validation/rules/table_grid_rule.rb +27 -0
  136. data/lib/uniword/validation/rules/table_properties_rule.rb +27 -0
  137. data/lib/uniword/validation/rules/tables_rule.rb +0 -2
  138. data/lib/uniword/validation/rules/theme_completeness_rule.rb +0 -2
  139. data/lib/uniword/validation/rules/theme_rule.rb +0 -2
  140. data/lib/uniword/validation/rules.rb +61 -23
  141. data/lib/uniword/validation/schema_registry.rb +11 -0
  142. data/lib/uniword/validation/validators/document_semantics_validator.rb +1 -9
  143. data/lib/uniword/validation/validators/xml_schema_validator.rb +0 -2
  144. data/lib/uniword/validation/validators.rb +0 -9
  145. data/lib/uniword/validation/verify_orchestrator.rb +0 -7
  146. data/lib/uniword/validation.rb +7 -2
  147. data/lib/uniword/version.rb +1 -1
  148. data/lib/uniword/vml/imagedata.rb +0 -1
  149. data/lib/uniword/wordprocessingml/attached_template.rb +0 -1
  150. data/lib/uniword/wordprocessingml/deleted_text.rb +1 -1
  151. data/lib/uniword/wordprocessingml/document_root.rb +211 -21
  152. data/lib/uniword/wordprocessingml/endnotes.rb +4 -0
  153. data/lib/uniword/wordprocessingml/font_replacer.rb +147 -0
  154. data/lib/uniword/wordprocessingml/footnotes.rb +4 -0
  155. data/lib/uniword/wordprocessingml/hdr_shape_defaults.rb +0 -1
  156. data/lib/uniword/wordprocessingml/hyperlink.rb +0 -1
  157. data/lib/uniword/wordprocessingml/level.rb +6 -20
  158. data/lib/uniword/wordprocessingml/math_pr.rb +0 -11
  159. data/lib/uniword/wordprocessingml/numbering_definition.rb +16 -8
  160. data/lib/uniword/wordprocessingml/page_setup.rb +181 -0
  161. data/lib/uniword/wordprocessingml/paragraph_properties.rb +33 -28
  162. data/lib/uniword/wordprocessingml/rsids.rb +0 -2
  163. data/lib/uniword/wordprocessingml/run.rb +3 -0
  164. data/lib/uniword/wordprocessingml/section_properties.rb +2 -2
  165. data/lib/uniword/wordprocessingml/settings.rb +8 -34
  166. data/lib/uniword/wordprocessingml/shape_defaults.rb +0 -1
  167. data/lib/uniword/wordprocessingml/style.rb +2 -1
  168. data/lib/uniword/wordprocessingml/style_cleanup.rb +198 -0
  169. data/lib/uniword/wordprocessingml/table_cell_properties.rb +6 -6
  170. data/lib/uniword/wordprocessingml/update_fields.rb +27 -0
  171. data/lib/uniword/wordprocessingml/w14_attributes.rb +30 -2
  172. data/lib/uniword/wordprocessingml.rb +4 -0
  173. data/lib/uniword.rb +27 -2
  174. metadata +38 -19
  175. data/config/validation_rules.yml +0 -60
  176. data/config/warning_rules.yml +0 -57
  177. data/lib/uniword/validation/document_validator.rb +0 -272
  178. data/lib/uniword/validation/structural_validator.rb +0 -116
  179. data/lib/uniword/validation/validators/content_type_validator.rb +0 -165
  180. data/lib/uniword/validation/validators/file_structure_validator.rb +0 -104
  181. data/lib/uniword/validation/validators/ooxml_part_validator.rb +0 -128
  182. data/lib/uniword/validation/validators/relationship_validator.rb +0 -147
  183. data/lib/uniword/validation/validators/zip_integrity_validator.rb +0 -110
  184. data/lib/uniword/validators/element_validator.rb +0 -93
  185. data/lib/uniword/validators/paragraph_validator.rb +0 -116
  186. data/lib/uniword/validators/table_validator.rb +0 -134
  187. data/lib/uniword/validators.rb +0 -9
  188. data/lib/uniword/warnings/warning.rb +0 -130
  189. data/lib/uniword/warnings/warning_collector.rb +0 -234
  190. data/lib/uniword/warnings/warning_report.rb +0 -159
  191. data/lib/uniword/warnings.rb +0 -9
@@ -16,15 +16,43 @@ module Uniword
16
16
  # W16CID namespace for Word 2016+ citation identifiers
17
17
  W16CID_NAMESPACE = Uniword::Ooxml::Namespaces::Word2016Cid
18
18
 
19
- # Typed attribute for w14:paraId
19
+ # ST_LongHexNumber (ECMA-376): exactly 8 hexadecimal digits
20
+ LONG_HEX_NUMBER_PATTERN = /\A[0-9A-Fa-f]{8}\z/
21
+
22
+ # Validate an ST_LongHexNumber value at cast time
23
+ #
24
+ # @param value [Object] the raw value
25
+ # @return [String, nil, Object] the validated value
26
+ # @raise [Lutaml::Model::Type::InvalidValueError] when the value is
27
+ # not 8 hexadecimal digits
28
+ def self.cast_long_hex_number(value)
29
+ casted = Lutaml::Model::Type::String.cast(value)
30
+ return casted if casted.nil? ||
31
+ Lutaml::Model::Utils.uninitialized?(casted)
32
+ return casted if LONG_HEX_NUMBER_PATTERN.match?(casted)
33
+
34
+ raise Lutaml::Model::Type::InvalidValueError.new(
35
+ value, ["ST_LongHexNumber: 8 hexadecimal digits"]
36
+ )
37
+ end
38
+
39
+ # Typed attribute for w14:paraId (ST_LongHexNumber)
20
40
  class W14ParaId < Lutaml::Model::Type::String
41
+ def self.cast(value, _options = {})
42
+ Wordprocessingml.cast_long_hex_number(value)
43
+ end
44
+
21
45
  xml do
22
46
  namespace W14_NAMESPACE
23
47
  end
24
48
  end
25
49
 
26
- # Typed attribute for w14:textId
50
+ # Typed attribute for w14:textId (ST_LongHexNumber)
27
51
  class W14TextId < Lutaml::Model::Type::String
52
+ def self.cast(value, _options = {})
53
+ Wordprocessingml.cast_long_hex_number(value)
54
+ end
55
+
28
56
  xml do
29
57
  namespace W14_NAMESPACE
30
58
  end
@@ -64,6 +64,7 @@ module Uniword
64
64
  # Structure and metadata
65
65
  autoload :Level, "uniword/wordprocessingml/level"
66
66
  autoload :Style, "uniword/wordprocessingml/style"
67
+ autoload :StyleCleanup, "uniword/wordprocessingml/style_cleanup"
67
68
  autoload :StructuredDocumentTag,
68
69
  "uniword/wordprocessingml/structured_document_tag"
69
70
  autoload :StructuredDocumentTagProperties,
@@ -72,6 +73,7 @@ module Uniword
72
73
  autoload :PageSize, "uniword/wordprocessingml/page_size"
73
74
  autoload :PageMargins, "uniword/wordprocessingml/page_margins"
74
75
  autoload :PageNumbering, "uniword/wordprocessingml/page_numbering"
76
+ autoload :PageSetup, "uniword/wordprocessingml/page_setup"
75
77
  autoload :Columns, "uniword/wordprocessingml/columns"
76
78
  autoload :HeaderReference, "uniword/wordprocessingml/header_reference"
77
79
  autoload :FooterReference, "uniword/wordprocessingml/footer_reference"
@@ -130,6 +132,7 @@ module Uniword
130
132
 
131
133
  # Fonts
132
134
  autoload :Font, "uniword/wordprocessingml/font"
135
+ autoload :FontReplacer, "uniword/wordprocessingml/font_replacer"
133
136
  autoload :Fonts, "uniword/wordprocessingml/fonts"
134
137
  autoload :FontTable, "uniword/wordprocessingml/font_table"
135
138
 
@@ -191,6 +194,7 @@ module Uniword
191
194
  autoload :Next, "uniword/wordprocessingml/next"
192
195
  autoload :Link, "uniword/wordprocessingml/link"
193
196
  autoload :UiPriority, "uniword/wordprocessingml/ui_priority"
197
+ autoload :UpdateFields, "uniword/wordprocessingml/update_fields"
194
198
  autoload :LatentStyles, "uniword/wordprocessingml/latent_styles"
195
199
  autoload :ParagraphStyle, "uniword/wordprocessingml/paragraph_style"
196
200
  autoload :CharacterStyle, "uniword/wordprocessingml/character_style"
data/lib/uniword.rb CHANGED
@@ -101,7 +101,6 @@ module Uniword
101
101
  autoload :Template, "uniword/template"
102
102
  autoload :TemplateManager, "uniword/template_manager"
103
103
  autoload :Visitor, "uniword/visitor"
104
- autoload :Validators, "uniword/validators"
105
104
  autoload :Stylesets, "uniword/stylesets"
106
105
  autoload :Infrastructure, "uniword/infrastructure"
107
106
  autoload :Accessibility, "uniword/accessibility"
@@ -114,7 +113,6 @@ module Uniword
114
113
  autoload :Configuration, "uniword/configuration"
115
114
  autoload :Transformation, "uniword/transformation"
116
115
  autoload :Validation, "uniword/validation"
117
- autoload :Warnings, "uniword/warnings"
118
116
  autoload :Mhtml, "uniword/mhtml"
119
117
  autoload :Themes, "uniword/themes"
120
118
  autoload :Resource, "uniword/resource"
@@ -135,6 +133,9 @@ module Uniword
135
133
  # CLI
136
134
  autoload :CLI, "uniword/cli/main"
137
135
  autoload :GenerateCLI, "uniword/cli/generate_cli"
136
+ autoload :FontsCLI, "uniword/cli/fonts_cli"
137
+ autoload :PageCLI, "uniword/cli/page_cli"
138
+ autoload :StylesCLI, "uniword/cli/styles_cli"
138
139
  autoload :DiffCLI, "uniword/cli/diff_cli"
139
140
  autoload :TemplateCLI, "uniword/cli/template_cli"
140
141
  autoload :CLIHelpers, "uniword/cli/helpers"
@@ -250,6 +251,30 @@ module Uniword
250
251
  Wordprocessingml::DocumentRoot.new
251
252
  end
252
253
 
254
+ # Get the global runtime configuration (memoized)
255
+ #
256
+ # @return [Configuration] The global configuration instance
257
+ #
258
+ # @example
259
+ # Uniword.configuration.validate_on_save # => true
260
+ def configuration
261
+ @configuration ||= Configuration.new
262
+ end
263
+
264
+ # Configure global runtime policy
265
+ #
266
+ # @yieldparam config [Configuration] The global configuration instance
267
+ # @return [Configuration] The global configuration instance
268
+ #
269
+ # @example
270
+ # Uniword.configure do |config|
271
+ # config.xsd_validation = true
272
+ # end
273
+ def configure
274
+ yield(configuration)
275
+ configuration
276
+ end
277
+
253
278
  # Load document from file
254
279
  #
255
280
  # @param path [String] File path
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uniword
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.5
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-07-17 00:00:00.000000000 Z
11
+ date: 2026-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logger
@@ -182,8 +182,6 @@ files:
182
182
  - config/system_profiles.yml
183
183
  - config/theme_mapping.yml
184
184
  - config/transformation_rules.yml
185
- - config/validation_rules.yml
186
- - config/warning_rules.yml
187
185
  - data/color_schemes/amber.yml
188
186
  - data/color_schemes/azure.yml
189
187
  - data/color_schemes/burgundy.yml
@@ -476,10 +474,14 @@ files:
476
474
  - data/resources/document_elements/zh-TW/tables.yml
477
475
  - data/resources/document_elements/zh-TW/watermarks.yml
478
476
  - data/resources/font_registry.yml
477
+ - data/schemas/ecma/dc.xsd
478
+ - data/schemas/ecma/dcmitype.xsd
479
+ - data/schemas/ecma/dcterms.xsd
479
480
  - data/schemas/ecma/opc-contentTypes.xsd
480
481
  - data/schemas/ecma/opc-coreProperties.xsd
481
482
  - data/schemas/ecma/opc-digSig.xsd
482
483
  - data/schemas/ecma/opc-relationships.xsd
484
+ - data/schemas/ecma/xml.xsd
483
485
  - data/schemas/iso/dml-chart.xsd
484
486
  - data/schemas/iso/dml-chartDrawing.xsd
485
487
  - data/schemas/iso/dml-diagram.xsd
@@ -631,6 +633,7 @@ files:
631
633
  - lib/uniword/builder/base_builder.rb
632
634
  - lib/uniword/builder/bibliography_builder.rb
633
635
  - lib/uniword/builder/chart_builder.rb
636
+ - lib/uniword/builder/comment_anchorer.rb
634
637
  - lib/uniword/builder/comment_builder.rb
635
638
  - lib/uniword/builder/deterministic_id.rb
636
639
  - lib/uniword/builder/document_builder.rb
@@ -728,15 +731,18 @@ files:
728
731
  - lib/uniword/chart/y_values.rb
729
732
  - lib/uniword/cli.rb
730
733
  - lib/uniword/cli/diff_cli.rb
734
+ - lib/uniword/cli/fonts_cli.rb
731
735
  - lib/uniword/cli/generate_cli.rb
732
736
  - lib/uniword/cli/headers_cli.rb
733
737
  - lib/uniword/cli/helpers.rb
734
738
  - lib/uniword/cli/images_cli.rb
735
739
  - lib/uniword/cli/main.rb
740
+ - lib/uniword/cli/page_cli.rb
736
741
  - lib/uniword/cli/protect_cli.rb
737
742
  - lib/uniword/cli/resources_cli.rb
738
743
  - lib/uniword/cli/review_cli.rb
739
744
  - lib/uniword/cli/spellcheck_cli.rb
745
+ - lib/uniword/cli/styles_cli.rb
740
746
  - lib/uniword/cli/styleset_cli.rb
741
747
  - lib/uniword/cli/template_cli.rb
742
748
  - lib/uniword/cli/theme_cli.rb
@@ -809,14 +815,23 @@ files:
809
815
  - lib/uniword/document_variables/variable_scope.rb
810
816
  - lib/uniword/document_writer.rb
811
817
  - lib/uniword/docx.rb
818
+ - lib/uniword/docx/chart_part.rb
819
+ - lib/uniword/docx/custom_xml_item.rb
812
820
  - lib/uniword/docx/document_statistics.rb
821
+ - lib/uniword/docx/header_footer_part.rb
822
+ - lib/uniword/docx/header_footer_part_collection.rb
823
+ - lib/uniword/docx/header_footer_view.rb
813
824
  - lib/uniword/docx/id_allocator.rb
814
825
  - lib/uniword/docx/package.rb
815
826
  - lib/uniword/docx/package_defaults.rb
827
+ - lib/uniword/docx/package_integrity_checker.rb
816
828
  - lib/uniword/docx/package_serialization.rb
829
+ - lib/uniword/docx/part.rb
830
+ - lib/uniword/docx/part_collection.rb
817
831
  - lib/uniword/docx/profile.rb
818
832
  - lib/uniword/docx/reconciler.rb
819
833
  - lib/uniword/docx/reconciler/body.rb
834
+ - lib/uniword/docx/reconciler/fix.rb
820
835
  - lib/uniword/docx/reconciler/fix_codes.rb
821
836
  - lib/uniword/docx/reconciler/helpers.rb
822
837
  - lib/uniword/docx/reconciler/notes.rb
@@ -1096,6 +1111,8 @@ files:
1096
1111
  - lib/uniword/ooxml/dotx_package.rb
1097
1112
  - lib/uniword/ooxml/namespaces.rb
1098
1113
  - lib/uniword/ooxml/package_file.rb
1114
+ - lib/uniword/ooxml/part_definition.rb
1115
+ - lib/uniword/ooxml/part_registry.rb
1099
1116
  - lib/uniword/ooxml/relationships.rb
1100
1117
  - lib/uniword/ooxml/relationships/hyperlink_relationship.rb
1101
1118
  - lib/uniword/ooxml/relationships/image_relationship.rb
@@ -1125,10 +1142,13 @@ files:
1125
1142
  - lib/uniword/ooxml/types/dcterms_created_type.rb
1126
1143
  - lib/uniword/ooxml/types/dcterms_modified_type.rb
1127
1144
  - lib/uniword/ooxml/types/dcterms_w3cdtf_type.rb
1145
+ - lib/uniword/ooxml/types/hex_color_value.rb
1128
1146
  - lib/uniword/ooxml/types/mc_ignorable_type.rb
1129
1147
  - lib/uniword/ooxml/types/ooxml_boolean.rb
1130
1148
  - lib/uniword/ooxml/types/ooxml_boolean_optional.rb
1131
1149
  - lib/uniword/ooxml/types/relationship_id.rb
1150
+ - lib/uniword/ooxml/types/theme_color_value.rb
1151
+ - lib/uniword/ooxml/types/unsigned_decimal_number.rb
1132
1152
  - lib/uniword/ooxml/types/variant_types.rb
1133
1153
  - lib/uniword/page_borders.rb
1134
1154
  - lib/uniword/paragraph_border.rb
@@ -1479,28 +1499,35 @@ files:
1479
1499
  - lib/uniword/validation/checkers/file_reference_checker.rb
1480
1500
  - lib/uniword/validation/checkers/footnote_reference_checker.rb
1481
1501
  - lib/uniword/validation/checkers/internal_link_checker.rb
1482
- - lib/uniword/validation/document_validator.rb
1502
+ - lib/uniword/validation/engine.rb
1483
1503
  - lib/uniword/validation/layer_validation_result.rb
1484
1504
  - lib/uniword/validation/layer_validator.rb
1485
1505
  - lib/uniword/validation/link_checker.rb
1486
1506
  - lib/uniword/validation/link_validator.rb
1487
1507
  - lib/uniword/validation/opc_validator.rb
1508
+ - lib/uniword/validation/report.rb
1488
1509
  - lib/uniword/validation/report/layer_result.rb
1489
1510
  - lib/uniword/validation/report/terminal_formatter.rb
1490
1511
  - lib/uniword/validation/report/validation_issue.rb
1491
1512
  - lib/uniword/validation/report/verification_report.rb
1492
1513
  - lib/uniword/validation/rules.rb
1493
1514
  - lib/uniword/validation/rules/base.rb
1515
+ - lib/uniword/validation/rules/bookmark_pairing_rule.rb
1516
+ - lib/uniword/validation/rules/bookmark_uniqueness_rule.rb
1494
1517
  - lib/uniword/validation/rules/bookmarks_rule.rb
1495
1518
  - lib/uniword/validation/rules/content_types_coverage_rule.rb
1496
1519
  - lib/uniword/validation/rules/core_properties_namespace_rule.rb
1520
+ - lib/uniword/validation/rules/document_body_rule.rb
1497
1521
  - lib/uniword/validation/rules/document_context.rb
1522
+ - lib/uniword/validation/rules/empty_paragraphs_rule.rb
1498
1523
  - lib/uniword/validation/rules/font_table_signature_rule.rb
1499
1524
  - lib/uniword/validation/rules/fonts_rule.rb
1500
1525
  - lib/uniword/validation/rules/footnotes_rule.rb
1501
1526
  - lib/uniword/validation/rules/headers_footers_rule.rb
1502
1527
  - lib/uniword/validation/rules/images_rule.rb
1503
1528
  - lib/uniword/validation/rules/mc_ignorable_namespace_rule.rb
1529
+ - lib/uniword/validation/rules/model_context.rb
1530
+ - lib/uniword/validation/rules/model_rule.rb
1504
1531
  - lib/uniword/validation/rules/numbering_preservation_rule.rb
1505
1532
  - lib/uniword/validation/rules/numbering_rule.rb
1506
1533
  - lib/uniword/validation/rules/registry.rb
@@ -1510,26 +1537,18 @@ files:
1510
1537
  - lib/uniword/validation/rules/settings_rule.rb
1511
1538
  - lib/uniword/validation/rules/settings_values_rule.rb
1512
1539
  - lib/uniword/validation/rules/style_references_rule.rb
1540
+ - lib/uniword/validation/rules/table_grid_rule.rb
1541
+ - lib/uniword/validation/rules/table_properties_rule.rb
1513
1542
  - lib/uniword/validation/rules/tables_rule.rb
1514
1543
  - lib/uniword/validation/rules/theme_completeness_rule.rb
1515
1544
  - lib/uniword/validation/rules/theme_rule.rb
1516
1545
  - lib/uniword/validation/schema_registry.rb
1517
- - lib/uniword/validation/structural_validator.rb
1518
1546
  - lib/uniword/validation/validation_report.rb
1519
1547
  - lib/uniword/validation/validation_result.rb
1520
1548
  - lib/uniword/validation/validators.rb
1521
- - lib/uniword/validation/validators/content_type_validator.rb
1522
1549
  - lib/uniword/validation/validators/document_semantics_validator.rb
1523
- - lib/uniword/validation/validators/file_structure_validator.rb
1524
- - lib/uniword/validation/validators/ooxml_part_validator.rb
1525
- - lib/uniword/validation/validators/relationship_validator.rb
1526
1550
  - lib/uniword/validation/validators/xml_schema_validator.rb
1527
- - lib/uniword/validation/validators/zip_integrity_validator.rb
1528
1551
  - lib/uniword/validation/verify_orchestrator.rb
1529
- - lib/uniword/validators.rb
1530
- - lib/uniword/validators/element_validator.rb
1531
- - lib/uniword/validators/paragraph_validator.rb
1532
- - lib/uniword/validators/table_validator.rb
1533
1552
  - lib/uniword/version.rb
1534
1553
  - lib/uniword/visitor.rb
1535
1554
  - lib/uniword/visitor/base_visitor.rb
@@ -1594,10 +1613,6 @@ files:
1594
1613
  - lib/uniword/vml_word/border_left.rb
1595
1614
  - lib/uniword/vml_word/border_right.rb
1596
1615
  - lib/uniword/vml_word/border_top.rb
1597
- - lib/uniword/warnings.rb
1598
- - lib/uniword/warnings/warning.rb
1599
- - lib/uniword/warnings/warning_collector.rb
1600
- - lib/uniword/warnings/warning_report.rb
1601
1616
  - lib/uniword/watermark.rb
1602
1617
  - lib/uniword/watermark/manager.rb
1603
1618
  - lib/uniword/word2010_ext.rb
@@ -1666,6 +1681,7 @@ files:
1666
1681
  - lib/uniword/wordprocessingml/fallback.rb
1667
1682
  - lib/uniword/wordprocessingml/field_char.rb
1668
1683
  - lib/uniword/wordprocessingml/font.rb
1684
+ - lib/uniword/wordprocessingml/font_replacer.rb
1669
1685
  - lib/uniword/wordprocessingml/font_table.rb
1670
1686
  - lib/uniword/wordprocessingml/fonts.rb
1671
1687
  - lib/uniword/wordprocessingml/footer.rb
@@ -1727,6 +1743,7 @@ files:
1727
1743
  - lib/uniword/wordprocessingml/page_defaults.rb
1728
1744
  - lib/uniword/wordprocessingml/page_margins.rb
1729
1745
  - lib/uniword/wordprocessingml/page_numbering.rb
1746
+ - lib/uniword/wordprocessingml/page_setup.rb
1730
1747
  - lib/uniword/wordprocessingml/page_size.rb
1731
1748
  - lib/uniword/wordprocessingml/paragraph.rb
1732
1749
  - lib/uniword/wordprocessingml/paragraph_borders.rb
@@ -1782,6 +1799,7 @@ files:
1782
1799
  - lib/uniword/wordprocessingml/structured_document_tag/text.rb
1783
1800
  - lib/uniword/wordprocessingml/structured_document_tag_properties.rb
1784
1801
  - lib/uniword/wordprocessingml/style.rb
1802
+ - lib/uniword/wordprocessingml/style_cleanup.rb
1785
1803
  - lib/uniword/wordprocessingml/style_name.rb
1786
1804
  - lib/uniword/wordprocessingml/style_pane_format_filter.rb
1787
1805
  - lib/uniword/wordprocessingml/style_pane_sort_method.rb
@@ -1816,6 +1834,7 @@ files:
1816
1834
  - lib/uniword/wordprocessingml/title_pg.rb
1817
1835
  - lib/uniword/wordprocessingml/tr_height.rb
1818
1836
  - lib/uniword/wordprocessingml/ui_priority.rb
1837
+ - lib/uniword/wordprocessingml/update_fields.rb
1819
1838
  - lib/uniword/wordprocessingml/val_int.rb
1820
1839
  - lib/uniword/wordprocessingml/w14_attributes.rb
1821
1840
  - lib/uniword/wordprocessingml/w14_doc_id.rb
@@ -1,60 +0,0 @@
1
- # Document Validation Configuration
2
- #
3
- # Defines rules and settings for the 7-layer document validation system.
4
- # Each layer validates one specific aspect of document integrity (MECE).
5
-
6
- document_validation:
7
- # General settings
8
- fail_fast: true # Stop validation on first critical error
9
- max_file_size: 104857600 # 100MB maximum file size
10
-
11
- # Layer 1: File Structure Validation
12
- file_structure:
13
- enabled: true
14
- check_extension: true
15
- check_size: true
16
- allowed_extensions:
17
- - '.docx'
18
- - '.doc'
19
-
20
- # Layer 2: ZIP Integrity Validation
21
- zip_integrity:
22
- enabled: true
23
- check_entries: true # Verify required entries exist
24
- check_corruption: true # Test each entry for corruption
25
- verify_compression: true # Validate compression method
26
-
27
- # Layer 3: OOXML Part Validation
28
- ooxml_parts:
29
- enabled: true
30
- require_content_types: true # [Content_Types].xml must exist
31
- require_document: true # word/document.xml must exist
32
- require_relationships: true # _rels/.rels must exist
33
- warn_missing_optional: true # Warn about missing optional parts
34
-
35
- # Layer 4: XML Schema Validation
36
- xml_schema:
37
- enabled: true
38
- strict_parsing: true # Use strict XML parsing
39
- check_encoding: true # Validate XML encoding
40
- validate_namespaces: true # Check namespace declarations
41
-
42
- # Layer 5: Relationship Validation
43
- relationships:
44
- enabled: true
45
- check_targets_exist: true # Verify relationship targets exist
46
- check_circular_refs: false # Check for circular references (expensive)
47
- validate_types: true # Validate relationship type URIs
48
-
49
- # Layer 6: Content Type Validation
50
- content_types:
51
- enabled: true
52
- check_consistency: true # Verify content types are consistent
53
- validate_extensions: true # Check file extensions match declarations
54
-
55
- # Layer 7: Document Semantics Validation
56
- document_semantics:
57
- enabled: true
58
- check_required_elements: true # Verify required elements (body, etc.)
59
- validate_structure: true # Check document hierarchy
60
- check_style_references: true # Validate style references (future)
@@ -1,57 +0,0 @@
1
- # Warning System Configuration
2
- #
3
- # Defines rules for tracking unsupported elements and features during
4
- # document processing. Helps users understand what may be lost in round-trip.
5
-
6
- warning_system:
7
- enabled: true
8
- log_warnings: false # Set to true to log warnings during processing
9
- log_level: :warn # Log level (:info, :warn, :error)
10
-
11
- # Critical elements (data-bearing) - severity: error
12
- # These elements contain important data that will be lost
13
- critical_elements:
14
- - chart # Charts - data visualization
15
- - smartArt # SmartArt diagrams
16
- - sdt # Content controls - user data
17
- - customXml # Custom XML - data binding
18
- - contentPart # Content parts
19
- - control # ActiveX controls
20
-
21
- # Warning elements (important but not critical) - severity: warning
22
- # These elements affect formatting/structure but not core data
23
- warning_elements:
24
- - drawingML # Complex drawings
25
- - vmlDrawing # Legacy VML drawings
26
- - fldSimple # Simple fields
27
- - altChunk # Alternative content chunks
28
- - subDoc # Subdocuments
29
-
30
- # Element-specific suggestions for users
31
- element_suggestions:
32
- chart: "Chart elements are not yet supported. The chart will be preserved as-is but cannot be edited. Consider using image exports for charts. Support planned for v6.1."
33
-
34
- smartArt: "SmartArt diagrams are not yet supported. Diagram will be preserved but cannot be modified. Consider converting to regular shapes. Support planned for v6.2."
35
-
36
- sdt: "Content controls are not yet supported. Controls will be preserved but values cannot be updated programmatically. Support planned for v6.1."
37
-
38
- customXml: "Custom XML data binding is not yet supported. XML data will be preserved but cannot be accessed or modified. Support planned for v6.3."
39
-
40
- drawingML: "Complex DrawingML graphics may not be fully supported. Basic shapes work, but advanced features may be lost."
41
-
42
- vmlDrawing: "Legacy VML drawings have limited support. Consider updating to modern DrawingML format."
43
-
44
- fldSimple: "Some field types are not yet supported. Field will be preserved but may not update correctly."
45
-
46
- control: "ActiveX controls are not supported. Controls will be preserved but not functional."
47
-
48
- altChunk: "Alternative content chunks are not supported. Content may be lost."
49
-
50
- subDoc: "Subdocuments are not supported. Consider consolidating into single document."
51
-
52
- # Reporting options
53
- reporting:
54
- group_by_element: true # Group warnings by element type
55
- include_counts: true # Include occurrence counts
56
- include_suggestions: true # Include suggestions in report
57
- max_warnings: 100 # Maximum warnings to collect (prevent memory issues)