metanorma-iso 1.7.1 → 1.7.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +0 -4
  3. data/lib/asciidoctor/iso/base.rb +12 -12
  4. data/lib/asciidoctor/iso/cleanup.rb +1 -1
  5. data/lib/asciidoctor/iso/isodoc.rng +19 -1
  6. data/lib/asciidoctor/iso/isostandard-amd.rng +3 -0
  7. data/lib/asciidoctor/iso/isostandard.rng +6 -0
  8. data/lib/metanorma/iso/version.rb +1 -1
  9. data/spec/asciidoctor-iso/amd_spec.rb +575 -573
  10. data/spec/asciidoctor-iso/base_spec.rb +445 -454
  11. data/spec/asciidoctor-iso/blocks_spec.rb +333 -288
  12. data/spec/asciidoctor-iso/cleanup_spec.rb +813 -704
  13. data/spec/asciidoctor-iso/inline_spec.rb +116 -91
  14. data/spec/asciidoctor-iso/lists_spec.rb +128 -121
  15. data/spec/asciidoctor-iso/refs_spec.rb +308 -250
  16. data/spec/asciidoctor-iso/section_spec.rb +273 -242
  17. data/spec/asciidoctor-iso/table_spec.rb +258 -242
  18. data/spec/asciidoctor-iso/validate_spec.rb +1099 -1165
  19. data/spec/isodoc/amd_spec.rb +967 -946
  20. data/spec/isodoc/blocks_spec.rb +530 -507
  21. data/spec/isodoc/i18n_spec.rb +953 -911
  22. data/spec/isodoc/inline_spec.rb +355 -293
  23. data/spec/isodoc/iso_spec.rb +338 -314
  24. data/spec/isodoc/metadata_spec.rb +392 -382
  25. data/spec/isodoc/postproc_spec.rb +833 -656
  26. data/spec/isodoc/ref_spec.rb +374 -331
  27. data/spec/isodoc/section_spec.rb +608 -525
  28. data/spec/isodoc/table_spec.rb +472 -411
  29. data/spec/isodoc/terms_spec.rb +209 -185
  30. data/spec/isodoc/xref_spec.rb +1370 -1236
  31. data/spec/metanorma/processor_spec.rb +28 -26
  32. data/spec/spec_helper.rb +176 -193
  33. metadata +2 -4
  34. data/.rubocop.ribose.yml +0 -66
  35. data/spec/assets/xref_error.adoc +0 -7
@@ -2,9 +2,8 @@ require "spec_helper"
2
2
  require "metanorma"
3
3
  require "fileutils"
4
4
 
5
- #RSpec.describe Asciidoctor::Gb do
5
+ # RSpec.describe Asciidoctor::Gb do
6
6
  RSpec.describe Metanorma::Iso::Processor do
7
-
8
7
  registry = Metanorma::Registry.instance
9
8
  registry.register(Metanorma::Iso::Processor)
10
9
  processor = registry.find_processor(:iso)
@@ -15,7 +14,7 @@ RSpec.describe Metanorma::Iso::Processor do
15
14
 
16
15
  it "registers output formats against metanorma" do
17
16
  expect(processor.output_formats.sort.to_s).to be_equivalent_to <<~"OUTPUT"
18
- [[:doc, "doc"], [:html, "html"], [:html_alt, "alt.html"], [:isosts, "iso.sts.xml"], [:pdf, "pdf"], [:presentation, "presentation.xml"], [:rxl, "rxl"], [:sts, "sts.xml"], [:xml, "xml"]]
17
+ [[:doc, "doc"], [:html, "html"], [:html_alt, "alt.html"], [:isosts, "iso.sts.xml"], [:pdf, "pdf"], [:presentation, "presentation.xml"], [:rxl, "rxl"], [:sts, "sts.xml"], [:xml, "xml"]]
19
18
  OUTPUT
20
19
  end
21
20
 
@@ -25,37 +24,40 @@ RSpec.describe Metanorma::Iso::Processor do
25
24
 
26
25
  it "generates IsoDoc XML from a blank document" do
27
26
  expect(xmlpp(processor.input_to_isodoc(<<~"INPUT", nil))).to be_equivalent_to xmlpp(<<~"OUTPUT")
