isodoc 1.7.0 → 1.7.3.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -245,7 +245,7 @@ RSpec.describe IsoDoc do
245
245
  html = File.read("test.html")
246
246
  expect(html).to match(/another empty stylesheet/)
247
247
  expect(html).to match(/p \{[^}]*?font-family: Arial/m)
248
- expect(html).to match(/code \{[^}]*?font-family: Courier/m)
248
+ expect(html).to match(/code \{[^}]*?font-family: Courier New/m)
249
249
  expect(html).to match(/h1 \{[^}]*?font-family: Arial/m)
250
250
  expect(html).to match(/p \{[^}]*?font-size: 1em;/m)
251
251
  expect(html).to match(/code \{[^}]*?font-size: 0.8em/m)
@@ -329,7 +329,7 @@ RSpec.describe IsoDoc do
329
329
  word = File.read("test.doc")
330
330
  expect(word).to match(/another empty stylesheet/)
331
331
  expect(word).to match(/p \{[^}]*?font-family: Arial/m)
332
- expect(word).to match(/code \{[^}]*?font-family: Courier/m)
332
+ expect(word).to match(/code \{[^}]*?font-family: Courier New/m)
333
333
  expect(word).to match(/h1 \{[^}]*?font-family: Arial/m)
334
334
  expect(word).to match(/p \{[^}]*?font-size: 12pt/m)
335
335
  expect(word).to match(/code \{[^}]*?font-size: 11pt/m)
@@ -2271,7 +2271,6 @@ RSpec.describe IsoDoc do
2271
2271
  output = <<~OUTPUT
2272
2272
  <body lang='en' xml:lang='en'>
2273
2273
  <main class='main-section'>
2274
- <button onclick='topFunction()' id='myBtn' title='Go to top'>Top</button>
2275
2274
  <br/>
2276
2275
  <div>
2277
2276
  <h1 class='ForewordTitle'>Foreword</h1>
@@ -189,7 +189,7 @@ RSpec.describe IsoDoc do
189
189
  <a href="#ISO7301">ISO 7301:2011, Clause 3.1</a>
190
190
  [MODIFICATION] The term "cargo rice" is shown as deprecated, and Note 1 to entry is not included here
191
191
  [/TERMREF]</p>
192
- <p>[TERMREF] Termbase IEV, term ID xyz [/TERMREF]</p>
192
+ <p>[TERMREF] t1 [/TERMREF]</p>
193
193
  <p>[TERMREF] Termbase IEV, term ID xyz [MODIFICATION]with adjustments [/TERMREF]</p>
194
194
  <p class="TermNum" id="paddy">1.2.</p><p class="Terms" style="text-align:left;">paddy</p><p class="AltTerms" style="text-align:left;">paddy rice</p>
195
195
  <p class="AltTerms" style="text-align:left;">rough rice</p>
@@ -233,7 +233,7 @@ RSpec.describe IsoDoc do
233
233
  <a href="#ISO7301">ISO 7301:2011, Clause 3.1</a>
234
234
  [MODIFICATION] The term "cargo rice" is shown as deprecated, and Note 1 to entry is not included here
235
235
  [/TERMREF]</p>
236
- <p>[TERMREF] Termbase IEV, term ID xyz [/TERMREF]</p>
236
+ <p>[TERMREF] t1 [/TERMREF]</p>
237
237
  <p>[TERMREF] Termbase IEV, term ID xyz [MODIFICATION]with adjustments [/TERMREF]</p>
238
238
  <p class="TermNum" id="paddy">1.2.</p><p class="Terms" style="text-align:left;">paddy</p><p class="AltTerms" style="text-align:left;">paddy rice</p>
239
239
  <p class="AltTerms" style="text-align:left;">rough rice</p>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isodoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.7.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-05 00:00:00.000000000 Z
11
+ date: 2021-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciimath
@@ -66,20 +66,6 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '4'
69
- - !ruby/object:Gem::Dependency
70
- name: metanorma
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: 1.2.0
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: 1.2.0
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: nokogiri
85
71
  requirement: !ruby/object:Gem::Requirement
@@ -410,7 +396,6 @@ files:
410
396
  - lib/isodoc/html_function/mathvariant_to_plain.rb
411
397
  - lib/isodoc/html_function/postprocess.rb
