Module: Metanorma::Standoc::TermsDesignations

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

Constant Summary collapse

DESIGNATOR =
%w(preferred admitted deprecates related).freeze

Instance Method Summary collapse

Instance Method Details

#dl_to_designation(dlist) ⇒ Object



116
117
118
119
120
121
122
123
# File 'lib/metanorma/cleanup/terms_designations.rb', line 116

def dl_to_designation(dlist)
  prev = dlist.previous_element
  unless %w(preferred admitted deprecates related).include? prev&.name
    @log.add("STANDOC_20", dlist)
    return nil
  end
  prev
end

#related2pref(elem) ⇒ Object



175
176
177
# File 'lib/metanorma/cleanup/terms_designations.rb', line 175

def related2pref(elem)
  elem&.name == "related" ? elem.at("./preferred") : elem
end

#term_designation_redundant(xmldoc) ⇒ Object



179
180
181
182
183
184
185
186
187
188
189
190
191
# File 'lib/metanorma/cleanup/terms_designations.rb', line 179

def term_designation_redundant(xmldoc)
  xmldoc.xpath("//term").each do |t|
    DESIGNATOR.each do |n|
      t.xpath("./#{n}/expression/name").each_with_object([]) do |d, m|
        if m.include?(d.text)
          @log.add("STANDOC_21", t, params: [d.text])
          d.parent.parent.remove
        end
        m << d.text
      end
    end
  end
end

#term_designation_reorder(xmldoc) ⇒ Object



163
164
165
166
167
168
169
170
171
172
173
# File 'lib/metanorma/cleanup/terms_designations.rb', line 163

def term_designation_reorder(xmldoc)
  xmldoc.xpath("//term").each do |t|
    des = DESIGNATOR.each_with_object([]) do |tag, m|
      t.xpath("./#{tag}").each { |x| m << x.remove }
    end.reverse
    t << " "
    des.each do |x|
      t.add_first_child(x)
    end
  end
end

#term_designation_unnest_cleanup(xmldoc) ⇒ Object



193
194
195
196
197
198
199
# File 'lib/metanorma/cleanup/terms_designations.rb', line 193

def term_designation_unnest_cleanup(xmldoc)
  term_designation_unnest_cleanup1(xmldoc,
                                   %w(preferred admitted deprecates),
                                   %w(preferred admitted deprecates
                                      related))
  term_designation_unnest_cleanup1(xmldoc, %w(related), %w(related))
end

#term_designation_unnest_cleanup1(xmldoc, path1, path2) ⇒ Object



201
202
203
204
205
206
207
208
209
# File 'lib/metanorma/cleanup/terms_designations.rb', line 201

def term_designation_unnest_cleanup1(xmldoc, path1, path2)
  xmldoc.xpath(path1.map { |x| "//#{x}" }.join(" | "))
    .each do |d|
    d.xpath(path2.map { |x| ".//#{x}" }.join(" | "))
      .reverse_each do |d1|
        d.next = d1
      end
  end
end

#term_dl_to_designation_category(prev, category) ⇒ Object



101
102
103
104
105
106
# File 'lib/metanorma/cleanup/terms_designations.rb', line 101

def term_dl_to_designation_category(prev, category)
  cat = prev.at(".//expression/grammar/#{category}")
  cat&.text&.include?(",") and
    cat.replace(cat.text.split(/,\s*/)
      .map { |x| "<#{category}>#{x}</#{category}>" }.join)
end

#term_dl_to_designation_metadata(prev, dlist) ⇒ Object



45
46
47
48
49
50
51
52
# File 'lib/metanorma/cleanup/terms_designations.rb', line 45

def (prev, dlist)
  %w(absent geographic-area).each do |a|
    dl_to_attrs(prev, dlist, a)
  end
  %w(field-of-application usage-info).reverse_each do |a|
    dl_to_elems(prev.at("./expression"), prev, dlist, a)
  end
end

#term_dl_to_expression_grammar(prev, dlist) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/metanorma/cleanup/terms_designations.rb', line 88

def term_dl_to_expression_grammar(prev, dlist)
  prev.at(".//expression") or return
  prev.at(".//expression") << "<grammar><sentinel/></grammar>"
  %w(gender number isPreposition isParticiple isAdjective isAdverb isNoun
     grammar-value).reverse_each do |a|
    dl_to_elems(prev.at(".//expression/grammar/*"), prev.elements.last,
                dlist, a)
  end
  term_dl_to_designation_category(prev, "gender")
  term_dl_to_designation_category(prev, "number")
  prev.at(".//expression/grammar/sentinel").remove
end

#term_dl_to_expression_metadata(prev, dlist) ⇒ Object



63
64
65
66
67
# File 'lib/metanorma/cleanup/terms_designations.rb', line 63

def (prev, dlist)
  (prev, dlist)
  (prev, dlist)
  term_to_letter_symbol(prev, dlist)
end

#term_dl_to_expression_name_metadata(prev, dlist) ⇒ Object



80
81
82
83
84
85
86
# File 'lib/metanorma/cleanup/terms_designations.rb', line 80

