Module: Metanorma::Mirror::Handlers::Figure

Defined in:
lib/metanorma/mirror/handlers/figure.rb

Class Method Summary collapse

Class Method Details

.call(element, context:) ⇒ Object



7
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
# File 'lib/metanorma/mirror/handlers/figure.rb', line 7

def self.call(element, context:)
  attrs = figure_attrs(element)
  content = []

  img = SafeAttr.read(element, :image)
  if img
    img_attrs = {}
    src = SafeAttr.read(img, :source)
    img_attrs[:src] =
      src && !src.strip.empty? ? src : SafeAttr.read(img, :filename)
    img_attrs[:alt] = SafeAttr.read(img, :alt)
    img_attrs[:height] = SafeAttr.read(img, :height)
    img_attrs[:width] = SafeAttr.read(img, :width)
    content << Handlers.build_node("image", attrs: img_attrs.compact)
  end

  subfigures = SafeAttr.read(element, :figure)
  subfigures&.each do |sub|
    result = context.registry.handle(sub, context: context)
    result.append_to(content)
  end

  notes = SafeAttr.read(element, :note)
  notes&.each do |n|
    result = context.registry.handle(n, context: context)
    result.append_to(content)
  end

  Handlers.build_node("figure", attrs: attrs, content: content)
end

.figure_attrs(element) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/metanorma/mirror/handlers/figure.rb', line 38

def self.figure_attrs(element)
  attrs = {}
  attrs[:id] = SafeAttr.read(element, :id)
  attrs[:unnumbered] = SafeAttr.read(element, :unnumbered)
  attrs[:width] = SafeAttr.read(element, :width)
  attrs[:align] = SafeAttr.read(element, :align)
  attrs[:semx_id] = SafeAttr.read(element, :semx_id)

  name = SafeAttr.read(element, :name)
  attrs[:title] = Handlers.extract_name_text(name) if name
  attrs.compact
end