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.
- checksums.yaml +4 -4
- data/.rspec +1 -1
- data/Rakefile +3 -12
- data/exe/coradoc +21 -2
- data/lib/coradoc/cli.rb +185 -91
- data/lib/coradoc/configurable.rb +527 -0
- data/lib/coradoc/coradoc.rb +463 -0
- data/lib/coradoc/core_model/annotation_block.rb +57 -0
- data/lib/coradoc/core_model/base.rb +172 -0
- data/lib/coradoc/core_model/bibliography.rb +41 -0
- data/lib/coradoc/core_model/bibliography_entry.rb +48 -0
- data/lib/coradoc/core_model/block.rb +63 -0
- data/lib/coradoc/core_model/children_content.rb +53 -0
- data/lib/coradoc/core_model/comment_block.rb +10 -0
- data/lib/coradoc/core_model/definition_item.rb +46 -0
- data/lib/coradoc/core_model/definition_list.rb +28 -0
- data/lib/coradoc/core_model/element_attribute.rb +26 -0
- data/lib/coradoc/core_model/example_block.rb +10 -0
- data/lib/coradoc/core_model/footnote.rb +92 -0
- data/lib/coradoc/core_model/horizontal_rule_block.rb +10 -0
- data/lib/coradoc/core_model/id_generator.rb +16 -0
- data/lib/coradoc/core_model/image.rb +66 -0
- data/lib/coradoc/core_model/inline_element.rb +140 -0
- data/lib/coradoc/core_model/list_block.rb +135 -0
- data/lib/coradoc/core_model/list_item.rb +142 -0
- data/lib/coradoc/core_model/listing_block.rb +13 -0
- data/lib/coradoc/core_model/literal_block.rb +10 -0
- data/lib/coradoc/core_model/metadata.rb +79 -0
- data/lib/coradoc/core_model/open_block.rb +10 -0
- data/lib/coradoc/core_model/paragraph_block.rb +10 -0
- data/lib/coradoc/core_model/pass_block.rb +10 -0
- data/lib/coradoc/core_model/quote_block.rb +12 -0
- data/lib/coradoc/core_model/reviewer_block.rb +10 -0
- data/lib/coradoc/core_model/sidebar_block.rb +10 -0
- data/lib/coradoc/core_model/source_block.rb +10 -0
- data/lib/coradoc/core_model/structural_element.rb +94 -0
- data/lib/coradoc/core_model/table.rb +148 -0
- data/lib/coradoc/core_model/term.rb +53 -0
- data/lib/coradoc/core_model/text_content.rb +22 -0
- data/lib/coradoc/core_model/toc.rb +105 -0
- data/lib/coradoc/core_model/toc_generator.rb +151 -0
- data/lib/coradoc/core_model/verse_block.rb +12 -0
- data/lib/coradoc/core_model.rb +77 -0
- data/lib/coradoc/document_builder.rb +184 -0
- data/lib/coradoc/document_manipulator.rb +203 -0
- data/lib/coradoc/errors.rb +312 -0
- data/lib/coradoc/format_module.rb +49 -0
- data/lib/coradoc/hooks.rb +176 -0
- data/lib/coradoc/input.rb +17 -7
- data/lib/coradoc/logger.rb +54 -0
- data/lib/coradoc/output.rb +17 -6
- data/lib/coradoc/performance_regression.rb +109 -0
- data/lib/coradoc/processor_registry.rb +50 -0
- data/lib/coradoc/query.rb +455 -0
- data/lib/coradoc/registry.rb +156 -0
- data/lib/coradoc/serializer/registry.rb +150 -0
- data/lib/coradoc/transform.rb +11 -0
- data/lib/coradoc/validation.rb +646 -0
- data/lib/coradoc/version.rb +1 -1
- data/lib/coradoc/visitor.rb +283 -0
- data/lib/coradoc.rb +40 -19
- metadata +67 -277
- data/.editorconfig +0 -15
- data/.envrc +0 -1
- data/.irbrc +0 -1
- data/.pryrc.sample +0 -1
- data/.rubocop.yml +0 -14
- data/.rubocop_todo.yml +0 -179
- data/CHANGELOG.md +0 -9
- data/CODE_OF_CONDUCT.md +0 -84
- data/Dockerfile +0 -19
- data/Gemfile +0 -16
- data/LICENSE.txt +0 -21
- data/Makefile +0 -35
- data/README.Docker.adoc +0 -57
- data/README.adoc +0 -119
- data/coradoc.gemspec +0 -40
- data/docker-compose.yml +0 -14
- data/exe/reverse_adoc +0 -81
- data/exe/w2a +0 -60
- data/flake.lock +0 -114
- data/flake.nix +0 -135
- data/lib/coradoc/converter.rb +0 -144
- data/lib/coradoc/document.rb +0 -77
- data/lib/coradoc/element/admonition.rb +0 -18
- data/lib/coradoc/element/attribute.rb +0 -36
- data/lib/coradoc/element/attribute_list.rb +0 -138
- data/lib/coradoc/element/audio.rb +0 -33
- data/lib/coradoc/element/author.rb +0 -24
- data/lib/coradoc/element/base.rb +0 -92
- data/lib/coradoc/element/bibliography.rb +0 -24
- data/lib/coradoc/element/bibliography_entry.rb +0 -24
- data/lib/coradoc/element/block/core.rb +0 -76
- data/lib/coradoc/element/block/example.rb +0 -23
- data/lib/coradoc/element/block/listing.rb +0 -21
- data/lib/coradoc/element/block/literal.rb +0 -21
- data/lib/coradoc/element/block/open.rb +0 -22
- data/lib/coradoc/element/block/pass.rb +0 -21
- data/lib/coradoc/element/block/quote.rb +0 -19
- data/lib/coradoc/element/block/reviewer_comment.rb +0 -19
- data/lib/coradoc/element/block/side.rb +0 -19
- data/lib/coradoc/element/block/sourcecode.rb +0 -21
- data/lib/coradoc/element/block.rb +0 -17
- data/lib/coradoc/element/break.rb +0 -11
- data/lib/coradoc/element/comment_block.rb +0 -22
- data/lib/coradoc/element/comment_line.rb +0 -18
- data/lib/coradoc/element/document_attributes.rb +0 -33
- data/lib/coradoc/element/header.rb +0 -22
- data/lib/coradoc/element/image/block_image.rb +0 -32
- data/lib/coradoc/element/image/core.rb +0 -58
- data/lib/coradoc/element/image/inline_image.rb +0 -12
- data/lib/coradoc/element/image.rb +0 -10
- data/lib/coradoc/element/include.rb +0 -18
- data/lib/coradoc/element/inline/anchor.rb +0 -19
- data/lib/coradoc/element/inline/attribute_reference.rb +0 -19
- data/lib/coradoc/element/inline/bold.rb +0 -25
- data/lib/coradoc/element/inline/cross_reference.rb +0 -46
- data/lib/coradoc/element/inline/footnote.rb +0 -24
- data/lib/coradoc/element/inline/hard_line_break.rb +0 -11
- data/lib/coradoc/element/inline/highlight.rb +0 -25
- data/lib/coradoc/element/inline/italic.rb +0 -25
- data/lib/coradoc/element/inline/link.rb +0 -42
- data/lib/coradoc/element/inline/monospace.rb +0 -25
- data/lib/coradoc/element/inline/quotation.rb +0 -20
- data/lib/coradoc/element/inline/small.rb +0 -19
- data/lib/coradoc/element/inline/span.rb +0 -37
- data/lib/coradoc/element/inline/subscript.rb +0 -20
- data/lib/coradoc/element/inline/superscript.rb +0 -20
- data/lib/coradoc/element/inline/underline.rb +0 -19
- data/lib/coradoc/element/inline.rb +0 -23
- data/lib/coradoc/element/list/core.rb +0 -51
- data/lib/coradoc/element/list/definition.rb +0 -29
- data/lib/coradoc/element/list/ordered.rb +0 -17
- data/lib/coradoc/element/list/unordered.rb +0 -17
- data/lib/coradoc/element/list.rb +0 -13
- data/lib/coradoc/element/list_item.rb +0 -98
- data/lib/coradoc/element/list_item_definition.rb +0 -32
- data/lib/coradoc/element/paragraph.rb +0 -37
- data/lib/coradoc/element/revision.rb +0 -27
- data/lib/coradoc/element/section.rb +0 -62
- data/lib/coradoc/element/table.rb +0 -91
- data/lib/coradoc/element/tag.rb +0 -19
- data/lib/coradoc/element/term.rb +0 -22
- data/lib/coradoc/element/text_element.rb +0 -92
- data/lib/coradoc/element/title.rb +0 -62
- data/lib/coradoc/element/video.rb +0 -50
- data/lib/coradoc/generator.rb +0 -19
- data/lib/coradoc/input/adoc.rb +0 -30
- data/lib/coradoc/input/docx.rb +0 -64
- data/lib/coradoc/input/html/LICENSE.txt +0 -25
- data/lib/coradoc/input/html/README.adoc +0 -308
- data/lib/coradoc/input/html/cleaner.rb +0 -142
- data/lib/coradoc/input/html/config.rb +0 -77
- data/lib/coradoc/input/html/converters/a.rb +0 -52
- data/lib/coradoc/input/html/converters/aside.rb +0 -16
- data/lib/coradoc/input/html/converters/audio.rb +0 -29
- data/lib/coradoc/input/html/converters/base.rb +0 -108
- data/lib/coradoc/input/html/converters/blockquote.rb +0 -22
- data/lib/coradoc/input/html/converters/br.rb +0 -15
- data/lib/coradoc/input/html/converters/bypass.rb +0 -81
- data/lib/coradoc/input/html/converters/code.rb +0 -23
- data/lib/coradoc/input/html/converters/div.rb +0 -19
- data/lib/coradoc/input/html/converters/dl.rb +0 -62
- data/lib/coradoc/input/html/converters/drop.rb +0 -26
- data/lib/coradoc/input/html/converters/em.rb +0 -21
- data/lib/coradoc/input/html/converters/figure.rb +0 -25
- data/lib/coradoc/input/html/converters/h.rb +0 -42
- data/lib/coradoc/input/html/converters/head.rb +0 -23
- data/lib/coradoc/input/html/converters/hr.rb +0 -15
- data/lib/coradoc/input/html/converters/ignore.rb +0 -20
- data/lib/coradoc/input/html/converters/img.rb +0 -110
- data/lib/coradoc/input/html/converters/li.rb +0 -17
- data/lib/coradoc/input/html/converters/mark.rb +0 -19
- data/lib/coradoc/input/html/converters/markup.rb +0 -31
- data/lib/coradoc/input/html/converters/math.rb +0 -38
- data/lib/coradoc/input/html/converters/ol.rb +0 -65
- data/lib/coradoc/input/html/converters/p.rb +0 -23
- data/lib/coradoc/input/html/converters/pass_through.rb +0 -17
- data/lib/coradoc/input/html/converters/pre.rb +0 -55
- data/lib/coradoc/input/html/converters/q.rb +0 -16
- data/lib/coradoc/input/html/converters/strong.rb +0 -20
- data/lib/coradoc/input/html/converters/sub.rb +0 -22
- data/lib/coradoc/input/html/converters/sup.rb +0 -22
- data/lib/coradoc/input/html/converters/table.rb +0 -319
- data/lib/coradoc/input/html/converters/td.rb +0 -81
- data/lib/coradoc/input/html/converters/text.rb +0 -32
- data/lib/coradoc/input/html/converters/th.rb +0 -18
- data/lib/coradoc/input/html/converters/tr.rb +0 -22
- data/lib/coradoc/input/html/converters/video.rb +0 -29
- data/lib/coradoc/input/html/converters.rb +0 -59
- data/lib/coradoc/input/html/errors.rb +0 -14
- data/lib/coradoc/input/html/html_converter.rb +0 -168
- data/lib/coradoc/input/html/plugin.rb +0 -131
- data/lib/coradoc/input/html/plugins/plateau.rb +0 -213
- data/lib/coradoc/input/html/postprocessor.rb +0 -220
- data/lib/coradoc/input/html.rb +0 -61
- data/lib/coradoc/legacy_parser.rb +0 -200
- data/lib/coradoc/oscal.rb +0 -99
- data/lib/coradoc/output/adoc.rb +0 -19
- data/lib/coradoc/output/coradoc_tree_debug.rb +0 -21
- data/lib/coradoc/parser/asciidoc/admonition.rb +0 -24
- data/lib/coradoc/parser/asciidoc/attribute_list.rb +0 -89
- data/lib/coradoc/parser/asciidoc/base.rb +0 -87
- data/lib/coradoc/parser/asciidoc/bibliography.rb +0 -29
- data/lib/coradoc/parser/asciidoc/block.rb +0 -94
- data/lib/coradoc/parser/asciidoc/citation.rb +0 -30
- data/lib/coradoc/parser/asciidoc/content.rb +0 -64
- data/lib/coradoc/parser/asciidoc/document_attributes.rb +0 -25
- data/lib/coradoc/parser/asciidoc/header.rb +0 -29
- data/lib/coradoc/parser/asciidoc/inline.rb +0 -195
- data/lib/coradoc/parser/asciidoc/list.rb +0 -115
- data/lib/coradoc/parser/asciidoc/paragraph.rb +0 -54
- data/lib/coradoc/parser/asciidoc/section.rb +0 -61
- data/lib/coradoc/parser/asciidoc/table.rb +0 -32
- data/lib/coradoc/parser/asciidoc/term.rb +0 -41
- data/lib/coradoc/parser/asciidoc/text.rb +0 -158
- data/lib/coradoc/parser/base.rb +0 -40
- data/lib/coradoc/parser.rb +0 -11
- data/lib/coradoc/reverse_adoc.rb +0 -18
- data/lib/coradoc/transformer.rb +0 -476
- data/lib/coradoc/util.rb +0 -12
- data/lib/reverse_adoc.rb +0 -20
- data/utils/inspect_asciidoc.rb +0 -29
- data/utils/parser_analyzer.rb +0 -66
- 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
|
-
|
|
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
|
-
|
|
6
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|