metanorma-iso 1.3.24 → 1.3.25

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0207a8005dcd32df7bd28bcf352786a876ff8301ef7942a678d5bf75ef1bd7a0
4
- data.tar.gz: f1eb4a83fe424bc740add6d2a82e2ceaf0b11f38b34ae775108e2afa3d6d2f80
3
+ metadata.gz: 766cfd076caf6c78f48542cc22353664f2ee4667be97659e201643418b4990ad
4
+ data.tar.gz: 667d8b7ed3ac77f49a88cd74cae0eaa3f097c2d65c3ed4269806351fdc87e07e
5
5
  SHA512:
6
- metadata.gz: 181c074093254bbd29824c8af4f7f295781efe18f7ff201f8795da58c52493e30d5e38daff93b6b194e7dd379ea7186a56ae6c2d4331a18a7b7583e6157ec615
7
- data.tar.gz: 8b5afd3661cd307878b38e342235f919a9a3960727560fef059b1df4e1ed8023e3cb253b2a506d3b40ba7bf85272777aa7e49d3efe7b9c0ded44fc134e9a46ed
6
+ metadata.gz: 35ab4b8f52d75727d867920d7de2bd8696e37e38715dcc3895fe67f821311b6a13ac71e5d3a65096694ce800972e81fce5a881d861b534d911cdfcdf17d6f73f
7
+ data.tar.gz: 3d11aecb223c66aa9b2cc1c68bd9b6c227b6ea4710b3afa11556ba0351d969efcf8b39911899670aeab7af43ea6b1aeee8ba56196c575fd802fcb250cfb0a622
@@ -6,15 +6,23 @@ on:
6
6
  push:
7
7
  branches: [ master ]
8
8
  pull_request:
9
+ paths-ignore:
10
+ - .github/workflows/ubuntu.yml
11
+ - .github/workflows/windows.yml
9
12
 
10
13
  jobs:
11
14
  test-macos:
12
15
  name: Test on Ruby ${{ matrix.ruby }} macOS
13
16
  runs-on: macos-latest
17
+ continue-on-error: ${{ matrix.experimental }}
14
18
  strategy:
15
19
  fail-fast: false
16
20
  matrix:
17
21
  ruby: [ '2.6', '2.5', '2.4' ]
22
+ experimental: [false]
23
+ include:
24
+ - ruby: '2.7'
25
+ experimental: true
18
26
  steps:
19
27
  - uses: actions/checkout@master
20
28
  - name: Use Ruby
@@ -6,15 +6,23 @@ on:
6
6
  push:
7
7
  branches: [ master ]
8
8
  pull_request:
9
+ paths-ignore:
10
+ - .github/workflows/macos.yml
11
+ - .github/workflows/windows.yml
9
12
 
10
13
  jobs:
11
14
  test-linux:
12
15
  name: Test on Ruby ${{ matrix.ruby }} Ubuntu
13
16
  runs-on: ubuntu-latest
17
+ continue-on-error: ${{ matrix.experimental }}
14
18
  strategy:
15
19
  fail-fast: false
16
20
  matrix:
17
21
  ruby: [ '2.6', '2.5', '2.4' ]
22
+ experimental: [false]
23
+ include:
24
+ - ruby: '2.7'
25
+ experimental: true
18
26
  steps:
19
27
  - uses: actions/checkout@master
20
28
  - name: Use Ruby
@@ -6,15 +6,23 @@ on:
6
6
  push:
7
7
  branches: [ master ]
8
8
  pull_request:
9
+ paths-ignore:
10
+ - .github/workflows/macos.yml
11
+ - .github/workflows/ubuntu.yml
9
12
 
10
13
  jobs:
11
14
  test-windows:
12
15
  name: Test on Ruby ${{ matrix.ruby }} Windows
13
16
  runs-on: windows-latest
17
+ continue-on-error: ${{ matrix.experimental }}
14
18
  strategy:
