metanorma-iso 2.7.4 → 2.7.5
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-en.yaml +2 -0
- data/lib/isodoc/iso/i18n-fr.yaml +2 -0
- data/lib/isodoc/iso/i18n-ru.yaml +2 -0
- data/lib/isodoc/iso/iso.amendment.xsl +683 -114
- data/lib/isodoc/iso/iso.international-standard.xsl +683 -114
- data/lib/isodoc/iso/presentation_xml_convert.rb +4 -0
- data/lib/isodoc/iso/xref.rb +5 -7
- data/lib/isodoc/iso/xref_section.rb +11 -0
- data/lib/metanorma/iso/biblio.rng +24 -8
- data/lib/metanorma/iso/boilerplate-fr.adoc +1 -1
- data/lib/metanorma/iso/boilerplate-ru.adoc +1 -1
- data/lib/metanorma/iso/boilerplate.adoc +1 -1
- data/lib/metanorma/iso/cleanup.rb +8 -112
- data/lib/metanorma/iso/cleanup_biblio.rb +120 -0
- data/lib/metanorma/iso/front_id.rb +5 -5
- data/lib/metanorma/iso/isodoc.rng +67 -55
- data/lib/metanorma/iso/version.rb +1 -1
- metadata +3 -2
data/lib/isodoc/iso/xref.rb
CHANGED
@@ -12,12 +12,12 @@ module IsoDoc
|
|
12
12
|
if @klass.amd?(docxml)
|
13
13
|
[{ path: "//sections/clause", multi: true }]
|
14
14
|
else
|
15
|
-
[{ path: "//clause[@type = 'scope']" },
|
15
|
+
[{ path: "//sections/clause[@type = 'scope']" },
|
16
16
|
{ path: @klass.norm_ref_xpath },
|
17
17
|
{ path:
|
18
18
|
"#{@klass.middle_clause(docxml)} | //sections/terms | " \
|
19
|
-
"//sections/clause[descendant::terms or descendant::definitions] " \
|
20
|
-
"| //sections/
|
19
|
+
"//sections/clause[descendant::terms or descendant::definitions] | " \
|
20
|
+
"//sections/definitions | //sections/clause[@type = 'section']", multi: true }]
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -46,9 +46,7 @@ module IsoDoc
|
|
46
46
|
|
47
47
|
def hierarchical_formula_names(clause, num)
|
48
48
|
c = IsoDoc::XrefGen::Counter.new
|
49
|
-
clause.xpath(ns(".//formula")).each do |t|
|
50
|
-
next if blank?(t["id"])
|
51
|
-
|
49
|
+
clause.xpath(ns(".//formula")).noblank.each do |t|
|
52
50
|
@anchors[t["id"]] = anchor_struct(
|
53
51
|
"#{num}#{hiersep}#{c.increment(t).print}", t,
|
54
52
|
t["inequality"] ? @labels["inequality"] : @labels["formula"],
|
@@ -130,7 +128,7 @@ module IsoDoc
|
|
130
128
|
notes = s.xpath(ns(".//ol")) - s.xpath(ns(".//clause//ol")) -
|
131
129
|
s.xpath(ns(".//appendix//ol")) - s.xpath(ns(".//ol//ol"))
|
132
130
|
c = Counter.new
|
133
|
-
notes.
|
131
|
+
notes.noblank.each do |n|
|
134
132
|
@anchors[n["id"]] = anchor_struct(increment_label(notes, n, c), n,
|
135
133
|
@labels["list"], "list", false)
|
136
134
|
list_item_anchor_names(n, @anchors[n["id"]], 1, "",
|
@@ -47,6 +47,17 @@ module IsoDoc
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
+
def section_name_anchors(clause, num, level)
|
51
|
+
if clause["type"] == "section"
|
52
|
+
@anchors[clause["id"]] =
|
53
|
+
{ label: l10n("#{@labels['section']} #{num}"),
|
54
|
+
xref: l10n("#{@labels['section']} #{num}"),
|
55
|
+
title: clause_title(clause), level: level, type: "clause",
|
56
|
+
elem: @labels["section"] }
|
57
|
+
else super
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
50
61
|
def annex_names1(clause, num, level)
|
51
62
|
@anchors[clause["id"]] = { label: num, xref: num, level: level,
|
52
63
|
subtype: "annex" }
|
@@ -208,7 +208,9 @@
|
|
208
208
|
</define>
|
209
209
|
<define name="roledescription">
|
210
210
|
<element name="description">
|
211
|
-
<
|
211
|
+
<oneOrMore>
|
212
|
+
<ref name="TextElement"/>
|
213
|
+
</oneOrMore>
|
212
214
|
</element>
|
213
215
|
</define>
|
214
216
|
<define name="person">
|
@@ -333,7 +335,9 @@
|
|
333
335
|
</define>
|
334
336
|
<define name="affiliationdescription">
|
335
337
|
<element name="description">
|
336
|
-
<
|
338
|
+
<oneOrMore>
|
339
|
+
<ref name="TextElement"/>
|
340
|
+
</oneOrMore>
|
337
341
|
</element>
|
338
342
|
</define>
|
339
343
|
<define name="organization">
|
@@ -897,7 +901,9 @@
|
|
897
901
|
</define>
|
898
902
|
<define name="formattedref">
|
899
903
|
<element name="formattedref">
|
900
|
-
<
|
904
|
+
<oneOrMore>
|
905
|
+
<ref name="TextElement"/>
|
906
|
+
</oneOrMore>
|
901
907
|
</element>
|
902
908
|
</define>
|
903
909
|
<define name="license">
|
@@ -942,7 +948,9 @@
|
|
942
948
|
<optional>
|
943
949
|
<attribute name="type"/>
|
944
950
|
</optional>
|
945
|
-
<
|
951
|
+
<zeroOrMore>
|
952
|
+
<ref name="TextElement"/>
|
953
|
+
</zeroOrMore>
|
946
954
|
</define>
|
947
955
|
<!-- TitleType = ( "alternative" | "original" | "unofficial" | "subtitle" | "main" ) -->
|
948
956
|
<define name="TypedUri">
|
@@ -1042,7 +1050,9 @@
|
|
1042
1050
|
<optional>
|
1043
1051
|
<attribute name="script"/>
|
1044
1052
|
</optional>
|
1045
|
-
<
|
1053
|
+
<oneOrMore>
|
1054
|
+
<ref name="TextElement"/>
|
1055
|
+
</oneOrMore>
|
1046
1056
|
</element>
|
1047
1057
|
</define>
|
1048
1058
|
<define name="docnumber">
|
@@ -1267,12 +1277,16 @@
|
|
1267
1277
|
<optional>
|
1268
1278
|
<attribute name="type"/>
|
1269
1279
|
</optional>
|
1270
|
-
<
|
1280
|
+
<oneOrMore>
|
1281
|
+
<ref name="TextElement"/>
|
1282
|
+
</oneOrMore>
|
1271
1283
|
</element>
|
1272
1284
|
</define>
|
1273
1285
|
<define name="bibabstract">
|
1274
1286
|
<element name="abstract">
|
1275
|
-
<
|
1287
|
+
<oneOrMore>
|
1288
|
+
<ref name="TextElement"/>
|
1289
|
+
</oneOrMore>
|
1276
1290
|
</element>
|
1277
1291
|
</define>
|
1278
1292
|
<define name="copyright">
|
@@ -1377,7 +1391,9 @@
|
|
1377
1391
|
</attribute>
|
1378
1392
|
<optional>
|
1379
1393
|
<element name="description">
|
1380
|
-
<
|
1394
|
+
<oneOrMore>
|
1395
|
+
<ref name="TextElement"/>
|
1396
|
+
</oneOrMore>
|
1381
1397
|
</element>
|
1382
1398
|
</optional>
|
1383
1399
|
<element name="bibitem">
|
@@ -73,7 +73,7 @@ CP 401 • Ch. de Blandonnet 8 +
|
|
73
73
|
CH-1214 Vernier, Geneva +
|
74
74
|
Tél: +41 22 749 01 11 +
|
75
75
|
Email: copyright@iso.org +
|
76
|
-
Website: www.iso.org
|
76
|
+
Website: {% if document_scheme == "2024" %}https://www.iso.org/[www.iso.org]{% else %}www.iso.org{% endif %}
|
77
77
|
|
78
78
|
[[boilerplate-place]]
|
79
79
|
Publié en Suisse
|
@@ -49,7 +49,7 @@ CP 401 • Ch. de Blandonnet 8 +
|
|
49
49
|
CH-1214 Vernier, Geneva +
|
50
50
|
Тел: +41 22 749 01 11 +
|
51
51
|
Электронная почта: copyright@iso.org +
|
52
|
-
Сайт: www.iso.org
|
52
|
+
Сайт: {% if document_scheme == "2024" %}https://www.iso.org/[www.iso.org]{% else %}www.iso.org{% endif %}
|
53
53
|
|
54
54
|
[[boilerplate-place]]
|
55
55
|
Издано в Швейцарии
|
@@ -73,7 +73,7 @@ CP 401 • Ch. de Blandonnet 8 +
|
|
73
73
|
CH-1214 Vernier, Geneva +
|
74
74
|
Phone: +41 22 749 01 11 +
|
75
75
|
Email: copyright@iso.org +
|
76
|
-
Website: www.iso.org
|
76
|
+
Website: {% if document_scheme == "2024" %}https://www.iso.org/[www.iso.org]{% else %}www.iso.org{% endif %}
|
77
77
|
|
78
78
|
[[boilerplate-place]]
|
79
79
|
Published in Switzerland
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require_relative "cleanup_biblio"
|
2
|
+
|
1
3
|
module Metanorma
|
2
4
|
module ISO
|
3
5
|
class Converter < Standoc::Converter
|
@@ -24,80 +26,20 @@ module Metanorma
|
|
24
26
|
end
|
25
27
|
end
|
26
28
|
|
27
|
-
def
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
def get_id_prefix(xmldoc)
|
34
|
-
xmldoc.xpath("//bibdata/contributor[role/@type = 'publisher']" \
|
35
|
-
"/organization").each_with_object([]) do |x, prefix|
|
36
|
-
x1 = x.at("abbreviation")&.text || x.at("name")&.text
|
37
|
-
prefix << x1
|
29
|
+
def ol_cleanup(doc)
|
30
|
+
doc.xpath("//ol[@explicit-type]").each do |x|
|
31
|
+
x["type"] = x["explicit-type"]
|
32
|
+
x.delete("explicit-type")
|
33
|
+
@log.add("Style", x,
|
34
|
+
"Style override set for ordered list")
|
38
35
|
end
|
39
36
|
end
|
40
37
|
|
41
|
-
# ISO as a prefix goes first
|
42
|
-
def docidentifier_cleanup(xmldoc)
|
43
|
-
prefix = get_id_prefix(xmldoc)
|
44
|
-
id = xmldoc.at("//bibdata/ext/structuredidentifier/project-number") and
|
45
|
-
id.content = id_prefix(prefix, id)
|
46
|
-
end
|
47
|
-
|
48
|
-
def format_ref(ref, type)
|
49
|
-
ref = ref.sub(/ \(All Parts\)/i, "")
|
50
|
-
super
|
51
|
-
end
|
52
|
-
|
53
38
|
TERM_CLAUSE =
|
54
39
|
"//sections//terms | " \
|
55
40
|
"//sections//clause[descendant::terms][not(descendant::definitions)]"
|
56
41
|
.freeze
|
57
42
|
|
58
|
-
PUBLISHER = "./contributor[role/@type = 'publisher']/organization".freeze
|
59
|
-
|
60
|
-
def pub_class(bib)
|
61
|
-
return 1 if bib.at("#{PUBLISHER}[abbreviation = 'ISO']")
|
62
|
-
return 1 if bib.at("#{PUBLISHER}[name = 'International Organization " \
|
63
|
-
"for Standardization']")
|
64
|
-
return 2 if bib.at("#{PUBLISHER}[abbreviation = 'IEC']")
|
65
|
-
return 2 if bib.at("#{PUBLISHER}[name = 'International " \
|
66
|
-
"Electrotechnical Commission']")
|
67
|
-
return 3 if bib.at("./docidentifier[@type]" \
|
68
|
-
"[not(#{skip_docid} or @type = 'metanorma')]") ||
|
69
|
-
bib.at("./docidentifier[not(@type)]")
|
70
|
-
|
71
|
-
4
|
72
|
-
end
|
73
|
-
|
74
|
-
def sort_biblio(bib)
|
75
|
-
bib.sort { |a, b| sort_biblio_key(a) <=> sort_biblio_key(b) }
|
76
|
-
end
|
77
|
-
|
78
|
-
# sort by: doc class (ISO, IEC, other standard (not DOI &c), other
|
79
|
-
# then standard class (docid class other than DOI &c)
|
80
|
-
# then docnumber if present, numeric sort
|
81
|
-
# else alphanumeric metanorma id (abbreviation)
|
82
|
-
# then doc part number if present, numeric sort
|
83
|
-
# then doc id (not DOI &c)
|
84
|
-
# then title
|
85
|
-
def sort_biblio_key(bib)
|
86
|
-
pubclass = pub_class(bib)
|
87
|
-
num = bib.at("./docnumber")&.text
|
88
|
-
id = bib.at("./docidentifier[@primary]") ||
|
89
|
-
bib.at("./docidentifier[not(#{skip_docid} or @type = 'metanorma')]")
|
90
|
-
metaid = bib.at("./docidentifier[@type = 'metanorma']")&.text
|
91
|
-
abbrid = metaid unless /^\[\d+\]$/.match?(metaid)
|
92
|
-
/\d-(?<partid>\d+)/ =~ id&.text
|
93
|
-
type = id["type"] if id
|
94
|
-
title = bib.at("./title[@type = 'main']")&.text ||
|
95
|
-
bib.at("./title")&.text || bib&.at("./formattedref")&.text
|
96
|
-
"#{pubclass} :: #{type} :: " \
|
97
|
-
"#{num.nil? ? abbrid : sprintf('%09d', num.to_i)} :: " \
|
98
|
-
"#{sprintf('%09d', partid.to_i)} :: #{id&.text} :: #{title}"
|
99
|
-
end
|
100
|
-
|
101
43
|
def sections_cleanup(xml)
|
102
44
|
super
|
103
45
|
@amd or return
|
@@ -127,52 +69,6 @@ module Metanorma
|
|
127
69
|
end
|
128
70
|
end
|
129
71
|
|
130
|
-
def bibitem_cleanup(xmldoc)
|
131
|
-
super
|
132
|
-
unpublished_note(xmldoc)
|
133
|
-
withdrawn_note(xmldoc)
|
134
|
-
end
|
135
|
-
|
136
|
-
def unpublished_note(xmldoc)
|
137
|
-
xmldoc.xpath("//bibitem[not(./ancestor::bibitem)]" \
|
138
|
-
"[not(note[@type = 'Unpublished-Status'])]").each do |b|
|
139
|
-
pub_class(b) > 2 and next
|
140
|
-
((s = b.at("./status/stage")) && s.text.match?(/\d/) &&
|
141
|
-
(s.text.to_i < 60)) or next
|
142
|
-
insert_unpub_note(b, @i18n.under_preparation
|
143
|
-
.sub("%", b.at("docidentifier").text))
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
def withdrawn_note(xmldoc)
|
148
|
-
xmldoc.xpath("//bibitem[not(note[@type = 'Unpublished-Status'])]")
|
149
|
-
.each do |b|
|
150
|
-
withdrawn_ref?(b) or next
|
151
|
-
if id = replacement_standard(b)
|
152
|
-
insert_unpub_note(b, @i18n.cancelled_and_replaced.sub("%", id))
|
153
|
-
else insert_unpub_note(b, @i18n.withdrawn)
|
154
|
-
end
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
def withdrawn_ref?(biblio)
|
159
|
-
pub_class(biblio) > 2 and return false
|
160
|
-
(s = biblio.at("./status/stage")) && (s.text.to_i == 95) &&
|
161
|
-
(t = biblio.at("./status/substage")) && (t.text.to_i == 99)
|
162
|
-
end
|
163
|
-
|
164
|
-
def replacement_standard(biblio)
|
165
|
-
r = biblio.at("./relation[@type = 'updates']/bibitem") or return nil
|
166
|
-
id = r.at("./formattedref | ./docidentifier[@primary = 'true'] | " \
|
167
|
-
"./docidentifier | ./formattedref") or return nil
|
168
|
-
id.text
|
169
|
-
end
|
170
|
-
|
171
|
-
def insert_unpub_note(biblio, msg)
|
172
|
-
biblio.at("./language | ./script | ./abstract | ./status")
|
173
|
-
.previous = %(<note type="Unpublished-Status"><p>#{msg}</p></note>)
|
174
|
-
end
|
175
|
-
|
176
72
|
def termdef_boilerplate_insert(xmldoc, isodoc, once = false)
|
177
73
|
once = true
|
178
74
|
super
|
@@ -0,0 +1,120 @@
|
|
1
|
+
module Metanorma
|
2
|
+
module ISO
|
3
|
+
class Converter < Standoc::Converter
|
4
|
+
def id_prefix(prefix, id)
|
5
|
+
# we're just inheriting the prefixes from parent doc
|
6
|
+
@amd and return id.text
|
7
|
+
prefix.join("/") + (id.text.match?(%{^/}) ? "" : " ") + id.text
|
8
|
+
end
|
9
|
+
|
10
|
+
def get_id_prefix(xmldoc)
|
11
|
+
xmldoc.xpath("//bibdata/contributor[role/@type = 'publisher']" \
|
12
|
+
"/organization").each_with_object([]) do |x, prefix|
|
13
|
+
x1 = x.at("abbreviation")&.text || x.at("name")&.text
|
14
|
+
prefix << x1
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# ISO as a prefix goes first
|
19
|
+
def docidentifier_cleanup(xmldoc)
|
20
|
+
prefix = get_id_prefix(xmldoc)
|
21
|
+
id = xmldoc.at("//bibdata/ext/structuredidentifier/project-number") and
|
22
|
+
id.content = id_prefix(prefix, id)
|
23
|
+
end
|
24
|
+
|
25
|
+
def format_ref(ref, type)
|
26
|
+
ref = ref.sub(/ \(All Parts\)/i, "")
|
27
|
+
super
|
28
|
+
end
|
29
|
+
|
30
|
+
PUBLISHER = "./contributor[role/@type = 'publisher']/organization".freeze
|
31
|
+
|
32
|
+
def pub_class(bib)
|
33
|
+
return 1 if bib.at("#{PUBLISHER}[abbreviation = 'ISO']")
|
34
|
+
return 1 if bib.at("#{PUBLISHER}[name = 'International Organization " \
|
35
|
+
"for Standardization']")
|
36
|
+
return 2 if bib.at("#{PUBLISHER}[abbreviation = 'IEC']")
|
37
|
+
return 2 if bib.at("#{PUBLISHER}[name = 'International " \
|
38
|
+
"Electrotechnical Commission']")
|
39
|
+
return 3 if bib.at("./docidentifier[@type]" \
|
40
|
+
"[not(#{skip_docid} or @type = 'metanorma')]") ||
|
41
|
+
bib.at("./docidentifier[not(@type)]")
|
42
|
+
|
43
|
+
4
|
44
|
+
end
|
45
|
+
|
46
|
+
def sort_biblio(bib)
|
47
|
+
bib.sort { |a, b| sort_biblio_key(a) <=> sort_biblio_key(b) }
|
48
|
+
end
|
49
|
+
|
50
|
+
# sort by: doc class (ISO, IEC, other standard (not DOI &c), other
|
51
|
+
# then standard class (docid class other than DOI &c)
|
52
|
+
# then docnumber if present, numeric sort
|
53
|
+
# else alphanumeric metanorma id (abbreviation)
|
54
|
+
# then doc part number if present, numeric sort
|
55
|
+
# then doc id (not DOI &c)
|
56
|
+
# then title
|
57
|
+
def sort_biblio_key(bib)
|
58
|
+
pubclass = pub_class(bib)
|
59
|
+
num = bib.at("./docnumber")&.text
|
60
|
+
id = bib.at("./docidentifier[@primary]") ||
|
61
|
+
bib.at("./docidentifier[not(#{skip_docid} or @type = 'metanorma')]")
|
62
|
+
metaid = bib.at("./docidentifier[@type = 'metanorma']")&.text
|
63
|
+
abbrid = metaid unless /^\[\d+\]$/.match?(metaid)
|
64
|
+
/\d-(?<partid>\d+)/ =~ id&.text
|
65
|
+
type = id["type"] if id
|
66
|
+
title = bib.at("./title[@type = 'main']")&.text ||
|
67
|
+
bib.at("./title")&.text || bib&.at("./formattedref")&.text
|
68
|
+
"#{pubclass} :: #{type} :: " \
|
69
|
+
"#{num.nil? ? abbrid : sprintf('%09d', num.to_i)} :: " \
|
70
|
+
"#{sprintf('%09d', partid.to_i)} :: #{id&.text} :: #{title}"
|
71
|
+
end
|
72
|
+
|
73
|
+
def bibitem_cleanup(xmldoc)
|
74
|
+
super
|
75
|
+
unpublished_note(xmldoc)
|
76
|
+
withdrawn_note(xmldoc)
|
77
|
+
end
|
78
|
+
|
79
|
+
def unpublished_note(xmldoc)
|
80
|
+
xmldoc.xpath("//bibitem[not(./ancestor::bibitem)]" \
|
81
|
+
"[not(note[@type = 'Unpublished-Status'])]").each do |b|
|
82
|
+
pub_class(b) > 2 and next
|
83
|
+
((s = b.at("./status/stage")) && s.text.match?(/\d/) &&
|
84
|
+
(s.text.to_i < 60)) or next
|
85
|
+
insert_unpub_note(b, @i18n.under_preparation
|
86
|
+
.sub("%", b.at("docidentifier").text))
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def withdrawn_note(xmldoc)
|
91
|
+
xmldoc.xpath("//bibitem[not(note[@type = 'Unpublished-Status'])]")
|
92
|
+
.each do |b|
|
93
|
+
withdrawn_ref?(b) or next
|
94
|
+
if id = replacement_standard(b)
|
95
|
+
insert_unpub_note(b, @i18n.cancelled_and_replaced.sub("%", id))
|
96
|
+
else insert_unpub_note(b, @i18n.withdrawn)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def withdrawn_ref?(biblio)
|
102
|
+
pub_class(biblio) > 2 and return false
|
103
|
+
(s = biblio.at("./status/stage")) && (s.text.to_i == 95) &&
|
104
|
+
(t = biblio.at("./status/substage")) && (t.text.to_i == 99)
|
105
|
+
end
|
106
|
+
|
107
|
+
def replacement_standard(biblio)
|
108
|
+
r = biblio.at("./relation[@type = 'updates']/bibitem") or return nil
|
109
|
+
id = r.at("./formattedref | ./docidentifier[@primary = 'true'] | " \
|
110
|
+
"./docidentifier | ./formattedref") or return nil
|
111
|
+
id.text
|
112
|
+
end
|
113
|
+
|
114
|
+
def insert_unpub_note(biblio, msg)
|
115
|
+
biblio.at("./language | ./script | ./abstract | ./status")
|
116
|
+
.previous = %(<note type="Unpublished-Status"><p>#{msg}</p></note>)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -9,7 +9,7 @@ module Metanorma
|
|
9
9
|
class Converter < Standoc::Converter
|
10
10
|
def metadata_id(node, xml)
|
11
11
|
if id = node.attr("docidentifier")
|
12
|
-
xml.docidentifier id, **attr_code(type: "ISO")
|
12
|
+
xml.docidentifier id, **attr_code(type: "ISO", primary: "true")
|
13
13
|
else iso_id(node, xml)
|
14
14
|
end
|
15
15
|
node.attr("tc-docnumber")&.split(/,\s*/)&.each do |n|
|
@@ -161,12 +161,13 @@ module Metanorma
|
|
161
161
|
end
|
162
162
|
|
163
163
|
def cen_id_out(xml, params)
|
164
|
-
xml.docidentifier iso_id_default(params).to_s,
|
164
|
+
xml.docidentifier iso_id_default(params).to_s,
|
165
|
+
**attr_code(type: "CEN", primary: "true")
|
165
166
|
end
|
166
167
|
|
167
168
|
def iso_id_out_common(xml, params, with_prf)
|
168
169
|
xml.docidentifier iso_id_default(params).to_s(with_prf: with_prf),
|
169
|
-
**attr_code(type: "ISO")
|
170
|
+
**attr_code(type: "ISO", primary: "true")
|
170
171
|
xml.docidentifier iso_id_reference(params)
|
171
172
|
.to_s(format: :ref_num_short, with_prf: with_prf),
|
172
173
|
**attr_code(type: "iso-reference")
|
@@ -185,8 +186,7 @@ module Metanorma
|
|
185
186
|
params_nolang = params.dup.tap { |hs| hs.delete(:language) }
|
186
187
|
params1 = if params[:unpublished]
|
187
188
|
params_nolang.dup.tap { |hs| hs.delete(:year) }
|
188
|
-
else params_nolang
|
189
|
-
end
|
189
|
+
else params_nolang end
|
190
190
|
params1.delete(:unpublished)
|
191
191
|
pubid_select(params1).create(**params1)
|
192
192
|
end
|
@@ -156,44 +156,7 @@
|
|
156
156
|
</define>
|
157
157
|
<define name="xref">
|
158
158
|
<element name="xref">
|
159
|
-
<
|
160
|
-
<data type="string">
|
161
|
-
<param name="pattern">\i\c*|\c+#\c+</param>
|
162
|
-
</data>
|
163
|
-
</attribute>
|
164
|
-
<optional>
|
165
|
-
<attribute name="to">
|
166
|
-
<data type="string">
|
167
|
-
<param name="pattern">\i\c*|\c+#\c+</param>
|
168
|
-
</data>
|
169
|
-
</attribute>
|
170
|
-
</optional>
|
171
|
-
<optional>
|
172
|
-
<attribute name="type">
|
173
|
-
<ref name="ReferenceFormat"/>
|
174
|
-
</attribute>
|
175
|
-
</optional>
|
176
|
-
<optional>
|
177
|
-
<attribute name="alt"/>
|
178
|
-
</optional>
|
179
|
-
<optional>
|
180
|
-
<attribute name="case">
|
181
|
-
<choice>
|
182
|
-
<value>capital</value>
|
183
|
-
<value>lowercase</value>
|
184
|
-
</choice>
|
185
|
-
</attribute>
|
186
|
-
</optional>
|
187
|
-
<optional>
|
188
|
-
<attribute name="droploc">
|
189
|
-
<data type="boolean"/>
|
190
|
-
</attribute>
|
191
|
-
</optional>
|
192
|
-
<optional>
|
193
|
-
<attribute name="style">
|
194
|
-
<ref name="XrefStyleType"/>
|
195
|
-
</attribute>
|
196
|
-
</optional>
|
159
|
+
<ref name="XrefAttributes"/>
|
197
160
|
<ref name="XrefBody"/>
|
198
161
|
</element>
|
199
162
|
</define>
|
@@ -407,23 +370,7 @@
|
|
407
370
|
</define>
|
408
371
|
<define name="figure">
|
409
372
|
<element name="figure">
|
410
|
-
<
|
411
|
-
<data type="ID"/>
|
412
|
-
</attribute>
|
413
|
-
<optional>
|
414
|
-
<attribute name="unnumbered">
|
415
|
-
<data type="boolean"/>
|
416
|
-
</attribute>
|
417
|
-
</optional>
|
418
|
-
<optional>
|
419
|
-
<attribute name="number"/>
|
420
|
-
</optional>
|
421
|
-
<optional>
|
422
|
-
<attribute name="subsequence"/>
|
423
|
-
</optional>
|
424
|
-
<optional>
|
425
|
-
<attribute name="class"/>
|
426
|
-
</optional>
|
373
|
+
<ref name="FigureAttributes"/>
|
427
374
|
<ref name="BlockAttributes"/>
|
428
375
|
<optional>
|
429
376
|
<ref name="tname"/>
|
@@ -2450,6 +2397,49 @@
|
|
2450
2397
|
</zeroOrMore>
|
2451
2398
|
</element>
|
2452
2399
|
</define>
|
2400
|
+
<define name="XrefAttributes">
|
2401
|
+
<attribute name="target">
|
2402
|
+
<data type="string">
|
2403
|
+
<param name="pattern">\i\c*|\c+#\c+</param>
|
2404
|
+
</data>
|
2405
|
+
</attribute>
|
2406
|
+
<optional>
|
2407
|
+
<attribute name="to">
|
2408
|
+
<data type="string">
|
2409
|
+
<param name="pattern">\i\c*|\c+#\c+</param>
|
2410
|
+
</data>
|
2411
|
+
</attribute>
|
2412
|
+
</optional>
|
2413
|
+
<optional>
|
2414
|
+
<attribute name="type">
|
2415
|
+
<ref name="ReferenceFormat"/>
|
2416
|
+
</attribute>
|
2417
|
+
</optional>
|
2418
|
+
<optional>
|
2419
|
+
<attribute name="alt"/>
|
2420
|
+
</optional>
|
2421
|
+
<optional>
|
2422
|
+
<attribute name="case">
|
2423
|
+
<choice>
|
2424
|
+
<value>capital</value>
|
2425
|
+
<value>lowercase</value>
|
2426
|
+
</choice>
|
2427
|
+
</attribute>
|
2428
|
+
</optional>
|
2429
|
+
<optional>
|
2430
|
+
<attribute name="droploc">
|
2431
|
+
<data type="boolean"/>
|
2432
|
+
</attribute>
|
2433
|
+
</optional>
|
2434
|
+
<optional>
|
2435
|
+
<attribute name="style">
|
2436
|
+
<ref name="XrefStyleType"/>
|
2437
|
+
</attribute>
|
2438
|
+
</optional>
|
2439
|
+
<optional>
|
2440
|
+
<attribute name="label"/>
|
2441
|
+
</optional>
|
2442
|
+
</define>
|
2453
2443
|
<define name="XrefBody">
|
2454
2444
|
<zeroOrMore>
|
2455
2445
|
<ref name="XrefTarget"/>
|
@@ -2528,6 +2518,28 @@
|
|
2528
2518
|
<attribute name="columns"/>
|
2529
2519
|
</optional>
|
2530
2520
|
</define>
|
2521
|
+
<define name="FigureAttributes">
|
2522
|
+
<attribute name="id">
|
2523
|
+
<data type="ID"/>
|
2524
|
+
</attribute>
|
2525
|
+
<optional>
|
2526
|
+
<attribute name="unnumbered">
|
2527
|
+
<data type="boolean"/>
|
2528
|
+
</attribute>
|
2529
|
+
</optional>
|
2530
|
+
<optional>
|
2531
|
+
<attribute name="number"/>
|
2532
|
+
</optional>
|
2533
|
+
<optional>
|
2534
|
+
<attribute name="subsequence"/>
|
2535
|
+
</optional>
|
2536
|
+
<optional>
|
2537
|
+
<attribute name="class"/>
|
2538
|
+
</optional>
|
2539
|
+
<optional>
|
2540
|
+
<attribute name="width"/>
|
2541
|
+
</optional>
|
2542
|
+
</define>
|
2531
2543
|
<start>
|
2532
2544
|
<ref name="standard-document"/>
|
2533
2545
|
</start>
|
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: 2.7.
|
4
|
+
version: 2.7.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-03-
|
11
|
+
date: 2024-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: metanorma-standoc
|
@@ -375,6 +375,7 @@ files:
|
|
375
375
|
- lib/metanorma/iso/boilerplate-ru.adoc
|
376
376
|
- lib/metanorma/iso/boilerplate.adoc
|
377
377
|
- lib/metanorma/iso/cleanup.rb
|
378
|
+
- lib/metanorma/iso/cleanup_biblio.rb
|
378
379
|
- lib/metanorma/iso/converter.rb
|
379
380
|
- lib/metanorma/iso/front.rb
|
380
381
|
- lib/metanorma/iso/front_contributor.rb
|