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,
  # OBP's marker for content it could not map; drop its placeholder
  # text ("[no rendering defined for element: ...]").
  %w[sts-unknown-element] => :skip,
}.freeze
CONTAINER_TYPES =
{ italic: :italic, bold: :bold }.freeze

Instance Method Summary collapse

Instance Method Details

#inline_type(node) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/obp/access/inline_renderer.rb', line 51

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



47
48
49
# File 'lib/obp/access/inline_renderer.rb', line 47

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

#render_container(xml, node, tag) ⇒ Object



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

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

#render_inline(xml, node) ⇒ Object



14
15
16
17
18
# File 'lib/obp/access/inline_renderer.rb', line 14

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



34
35
36
37
38
39
40
41
# File 'lib/obp/access/inline_renderer.rb', line 34

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



22
23
24
25
26
27
28
29
30
31
32
# File 'lib/obp/access/inline_renderer.rb', line 22

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

#xref_ref_type(text) ⇒ Object



64
65
66
67
68
69
70
71
# File 'lib/obp/access/inline_renderer.rb', line 64

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