15
19
  fail-fast: false
16
20
  matrix:
17
21
  ruby: [ '2.6', '2.5', '2.4' ]
22
+ experimental: [false]
23
+ include:
24
+ - ruby: '2.7'
25
+ experimental: true
18
26
  steps:
19
27
  - uses: actions/checkout@master
20
28
  - name: Use Ruby
@@ -36,6 +36,11 @@ module Asciidoctor
36
36
  IsoDoc::Iso::PdfConvert.new(doc_extract_attributes(node))
37
37
  end
38
38
 
39
+ def init(node)
40
+ super
41
+ @amd = %w(amendment technical-corrigendum).include? node.attr("doctype")
42
+ end
43
+
39
44
  def document(node)
40
45
  init(node)
41
46
  ret = makexml(node).to_xml(indent: 2)
@@ -88,7 +88,7 @@
88
88
  <text/>
89
89
  </element>
90
90
  </define>
91
- <define name="LocalizedString">
91
+ <define name="LocalizedString1">
92
92
  <optional>
93
93
  <!-- multiple languages and scripts possible: comma delimit them if so -->
94
94
  <attribute name="language"/>
@@ -98,6 +98,16 @@
98
98
  </optional>
99
99
  <text/>
100
100
  </define>
101
+ <define name="LocalizedString">
102
+ <choice>
103
+ <ref name="LocalizedString1"/>
104
+ <oneOrMore>
105
+ <element name="variant">
106
+ <ref name="LocalizedString1"/>
107
+ </element>
108
+ </oneOrMore>
109
+ </choice>
110
+ </define>
101
111
  <!--
102
112
  Unlike UML, change type to format: type is overloaded
103
113
  Would be need if plain were default value and could omit the attribute
@@ -121,7 +131,7 @@
121
131
  </optional>
122
132
  <ref name="LocalizedStringOrXsAny"/>
123
133
  </define>
124
- <define name="LocalizedStringOrXsAny">
134
+ <define name="LocalizedStringOrXsAny1">
125
135
  <optional>
126
136
  <!-- multiple languages and scripts possible: comma delimit them if so -->
127
137
  <attribute name="language"/>
@@ -136,6 +146,16 @@
136
146
  </choice>
137
147
  </oneOrMore>
138
148
  </define>
149
+ <define name="LocalizedStringOrXsAny">
150
+ <choice>
151
+ <ref name="LocalizedStringOrXsAny1"/>
152
+ <oneOrMore>
153
+ <element name="variant">
154
+ <ref name="LocalizedStringOrXsAny1"/>
155
+ </element>
156
+ </oneOrMore>
157
+ </choice>
158
+ </define>
139
159
  <define name="contributor">
140
160
  <element name="contributor">
141
161
  <zeroOrMore>
@@ -36,6 +36,7 @@ module Asciidoctor
36
36
  end
37
37
 
38
38
  def id_prefix(prefix, id)
39
+ return id.text if @amd # we're just inheriting the prefixes from parent doc
39
40
  prefix.join("/") + ( id.text.match(%{^/}) ? "" : " " ) + id.text
40
41
  end
41
42
 
@@ -116,6 +117,14 @@ module Asciidoctor
116
117
  "#{num.nil? ? abbrid : sprintf("%09d", num.to_i)} :: "\
117
118
  "#{partid} :: #{id&.text} :: #{title}"
118
119
  end
120
+
121
+ def sections_cleanup(x)
122
+ super
123
+ return unless @amd
124
+ x.xpath("//*[@inline-header]").each do |h|
125
+ h.delete('inline-header')
126
+ end
127
+ end
119
128
  end
120
129
  end
121
130
  end
@@ -33,15 +33,23 @@ module Asciidoctor
33
33
  "95": "Withdrawal",
34
34
  }.freeze
35
35
 
