coradoc 1.1.8 → 2.0.12

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.

Potentially problematic release.


This version of coradoc might be problematic. Click here for more details.

Files changed (225) 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 +185 -91
  6. data/lib/coradoc/configurable.rb +527 -0
  7. data/lib/coradoc/coradoc.rb +463 -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 +10 -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 +10 -0
  19. data/lib/coradoc/core_model/footnote.rb +92 -0
  20. data/lib/coradoc/core_model/horizontal_rule_block.rb +10 -0
  21. data/lib/coradoc/core_model/id_generator.rb +16 -0
  22. data/lib/coradoc/core_model/image.rb +66 -0
  23. data/lib/coradoc/core_model/inline_element.rb +140 -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 +13 -0
  27. data/lib/coradoc/core_model/literal_block.rb +10 -0
  28. data/lib/coradoc/core_model/metadata.rb +79 -0
  29. data/lib/coradoc/core_model/open_block.rb +10 -0
  30. data/lib/coradoc/core_model/paragraph_block.rb +10 -0
  31. data/lib/coradoc/core_model/pass_block.rb +10 -0
  32. data/lib/coradoc/core_model/quote_block.rb +12 -0
  33. data/lib/coradoc/core_model/reviewer_block.rb +10 -0
  34. data/lib/coradoc/core_model/sidebar_block.rb +10 -0
  35. data/lib/coradoc/core_model/source_block.rb +10 -0
  36. data/lib/coradoc/core_model/structural_element.rb +94 -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 +12 -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 +49 -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.rb +11 -0
  58. data/lib/coradoc/validation.rb +646 -0
  59. data/lib/coradoc/version.rb +1 -1
  60. data/lib/coradoc/visitor.rb +283 -0
  61. data/lib/coradoc.rb +40 -19
  62. metadata +67 -277
  63. data/.editorconfig +0 -15
  64. data/.envrc +0 -1
  65. data/.irbrc +0 -1
  66. data/.pryrc.sample +0 -1
  67. data/.rubocop.yml +0 -14
  68. data/.rubocop_todo.yml +0 -179
  69. data/CHANGELOG.md +0 -9
  70. data/CODE_OF_CONDUCT.md +0 -84
  71. data/Dockerfile +0 -19
  72. data/Gemfile +0 -16
  73. data/LICENSE.txt +0 -21
  74. data/Makefile +0 -35
  75. data/README.Docker.adoc +0 -57
  76. data/README.adoc +0 -119
  77. data/coradoc.gemspec +0 -40
  78. data/docker-compose.yml +0 -14
  79. data/exe/reverse_adoc +0 -81
  80. data/exe/w2a +0 -60
  81. data/flake.lock +0 -114
  82. data/flake.nix +0 -135
  83. data/lib/coradoc/converter.rb +0 -144
  84. data/lib/coradoc/document.rb +0 -77
  85. data/lib/coradoc/element/admonition.rb +0 -18
  86. data/lib/coradoc/element/attribute.rb +0 -36
  87. data/lib/coradoc/element/attribute_list.rb +0 -138
  88. data/lib/coradoc/element/audio.rb +0 -33
  89. data/lib/coradoc/element/author.rb +0 -24
  90. data/lib/coradoc/element/base.rb +0 -92
  91. data/lib/coradoc/element/bibliography.rb +0 -24
  92. data/lib/coradoc/element/bibliography_entry.rb +0 -24
  93. data/lib/coradoc/element/block/core.rb +0 -76
  94. data/lib/coradoc/element/block/example.rb +0 -23
  95. data/lib/coradoc/element/block/listing.rb +0 -21
  96. data/lib/coradoc/element/block/literal.rb +0 -21
  97. data/lib/coradoc/element/block/open.rb +0 -22
  98. data/lib/coradoc/element/block/pass.rb +0 -21
  99. data/lib/coradoc/element/block/quote.rb +0 -19
  100. data/lib/coradoc/element/block/reviewer_comment.rb +0 -19
  101. data/lib/coradoc/element/block/side.rb +0 -19
  102. data/lib/coradoc/element/block/sourcecode.rb +0 -21
  103. data/lib/coradoc/element/block.rb +0 -17
  104. data/lib/coradoc/element/break.rb +0 -11
  105. data/lib/coradoc/element/comment_block.rb +0 -22
  106. data/lib/coradoc/element/comment_line.rb +0 -18
  107. data/lib/coradoc/element/document_attributes.rb +0 -33
  108. data/lib/coradoc/element/header.rb +0 -22
  109. data/lib/coradoc/element/image/block_image.rb +0 -32
  110. data/lib/coradoc/element/image/core.rb +0 -58
  111. data/lib/coradoc/element/image/inline_image.rb +0 -12
  112. data/lib/coradoc/element/image.rb +0 -10
  113. data/lib/coradoc/element/include.rb +0 -18
  114. data/lib/coradoc/element/inline/anchor.rb +0 -19
  115. data/lib/coradoc/element/inline/attribute_reference.rb +0 -19
  116. data/lib/coradoc/element/inline/bold.rb +0 -25
  117. data/lib/coradoc/element/inline/cross_reference.rb +0 -46
  118. data/lib/coradoc/element/inline/footnote.rb +0 -24
  119. data/lib/coradoc/element/inline/hard_line_break.rb +0 -11
  120. data/lib/coradoc/element/inline/highlight.rb +0 -25
  121. data/lib/coradoc/element/inline/italic.rb +0 -25
  122. data/lib/coradoc/element/inline/link.rb +0 -42
  123. data/lib/coradoc/element/inline/monospace.rb +0 -25
  124. data/lib/coradoc/element/inline/quotation.rb +0 -20
  125. data/lib/coradoc/element/inline/small.rb +0 -19
  126. data/lib/coradoc/element/inline/span.rb +0 -37
  127. data/lib/coradoc/element/inline/subscript.rb +0 -20
  128. data/lib/coradoc/element/inline/superscript.rb +0 -20
  129. data/lib/coradoc/element/inline/underline.rb +0 -19
  130. data/lib/coradoc/element/inline.rb +0 -23
  131. data/lib/coradoc/element/list/core.rb +0 -51
  132. data/lib/coradoc/element/list/definition.rb +0 -29
  133. data/lib/coradoc/element/list/ordered.rb +0 -17
  134. data/lib/coradoc/element/list/unordered.rb +0 -17
  135. data/lib/coradoc/element/list.rb +0 -13
  136. data/lib/coradoc/element/list_item.rb +0 -98
  137. data/lib/coradoc/element/list_item_definition.rb +0 -32
  138. data/lib/coradoc/element/paragraph.rb +0 -37
  139. data/lib/coradoc/element/revision.rb +0 -27
  140. data/lib/coradoc/element/section.rb +0 -62
  141. data/lib/coradoc/element/table.rb +0 -91
  142. data/lib/coradoc/element/tag.rb +0 -19
  143. data/lib/coradoc/element/term.rb +0 -22
  144. data/lib/coradoc/element/text_element.rb +0 -92
  145. data/lib/coradoc/element/title.rb +0 -62
  146. data/lib/coradoc/element/video.rb +0 -50
  147. data/lib/coradoc/generator.rb +0 -19
  148. data/lib/coradoc/input/adoc.rb +0 -30
  149. data/lib/coradoc/input/docx.rb +0 -64
  150. data/lib/coradoc/input/html/LICENSE.txt +0 -25
  151. data/lib/coradoc/input/html/README.adoc +0 -308
  152. data/lib/coradoc/input/html/cleaner.rb +0 -142
  153. data/lib/coradoc/input/html/config.rb +0 -77
  154. data/lib/coradoc/input/html/converters/a.rb +0 -52
  155. data/lib/coradoc/input/html/converters/aside.rb +0 -16
  156. data/lib/coradoc/input/html/converters/audio.rb +0 -29
  157. data/lib/coradoc/input/html/converters/base.rb +0 -108
  158. data/lib/coradoc/input/html/converters/blockquote.rb +0 -22
  159. data/lib/coradoc/input/html/converters/br.rb +0 -15
  160. data/lib/coradoc/input/html/converters/bypass.rb +0 -81
  161. data/lib/coradoc/input/html/converters/code.rb +0 -23
  162. data/lib/coradoc/input/html/converters/div.rb +0 -19
  163. data/lib/coradoc/input/html/converters/dl.rb +0 -62
  164. data/lib/coradoc/input/html/converters/drop.rb +0 -26
  165. data/lib/coradoc/input/html/converters/em.rb +0 -21
  166. data/lib/coradoc/input/html/converters/figure.rb +0 -25
  167. data/lib/coradoc/input/html/converters/h.rb +0 -42
  168. data/lib/coradoc/input/html/converters/head.rb +0 -23
  169. data/lib/coradoc/input/html/converters/hr.rb +0 -15
  170. data/lib/coradoc/input/html/converters/ignore.rb +0 -20
  171. data/lib/coradoc/input/html/converters/img.rb +0 -110
  172. data/lib/coradoc/input/html/converters/li.rb +0 -17
  173. data/lib/coradoc/input/html/converters/mark.rb +0 -19
  174. data/lib/coradoc/input/html/converters/markup.rb +0 -31
  175. data/lib/coradoc/input/html/converters/math.rb +0 -38
  176. data/lib/coradoc/input/html/converters/ol.rb +0 -65
  177. data/lib/coradoc/input/html/converters/p.rb +0 -23
  178. data/lib/coradoc/input/html/converters/pass_through.rb +0 -17
  179. data/lib/coradoc/input/html/converters/pre.rb +0 -55
  180. data/lib/coradoc/input/html/converters/q.rb +0 -16
  181. data/lib/coradoc/input/html/converters/strong.rb +0 -20
  182. data/lib/coradoc/input/html/converters/sub.rb +0 -22
  183. data/lib/coradoc/input/html/converters/sup.rb +0 -22
  184. data/lib/coradoc/input/html/converters/table.rb +0 -319
  185. data/lib/coradoc/input/html/converters/td.rb +0 -81
  186. data/lib/coradoc/input/html/converters/text.rb +0 -32
  187. data/lib/coradoc/input/html/converters/th.rb +0 -18
  188. data/lib/coradoc/input/html/converters/tr.rb +0 -22
  189. data/lib/coradoc/input/html/converters/video.rb +0 -29
  190. data/lib/coradoc/input/html/converters.rb +0 -59
  191. data/lib/coradoc/input/html/errors.rb +0 -14
  192. data/lib/coradoc/input/html/html_converter.rb +0 -168
  193. data/lib/coradoc/input/html/plugin.rb +0 -131
  194. data/lib/coradoc/input/html/plugins/plateau.rb +0 -213
  195. data/lib/coradoc/input/html/postprocessor.rb +0 -220
  196. data/lib/coradoc/input/html.rb +0 -61
  197. data/lib/coradoc/legacy_parser.rb +0 -200
  198. data/lib/coradoc/oscal.rb +0 -99
  199. data/lib/coradoc/output/adoc.rb +0 -19
  200. data/lib/coradoc/output/coradoc_tree_debug.rb +0 -21
  201. data/lib/coradoc/parser/asciidoc/admonition.rb +0 -24
  202. data/lib/coradoc/parser/asciidoc/attribute_list.rb +0 -89
  203. data/lib/coradoc/parser/asciidoc/base.rb +0 -87
  204. data/lib/coradoc/parser/asciidoc/bibliography.rb +0 -29
  205. data/lib/coradoc/parser/asciidoc/block.rb +0 -94
  206. data/lib/coradoc/parser/asciidoc/citation.rb +0 -30
  207. data/lib/coradoc/parser/asciidoc/content.rb +0 -64
  208. data/lib/coradoc/parser/asciidoc/document_attributes.rb +0 -25
  209. data/lib/coradoc/parser/asciidoc/header.rb +0 -29
  210. data/lib/coradoc/parser/asciidoc/inline.rb +0 -195
  211. data/lib/coradoc/parser/asciidoc/list.rb +0 -115
  212. data/lib/coradoc/parser/asciidoc/paragraph.rb +0 -54
  213. data/lib/coradoc/parser/asciidoc/section.rb +0 -61
  214. data/lib/coradoc/parser/asciidoc/table.rb +0 -32
  215. data/lib/coradoc/parser/asciidoc/term.rb +0 -41
  216. data/lib/coradoc/parser/asciidoc/text.rb +0 -158
  217. data/lib/coradoc/parser/base.rb +0 -40
  218. data/lib/coradoc/parser.rb +0 -11
  219. data/lib/coradoc/reverse_adoc.rb +0 -18
  220. data/lib/coradoc/transformer.rb +0 -476
  221. data/lib/coradoc/util.rb +0 -12
  222. data/lib/reverse_adoc.rb +0 -20
  223. data/utils/inspect_asciidoc.rb +0 -29
  224. data/utils/parser_analyzer.rb +0 -66
  225. data/utils/round_trip.rb +0 -53
