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
- #dl_to_designation(dlist) ⇒ Object
- #related2pref(elem) ⇒ Object
- #term_designation_redundant(xmldoc) ⇒ Object
- #term_designation_reorder(xmldoc) ⇒ Object
- #term_designation_unnest_cleanup(xmldoc) ⇒ Object
- #term_designation_unnest_cleanup1(xmldoc, path1, path2) ⇒ Object
- #term_dl_to_designation_category(prev, category) ⇒ Object
- #term_dl_to_designation_metadata(prev, dlist) ⇒ Object
- #term_dl_to_expression_grammar(prev, dlist) ⇒ Object
- #term_dl_to_expression_metadata(prev, dlist) ⇒ Object
- #term_dl_to_expression_name_metadata(prev, dlist) ⇒ Object
- #term_dl_to_expression_root_metadata(prev, dlist) ⇒ Object
- #term_dl_to_metadata(xmldoc) ⇒ Object
- #term_dl_to_term_metadata(prev, dlist) ⇒ Object
- #term_element_insert_point(prev) ⇒ Object
- #term_nonverbal_designations(xmldoc) ⇒ Object
- #term_nonverbal_designations1(desgn, elem) ⇒ Object
- #term_termsource_to_designation(xmldoc) ⇒ Object
- #term_to_letter_symbol(prev, dlist) ⇒ Object
- #termdef_stem_cleanup(xmldoc) ⇒ Object
-
#termdef_unnest_cleanup(xmldoc) ⇒ Object
release termdef tags from surrounding paras.
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 (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 = (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 = (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 (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 |