metanorma-iso 2.1.9 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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>
|