coradoc-mirror 0.1.4 → 0.1.5
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/handler_registry.rb +19 -30
- data/lib/coradoc/mirror/handlers/code_block.rb +17 -24
- data/lib/coradoc/mirror/handlers/inline.rb +14 -0
- data/lib/coradoc/mirror/node.rb +39 -0
- data/lib/coradoc/mirror/reverse_builder/admonition.rb +20 -0
- data/lib/coradoc/mirror/reverse_builder/base.rb +42 -0
- data/lib/coradoc/mirror/reverse_builder/biblio_entry.rb +22 -0
- data/lib/coradoc/mirror/reverse_builder/bibliography.rb +18 -0
- data/lib/coradoc/mirror/reverse_builder/blockquote.rb +20 -0
- data/lib/coradoc/mirror/reverse_builder/bullet_list.rb +18 -0
- data/lib/coradoc/mirror/reverse_builder/caption.rb +19 -0
- data/lib/coradoc/mirror/reverse_builder/code_block.rb +22 -0
- data/lib/coradoc/mirror/reverse_builder/definition_list.rb +35 -0
- data/lib/coradoc/mirror/reverse_builder/document.rb +22 -0
- data/lib/coradoc/mirror/reverse_builder/example.rb +20 -0
- data/lib/coradoc/mirror/reverse_builder/figure.rb +35 -0
- data/lib/coradoc/mirror/reverse_builder/footnote_entry.rb +18 -0
- data/lib/coradoc/mirror/reverse_builder/footnote_marker.rb +24 -0
- data/lib/coradoc/mirror/reverse_builder/footnotes.rb +20 -0
- data/lib/coradoc/mirror/reverse_builder/frontmatter.rb +21 -0
- data/lib/coradoc/mirror/reverse_builder/generic_block.rb +26 -0
- data/lib/coradoc/mirror/reverse_builder/header.rb +22 -0
- data/lib/coradoc/mirror/reverse_builder/horizontal_rule.rb +17 -0
- data/lib/coradoc/mirror/reverse_builder/image.rb +25 -0
- data/lib/coradoc/mirror/reverse_builder/include.rb +46 -0
- data/lib/coradoc/mirror/reverse_builder/inline_text.rb +19 -0
- data/lib/coradoc/mirror/reverse_builder/list_item.rb +37 -0
- data/lib/coradoc/mirror/reverse_builder/literal_block.rb +22 -0
- data/lib/coradoc/mirror/reverse_builder/open_block.rb +17 -0
- data/lib/coradoc/mirror/reverse_builder/ordered_list.rb +18 -0
- data/lib/coradoc/mirror/reverse_builder/paragraph.rb +17 -0
- data/lib/coradoc/mirror/reverse_builder/pass_block.rb +22 -0
- data/lib/coradoc/mirror/reverse_builder/preamble.rb +17 -0
- data/lib/coradoc/mirror/reverse_builder/raw_inline.rb +17 -0
- data/lib/coradoc/mirror/reverse_builder/section.rb +28 -0
- data/lib/coradoc/mirror/reverse_builder/sections.rb +19 -0
- data/lib/coradoc/mirror/reverse_builder/sidebar.rb +20 -0
- data/lib/coradoc/mirror/reverse_builder/soft_break.rb +17 -0
- data/lib/coradoc/mirror/reverse_builder/stem_block.rb +22 -0
- data/lib/coradoc/mirror/reverse_builder/table.rb +27 -0
- data/lib/coradoc/mirror/reverse_builder/table_body.rb +17 -0
- data/lib/coradoc/mirror/reverse_builder/table_cell.rb +24 -0
- data/lib/coradoc/mirror/reverse_builder/table_head.rb +17 -0
- data/lib/coradoc/mirror/reverse_builder/table_row.rb +18 -0
- data/lib/coradoc/mirror/reverse_builder/text.rb +24 -0
- data/lib/coradoc/mirror/reverse_builder/toc.rb +17 -0
- data/lib/coradoc/mirror/reverse_builder/toc_entry.rb +18 -0
- data/lib/coradoc/mirror/reverse_builder/verse.rb +20 -0
- data/lib/coradoc/mirror/reverse_builder.rb +59 -574
- data/lib/coradoc/mirror/version.rb +1 -1
- data/lib/coradoc/mirror.rb +2 -0
- data/lib/coradoc-mirror.rb +0 -2
- metadata +45 -2
- data/lib/coradoc/mirror/output.rb +0 -62
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class Header < Base
|
|
9
|
+
registers 'floating_title', 'heading'
|
|
10
|
+
|
|
11
|
+
def build(node)
|
|
12
|
+
attrs = node.attrs
|
|
13
|
+
CoreModel::HeaderElement.new(
|
|
14
|
+
title: attrs&.title,
|
|
15
|
+
level: attrs&.level,
|
|
16
|
+
children: build_content(node)
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class HorizontalRule < Base
|
|
9
|
+
registers 'horizontal_rule', 'thematic_break'
|
|
10
|
+
|
|
11
|
+
def build(_node)
|
|
12
|
+
CoreModel::HorizontalRuleBlock.new
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class Image < Base
|
|
9
|
+
registers 'image'
|
|
10
|
+
|
|
11
|
+
def build(node)
|
|
12
|
+
attrs = node.attrs
|
|
13
|
+
CoreModel::Image.new(
|
|
14
|
+
src: attrs&.src,
|
|
15
|
+
alt: attrs&.alt,
|
|
16
|
+
title: attrs&.title,
|
|
17
|
+
caption: attrs&.caption,
|
|
18
|
+
width: attrs&.width,
|
|
19
|
+
height: attrs&.height
|
|
20
|
+
)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
# Include directive: round-trips back to a CoreModel::Include link
|
|
9
|
+
# node. The text graph is preserved through mirror_json → core.
|
|
10
|
+
class Include < Base
|
|
11
|
+
registers 'include'
|
|
12
|
+
|
|
13
|
+
def build(node)
|
|
14
|
+
attrs = node.attrs
|
|
15
|
+
CoreModel::Include.new(
|
|
16
|
+
target: attrs&.target,
|
|
17
|
+
options: build_options(attrs),
|
|
18
|
+
raw_options: attrs&.raw_options || ''
|
|
19
|
+
)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def build_options(attrs)
|
|
25
|
+
return CoreModel::IncludeOptions.new unless attrs
|
|
26
|
+
|
|
27
|
+
CoreModel::IncludeOptions.new(
|
|
28
|
+
tags: Array(attrs.tags),
|
|
29
|
+
tags_wildcard: attrs.tags == ['*'],
|
|
30
|
+
tags_inverted: attrs.tags == ['**'],
|
|
31
|
+
lines_spec: attrs.lines,
|
|
32
|
+
leveloffset: parse_leveloffset(attrs.leveloffset),
|
|
33
|
+
indent: attrs.indent,
|
|
34
|
+
file_encoding: attrs.file_encoding
|
|
35
|
+
)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def parse_leveloffset(raw)
|
|
39
|
+
return nil if raw.nil? || raw.to_s.empty?
|
|
40
|
+
|
|
41
|
+
Coradoc::CoreModel::IncludeLevelOffset.parse(raw.to_s)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class InlineText < Base
|
|
9
|
+
registers 'dt', 'dd'
|
|
10
|
+
|
|
11
|
+
def build(node)
|
|
12
|
+
children = build_inline_children(node)
|
|
13
|
+
text = children.map { |c| c.is_a?(CoreModel::TextContent) ? c.text : '' }.join
|
|
14
|
+
CoreModel::InlineElement.new(content: text)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class ListItem < Base
|
|
9
|
+
registers 'list_item'
|
|
10
|
+
|
|
11
|
+
LIST_TYPES = %w[bullet_list ordered_list].freeze
|
|
12
|
+
private_constant :LIST_TYPES
|
|
13
|
+
|
|
14
|
+
def build(node)
|
|
15
|
+
children = build_inline_children(node)
|
|
16
|
+
text = children.map { |c| c.is_a?(CoreModel::TextContent) ? c.text : '' }.join
|
|
17
|
+
|
|
18
|
+
CoreModel::ListItem.new(
|
|
19
|
+
content: text,
|
|
20
|
+
children: children,
|
|
21
|
+
nested_list: find_nested_list(node)
|
|
22
|
+
)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def find_nested_list(node)
|
|
28
|
+
node.content&.each do |child|
|
|
29
|
+
next unless child.is_a?(Node)
|
|
30
|
+
return build_node(child) if LIST_TYPES.include?(child.type)
|
|
31
|
+
end
|
|
32
|
+
nil
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class LiteralBlock < Base
|
|
9
|
+
registers 'literal'
|
|
10
|
+
|
|
11
|
+
def build(node)
|
|
12
|
+
attrs = node.attrs
|
|
13
|
+
CoreModel::LiteralBlock.new(
|
|
14
|
+
content: attrs&.text || extract_text(node),
|
|
15
|
+
language: attrs&.language,
|
|
16
|
+
title: attrs&.title
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class OpenBlock < Base
|
|
9
|
+
registers 'open_block'
|
|
10
|
+
|
|
11
|
+
def build(node)
|
|
12
|
+
CoreModel::OpenBlock.new(children: build_content(node))
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class OrderedList < Base
|
|
9
|
+
registers 'ordered_list'
|
|
10
|
+
|
|
11
|
+
def build(node)
|
|
12
|
+
items = build_content(node).select { |c| c.is_a?(CoreModel::ListItem) }
|
|
13
|
+
CoreModel::ListBlock.new(marker_type: 'ordered', items: items)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class Paragraph < Base
|
|
9
|
+
registers 'paragraph'
|
|
10
|
+
|
|
11
|
+
def build(node)
|
|
12
|
+
CoreModel::ParagraphBlock.new(children: build_inline_children(node))
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class PassBlock < Base
|
|
9
|
+
registers 'pass'
|
|
10
|
+
|
|
11
|
+
def build(node)
|
|
12
|
+
attrs = node.attrs
|
|
13
|
+
CoreModel::PassBlock.new(
|
|
14
|
+
content: attrs&.text || extract_text(node),
|
|
15
|
+
language: attrs&.language,
|
|
16
|
+
title: attrs&.title
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class Preamble < Base
|
|
9
|
+
registers 'preface'
|
|
10
|
+
|
|
11
|
+
def build(node)
|
|
12
|
+
CoreModel::PreambleElement.new(children: build_content(node))
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class RawInline < Base
|
|
9
|
+
registers 'raw_inline'
|
|
10
|
+
|
|
11
|
+
def build(node)
|
|
12
|
+
CoreModel::RawInlineElement.new(content: node.text.to_s)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
# All JS SECTION_TYPES reverse to a generic SectionElement. Style
|
|
9
|
+
# information lives in the original AsciiDoc and is preserved only
|
|
10
|
+
# on the forward side; the reverse side collapses them.
|
|
11
|
+
class Section < Base
|
|
12
|
+
registers 'section', 'clause', 'annex', 'content_section',
|
|
13
|
+
'abstract', 'foreword', 'introduction',
|
|
14
|
+
'acknowledgements', 'terms', 'definitions', 'references'
|
|
15
|
+
|
|
16
|
+
def build(node)
|
|
17
|
+
attrs = node.attrs
|
|
18
|
+
CoreModel::SectionElement.new(
|
|
19
|
+
title: attrs&.title,
|
|
20
|
+
level: attrs&.level,
|
|
21
|
+
id: attrs&.id,
|
|
22
|
+
children: build_content(node)
|
|
23
|
+
)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
# `sections` is a structural container only — unwrap directly into
|
|
9
|
+
# an array. MirrorToCoreModel#build_content flattens arrays.
|
|
10
|
+
class Sections < Base
|
|
11
|
+
registers 'sections'
|
|
12
|
+
|
|
13
|
+
def build(node)
|
|
14
|
+
build_content(node)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class Sidebar < Base
|
|
9
|
+
registers 'sidebar'
|
|
10
|
+
|
|
11
|
+
def build(node)
|
|
12
|
+
CoreModel::SidebarBlock.new(
|
|
13
|
+
title: node.attrs&.title,
|
|
14
|
+
children: build_content(node)
|
|
15
|
+
)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class SoftBreak < Base
|
|
9
|
+
registers 'soft_break'
|
|
10
|
+
|
|
11
|
+
def build(_node)
|
|
12
|
+
CoreModel::LineBreakElement.new
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class StemBlock < Base
|
|
9
|
+
registers 'stem'
|
|
10
|
+
|
|
11
|
+
def build(node)
|
|
12
|
+
attrs = node.attrs
|
|
13
|
+
CoreModel::StemBlock.new(
|
|
14
|
+
content: attrs&.text || extract_text(node),
|
|
15
|
+
language: attrs&.language || 'latex',
|
|
16
|
+
title: attrs&.title
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class Table < Base
|
|
9
|
+
registers 'table'
|
|
10
|
+
|
|
11
|
+
def build(node)
|
|
12
|
+
rows = []
|
|
13
|
+
node.content&.each do |child|
|
|
14
|
+
next unless child.is_a?(Node)
|
|
15
|
+
next unless %w[table_head table_body].include?(child.type)
|
|
16
|
+
|
|
17
|
+
child.content&.each do |row_node|
|
|
18
|
+
rows << build_node(row_node) if row_node.is_a?(Node)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
CoreModel::Table.new(title: node.attrs&.title, rows: rows)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class TableBody < Base
|
|
9
|
+
registers 'table_body'
|
|
10
|
+
|
|
11
|
+
def build(node)
|
|
12
|
+
build_content(node).first || CoreModel::TableRow.new
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class TableCell < Base
|
|
9
|
+
registers 'table_cell'
|
|
10
|
+
|
|
11
|
+
def build(node)
|
|
12
|
+
attrs = node.attrs
|
|
13
|
+
CoreModel::TableCell.new(
|
|
14
|
+
content: extract_text(node),
|
|
15
|
+
header: attrs&.header || false,
|
|
16
|
+
colspan: attrs&.colspan,
|
|
17
|
+
rowspan: attrs&.rowspan,
|
|
18
|
+
alignment: attrs&.alignment
|
|
19
|
+
)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class TableHead < Base
|
|
9
|
+
registers 'table_head'
|
|
10
|
+
|
|
11
|
+
def build(node)
|
|
12
|
+
build_content(node).first || CoreModel::TableRow.new
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class TableRow < Base
|
|
9
|
+
registers 'table_row'
|
|
10
|
+
|
|
11
|
+
def build(node)
|
|
12
|
+
cells = build_content(node).select { |c| c.is_a?(CoreModel::TableCell) }
|
|
13
|
+
CoreModel::TableRow.new(cells: cells)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class Text < Base
|
|
9
|
+
registers 'text'
|
|
10
|
+
|
|
11
|
+
def build(node)
|
|
12
|
+
text = node.text || ''
|
|
13
|
+
marks = node.marks || []
|
|
14
|
+
|
|
15
|
+
return CoreModel::TextContent.new(text: text) if marks.empty?
|
|
16
|
+
|
|
17
|
+
marks.reduce(CoreModel::TextContent.new(text: text)) do |current, mark|
|
|
18
|
+
apply_mark(current, mark)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class TocEntry < Base
|
|
9
|
+
registers 'toc_entry'
|
|
10
|
+
|
|
11
|
+
def build(node)
|
|
12
|
+
attrs = node.attrs
|
|
13
|
+
CoreModel::TocEntry.new(id: attrs&.id, title: attrs&.title)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'base'
|
|
4
|
+
|
|
5
|
+
module Coradoc
|
|
6
|
+
module Mirror
|
|
7
|
+
module ReverseBuilder
|
|
8
|
+
class Verse < Base
|
|
9
|
+
registers 'verse'
|
|
10
|
+
|
|
11
|
+
def build(node)
|
|
12
|
+
CoreModel::VerseBlock.new(
|
|
13
|
+
content: extract_text(node),
|
|
14
|
+
attribution: node.attrs&.attribution
|
|
15
|
+
)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|