isodoc 1.7.1 → 1.7.4

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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/isodoc.gemspec +2 -1
  3. data/lib/isodoc/convert.rb +1 -0
  4. data/lib/isodoc/css.rb +3 -3
  5. data/lib/isodoc/function/blocks.rb +180 -168
  6. data/lib/isodoc/function/blocks_example_note.rb +85 -79
  7. data/lib/isodoc/function/cleanup.rb +181 -175
  8. data/lib/isodoc/function/inline.rb +110 -108
  9. data/lib/isodoc/function/inline_simple.rb +55 -55
  10. data/lib/isodoc/function/lists.rb +75 -71
  11. data/lib/isodoc/function/references.rb +165 -160
  12. data/lib/isodoc/function/reqt.rb +91 -85
  13. data/lib/isodoc/function/section.rb +140 -190
  14. data/lib/isodoc/function/section_titles.rb +82 -0
  15. data/lib/isodoc/function/table.rb +90 -87
  16. data/lib/isodoc/function/terms.rb +58 -56
  17. data/lib/isodoc/function/to_word_html.rb +208 -204
  18. data/lib/isodoc/html_convert.rb +0 -4
  19. data/lib/isodoc/html_function/mathvariant_to_plain.rb +5 -3
  20. data/lib/isodoc/presentation_function/inline.rb +1 -1
  21. data/lib/isodoc/presentation_function/math.rb +9 -0
  22. data/lib/isodoc/presentation_function/section.rb +12 -1
  23. data/lib/isodoc/presentation_xml_convert.rb +2 -0
  24. data/lib/isodoc/version.rb +1 -1
  25. data/lib/isodoc/word_function/body.rb +5 -5
  26. data/lib/isodoc/xslfo_convert.rb +2 -2
  27. data/lib/isodoc.rb +2 -1
  28. data/lib/metanorma/output/base.rb +13 -0
  29. data/lib/metanorma/output/utils.rb +17 -0
  30. data/lib/metanorma/output/xslfo.rb +21 -0
  31. data/lib/metanorma/output.rb +7 -0
  32. data/spec/assets/outputtest/a.xml +66 -0
  33. data/spec/assets/outputtest/iso.international-standard.xsl +3011 -0
  34. data/spec/isodoc/blocks_spec.rb +441 -243
  35. data/spec/isodoc/inline_spec.rb +197 -114
  36. data/spec/isodoc/postproc_spec.rb +2 -2
  37. data/spec/isodoc/presentation_xml_spec.rb +84 -0
  38. data/spec/isodoc/section_spec.rb +639 -0
  39. metadata +23 -18
  40. data/lib/isodoc/html_function/sectionsplit.rb +0 -244
  41. data/spec/isodoc/sectionsplit_spec.rb +0 -190
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.1
4
+ version: 1.7.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: 2021-07-19 00:00:00.000000000 Z
11
+ date: 2021-08-30 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
@@ -164,6 +150,20 @@ dependencies:
164
150
  - - ">="
165
151
  - !ruby/object:Gem::Version
166
152
  version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: mathml2asciimath
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: byebug
169
169
  requirement: !ruby/object:Gem::Requirement
@@ -395,6 +395,7 @@ files:
395
395
  - lib/isodoc/function/references.rb
396
396
  - lib/isodoc/function/reqt.rb
397
397
  - lib/isodoc/function/section.rb
398
+ - lib/isodoc/function/section_titles.rb
398
399
  - lib/isodoc/function/table.rb
399
400
  - lib/isodoc/function/terms.rb
400
401
  - lib/isodoc/function/to_word_html.rb
@@ -410,7 +411,6 @@ files:
410
411
  - lib/isodoc/html_function/mathvariant_to_plain.rb
411
412
  - lib/isodoc/html_function/postprocess.rb
412
413
  - lib/isodoc/html_function/postprocess_footnotes.rb
413
- - lib/isodoc/html_function/sectionsplit.rb
414
414
  - lib/isodoc/i18n.rb
415
415
  - lib/isodoc/metadata.rb
416
416
  - lib/isodoc/metadata_contributor.rb
@@ -440,6 +440,10 @@ files:
440
440
  - lib/isodoc/xref/xref_gen_seq.rb
441
441
  - lib/isodoc/xref/xref_sect_gen.rb
442
442
  - lib/isodoc/xslfo_convert.rb
443
+ - lib/metanorma/output.rb
444
+ - lib/metanorma/output/base.rb
445
+ - lib/metanorma/output/utils.rb
446
+ - lib/metanorma/output/xslfo.rb
443
447
  - spec/assets/header.html
444
448
  - spec/assets/html.scss
445
449
  - spec/assets/html_override.css
@@ -450,6 +454,8 @@ files:
450
454
  - spec/assets/odf.emf
451
455
  - spec/assets/odf.svg
452
456
  - spec/assets/odf1.svg
457
+ - spec/assets/outputtest/a.xml
458
+ - spec/assets/outputtest/iso.international-standard.xsl
453
459
  - spec/assets/rice_image1
454
460
  - spec/assets/rice_image1.png
455
461
  - spec/assets/scripts.html
@@ -471,7 +477,6 @@ files:
471
477
  - spec/isodoc/presentation_xml_spec.rb
472
478
  - spec/isodoc/ref_spec.rb
473
479
  - spec/isodoc/section_spec.rb
474
- - spec/isodoc/sectionsplit_spec.rb
475
480
  - spec/isodoc/table_spec.rb
476
481
  - spec/isodoc/terms_spec.rb
477
482
  - 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