metanorma-iso 2.8.8 → 2.9.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/base_convert.rb +5 -41
- data/lib/isodoc/iso/html/word_iso_intro-dis.html +4 -2
- data/lib/isodoc/iso/html/word_iso_intro.html +4 -1
- data/lib/isodoc/iso/iso.amendment.xsl +271 -57
- data/lib/isodoc/iso/iso.international-standard.xsl +271 -57
- data/lib/isodoc/iso/presentation_bibdata.rb +1 -1
- data/lib/isodoc/iso/presentation_terms.rb +0 -13
- data/lib/isodoc/iso/presentation_xml_convert.rb +29 -20
- data/lib/isodoc/iso/presentation_xref.rb +2 -0
- data/lib/isodoc/iso/sections.rb +1 -1
- data/lib/isodoc/iso/word_cleanup.rb +33 -17
- data/lib/isodoc/iso/xref_section.rb +4 -4
- data/lib/metanorma/iso/boilerplate-fr.adoc +4 -0
- data/lib/metanorma/iso/boilerplate-ru.adoc +3 -0
- data/lib/metanorma/iso/boilerplate.adoc +4 -0
- data/lib/metanorma/iso/front.rb +5 -0
- data/lib/metanorma/iso/front_contributor.rb +1 -3
- data/lib/metanorma/iso/isodoc.rng +1 -1
- data/lib/metanorma/iso/relaton-iso.rng +8 -0
- data/lib/metanorma/iso/version.rb +1 -1
- data/metanorma-iso.gemspec +1 -1
- metadata +4 -4
@@ -52,19 +52,6 @@ module IsoDoc
|
|
52
52
|
node.children)
|
53
53
|
end
|
54
54
|
|
55
|
-
def termdefinition1(elem)
|
56
|
-
prefix_domain_to_definition(elem)
|
57
|
-
super
|
58
|
-
end
|
59
|
-
|
60
|
-
def prefix_domain_to_definition(elem)
|
61
|
-
((d = elem.at(ns("./domain"))) &&
|
62
|
-
(v = elem.at(ns("./definition/verbal-definition"))) &&
|
63
|
-
v.elements.first.name == "p") or return
|
64
|
-
v.elements.first.children.first.previous =
|
65
|
-
"<#{to_xml(d.remove.children)}> "
|
66
|
-
end
|
67
|
-
|
68
55
|
def insertall_after_here(node, insert, name)
|
69
56
|
node.children.each do |n|
|
70
57
|
n.name == name or next
|
@@ -31,6 +31,7 @@ module IsoDoc
|
|
31
31
|
admonition docxml
|
32
32
|
source docxml
|
33
33
|
ol docxml
|
34
|
+
quote docxml
|
34
35
|
permission docxml
|
35
36
|
requirement docxml
|
36
37
|
recommendation docxml
|
@@ -38,6 +39,8 @@ module IsoDoc
|
|
38
39
|
@xrefs.anchors_previous = @xrefs.anchors.dup # store old xrefs of reqts
|
39
40
|
@xrefs.parse docxml
|
40
41
|
table docxml # have table include requirements newly converted to tables
|
42
|
+
# table feeds dl
|
43
|
+
dl docxml
|
41
44
|
example docxml
|
42
45
|
note docxml
|
43
46
|
end
|
@@ -52,6 +55,8 @@ module IsoDoc
|
|
52
55
|
end
|
53
56
|
|
54
57
|
def figure1(node)
|
58
|
+
figure_fn(node)
|
59
|
+
figure_key(node.at(ns("./dl")))
|
55
60
|
lbl = @xrefs.anchor(node["id"], :label, false) or return
|
56
61
|
figname = node.parent.name == "figure" ? "" : "#{@i18n.figure} "
|
57
62
|
conn = node.parent.name == "figure" ? "  " : " — "
|
@@ -97,7 +102,6 @@ module IsoDoc
|
|
97
102
|
|
98
103
|
def admonition1(elem)
|
99
104
|
super
|
100
|
-
admonition_inline_name(elem)
|
101
105
|
admonition_outside_clauses(elem)
|
102
106
|
end
|
103
107
|
|
@@ -113,17 +117,6 @@ module IsoDoc
|
|
113
117
|
cell.children.each { |p| wrap_in_bold(p) }
|
114
118
|
end
|
115
119
|
|
116
|
-
def admonition_inline_name(elem)
|
117
|
-
n = elem.at(ns("./name")) or return
|
118
|
-
if (p = n.next_element) && p&.name == "p"
|
119
|
-
p.children.first.previous = admonition_name(to_xml(n.remove.children))
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
def admonition_name(xml)
|
124
|
-
"#{xml} — "
|
125
|
-
end
|
126
|
-
|
127
120
|
def bibrender_formattedref(formattedref, xml)
|
128
121
|
%w(techreport standard).include? xml["type"] and return
|
129
122
|
super
|
@@ -146,10 +139,9 @@ module IsoDoc
|
|
146
139
|
|
147
140
|
def formula_where(dlist)
|
148
141
|
dlist.nil? and return
|
149
|
-
|
142
|
+
dlist.xpath(ns("./dt")).size == 1 &&
|
150
143
|
dlist.at(ns("./dd"))&.elements&.size == 1 &&
|
151
|
-
dlist.at(ns("./dd/p"))
|
152
|
-
|
144
|
+
dlist.at(ns("./dd/p")) or return super
|
153
145
|
formula_where_one(dlist)
|
154
146
|
end
|
155
147
|
|
@@ -162,7 +154,7 @@ module IsoDoc
|
|
162
154
|
|
163
155
|
def table1(elem)
|
164
156
|
elem.xpath(ns(".//dl[@key = 'true'][not(./name)]")).each do |dl|
|
165
|
-
dl.
|
157
|
+
dl.add_first_child "<name>#{@i18n.key}</name>"
|
166
158
|
end
|
167
159
|
super
|
168
160
|
end
|
@@ -177,7 +169,7 @@ module IsoDoc
|
|
177
169
|
return
|
178
170
|
s = docxml.at(ns("//sections")) or return
|
179
171
|
ret = "#{middle_title_main}#{middle_title_amd}"
|
180
|
-
s.
|
172
|
+
s.add_first_child ret
|
181
173
|
end
|
182
174
|
|
183
175
|
def middle_title_main
|
@@ -214,9 +206,7 @@ module IsoDoc
|
|
214
206
|
end
|
215
207
|
|
216
208
|
def move_norm_ref_to_sections(docxml)
|
217
|
-
|
218
|
-
else super
|
219
|
-
end
|
209
|
+
amd?(docxml) or super
|
220
210
|
end
|
221
211
|
|
222
212
|
def twitter_cldr_localiser_symbols
|
@@ -224,6 +214,25 @@ module IsoDoc
|
|
224
214
|
fraction_group_digits: 3 }
|
225
215
|
end
|
226
216
|
|
217
|
+
def implicit_reference(bib)
|
218
|
+
bib.at(ns("./docidentifier"))&.text == "IEV" and return true
|
219
|
+
super
|
220
|
+
end
|
221
|
+
|
222
|
+
def render_identifier(ident)
|
223
|
+
ret = super
|
224
|
+
ret[:sdo] = std_docid_semantic(ret[:sdo])
|
225
|
+
ret
|
226
|
+
end
|
227
|
+
|
228
|
+
def admonition_delim(elem)
|
229
|
+
if elem.at("./*[not(self::xmlns:name)]")&.name == "p"
|
230
|
+
" — "
|
231
|
+
else
|
232
|
+
""
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
227
236
|
include Init
|
228
237
|
end
|
229
238
|
end
|
data/lib/isodoc/iso/sections.rb
CHANGED
@@ -12,7 +12,7 @@ module IsoDoc
|
|
12
12
|
@foreword = true
|
13
13
|
page_break(out)
|
14
14
|
out.div **attr_code(id: clause["id"]) do |s|
|
15
|
-
clause_name(nil, clause.at(ns("./title"))
|
15
|
+
clause_name(nil, clause.at(ns("./title")), s,
|
16
16
|
{ class: "ForewordTitle" })
|
17
17
|
clause.elements.each { |e| parse(e, s) unless e.name == "title" }
|
18
18
|
end
|
@@ -110,26 +110,44 @@ module IsoDoc
|
|
110
110
|
end
|
111
111
|
|
112
112
|
def authority_cleanup(docxml)
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
auth
|
120
|
-
|
121
|
-
|
122
|
-
|
113
|
+
authority_license_cleanup(docxml)
|
114
|
+
authority_copyright_cleanup(docxml)
|
115
|
+
coverpage_note_cleanup(docxml)
|
116
|
+
end
|
117
|
+
|
118
|
+
def authority_copyright_cleanup(docxml)
|
119
|
+
auth = docxml.at("//div[@class = 'boilerplate-copyright']") or return
|
120
|
+
authority_copyright_style(auth)
|
121
|
+
authority_copyright_populate(docxml, auth)
|
122
|
+
end
|
123
|
+
|
124
|
+
def authority_copyright_style(auth)
|
125
|
+
auth.xpath(".//p[not(@class)]").each { |p| p["class"] = "zzCopyright" }
|
126
|
+
auth.xpath(".//p[@id = 'boilerplate-message']").each do |p|
|
123
127
|
p["class"] = "zzCopyright1"
|
124
128
|
end
|
125
|
-
auth
|
129
|
+
auth.xpath(".//p[@id = 'boilerplate-address']").each do |p|
|
126
130
|
p["class"] = "zzAddress"
|
127
131
|
end
|
128
|
-
auth
|
132
|
+
auth.xpath(".//p[@id = 'boilerplate-place']").each do |p|
|
129
133
|
p["class"] = "zzCopyright1"
|
130
134
|
end
|
131
|
-
|
132
|
-
|
135
|
+
end
|
136
|
+
|
137
|
+
def authority_copyright_populate(doc, auth)
|
138
|
+
i = doc.at("//div[@id = 'boilerplate-copyright-default-destination']")
|
139
|
+
j = doc.at("//div[@id = 'boilerplate-copyright-append-destination']")
|
140
|
+
default = auth.at(".//div[@id = 'boilerplate-copyright-default']")
|
141
|
+
default and i and i.children = default.remove
|
142
|
+
j and j.children = auth.remove
|
143
|
+
end
|
144
|
+
|
145
|
+
def authority_license_cleanup(docxml)
|
146
|
+
dest = docxml.at("//div[@id = 'boilerplate-license-destination']") or
|
147
|
+
return
|
148
|
+
auth = docxml.at("//div[@class = 'boilerplate-license']") or return
|
149
|
+
auth.xpath(".//p[not(@class)]").each { |p| p["class"] = "zzWarning" }
|
150
|
+
dest.children = auth.remove
|
133
151
|
end
|
134
152
|
|
135
153
|
def word_cleanup(docxml)
|
@@ -142,9 +160,7 @@ module IsoDoc
|
|
142
160
|
# supply missing annex title
|
143
161
|
def make_WordToC(docxml, level)
|
144
162
|
toc = ""
|
145
|
-
|
146
|
-
toc = to_xml(source.children)
|
147
|
-
end
|
163
|
+
s = docxml.at("//div[@class = 'TOC']") and toc = to_xml(s.children)
|
148
164
|
xpath = (1..level).each.map { |i| "//h#{i}" }.join (" | ")
|
149
165
|
docxml.xpath(xpath).each do |h|
|
150
166
|
x = ""
|
@@ -7,7 +7,7 @@ module IsoDoc
|
|
7
7
|
clause.at(ns("./clause")) and
|
8
8
|
@anchors[clause["id"]] = { label: nil, level: 1, type: "clause",
|
9
9
|
xref: clause.at(ns("./title"))&.text }
|
10
|
-
i = Counter.new(0, prefix: "0
|
10
|
+
i = Counter.new(0, prefix: "0")
|
11
11
|
clause.xpath(ns("./clause")).each do |c|
|
12
12
|
section_names1(c, i.increment(c).print, 2)
|
13
13
|
end
|
@@ -26,7 +26,7 @@ module IsoDoc
|
|
26
26
|
anchor_struct(i.print, nil, @labels["appendix"],
|
27
27
|
"clause").merge(level: 2, subtype: "annex",
|
28
28
|
container: clause["id"])
|
29
|
-
j = Counter.new(0, prefix:
|
29
|
+
j = Counter.new(0, prefix: i.print)
|
30
30
|
c.xpath(ns("./clause | ./references")).each do |c1|
|
31
31
|
lbl = "#{@labels['appendix']} #{j.increment(c1).print}"
|
32
32
|
appendix_names1(c1, l10n(lbl), 3, clause["id"])
|
@@ -62,7 +62,7 @@ module IsoDoc
|
|
62
62
|
|
63
63
|
def annex_names1(clause, num, level)
|
64
64
|
annex_name_anchors1(clause, num, level)
|
65
|
-
i = Counter.new(0, prefix:
|
65
|
+
i = Counter.new(0, prefix: num)
|
66
66
|
clause.xpath(ns("./clause | ./references")).each do |c|
|
67
67
|
annex_names1(c, i.increment(c).print, level + 1)
|
68
68
|
end
|
@@ -71,7 +71,7 @@ module IsoDoc
|
|
71
71
|
def appendix_names1(clause, num, level, container)
|
72
72
|
@anchors[clause["id"]] = { label: num, xref: num, level: level,
|
73
73
|
container: container }
|
74
|
-
i = Counter.new(0, prefix:
|
74
|
+
i = Counter.new(0, prefix: num)
|
75
75
|
clause.xpath(ns("./clause | ./references")).each do |c|
|
76
76
|
appendix_names1(c, i.increment(c).print, level + 1, container)
|
77
77
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
== copyright-statement
|
2
2
|
{% if document_scheme == "1951" %}
|
3
3
|
|
4
|
+
[[boilerplate-copyright-default]]
|
4
5
|
=== REPRODUCTION INTERDITE
|
5
6
|
|
6
7
|
[[boilerplate-message]]
|
@@ -20,6 +21,7 @@ nationales de normalisation.
|
|
20
21
|
|
21
22
|
{% elsif document_scheme == "1972" or document_scheme == "1987" %}
|
22
23
|
|
24
|
+
[[boilerplate-copyright-default]]
|
23
25
|
=== {blank}
|
24
26
|
|
25
27
|
[[boilerplate-year]]
|
@@ -31,6 +33,7 @@ Publié en Suisse
|
|
31
33
|
|
32
34
|
{% elsif document_scheme == "1989" %}
|
33
35
|
|
36
|
+
[[boilerplate-copyright-default]]
|
34
37
|
=== {blank}
|
35
38
|
|
36
39
|
[[boilerplate-year]]
|
@@ -53,6 +56,7 @@ Imprimé en Suisse
|
|
53
56
|
|
54
57
|
|
55
58
|
{% else %}
|
59
|
+
[[boilerplate-copyright-default]]
|
56
60
|
=== {% if stage_int >= 40 %}DOCUMENT PROTÉGÉ PAR COPYRIGHT{%else%}{blank}{%endif%}
|
57
61
|
|
58
62
|
[[boilerplate-year]]
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
{% if document_scheme == "1972" or document_scheme == "1987" %}
|
4
4
|
|
5
|
+
[[boilerplate-copyright-default]]
|
5
6
|
=== {blank}
|
6
7
|
|
7
8
|
[[boilerplate-year]]
|
@@ -12,6 +13,7 @@
|
|
12
13
|
|
13
14
|
{% elsif document_scheme == "1989" %}
|
14
15
|
|
16
|
+
[[boilerplate-copyright-default]]
|
15
17
|
=== {blank}
|
16
18
|
|
17
19
|
[[boilerplate-year]]
|
@@ -34,6 +36,7 @@ X.400          c=ch; a=400net;
|
|
34
36
|
|
35
37
|
{% else %}
|
36
38
|
|
39
|
+
[[boilerplate-copyright-default]]
|
37
40
|
=== {% if stage_int >= 40 %}ДОКУМЕНТ, ОХРАНЯЕМЫЙ АВТОРСКИМ ПРАВОМ{% else %}{blank}{% endif %}
|
38
41
|
|
39
42
|
[[boilerplate-year]]
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
{% if document_scheme == "1951" %}
|
4
4
|
|
5
|
+
[[boilerplate-copyright-default]]
|
5
6
|
=== COPYRIGHT RESERVED
|
6
7
|
|
7
8
|
[[boilerplate-message]]
|
@@ -20,6 +21,7 @@ Also issued in French and Russian. Copies to be obtained through the national st
|
|
20
21
|
|
21
22
|
{% elsif document_scheme == "1972" or document_scheme == "1987" %}
|
22
23
|
|
24
|
+
[[boilerplate-copyright-default]]
|
23
25
|
=== {blank}
|
24
26
|
|
25
27
|
[[boilerplate-year]]
|
@@ -31,6 +33,7 @@ Printed in Switzerland
|
|
31
33
|
|
32
34
|
{% elsif document_scheme == "1989" %}
|
33
35
|
|
36
|
+
[[boilerplate-copyright-default]]
|
34
37
|
=== {blank}
|
35
38
|
|
36
39
|
[[boilerplate-year]]
|
@@ -53,6 +56,7 @@ Printed in Switzerland
|
|
53
56
|
|
54
57
|
{% else %}
|
55
58
|
|
59
|
+
[[boilerplate-copyright-default]]
|
56
60
|
=== {% if stage_int >= 40 %}COPYRIGHT PROTECTED DOCUMENT{% else %}{blank}{% endif %}
|
57
61
|
|
58
62
|
[[boilerplate-year]]
|
data/lib/metanorma/iso/front.rb
CHANGED
@@ -12,11 +12,16 @@ module Metanorma
|
|
12
12
|
class Converter < Standoc::Converter
|
13
13
|
def metadata_ext(node, xml)
|
14
14
|
super
|
15
|
+
metadata_ext_iso(node, xml)
|
16
|
+
end
|
17
|
+
|
18
|
+
def metadata_ext_iso(node, xml)
|
15
19
|
structured_id(node, xml)
|
16
20
|
metadata_stage(node, xml)
|
17
21
|
@amd && a = node.attr("updates-document-type") and
|
18
22
|
xml.updates_document_type a
|
19
23
|
a = node.attr("fast-track") and xml.send "fast-track", a != "false"
|
24
|
+
a = node.attr("price-code") and xml.price_code a
|
20
25
|
end
|
21
26
|
|
22
27
|
STAGE_ERROR = [Pubid::Core::Errors::HarmonizedStageCodeInvalidError,
|
@@ -54,12 +54,10 @@ module Metanorma
|
|
54
54
|
def contrib_committee_build(xml, agency, committee)
|
55
55
|
name = org_abbrev.invert[agency] and agency = name
|
56
56
|
xml.name agency
|
57
|
-
xml.subdivision do |
|
58
|
-
s.organization do |o|
|
57
|
+
xml.subdivision do |o|
|
59
58
|
o.name committee[:name]
|
60
59
|
committee[:abbr] and o.abbreviation committee[:abbr]
|
61
60
|
committee[:ident] and o.identifier committee[:ident]
|
62
|
-
end
|
63
61
|
end
|
64
62
|
end
|
65
63
|
|
@@ -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 v1.
|
20
|
+
<!-- VERSION v1.4.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">
|
@@ -30,6 +30,9 @@
|
|
30
30
|
<optional>
|
31
31
|
<ref name="fast_track"/>
|
32
32
|
</optional>
|
33
|
+
<optional>
|
34
|
+
<ref name="price-code"/>
|
35
|
+
</optional>
|
33
36
|
</define>
|
34
37
|
<define name="bdate">
|
35
38
|
<element name="date">
|
@@ -234,4 +237,9 @@
|
|
234
237
|
<data type="boolean"/>
|
235
238
|
</element>
|
236
239
|
</define>
|
240
|
+
<define name="price-code">
|
241
|
+
<element name="price-code">
|
242
|
+
<text/>
|
243
|
+
</element>
|
244
|
+
</define>
|
237
245
|
</grammar>
|
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", "~> 2.
|
35
|
+
spec.add_dependency "metanorma-standoc", "~> 2.10.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: 2.
|
4
|
+
version: 2.9.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: 2024-
|
11
|
+
date: 2024-11-11 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: 2.
|
19
|
+
version: 2.10.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: 2.
|
26
|
+
version: 2.10.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: mnconvert
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|