canon 0.1.6 → 0.1.7

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 (136) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +163 -67
  3. data/README.adoc +400 -7
  4. data/docs/Gemfile +9 -0
  5. data/docs/INDEX.adoc +99 -182
  6. data/docs/_config.yml +100 -0
  7. data/docs/advanced/diff-classification.adoc +547 -0
  8. data/docs/advanced/diff-pipeline.adoc +358 -0
  9. data/docs/advanced/index.adoc +214 -0
  10. data/docs/advanced/semantic-diff-report.adoc +390 -0
  11. data/docs/{VERBOSE.adoc → advanced/verbose-mode-architecture.adoc} +51 -53
  12. data/docs/features/diff-formatting/algorithm-specific-output.adoc +533 -0
  13. data/docs/{CHARACTER_VISUALIZATION.adoc → features/diff-formatting/character-visualization.adoc} +23 -62
  14. data/docs/features/diff-formatting/colors-and-symbols.adoc +606 -0
  15. data/docs/features/diff-formatting/context-and-grouping.adoc +490 -0
  16. data/docs/features/diff-formatting/display-filtering.adoc +472 -0
  17. data/docs/features/diff-formatting/index.adoc +140 -0
  18. data/docs/features/environment-configuration/index.adoc +327 -0
  19. data/docs/features/environment-configuration/override-system.adoc +436 -0
  20. data/docs/features/environment-configuration/size-limits.adoc +273 -0
  21. data/docs/features/index.adoc +173 -0
  22. data/docs/features/input-validation/index.adoc +521 -0
  23. data/docs/features/match-options/algorithm-specific-behavior.adoc +365 -0
  24. data/docs/features/match-options/html-policies.adoc +312 -0
  25. data/docs/features/match-options/index.adoc +621 -0
  26. data/docs/getting-started/index.adoc +83 -0
  27. data/docs/getting-started/quick-start.adoc +76 -0
  28. data/docs/guides/choosing-configuration.adoc +689 -0
  29. data/docs/guides/index.adoc +181 -0
  30. data/docs/{CLI.adoc → interfaces/cli/index.adoc} +18 -13
  31. data/docs/interfaces/index.adoc +101 -0
  32. data/docs/{RSPEC.adoc → interfaces/rspec/index.adoc} +242 -31
  33. data/docs/{RUBY_API.adoc → interfaces/ruby-api/index.adoc} +118 -16
  34. data/docs/lychee.toml +65 -0
  35. data/docs/reference/cli-options.adoc +418 -0
  36. data/docs/reference/environment-variables.adoc +375 -0
  37. data/docs/reference/index.adoc +204 -0
  38. data/docs/reference/options-across-interfaces.adoc +417 -0
  39. data/docs/understanding/algorithms/dom-diff.adoc +389 -0
  40. data/docs/understanding/algorithms/index.adoc +314 -0
  41. data/docs/understanding/algorithms/semantic-tree-diff.adoc +533 -0
  42. data/docs/understanding/architecture.adoc +447 -0
  43. data/docs/understanding/comparison-pipeline.adoc +317 -0
  44. data/docs/understanding/formats/html.adoc +380 -0
  45. data/docs/understanding/formats/index.adoc +261 -0
  46. data/docs/understanding/formats/json.adoc +390 -0
  47. data/docs/understanding/formats/xml.adoc +366 -0
  48. data/docs/understanding/formats/yaml.adoc +504 -0
  49. data/docs/understanding/index.adoc +130 -0
  50. data/lib/canon/cli.rb +42 -1
  51. data/lib/canon/commands/diff_command.rb +108 -23
  52. data/lib/canon/comparison/compare_profile.rb +101 -0
  53. data/lib/canon/comparison/comparison_result.rb +41 -2
  54. data/lib/canon/comparison/html_comparator.rb +292 -71
  55. data/lib/canon/comparison/html_compare_profile.rb +117 -0
  56. data/lib/canon/comparison/match_options.rb +42 -4
  57. data/lib/canon/comparison/strategies/base_match_strategy.rb +99 -0
  58. data/lib/canon/comparison/strategies/match_strategy_factory.rb +74 -0
  59. data/lib/canon/comparison/strategies/semantic_tree_match_strategy.rb +220 -0
  60. data/lib/canon/comparison/xml_comparator.rb +695 -91
  61. data/lib/canon/comparison.rb +207 -2
  62. data/lib/canon/config/env_provider.rb +71 -0
  63. data/lib/canon/config/env_schema.rb +58 -0
  64. data/lib/canon/config/override_resolver.rb +55 -0
  65. data/lib/canon/config/type_converter.rb +59 -0
  66. data/lib/canon/config.rb +158 -29
  67. data/lib/canon/data_model.rb +29 -0
  68. data/lib/canon/diff/diff_classifier.rb +74 -14
  69. data/lib/canon/diff/diff_context_builder.rb +41 -0
  70. data/lib/canon/diff/diff_line.rb +18 -2
  71. data/lib/canon/diff/diff_node.rb +18 -3
  72. data/lib/canon/diff/diff_node_mapper.rb +71 -12
  73. data/lib/canon/diff/formatting_detector.rb +53 -0
  74. data/lib/canon/diff_formatter/by_line/base_formatter.rb +60 -5
  75. data/lib/canon/diff_formatter/by_line/html_formatter.rb +68 -16
  76. data/lib/canon/diff_formatter/by_line/json_formatter.rb +0 -37
  77. data/lib/canon/diff_formatter/by_line/simple_formatter.rb +0 -42
  78. data/lib/canon/diff_formatter/by_line/xml_formatter.rb +116 -31
  79. data/lib/canon/diff_formatter/by_line/yaml_formatter.rb +0 -37
  80. data/lib/canon/diff_formatter/by_object/base_formatter.rb +126 -19
  81. data/lib/canon/diff_formatter/by_object/xml_formatter.rb +30 -1
  82. data/lib/canon/diff_formatter/debug_output.rb +7 -1
  83. data/lib/canon/diff_formatter/diff_detail_formatter.rb +674 -57
  84. data/lib/canon/diff_formatter/legend.rb +42 -0
  85. data/lib/canon/diff_formatter.rb +78 -9
  86. data/lib/canon/errors.rb +56 -0
  87. data/lib/canon/formatters/html_formatter_base.rb +35 -1
  88. data/lib/canon/formatters/json_formatter.rb +3 -0
  89. data/lib/canon/formatters/yaml_formatter.rb +3 -0
  90. data/lib/canon/html/data_model.rb +229 -0
  91. data/lib/canon/html.rb +9 -0
  92. data/lib/canon/options/cli_generator.rb +70 -0
  93. data/lib/canon/options/registry.rb +234 -0
  94. data/lib/canon/rspec_matchers.rb +34 -13
  95. data/lib/canon/tree_diff/adapters/html_adapter.rb +316 -0
  96. data/lib/canon/tree_diff/adapters/json_adapter.rb +204 -0
  97. data/lib/canon/tree_diff/adapters/xml_adapter.rb +285 -0
  98. data/lib/canon/tree_diff/adapters/yaml_adapter.rb +213 -0
  99. data/lib/canon/tree_diff/core/attribute_comparator.rb +84 -0
  100. data/lib/canon/tree_diff/core/matching.rb +241 -0
  101. data/lib/canon/tree_diff/core/node_signature.rb +164 -0
  102. data/lib/canon/tree_diff/core/node_weight.rb +135 -0
  103. data/lib/canon/tree_diff/core/tree_node.rb +450 -0
  104. data/lib/canon/tree_diff/matchers/hash_matcher.rb +258 -0
  105. data/lib/canon/tree_diff/matchers/similarity_matcher.rb +168 -0
  106. data/lib/canon/tree_diff/matchers/structural_propagator.rb +242 -0
  107. data/lib/canon/tree_diff/matchers/universal_matcher.rb +220 -0
  108. data/lib/canon/tree_diff/operation_converter.rb +631 -0
  109. data/lib/canon/tree_diff/operations/operation.rb +92 -0
  110. data/lib/canon/tree_diff/operations/operation_detector.rb +626 -0
  111. data/lib/canon/tree_diff/tree_diff_integrator.rb +140 -0
  112. data/lib/canon/tree_diff.rb +33 -0
  113. data/lib/canon/validators/json_validator.rb +3 -1
  114. data/lib/canon/validators/yaml_validator.rb +3 -1
  115. data/lib/canon/version.rb +1 -1
  116. data/lib/canon/xml/data_model.rb +22 -23
  117. data/lib/canon/xml/element_matcher.rb +128 -20
  118. data/lib/canon/xml/namespace_helper.rb +110 -0
  119. data/lib/canon.rb +3 -0
  120. metadata +81 -23
  121. data/_config.yml +0 -116
  122. data/docs/ADVANCED_TOPICS.adoc +0 -20
  123. data/docs/BASIC_USAGE.adoc +0 -16
  124. data/docs/CUSTOMIZING_BEHAVIOR.adoc +0 -19
  125. data/docs/DIFF_ARCHITECTURE.adoc +0 -435
  126. data/docs/DIFF_FORMATTING.adoc +0 -540
  127. data/docs/FORMATS.adoc +0 -447
  128. data/docs/INPUT_VALIDATION.adoc +0 -477
  129. data/docs/MATCH_ARCHITECTURE.adoc +0 -463
  130. data/docs/MATCH_OPTIONS.adoc +0 -719
  131. data/docs/MODES.adoc +0 -432
  132. data/docs/NORMATIVE_INFORMATIVE_DIFFS.adoc +0 -219
  133. data/docs/OPTIONS.adoc +0 -1387
  134. data/docs/PREPROCESSING.adoc +0 -491
  135. data/docs/SEMANTIC_DIFF_REPORT.adoc +0 -528
  136. data/docs/UNDERSTANDING_CANON.adoc +0 -17
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: canon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-10-28 00:00:00.000000000 Z
11
+ date: 2025-12-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: diff-lcs
@@ -139,28 +139,52 @@ files:
139
139
  - CODE_OF_CONDUCT.md
