Module: Metanorma::Standoc::Index

Included in:
Cleanup
Defined in:
lib/metanorma/cleanup/index.rb

Instance Method Summary collapse

Instance Method Details

#block_index_cleanup(xmldoc) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
# File 'lib/metanorma/cleanup/index.rb', line 4

def block_index_cleanup(xmldoc)
  xmldoc.xpath("//quote | //td | //th | //formula | //li | //dt | " \
               "//dd | //example | //note | //figure | //sourcecode | " \
               "//admonition | //termnote | //termexample | //form  | " \
               "//requirement | //recommendation | //permission | " \
               "//imagemap | //svgmap").each do |b|
    b.xpath("./p[indexterm]").each do |p|
      indexterm_para?(p) or next
      p.replace(p.children)
    end
  end
end

#include_indexterm?(elem) ⇒ Boolean

Returns:

  • (Boolean)


23
24
25
26
# File 'lib/metanorma/cleanup/index.rb', line 23

def include_indexterm?(elem)
  elem.nil? and return false
  !%w(image literal sourcecode).include?(elem.name)
end

#index_cleanup1(term, fieldofappl) ⇒ Object



55
56
57
58
59
60
# File 'lib/metanorma/cleanup/index.rb', line 55

def index_cleanup1(term, fieldofappl)
  term or return
  idx = term.children.dup
  fieldofappl.empty? or idx << ", &#x3c;#{fieldofappl}&#x3e;"
  term << "<index><primary>#{idx.to_xml}</primary></index>"
end

#indexterm_para?(para) ⇒ Boolean

Returns:

  • (Boolean)


17
18
19
20
21
# File 'lib/metanorma/cleanup/index.rb', line 17

def indexterm_para?(para)
  p = para.dup
  p.xpath("./index").each(&:remove)
  p.text.strip.empty?
end

#para_index_cleanup(xmldoc) ⇒ Object



28
29
30
31
32
33
# File 'lib/metanorma/cleanup/index.rb', line 28

def para_index_cleanup(xmldoc)
  xmldoc.xpath("//p[index]").select { |p| indexterm_para?(p) }
    .each do |p|
      para_index_cleanup1(p, p.previous_element, p.next_element)
    end
end

#para_index_cleanup1(para, prev, foll) ⇒ Object



35
36
37
38
39
40
41
# File 'lib/metanorma/cleanup/index.rb', line 35

def para_index_cleanup1(para, prev, foll)
  if include_indexterm?(prev)
    prev << para.remove.children
  elsif include_indexterm?(foll) # && !foll.children.empty?
    foll.add_first_child para.remove.children
  end
end

#term_index_cleanup(xmldoc) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/metanorma/cleanup/index.rb', line 43

def term_index_cleanup(xmldoc)
  @index_terms or return
  xmldoc.xpath("//preferred").each do |p|
    index_cleanup1(p.at("./expression/name | ./letter-symbol/name"),
                   p.xpath("./field-of-application | ./usage-info")
      &.map(&:text)&.join(", "))
  end
  xmldoc.xpath("//definitions/dl/dt").each do |p|
    index_cleanup1(p, "")
  end
end