metanorma-iso 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.adoc +19 -0
- data/docs/guidance.adoc +14 -0
- data/docs/quickstart.adoc +2 -0
- data/lib/asciidoctor/iso/section.rb +2 -1
- data/lib/asciidoctor/iso/validate.rb +109 -99
- data/lib/asciidoctor/iso/version.rb +1 -1
- data/spec/asciidoctor-iso/validate_spec.rb +12 -0
- data/spec/assets/iso.doc +7 -7
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '07499247abd9fb32513b4866fe1ed231c89ab893d360ed817cd215361c31aac1'
|
4
|
+
data.tar.gz: 0e72da21b9efc829e6868edaacaf430bccfc816588ad0b209fe7ed3fdb077e74
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c0c76bae355c918ed8dc336e6f00a2145621d7c2c1382331b486381ffc2f57071777d8dd582754c021ec3dfdc45820ec3122c1034ea36048e14fafc1a3505420
|
7
|
+
data.tar.gz: c178a3832ede766c0aea9662284179def0fe8df3c45994de3b396714688c06d0170cf29e0dcc8f1351f4885428a9ee7013d9f7d7898f49cbbbd849e4192e7436
|
data/README.adoc
CHANGED
@@ -454,6 +454,25 @@ from the image.
|
|
454
454
|
image::logo.jpg
|
455
455
|
--
|
456
456
|
|
457
|
+
=== Subclauses in Terms & Definitions sections
|
458
|
+
|
459
|
+
Normally any terminal subclause in a Terms & Definitions section is treated as a term
|
460
|
+
definition. Exceptionally, an introductory section can be tagged to be treated as a clause,
|
461
|
+
instead of a term, by prefixing it with the style attribute `[.nonterm]`.
|
462
|
+
|
463
|
+
[source,asciidoctor]
|
464
|
+
--
|
465
|
+
== Terms and definitions
|
466
|
+
|
467
|
+
[.nonterm]
|
468
|
+
=== Introduction
|
469
|
+
The following terms have non-normative effect, and should be ignored by the ametrical.
|
470
|
+
|
471
|
+
=== Anapaest
|
472
|
+
|
473
|
+
metrical foot consisting of a short, a long, and a short
|
474
|
+
--
|
475
|
+
|
457
476
|
=== Sections embedded more than 5 levels
|
458
477
|
|
459
478
|
Asciidoctor permits only 5 levels of section embedding (not counting the document title).
|
data/docs/guidance.adoc
CHANGED
@@ -241,6 +241,20 @@ stem:[t_A]
|
|
241
241
|
Time to launch.
|
242
242
|
--
|
243
243
|
|
244
|
+
As defined above, all terminal subclauses of a term section are treated as term definitions. Exceptionally, an introductory section can be treated as a subclause instead of a term, by prefixing it with the style attribute `[.nonterm]`:
|
245
|
+
|
246
|
+
[source,asciidoctor]
|
247
|
+
--
|
248
|
+
== Terms and definitions
|
249
|
+
|
250
|
+
[.nonterm]
|
251
|
+
=== Introduction
|
252
|
+
The following terms have non-normative effect, and should be ignored by the ametrical.
|
253
|
+
|
254
|
+
=== Anapaest
|
255
|
+
|
256
|
+
metrical foot consisting of a short, a long, and a short
|
257
|
+
--
|
244
258
|
|
245
259
|
=== Symbols and Abbreviations
|
246
260
|
|
data/docs/quickstart.adoc
CHANGED
@@ -323,6 +323,8 @@ and Note 1 to entry is not included here
|
|
323
323
|
|
324
324
|
Term banks such as the http://www.electropedia.org[IEV] must be treated like any other document, with terms treated as clauses; e.g. `<<IEV,clause "103-01-01">>`. The IEV must be explictly referenced with that label; when the XML is generated, it will be replaced by the official references to `IEC 60050-nnn:2001` standards documents.
|
325
325
|
|
326
|
+
Exceptionally, an introductory section can be treated as a subclause instead of a term, by prefixing it with the style attribute `[.nonterm]`.
|
327
|
+
|
326
328
|
=== References (Normative, Informative)
|
327
329
|
|
328
330
|
All bibliographic entries must be given as unordered lists. Normative references are expected to include only ISO and related standards; informative references may include any source.
|
@@ -21,7 +21,8 @@ module Asciidoctor
|
|
21
21
|
@term_def = true
|
22
22
|
term_def_parse(a, xml, node, true)
|
23
23
|
@term_def = false
|
24
|
-
when "symbols and abbreviated terms"
|
24
|
+
when "symbols and abbreviated terms",
|
25
|
+
"abbreviations", "abbreviated terms", "symbols"
|
25
26
|
symbols_parse(a, xml, node)
|
26
27
|
when "bibliography" then bibliography_parse(a, xml, node)
|
27
28
|
else
|
@@ -69,122 +69,132 @@ module Asciidoctor
|
|
69
69
|
subtitle = ss.at("./title")
|
70
70
|
!subtitle.nil? && !subtitle&.text&.empty? ||
|
71
71
|
warn("#{title}: each first-level subclause must have a title")
|
72
|
+
end
|
73
|
+
end
|
72
74
|
end
|
73
|
-
end
|
74
|
-
end
|
75
75
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
76
|
+
def title_all_siblings(xpath, label)
|
77
|
+
notitle = false
|
78
|
+
withtitle = false
|
79
|
+
xpath.each do |s|
|
80
|
+
title_all_siblings(s.xpath("./clause | ./terms | ./references"),
|
81
|
+
s&.at("./title")&.text || s["id"])
|
82
|
+
subtitle = s.at("./title")
|
83
|
+
notitle = notitle || (!subtitle || subtitle.text.empty?)
|
84
|
+
withtitle = withtitle || (subtitle && !subtitle.text.empty?)
|
85
|
+
end
|
86
|
+
notitle && withtitle &&
|
87
|
+
warn("#{label}: all subclauses must have a title, or none")
|
88
|
+
end
|
89
89
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
90
|
+
def title_validate(root)
|
91
|
+
title_intro_validate(root)
|
92
|
+
title_main_validate(root)
|
93
|
+
title_part_validate(root)
|
94
|
+
title_subpart_validate(root)
|
95
|
+
title_names_type_validate(root)
|
96
|
+
title_first_level_validate(root)
|
97
|
+
title_all_siblings(root.xpath(SECTIONS_XPATH), "(top level)")
|
98
|
+
end
|
99
99
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
100
|
+
def onlychild_clause_validate(root)
|
101
|
+
root.xpath(Standoc::Utils::SUBCLAUSE_XPATH).each do |c|
|
102
|
+
next unless c.xpath("../clause").size == 1
|
103
|
+
title = c.at("./title")
|
104
|
+
location = c["id"] || c.text[0..60] + "..."
|
105
|
+
location += ":#{title.text}" if c["id"] && !title.nil?
|
106
|
+
warn "ISO style: #{location}: subclause is only child"
|
107
|
+
end
|
108
|
+
end
|
109
109
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
110
|
+
def isosubgroup_validate(root)
|
111
|
+
root.xpath("//technical-committee/@type").each do |t|
|
112
|
+
unless %w{TC PC JTC JPC}.include? t.text
|
113
|
+
warn "ISO: invalid technical committee type #{t}"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
root.xpath("//subcommittee/@type").each do |t|
|
117
|
+
unless %w{SC JSC}.include? t.text
|
118
|
+
warn "ISO: invalid subcommittee type #{t}"
|
119
|
+
end
|
120
|
+
end
|
114
121
|
end
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
122
|
+
|
123
|
+
def see_xrefs_validate(root)
|
124
|
+
root.xpath("//xref").each do |t|
|
125
|
+
# does not deal with preceding text marked up
|
126
|
+
preceding = t.at("./preceding-sibling::text()[last()]")
|
127
|
+
next unless !preceding.nil? && /\bsee\s*$/mi.match(preceding)
|
128
|
+
(target = root.at("//*[@id = '#{t['target']}']")) || next
|
129
|
+
if target&.at("./ancestor-or-self::*[@obligation = 'normative']")
|
130
|
+
warn "ISO: 'see #{t['target']}' is pointing to a normative section"
|
131
|
+
end
|
132
|
+
end
|
119
133
|
end
|
120
|
-
end
|
121
|
-
end
|
122
134
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
135
|
+
def see_erefs_validate(root)
|
136
|
+
root.xpath("//eref").each do |t|
|
137
|
+
preceding = t.at("./preceding-sibling::text()[last()]")
|
138
|
+
next unless !preceding.nil? && /\bsee\s*$/mi.match(preceding)
|
139
|
+
target = root.at("//*[@id = '#{t['bibitemid']}']")
|
140
|
+
if target.at("./ancestor::references"\
|
141
|
+
"[title = 'Normative References']")
|
142
|
+
warn "ISO: 'see #{t}' is pointing to a normative reference"
|
143
|
+
end
|
144
|
+
end
|
131
145
|
end
|
132
|
-
end
|
133
|
-
end
|
134
146
|
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
warn "ISO: 'see #{t}' is pointing to a normative reference"
|
147
|
+
def locality_erefs_validate(root)
|
148
|
+
root.xpath("//eref[locality]").each do |t|
|
149
|
+
unless /^IEV$|:[ ]?(\d+{4}|--)$/.match t["citeas"]
|
150
|
+
warn "ISO: undated reference #{t['citeas']} should not contain "\
|
151
|
+
"specific elements"
|
152
|
+
end
|
153
|
+
end
|
143
154
|
end
|
144
|
-
end
|
145
|
-
end
|
146
155
|
|
147
|
-
|
148
|
-
|
149
|
-
unless /^IEV$|:[ ]?(\d+{4}|--)$/.match t["citeas"]
|
150
|
-
warn "ISO: undated reference #{t['citeas']} should not contain "\
|
151
|
-
"specific elements"
|
156
|
+
def termdef_warn(text, re, term, msg)
|
157
|
+
re.match(text) && warn("ISO style: #{term}: #{msg}")
|
152
158
|
end
|
153
|
-
end
|
154
|
-
end
|
155
159
|
|
156
|
-
|
157
|
-
|
158
|
-
|
160
|
+
def termdef_style(xmldoc)
|
161
|
+
xmldoc.xpath("//term").each do |t|
|
162
|
+
para = t.at("./definition") || return
|
163
|
+
term = t.at("./preferred").text
|
164
|
+
termdef_warn(para.text, /^(the|a)\b/i, term,
|
165
|
+
"term definition starts with article")
|
166
|
+
termdef_warn(para.text, /\.$/i, term,
|
167
|
+
"term definition ends with period")
|
168
|
+
end
|
169
|
+
cited_term_style(xmldoc)
|
170
|
+
end
|
159
171
|
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
end
|
169
|
-
end
|
172
|
+
def cited_term_style(xmldoc)
|
173
|
+
xmldoc.xpath("//term//xref").each do |x|
|
174
|
+
next unless xmldoc.at("//term[@id = '#{x['target']}']")
|
175
|
+
x&.previous&.text == " (" and x&.previous&.previous&.name == "em" or
|
176
|
+
style_warning(x, "term citation not preceded with italicised term",
|
177
|
+
x.parent.text)
|
178
|
+
end
|
179
|
+
end
|
170
180
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
181
|
+
def content_validate(doc)
|
182
|
+
super
|
183
|
+
title_validate(doc.root)
|
184
|
+
isosubgroup_validate(doc.root)
|
185
|
+
onlychild_clause_validate(doc.root)
|
186
|
+
termdef_style(doc.root)
|
187
|
+
iev_validate(doc.root)
|
188
|
+
see_xrefs_validate(doc.root)
|
189
|
+
see_erefs_validate(doc.root)
|
190
|
+
locality_erefs_validate(doc.root)
|
191
|
+
end
|
182
192
|
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
193
|
+
def validate(doc)
|
194
|
+
content_validate(doc)
|
195
|
+
schema_validate(formattedstr_strip(doc.dup),
|
196
|
+
File.join(File.dirname(__FILE__), "isostandard.rng"))
|
197
|
+
end
|
188
198
|
end
|
189
199
|
end
|
190
200
|
end
|
@@ -930,4 +930,16 @@ it "Do not warn if not more than 7 levels of subclause" do
|
|
930
930
|
|
931
931
|
INPUT
|
932
932
|
end
|
933
|
+
|
934
|
+
it "Warn if term citation in Terms & Definitions not preceded with italicised term" do
|
935
|
+
expect { Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true) }.to output(%r{term citation not preceded with italicised term}).to_stderr
|
936
|
+
#{VALIDATING_BLANK_HDR}
|
937
|
+
== Terms and Definitions
|
938
|
+
|
939
|
+
[[term]]
|
940
|
+
=== Term
|
941
|
+
|
942
|
+
The definition of a term (<<term>>) is a part of the specialized vocabulary of a particular field
|
943
|
+
INPUT
|
944
|
+
end
|
933
945
|
end
|
data/spec/assets/iso.doc
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
MIME-Version: 1.0
|
2
|
-
Content-Type: multipart/related; boundary="----=
|
2
|
+
Content-Type: multipart/related; boundary="----=_NextPart_64b56c80.e800.431f"
|
3
3
|
|
4
|
-
------=
|
4
|
+
------=_NextPart_64b56c80.e800.431f
|
5
5
|
Content-Location: file:///C:/Doc/spec/assets/iso.htm
|
6
6
|
Content-Type: text/html; charset="utf-8"
|
7
7
|
|
@@ -843,11 +843,11 @@ Switzerland<p class="MsoNormal"></p></span></p>
|
|
843
843
|
<p class="MsoToc1"><span lang="EN-GB" xml:lang="EN-GB"><span style="mso-element:field-begin"></span><span style="mso-spacerun:yes"> </span>TOC
|
844
844
|
\o "1-2" \h \z \u <span style="mso-element:field-separator"></span></span>
|
845
845
|
<span class="MsoHyperlink"><span lang="EN-GB" style="mso-no-proof:yes" xml:lang="EN-GB">
|
846
|
-
<a href="#
|
846
|
+
<a href="#_Toc91959334">Foreword<span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB">
|
847
847
|
<span style="mso-tab-count:1 dotted">. </span>
|
848
848
|
</span><span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB">
|
849
849
|
<span style="mso-element:field-begin"></span></span>
|
850
|
-
<span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB"> PAGEREF
|
850
|
+
<span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB"> PAGEREF _Toc91959334 \h </span>
|
851
851
|
<span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB"><span style="mso-element:field-separator"></span></span><span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB">1</span>
|
852
852
|
<span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB"></span><span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB"><span style="mso-element:field-end"></span></span></a></span></span></p>
|
853
853
|
|
@@ -880,7 +880,7 @@ Switzerland<p class="MsoNormal"></p></span></p>
|
|
880
880
|
</html>
|
881
881
|
|
882
882
|
|
883
|
-
------=
|
883
|
+
------=_NextPart_64b56c80.e800.431f
|
884
884
|
Content-Location: file:///C:/Doc/spec/assets/iso_files/filelist.xml
|
885
885
|
Content-Transfer-Encoding: base64
|
886
886
|
Content-Type: application/xml
|
@@ -890,7 +890,7 @@ ICAgICAgIDxvOk1haW5GaWxlIEhSZWY9Ii4uL3NwZWMvYXNzZXRzL2lzby5odG0iLz4gIDxvOkZp
|
|
890
890
|
bGUgSFJlZj0iZmlsZWxpc3QueG1sIi8+CiAgPG86RmlsZSBIUmVmPSJoZWFkZXIuaHRtbCIvPgo8
|
891
891
|
L3htbD4K
|
892
892
|
|
893
|
-
------=
|
893
|
+
------=_NextPart_64b56c80.e800.431f
|
894
894
|
Content-Location: file:///C:/Doc/spec/assets/iso_files/header.html
|
895
895
|
Content-Transfer-Encoding: base64
|
896
896
|
Content-Type: text/html charset="utf-8"
|
@@ -1083,4 +1083,4 @@ cD4NCg0KPHAgY2xhc3M9TXNvRm9vdGVyPjxzcGFuIGxhbmc9RU4tQVUgc3R5bGU9J2ZvbnQtc2l6
|
|
1083
1083
|
ZToxMC4wcHQ7Jz7CqQ0KJm5ic3A7Jm5ic3A74oCTIEFsbCByaWdodHMgcmVzZXJ2ZWQ8bzpwPjwv
|
1084
1084
|
bzpwPjwvc3Bhbj48L3A+DQoNCjwvZGl2Pg0KDQoNCg0KPC9ib2R5Pg0KDQo8L2h0bWw+DQo=
|
1085
1085
|
|
1086
|
-
------=
|
1086
|
+
------=_NextPart_64b56c80.e800.431f--
|
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: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|