140
140
  - README.adoc
141
141
  - Rakefile
142
- - _config.yml
143
- - docs/ADVANCED_TOPICS.adoc
144
- - docs/BASIC_USAGE.adoc
145
- - docs/CHARACTER_VISUALIZATION.adoc
146
- - docs/CLI.adoc
147
- - docs/CUSTOMIZING_BEHAVIOR.adoc
148
- - docs/DIFF_ARCHITECTURE.adoc
149
- - docs/DIFF_FORMATTING.adoc
150
- - docs/FORMATS.adoc
142
+ - docs/Gemfile
151
143
  - docs/INDEX.adoc
152
- - docs/INPUT_VALIDATION.adoc
153
- - docs/MATCH_ARCHITECTURE.adoc
154
- - docs/MATCH_OPTIONS.adoc
155
- - docs/MODES.adoc
156
- - docs/NORMATIVE_INFORMATIVE_DIFFS.adoc
157
- - docs/OPTIONS.adoc
158
- - docs/PREPROCESSING.adoc
159
- - docs/RSPEC.adoc
160
- - docs/RUBY_API.adoc
161
- - docs/SEMANTIC_DIFF_REPORT.adoc
162
- - docs/UNDERSTANDING_CANON.adoc
163
- - docs/VERBOSE.adoc
144
+ - docs/_config.yml
145
+ - docs/advanced/diff-classification.adoc
146
+ - docs/advanced/diff-pipeline.adoc
147
+ - docs/advanced/index.adoc
148
+ - docs/advanced/semantic-diff-report.adoc
149
+ - docs/advanced/verbose-mode-architecture.adoc
150
+ - docs/features/diff-formatting/algorithm-specific-output.adoc
151
+ - docs/features/diff-formatting/character-visualization.adoc
152
+ - docs/features/diff-formatting/colors-and-symbols.adoc
153
+ - docs/features/diff-formatting/context-and-grouping.adoc
154
+ - docs/features/diff-formatting/display-filtering.adoc
155
+ - docs/features/diff-formatting/index.adoc
156
+ - docs/features/environment-configuration/index.adoc
157
+ - docs/features/environment-configuration/override-system.adoc
158
+ - docs/features/environment-configuration/size-limits.adoc
159
+ - docs/features/index.adoc
160
+ - docs/features/input-validation/index.adoc
161
+ - docs/features/match-options/algorithm-specific-behavior.adoc
162
+ - docs/features/match-options/html-policies.adoc
163
+ - docs/features/match-options/index.adoc
164
+ - docs/getting-started/index.adoc
165
+ - docs/getting-started/quick-start.adoc
166
+ - docs/guides/choosing-configuration.adoc
167
+ - docs/guides/index.adoc
168
+ - docs/interfaces/cli/index.adoc
169
+ - docs/interfaces/index.adoc
170
+ - docs/interfaces/rspec/index.adoc
171
+ - docs/interfaces/ruby-api/index.adoc
172
+ - docs/lychee.toml
173
+ - docs/reference/cli-options.adoc
174
+ - docs/reference/environment-variables.adoc
175
+ - docs/reference/index.adoc
176
+ - docs/reference/options-across-interfaces.adoc
177
+ - docs/understanding/algorithms/dom-diff.adoc
178
+ - docs/understanding/algorithms/index.adoc
179
+ - docs/understanding/algorithms/semantic-tree-diff.adoc
180
+ - docs/understanding/architecture.adoc
181
+ - docs/understanding/comparison-pipeline.adoc
182
+ - docs/understanding/formats/html.adoc
183
+ - docs/understanding/formats/index.adoc
184
+ - docs/understanding/formats/json.adoc
185
+ - docs/understanding/formats/xml.adoc
186
+ - docs/understanding/formats/yaml.adoc
187
+ - docs/understanding/index.adoc
164
188
  - exe/canon
