metanorma-itu 2.7.2 → 2.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -61,25 +61,26 @@ module IsoDoc
61
61
  nil
62
62
  end
63
63
 
64
+ COMMITTEE_XPATH = "//bibdata/contributor[role/description = 'committee']/" \
65
+ "organization/subdivision".freeze
66
+
64
67
  def author(xml, _out)
65
- sector = xml.at(ns("//bibdata/ext/editorialgroup/sector"))
68
+ sector = xml.at(ns("#{COMMITTEE_XPATH}[@type='Sector']/name"))
66
69
  set(:sector, sector.text) if sector
67
70
  bureau(xml)
68
- tc = xml.at(ns("//bibdata/ext/editorialgroup/committee"))
69
- set(:tc, tc.text) if tc
70
- tc = xml.at(ns("//bibdata/ext/editorialgroup/group/name"))
71
+ tc = xml.at(ns("#{COMMITTEE_XPATH}[@type='Group']/name"))
71
72
  set(:group, tc.text) if tc
72
- tc = xml.at(ns("//bibdata/ext/editorialgroup/group/acronym"))
73
+ tc = xml.at(ns("#{COMMITTEE_XPATH}[@type='Group']/identifier"))
73
74
  set(:group_acronym, tc.text) if tc
74
- start1 = xml.at(ns("//bibdata/ext/editorialgroup/group/period/start"))
75
- end1 = xml.at(ns("//bibdata/ext/editorialgroup/group/period/end"))
75
+ start1 = xml.at(ns("//bibdata/ext/studyperiod/start"))
76
+ end1 = xml.at(ns("//bibdata/ext/studyperiod/end"))
76
77
  if start1
77
78
  set(:study_group_period,
78
79
  @i18n.l10n("#{start1.text}–#{end1.text}"))
79
80
  end
80
- tc = xml.at(ns("//bibdata/ext/editorialgroup/subgroup/name"))
81
+ tc = xml.at(ns("#{COMMITTEE_XPATH}[@type='Subgroup']/name"))
81
82
  set(:subgroup, tc.text) if tc
82
- tc = xml.at(ns("//bibdata/ext/editorialgroup/workgroup/name"))
83
+ tc = xml.at(ns("#{COMMITTEE_XPATH}[@type='Workgroup']/name"))
83
84
  set(:workgroup, tc.text) if tc
84
85
  super