412
398
  - lib/isodoc/html_function/postprocess_footnotes.rb
413
- - lib/isodoc/html_function/sectionsplit.rb
414
399
  - lib/isodoc/i18n.rb
415
400
  - lib/isodoc/metadata.rb
416
401
  - lib/isodoc/metadata_contributor.rb
@@ -440,6 +425,10 @@ files:
440
425
  - lib/isodoc/xref/xref_gen_seq.rb
441
426
  - lib/isodoc/xref/xref_sect_gen.rb
442
427
  - lib/isodoc/xslfo_convert.rb
428
+ - lib/metanorma/output.rb
429
+ - lib/metanorma/output/base.rb
430
+ - lib/metanorma/output/utils.rb
431
+ - lib/metanorma/output/xslfo.rb
443
432
  - spec/assets/header.html
444
433
  - spec/assets/html.scss
445
434
  - spec/assets/html_override.css
@@ -450,6 +439,8 @@ files:
450
439
  - spec/assets/odf.emf
451
440
  - spec/assets/odf.svg
452
441
  - spec/assets/odf1.svg
442
+ - spec/assets/outputtest/a.xml
443
+ - spec/assets/outputtest/iso.international-standard.xsl
453
444
  - spec/assets/rice_image1
454
445
  - spec/assets/rice_image1.png
455
446
  - spec/assets/scripts.html
@@ -471,7 +462,6 @@ files:
471
462
  - spec/isodoc/presentation_xml_spec.rb
472
463
  - spec/isodoc/ref_spec.rb
473
464
  - spec/isodoc/section_spec.rb
474
- - spec/isodoc/sectionsplit_spec.rb
475
465
  - spec/isodoc/table_spec.rb
476
466
  - spec/isodoc/terms_spec.rb
477
467
  - spec/isodoc/xref_spec.rb
