Class: Metanorma::Itu::Validate
- Inherits:
-
Standoc::Validate
- Object
- Standoc::Validate
- Metanorma::Itu::Validate
- Defined in:
- lib/metanorma/itu/validate.rb
Instance Method Summary collapse
-
#approval_validate(xmldoc) ⇒ Object
def style_two_regex_not_prev(node, text, regex, regex_prev, warning) text.nil? and return arr = text.split(/W+/) arr.each_index do |i| m_prev = i.zero? ? nil : regex_prev.match(arr[i - 1]) if !regex.match?(arr) && m_prev.nil? @log.add(“Style”, node, “#warning: #:num”) # ID = ITU_5 end end end.
- #bibdata_validate(doc) ⇒ Object
- #content_validate(doc) ⇒ Object
- #doctype_validate(_xmldoc) ⇒ Object
- #extract_text(node) ⇒ Object
- #itu_identifier_validate(xmldoc) ⇒ Object
-
#numbers_validate(xmldoc) ⇒ Object
Editing Guidelines 9.4.3 Supplanted by rendering.
-
#reqt_validate(xmldoc) ⇒ Object
Editing Guidelines 7.
- #schema_file ⇒ Object
-
#section_check(xmldoc) ⇒ Object
Editing Guidelines 7.2, 7.3.
- #section_validate(doc) ⇒ Object
- #stage_validate(xmldoc) ⇒ Object
- #termdef_style(xmldoc) ⇒ Object
- #termdef_warn(text, regex, node, term, msg) ⇒ Object
-
#title_validate1(xmldoc) ⇒ Object
Editing Guidelines 6.3.
- #unnumbered_check(xmldoc) ⇒ Object
Instance Method Details
#approval_validate(xmldoc) ⇒ Object
def style_two_regex_not_prev(node, text, regex, regex_prev, warning)
text.nil? and return
arr = text.split(/\W+/)
arr.each_index do |i|
m_prev = i.zero? ? nil : regex_prev.match(arr[i - 1])
if !regex.match?(arr[i]) && m_prev.nil?
@log.add("Style", node, "#{warning}: #{m[:num]}")
# ID = ITU_5
end
end
end
86 87 88 89 90 91 92 93 94 95 |
# File 'lib/metanorma/itu/validate.rb', line 86 def approval_validate(xmldoc) s = xmldoc.at("//bibdata/ext/recommendationstatus/approvalstage") or return process = s["process"] (process == "aap") && %w(determined in-force).include?(s.text) and @log.add("ITU_6", nil, params: [s.text]) (process == "tap") && !%w(determined in-force).include?(s.text) and @log.add("ITU_7", nil, params: [s.text]) end |
#bibdata_validate(doc) ⇒ Object
8 9 10 11 |
# File 'lib/metanorma/itu/validate.rb', line 8 def bibdata_validate(doc) doctype_validate(doc) stage_validate(doc) end |
#content_validate(doc) ⇒ Object
29 30 31 32 33 34 35 36 37 38 |
# File 'lib/metanorma/itu/validate.rb', line 29 def content_validate(doc) super approval_validate(doc) itu_identifier_validate(doc) bibdata_validate(doc.root) termdef_style(doc.root) title_validate1(doc.root) reqt_validate(doc.root) numbers_validate(doc.root) end |
#doctype_validate(_xmldoc) ⇒ Object
13 14 15 16 17 18 19 20 |
# File 'lib/metanorma/itu/validate.rb', line 13 def doctype_validate(_xmldoc) %w(recommendation recommendation-supplement recommendation-amendment recommendation-corrigendum recommendation-errata recommendation-annex focus-group implementers-guide technical-paper technical-report joint-itu-iso-iec service-publication contribution).include? @doctype or @log.add("ITU_1", nil, params: [@doctype]) end |
#extract_text(node) ⇒ Object
50 51 52 53 54 55 56 57 58 |
# File 'lib/metanorma/itu/validate.rb', line 50 def extract_text(node) return "" if node.nil? node1 = Nokogiri::XML.fragment(node.to_s) node1.xpath("//link | //locality | //localityStack").each(&:remove) ret = "" node1.traverse { |x| ret += x.text if x.text? } ret end |
#itu_identifier_validate(xmldoc) ⇒ Object
97 98 99 100 101 102 103 |
# File 'lib/metanorma/itu/validate.rb', line 97 def itu_identifier_validate(xmldoc) xmldoc.xpath("//bibdata/docidentifier[@type = 'ITU']").each do |x| /^SG \d+/.match?(x.text) || /^ITU-[RTD] [AD-VX-Z]\.\d+(\.\d+)?$/.match?(x.text) or @log.add("ITU_8", nil, params: [x.text]) end end |
#numbers_validate(xmldoc) ⇒ Object
Editing Guidelines 9.4.3 Supplanted by rendering
72 |
# File 'lib/metanorma/itu/validate.rb', line 72 def numbers_validate(xmldoc); end |
#reqt_validate(xmldoc) ⇒ Object
Editing Guidelines 7
61 62 63 64 65 66 67 68 |
# File 'lib/metanorma/itu/validate.rb', line 61 def reqt_validate(xmldoc) xmldoc.xpath("//preface/*").each do |c| extract_text(c).split(/\.\s+/).each do |t| /\b(shall|must)\b/i.match(t) and @log.add("ITU_4", c, params: [t.strip]) end end end |
#schema_file ⇒ Object
4 5 6 |
# File 'lib/metanorma/itu/validate.rb', line 4 def schema_file "itu.rng" end |
#section_check(xmldoc) ⇒ Object
Editing Guidelines 7.2, 7.3
121 122 123 124 125 126 |
# File 'lib/metanorma/itu/validate.rb', line 121 def section_check(xmldoc) xmldoc.at("//bibdata/abstract") or @log.add("ITU_10", nil) xmldoc.at("//bibdata/keyword") or @log.add("ITU_11", nil) end |
#section_validate(doc) ⇒ Object
105 106 107 108 109 |
# File 'lib/metanorma/itu/validate.rb', line 105 def section_validate(doc) super section_check(doc.root) unnumbered_check(doc.root) end |
#stage_validate(xmldoc) ⇒ Object
22 23 24 25 26 27 |
# File 'lib/metanorma/itu/validate.rb', line 22 def stage_validate(xmldoc) stage = xmldoc&.at("//bibdata/status/stage")&.text %w(in-force superseded in-force-prepublished withdrawn draft).include? stage or @log.add("ITU_2", nil, params: [stage]) end |
#termdef_style(xmldoc) ⇒ Object
128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/metanorma/itu/validate.rb', line 128 def termdef_style(xmldoc) xmldoc.xpath("//term").each do |t| para = t.at("./definition/verbal-definition") || return term = t.at("./preferred//name").text termdef_warn(term, /^[A-Z][a-z]+/, t, term, "term is not lowercase") termdef_warn(para.text.strip, /^[a-z]/, t, term, "term definition does not start with capital") termdef_warn(para.text.strip, /[^.]\z/, t, term, "term definition does not end with period") end end |
#termdef_warn(text, regex, node, term, msg) ⇒ Object
141 142 143 |
# File 'lib/metanorma/itu/validate.rb', line 141 def termdef_warn(text, regex, node, term, msg) regex.match(text) && @log.add("ITU_12", node, params: [term, msg]) end |
#title_validate1(xmldoc) ⇒ Object
Editing Guidelines 6.3
41 42 43 44 45 46 47 48 |
# File 'lib/metanorma/itu/validate.rb', line 41 def title_validate1(xmldoc) t = xmldoc.at("//bibdata/title")&.text xmldoc.xpath("//bibdata/series/title").each do |s| series = s.text.sub(/^[A-Z]: /, "") t.downcase.include?(series.downcase) and @log.add("ITU_3", nil, params: [series]) end end |
#unnumbered_check(xmldoc) ⇒ Object
111 112 113 114 115 116 117 118 |
# File 'lib/metanorma/itu/validate.rb', line 111 def unnumbered_check(xmldoc) xmldoc.xpath("//clause[@unnumbered = 'true']").each do |c| next if (@doctype == "resolution") && (c.parent.name == "sections") && !c.at("./preceding-sibling::clause") @log.add("ITU_9", c) end end |