28
- #{ASCIIDOC_BLANK_HDR}
27
+ #{ASCIIDOC_BLANK_HDR}
29
28
  INPUT
30
- #{BLANK_HDR}
31
- <sections/>
32
- </iso-standard>
29
+ #{BLANK_HDR}
30
+ <sections/>
31
+ </iso-standard>
33
32
  OUTPUT
34
33
  end
35
34
 
36
35
  it "generates HTML from IsoDoc XML" do
37
36
  FileUtils.rm_f "test.xml"
38
37
  processor.output(<<~"INPUT", "test.xml", "test.html", :html)
39
- <iso-standard xmlns="http://riboseinc.com/isoxml">
40
- <sections>
41
- <terms id="H" obligation="normative"><title>1&#xA0; Terms, Definitions, Symbols and Abbreviated Terms</title>
42
- <term id="J">
43
- <name>1.1</name>
44
- <preferred>Term2</preferred>
45
- </term>
46
- </terms>
38
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
39
+ <sections>
40
+ <terms id="H" obligation="normative"><title>1&#xA0; Terms, Definitions, Symbols and Abbreviated Terms</title>
41
+ <term id="J">
42
+ <name>1.1</name>
43
+ <preferred>Term2</preferred>
44
+ </term>
45
+ </terms>
47
46
  </sections>
48
- </iso-standard>
47
+ </iso-standard>
49
48
  INPUT
50
- expect(xmlpp(File.read("test.html", encoding: "utf-8").gsub(%r{^.*<main}m, "<main").gsub(%r{</main>.*}m, "</main>"))).to be_equivalent_to xmlpp(<<~"OUTPUT")
51
- <main class="main-section"><button onclick="topFunction()" id="myBtn" title="Go to top">Top</button>
52
- <p class="zzSTDTitle1"></p>
53
- <div id="H"><h1 id="toc0">1&#xA0; Terms, Definitions, Symbols and Abbreviated Terms</h1>
54
- <h2 class="TermNum" id="J">1.1</h2>
55
- <p class="Terms" style="text-align:left;">Term2</p>
56
- </div>
57
- </main>
58
- OUTPUT
49
+ expect(xmlpp(File.read("test.html", encoding: "utf-8")
50
+ .gsub(%r{^.*<main}m, "<main")
51
+ .gsub(%r{</main>.*}m, "</main>")))
52
+ .to be_equivalent_to xmlpp(<<~"OUTPUT")
53
+ <main class="main-section">
54
+ <button onclick="topFunction()" id="myBtn" title="Go to top">Top</button>
55
+ <p class="zzSTDTitle1"></p>
56
+ <div id="H"><h1 id="toc0">1&#xA0; Terms, Definitions, Symbols and Abbreviated Terms</h1>
57
+ <h2 class="TermNum" id="J">1.1</h2>
58
+ <p class="Terms" style="text-align:left;">Term2</p>
59
+ </div>
60
+ </main>
61
+ OUTPUT
59
62
  end
60
-
61
63
  end
data/spec/spec_helper.rb CHANGED
@@ -23,250 +23,235 @@ RSpec.configure do |config|
23
23
  config.expect_with :rspec do |c|
24
24
  c.syntax = :expect
25
25
  end
26
+
27
+ config.around do |example|
28
+ Dir.mktmpdir("rspec-") do |dir|
29
+ tmp_assets = File.join(dir, "spec/assets/")
30
+ FileUtils.mkdir_p tmp_assets
31
+ FileUtils.cp_r Dir.glob("spec/assets/*"), tmp_assets
32
+ Dir.chdir(dir) { example.run }
33
+ end
34
+ end
26
35
  end
27
36
 
28
- def strip_guid(x)
29
- x.gsub(%r{ id="_[^"]+"}, ' id="_"').gsub(%r{ target="_[^"]+"}, ' target="_"')
37
+ def strip_guid(xml)
38
+ xml.gsub(%r{ id="_[^"]+"}, ' id="_"').gsub(%r{ target="_[^"]+"}, ' target="_"')
30
39
  end
31
40
 
