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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fad1b11f8028b7157066b7a2d4474b2d20e3cab1e526e0347ca36015cdf3ad90
4
- data.tar.gz: d143bb70ec7ab2e3a1656a5e9ed72d52bb0b2f1341b3566efa02ef44343a2044
3
+ metadata.gz: 1c4b5749f4fd1a691eb76fe9f7848b1d4bc2cd2e43cd2ee0a5f1afdcb697459c
4
+ data.tar.gz: 90e6bf66da9a7c4dba7c7eafbdabf378259e4b9792a93d4c88209d52bd991876
5
5
  SHA512:
6
- metadata.gz: 7848b8f80f104e960265ed5dbd295d4dfc7ad4cecb401b81765ae21ba6d16a31e02024ebfd7c65c1c86e0fd433512788a92ab4600b348293d895980bf2b5b446
7
- data.tar.gz: c6a55d7b4abecd086fcbde8015fd54b217eb3a442f86699bd1ab110affc1f1dc20f9ff54ef24668dcc77fdcb1cf609b09651308bc4122ea47a05535e18585879
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
- # Pattern mirrors Input::Html::Converters registry for symmetry.
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
- registry[model_class] = serializer_class
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
- previous = registry[model_class]
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
- registry.delete(model_class)
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
- registry[model_class]
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 = registry[model_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
- serializer_class
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
- registry.keys
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
- registry.key?(model_class)
55
+ DISPATCH.registered?(model_class)
79
56
  end
80
57
 
81
- # Clear all registrations (mainly for testing)
82
58
  def clear!
83
- registry.clear
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 autoload.
9
- # This module triggers the autoload of all serializers by accessing
10
- # their constants, which causes the registration code in each file to execute.
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
- # Top-level serializers
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Coradoc
4
4
  module AsciiDoc
5
- VERSION = '2.0.20'
5
+ VERSION = '2.0.21'
6
6
  end
7
7
  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.20
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