coradoc 1.1.8 → 2.0.16

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 (226) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +1 -1
  3. data/Rakefile +3 -12
  4. data/exe/coradoc +21 -2
  5. data/lib/coradoc/cli.rb +205 -91
  6. data/lib/coradoc/configurable.rb +527 -0
  7. data/lib/coradoc/coradoc.rb +467 -0
  8. data/lib/coradoc/core_model/annotation_block.rb +57 -0
  9. data/lib/coradoc/core_model/base.rb +172 -0
  10. data/lib/coradoc/core_model/bibliography.rb +41 -0
  11. data/lib/coradoc/core_model/bibliography_entry.rb +48 -0
  12. data/lib/coradoc/core_model/block.rb +63 -0
  13. data/lib/coradoc/core_model/children_content.rb +53 -0
  14. data/lib/coradoc/core_model/comment_block.rb +12 -0
  15. data/lib/coradoc/core_model/definition_item.rb +46 -0
  16. data/lib/coradoc/core_model/definition_list.rb +28 -0
  17. data/lib/coradoc/core_model/element_attribute.rb +26 -0
  18. data/lib/coradoc/core_model/example_block.rb +12 -0
  19. data/lib/coradoc/core_model/footnote.rb +92 -0
  20. data/lib/coradoc/core_model/horizontal_rule_block.rb +12 -0
  21. data/lib/coradoc/core_model/id_generator.rb +20 -0
  22. data/lib/coradoc/core_model/image.rb +66 -0
  23. data/lib/coradoc/core_model/inline_element.rb +172 -0
  24. data/lib/coradoc/core_model/list_block.rb +135 -0
  25. data/lib/coradoc/core_model/list_item.rb +142 -0
  26. data/lib/coradoc/core_model/listing_block.rb +15 -0
  27. data/lib/coradoc/core_model/literal_block.rb +12 -0
  28. data/lib/coradoc/core_model/metadata.rb +79 -0
  29. data/lib/coradoc/core_model/open_block.rb +12 -0
  30. data/lib/coradoc/core_model/paragraph_block.rb +12 -0
  31. data/lib/coradoc/core_model/pass_block.rb +12 -0
  32. data/lib/coradoc/core_model/quote_block.rb +14 -0
  33. data/lib/coradoc/core_model/reviewer_block.rb +12 -0
  34. data/lib/coradoc/core_model/sidebar_block.rb +12 -0
  35. data/lib/coradoc/core_model/source_block.rb +12 -0
  36. data/lib/coradoc/core_model/structural_element.rb +111 -0
  37. data/lib/coradoc/core_model/table.rb +148 -0
  38. data/lib/coradoc/core_model/term.rb +53 -0
  39. data/lib/coradoc/core_model/text_content.rb +22 -0
  40. data/lib/coradoc/core_model/toc.rb +105 -0
  41. data/lib/coradoc/core_model/toc_generator.rb +151 -0
  42. data/lib/coradoc/core_model/verse_block.rb +14 -0
  43. data/lib/coradoc/core_model.rb +77 -0
  44. data/lib/coradoc/document_builder.rb +184 -0
  45. data/lib/coradoc/document_manipulator.rb +203 -0
  46. data/lib/coradoc/errors.rb +312 -0
  47. data/lib/coradoc/format_module.rb +60 -0
  48. data/lib/coradoc/hooks.rb +176 -0
  49. data/lib/coradoc/input.rb +17 -7
  50. data/lib/coradoc/logger.rb +54 -0
  51. data/lib/coradoc/output.rb +17 -6
  52. data/lib/coradoc/performance_regression.rb +109 -0
  53. data/lib/coradoc/processor_registry.rb +50 -0
  54. data/lib/coradoc/query.rb +455 -0
  55. data/lib/coradoc/registry.rb +156 -0
  56. data/lib/coradoc/serializer/registry.rb +150 -0
  57. data/lib/coradoc/transform/base.rb +21 -0
  58. data/lib/coradoc/transform.rb +7 -0
  59. data/lib/coradoc/validation.rb +646 -0
  60. data/lib/coradoc/version.rb +1 -1
  61. data/lib/coradoc/visitor.rb +283 -0
  62. data/lib/coradoc.rb +40 -19
  63. metadata +68 -277
  64. data/.editorconfig +0 -15
  65. data/.envrc +0 -1
  66. data/.irbrc +0 -1
  67. data/.pryrc.sample +0 -1
  68. data/.rubocop.yml +0 -14
  69. data/.rubocop_todo.yml +0 -179
  70. data/CHANGELOG.md +0 -9
  71. data/CODE_OF_CONDUCT.md +0 -84
  72. data/Dockerfile +0 -19
  73. data/Gemfile +0 -16
  74. data/LICENSE.txt +0 -21
  75. data/Makefile +0 -35
  76. data/README.Docker.adoc +0 -57
  77. data/README.adoc +0 -119
  78. data/coradoc.gemspec +0 -40
  79. data/docker-compose.yml +0 -14
  80. data/exe/reverse_adoc +0 -81
  81. data/exe/w2a +0 -60
  82. data/flake.lock +0 -114
  83. data/flake.nix +0 -135
  84. data/lib/coradoc/converter.rb +0 -144
  85. data/lib/coradoc/document.rb +0 -77
  86. data/lib/coradoc/element/admonition.rb +0 -18
  87. data/lib/coradoc/element/attribute.rb +0 -36
  88. data/lib/coradoc/element/attribute_list.rb +0 -138
  89. data/lib/coradoc/element/audio.rb +0 -33
  90. data/lib/coradoc/element/author.rb +0 -24
  91. data/lib/coradoc/element/base.rb +0 -92
  92. data/lib/coradoc/element/bibliography.rb +0 -24
  93. data/lib/coradoc/element/bibliography_entry.rb +0 -24
  94. data/lib/coradoc/element/block/core.rb +0 -76
  95. data/lib/coradoc/element/block/example.rb +0 -23
  96. data/lib/coradoc/element/block/listing.rb +0 -21
  97. data/lib/coradoc/element/block/literal.rb +0 -21
  98. data/lib/coradoc/element/block/open.rb +0 -22
  99. data/lib/coradoc/element/block/pass.rb +0 -21
  100. data/lib/coradoc/element/block/quote.rb +0 -19
  101. data/lib/coradoc/element/block/reviewer_comment.rb +0 -19
  102. data/lib/coradoc/element/block/side.rb +0 -19
  103. data/lib/coradoc/element/block/sourcecode.rb +0 -21
  104. data/lib/coradoc/element/block.rb +0 -17
  105. data/lib/coradoc/element/break.rb +0 -11
  106. data/lib/coradoc/element/comment_block.rb +0 -22
  107. data/lib/coradoc/element/comment_line.rb +0 -18
  108. data/lib/coradoc/element/document_attributes.rb +0 -33
  109. data/lib/coradoc/element/header.rb +0 -22
  110. data/lib/coradoc/element/image/block_image.rb +0 -32
  111. data/lib/coradoc/element/image/core.rb +0 -58
  112. data/lib/coradoc/element/image/inline_image.rb +0 -12
  113. data/lib/coradoc/element/image.rb +0 -10
  114. data/lib/coradoc/element/include.rb +0 -18
  115. data/lib/coradoc/element/inline/anchor.rb +0 -19
  116. data/lib/coradoc/element/inline/attribute_reference.rb +0 -19
  117. data/lib/coradoc/element/inline/bold.rb +0 -25
  118. data/lib/coradoc/element/inline/cross_reference.rb +0 -46
  119. data/lib/coradoc/element/inline/footnote.rb +0 -24
  120. data/lib/coradoc/element/inline/hard_line_break.rb +0 -11
  121. data/lib/coradoc/element/inline/highlight.rb +0 -25
  122. data/lib/coradoc/element/inline/italic.rb +0 -25
  123. data/lib/coradoc/element/inline/link.rb +0 -42
  124. data/lib/coradoc/element/inline/monospace.rb +0 -25
  125. data/lib/coradoc/element/inline/quotation.rb +0 -20
  126. data/lib/coradoc/element/inline/small.rb +0 -19
  127. data/lib/coradoc/element/inline/span.rb +0 -37
  128. data/lib/coradoc/element/inline/subscript.rb +0 -20
  129. data/lib/coradoc/element/inline/superscript.rb +0 -20
  130. data/lib/coradoc/element/inline/underline.rb +0 -19
  131. data/lib/coradoc/element/inline.rb +0 -23
  132. data/lib/coradoc/element/list/core.rb +0 -51
  133. data/lib/coradoc/element/list/definition.rb +0 -29
  134. data/lib/coradoc/element/list/ordered.rb +0 -17
  135. data/lib/coradoc/element/list/unordered.rb +0 -17
  136. data/lib/coradoc/element/list.rb +0 -13
  137. data/lib/coradoc/element/list_item.rb +0 -98
  138. data/lib/coradoc/element/list_item_definition.rb +0 -32
  139. data/lib/coradoc/element/paragraph.rb +0 -37
  140. data/lib/coradoc/element/revision.rb +0 -27
  141. data/lib/coradoc/element/section.rb +0 -62
  142. data/lib/coradoc/element/table.rb +0 -91
  143. data/lib/coradoc/element/tag.rb +0 -19
  144. data/lib/coradoc/element/term.rb +0 -22
  145. data/lib/coradoc/element/text_element.rb +0 -92
  146. data/lib/coradoc/element/title.rb +0 -62
  147. data/lib/coradoc/element/video.rb +0 -50
  148. data/lib/coradoc/generator.rb +0 -19
  149. data/lib/coradoc/input/adoc.rb +0 -30
  150. data/lib/coradoc/input/docx.rb +0 -64
  151. data/lib/coradoc/input/html/LICENSE.txt +0 -25
  152. data/lib/coradoc/input/html/README.adoc +0 -308
  153. data/lib/coradoc/input/html/cleaner.rb +0 -142
  154. data/lib/coradoc/input/html/config.rb +0 -77
  155. data/lib/coradoc/input/html/converters/a.rb +0 -52
  156. data/lib/coradoc/input/html/converters/aside.rb +0 -16
  157. data/lib/coradoc/input/html/converters/audio.rb +0 -29
  158. data/lib/coradoc/input/html/converters/base.rb +0 -108
  159. data/lib/coradoc/input/html/converters/blockquote.rb +0 -22
  160. data/lib/coradoc/input/html/converters/br.rb +0 -15
  161. data/lib/coradoc/input/html/converters/bypass.rb +0 -81
  162. data/lib/coradoc/input/html/converters/code.rb +0 -23
  163. data/lib/coradoc/input/html/converters/div.rb +0 -19
  164. data/lib/coradoc/input/html/converters/dl.rb +0 -62
  165. data/lib/coradoc/input/html/converters/drop.rb +0 -26
  166. data/lib/coradoc/input/html/converters/em.rb +0 -21
  167. data/lib/coradoc/input/html/converters/figure.rb +0 -25
  168. data/lib/coradoc/input/html/converters/h.rb +0 -42
  169. data/lib/coradoc/input/html/converters/head.rb +0 -23
  170. data/lib/coradoc/input/html/converters/hr.rb +0 -15
  171. data/lib/coradoc/input/html/converters/ignore.rb +0 -20
  172. data/lib/coradoc/input/html/converters/img.rb +0 -110
  173. data/lib/coradoc/input/html/converters/li.rb +0 -17
  174. data/lib/coradoc/input/html/converters/mark.rb +0 -19
  175. data/lib/coradoc/input/html/converters/markup.rb +0 -31
  176. data/lib/coradoc/input/html/converters/math.rb +0 -38
  177. data/lib/coradoc/input/html/converters/ol.rb +0 -65
  178. data/lib/coradoc/input/html/converters/p.rb +0 -23
  179. data/lib/coradoc/input/html/converters/pass_through.rb +0 -17
  180. data/lib/coradoc/input/html/converters/pre.rb +0 -55
  181. data/lib/coradoc/input/html/converters/q.rb +0 -16
  182. data/lib/coradoc/input/html/converters/strong.rb +0 -20
  183. data/lib/coradoc/input/html/converters/sub.rb +0 -22
  184. data/lib/coradoc/input/html/converters/sup.rb +0 -22
  185. data/lib/coradoc/input/html/converters/table.rb +0 -319
  186. data/lib/coradoc/input/html/converters/td.rb +0 -81
  187. data/lib/coradoc/input/html/converters/text.rb +0 -32
  188. data/lib/coradoc/input/html/converters/th.rb +0 -18
  189. data/lib/coradoc/input/html/converters/tr.rb +0 -22
  190. data/lib/coradoc/input/html/converters/video.rb +0 -29
  191. data/lib/coradoc/input/html/converters.rb +0 -59
  192. data/lib/coradoc/input/html/errors.rb +0 -14
  193. data/lib/coradoc/input/html/html_converter.rb +0 -168
  194. data/lib/coradoc/input/html/plugin.rb +0 -131
  195. data/lib/coradoc/input/html/plugins/plateau.rb +0 -213
  196. data/lib/coradoc/input/html/postprocessor.rb +0 -220
  197. data/lib/coradoc/input/html.rb +0 -61
  198. data/lib/coradoc/legacy_parser.rb +0 -200
  199. data/lib/coradoc/oscal.rb +0 -99
  200. data/lib/coradoc/output/adoc.rb +0 -19
  201. data/lib/coradoc/output/coradoc_tree_debug.rb +0 -21
  202. data/lib/coradoc/parser/asciidoc/admonition.rb +0 -24
  203. data/lib/coradoc/parser/asciidoc/attribute_list.rb +0 -89
  204. data/lib/coradoc/parser/asciidoc/base.rb +0 -87
  205. data/lib/coradoc/parser/asciidoc/bibliography.rb +0 -29
  206. data/lib/coradoc/parser/asciidoc/block.rb +0 -94
  207. data/lib/coradoc/parser/asciidoc/citation.rb +0 -30
  208. data/lib/coradoc/parser/asciidoc/content.rb +0 -64
  209. data/lib/coradoc/parser/asciidoc/document_attributes.rb +0 -25
  210. data/lib/coradoc/parser/asciidoc/header.rb +0 -29
  211. data/lib/coradoc/parser/asciidoc/inline.rb +0 -195
  212. data/lib/coradoc/parser/asciidoc/list.rb +0 -115
  213. data/lib/coradoc/parser/asciidoc/paragraph.rb +0 -54
  214. data/lib/coradoc/parser/asciidoc/section.rb +0 -61
  215. data/lib/coradoc/parser/asciidoc/table.rb +0 -32
  216. data/lib/coradoc/parser/asciidoc/term.rb +0 -41
  217. data/lib/coradoc/parser/asciidoc/text.rb +0 -158
  218. data/lib/coradoc/parser/base.rb +0 -40
  219. data/lib/coradoc/parser.rb +0 -11
  220. data/lib/coradoc/reverse_adoc.rb +0 -18
  221. data/lib/coradoc/transformer.rb +0 -476
  222. data/lib/coradoc/util.rb +0 -12
  223. data/lib/reverse_adoc.rb +0 -20
  224. data/utils/inspect_asciidoc.rb +0 -29
  225. data/utils/parser_analyzer.rb +0 -66
  226. data/utils/round_trip.rb +0 -53