32
- def metadata(x)
33
- Hash[x.sort].delete_if{ |k, v| v.nil? || v.respond_to?(:empty?) && v.empty? }
41
+ def metadata(hash)
42
+ Hash[hash.sort].delete_if { |_, v| v.nil? || v.respond_to?(:empty?) && v.empty? }
34
43
  end
35
44
 
36
- def xmlpp(x)
45
+ def xmlpp(xml)
37
46
  s = ""
38
47
  f = REXML::Formatters::Pretty.new(2)
39
48
  f.compact = true
40
- f.write(REXML::Document.new(x),s)
49
+ f.write(REXML::Document.new(xml), s)
41
50
  s
42
51
  end
43
52
 
44
- ASCIIDOC_BLANK_HDR = <<~"HDR"
45
- = Document title
46
- Author
47
- :docfile: test.adoc
48
- :nodoc:
49
- :novalid:
50
- :no-isobib:
53
+ ASCIIDOC_BLANK_HDR = <<~"HDR".freeze
54
+ = Document title
55
+ Author
56
+ :docfile: test.adoc
57
+ :nodoc:
58
+ :novalid:
59
+ :no-isobib:
51
60
 
52
61
  HDR
53
62
 
54
- AMD_BLANK_HDR = <<~"HDR"
55
- = Document title
56
- Author
57
- :docfile: test.adoc
58
- :nodoc:
59
- :novalid:
60
- :no-isobib:
61
- :doctype: amendment
63
+ AMD_BLANK_HDR = <<~"HDR".freeze
64
+ = Document title
65
+ Author
66
+ :docfile: test.adoc
67
+ :nodoc:
68
+ :novalid:
69
+ :no-isobib:
70
+ :doctype: amendment
62
71
 
63
72
  HDR
64
73
 
65
- ISOBIB_BLANK_HDR = <<~"HDR"
66
- = Document title
67
- Author
68
- :docfile: test.adoc
69
- :nodoc:
70
- :novalid:
71
- :no-isobib-cache:
74
+ ISOBIB_BLANK_HDR = <<~"HDR".freeze
75
+ = Document title
76
+ Author
77
+ :docfile: test.adoc
78
+ :nodoc:
79
+ :novalid:
80
+ :no-isobib-cache:
72
81
 
73
82
  HDR
74
83
 
75
- FLUSH_CACHE_ISOBIB_BLANK_HDR = <<~"HDR"
76
- = Document title
77
- Author
78
- :docfile: test.adoc
79
- :nodoc:
80
- :novalid:
81
- :flush-caches:
84
+ FLUSH_CACHE_ISOBIB_BLANK_HDR = <<~"HDR".freeze
85
+ = Document title
86
+ Author
87
+ :docfile: test.adoc
88
+ :nodoc:
89
+ :novalid:
90
+ :flush-caches:
82
91
 
83
92
  HDR
84
93
 
85
- CACHED_ISOBIB_BLANK_HDR = <<~"HDR"
86
- = Document title
87
- Author
88
- :docfile: test.adoc
89
- :nodoc:
90
- :novalid:
94
+ CACHED_ISOBIB_BLANK_HDR = <<~"HDR".freeze
95
+ = Document title
96
+ Author
97
+ :docfile: test.adoc
98
+ :nodoc:
99
+ :novalid:
91
100
 
92
101
  HDR
93
102
 
94
- LOCAL_CACHED_ISOBIB_BLANK_HDR = <<~"HDR"
95
- = Document title
96
- Author
97
- :docfile: test.adoc
98
- :nodoc:
99
- :novalid:
100
- :local-cache:
103
+ LOCAL_CACHED_ISOBIB_BLANK_HDR = <<~"HDR".freeze
104
+ = Document title
105
+ Author
106
+ :docfile: test.adoc
107
+ :nodoc:
108
+ :novalid:
109
+ :local-cache:
101
110
 
102
111
  HDR
103
112
 
104
- VALIDATING_BLANK_HDR = <<~"HDR"
105
- = Document title
106
- Author
107
- :docfile: test.adoc
108
- :nodoc:
109
- :no-isobib:
110
-
113
+ VALIDATING_BLANK_HDR = <<~"HDR".freeze
114
+ = Document title
115
+ Author
116
+ :docfile: test.adoc
117
+ :nodoc:
118
+ :no-isobib:
111
119
  HDR
