Module: Obp::Access::InlineRenderer

Constant Summary collapse

CLASS_TYPES =
{
  %w[sts-tbx-entailedTerm] => :entailed_term,
  %w[sts-xref] => :xref,
  %w[sts-std-ref] => :std_ref,
  %w[sts-label] => :label,
}.freeze
CONTAINER_TYPES =
{ italic: :italic, bold: :bold }.freeze

Instance Method Summary collapse

Instance Method Details

#inline_type(node) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/obp/access/inline_renderer.rb', line 48

def inline_type(node)
  return :text if node.is_a?(Nokogiri::XML::Text)

  CLASS_TYPES.fetch(node.classes) do
    case node.name
    when "i" then :italic
    when "a" then :ext_link
    when "b" then :bold
    else :element
    end
  end
end

#render_children(xml, node) ⇒ Object



44
45
46
# File 'lib/obp/access/inline_renderer.rb', line 44

def render_children(xml, node)
  node.children.each { |c| render_inline(xml, c) }
end

#render_container(xml, node, tag) ⇒ Object



40
41
42
# File 'lib/obp/access/inline_renderer.rb', line 40

def render_container(xml, node, tag)
  xml.public_send(tag) { node.children.each { |c| render_inline(xml, c) } }
end

#render_inline(xml, node) ⇒ Object



11
12
13
14
15
# File 'lib/obp/access/inline_renderer.rb', line 11

def render_inline(xml, node)
  return xml.text(node.content) if node.is_a?(Nokogiri::XML::Text)

  render_node_by_type(xml, node, inline_type(node))
end

#render_named_type(xml, node, type) ⇒ Object



31
32
33
34
35
36
37
38
# File 'lib/obp/access/inline_renderer.rb', line 31

def render_named_type(xml, node, type)
  case type
  when :entailed_term then render_entailed_term(xml, node)
  when :xref then render_xref(xml, node)
  when :std_ref then render_std_ref(xml, node)
  when :ext_link then render_ext_link(xml, node)
  end
end

#render_node_by_type(xml, node, type) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
# File 'lib/obp/access/inline_renderer.rb', line 19

def render_node_by_type(xml, node, type)
  if CONTAINER_TYPES.key?(type)
    render_container(xml, node, CONTAINER_TYPES[type])
  elsif type == :label
    nil
  elsif type == :element
    render_children(xml, node)
  else
    render_named_type(xml, node, type)
  end
end

#xref_ref_type(text) ⇒ Object



61
62
63
64
65
66
67
68
# File 'lib/obp/access/inline_renderer.rb', line 61

def xref_ref_type(text)
  case text
  when /\AFigure/ then "fig"
  when /\ATable/  then "table"
  when /\ANote/   then "fn"
  else "sec"
  end
end