metanorma-iso 1.10.6 → 2.0.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/.gitignore +26 -0
- data/Makefile +1 -1
- data/lib/asciidoctor/iso/base.rb +2 -69
- data/lib/asciidoctor/iso/cleanup.rb +2 -175
- data/lib/asciidoctor/iso/converter.rb +2 -17
- data/lib/asciidoctor/iso/deprecated.rb +5 -0
- data/lib/asciidoctor/iso/front.rb +2 -169
- data/lib/asciidoctor/iso/front_id.rb +2 -224
- data/lib/asciidoctor/iso/section.rb +2 -48
- data/lib/asciidoctor/iso/validate.rb +2 -171
- data/lib/asciidoctor/iso/validate_image.rb +2 -96
- data/lib/asciidoctor/iso/validate_requirements.rb +2 -110
- data/lib/asciidoctor/iso/validate_section.rb +2 -246
- data/lib/asciidoctor/iso/validate_style.rb +2 -169
- data/lib/asciidoctor/iso/validate_title.rb +2 -104
- data/lib/isodoc/iso/html/htmlstyle.css +47 -0
- data/lib/isodoc/iso/html/isodoc.css +1326 -0
- data/lib/isodoc/iso/html/isodoc.scss +0 -1
- data/lib/isodoc/iso/html/style-human.css +1015 -0
- data/lib/isodoc/iso/html/style-human.scss +8 -2
- data/lib/isodoc/iso/html/style-iso.css +1042 -0
- data/lib/isodoc/iso/html/style-iso.scss +9 -2
- data/lib/isodoc/iso/html/wordstyle.css +1701 -0
- data/lib/isodoc/iso/html_convert.rb +6 -4
- data/lib/isodoc/iso/iso.amendment.xsl +2142 -1565
- data/lib/isodoc/iso/iso.international-standard.xsl +2142 -1565
- data/lib/isodoc/iso/word_convert.rb +2 -0
- data/lib/metanorma/iso/base.rb +70 -0
- data/lib/{asciidoctor → metanorma}/iso/basicdoc.rng +5 -3
- data/lib/{asciidoctor → metanorma}/iso/biblio.rng +7 -5
- data/lib/{asciidoctor → metanorma}/iso/boilerplate-fr.xml +0 -0
- data/lib/{asciidoctor → metanorma}/iso/boilerplate.xml +0 -0
- data/lib/metanorma/iso/cleanup.rb +176 -0
- data/lib/metanorma/iso/converter.rb +18 -0
- data/lib/metanorma/iso/front.rb +170 -0
- data/lib/metanorma/iso/front_id.rb +225 -0
- data/lib/{asciidoctor → metanorma}/iso/isodoc.rng +98 -1
- data/lib/{asciidoctor → metanorma}/iso/isostandard-amd.rng +0 -0
- data/lib/{asciidoctor → metanorma}/iso/isostandard.rnc +0 -0
- data/lib/{asciidoctor → metanorma}/iso/isostandard.rng +0 -0
- data/lib/{asciidoctor → metanorma}/iso/reqt.rng +0 -0
- data/lib/metanorma/iso/section.rb +49 -0
- data/lib/metanorma/iso/validate.rb +172 -0
- data/lib/metanorma/iso/validate_image.rb +97 -0
- data/lib/metanorma/iso/validate_requirements.rb +111 -0
- data/lib/metanorma/iso/validate_section.rb +248 -0
- data/lib/metanorma/iso/validate_style.rb +170 -0
- data/lib/metanorma/iso/validate_title.rb +105 -0
- data/lib/metanorma/iso/version.rb +1 -1
- data/lib/metanorma-iso.rb +1 -1
- data/metanorma-iso.gemspec +1 -1
- data/spec/isodoc/ref_spec.rb +4 -2
- data/spec/isodoc/xref_spec.rb +18 -18
- data/spec/{asciidoctor → metanorma}/amd_spec.rb +1 -1
- data/spec/{asciidoctor → metanorma}/base_spec.rb +158 -197
- data/spec/{asciidoctor → metanorma}/blank_spec.rb +1 -1
- data/spec/{asciidoctor → metanorma}/blocks_spec.rb +1 -1
- data/spec/{asciidoctor → metanorma}/cleanup_spec.rb +1 -1
- data/spec/{asciidoctor → metanorma}/inline_spec.rb +1 -1
- data/spec/{asciidoctor → metanorma}/lists_spec.rb +1 -1
- data/spec/{asciidoctor → metanorma}/refs_spec.rb +2 -5
- data/spec/{asciidoctor → metanorma}/section_spec.rb +1 -1
- data/spec/{asciidoctor → metanorma}/table_spec.rb +1 -1
- data/spec/{asciidoctor → metanorma}/validate_spec.rb +28 -3
- data/spec/spec_helper.rb +1 -1
- metadata +46 -30
- data/spec/vcr_cassettes/docrels.yml +0 -393
- data/spec/vcr_cassettes/sortrefs.yml +0 -599
@@ -0,0 +1,105 @@
|
|
1
|
+
require "metanorma-standoc"
|
2
|
+
|
3
|
+
module Metanorma
|
4
|
+
module ISO
|
5
|
+
class Converter < Standoc::Converter
|
6
|
+
def title_lang_part(doc, part, lang)
|
7
|
+
doc.at("//bibdata/title[@type='title-#{part}' and @language='#{lang}']")
|
8
|
+
end
|
9
|
+
|
10
|
+
def title_intro_validate(root)
|
11
|
+
title_intro_en = title_lang_part(root, "intro", "en")
|
12
|
+
title_intro_fr = title_lang_part(root, "intro", "fr")
|
13
|
+
if title_intro_en.nil? && !title_intro_fr.nil?
|
14
|
+
@log.add("Style", title_intro_fr, "No English Title Intro!")
|
15
|
+
end
|
16
|
+
if !title_intro_en.nil? && title_intro_fr.nil?
|
17
|
+
@log.add("Style", title_intro_en, "No French Title Intro!")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def title_main_validate(root)
|
22
|
+
title_main_en = title_lang_part(root, "main", "en")
|
23
|
+
title_main_fr = title_lang_part(root, "main", "fr")
|
24
|
+
if title_main_en.nil? && !title_main_fr.nil?
|
25
|
+
@log.add("Style", title_main_fr, "No English Title!")
|
26
|
+
end
|
27
|
+
if !title_main_en.nil? && title_main_fr.nil?
|
28
|
+
@log.add("Style", title_main_en, "No French Title!")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def title_part_validate(root)
|
33
|
+
title_part_en = title_lang_part(root, "part", "en")
|
34
|
+
title_part_fr = title_lang_part(root, "part", "fr")
|
35
|
+
(title_part_en.nil? && !title_part_fr.nil?) &&
|
36
|
+
@log.add("Style", title_part_fr, "No English Title Part!")
|
37
|
+
(!title_part_en.nil? && title_part_fr.nil?) &&
|
38
|
+
@log.add("Style", title_part_en, "No French Title Part!")
|
39
|
+
end
|
40
|
+
|
41
|
+
# ISO/IEC DIR 2, 11.4
|
42
|
+
def title_subpart_validate(root)
|
43
|
+
docid = root.at("//bibdata/docidentifier[@type = 'ISO']")
|
44
|
+
subpart = /-\d+-\d+/.match docid
|
45
|
+
iec = root.at("//bibdata/contributor[role/@type = 'publisher']/"\
|
46
|
+
"organization[abbreviation = 'IEC' or "\
|
47
|
+
"name = 'International Electrotechnical Commission']")
|
48
|
+
subpart && !iec and
|
49
|
+
@log.add("Style", docid, "Subpart defined on non-IEC document!")
|
50
|
+
end
|
51
|
+
|
52
|
+
# ISO/IEC DIR 2, 11.5.2
|
53
|
+
def title_names_type_validate(root)
|
54
|
+
doctypes = /International\sStandard | Technical\sSpecification |
|
55
|
+
Publicly\sAvailable\sSpecification | Technical\sReport | Guide /xi
|
56
|
+
title_main_en = title_lang_part(root, "main", "en")
|
57
|
+
!title_main_en.nil? && doctypes.match(title_main_en.text) and
|
58
|
+
@log.add("Style", title_main_en, "Main Title may name document type")
|
59
|
+
title_intro_en = title_lang_part(root, "intro", "en")
|
60
|
+
!title_intro_en.nil? && doctypes.match(title_intro_en.text) and
|
61
|
+
@log.add("Style", title_intro_en,
|
62
|
+
"Title Intro may name document type")
|
63
|
+
end
|
64
|
+
|
65
|
+
# ISO/IEC DIR 2, 22.2
|
66
|
+
def title_first_level_validate(root)
|
67
|
+
root.xpath(SECTIONS_XPATH).each do |s|
|
68
|
+
title = s&.at("./title")&.text || s.name
|
69
|
+
s.xpath("./clause | ./terms | ./references").each do |ss|
|
70
|
+
subtitle = ss.at("./title")
|
71
|
+
!subtitle.nil? && !subtitle&.text&.empty? or
|
72
|
+
@log.add("Style", ss,
|
73
|
+
"#{title}: each first-level subclause must have a title")
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# ISO/IEC DIR 2, 22.2
|
79
|
+
def title_all_siblings(xpath, label)
|
80
|
+
notitle = false
|
81
|
+
withtitle = false
|
82
|
+
xpath.each do |s|
|
83
|
+
title_all_siblings(s.xpath("./clause | ./terms | ./references"),
|
84
|
+
s&.at("./title")&.text || s["id"])
|
85
|
+
subtitle = s.at("./title")
|
86
|
+
notitle = notitle || (!subtitle || subtitle.text.empty?)
|
87
|
+
withtitle = withtitle || (subtitle && !subtitle.text.empty?)
|
88
|
+
end
|
89
|
+
notitle && withtitle &&
|
90
|
+
@log.add("Style", nil,
|
91
|
+
"#{label}: all subclauses must have a title, or none")
|
92
|
+
end
|
93
|
+
|
94
|
+
def title_validate(root)
|
95
|
+
title_intro_validate(root)
|
96
|
+
title_main_validate(root)
|
97
|
+
title_part_validate(root)
|
98
|
+
title_subpart_validate(root)
|
99
|
+
title_names_type_validate(root)
|
100
|
+
title_first_level_validate(root)
|
101
|
+
title_all_siblings(root.xpath(SECTIONS_XPATH), "(top level)")
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
data/lib/metanorma-iso.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require "asciidoctor" unless defined? Asciidoctor::Converter
|
2
|
-
require_relative "
|
2
|
+
require_relative "metanorma/iso/converter"
|
3
3
|
require_relative "metanorma/iso/version"
|
4
4
|
require_relative "isodoc/iso/html_convert"
|
5
5
|
require_relative "isodoc/iso/word_convert"
|
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", "~>
|
32
|
+
spec.add_dependency "metanorma-standoc", "~> 2.0.0"
|
33
33
|
spec.add_dependency "mnconvert", "~> 1.14"
|
34
34
|
spec.add_dependency "ruby-jing"
|
35
35
|
spec.add_dependency "tokenizer", "~> 0.3.0"
|
data/spec/isodoc/ref_spec.rb
CHANGED
@@ -272,6 +272,7 @@ RSpec.describe IsoDoc do
|
|
272
272
|
</note>
|
273
273
|
<bibitem id="ISO3696" type="standard">
|
274
274
|
<title format="text/plain">Water for analytical laboratory use</title>
|
275
|
+
<docidentifier type='metanorma-ordinal'>[1]</docidentifier>
|
275
276
|
<docidentifier type="ISO">ISO 3696</docidentifier>
|
276
277
|
<contributor>
|
277
278
|
<role type="publisher"/>
|
@@ -294,6 +295,7 @@ RSpec.describe IsoDoc do
|
|
294
295
|
</bibitem>
|
295
296
|
<bibitem id="ref11">
|
296
297
|
<title>Internet Calendaring and Scheduling Core Object Specification (iCalendar)</title>
|
298
|
+
<docidentifier type='metanorma-ordinal'>[2]</docidentifier>
|
297
299
|
<docidentifier type="IETF">IETF RFC 10</docidentifier>
|
298
300
|
</bibitem>
|
299
301
|
<bibitem id="ref12">
|
@@ -361,7 +363,7 @@ RSpec.describe IsoDoc do
|
|
361
363
|
<p>
|
362
364
|
<span class="note_label">NOTE</span>  This is another annotation of document ISSN.</p>
|
363
365
|
</div>
|
364
|
-
<p class="Biblio" id="ISO3696">[
|
366
|
+
<p class="Biblio" id="ISO3696">[1]  ISO 3696,
|
365
367
|
<i>Water for analytical laboratory use</i></p>
|
366
368
|
<p class="Biblio" id="ref10">[10]  <span style="font-variant:small-caps;">Standard No I.C.C 167</span>
|
367
369
|
.
|
@@ -369,7 +371,7 @@ RSpec.describe IsoDoc do
|
|
369
371
|
(see
|
370
372
|
<a href="http://www.icc.or.at">http://www.icc.or.at</a>
|
371
373
|
)</p>
|
372
|
-
<p class="Biblio" id="ref11">[
|
374
|
+
<p class="Biblio" id="ref11">[2]  IETF RFC 10,
|
373
375
|
<i>Internet Calendaring and Scheduling Core Object Specification (iCalendar)</i></p>
|
374
376
|
<p class="Biblio" id="ref12">Citn  IETF RFC 20, CitationWorks. 2019.
|
375
377
|
<i>How to cite a reference</i>
|
data/spec/isodoc/xref_spec.rb
CHANGED
@@ -1373,7 +1373,7 @@ RSpec.describe IsoDoc do
|
|
1373
1373
|
<title depth="1">1
|
1374
1374
|
<tab/>
|
1375
1375
|
Scope</title>
|
1376
|
-
<ol id="N">
|
1376
|
+
<ol id="N" type="alphabet">
|
1377
1377
|
<li>
|
1378
1378
|
<p>A</p>
|
1379
1379
|
</li>
|
@@ -1388,12 +1388,12 @@ RSpec.describe IsoDoc do
|
|
1388
1388
|
Widgets</title>
|
1389
1389
|
<clause id="widgets1" inline-header="true">
|
1390
1390
|
<title>3.1</title>
|
1391
|
-
<ol id="note1">
|
1391
|
+
<ol id="note1" type="alphabet">
|
1392
1392
|
<p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different
|
1393
1393
|
types of kernel.
|
1394
1394
|
</p>
|
1395
1395
|
</ol>
|
1396
|
-
<ol id="note2">
|
1396
|
+
<ol id="note2" type="alphabet">
|
1397
1397
|
<p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83a">These results are based on a study carried out on three different
|
1398
1398
|
types of kernel.
|
1399
1399
|
</p>
|
@@ -1407,7 +1407,7 @@ RSpec.describe IsoDoc do
|
|
1407
1407
|
<br/>(informative)</title>
|
1408
1408
|
<clause id="annex1a" inline-header="true">
|
1409
1409
|
<title>A.1</title>
|
1410
|
-
<ol id="AN">
|
1410
|
+
<ol id="AN" type="alphabet">
|
1411
1411
|
<p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different
|
1412
1412
|
types of kernel.
|
1413
1413
|
</p>
|
@@ -1415,12 +1415,12 @@ RSpec.describe IsoDoc do
|
|
1415
1415
|
</clause>
|
1416
1416
|
<clause id="annex1b" inline-header="true">
|
1417
1417
|
<title>A.2</title>
|
1418
|
-
<ol id="Anote1">
|
1418
|
+
<ol id="Anote1" type="alphabet">
|
1419
1419
|
<p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different
|
1420
1420
|
types of kernel.
|
1421
1421
|
</p>
|
1422
1422
|
</ol>
|
1423
|
-
<ol id="Anote2">
|
1423
|
+
<ol id="Anote2" type="alphabet">
|
1424
1424
|
<p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83a">These results are based on a study carried out on three different
|
1425
1425
|
types of kernel.
|
1426
1426
|
</p>
|
@@ -1513,7 +1513,7 @@ RSpec.describe IsoDoc do
|
|
1513
1513
|
<sections>
|
1514
1514
|
<clause id='scope' type='scope' displayorder='2'>
|
1515
1515
|
<title depth='1'>1<tab/>Scope</title>
|
1516
|
-
<ol id='N1'>
|
1516
|
+
<ol id='N1' type="alphabet">
|
1517
1517
|
<li id='N'>
|
1518
1518
|
<p>A</p>
|
1519
1519
|
</li>
|
@@ -1523,12 +1523,12 @@ RSpec.describe IsoDoc do
|
|
1523
1523
|
<clause id='widgets' displayorder='4'>
|
1524
1524
|
<title depth='1'>3<tab/>Widgets</title>
|
1525
1525
|
<clause inline-header="true" id='widgets1'><title>3.1</title>
|
1526
|
-
<ol id='note1l'>
|
1526
|
+
<ol id='note1l' type="alphabet">
|
1527
1527
|
<li id='note1'>
|
1528
1528
|
<p>A</p>
|
1529
1529
|
</li>
|
1530
1530
|
</ol>
|
1531
|
-
<ol id='note2l'>
|
1531
|
+
<ol id='note2l' type="alphabet">
|
1532
1532
|
<li id='note2'>
|
1533
1533
|
<p>A</p>
|
1534
1534
|
</li>
|
@@ -1538,19 +1538,19 @@ RSpec.describe IsoDoc do
|
|
1538
1538
|
</sections>
|
1539
1539
|
<annex id='annex1' displayorder='5'><title><strong>Annex A</strong><br/>(informative)</title>
|
1540
1540
|
<clause inline-header="true" id='annex1a'><title>A.1</title>
|
1541
|
-
<ol id='ANl'>
|
1541
|
+
<ol id='ANl' type="alphabet">
|
1542
1542
|
<li id='AN'>
|
1543
1543
|
<p>A</p>
|
1544
1544
|
</li>
|
1545
1545
|
</ol>
|
1546
1546
|
</clause>
|
1547
1547
|
<clause inline-header="true" id='annex1b'><title>A.2</title>
|
1548
|
-
<ol id='Anote1l'>
|
1548
|
+
<ol id='Anote1l' type="alphabet">
|
1549
1549
|
<li id='Anote1'>
|
1550
1550
|
<p>A</p>
|
1551
1551
|
</li>
|
1552
1552
|
</ol>
|
1553
|
-
<ol id='Anote2l'>
|
1553
|
+
<ol id='Anote2l' type="alphabet">
|
1554
1554
|
<li id='Anote2'>
|
1555
1555
|
<p>A</p>
|
1556
1556
|
</li>
|
@@ -1633,22 +1633,22 @@ RSpec.describe IsoDoc do
|
|
1633
1633
|
<sections>
|
1634
1634
|
<clause id='scope' type='scope' displayorder='2'>
|
1635
1635
|
<title depth='1'>1<tab/>Scope</title>
|
1636
|
-
<ol id='N1'>
|
1636
|
+
<ol id='N1' type="alphabet">
|
1637
1637
|
<li id='N'>
|
1638
1638
|
<p>A</p>
|
1639
|
-
<ol>
|
1639
|
+
<ol type="arabic">
|
1640
1640
|
<li id='note1'>
|
1641
1641
|
<p>A</p>
|
1642
|
-
<ol>
|
1642
|
+
<ol type="roman">
|
1643
1643
|
<li id='note2'>
|
1644
1644
|
<p>A</p>
|
1645
|
-
<ol>
|
1645
|
+
<ol type="alphabet_upper">
|
1646
1646
|
<li id='AN'>
|
1647
1647
|
<p>A</p>
|
1648
|
-
<ol>
|
1648
|
+
<ol type="roman_upper">
|
1649
1649
|
<li id='Anote1'>
|
1650
1650
|
<p>A</p>
|
1651
|
-
<ol>
|
1651
|
+
<ol type="alphabet">
|
1652
1652
|
<li id='Anote2'>
|
1653
1653
|
<p>A</p>
|
1654
1654
|
</li>
|