@@ -1,244 +0,0 @@
1
- require "metanorma"
2
- require "yaml"
3
-
4
- module IsoDoc::HtmlFunction
5
- module Html
6
- # assume we pass in Presentation XML, but we want to recover Semantic XML
7
- def sectionsplit_convert(input_filename, file, debug, output_filename = nil)
8
- input_filename += ".xml" unless input_filename.match?(/\.xml$/)
9
- File.exist?(input_filename) or
10
- File.open(input_filename, "w:UTF-8") { |f| f.write(file) }
11
- presxml = File.read(input_filename, encoding: "utf-8")
12
- @openmathdelim, @closemathdelim = extract_delims(presxml)
13
- xml, filename, dir = convert_init(presxml, input_filename, debug)
14
- build_collection(xml, presxml, output_filename || filename, dir)
15
- end
16
-
17
- def build_collection(xml, presxml, filename, dir)
18
- base = File.basename(filename)
19
- collection_setup(base, dir)
20
- files = sectionsplit(xml, base, dir)
21
- collection_manifest(base, files, xml, presxml, dir).render(
22
- format: %i(html), output_folder: "#{filename}_collection",
23
- coverpage: File.join(dir, "cover.html")
24
- )
25
- end
26
-
27
- def collection_manifest(filename, files, origxml, _presxml, dir)
28
- File.open(File.join(dir, "#{filename}.html.yaml"), "w:UTF-8") do |f|
29
- f.write(collectionyaml(files, origxml))
30
- end
31
- Metanorma::Collection.parse File.join(dir, "#{filename}.html.yaml")
32
- end
33
-
34
- def collection_setup(filename, dir)
35
- FileUtils.mkdir_p "#{filename}_collection"
36
- FileUtils.mkdir_p dir
37
- File.open(File.join(dir, "cover.html"), "w:UTF-8") do |f|
38
- f.write(coll_cover)
39
- end
40
- end
41
-
42
- def coll_cover
43
- <<~COVER
44
- <html>
45
- <head/>
46
- <body>
47
- <h1>{{ doctitle }}</h1>
48
- <h2>{{ docnumber }}</h2>
49
- <nav>{{ labels["navigation"] }}</nav>
50
- </body>
51
- </html>
52
- COVER
53
- end
54
-
55
- def sectionsplit(xml, filename, dir)
56
- xref_preprocess(xml)
57
- out = emptydoc(xml)
58
- [["//preface/*", "preface"], ["//sections/*", "sections"],
59
- ["//annex", nil],
60
- ["//bibliography/*[not(@hidden = 'true')]", "bibliography"],
61
- ["//indexsect", nil]].each_with_object([]) do |n, ret|
62
- xml.xpath(ns(n[0])).each do |s|
63
- ret << sectionfile(out, dir, "#{filename}.#{ret.size}", s, n[1])
64
- end
65
- end
66
- end
67
-
68
- def emptydoc(xml)
69
- out = xml.dup
70
- out.xpath(
71
- ns("//preface | //sections | //annex | //bibliography/clause | "\
72
- "//bibliography/references[not(@hidden = 'true')] | //indexsect"),
73
- ).each(&:remove)
74
- out
75
- end
76
-
77
- def sectionfile(xml, dir, file, chunk, parentnode)
78
- fname = create_sectionfile(xml.dup, dir, file, chunk, parentnode)
79
- { order: chunk["displayorder"].to_i, url: fname,
80
- title: titlerender(chunk) }
81
- end
82
-
83
- def create_sectionfile(out, dir, file, chunk, parentnode)
84
- ins = out.at(ns("//misccontainer")) || out.at(ns("//bibdata"))
85
- if parentnode
86
- ins.next = "<#{parentnode}/>"
87
- ins.next.add_child(chunk.dup)
88
- else
89
- ins.next = chunk.dup
90
- end
91
- outname = "#{file}.xml"
92
- File.open(File.join(dir, outname), "w:UTF-8") { |f| f.write(out) }
93
- outname
94
- end
95
-
96
- def xref_preprocess(xml)
97
- svg_preprocess(xml)
98
- key = (0...8).map { rand(65..90).chr }.join # random string
99
- refs = eref_to_internal_eref(xml, key)
100
- refs += xref_to_internal_eref(xml, key)
101
- xml.root["type"] = key # to force recognition of internal refs
102
- ins = new_hidden_ref(xml)
103
- copy_repo_items_biblio(ins, xml)
104
- insert_indirect_biblio(ins, refs, key)
105
- end
106
-
107
- def svg_preprocess(xml)
108
- xml.xpath("//m:svg", "m" => "http://www.w3.org/2000/svg").each do |s|
109
- m = svgmap_wrap(s)
110
- s.xpath(".//m:a", "m" => "http://www.w3.org/2000/svg").each do |a|
111
- next unless /^#/.match? a["href"]
112
-
113
- a["href"] = a["href"].sub(/^#/, "")
114
- m << "<target href='#{a['href']}'>"\
115
- "<xref target='#{a['href']}'/></target>"
116
- end
117
- end
118
- end
119
-
120
- def svgmap_wrap(svg)
121
- ret = svg.at("./ancestor::xmlns:svgmap") and return ret
122
- ret = svg.at("./ancestor::xmlns:figure")
123
- ret.wrap("<svgmap/>")
124
- svg.at("./ancestor::xmlns:svgmap")
125
- end
126
-
127
- def make_anchor(anchor)
128
- "<localityStack><locality type='anchor'><referenceFrom>"\
129
- "#{anchor}</referenceFrom></locality></localityStack>"
130
- end
131
-
132
- def xref_to_internal_eref(xml, key)
133
- xml.xpath(ns("//xref")).each_with_object({}) do |x, m|
134
- x["bibitemid"] = "#{key}_#{x['target']}"
135
- x << make_anchor(x["target"])
136
- m[x["bibitemid"]] = true
137
- x.delete("target")
138
- x["type"] = key
139
- x.name = "eref"
140
- end.keys
141
- end
142
-
143
- def eref_to_internal_eref(xml, key)
144
- eref_to_internal_eref_select(xml).each_with_object([]) do |x, m|
145
- url = xml.at(ns("//bibitem[@id = '#{x}']/url[@type = 'citation']"))
146
- xml.xpath(("//*[@bibitemid = '#{x}']")).each do |e|
147
- id = eref_to_internal_eref1(e, key, url)
148
- id and m << id
149
- end
150
- end
151
- end
152
-
153
- def eref_to_internal_eref1(elem, key, url)
154
- if url
155
- elem.name = "link"
156
- elem["target"] = url
157
- nil
158
- else
159
- elem["bibitemid"] = "#{key}_#{elem['bibitemid']}"
160
- elem << make_anchor(elem["bibitemid"])
161
- elem["type"] = key
162
- elem["bibitemid"]
163
- end
164
- end
165
-
166
- def eref_to_internal_eref_select(xml)
167
- refs = xml.xpath(("//*/@bibitemid")).map { |x| x.text } # rubocop:disable Style/SymbolProc
168
- refs.uniq.reject do |x|
169
- xml.at(ns("//bibitem[@id = '#{x}'][@type = 'internal']")) ||
170
- xml.at(ns("//bibitem[@id = '#{x}']"\
171
- "[docidentifier/@type = 'repository']"))
172
- end
173
- end
174
-
175
- # from standoc
176
- def new_hidden_ref(xmldoc)
177
- ins = xmldoc.at("bibliography") or
178
- xmldoc.root << "<bibliography/>" and ins = xmldoc.at("bibliography")
179
- ins.add_child("<references hidden='true' normative='false'/>").first
180
- end
181
-
182
- def copy_repo_items_biblio(ins, xml)
183
- xml.xpath(ns("//references/bibitem[docidentifier/@type = 'repository']"))
184
- .each do |b|
185
- ins << b.dup
186
- end
187
- end
188
-
189
- def insert_indirect_biblio(ins, refs, prefix)
190
- refs.each do |x|
191
- ins << <<~BIBENTRY
192
- <bibitem id="#{x}" type="internal">
193
- <docidentifier type="repository">#{x.sub(/^#{prefix}_/, "#{prefix}/")}</docidentifier>
194
- </bibitem>
195
- BIBENTRY
196
- end
197
- end
198
-
199
- def recursive_string_keys(hash)
200
- case hash
201
- when Hash then Hash[
202
- hash.map { |k, v| [k.to_s, recursive_string_keys(v)] }
203
- ]
204
- when Enumerable then hash.map { |v| recursive_string_keys(v) }
205
- else
206
- hash
207
- end
208
- end
209
-
210
- def titlerender(section)
211
- title = section.at(ns("./title")) or return "[Untitled]"
212
- t = title.dup
213
- t.xpath(ns(".//tab | .//br")).each { |x| x.replace(" ") }
214
- t.xpath(ns(".//strong")).each { |x| x.replace(x.children) }
215
- t.children.to_xml
216
- end
217
-
218
- def collectionyaml(files, xml)
219
- ret = {
220
- directives: ["presentation-xml", "bare-after-first"],
221
- bibdata: {
222
- title: {
223
- type: "title-main",
224
- language: @lang,
225
- content: xml.at(ns("//bibdata/title")).text,
226
- },
227
- type: "collection",
228
- docid: {
229
- type: xml.at(ns("//bibdata/docidentifier/@type")).text,
230
- id: xml.at(ns("//bibdata/docidentifier")).text,
231
- },
232
- },
233
- manifest: {
234
- level: "collection",
235
- title: "Collection",
236
- docref: files.sort_by { |f| f[:order] }.each.map do |f|
237
- { fileref: f[:url], identifier: f[:title] }
238
- end,
239
- },
240
- }
241
- recursive_string_keys(ret).to_yaml
242
- end
243
- end
244
- end
@@ -1,190 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe IsoDoc do
4
- it "processes section split HTML" do
5
- FileUtils.rm_f "test.xml"
6
- FileUtils.rm_f "test.html.yaml"
7
- FileUtils.rm_rf "test_collection"
8
- FileUtils.rm_rf "test_files"
9
- input = <<~INPUT
10
- <iso-standard xmlns="http://riboseinc.com/isoxml">
11
- <bibdata>
12
- <title>ISO Title</title>
13
- <docidentifier type="ISO">ISO 1</docidentifier>
14
- </bibdata>
15
- <preface>
16
- <abstract id="A" displayorder='1'><title>abstract</title></abstract>
17
- <introduction id="B" displayorder='2'><title>introduction</title></introduction>
18
- </preface>
19
- <sections>
20
- <clause id="M" inline-header="false" obligation="normative" displayorder='4'>
21
- <title>Clause 4</title>
22
- <clause id="N" inline-header="false" obligation="normative">
23
- <title>Introduction</title>
24
- <p><xref target="A">HE</xref></p>
25
- <p><eref bibitemid="R1">SHE</xref></p>
26
- <svgmap>
27
- <figure>
28
- <svg xmlns="http://www.w3.org/2000/svg">
29
- <a href="#A">A</a>
30
- <a href="#B">B</a>
31
- </svg>
32
- <target href="B"><eref bibitemid="R1"/></target>
33
- </figure>
34
- </svgmap>
35
- <figure>
36
- <svg xmlns="http://www.w3.org/2000/svg">
37
- <a href="#P">P</a>
38
- </svg>
39
- </figure>
40
- </clause>
41
- <clause id="O" inline-header="true" obligation="normative">
42
- <title>Clause 4.2</title>
43
- </clause></clause>
44
- <admonition id="L" type="caution"><p>admonition</p></admonition>
45
- </sections>
46
- <annex id="P" inline-header="false" obligation="normative" displayorder='5'>
47
- <title><strong>Annex</strong><br/>(informative)</title>
48
- <clause id="Q" inline-header="false" obligation="normative">
49
- <title>Annex A.1</title>
50
- <clause id="Q1" inline-header="false" obligation="normative">
51
- <title>Annex A.1a</title>
52
- </clause>
53
- <references id="Q2" normative="false">
54
- <title>Annex Bibliography</title>
55
- </references>
56
- </clause>
57
- </annex>
58
- <annex id="P1" inline-header="false" obligation="normative" displayorder='6'>
59
- </annex>
60
- <bibliography><references id="R" obligation="informative" normative="true" displayorder='3'>
61
- <title>Normative References</title>
62
- <bibitem id="R1"><docidentifier>R1</docidentifier><title>Hello</title></bibitem>
63
- </references><clause id="S" obligation="informative" displayorder='7'>
64
- <title>Bibliography</title>
65
- <references id="T" obligation="informative" normative="false">
66
- <title>Bibliography Subsection</title>
67
- </references>
68
- </clause>
69
- </bibliography>
70
- </iso-standard>
71
- INPUT
72
- mock_render
73
- IsoDoc::HtmlConvert.new({ sectionsplit: "true" })
74
- .convert("test", input, true)
75
- expect(File.exist?("test_collection/index.html")).to be true
76
- expect(File.exist?("test_collection/test.0.html")).to be true
77
- expect(File.exist?("test_collection/test.1.html")).to be true
78
- expect(File.exist?("test_collection/test.2.html")).to be true
79
- expect(File.exist?("test_collection/test.3.html")).to be false
80
- expect(File.exist?("test_collection/test.4.html")).to be true
81
- expect(File.exist?("test_collection/test.5.html")).to be true
82
- expect(File.exist?("test_collection/test.6.html")).to be true
83
- expect(File.exist?("test_collection/test.7.html")).to be true
84
- expect(File.exist?("test_collection/test.8.html")).to be false
85
- expect(File.exist?("test_files/cover.html")).to be true
86
- expect(File.exist?("test_files/test.0.xml")).to be true
87
- expect(File.exist?("test_files/test.1.xml")).to be true
88
- expect(File.exist?("test_files/test.2.xml")).to be true
89
- expect(File.exist?("test_files/test.3.xml")).to be true
90
- expect(File.exist?("test_files/test.4.xml")).to be true
91
- expect(File.exist?("test_files/test.5.xml")).to be true
92
- expect(File.exist?("test_files/test.6.xml")).to be true
93
- expect(File.exist?("test_files/test.7.xml")).to be true
94
- expect(File.exist?("test_files/test.8.xml")).to be false
95
- expect(File.exist?("test_files/test.html.yaml")).to be true
96
- m = /type="([^"]+)"/.match(File.read("test_files/test.0.xml"))
97
- file2 = Nokogiri::XML(File.read("test_files/test.2.xml"))
98
- expect(xmlpp(file2
99
- .at("//xmlns:eref[@bibitemid = '#{m[1]}_A']").to_xml))
100
- .to be_equivalent_to xmlpp(<<~OUTPUT)
101
- <eref bibitemid="#{m[1]}_A" type="#{m[1]}">HE<localityStack><locality type="anchor"><referenceFrom>A</referenceFrom></locality></localityStack></eref>
102
- OUTPUT
103
- expect(xmlpp(file2
104
- .at("//xmlns:eref[@bibitemid = '#{m[1]}_R1']").to_xml))
105
- .to be_equivalent_to xmlpp(<<~OUTPUT)
106
- <eref bibitemid="#{m[1]}_R1" type="#{m[1]}">SHE<localityStack><locality type="anchor"><referenceFrom>#{m[1]}_R1</referenceFrom></locality></localityStack></eref>
107
- OUTPUT
108
- expect(xmlpp(file2
109
- .at("//xmlns:bibitem[@id = '#{m[1]}_R1']").to_xml))
110
- .to be_equivalent_to xmlpp(<<~OUTPUT)
111
- <bibitem id="#{m[1]}_R1" type="internal">
112
- <docidentifier type="repository">#{m[1]}/R1</docidentifier>
113
- </bibitem>
114
- OUTPUT
115
- expect(xmlpp(file2
116
- .at("//xmlns:bibitem[@id = '#{m[1]}_A']").to_xml))
117
- .to be_equivalent_to xmlpp(<<~OUTPUT)
118
- <bibitem id="#{m[1]}_A" type="internal">
119
- <docidentifier type="repository">#{m[1]}/A</docidentifier>
120
- </bibitem>
121
- OUTPUT
122
- expect(xmlpp(file2
123
- .at("//xmlns:svgmap[1]").to_xml))
124
- .to be_equivalent_to xmlpp(<<~OUTPUT)
125
- <svgmap>
126
- <figure>
127
- <svg xmlns="http://www.w3.org/2000/svg">
128
- <a href="A">A</a>
129
- <a href="B">B</a>
130
- </svg>
131
- <target href="B"><eref bibitemid="#{m[1]}_R1" type="#{m[1]}"><localityStack><locality type="anchor"><referenceFrom>#{m[1]}_R1</referenceFrom></locality></localityStack></eref></target>
132
- </figure>
133
- <target href="A"><eref bibitemid="#{m[1]}_A" type="#{m[1]}"><localityStack><locality type="anchor"><referenceFrom>A</referenceFrom></locality></localityStack></eref></target><target href="B"><eref bibitemid="#{m[1]}_B" type="#{m[1]}"><localityStack><locality type="anchor"><referenceFrom>B</referenceFrom></locality></localityStack></eref></target></svgmap>
134
- OUTPUT
135
- expect(xmlpp(file2
136
- .at("//xmlns:svgmap[2]").to_xml))
137
- .to be_equivalent_to xmlpp(<<~OUTPUT)
138
- <svgmap><figure>
139
- <svg xmlns="http://www.w3.org/2000/svg">
140
- <a href="P">P</a>
141
- </svg>
142
- </figure><target href="P"><eref bibitemid="#{m[1]}_P" type="#{m[1]}"><localityStack><locality type="anchor"><referenceFrom>P</referenceFrom></locality></localityStack></eref></target></svgmap>
143
- OUTPUT
144
- expect(File.read("test_files/test.html.yaml")).to be_equivalent_to <<~OUTPUT
145
- ---
146
- directives:
147
- - presentation-xml
148
- - bare-after-first
149
- bibdata:
150
- title:
151
- type: title-main
152
- language: en
153
- content: ISO Title
154
- type: collection
155
- docid:
156
- type: ISO
157
- id: ISO 1
158
- manifest:
159
- level: collection
160
- title: Collection
161
- docref:
162
- - fileref: test.3.xml
163
- identifier: "[Untitled]"
164
- - fileref: test.0.xml
165
- identifier: abstract
166
- - fileref: test.1.xml
167
- identifier: introduction
168
- - fileref: test.6.xml
169
- identifier: Normative References
170
- - fileref: test.2.xml
171
- identifier: Clause 4
172
- - fileref: test.4.xml
173
- identifier: Annex (informative)
174
- - fileref: test.5.xml
175
- identifier: "[Untitled]"
176
- - fileref: test.7.xml
177
- identifier: Bibliography
178
- OUTPUT
179
- end
180
-
181
- private
182
-
183
- def mock_render
184
- original_add = ::Metanorma::CollectionRenderer.method(:render)
185
- allow(::Metanorma::CollectionRenderer)
186
- .to receive(:render) do |col, opts|
187
- original_add.call(col, opts.merge(compile: { no_install_fonts: true }))
188
- end
189
- end
190
- end