165
189
  - lib/canon.rb
166
190
  - lib/canon/cli.rb
@@ -168,13 +192,23 @@ files:
168
192
  - lib/canon/commands/format_command.rb
169
193
  - lib/canon/comparison.rb
170
194
  - lib/canon/comparison/base_comparator.rb
195
+ - lib/canon/comparison/compare_profile.rb
171
196
  - lib/canon/comparison/comparison_result.rb
172
197
  - lib/canon/comparison/html_comparator.rb
198
+ - lib/canon/comparison/html_compare_profile.rb
173
199
  - lib/canon/comparison/json_comparator.rb
174
200
  - lib/canon/comparison/match_options.rb
201
+ - lib/canon/comparison/strategies/base_match_strategy.rb
202
+ - lib/canon/comparison/strategies/match_strategy_factory.rb
203
+ - lib/canon/comparison/strategies/semantic_tree_match_strategy.rb
175
204
  - lib/canon/comparison/xml_comparator.rb
176
205
  - lib/canon/comparison/yaml_comparator.rb
177
206
  - lib/canon/config.rb
207
+ - lib/canon/config/env_provider.rb
208
+ - lib/canon/config/env_schema.rb
209
+ - lib/canon/config/override_resolver.rb
210
+ - lib/canon/config/type_converter.rb
211
+ - lib/canon/data_model.rb
178
212
  - lib/canon/diff/diff_block.rb