36
- def stage_abbr(stage, substage)
36
+ def stage_abbr(stage, substage, doctype)
37
37
  return nil if stage.to_i > 60
38
38
  return "PRF" if stage == "60" && substage == "00"
39
- STAGE_ABBRS[stage.to_sym]
39
+ ret = STAGE_ABBRS[stage.to_sym]
40
+ ret = "DTS" if ret == "DIS" && %w(technical-report technical-specification).include?(doctype)
41
+ ret = "FDTS" if ret == "FDIS" && %w(technical-report technical-specification).include?(doctype)
42
+ ret
40
43
  end
41
44
 
42
- def stage_name(stage, substage)
45
+ def stage_name(stage, substage, doctype)
43
46
  return "Proof" if stage == "60" && substage == "00"
44
- STAGE_NAMES[stage.to_sym]
47
+ ret = STAGE_NAMES[stage.to_sym]
48
+ if %w(technical-report technical-specification).include? doctype
49
+ ret = "Draft technical standard" if ret == "Draft international standard"
50
+ ret = "Final draft technical standard" if ret == "Final draft international standard"
51
+ end
52
+ ret
45
53
  end
46
54
 
47
55
  def metadata_id(node, xml)
@@ -53,9 +61,8 @@ module Asciidoctor
53
61
  end
54
62
 
55
63
  def iso_id(node, xml)
56
- return unless node.attr("docnumber")
57
- part, subpart = node&.attr("partnumber")&.split(/-/)
58
- dn = add_id_parts(node.attr("docnumber"), part, subpart)
64
+ return unless !@amd && node.attr("docnumber") || @amd && node.attr("updates")
65
+ dn = iso_id1(node)
59
66
  dn1 = id_stage_prefix(dn, node, false)
60
67
  dn2 = id_stage_prefix(dn, node, true)
61
68
  xml.docidentifier dn1, **attr_code(type: "iso")
@@ -63,6 +70,27 @@ module Asciidoctor
63
70
  xml.docidentifier id_langsuffix(dn2, node), **attr_code(type: "iso-reference")
64
71
  end
65
72
 
73
+ def iso_id1(node)
74
+ if @amd
75
+ dn = node.attr("updates")
76
+ return add_amd_parts(dn, node)
77
+ else
78
+ part, subpart = node&.attr("partnumber")&.split(/-/)
79
+ dn = add_id_parts(node.attr("docnumber"), part, subpart)
80
+ end
81
+ end
82
+
83
+ def add_amd_parts(dn, node)
84
+ a = node.attr("amendment-number")
85
+ c = node.attr("corrigendum-number")
86
+ case node.attr("doctype")
87
+ when "amendment"
88
+ "#{dn}/Amd.#{node.attr('amendment-number')}"
89
+ when "technical corrigendum"
90
+ "#{dn}/Cor.#{node.attr('corrigendum-number')}"
91
+ end
92
+ end
93
+
66
94
  def id_langsuffix(dn, node)
67
95
  lang = node.attr("language") || "en"
68
96
  suffix = case lang
@@ -77,7 +105,9 @@ module Asciidoctor
77
105
  def metadata_ext(node, xml)
78
106
  super
79
107
  structured_id(node, xml)
80
- xml.stagename stage_name(get_stage(node), get_substage(node))
108
+ xml.stagename stage_name(get_stage(node), get_substage(node), node.attr("doctype"))
109
+ @amd && a = node.attr("updates-document-type") and
110
+ xml.updates_document_type a
81
111
  end
82
112
 
83
113
  def structured_id(node, xml)
@@ -85,7 +115,8 @@ module Asciidoctor
85
115
  part, subpart = node&.attr("partnumber")&.split(/-/)
86
116
  xml.structuredidentifier do |i|
87
117
  i.project_number node.attr("docnumber"),
88
- **attr_code(part: part, subpart: subpart)
118
+ **attr_code(part: part, subpart: subpart, amendment: node.attr("amendment-number"),
119
+ corrigendum: node.attr("corrigendum-number"), origyr: node.attr("created-date"))
89
120
  end