def (prev, dlist)
  %w(abbreviation-type pronunciation).reverse_each do |a|
    dl_to_elems(prev.at("./expression/name"), prev, dlist, a)
  end
  g = dlist.at("./dt[text()='grammar']/following::dd//dl") and
    term_dl_to_expression_grammar(prev, g)
end

#term_dl_to_expression_root_metadata(prev, dlist) ⇒ Object



69
70
71
72
73
74
75
76
77
78
# File 'lib/metanorma/cleanup/terms_designations.rb', line 69

def (prev, dlist)
  %w(isInternational).each do |a|
    p = prev.at("./expression | ./letter-symbol | ./graphical-symbol")
    dl_to_attrs(p, dlist, a)
  end
  %w(language script type).each do |a|
    p = prev.at("./expression") or next
    dl_to_attrs(p, dlist, a)
  end
end

#term_dl_to_metadata(xmldoc) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/metanorma/cleanup/terms_designations.rb', line 23

def (xmldoc)
  xmldoc.xpath("//term[dl[@metadata = 'true']]").each do |t|
    t.xpath("./dl[@metadata = 'true']").each do |dl|
      prev = related2pref(dl_to_designation(dl)) or next
      (prev, dl)
      (prev, dl)
      (prev, dl)
      dl.remove
    end
  end
end

#term_dl_to_term_metadata(prev, dlist) ⇒ Object



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

def (prev, dlist)
  return unless prev.name == "preferred" &&
    prev.at("./preceding-sibling::preferred").nil?

  ins = term_element_insert_point(prev)
  %w(domain subject).each do |a|
    ins = dl_to_elems(ins, prev.parent, dlist, a)
  end
end

#term_element_insert_point(prev) ⇒ Object



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

def term_element_insert_point(prev)
  ins = prev
  while %w(preferred admitted deprecates related domain dl)
      .include? ins&.next_element&.name
    ins = ins.next_element
  end
  ins
end

#term_nonverbal_designations(xmldoc) ⇒ Object



125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/metanorma/cleanup/terms_designations.rb', line 125

def term_nonverbal_designations(xmldoc)
  xmldoc.xpath("//term/preferred | //term/admitted | //term/deprecates")
    .each do |d|
    d.text.strip.empty? or next
    n = d.next_element
    if %w(formula figure).include?(n&.name)
      term_nonverbal_designations1(d, n)
    else d.at("./expression/name") or
      d.children = term_expr("")
    end
  end
end

#term_nonverbal_designations1(desgn, elem) ⇒ Object



138
139
140
141
142
143
144
145
146
147
148
# File 'lib/metanorma/cleanup/terms_designations.rb', line 138

def term_nonverbal_designations1(desgn, elem)
  desgn = related2pref(desgn)
  if elem.name == "figure"
    elem.at("./name").remove
    desgn.children =
      "<graphical-symbol>#{elem.remove.to_xml}</graphical-symbol>"
  else
    desgn.children = term_expr(elem.at("./stem").to_xml)
    elem.remove
  end
end

#term_termsource_to_designation(xmldoc) ⇒ Object



152
153
154
155
156
157
158
159
160
161
# File 'lib/metanorma/cleanup/terms_designations.rb', line 152

def term_termsource_to_designation(xmldoc)
  xmldoc.xpath("//term/source").each do |t|
    p = t.previous_element
    while %w(domain subject).include? p&.name
      p = p.previous_element
    end
    DESIGNATOR.include?(p&.name) or next
    related2pref(p) << t.remove
  end
end

#term_to_letter_symbol(prev, dlist) ⇒ Object



108
109
110
111
112
113
114
# File 'lib/metanorma/cleanup/terms_designations.rb', line 108

def term_to_letter_symbol(prev, dlist)
  ls = dlist.at("./dt[text()='letter-symbol']/following::dd/p")&.text
  !ls || ls == "false" and return
  e = prev.at(".//expression")
  e.name = "letter-symbol"
  ls != "true" and e["type"] = ls
end

#termdef_stem_cleanup(xmldoc) ⇒ Object



4
5
6
7
8
9
10
11
# File 'lib/metanorma/cleanup/terms_designations.rb', line 4

def termdef_stem_cleanup(xmldoc)
  xmldoc.xpath("//term//expression/name[stem]").each do |n|
    test = n.dup
    test.at("./stem").remove
    test.text.strip.empty? or next
    n.parent.name = "letter-symbol"
  end
end

#termdef_unnest_cleanup(xmldoc) ⇒ Object

release termdef tags from surrounding paras



14
15
16
17
18
19
20
21
# File 'lib/metanorma/cleanup/terms_designations.rb', line 14

def termdef_unnest_cleanup(xmldoc)
  desgn = "//p/admitted | //p/deprecates | //p/preferred | //p//related"
  nodes = xmldoc.xpath(desgn)
  while !nodes.empty?
    nodes[0].parent.replace(nodes[0].parent.children)
    nodes = xmldoc.xpath(desgn)
  end
end