179
213
  - lib/canon/diff/diff_block_builder.rb
180
214
  - lib/canon/diff/diff_classifier.rb
@@ -185,6 +219,7 @@ files:
185
219
  - lib/canon/diff/diff_node_mapper.rb
186
220
  - lib/canon/diff/diff_report.rb
187
221
  - lib/canon/diff/diff_report_builder.rb
222
+ - lib/canon/diff/formatting_detector.rb
188
223
  - lib/canon/diff_formatter.rb
189
224
  - lib/canon/diff_formatter/by_line/base_formatter.rb
190
225
  - lib/canon/diff_formatter/by_line/html_formatter.rb
@@ -208,10 +243,32 @@ files:
208
243
  - lib/canon/formatters/json_formatter.rb
209
244
  - lib/canon/formatters/xml_formatter.rb
210
245
  - lib/canon/formatters/yaml_formatter.rb
246
+ - lib/canon/html.rb
247
+ - lib/canon/html/data_model.rb
248
+ - lib/canon/options/cli_generator.rb
249
+ - lib/canon/options/registry.rb
211
250
  - lib/canon/pretty_printer/html.rb
212
251
  - lib/canon/pretty_printer/json.rb
213
252
  - lib/canon/pretty_printer/xml.rb
214
253
  - lib/canon/rspec_matchers.rb