112
120
 
121
+ ASCIIDOCTOR_ISO_DIR = Pathname.new(File.dirname(__FILE__)) / "../lib/asciidoctor/iso"
122
+
113
123
  BOILERPLATE =
114
124
  HTMLEntities.new.decode(
115
- File.read(File.join(File.dirname(__FILE__), "..", "lib", "asciidoctor", "iso", "boilerplate.xml"), encoding: "utf-8").
116
- gsub(/\{\{ agency \}\}/, "ISO").gsub(/\{\{ docyear \}\}/, Date.today.year.to_s).
117
- gsub(/\{% if unpublished %\}.*\{% endif %\}/m, "").
118
- gsub(/(?<=\p{Alnum})'(?=\p{Alpha})/, "’")
119
- )
125
+ File.read(ASCIIDOCTOR_ISO_DIR / "boilerplate.xml", encoding: "utf-8")
126
+ .gsub(/\{\{ agency \}\}/, "ISO").gsub(/\{\{ docyear \}\}/, Date.today.year.to_s)
127
+ .gsub(/\{% if unpublished %\}.*\{% endif %\}/m, "")
128
+ .gsub(/(?<=\p{Alnum})'(?=\p{Alpha})/, "’")
129
+ )
120
130
 
121
131
  BOILERPLATE_FR =
122
132
  HTMLEntities.new.decode(
123
- File.read(File.join(File.dirname(__FILE__), "..", "lib", "asciidoctor", "iso", "boilerplate-fr.xml"), encoding: "utf-8").
124
- gsub(/\{\{ agency \}\}/, "ISO").gsub(/\{\{ docyear \}\}/, Date.today.year.to_s).
125
- gsub(/\{% if unpublished %\}.*\{% endif %\}/m, "").
126
- gsub(/(?<=\p{Alnum})'(?=\p{Alpha})/, "’")
127
- )
128
-
129
- BLANK_HDR1 = <<~"HDR"
130
- <?xml version="1.0" encoding="UTF-8"?>
131
- <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="#{Metanorma::ISO::VERSION}">
132
- <bibdata type="standard">
133
- <contributor>
134
- <role type="author"/>
135
- <organization>
136
- <name>International Organization for Standardization</name>
137
- <abbreviation>ISO</abbreviation>
138
- </organization>
139
- </contributor>
140
- <contributor>
141
- <role type="publisher"/>
142
- <organization>
143
- <name>International Organization for Standardization</name>
144
- <abbreviation>ISO</abbreviation>
145
- </organization>
146
- </contributor>
147
- <language>en</language>
148
- <script>Latn</script>
149
- <status>
150
- <stage abbreviation="IS">60</stage>
151
- <substage>60</substage>
152
- </status>
153
- <copyright>
154
- <from>#{Time.new.year}</from>
155
- <owner>
156
- <organization>
157
- <name>International Organization for Standardization</name>
158
- <abbreviation>ISO</abbreviation>
159
- </organization>
160
- </owner>
161
- </copyright>
162
- <ext>
163
- <doctype>article</doctype>
164
- <editorialgroup>
165
- <technical-committee/>
166
- <subcommittee/>
167
- <workgroup/>
168
- </editorialgroup>
169
- <stagename>International standard</stagename>
170
- </ext>
171
- </bibdata>
133
+ File.read(ASCIIDOCTOR_ISO_DIR / "boilerplate-fr.xml", encoding: "utf-8")
134
+ .gsub(/\{\{ agency \}\}/, "ISO").gsub(/\{\{ docyear \}\}/, Date.today.year.to_s)
135
+ .gsub(/\{% if unpublished %\}.*\{% endif %\}/m, "")
136
+ .gsub(/(?<=\p{Alnum})'(?=\p{Alpha})/, "’")
137
+ )
138
+
139
+ BLANK_HDR1 = <<~"HDR".freeze
140
+ <?xml version="1.0" encoding="UTF-8"?>
141
+ <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="#{Metanorma::ISO::VERSION}">
142
+ <bibdata type="standard">
143
+ <contributor>
144
+ <role type="author"/>
145
+ <organization>
146
+ <name>International Organization for Standardization</name>
147
+ <abbreviation>ISO</abbreviation>
148
+ </organization>
149
+ </contributor>
150
+ <contributor>
151
+ <role type="publisher"/>
152
+ <organization>
153
+ <name>International Organization for Standardization</name>
154
+ <abbreviation>ISO</abbreviation>
155
+ </organization>
156
+ </contributor>
157
+ <language>en</language>
158
+ <script>Latn</script>
159
+ <status>
160
+ <stage abbreviation="IS">60</stage>
161
+ <substage>60</substage>
162
+ </status>
163
+ <copyright>
164
+ <from>#{Time.new.year}</from>
165
+ <owner>
166
+ <organization>
167
+ <name>International Organization for Standardization</name>
168
+ <abbreviation>ISO</abbreviation>
169
+ </organization>
170
+ </owner>
171
+ </copyright>
172
+ <ext>
173
+ <doctype>article</doctype>
174
+ <editorialgroup>
175
+ <technical-committee/>
176
+ <subcommittee/>
177
+ <workgroup/>
178
+ </editorialgroup>
179
+ <stagename>International standard</stagename>
180
+ </ext>
181
+ </bibdata>
172
182
  HDR
173
183
 
174
- BLANK_HDR = <<~"HDR"
175
- #{BLANK_HDR1}
176
- #{BOILERPLATE}
184
+ BLANK_HDR = <<~"HDR".freeze
185
+ #{BLANK_HDR1}
186
+ #{BOILERPLATE}
177
187
  HDR
178
188
 
179
- BLANK_HDR_FR = <<~"HDR"
180
- #{BLANK_HDR1.sub(%r{<language>en</language>}, "<language>fr</language>")}
181
- #{BOILERPLATE_FR}
189
+ BLANK_HDR_FR = <<~"HDR".freeze
190
+ #{BLANK_HDR1.sub(%r{<language>en</language>}, '<language>fr</language>')}
191
+ #{BOILERPLATE_FR}
182
192
  HDR
183
193
 
184
- TERM_BOILERPLATE = <<~END
194
+ TERM_BOILERPLATE = <<~TERM.freeze
185
195
  <p id="_">For the purposes of this document,
186
196
  the following terms and definitions apply.</p>
187
- <p id="_">ISO and IEC maintain terminological databases for use in
188
- standardization at the following addresses:</p>
189
-
190
- <ul id="_">
191
- <li> <p id="_">ISO Online browsing platform: available at
192
- <link target="http://www.iso.org/obp"/></p> </li>
193
- <li> <p id="_">IEC Electropedia: available at
194
- <link target="http://www.electropedia.org"/>
195
- </p> </li> </ul>
196
- END
197
-
198
- HTML_HDR = <<~END
199
- <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en">
200
- <head/>
201
- <body lang="en">
202
- <div class="title-section">
203
- <p>&#160;</p>
204
- </div>
205
- <br/>
206
- <div class="prefatory-section">
207
- <p>&#160;</p>
208
- </div>
209
- <br/>
210
- <div class="main-section">
211
- END
212
-
213
- WORD_HDR = <<~END
214
- <html xmlns:epub="http://www.idpf.org/2007/ops">
215
- <head>
216
- <title>test</title>
217
- </head>
218
- <body lang="EN-US" link="blue" vlink="#954F72">
219
- <div class="WordSection1">
220
- <p>&#160;</p>
221
- </div>
222
- <p><br clear="all" class="section"/></p>
223
- <div class="WordSection2">
224
- <p>&#160;</p>
225
- </div>
226
- <p><br clear="all" class="section"/></p>
227
- <div class="WordSection3">
228
- END
229
-
230
-
231
- def stub_fetch_ref(**opts)
232
- xml = ""
233
-
234
- hit = double("hit")
235
- expect(hit).to receive(:"[]").with("title") do
236
- Nokogiri::XML(xml).at("//docidentifier").content
237
- end.at_least(:once)
238
-
239
- hit_instance = double("hit_instance")
240
- expect(hit_instance).to receive(:hit).and_return(hit).at_least(:once)
241
- expect(hit_instance).to receive(:to_xml) do |builder, opt|
242
- expect(builder).to be_instance_of Nokogiri::XML::Builder
243
- expect(opt).to eq opts
244
- builder << xml
245
- end.at_least :once
246
-
247
- hit_page = double("hit_page")
248
- expect(hit_page).to receive(:first).and_return(hit_instance).at_least :once
197
+ <p id="_">ISO and IEC maintain terminological databases for use in
198
+ standardization at the following addresses:</p>
199
+
200
+ <ul id="_">
201
+ <li>
202
+ <p id="_">ISO Online browsing platform: available at
203
+ <link target="http://www.iso.org/obp"/></p>
204
+ </li>
205
+ <li>
206
+ <p id="_">IEC Electropedia: available at
207
+ <link target="http://www.electropedia.org"/>
208
+ </p>
209
+ </li>
210
+ </ul>
211
+ TERM
212
+
213
+ HTML_HDR = <<~HDR.freeze
214
+ <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en">
215
+ <head/>
216
+ <body lang="en">
217
+ <div class="title-section">
218
+ <p>&#160;</p>
219
+ </div>
220
+ <br/>
221
+ <div class="prefatory-section">
222
+ <p>&#160;</p>
223
+ </div>
224
+ <br/>
225
+ <div class="main-section">
226
+ HDR
249
227
 
250
- hit_pages = double("hit_pages")
251
- expect(hit_pages).to receive(:first).and_return(hit_page).at_least :once
228
+ WORD_HDR = <<~HDR.freeze
229
+ <html xmlns:epub="http://www.idpf.org/2007/ops">
230
+ <head>
231
+ <title>test</title>
232
+ </head>
233
+ <body lang="EN-US" link="blue" vlink="#954F72">
234
+ <div class="WordSection1">
235
+ <p>&#160;</p>
236
+ </div>
237
+ <p><br clear="all" class="section"/></p>
238
+ <div class="WordSection2">
239
+ <p>&#160;</p>
240
+ </div>
241
+ <p><br clear="all" class="section"/></p>
242
+ <div class="WordSection3">
243
+ HDR
252
244
 
253
- expect(Isobib::IsoBibliography).to receive(:search).
254
- and_wrap_original do |search, *args|
255
- code = args[0]
256
- expect(code).to be_instance_of String
257
- xml = get_xml(search, code, opts)
258
- hit_pages
259
- end.at_least :once
260
- end
245
+ OPTIONS = [backend: :iso, header_footer: true].freeze
261
246
 
262
247
  def mock_pdf
263
- allow(::Mn2pdf).to receive(:convert) do |url, output, c, d|
248
+ allow(::Mn2pdf).to receive(:convert) do |url, output,|
264
249
  FileUtils.cp(url.gsub(/"/, ""), output.gsub(/"/, ""))
265
250
  end
266
251
  end
267
252
 
268
253
  def mock_sts
269
- allow(::Mn2sts).to receive(:convert) do |url, output, c, d|
254
+ allow(::Mn2sts).to receive(:convert) do |url, output,|
270
255
  FileUtils.cp(url.gsub(/"/, ""), output.gsub(/"/, ""))
271
256
  end
272
257
  end
@@ -274,7 +259,7 @@ end
274
259
  private
275
260
 
276
261
  def get_xml(search, code, opts)
277
- c = code.gsub(%r{[\/\s:-]}, "_").sub(%r{_+$}, "").downcase
262
+ c = code.gsub(%r{[/\s:-]}, "_").sub(%r{_+$}, "").downcase
278
263
  o = opts.keys.join "_"
279
264
  file = "spec/examples/#{[c, o].join '_'}.xml"
280
265
  if File.exist? file
@@ -289,11 +274,9 @@ def get_xml(search, code, opts)
289
274
  end
290
275
 
291
276
  def mock_open_uri(code)
292
- #expect(OpenURI).to receive(:open_uri).and_wrap_original do |m, *args|
293
277
  expect(Iev).to receive(:get).with(code, "en") do |m, *args|
294
278
  file = "spec/examples/#{code.tr('-', '_')}.html"
295
279
  File.write file, m.call(*args).read unless File.exist? file
296
280
  File.read file
297
281
  end.at_least :once
298
282
  end
299
-