coradoc-adoc 2.0.0
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 +7 -0
- data/.rspec +3 -0
- data/lib/coradoc/asciidoc/model/admonition.rb +37 -0
- data/lib/coradoc/asciidoc/model/anchorable.rb +64 -0
- data/lib/coradoc/asciidoc/model/attached.rb +26 -0
- data/lib/coradoc/asciidoc/model/attribute.rb +22 -0
- data/lib/coradoc/asciidoc/model/attribute_list/matchers.rb +45 -0
- data/lib/coradoc/asciidoc/model/attribute_list.rb +230 -0
- data/lib/coradoc/asciidoc/model/attribute_list_attribute.rb +11 -0
- data/lib/coradoc/asciidoc/model/audio.rb +44 -0
- data/lib/coradoc/asciidoc/model/author.rb +36 -0
- data/lib/coradoc/asciidoc/model/base.rb +141 -0
- data/lib/coradoc/asciidoc/model/bibliography.rb +37 -0
- data/lib/coradoc/asciidoc/model/bibliography_entry.rb +38 -0
- data/lib/coradoc/asciidoc/model/block/core.rb +139 -0
- data/lib/coradoc/asciidoc/model/block/example.rb +14 -0
- data/lib/coradoc/asciidoc/model/block/listing.rb +14 -0
- data/lib/coradoc/asciidoc/model/block/literal.rb +14 -0
- data/lib/coradoc/asciidoc/model/block/open.rb +14 -0
- data/lib/coradoc/asciidoc/model/block/pass.rb +14 -0
- data/lib/coradoc/asciidoc/model/block/quote.rb +14 -0
- data/lib/coradoc/asciidoc/model/block/reviewer_comment.rb +14 -0
- data/lib/coradoc/asciidoc/model/block/side.rb +14 -0
- data/lib/coradoc/asciidoc/model/block/source_code.rb +14 -0
- data/lib/coradoc/asciidoc/model/block.rb +21 -0
- data/lib/coradoc/asciidoc/model/break.rb +33 -0
- data/lib/coradoc/asciidoc/model/comment_block.rb +33 -0
- data/lib/coradoc/asciidoc/model/comment_line.rb +30 -0
- data/lib/coradoc/asciidoc/model/content_list.rb +334 -0
- data/lib/coradoc/asciidoc/model/document.rb +197 -0
- data/lib/coradoc/asciidoc/model/document_attributes.rb +43 -0
- data/lib/coradoc/asciidoc/model/glossaries.rb +11 -0
- data/lib/coradoc/asciidoc/model/header.rb +57 -0
- data/lib/coradoc/asciidoc/model/highlight.rb +11 -0
- data/lib/coradoc/asciidoc/model/image/block_image/attribute_list.rb +23 -0
- data/lib/coradoc/asciidoc/model/image/block_image.rb +25 -0
- data/lib/coradoc/asciidoc/model/image/core/attribute_list.rb +43 -0
- data/lib/coradoc/asciidoc/model/image/core.rb +72 -0
- data/lib/coradoc/asciidoc/model/image/inline_image.rb +17 -0
- data/lib/coradoc/asciidoc/model/image.rb +14 -0
- data/lib/coradoc/asciidoc/model/include.rb +66 -0
- data/lib/coradoc/asciidoc/model/inline/anchor.rb +41 -0
- data/lib/coradoc/asciidoc/model/inline/attribute_reference.rb +25 -0
- data/lib/coradoc/asciidoc/model/inline/base.rb +15 -0
- data/lib/coradoc/asciidoc/model/inline/bold.rb +38 -0
- data/lib/coradoc/asciidoc/model/inline/cross_reference.rb +29 -0
- data/lib/coradoc/asciidoc/model/inline/cross_reference_arg.rb +15 -0
- data/lib/coradoc/asciidoc/model/inline/footnote.rb +34 -0
- data/lib/coradoc/asciidoc/model/inline/hard_line_break.rb +24 -0
- data/lib/coradoc/asciidoc/model/inline/highlight.rb +36 -0
- data/lib/coradoc/asciidoc/model/inline/italic.rb +38 -0
- data/lib/coradoc/asciidoc/model/inline/link.rb +46 -0
- data/lib/coradoc/asciidoc/model/inline/monospace.rb +39 -0
- data/lib/coradoc/asciidoc/model/inline/quotation.rb +25 -0
- data/lib/coradoc/asciidoc/model/inline/small.rb +25 -0
- data/lib/coradoc/asciidoc/model/inline/span.rb +38 -0
- data/lib/coradoc/asciidoc/model/inline/stem.rb +24 -0
- data/lib/coradoc/asciidoc/model/inline/strikethrough.rb +39 -0
- data/lib/coradoc/asciidoc/model/inline/subscript.rb +33 -0
- data/lib/coradoc/asciidoc/model/inline/superscript.rb +33 -0
- data/lib/coradoc/asciidoc/model/inline/underline.rb +25 -0
- data/lib/coradoc/asciidoc/model/inline.rb +31 -0
- data/lib/coradoc/asciidoc/model/line_break.rb +11 -0
- data/lib/coradoc/asciidoc/model/list/core.rb +61 -0
- data/lib/coradoc/asciidoc/model/list/definition.rb +27 -0
- data/lib/coradoc/asciidoc/model/list/definition_item.rb +43 -0
- data/lib/coradoc/asciidoc/model/list/item.rb +72 -0
- data/lib/coradoc/asciidoc/model/list/nestable.rb +14 -0
- data/lib/coradoc/asciidoc/model/list/ordered.rb +34 -0
- data/lib/coradoc/asciidoc/model/list/unordered.rb +34 -0
- data/lib/coradoc/asciidoc/model/list.rb +29 -0
- data/lib/coradoc/asciidoc/model/named_attribute.rb +12 -0
- data/lib/coradoc/asciidoc/model/paragraph.rb +59 -0
- data/lib/coradoc/asciidoc/model/rejected_positional_attribute.rb +12 -0
- data/lib/coradoc/asciidoc/model/resolvable.rb +71 -0
- data/lib/coradoc/asciidoc/model/resolver.rb +430 -0
- data/lib/coradoc/asciidoc/model/reviewer_note.rb +54 -0
- data/lib/coradoc/asciidoc/model/revision.rb +47 -0
- data/lib/coradoc/asciidoc/model/section.rb +109 -0
- data/lib/coradoc/asciidoc/model/serialization/asciidoc_adapter.rb +28 -0
- data/lib/coradoc/asciidoc/model/serialization/asciidoc_mapping.rb +42 -0
- data/lib/coradoc/asciidoc/model/serialization/asciidoc_mapping_rule.rb +41 -0
- data/lib/coradoc/asciidoc/model/serialization/asciidoc_transform.rb +211 -0
- data/lib/coradoc/asciidoc/model/serialization/errors.rb +57 -0
- data/lib/coradoc/asciidoc/model/serialization.rb +39 -0
- data/lib/coradoc/asciidoc/model/spacing.rb +282 -0
- data/lib/coradoc/asciidoc/model/table.rb +44 -0
- data/lib/coradoc/asciidoc/model/table_cell.rb +122 -0
- data/lib/coradoc/asciidoc/model/table_row.rb +26 -0
- data/lib/coradoc/asciidoc/model/tag.rb +36 -0
- data/lib/coradoc/asciidoc/model/term.rb +48 -0
- data/lib/coradoc/asciidoc/model/text_element.rb +66 -0
- data/lib/coradoc/asciidoc/model/title.rb +85 -0
- data/lib/coradoc/asciidoc/model/video/attribute_list.rb +43 -0
- data/lib/coradoc/asciidoc/model/video.rb +49 -0
- data/lib/coradoc/asciidoc/model.rb +75 -0
- data/lib/coradoc/asciidoc/parse_error.rb +161 -0
- data/lib/coradoc/asciidoc/parser/admonition.rb +26 -0
- data/lib/coradoc/asciidoc/parser/attribute_list.rb +110 -0
- data/lib/coradoc/asciidoc/parser/base.rb +159 -0
- data/lib/coradoc/asciidoc/parser/bibliography.rb +31 -0
- data/lib/coradoc/asciidoc/parser/block.rb +186 -0
- data/lib/coradoc/asciidoc/parser/block_assembler.rb +183 -0
- data/lib/coradoc/asciidoc/parser/cache.rb +155 -0
- data/lib/coradoc/asciidoc/parser/citation.rb +32 -0
- data/lib/coradoc/asciidoc/parser/content.rb +76 -0
- data/lib/coradoc/asciidoc/parser/document_attributes.rb +27 -0
- data/lib/coradoc/asciidoc/parser/fix_files.rb +76 -0
- data/lib/coradoc/asciidoc/parser/header.rb +31 -0
- data/lib/coradoc/asciidoc/parser/inline.rb +199 -0
- data/lib/coradoc/asciidoc/parser/list.rb +130 -0
- data/lib/coradoc/asciidoc/parser/metadata_detector.rb +164 -0
- data/lib/coradoc/asciidoc/parser/paragraph.rb +64 -0
- data/lib/coradoc/asciidoc/parser/section.rb +62 -0
- data/lib/coradoc/asciidoc/parser/stem.rb +19 -0
- data/lib/coradoc/asciidoc/parser/table.rb +166 -0
- data/lib/coradoc/asciidoc/parser/term.rb +70 -0
- data/lib/coradoc/asciidoc/parser/text.rb +156 -0
- data/lib/coradoc/asciidoc/parser.rb +10 -0
- data/lib/coradoc/asciidoc/serializer/adoc_serializer.rb +86 -0
- data/lib/coradoc/asciidoc/serializer/element_registry.rb +95 -0
- data/lib/coradoc/asciidoc/serializer/fallback_serializer.rb +21 -0
- data/lib/coradoc/asciidoc/serializer/formatter.rb +144 -0
- data/lib/coradoc/asciidoc/serializer/registrations.rb +108 -0
- data/lib/coradoc/asciidoc/serializer/serialization_context.rb +238 -0
- data/lib/coradoc/asciidoc/serializer/serializers/admonition.rb +19 -0
- data/lib/coradoc/asciidoc/serializer/serializers/attribute.rb +23 -0
- data/lib/coradoc/asciidoc/serializer/serializers/attribute_list.rb +40 -0
- data/lib/coradoc/asciidoc/serializer/serializers/attribute_list_attribute.rb +18 -0
- data/lib/coradoc/asciidoc/serializer/serializers/audio.rb +33 -0
- data/lib/coradoc/asciidoc/serializer/serializers/author.rb +20 -0
- data/lib/coradoc/asciidoc/serializer/serializers/base.rb +152 -0
- data/lib/coradoc/asciidoc/serializer/serializers/bibliography.rb +35 -0
- data/lib/coradoc/asciidoc/serializer/serializers/bibliography_entry.rb +24 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block/core.rb +70 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block/example.rb +17 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block/listing.rb +22 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block/literal.rb +17 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block/open.rb +22 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block/pass.rb +17 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block/quote.rb +17 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block/reviewer_comment.rb +17 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block/side.rb +22 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block/source_code.rb +22 -0
- data/lib/coradoc/asciidoc/serializer/serializers/block.rb +23 -0
- data/lib/coradoc/asciidoc/serializer/serializers/break.rb +18 -0
- data/lib/coradoc/asciidoc/serializer/serializers/comment_block.rb +22 -0
- data/lib/coradoc/asciidoc/serializer/serializers/comment_line.rb +22 -0
- data/lib/coradoc/asciidoc/serializer/serializers/document.rb +65 -0
- data/lib/coradoc/asciidoc/serializer/serializers/document_attributes.rb +21 -0
- data/lib/coradoc/asciidoc/serializer/serializers/header.rb +24 -0
- data/lib/coradoc/asciidoc/serializer/serializers/highlight.rb +23 -0
- data/lib/coradoc/asciidoc/serializer/serializers/image/core.rb +30 -0
- data/lib/coradoc/asciidoc/serializer/serializers/image.rb +14 -0
- data/lib/coradoc/asciidoc/serializer/serializers/include.rb +19 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/anchor.rb +20 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/attribute_reference.rb +20 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/bold.rb +26 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/cross_reference.rb +30 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/cross_reference_arg.rb +20 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/footnote.rb +24 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/hard_line_break.rb +20 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/highlight.rb +26 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/italic.rb +26 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/link.rb +38 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/monospace.rb +26 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/quotation.rb +21 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/small.rb +20 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/span.rb +35 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/stem.rb +23 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/strikethrough.rb +29 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/subscript.rb +29 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/superscript.rb +26 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline/underline.rb +20 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline.rb +32 -0
- data/lib/coradoc/asciidoc/serializer/serializers/line_break.rb +18 -0
- data/lib/coradoc/asciidoc/serializer/serializers/list/core.rb +47 -0
- data/lib/coradoc/asciidoc/serializer/serializers/list/definition.rb +35 -0
- data/lib/coradoc/asciidoc/serializer/serializers/list/definition_item.rb +38 -0
- data/lib/coradoc/asciidoc/serializer/serializers/list/item.rb +120 -0
- data/lib/coradoc/asciidoc/serializer/serializers/list/ordered.rb +24 -0
- data/lib/coradoc/asciidoc/serializer/serializers/list/unordered.rb +29 -0
- data/lib/coradoc/asciidoc/serializer/serializers/list.rb +19 -0
- data/lib/coradoc/asciidoc/serializer/serializers/named_attribute.rb +22 -0
- data/lib/coradoc/asciidoc/serializer/serializers/paragraph.rb +65 -0
- data/lib/coradoc/asciidoc/serializer/serializers/reviewer_note.rb +28 -0
- data/lib/coradoc/asciidoc/serializer/serializers/revision.rb +26 -0
- data/lib/coradoc/asciidoc/serializer/serializers/section.rb +37 -0
- data/lib/coradoc/asciidoc/serializer/serializers/table.rb +24 -0
- data/lib/coradoc/asciidoc/serializer/serializers/table_cell.rb +75 -0
- data/lib/coradoc/asciidoc/serializer/serializers/table_row.rb +24 -0
- data/lib/coradoc/asciidoc/serializer/serializers/tag.rb +19 -0
- data/lib/coradoc/asciidoc/serializer/serializers/term.rb +20 -0
- data/lib/coradoc/asciidoc/serializer/serializers/text_element.rb +23 -0
- data/lib/coradoc/asciidoc/serializer/serializers/title.rb +55 -0
- data/lib/coradoc/asciidoc/serializer/serializers/video.rb +33 -0
- data/lib/coradoc/asciidoc/serializer/spacing_strategy.rb +70 -0
- data/lib/coradoc/asciidoc/serializer.rb +75 -0
- data/lib/coradoc/asciidoc/transform/from_core_model.rb +502 -0
- data/lib/coradoc/asciidoc/transform/from_core_model_registrations.rb +126 -0
- data/lib/coradoc/asciidoc/transform/registry.rb +146 -0
- data/lib/coradoc/asciidoc/transform/to_core_model.rb +564 -0
- data/lib/coradoc/asciidoc/transform/to_core_model_registrations.rb +257 -0
- data/lib/coradoc/asciidoc/transform.rb +13 -0
- data/lib/coradoc/asciidoc/transformer/block_rules.rb +101 -0
- data/lib/coradoc/asciidoc/transformer/header_rules.rb +91 -0
- data/lib/coradoc/asciidoc/transformer/inline_rules.rb +179 -0
- data/lib/coradoc/asciidoc/transformer/list_rules.rb +131 -0
- data/lib/coradoc/asciidoc/transformer/misc_rules.rb +196 -0
- data/lib/coradoc/asciidoc/transformer/structural_rules.rb +216 -0
- data/lib/coradoc/asciidoc/transformer/text_rules.rb +107 -0
- data/lib/coradoc/asciidoc/transformer.rb +406 -0
- data/lib/coradoc/asciidoc/version.rb +7 -0
- data/lib/coradoc/asciidoc.rb +148 -0
- data/lib/coradoc/util/asciidoc.rb +71 -0
- data/lib/coradoc/util.rb +8 -0
- metadata +343 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
module Transform
|
|
6
|
+
# Registers all default AsciiDoc -> CoreModel transformers
|
|
7
|
+
module ToCoreModelRegistrations
|
|
8
|
+
class << self
|
|
9
|
+
def register_all!
|
|
10
|
+
register_document_transformers!
|
|
11
|
+
register_block_transformers!
|
|
12
|
+
register_list_transformers!
|
|
13
|
+
register_inline_transformers!
|
|
14
|
+
register_table_transformers!
|
|
15
|
+
register_other_transformers!
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
def register_document_transformers!
|
|
21
|
+
Registry.register(
|
|
22
|
+
Coradoc::AsciiDoc::Model::Document,
|
|
23
|
+
method_wrapper(:transform_document)
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
Registry.register(
|
|
27
|
+
Coradoc::AsciiDoc::Model::Section,
|
|
28
|
+
method_wrapper(:transform_section)
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
Registry.register(
|
|
32
|
+
Coradoc::AsciiDoc::Model::Paragraph,
|
|
33
|
+
method_wrapper(:transform_paragraph)
|
|
34
|
+
)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def register_block_transformers!
|
|
38
|
+
Registry.register_with_priority(
|
|
39
|
+
Coradoc::AsciiDoc::Model::Block::SourceCode,
|
|
40
|
+
METHOD_DISPATCH[:transform_source_block],
|
|
41
|
+
priority: 10
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
{
|
|
45
|
+
Coradoc::AsciiDoc::Model::Block::Quote => Coradoc::CoreModel::QuoteBlock,
|
|
46
|
+
Coradoc::AsciiDoc::Model::Block::Example => Coradoc::CoreModel::ExampleBlock,
|
|
47
|
+
Coradoc::AsciiDoc::Model::Block::Side => Coradoc::CoreModel::SidebarBlock,
|
|
48
|
+
Coradoc::AsciiDoc::Model::Block::Literal => Coradoc::CoreModel::LiteralBlock,
|
|
49
|
+
Coradoc::AsciiDoc::Model::Block::Open => Coradoc::CoreModel::OpenBlock,
|
|
50
|
+
Coradoc::AsciiDoc::Model::Block::Pass => Coradoc::CoreModel::PassBlock
|
|
51
|
+
}.each do |block_class, core_model_class|
|
|
52
|
+
Registry.register_with_priority(
|
|
53
|
+
block_class,
|
|
54
|
+
typed_block_wrapper(core_model_class),
|
|
55
|
+
priority: 10
|
|
56
|
+
)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
Registry.register(
|
|
60
|
+
Coradoc::AsciiDoc::Model::Block::Core,
|
|
61
|
+
block_model_wrapper
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
Registry.register(
|
|
65
|
+
Coradoc::AsciiDoc::Model::CommentBlock,
|
|
66
|
+
lambda { |model|
|
|
67
|
+
Coradoc::CoreModel::Block.new(
|
|
68
|
+
element_type: 'comment',
|
|
69
|
+
content: model.text.to_s
|
|
70
|
+
)
|
|
71
|
+
}
|
|
72
|
+
)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def register_list_transformers!
|
|
76
|
+
Registry.register(
|
|
77
|
+
Coradoc::AsciiDoc::Model::List::Unordered,
|
|
78
|
+
list_wrapper('unordered')
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
Registry.register(
|
|
82
|
+
Coradoc::AsciiDoc::Model::List::Ordered,
|
|
83
|
+
list_wrapper('ordered')
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
Registry.register(
|
|
87
|
+
Coradoc::AsciiDoc::Model::List::Definition,
|
|
88
|
+
list_wrapper('definition')
|
|
89
|
+
)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def register_inline_transformers!
|
|
93
|
+
[
|
|
94
|
+
[Coradoc::AsciiDoc::Model::Inline::Bold, 'bold'],
|
|
95
|
+
[Coradoc::AsciiDoc::Model::Inline::Italic, 'italic'],
|
|
96
|
+
[Coradoc::AsciiDoc::Model::Inline::Monospace, 'monospace'],
|
|
97
|
+
[Coradoc::AsciiDoc::Model::Inline::Highlight, 'highlight'],
|
|
98
|
+
[Coradoc::AsciiDoc::Model::Inline::Strikethrough, 'strikethrough'],
|
|
99
|
+
[Coradoc::AsciiDoc::Model::Inline::Subscript, 'subscript'],
|
|
100
|
+
[Coradoc::AsciiDoc::Model::Inline::Superscript, 'superscript']
|
|
101
|
+
].each do |inline_class, format_type|
|
|
102
|
+
Registry.register(
|
|
103
|
+
inline_class,
|
|
104
|
+
inline_wrapper(format_type)
|
|
105
|
+
)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
Registry.register(
|
|
109
|
+
Coradoc::AsciiDoc::Model::Inline::Underline,
|
|
110
|
+
inline_text_wrapper('underline')
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
Registry.register(
|
|
114
|
+
Coradoc::AsciiDoc::Model::Inline::Link,
|
|
115
|
+
method_wrapper(:transform_link)
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
Registry.register(
|
|
119
|
+
Coradoc::AsciiDoc::Model::Inline::CrossReference,
|
|
120
|
+
method_wrapper(:transform_cross_reference)
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
Registry.register(
|
|
124
|
+
Coradoc::AsciiDoc::Model::Inline::Footnote,
|
|
125
|
+
method_wrapper(:transform_inline_footnote)
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
Registry.register(
|
|
129
|
+
Coradoc::AsciiDoc::Model::Inline::Stem,
|
|
130
|
+
method_wrapper(:transform_stem)
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
Registry.register(
|
|
134
|
+
Coradoc::AsciiDoc::Model::Inline::AttributeReference,
|
|
135
|
+
lambda { |model|
|
|
136
|
+
Coradoc::CoreModel::InlineElement.new(
|
|
137
|
+
format_type: 'attribute_reference',
|
|
138
|
+
content: "{#{model.name}}"
|
|
139
|
+
)
|
|
140
|
+
}
|
|
141
|
+
)
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def register_table_transformers!
|
|
145
|
+
Registry.register(
|
|
146
|
+
Coradoc::AsciiDoc::Model::Table,
|
|
147
|
+
method_wrapper(:transform_table)
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
Registry.register(
|
|
151
|
+
Coradoc::AsciiDoc::Model::TableRow,
|
|
152
|
+
method_wrapper(:transform_table_row)
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
Registry.register(
|
|
156
|
+
Coradoc::AsciiDoc::Model::TableCell,
|
|
157
|
+
method_wrapper(:transform_table_cell)
|
|
158
|
+
)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def register_other_transformers!
|
|
162
|
+
Registry.register(
|
|
163
|
+
Coradoc::AsciiDoc::Model::Term,
|
|
164
|
+
method_wrapper(:transform_term)
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
Registry.register(
|
|
168
|
+
Coradoc::AsciiDoc::Model::Admonition,
|
|
169
|
+
method_wrapper(:transform_admonition)
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
Registry.register(
|
|
173
|
+
Coradoc::AsciiDoc::Model::Image::BlockImage,
|
|
174
|
+
method_wrapper(:transform_image)
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
Registry.register(
|
|
178
|
+
Coradoc::AsciiDoc::Model::Bibliography,
|
|
179
|
+
method_wrapper(:transform_bibliography)
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
Registry.register(
|
|
183
|
+
Coradoc::AsciiDoc::Model::BibliographyEntry,
|
|
184
|
+
method_wrapper(:transform_bibliography_entry)
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
# Passthrough types (no CoreModel equivalent)
|
|
188
|
+
[
|
|
189
|
+
Coradoc::AsciiDoc::Model::TextElement,
|
|
190
|
+
Coradoc::AsciiDoc::Model::Include,
|
|
191
|
+
Coradoc::AsciiDoc::Model::Audio,
|
|
192
|
+
Coradoc::AsciiDoc::Model::Video,
|
|
193
|
+
Coradoc::AsciiDoc::Model::ContentList,
|
|
194
|
+
Coradoc::AsciiDoc::Model::Tag
|
|
195
|
+
].each do |klass|
|
|
196
|
+
Registry.register(klass, ->(model) { model })
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# Filtered types (layout-only, no CoreModel representation)
|
|
200
|
+
[
|
|
201
|
+
Coradoc::AsciiDoc::Model::LineBreak,
|
|
202
|
+
Coradoc::AsciiDoc::Model::Break::PageBreak
|
|
203
|
+
].each do |klass|
|
|
204
|
+
Registry.register(klass, ->(_model) { nil })
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
METHOD_DISPATCH = {
|
|
209
|
+
transform_document: ->(model) { ToCoreModel.transform_document(model) },
|
|
210
|
+
transform_section: ->(model) { ToCoreModel.transform_section(model) },
|
|
211
|
+
transform_paragraph: ->(model) { ToCoreModel.transform_paragraph(model) },
|
|
212
|
+
transform_source_block: ->(model) { ToCoreModel.transform_source_block(model) },
|
|
213
|
+
transform_link: ->(model) { ToCoreModel.transform_link(model) },
|
|
214
|
+
transform_cross_reference: ->(model) { ToCoreModel.transform_cross_reference(model) },
|
|
215
|
+
transform_inline_footnote: ->(model) { ToCoreModel.transform_inline_footnote(model) },
|
|
216
|
+
transform_stem: ->(model) { ToCoreModel.transform_stem(model) },
|
|
217
|
+
transform_table: ->(model) { ToCoreModel.transform_table(model) },
|
|
218
|
+
transform_table_row: ->(model) { ToCoreModel.transform_table_row(model) },
|
|
219
|
+
transform_table_cell: ->(model) { ToCoreModel.transform_table_cell(model) },
|
|
220
|
+
transform_term: ->(model) { ToCoreModel.transform_term(model) },
|
|
221
|
+
transform_admonition: ->(model) { ToCoreModel.transform_admonition(model) },
|
|
222
|
+
transform_image: ->(model) { ToCoreModel.transform_image(model) },
|
|
223
|
+
transform_bibliography: ->(model) { ToCoreModel.transform_bibliography(model) },
|
|
224
|
+
transform_bibliography_entry: ->(model) { ToCoreModel.transform_bibliography_entry(model) }
|
|
225
|
+
}.freeze
|
|
226
|
+
|
|
227
|
+
def method_wrapper(method_name)
|
|
228
|
+
METHOD_DISPATCH.fetch(method_name)
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
def typed_block_wrapper(klass)
|
|
232
|
+
->(model) { ToCoreModel.transform_typed_block(model, klass) }
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
def block_model_wrapper
|
|
236
|
+
->(model) { ToCoreModel.transform_block(model, model.delimiter.to_s) }
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
def list_wrapper(marker_type)
|
|
240
|
+
->(model) { ToCoreModel.transform_list(model, marker_type) }
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
def inline_wrapper(format_type)
|
|
244
|
+
->(model) { ToCoreModel.transform_inline(model, format_type) }
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
def inline_text_wrapper(format_type)
|
|
248
|
+
->(model) { ToCoreModel.transform_inline_text(model, format_type) }
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
# Auto-register when this file is loaded
|
|
257
|
+
Coradoc::AsciiDoc::Transform::ToCoreModelRegistrations.register_all!
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
module Transform
|
|
6
|
+
autoload :Registry, "#{__dir__}/transform/registry"
|
|
7
|
+
autoload :ToCoreModel, "#{__dir__}/transform/to_core_model"
|
|
8
|
+
autoload :ToCoreModelRegistrations, "#{__dir__}/transform/to_core_model_registrations"
|
|
9
|
+
autoload :FromCoreModel, "#{__dir__}/transform/from_core_model"
|
|
10
|
+
autoload :FromCoreModelRegistrations, "#{__dir__}/transform/from_core_model_registrations"
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
class Transformer < Parslet::Transform
|
|
6
|
+
# Module containing block element transformation rules
|
|
7
|
+
module BlockRules
|
|
8
|
+
def self.apply(transformer_class)
|
|
9
|
+
transformer_class.class_eval do
|
|
10
|
+
# Generic block
|
|
11
|
+
rule(block: subtree(:block)) do
|
|
12
|
+
id = block[:id]
|
|
13
|
+
title = block[:title]
|
|
14
|
+
attribute_list = block[:attribute_list]
|
|
15
|
+
delimiter = block[:delimiter].to_s
|
|
16
|
+
delimiter_c = delimiter[0]
|
|
17
|
+
lines = block[:lines]
|
|
18
|
+
ordering = block.keys.select do |k|
|
|
19
|
+
%i[id title attribute_list attribute_list2].include?(k)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
opts = {
|
|
23
|
+
id: id,
|
|
24
|
+
title: title,
|
|
25
|
+
delimiter_len: delimiter.size,
|
|
26
|
+
lines: lines,
|
|
27
|
+
ordering: ordering
|
|
28
|
+
}
|
|
29
|
+
opts[:attributes] = attribute_list if attribute_list
|
|
30
|
+
delimiter_len = opts[:delimiter_len]
|
|
31
|
+
|
|
32
|
+
if delimiter_c == '*'
|
|
33
|
+
if attribute_list
|
|
34
|
+
if attribute_list.positional == [] &&
|
|
35
|
+
attribute_list.named.first&.name == 'reviewer'
|
|
36
|
+
Model::Block::ReviewerComment.new(
|
|
37
|
+
id:,
|
|
38
|
+
title:,
|
|
39
|
+
lines:,
|
|
40
|
+
delimiter_len:,
|
|
41
|
+
attributes: attribute_list
|
|
42
|
+
)
|
|
43
|
+
else
|
|
44
|
+
Model::Block::Side.new(id:, title:, lines:, delimiter_len:,
|
|
45
|
+
attributes: attribute_list)
|
|
46
|
+
end
|
|
47
|
+
else
|
|
48
|
+
Model::Block::Side.new(id:, title:, lines:, delimiter_len:,
|
|
49
|
+
attributes: attribute_list)
|
|
50
|
+
end
|
|
51
|
+
elsif delimiter_c == '='
|
|
52
|
+
Model::Block::Example.new(id:, title:, lines:, delimiter_len:,
|
|
53
|
+
attributes: attribute_list)
|
|
54
|
+
elsif delimiter_c == '+'
|
|
55
|
+
Model::Block::Pass.new(id:, title:, lines:, delimiter_len:,
|
|
56
|
+
attributes: attribute_list)
|
|
57
|
+
elsif delimiter_c == '-' && delimiter.size == 2
|
|
58
|
+
Model::Block::Open.new(id:, title:, lines:, delimiter_len:,
|
|
59
|
+
attributes: attribute_list)
|
|
60
|
+
elsif delimiter_c == '-' && delimiter.size >= 4
|
|
61
|
+
Model::Block::SourceCode.new(id:, title:, lines:, delimiter_len:,
|
|
62
|
+
attributes: attribute_list)
|
|
63
|
+
elsif delimiter_c == '_'
|
|
64
|
+
Model::Block::Quote.new(id:, title:, lines:, delimiter_len:,
|
|
65
|
+
attributes: attribute_list)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Example
|
|
70
|
+
rule(example: sequence(:example)) do
|
|
71
|
+
Model::Block::Example.new(title: '', lines: example)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Admonition
|
|
75
|
+
rule(
|
|
76
|
+
admonition_type: simple(:admonition_type),
|
|
77
|
+
content: sequence(:content)
|
|
78
|
+
) do
|
|
79
|
+
Model::Admonition.new(content: content, type: admonition_type.to_s)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Block image
|
|
83
|
+
rule(block_image: subtree(:block_image)) do
|
|
84
|
+
id = block_image[:id]
|
|
85
|
+
title = block_image[:title]
|
|
86
|
+
path = block_image[:path]
|
|
87
|
+
attrs = block_image[:attribute_list]
|
|
88
|
+
Model::Image::BlockImage.new(
|
|
89
|
+
title: title,
|
|
90
|
+
id: id,
|
|
91
|
+
src: path,
|
|
92
|
+
attributes: attrs,
|
|
93
|
+
line_break: "\n"
|
|
94
|
+
)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
class Transformer < Parslet::Transform
|
|
6
|
+
# Module containing header transformation rules
|
|
7
|
+
module HeaderRules
|
|
8
|
+
def self.apply(transformer_class)
|
|
9
|
+
transformer_class.class_eval do
|
|
10
|
+
# Header with author and revision
|
|
11
|
+
rule(
|
|
12
|
+
title: simple(:title),
|
|
13
|
+
author: simple(:author),
|
|
14
|
+
revision: simple(:revision)
|
|
15
|
+
) do
|
|
16
|
+
id = title.is_a?(Model::Title) ? title.id : nil
|
|
17
|
+
Model::Header.new(id:, title:, author:, revision:)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Header with author only
|
|
21
|
+
rule(
|
|
22
|
+
title: simple(:title),
|
|
23
|
+
author: simple(:author)
|
|
24
|
+
) do
|
|
25
|
+
id = title.is_a?(Model::Title) ? title.id : nil
|
|
26
|
+
Model::Header.new(id:, title:, author:, revision: nil)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Header with revision only
|
|
30
|
+
rule(
|
|
31
|
+
title: simple(:title),
|
|
32
|
+
revision: simple(:revision)
|
|
33
|
+
) do
|
|
34
|
+
id = title.is_a?(Model::Title) ? title.id : nil
|
|
35
|
+
Model::Header.new(id:, title:, author: nil, revision:)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Header with title only
|
|
39
|
+
rule(
|
|
40
|
+
title: simple(:title)
|
|
41
|
+
) do
|
|
42
|
+
id = title.is_a?(Model::Title) ? title.id : nil
|
|
43
|
+
Model::Header.new(id:, title:, author: nil, revision: nil)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Author
|
|
47
|
+
rule(
|
|
48
|
+
first_name: simple(:first_name),
|
|
49
|
+
last_name: simple(:last_name),
|
|
50
|
+
email: simple(:email)
|
|
51
|
+
) do
|
|
52
|
+
Model::Author.new(first_name:, last_name:, email:, middle_name: nil)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Revision
|
|
56
|
+
rule(
|
|
57
|
+
number: simple(:number),
|
|
58
|
+
date: simple(:date),
|
|
59
|
+
remark: simple(:remark)
|
|
60
|
+
) do
|
|
61
|
+
Model::Revision.new(number:, date:, remark:)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Unwrap header hash - handles cases where header wasn't transformed yet
|
|
65
|
+
rule(header: subtree(:header)) do
|
|
66
|
+
if header.is_a?(Hash) && header.key?(:title)
|
|
67
|
+
id = header[:id]
|
|
68
|
+
id = id.to_s unless id.nil?
|
|
69
|
+
id = nil if id && id.empty?
|
|
70
|
+
|
|
71
|
+
title = header[:title]
|
|
72
|
+
author = header[:author]
|
|
73
|
+
revision = header[:revision]
|
|
74
|
+
|
|
75
|
+
id = title.id if title.is_a?(Model::Title) && title.id && !id
|
|
76
|
+
|
|
77
|
+
Model::Header.new(id:, title:, author:, revision:)
|
|
78
|
+
else
|
|
79
|
+
header
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
rule(header: simple(:header)) do
|
|
84
|
+
header
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
class Transformer < Parslet::Transform
|
|
6
|
+
# Module containing inline element transformation rules
|
|
7
|
+
module InlineRules
|
|
8
|
+
def self.apply(transformer_class)
|
|
9
|
+
transformer_class.class_eval do
|
|
10
|
+
# Link
|
|
11
|
+
rule(link: subtree(:link)) do
|
|
12
|
+
Model::Inline::Link.new(
|
|
13
|
+
path: link[:path].to_s,
|
|
14
|
+
name: link[:text]&.to_s
|
|
15
|
+
)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Cross reference
|
|
19
|
+
rule(href: simple(:href)) do
|
|
20
|
+
Model::Inline::CrossReference.new(href: href.to_s)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
rule(
|
|
24
|
+
href: simple(:href),
|
|
25
|
+
name: simple(:name)
|
|
26
|
+
) do
|
|
27
|
+
Model::Inline::CrossReference.new(href: href.to_s, args: [name.to_s])
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
rule(cross_reference: sequence(:xref)) do
|
|
31
|
+
args = xref.size > 1 ? xref[1..] : []
|
|
32
|
+
Model::Inline::CrossReference.new(href: xref[0], args:)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Inline image
|
|
36
|
+
rule(inline_image: subtree(:inline_image)) do
|
|
37
|
+
Model::Image::InlineImage.new(
|
|
38
|
+
title: inline_image[:text],
|
|
39
|
+
src: inline_image[:path],
|
|
40
|
+
attributes: inline_image[:attribute_list]
|
|
41
|
+
)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Attribute reference
|
|
45
|
+
rule(attribute_reference: simple(:name)) do
|
|
46
|
+
Model::Inline::AttributeReference.new(name:)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Term
|
|
50
|
+
rule(
|
|
51
|
+
term_type: simple(:term_type),
|
|
52
|
+
term: simple(:term)
|
|
53
|
+
) do
|
|
54
|
+
Coradoc::AsciiDoc::Model::Term.new(term:, type: term_type, lang: :en)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Footnote
|
|
58
|
+
rule(footnote: simple(:footnote)) do
|
|
59
|
+
text_str = footnote.to_s
|
|
60
|
+
Coradoc::AsciiDoc::Model::Inline::Footnote.new(text: text_str)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
rule(footnote: simple(:footnote), id: simple(:id)) do
|
|
64
|
+
text_str = footnote.to_s
|
|
65
|
+
Coradoc::AsciiDoc::Model::Inline::Footnote.new(text: text_str, id: id.to_s)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Footnote with empty content (reference to named footnote)
|
|
69
|
+
rule(footnote: sequence(:footnote), id: simple(:id)) do
|
|
70
|
+
text_str = footnote.map(&:to_s).join
|
|
71
|
+
Coradoc::AsciiDoc::Model::Inline::Footnote.new(text: text_str, id: id.to_s)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Footnote with empty content and no id
|
|
75
|
+
rule(footnote: sequence(:footnote)) do
|
|
76
|
+
text_str = footnote.map(&:to_s).join
|
|
77
|
+
Coradoc::AsciiDoc::Model::Inline::Footnote.new(text: text_str)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Href arg
|
|
81
|
+
rule(href_arg: simple(:href_arg)) do
|
|
82
|
+
href_arg.to_s
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Bold (constrained)
|
|
86
|
+
rule(bold_constrained: subtree(:bold)) do
|
|
87
|
+
content = Transformer.extract_inline_content(bold)
|
|
88
|
+
Model::Inline::Bold.new(content: content, unconstrained: false)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Bold (unconstrained)
|
|
92
|
+
rule(bold_unconstrained: subtree(:bold)) do
|
|
93
|
+
content = Transformer.extract_inline_content(bold)
|
|
94
|
+
Model::Inline::Bold.new(content: content, unconstrained: true)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# Italic (constrained)
|
|
98
|
+
rule(italic_constrained: subtree(:italic)) do
|
|
99
|
+
content = Transformer.extract_inline_content(italic)
|
|
100
|
+
Model::Inline::Italic.new(content: content, unconstrained: false)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# Italic (unconstrained)
|
|
104
|
+
rule(italic_unconstrained: subtree(:italic)) do
|
|
105
|
+
content = Transformer.extract_inline_content(italic)
|
|
106
|
+
Model::Inline::Italic.new(content: content, unconstrained: true)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Highlight (constrained)
|
|
110
|
+
rule(highlight_constrained: subtree(:highlight)) do
|
|
111
|
+
content = Transformer.extract_inline_content(highlight)
|
|
112
|
+
Model::Inline::Highlight.new(content: content, unconstrained: false)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Highlight (unconstrained)
|
|
116
|
+
rule(highlight_unconstrained: subtree(:highlight)) do
|
|
117
|
+
content = Transformer.extract_inline_content(highlight)
|
|
118
|
+
Model::Inline::Highlight.new(content: content, unconstrained: true)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Monospace (constrained)
|
|
122
|
+
rule(monospace_constrained: subtree(:monospace)) do
|
|
123
|
+
content = Transformer.extract_inline_content(monospace)
|
|
124
|
+
Model::Inline::Monospace.new(content: content, unconstrained: false)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# Monospace (unconstrained)
|
|
128
|
+
rule(monospace_unconstrained: subtree(:monospace)) do
|
|
129
|
+
content = Transformer.extract_inline_content(monospace)
|
|
130
|
+
Model::Inline::Monospace.new(content: content, unconstrained: true)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Superscript
|
|
134
|
+
rule(superscript: subtree(:superscript)) do
|
|
135
|
+
content = Transformer.extract_simple_inline_content(superscript)
|
|
136
|
+
Model::Inline::Superscript.new(content:)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# Subscript
|
|
140
|
+
rule(subscript: subtree(:subscript)) do
|
|
141
|
+
content = Transformer.extract_simple_inline_content(subscript)
|
|
142
|
+
Model::Inline::Subscript.new(content:)
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# Span (constrained)
|
|
146
|
+
rule(span_constrained: subtree(:span_constrained)) do
|
|
147
|
+
Model::Inline::Span.new(
|
|
148
|
+
text: span_constrained[:text],
|
|
149
|
+
unconstrained: false,
|
|
150
|
+
attributes: span_constrained[:attribute_list]
|
|
151
|
+
)
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# Span (unconstrained)
|
|
155
|
+
rule(span_unconstrained: subtree(:span_unconstrained)) do
|
|
156
|
+
Model::Inline::Span.new(
|
|
157
|
+
text: span_unconstrained[:text],
|
|
158
|
+
unconstrained: true,
|
|
159
|
+
attributes: span_unconstrained[:attribute_list]
|
|
160
|
+
)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# Highlight (simple)
|
|
164
|
+
rule(highlight: simple(:text)) do
|
|
165
|
+
Model::Highlight.new(content: text)
|
|
166
|
+
end
|
|
167
|
+
# Stem
|
|
168
|
+
rule(stem: subtree(:stem)) do
|
|
169
|
+
Coradoc::AsciiDoc::Model::Inline::Stem.new(
|
|
170
|
+
type: stem[:stem_type],
|
|
171
|
+
content: stem[:content]
|
|
172
|
+
)
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|