85
86
  authors = xml.xpath(ns("//bibdata/contributor[role/@type = 'author' " \
@@ -88,7 +89,7 @@ module IsoDoc
88
89
  end
89
90
 
90
91
  def bureau(xml)
91
- if bureau = xml.at(ns("//bibdata/ext/editorialgroup/bureau"))
92
+ if bureau = xml.at(ns("#{COMMITTEE_XPATH}[@type='Bureau']/name"))
92
93
  set(:bureau, bureau.text)
93
94
  case bureau.text
94
95
  when "T" then set(:bureau_full, @i18n.tsb_full)
@@ -136,10 +137,6 @@ module IsoDoc
136
137
  @i18n.l10n("#{@labels['corrigendum']} #{dn.text}"))
137
138
  end
138
139
 
139
- def unpublished(status)
140
- %w(in-force-prepublished draft).include? status.downcase
141
- end
142
-
143
140
  def bibdate(xml, _out)
144
141
  d = xml.at(ns("//bibdata/date[not(@format)][@type = 'published']"))
145
142
  d and set(:pubdate_monthyear, monthyr(d.text))
@@ -76,12 +76,6 @@ from other documents in the same doctype</a:documentation>
76
76
  <ref name="flavor">
77
77
  <a:documentation>Flavour of Metanorma used to process this document</a:documentation>
78
78
  </ref>
79
- <optional>
80
- <ref name="editorialgroup">
81
- <a:documentation>Groups associated with the production of the standards document, typically within
82
- a standards definition organization</a:documentation>
83
- </ref>
84
- </optional>
85
79
  <zeroOrMore>
86
80
  <ref name="ics">
87
81
  <a:documentation>Classification of the document contents taken from the International Classification of Standards</a:documentation>
@@ -130,49 +124,6 @@ a standards definition organization</a:documentation>
130
124
  However we prefer not to hardcode it, given ongoing extension.</a:documentation>
131
125
  <text/>
132
126
  </define>
133
- <define name="editorialgroup">
134
- <a:documentation>A group associated with the production of the standards document, typically within
135
- a standards definition organization</a:documentation>
136
- <element name="editorialgroup">
137
- <oneOrMore>
138
- <ref name="technical-committee">
139
- <a:documentation>A technical committee associated with the production of the standards document</a:documentation>
140
- </ref>
141
- </oneOrMore>
142
- </element>
143
- </define>
144
- <define name="technical-committee">
145
- <a:documentation>Technical committee associated with the production of a standards document</a:documentation>
146
- <element name="technical-committee">
147
- <ref name="IsoWorkgroup"/>
148
- </element>
149
- </define>
150
- <define name="IsoWorkgroup">
151
- <optional>
152
- <attribute name="number">
153
- <a:documentation>Numeric identifier of the technical committee</a:documentation>
154
- </attribute>
155
- </optional>
156
- <optional>
157
- <attribute name="type">
158
- <a:documentation>Type of the technical committee, used in identifying the technical committee</a:documentation>
159
- </attribute>
160
- </optional>
161
- <optional>
162
- <attribute name="identifier">
163
- <a:documentation>Non-numeric, complete identifier of the technical committee</a:documentation>
164
- </attribute>
165
- </optional>
166
- <optional>
167
- <attribute name="prefix">
168
- <a:documentation>Disambiguating prefix added to number to form the identifier of the technical committee,
169
- typically indicating its type</a:documentation>
170
- </attribute>
171
- </optional>
172
- <text>
173
- <a:documentation>Name of the technical committee</a:documentation>
174
- </text>
175
- </define>
176
127
  <define name="ics">
177
128
  <a:documentation>Classification taken from the International Classification of Standards.
178
129
  ICS is defined by ISO here -- https://www.iso.org/publication/PUB100033.html</a:documentation>
@@ -242,6 +242,8 @@ Detailed in https://www.relaton.org/model/creator/</a:documentation>
242
242
  </choice>
243
243
  </define>
244
244
  <define name="roledescription">
245
+ <a:documentation>A more detailed description of the role of the contributor
246
+ Some descriptions are reserved words; in particular, the editorial committee of a standard has the role description "committee"</a:documentation>
245
247
  <element name="description">
246
248
  <ref name="LocalizedMarkedUpString"/>
247
249
  </element>
@@ -443,7 +445,10 @@ real names (if the person is named with a pseudonym or user name); previous lega
443
445
  </oneOrMore>
444
446
  <zeroOrMore>
445
447
  <ref name="subdivision">
446
- <a:documentation>The subdivision of the organization directly involved with the production of the bibliographic item</a:documentation>
448
+ <a:documentation>The subdivision of the organization directly involved with the production of the bibliographic item.
449
+ Multiple subdivisions can be specified for an organization, with no implication of hierarchical
450
+ relation between them
451
+ Editorial and advisory groups are represented as consecutive subdivisions of the SDO</a:documentation>
447
452
  </ref>
448
453
  </zeroOrMore>
449
454
  <optional>
@@ -485,6 +490,11 @@ real names (if the person is named with a pseudonym or user name); previous lega
485
490
  <a:documentation>The type of subdivision</a:documentation>
486
491
  </attribute>
487
492
  </optional>
493
+ <optional>
494
+ <attribute name="subtype">
495
+ <a:documentation>The subtype of subdivision; e.g. different types of technical committee</a:documentation>
496
+ </attribute>
497
+ </optional>
488
498
  <ref name="OrganizationType">
489
499
  <a:documentation>The subdivision, modelled recursively as an organization</a:documentation>
490
500
  </ref>
@@ -82,6 +82,10 @@ module Metanorma
82
82
  biblio_reorder1(r)
83
83
  end
84
84
  end
85
+
86
+ def published?(status, _xmldoc)
87
+ !%w(in-force-prepublished draft).include?(status.downcase)
88
+ end
85
89
  end
86
90
  end
87
91
  end
@@ -1,5 +1,6 @@
1
1
  require "fileutils"
2
2
  require_relative "./front_id"
3
+ require_relative "./front_contrib"
3
4
 
4
5
  module Metanorma
5
6
  module Itu
@@ -64,44 +65,6 @@ module Metanorma
64
65
  end
65
66
  end
66
67
 
67
- def default_publisher
68
- @i18n.get["ITU"] || @i18n.international_telecommunication_union
69
- end
70
-
71
- def org_abbrev
72
- if @i18n.get["ITU"]
73
- { @i18n.international_telecommunication_union => @i18n.get["ITU"] }
74
- else {} end
75
- end
76
-
77
- def metadata_committee(node, xml)
78
- hyphenate_node_attributes(node)
79
- metadata_sector(node, xml)
80
- metadata_committee1(node, xml, "")
81
- suffix = 2
82
- while node.attr("bureau_#{suffix}")
83
- metadata_committee1(node, xml, "_#{suffix}")
84
- suffix += 1
85
- end
86
- end
87
-
88
- def hyphenate_node_attributes(node)
89
- a = node.attributes.dup
90
- a.each do |k, v|
91
- /group(type|acronym)/.match?(k) and
92
- node.set_attr(k.sub(/group(type|acronym)/, "group-\\1"), v)
93
- /group(yearstart|yearend)/.match?(k) and
94
- node.set_attr(k.sub(/groupyear(start|end)/, "group-year-\\1"), v)
95
- end
96
- end
97
-
98
- def metadata_sector(node, xml)
99
- s = node.attr("sector") or return
100
- xml.editorialgroup do |a|
101
- a.sector { |x| x << s }
102
- end
103
- end
104
-
105
68
  def metadata_question(node, xml)
106
69
  vals = csv_split(node.attr("question"), ",").map do |s1|
107
70
  t, v = s1.split(":", 2).map(&:strip)
@@ -115,29 +78,6 @@ module Metanorma
115
78
  end
116
79
  end
117
80
 
118
- def metadata_committee1(node, xml, suffix)
119
- xml.editorialgroup do |a|
120
- a.bureau ( node.attr("bureau#{suffix}") || "T")
121
- ["", "sub", "work"].each do |p|
122
- node.attr("#{p}group#{suffix}") or next
123
- type = node.attr("#{p}group-type#{suffix}")
124
- a.send "#{p}group", **attr_code(type: type) do |g|
125
- metadata_committee2(node, g, suffix, p)
126
- end
127
- end
128
- end
129
- end
130
-
131
- def metadata_committee2(node, group, suffix, prefix)
132
- group.name node.attr("#{prefix}group#{suffix}")
133
- a = node.attr("#{prefix}group-acronym#{suffix}") and group.acronym a
134
- s, e = group_period(node, prefix, suffix)
135
- group.period do |p|
136
- p.start s
137
- p.end e
138
- end
139
- end
140
-
141
81
  def group_period(node, prefix, suffix)
142
82
  s = node.attr("#{prefix}group-year-start#{suffix}") ||
143
83
  Date.today.year - (Date.today.year % 2)
@@ -213,11 +153,20 @@ module Metanorma
213
153
  end
214
154
  end
215
155
 
156
+ def metadata_studyperiod(node, xml)
157
+ s, e = group_period(node, "", "")
158
+ xml.studyperiod do |p|
159
+ p.start s
160
+ p.end e
161
+ end
162
+ end
163
+
216
164
  def metadata_ext(node, xml)
217
165
  super
218
166
  metadata_question(node, xml)
219
167
  metadata_recommendationstatus(node, xml)
220
168
  metadata_ip_notice(node, xml)
169
+ metadata_studyperiod(node, xml)
221
170
  metadata_techreport(node, xml)
222
171
  metadata_contribution(node, xml)
223
172
  end
@@ -0,0 +1,62 @@
1
+ module Metanorma
2
+ module Itu
3
+ class Converter < Standoc::Converter
4
+ def default_publisher
5
+ @i18n.get["ITU"] || @i18n.international_telecommunication_union
6
+ end
7
+
8
+ def org_abbrev
9
+ if @i18n.get["ITU"]
10
+ { @i18n.international_telecommunication_union => @i18n.get["ITU"] }
11
+ else {} end
12
+ end
13
+
14
+ def committee_contributors(node, xml, agency, opt)
15
+ metadata_committee_prep(node) or return
16
+ super
17
+ end
18
+
19
+ def metadata_committee_types(_node)
20
+ %w(bureau sector group subgroup workgroup)
21
+ end
22
+
23
+ def extract_org_attrs_complex(node, opts, source, suffix)
24
+ super.merge(ident: node.attr("#{source}-acronym#{suffix}")).compact
25
+ end
26
+
27
+ def full_committee_id(contrib); end
28
+
29
+ def metadata_committee_prep(node)
30
+ a = node.attributes.dup
31
+ a.each do |k, v|
32
+ /group(type|acronym)/.match?(k) and
33
+ node.set_attr(k.sub(/group(type|acronym)/, "group-\\1"), v)
34
+ /group(yearstart|yearend)/.match?(k) and
35
+ node.set_attr(k.sub(/groupyear(start|end)/, "group-year-\\1"), v)
36
+ end
37
+ end
38
+
39
+ def org_attrs_add_committees(node, ret, opts, opts_orig)
40
+ opts_orig[:groups]&.each_with_index do |g, i|
41
+ i.zero? and next
42
+ contributors_committees_pad_multiples(ret.first, node, g)
43
+ opts = committee_contrib_org_prep(node, g, nil, opts_orig)
44
+ ret << org_attrs_parse_core(node, opts).map do |x|
45
+ x.merge(subdivtype: opts[:subdivtype])
46
+ end
47
+ end
48
+ contributors_committees_nest1(ret)
49
+ end
50
+
51
+ def metadata_ext(node, xml)
52
+ super
53
+ metadata_question(node, xml)
54
+ metadata_recommendationstatus(node, xml)
55
+ metadata_ip_notice(node, xml)
56
+ metadata_studyperiod(node, xml)
57
+ metadata_techreport(node, xml)
58
+ metadata_contribution(node, xml)
59
+ end
60
+ end
61
+ end
62
+ end
@@ -65,8 +65,7 @@ module Metanorma
65
65
  end
66
66
 
67
67
  def recommendation_id(node, xml)
68
- return unless node.attr("recommendationnumber")
69
-
68
+ node.attr("recommendationnumber") or return
70
69
  node.attr("recommendationnumber").split("/").each do |s|
71
70
  xml.docidentifier type: "ITU-Recommendation" do |i|
72
71
  i << s
@@ -75,8 +74,7 @@ module Metanorma
75
74
  end
76
75
 
77
76
  def structured_id(node, xml)
78
- return unless node.attr("docnumber")
79
-
77
+ node.attr("docnumber") or return
80
78
  xml.structuredidentifier do |i|
81
79
  i.bureau node.attr("bureau") || "T"
82
80
  i.docnumber node.attr("docnumber")
@@ -1,6 +1,6 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
2
  <grammar xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
3
- <!-- VERSION v2.1.0 -->
3
+ <!-- VERSION v2.1.2 -->
4
4
 
5
5
  <!--
6
6
  ALERT: cannot have root comments, because of https://github.com/metanorma/metanorma/issues/437
@@ -123,6 +123,10 @@ the type attribute defaults to `review` for reviews</a:documentation>
123
123
  <a:documentation>Notes whose scope is the current block</a:documentation>
124
124
  </ref>
125
125
  </zeroOrMore>
126
+ <ref name="BlockSource">
127
+ <a:documentation>Bibliographic source for the information in the list.
128
+ Sources are currently only rendered in metanorma-plateau</a:documentation>
129
+ </ref>
126
130
  </define>
127
131
  <define name="OlBody">
128
132
  <optional>
@@ -140,6 +144,10 @@ the type attribute defaults to `review` for reviews</a:documentation>
140
144
  <a:documentation>Notes whose scope is the current block</a:documentation>
141
145
  </ref>
142
146
  </zeroOrMore>
147
+ <ref name="BlockSource">
148
+ <a:documentation>Bibliographic source for the information in the list.
149
+ Sources are currently only rendered in metanorma-plateau</a:documentation>
150
+ </ref>
143
151
  </define>
144
152
  <define name="OlAttributes">
145
153
  <a:documentation>NOTE: `start` attribute is not included by default, because of problems it raises with DOC output</a:documentation>
@@ -188,6 +196,10 @@ the type attribute defaults to `review` for reviews</a:documentation>
188
196
  <a:documentation>Notes whose scope is the current block</a:documentation>
189
197
  </ref>
190
198
  </zeroOrMore>
199
+ <ref name="BlockSource">
200
+ <a:documentation>Bibliographic source for the information in the list.
201
+ Sources are currently only rendered in metanorma-plateau</a:documentation>
202
+ </ref>
191
203
  </define>
192
204
  <define name="dt">
193
205
  <element name="dt">
@@ -871,6 +883,12 @@ titlecase, or lowercase</a:documentation>
871
883
  </oneOrMore>
872
884
  </element>
873
885
  </define>
886
+ <define name="ParagraphFnBody" combine="interleave">
887
+ <ref name="BlockSource">
888
+ <a:documentation>Bibliographic source for the information in the paragraph
889
+ parargaph sources are currently only rendered in metanorma-plateau</a:documentation>
890
+ </ref>
891
+ </define>
874
892
  <define name="BasicBlock" combine="choice">
875
893
  <ref name="columnbreak"/>
876
894
  </define>
@@ -2233,6 +2251,11 @@ used in document amendments</a:documentation>
2233
2251
  <ref name="RequiredId"/>
2234
2252
  <ref name="NumberingAttributes"/>
2235
2253
  <ref name="BlockAttributes"/>
2254
+ <optional>
2255
+ <attribute name="type">
2256
+ <a:documentation>Semantic classification of note</a:documentation>
2257
+ </attribute>
2258
+ </optional>
2236
2259
  <oneOrMore>
2237
2260
  <choice>
2238
2261
  <a:documentation>Content of the term note</a:documentation>
@@ -21,23 +21,6 @@
21
21
  <value>contribution</value>
22
22
  </choice>
23
23
  </define>
24
- <define name="editorialgroup">
25
- <element name="editorialgroup">
26
- <choice>
27
- <ref name="bureau"/>
28
- <ref name="sector"/>
29
- </choice>
30
- <optional>
31
- <ref name="group"/>
32
- </optional>
33
- <optional>
34
- <ref name="subgroup"/>
35
- </optional>
36
- <optional>
37
- <ref name="workgroup"/>
38
- </optional>
39
- </element>
40
- </define>
41
24
  <define name="structuredidentifier">
42
25
  <element name="structuredidentifier">
43
26
  <ref name="bureau"/>
@@ -78,6 +61,11 @@
78
61
  <a:documentation>ITU has received a notice of intellectual property, protected by patents, which may be required to implement this Recommendation</a:documentation>
79
62
  </ref>
80
63
  </optional>
64
+ <optional>
65
+ <ref name="studyperiod">
66
+ <a:documentation>Study period that the editorial groups working on this document fall under</a:documentation>
67
+ </ref>
68
+ </optional>
81
69
  <optional>
82
70
  <ref name="meeting">
83
71
  <a:documentation>Name of meeting that generated this document (for resolutions, technical reports, technical papers, implementers guides) </a:documentation>
@@ -203,35 +191,6 @@
203
191
  </choice>
204
192
  </element>
205
193
  </define>
206
- <define name="sector">
207
- <element name="sector">
208
- <text/>
209
- </element>
210
- </define>
211
- <define name="group">
212
- <element name="group">
213
- <ref name="ItuGroup"/>
214
- </element>
215
- </define>
216
- <define name="subgroup">
217
- <element name="subgroup">
218
- <ref name="ItuGroup"/>
219
- </element>
220
- </define>
221
- <define name="ItuGroup">
222
- <optional>
223
- <attribute name="type">
224
- <ref name="ItuGroupType"/>
225
- </attribute>
226
- </optional>
227
- <ref name="tname"/>
228
- <optional>
229
- <ref name="groupacronym"/>
230
- </optional>
231
- <optional>
232
- <ref name="groupperiod"/>
233
- </optional>
234
- </define>
235
194
  <define name="ItuGroupType">
236
195
  <choice>
237
196
  <value>tsag</value>
@@ -247,13 +206,8 @@
247
206
  <value>regional-group</value>
248
207
  </choice>
249
208
  </define>
250
- <define name="groupacronym">
251
- <element name="acronym">
252
- <text/>
253
- </element>
254
- </define>
255
- <define name="groupperiod">
256
- <element name="period">
209
+ <define name="studyperiod">
210
+ <element name="studyperiod">
257
211
  <ref name="groupperiodstart"/>
258
212
  <optional>
259
213
  <ref name="groupperiodend"/>
@@ -270,11 +224,6 @@
270
224
  <data type="gYear"/>
271
225
  </element>
272
226
  </define>
273
- <define name="workgroup">
274
- <element name="workgroup">
275
- <ref name="ItuGroup"/>
276
- </element>
277
- </define>
278
227
  <define name="question">
279
228
  <element name="question">
280
229
  <element name="identifier">
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module Itu
3
- VERSION = "2.7.2".freeze
3
+ VERSION = "2.7.4".freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-itu
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.2
4
+ version: 2.7.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-08-04 00:00:00.000000000 Z
11
+ date: 2025-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: metanorma-standoc
@@ -332,6 +332,7 @@ files:
332
332
  - lib/metanorma/itu/cleanup_section.rb
333
333
  - lib/metanorma/itu/converter.rb
334
334
  - lib/metanorma/itu/front.rb
335
+ - lib/metanorma/itu/front_contrib.rb
335
336
  - lib/metanorma/itu/front_id.rb
336
337
  - lib/metanorma/itu/isodoc.rng
337
338
  - lib/metanorma/itu/itu.rng