90
121
  end
91
122
 
@@ -97,19 +128,27 @@ module Asciidoctor
97
128
 
98
129
  def id_stage_abbr(stage, substage, node)
99
130
  IsoDoc::Iso::Metadata.new("en", "Latn", {}).
100
- status_abbrev(stage_abbr(stage, substage), substage, node.attr("iteration"),
101
- node.attr("draft"))
131
+ status_abbrev(stage_abbr(stage, substage, node.attr("doctype")),
132
+ substage, node.attr("iteration"),
133
+ node.attr("draft"), node.attr("doctype"))
102
134
  end
103
135
 
104
136
  def id_stage_prefix(dn, node, force_year)
105
137
  stage = get_stage(node)
106
138
  substage = get_substage(node)
139
+ typeabbr = get_typeabbr(node)
107
140
  if stage && (stage.to_i < 60)
108
141
  abbr = id_stage_abbr(stage, substage, node)
109
- dn = "/#{abbr} #{dn}" unless abbr.nil? || abbr.empty? # prefixes added in cleanup
142
+ unless abbr.nil? || abbr.empty? # prefixes added in cleanup
143
+ dn = @amd ? dn.sub(/ /, "/#{abbr} ") : "/#{abbr} #{typeabbr}#{dn}"
144
+ end
145
+ elsif typeabbr && !@amd
146
+ dn = "/#{typeabbr}#{dn}"
110
147
  end
111
148
  if force_year || !(stage && (stage.to_i < 60))
112
- dn += ":#{node.attr("copyright-year")}" if node.attr("copyright-year")
149
+ year = @amd ? (node.attr("copyright-year") || node.attr("updated-date").sub(/-.*$/, "")) :
150
+ node.attr("copyright-year")
151
+ dn += ":#{year}" if year
113
152
  end
114
153
  dn
115
154
  end
@@ -169,11 +208,20 @@ module Asciidoctor
169
208
  node.attr("docsubstage") || ( stage == "60" ? "60" : "00" )
170
209
  end
171
210
 
211
+ def get_typeabbr(node)
212
+ case node.attr("doctype")
213
+ when "technical-report" then "TR "
214
+ when "technical-specification" then "TS "
215
+ else
216
+ nil
217
+ end
218
+ end
219
+
172
220
  def metadata_status(node, xml)
173
221
  stage = get_stage(node)
174
222
  substage = get_substage(node)
175
223
  xml.status do |s|
176
- s.stage stage, **attr_code(abbreviation: stage_abbr(stage, substage))
224
+ s.stage stage, **attr_code(abbreviation: stage_abbr(stage, substage, node.attr("doctype")))
177
225
  s.substage substage
178
226
  node.attr("iteration") && (s.iteration node.attr("iteration"))
179
227
  end
@@ -208,12 +256,21 @@ module Asciidoctor
208
256
  end
209
257
  end
210
258
 
259
+ def title_amd(node, t, lang, at)
260
+ return unless node.attr("title-amendment-#{lang}")
261
+ t.title(**attr_code(at.merge(type: "title-amd"))) do |t1|
262
+ t1 << Asciidoctor::Standoc::Utils::asciidoc_sub(node.attr("title-amendment-#{lang}"))
263
+ end
264
+ end
265
+
211
266
  def title_full(node, t, lang, at)
212
267
  title = node.attr("title-main-#{lang}")
213
268
  intro = node.attr("title-intro-#{lang}")
214
269
  part = node.attr("title-part-#{lang}")
270
+ amd = node.attr("title-amendment-#{lang}")
215
271
  title = "#{intro} -- #{title}" if intro
216
272
  title = "#{title} -- #{part}" if part
273
+ title = "#{title} -- #{amd}" if amd && @amd
217
274
  t.title **attr_code(at.merge(type: "main")) do |t1|
