Class: Metanorma::Itu::Validate

Inherits:
Standoc::Validate
  • Object
show all
Defined in:
lib/metanorma/itu/validate.rb

Instance Method Summary collapse

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_fileObject



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