Module: Metanorma::Mirror::Output::HtmlRenderers::InlineRenderer

Included in:
Metanorma::Mirror::Output::HtmlRenderer
Defined in:
lib/metanorma/mirror/output/html_renderers/inline_renderer.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.register(registry) ⇒ Object



8
# File 'lib/metanorma/mirror/output/html_renderers/inline_renderer.rb', line 8

def self.register(registry); end

Instance Method Details

#apply_mark(inner_html, mark) ⇒ Object



41
42
43
44
# File 'lib/metanorma/mirror/output/html_renderers/inline_renderer.rb', line 41

def apply_mark(inner_html, mark)
  handler = self.class.mark_handlers[mark.type]
  handler ? handler.call(inner_html, mark) : inner_html
end

#render_footnote_marker(node) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
# File 'lib/metanorma/mirror/output/html_renderers/inline_renderer.rb', line 46

def render_footnote_marker(node)
  HtmlRenderers.build do |doc|
    doc.sup(class: "footnote-marker") do
      attrs = {}
      attrs[:id] = node.attrs["id"] if node.attrs["id"]
      doc.a(attrs.merge(href: "##{node.attrs['ref_id'] || ''}")) do
        doc.text node.attrs["number"] || "*"
      end
    end
  end
end

#render_inline(content) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/metanorma/mirror/output/html_renderers/inline_renderer.rb', line 10

def render_inline(content)
  return "" unless content
  return "" if content.empty?

  HtmlRenderers.build_fragment do |doc|
    content.each do |node|
      case node
      when String
        doc.text node
      when Model::Text
        HtmlRenderers.embed(doc, render_text_node(node))
      when Model::SoftBreak
        doc.br
      when Model::Container
        if node.type == "footnote_marker"
          HtmlRenderers.embed(doc, render_footnote_marker(node))
        else
          HtmlRenderers.embed(doc, render_node(node))
        end
      end
    end
  end
end

#render_text_node(node) ⇒ Object



34
35
36
37
38
39
# File 'lib/metanorma/mirror/output/html_renderers/inline_renderer.rb', line 34

def render_text_node(node)
  inner_html = HtmlRenderers.escape_text(node.text)
  node.marks.reduce(inner_html) do |current, mark|
    apply_mark(current, mark)
  end
end