coradoc-adoc 2.0.20 → 2.0.21
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/asciidoc/serializer/element_registry.rb +20 -50
- data/lib/coradoc/asciidoc/serializer/registrations.rb +7 -90
- data/lib/coradoc/asciidoc/serializer/serializers/inline/passthrough.rb +25 -0
- data/lib/coradoc/asciidoc/serializer/serializers/inline.rb +1 -0
- data/lib/coradoc/asciidoc/transform/from_core_model.rb +4 -2
- data/lib/coradoc/asciidoc/transform/to_core_model.rb +2 -2
- data/lib/coradoc/asciidoc/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1c4b5749f4fd1a691eb76fe9f7848b1d4bc2cd2e43cd2ee0a5f1afdcb697459c
|
|
4
|
+
data.tar.gz: 90e6bf66da9a7c4dba7c7eafbdabf378259e4b9792a93d4c88209d52bd991876
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e421d05a3a2c43387471224818a5261229478c1539ddade33a30957be8d7fb0775c9b0bb95b59afa32cb4e84f0adab07b62164113a521635fd5e70cdbe66ecec
|
|
7
|
+
data.tar.gz: dd6c2ea15fcb4c3e521a929006ba2e7ebbff5f6548902a2d7947cdac04a9005a792a9ae4fb07d68f53e30c844de9cbd00bd62a0fa034fa9f9c298209fe50ec7e
|
|
@@ -4,9 +4,12 @@ module Coradoc
|
|
|
4
4
|
module AsciiDoc
|
|
5
5
|
module Serializer
|
|
6
6
|
# Registry for mapping Coradoc model classes to their AsciiDoc serializers.
|
|
7
|
-
# This is the authoritative source for model→serializer mappings.
|
|
8
7
|
#
|
|
9
|
-
#
|
|
8
|
+
# Thin layer over `Coradoc::Dispatch.strict`: each public method
|
|
9
|
+
# delegates to a single Dispatch instance so the dispatch mechanism
|
|
10
|
+
# (storage, miss-handling, override semantics) lives in one place.
|
|
11
|
+
# Adoc-specific concerns (the ArgumentError wording on miss, the
|
|
12
|
+
# `registered_models` name) stay here.
|
|
10
13
|
#
|
|
11
14
|
# @example Registering a custom serializer
|
|
12
15
|
# ElementRegistry.override(Model::Paragraph, CustomParagraphSerializer)
|
|
@@ -15,78 +18,45 @@ module Coradoc
|
|
|
15
18
|
# original = ElementRegistry.get(Model::Paragraph)
|
|
16
19
|
# ElementRegistry.override(Model::Paragraph, WrapperSerializer.new(original))
|
|
17
20
|
class ElementRegistry
|
|
21
|
+
DISPATCH = Coradoc::Dispatch.strict
|
|
22
|
+
|
|
18
23
|
class << self
|
|
19
|
-
# Register a serializer for a model class
|
|
20
|
-
# @param model_class [Class] The Coradoc model class
|
|
21
|
-
# @param serializer_class [Class] The serializer class
|
|
22
24
|
def register(model_class, serializer_class)
|
|
23
|
-
|
|
25
|
+
DISPATCH.register(model_class, serializer_class)
|
|
24
26
|
end
|
|
25
27
|
|
|
26
|
-
# Override a serializer for a model class
|
|
27
|
-
# This is an alias for register that makes the intent explicit
|
|
28
|
-
# @param model_class [Class] The Coradoc model class
|
|
29
|
-
# @param serializer_class [Class] The new serializer class
|
|
30
|
-
# @return [Class, nil] The previous serializer class, or nil if none
|
|
31
28
|
def override(model_class, serializer_class)
|
|
32
|
-
|
|
33
|
-
registry[model_class] = serializer_class
|
|
34
|
-
previous
|
|
29
|
+
DISPATCH.override(model_class, serializer_class)
|
|
35
30
|
end
|
|
36
31
|
|
|
37
|
-
# Unregister a serializer for a model class
|
|
38
|
-
# @param model_class [Class] The model class to unregister
|
|
39
|
-
# @return [Class, nil] The removed serializer class, or nil if none
|
|
40
32
|
def unregister(model_class)
|
|
41
|
-
|
|
33
|
+
DISPATCH.unregister(model_class)
|
|
42
34
|
end
|
|
43
35
|
|
|
44
|
-
# Get the serializer for a model class without raising
|
|
45
|
-
# @param model_class [Class] The model class
|
|
46
|
-
# @return [Class, nil] The serializer class, or nil if not registered
|
|
47
36
|
def get(model_class)
|
|
48
|
-
|
|
37
|
+
DISPATCH.lookup(model_class)
|
|
49
38
|
end
|
|
50
39
|
|
|
51
|
-
# Lookup serializer for a model class
|
|
52
|
-
# @param model_class [Class] The model class
|
|
53
|
-
# @return [Class] The serializer class
|
|
54
|
-
# @raise [ArgumentError] If no serializer is registered
|
|
55
40
|
def lookup(model_class)
|
|
56
|
-
serializer_class =
|
|
57
|
-
|
|
58
|
-
unless serializer_class
|
|
59
|
-
raise ArgumentError,
|
|
60
|
-
"No serializer registered for #{model_class.name}. " \
|
|
61
|
-
'Please register a serializer in ElementRegistry, or the serializer ' \
|
|
62
|
-
'may not have been loaded yet (check Registrations.load_all!)'
|
|
63
|
-
end
|
|
41
|
+
serializer_class = DISPATCH.lookup(model_class)
|
|
42
|
+
return serializer_class if serializer_class
|
|
64
43
|
|
|
65
|
-
|
|
44
|
+
raise ArgumentError,
|
|
45
|
+
"No serializer registered for #{model_class.name}. " \
|
|
46
|
+
'Please register a serializer in ElementRegistry, or the serializer ' \
|
|
47
|
+
'may not have been loaded yet (check Registrations.load_all!)'
|
|
66
48
|
end
|
|
67
49
|
|
|
68
|
-
# Get all registered model classes
|
|
69
|
-
# @return [Array<Class>] Array of registered model classes
|
|
70
50
|
def registered_models
|
|
71
|
-
|
|
51
|
+
DISPATCH.registered_keys
|
|
72
52
|
end
|
|
73
53
|
|
|
74
|
-
# Check if a model class has a registered serializer
|
|
75
|
-
# @param model_class [Class] The model class
|
|
76
|
-
# @return [Boolean] True if registered
|
|
77
54
|
def registered?(model_class)
|
|
78
|
-
|
|
55
|
+
DISPATCH.registered?(model_class)
|
|
79
56
|
end
|
|
80
57
|
|
|
81
|
-
# Clear all registrations (mainly for testing)
|
|
82
58
|
def clear!
|
|
83
|
-
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
# Get the registry hash
|
|
87
|
-
# @return [Hash] Model class => Serializer class mapping
|
|
88
|
-
def registry
|
|
89
|
-
@@registry ||= {}
|
|
59
|
+
DISPATCH.clear!
|
|
90
60
|
end
|
|
91
61
|
end
|
|
92
62
|
end
|
|
@@ -3,104 +3,21 @@
|
|
|
3
3
|
module Coradoc
|
|
4
4
|
module AsciiDoc
|
|
5
5
|
module Serializer
|
|
6
|
-
# Trigger loading of all serializer registrations
|
|
6
|
+
# Trigger loading of all serializer registrations.
|
|
7
7
|
#
|
|
8
|
-
# Each serializer file self-registers when loaded via
|
|
9
|
-
#
|
|
10
|
-
#
|
|
8
|
+
# Each serializer file self-registers when loaded via
|
|
9
|
+
# `ElementRegistry.register(...)` at file bottom. Walking the
|
|
10
|
+
# serializers directory is the single source of truth for "which
|
|
11
|
+
# serializers exist" — adding a file is the only step required for
|
|
12
|
+
# it to register.
|
|
11
13
|
module Registrations
|
|
12
14
|
class << self
|
|
13
|
-
# Load all serializers to trigger their registration
|
|
14
|
-
# rubocop:disable Lint/Void - Constants are referenced to trigger autoload
|
|
15
15
|
def load_all!
|
|
16
|
-
#
|
|
17
|
-
Serializers::Base
|
|
18
|
-
Serializers::Admonition
|
|
19
|
-
Serializers::Attribute
|
|
20
|
-
Serializers::AttributeList
|
|
21
|
-
Serializers::AttributeListAttribute
|
|
22
|
-
Serializers::Audio
|
|
23
|
-
Serializers::Author
|
|
24
|
-
Serializers::Bibliography
|
|
25
|
-
Serializers::BibliographyEntry
|
|
26
|
-
Serializers::Break
|
|
27
|
-
Serializers::CommentBlock
|
|
28
|
-
Serializers::CommentLine
|
|
29
|
-
Serializers::Document
|
|
30
|
-
Serializers::DocumentAttributes
|
|
31
|
-
Serializers::Header
|
|
32
|
-
Serializers::Highlight
|
|
33
|
-
Serializers::Include
|
|
34
|
-
Serializers::LineBreak
|
|
35
|
-
Serializers::List
|
|
36
|
-
Serializers::NamedAttribute
|
|
37
|
-
Serializers::Paragraph
|
|
38
|
-
Serializers::ReviewerNote
|
|
39
|
-
Serializers::Revision
|
|
40
|
-
Serializers::Section
|
|
41
|
-
Serializers::Tag
|
|
42
|
-
Serializers::TableCell
|
|
43
|
-
Serializers::TableRow
|
|
44
|
-
Serializers::Table
|
|
45
|
-
Serializers::Term
|
|
46
|
-
Serializers::TextElement
|
|
47
|
-
Serializers::Title
|
|
48
|
-
Serializers::Video
|
|
49
|
-
|
|
50
|
-
# Block serializers
|
|
51
|
-
Serializers::Block
|
|
52
|
-
Serializers::Block::Core
|
|
53
|
-
Serializers::Block::Example
|
|
54
|
-
Serializers::Block::Listing
|
|
55
|
-
Serializers::Block::Literal
|
|
56
|
-
Serializers::Block::Open
|
|
57
|
-
Serializers::Block::Pass
|
|
58
|
-
Serializers::Block::Quote
|
|
59
|
-
Serializers::Block::ReviewerComment
|
|
60
|
-
Serializers::Block::Side
|
|
61
|
-
Serializers::Block::SourceCode
|
|
62
|
-
|
|
63
|
-
# Image serializers
|
|
64
|
-
Serializers::Image
|
|
65
|
-
Serializers::Image::Core
|
|
66
|
-
|
|
67
|
-
# Inline serializers
|
|
68
|
-
Serializers::Inline
|
|
69
|
-
Serializers::Inline::Anchor
|
|
70
|
-
Serializers::Inline::AttributeReference
|
|
71
|
-
Serializers::Inline::Bold
|
|
72
|
-
Serializers::Inline::CrossReference
|
|
73
|
-
Serializers::Inline::CrossReferenceArg
|
|
74
|
-
Serializers::Inline::Footnote
|
|
75
|
-
Serializers::Inline::HardLineBreak
|
|
76
|
-
Serializers::Inline::Highlight
|
|
77
|
-
Serializers::Inline::Italic
|
|
78
|
-
Serializers::Inline::Link
|
|
79
|
-
Serializers::Inline::Monospace
|
|
80
|
-
Serializers::Inline::Quotation
|
|
81
|
-
Serializers::Inline::Small
|
|
82
|
-
Serializers::Inline::Span
|
|
83
|
-
Serializers::Inline::Stem
|
|
84
|
-
Serializers::Inline::Strikethrough
|
|
85
|
-
Serializers::Inline::Subscript
|
|
86
|
-
Serializers::Inline::Superscript
|
|
87
|
-
Serializers::Inline::Underline
|
|
88
|
-
|
|
89
|
-
# List serializers
|
|
90
|
-
Serializers::List
|
|
91
|
-
Serializers::List::Core
|
|
92
|
-
Serializers::List::Definition
|
|
93
|
-
Serializers::List::DefinitionItem
|
|
94
|
-
Serializers::List::Item
|
|
95
|
-
Serializers::List::Ordered
|
|
96
|
-
Serializers::List::Unordered
|
|
97
|
-
|
|
16
|
+
Dir["#{__dir__}/serializers/**/*.rb"].sort.each { |path| require path }
|
|
98
17
|
true
|
|
99
18
|
end
|
|
100
|
-
# rubocop:enable Lint/Void
|
|
101
19
|
end
|
|
102
20
|
|
|
103
|
-
# Auto-load all on module inclusion
|
|
104
21
|
load_all!
|
|
105
22
|
end
|
|
106
23
|
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Coradoc
|
|
4
|
+
module AsciiDoc
|
|
5
|
+
module Serializer
|
|
6
|
+
module Serializers
|
|
7
|
+
module Inline
|
|
8
|
+
# Serializer for the inline passthrough (`+++raw content+++`).
|
|
9
|
+
# Wraps the raw payload in triple-plus delimiters so downstream
|
|
10
|
+
# consumers know to skip inline substitution.
|
|
11
|
+
class Passthrough < Base
|
|
12
|
+
def to_adoc(model, _options = {})
|
|
13
|
+
content = serialize_content(model.content)
|
|
14
|
+
return '' if content.empty?
|
|
15
|
+
|
|
16
|
+
"+++#{content}+++"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
ElementRegistry.register(Coradoc::AsciiDoc::Model::Inline::Passthrough, Inline::Passthrough)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -17,6 +17,7 @@ module Coradoc
|
|
|
17
17
|
autoload :Italic, 'coradoc/asciidoc/serializer/serializers/inline/italic'
|
|
18
18
|
autoload :Link, 'coradoc/asciidoc/serializer/serializers/inline/link'
|
|
19
19
|
autoload :Monospace, 'coradoc/asciidoc/serializer/serializers/inline/monospace'
|
|
20
|
+
autoload :Passthrough, 'coradoc/asciidoc/serializer/serializers/inline/passthrough'
|
|
20
21
|
autoload :Quotation, 'coradoc/asciidoc/serializer/serializers/inline/quotation'
|
|
21
22
|
autoload :Small, 'coradoc/asciidoc/serializer/serializers/inline/small'
|
|
22
23
|
autoload :Span, 'coradoc/asciidoc/serializer/serializers/inline/span'
|
|
@@ -5,8 +5,6 @@ module Coradoc
|
|
|
5
5
|
module Transform
|
|
6
6
|
# Transforms CoreModel to AsciiDoc models
|
|
7
7
|
class FromCoreModel
|
|
8
|
-
include Coradoc::Transform::Base
|
|
9
|
-
|
|
10
8
|
@registered = false
|
|
11
9
|
|
|
12
10
|
class << self
|
|
@@ -319,6 +317,8 @@ module Coradoc
|
|
|
319
317
|
type: inline.stem_type || 'latexmath',
|
|
320
318
|
content: inline.content
|
|
321
319
|
)
|
|
320
|
+
when 'raw_inline'
|
|
321
|
+
Coradoc::AsciiDoc::Model::Inline::Passthrough.new(content: inline.content)
|
|
322
322
|
else
|
|
323
323
|
Coradoc::AsciiDoc::Model::TextElement.new(content: inline.content)
|
|
324
324
|
end
|
|
@@ -567,6 +567,8 @@ module Coradoc
|
|
|
567
567
|
end
|
|
568
568
|
end
|
|
569
569
|
end
|
|
570
|
+
|
|
571
|
+
def transform(model) = self.class.transform(model)
|
|
570
572
|
end
|
|
571
573
|
end
|
|
572
574
|
end
|
|
@@ -4,8 +4,6 @@ module Coradoc
|
|
|
4
4
|
module AsciiDoc
|
|
5
5
|
module Transform
|
|
6
6
|
class ToCoreModel
|
|
7
|
-
include Coradoc::Transform::Base
|
|
8
|
-
|
|
9
7
|
@registered = false
|
|
10
8
|
|
|
11
9
|
class << self
|
|
@@ -133,6 +131,8 @@ module Coradoc
|
|
|
133
131
|
text
|
|
134
132
|
end
|
|
135
133
|
end
|
|
134
|
+
|
|
135
|
+
def transform(model) = self.class.transform(model)
|
|
136
136
|
end
|
|
137
137
|
end
|
|
138
138
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: coradoc-adoc
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.
|
|
4
|
+
version: 2.0.21
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
@@ -283,6 +283,7 @@ files:
|
|
|
283
283
|
- lib/coradoc/asciidoc/serializer/serializers/inline/italic.rb
|
|
284
284
|
- lib/coradoc/asciidoc/serializer/serializers/inline/link.rb
|
|
285
285
|
- lib/coradoc/asciidoc/serializer/serializers/inline/monospace.rb
|
|
286
|
+
- lib/coradoc/asciidoc/serializer/serializers/inline/passthrough.rb
|
|
286
287
|
- lib/coradoc/asciidoc/serializer/serializers/inline/quotation.rb
|
|
287
288
|
- lib/coradoc/asciidoc/serializer/serializers/inline/small.rb
|
|
288
289
|
- lib/coradoc/asciidoc/serializer/serializers/inline/span.rb
|