Module: Coradoc::Mirror::Handlers::Inline

Defined in:
lib/coradoc/mirror/handlers/inline.rb

Constant Summary collapse

SIMPLE_MARK_TYPES =

Classification of inline handlers.

{
  CoreModel::BoldElement => Mark::Bold,
  CoreModel::ItalicElement => Mark::Italic,
  CoreModel::MonospaceElement => Mark::Monospace,
  CoreModel::UnderlineElement => Mark::Underline,
  CoreModel::StrikethroughElement => Mark::Strikethrough,
  CoreModel::SubscriptElement => Mark::Subscript,
  CoreModel::SuperscriptElement => Mark::Superscript,
  CoreModel::HighlightElement => Mark::Highlight,
  CoreModel::TermElement => Mark::Bold
}.freeze

Class Method Summary collapse

Class Method Details

.call(element, context:) ⇒ Object



59
60
61
# File 'lib/coradoc/mirror/handlers/inline.rb', line 59

def self.call(element, context:)
  dispatch_inline(element, context)
end

.process(element, context:) ⇒ Object



20
21
22
23
24
25
26
27
28
# File 'lib/coradoc/mirror/handlers/inline.rb', line 20

def self.process(element, context:)
  return [] unless element

  children = inline_children_for(element)

  children.flat_map do |child|
    process_child(child, context)
  end
end

.process_child(child, context) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/coradoc/mirror/handlers/inline.rb', line 30

def self.process_child(child, context)
  case child
  when CoreModel::TextContent
    return [] if child.text.nil? || child.text.empty?

    [context.text_node(child.text)]
  when CoreModel::InlineElement
    [dispatch_inline(child, context)].compact
  when CoreModel::FootnoteReference
    [context.resolve_footnote_reference(child)]
  when CoreModel::Block, CoreModel::StructuralElement
    result = context.registry.handle(child, context: context)
    return [] unless result

    value, concat = result
    return [] unless value

    if concat
      Array(value)
    else
      [value].compact
    end
  when CoreModel::Image
    [Handlers::Image.call(child, context: context)]
  else
    []
  end
end

.text_content(element, context:) ⇒ Object



63
64
65
66
67
# File 'lib/coradoc/mirror/handlers/inline.rb', line 63

def self.text_content(element, context:)
  return nil if element.text.nil? || element.text.empty?

  context.text_node(element.text)
end