218
275
  t1 << Asciidoctor::Standoc::Utils::asciidoc_sub(title)
219
276
  end
@@ -226,6 +283,7 @@ module Asciidoctor
226
283
  title_intro(node, xml, lang, at)
227
284
  title_main(node, xml, lang, at)
228
285
  title_part(node, xml, lang, at)
286
+ title_amd(node, xml, lang, at) if @amd
229
287
  end
230
288
  end
231
289
  end
@@ -0,0 +1,98 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <grammar ns="https://www.metanorma.org/ns/iso" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
3
+ <!-- default namespace isostandard = "https://www.metanorma.com/ns/iso" -->
4
+ <include href="isostandard.rng">
5
+ <start>
6
+ <ref name="iso-standard"/>
7
+ </start>
8
+ <define name="sections">
9
+ <element name="sections">
10
+ <oneOrMore>
11
+ <ref name="clause"/>
12
+ </oneOrMore>
13
+ </element>
14
+ </define>
15
+ <define name="clause">
16
+ <element name="clause">
17
+ <optional>
18
+ <attribute name="type"/>
19
+ </optional>
20
+ <optional>
21
+ <attribute name="change">
22
+ <choice>
23
+ <value>add</value>
24
+ <value>delete</value>
25
+ <value>modify</value>
26
+ </choice>
27
+ </attribute>
28
+ </optional>
29
+ <optional>
30
+ <attribute name="locality"/>
31
+ </optional>
32
+ <ref name="Clause-Section"/>
33
+ </element>
34
+ </define>
35
+ <define name="iso-standard">
36
+ <element name="iso-standard">
37
+ <ref name="bibdata"/>
38
+ <optional>
39
+ <ref name="boilerplate"/>
40
+ </optional>
41
+ <ref name="preface"/>
42
+ <oneOrMore>
43
+ <ref name="sections"/>
44
+ </oneOrMore>
45
+ </element>
46
+ </define>
47
+ <define name="documentnumber">
48
+ <element name="project-number">
49
+ <optional>
50
+ <attribute name="part">
51
+ <data type="int"/>
52
+ </attribute>
53
+ </optional>
54
+ <optional>
55
+ <attribute name="subpart">
56
+ <data type="int"/>
57
+ </attribute>
58
+ </optional>
59
+ <optional>
60
+ <attribute name="amendment">
61
+ <data type="int"/>
62
+ </attribute>
63
+ </optional>
64
+ <optional>
65
+ <attribute name="corrigendum">
66
+ <data type="int"/>
67
+ </attribute>
68
+ </optional>
69
+ <optional>
70
+ <attribute name="origyr">
71
+ <data type="int"/>
72
+ </attribute>
73
+ </optional>
74
+ <text/>
75
+ </element>
76
+ </define>
77
+ <define name="BibDataExtensionType">
78
+ <ref name="doctype"/>
79
+ <ref name="editorialgroup"/>
80
+ <zeroOrMore>
81
+ <ref name="ics"/>
82
+ </zeroOrMore>
83
+ <ref name="structuredidentifier"/>
84
+ <optional>
85
+ <ref name="stagename"/>
86
+ </optional>
87
+ <optional>
88
+ <ref name="updates_document_type"/>
89
+ </optional>
90
+ </define>
91
+ </include>
92
+ <!-- end overrides -->
93
+ <define name="updates_document_type">
94
+ <element name="updates-document-type">
95
+ <ref name="DocumentType"/>
96
+ </element>
97
+ </define>
98
+ </grammar>
@@ -263,6 +263,8 @@
263
263
  <value>publicly-available-specification</value>
264
264
  <value>international-workshop-agreement</value>
265
265
  <value>guide</value>
266
+ <value>amendment</value>
267
+ <value>technical-corrigendum</value>
266
268
  </choice>
267
269
  </define>
268
270
  <define name="structuredidentifier">