Module: Metanorma::Collection::Util

Defined in:
lib/metanorma/collection/util/util.rb,
lib/metanorma/collection/util/disambig_files.rb

Defined Under Namespace

Classes: DisambigFiles, Dummy

Class Method Summary collapse

Class Method Details

.add_suffix_to_attrs(doc, suffix, tag_name, attr_name, isodoc) ⇒ Object



39
40
41
42
43
44
45
46
# File 'lib/metanorma/collection/util/util.rb', line 39

def add_suffix_to_attrs(doc, suffix, tag_name, attr_name, isodoc)
  (suffix.nil? || suffix.empty?) and return
  doc.xpath(isodoc.ns("//#{tag_name}[@#{attr_name}]")).each do |elem|
    a = elem.attributes[attr_name].value
    /_#{suffix}$/.match?(a) or
      elem.attributes[attr_name].value = "#{a}_#{suffix}"
  end
end

.anchor_id_attributesObject



5
6
7
8
# File 'lib/metanorma/collection/util/util.rb', line 5

def anchor_id_attributes
  Metanorma::Utils::anchor_attributes(presxml: true) +
    [%w(* id), %w(* anchor), %w(link bibitemid), %w(fmt-link bibitemid)]
end

.gather_bibitemids(xml, presxml) ⇒ Object



22
23
24
25
26
27
28
# File 'lib/metanorma/collection/util/util.rb', line 22

def gather_bibitemids(xml, presxml)
  xml.xpath("//*[@bibitemid]").each_with_object({}) do |e, m|
    presxml && %w(xref eref link).include?(e.name) and next
    m[e["bibitemid"]] ||= []
    m[e["bibitemid"]] << e
  end
end

.gather_bibitems(xml) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
# File 'lib/metanorma/collection/util/util.rb', line 10

def gather_bibitems(xml)
  xml.xpath("//xmlns:bibitem[@id]").each_with_object({}) do |b, m|
    if m[b["id"]]
      b.remove
      next
      # we can't update duplicate bibitem, processing updates wrong one
    else
      m[b["id"]] = b
    end
  end
end

.gather_citeases(xml, presxml) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/metanorma/collection/util/util.rb', line 30

def gather_citeases(xml, presxml)
  xml.xpath("//*[@citeas]").each_with_object({}) do |e, m|
    presxml && %w(xref eref link).include?(e.name) and next
    k = key(e["citeas"])
    m[k] ||= []
    m[k] << e
  end
end

.hash_key_detect(directives, key, variable) ⇒ Object



48
49
50
51
52
# File 'lib/metanorma/collection/util/util.rb', line 48

def hash_key_detect(directives, key, variable)
  c = directives.detect { |x| x.key == key } or
    return variable
  c.value
end

.hide_refs(docxml) ⇒ Object



61
62
63
64
65
66
67
# File 'lib/metanorma/collection/util/util.rb', line 61

def hide_refs(docxml)
  p = "//xmlns:references[xmlns:bibitem]"\
    "[not(./xmlns:bibitem[not(@hidden) or @hidden = 'false'])]"
  docxml.xpath(p).each do |f|
    f["hidden"] = "true"
  end
end

.isodoc_create(flavor, lang, script, xml, presxml: false) ⇒ Object



87
88
89
90
91
92
93
94
95
96
# File 'lib/metanorma/collection/util/util.rb', line 87

def isodoc_create(flavor, lang, script, xml, presxml: false)
  isodoc = Util::load_isodoc(flavor, presxml: presxml)
  isodoc.i18n_init(lang, script, nil) # read in internationalisation
  # TODO locale?
  isodoc.(lang, script, nil, isodoc.i18n)
  isodoc.xref_init(lang, script, nil, isodoc.i18n, {})
  isodoc.xrefs.klass.meta = isodoc.meta
  isodoc.info(xml, nil)
  isodoc
end

.key(ident) ⇒ Object



69
70
71
72
# File 'lib/metanorma/collection/util/util.rb', line 69

def key(ident)
  @c ||= HTMLEntities.new
  @c.decode(ident).gsub(/(\p{Zs})+/, " ")
end

.load_isodoc(flavor, presxml: false) ⇒ Object



78
79
80
81
82
83
84
85
# File 'lib/metanorma/collection/util/util.rb', line 78

def load_isodoc(flavor, presxml: false)
  x = Asciidoctor.load nil, backend: flavor.to_sym
  if presxml
    x.converter.presentation_xml_converter(Dummy.new)
  else
    x.converter.html_converter(Dummy.new) # to obtain Isodoc class
  end
end

.rel_path_resolve(dir, path) ⇒ Object



54
55
56
57
58
59
# File 'lib/metanorma/collection/util/util.rb', line 54

def rel_path_resolve(dir, path)
  path.nil? and return path
  path.empty? and return path
  p = Pathname.new(path)
  p.absolute? ? path : File.join(dir, path)
end