metanorma-iso 1.6.0 → 1.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/rake.yml +17 -0
- data/lib/asciidoctor/iso/isodoc.rng +26 -3
- data/lib/asciidoctor/iso/isostandard-amd.rng +8 -4
- data/lib/asciidoctor/iso/isostandard.rng +16 -10
- data/lib/asciidoctor/iso/validate.rb +12 -0
- data/lib/asciidoctor/iso/validate_section.rb +12 -9
- data/lib/isodoc/iso/iso.amendment.xsl +18 -2
- data/lib/isodoc/iso/iso.international-standard.xsl +18 -2
- data/lib/isodoc/iso/sections.rb +1 -1
- data/lib/isodoc/iso/xref.rb +28 -12
- data/lib/metanorma/iso/version.rb +1 -1
- data/metanorma-iso.gemspec +1 -1
- data/spec/asciidoctor-iso/amd_spec.rb +14 -14
- data/spec/asciidoctor-iso/base_spec.rb +16 -16
- data/spec/asciidoctor-iso/blocks_spec.rb +21 -21
- data/spec/asciidoctor-iso/cleanup_spec.rb +25 -25
- data/spec/asciidoctor-iso/inline_spec.rb +7 -7
- data/spec/asciidoctor-iso/lists_spec.rb +3 -3
- data/spec/asciidoctor-iso/refs_spec.rb +4 -4
- data/spec/asciidoctor-iso/section_spec.rb +7 -7
- data/spec/asciidoctor-iso/table_spec.rb +4 -4
- data/spec/asciidoctor-iso/validate_spec.rb +384 -85
- data/spec/isodoc/amd_spec.rb +13 -13
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 769601244fc001de9523edde3e6b139a897df0c82a255b786659a83a2e32d8a5
|
4
|
+
data.tar.gz: 1ea613b3740ec30cc508fa5817bed662f3fe539b7bf03e2cf7e40e4ab1e1c8c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 870aaeca24c5e5878441a8346c2dc0d8d8cdd19604c50399c38b8af18bd29a90ab3c0dd8c8d080b977c35efc794bbfbffa4ca233113c3c3a103d90542981ba90
|
7
|
+
data.tar.gz: a6bb8b2d6f598ddf12b8982fa1203165d07f94df83a0f2f7d96eba635834b69e0420e7e46e5cfe86b5ba0283a553106a7941cd06be868032dec6e0179dc1fbb4
|
data/.github/workflows/rake.yml
CHANGED
@@ -36,6 +36,9 @@ jobs:
|
|
36
36
|
with:
|
37
37
|
ruby-version: ${{ matrix.ruby }}
|
38
38
|
|
39
|
+
- if: matrix.os == 'macos-latest'
|
40
|
+
run: brew install autoconf automake libtool
|
41
|
+
|
39
42
|
- uses: actions/cache@v2
|
40
43
|
with:
|
41
44
|
path: vendor/bundle
|
@@ -64,3 +67,17 @@ jobs:
|
|
64
67
|
run: cinst -y plantuml
|
65
68
|
|
66
69
|
- run: bundle exec rake
|
70
|
+
|
71
|
+
tests-passed:
|
72
|
+
needs: rake
|
73
|
+
runs-on: ubuntu-latest
|
74
|
+
continue-on-error: true
|
75
|
+
steps:
|
76
|
+
- name: Trigger tests passed event
|
77
|
+
uses: Sibz/github-status-action@v1
|
78
|
+
with:
|
79
|
+
authToken: ${{ secrets.METANORMA_CI_PAT_TOKEN || secrets.GITHUB_TOKEN }}
|
80
|
+
context: 'tests-passed-successfully'
|
81
|
+
description: 'Tests passed successfully'
|
82
|
+
state: 'success'
|
83
|
+
sha: ${{ github.event.pull_request.head.sha || github.sha }}
|
@@ -253,6 +253,9 @@
|
|
253
253
|
<data type="boolean"/>
|
254
254
|
</attribute>
|
255
255
|
</optional>
|
256
|
+
<optional>
|
257
|
+
<attribute name="width"/>
|
258
|
+
</optional>
|
256
259
|
<optional>
|
257
260
|
<ref name="colgroup"/>
|
258
261
|
</optional>
|
@@ -836,6 +839,9 @@
|
|
836
839
|
<data type="boolean"/>
|
837
840
|
</attribute>
|
838
841
|
</optional>
|
842
|
+
<optional>
|
843
|
+
<attribute name="number"/>
|
844
|
+
</optional>
|
839
845
|
<optional>
|
840
846
|
<attribute name="obligation">
|
841
847
|
<choice>
|
@@ -891,9 +897,11 @@
|
|
891
897
|
<element name="code">
|
892
898
|
<text/>
|
893
899
|
</element>
|
894
|
-
<
|
895
|
-
<text
|
896
|
-
|
900
|
+
<optional>
|
901
|
+
<element name="text">
|
902
|
+
<text/>
|
903
|
+
</element>
|
904
|
+
</optional>
|
897
905
|
</element>
|
898
906
|
</define>
|
899
907
|
<define name="standard-document">
|
@@ -1063,6 +1071,9 @@
|
|
1063
1071
|
</choice>
|
1064
1072
|
</attribute>
|
1065
1073
|
</optional>
|
1074
|
+
<optional>
|
1075
|
+
<attribute name="number"/>
|
1076
|
+
</optional>
|
1066
1077
|
<optional>
|
1067
1078
|
<attribute name="type"/>
|
1068
1079
|
</optional>
|
@@ -1116,6 +1127,9 @@
|
|
1116
1127
|
<optional>
|
1117
1128
|
<attribute name="type"/>
|
1118
1129
|
</optional>
|
1130
|
+
<optional>
|
1131
|
+
<attribute name="number"/>
|
1132
|
+
</optional>
|
1119
1133
|
<optional>
|
1120
1134
|
<ref name="section-title"/>
|
1121
1135
|
</optional>
|
@@ -1218,6 +1232,9 @@
|
|
1218
1232
|
<optional>
|
1219
1233
|
<attribute name="type"/>
|
1220
1234
|
</optional>
|
1235
|
+
<optional>
|
1236
|
+
<attribute name="number"/>
|
1237
|
+
</optional>
|
1221
1238
|
<optional>
|
1222
1239
|
<attribute name="obligation">
|
1223
1240
|
<choice>
|
@@ -1546,6 +1563,7 @@
|
|
1546
1563
|
<value>add</value>
|
1547
1564
|
<value>modify</value>
|
1548
1565
|
<value>delete</value>
|
1566
|
+
<value>replace</value>
|
1549
1567
|
</choice>
|
1550
1568
|
</attribute>
|
1551
1569
|
<optional>
|
@@ -1576,6 +1594,11 @@
|
|
1576
1594
|
</optional>
|
1577
1595
|
<optional>
|
1578
1596
|
<element name="newcontent">
|
1597
|
+
<optional>
|
1598
|
+
<attribute name="id">
|
1599
|
+
<data type="ID"/>
|
1600
|
+
</attribute>
|
1601
|
+
</optional>
|
1579
1602
|
<zeroOrMore>
|
1580
1603
|
<ref name="BasicBlock"/>
|
1581
1604
|
</zeroOrMore>
|
@@ -14,9 +14,6 @@
|
|
14
14
|
</define>
|
15
15
|
<define name="clause">
|
16
16
|
<element name="clause">
|
17
|
-
<optional>
|
18
|
-
<attribute name="type"/>
|
19
|
-
</optional>
|
20
17
|
<optional>
|
21
18
|
<attribute name="change">
|
22
19
|
<choice>
|
@@ -34,6 +31,13 @@
|
|
34
31
|
</define>
|
35
32
|
<define name="iso-standard">
|
36
33
|
<element name="iso-standard">
|
34
|
+
<attribute name="version"/>
|
35
|
+
<attribute name="type">
|
36
|
+
<choice>
|
37
|
+
<value>semantic</value>
|
38
|
+
<value>presentation</value>
|
39
|
+
</choice>
|
40
|
+
</attribute>
|
37
41
|
<ref name="bibdata"/>
|
38
42
|
<optional>
|
39
43
|
<ref name="boilerplate"/>
|
@@ -68,7 +72,7 @@
|
|
68
72
|
</optional>
|
69
73
|
<optional>
|
70
74
|
<attribute name="origyr">
|
71
|
-
<
|
75
|
+
<ref name="ISO8601Date"/>
|
72
76
|
</attribute>
|
73
77
|
</optional>
|
74
78
|
<text/>
|
@@ -140,22 +140,28 @@
|
|
140
140
|
</choice>
|
141
141
|
</attribute>
|
142
142
|
</optional>
|
143
|
+
<optional>
|
144
|
+
<attribute name="type"/>
|
145
|
+
</optional>
|
143
146
|
<optional>
|
144
147
|
<ref name="section-title"/>
|
145
148
|
</optional>
|
146
|
-
<
|
147
|
-
<
|
148
|
-
<
|
149
|
-
<
|
150
|
-
|
151
|
-
|
152
|
-
<
|
153
|
-
|
154
|
-
|
149
|
+
<group>
|
150
|
+
<choice>
|
151
|
+
<group>
|
152
|
+
<oneOrMore>
|
153
|
+
<ref name="BasicBlock"/>
|
154
|
+
</oneOrMore>
|
155
|
+
<zeroOrMore>
|
156
|
+
<ref name="note"/>
|
157
|
+
</zeroOrMore>
|
158
|
+
</group>
|
159
|
+
<ref name="amend"/>
|
160
|
+
</choice>
|
155
161
|
<oneOrMore>
|
156
162
|
<ref name="clause-subsection"/>
|
157
163
|
</oneOrMore>
|
158
|
-
</
|
164
|
+
</group>
|
159
165
|
</define>
|
160
166
|
<define name="term">
|
161
167
|
<element name="term">
|
@@ -146,6 +146,17 @@ module Asciidoctor
|
|
146
146
|
"#{iteration} is not a recognised iteration")
|
147
147
|
end
|
148
148
|
|
149
|
+
# DRG directives 3.7; but anticipated by standoc
|
150
|
+
def figure_validate(xmldoc)
|
151
|
+
xmldoc.xpath("//figure//figure").each do |f|
|
152
|
+
{ footnote: "fn", note: "note", key: "dl" }.each do |k, v|
|
153
|
+
f.xpath(".//#{v}").each do |n|
|
154
|
+
@log.add("Style", n, "#{k} is not permitted in a subfigure")
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
149
160
|
def bibdata_validate(doc)
|
150
161
|
doctype_validate(doc)
|
151
162
|
script_validate(doc)
|
@@ -166,6 +177,7 @@ module Asciidoctor
|
|
166
177
|
locality_erefs_validate(doc.root)
|
167
178
|
bibdata_validate(doc.root)
|
168
179
|
bibitem_validate(doc.root)
|
180
|
+
figure_validate(doc.root)
|
169
181
|
end
|
170
182
|
|
171
183
|
def bibitem_validate(xmldoc)
|
@@ -4,11 +4,14 @@ module Asciidoctor
|
|
4
4
|
module ISO
|
5
5
|
class Converter < Standoc::Converter
|
6
6
|
def section_validate(doc)
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
doctype = doc&.at("//bibdata/ext/doctype")&.text
|
8
|
+
unless %w(amendment technical-corrigendum).include? doctype
|
9
|
+
foreword_validate(doc.root)
|
10
|
+
normref_validate(doc.root)
|
11
|
+
symbols_validate(doc.root)
|
12
|
+
sections_presence_validate(doc.root)
|
13
|
+
sections_sequence_validate(doc.root)
|
14
|
+
end
|
12
15
|
section_style(doc.root)
|
13
16
|
subclause_validate(doc.root)
|
14
17
|
super
|
@@ -111,13 +114,13 @@ module Asciidoctor
|
|
111
114
|
end
|
112
115
|
n&.at("./self::clause") ||
|
113
116
|
@log.add("Style", nil, "Document must contain clause after "\
|
114
|
-
|
117
|
+
"Terms and Definitions")
|
115
118
|
n&.at("./self::clause[@type = 'scope']") &&
|
116
119
|
@log.add("Style", nil, "Scope must occur before Terms and Definitions")
|
117
120
|
n = names.shift
|
118
121
|
while n&.name == "clause"
|
119
122
|
n&.at("./self::clause[@type = 'scope']")
|
120
|
-
|
123
|
+
@log.add("Style", nil, "Scope must occur before Terms and Definitions")
|
121
124
|
n = names.shift
|
122
125
|
end
|
123
126
|
unless %w(annex references).include? n&.name
|
@@ -127,12 +130,12 @@ module Asciidoctor
|
|
127
130
|
n = names.shift
|
128
131
|
if n.nil?
|
129
132
|
@log.add("Style", nil, "Document must include (references) "\
|
130
|
-
|
133
|
+
"Normative References")
|
131
134
|
end
|
132
135
|
end
|
133
136
|
n&.at("./self::references[@normative = 'true']") ||
|
134
137
|
@log.add("Style", nil, "Document must include (references) "\
|
135
|
-
|
138
|
+
"Normative References")
|
136
139
|
n = names&.shift
|
137
140
|
n&.at("./self::references[@normative = 'false']") ||
|
138
141
|
@log.add("Style", nil, "Final section must be (references) Bibliography")
|
@@ -2763,7 +2763,12 @@
|
|
2763
2763
|
|
2764
2764
|
<xsl:variable name="table_attributes">
|
2765
2765
|
<attribute name="table-layout">fixed</attribute>
|
2766
|
-
<attribute name="width">
|
2766
|
+
<attribute name="width">
|
2767
|
+
<xsl:choose>
|
2768
|
+
<xsl:when test="@width"><xsl:value-of select="@width"/></xsl:when>
|
2769
|
+
<xsl:otherwise>100%</xsl:otherwise>
|
2770
|
+
</xsl:choose>
|
2771
|
+
</attribute>
|
2767
2772
|
<attribute name="margin-left"><xsl:value-of select="$margin-left"/>mm</attribute>
|
2768
2773
|
<attribute name="margin-right"><xsl:value-of select="$margin-left"/>mm</attribute>
|
2769
2774
|
|
@@ -4017,6 +4022,10 @@
|
|
4017
4022
|
</xsl:if>
|
4018
4023
|
<xsl:apply-templates/>
|
4019
4024
|
</fo:inline>
|
4025
|
+
</xsl:template><xsl:template match="*[local-name()='underline']">
|
4026
|
+
<fo:inline text-decoration="underline">
|
4027
|
+
<xsl:apply-templates/>
|
4028
|
+
</fo:inline>
|
4020
4029
|
</xsl:template><xsl:template match="*[local-name()='del']">
|
4021
4030
|
<fo:inline font-size="10pt" color="red" text-decoration="line-through">
|
4022
4031
|
<xsl:apply-templates/>
|
@@ -5584,6 +5593,8 @@
|
|
5584
5593
|
<xsl:value-of select="translate(.,'. ','')"/>
|
5585
5594
|
</xsl:template><xsl:template match="*[local-name() = 'name']/*[local-name() = 'forename']/text()" mode="strip">
|
5586
5595
|
<xsl:value-of select="substring(.,1,1)"/>
|
5596
|
+
</xsl:template><xsl:template match="*[local-name() = 'title']" mode="title">
|
5597
|
+
<fo:inline><xsl:apply-templates/></fo:inline>
|
5587
5598
|
</xsl:template><xsl:template name="convertDate">
|
5588
5599
|
<xsl:param name="date"/>
|
5589
5600
|
<xsl:param name="format" select="'short'"/>
|
@@ -5863,6 +5874,11 @@
|
|
5863
5874
|
<xsl:call-template name="getLang"/>
|
5864
5875
|
</xsl:variable>
|
5865
5876
|
|
5866
|
-
<xsl:
|
5877
|
+
<xsl:choose>
|
5878
|
+
<xsl:when test="/*/*[local-name() = 'localized-strings']/*[local-name() = 'localized-string'][@key = $key and @language = $curr_lang]">
|
5879
|
+
<xsl:value-of select="/*/*[local-name() = 'localized-strings']/*[local-name() = 'localized-string'][@key = $key and @language = $curr_lang]"/>
|
5880
|
+
</xsl:when>
|
5881
|
+
<xsl:otherwise><xsl:value-of select="$key"/></xsl:otherwise>
|
5882
|
+
</xsl:choose>
|
5867
5883
|
|
5868
5884
|
</xsl:template></xsl:stylesheet>
|
@@ -2763,7 +2763,12 @@
|
|
2763
2763
|
|
2764
2764
|
<xsl:variable name="table_attributes">
|
2765
2765
|
<attribute name="table-layout">fixed</attribute>
|
2766
|
-
<attribute name="width">
|
2766
|
+
<attribute name="width">
|
2767
|
+
<xsl:choose>
|
2768
|
+
<xsl:when test="@width"><xsl:value-of select="@width"/></xsl:when>
|
2769
|
+
<xsl:otherwise>100%</xsl:otherwise>
|
2770
|
+
</xsl:choose>
|
2771
|
+
</attribute>
|
2767
2772
|
<attribute name="margin-left"><xsl:value-of select="$margin-left"/>mm</attribute>
|
2768
2773
|
<attribute name="margin-right"><xsl:value-of select="$margin-left"/>mm</attribute>
|
2769
2774
|
|
@@ -4017,6 +4022,10 @@
|
|
4017
4022
|
</xsl:if>
|
4018
4023
|
<xsl:apply-templates/>
|
4019
4024
|
</fo:inline>
|
4025
|
+
</xsl:template><xsl:template match="*[local-name()='underline']">
|
4026
|
+
<fo:inline text-decoration="underline">
|
4027
|
+
<xsl:apply-templates/>
|
4028
|
+
</fo:inline>
|
4020
4029
|
</xsl:template><xsl:template match="*[local-name()='del']">
|
4021
4030
|
<fo:inline font-size="10pt" color="red" text-decoration="line-through">
|
4022
4031
|
<xsl:apply-templates/>
|
@@ -5584,6 +5593,8 @@
|
|
5584
5593
|
<xsl:value-of select="translate(.,'. ','')"/>
|
5585
5594
|
</xsl:template><xsl:template match="*[local-name() = 'name']/*[local-name() = 'forename']/text()" mode="strip">
|
5586
5595
|
<xsl:value-of select="substring(.,1,1)"/>
|
5596
|
+
</xsl:template><xsl:template match="*[local-name() = 'title']" mode="title">
|
5597
|
+
<fo:inline><xsl:apply-templates/></fo:inline>
|
5587
5598
|
</xsl:template><xsl:template name="convertDate">
|
5588
5599
|
<xsl:param name="date"/>
|
5589
5600
|
<xsl:param name="format" select="'short'"/>
|
@@ -5863,6 +5874,11 @@
|
|
5863
5874
|
<xsl:call-template name="getLang"/>
|
5864
5875
|
</xsl:variable>
|
5865
5876
|
|
5866
|
-
<xsl:
|
5877
|
+
<xsl:choose>
|
5878
|
+
<xsl:when test="/*/*[local-name() = 'localized-strings']/*[local-name() = 'localized-string'][@key = $key and @language = $curr_lang]">
|
5879
|
+
<xsl:value-of select="/*/*[local-name() = 'localized-strings']/*[local-name() = 'localized-string'][@key = $key and @language = $curr_lang]"/>
|
5880
|
+
</xsl:when>
|
5881
|
+
<xsl:otherwise><xsl:value-of select="$key"/></xsl:otherwise>
|
5882
|
+
</xsl:choose>
|
5867
5883
|
|
5868
5884
|
</xsl:template></xsl:stylesheet>
|
data/lib/isodoc/iso/sections.rb
CHANGED
data/lib/isodoc/iso/xref.rb
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
module IsoDoc
|
2
2
|
module Iso
|
3
|
+
class Counter < IsoDoc::XrefGen::Counter
|
4
|
+
end
|
5
|
+
|
3
6
|
class Xref < IsoDoc::Xref
|
4
7
|
def initial_anchor_names(d)
|
5
8
|
if @klass.amd(d)
|
6
9
|
d.xpath(ns("//preface/*")).each { |c| c.element? and preface_names(c) }
|
7
10
|
sequential_asset_names(d.xpath(ns("//preface/*")))
|
11
|
+
d.xpath(ns("//sections/clause")).each { |c| c.element? and preface_names(c) }
|
8
12
|
middle_section_asset_names(d)
|
9
13
|
termnote_anchor_names(d)
|
10
14
|
termexample_anchor_names(d)
|
@@ -19,8 +23,10 @@ module IsoDoc
|
|
19
23
|
return if clause.nil?
|
20
24
|
clause.at(ns("./clause")) and @anchors[clause["id"]] =
|
21
25
|
{ label: "0", level: 1, xref: clause.at(ns("./title"))&.text, type: "clause" }
|
22
|
-
|
23
|
-
|
26
|
+
i = Counter.new
|
27
|
+
clause.xpath(ns("./clause")).each do |c|
|
28
|
+
i.increment(c)
|
29
|
+
section_names1(c, "0.#{i.print}", 2)
|
24
30
|
end
|
25
31
|
end
|
26
32
|
|
@@ -30,12 +36,16 @@ module IsoDoc
|
|
30
36
|
end
|
31
37
|
|
32
38
|
def appendix_names(clause, num)
|
33
|
-
|
34
|
-
|
39
|
+
i = Counter.new
|
40
|
+
clause.xpath(ns("./appendix")).each do |c|
|
41
|
+
i.increment(c)
|
42
|
+
@anchors[c["id"]] = anchor_struct(i.print, nil, @labels["appendix"], "clause")
|
35
43
|
@anchors[c["id"]][:level] = 2
|
36
44
|
@anchors[c["id"]][:container] = clause["id"]
|
37
|
-
|
38
|
-
|
45
|
+
j = Counter.new
|
46
|
+
c.xpath(ns("./clause | ./references")).each do |c1|
|
47
|
+
j.increment(c1)
|
48
|
+
appendix_names1(c1, l10n("#{@labels["appendix"]} #{i.print}.#{j.print}"), 3, clause["id"])
|
39
49
|
end
|
40
50
|
end
|
41
51
|
end
|
@@ -44,24 +54,30 @@ module IsoDoc
|
|
44
54
|
@anchors[clause["id"]] =
|
45
55
|
{ label: num, level: level, xref: num }
|
46
56
|
# subclauses are not prefixed with "Clause"
|
57
|
+
i = Counter.new
|
47
58
|
clause.xpath(ns("./clause | ./terms | ./term | ./definitions | "\
|
48
59
|
"./references")).
|
49
|
-
|
50
|
-
|
60
|
+
each do |c|
|
61
|
+
i.increment(c)
|
62
|
+
section_names1(c, "#{num}.#{i.print}", level + 1)
|
51
63
|
end
|
52
64
|
end
|
53
65
|
|
54
66
|
def annex_names1(clause, num, level)
|
55
67
|
@anchors[clause["id"]] = { label: num, xref: num, level: level }
|
56
|
-
|
57
|
-
|
68
|
+
i = Counter.new
|
69
|
+
clause.xpath(ns("./clause | ./references")).each do |c|
|
70
|
+
i.increment(c)
|
71
|
+
annex_names1(c, "#{num}.#{i.print}", level + 1)
|
58
72
|
end
|
59
73
|
end
|
60
74
|
|
61
75
|
def appendix_names1(clause, num, level, container)
|
62
76
|
@anchors[clause["id"]] = { label: num, xref: num, level: level, container: container }
|
63
|
-
|
64
|
-
|
77
|
+
i = Counter.new
|
78
|
+
clause.xpath(ns("./clause | ./references")).each do |c|
|
79
|
+
i.increment(c)
|
80
|
+
appendix_names1(c, "#{num}.#{i.print}", level + 1, container)
|
65
81
|
end
|
66
82
|
end
|
67
83
|
|