metanorma-iso 2.1.9 → 2.2.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/i18n-fr.yaml +0 -1
- data/lib/isodoc/iso/i18n-zh-Hans.yaml +0 -1
- data/lib/isodoc/iso/init.rb +15 -10
- data/lib/isodoc/iso/iso.amendment.xsl +77 -14
- data/lib/isodoc/iso/iso.international-standard.xsl +77 -14
- data/lib/isodoc/iso/metadata.rb +1 -1
- data/lib/isodoc/iso/presentation_xref.rb +1 -0
- data/lib/isodoc/iso/word_convert.rb +6 -0
- data/lib/isodoc/iso/xref.rb +6 -11
- data/lib/metanorma/iso/biblio.rng +32 -1
- data/lib/metanorma/iso/front_id.rb +2 -2
- data/lib/metanorma/iso/version.rb +1 -1
- data/lib/metanorma/iso.rb +0 -1
- data/lib/metanorma/requirements/modspec.rb +67 -4
- data/lib/metanorma-iso.rb +1 -0
- data/lib/relaton/render/config.yml +53 -1
- data/metanorma-iso.gemspec +1 -1
- data/spec/isodoc/i18n_spec.rb +2 -2
- data/spec/isodoc/ref_spec.rb +4 -4
- data/spec/relaton/render_spec.rb +568 -0
- data/spec/requirements/requirement_components_spec.rb +622 -0
- data/spec/requirements/requirements_spec.rb +434 -52
- data/spec/requirements/xref_spec.rb +6 -0
- data/spec/vcr_cassettes/docrels.yml +34 -34
- data/spec/vcr_cassettes/withdrawn_iso.yml +29 -29
- metadata +6 -4
@@ -3,12 +3,20 @@ module Metanorma
|
|
3
3
|
class Modspec
|
4
4
|
# Don't want to inherit from Metanorma::Requirements::Modspec
|
5
5
|
class Iso < ::Metanorma::Requirements::Modspec
|
6
|
+
def recommendation_label_xref(elem, label, xrefs, _type)
|
7
|
+
id = @reqtlabels[label]
|
8
|
+
number = xrefs.anchor(id, :xref_reqt2reqt, false)
|
9
|
+
number.nil? and return type
|
10
|
+
elem.ancestors("requirement, recommendation, permission").empty? and
|
11
|
+
return number
|
12
|
+
"<xref target='#{id}'>#{number}</xref>"
|
13
|
+
end
|
14
|
+
|
6
15
|
def recommendation_label(elem, type, xrefs)
|
7
16
|
lbl = super
|
8
17
|
title = elem.at(ns("./title"))
|
9
|
-
return lbl unless title
|
10
|
-
|
11
|
-
# elem.ancestors("requirement, recommendation, permission").empty?
|
18
|
+
return lbl unless title &&
|
19
|
+
elem.ancestors("requirement, recommendation, permission").empty?
|
12
20
|
|
13
21
|
lbl += l10n(": ") if lbl
|
14
22
|
lbl += title.children.to_xml
|
@@ -30,7 +38,7 @@ module Metanorma
|
|
30
38
|
def requirement_component_parse(node, out)
|
31
39
|
if node["exclude"] != "true" && node.name == "description"
|
32
40
|
lbl = "statement"
|
33
|
-
lbl = "
|
41
|
+
lbl = "description" if recommend_class(node.parent) == "recommendclass"
|
34
42
|
out << "<tr><td>#{@labels['modspec'][lbl]}</td>"\
|
35
43
|
"<td>#{node.children.to_xml}</td></tr>"
|
36
44
|
else
|
@@ -54,6 +62,61 @@ module Metanorma
|
|
54
62
|
m << t.at(ns("./name")).children.to_xml
|
55
63
|
end.join("<br/>")
|
56
64
|
end
|
65
|
+
|
66
|
+
def postprocess_anchor_struct(block, anchor)
|
67
|
+
super
|
68
|
+
anchor[:xref_reqt2reqt] = anchor[:xref_bare]
|
69
|
+
if l = block.at(ns("./title"))
|
70
|
+
anchor[:xref_reqt2reqt] +=
|
71
|
+
l10n(": ") + l.children.to_xml.strip
|
72
|
+
end
|
73
|
+
anchor
|
74
|
+
end
|
75
|
+
|
76
|
+
def reqt_ids(docxml)
|
77
|
+
docxml.xpath(ns("//requirement | //recommendation | //permission"))
|
78
|
+
.each_with_object({}) do |r, m|
|
79
|
+
id = r.at(ns("./identifier")) or next
|
80
|
+
m[id.text] =
|
81
|
+
{ id: r["id"],
|
82
|
+
lbl: @xrefs.anchor(r["id"], :xref_reqt2reqt, false) }
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def reqt_links_test(docxml)
|
87
|
+
docxml.xpath(ns("//requirement | //recommendation | //permission"))
|
88
|
+
.each_with_object({}) do |r, m|
|
89
|
+
next unless %w(conformanceclass
|
90
|
+
verification).include?(r["type"])
|
91
|
+
|
92
|
+
subj = r.at(ns("./classification[tag = 'target']/value"))
|
93
|
+
id = r.at(ns("./identifier")) or next
|
94
|
+
lbl = @xrefs.anchor(@reqt_ids[id.text.strip][:id], :xref_reqt2reqt,
|
95
|
+
false)
|
96
|
+
next unless subj
|
97
|
+
|
98
|
+
m[subj.text] = { lbl: lbl, id: r["id"] }
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def reqt_links_class(docxml)
|
103
|
+
docxml.xpath(ns("//requirement | //recommendation | //permission"))
|
104
|
+
.each_with_object({}) do |r, m|
|
105
|
+
next unless %w(class
|
106
|
+
conformanceclass).include?(r["type"])
|
107
|
+
|
108
|
+
id = r.at(ns("./identifier")) or next
|
109
|
+
r.xpath(ns("./requirement | ./recommendation | ./permission"))
|
110
|
+
.each do |r1|
|
111
|
+
id1 = r1.at(ns("./identifier")) or next
|
112
|
+
lbl = @xrefs.anchor(@reqt_ids[id.text.strip][:id],
|
113
|
+
:xref_reqt2reqt, false)
|
114
|
+
next unless lbl
|
115
|
+
|
116
|
+
m[id1.text] = { lbl: lbl, id: r["id"] }
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
57
120
|
end
|
58
121
|
end
|
59
122
|
end
|
data/lib/metanorma-iso.rb
CHANGED
@@ -10,6 +10,7 @@ require_relative "isodoc/iso/isosts_convert"
|
|
10
10
|
require_relative "isodoc/iso/presentation_xml_convert"
|
11
11
|
require_relative "html2doc/lists"
|
12
12
|
require "asciidoctor/extensions"
|
13
|
+
require "metanorma"
|
13
14
|
|
14
15
|
if defined? Metanorma::Registry
|
15
16
|
require_relative "metanorma/iso"
|
@@ -1,4 +1,56 @@
|
|
1
|
+
extenttemplate:
|
2
|
+
book: "{{ volume }} {{ page }}"
|
3
|
+
booklet: book
|
4
|
+
proceedings: book
|
5
|
+
journal: book
|
6
|
+
standard: book
|
7
|
+
techreport: book
|
8
|
+
inbook: "{{ volume }} {{ page }}"
|
9
|
+
misc: "{{ volume }} {{issue}} {{ page }}, {{ duration }}"
|
10
|
+
nametemplate:
|
11
|
+
one: "{% if nonpersonal[0] %}{{ nonpersonal[0] }}{% else %}{{surname[0]}} {{initials[0] | join: ''}}.{% endif %}"
|
12
|
+
two: "{% if nonpersonal[0] %}{{ nonpersonal[0] }}{% else %}{{surname[0]}} {{initials[0] | join: ''}}.{% endif %} , & {% if nonpersonal[1] %}{{ nonpersonal[1] }}{% else %}{{surname[1]}} {{initials[1] | join: ''}}.{% endif %}"
|
13
|
+
more: "{% if nonpersonal[0] %}{{ nonpersonal[0] }}{% else %}{{surname[0]}} {{initials[0] | join: ''}}.{% endif %} , {% if nonpersonal[1] %}{{ nonpersonal[1] }}{% else %}{{surname[1]}} {{initials[1] | join: ''}}. {% endif %} , & {% if nonpersonal[2] %}{{ nonpersonal[2] }}{% else %}{{surname[2]}} {{initials[2] | join: ''}}.{% endif %}"
|
14
|
+
# disabled the following: they should be provided in inheriting calls
|
15
|
+
# etal: "{% if nonpersonal[0] %}{{ nonpersonal[0] }}{% else %}{{surname[0] | upcase}} ,_{%if given[0]%}{{given[0]}} {{middle[0]}}{%else%}{{initials[0] | join: ' '}}.{%endif%}{% endif %}, {% if nonpersonal[1] %}{{ nonpersonal[1] }}{% else %}{%if given[1]%}{{given[1]}} {{middle[1]}}{%else%}{{initials[1] | join: ' '}}.{%endif%} {{surname[1] | upcase}}{% endif %} <em>et al.</em>"
|
16
|
+
# etal_count: 5
|
17
|
+
seriestemplate: "{% if series_formatted %}{{ series_formatted }}{%else%}{% if series_abbr %}{{series_abbr}}{% else %}{{series_title}}{% endif %} ({{series_run}}) {{series_num}}|({{series_partnumber}}){%endif%}"
|
18
|
+
journaltemplate: "<em>{% if series_abbr %}{{series_abbr}}{% else %}{{series_title}}{% endif %}</em> ({{series_run}}) {{ labels['volume'] }}_{{series_num}} {{ labels['part'] }}_{{series_partnumber}}"
|
1
19
|
template:
|
2
20
|
# skip standardidentifier, it is inserted in front of formattedref within metanorma
|
3
21
|
standard: "<em><span_class='stddocTitle'>{{ title }}</span></em> ,_{{ extent }}."
|
4
|
-
website: "{{ creatornames }} ({{ role }}) . <em><span_class='stddocTitle'>{{ title }}</span></em> [website]. {{ labels['version'] | capitalize }}_{{ edition_raw }}. {{
|
22
|
+
website: "<smallcap>{{ creatornames }}</smallcap> ({{ role }}) . <em><span_class='stddocTitle'>{{ title }}</span></em> [website]. {{ labels['version'] | capitalize }}_{{ edition_raw }}. {{place}}: {{ publisher }}. {{date}}. {{ labels['updated'] | capitalize }}:_{{date_updated}}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. [{{ labels['viewed'] }}:_{{date_accessed}}]. "
|
23
|
+
book: "<smallcap>{{ creatornames }}</smallcap> ({{role}}) . <em>{{ title }}</em> . {{ edition | capitalize_first }}. ({{ series }}). {% if place %}{{place}}{%else%}{{ labels['no_place']}}{%endif%}: {{publisher}}. {{date}}. {{size}}. {{extent}}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. {{ labels['at'] | capitalize}}:_{{ access_location }}. [{{ labels['viewed'] }}:_{{date_accessed}}]."
|
24
|
+
booklet: book
|
25
|
+
manual: book
|
26
|
+
proceedings: book
|
27
|
+
inbook: "<smallcap>{{ creatornames }}</smallcap> ({{role}}) . {{ title }} . <em>{{host_title}}</em> ({{host_role}} {{ host_creatornames}}). {{ edition | capitalize_first }}. ({{ series }}). {% if place %}{{place}}{%else%}{{ labels['no_place']}}{%endif%}: {{publisher}}. {{date}}. {{size}}. {{extent}}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. {{ labels['at'] | capitalize}}:_{{ access_location }}. [{{ labels['viewed'] }}:_{{date_accessed}}]."
|
28
|
+
inproceedings: inbook
|
29
|
+
incollection: inbook
|
30
|
+
journal: "<em>{{ title}}</em> . {{ edition | capitalize_first }}. {{place}}: {{publisher}}. {{date}}. {{size}}. {{extent}}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. {{ labels['at'] | capitalize}}:_{{ access_location }}. [{{ labels['viewed'] }}:_{{date_accessed}}]."
|
31
|
+
article: "<smallcap>{{ creatornames }}</smallcap> ({{role}}) . {{ title }}. {{ series }} . {{date}}, {{ extent }}. {{ labels['updated'] | capitalize }}:_{{date_updated}}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. {{ labels['at'] | capitalize}}:_{{ access_location }}. [{{ labels['viewed'] }}:_{{date_accessed}}]."
|
32
|
+
software: "<smallcap>{{ creatornames }}</smallcap> ({{ role}}) . <em>{{ title }}</em> . {{ labels['version'] | capitalize }}_{{ edition_raw }}. {{medium | capitalize}}. {{place}}: {{publisher}}. {{date}}. {{size}}. {{extent}}. {{ labels['updated'] | capitalize }}:_{{date_updated}}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. [{{ labels['viewed'] }}:_{{date_accessed}}]. "
|
33
|
+
electronic resource: software
|
34
|
+
dataset: "<smallcap>{{ creatornames }}</smallcap> ({{ role }}) . <em>{{ title }}</em> . {{ labels['version'] | capitalize }}_{{ edition_raw }}. {{medium | capitalize }}. {{ labels['in'] | capitalize }}:_{{series}}. {{date}}. {{ labels['updated'] | capitalize }}:_{{date_updated}}. {{ authoritative_identifier | join '. ' }}. {{ other_identifier | join '. ' }}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. {{ size }}. {{ extent}}. [{{ labels['viewed'] }}:_{{date_accessed}}]. "
|
35
|
+
webresource: website
|
36
|
+
unpublished: "<smallcap>{{ creatornames }}</smallcap> ({{ role }}) . <em>{{ title }}</em> . {{ medium | capitalize }}. {{ date }}. {{ labels['at'] | capitalize}}:_{{ access_location }}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. [{{ labels['viewed'] }}:_{{date_accessed}}]."
|
37
|
+
presentation: unpublished
|
38
|
+
thesis: "<smallcap>{{ creatornames }}</smallcap> ({{ role }}) . <em>{{ title }}</em> . {{ medium | capitalize }}. {{place}}: {{ publisher }}. {{ date }}. {{ labels['at'] | capitalize}}:_{{ access_location }}. ._{{ labels['availablefrom'] }}:_<span_class='biburl'>{{ uri }}</span>. [{{ labels['viewed'] }}:_{{date_accessed}}]."
|
39
|
+
misc: "<smallcap>{{ creatornames }}</smallcap> ({{ role }}) . <em>{{ title }}</em> . {{ date }}."
|
40
|
+
# following are # unsupported types:
|
41
|
+
map: misc
|
42
|
+
audiovisual: misc
|
43
|
+
film: misc
|
44
|
+
video: misc
|
45
|
+
broadcast: misc
|
46
|
+
graphic_work: misc
|
47
|
+
music: misc
|
48
|
+
performance: misc
|
49
|
+
patent: misc
|
50
|
+
archival: misc
|
51
|
+
social_media: misc
|
52
|
+
alert: misc
|
53
|
+
message: misc
|
54
|
+
conversation: misc
|
55
|
+
internal: misc
|
56
|
+
|
data/metanorma-iso.gemspec
CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.test_files = `git ls-files -- {spec}/*`.split("\n")
|
30
30
|
spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
|
31
31
|
|
32
|
-
spec.add_dependency "metanorma-standoc", "~> 2.2.
|
32
|
+
spec.add_dependency "metanorma-standoc", "~> 2.2.4"
|
33
33
|
spec.add_dependency "mnconvert", "~> 1.14"
|
34
34
|
spec.add_dependency "pubid-iso"
|
35
35
|
spec.add_dependency "ruby-jing"
|
data/spec/isodoc/i18n_spec.rb
CHANGED
@@ -1332,7 +1332,7 @@ RSpec.describe IsoDoc do
|
|
1332
1332
|
<clause id="D" obligation="normative" type="scope" displayorder='3'>
|
1333
1333
|
<title depth="1">1<tab/>Scope</title>
|
1334
1334
|
<p id="E">
|
1335
|
-
<eref bibitemid="ISO712" type="inline"><locality type="table"><referenceFrom>1</referenceFrom><referenceTo>1</referenceTo></locality>ISO 712
|
1335
|
+
<eref bibitemid="ISO712" type="inline"><locality type="table"><referenceFrom>1</referenceFrom><referenceTo>1</referenceTo></locality>ISO 712, <span class='citetbl'>第1–1表</span></eref>
|
1336
1336
|
</p>
|
1337
1337
|
</clause>
|
1338
1338
|
<clause id="H" obligation="normative" displayorder='5'>
|
@@ -1423,7 +1423,7 @@ RSpec.describe IsoDoc do
|
|
1423
1423
|
<div id='D'>
|
1424
1424
|
<h1>1 Scope</h1>
|
1425
1425
|
<p id='E'>
|
1426
|
-
<a href='#ISO712'>ISO 712
|
1426
|
+
<a href='#ISO712'>ISO 712, 第1–1表</a>
|
1427
1427
|
</p>
|
1428
1428
|
</div>
|
1429
1429
|
<div>
|
data/spec/isodoc/ref_spec.rb
CHANGED
@@ -209,12 +209,12 @@ RSpec.describe IsoDoc do
|
|
209
209
|
<references id="_bibliography" normative="false" obligation="informative" displayorder="3">
|
210
210
|
<title depth="1">Bibliography</title>
|
211
211
|
<bibitem id="ISBN" type="book">
|
212
|
-
<formattedref><em>Chemicals for analytical laboratory use</em>. n.p.: n.d.
|
212
|
+
<formattedref><em>Chemicals for analytical laboratory use</em>. n.p.: n.d. </formattedref>
|
213
213
|
<docidentifier type="metanorma-ordinal">[1]</docidentifier>
|
214
214
|
<docidentifier type="ISBN">ISBN</docidentifier>
|
215
215
|
</bibitem>
|
216
216
|
<bibitem id="ISSN" type="journal">
|
217
|
-
<formattedref><em>Instruments for analytical laboratory use</em>. n.d
|
217
|
+
<formattedref><em>Instruments for analytical laboratory use</em>. n.d.</formattedref>
|
218
218
|
<docidentifier type="metanorma-ordinal">[2]</docidentifier>
|
219
219
|
<docidentifier type="ISSN">ISSN</docidentifier>
|
220
220
|
</bibitem>
|
@@ -326,12 +326,12 @@ RSpec.describe IsoDoc do
|
|
326
326
|
<p id='ISBN' class='Biblio'>
|
327
327
|
[1]
|
328
328
|
<i>Chemicals for analytical laboratory use</i>
|
329
|
-
. n.p.: n.d.
|
329
|
+
. n.p.: n.d.
|
330
330
|
</p>
|
331
331
|
<p id='ISSN' class='Biblio'>
|
332
332
|
[2]
|
333
333
|
<i>Instruments for analytical laboratory use</i>
|
334
|
-
. n.d.
|
334
|
+
. n.d.
|
335
335
|
</p>
|
336
336
|
<div class='Note'>
|
337
337
|
<p>
|