@@ -0,0 +1,150 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module Serializer
5
+ # Registry for document element serializers
6
+ #
7
+ # Provides a registry-based pattern for looking up serializers
8
+ # for document element types. This allows users to register
9
+ # custom serializers for their own element types or override
10
+ # existing serializers.
11
+ #
12
+ # @example Registering a custom serializer
13
+ # Coradoc::Serializer::Registry.register(MyCustomElement, MyCustomSerializer)
14
+ #
15
+ # @example Looking up a serializer
16
+ # serializer = Coradoc::Serializer::Registry.lookup(element)
17
+ # output = serializer.serialize(element) if serializer
18
+ #
19
+ class Registry
20
+ class << self
21
+ # Get the global registry instance
22
+ #
23
+ # @return [Hash] the registry hash
24
+ def registry
25
+ @registry ||= {}
26
+ end
27
+
28
+ # Register a serializer for a model class
29
+ #
30
+ # @param model_class [Class] The model class to serialize
31
+ # @param serializer_class [Class] The serializer class to use
32
+ # @return [Class, nil] The previous serializer class, if any
33
+ def register(model_class, serializer_class)
34
+ key = class_key(model_class)
35
+ previous = registry[key]
36
+ registry[key] = serializer_class
37
+ previous
38
+ end
39
+
40
+ # Unregister a serializer for a model class
41
+ #
42
+ # @param model_class [Class] The model class to unregister
43
+ # @return [Class, nil] The removed serializer class, if any
44
+ def unregister(model_class)
45
+ key = class_key(model_class)
46
+ registry.delete(key)
47
+ end
48
+
49
+ # Look up a serializer for a model instance or class
50
+ #
51
+ # @param model [Object, Class] The model instance or class
52
+ # @return [Class, nil] The serializer class, or nil if not found
53
+ def lookup(model)
54
+ model_class = model.is_a?(Class) ? model : model.class
55
+ key = class_key(model_class)
56
+
57
+ # Direct lookup
58
+ return registry[key] if registry.key?(key)
59
+
60
+ # Try parent classes
61
+ model_class.ancestors.each do |ancestor|
62
+ next if ancestor == model_class || ancestor == Object
63
+
64
+ ancestor_key = class_key(ancestor)
65
+ return registry[ancestor_key] if registry.key?(ancestor_key)
66
+ end
67
+
68
+ nil
69
+ end
70
+
71
+ # Check if a serializer is registered for a model
72
+ #
73
+ # @param model [Object, Class] The model instance or class
74
+ # @return [Boolean] true if a serializer is registered
75
+ def registered?(model)
76
+ !lookup(model).nil?
77
+ end
78
+
79
+ # Get all registered model classes
80
+ #
81
+ # @return [Array<Class>] Array of registered model classes
82
+ def registered_models
83
+ registry.keys
84
+ end
85
+
86
+ # Clear all registered serializers
87
+ #
88
+ # @return [Hash] Empty registry
89
+ def clear
90
+ @registry = {}
91
+ end
92
+
93
+ # Serialize a model using its registered serializer
94
+ #
95
+ # @param model [Object] The model to serialize
96
+ # @param format [Symbol] The output format (:adoc, :html, :md, etc.)
97
+ # @param options [Hash] Additional serialization options
98
+ # @return [String, nil] The serialized output, or nil if no serializer found
99
+ def serialize(model, format: :adoc, **options)
100
+ serializer_class = lookup(model)
101
+ return nil unless serializer_class
102
+
103
+ serializer = serializer_class.is_a?(Class) ? serializer_class.new : serializer_class
104
+
105
+ if serializer.is_a?(Base)
106
+ serializer.serialize(model, format: format, **options)
107
+ else
108
+ serializer.to_s
109
+ end
110
+ end
111
+
112
+ private
113
+
114
+ # Generate a registry key for a class
115
+ def class_key(klass)
116
+ klass.name.to_s
117
+ end
118
+ end
119
+ end
120
+
121
+ # Base class for element serializers
122
+ #
123
+ # Provides a common interface for all serializers.
124
+ # Subclasses should implement #serialize method.
125
+ #
126
+ # @example Creating a custom serializer
127
+ # class MyElementSerializer < Coradoc::Serializer::Base
128
+ # def serialize(element, format: :adoc, **options)
129
+ # "Custom: #{element.text}"
130
+ # end
131
+ # end
132
+ #
133
+ class Base
134
+ # Serialize an element to the target format
135
+ #
136
+ # @param element [Object] The element to serialize
137
+ # @param format [Symbol] The output format
138
+ # @param options [Hash] Additional options
139
+ # @return [String] The serialized output
140
+ def serialize(element, format: :adoc, **_options)
141
+ element.to_s
142
+ end
143
+
144
+ # Class method for serialization
145
+ def self.serialize(element, **options)
146
+ new.serialize(element, **options)
147
+ end
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module Transform
5
+ module Base
6
+ def self.included(base)
7
+ base.extend(ClassMethods)
8
+ end
9
+
10
+ module ClassMethods
11
+ def transform(model)
12
+ raise NotImplementedError, "#{name} must implement .transform"
13
+ end
14
+ end
15
+
16
+ def transform(model)
17
+ self.class.transform(model)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ module Transform
5
+ autoload :Base, "#{__dir__}/transform/base"
6
+ end
7
+ end