254
+ - lib/canon/tree_diff.rb
255
+ - lib/canon/tree_diff/adapters/html_adapter.rb
256
+ - lib/canon/tree_diff/adapters/json_adapter.rb
257
+ - lib/canon/tree_diff/adapters/xml_adapter.rb
258
+ - lib/canon/tree_diff/adapters/yaml_adapter.rb
259
+ - lib/canon/tree_diff/core/attribute_comparator.rb
260
+ - lib/canon/tree_diff/core/matching.rb
261
+ - lib/canon/tree_diff/core/node_signature.rb
262
+ - lib/canon/tree_diff/core/node_weight.rb
263
+ - lib/canon/tree_diff/core/tree_node.rb
264
+ - lib/canon/tree_diff/matchers/hash_matcher.rb
265
+ - lib/canon/tree_diff/matchers/similarity_matcher.rb
266
+ - lib/canon/tree_diff/matchers/structural_propagator.rb
267
+ - lib/canon/tree_diff/matchers/universal_matcher.rb
268
+ - lib/canon/tree_diff/operation_converter.rb
269
+ - lib/canon/tree_diff/operations/operation.rb
270
+ - lib/canon/tree_diff/operations/operation_detector.rb
271
+ - lib/canon/tree_diff/tree_diff_integrator.rb
215
272
  - lib/canon/validators/base_validator.rb
216
273
  - lib/canon/validators/html_validator.rb
217
274
  - lib/canon/validators/json_validator.rb
@@ -225,6 +282,7 @@ files:
225
282
  - lib/canon/xml/element_matcher.rb
226
283
  - lib/canon/xml/line_range_mapper.rb
227
284
  - lib/canon/xml/namespace_handler.rb
285
+ - lib/canon/xml/namespace_helper.rb
228
286
  - lib/canon/xml/node.rb
229
287
  - lib/canon/xml/nodes/attribute_node.rb
230
288
  - lib/canon/xml/nodes/comment_node.rb
