metanorma-standoc 2.2.1.1 → 2.2.2.2
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 +1 -1
- data/.github/workflows/release.yml +24 -0
- data/lib/metanorma/standoc/base.rb +10 -3
- data/lib/metanorma/standoc/biblio.rng +8 -5
- data/lib/metanorma/standoc/cleanup_biblio.rb +2 -2
- data/lib/metanorma/standoc/cleanup_reqt.rb +1 -1
- data/lib/metanorma/standoc/converter.rb +13 -21
- data/lib/metanorma/standoc/macros_terms.rb +5 -4
- data/lib/metanorma/standoc/reqt.rb +7 -0
- data/lib/metanorma/standoc/terms.rb +13 -7
- data/lib/metanorma/standoc/validate.rb +22 -2
- data/lib/metanorma/standoc/version.rb +1 -1
- data/lib/metanorma-standoc.rb +1 -1
- data/metanorma-standoc.gemspec +5 -3
- data/spec/assets/correct.png +0 -0
- data/spec/assets/corrupt.png +0 -0
- data/spec/metanorma/base_spec.rb +6 -7
- data/spec/metanorma/macros_concept_spec.rb +19 -0
- data/spec/metanorma/macros_spec.rb +0 -96
- data/spec/metanorma/validate_spec.rb +49 -0
- data/spec/requirements/default/blocks_spec.rb +250 -0
- data/spec/requirements/default/cleanup_spec.rb +173 -0
- data/spec/requirements/modspec/cleanup_spec.rb +333 -0
- data/spec/requirements/modspec/validate_spec.rb +330 -0
- data/spec/spec_helper.rb +0 -1
- metadata +59 -25
- data/lib/isodoc/html/htmlstyle.css +0 -998
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99fc70f6e9b8781722b3deed8143fabbadf28dfdda77f88e4ae9f7bfc3b83faf
|
4
|
+
data.tar.gz: 51305f5baa732cbb3b9df0ed6640413df408930365ef3ce8f84c16cad3337288
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b757363df3d4c399b067478880534eb0fad2b8cd166e4e0d0e33c138bb599f8f7ac8d017bbbe7500d59ee5f161ff6e43b0205362a6fcb0ba6d0dfa7444dbf7bd
|
7
|
+
data.tar.gz: add6f5d5626ee90828655bdf4feeb47091e362982dfe39372d0c85ff33efa21482b0f79ee4613b19ab438aae260c334bb3e15a3f3bf3eff2f80ed5486e888345
|
data/.github/workflows/rake.yml
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
# Auto-generated by Cimas: Do not edit it manually!
|
2
|
+
# See https://github.com/metanorma/cimas
|
3
|
+
name: release
|
4
|
+
|
5
|
+
on:
|
6
|
+
workflow_dispatch:
|
7
|
+
inputs:
|
8
|
+
next_version:
|
9
|
+
description: |
|
10
|
+
Next release version. Possible values: x.y.z, major, minor, patch or pre|rc|etc
|
11
|
+
required: true
|
12
|
+
default: 'skip'
|
13
|
+
push:
|
14
|
+
tags: [ v* ]
|
15
|
+
|
16
|
+
jobs:
|
17
|
+
release:
|
18
|
+
uses: metanorma/ci/.github/workflows/rubygems-release.yml@main
|
19
|
+
with:
|
20
|
+
next_version: ${{ github.event.inputs.next_version }}
|
21
|
+
secrets:
|
22
|
+
rubygems-api-key: ${{ secrets.METANORMA_CI_RUBYGEMS_API_KEY }}
|
23
|
+
pat_token: ${{ secrets.METANORMA_CI_PAT_TOKEN }}
|
24
|
+
|
@@ -71,7 +71,7 @@ module Metanorma
|
|
71
71
|
def init_reqt(node)
|
72
72
|
@default_requirement_model = (node.attr("requirements-model") ||
|
73
73
|
default_requirement_model)
|
74
|
-
@reqt_models =
|
74
|
+
@reqt_models = requirements_processor
|
75
75
|
.new({ default: @default_requirement_model })
|
76
76
|
end
|
77
77
|
|
@@ -112,6 +112,10 @@ module Metanorma
|
|
112
112
|
init_iev_caches(node)
|
113
113
|
end
|
114
114
|
|
115
|
+
def requirements_processor
|
116
|
+
Metanorma::Requirements
|
117
|
+
end
|
118
|
+
|
115
119
|
def document(node)
|
116
120
|
ret = document1(node)
|
117
121
|
clean_exit
|
@@ -156,8 +160,11 @@ module Metanorma
|
|
156
160
|
end
|
157
161
|
|
158
162
|
def clean_abort(msg, file = nil)
|
159
|
-
file
|
160
|
-
|
163
|
+
if file
|
164
|
+
doc = file.to_xml(encoding: "UTF-8", indent: 2,
|
165
|
+
save_with: Nokogiri::XML::Node::SaveOptions::AS_XML)
|
166
|
+
File.open("#{@filename}.xml.abort", "w:UTF-8") { |f| f.write(doc) }
|
167
|
+
end
|
161
168
|
clean_exit
|
162
169
|
abort(msg)
|
163
170
|
end
|
@@ -225,9 +225,9 @@
|
|
225
225
|
<zeroOrMore>
|
226
226
|
<ref name="forename"/>
|
227
227
|
</zeroOrMore>
|
228
|
-
<
|
229
|
-
<ref name="
|
230
|
-
</
|
228
|
+
<optional>
|
229
|
+
<ref name="formatted-initials"/>
|
230
|
+
</optional>
|
231
231
|
<ref name="surname"/>
|
232
232
|
<zeroOrMore>
|
233
233
|
<ref name="addition"/>
|
@@ -247,8 +247,8 @@
|
|
247
247
|
<ref name="LocalizedString"/>
|
248
248
|
</element>
|
249
249
|
</define>
|
250
|
-
<define name="
|
251
|
-
<element name="
|
250
|
+
<define name="formatted-initials">
|
251
|
+
<element name="formatted-initials">
|
252
252
|
<ref name="LocalizedString"/>
|
253
253
|
</element>
|
254
254
|
</define>
|
@@ -264,6 +264,9 @@
|
|
264
264
|
</define>
|
265
265
|
<define name="forename">
|
266
266
|
<element name="forename">
|
267
|
+
<optional>
|
268
|
+
<attribute name="initial"/>
|
269
|
+
</optional>
|
267
270
|
<ref name="LocalizedString"/>
|
268
271
|
</element>
|
269
272
|
</define>
|
@@ -84,8 +84,8 @@ module Metanorma
|
|
84
84
|
dl = clause.at("./dl") or return
|
85
85
|
key = ""
|
86
86
|
bib = dl.xpath("./dt | ./dd").each_with_object({}) do |dtd, m|
|
87
|
-
(dtd.name == "dt" and key = dtd.text.sub(/:+$/, ""))
|
88
|
-
|
87
|
+
(dtd.name == "dt" and key = dtd.text.sub(/:+$/, "")) and next
|
88
|
+
add_to_hash(m, key, dd_bib_extract(dtd))
|
89
89
|
end
|
90
90
|
clause.xpath("./clause").each do |c1|
|
91
91
|
key = c1&.at("./title")&.text&.downcase&.strip
|
@@ -3,7 +3,7 @@ module Metanorma
|
|
3
3
|
module Cleanup
|
4
4
|
def requirement_cleanup(xmldoc)
|
5
5
|
@reqt_models ||=
|
6
|
-
|
6
|
+
requirements_processor.new({ default: @default_requirement_model })
|
7
7
|
@reqt_models.requirement_cleanup(xmldoc)
|
8
8
|
end
|
9
9
|
end
|
@@ -1,18 +1,17 @@
|
|
1
1
|
require "asciidoctor"
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
require "metanorma/standoc/reqt"
|
2
|
+
require_relative "version"
|
3
|
+
require_relative "base"
|
4
|
+
require_relative "front"
|
5
|
+
require_relative "lists"
|
6
|
+
require_relative "ref"
|
7
|
+
require_relative "inline"
|
8
|
+
require_relative "blocks"
|
9
|
+
require_relative "section"
|
10
|
+
require_relative "table"
|
11
|
+
require_relative "validate"
|
12
|
+
require_relative "utils"
|
13
|
+
require_relative "cleanup"
|
14
|
+
require_relative "reqt"
|
16
15
|
require_relative "./macros"
|
17
16
|
|
18
17
|
module Metanorma
|
@@ -25,9 +24,6 @@ module Metanorma
|
|
25
24
|
preprocessor Metanorma::Standoc::Datamodel::DiagramPreprocessor
|
26
25
|
preprocessor Metanorma::Plugin::Datastruct::Json2TextPreprocessor
|
27
26
|
preprocessor Metanorma::Plugin::Datastruct::Yaml2TextPreprocessor
|
28
|
-
preprocessor Metanorma::Plugin::Lutaml::LutamlPreprocessor
|
29
|
-
preprocessor Metanorma::Plugin::Lutaml::LutamlUmlAttributesTablePreprocessor
|
30
|
-
preprocessor Metanorma::Plugin::Lutaml::LutamlUmlDatamodelDescriptionPreprocessor
|
31
27
|
inline_macro Metanorma::Standoc::PreferredTermInlineMacro
|
32
28
|
inline_macro Metanorma::Standoc::SpanInlineMacro
|
33
29
|
inline_macro Metanorma::Standoc::AltTermInlineMacro
|
@@ -56,15 +52,11 @@ module Metanorma
|
|
56
52
|
inline_macro Metanorma::Standoc::ToCInlineMacro
|
57
53
|
inline_macro Metanorma::Standoc::PassInlineMacro
|
58
54
|
inline_macro Metanorma::Standoc::StdLinkInlineMacro
|
59
|
-
inline_macro Metanorma::Plugin::Lutaml::LutamlFigureInlineMacro
|
60
|
-
inline_macro Metanorma::Plugin::Lutaml::LutamlTableInlineMacro
|
61
|
-
block_macro Metanorma::Plugin::Lutaml::LutamlDiagramBlockMacro
|
62
55
|
block Metanorma::Standoc::ToDoAdmonitionBlock
|
63
56
|
block Metanorma::Standoc::EditorAdmonitionBlock
|
64
57
|
treeprocessor Metanorma::Standoc::EditorInlineAdmonitionBlock
|
65
58
|
treeprocessor Metanorma::Standoc::ToDoInlineAdmonitionBlock
|
66
59
|
block Metanorma::Standoc::PlantUMLBlockMacro
|
67
|
-
block Metanorma::Plugin::Lutaml::LutamlDiagramBlock
|
68
60
|
block Metanorma::Standoc::PseudocodeBlockMacro
|
69
61
|
preprocessor Metanorma::Standoc::EmbedIncludeProcessor
|
70
62
|
preprocessor Metanorma::Standoc::NamedEscapePreprocessor
|
@@ -103,16 +103,16 @@ module Metanorma
|
|
103
103
|
class ConceptInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
|
104
104
|
use_dsl
|
105
105
|
named :concept
|
106
|
-
match /\{\{(?<content>|.*?[^\\])\}\}/
|
106
|
+
match /\{\{(?<content>|.*?[^\\])\}\}/m
|
107
107
|
using_format :short
|
108
108
|
|
109
109
|
def preprocess_attrs(target)
|
110
|
-
m = /^(?<id><<.+?>>)?(?<rest>.*)
|
110
|
+
m = /^(?<id><<.+?>>)?(?<rest>.*)$/m.match(target)
|
111
111
|
ret = { id: m[:id]&.sub(/^<</, "")&.sub(/>>$/, "") }
|
112
|
-
if m2 = /^(?<rest>.*?)(?<opt>,opt(?:ion)?s=.+)$/
|
112
|
+
if m2 = /^(?<rest>.*?)(?<opt>,opt(?:ion)?s=.+)$/m
|
113
113
|
.match(m[:rest].sub(/^,/, ""))
|
114
114
|
ret[:opt] = CSV.parse_line(m2[:opt].sub(/^,opt(ion)?s=/, "")
|
115
|
-
.sub(/^"(.+)"
|
115
|
+
.sub(/^"(.+)"$/m, "\\1").sub(/^'(.+)'$/m, "\\1"))
|
116
116
|
begin
|
117
117
|
attrs = CSV.parse_line(m2[:rest]) || []
|
118
118
|
rescue StandardError
|
@@ -125,6 +125,7 @@ module Metanorma
|
|
125
125
|
raise "error processing #{m[:rest]} as CSV"
|
126
126
|
end
|
127
127
|
end
|
128
|
+
attrs.map! { |x| x.gsub(/\s+/, " ") }
|
128
129
|
ret.merge(term: attrs[0], word: attrs[1] || attrs[0],
|
129
130
|
render: attrs[2])
|
130
131
|
end
|
@@ -31,6 +31,13 @@ module Metanorma
|
|
31
31
|
@reqt_model = nil unless nested
|
32
32
|
ret
|
33
33
|
end
|
34
|
+
|
35
|
+
def requirement_validate(docxml)
|
36
|
+
docxml.xpath("//requirement | //recommendation | //permission")
|
37
|
+
.each do |r|
|
38
|
+
@reqt_models.model(r["model"]).validate(r, @log)
|
39
|
+
end
|
40
|
+
end
|
34
41
|
end
|
35
42
|
end
|
36
43
|
end
|
@@ -56,17 +56,23 @@ module Metanorma
|
|
56
56
|
return nonterm_term_def_subclause_parse(attrs, xml, node)
|
57
57
|
node.role == "boilerplate" and
|
58
58
|
return terms_boilerplate_parse(attrs, xml, node)
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
st == "symbols and abbreviated terms" and
|
59
|
+
@definitions and return symbols_parse(attrs, xml, node)
|
60
|
+
term_contains_subclauses(node) and
|
61
|
+
return term_def_parse(attrs, xml, node, false)
|
62
|
+
case sectiontype(node, false)
|
63
|
+
when "symbols and abbreviated terms"
|
65
64
|
return symbols_parse(attrs, xml, node)
|
66
|
-
|
65
|
+
when "terms and definitions"
|
66
|
+
return clause_parse(attrs, xml, node)
|
67
|
+
end
|
67
68
|
term_def_subclause_parse1(attrs, xml, node)
|
68
69
|
end
|
69
70
|
|
71
|
+
def term_contains_subclauses(node)
|
72
|
+
sub = node.find_by(context: :section) { |s| s.level == node.level + 1 }
|
73
|
+
!sub.empty?
|
74
|
+
end
|
75
|
+
|
70
76
|
def term_def_subclause_parse1(attrs, xml, node)
|
71
77
|
xml.term **attr_code(attrs) do |xml_section|
|
72
78
|
term_designation(xml_section, node, "preferred", node.title)
|
@@ -4,6 +4,8 @@ require_relative "./validate_table"
|
|
4
4
|
require "nokogiri"
|
5
5
|
require "jing"
|
6
6
|
require "iev"
|
7
|
+
require "pngcheck"
|
8
|
+
require "png"
|
7
9
|
|
8
10
|
module Metanorma
|
9
11
|
module Standoc
|
@@ -51,7 +53,10 @@ module Metanorma
|
|
51
53
|
concept_validate(doc, "concept", "refterm")
|
52
54
|
concept_validate(doc, "related", "preferred//name")
|
53
55
|
table_validate(doc)
|
54
|
-
|
56
|
+
requirement_validate(doc)
|
57
|
+
image_validate(doc)
|
58
|
+
@fatalerror.empty? or
|
59
|
+
clean_abort(@fatalerror.join("\n"), doc)
|
55
60
|
end
|
56
61
|
|
57
62
|
def norm_ref_validate(doc)
|
@@ -104,7 +109,7 @@ module Metanorma
|
|
104
109
|
Tempfile.open(["tmp", ".xml"], encoding: "UTF-8") do |f|
|
105
110
|
schema_validate1(f, doc, schema)
|
106
111
|
rescue Jing::Error => e
|
107
|
-
clean_abort("Jing failed with error: #{e}", doc
|
112
|
+
clean_abort("Jing failed with error: #{e}", doc)
|
108
113
|
ensure
|
109
114
|
f.close!
|
110
115
|
end
|
@@ -154,6 +159,21 @@ module Metanorma
|
|
154
159
|
end
|
155
160
|
end
|
156
161
|
|
162
|
+
def image_validate(doc)
|
163
|
+
doc.xpath("//image[@mimetype = 'image/png']").each do |i|
|
164
|
+
d = Metanorma::Utils::datauri(i["src"], @localdir)
|
165
|
+
# d.chars.to_a.each_slice(80).to_a.map { |s| s.join }.each { |s| warn s }
|
166
|
+
png_validate1(i, Base64.strict_decode64(d.sub(/^.+?base64,/, "")))
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
def png_validate1(img, buffer)
|
171
|
+
PngCheck.check_buffer(buffer)
|
172
|
+
rescue PngCheck::CorruptPngError => e
|
173
|
+
@log.add("Images", img.parent, "Corrupt PNG image")
|
174
|
+
@fatalerror << "Exception #{e.message}"
|
175
|
+
end
|
176
|
+
|
157
177
|
def validate(doc)
|
158
178
|
content_validate(doc)
|
159
179
|
schema_validate(formattedstr_strip(doc.dup),
|
data/lib/metanorma-standoc.rb
CHANGED
@@ -4,7 +4,7 @@ require_relative "metanorma/standoc/converter"
|
|
4
4
|
require_relative "metanorma/standoc/version"
|
5
5
|
require "asciidoctor/extensions"
|
6
6
|
|
7
|
-
if defined? Metanorma
|
7
|
+
if defined? Metanorma::Registry
|
8
8
|
require_relative "metanorma/standoc"
|
9
9
|
Metanorma::Registry.instance.register(Metanorma::Standoc::Processor)
|
10
10
|
end
|
data/metanorma-standoc.gemspec
CHANGED
@@ -27,7 +27,8 @@ Gem::Specification.new do |spec|
|
|
27
27
|
|
28
28
|
spec.add_dependency "asciidoctor", "~> 2.0.0"
|
29
29
|
spec.add_dependency "iev", "~> 0.3.0"
|
30
|
-
spec.add_dependency "isodoc", "~> 2.2.
|
30
|
+
spec.add_dependency "isodoc", "~> 2.2.3"
|
31
|
+
spec.add_dependency "metanorma"
|
31
32
|
spec.add_dependency "metanorma-plugin-datastruct", "~> 0.2.0"
|
32
33
|
spec.add_dependency "metanorma-plugin-lutaml"
|
33
34
|
spec.add_dependency "ruby-jing"
|
@@ -36,7 +37,9 @@ Gem::Specification.new do |spec|
|
|
36
37
|
spec.add_dependency "concurrent-ruby"
|
37
38
|
spec.add_dependency "latexmath"
|
38
39
|
spec.add_dependency "mathml2asciimath"
|
39
|
-
spec.add_dependency "mn-requirements", "~> 0.
|
40
|
+
spec.add_dependency "mn-requirements", "~> 0.1.3"
|
41
|
+
spec.add_dependency "png"
|
42
|
+
spec.add_dependency "pngcheck"
|
40
43
|
spec.add_dependency "relaton-cli", "~> 1.13.0"
|
41
44
|
spec.add_dependency "relaton-iev", "~> 1.1.0"
|
42
45
|
spec.add_dependency "unicode2latex", "~> 0.0.1"
|
@@ -45,7 +48,6 @@ Gem::Specification.new do |spec|
|
|
45
48
|
spec.add_development_dependency "equivalent-xml", "~> 0.6"
|
46
49
|
spec.add_development_dependency "guard", "~> 2.14"
|
47
50
|
spec.add_development_dependency "guard-rspec", "~> 4.7"
|
48
|
-
spec.add_development_dependency "metanorma-iso", "~>2.1.2"
|
49
51
|
spec.add_development_dependency "rake", "~> 13.0"
|
50
52
|
spec.add_development_dependency "rspec", "~> 3.6"
|
51
53
|
spec.add_development_dependency "rubocop", "~> 1.5.2"
|
Binary file
|
Binary file
|
data/spec/metanorma/base_spec.rb
CHANGED
@@ -222,7 +222,7 @@ RSpec.describe Metanorma::Standoc do
|
|
222
222
|
:iteration: 3
|
223
223
|
:language: en
|
224
224
|
:title: Main Title -- Title
|
225
|
-
:library-ics:
|
225
|
+
:library-ics: 01.040.11,11.060.01
|
226
226
|
:fullname: Fred Flintstone
|
227
227
|
:role: author
|
228
228
|
:affiliation: Slate Rock and Gravel Company
|
@@ -509,14 +509,13 @@ RSpec.describe Metanorma::Standoc do
|
|
509
509
|
<technical-committee number="1" type="A">TC</technical-committee>
|
510
510
|
<technical-committee number="11" type="A1">TC1</technical-committee>
|
511
511
|
</editorialgroup>
|
512
|
-
|
513
|
-
<code>
|
514
|
-
|
515
|
-
<ics>
|
516
|
-
<code>2</code>
|
512
|
+
<ics>
|
513
|
+
<code>01.040.11</code>
|
514
|
+
<text>Health care technology (Vocabularies)</text>
|
517
515
|
</ics>
|
518
516
|
<ics>
|
519
|
-
<code>
|
517
|
+
<code>11.060.01</code>
|
518
|
+
<text>Dentistry in general</text>
|
520
519
|
</ics>
|
521
520
|
</ext>
|
522
521
|
</bibdata>
|
@@ -6,6 +6,9 @@ RSpec.describe Metanorma::Standoc do
|
|
6
6
|
#{ASCIIDOC_BLANK_HDR}
|
7
7
|
|
8
8
|
{{clause1}}
|
9
|
+
{{clause two}}
|
10
|
+
{{clause
|
11
|
+
two}}
|
9
12
|
term:[clause1]
|
10
13
|
{{clause1,w\[o\]rd}}
|
11
14
|
term:[clause1,w[o]rd]
|
@@ -39,6 +42,22 @@ RSpec.describe Metanorma::Standoc do
|
|
39
42
|
<tt>clause1</tt>
|
40
43
|
</strong>
|
41
44
|
</concept>
|
45
|
+
<concept>
|
46
|
+
<strong>
|
47
|
+
term
|
48
|
+
<tt>clause two</tt>
|
49
|
+
not resolved via ID
|
50
|
+
<tt>clause-two</tt>
|
51
|
+
</strong>
|
52
|
+
</concept>
|
53
|
+
<concept>
|
54
|
+
<strong>
|
55
|
+
term
|
56
|
+
<tt>clause two</tt>
|
57
|
+
not resolved via ID
|
58
|
+
<tt>clause-two</tt>
|
59
|
+
</strong>
|
60
|
+
</concept>
|
42
61
|
<concept>
|
43
62
|
<strong>
|
44
63
|
term
|
@@ -933,102 +933,6 @@ RSpec.describe Metanorma::Standoc do
|
|
933
933
|
.to be_equivalent_to xmlpp(output)
|
934
934
|
end
|
935
935
|
|
936
|
-
it "processes embed macro with document in a different flavour" do
|
937
|
-
require "metanorma-iso"
|
938
|
-
input = <<~INPUT
|
939
|
-
#{ASCIIDOC_BLANK_HDR}
|
940
|
-
|
941
|
-
[[clause1]]
|
942
|
-
== Clause 1
|
943
|
-
|
944
|
-
embed::spec/assets/iso.adoc[]
|
945
|
-
INPUT
|
946
|
-
output = <<~OUTPUT
|
947
|
-
<standard-document xmlns='https://www.metanorma.org/ns/standoc' type='semantic' version='#{Metanorma::Standoc::VERSION}'>
|
948
|
-
<bibdata type='standard'>
|
949
|
-
<title language='en' format='text/plain'>Document title</title>
|
950
|
-
<language>en</language>
|
951
|
-
<script>Latn</script>
|
952
|
-
<status>
|
953
|
-
<stage>published</stage>
|
954
|
-
</status>
|
955
|
-
<copyright>
|
956
|
-
<from>2022</from>
|
957
|
-
</copyright>
|
958
|
-
<ext>
|
959
|
-
<doctype>standard</doctype>
|
960
|
-
</ext>
|
961
|
-
<relation type='derivedFrom'>
|
962
|
-
<bibitem>
|
963
|
-
<title language='en' format='text/plain' type='main'>
|
964
|
-
Medical devices — Quality management systems — Requirements for
|
965
|
-
regulatory purposes
|
966
|
-
</title>
|
967
|
-
<title language='en' format='text/plain' type='title-main'>
|
968
|
-
Medical devices — Quality management systems — Requirements for
|
969
|
-
regulatory purposes
|
970
|
-
</title>
|
971
|
-
<title language='fr' format='text/plain' type='main'>
|
972
|
-
Dispositifs médicaux — Systèmes de management de la qualité —
|
973
|
-
Exigences à des fins réglementaires
|
974
|
-
</title>
|
975
|
-
<title language='fr' format='text/plain' type='title-main'>
|
976
|
-
Dispositifs médicaux — Systèmes de management de la qualité —
|
977
|
-
Exigences à des fins réglementaires
|
978
|
-
</title>
|
979
|
-
<contributor>
|
980
|
-
<role type='author'/>
|
981
|
-
<organization>
|
982
|
-
<name>International Organization for Standardization</name>
|
983
|
-
<abbreviation>ISO</abbreviation>
|
984
|
-
</organization>
|
985
|
-
</contributor>
|
986
|
-
<contributor>
|
987
|
-
<role type='publisher'/>
|
988
|
-
<organization>
|
989
|
-
<name>International Organization for Standardization</name>
|
990
|
-
<abbreviation>ISO</abbreviation>
|
991
|
-
</organization>
|
992
|
-
</contributor>
|
993
|
-
<language>en</language>
|
994
|
-
<script>Latn</script>
|
995
|
-
<status>
|
996
|
-
<stage abbreviation='IS'>60</stage>
|
997
|
-
<substage>60</substage>
|
998
|
-
</status>
|
999
|
-
<copyright>
|
1000
|
-
<from>2022</from>
|
1001
|
-
<owner>
|
1002
|
-
<organization>
|
1003
|
-
<name>International Organization for Standardization</name>
|
1004
|
-
<abbreviation>ISO</abbreviation>
|
1005
|
-
</organization>
|
1006
|
-
</owner>
|
1007
|
-
</copyright>
|
1008
|
-
<ext>
|
1009
|
-
<doctype>standard</doctype>
|
1010
|
-
<editorialgroup>
|
1011
|
-
<agency>ISO</agency>
|
1012
|
-
</editorialgroup>
|
1013
|
-
<approvalgroup>
|
1014
|
-
<agency>ISO</agency>
|
1015
|
-
</approvalgroup>
|
1016
|
-
<stagename>International standard</stagename>
|
1017
|
-
</ext>
|
1018
|
-
</bibitem>
|
1019
|
-
</relation>
|
1020
|
-
</bibdata>
|
1021
|
-
<sections>
|
1022
|
-
<clause id='clause1' inline-header='false' obligation='normative'>
|
1023
|
-
<title>Clause 1</title>
|
1024
|
-
</clause>
|
1025
|
-
</sections>
|
1026
|
-
</standard-document>
|
1027
|
-
OUTPUT
|
1028
|
-
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
1029
|
-
.to be_equivalent_to xmlpp(output)
|
1030
|
-
end
|
1031
|
-
|
1032
936
|
it "processes std-link macro" do
|
1033
937
|
VCR.use_cassette("std-link", match_requests_on: %i[method uri body]) do
|
1034
938
|
input = <<~INPUT
|
@@ -782,4 +782,53 @@ RSpec.describe Metanorma::Standoc do
|
|
782
782
|
expect(File.read("test.err"))
|
783
783
|
.not_to include "Symbol reference in `symbol[xyz]` missing:"
|
784
784
|
end
|
785
|
+
|
786
|
+
it "warns and aborts if corrupt PNG" do
|
787
|
+
FileUtils.rm_f "test.xml"
|
788
|
+
FileUtils.rm_f "test.err"
|
789
|
+
begin
|
790
|
+
input = <<~INPUT
|
791
|
+
= Document title
|
792
|
+
Author
|
793
|
+
:docfile: test.adoc
|
794
|
+
:no-pdf:
|
795
|
+
|
796
|
+
== Clause
|
797
|
+
image::spec/assets/corrupt.png[]
|
798
|
+
|
799
|
+
INPUT
|
800
|
+
expect do
|
801
|
+
Asciidoctor.convert(input, *OPTIONS)
|
802
|
+
end.to raise_error(SystemExit)
|
803
|
+
rescue SystemExit, RuntimeError
|
804
|
+
end
|
805
|
+
warn File.read("test.err")
|
806
|
+
expect(File.read("test.err"))
|
807
|
+
.to include "Corrupt PNG image"
|
808
|
+
expect(File.exist?("test.xml")).to be false
|
809
|
+
end
|
810
|
+
|
811
|
+
it "does not warn and abort if not corrupt PNG" do
|
812
|
+
FileUtils.rm_f "test.xml"
|
813
|
+
FileUtils.rm_f "test.err"
|
814
|
+
begin
|
815
|
+
input = <<~INPUT
|
816
|
+
= Document title
|
817
|
+
Author
|
818
|
+
:docfile: test.adoc
|
819
|
+
:no-pdf:
|
820
|
+
|
821
|
+
== Clause
|
822
|
+
image::spec/assets/correct.png[]
|
823
|
+
|
824
|
+
INPUT
|
825
|
+
expect do
|
826
|
+
Asciidoctor.convert(input, *OPTIONS)
|
827
|
+
end.not_to raise_error
|
828
|
+
rescue SystemExit, RuntimeError
|
829
|
+
end
|
830
|
+
expect(File.read("test.err"))
|
831
|
+
.not_to include "Corrupt PNG image"
|
832
|
+
expect(File.exist?("test.xml")).to be true
|
833
|
+
end
|
785
834
|
end
|