@@ -0,0 +1,283 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Coradoc
4
+ # Document visitor pattern for traversing and processing document trees.
5
+ #
6
+ # The visitor pattern enables clean separation of document traversal logic
7
+ # from processing logic. Visitors can be used for:
8
+ # - Document transformation
9
+ # - Content extraction
10
+ # - Validation
11
+ # - Custom rendering
12
+ #
13
+ # @example Basic visitor
14
+ # class WordCounter < Coradoc::Visitor::Base
15
+ # attr_reader :count
16
+ #
17
+ # def initialize
18
+ # @count = 0
19
+ # end
20
+ #
21
+ # def visit_block(block)
22
+ # @count += block.content.to_s.split.length if block.content
23
+ # super
24
+ # end
25
+ # end
26
+ #
27
+ # counter = WordCounter.new
28
+ # document.accept(counter)
29
+ # puts counter.count
30
+ #
31
+ module Visitor
32
+ # Registry mapping CoreModel classes to visitor method names.
33
+ # CoreModel types self-register via register_visitor on load.
34
+ DISPATCH_TABLE = {} # rubocop:disable Style/MutableConstant
35
+
36
+ # Register a CoreModel class to a visitor method name.
37
+ # Called during CoreModel type definition.
38
+ def self.register_visitor(klass, method_name)
39
+ DISPATCH_TABLE[klass] = method_name
40
+ end
41
+
42
+ # Base class for document visitors.
43
+ #
44
+ # Provides default traversal behavior for all CoreModel types.
45
+ # Override specific visit_* methods to customize behavior.
46
+ class Base
47
+ # Visit a document element (dispatch method)
48
+ # @param element [CoreModel::Base] Element to visit
49
+ # @return [void]
50
+ def visit(element)
51
+ return if element.nil?
52
+
53
+ method_name = DISPATCH_TABLE[element.class]
54
+ if method_name
55
+ public_send(method_name, element)
56
+ elsif element.is_a?(Array)
57
+ visit_array(element)
58
+ else
59
+ visit_unknown(element)
60
+ end
61
+ end
62
+
63
+ # Visit a structural element (document, section)
64
+ def visit_structural_element(element)
65
+ visit_children(element.children)
66
+ end
67
+
68
+ # Visit a block element
69
+ def visit_block(block)
70
+ visit_children(block.children)
71
+ end
72
+
73
+ # Visit an inline element
74
+ def visit_inline_element(element)
75
+ visit_children(element.nested_elements)
76
+ end
77
+
78
+ # Visit a list block
79
+ def visit_list_block(list)
80
+ visit_children(list.items)
81
+ end
82
+
83
+ # Visit a list item
84
+ def visit_list_item(item)
85
+ visit_children(item.children)
86
+ end
87
+
88
+ # Visit a table
89
+ def visit_table(table)
90
+ visit_children(table.rows)
91
+ end
92
+
93
+ # Visit a table row
94
+ def visit_table_row(row)
95
+ visit_children(row.cells)
96
+ end
97
+
98
+ # Visit a table cell
99
+ def visit_table_cell(cell)
100
+ # TableCell typically contains text or nested elements
101
+ end
102
+
103
+ # Visit an image
104
+ def visit_image(image)
105
+ # Image is typically a leaf node
106
+ end
107
+
108
+ # Visit a term (definition list term)
109
+ def visit_term(term)
110
+ # Term is typically a leaf node
111
+ end
112
+
113
+ # Visit an annotation block (admonition)
114
+ def visit_annotation_block(block)
115
+ visit_children(block.children)
116
+ end
117
+
118
+ # Visit a footnote
119
+ def visit_footnote(element)
120
+ # Footnote is typically a leaf node
121
+ end
122
+
123
+ # Visit a footnote reference
124
+ def visit_footnote_reference(element)
125
+ # FootnoteReference is typically a leaf node
126
+ end
127
+
128
+ # Visit an abbreviation
129
+ def visit_abbreviation(element)
130
+ # Abbreviation is typically a leaf node
131
+ end
132
+
133
+ # Visit a definition list
134
+ def visit_definition_list(element)
135
+ visit_children(element.items)
136
+ end
137
+
138
+ # Visit a definition item
139
+ def visit_definition_item(element)
140
+ # DefinitionItem is typically a leaf node
141
+ end
142
+
143
+ # Visit a bibliography
144
+ def visit_bibliography(element)
145
+ visit_children(element.entries)
146
+ end
147
+
148
+ # Visit a bibliography entry
149
+ def visit_bibliography_entry(element)
150
+ # BibliographyEntry is typically a leaf node
151
+ end
152
+
153
+ # Visit a table of contents
154
+ def visit_toc(element)
155
+ visit_children(element.entries)
156
+ end
157
+
158
+ # Visit a TOC entry
159
+ def visit_toc_entry(element)
160
+ visit_children(element.children)
161
+ end
162
+
163
+ # Visit metadata
164
+ def visit_metadata(element)
165
+ visit_children(element.entries)
166
+ end
167
+
168
+ # Visit a metadata entry
169
+ def visit_metadata_entry(element)
170
+ # MetadataEntry is a leaf node
171
+ end
172
+
173
+ # Visit an element attribute
174
+ def visit_element_attribute(element)
175
+ # ElementAttribute is a leaf node
176
+ end
177
+
178
+ # Visit an array of elements
179
+ def visit_array(array)
180
+ array.each { |element| visit(element) }
181
+ end
182
+
183
+ # Visit an unknown element type
184
+ def visit_unknown(element)
185
+ # Override to handle unknown types
186
+ end
187
+
188
+ private
189
+
190
+ # Visit children elements
191
+ def visit_children(children)
192
+ children&.each { |child| visit(child) }
193
+ end
194
+ end
195
+
196
+ # Visitor that collects matching elements
197
+ class Collector < Base
198
+ attr_reader :items
199
+
200
+ def initialize(*types)
201
+ @types = types.flatten
202
+ @items = []
203
+ end
204
+
205
+ def match?(element)
206
+ return true if @types.empty?
207
+
208
+ @types.any? { |type| element.is_a?(type) }
209
+ end
210
+
211
+ def visit(element)
212
+ @items << element if match?(element)
213
+ super
214
+ end
215
+ end
216
+
217
+ # Visitor that transforms elements
218
+ class Transformer < Base
219
+ attr_reader :transformer
220
+
221
+ def initialize(&block)
222
+ @transformer = block
223
+ end
224
+
225
+ def visit(element)
226
+ transformer&.call(element)
227
+ super
228
+ end
229
+ end
230
+
231
+ # Visitor that searches for elements matching criteria
232
+ class Finder < Base
233
+ attr_reader :results
234
+
235
+ def initialize(&block)
236
+ @predicate = block
237
+ @results = []
238
+ end
239
+
240
+ def visit(element)
241
+ @results << element if @predicate&.call(element)
242
+ super
243
+ end
244
+
245
+ def first
246
+ @results.first
247
+ end
248
+
249
+ def all
250
+ @results
251
+ end
252
+ end
253
+
254
+ # Self-register all CoreModel types
255
+ register_visitor CoreModel::StructuralElement, :visit_structural_element
256
+ register_visitor CoreModel::DocumentElement, :visit_structural_element
257
+ register_visitor CoreModel::SectionElement, :visit_structural_element
258
+ register_visitor CoreModel::PreambleElement, :visit_structural_element
259
+ register_visitor CoreModel::HeaderElement, :visit_structural_element
260
+ register_visitor CoreModel::AnnotationBlock, :visit_annotation_block
261
+ register_visitor CoreModel::Block, :visit_block
262
+ register_visitor CoreModel::InlineElement, :visit_inline_element
263
+ register_visitor CoreModel::ListBlock, :visit_list_block
264
+ register_visitor CoreModel::ListItem, :visit_list_item
265
+ register_visitor CoreModel::Table, :visit_table
266
+ register_visitor CoreModel::TableRow, :visit_table_row
267
+ register_visitor CoreModel::TableCell, :visit_table_cell
268
+ register_visitor CoreModel::Image, :visit_image
269
+ register_visitor CoreModel::Term, :visit_term
270
+ register_visitor CoreModel::Footnote, :visit_footnote
271
+ register_visitor CoreModel::FootnoteReference, :visit_footnote_reference
272
+ register_visitor CoreModel::Abbreviation, :visit_abbreviation
273
+ register_visitor CoreModel::DefinitionList, :visit_definition_list
274
+ register_visitor CoreModel::DefinitionItem, :visit_definition_item
275
+ register_visitor CoreModel::Bibliography, :visit_bibliography
276
+ register_visitor CoreModel::BibliographyEntry, :visit_bibliography_entry
277
+ register_visitor CoreModel::Toc, :visit_toc
278
+ register_visitor CoreModel::TocEntry, :visit_toc_entry
279
+ register_visitor CoreModel::Metadata, :visit_metadata
280
+ register_visitor CoreModel::MetadataEntry, :visit_metadata_entry
281
+ register_visitor CoreModel::ElementAttribute, :visit_element_attribute
282
+ end
283
+ end
data/lib/coradoc.rb CHANGED
@@ -1,25 +1,46 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "pathname"
3
+ # Coradoc - Canonical Document Model and Transformation Hub
4
+ #
5
+ # Coradoc provides a hub-and-spoke architecture for document transformations.
6
+ # The CoreModel serves as the canonical, format-agnostic representation,
7
+ # enabling transformations between AsciiDoc, HTML, Markdown, DOCX, and more.
8
+ #
9
+ # @example Converting between formats
10
+ # require 'coradoc'
11
+ # html = Coradoc.convert("# Hello", from: :markdown, to: :html)
12
+ #
13
+ # @example Parsing and serializing
14
+ # doc = Coradoc.parse("# Title\n\nContent", format: :markdown)
15
+ # html = Coradoc.serialize(doc, to: :html)
16
+ #
17
+ # @example File-based conversion
18
+ # doc = Coradoc.parse_file("input.md")
19
+ # html = Coradoc.convert_file("input.md", to: :html)
20
+ #
21
+ # @example Manipulating documents
22
+ # doc = Coradoc.parse(text, format: :asciidoc)
23
+ # html = Coradoc.manipulate(doc)
24
+ # .transform_text(&:upcase)
25
+ # .add_toc
26
+ # .to_html
27
+ #
28
+ # @example Building documents programmatically
29
+ # doc = Coradoc.build do
30
+ # title "My Document"
31
+ # section "Intro" do
32
+ # paragraph "Hello world"
33
+ # end
34
+ # end.to_core
35
+ # Coradoc.serialize(doc, to: :html)
4
36
 
5
- require "parslet"
6
- require "coradoc/version"
7
- require "coradoc/util"
8
- require "coradoc/parser"
9
- require "coradoc/transformer"
10
- require "coradoc/generator"
11
- require "coradoc/converter"
12
- require "coradoc/input"
13
- require "coradoc/output"
37
+ require_relative 'coradoc/coradoc'
38
+ require_relative 'coradoc/version'
14
39
 
15
40
  module Coradoc
16
- class Error < StandardError; end
17
-
18
- def self.root
19
- File.dirname(__dir__)
20
- end
21
-
22
- def self.root_path
23
- Pathname.new(Coradoc.root)
24
- end
41
+ autoload :CLI, 'coradoc/cli'
42
+ autoload :DocumentBuilder, 'coradoc/document_builder'
43
+ autoload :DocumentManipulator, 'coradoc/document_manipulator'
44
+ autoload :Visitor, 'coradoc/visitor'
45
+ autoload :Serializer, 'coradoc/serializer/registry'
25
46
  end