data/_config.yml DELETED
@@ -1,116 +0,0 @@
1
- # Jekyll configuration for Canon documentation
2
- # Uses Just the Docs theme - https://just-the-docs.com/
3
-
4
- # Site settings
5
- title: Canon Documentation
6
- description: Semantic comparison for serialization formats (XML, HTML, JSON, YAML)
7
- url: https://lutaml.github.io
8
- baseurl: /canon
9
-
10
- # Theme
11
- theme: just-the-docs
12
- remote_theme: just-the-docs/just-the-docs
13
-
14
- # AsciiDoc support
15
- asciidoc: {}
16
- asciidoctor:
17
- attributes:
18
- - idprefix=_
19
- - source-highlighter=rouge
20
- - icons=font
21
- - experimental=''
22
-
23
- # Build settings
24
- plugins:
25
- - jekyll-asciidoc
26
- - jekyll-seo-tag
27
-
28
- # Just the Docs theme configuration
29
- search_enabled: true
30
- search:
31
- heading_level: 3
32
- previews: 3
33
- preview_words_before: 5
34
- preview_words_after: 10
35
- tokenizer_separator: /[\s/]+/
36
-
37
- # Navigation
38
- nav_sort: case_insensitive
39
-
40
- # Footer content
41
- footer_content: 'Copyright &copy; Ribose. <a href="https://opensource.org/licenses/BSD-2-Clause">BSD-2-Clause License</a>.'
42
-
43
- # Color scheme - use light mode
44
- color_scheme: light
45
-
46
- # Logo
47
- logo: false
48
-
49
- # Aux links for the upper right navigation
50
- aux_links:
51
- "Canon on GitHub":
52
- - "https://github.com/lutaml/canon"
53
- "Report Issue":
54
- - "https://github.com/lutaml/canon/issues"
55
-
56
- # Aux links configuration
57
- aux_links_new_tab: true
58
-
59
- # Heading anchors
60
- heading_anchors: true
61
-
62
- # Back to top link
63
- back_to_top: true
64
- back_to_top_text: "Back to top"
65
-
66
- # Collections - for organizing documentation
67
- collections:
68
- docs:
69
- permalink: "/:collection/:path/"
70
- output: true
71
-
72
- # Collection defaults
73
- defaults:
74
- - scope:
75
- path: "docs"
76
- type: "docs"
77
- values:
78
- layout: "default"
79
- nav_exclude: false
80
-
81
- # Only process documentation AsciiDoc files
82
- include:
83
- - index.adoc
84
-
85
- # Exclude everything except docs directory
86
- exclude:
87
- - Gemfile
88
- - Gemfile.lock
89
- - Gemfile.docs
90
- - README.adoc
91
- - node_modules
92
- - vendor
93
- - lib
94
- - spec
95
- - bin
96
- - exe
97
- - pkg
98
- - sig
99
- - old-docs
100
- - .rspec
101
- - .rubocop.yml
102
- - .rubocop_todo.yml
103
- - .gitignore
104
- - Rakefile
105
- - canon.gemspec
106
- - .git
107
- - .github
108
- - "*.md"
109
- - "*.swp"
110
- - "*.tmp"
111
- - "**/*.md"
112
- - "!docs/**"
113
-
114
- # Keep only AsciiDoc files in docs directory
115
- keep_files:
116
- - "docs/*.adoc"
@@ -1,20 +0,0 @@
1
- ---
2
- layout: default
3
- title: Advanced Topics
4
- nav_order: 5
5
- has_children: true
6
- ---
7
- = Advanced topics
8
-
9
- For developers and advanced users:
10
-
11
- * **link:VERBOSE[Verbose mode]** - Two-tier diff output architecture
12
- * **link:SEMANTIC_DIFF_REPORT[Semantic diff report]** - Detailed report
13
- format
14
- * **link:NORMATIVE_INFORMATIVE_DIFFS[Normative vs informative diffs]** - Diff
15
- classification
16
- * **link:DIFF_ARCHITECTURE[Diff architecture]** - Six-layer technical
17
- pipeline
18
-
19
- These documents cover Canon's internal architecture and advanced features for
20
- developers extending or maintaining Canon.
@@ -1,16 +0,0 @@
1
- ---
2
- layout: default
3
- title: Basic Usage
4
- nav_order: 2
5
- has_children: true
6
- ---
7
- = Basic usage
8
-
9
- Choose your interface for working with Canon:
10
-
11
- * **link:RUBY_API[Ruby API]** - Using Canon from Ruby code
12
- * **link:CLI[Command-line interface]** - Terminal commands and options
13
- * **link:RSPEC[RSpec matchers]** - Testing with Canon in RSpec
14
-
15
- These guides provide practical examples and complete API reference for each
16
- interface.
@@ -1,19 +0,0 @@
1
- ---
2
- layout: default
3
- title: Customizing Behavior
4
- nav_order: 4
5
- has_children: true
6
- ---
7
- = Customizing behavior
8
-
9
- Configure Canon for your specific needs:
10
-
11
- * **link:MATCH_OPTIONS[Match options]** - Match dimensions and profiles
12
- * **link:PREPROCESSING[Preprocessing]** - Document normalization options
13
- * **link:DIFF_FORMATTING[Diff formatting]** - Customizing diff output
14
- * **link:INPUT_VALIDATION[Input validation]** - Error handling
15
- * **link:CHARACTER_VISUALIZATION[Character visualization]** - Whitespace
16
- visibility
17
-
18
- These documents cover Canon's configuration options for fine-tuning comparison
19
- behavior and diff output.