coradoc-mirror 0.1.6 → 0.1.8
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.
- checksums.yaml +4 -4
- data/lib/coradoc/mirror/core_model_to_mirror.rb +17 -0
- data/lib/coradoc/mirror/handlers/abstract.rb +19 -0
- data/lib/coradoc/mirror/handlers/inline.rb +8 -2
- data/lib/coradoc/mirror/handlers/partintro.rb +19 -0
- data/lib/coradoc/mirror/handlers.rb +2 -0
- data/lib/coradoc/mirror/mirror_to_core_model.rb +21 -1
- data/lib/coradoc/mirror/node.rb +70 -0
- data/lib/coradoc/mirror/reverse_builder/abstract.rb +17 -0
- data/lib/coradoc/mirror/reverse_builder/admonition.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/biblio_entry.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/bibliography.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/blockquote.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/bullet_list.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/caption.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/code_block.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/definition_list.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/document.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/example.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/figure.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/footnote_entry.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/footnote_marker.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/footnotes.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/frontmatter.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/generic_block.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/hard_break.rb +13 -0
- data/lib/coradoc/mirror/reverse_builder/header.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/horizontal_rule.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/image.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/include.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/inline_text.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/list_item.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/literal_block.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/open_block.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/ordered_list.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/paragraph.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/partintro.rb +17 -0
- data/lib/coradoc/mirror/reverse_builder/pass_block.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/preamble.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/raw_inline.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/section.rb +0 -6
- data/lib/coradoc/mirror/reverse_builder/sections.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/sidebar.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/soft_break.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/stem_block.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/table.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/table_body.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/table_cell.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/table_head.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/table_row.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/text.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/toc.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/toc_entry.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder/verse.rb +0 -4
- data/lib/coradoc/mirror/reverse_builder.rb +122 -72
- data/lib/coradoc/mirror/version.rb +1 -1
- data/lib/coradoc/mirror.rb +2 -0
- metadata +6 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0a1079e6734d1795dd52788ca44ac74475590dbf6ccb9a576a5fcf4ef92f020d
|
|
4
|
+
data.tar.gz: ab04156585e16f2b4fa61337e3a9eca6b0f758ea82db4233c38f4422686fe611
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d3e532a097d574ac76f76c3ba863ad82fefc8c4007572a30c7d4c4bcad66f14008236a0ef9e4aca550c4f55b91f5dbc75740afac67aa2bcc18bce5c9aae0f0b9
|
|
7
|
+
data.tar.gz: 7bf8e4d4c71e20cb6cb1f71ef4a6e9c5cb1109a81c4fc1b5e85a2b462af197e3f5801827ceb30bce5ed7ce5f897ca3c2300d9fa27db699ee5a9eb239da9d4272
|
|
@@ -164,9 +164,26 @@ module Coradoc
|
|
|
164
164
|
value, concat = result
|
|
165
165
|
return unless value
|
|
166
166
|
|
|
167
|
+
propagate_source_line(value, element)
|
|
167
168
|
concat ? content.concat(Array(value)) : content << value
|
|
168
169
|
end
|
|
169
170
|
|
|
171
|
+
# Copy parser-attached source_line from the CoreModel element onto
|
|
172
|
+
# every Mirror node the handler produced. Single touchpoint for the
|
|
173
|
+
# entire CoreModel → Mirror direction — handlers stay focused on
|
|
174
|
+
# per-type mapping and don't repeat this concern (DRY).
|
|
175
|
+
def propagate_source_line(value, element)
|
|
176
|
+
line = element.source_line
|
|
177
|
+
return unless line
|
|
178
|
+
|
|
179
|
+
Array(value).each do |node|
|
|
180
|
+
next unless node.is_a?(Node)
|
|
181
|
+
next if node.source_line
|
|
182
|
+
|
|
183
|
+
node.source_line = line
|
|
184
|
+
end
|
|
185
|
+
end
|
|
186
|
+
|
|
170
187
|
def build_document_attrs(document)
|
|
171
188
|
attrs = {}
|
|
172
189
|
attrs[:title] = document.title if document.title
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module Mirror
|
|
5
|
+
module Handlers
|
|
6
|
+
module Abstract
|
|
7
|
+
def self.call(element, context:)
|
|
8
|
+
content = context.extract_content(element)
|
|
9
|
+
return nil if content.empty?
|
|
10
|
+
|
|
11
|
+
Node::Abstract.new(
|
|
12
|
+
attrs: Node::Abstract::Attrs.new(id: element.id, title: element.title),
|
|
13
|
+
content: content
|
|
14
|
+
)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -102,7 +102,9 @@ module Coradoc
|
|
|
102
102
|
build_span_mark(element, context)
|
|
103
103
|
when CoreModel::FootnoteElement
|
|
104
104
|
build_footnote_node(element, context)
|
|
105
|
-
when CoreModel::HardLineBreakElement
|
|
105
|
+
when CoreModel::HardLineBreakElement
|
|
106
|
+
Node::HardBreak.new
|
|
107
|
+
when CoreModel::LineBreakElement
|
|
106
108
|
Node::SoftBreak.new
|
|
107
109
|
when CoreModel::TextElement
|
|
108
110
|
build_text_only(element, context)
|
|
@@ -206,7 +208,11 @@ module Coradoc
|
|
|
206
208
|
def extract_inline_text(element)
|
|
207
209
|
return element.content.to_s if element.content && !element.content.to_s.empty?
|
|
208
210
|
|
|
209
|
-
|
|
211
|
+
if element.is_a?(CoreModel::InlineElement) && element.nested_elements
|
|
212
|
+
return element.nested_elements.map do |nested|
|
|
213
|
+
extract_inline_text(nested)
|
|
214
|
+
end.join
|
|
215
|
+
end
|
|
210
216
|
|
|
211
217
|
if (element.is_a?(CoreModel::InlineElement) || element.is_a?(CoreModel::Block)) && element.children && !element.children.empty?
|
|
212
218
|
return element.children.map do |child|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module Mirror
|
|
5
|
+
module Handlers
|
|
6
|
+
module Partintro
|
|
7
|
+
def self.call(element, context:)
|
|
8
|
+
content = context.extract_content(element)
|
|
9
|
+
return nil if content.empty?
|
|
10
|
+
|
|
11
|
+
Node::Partintro.new(
|
|
12
|
+
attrs: Node::Partintro::Attrs.new(id: element.id, title: element.title),
|
|
13
|
+
content: content
|
|
14
|
+
)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -17,6 +17,8 @@ module Coradoc
|
|
|
17
17
|
autoload :Blockquote, "#{__dir__}/handlers/blockquote"
|
|
18
18
|
autoload :Example, "#{__dir__}/handlers/example"
|
|
19
19
|
autoload :Sidebar, "#{__dir__}/handlers/sidebar"
|
|
20
|
+
autoload :Abstract, "#{__dir__}/handlers/abstract"
|
|
21
|
+
autoload :Partintro, "#{__dir__}/handlers/partintro"
|
|
20
22
|
autoload :OpenBlock, "#{__dir__}/handlers/open_block"
|
|
21
23
|
autoload :Verse, "#{__dir__}/handlers/verse"
|
|
22
24
|
autoload :Comment, "#{__dir__}/handlers/comment"
|
|
@@ -19,7 +19,27 @@ module Coradoc
|
|
|
19
19
|
builder_class = ReverseBuilder.lookup(node.type)
|
|
20
20
|
raise Error, "Unknown mirror node type: #{node.type}" unless builder_class
|
|
21
21
|
|
|
22
|
-
builder_class.new(self).build(node)
|
|
22
|
+
result = builder_class.new(self).build(node)
|
|
23
|
+
propagate_source_line(result, node)
|
|
24
|
+
result
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Copy parser-attached source_line from the Mirror node onto every
|
|
28
|
+
# CoreModel node the builder produced. Single touchpoint for the
|
|
29
|
+
# entire Mirror → CoreModel direction — builders stay focused on
|
|
30
|
+
# per-type mapping and don't repeat this concern (DRY).
|
|
31
|
+
def propagate_source_line(result, node)
|
|
32
|
+
return unless node.is_a?(Node)
|
|
33
|
+
|
|
34
|
+
line = node.source_line
|
|
35
|
+
return unless line
|
|
36
|
+
|
|
37
|
+
Array(result).each do |built|
|
|
38
|
+
next unless built.is_a?(CoreModel::Base)
|
|
39
|
+
next if built.source_line
|
|
40
|
+
|
|
41
|
+
built.source_line = line
|
|
42
|
+
end
|
|
23
43
|
end
|
|
24
44
|
|
|
25
45
|
# ── Shared helpers (single source of truth — used by every
|
data/lib/coradoc/mirror/node.rb
CHANGED
|
@@ -29,6 +29,13 @@ module Coradoc
|
|
|
29
29
|
attribute :type, :string, default: -> { self.class::PM_TYPE }
|
|
30
30
|
attribute :content, Node, collection: true
|
|
31
31
|
attribute :marks, Mark, collection: true
|
|
32
|
+
# Parser metadata, single source of truth on the wire side too.
|
|
33
|
+
# Carried in memory so CoreModel → Mirror → CoreModel round-trips
|
|
34
|
+
# preserve the source location. Intentionally absent from every
|
|
35
|
+
# subclass `key_value` block: source_line is not part of the
|
|
36
|
+
# ProseMirror JSON contract — editor consumers don't need it, and
|
|
37
|
+
# serializing it would leak parser internals onto the wire.
|
|
38
|
+
attribute :source_line, :integer
|
|
32
39
|
|
|
33
40
|
key_value do
|
|
34
41
|
map 'type', to: :type, render_default: true
|
|
@@ -303,6 +310,60 @@ module Coradoc
|
|
|
303
310
|
end
|
|
304
311
|
end
|
|
305
312
|
|
|
313
|
+
# Abstract block — `[abstract]\n====\n...\n====` in AsciiDoc. Carries
|
|
314
|
+
# the same shape as Sidebar/Example but a distinct wire type so the
|
|
315
|
+
# block-level construct does not collide with the section-level
|
|
316
|
+
# `abstract` (one of Section's PM_ALIASES). The block preserves its
|
|
317
|
+
# block identity through round-trip; renderers that want a section
|
|
318
|
+
# view should look at SectionElement-style sources instead.
|
|
319
|
+
class Abstract < Node
|
|
320
|
+
PM_TYPE = 'abstract_block'
|
|
321
|
+
|
|
322
|
+
class Attrs < Lutaml::Model::Serializable
|
|
323
|
+
attribute :title, :string
|
|
324
|
+
attribute :id, :string
|
|
325
|
+
|
|
326
|
+
key_value do
|
|
327
|
+
map 'title', to: :title
|
|
328
|
+
map 'id', to: :id
|
|
329
|
+
end
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
attribute :attrs, Attrs
|
|
333
|
+
|
|
334
|
+
key_value do
|
|
335
|
+
map 'type', to: :type, render_default: true
|
|
336
|
+
map 'attrs', to: :attrs
|
|
337
|
+
map 'content', to: :content, polymorphic: Node::POLYMORPHIC
|
|
338
|
+
end
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
# Partintro block — `[partintro]\n====\n...\n====` in AsciiDoc, used
|
|
342
|
+
# to introduce a "part" in multi-part documents. Distinct wire type
|
|
343
|
+
# for the same reason as Abstract (no collision with potential
|
|
344
|
+
# section-level uses of "partintro").
|
|
345
|
+
class Partintro < Node
|
|
346
|
+
PM_TYPE = 'partintro_block'
|
|
347
|
+
|
|
348
|
+
class Attrs < Lutaml::Model::Serializable
|
|
349
|
+
attribute :title, :string
|
|
350
|
+
attribute :id, :string
|
|
351
|
+
|
|
352
|
+
key_value do
|
|
353
|
+
map 'title', to: :title
|
|
354
|
+
map 'id', to: :id
|
|
355
|
+
end
|
|
356
|
+
end
|
|
357
|
+
|
|
358
|
+
attribute :attrs, Attrs
|
|
359
|
+
|
|
360
|
+
key_value do
|
|
361
|
+
map 'type', to: :type, render_default: true
|
|
362
|
+
map 'attrs', to: :attrs
|
|
363
|
+
map 'content', to: :content, polymorphic: Node::POLYMORPHIC
|
|
364
|
+
end
|
|
365
|
+
end
|
|
366
|
+
|
|
306
367
|
class OpenBlock < Node
|
|
307
368
|
PM_TYPE = 'open_block'
|
|
308
369
|
|
|
@@ -344,6 +405,15 @@ module Coradoc
|
|
|
344
405
|
PM_TYPE = 'soft_break'
|
|
345
406
|
end
|
|
346
407
|
|
|
408
|
+
# Hard line break — author-requested explicit break (`foo +\nbar` in
|
|
409
|
+
# AsciiDoc, `<br>` semantics in HTML). Distinct from SoftBreak so
|
|
410
|
+
# downstream renderers can map it to `<br>` rather than collapsing
|
|
411
|
+
# the break into a soft newline-or-space convention. ProseMirror's
|
|
412
|
+
# schema uses `hard_break` for the same purpose.
|
|
413
|
+
class HardBreak < Node
|
|
414
|
+
PM_TYPE = 'hard_break'
|
|
415
|
+
end
|
|
416
|
+
|
|
347
417
|
# ── Admonition (NOTE, TIP, WARNING, CAUTION, IMPORTANT) ──
|
|
348
418
|
#
|
|
349
419
|
# The Ruby attribute name is `admonition_type` (kept distinct from
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module Mirror
|
|
5
|
+
module ReverseBuilder
|
|
6
|
+
class Abstract < Base
|
|
7
|
+
def build(node)
|
|
8
|
+
CoreModel::AbstractBlock.new(
|
|
9
|
+
title: node.attrs&.title,
|
|
10
|
+
id: node.attrs&.id,
|
|
11
|
+
children: build_content(node)
|
|
12
|
+
)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
8
6
|
class Admonition < Base
|
|
9
|
-
registers 'admonition'
|
|
10
|
-
|
|
11
7
|
def build(node)
|
|
12
8
|
CoreModel::AnnotationBlock.new(
|
|
13
9
|
annotation_type: node.attrs&.admonition_type,
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
8
6
|
class Bibliography < Base
|
|
9
|
-
registers 'bibliography'
|
|
10
|
-
|
|
11
7
|
def build(node)
|
|
12
8
|
entries = build_content(node).select { |c| c.is_a?(CoreModel::BibliographyEntry) }
|
|
13
9
|
CoreModel::Bibliography.new(title: node.attrs&.title, entries: entries)
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
8
6
|
class Blockquote < Base
|
|
9
|
-
registers 'quote'
|
|
10
|
-
|
|
11
7
|
def build(node)
|
|
12
8
|
CoreModel::QuoteBlock.new(
|
|
13
9
|
attribution: node.attrs&.attribution,
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
8
6
|
class BulletList < Base
|
|
9
|
-
registers 'bullet_list'
|
|
10
|
-
|
|
11
7
|
def build(node)
|
|
12
8
|
items = build_content(node).select { |c| c.is_a?(CoreModel::ListItem) }
|
|
13
9
|
CoreModel::ListBlock.new(marker_type: 'unordered', items: items)
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
8
6
|
# Caption only appears as a Figure child. If encountered standalone,
|
|
9
7
|
# extract its text as an inline element so it isn't lost.
|
|
10
8
|
class Caption < Base
|
|
11
|
-
registers 'caption'
|
|
12
|
-
|
|
13
9
|
def build(node)
|
|
14
10
|
CoreModel::InlineElement.new(content: extract_text(node))
|
|
15
11
|
end
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
@@ -9,8 +7,6 @@ module Coradoc
|
|
|
9
7
|
# caption. Reverse: collapse back to a single CoreModel::Image,
|
|
10
8
|
# promoting the caption child to `caption:` if present.
|
|
11
9
|
class Figure < Base
|
|
12
|
-
registers 'figure'
|
|
13
|
-
|
|
14
10
|
def build(node)
|
|
15
11
|
image_child = node.content&.find { |c| c.is_a?(Node) && c.type == 'image' }
|
|
16
12
|
return nil unless image_child
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
8
6
|
class FootnoteEntry < Base
|
|
9
|
-
registers 'footnote_entry'
|
|
10
|
-
|
|
11
7
|
def build(node)
|
|
12
8
|
attrs = node.attrs
|
|
13
9
|
CoreModel::Footnote.new(id: attrs&.id, content: extract_text(node))
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
8
6
|
# Inline footnote marker (JS `footnote_marker`). The CoreModel
|
|
9
7
|
# FootnoteReference holds the same id/ref/number triple.
|
|
10
8
|
class FootnoteMarker < Base
|
|
11
|
-
registers 'footnote_marker'
|
|
12
|
-
|
|
13
9
|
def build(node)
|
|
14
10
|
attrs = node.attrs
|
|
15
11
|
CoreModel::FootnoteReference.new(
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
@@ -9,8 +7,6 @@ module Coradoc
|
|
|
9
7
|
# no CoreModel equivalent (each entry is built separately). Returns
|
|
10
8
|
# nil so build_content filters it out.
|
|
11
9
|
class Footnotes < Base
|
|
12
|
-
registers 'footnotes'
|
|
13
|
-
|
|
14
10
|
def build(_node)
|
|
15
11
|
nil
|
|
16
12
|
end
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
@@ -9,8 +7,6 @@ module Coradoc
|
|
|
9
7
|
# direction (`Node::GenericBlock`). Preserves the semantic_type so
|
|
10
8
|
# downstream consumers can dispatch on it.
|
|
11
9
|
class GenericBlock < Base
|
|
12
|
-
registers 'generic_block'
|
|
13
|
-
|
|
14
10
|
def build(node)
|
|
15
11
|
attrs = node.attrs
|
|
16
12
|
CoreModel::Block.new(
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
8
6
|
class Header < Base
|
|
9
|
-
registers 'floating_title', 'heading'
|
|
10
|
-
|
|
11
7
|
def build(node)
|
|
12
8
|
attrs = node.attrs
|
|
13
9
|
CoreModel::HeaderElement.new(
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
8
6
|
class HorizontalRule < Base
|
|
9
|
-
registers 'horizontal_rule', 'thematic_break'
|
|
10
|
-
|
|
11
7
|
def build(_node)
|
|
12
8
|
CoreModel::HorizontalRuleBlock.new
|
|
13
9
|
end
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
8
6
|
# Include directive: round-trips back to a CoreModel::Include link
|
|
9
7
|
# node. The text graph is preserved through mirror_json → core.
|
|
10
8
|
class Include < Base
|
|
11
|
-
registers 'include'
|
|
12
|
-
|
|
13
9
|
def build(node)
|
|
14
10
|
attrs = node.attrs
|
|
15
11
|
CoreModel::Include.new(
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
8
6
|
class InlineText < Base
|
|
9
|
-
registers 'dt', 'dd'
|
|
10
|
-
|
|
11
7
|
def build(node)
|
|
12
8
|
children = build_inline_children(node)
|
|
13
9
|
text = children.map { |c| c.is_a?(CoreModel::TextContent) ? c.text : '' }.join
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
8
6
|
class OrderedList < Base
|
|
9
|
-
registers 'ordered_list'
|
|
10
|
-
|
|
11
7
|
def build(node)
|
|
12
8
|
items = build_content(node).select { |c| c.is_a?(CoreModel::ListItem) }
|
|
13
9
|
CoreModel::ListBlock.new(marker_type: 'ordered', items: items)
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
8
6
|
class Paragraph < Base
|
|
9
|
-
registers 'paragraph'
|
|
10
|
-
|
|
11
7
|
def build(node)
|
|
12
8
|
CoreModel::ParagraphBlock.new(children: build_inline_children(node))
|
|
13
9
|
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module Mirror
|
|
5
|
+
module ReverseBuilder
|
|
6
|
+
class Partintro < Base
|
|
7
|
+
def build(node)
|
|
8
|
+
CoreModel::PartintroBlock.new(
|
|
9
|
+
title: node.attrs&.title,
|
|
10
|
+
id: node.attrs&.id,
|
|
11
|
+
children: build_content(node)
|
|
12
|
+
)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
8
6
|
class Preamble < Base
|
|
9
|
-
registers 'preface'
|
|
10
|
-
|
|
11
7
|
def build(node)
|
|
12
8
|
CoreModel::PreambleElement.new(children: build_content(node))
|
|
13
9
|
end
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
8
6
|
class RawInline < Base
|
|
9
|
-
registers 'raw_inline'
|
|
10
|
-
|
|
11
7
|
def build(node)
|
|
12
8
|
CoreModel::RawInlineElement.new(content: node.text.to_s)
|
|
13
9
|
end
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
@@ -9,10 +7,6 @@ module Coradoc
|
|
|
9
7
|
# information lives in the original AsciiDoc and is preserved only
|
|
10
8
|
# on the forward side; the reverse side collapses them.
|
|
11
9
|
class Section < Base
|
|
12
|
-
registers 'section', 'clause', 'annex', 'content_section',
|
|
13
|
-
'abstract', 'foreword', 'introduction',
|
|
14
|
-
'acknowledgements', 'terms', 'definitions', 'references'
|
|
15
|
-
|
|
16
10
|
def build(node)
|
|
17
11
|
attrs = node.attrs
|
|
18
12
|
CoreModel::SectionElement.new(
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
8
6
|
# `sections` is a structural container only — unwrap directly into
|
|
9
7
|
# an array. MirrorToCoreModel#build_content flattens arrays.
|
|
10
8
|
class Sections < Base
|
|
11
|
-
registers 'sections'
|
|
12
|
-
|
|
13
9
|
def build(node)
|
|
14
10
|
build_content(node)
|
|
15
11
|
end
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
8
6
|
class TableRow < Base
|
|
9
|
-
registers 'table_row'
|
|
10
|
-
|
|
11
7
|
def build(node)
|
|
12
8
|
cells = build_content(node).select { |c| c.is_a?(CoreModel::TableCell) }
|
|
13
9
|
CoreModel::TableRow.new(cells: cells)
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'base'
|
|
4
|
-
|
|
5
3
|
module Coradoc
|
|
6
4
|
module Mirror
|
|
7
5
|
module ReverseBuilder
|
|
8
6
|
class TocEntry < Base
|
|
9
|
-
registers 'toc_entry'
|
|
10
|
-
|
|
11
7
|
def build(node)
|
|
12
8
|
attrs = node.attrs
|
|
13
9
|
CoreModel::TocEntry.new(id: attrs&.id, title: attrs&.title)
|
|
@@ -2,34 +2,117 @@
|
|
|
2
2
|
|
|
3
3
|
module Coradoc
|
|
4
4
|
module Mirror
|
|
5
|
-
# OCP-compliant registry for Mirror node
|
|
5
|
+
# OCP-compliant registry for Mirror node → CoreModel transformation.
|
|
6
6
|
#
|
|
7
|
-
#
|
|
7
|
+
# Single source of truth: the TYPE_TO_FILE table below maps every
|
|
8
|
+
# Mirror wire type string (and its aliases) to the file that
|
|
9
|
+
# implements its builder. Two things derive from this one table:
|
|
8
10
|
#
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
# class Figure < Base
|
|
13
|
-
# registers 'figure'
|
|
14
|
-
# def build(node) = CoreModel::Image.new(...)
|
|
15
|
-
# end
|
|
16
|
-
# end
|
|
11
|
+
# 1. autoload declarations — one per unique file, so builders
|
|
12
|
+
# load lazily on first lookup (no 47-file eager load at boot).
|
|
13
|
+
# 2. lookup() — type → file → const_get, which triggers autoload.
|
|
17
14
|
#
|
|
18
|
-
#
|
|
19
|
-
# to MirrorToCoreModel or any other existing class — the registry is
|
|
20
|
-
# the single source of truth for "which type string maps to which
|
|
21
|
-
# builder" (MECE).
|
|
15
|
+
# Adding a new built-in builder is purely additive:
|
|
22
16
|
#
|
|
23
|
-
#
|
|
24
|
-
#
|
|
25
|
-
#
|
|
26
|
-
#
|
|
27
|
-
#
|
|
28
|
-
#
|
|
17
|
+
# 1. Add `'<wire_type>' => '<file_basename>'` to TYPE_TO_FILE.
|
|
18
|
+
# 2. Create `reverse_builder/<file_basename>.rb` defining
|
|
19
|
+
# `class <CamelizedName> < Base; def build(node); ...; end; end`.
|
|
20
|
+
#
|
|
21
|
+
# No edits to this file beyond the table — autoload and lookup
|
|
22
|
+
# adapt automatically. Mirror-level mark dispatch lives in
|
|
23
|
+
# MarkReverseBuilder (mark_reverse_builder.rb).
|
|
24
|
+
#
|
|
25
|
+
# Third-party / runtime builders can still register via
|
|
26
|
+
# `ReverseBuilder.register(type, klass)`; they take precedence over
|
|
27
|
+
# built-in autoload entries.
|
|
29
28
|
module ReverseBuilder
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
#
|
|
29
|
+
autoload :Base, "#{__dir__}/reverse_builder/base"
|
|
30
|
+
|
|
31
|
+
# Wire type string → file basename under reverse_builder/.
|
|
32
|
+
# Aliases (e.g. 'clause' and 'annex' both route to section) are
|
|
33
|
+
# expressed by mapping multiple type strings to the same file.
|
|
34
|
+
TYPE_TO_FILE = {
|
|
35
|
+
'doc' => 'document',
|
|
36
|
+
'section' => 'section',
|
|
37
|
+
'clause' => 'section',
|
|
38
|
+
'annex' => 'section',
|
|
39
|
+
'content_section' => 'section',
|
|
40
|
+
'abstract' => 'section',
|
|
41
|
+
'foreword' => 'section',
|
|
42
|
+
'introduction' => 'section',
|
|
43
|
+
'acknowledgements' => 'section',
|
|
44
|
+
'terms' => 'section',
|
|
45
|
+
'definitions' => 'section',
|
|
46
|
+
'references' => 'section',
|
|
47
|
+
'sections' => 'sections',
|
|
48
|
+
'preface' => 'preamble',
|
|
49
|
+
'floating_title' => 'header',
|
|
50
|
+
'heading' => 'header',
|
|
51
|
+
'paragraph' => 'paragraph',
|
|
52
|
+
'sourcecode' => 'code_block',
|
|
53
|
+
'literal' => 'literal_block',
|
|
54
|
+
'pass' => 'pass_block',
|
|
55
|
+
'stem' => 'stem_block',
|
|
56
|
+
'quote' => 'blockquote',
|
|
57
|
+
'example' => 'example',
|
|
58
|
+
'sidebar' => 'sidebar',
|
|
59
|
+
'abstract_block' => 'abstract',
|
|
60
|
+
'partintro_block' => 'partintro',
|
|
61
|
+
'open_block' => 'open_block',
|
|
62
|
+
'verse' => 'verse',
|
|
63
|
+
'horizontal_rule' => 'horizontal_rule',
|
|
64
|
+
'thematic_break' => 'horizontal_rule',
|
|
65
|
+
'soft_break' => 'soft_break',
|
|
66
|
+
'hard_break' => 'hard_break',
|
|
67
|
+
'admonition' => 'admonition',
|
|
68
|
+
'bullet_list' => 'bullet_list',
|
|
69
|
+
'ordered_list' => 'ordered_list',
|
|
70
|
+
'list_item' => 'list_item',
|
|
71
|
+
'dl' => 'definition_list',
|
|
72
|
+
'dt' => 'inline_text',
|
|
73
|
+
'dd' => 'inline_text',
|
|
74
|
+
'image' => 'image',
|
|
75
|
+
'figure' => 'figure',
|
|
76
|
+
'caption' => 'caption',
|
|
77
|
+
'include' => 'include',
|
|
78
|
+
'table' => 'table',
|
|
79
|
+
'table_head' => 'table_head',
|
|
80
|
+
'table_body' => 'table_body',
|
|
81
|
+
'table_row' => 'table_row',
|
|
82
|
+
'table_cell' => 'table_cell',
|
|
83
|
+
'bibliography' => 'bibliography',
|
|
84
|
+
'biblio_entry' => 'biblio_entry',
|
|
85
|
+
'footnotes' => 'footnotes',
|
|
86
|
+
'footnote_entry' => 'footnote_entry',
|
|
87
|
+
'footnote_marker' => 'footnote_marker',
|
|
88
|
+
'toc' => 'toc',
|
|
89
|
+
'toc_entry' => 'toc_entry',
|
|
90
|
+
'text' => 'text',
|
|
91
|
+
'raw_inline' => 'raw_inline',
|
|
92
|
+
'frontmatter' => 'frontmatter',
|
|
93
|
+
'generic_block' => 'generic_block'
|
|
94
|
+
}.freeze
|
|
95
|
+
|
|
96
|
+
# File basename → Ruby constant name. Derived from the file name
|
|
97
|
+
# using the project-wide snake_case → CamelCase convention
|
|
98
|
+
# (every existing builder follows it). Declared once here so
|
|
99
|
+
# adding a builder that follows convention requires no extra
|
|
100
|
+
# wiring.
|
|
101
|
+
FILE_TO_CLASS = TYPE_TO_FILE.each_value.each_with_object({}) do |file, acc|
|
|
102
|
+
next if acc.key?(file)
|
|
103
|
+
|
|
104
|
+
acc[file] = file.split('_').map(&:capitalize).join
|
|
105
|
+
end.freeze
|
|
106
|
+
|
|
107
|
+
# Lazy-load each builder. Lookup triggers autoload via const_get.
|
|
108
|
+
FILE_TO_CLASS.each do |file, const_name|
|
|
109
|
+
autoload const_name.to_sym, "#{__dir__}/reverse_builder/#{file}"
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# Runtime registrations from third-party / external builders.
|
|
113
|
+
# Takes precedence over built-in autoload entries so external
|
|
114
|
+
# code can override built-in behaviour (e.g. a custom Paragraph).
|
|
115
|
+
# Not frozen: register() writes here at runtime.
|
|
33
116
|
REGISTRY = {}
|
|
34
117
|
|
|
35
118
|
module_function
|
|
@@ -38,60 +121,27 @@ module Coradoc
|
|
|
38
121
|
REGISTRY[type] = builder_class
|
|
39
122
|
end
|
|
40
123
|
|
|
124
|
+
# DSL for subclasses to self-register at load time. Kept for
|
|
125
|
+
# backward compatibility with the existing OCP test pattern that
|
|
126
|
+
# creates synthetic builders via `Class.new(Base) { registers(...) }`.
|
|
127
|
+
# Built-in builders no longer call this — their dispatch is
|
|
128
|
+
# derived from TYPE_TO_FILE.
|
|
129
|
+
def registers(*types)
|
|
130
|
+
types.each { |t| register(t, self) }
|
|
131
|
+
end
|
|
132
|
+
|
|
41
133
|
def lookup(type)
|
|
42
|
-
REGISTRY[type]
|
|
134
|
+
return REGISTRY[type] if REGISTRY.key?(type)
|
|
135
|
+
|
|
136
|
+
file = TYPE_TO_FILE[type]
|
|
137
|
+
return nil unless file
|
|
138
|
+
|
|
139
|
+
const_get(FILE_TO_CLASS[file])
|
|
43
140
|
end
|
|
44
141
|
|
|
45
142
|
def registered_types
|
|
46
|
-
REGISTRY.keys
|
|
143
|
+
(REGISTRY.keys + TYPE_TO_FILE.keys).uniq
|
|
47
144
|
end
|
|
48
|
-
|
|
49
|
-
# Base must load first — every subclass inherits from it. Then
|
|
50
|
-
# eager-load each Builder so its `registers` call runs.
|
|
51
|
-
require_relative 'reverse_builder/base'
|
|
52
|
-
require_relative 'reverse_builder/document'
|
|
53
|
-
require_relative 'reverse_builder/section'
|
|
54
|
-
require_relative 'reverse_builder/header'
|
|
55
|
-
require_relative 'reverse_builder/preamble'
|
|
56
|
-
require_relative 'reverse_builder/sections'
|
|
57
|
-
require_relative 'reverse_builder/paragraph'
|
|
58
|
-
require_relative 'reverse_builder/code_block'
|
|
59
|
-
require_relative 'reverse_builder/literal_block'
|
|
60
|
-
require_relative 'reverse_builder/pass_block'
|
|
61
|
-
require_relative 'reverse_builder/stem_block'
|
|
62
|
-
require_relative 'reverse_builder/blockquote'
|
|
63
|
-
require_relative 'reverse_builder/example'
|
|
64
|
-
require_relative 'reverse_builder/sidebar'
|
|
65
|
-
require_relative 'reverse_builder/open_block'
|
|
66
|
-
require_relative 'reverse_builder/verse'
|
|
67
|
-
require_relative 'reverse_builder/horizontal_rule'
|
|
68
|
-
require_relative 'reverse_builder/frontmatter'
|
|
69
|
-
require_relative 'reverse_builder/admonition'
|
|
70
|
-
require_relative 'reverse_builder/bullet_list'
|
|
71
|
-
require_relative 'reverse_builder/ordered_list'
|
|
72
|
-
require_relative 'reverse_builder/list_item'
|
|
73
|
-
require_relative 'reverse_builder/definition_list'
|
|
74
|
-
require_relative 'reverse_builder/inline_text'
|
|
75
|
-
require_relative 'reverse_builder/image'
|
|
76
|
-
require_relative 'reverse_builder/figure'
|
|
77
|
-
require_relative 'reverse_builder/caption'
|
|
78
|
-
require_relative 'reverse_builder/include'
|
|
79
|
-
require_relative 'reverse_builder/table'
|
|
80
|
-
require_relative 'reverse_builder/table_head'
|
|
81
|
-
require_relative 'reverse_builder/table_body'
|
|
82
|
-
require_relative 'reverse_builder/table_row'
|
|
83
|
-
require_relative 'reverse_builder/table_cell'
|
|
84
|
-
require_relative 'reverse_builder/bibliography'
|
|
85
|
-
require_relative 'reverse_builder/biblio_entry'
|
|
86
|
-
require_relative 'reverse_builder/footnotes'
|
|
87
|
-
require_relative 'reverse_builder/footnote_entry'
|
|
88
|
-
require_relative 'reverse_builder/footnote_marker'
|
|
89
|
-
require_relative 'reverse_builder/toc'
|
|
90
|
-
require_relative 'reverse_builder/toc_entry'
|
|
91
|
-
require_relative 'reverse_builder/text'
|
|
92
|
-
require_relative 'reverse_builder/raw_inline'
|
|
93
|
-
require_relative 'reverse_builder/soft_break'
|
|
94
|
-
require_relative 'reverse_builder/generic_block'
|
|
95
145
|
end
|
|
96
146
|
end
|
|
97
147
|
end
|
data/lib/coradoc/mirror.rb
CHANGED
|
@@ -75,6 +75,8 @@ module Coradoc
|
|
|
75
75
|
registry.register(CoreModel::QuoteBlock, Handlers::Blockquote)
|
|
76
76
|
registry.register(CoreModel::ExampleBlock, Handlers::Example)
|
|
77
77
|
registry.register(CoreModel::SidebarBlock, Handlers::Sidebar)
|
|
78
|
+
registry.register(CoreModel::AbstractBlock, Handlers::Abstract)
|
|
79
|
+
registry.register(CoreModel::PartintroBlock, Handlers::Partintro)
|
|
78
80
|
registry.register(CoreModel::OpenBlock, Handlers::OpenBlock)
|
|
79
81
|
registry.register(CoreModel::VerseBlock, Handlers::Verse)
|
|
80
82
|
registry.register(CoreModel::CommentBlock, Handlers::Comment)
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: coradoc-mirror
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
@@ -81,6 +81,7 @@ files:
|
|
|
81
81
|
- lib/coradoc/mirror/frontmatter_tree_to_hash.rb
|
|
82
82
|
- lib/coradoc/mirror/handler_registry.rb
|
|
83
83
|
- lib/coradoc/mirror/handlers.rb
|
|
84
|
+
- lib/coradoc/mirror/handlers/abstract.rb
|
|
84
85
|
- lib/coradoc/mirror/handlers/admonition.rb
|
|
85
86
|
- lib/coradoc/mirror/handlers/bibliography.rb
|
|
86
87
|
- lib/coradoc/mirror/handlers/blockquote.rb
|
|
@@ -98,6 +99,7 @@ files:
|
|
|
98
99
|
- lib/coradoc/mirror/handlers/list.rb
|
|
99
100
|
- lib/coradoc/mirror/handlers/open_block.rb
|
|
100
101
|
- lib/coradoc/mirror/handlers/paragraph.rb
|
|
102
|
+
- lib/coradoc/mirror/handlers/partintro.rb
|
|
101
103
|
- lib/coradoc/mirror/handlers/reviewer.rb
|
|
102
104
|
- lib/coradoc/mirror/handlers/sidebar.rb
|
|
103
105
|
- lib/coradoc/mirror/handlers/structural.rb
|
|
@@ -112,6 +114,7 @@ files:
|
|
|
112
114
|
- lib/coradoc/mirror/node.rb
|
|
113
115
|
- lib/coradoc/mirror/partitioner.rb
|
|
114
116
|
- lib/coradoc/mirror/reverse_builder.rb
|
|
117
|
+
- lib/coradoc/mirror/reverse_builder/abstract.rb
|
|
115
118
|
- lib/coradoc/mirror/reverse_builder/admonition.rb
|
|
116
119
|
- lib/coradoc/mirror/reverse_builder/base.rb
|
|
117
120
|
- lib/coradoc/mirror/reverse_builder/biblio_entry.rb
|
|
@@ -129,6 +132,7 @@ files:
|
|
|
129
132
|
- lib/coradoc/mirror/reverse_builder/footnotes.rb
|
|
130
133
|
- lib/coradoc/mirror/reverse_builder/frontmatter.rb
|
|
131
134
|
- lib/coradoc/mirror/reverse_builder/generic_block.rb
|
|
135
|
+
- lib/coradoc/mirror/reverse_builder/hard_break.rb
|
|
132
136
|
- lib/coradoc/mirror/reverse_builder/header.rb
|
|
133
137
|
- lib/coradoc/mirror/reverse_builder/horizontal_rule.rb
|
|
134
138
|
- lib/coradoc/mirror/reverse_builder/image.rb
|
|
@@ -139,6 +143,7 @@ files:
|
|
|
139
143
|
- lib/coradoc/mirror/reverse_builder/open_block.rb
|
|
140
144
|
- lib/coradoc/mirror/reverse_builder/ordered_list.rb
|
|
141
145
|
- lib/coradoc/mirror/reverse_builder/paragraph.rb
|
|
146
|
+
- lib/coradoc/mirror/reverse_builder/partintro.rb
|
|
142
147
|
- lib/coradoc/mirror/reverse_builder/pass_block.rb
|
|
143
148
|
- lib/coradoc/mirror/reverse_builder/preamble.rb
|
|
144
149
|
- lib/coradoc/mirror/reverse_builder/raw_inline.rb
|