coradoc-markdown 1.0.0 → 1.0.3

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.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/lib/coradoc/markdown/model/admonition.rb +35 -0
  3. data/lib/coradoc/markdown/model/attribute_list.rb +5 -16
  4. data/lib/coradoc/markdown/model/base.rb +2 -34
  5. data/lib/coradoc/markdown/model/comment.rb +14 -0
  6. data/lib/coradoc/markdown/model/cross_reference.rb +10 -0
  7. data/lib/coradoc/markdown/model/definition_list.rb +0 -12
  8. data/lib/coradoc/markdown/model/definition_term.rb +16 -6
  9. data/lib/coradoc/markdown/model/document.rb +9 -0
  10. data/lib/coradoc/markdown/model/example_block.rb +26 -0
  11. data/lib/coradoc/markdown/model/extension.rb +9 -18
  12. data/lib/coradoc/markdown/model/footnote_reference.rb +0 -5
  13. data/lib/coradoc/markdown/model/hard_line_break.rb +21 -0
  14. data/lib/coradoc/markdown/model/highlight.rb +0 -5
  15. data/lib/coradoc/markdown/model/horizontal_rule.rb +1 -6
  16. data/lib/coradoc/markdown/model/list_item.rb +1 -1
  17. data/lib/coradoc/markdown/model/literal.rb +21 -0
  18. data/lib/coradoc/markdown/model/math.rb +0 -14
  19. data/lib/coradoc/markdown/model/named_value.rb +18 -0
  20. data/lib/coradoc/markdown/model/open_block.rb +22 -0
  21. data/lib/coradoc/markdown/model/paragraph.rb +2 -2
  22. data/lib/coradoc/markdown/model/pass.rb +21 -0
  23. data/lib/coradoc/markdown/model/sidebar.rb +22 -0
  24. data/lib/coradoc/markdown/model/strikethrough.rb +0 -5
  25. data/lib/coradoc/markdown/model/subscript.rb +9 -0
  26. data/lib/coradoc/markdown/model/superscript.rb +9 -0
  27. data/lib/coradoc/markdown/model/underline.rb +9 -0
  28. data/lib/coradoc/markdown/model/verse.rb +27 -0
  29. data/lib/coradoc/markdown/parser/block_parser.rb +1 -1
  30. data/lib/coradoc/markdown/parser/frontmatter_parser.rb +23 -0
  31. data/lib/coradoc/markdown/serializer/builder.rb +57 -0
  32. data/lib/coradoc/markdown/serializer/config.rb +77 -0
  33. data/lib/coradoc/markdown/serializer/context.rb +66 -0
  34. data/lib/coradoc/markdown/serializer/element_serializer.rb +46 -0
  35. data/lib/coradoc/markdown/serializer/flavor.rb +82 -0
  36. data/lib/coradoc/markdown/serializer/registrations.rb +111 -0
  37. data/lib/coradoc/markdown/serializer/registry.rb +62 -0
  38. data/lib/coradoc/markdown/serializer/runner.rb +84 -0
  39. data/lib/coradoc/markdown/serializer/serializers/abbreviation.rb +19 -0
  40. data/lib/coradoc/markdown/serializer/serializers/admonition.rb +20 -0
  41. data/lib/coradoc/markdown/serializer/serializers/attribute_list.rb +25 -0
  42. data/lib/coradoc/markdown/serializer/serializers/blockquote.rb +19 -0
  43. data/lib/coradoc/markdown/serializer/serializers/code.rb +19 -0
  44. data/lib/coradoc/markdown/serializer/serializers/code_block.rb +19 -0
  45. data/lib/coradoc/markdown/serializer/serializers/comment.rb +31 -0
  46. data/lib/coradoc/markdown/serializer/serializers/cross_reference.rb +19 -0
  47. data/lib/coradoc/markdown/serializer/serializers/definition_list.rb +20 -0
  48. data/lib/coradoc/markdown/serializer/serializers/document.rb +22 -0
  49. data/lib/coradoc/markdown/serializer/serializers/emphasis.rb +19 -0
  50. data/lib/coradoc/markdown/serializer/serializers/example_block.rb +40 -0
  51. data/lib/coradoc/markdown/serializer/serializers/extension.rb +30 -0
  52. data/lib/coradoc/markdown/serializer/serializers/footnote.rb +20 -0
  53. data/lib/coradoc/markdown/serializer/serializers/footnote_reference.rb +19 -0
  54. data/lib/coradoc/markdown/serializer/serializers/hard_line_break.rb +22 -0
  55. data/lib/coradoc/markdown/serializer/serializers/heading.rb +19 -0
  56. data/lib/coradoc/markdown/serializer/serializers/highlight.rb +19 -0
  57. data/lib/coradoc/markdown/serializer/serializers/horizontal_rule.rb +19 -0
  58. data/lib/coradoc/markdown/serializer/serializers/image.rb +19 -0
  59. data/lib/coradoc/markdown/serializer/serializers/link.rb +29 -0
  60. data/lib/coradoc/markdown/serializer/serializers/list.rb +45 -0
  61. data/lib/coradoc/markdown/serializer/serializers/literal.rb +21 -0
  62. data/lib/coradoc/markdown/serializer/serializers/math.rb +23 -0
  63. data/lib/coradoc/markdown/serializer/serializers/open_block.rb +38 -0
  64. data/lib/coradoc/markdown/serializer/serializers/paragraph.rb +23 -0
  65. data/lib/coradoc/markdown/serializer/serializers/pass.rb +21 -0
  66. data/lib/coradoc/markdown/serializer/serializers/sidebar.rb +20 -0
  67. data/lib/coradoc/markdown/serializer/serializers/strikethrough.rb +19 -0
  68. data/lib/coradoc/markdown/serializer/serializers/strong.rb +19 -0
  69. data/lib/coradoc/markdown/serializer/serializers/subscript.rb +19 -0
  70. data/lib/coradoc/markdown/serializer/serializers/superscript.rb +19 -0
  71. data/lib/coradoc/markdown/serializer/serializers/table.rb +37 -0
  72. data/lib/coradoc/markdown/serializer/serializers/underline.rb +19 -0
  73. data/lib/coradoc/markdown/serializer/serializers/verse.rb +31 -0
  74. data/lib/coradoc/markdown/serializer/strategies/admonition/base.rb +30 -0
  75. data/lib/coradoc/markdown/serializer/strategies/admonition/container.rb +34 -0
  76. data/lib/coradoc/markdown/serializer/strategies/admonition/gfm_alert.rb +28 -0
  77. data/lib/coradoc/markdown/serializer/strategies/admonition/github.rb +29 -0
  78. data/lib/coradoc/markdown/serializer/strategies/admonition/html.rb +25 -0
  79. data/lib/coradoc/markdown/serializer/strategies/admonition/registry.rb +50 -0
  80. data/lib/coradoc/markdown/serializer/strategies/autolink/angle.rb +35 -0
  81. data/lib/coradoc/markdown/serializer/strategies/autolink/bare.rb +23 -0
  82. data/lib/coradoc/markdown/serializer/strategies/autolink/base.rb +33 -0
  83. data/lib/coradoc/markdown/serializer/strategies/autolink/none.rb +27 -0
  84. data/lib/coradoc/markdown/serializer/strategies/autolink/registry.rb +58 -0
  85. data/lib/coradoc/markdown/serializer/strategies/definition_list/base.rb +37 -0
  86. data/lib/coradoc/markdown/serializer/strategies/definition_list/flat.rb +48 -0
  87. data/lib/coradoc/markdown/serializer/strategies/definition_list/nested_html.rb +54 -0
  88. data/lib/coradoc/markdown/serializer/strategies/definition_list/registry.rb +37 -0
  89. data/lib/coradoc/markdown/serializer.rb +30 -181
  90. data/lib/coradoc/markdown/toc_generator.rb +2 -8
  91. data/lib/coradoc/markdown/transform/block_transformer.rb +163 -0
  92. data/lib/coradoc/markdown/transform/from_core_model.rb +205 -40
  93. data/lib/coradoc/markdown/transform/image_transformer.rb +20 -0
  94. data/lib/coradoc/markdown/transform/inline_transformer.rb +74 -0
  95. data/lib/coradoc/markdown/transform/list_transformer.rb +52 -0
  96. data/lib/coradoc/markdown/transform/structural_transformer.rb +94 -0
  97. data/lib/coradoc/markdown/transform/table_transformer.rb +40 -0
  98. data/lib/coradoc/markdown/transform/to_core_model.rb +36 -30
  99. data/lib/coradoc/markdown/transformer.rb +87 -2
  100. data/lib/coradoc/markdown/version.rb +1 -1
  101. data/lib/coradoc/markdown.rb +23 -20
  102. metadata +89 -10
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ class CodeBlock < ElementSerializer
10
+ handles_type ::Coradoc::Markdown::CodeBlock
11
+
12
+ def call(element, _ctx)
13
+ "```#{element.language}\n#{element.code}\n```"
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ # Comments are editorial annotations, not document content. The
10
+ # Markdown Serialization Spec (§Comments) requires that comments
11
+ # be suppressed by default.
12
+ #
13
+ # Behavior:
14
+ # suppress_comments == true → '' (no output)
15
+ # suppress_comments == false → '<!-- text -->'
16
+ class Comment < ElementSerializer
17
+ handles_type ::Coradoc::Markdown::Comment
18
+
19
+ def call(element, ctx)
20
+ return '' if ctx.config.suppress_comments
21
+
22
+ text = element.text.to_s.strip
23
+ return '<!---->' if text.empty?
24
+
25
+ "<!-- #{text} -->"
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ class CrossReference < ElementSerializer
10
+ handles_type ::Coradoc::Markdown::CrossReference
11
+
12
+ def call(element, _ctx)
13
+ "[#{element.text}](##{element.target})"
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+ require_relative '../strategies/definition_list/registry'
5
+
6
+ module Coradoc
7
+ module Markdown
8
+ class Serializer
9
+ module Serializers
10
+ class DefinitionList < ElementSerializer
11
+ handles_type ::Coradoc::Markdown::DefinitionList
12
+
13
+ def call(element, ctx)
14
+ Strategies::DefinitionList::Registry.render(element, ctx)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ class Document < ElementSerializer
10
+ handles_type ::Coradoc::Markdown::Document
11
+
12
+ def call(element, ctx)
13
+ body = element.blocks.map { |block| ctx.serialize(block) }.join("\n\n")
14
+ return body unless element.frontmatter && !element.frontmatter.empty?
15
+
16
+ "---\n#{element.frontmatter}---\n\n#{body}".strip
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ class Emphasis < ElementSerializer
10
+ handles_type ::Coradoc::Markdown::Emphasis
11
+
12
+ def call(element, _ctx)
13
+ "*#{element.text}*"
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ # Example blocks emit an HTML fallback that preserves the caption
10
+ # as a heading inside `<div class="example">`.
11
+ #
12
+ # When `admonition_style == :container` (VitePress), emits
13
+ # `:::details Caption\n... \n:::` instead.
14
+ class ExampleBlock < ElementSerializer
15
+ handles_type ::Coradoc::Markdown::ExampleBlock
16
+
17
+ def call(element, ctx)
18
+ if ctx.config.admonition_style == :container
19
+ render_container(element)
20
+ else
21
+ render_html(element)
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def render_html(element)
28
+ caption_html = element.caption ? %(<h4>Example: #{element.caption}</h4>\n) : ''
29
+ %(<div class="example">\n#{caption_html}<p>#{element.content.to_s}</p>\n</div>)
30
+ end
31
+
32
+ def render_container(element)
33
+ title = element.caption ? " Example: #{element.caption}" : ''
34
+ ":::details#{title}\n#{element.content.to_s}\n:::"
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ class Extension < ElementSerializer
10
+ handles_type ::Coradoc::Markdown::Extension
11
+
12
+ def call(element, _ctx)
13
+ opts = element.options.empty? ? '' : " #{extension_options_to_s(element.options)}"
14
+ if element.self_closing?
15
+ "{::#{element.name}#{opts} /}"
16
+ else
17
+ "{::#{element.name}#{opts}}#{element.content}{:/}"
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def extension_options_to_s(options)
24
+ options.map { |nv| %(#{nv.name}="#{nv.value}") }.join(' ')
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ class Footnote < ElementSerializer
10
+ handles_type ::Coradoc::Markdown::Footnote
11
+
12
+ def call(element, _ctx)
13
+ content = element.content.to_s
14
+ "[^#{element.id}]: #{content}"
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ class FootnoteReference < ElementSerializer
10
+ handles_type ::Coradoc::Markdown::FootnoteReference
11
+
12
+ def call(element, _ctx)
13
+ "[^#{element.id}]"
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ # Hard line break. Output depends on `config.hard_break` (not
10
+ # part of the 5 spec options yet — defaults to CommonMark
11
+ # two-trailing-spaces).
12
+ class HardLineBreak < ElementSerializer
13
+ handles_type ::Coradoc::Markdown::HardLineBreak
14
+
15
+ def call(_element, _ctx)
16
+ " \n"
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ class Heading < ElementSerializer
10
+ handles_type ::Coradoc::Markdown::Heading
11
+
12
+ def call(element, _ctx)
13
+ "#{'#' * element.level} #{element.text}"
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ class Highlight < ElementSerializer
10
+ handles_type ::Coradoc::Markdown::Highlight
11
+
12
+ def call(element, _ctx)
13
+ "==#{element.text}=="
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ class HorizontalRule < ElementSerializer
10
+ handles_type ::Coradoc::Markdown::HorizontalRule
11
+
12
+ def call(element, _ctx)
13
+ element.style || '---'
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ class Image < ElementSerializer
10
+ handles_type ::Coradoc::Markdown::Image
11
+
12
+ def call(element, _ctx)
13
+ "![#{element.alt}](#{element.src}#{element.title ? " \"#{element.title}\"" : ''})"
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+ require_relative '../strategies/autolink/registry'
5
+
6
+ module Coradoc
7
+ module Markdown
8
+ class Serializer
9
+ module Serializers
10
+ class Link < ElementSerializer
11
+ handles_type ::Coradoc::Markdown::Link
12
+
13
+ def call(element, ctx)
14
+ url = element.url.to_s
15
+ text = element.text.to_s
16
+ title_suffix = element.title ? " \"#{element.title}\"" : ''
17
+
18
+ Strategies::Autolink::Registry.render_or_default(
19
+ url: url,
20
+ text: text,
21
+ ctx: ctx,
22
+ default: "[#{text}](#{url}#{title_suffix})"
23
+ )
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ class List < ElementSerializer
10
+ handles_type ::Coradoc::Markdown::List
11
+
12
+ def call(element, _ctx)
13
+ marker = element.ordered ? '1.' : '-'
14
+ element.items.flat_map do |item|
15
+ lines = [render_item(item, marker, _ctx)]
16
+ if item.sublist
17
+ lines += call(item.sublist, _ctx).split("\n").map { |l| " #{l}" }
18
+ end
19
+ lines
20
+ end.join("\n")
21
+ end
22
+
23
+ private
24
+
25
+ def render_item(item, marker, ctx)
26
+ text = serialize_item_text(item, ctx)
27
+ if item.checked == true
28
+ "- [x] #{text.sub(/^- \[[ x]\] /, '')}"
29
+ elsif item.checked == false
30
+ "- [ ] #{text.sub(/^- \[[ x]\] /, '')}"
31
+ else
32
+ "#{marker} #{text}"
33
+ end
34
+ end
35
+
36
+ def serialize_item_text(item, ctx)
37
+ return item.text.to_s unless item.children.any?
38
+
39
+ ctx.serialize_inline_join(item.children)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ # Literal block: indented code block (4 leading spaces per line).
10
+ # Distinct from a code block (which carries a language hint).
11
+ class Literal < ElementSerializer
12
+ handles_type ::Coradoc::Markdown::Literal
13
+
14
+ def call(element, _ctx)
15
+ element.content.to_s.lines.map { |line| " #{line}" }.join
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ class Math < ElementSerializer
10
+ handles_type ::Coradoc::Markdown::Math
11
+
12
+ def call(element, _ctx)
13
+ if element.inline?
14
+ "$$#{element.content}$$"
15
+ else
16
+ "$$\n#{element.content}\n$$"
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ # Open block: emits children inline unless id/classes are present,
10
+ # in which case it wraps them in an HTML `<div>`.
11
+ class OpenBlock < ElementSerializer
12
+ handles_type ::Coradoc::Markdown::OpenBlock
13
+
14
+ def call(element, ctx)
15
+ children_md = element.children.map { |c| ctx.serialize(c) }.join("\n\n")
16
+ return children_md unless needs_wrapper?(element)
17
+
18
+ attrs = wrapper_attrs(element)
19
+ %(<div#{attrs}>\n#{children_md}\n</div>)
20
+ end
21
+
22
+ private
23
+
24
+ def needs_wrapper?(element)
25
+ element.id || (element.classes && element.classes.any?)
26
+ end
27
+
28
+ def wrapper_attrs(element)
29
+ parts = []
30
+ parts << %(id="#{element.id}") if element.id
31
+ element.classes&.each { |c| parts << %(class="#{c}") }
32
+ parts.empty? ? '' : " #{parts.join(' ')}"
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ class Paragraph < ElementSerializer
10
+ handles_type ::Coradoc::Markdown::Paragraph
11
+
12
+ def call(element, ctx)
13
+ if element.children.any?
14
+ ctx.serialize_inline_join(element.children)
15
+ else
16
+ element.text.to_s
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ # Pass block: emit content inside kramdown's nomarkdown extension
10
+ # so it bypasses Markdown rendering.
11
+ class Pass < ElementSerializer
12
+ handles_type ::Coradoc::Markdown::Pass
13
+
14
+ def call(element, _ctx)
15
+ "{::nomarkdown}#{element.content.to_s}{:/}"
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ class Sidebar < ElementSerializer
10
+ handles_type ::Coradoc::Markdown::Sidebar
11
+
12
+ def call(element, _ctx)
13
+ title_html = element.title ? %(<div class="title">#{element.title}</div>\n) : ''
14
+ %(<div class="sidebar">\n#{title_html}#{element.content.to_s}\n</div>)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ class Strikethrough < ElementSerializer
10
+ handles_type ::Coradoc::Markdown::Strikethrough
11
+
12
+ def call(element, _ctx)
13
+ "~~#{element.text}~~"
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ class Strong < ElementSerializer
10
+ handles_type ::Coradoc::Markdown::Strong
11
+
12
+ def call(element, _ctx)
13
+ "**#{element.text}**"
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ class Subscript < ElementSerializer
10
+ handles_type ::Coradoc::Markdown::Subscript
11
+
12
+ def call(element, _ctx)
13
+ "<sub>#{element.text}</sub>"
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../element_serializer'
4
+
5
+ module Coradoc
6
+ module Markdown
7
+ class Serializer
8
+ module Serializers
9
+ class Superscript < ElementSerializer
10
+ handles_type ::Coradoc::Markdown::Superscript
11
+
12
+ def call(element, _ctx)
13
+ "<sup>#{element.text}</sup>"
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end