metanorma-iso 2.9.5 → 3.0.0
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.
- checksums.yaml +4 -4
- data/lib/isodoc/iso/iso.amendment.xsl +551 -203
- data/lib/isodoc/iso/iso.international-standard.xsl +551 -203
- data/lib/isodoc/iso/presentation_terms.rb +3 -2
- data/lib/isodoc/iso/presentation_xml_convert.rb +21 -3
- data/lib/isodoc/iso/xref.rb +21 -3
- data/lib/metanorma/iso/biblio.rng +2 -0
- data/lib/metanorma/iso/cleanup.rb +2 -1
- data/lib/metanorma/iso/front_id.rb +8 -6
- data/lib/metanorma/iso/isodoc.rng +12 -6
- data/lib/metanorma/iso/isostandard-amd.rng +3 -6
- data/lib/metanorma/iso/isostandard-compile.rng +1 -2
- data/lib/metanorma/iso/isostandard.rng +30 -33
- data/lib/metanorma/iso/relaton-iso.rng +21 -13
- data/lib/metanorma/iso/version.rb +1 -1
- data/lib/metanorma/requirements/modspec.rb +16 -28
- data/metanorma-iso.gemspec +1 -1
- metadata +4 -4
@@ -9,8 +9,9 @@ module IsoDoc
|
|
9
9
|
class PresentationXMLConvert < IsoDoc::PresentationXMLConvert
|
10
10
|
def concept(docxml)
|
11
11
|
concept_term(docxml)
|
12
|
-
docxml.xpath(ns("//concept"))
|
13
|
-
|
12
|
+
(docxml.xpath(ns("//concept")) - docxml.xpath(ns("//term//concept")))
|
13
|
+
.each do |node|
|
14
|
+
node.ancestors("definition, termsource, related").empty? and
|
14
15
|
concept_render(node, ital: "false", ref: "false",
|
15
16
|
linkref: "true", linkmention: "false")
|
16
17
|
end
|
@@ -207,22 +207,40 @@ module IsoDoc
|
|
207
207
|
def table1(elem)
|
208
208
|
table1_key(elem)
|
209
209
|
if elem["class"] == "modspec"
|
210
|
-
n = elem.at(ns(".//fmt-name"))
|
211
|
-
|
210
|
+
if n = elem.at(ns(".//fmt-name"))
|
211
|
+
n.remove.name = "name"
|
212
212
|
elem.add_first_child(n)
|
213
|
+
end
|
213
214
|
elem.at(ns("./thead"))&.remove
|
214
215
|
super
|
215
|
-
elem.at(ns("./name"))
|
216
|
+
elem.at(ns("./name"))&.remove
|
217
|
+
table1_fmt_xref_modspec(elem)
|
216
218
|
else super
|
217
219
|
end
|
218
220
|
end
|
219
221
|
|
222
|
+
def table1_fmt_xref_modspec(elem)
|
223
|
+
p = elem.parent.parent.at(ns("./fmt-xref-label"))
|
224
|
+
t = elem.at(ns("./fmt-xref-label"))&.remove or return
|
225
|
+
n = t.at(ns("./span[@class='fmt-element-name'][2]")) or return
|
226
|
+
while i = n.next
|
227
|
+
i.remove
|
228
|
+
end
|
229
|
+
n.remove
|
230
|
+
p.children.first.previous = to_xml(t.children)
|
231
|
+
end
|
232
|
+
|
220
233
|
def table1_key(elem)
|
221
234
|
elem.xpath(ns(".//dl[@key = 'true'][not(./name)]")).each do |dl|
|
222
235
|
dl.add_first_child "<name>#{@i18n.key}</name>"
|
223
236
|
end
|
224
237
|
end
|
225
238
|
|
239
|
+
def labelled_ancestor(elem, exceptions = [])
|
240
|
+
elem["class"] == "modspec" and return false
|
241
|
+
super
|
242
|
+
end
|
243
|
+
|
226
244
|
def toc_title(docxml)
|
227
245
|
%w(amendment technical-corrigendum).include?(@doctype) and return
|
228
246
|
super
|
data/lib/isodoc/iso/xref.rb
CHANGED
@@ -197,15 +197,16 @@ module IsoDoc
|
|
197
197
|
end
|
198
198
|
|
199
199
|
def modspec_table_components_xrefs(table, table_label, container: false)
|
200
|
-
table.xpath(ns(".//tr[@id]")).each do |tr|
|
200
|
+
table.xpath(ns(".//tr[@id] | .//td[@id] | .//bookmark[@id]")).each do |tr|
|
201
201
|
xref_to_modspec(tr["id"], table_label) or next
|
202
202
|
container or @anchors[tr["id"]].delete(:container)
|
203
203
|
end
|
204
204
|
end
|
205
205
|
|
206
206
|
def xref_to_modspec(id, table_label)
|
207
|
-
(@anchors[id] && !@anchors[id][:has_modspec]) or return
|
208
|
-
@anchors[id][:
|
207
|
+
#(@anchors[id] && !@anchors[id][:has_modspec]) or return
|
208
|
+
(@anchors[id] && !@anchors[id][:has_table_prefix]) or return
|
209
|
+
@anchors[id][:has_table_prefix] = true
|
209
210
|
x = @anchors_previous[id][:xref_bare] || @anchors_previous[id][:xref]
|
210
211
|
# @anchors[id][:xref] = l10n("#{table_label}<span class='fmt-comma'>,</span> #{x}")
|
211
212
|
|
@@ -217,6 +218,17 @@ module IsoDoc
|
|
217
218
|
true
|
218
219
|
end
|
219
220
|
|
221
|
+
def bookmark_anchor_names(xml)
|
222
|
+
xml.xpath(ns(".//bookmark")).noblank.each do |n|
|
223
|
+
@anchors.dig(n["id"], :has_table_prefix) and next
|
224
|
+
_parent, id = id_ancestor(n)
|
225
|
+
# container = bookmark_container(parent)
|
226
|
+
@anchors[n["id"]] = { type: "bookmark", label: nil, value: nil,
|
227
|
+
xref: @anchors.dig(id, :xref) || "???",
|
228
|
+
container: @anchors.dig(id, :container) }
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
220
232
|
def hierarchical_table_names(clause, _num)
|
221
233
|
super
|
222
234
|
modspec_table_xrefs(clause) if @anchors_previous
|
@@ -235,6 +247,12 @@ module IsoDoc
|
|
235
247
|
{ unnum: false, container: true })
|
236
248
|
end
|
237
249
|
end
|
250
|
+
|
251
|
+
# KILL
|
252
|
+
def sequential_permission_childrenx(elem, lbl, klass, container: false)
|
253
|
+
container = true
|
254
|
+
super
|
255
|
+
end
|
238
256
|
end
|
239
257
|
end
|
240
258
|
end
|
@@ -947,6 +947,8 @@ May be electronic (e.g. Twitter direct message, email) or voice (e.g. a remark m
|
|
947
947
|
typically cited as "personal communication")</a:documentation>
|
948
948
|
<value>conversation</value>
|
949
949
|
<a:documentation>An exchange of messages between two or more persons. May be electronic (e.g. web chat) or voice (e.g. phone call)</a:documentation>
|
950
|
+
<value>collection</value>
|
951
|
+
<a:documentation>A compound resource consisting of other resources, which are themselves presupposed to have their type specified..</a:documentation>
|
950
952
|
<value>misc</value>
|
951
953
|
<a:documentation>Bibliographic type not adequately described in the foregoing</a:documentation>
|
952
954
|
</choice>
|
@@ -42,7 +42,8 @@ module Metanorma
|
|
42
42
|
end
|
43
43
|
|
44
44
|
TERM_CLAUSE =
|
45
|
-
"//sections
|
45
|
+
"//sections/terms | " \
|
46
|
+
"//sections/clause//terms[not(preceding-sibling::clause)] | " \
|
46
47
|
"//sections//clause[descendant::terms][not(descendant::definitions)][@type = 'terms'] | " \
|
47
48
|
"//sections/clause[not(@type = 'terms')][not(descendant::definitions)]//terms".freeze
|
48
49
|
|
@@ -187,9 +187,10 @@ module Metanorma
|
|
187
187
|
|
188
188
|
def iso_id_default(params)
|
189
189
|
params_nolang = params.dup.tap { |hs| hs.delete(:language) }
|
190
|
-
params1 = if params[:unpublished]
|
191
|
-
params_nolang.dup.tap { |hs| hs.delete(:year) }
|
192
|
-
else params_nolang end
|
190
|
+
#params1 = if params[:unpublished]
|
191
|
+
#params_nolang.dup.tap { |hs| hs.delete(:year) }
|
192
|
+
#else params_nolang end
|
193
|
+
params1 = params_nolang
|
193
194
|
params1.delete(:unpublished)
|
194
195
|
pubid_select(params1).create(**params1)
|
195
196
|
end
|
@@ -204,9 +205,10 @@ module Metanorma
|
|
204
205
|
end
|
205
206
|
|
206
207
|
def iso_id_with_lang(params)
|
207
|
-
params1 = if params[:unpublished]
|
208
|
-
params.dup.tap { |hs| hs.delete(:year) }
|
209
|
-
else params end
|
208
|
+
#params1 = if params[:unpublished]
|
209
|
+
#params.dup.tap { |hs| hs.delete(:year) }
|
210
|
+
#else params end
|
211
|
+
params1 = params
|
210
212
|
params1.delete(:unpublished)
|
211
213
|
pubid_select(params1).create(**params1)
|
212
214
|
end
|
@@ -17,7 +17,7 @@
|
|
17
17
|
these elements; we just want one namespace for any child grammars
|
18
18
|
of this.
|
19
19
|
-->
|
20
|
-
<!-- VERSION
|
20
|
+
<!-- VERSION v2.0.0 -->
|
21
21
|
<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">
|
22
22
|
<include href="reqt.rng"/>
|
23
23
|
<include href="basicdoc.rng">
|
@@ -459,11 +459,14 @@ gives an explicit page orientation</a:documentation>
|
|
459
459
|
<a:documentation>Description of location in a reference, which can be combined with other locations in a single citation</a:documentation>
|
460
460
|
</ref>
|
461
461
|
</zeroOrMore>
|
462
|
-
<
|
463
|
-
<
|
462
|
+
<optional>
|
463
|
+
<element name="display-text">
|
464
464
|
<a:documentation>The textual content of the element. The `text` is what we wish to show the link as (e.g., the "content" of `<xx>my link text</xx>`)</a:documentation>
|
465
|
-
|
466
|
-
|
465
|
+
<oneOrMore>
|
466
|
+
<ref name="PureTextElement"/>
|
467
|
+
</oneOrMore>
|
468
|
+
</element>
|
469
|
+
</optional>
|
467
470
|
</define>
|
468
471
|
</include>
|
469
472
|
<!-- end overrides -->
|
@@ -1205,10 +1208,13 @@ numbers</a:documentation>
|
|
1205
1208
|
<value>presentation</value>
|
1206
1209
|
</choice>
|
1207
1210
|
</attribute>
|
1211
|
+
<attribute name="flavor">
|
1212
|
+
<a:documentation>Metanorma flavor, indicating SDO whose requiremnts the realisation aligns to</a:documentation>
|
1213
|
+
</attribute>
|
1208
1214
|
</define>
|
1209
1215
|
<define name="standard-document">
|
1210
1216
|
<a:documentation>Representation of a standardisation document</a:documentation>
|
1211
|
-
<element name="
|
1217
|
+
<element name="metanorma">
|
1212
1218
|
<ref name="Root-Attributes"/>
|
1213
1219
|
<ref name="bibdata">
|
1214
1220
|
<a:documentation>Bibliographic description of the document itself, expressed in the Relaton model</a:documentation>
|
@@ -1,14 +1,11 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<grammar ns="https://www.metanorma.org/ns/
|
2
|
+
<grammar ns="https://www.metanorma.org/ns/standoc" xmlns="http://relaxng.org/ns/structure/1.0">
|
3
3
|
<!--
|
4
4
|
VERSION v1.2.1
|
5
5
|
default namespace isostandard = "https://www.metanorma.com/ns/iso"
|
6
6
|
-->
|
7
7
|
<include href="relaton-iso.rng"/>
|
8
8
|
<include href="isostandard.rng">
|
9
|
-
<start>
|
10
|
-
<ref name="iso-standard"/>
|
11
|
-
</start>
|
12
9
|
<define name="sections">
|
13
10
|
<element name="sections">
|
14
11
|
<oneOrMore>
|
@@ -33,8 +30,8 @@
|
|
33
30
|
<ref name="Clause-Section"/>
|
34
31
|
</element>
|
35
32
|
</define>
|
36
|
-
<define name="
|
37
|
-
<element name="
|
33
|
+
<define name="standard-document">
|
34
|
+
<element name="metanorma">
|
38
35
|
<ref name="Root-Attributes"/>
|
39
36
|
<ref name="bibdata"/>
|
40
37
|
<optional>
|
@@ -1,6 +1,5 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<grammar ns="https://www.metanorma.org/ns/
|
3
|
-
<!-- default namespace isostandard = "https://www.metanorma.com/ns/iso" -->
|
2
|
+
<grammar ns="https://www.metanorma.org/ns/standoc" xmlns="http://relaxng.org/ns/structure/1.0">
|
4
3
|
<include href="relaton-iso.rng"/>
|
5
4
|
<include href="isostandard.rng"/>
|
6
5
|
</grammar>
|
@@ -5,9 +5,6 @@
|
|
5
5
|
default namespace isostandard = "https://www.metanorma.com/ns/iso"
|
6
6
|
-->
|
7
7
|
<include href="isodoc.rng">
|
8
|
-
<start>
|
9
|
-
<ref name="iso-standard"/>
|
10
|
-
</start>
|
11
8
|
<define name="sections">
|
12
9
|
<element name="sections">
|
13
10
|
<zeroOrMore>
|
@@ -238,38 +235,38 @@
|
|
238
235
|
</oneOrMore>
|
239
236
|
</choice>
|
240
237
|
</define>
|
238
|
+
<!--
|
239
|
+
We display the Normative References between scope and terms; but to keep the
|
240
|
+
grammar simple, we keep the references together
|
241
|
+
-->
|
242
|
+
<define name="standard-document">
|
243
|
+
<element name="metanorma">
|
244
|
+
<ref name="Root-Attributes"/>
|
245
|
+
<ref name="bibdata"/>
|
246
|
+
<zeroOrMore>
|
247
|
+
<ref name="termdocsource"/>
|
248
|
+
</zeroOrMore>
|
249
|
+
<optional>
|
250
|
+
<ref name="misccontainer"/>
|
251
|
+
</optional>
|
252
|
+
<optional>
|
253
|
+
<ref name="boilerplate"/>
|
254
|
+
</optional>
|
255
|
+
<ref name="preface"/>
|
256
|
+
<oneOrMore>
|
257
|
+
<ref name="sections"/>
|
258
|
+
</oneOrMore>
|
259
|
+
<zeroOrMore>
|
260
|
+
<ref name="annex"/>
|
261
|
+
</zeroOrMore>
|
262
|
+
<ref name="bibliography"/>
|
263
|
+
<zeroOrMore>
|
264
|
+
<ref name="indexsect"/>
|
265
|
+
</zeroOrMore>
|
266
|
+
</element>
|
267
|
+
</define>
|
241
268
|
</include>
|
242
269
|
<!-- end overrides -->
|
243
|
-
<!--
|
244
|
-
We display the Normative References between scope and terms; but to keep the
|
245
|
-
grammar simple, we keep the references together
|
246
|
-
-->
|
247
|
-
<define name="iso-standard">
|
248
|
-
<element name="iso-standard">
|
249
|
-
<ref name="Root-Attributes"/>
|
250
|
-
<ref name="bibdata"/>
|
251
|
-
<zeroOrMore>
|
252
|
-
<ref name="termdocsource"/>
|
253
|
-
</zeroOrMore>
|
254
|
-
<optional>
|
255
|
-
<ref name="misccontainer"/>
|
256
|
-
</optional>
|
257
|
-
<optional>
|
258
|
-
<ref name="boilerplate"/>
|
259
|
-
</optional>
|
260
|
-
<ref name="preface"/>
|
261
|
-
<oneOrMore>
|
262
|
-
<ref name="sections"/>
|
263
|
-
</oneOrMore>
|
264
|
-
<zeroOrMore>
|
265
|
-
<ref name="annex"/>
|
266
|
-
</zeroOrMore>
|
267
|
-
<ref name="bibliography"/>
|
268
|
-
<zeroOrMore>
|
269
|
-
<ref name="indexsect"/>
|
270
|
-
</zeroOrMore>
|
271
|
-
</element>
|
272
|
-
</define>
|
273
270
|
<define name="clause-hanging-paragraph-with-footnote">
|
274
271
|
<element name="clause">
|
275
272
|
<optional>
|
@@ -63,19 +63,13 @@
|
|
63
63
|
</choice>
|
64
64
|
</element>
|
65
65
|
</define>
|
66
|
-
<define name="
|
67
|
-
<
|
68
|
-
<
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
</
|
73
|
-
<optional>
|
74
|
-
<ref name="workgroup"/>
|
75
|
-
</optional>
|
76
|
-
<optional>
|
77
|
-
<ref name="secretariat"/>
|
78
|
-
</optional>
|
66
|
+
<define name="organization">
|
67
|
+
<element name="organization">
|
68
|
+
<choice>
|
69
|
+
<ref name="OrganizationType"/>
|
70
|
+
<ref name="IsoOrganizationType"/>
|
71
|
+
</choice>
|
72
|
+
</element>
|
79
73
|
</define>
|
80
74
|
<define name="DocumentType">
|
81
75
|
<choice>
|
@@ -225,4 +219,18 @@
|
|
225
219
|
<text/>
|
226
220
|
</element>
|
227
221
|
</define>
|
222
|
+
<define name="IsoOrganizationType">
|
223
|
+
<optional>
|
224
|
+
<ref name="technical-committee"/>
|
225
|
+
</optional>
|
226
|
+
<optional>
|
227
|
+
<ref name="subcommittee"/>
|
228
|
+
</optional>
|
229
|
+
<optional>
|
230
|
+
<ref name="workgroup"/>
|
231
|
+
</optional>
|
232
|
+
<optional>
|
233
|
+
<ref name="secretariat"/>
|
234
|
+
</optional>
|
235
|
+
</define>
|
228
236
|
</grammar>
|
@@ -2,35 +2,19 @@ module Metanorma
|
|
2
2
|
class Requirements
|
3
3
|
class Modspec
|
4
4
|
class Iso < ::Metanorma::Requirements::Modspec
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
return
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
require "debug"; binding.b
|
15
|
-
l10n(lbl)
|
16
|
-
end
|
17
|
-
|
18
|
-
# ISO labels modspec reqt as table, with reqt label as title
|
19
|
-
def recommendation_header(reqt, out)
|
20
|
-
n = reqt.at(ns("./fmt-name")) and out << n
|
21
|
-
out
|
22
|
-
end
|
23
|
-
=end
|
24
|
-
|
25
|
-
def requirement_table_nested_cleanup(node, table)
|
26
|
-
table["type"] == "recommendclass" or return table
|
27
|
-
ins = table.at(ns("./tbody/tr[td/table]")) or return table
|
28
|
-
ins.replace(requirement_table_cleanup_nested_replacement(node, table))
|
29
|
-
table.xpath(ns("./tbody/tr[td/table]")).each(&:remove)
|
5
|
+
def requirement_table_nested_cleanup(node, out, table)
|
6
|
+
(out.xpath(ns(".//table")) - out.xpath(ns("./fmt-provision/table"))).each do |x|
|
7
|
+
x["unnumbered"] = "true"
|
8
|
+
end
|
9
|
+
table["type"] == "recommendclass" or return super # table
|
10
|
+
ins = table.at(ns("./tbody/tr[td/*/fmt-provision/table]")) or return table
|
11
|
+
ins.replace(requirement_table_cleanup_nested_replacement(node, out, table))
|
12
|
+
table.xpath(ns("./tbody/tr[td/*/fmt-provision/table]")).each(&:remove)
|
13
|
+
out.xpath(ns("./*/fmt-provision")).each(&:remove)
|
30
14
|
table
|
31
15
|
end
|
32
16
|
|
33
|
-
def requirement_table_cleanup_nested_replacement(node, table)
|
17
|
+
def requirement_table_cleanup_nested_replacement(node, out, table)
|
34
18
|
label = "provision"
|
35
19
|
node["type"] == "conformanceclass" and label = "conformancetest"
|
36
20
|
n = nested_tables_names(table)
|
@@ -40,14 +24,18 @@ module Metanorma
|
|
40
24
|
end
|
41
25
|
|
42
26
|
def nested_tables_names(table)
|
43
|
-
table.xpath(ns("./tbody/tr/td/table"))
|
27
|
+
table.xpath(ns("./tbody/tr/td/*/fmt-provision/table"))
|
44
28
|
.each_with_object([]) do |t, m|
|
45
|
-
|
29
|
+
id = t["original-id"] || t["id"]
|
30
|
+
id and b = "<bookmark id='#{id}'/>"
|
31
|
+
m << b + to_xml(t.at(ns(".//fmt-name")).children).strip
|
46
32
|
end
|
47
33
|
end
|
48
34
|
|
49
35
|
def postprocess_anchor_struct(block, anchor)
|
50
36
|
super
|
37
|
+
t = block.at(ns("./fmt-provision/table")) and
|
38
|
+
anchor[:container] = t["id"]
|
51
39
|
anchor[:modspec] = anchor[:xref_bare]
|
52
40
|
if l = block.at(ns("./title"))
|
53
41
|
anchor[:modspec] =
|
data/metanorma-iso.gemspec
CHANGED
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.test_files = `git ls-files -- {spec}/*`.split("\n")
|
33
33
|
spec.required_ruby_version = Gem::Requirement.new(">= 3.1.0")
|
34
34
|
|
35
|
-
spec.add_dependency "metanorma-standoc", "~>
|
35
|
+
spec.add_dependency "metanorma-standoc", "~> 3.0.0"
|
36
36
|
spec.add_dependency "mnconvert", "~> 1.14"
|
37
37
|
spec.add_dependency "pubid"
|
38
38
|
spec.add_dependency "tokenizer", "~> 0.3.0"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metanorma-iso
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: metanorma-standoc
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 3.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 3.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: mnconvert
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|