Module: Coradoc::Markdown::Transform::BlockTransformer

Defined in:
lib/coradoc/markdown/transform/block_transformer.rb

Class Method Summary collapse

Class Method Details

.markdown_delimiter_to_semantic(delimiter) ⇒ Object



71
72
73
74
75
76
77
78
# File 'lib/coradoc/markdown/transform/block_transformer.rb', line 71

def markdown_delimiter_to_semantic(delimiter)
  case delimiter
  when '```', '~' then :source_code
  when '>' then :quote
  when '---', '***', '___' then :horizontal_rule
  when '++++' then :pass
  end
end

.transform_annotation_block(annotation) ⇒ Object



126
127
128
129
130
131
# File 'lib/coradoc/markdown/transform/block_transformer.rb', line 126

def transform_annotation_block(annotation)
  text = annotation.flat_text
  Coradoc::Markdown::Paragraph.new(
    text: "**#{annotation.annotation_type}:** #{text}"
  )
end

.transform_block(block) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/coradoc/markdown/transform/block_transformer.rb', line 8

def transform_block(block)
  semantic = block.resolve_semantic_type || markdown_delimiter_to_semantic(block.delimiter_type)

  case semantic
  when :paragraph
    transform_paragraph(block)
  when :comment
    transform_comment_block(block)
  when :source_code, :listing, :literal
    transform_code_block(block)
  when :quote
    transform_blockquote(block)
  when :verse
    transform_verse_block(block)
  when :horizontal_rule
    transform_horizontal_rule(block)
  when :pass
    transform_pass_block(block)
  when :example
    transform_example_block(block)
  when :sidebar
    transform_sidebar_block(block)
  when :open
    transform_open_block(block)
  when :reviewer
    transform_reviewer_block(block)
  else
    transform_paragraph(block)
  end
end

.transform_blockquote(block) ⇒ Object



87
88
89
90
# File 'lib/coradoc/markdown/transform/block_transformer.rb', line 87

def transform_blockquote(block)
  content = block.flat_text
  Coradoc::Markdown::Blockquote.new(content: content)
end

.transform_code_block(block) ⇒ Object



80
81
82
83
84
85
# File 'lib/coradoc/markdown/transform/block_transformer.rb', line 80

def transform_code_block(block)
  Coradoc::Markdown::CodeBlock.new(
    code: block.content.to_s,
    language: block.language
  )
end

.transform_comment_block(block) ⇒ Object



133
134
135
# File 'lib/coradoc/markdown/transform/block_transformer.rb', line 133

def transform_comment_block(block)
  Coradoc::Markdown::Extension.comment(block.content.to_s)
end

.transform_content_node(element) ⇒ Object Also known as: transform_inline_content

Transform a content node that could be inline text, an inline element, or a block-level element (e.g. a SourceBlock inside a list item via AsciiDoc continuation).



53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/coradoc/markdown/transform/block_transformer.rb', line 53

def transform_content_node(element)
  case element
  when CoreModel::InlineElement
    InlineTransformer.transform_inline(element)
  when CoreModel::TextContent
    element.text
  when CoreModel::Base
    FromCoreModel.transform(element)
  when String
    element
  else
    element.to_s
  end
end

.transform_example_block(block) ⇒ Object



100
101
102
103
# File 'lib/coradoc/markdown/transform/block_transformer.rb', line 100

def transform_example_block(block)
  content = block.flat_text
  Coradoc::Markdown::Blockquote.new(content: content)
end

.transform_horizontal_rule(_block) ⇒ Object



96
97
98
# File 'lib/coradoc/markdown/transform/block_transformer.rb', line 96

def transform_horizontal_rule(_block)
  Coradoc::Markdown::HorizontalRule.new
end

.transform_open_block(block) ⇒ Object



110
111
112
113
114
115
116
117
# File 'lib/coradoc/markdown/transform/block_transformer.rb', line 110

def transform_open_block(block)
  if block.children && !block.children.empty?
    block.children.map { |c| FromCoreModel.transform(c) }
  else
    content = block.flat_text
    Coradoc::Markdown::Paragraph.new(text: content)
  end
end

.transform_paragraph(block) ⇒ Object



39
40
41
42
43
44
45
46
47
48
# File 'lib/coradoc/markdown/transform/block_transformer.rb', line 39

def transform_paragraph(block)
  content = block.renderable_content
  has_structured = content.is_a?(Array) && content.any? { |c| !c.is_a?(CoreModel::TextContent) }
  if has_structured
    children = content.map { |c| transform_content_node(c) }
    Coradoc::Markdown::Paragraph.new(text: block.flat_text, children: children)
  else
    Coradoc::Markdown::Paragraph.new(text: block.flat_text)
  end
end

.transform_pass_block(block) ⇒ Object



137
138
139
# File 'lib/coradoc/markdown/transform/block_transformer.rb', line 137

def transform_pass_block(block)
  Coradoc::Markdown::Extension.nomarkdown(block.content.to_s)
end

.transform_reviewer_block(block) ⇒ Object



119
120
121
122
123
124
# File 'lib/coradoc/markdown/transform/block_transformer.rb', line 119

def transform_reviewer_block(block)
  text = block.flat_text
  Coradoc::Markdown::Paragraph.new(
    text: "**#{block.annotation_type}:** #{text}"
  )
end

.transform_sidebar_block(block) ⇒ Object



105
106
107
108
# File 'lib/coradoc/markdown/transform/block_transformer.rb', line 105

def transform_sidebar_block(block)
  content = block.flat_text
  Coradoc::Markdown::Paragraph.new(text: content)
end

.transform_verse_block(block) ⇒ Object



92
93
94
# File 'lib/coradoc/markdown/transform/block_transformer.rb', line 92

def transform_verse_block(block)
  Coradoc::Markdown::Blockquote.new(content: block.flat_text)
end