metanorma-iso 1.7.2 → 1.7.3
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/.github/workflows/rake.yml +11 -41
- data/lib/asciidoctor/iso/isodoc.rng +23 -1
- data/lib/asciidoctor/iso/isostandard.rng +11 -97
- data/lib/asciidoctor/iso/validate.rb +1 -0
- data/lib/isodoc/iso/base_convert.rb +11 -0
- data/lib/isodoc/iso/i18n-en.yaml +4 -0
- data/lib/isodoc/iso/i18n-fr.yaml +4 -0
- data/lib/isodoc/iso/i18n-zh-Hans.yaml +4 -0
- data/lib/isodoc/iso/index.rb +139 -0
- data/lib/isodoc/iso/iso.amendment.xsl +675 -136
- data/lib/isodoc/iso/iso.international-standard.xsl +675 -136
- data/lib/isodoc/iso/presentation_xml_convert.rb +1 -4
- data/lib/isodoc/iso/xref.rb +5 -0
- data/lib/metanorma/iso/version.rb +1 -1
- data/metanorma-iso.gemspec +1 -1
- data/spec/{asciidoctor-iso → asciidoctor}/amd_spec.rb +0 -0
- data/spec/{asciidoctor-iso → asciidoctor}/base_spec.rb +0 -0
- data/spec/{asciidoctor-iso → asciidoctor}/blocks_spec.rb +0 -0
- data/spec/{asciidoctor-iso → asciidoctor}/cleanup_spec.rb +0 -0
- data/spec/{asciidoctor-iso → asciidoctor}/inline_spec.rb +0 -0
- data/spec/{asciidoctor-iso → asciidoctor}/lists_spec.rb +0 -0
- data/spec/{asciidoctor-iso → asciidoctor}/refs_spec.rb +0 -0
- data/spec/{asciidoctor-iso → asciidoctor}/section_spec.rb +0 -0
- data/spec/{asciidoctor-iso → asciidoctor}/table_spec.rb +0 -0
- data/spec/{asciidoctor-iso → asciidoctor}/validate_spec.rb +0 -0
- data/spec/isodoc/section_spec.rb +219 -0
- metadata +17 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 04b55e3ca534c69d32ca0f9379574e2ea64af41abdcfcd723532917cce1dbb11
|
4
|
+
data.tar.gz: 9a4910e86d2792bf82e863ed1d57cd0bd492667acc2eef5eaf0d7443b99fd730
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cee47fc2106cf2573bb9c5d1198c230c0b9c1e350a8c12b5c1764eb683e058579619cbcb26c33a8cd4f838ccaccc7282ba1e990777d672c5b0b1269f0f950ce7
|
7
|
+
data.tar.gz: 4515aa0402dddc620a72837044e3c47a8864a2503109a57846037f96041f7a88d9c4dca652c7392b9ce1ab45d158922316d565b32b8c35a6dc2695b108da46c7
|
data/.github/workflows/rake.yml
CHANGED
@@ -16,17 +16,17 @@ jobs:
|
|
16
16
|
strategy:
|
17
17
|
fail-fast: false
|
18
18
|
matrix:
|
19
|
-
ruby: [ '2.6', '2.5', '2.4' ]
|
19
|
+
ruby: [ '2.7', '2.6', '2.5', '2.4' ]
|
20
20
|
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
21
21
|
experimental: [ false ]
|
22
22
|
include:
|
23
|
-
- ruby: '
|
23
|
+
- ruby: '3.0'
|
24
24
|
os: 'ubuntu-latest'
|
25
25
|
experimental: true
|
26
|
-
- ruby: '
|
26
|
+
- ruby: '3.0'
|
27
27
|
os: 'windows-latest'
|
28
28
|
experimental: true
|
29
|
-
- ruby: '
|
29
|
+
- ruby: '3.0'
|
30
30
|
os: 'macos-latest'
|
31
31
|
experimental: true
|
32
32
|
steps:
|
@@ -35,49 +35,19 @@ jobs:
|
|
35
35
|
- uses: ruby/setup-ruby@v1
|
36
36
|
with:
|
37
37
|
ruby-version: ${{ matrix.ruby }}
|
38
|
+
bundler-cache: true
|
38
39
|
|
39
|
-
-
|
40
|
-
run: brew install autoconf automake libtool
|
41
|
-
|
42
|
-
- uses: actions/cache@v2
|
43
|
-
with:
|
44
|
-
path: vendor/bundle
|
45
|
-
key: bundle-${{ matrix.os }}-${{ matrix.ruby }}-${{ hashFiles('**/*.gemspec') }}
|
46
|
-
restore-keys: bundle-${{ matrix.os }}-${{ matrix.ruby }}
|
47
|
-
|
48
|
-
- run: bundle config set path 'vendor/bundle'
|
49
|
-
|
50
|
-
- run: bundle install --jobs 4 --retry 3
|
51
|
-
|
52
|
-
- name: install plantuml ubuntu
|
53
|
-
if: matrix.os == 'ubuntu-latest'
|
54
|
-
uses: nick-invision/retry@v1
|
55
|
-
with:
|
56
|
-
polling_interval_seconds: 5
|
57
|
-
timeout_minutes: 5
|
58
|
-
max_attempts: 3
|
59
|
-
command: >
|
60
|
-
sudo apt-get update -y && sudo bash -c
|
61
|
-
"curl -L https://github.com/metanorma/plantuml-install/raw/master/ubuntu.sh | bash"
|
62
|
-
|
63
|
-
- if: matrix.os == 'macos-latest'
|
64
|
-
run: brew install plantuml
|
65
|
-
|
66
|
-
- if: matrix.os == 'windows-latest'
|
67
|
-
run: cinst -y plantuml
|
40
|
+
- uses: metanorma/metanorma-build-scripts/plantuml-setup-action@master
|
68
41
|
|
69
42
|
- run: bundle exec rake
|
70
43
|
|
71
44
|
tests-passed:
|
72
45
|
needs: rake
|
73
46
|
runs-on: ubuntu-latest
|
74
|
-
continue-on-error: true
|
75
47
|
steps:
|
76
|
-
-
|
77
|
-
uses: Sibz/github-status-action@v1
|
48
|
+
- uses: peter-evans/repository-dispatch@v1
|
78
49
|
with:
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
sha: ${{ github.event.pull_request.head.sha || github.sha }}
|
50
|
+
token: ${{ secrets.METANORMA_CI_PAT_TOKEN || secrets.GITHUB_TOKEN }}
|
51
|
+
repository: ${{ github.repository }}
|
52
|
+
event-type: notify
|
53
|
+
client-payload: '{"ref": "${{ github.ref }}", "sha": "${{ github.sha }}"}'
|
@@ -102,7 +102,7 @@
|
|
102
102
|
</attribute>
|
103
103
|
</optional>
|
104
104
|
<oneOrMore>
|
105
|
-
<ref name="
|
105
|
+
<ref name="ul_li"/>
|
106
106
|
</oneOrMore>
|
107
107
|
<zeroOrMore>
|
108
108
|
<ref name="note"/>
|
@@ -1716,4 +1716,26 @@
|
|
1716
1716
|
</zeroOrMore>
|
1717
1717
|
</element>
|
1718
1718
|
</define>
|
1719
|
+
<define name="ul_li">
|
1720
|
+
<element name="li">
|
1721
|
+
<optional>
|
1722
|
+
<attribute name="id">
|
1723
|
+
<data type="ID"/>
|
1724
|
+
</attribute>
|
1725
|
+
</optional>
|
1726
|
+
<optional>
|
1727
|
+
<attribute name="uncheckedcheckbox">
|
1728
|
+
<data type="boolean"/>
|
1729
|
+
</attribute>
|
1730
|
+
</optional>
|
1731
|
+
<optional>
|
1732
|
+
<attribute name="checkedcheckbox">
|
1733
|
+
<data type="boolean"/>
|
1734
|
+
</attribute>
|
1735
|
+
</optional>
|
1736
|
+
<oneOrMore>
|
1737
|
+
<ref name="BasicBlock"/>
|
1738
|
+
</oneOrMore>
|
1739
|
+
</element>
|
1740
|
+
</define>
|
1719
1741
|
</grammar>
|
@@ -79,19 +79,6 @@
|
|
79
79
|
</choice>
|
80
80
|
</element>
|
81
81
|
</define>
|
82
|
-
<define name="ul">
|
83
|
-
<element name="ul">
|
84
|
-
<attribute name="id">
|
85
|
-
<data type="ID"/>
|
86
|
-
</attribute>
|
87
|
-
<oneOrMore>
|
88
|
-
<ref name="ul_li"/>
|
89
|
-
</oneOrMore>
|
90
|
-
<zeroOrMore>
|
91
|
-
<ref name="note"/>
|
92
|
-
</zeroOrMore>
|
93
|
-
</element>
|
94
|
-
</define>
|
95
82
|
<define name="sections">
|
96
83
|
<element name="sections">
|
97
84
|
<zeroOrMore>
|
@@ -192,17 +179,6 @@
|
|
192
179
|
</zeroOrMore>
|
193
180
|
</element>
|
194
181
|
</define>
|
195
|
-
<define name="definition">
|
196
|
-
<element name="definition">
|
197
|
-
<oneOrMore>
|
198
|
-
<choice>
|
199
|
-
<ref name="paragraph"/>
|
200
|
-
<ref name="figure"/>
|
201
|
-
<ref name="formula"/>
|
202
|
-
</choice>
|
203
|
-
</oneOrMore>
|
204
|
-
</element>
|
205
|
-
</define>
|
206
182
|
<define name="annex">
|
207
183
|
<element name="annex">
|
208
184
|
<optional>
|
@@ -333,6 +309,11 @@
|
|
333
309
|
<optional>
|
334
310
|
<attribute name="script"/>
|
335
311
|
</optional>
|
312
|
+
<optional>
|
313
|
+
<attribute name="inline-header">
|
314
|
+
<data type="boolean"/>
|
315
|
+
</attribute>
|
316
|
+
</optional>
|
336
317
|
<optional>
|
337
318
|
<attribute name="obligation">
|
338
319
|
<choice>
|
@@ -341,6 +322,12 @@
|
|
341
322
|
</choice>
|
342
323
|
</attribute>
|
343
324
|
</optional>
|
325
|
+
<optional>
|
326
|
+
<attribute name="number"/>
|
327
|
+
</optional>
|
328
|
+
<optional>
|
329
|
+
<attribute name="type"/>
|
330
|
+
</optional>
|
344
331
|
<optional>
|
345
332
|
<ref name="section-title"/>
|
346
333
|
</optional>
|
@@ -358,57 +345,6 @@
|
|
358
345
|
</oneOrMore>
|
359
346
|
</choice>
|
360
347
|
</define>
|
361
|
-
<define name="table">
|
362
|
-
<element name="table">
|
363
|
-
<attribute name="id">
|
364
|
-
<data type="ID"/>
|
365
|
-
</attribute>
|
366
|
-
<optional>
|
367
|
-
<attribute name="width"/>
|
368
|
-
</optional>
|
369
|
-
<optional>
|
370
|
-
<attribute name="unnumbered">
|
371
|
-
<data type="boolean"/>
|
372
|
-
</attribute>
|
373
|
-
</optional>
|
374
|
-
<optional>
|
375
|
-
<attribute name="number"/>
|
376
|
-
</optional>
|
377
|
-
<optional>
|
378
|
-
<attribute name="subsequence"/>
|
379
|
-
</optional>
|
380
|
-
<optional>
|
381
|
-
<attribute name="alt"/>
|
382
|
-
</optional>
|
383
|
-
<optional>
|
384
|
-
<attribute name="summary"/>
|
385
|
-
</optional>
|
386
|
-
<optional>
|
387
|
-
<attribute name="uri">
|
388
|
-
<data type="anyURI"/>
|
389
|
-
</attribute>
|
390
|
-
</optional>
|
391
|
-
<optional>
|
392
|
-
<ref name="colgroup"/>
|
393
|
-
</optional>
|
394
|
-
<optional>
|
395
|
-
<ref name="tname"/>
|
396
|
-
</optional>
|
397
|
-
<optional>
|
398
|
-
<ref name="thead"/>
|
399
|
-
</optional>
|
400
|
-
<ref name="tbody"/>
|
401
|
-
<optional>
|
402
|
-
<ref name="tfoot"/>
|
403
|
-
</optional>
|
404
|
-
<zeroOrMore>
|
405
|
-
<ref name="table-note"/>
|
406
|
-
</zeroOrMore>
|
407
|
-
<optional>
|
408
|
-
<ref name="dl"/>
|
409
|
-
</optional>
|
410
|
-
</element>
|
411
|
-
</define>
|
412
348
|
</include>
|
413
349
|
<!-- end overrides -->
|
414
350
|
<!--
|
@@ -533,28 +469,6 @@
|
|
533
469
|
<ref name="Clause-Section"/>
|
534
470
|
</element>
|
535
471
|
</define>
|
536
|
-
<define name="ul_li">
|
537
|
-
<element name="li">
|
538
|
-
<optional>
|
539
|
-
<attribute name="id">
|
540
|
-
<data type="ID"/>
|
541
|
-
</attribute>
|
542
|
-
</optional>
|
543
|
-
<optional>
|
544
|
-
<attribute name="uncheckedcheckbox">
|
545
|
-
<data type="boolean"/>
|
546
|
-
</attribute>
|
547
|
-
</optional>
|
548
|
-
<optional>
|
549
|
-
<attribute name="checkedcheckbox">
|
550
|
-
<data type="boolean"/>
|
551
|
-
</attribute>
|
552
|
-
</optional>
|
553
|
-
<oneOrMore>
|
554
|
-
<ref name="BasicBlock"/>
|
555
|
-
</oneOrMore>
|
556
|
-
</element>
|
557
|
-
</define>
|
558
472
|
<define name="stagename">
|
559
473
|
<element name="stagename">
|
560
474
|
<text/>
|
@@ -209,6 +209,7 @@ module Asciidoctor
|
|
209
209
|
def image_name_validate(xmldoc)
|
210
210
|
prefix = image_name_prefix(xmldoc) or return
|
211
211
|
xmldoc.xpath("//image").each do |i|
|
212
|
+
next if i["src"].start_with?("data:")
|
212
213
|
if /^ISO_\d+_/.match(File.basename(i["src"]))
|
213
214
|
elsif /^(SL)?#{prefix}fig/.match(File.basename(i["src"]))
|
214
215
|
image_name_validate1(i, prefix)
|
@@ -152,6 +152,17 @@ module IsoDoc
|
|
152
152
|
name and name.children.each { |n| parse(n, div) }
|
153
153
|
end
|
154
154
|
end
|
155
|
+
|
156
|
+
def middle(isoxml, out)
|
157
|
+
super
|
158
|
+
indexsect isoxml, out
|
159
|
+
end
|
160
|
+
|
161
|
+
def indexsect(isoxml, out)
|
162
|
+
isoxml.xpath(ns("//indexsect")).each do |i|
|
163
|
+
clause_parse(i, out)
|
164
|
+
end
|
165
|
+
end
|
155
166
|
end
|
156
167
|
end
|
157
168
|
end
|
data/lib/isodoc/iso/i18n-en.yaml
CHANGED
data/lib/isodoc/iso/i18n-fr.yaml
CHANGED
@@ -0,0 +1,139 @@
|
|
1
|
+
module IsoDoc
|
2
|
+
module Iso
|
3
|
+
class PresentationXMLConvert < IsoDoc::PresentationXMLConvert
|
4
|
+
def add_id
|
5
|
+
%(id="_#{UUIDTools::UUID.random_create}")
|
6
|
+
end
|
7
|
+
|
8
|
+
def index(docxml)
|
9
|
+
unless docxml.at(ns("//index"))
|
10
|
+
docxml.xpath(ns("//indexsect")).each { |i| i.remove }
|
11
|
+
return
|
12
|
+
end
|
13
|
+
i = docxml.at(ns("//indexsect")) ||
|
14
|
+
docxml.root.add_child("<indexsect #{add_id}><title>#{@i18n.index}</title></indexsect>").first
|
15
|
+
index = sort_indexterms(docxml.xpath(ns("//index")), docxml.xpath(ns("//index-xref[@also = 'false']")),
|
16
|
+
docxml.xpath(ns("//index-xref[@also = 'true']")))
|
17
|
+
index1(docxml, i, index)
|
18
|
+
end
|
19
|
+
|
20
|
+
def index1(docxml, i, index)
|
21
|
+
c = i.add_child("<ul></ul>").first
|
22
|
+
index.keys.sort.each do |k|
|
23
|
+
#c = i.add_child "<clause #{add_id}><title>#{k}</title><ul></ul></clause>"
|
24
|
+
words = index[k].keys.each_with_object({}) { |w, v| v[sortable(w).downcase] = w }
|
25
|
+
words.keys.localize(@lang.to_sym).sort.to_a.each do |w|
|
26
|
+
#c.first.at(ns("./ul")).add_child index_entries(words, index[k], w)
|
27
|
+
c.add_child index_entries(words, index[k], w)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
@xrefs.bookmark_anchor_names(docxml.xpath(ns(@xrefs.sections_xpath)))
|
31
|
+
end
|
32
|
+
|
33
|
+
def sortable(s)
|
34
|
+
HTMLEntities.new.decode(Nokogiri::XML.fragment(s).text)
|
35
|
+
end
|
36
|
+
|
37
|
+
def index_entries_opt
|
38
|
+
{ xref_lbl: ", ", see_lbl: ", #{see_lbl}", also_lbl: ", #{also_lbl}" }
|
39
|
+
end
|
40
|
+
|
41
|
+
def index_entries(words, index, primary)
|
42
|
+
ret = index_entries_head(words[primary], index.dig(words[primary], nil, nil), index_entries_opt)
|
43
|
+
words2 = index[words[primary]]&.keys&.reject { |k| k.nil?}&.each_with_object({}) { |w, v| v[w.downcase] = w }
|
44
|
+
unless words2.empty?
|
45
|
+
ret += "<ul>"
|
46
|
+
words2.keys.localize(@lang.to_sym).sort.to_a.each do |w|
|
47
|
+
ret += index_entries2(words2, index[words[primary]], w)
|
48
|
+
end
|
49
|
+
ret += "</ul>"
|
50
|
+
end
|
51
|
+
ret + "</li>"
|
52
|
+
end
|
53
|
+
|
54
|
+
def index_entries2(words, index, secondary)
|
55
|
+
ret = index_entries_head(words[secondary], index.dig(words[secondary], nil), index_entries_opt)
|
56
|
+
words3 = index[words[secondary]]&.keys&.reject { |k| k.nil?}&.each_with_object({}) { |w, v| v[w.downcase] = w }
|
57
|
+
unless words3.empty?
|
58
|
+
ret += "<ul>"
|
59
|
+
words3.keys.localize(@lang.to_sym).sort.to_a.each do |w|
|
60
|
+
ret += (index_entries_head(words3[w], index[words[secondary]][words3[w]], index_entries_opt) + "</li>")
|
61
|
+
end
|
62
|
+
ret += "</ul>"
|
63
|
+
end
|
64
|
+
ret + "</li>"
|
65
|
+
end
|
66
|
+
|
67
|
+
def index_entries_head(head, entries, opt)
|
68
|
+
ret = "<li>#{head}"
|
69
|
+
xref = entries&.dig(:xref)&.join(", ")
|
70
|
+
see_sort = entries&.dig(:see)&.each_with_object({}) { |w, v| v[sortable(w).downcase] = w }
|
71
|
+
see = see_sort&.keys&.localize(@lang.to_sym)&.sort&.to_a&.map { |k| see_sort[k] }&.join(", ")
|
72
|
+
also_sort = entries&.dig(:also)&.each_with_object({}) { |w, v| v[sortable(w).downcase] = w }
|
73
|
+
also = also_sort&.keys&.localize(@lang.to_sym)&.sort&.to_a&.map { |k| also_sort[k] }&.join(", ")
|
74
|
+
ret += "#{opt[:xref_lbl]} #{xref}" if xref
|
75
|
+
ret += "#{opt[:see_lbl]} #{see}" if see
|
76
|
+
ret += "#{opt[:also_lbl]} #{also}" if also
|
77
|
+
ret
|
78
|
+
end
|
79
|
+
|
80
|
+
def see_lbl
|
81
|
+
@lang == "en" ? @i18n.see : "<em>#{@i18n.see}</em>"
|
82
|
+
end
|
83
|
+
|
84
|
+
def also_lbl
|
85
|
+
@lang == "en" ? @i18n.see_also : "<em>#{@i18n.see_also}</em>"
|
86
|
+
end
|
87
|
+
|
88
|
+
def sort_indexterms(terms, see, also)
|
89
|
+
index = extract_indexterms(terms)
|
90
|
+
index = extract_indexsee(index, see, :see)
|
91
|
+
index = extract_indexsee(index, also, :also)
|
92
|
+
index.keys.sort.each_with_object({}) do |k, v|
|
93
|
+
v[sortable(k)[0].upcase.transliterate] ||= {}
|
94
|
+
v[sortable(k)[0].upcase.transliterate][k] = index[k]
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def extract_indexsee(v, terms, label)
|
99
|
+
terms.each_with_object(v) do |t, v|
|
100
|
+
term = t&.at(ns("./primary"))&.children&.to_xml
|
101
|
+
term2 = t&.at(ns("./secondary"))&.children&.to_xml
|
102
|
+
term3 = t&.at(ns("./tertiary"))&.children&.to_xml
|
103
|
+
v[term] ||= {}
|
104
|
+
v[term][term2] ||= {}
|
105
|
+
v[term][term2][term3] ||= {}
|
106
|
+
v[term][term2][term3][label] ||= []
|
107
|
+
v[term][term2][term3][label] << t&.at(ns("./target"))&.children&.to_xml
|
108
|
+
t.remove
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def xml_encode_attr(s)
|
113
|
+
HTMLEntities.new.encode(s, :basic, :hexadecimal).gsub(/\&#x([^;]+);/) { |x| "&#x#{$1.upcase};" }
|
114
|
+
end
|
115
|
+
|
116
|
+
# attributes are decoded into UTF-8, elements in extract_indexsee are still in entities
|
117
|
+
def extract_indexterms(terms)
|
118
|
+
terms.each_with_object({}) do |t, v|
|
119
|
+
term = t&.at(ns("./primary"))&.children&.to_xml
|
120
|
+
term2 = t&.at(ns("./secondary"))&.children&.to_xml
|
121
|
+
term3 = t&.at(ns("./tertiary"))&.children&.to_xml
|
122
|
+
index2bookmark(t)
|
123
|
+
v[term] ||= {}
|
124
|
+
v[term][term2] ||= {}
|
125
|
+
v[term][term2][term3] ||= {}
|
126
|
+
v[term][term2][term3][:xref] ||= []
|
127
|
+
to = t["to"] ? "to='#{t['to']}' " : ""
|
128
|
+
v[term][term2][term3][:xref] << "<xref target='#{t['id']}' #{to}pagenumber='true'/>"
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def index2bookmark(t)
|
133
|
+
t.name = "bookmark"
|
134
|
+
t.children.each { |x| x.remove }
|
135
|
+
t["id"] = "_#{UUIDTools::UUID.random_create}"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|