isodoc 2.1.1 → 2.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/isodoc.gemspec +4 -1
  3. data/lib/isodoc/base_style/blocks.scss +7 -0
  4. data/lib/isodoc/function/inline.rb +2 -0
  5. data/lib/isodoc/function/lists.rb +24 -9
  6. data/lib/isodoc/function/to_word_html.rb +1 -0
  7. data/lib/isodoc/function/utils.rb +17 -7
  8. data/lib/isodoc/gem_tasks.rb +19 -10
  9. data/lib/isodoc/i18n.rb +19 -0
  10. data/lib/isodoc/metadata.rb +2 -2
  11. data/lib/isodoc/presentation_function/inline.rb +11 -4
  12. data/lib/isodoc/presentation_function/xrefs.rb +22 -6
  13. data/lib/isodoc/presentation_xml_convert.rb +1 -0
  14. data/lib/isodoc/version.rb +1 -1
  15. data/lib/isodoc/word_function/body.rb +6 -3
  16. data/lib/isodoc/xref/xref_gen.rb +4 -4
  17. metadata +3 -50
  18. data/.github/workflows/rake.yml +0 -15
  19. data/.github/workflows/release.yml +0 -24
  20. data/.hound.yml +0 -5
  21. data/.oss-guides.rubocop.yml +0 -1077
  22. data/.rubocop.yml +0 -10
  23. data/Rakefile +0 -8
  24. data/bin/rspec +0 -17
  25. data/spec/assets/header.html +0 -7
  26. data/spec/assets/html.scss +0 -20
  27. data/spec/assets/html_override.css +0 -1
  28. data/spec/assets/htmlcover.html +0 -4
  29. data/spec/assets/htmlintro.html +0 -5
  30. data/spec/assets/i18n.yaml +0 -41
  31. data/spec/assets/iso.xml +0 -8
  32. data/spec/assets/odf.emf +0 -0
  33. data/spec/assets/odf.svg +0 -1
  34. data/spec/assets/odf1.svg +0 -4
  35. data/spec/assets/outputtest/a.xml +0 -66
  36. data/spec/assets/outputtest/iso.international-standard.xsl +0 -3011
  37. data/spec/assets/rice_image1 +0 -0
  38. data/spec/assets/rice_image1.png +0 -0
  39. data/spec/assets/scripts.html +0 -3
  40. data/spec/assets/scripts_override.html +0 -3
  41. data/spec/assets/std.css +0 -2
  42. data/spec/assets/word.css +0 -2
  43. data/spec/assets/word_override.css +0 -1
  44. data/spec/assets/wordcover.html +0 -3
  45. data/spec/assets/wordintro.html +0 -4
  46. data/spec/isodoc/blocks_spec.rb +0 -2934
  47. data/spec/isodoc/cleanup_spec.rb +0 -1056
  48. data/spec/isodoc/footnotes_spec.rb +0 -264
  49. data/spec/isodoc/form_spec.rb +0 -160
  50. data/spec/isodoc/i18n_spec.rb +0 -1201
  51. data/spec/isodoc/inline_spec.rb +0 -2301
  52. data/spec/isodoc/lists_spec.rb +0 -469
  53. data/spec/isodoc/metadata_spec.rb +0 -401
  54. data/spec/isodoc/postproc_spec.rb +0 -2938
  55. data/spec/isodoc/presentation_xml_spec.rb +0 -1476
  56. data/spec/isodoc/ref_spec.rb +0 -955
  57. data/spec/isodoc/section_spec.rb +0 -2123
  58. data/spec/isodoc/table_spec.rb +0 -588
  59. data/spec/isodoc/terms_spec.rb +0 -712
  60. data/spec/isodoc/utils_spec.rb +0 -57
  61. data/spec/isodoc/xref_numbering_spec.rb +0 -378
  62. data/spec/isodoc/xref_spec.rb +0 -1837
  63. data/spec/isodoc/xslfo_convert_spec.rb +0 -103
  64. data/spec/spec_helper.rb +0 -88
@@ -1,2938 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "spec_helper"
4
- require "fileutils"
5
-
6
- options = { wordstylesheet: "spec/assets/word.css",
7
- htmlstylesheet: "spec/assets/html.scss" }
8
-
9
- RSpec.describe IsoDoc do
10
- it "generates file based on string input" do
11
- FileUtils.rm_f "test.doc"
12
- FileUtils.rm_f "test.html"
13
- IsoDoc::HtmlConvert.new(
14
- { wordstylesheet: "spec/assets/word.css",
15
- htmlstylesheet: "spec/assets/html.scss",
16
- filename: "test" },
17
- ).convert("test", <<~"INPUT", false)
18
- <iso-standard xmlns="http://riboseinc.com/isoxml">
19
- <bibdata>
20
- <title language="en">test</title>
21
- </bibdata>
22
- <preface><foreword>
23
- <note>
24
- <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
25
- </note>
26
- </foreword></preface>
27
- </iso-standard>
28
- INPUT
29
- expect(File.exist?("test.html")).to be true
30
- html = File.read("test.html")
31
- expect(html).to match(%r{<title>test</title>})
32
- expect(html).to match(/another empty stylesheet/)
33
- expect(html).to match(%r{cdnjs\.cloudflare\.com/ajax/libs/mathjax/})
34
- expect(html).to match(/delimiters: \[\['\(#\(', '\)#\)'\]\]/)
35
- end
36
-
37
- it "generates file in a remote directory" do
38
- FileUtils.rm_f "spec/assets/test.doc"
39
- FileUtils.rm_f "spec/assets/test.html"
40
- IsoDoc::HtmlConvert.new(
41
- { wordstylesheet: "word.css",
42
- htmlstylesheet: "html.scss",
43
- filename: "test" },
44
- ).convert("spec/assets/test", <<~"INPUT", false)
45
- <iso-standard xmlns="http://riboseinc.com/isoxml">
46
- <bibdata>
47
- <title language="en">test</title>
48
- </bibdata>
49
- <preface><foreword>
50
- <note>
51
- <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
52
- </note>
53
- </foreword></preface>
54
- </iso-standard>
55
- INPUT
56
- expect(File.exist?("spec/assets/test.html")).to be true
57
- html = File.read("spec/assets/test.html")
58
- expect(html).to match(%r{<title>test</title>})
59
- expect(html).to match(/another empty stylesheet/)
60
- end
61
-
62
- it "ignores Liquid markup in the document body" do
63
- FileUtils.rm_f "test.doc"
64
- FileUtils.rm_f "test.html"
65
- input = <<~INPUT
66
- <iso-standard xmlns="http://riboseinc.com/isoxml">
67
- <bibdata>
68
- <title language="en">test</title>
69
- </bibdata>
70
- <preface><foreword>
71
- <note>
72
- <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">{% elif %}These results are based on a study carried out on three different types of kernel.</p>
73
- </note>
74
- </foreword></preface>
75
- </iso-standard>
76
- INPUT
77
- IsoDoc::HtmlConvert.new(wordstylesheet: "spec/assets/word.css")
78
- .convert("test", input, false)
79
- IsoDoc::WordConvert.new({ wordstylesheet: "spec/assets/word.css" })
80
- .convert("test", input, false)
81
- expect(File.exist?("test.html")).to be true
82
- html = File.read("test.html")
83
- expect(html).to match(%r/\{% elif %}/)
84
-
85
- expect(File.exist?("test.doc")).to be true
86
- html = File.read("test.doc")
87
- expect(html).to match(%r/\{% elif %}/)
88
- end
89
-
90
- it "generates HTML output docs with null configuration" do
91
- FileUtils.rm_f "test.doc"
92
- FileUtils.rm_f "test.html"
93
- IsoDoc::HtmlConvert.new({ wordstylesheet: "spec/assets/word.css" })
94
- .convert("test", <<~"INPUT", false)
95
- <iso-standard xmlns="http://riboseinc.com/isoxml">
96
- <preface><foreword>
97
- <note>
98
- <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
99
- </note>
100
- </foreword></preface>
101
- </iso-standard>
102
- INPUT
103
- expect(File.exist?("test.html")).to be true
104
- html = File.read("test.html")
105
- expect(html).not_to match(%r{<title>test</title>})
106
- expect(html).not_to match(/another empty stylesheet/)
107
- expect(html).to match(%r{cdnjs\.cloudflare\.com/ajax/libs/mathjax/})
108
- expect(html).to match(/delimiters: \[\['\(#\(', '\)#\)'\]\]/)
109
- expect(html).not_to match(/html-override/)
110
- end
111
-
112
- it "generates Word output docs with null configuration" do
113
- FileUtils.rm_f "test.doc"
114
- FileUtils.rm_f "test.html"
115
- IsoDoc::WordConvert.new(
116
- { wordstylesheet: "spec/assets/word.css",
117
- htmlstylesheet: "spec/assets/html.scss" },
118
- ).convert("test", <<~"INPUT", false)
119
- <iso-standard xmlns="http://riboseinc.com/isoxml">
120
- <preface><foreword>
121
- <note>
122
- <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
123
- </note>
124
- </foreword></preface>
125
- </iso-standard>
126
- INPUT
127
- expect(File.exist?("test.doc")).to be true
128
- word = File.read("test.doc")
129
- expect(word).to match(/one empty stylesheet/)
130
- expect(word).to match(/div\.table_container/)
131
- expect(word).not_to match(/word-override/)
132
- end
133
-
134
- it "generates HTML output docs with null configuration from file" do
135
- FileUtils.rm_f "spec/assets/iso.doc"
136
- FileUtils.rm_f "spec/assets/iso.html"
137
- IsoDoc::HtmlConvert.new(
138
- { wordstylesheet: "word.css",
139
- htmlstylesheet: "html.scss" },
140
- ).convert("spec/assets/iso.xml", nil, false)
141
- expect(File.exist?("spec/assets/iso.html")).to be true
142
- html = File.read("spec/assets/iso.html")
143
- expect(html).to match(/another empty stylesheet/)
144
- expect(html).to match(%r{https://use.fontawesome.com})
145
- expect(html).to match(%r{libs/jquery})
146
- expect(html).to include "$('#toggle')"
147
- expect(html).not_to match(/CDATA/)
148
- end
149
-
150
- it "generates Headless HTML output docs with null configuration from file" do
151
- FileUtils.rm_f "spec/assets/iso.html"
152
- IsoDoc::HeadlessHtmlConvert.new(
153
- { wordstylesheet: "word.css",
154
- htmlstylesheet: "html.scss" },
155
- ).convert("spec/assets/iso.xml", nil, false)
156
- expect(File.exist?("spec/assets/iso.headless.html")).to be true
157
- html = File.read("spec/assets/iso.headless.html")
158
- expect(html).not_to match(/another empty stylesheet/)
159
- expect(html).not_to match(%r{https://use.fontawesome.com})
160
- expect(html).not_to match(%r{libs/jquery})
161
- expect(html).not_to match(%r{<html})
162
- expect(html).not_to match(%r{<head})
163
- expect(html).not_to match(%r{<body})
164
- expect(html).to match(%r{<div})
165
- end
166
-
167
- it "generates Word output docs with null configuration from file" do
168
- FileUtils.rm_f "spec/assets/iso.doc"
169
- IsoDoc::WordConvert.new(
170
- { wordstylesheet: "word.css",
171
- htmlstylesheet: "html.scss" },
172
- ).convert("spec/assets/iso.xml", nil, false)
173
- expect(File.exist?("spec/assets/iso.doc")).to be true
174
- word = File.read("spec/assets/iso.doc")
175
- expect(word).to match(/one empty stylesheet/)
176
- end
177
-
178
- it "generates HTML output docs with complete configuration" do
179
- FileUtils.rm_f "test.doc"
180
- FileUtils.rm_f "test.html"
181
- IsoDoc::HtmlConvert.new(
182
- { bodyfont: "Zapf",
183
- monospacefont: "Consolas",
184
- headerfont: "Comic Sans",
185
- normalfontsize: "30pt",
186
- monospacefontsize: "29pt",
187
- smallerfontsize: "28pt",
188
- footnotefontsize: "27pt",
189
- htmlstylesheet: "spec/assets/html.scss",
190
- htmlstylesheet_override: "spec/assets/html_override.css",
191
- htmlcoverpage: "spec/assets/htmlcover.html",
192
- htmlintropage: "spec/assets/htmlintro.html",
193
- scripts: "spec/assets/scripts.html",
194
- scripts_override: "spec/assets/scripts_override.html",
195
- i18nyaml: "spec/assets/i18n.yaml",
196
- ulstyle: "l1",
197
- olstyle: "l2" },
198
- ).convert("test", <<~"INPUT", false)
199
- <iso-standard xmlns="http://riboseinc.com/isoxml">
200
- <preface><foreword>
201
- <note>
202
- <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
203
- </note>
204
- </foreword></preface>
205
- </iso-standard>
206
- INPUT
207
- html = File.read("test.html")
208
- expect(html).to match(/another empty stylesheet/)
209
- expect(html).to match(/p \{[^}]*?font-family: Zapf/m)
210
- expect(html).to match(/code \{[^}]*?font-family: Consolas/m)
211
- expect(html).to match(/h1 \{[^}]*?font-family: Comic Sans/m)
212
- expect(html).to match(/p \{[^}]*?font-size: 30pt/m)
213
- expect(html).to match(/code \{[^}]*?font-size: 29pt/m)
214
- expect(html).to match(/p\.note \{[^}]*?font-size: 28pt/m)
215
- expect(html).to match(/aside \{[^}]*?font-size: 27pt/m)
216
- expect(html).to match(/an empty html cover page/)
217
- expect(html).to match(/an empty html intro page/)
218
- expect(html).to match(/This is > a script/)
219
- expect(html).to match(/This is > also a script/)
220
- expect(html).not_to match(/CDATA/)
221
- expect(html).to match(%r{Anta&#x16D;parolo</h1>})
222
- expect(html).to match(%r{html-override})
223
- end
224
-
225
- it "generates HTML output docs with default fonts" do
226
- FileUtils.rm_f "test.doc"
227
- FileUtils.rm_f "test.html"
228
- IsoDoc::HtmlConvert.new(
229
- { htmlstylesheet: "spec/assets/html.scss",
230
- htmlcoverpage: "spec/assets/htmlcover.html",
231
- htmlintropage: "spec/assets/htmlintro.html",
232
- scripts: "spec/assets/scripts.html",
233
- i18nyaml: "spec/assets/i18n.yaml",
234
- ulstyle: "l1",
235
- olstyle: "l2" },
236
- ).convert("test", <<~"INPUT", false)
237
- <iso-standard xmlns="http://riboseinc.com/isoxml">
238
- <preface><foreword>
239
- <note>
240
- <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
241
- </note>
242
- </foreword></preface>
243
- </iso-standard>
244
- INPUT
245
- html = File.read("test.html")
246
- expect(html).to match(/another empty stylesheet/)
247
- expect(html).to match(/p \{[^}]*?font-family: Arial/m)
248
- expect(html).to match(/code \{[^}]*?font-family: Courier New/m)
249
- expect(html).to match(/h1 \{[^}]*?font-family: Arial/m)
250
- expect(html).to match(/p \{[^}]*?font-size: 1em;/m)
251
- expect(html).to match(/code \{[^}]*?font-size: 0.8em/m)
252
- expect(html).to match(/p\.note \{[^}]*?font-size: 0.9em/m)
253
- expect(html).to match(/aside \{[^}]*?font-size: 0.9em/m)
254
- expect(html).to match(/an empty html cover page/)
255
- expect(html).to match(/an empty html intro page/)
256
- expect(html).to match(/This is > a script/)
257
- expect(html).not_to match(/CDATA/)
258
- expect(html).to match(%r{Anta&#x16D;parolo</h1>})
259
- end
260
-
261
- it "generates Word output docs with complete configuration" do
262
- FileUtils.rm_f "test.doc"
263
- FileUtils.rm_f "test.html"
264
- IsoDoc::WordConvert.new(
265
- { bodyfont: "Zapf",
266
- monospacefont: "Consolas",
267
- headerfont: "Comic Sans",
268
- normalfontsize: "30pt",
269
- monospacefontsize: "29pt",
270
- smallerfontsize: "28pt",
271
- footnotefontsize: "27pt",
272
- wordstylesheet: "spec/assets/html.scss",
273
- wordstylesheet_override: "spec/assets/word_override.css",
274
- standardstylesheet: "spec/assets/std.css",
275
- header: "spec/assets/header.html",
276
- wordcoverpage: "spec/assets/wordcover.html",
277
- wordintropage: "spec/assets/wordintro.html",
278
- i18nyaml: "spec/assets/i18n.yaml",
279
- ulstyle: "l1",
280
- olstyle: "l2" },
281
- ).convert("test", <<~"INPUT", false)
282
- <iso-standard xmlns="http://riboseinc.com/isoxml">
283
- <preface><foreword>
284
- <note>
285
- <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
286
- </note>
287
- </foreword></preface>
288
- </iso-standard>
289
- INPUT
290
- word = File.read("test.doc")
291
- expect(word).to match(/another empty stylesheet/)
292
- expect(word).to match(/p \{[^}]*?font-family: Zapf/m)
293
- expect(word).to match(/code \{[^}]*?font-family: Consolas/m)
294
- expect(word).to match(/h1 \{[^}]*?font-family: Comic Sans/m)
295
- expect(word).to match(/p \{[^}]*?font-size: 30pt/m)
296
- expect(word).to match(/code \{[^}]*?font-size: 29pt/m)
297
- expect(word).to match(/p\.note \{[^}]*?font-size: 28pt/m)
298
- expect(word).to match(/aside \{[^}]*?font-size: 27pt/m)
299
- expect(word).to match(/a third empty stylesheet/)
300
- expect(word)
301
- .to match(/Content-Disposition: inline; filename="filelist.xml"/)
302
- expect(word).to match(/an empty word cover page/)
303
- expect(word).to match(/an empty word intro page/)
304
- expect(word).to match(%r{Anta&#x16D;parolo</h1>})
305
- expect(word).to match(%r{word-override})
306
- end
307
-
308
- it "generates Word output docs with default fonts" do
309
- FileUtils.rm_f "test.doc"
310
- FileUtils.rm_f "test.html"
311
- IsoDoc::WordConvert.new(
312
- { wordstylesheet: "spec/assets/html.scss",
313
- standardstylesheet: "spec/assets/std.css",
314
- header: "spec/assets/header.html",
315
- wordcoverpage: "spec/assets/wordcover.html",
316
- wordintropage: "spec/assets/wordintro.html",
317
- i18nyaml: "spec/assets/i18n.yaml",
318
- ulstyle: "l1",
319
- olstyle: "l2" },
320
- ).convert("test", <<~"INPUT", false)
321
- <iso-standard xmlns="http://riboseinc.com/isoxml">
322
- <preface><foreword>
323
- <note>
324
- <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
325
- </note>
326
- </foreword></preface>
327
- </iso-standard>
328
- INPUT
329
- word = File.read("test.doc")
330
- expect(word).to match(/another empty stylesheet/)
331
- expect(word).to match(/p \{[^}]*?font-family: Arial/m)
332
- expect(word).to match(/code \{[^}]*?font-family: Courier New/m)
333
- expect(word).to match(/h1 \{[^}]*?font-family: Arial/m)
334
- expect(word).to match(/p \{[^}]*?font-size: 12pt/m)
335
- expect(word).to match(/code \{[^}]*?font-size: 11pt/m)
336
- expect(word).to match(/p\.note \{[^}]*?font-size: 10pt/m)
337
- expect(word).to match(/aside \{[^}]*?font-size: 9pt/m)
338
- expect(word).to match(/a third empty stylesheet/)
339
- # expect(word).to match(/<title>test<\/title>/)
340
- expect(word)
341
- .to match(/Content-Disposition: inline; filename="filelist.xml"/)
342
- expect(word).to match(/an empty word cover page/)
343
- expect(word).to match(/an empty word intro page/)
344
- expect(word).to match(%r{Anta&#x16D;parolo</h1>})
345
- end
346
-
347
- it "cleans up HTML output preface placeholder paragraphs" do
348
- FileUtils.rm_f "test.doc"
349
- FileUtils.rm_f "test.html"
350
- IsoDoc::HtmlConvert.new(
351
- { bodyfont: "Zapf",
352
- monospacefont: "Consolas",
353
- headerfont: "Comic Sans",
354
- normalfontsize: "30pt",
355
- monospacefontsize: "29pt",
356
- smallerfontsize: "28pt",
357
- footnotefontsize: "27pt",
358
- htmlstylesheet: "spec/assets/html.scss",
359
- htmlstylesheet_override: "spec/assets/html_override.css",
360
- htmlcoverpage: "spec/assets/htmlcover.html",
361
- htmlintropage: "spec/assets/htmlintro.html",
362
- scripts: "spec/assets/scripts.html",
363
- scripts_override: "spec/assets/scripts_override.html",
364
- i18nyaml: "spec/assets/i18n.yaml",
365
- ulstyle: "l1",
366
- olstyle: "l2" },
367
- ).convert("test", <<~"INPUT", false)
368
- <iso-standard xmlns="http://riboseinc.com/isoxml">
369
- <preface><foreword>
370
- <note>
371
- <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
372
- </note>
373
- </foreword></preface>
374
- </iso-standard>
375
- INPUT
376
- html = Nokogiri::XML(File.read("test.html")).at("//body")
377
- html.xpath("//script").each(&:remove)
378
- expect(html.to_xml).to be_equivalent_to <<~OUTPUT
379
- <body lang="en" xml:lang="en">
380
- <div class="title-section">
381
- /* an empty html cover page */
382
- </div>
383
- <br/>
384
- <div class="prefatory-section">
385
- /* an empty html intro page */
386
- <ul id="toc-list"/>
387
- </div>
388
- <br/>
389
- <main class="main-section"><button onclick="topFunction()" id="myBtn" title="Go to top">Top</button>
390
- <br/>
391
- <div>
392
- <h1 class="ForewordTitle">Anta&#x16D;parolo</h1>
393
- <div class="Note">
394
- <p>&#xA0; These results are based on a study carried out on three different types of kernel.</p>
395
- </div>
396
- </div>
397
- <p class="zzSTDTitle1"/>
398
- </main>
399
- </body>
400
- OUTPUT
401
- end
402
-
403
- it "converts definition lists to tables for Word" do
404
- FileUtils.rm_f "test.doc"
405
- FileUtils.rm_f "test.html"
406
- IsoDoc::WordConvert.new(
407
- { wordstylesheet: "spec/assets/word.css",
408
- htmlstylesheet: "spec/assets/html.scss" },
409
- ).convert("test", <<~"INPUT", false)
410
- <iso-standard xmlns="http://riboseinc.com/isoxml">
411
- <preface><foreword>
412
- <dl>
413
- <dt>Term</dt>
414
- <dd>Definition</dd>
415
- <dt>Term 2</dt>
416
- <dd>Definition 2</dd>
417
- </dl>
418
- </foreword></preface>
419
- </iso-standard>
420
- INPUT
421
- word = File.read("test.doc")
422
- .sub(/^.*<div class="WordSection2">/m, '<div class="WordSection2">')
423
- .sub(%r{<p class="MsoNormal">\s*<br clear="all" class="section"/>\s*</p>\s*<div class="WordSection3">.*$}m, "")
424
- expect(xmlpp(word)).to be_equivalent_to xmlpp(<<~"OUTPUT")
425
- <div class="WordSection2">
426
- <p class="MsoNormal"><br clear="all" style="mso-special-character:line-break;page-break-before:always"/></p>
427
- <div>
428
- <h1 class="ForewordTitle">Foreword</h1>
429
- <table class="dl">
430
- <tr>
431
- <td valign="top" align="left">
432
- <p align="left" style="margin-left:0pt;text-align:left;" class="MsoNormal">Term</p>
433
- </td>
434
- <td valign="top">Definition</td>
435
- </tr>
436
- <tr>
437
- <td valign="top" align="left">
438
- <p align="left" style="margin-left:0pt;text-align:left;" class="MsoNormal">Term 2</p>
439
- </td>
440
- <td valign="top">Definition 2</td>
441
- </tr>
442
- </table>
443
- </div>
444
- <p class="MsoNormal">&#xA0;</p>
445
- </div>
446
- OUTPUT
447
- end
448
-
449
- it "populates Word header" do
450
- FileUtils.rm_f "test.doc"
451
- IsoDoc::WordConvert.new(
452
- { wordstylesheet: "spec/assets/word.css",
453
- htmlstylesheet: "spec/assets/html.scss",
454
- header: "spec/assets/header.html" },
455
- ).convert("test", <<~"INPUT", false)
456
- <iso-standard xmlns="http://riboseinc.com/isoxml">
457
- <bibdata type="article">
458
- <docidentifier>
459
- <project-number part="1">1000</project-number>
460
- </docidentifier>
461
- </bibdata>
462
- </iso-standard>
463
- INPUT
464
- word = File.read("test.doc")
465
- .sub(%r{^.*Content-ID: <header.html>}m, "Content-ID: <header.html>")
466
- .sub(/------=_NextPart.*$/m, "")
467
- expect(word).to be_equivalent_to <<~"OUTPUT"
468
- Content-ID: <header.html>
469
- Content-Disposition: inline; filename="header.html"
470
- Content-Transfer-Encoding: base64
471
- Content-Type: text/html charset="utf-8"
472
- Ci8qIGFuIGVtcHR5IGhlYWRlciAqLwoKU1RBUlQgRE9DIElEOiAKICAgICAgICAgICAxMDAwCiAg
473
- ICAgICAgIDogRU5EIERPQyBJRAoKRklMRU5BTUU6IHRlc3QKCg==
474
- OUTPUT
475
- end
476
-
477
- it "populates HTML ToC" do
478
- FileUtils.rm_f "test.doc"
479
- FileUtils.rm_f "test.html"
480
- IsoDoc::HtmlConvert.new({ htmltoclevels: 3 })
481
- .convert("test", <<~"INPUT", false)
482
- <iso-standard xmlns="http://riboseinc.com/isoxml">
483
- <preface><foreword><title>Foreword</title>
484
- <variant-title type="toc">FORVORT</variant-title>
485
- </foreword></preface>
486
- <sections>
487
- <clause><title>First Clause</title>
488
- <clause><title>First Subclause</title>
489
- <variant-title type="toc">SUBCLOZ</variant-title>
490
- </clause>
491
- </clause>
492
- </sections>
493
- </iso-standard>
494
- INPUT
495
- html = Nokogiri::XML(File.read("test.html"))
496
- .at("//div[@id = 'toc']")
497
- expect(xmlpp(html)).to be_equivalent_to xmlpp(<<~OUTPUT)
498
- HAJSHJAS
499
- OUTPUT
500
- end
501
-
502
- it "populates Word ToC" do
503
- FileUtils.rm_f "test.doc"
504
- IsoDoc::WordConvert.new(
505
- { wordstylesheet: "spec/assets/word.css",
506
- htmlstylesheet: "spec/assets/html.scss",
507
- wordintropage: "spec/assets/wordintro.html" },
508
- ).convert("test", <<~"INPUT", false)
509
- <iso-standard xmlns="http://riboseinc.com/isoxml">
510
- <sections>
511
- <clause id="A" inline-header="false" obligation="normative"><title>Clause 4</title><clause id="N" inline-header="false" obligation="normative">
512
- <title>Introduction<bookmark id="Q"/> to this <image src="spec/assets/rice_image1.png" id="_" mimetype="image/png"/> <fn reference="1">
513
- <p id="_ff27c067-2785-4551-96cf-0a73530ff1e6">Formerly denoted as 15 % (m/m).</p>
514
- </fn></title>
515
- </clause>
516
- <clause id="O" inline-header="false" obligation="normative">
517
- <title>Clause 4.2</title>
518
- <p>A<fn reference="1">
519
- <p id="_ff27c067-2785-4551-96cf-0a73530ff1e6">Formerly denoted as 15 % (m/m).</p>
520
- </fn></p>
521
- <clause id="P" inline-header="false" obligation="normative">
522
- <title>Clause 4.2.1</title>
523
- <variant-title type="toc">SUBCLOZ</variant-title>
524
- </clause>
525
- </clause></clause>
526
- </sections>
527
- </iso-standard>
528
- INPUT
529
- word = File.read("test.doc")
530
- .sub(/^.*<div class="WordSection2">/m, '<div class="WordSection2">')
531
- .sub(%r{<p class="MsoNormal">\s*<br clear="all" class="section"/>\s*</p>\s*<div class="WordSection3">.*$}m, "")
532
- expect(xmlpp(word.gsub(/_Toc\d\d+/, "_Toc")
533
- .gsub(/<o:p>&#xA0;<\/o:p>/, "")))
534
- .to be_equivalent_to xmlpp(<<~'OUTPUT')
535
- <div class="WordSection2">
536
- /* an empty word intro page */
537
-
538
- <p class="MsoToc1"><span lang="EN-GB" xml:lang="EN-GB"><span style="mso-element:field-begin"></span><span style="mso-spacerun:yes">&#xA0;</span>TOC
539
- \o "1-2" \h \z \u <span style="mso-element:field-separator"></span></span>
540
- <span class="MsoHyperlink"><span lang="EN-GB" style="mso-no-proof:yes" xml:lang="EN-GB">
541
- <a href="#_Toc">Clause 4<span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB">
542
- <span style="mso-tab-count:1 dotted">. </span>
543
- </span><span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB">
544
- <span style="mso-element:field-begin"></span></span>
545
- <span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB"> PAGEREF _Toc \h </span>
546
- <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>
547
- <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>
548
- <p class="MsoToc2">
549
- <span class="MsoHyperlink">
550
- <span lang="EN-GB" style="mso-no-proof:yes" xml:lang="EN-GB">
551
- <a href="#_Toc">Introduction to this<span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB">
552
- <span style="mso-tab-count:1 dotted">. </span>
553
- </span><span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB">
554
- <span style="mso-element:field-begin"></span></span>
555
- <span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB"> PAGEREF _Toc \h </span>
556
- <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>
557
- <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>
558
- </span>
559
- </p>
560
- <p class="MsoToc2">
561
- <span class="MsoHyperlink">
562
- <span lang="EN-GB" style="mso-no-proof:yes" xml:lang="EN-GB">
563
- <a href="#_Toc">Clause 4.2<span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB">
564
- <span style="mso-tab-count:1 dotted">. </span>
565
- </span><span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB">
566
- <span style="mso-element:field-begin"></span></span>
567
- <span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB"> PAGEREF _Toc \h </span>
568
- <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>
569
- <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>
570
- </span>
571
- </p>
572
- <p class="MsoToc1">
573
- <span lang="EN-GB" xml:lang="EN-GB">
574
- <span style="mso-element:field-end"></span>
575
- </span>
576
- <span lang="EN-GB" xml:lang="EN-GB">
577
- </span>
578
- </p>
579
- <p class="MsoNormal">&#xA0;</p>
580
- </div>
581
- OUTPUT
582
- end
583
-
584
- it "populates Word ToC with custom levels" do
585
- FileUtils.rm_f "test.doc"
586
- IsoDoc::WordConvert.new(
587
- { wordstylesheet: "spec/assets/word.css",
588
- htmlstylesheet: "spec/assets/html.scss",
589
- wordintropage: "spec/assets/wordintro.html",
590
- doctoclevels: 3 },
591
- ).convert("test", <<~"INPUT", false)
592
- <iso-standard xmlns="http://riboseinc.com/isoxml">
593
- <sections>
594
- <clause id="A" inline-header="false" obligation="normative"><title>Clause 4</title><clause id="N" inline-header="false" obligation="normative">
595
- <title>Introduction<bookmark id="Q"/> to this<fn reference="1">
596
- <p id="_ff27c067-2785-4551-96cf-0a73530ff1e6">Formerly denoted as 15 % (m/m).</p>
597
- </fn></title>
598
- </clause>
599
- <clause id="O" inline-header="false" obligation="normative">
600
- <title>Clause 4.2</title>
601
- <p>A<fn reference="1">
602
- <p id="_ff27c067-2785-4551-96cf-0a73530ff1e6">Formerly denoted as 15 % (m/m).</p>
603
- </fn></p>
604
- <clause id="P" inline-header="false" obligation="normative">
605
- <title>Clause 4.2.1</title>
606
- </clause>
607
- </clause></clause>
608
- </sections>
609
- </iso-standard>
610
- INPUT
611
- word = File.read("test.doc")
612
- .sub(/^.*<div class="WordSection2">/m, '<div class="WordSection2">')
613
- .sub(%r{<p class="MsoNormal">\s*<br clear="all" class="section"/>\s*</p>\s*<div class="WordSection3">.*$}m, "")
614
- expect(xmlpp(word.gsub(/_Toc\d\d+/, "_Toc")
615
- .gsub(/<o:p>&#xA0;<\/o:p>/, "")))
616
- .to be_equivalent_to xmlpp(<<~'OUTPUT')
617
- <div class="WordSection2">
618
- /* an empty word intro page */
619
-
620
- <p class="MsoToc1"><span lang="EN-GB" xml:lang="EN-GB"><span style="mso-element:field-begin"></span><span style="mso-spacerun:yes">&#xA0;</span>TOC
621
- \o "1-3" \h \z \u <span style="mso-element:field-separator"></span></span>
622
- <span class="MsoHyperlink"><span lang="EN-GB" style="mso-no-proof:yes" xml:lang="EN-GB">
623
- <a href="#_Toc">Clause 4<span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB">
624
- <span style="mso-tab-count:1 dotted">. </span>
625
- </span><span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB">
626
- <span style="mso-element:field-begin"></span></span>
627
- <span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB"> PAGEREF _Toc \h </span>
628
- <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>
629
- <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>
630
- <p class="MsoToc2">
631
- <span class="MsoHyperlink">
632
- <span lang="EN-GB" style="mso-no-proof:yes" xml:lang="EN-GB">
633
- <a href="#_Toc">Introduction to this<span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB">
634
- <span style="mso-tab-count:1 dotted">. </span>
635
- </span><span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB">
636
- <span style="mso-element:field-begin"></span></span>
637
- <span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB"> PAGEREF _Toc \h </span>
638
- <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>
639
- <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>
640
- </span>
641
- </p>
642
- <p class="MsoToc2">
643
- <span class="MsoHyperlink">
644
- <span lang="EN-GB" style="mso-no-proof:yes" xml:lang="EN-GB">
645
- <a href="#_Toc">Clause 4.2<span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB">
646
- <span style="mso-tab-count:1 dotted">. </span>
647
- </span><span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB">
648
- <span style="mso-element:field-begin"></span></span>
649
- <span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB"> PAGEREF _Toc \h </span>
650
- <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>
651
- <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>
652
- </span>
653
- </p>
654
- <p class="MsoToc3">
655
- <span class="MsoHyperlink">
656
- <span lang="EN-GB" style="mso-no-proof:yes" xml:lang="EN-GB">
657
- <a href="#_Toc">Clause 4.2.1<span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB">
658
- <span style="mso-tab-count:1 dotted">. </span>
659
- </span><span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB">
660
- <span style="mso-element:field-begin"></span></span>
661
- <span lang="EN-GB" class="MsoTocTextSpan" xml:lang="EN-GB"> PAGEREF _Toc \h </span>
662
- <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>
663
- <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>
664
- </span>
665
- </p>
666
- <p class="MsoToc1">
667
- <span lang="EN-GB" xml:lang="EN-GB">
668
- <span style="mso-element:field-end"></span>
669
- </span>
670
- <span lang="EN-GB" xml:lang="EN-GB">
671
- </span>
672
- </p>
673
- <p class="MsoNormal">&#xA0;</p>
674
- </div>
675
- OUTPUT
676
- end
677
-
678
- it "populates Word ToC with figures, tables, recommendations" do
679
- FileUtils.rm_f "test.doc"
680
- input = <<~INPUT
681
- <iso-standard xmlns="http://riboseinc.com/isoxml">
682
- <sections>
683
- <clause id="A" inline-header="false" obligation="normative"><title>Clause 4</title><clause id="N" inline-header="false" obligation="normative">
684
- <title>Introduction<bookmark id="Q"/> to this<fn reference="1">
685
- <p id="_ff27c067-2785-4551-96cf-0a73530ff1e6">Formerly denoted as 15 % (m/m).</p>
686
- </fn></title>
687
- </clause>
688
- <clause id="O" inline-header="false" obligation="normative">
689
- <title>Clause 4.2</title>
690
- <recommendation id="AC" type="abstracttest">
691
- <name>Recommendation Verification 1</name>
692
- <label>/ogc/recommendation/wfs/3</label>
693
- </recommendation>
694
- <recommendation id="AA">
695
- <label>/ogc/recommendation/wfs/2</label>
696
- </recommendation>
697
- <recommendation id="AB" type="abstracttest">
698
- <name>Recommendation Verification 2</name>
699
- <label>/ogc/recommendation/wfs/3</label>
700
- </recommendation>
701
- <figure id="BA"><name>First figure</name></figure>
702
- <table id="CA"><name>First table</name></table>
703
- <p>A<fn reference="1">
704
- <p id="_ff27c067-2785-4551-96cf-0a73530ff1e6">Formerly denoted as 15 % (m/m).</p>
705
- </fn></p>
706
- <clause id="P" inline-header="false" obligation="normative">
707
- <title>Clause 4.2.1</title>
708
- </clause>
709
- </clause></clause>
710
- </sections>
711
- </iso-standard>
712
- INPUT
713
- IsoDoc::WordConvert.new(
714
- { wordstylesheet: "spec/assets/word.css",
715
- htmlstylesheet: "spec/assets/html.scss",
716
- wordintropage: "spec/assets/wordintro.html",
717
- doctoclevels: 3 },
718
- ).convert("test", input, false)
719
- word = File.read("test.doc")
720
- .sub(/^.*<div class="WordSection2">/m, '<div class="WordSection2">')
721
- .sub(%r{<p class="MsoNormal">\s*<br clear="all" class="section"/>\s*</p>\s*<div class="WordSection3">.*$}m, "")
722
- expect(xmlpp(word.gsub(/_Toc\d\d+/, "_Toc")
723
- .gsub(/<o:p>&#xA0;<\/o:p>/, "")))
724
- .to be_equivalent_to xmlpp(<<~'OUTPUT')
725
- <div class='WordSection2'>
726
- /* an empty word intro page */
727
- <p class='MsoToc1'>
728
- <span lang='EN-GB' xml:lang='EN-GB'>
729
- <span style='mso-element:field-begin'/>
730
- <span style='mso-spacerun:yes'>&#xA0;</span>
731
- TOC \o "1-3" \h \z \u
732
- <span style='mso-element:field-separator'/>
733
- </span>
734
- <span class='MsoHyperlink'>
735
- <span lang='EN-GB' xml:lang='EN-GB' style='mso-no-proof:yes'>
736
- <a href='#_Toc'>
737
- Clause 4
738
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
739
- <span style='mso-tab-count:1 dotted'>. </span>
740
- </span>
741
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
742
- <span style='mso-element:field-begin'/>
743
- </span>
744
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'> PAGEREF _Toc \h </span>
745
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
746
- <span style='mso-element:field-separator'/>
747
- </span>
748
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>1</span>
749
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'/>
750
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
751
- <span style='mso-element:field-end'/>
752
- </span>
753
- </a>
754
- </span>
755
- </span>
756
- </p>
757
- <p class='MsoToc2'>
758
- <span class='MsoHyperlink'>
759
- <span lang='EN-GB' xml:lang='EN-GB' style='mso-no-proof:yes'>
760
- <a href='#_Toc'>
761
- Introduction to this
762
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
763
- <span style='mso-tab-count:1 dotted'>. </span>
764
- </span>
765
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
766
- <span style='mso-element:field-begin'/>
767
- </span>
768
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'> PAGEREF _Toc \h </span>
769
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
770
- <span style='mso-element:field-separator'/>
771
- </span>
772
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>1</span>
773
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'/>
774
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
775
- <span style='mso-element:field-end'/>
776
- </span>
777
- </a>
778
- </span>
779
- </span>
780
- </p>
781
- <p class='MsoToc2'>
782
- <span class='MsoHyperlink'>
783
- <span lang='EN-GB' xml:lang='EN-GB' style='mso-no-proof:yes'>
784
- <a href='#_Toc'>
785
- Clause 4.2
786
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
787
- <span style='mso-tab-count:1 dotted'>. </span>
788
- </span>
789
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
790
- <span style='mso-element:field-begin'/>
791
- </span>
792
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'> PAGEREF _Toc \h </span>
793
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
794
- <span style='mso-element:field-separator'/>
795
- </span>
796
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>1</span>
797
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'/>
798
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
799
- <span style='mso-element:field-end'/>
800
- </span>
801
- </a>
802
- </span>
803
- </span>
804
- </p>
805
- <p class='MsoToc3'>
806
- <span class='MsoHyperlink'>
807
- <span lang='EN-GB' xml:lang='EN-GB' style='mso-no-proof:yes'>
808
- <a href='#_Toc'>
809
- Clause 4.2.1
810
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
811
- <span style='mso-tab-count:1 dotted'>. </span>
812
- </span>
813
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
814
- <span style='mso-element:field-begin'/>
815
- </span>
816
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'> PAGEREF _Toc \h </span>
817
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
818
- <span style='mso-element:field-separator'/>
819
- </span>
820
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>1</span>
821
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'/>
822
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
823
- <span style='mso-element:field-end'/>
824
- </span>
825
- </a>
826
- </span>
827
- </span>
828
- </p>
829
- <p class='MsoToc1'>
830
- <span lang='EN-GB' xml:lang='EN-GB'>
831
- <span style='mso-element:field-end'/>
832
- </span>
833
- <span lang='EN-GB' xml:lang='EN-GB'>
834
- </span>
835
- </p>
836
- <p class='MsoNormal'>&#xA0;</p>
837
- </div>
838
- OUTPUT
839
-
840
- toc_input = input.sub(%r{<iso-standard xmlns="http://riboseinc.com/isoxml">},
841
- <<~MISC,
842
- <iso-standard xmlns="http://riboseinc.com/isoxml">
843
- <misc-container>
844
- <toc type="table"><title>List of tables</title></toc>
845
- <toc type="figure"><title>List of figures</title></toc>
846
- <toc type="recommendation"><title>List of recommendations</title></toc>
847
- </misc-container>
848
- MISC
849
- )
850
- IsoDoc::WordConvert.new(
851
- { wordstylesheet: "spec/assets/word.css",
852
- htmlstylesheet: "spec/assets/html.scss",
853
- wordintropage: "spec/assets/wordintro.html",
854
- doctoclevels: 3 },
855
- ).convert("test", toc_input, false)
856
- word = File.read("test.doc")
857
- .sub(/^.*<div class="WordSection2">/m, '<div class="WordSection2">')
858
- .sub(%r{<p class="MsoNormal">\s*<br clear="all" class="section"/>\s*</p>\s*<div class="WordSection3">.*$}m, "")
859
- expect(xmlpp(word.gsub(/_Toc\d\d+/, "_Toc")
860
- .gsub(/<o:p>&#xA0;<\/o:p>/, "")))
861
- .to be_equivalent_to xmlpp(<<~'OUTPUT')
862
- <div class='WordSection2'>
863
- /* an empty word intro page */
864
- <p class='MsoToc1'>
865
- <span lang='EN-GB' xml:lang='EN-GB'>
866
- <span style='mso-element:field-begin'/>
867
- <span style='mso-spacerun:yes'>&#xA0;</span>
868
- TOC \o "1-3" \h \z \u
869
- <span style='mso-element:field-separator'/>
870
- </span>
871
- <span class='MsoHyperlink'>
872
- <span lang='EN-GB' xml:lang='EN-GB' style='mso-no-proof:yes'>
873
- <a href='#_Toc'>
874
- Clause 4
875
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
876
- <span style='mso-tab-count:1 dotted'>. </span>
877
- </span>
878
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
879
- <span style='mso-element:field-begin'/>
880
- </span>
881
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'> PAGEREF _Toc \h </span>
882
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
883
- <span style='mso-element:field-separator'/>
884
- </span>
885
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>1</span>
886
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'/>
887
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
888
- <span style='mso-element:field-end'/>
889
- </span>
890
- </a>
891
- </span>
892
- </span>
893
- </p>
894
- <p class='MsoToc2'>
895
- <span class='MsoHyperlink'>
896
- <span lang='EN-GB' xml:lang='EN-GB' style='mso-no-proof:yes'>
897
- <a href='#_Toc'>
898
- Introduction to this
899
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
900
- <span style='mso-tab-count:1 dotted'>. </span>
901
- </span>
902
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
903
- <span style='mso-element:field-begin'/>
904
- </span>
905
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'> PAGEREF _Toc \h </span>
906
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
907
- <span style='mso-element:field-separator'/>
908
- </span>
909
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>1</span>
910
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'/>
911
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
912
- <span style='mso-element:field-end'/>
913
- </span>
914
- </a>
915
- </span>
916
- </span>
917
- </p>
918
- <p class='MsoToc2'>
919
- <span class='MsoHyperlink'>
920
- <span lang='EN-GB' xml:lang='EN-GB' style='mso-no-proof:yes'>
921
- <a href='#_Toc'>
922
- Clause 4.2
923
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
924
- <span style='mso-tab-count:1 dotted'>. </span>
925
- </span>
926
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
927
- <span style='mso-element:field-begin'/>
928
- </span>
929
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'> PAGEREF _Toc \h </span>
930
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
931
- <span style='mso-element:field-separator'/>
932
- </span>
933
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>1</span>
934
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'/>
935
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
936
- <span style='mso-element:field-end'/>
937
- </span>
938
- </a>
939
- </span>
940
- </span>
941
- </p>
942
- <p class='MsoToc3'>
943
- <span class='MsoHyperlink'>
944
- <span lang='EN-GB' xml:lang='EN-GB' style='mso-no-proof:yes'>
945
- <a href='#_Toc'>
946
- Clause 4.2.1
947
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
948
- <span style='mso-tab-count:1 dotted'>. </span>
949
- </span>
950
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
951
- <span style='mso-element:field-begin'/>
952
- </span>
953
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'> PAGEREF _Toc \h </span>
954
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
955
- <span style='mso-element:field-separator'/>
956
- </span>
957
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>1</span>
958
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'/>
959
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
960
- <span style='mso-element:field-end'/>
961
- </span>
962
- </a>
963
- </span>
964
- </span>
965
- </p>
966
- <p class='MsoToc1'>
967
- <span lang='EN-GB' xml:lang='EN-GB'>
968
- <span style='mso-element:field-end'/>
969
- </span>
970
- <span lang='EN-GB' xml:lang='EN-GB'>
971
- </span>
972
- </p>
973
- <p class='TOCTitle'>List of tables</p>
974
- <p class='MsoToc1'>
975
- <span lang='EN-GB' xml:lang='EN-GB'>
976
- <span style='mso-element:field-begin'/>
977
- <span style='mso-spacerun:yes'>&#xA0;</span>
978
- TOC \h \z \t "TableTitle,tabletitle"
979
- <span style='mso-element:field-separator'/>
980
- </span>
981
- <span class='MsoHyperlink'>
982
- <span lang='EN-GB' xml:lang='EN-GB' style='mso-no-proof:yes'>
983
- <a href='#_Toc'>
984
- First table
985
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
986
- <span style='mso-tab-count:1 dotted'>. </span>
987
- </span>
988
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
989
- <span style='mso-element:field-begin'/>
990
- </span>
991
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'> PAGEREF _Toc \h </span>
992
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
993
- <span style='mso-element:field-separator'/>
994
- </span>
995
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>1</span>
996
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'/>
997
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
998
- <span style='mso-element:field-end'/>
999
- </span>
1000
- </a>
1001
- </span>
1002
- </span>
1003
- </p>
1004
- <p class='MsoToc1'>
1005
- <span lang='EN-GB' xml:lang='EN-GB'>
1006
- <span style='mso-element:field-end'/>
1007
- </span>
1008
- <span lang='EN-GB' xml:lang='EN-GB'>
1009
- </span>
1010
- </p>
1011
- <p class='TOCTitle'>List of figures</p>
1012
- <p class='MsoToc1'>
1013
- <span lang='EN-GB' xml:lang='EN-GB'>
1014
- <span style='mso-element:field-begin'/>
1015
- <span style='mso-spacerun:yes'>&#xA0;</span>
1016
- TOC \h \z \t "FigureTitle,figuretitle"
1017
- <span style='mso-element:field-separator'/>
1018
- </span>
1019
- <span class='MsoHyperlink'>
1020
- <span lang='EN-GB' xml:lang='EN-GB' style='mso-no-proof:yes'>
1021
- <a href='#_Toc'>
1022
- First figure
1023
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
1024
- <span style='mso-tab-count:1 dotted'>. </span>
1025
- </span>
1026
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
1027
- <span style='mso-element:field-begin'/>
1028
- </span>
1029
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'> PAGEREF _Toc \h </span>
1030
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
1031
- <span style='mso-element:field-separator'/>
1032
- </span>
1033
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>1</span>
1034
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'/>
1035
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
1036
- <span style='mso-element:field-end'/>
1037
- </span>
1038
- </a>
1039
- </span>
1040
- </span>
1041
- </p>
1042
- <p class='MsoToc1'>
1043
- <span lang='EN-GB' xml:lang='EN-GB'>
1044
- <span style='mso-element:field-end'/>
1045
- </span>
1046
- <span lang='EN-GB' xml:lang='EN-GB'>
1047
- </span>
1048
- </p>
1049
- <p class='TOCTitle'>List of recommendations</p>
1050
- <p class='MsoToc1'>
1051
- <span lang='EN-GB' xml:lang='EN-GB'>
1052
- <span style='mso-element:field-begin'/>
1053
- <span style='mso-spacerun:yes'>&#xA0;</span>
1054
- TOC \h \z \t
1055
- "RecommendationTitle,RecommendationTestTitle,recommendationtitle,recommendationtesttitle"
1056
- <span style='mso-element:field-separator'/>
1057
- </span>
1058
- <span class='MsoHyperlink'>
1059
- <span lang='EN-GB' xml:lang='EN-GB' style='mso-no-proof:yes'>
1060
- <a href='#_Toc'>
1061
- : /ogc/recommendation/wfs/2
1062
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
1063
- <span style='mso-tab-count:1 dotted'>. </span>
1064
- </span>
1065
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
1066
- <span style='mso-element:field-begin'/>
1067
- </span>
1068
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'> PAGEREF _Toc \h </span>
1069
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
1070
- <span style='mso-element:field-separator'/>
1071
- </span>
1072
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>1</span>
1073
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'/>
1074
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
1075
- <span style='mso-element:field-end'/>
1076
- </span>
1077
- </a>
1078
- </span>
1079
- </span>
1080
- </p>
1081
- <p class='MsoToc1'>
1082
- <span class='MsoHyperlink'>
1083
- <span lang='EN-GB' xml:lang='EN-GB' style='mso-no-proof:yes'>
1084
- <a href='#_Toc'>
1085
- Recommendation Verification 1: /ogc/recommendation/wfs/3
1086
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
1087
- <span style='mso-tab-count:1 dotted'>. </span>
1088
- </span>
1089
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
1090
- <span style='mso-element:field-begin'/>
1091
- </span>
1092
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'> PAGEREF _Toc \h </span>
1093
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
1094
- <span style='mso-element:field-separator'/>
1095
- </span>
1096
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>1</span>
1097
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'/>
1098
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
1099
- <span style='mso-element:field-end'/>
1100
- </span>
1101
- </a>
1102
- </span>
1103
- </span>
1104
- </p>
1105
- <p class='MsoToc1'>
1106
- <span class='MsoHyperlink'>
1107
- <span lang='EN-GB' xml:lang='EN-GB' style='mso-no-proof:yes'>
1108
- <a href='#_Toc'>
1109
- Recommendation Verification 2: /ogc/recommendation/wfs/3
1110
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
1111
- <span style='mso-tab-count:1 dotted'>. </span>
1112
- </span>
1113
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
1114
- <span style='mso-element:field-begin'/>
1115
- </span>
1116
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'> PAGEREF _Toc \h </span>
1117
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
1118
- <span style='mso-element:field-separator'/>
1119
- </span>
1120
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>1</span>
1121
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'/>
1122
- <span lang='EN-GB' xml:lang='EN-GB' class='MsoTocTextSpan'>
1123
- <span style='mso-element:field-end'/>
1124
- </span>
1125
- </a>
1126
- </span>
1127
- </span>
1128
- </p>
1129
- <p class='MsoToc1'>
1130
- <span lang='EN-GB' xml:lang='EN-GB'>
1131
- <span style='mso-element:field-end'/>
1132
- </span>
1133
- <span lang='EN-GB' xml:lang='EN-GB'>
1134
- </span>
1135
- </p>
1136
- <p class='MsoNormal'>&#xA0;</p>
1137
- </div>
1138
- OUTPUT
1139
- end
1140
-
1141
- it "generates HTML output with custom ToC levels function" do
1142
- FileUtils.rm_f "test.doc"
1143
- FileUtils.rm_f "test.html"
1144
- IsoDoc::HtmlConvert.new({ htmltoclevels: 3 })
1145
- .convert("test", <<~"INPUT", false)
1146
- <iso-standard xmlns="http://riboseinc.com/isoxml">
1147
- <preface><foreword>
1148
- <note>
1149
- <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
1150
- </note>
1151
- </foreword></preface>
1152
- </iso-standard>
1153
- INPUT
1154
- html = File.read("test.html")
1155
- toclevel = <<~"TOCLEVEL"
1156
- function toclevel() { return "h1:not(:empty):not(.TermNum):not(.noTOC),h2:not(:empty):not(.TermNum):not(.noTOC),h3:not(:empty):not(.TermNum):not(.noTOC)";}
1157
- TOCLEVEL
1158
- expect(html).to include toclevel
1159
- end
1160
-
1161
- it "reorders footnote numbers in HTML" do
1162
- FileUtils.rm_f "test.html"
1163
- IsoDoc::HtmlConvert.new(
1164
- { wordstylesheet: "spec/assets/word.css",
1165
- htmlstylesheet: "spec/assets/html.scss",
1166
- wordintropage: "spec/assets/wordintro.html" },
1167
- ).convert("test", <<~"INPUT", false)
1168
- <iso-standard xmlns="http://riboseinc.com/isoxml">
1169
- <sections>
1170
- <clause id="A" inline-header="false" obligation="normative"><title>Clause 4</title><fn reference="3">
1171
- <p id="_ff27c067-2785-4551-96cf-0a73530ff1e6">This is a footnote.</p>
1172
- </fn><clause id="N" inline-header="false" obligation="normative">
1173
- <title>Introduction to this<fn reference="2">
1174
- Formerly denoted as 15 % (m/m).
1175
- </fn></title>
1176
- </clause>
1177
- <clause id="O" inline-header="false" obligation="normative">
1178
- <title>Clause 4.2</title>
1179
- <p>A<fn reference="1">
1180
- <p id="_ff27c067-2785-4551-96cf-0a73530ff1e6">Formerly denoted as 15 % (m/m).</p>
1181
- </fn></p>
1182
- </clause></clause>
1183
- </sections>
1184
- </iso-standard>
1185
- INPUT
1186
- html = File.read("test.html")
1187
- .sub(/^.*<main class="main-section">/m,
1188
- '<main xmlns:epub="epub" class="main-section">')
1189
- .sub(%r{</main>.*$}m, "</main>")
1190
- expect(xmlpp(html)).to be_equivalent_to xmlpp(<<~"OUTPUT")
1191
- <main xmlns:epub="epub" class="main-section"><button onclick="topFunction()" id="myBtn" title="Go to top">Top</button>
1192
- <p class="zzSTDTitle1"></p>
1193
- <div id="A">
1194
- <h1>Clause 4</h1>
1195
- <a class='FootnoteRef' href='#fn:3' id='fnref:1'>
1196
- <sup>1</sup>
1197
- </a>
1198
- <div id="N">
1199
- <h2>Introduction to this<a class='FootnoteRef' href='#fn:2' id='fnref:2'><sup>2</sup></a></h2>
1200
- </div>
1201
- <div id="O">
1202
- <h2>Clause 4.2</h2>
1203
- <p>A<a class='FootnoteRef' href='#fn:2'><sup>2</sup></a></p>
1204
- </div>
1205
- </div>
1206
- <aside id="fn:3" class="footnote">
1207
- <p id="_ff27c067-2785-4551-96cf-0a73530ff1e6"><a class='FootnoteRef' href='#fn:3'>
1208
- <sup>1</sup>
1209
- </a>This is a footnote.</p>
1210
- <a href="#fnref:1">&#x21A9;</a></aside>
1211
- <aside id="fn:2" class="footnote">
1212
- <a class='FootnoteRef' href='#fn:2'><sup>2</sup></a>Formerly denoted as 15 % (m/m).
1213
- <a href="#fnref:2">&#x21A9;</a></aside>
1214
- </main>
1215
- OUTPUT
1216
- end
1217
-
1218
- it "moves images in HTML #1" do
1219
- FileUtils.rm_f "test.html"
1220
- FileUtils.rm_rf Dir.glob "test_*_htmlimages"
1221
- IsoDoc::HtmlConvert.new(
1222
- { wordstylesheet: "spec/assets/word.css",
1223
- htmlstylesheet: "spec/assets/html.scss" },
1224
- ).convert("test", <<~"INPUT", false)
1225
- <iso-standard xmlns="http://riboseinc.com/isoxml">
1226
- <preface><foreword>
1227
- <figure id="_">
1228
- <name>Split-it-right sample divider</name>
1229
- <image src="#{File.expand_path(File.join(File.dirname(__FILE__), '..', 'assets/rice_image1.png'))}" id="_" mimetype="image/png"/>
1230
- <image src="spec/assets/rice_image1.png" id="_" mimetype="image/png"/>
1231
- <image src="spec/assets/rice_image1.png" id="_" width="20000" height="300000" mimetype="image/png"/>
1232
- <image src="spec/assets/rice_image1.png" id="_" width="99" height="auto" mimetype="image/png"/>
1233
- <image src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAB9AAAAfQCAAAAAC/U5ulAAAjo0lEQVR4nOzVMQ0AMAzAsPInvYHoMS2yEeTLHADge/M6AADYM3QACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIuAAAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMBAAA//8DAE/7hyLdS2yEAAAAAElFTkSuQmCC" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f3" mimetype="image/png"/>
1234
- <image src="data:application/xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjw/eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC94c2wiIGhyZWY9Ii4uLy4uLy4uL3hzbC9yZXNfZG9jL2ltZ2ZpbGUueHNsIj8+CjwhRE9DVFlQRSBpbWdmaWxlLmNvbnRlbnQgU1lTVEVNICIuLi8uLi8uLi9kdGQvdGV4dC5lbnQiPgo8aW1nZmlsZS5jb250ZW50IG1vZHVsZT0iZnVuZGFtZW50YWxzX29mX3Byb2R1Y3RfZGVzY3JpcHRpb25fYW5kX3N1cHBvcnQiIGZpbGU9ImFjdGlvbl9zY2hlbWFleHBnMS54bWwiPgo8aW1nIHNyYz0iYWN0aW9uX3NjaGVtYWV4cGcxLmdpZiI+CjxpbWcuYXJlYSBzaGFwZT0icmVjdCIgY29vcmRzPSIyMTAsMTg2LDM0MywyMjciIGhyZWY9Ii4uLy4uL3Jlc291cmNlcy9iYXNpY19hdHRyaWJ1dGVfc2NoZW1hL2Jhc2ljX2F0dHJpYnV0ZV9zY2hlbWEueG1sIiAvPgo8aW1nLmFyZWEgc2hhcGU9InJlY3QiIGNvb3Jkcz0iMTAsMTAsOTYsNTEiIGhyZWY9Ii4uLy4uL3Jlc291cmNlcy9hY3Rpb25fc2NoZW1hL2FjdGlvbl9zY2hlbWEueG1sIiAvPgo8aW1nLmFyZWEgc2hhcGU9InJlY3QiIGNvb3Jkcz0iMjEwLDI2NCwzNTgsMzA1IiBocmVmPSIuLi8uLi9yZXNvdXJjZXMvc3VwcG9ydF9yZXNvdXJjZV9zY2hlbWEvc3VwcG9ydF9yZXNvdXJjZV9zY2hlbWEueG1sIiAvPgo8L2ltZz4KPC9pbWdmaWxlLmNvbnRlbnQ+Cg==" height="20" width="auto" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f2" mimetype="application/xml"/>
1235
- </figure>
1236
- </foreword></preface>
1237
- </iso-standard>
1238
- INPUT
1239
- html = File.read("test.html")
1240
- .sub(/^.*<main class="main-section">/m, '<main class="main-section">')
1241
- .sub(%r{</main>.*$}m, "</main>")
1242
- expect(`ls test_*_htmlimages`).to match(/\.png$/)
1243
- expect(xmlpp(html.gsub(/\/[0-9a-f-]+\.png/, "/_.png"))
1244
- .gsub(/test_[^_]+_htmlimages/, "test_htmlimages"))
1245
- .to be_equivalent_to xmlpp(<<~"OUTPUT")
1246
- <main class="main-section"><button onclick="topFunction()" id="myBtn" title="Go to top">Top</button>
1247
- <br />
1248
- <div>
1249
- <h1 class="ForewordTitle">Foreword</h1>
1250
- <div id="_" class="figure">
1251
- <img src="test_htmlimages/_.png" height="776" width="922" />
1252
- <img src="test_htmlimages/_.png" height="776" width="922" />
1253
- <img src="test_htmlimages/_.png" height="800" width="53" />
1254
- <img src="test_htmlimages/_.png" height="83" width="99" />
1255
- <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAB9AAAAfQCAAAAAC/U5ulAAAjo0lEQVR4nOzVMQ0AMAzAsPInvYHoMS2yEeTLHADge/M6AADYM3QACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIuAAAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMBAAA//8DAE/7hyLdS2yEAAAAAElFTkSuQmCC" height="800" width="800" />
1256
- <img src='data:application/xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjw/eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC94c2wiIGhyZWY9Ii4uLy4uLy4uL3hzbC9yZXNfZG9jL2ltZ2ZpbGUueHNsIj8+CjwhRE9DVFlQRSBpbWdmaWxlLmNvbnRlbnQgU1lTVEVNICIuLi8uLi8uLi9kdGQvdGV4dC5lbnQiPgo8aW1nZmlsZS5jb250ZW50IG1vZHVsZT0iZnVuZGFtZW50YWxzX29mX3Byb2R1Y3RfZGVzY3JpcHRpb25fYW5kX3N1cHBvcnQiIGZpbGU9ImFjdGlvbl9zY2hlbWFleHBnMS54bWwiPgo8aW1nIHNyYz0iYWN0aW9uX3NjaGVtYWV4cGcxLmdpZiI+CjxpbWcuYXJlYSBzaGFwZT0icmVjdCIgY29vcmRzPSIyMTAsMTg2LDM0MywyMjciIGhyZWY9Ii4uLy4uL3Jlc291cmNlcy9iYXNpY19hdHRyaWJ1dGVfc2NoZW1hL2Jhc2ljX2F0dHJpYnV0ZV9zY2hlbWEueG1sIiAvPgo8aW1nLmFyZWEgc2hhcGU9InJlY3QiIGNvb3Jkcz0iMTAsMTAsOTYsNTEiIGhyZWY9Ii4uLy4uL3Jlc291cmNlcy9hY3Rpb25fc2NoZW1hL2FjdGlvbl9zY2hlbWEueG1sIiAvPgo8aW1nLmFyZWEgc2hhcGU9InJlY3QiIGNvb3Jkcz0iMjEwLDI2NCwzNTgsMzA1IiBocmVmPSIuLi8uLi9yZXNvdXJjZXMvc3VwcG9ydF9yZXNvdXJjZV9zY2hlbWEvc3VwcG9ydF9yZXNvdXJjZV9zY2hlbWEueG1sIiAvPgo8L2ltZz4KPC9pbWdmaWxlLmNvbnRlbnQ+Cg==' height='' width=''/>
1257
- <p class="FigureTitle" style="text-align:center;">Split-it-right sample divider</p></div>
1258
- </div>
1259
- <p class="zzSTDTitle1"></p>
1260
- </main>
1261
- OUTPUT
1262
- end
1263
-
1264
- it "moves images in HTML #2" do
1265
- FileUtils.rm_f "test.html"
1266
- FileUtils.rm_rf "test_htmlimages"
1267
- IsoDoc::HtmlConvert.new(
1268
- { baseassetpath: "spec/assets",
1269
- wordstylesheet: "word.css",
1270
- htmlstylesheet: "html.scss" },
1271
- ).convert("test", <<~"INPUT", false)
1272
- <iso-standard xmlns="http://riboseinc.com/isoxml">
1273
- <preface><foreword>
1274
- <figure id="_">
1275
- <name>Split-it-right sample divider</name>
1276
- <image src="rice_image1.png" id="_" mimetype="image/png"/>
1277
- </figure>
1278
- </foreword></preface>
1279
- </iso-standard>
1280
- INPUT
1281
- html = File.read("test.html")
1282
- .sub(/^.*<main class="main-section">/m, '<main class="main-section">')
1283
- .sub(%r{</main>.*$}m, "</main>")
1284
- expect(`ls test_*_htmlimages`).to match(/\.png$/)
1285
- expect(xmlpp(html.gsub(/\/[0-9a-f-]+\.png/, "/_.png"))
1286
- .gsub(/test_[^_]+_htmlimages/, "test_htmlimages"))
1287
- .to be_equivalent_to xmlpp(<<~"OUTPUT")
1288
- <main class='main-section'>
1289
- <button onclick='topFunction()' id='myBtn' title='Go to top'>Top</button>
1290
- <br/>
1291
- <div>
1292
- <h1 class='ForewordTitle'>Foreword</h1>
1293
- <div id='_' class='figure'>
1294
- <img src='test_htmlimages/_.png' height='776' width='922'/>
1295
- <p class='FigureTitle' style='text-align:center;'>Split-it-right sample divider</p>
1296
- </div>
1297
- </div>
1298
- <p class='zzSTDTitle1'/>
1299
- </main>
1300
- OUTPUT
1301
- end
1302
-
1303
- describe "mathvariant to plain" do
1304
- context "when `mathvariant` attr equal to `script`" do
1305
- it "converts mathvariant text chars into associated plain chars" do
1306
- FileUtils.rm_f "test.html"
1307
- input = <<~INPUT
1308
- <?xml version="1.0" encoding="UTF-8"?>
1309
- <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="1.5.14">
1310
- <sections>
1311
- <clause id="_clause" inline-header="false" obligation="normative">
1312
- <title>Clause</title>
1313
- <p id="_20514f5a-9f86-454e-b6ce-927f65ba6441">
1314
- <stem type="MathML"><math xmlns="http://www.w3.org/1998/Math/MathML">
1315
- <mi>x</mi>
1316
- <mo>=</mo>
1317
- <mstyle mathvariant="script">
1318
- <mi>l</mi>
1319
- </mstyle>
1320
- <mo>+</mo>
1321
- <mn>1</mn>
1322
- </math></stem>
1323
- </p>
1324
- </clause>
1325
- </sections>
1326
- </iso-standard>
1327
- INPUT
1328
- output = <<~OUTPUT
1329
- <main class="main-section"><button onclick="topFunction()" id="myBtn" title="Go to top">Top</button>
1330
- <p class="zzSTDTitle1"></p>
1331
- <div id="_clause">
1332
- <h1>Clause</h1>
1333
- <p id="_20514f5a-9f86-454e-b6ce-927f65ba6441">
1334
- <span class="stem"><math xmlns="http://www.w3.org/1998/Math/MathML">
1335
- <mi>x</mi>
1336
- <mo>=</mo>
1337
- <mstyle mathvariant="script">
1338
- <mi>&#x1D4C1;</mi>
1339
- </mstyle>
1340
- <mo>+</mo>
1341
- <mn>1</mn>
1342
- </math></span>
1343
- </p>
1344
- </div>
1345
- </main>
1346
- OUTPUT
1347
- IsoDoc::HtmlConvert.new({}).convert("test", input, false)
1348
- html = File.read("test.html")
1349
- .sub(/^.*<main class="main-section">/m, '<main class="main-section">')
1350
- .sub(%r{</main>.*$}m, "</main>")
1351
- expect(html).to(be_equivalent_to(output))
1352
- end
1353
- end
1354
-
1355
- context "when complex `mathvariant` combinations" do
1356
- it "converts mathvariant text chars into associated plain chars" do
1357
- FileUtils.rm_f "test.html"
1358
- input = <<~INPUT
1359
- <?xml version="1.0" encoding="UTF-8"?>
1360
- <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="1.5.14">
1361
- <sections>
1362
- <clause id="_clause" inline-header="false" obligation="normative">
1363
- <title>Clause</title>
1364
- <p id="_20514f5a-9f86-454e-b6ce-927f65ba6441">
1365
- <stem type="MathML">
1366
- <math xmlns="http://www.w3.org/1998/Math/MathML">
1367
- <mstyle mathvariant="sans-serif">
1368
- <mfrac>
1369
- <mrow>
1370
- <mrow>
1371
- <mi>n</mi>
1372
- <mfenced open="(" close=")">
1373
- <mrow>
1374
- <mstyle mathvariant="bold">
1375
- <mrow>
1376
- <mi>n</mi>
1377
- <mo>+</mo>
1378
- <mn>1</mn>
1379
- <mo>+</mo>
1380
- <mstyle mathvariant="italic">
1381
- <mi>x</mi>
1382
- </mstyle>
1383
- </mrow>
1384
- </mstyle>
1385
- </mrow>
1386
- </mfenced>
1387
- </mrow>
1388
- </mrow>
1389
- <mrow>
1390
- <mstyle mathvariant="bold">
1391
- <mrow>
1392
- <mi>y</mi>
1393
- <mo>+</mo>
1394
- <mstyle mathvariant="fraktur">
1395
- <mi>z</mi>
1396
- </mstyle>
1397
- </mrow>
1398
- </mstyle>
1399
- </mrow>
1400
- </mfrac>
1401
- </mstyle>
1402
- </math>
1403
- </stem>
1404
- </p>
1405
- </clause>
1406
- </sections>
1407
- </iso-standard>
1408
- INPUT
1409
- output = <<~OUTPUT
1410
- <main class="main-section"><button onclick="topFunction()" id="myBtn" title="Go to top">Top</button>
1411
- <p class="zzSTDTitle1"></p>
1412
- <div id="_clause">
1413
- <h1>Clause</h1>
1414
- <p id="_20514f5a-9f86-454e-b6ce-927f65ba6441">
1415
- <span class="stem"><math xmlns="http://www.w3.org/1998/Math/MathML">
1416
- <mstyle mathvariant="sans-serif">
1417
- <mfrac>
1418
- <mrow>
1419
- <mrow>
1420
- <mi>&#x1D5C7;</mi>
1421
- <mfenced open="(" close=")">
1422
- <mrow>
1423
- <mstyle mathvariant="bold">
1424
- <mrow>
1425
- <mi>&#x1D5FB;</mi>
1426
- <mo>+</mo>
1427
- <mn>&#x1D7ED;</mn>
1428
- <mo>+</mo>
1429
- <mstyle mathvariant="italic">
1430
- <mi>&#x1D66D;</mi>
1431
- </mstyle>
1432
- </mrow>
1433
- </mstyle>
1434
- </mrow>
1435
- </mfenced>
1436
- </mrow>
1437
- </mrow>
1438
- <mrow>
1439
- <mstyle mathvariant="bold">
1440
- <mrow>
1441
- <mi>&#x1D606;</mi>
1442
- <mo>+</mo>
1443
- <mstyle mathvariant="fraktur">
1444
- <mi>&#x1D59F;</mi>
1445
- </mstyle>
1446
- </mrow>
1447
- </mstyle>
1448
- </mrow>
1449
- </mfrac>
1450
- </mstyle>
1451
- </math></span>
1452
- </p>
1453
- </div>
1454
- </main>
1455
- OUTPUT
1456
- IsoDoc::HtmlConvert.new({}).convert("test", input, false)
1457
- html = File.read("test.html")
1458
- .sub(/^.*<main class="main-section">/m, '<main class="main-section">')
1459
- .sub(%r{</main>.*$}m, "</main>")
1460
- expect(html).to(be_equivalent_to(output))
1461
- end
1462
- end
1463
- end
1464
-
1465
- it "moves images in HTML with no file suffix" do
1466
- FileUtils.rm_f "test.html"
1467
- FileUtils.rm_rf Dir.glob "test_*_htmlimages"
1468
- IsoDoc::HtmlConvert.new(
1469
- { wordstylesheet: "spec/assets/word.css",
1470
- htmlstylesheet: "spec/assets/html.scss" },
1471
- ).convert("test", <<~"INPUT", false)
1472
- <iso-standard xmlns="http://riboseinc.com/isoxml">
1473
- <preface><foreword>
1474
- <figure id="_">
1475
- <name>Split-it-right sample divider</name>
1476
- <image src="spec/assets/rice_image1" id="_" mimetype="image/png"/>
1477
- <image src="spec/assets/rice_image1" id="_" mimetype="image/*"/>
1478
- <image src="data:image/*;base64,iVBORw0KGgoAAAANSUhEUgAAB9AAAAfQCAAAAAC/U5ulAAAjo0lEQVR4nOzVMQ0AMAzAsPInvYHoMS2yEeTLHADge/M6AADYM3QACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIuAAAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMBAAA//8DAE/7hyLdS2yEAAAAAElFTkSuQmCC" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f3" mimetype="image/png"/>
1479
- </figure>
1480
- </foreword></preface>
1481
- </iso-standard>
1482
- INPUT
1483
- html = File.read("test.html")
1484
- .sub(/^.*<main class="main-section">/m, '<main class="main-section">')
1485
- .sub(%r{</main>.*$}m, "</main>")
1486
- expect(`ls test_*_htmlimages`).to match(/\.png$/)
1487
- expect(xmlpp(html.gsub(/\/[0-9a-f-]+\.png/, "/_.png"))
1488
- .gsub(/test_[^_]+_htmlimages/, "test_htmlimages"))
1489
- .to be_equivalent_to xmlpp(<<~"OUTPUT")
1490
- <main class='main-section'>
1491
- <button onclick='topFunction()' id='myBtn' title='Go to top'>Top</button>
1492
- <br/>
1493
- <div>
1494
- <h1 class='ForewordTitle'>Foreword</h1>
1495
- <div id='_' class='figure'>
1496
- <img src='test_htmlimages/_.png' height='776' width='922'/>
1497
- <img src='test_htmlimages/_.png' height='776' width='922'/>
1498
- <img src='data:image/*;base64,iVBORw0KGgoAAAANSUhEUgAAB9AAAAfQCAAAAAC/U5ulAAAjo0lEQVR4nOzVMQ0AMAzAsPInvYHoMS2yEeTLHADge/M6AADYM3QACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIMHQACDB0AAgwdAAIuAAAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMCB0ABgIAAP//7NWBDAAAAMAgf+t7fCWR0AFgQOgAMCB0ABgQOgAMCB0ABoQOAANCB4ABoQPAgNABYEDoADAgdAAYEDoADAgdAAaEDgADQgeAAaEDwIDQAWBA6AAwIHQAGBA6AAwIHQAGhA4AA0IHgAGhA8CA0AFgQOgAMCB0ABgQOgAMBAAA//8DAE/7hyLdS2yEAAAAAElFTkSuQmCC' height='800' width='800'/>
1499
- <p class='FigureTitle' style='text-align:center;'>Split-it-right sample divider</p>
1500
- </div>
1501
- </div>
1502
- <p class='zzSTDTitle1'/>
1503
- </main>
1504
- OUTPUT
1505
- end
1506
-
1507
- it "moves images in HTML, using relative file location" do
1508
- FileUtils.rm_f "spec/test.html"
1509
- FileUtils.rm_rf "spec/test_htmlimages"
1510
- IsoDoc::HtmlConvert
1511
- .new(wordstylesheet: "assets/word.css",
1512
- htmlstylesheet: "assets/html.scss")
1513
- .convert("spec/test", <<~"INPUT", false)
1514
- <iso-standard xmlns="http://riboseinc.com/isoxml">
1515
- <preface><foreword>
1516
- <figure id="_">
1517
- <name>Split-it-right sample divider</name>
1518
- <image src="#{File.expand_path(File.join(File.dirname(__FILE__), '..', 'assets/rice_image1.png'))}" id="_" mimetype="image/png"/>
1519
- <image src="assets/rice_image1.png" id="_" mimetype="image/png"/>
1520
- <image src="assets/rice_image1.png" id="_" width="20000" height="300000" mimetype="image/png"/>
1521
- <image src="assets/rice_image1.png" id="_" width="99" height="auto" mimetype="image/png"/>
1522
- </figure>
1523
- </foreword></preface>
1524
- </iso-standard>
1525
- INPUT
1526
- html = File.read("spec/test.html")
1527
- .sub(/^.*<main class="main-section">/m, '<main class="main-section">')
1528
- .sub(%r{</main>.*$}m, "</main>")
1529
- expect(`ls test_*_htmlimages`).to match(/\.png$/)
1530
- expect(xmlpp(html.gsub(/\/[0-9a-f-]+\.png/, "/_.png"))
1531
- .gsub(/test_[^_]+_htmlimages/, "test_htmlimages"))
1532
- .to be_equivalent_to xmlpp(<<~"OUTPUT")
1533
- <main class="main-section"><button onclick="topFunction()" id="myBtn" title="Go to top">Top</button>
1534
- <br />
1535
- <div>
1536
- <h1 class="ForewordTitle">Foreword</h1>
1537
- <div id="_" class="figure">
1538
- <img src="test_htmlimages/_.png" height="776" width="922" />
1539
- <img src="test_htmlimages/_.png" height="776" width="922" />
1540
- <img src="test_htmlimages/_.png" height="800" width="53" />
1541
- <img src="test_htmlimages/_.png" height="83" width="99" />
1542
- <p class="FigureTitle" style="text-align:center;">Split-it-right sample divider</p></div>
1543
- </div>
1544
- <p class="zzSTDTitle1"></p>
1545
- </main>
1546
- OUTPUT
1547
- end
1548
-
1549
- it "encodes images in HTML as data URIs" do
1550
- FileUtils.rm_f "test.html"
1551
- FileUtils.rm_rf Dir.glob "test_*_htmlimages"
1552
- IsoDoc::HtmlConvert
1553
- .new(htmlstylesheet: "spec/assets/html.scss", datauriimage: true)
1554
- .convert("test", <<~"INPUT", false)
1555
- <iso-standard xmlns="http://riboseinc.com/isoxml">
1556
- <preface><foreword>
1557
- <figure id="_">
1558
- <name>Split-it-right sample divider</name>
1559
- <image src="#{File.expand_path(File.join(File.dirname(__FILE__), '..', 'assets/rice_image1.png'))}" id="_" mimetype="image/png"/>
1560
- <image src="spec/assets/rice_image1.png" id="_" mimetype="image/png"/>
1561
- </figure>
1562
- </foreword></preface>
1563
- </iso-standard>
1564
- INPUT
1565
- html = File.read("test.html")
1566
- .sub(/^.*<main class="main-section">/m, '<main class="main-section">')
1567
- .sub(%r{</main>.*$}m, "</main>")
1568
- expect(xmlpp(html
1569
- .gsub(%r{src="data:image/png;base64,[^"]+"}, %{src="data:image/png;base64,_"})))
1570
- .to be_equivalent_to xmlpp(<<~"OUTPUT")
1571
- <main class="main-section"><button onclick="topFunction()" id="myBtn" title="Go to top">Top</button>
1572
- <br />
1573
- <div>
1574
- <h1 class="ForewordTitle">Foreword</h1>
1575
- <div id="_" class="figure">
1576
- <img src="data:image/png;base64,_" height="776" width="922" />
1577
- <img src="data:image/png;base64,_" height="776" width="922" />
1578
- <p class="FigureTitle" style="text-align:center;">Split-it-right sample divider</p></div>
1579
- </div>
1580
- <p class="zzSTDTitle1"></p>
1581
- </main>
1582
- OUTPUT
1583
- end
1584
-
1585
- it "encodes images in HTML as data URIs, using relative file location" do
1586
- FileUtils.rm_f "spec/test.html"
1587
- FileUtils.rm_rf Dir.glob "test_*_htmlimages"
1588
- IsoDoc::HtmlConvert
1589
- .new({ htmlstylesheet: "assets/html.scss", datauriimage: true })
1590
- .convert("spec/test", <<~"INPUT", false)
1591
- <iso-standard xmlns="http://riboseinc.com/isoxml">
1592
- <preface><foreword>
1593
- <figure id="_">
1594
- <name>Split-it-right sample divider</name>
1595
- <image src="#{File.expand_path(File.join(File.dirname(__FILE__), '..', 'assets/rice_image1.png'))}" id="_" mimetype="image/png"/>
1596
- <image src="assets/rice_image1.png" id="_" mimetype="image/png"/>
1597
- </figure>
1598
- </foreword></preface>
1599
- </iso-standard>
1600
- INPUT
1601
- html = File.read("spec/test.html")
1602
- .sub(/^.*<main class="main-section">/m, '<main class="main-section">')
1603
- .sub(%r{</main>.*$}m, "</main>")
1604
- expect(xmlpp(html
1605
- .gsub(%r{src="data:image/png;base64,[^"]+"}, %{src="data:image/png;base64,_"})))
1606
- .to be_equivalent_to xmlpp(<<~"OUTPUT")
1607
- <main class="main-section"><button onclick="topFunction()" id="myBtn" title="Go to top">Top</button>
1608
- <br />
1609
- <div>
1610
- <h1 class="ForewordTitle">Foreword</h1>
1611
- <div id="_" class="figure">
1612
- <img src="data:image/png;base64,_" height="776" width="922" />
1613
- <img src="data:image/png;base64,_" height="776" width="922" />
1614
- <p class="FigureTitle" style="text-align:center;">Split-it-right sample divider</p></div>
1615
- </div>
1616
- <p class="zzSTDTitle1"></p>
1617
- </main>
1618
- OUTPUT
1619
- end
1620
-
1621
- it "processes IsoXML terms for HTML" do
1622
- FileUtils.rm_f "test.html"
1623
- FileUtils.rm_f "test.doc"
1624
- IsoDoc::HtmlConvert.new(options)
1625
- .convert("test", <<~"INPUT", false)
1626
- <iso-standard xmlns="http://riboseinc.com/isoxml">
1627
- <sections>
1628
- <terms id="_terms_and_definitions" obligation="normative"><title>Terms and Definitions</title>
1629
- <term id="paddy1"><name>1.1.</name><preferred>paddy</preferred>
1630
- <domain>rice</domain>
1631
- <definition><p id="_eb29b35e-123e-4d1c-b50b-2714d41e747f">rice retaining its husk after threshing</p></definition>
1632
- <termexample id="_bd57bbf1-f948-4bae-b0ce-73c00431f892">
1633
- <p id="_65c9a509-9a89-4b54-a890-274126aeb55c">Foreign seeds, husks, bran, sand, dust.</p>
1634
- <ul>
1635
- <li>A</li>
1636
- </ul>
1637
- </termexample>
1638
- <termexample id="_bd57bbf1-f948-4bae-b0ce-73c00431f894">
1639
- <ul>
1640
- <li>A</li>
1641
- </ul>
1642
- </termexample>
1643
- <termsource status="modified">
1644
- <origin bibitemid="ISO7301" type="inline" citeas="ISO 7301:2011"><locality type="clause"><referenceFrom>3.1</referenceFrom></locality></origin>
1645
- <modification>
1646
- <p id="_e73a417d-ad39-417d-a4c8-20e4e2529489">The term "cargo rice" is shown as deprecated, and Note 1 to entry is not included here</p>
1647
- </modification>
1648
- </termsource></term>
1649
- <term id="paddy"><name>1.2.</name><preferred>paddy</preferred><admitted>paddy rice</admitted>
1650
- <admitted>rough rice</admitted>
1651
- <deprecates>cargo rice</deprecates>
1652
- <definition><p id="_eb29b35e-123e-4d1c-b50b-2714d41e747f">rice retaining its husk after threshing</p></definition>
1653
- <termexample id="_bd57bbf1-f948-4bae-b0ce-73c00431f893">
1654
- <ul>
1655
- <li>A</li>
1656
- </ul>
1657
- </termexample>
1658
- <termnote id="_671a1994-4783-40d0-bc81-987d06ffb74e">
1659
- <p id="_19830f33-e46c-42cc-94ca-a5ef101132d5">The starch of waxy rice consists almost entirely of amylopectin. The kernels have a tendency to stick together after cooking.</p>
1660
- </termnote>
1661
- <termnote id="_671a1994-4783-40d0-bc81-987d06ffb74f">
1662
- <ul><li>A</li></ul>
1663
- <p id="_19830f33-e46c-42cc-94ca-a5ef101132d5">The starch of waxy rice consists almost entirely of amylopectin. The kernels have a tendency to stick together after cooking.</p>
1664
- </termnote>
1665
- <termsource status="identical">
1666
- <origin bibitemid="ISO7301" type="inline" citeas="ISO 7301:2011"><locality type="clause"><referenceFrom>3.1</referenceFrom></locality></origin>
1667
- </termsource></term>
1668
- </terms>
1669
- </sections>
1670
- </iso-standard>
1671
- INPUT
1672
- expect(File.exist?("test.html")).to be true
1673
- html = File.read("test.html")
1674
- expect(html).to match(%r{<h2 class="TermNum" id="paddy1">1\.1\.</h2>})
1675
- expect(html).to match(%r{<h2 class="TermNum" id="paddy">1\.2\.</h2>})
1676
- end
1677
-
1678
- it "creates continuation styles for multiparagraph list items in Word" do
1679
- FileUtils.rm_f "test.doc"
1680
- FileUtils.rm_f "test.html"
1681
- IsoDoc::WordConvert.new(options)
1682
- .convert("test", <<~"INPUT", false)
1683
- <iso-standard xmlns="http://riboseinc.com/isoxml">
1684
- <preface><foreword>
1685
- <ul>
1686
- <li><p>A</p>
1687
- <p>B</p></li>
1688
- <li><ol><li><p>C</p>
1689
- <p>D</p>
1690
- <sourcecode>E</sourcecode></li>
1691
- </ol></li>
1692
- </ul>
1693
- <ol>
1694
- <li><p>A1</p>
1695
- <p>B1</p></li>
1696
- <li><ul><li><p>C1</p>
1697
- <formula id="_5fc1ef0f-75d2-4b54-802c-b1bad4a53b62">
1698
- <stem type="AsciiMath">D1</stem>
1699
- </formula>
1700
- <dl id="_f8fb7ed7-7874-44a8-933f-06e0e86fb264">
1701
- <dt>
1702
- <em>n</em>
1703
- </dt>
1704
- <dd>
1705
- <p id="_a27281a4-b20e-4d0b-a780-bab9e851b03e">is the number of coating layers</p>
1706
- </dd>
1707
- </dl>
1708
- </ul></li>
1709
- </ol>
1710
- </foreword></preface>
1711
- </iso-standard>
1712
- INPUT
1713
- word = File.read("test.doc")
1714
- .sub(/^.*<div class="WordSection2">/m, '<div class="WordSection2" xmlns:m="m">')
1715
- .sub(%r{<p class="MsoNormal">\s*<br clear="all" class="section"/>\s*</p>\s*<div class="WordSection3">.*$}m, "")
1716
- expect(xmlpp(word)).to be_equivalent_to xmlpp(<<~"OUTPUT")
1717
- <div class='WordSection2' xmlns:m='m'>
1718
- <p class='MsoNormal'>
1719
- <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
1720
- </p>
1721
- <div>
1722
- <h1 class='ForewordTitle'>Foreword</h1>
1723
- <p class='MsoListParagraphCxSpFirst'>
1724
- A
1725
- <div class='ListContLevel1'>
1726
- <p class='MsoNormal'>B</p>
1727
- </div>
1728
- </p>
1729
- <p class='MsoListParagraphCxSpLast'>
1730
- <p class='MsoListParagraphCxSpFirst'>
1731
- C
1732
- <div class='ListContLevel2'>
1733
- <p class='MsoNormal'>D</p>
1734
- </div>
1735
- <div class='ListContLevel2'>
1736
- <p class='Sourcecode'>E</p>
1737
- </div>
1738
- </p>
1739
- </p>
1740
- <p class='MsoListParagraphCxSpFirst'>
1741
- A1
1742
- <div class='ListContLevel1'>
1743
- <p class='MsoNormal'>B1</p>
1744
- </div>
1745
- </p>
1746
- <p class='MsoListParagraphCxSpLast'>
1747
- C1
1748
- <div class='ListContLevel2'>
1749
- <div>
1750
- <a name='_5fc1ef0f-75d2-4b54-802c-b1bad4a53b62' id='_5fc1ef0f-75d2-4b54-802c-b1bad4a53b62'/>
1751
- <div class='formula'>
1752
- <p class='MsoNormal'>
1753
- <span class='stem'>
1754
- <m:oMath>
1755
- <m:r>
1756
- <m:t>D1</m:t>
1757
- </m:r>
1758
- </m:oMath>
1759
- </span>
1760
- <span style='mso-tab-count:1'>&#xA0; </span>
1761
- </p>
1762
- </div>
1763
- </div>
1764
- </div>
1765
- <div class='ListContLevel2'>
1766
- <table class='dl'>
1767
- <tr>
1768
- <td valign='top' align='left'>
1769
- <p align='left' style='margin-left:0pt;text-align:left;' class='MsoNormal'>
1770
- <i>n</i>
1771
- </p>
1772
- </td>
1773
- <td valign='top'>
1774
- <p class='MsoNormal'>
1775
- <a name='_a27281a4-b20e-4d0b-a780-bab9e851b03e' id='_a27281a4-b20e-4d0b-a780-bab9e851b03e'/>
1776
- is the number of coating layers
1777
- </p>
1778
- </td>
1779
- </tr>
1780
- </table>
1781
- </div>
1782
- </p>
1783
- </div>
1784
- <p class='MsoNormal'>&#xA0;</p>
1785
- </div>
1786
- OUTPUT
1787
- end
1788
-
1789
- it "does not lose HTML escapes in postprocessing" do
1790
- FileUtils.rm_f "test.doc"
1791
- FileUtils.rm_f "test.html"
1792
- input = <<~INPUT
1793
- <iso-standard xmlns="http://riboseinc.com/isoxml">
1794
- <preface><foreword>
1795
- <sourcecode id="samplecode">
1796
- <name>XML code</name>
1797
- &lt;xml&gt; &amp;
1798
- </sourcecode>
1799
- </foreword></preface>
1800
- </iso-standard>
1801
- INPUT
1802
- IsoDoc::HtmlConvert.new(options).convert("test", input, false)
1803
- html = File.read("test.html")
1804
- .sub(/^.*<main class="main-section">/m, '<main class="main-section">')
1805
- .sub(%r{</main>.*$}m, "</main>")
1806
- expect(xmlpp(html)).to be_equivalent_to xmlpp(<<~"OUTPUT")
1807
- <main class="main-section"><button onclick="topFunction()" id="myBtn" title="Go to top">Top</button>
1808
- <br />
1809
- <div>
1810
- <h1 class="ForewordTitle">Foreword</h1>
1811
- <pre id="samplecode" class="prettyprint "><br />&#xA0;&#xA0;&#xA0; <br />&#xA0; &lt;xml&gt; &amp;<br />
1812
- </pre>
1813
- <p class="SourceTitle" style="text-align:center;">XML code</p>
1814
- </div>
1815
- <p class="zzSTDTitle1"></p>
1816
- </main>
1817
- OUTPUT
1818
-
1819
- FileUtils.rm_f "test.doc"
1820
- FileUtils.rm_f "test.html"
1821
- IsoDoc::WordConvert.new(options).convert("test", input, false)
1822
- word = File.read("test.doc")
1823
- .sub(/^.*<div class="WordSection2">/m, '<div class="WordSection2">')
1824
- .sub(%r{<p class="MsoNormal">\s*<br clear="all" class="section"/>\s*</p>\s*<div class="WordSection3">.*$}m, "")
1825
- expect(xmlpp(word)).to be_equivalent_to xmlpp(<<~"OUTPUT")
1826
- <div class="WordSection2">
1827
- <p class="MsoNormal">
1828
- <br clear="all" style="mso-special-character:line-break;page-break-before:always"/>
1829
- </p>
1830
- <div>
1831
- <h1 class="ForewordTitle">Foreword</h1>
1832
- <p class="Sourcecode" style="page-break-after:avoid;"><a name="samplecode" id="samplecode"></a><br/>&#xA0;&#xA0;&#xA0; <br/>&#xA0; &lt;xml&gt; &amp;<br/></p><p class="SourceTitle" style="text-align:center;">XML code</p>
1833
- </div>
1834
- <p class="MsoNormal">&#xA0;</p>
1835
- </div>
1836
- OUTPUT
1837
- end
1838
-
1839
- it "propagates example style to paragraphs in postprocessing (Word)" do
1840
- FileUtils.rm_f "test.doc"
1841
- FileUtils.rm_f "test.html"
1842
- IsoDoc::WordConvert.new(options).convert("test", <<~"INPUT", false)
1843
- <iso-standard xmlns="http://riboseinc.com/isoxml">
1844
- <preface><foreword>
1845
- <example id="samplecode">
1846
- <p>ABC</p>
1847
- </example>
1848
- </foreword></preface>
1849
- </iso-standard>
1850
- INPUT
1851
- word = File.read("test.doc")
1852
- .sub(/^.*<div class="WordSection2">/m, '<div class="WordSection2">')
1853
- .sub(%r{<p class="MsoNormal">\s*<br clear="all" class="section"/>\s*</p>\s*<div class="WordSection3">.*$}m, "")
1854
- expect(xmlpp(word)).to be_equivalent_to xmlpp(<<~"OUTPUT")
1855
- <div class="WordSection2">
1856
- <p class="MsoNormal">
1857
- <br clear="all" style="mso-special-character:line-break;page-break-before:always"/>
1858
- </p>
1859
- <div>
1860
- <h1 class="ForewordTitle">Foreword</h1>
1861
- <div class="example"><a name="samplecode" id="samplecode"></a>
1862
- <p class="example">ABC</p>
1863
- </div>
1864
- </div>
1865
- <p class="MsoNormal">&#xA0;</p>
1866
- </div>
1867
- OUTPUT
1868
- end
1869
-
1870
- it "deals with image captions (Word)" do
1871
- FileUtils.rm_f "test.doc"
1872
- FileUtils.rm_f "test.html"
1873
- IsoDoc::WordConvert.new(options)
1874
- .convert("test", <<~"INPUT", false)
1875
- <iso-standard xmlns="http://riboseinc.com/isoxml">
1876
- <preface><foreword>
1877
- <figure id="fig1">
1878
- <name>Typical arrangement of the far-field scan set-up</name>
1879
- <image src="spec/assets/rice_image1.png" id="_" mimetype="image/png"/>
1880
- </figure>
1881
- </foreword></preface>
1882
- </iso-standard>
1883
- INPUT
1884
- word = File.read("test.doc")
1885
- .sub(/^.*<div class="WordSection2">/m, '<div class="WordSection2">')
1886
- .sub(%r{<p class="MsoNormal">\s*<br clear="all" class="section"/>\s*</p>\s*<div class="WordSection3">.*$}m, "")
1887
- .sub(/src="[^"]+"/, 'src="_"')
1888
- expect(xmlpp(word)).to be_equivalent_to xmlpp(<<~"OUTPUT")
1889
- <div class="WordSection2">
1890
- <p class="MsoNormal">
1891
- <br clear="all" style="mso-special-character:line-break;page-break-before:always"/>
1892
- </p>
1893
- <div>
1894
- <h1 class="ForewordTitle">Foreword</h1>
1895
- <div class="figure"><a name="fig1" id="fig1"></a>
1896
- <p style="page-break-after:avoid;" class="figure"><img src="_" width="400" height="337"/></p>
1897
- <p class="FigureTitle" style="text-align:center;">Typical arrangement of the far-field scan set-up</p></div>
1898
- </div>
1899
- <p class="MsoNormal">&#xA0;</p>
1900
- </div>
1901
- OUTPUT
1902
- end
1903
-
1904
- it "deals with empty table titles (Word)" do
1905
- FileUtils.rm_f "test.doc"
1906
- FileUtils.rm_f "test.html"
1907
- IsoDoc::WordConvert.new(options)
1908
- .convert("test", <<~"INPUT", false)
1909
- <iso-standard xmlns="http://riboseinc.com/isoxml">
1910
- <preface><foreword>
1911
- <table id="_fe12b8f8-6858-4cd6-af7d-d4b6f3ebd1a7" unnumbered="true"><thead><tr>
1912
- <td rowspan="2">
1913
- <p id="_c47d9b39-adb2-431d-9320-78cb148fdb56">Output wavelength <stem type="MathML"><math xmlns="http://www.w3.org/1998/Math/MathML"><mrow><mo>(</mo><mi>μ</mi><mi>m</mi><mo>)</mo></mrow></math></stem></p>
1914
- </td>
1915
- <th colspan="3" align="left">Predictive wavelengths</th>
1916
- </tr>
1917
- </thead>
1918
- </table>
1919
- </preface>
1920
- </iso-standard>
1921
- INPUT
1922
- word = File.read("test.doc")
1923
- .sub(/^.*<div class="WordSection2">/m, '<div class="WordSection2" xmlns:m="m">')
1924
- .sub(%r{<p class="MsoNormal">\s*<br clear="all" class="section"/>\s*</p>\s*<div class="WordSection3">.*$}m, "")
1925
- .sub(/src="[^"]+"/, 'src="_"')
1926
- expect(xmlpp(word)).to be_equivalent_to xmlpp(<<~"OUTPUT")
1927
- <div class="WordSection2" xmlns:m="m">
1928
- <p class="MsoNormal">
1929
- <br clear="all" style="mso-special-character:line-break;page-break-before:always"/>
1930
- </p>
1931
- <div>
1932
- <h1 class="ForewordTitle">Foreword</h1>
1933
- <div align="center" class="table_container">
1934
- <table class="MsoISOTable" style="mso-table-anchor-horizontal:column;mso-table-overlap:never;border-spacing:0;border-width:1px;"><a name="_fe12b8f8-6858-4cd6-af7d-d4b6f3ebd1a7" id="_fe12b8f8-6858-4cd6-af7d-d4b6f3ebd1a7"></a>
1935
- <thead>
1936
- <tr>
1937
- <td rowspan="2" style="border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;">
1938
- <p class="MsoNormal"><a name="_c47d9b39-adb2-431d-9320-78cb148fdb56" id="_c47d9b39-adb2-431d-9320-78cb148fdb56"></a>Output wavelength <span class="stem">
1939
- <m:oMath>
1940
- <span style='font-style:normal;'>
1941
- <m:r>
1942
- <m:rPr>
1943
- <m:sty m:val='p'/>
1944
- </m:rPr>
1945
- <m:t>(</m:t>
1946
- </m:r>
1947
- </span>
1948
- <m:r>
1949
- <m:t>&#x3BC;m)</m:t>
1950
- </m:r>
1951
- </m:oMath>
1952
- </span></p>
1953
- </td>
1954
- <th colspan="3" align="left" style="font-weight:bold;border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;">Predictive wavelengths</th>
1955
- </tr>
1956
- </thead>
1957
- </table>
1958
- </div>
1959
- </div>
1960
- <p class="MsoNormal">&#xA0;</p>
1961
- </div>
1962
- OUTPUT
1963
- end
1964
-
1965
- it "propagates alignment of table cells (Word)" do
1966
- FileUtils.rm_f "test.doc"
1967
- FileUtils.rm_f "test.html"
1968
- IsoDoc::WordConvert.new(options)
1969
- .convert("test", <<~"INPUT", false)
1970
- <iso-standard xmlns="http://riboseinc.com/isoxml">
1971
- <preface><foreword>
1972
- <table id="_fe12b8f8-6858-4cd6-af7d-d4b6f3ebd1a7" unnumbered="true"><thead><tr>
1973
- <td rowspan="2" align="left">
1974
- <p id="_c47d9b39-adb2-431d-9320-78cb148fdb56">Output wavelength</p>
1975
- <p id="_c47d9b39-adb2-431d-9320-78cb148fdb57">Output wavelength</p>
1976
- </td>
1977
- <th colspan="3" align="right"><p id="_c47d9b39-adb2-431d-9320-78cb148fdb58">Predictive wavelengths</p></th>
1978
- </tr>
1979
- </thead>
1980
- </table>
1981
- </preface>
1982
- </iso-standard>
1983
- INPUT
1984
- word = File.read("test.doc")
1985
- .sub(/^.*<div class="WordSection2">/m, '<div class="WordSection2" xmlns:m="m">')
1986
- .sub(%r{<p class="MsoNormal">\s*<br clear="all" class="section"/>\s*</p>\s*<div class="WordSection3">.*$}m, "")
1987
- .sub(/src="[^"]+"/, 'src="_"')
1988
- expect(xmlpp(word)).to be_equivalent_to xmlpp(<<~"OUTPUT")
1989
- <div class='WordSection2' xmlns:m='m'>
1990
- <p class='MsoNormal'>
1991
- <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
1992
- </p>
1993
- <div>
1994
- <h1 class='ForewordTitle'>Foreword</h1>
1995
- <div align='center' class="table_container">
1996
- <table class='MsoISOTable' style='mso-table-anchor-horizontal:column;mso-table-overlap:never;border-spacing:0;border-width:1px;'>
1997
- <a name='_fe12b8f8-6858-4cd6-af7d-d4b6f3ebd1a7' id='_fe12b8f8-6858-4cd6-af7d-d4b6f3ebd1a7'/>
1998
- <thead>
1999
- <tr>
2000
- <td rowspan='2' align='left' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;'>
2001
- <p style='text-align: left' class='MsoNormal'>
2002
- <a name='_c47d9b39-adb2-431d-9320-78cb148fdb56' id='_c47d9b39-adb2-431d-9320-78cb148fdb56'/>
2003
- Output wavelength
2004
- </p>
2005
- <p style='text-align: left' class='MsoNormal'>
2006
- <a name='_c47d9b39-adb2-431d-9320-78cb148fdb57' id='_c47d9b39-adb2-431d-9320-78cb148fdb57'/>
2007
- Output wavelength
2008
- </p>
2009
- </td>
2010
- <th colspan='3' align='right' style='font-weight:bold;border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>
2011
- <p style='text-align: right' class='MsoNormal'>
2012
- <a name='_c47d9b39-adb2-431d-9320-78cb148fdb58' id='_c47d9b39-adb2-431d-9320-78cb148fdb58'/>
2013
- Predictive wavelengths
2014
- </p>
2015
- </th>
2016
- </tr>
2017
- </thead>
2018
- </table>
2019
- </div>
2020
- </div>
2021
- <p class='MsoNormal'>&#xA0;</p>
2022
- </div>
2023
- OUTPUT
2024
- end
2025
-
2026
- it "cleans up boilerplate" do
2027
- input = <<~INPUT
2028
- <html>
2029
- <head/>
2030
- <body>
2031
- <div class="main-section">
2032
- <div id="boilerplate-copyright"> <h1>Copyright</h1> </div>
2033
- <div id="boilerplate-license"> <h1>License</h1> </div>
2034
- <div id="boilerplate-legal"> <h1>Legal</h1> </div>
2035
- <div id="boilerplate-feedback"> <h1>Feedback</h1> </div>
2036
- <hr/>
2037
- <div id="boilerplate-feedback-destination"/>
2038
- <div id="boilerplate-legal-destination"/>
2039
- <div id="boilerplate-license-destination"/>
2040
- <div id="boilerplate-copyright-destination"/>
2041
- </div>
2042
- </body>
2043
- </html>
2044
- INPUT
2045
- html = <<~OUTPUT
2046
- <main class='main-section'>
2047
- <button onclick='topFunction()' id='myBtn' title='Go to top'>Top</button>
2048
- <hr/>
2049
- <div id='boilerplate-feedback'>
2050
- <h1 class='IntroTitle'>Feedback</h1>
2051
- </div>
2052
- <div id='boilerplate-legal'>
2053
- <h1 class='IntroTitle'>Legal</h1>
2054
- </div>
2055
- <div id='boilerplate-license'>
2056
- <h1 class='IntroTitle'>License</h1>
2057
- </div>
2058
- <div id='boilerplate-copyright'>
2059
- <h1 class='IntroTitle'>Copyright</h1>
2060
- </div>
2061
- </main>
2062
- OUTPUT
2063
- doc = <<~OUTPUT
2064
- <html>
2065
- <head/>
2066
- <body>
2067
- <div class='main-section'>
2068
- <hr/>
2069
- <div id='boilerplate-feedback'>
2070
- <p class='TitlePageSubhead'>Feedback</p>
2071
- </div>
2072
- <div id='boilerplate-legal'>
2073
- <p class='TitlePageSubhead'>Legal</p>
2074
- </div>
2075
- <div id='boilerplate-license'>
2076
- <p class='TitlePageSubhead'>License</p>
2077
- </div>
2078
- <div id='boilerplate-copyright'>
2079
- <p class='TitlePageSubhead'>Copyright</p>
2080
- </div>
2081
- </div>
2082
- </body>
2083
- </html>
2084
- OUTPUT
2085
- expect(xmlpp(IsoDoc::HtmlConvert
2086
- .new(wordstylesheet: "spec/assets/word.css",
2087
- htmlstylesheet: "spec/assets/html.scss", filename: "test")
2088
- .html_preface(Nokogiri::XML(input)).to_xml)
2089
- .sub(/^.*<main/m, "<main").sub(%r{</main>.*$}m, "</main>"))
2090
- .to be_equivalent_to xmlpp(html)
2091
- expect(xmlpp(IsoDoc::WordConvert
2092
- .new(wordstylesheet: "spec/assets/word.css",
2093
- htmlstylesheet: "spec/assets/html.scss", filename: "test")
2094
- .word_cleanup(Nokogiri::XML(input)).to_xml)
2095
- .sub(/^.*<main/m, "<main").sub(%r{</main>.*$}m, "</main>"))
2096
- .to be_equivalent_to xmlpp(doc)
2097
- end
2098
-
2099
- it "cleans up coverpage note" do
2100
- input = <<~INPUT
2101
- <html>
2102
- <head/>
2103
- <body>
2104
- <div class="main-section">
2105
- <div id='FB' class='Note' coverpage='true'>
2106
- <p><span class='note_label'>NOTE</span>&#160; XYZ</p>
2107
- </div>
2108
- <div id='FC' class='Admonition' coverpage='true'>
2109
- <p class='AdmonitionTitle' style='text-align:center;'>WARNING</p>
2110
- <p>XYZ</p>
2111
- </div>
2112
- <hr/>
2113
- <div id="coverpage-note-destination"/>
2114
- </div>
2115
- </body>
2116
- </html>
2117
- INPUT
2118
- html = <<~OUTPUT
2119
- <main class='main-section'>
2120
- <button onclick='topFunction()' id='myBtn' title='Go to top'>Top</button>
2121
- <hr/>
2122
- <div id='coverpage-note-destination'>
2123
- <div id='FB' class='Note'>
2124
- <p>
2125
- <span class='note_label'>NOTE</span>
2126
- &#xA0; XYZ
2127
- </p>
2128
- </div>
2129
- <div id='FC' class='Admonition'>
2130
- <p class='AdmonitionTitle' style='text-align:center;'>WARNING</p>
2131
- <p>XYZ</p>
2132
- </div>
2133
- </div>
2134
- </main>
2135
- OUTPUT
2136
- doc = <<~OUTPUT
2137
- <html>
2138
- <head/>
2139
- <body>
2140
- <div class='main-section'>
2141
- <hr/>
2142
- <div id='coverpage-note-destination'>
2143
- <div id='FB' class='Note'>
2144
- <p>
2145
- <span class='note_label'>NOTE</span>
2146
- &#xA0; XYZ
2147
- </p>
2148
- </div>
2149
- <div id='FC' class='Admonition'>
2150
- <p class='AdmonitionTitle' style='text-align:center;'>WARNING</p>
2151
- <p>XYZ</p>
2152
- </div>
2153
- </div>
2154
- </div>
2155
- </body>
2156
- </html>
2157
- OUTPUT
2158
- expect(xmlpp(IsoDoc::HtmlConvert
2159
- .new(wordstylesheet: "spec/assets/word.css",
2160
- htmlstylesheet: "spec/assets/html.scss", filename: "test")
2161
- .html_preface(Nokogiri::XML(input)).to_xml)
2162
- .sub(/^.*<main/m, "<main").sub(%r{</main>.*$}m, "</main>"))
2163
- .to be_equivalent_to xmlpp(html)
2164
- expect(xmlpp(IsoDoc::WordConvert
2165
- .new(wordstylesheet: "spec/assets/word.css",
2166
- htmlstylesheet: "spec/assets/html.scss", filename: "test")
2167
- .word_cleanup(Nokogiri::XML(input)).to_xml)
2168
- .sub(/^.*<main/m, "<main").sub(%r{</main>.*$}m, "</main>"))
2169
- .to be_equivalent_to xmlpp(doc)
2170
- end
2171
-
2172
- it "removes coverpage note destination if unused" do
2173
- input = <<~INPUT
2174
- <html>
2175
- <head/>
2176
- <body>
2177
- <div class="main-section">
2178
- <div id='FB' class='Note'>
2179
- <p><span class='note_label'>NOTE</span>&#160; XYZ</p>
2180
- </div>
2181
- <div id='FC' class='Admonition'>
2182
- <p class='AdmonitionTitle' style='text-align:center;'>WARNING</p>
2183
- <p>XYZ</p>
2184
- </div>
2185
- <hr/>
2186
- <div id="coverpage-note-destination"/>
2187
- </div>
2188
- </body>
2189
- </html>
2190
- INPUT
2191
- html = <<~OUTPUT
2192
- <main class='main-section'>
2193
- <button onclick='topFunction()' id='myBtn' title='Go to top'>Top</button>
2194
- <div id='FB' class='Note'>
2195
- <p>
2196
- <span class='note_label'>NOTE</span>
2197
- &#xA0; XYZ
2198
- </p>
2199
- </div>
2200
- <div id='FC' class='Admonition'>
2201
- <p class='AdmonitionTitle' style='text-align:center;'>WARNING</p>
2202
- <p>XYZ</p>
2203
- </div>
2204
- <hr/>
2205
- </main>
2206
- OUTPUT
2207
- doc = <<~OUTPUT
2208
- <html>
2209
- <head/>
2210
- <body>
2211
- <div class='main-section'>
2212
- <div id='FB' class='Note'>
2213
- <p>
2214
- <span class='note_label'>NOTE</span>
2215
- &#xA0; XYZ
2216
- </p>
2217
- </div>
2218
- <div id='FC' class='Admonition'>
2219
- <p class='AdmonitionTitle' style='text-align:center;'>WARNING</p>
2220
- <p>XYZ</p>
2221
- </div>
2222
- <hr/>
2223
- </div>
2224
- </body>
2225
- </html>
2226
- OUTPUT
2227
- expect(xmlpp(IsoDoc::HtmlConvert
2228
- .new(wordstylesheet: "spec/assets/word.css",
2229
- htmlstylesheet: "spec/assets/html.scss", filename: "test")
2230
- .html_preface(Nokogiri::XML(input)).to_xml)
2231
- .sub(/^.*<main/m, "<main").sub(%r{</main>.*$}m, "</main>"))
2232
- .to be_equivalent_to xmlpp(html)
2233
- expect(xmlpp(IsoDoc::WordConvert
2234
- .new(wordstylesheet: "spec/assets/word.css",
2235
- htmlstylesheet: "spec/assets/html.scss", filename: "test")
2236
- .word_cleanup(Nokogiri::XML(input)).to_xml)
2237
- .sub(/^.*<main/m, "<main").sub(%r{</main>.*$}m, "</main>"))
2238
- .to be_equivalent_to xmlpp(doc)
2239
- end
2240
-
2241
- it "deals with landscape and portrait pagebreaks (Word)" do
2242
- FileUtils.rm_f "test.doc"
2243
- IsoDoc::WordConvert.new(
2244
- { wordstylesheet: "spec/assets/word.css",
2245
- htmlstylesheet: "spec/assets/html.scss", filename: "test" },
2246
- ).convert("test", <<~"INPUT", false)
2247
- <standard-document xmlns="http://riboseinc.com/isoxml">
2248
- <bibdata type="standard">
2249
- <title language="en" format="text/plain">Document title</title>
2250
- <version>
2251
- <draft>1.2</draft>
2252
- </version>
2253
- <language>en</language>
2254
- <script>Latn</script>
2255
- <status><stage>published</stage></status>
2256
- <ext>
2257
- <doctype>article</doctype>
2258
- </ext>
2259
- </bibdata>
2260
- <preface>
2261
- <introduction><title>Preface 1</title>
2262
- <p align="center">This is a <pagebreak orientation="landscape"/> paragraph</p>
2263
- <table>
2264
- <tbody>
2265
- <tr><td>A</td><td>B</td></tr>
2266
- </tbody>
2267
- </table>
2268
- <clause><title>Preface 1.1</title>
2269
- <p>On my side</p>
2270
- <pagebreak orientation="portrait"/>
2271
- <p>Upright again</p>
2272
- </clause>
2273
- <clause><title>Preface 1.3</title>
2274
- <p>And still upright</p>
2275
- </clause>
2276
- </introduction>
2277
- </preface>
2278
- <sections><clause><title>Foreword</title>
2279
- <note>
2280
- <p id="_">For further information on the Foreword, see <strong>ISO/IEC Directives, Part 2, 2016, Clause 12.</strong></p>
2281
- <pagebreak orientation="landscape"/>
2282
- <table id="_c09a7e60-b0c7-4418-9bfc-2ef0bc09a249">
2283
- <thead>
2284
- <tr>
2285
- <th align="left">A</th>
2286
- <th align="left">B</th>
2287
- </tr>
2288
- </thead>
2289
- <tbody>
2290
- <tr>
2291
- <td align="left">C</td>
2292
- <td align="left">D</td>
2293
- </tr>
2294
- </tbody>
2295
- <note id="_8fff1596-290e-4314-b03c-7a8aab97eebe">
2296
- <p id="_32c22439-387a-48cf-a006-5ab3b934ba73">B</p>
2297
- </note></table>
2298
- <pagebreak orientation="portrait"/>
2299
- <p>And up</p>
2300
- </note>
2301
- <pagebreak orientation="portrait"/>
2302
- </clause></sections>
2303
- <annex id="_level_1" inline-header="false" obligation="normative">
2304
- <title>Annex 1</title>
2305
- </annex>
2306
- </standard-document>
2307
- INPUT
2308
- expect(File.exist?("test.doc")).to be true
2309
- html = File.read("test.doc", encoding: "UTF-8")
2310
- expect(html).to include "div.WordSection2_0 {page:WordSection2P;}"
2311
- expect(html).to include "div.WordSection2_1 {page:WordSection2L;}"
2312
- expect(html).to include "div.WordSection3_0 {page:WordSection3P;}"
2313
- expect(html).to include "div.WordSection3_1 {page:WordSection3P;}"
2314
- expect(html).to include "div.WordSection3_2 {page:WordSection3L;}"
2315
-
2316
- expect(xmlpp(html.sub(/^.*<body /m, "<body ")
2317
- .sub(%r{</body>.*$}m, "</body>"))).to be_equivalent_to xmlpp(<<~"OUTPUT")
2318
- <body lang='EN-US' xml:lang='EN-US' link='blue' vlink='#954F72'>
2319
- <div class='WordSection1'>
2320
- <p class='MsoNormal'>&#xA0;</p>
2321
- </div>
2322
- <p class='MsoNormal'>
2323
- <br clear='all' class='section'/>
2324
- </p>
2325
- <div class='WordSection2'>
2326
- <p class='MsoNormal'>
2327
- <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
2328
- </p>
2329
- <div class='Section3' id=''>
2330
- <h1 class='IntroTitle'>Preface 1</h1>
2331
- <p align='center' style='text-align:center;' class='MsoNormal'>
2332
- This is a
2333
- <p class='MsoNormal'>
2334
- <br clear='all' class='section'/>
2335
- </p>
2336
- paragraph
2337
- </p>
2338
- </div>
2339
- </div>
2340
- <div class='WordSection2_1'>
2341
- <div align='center' class='table_container'>
2342
- <table class='MsoISOTable' style='mso-table-anchor-horizontal:column;mso-table-overlap:never;border-spacing:0;border-width:1px;'>
2343
- <tbody>
2344
- <tr>
2345
- <td style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>A</td>
2346
- <td style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>B</td>
2347
- </tr>
2348
- </tbody>
2349
- </table>
2350
- </div>
2351
- <div>
2352
- <h2>Preface 1.1</h2>
2353
- <p class='MsoNormal'>On my side</p>
2354
- <p class='MsoNormal'>
2355
- <br clear='all' class='section'/>
2356
- </p>
2357
- </div>
2358
- </div>
2359
- <div class='WordSection2_0'>
2360
- <p class='MsoNormal'>Upright again</p>
2361
- <div>
2362
- <h2>Preface 1.3</h2>
2363
- <p class='MsoNormal'>And still upright</p>
2364
- </div>
2365
- <p class='MsoNormal'>&#xA0;</p>
2366
- </div>
2367
- <p class='MsoNormal'>
2368
- <br clear='all' class='section'/>
2369
- </p>
2370
- <div class='WordSection3'>
2371
- <p class='zzSTDTitle1'>Document title</p>
2372
- <div>
2373
- <h1>Foreword</h1>
2374
- <div class='Note'>
2375
- <p class='Note'>
2376
- <span class='note_label'/>
2377
- <span style='mso-tab-count:1'>&#xA0; </span>
2378
- For further information on the Foreword, see
2379
- <b>ISO/IEC Directives, Part 2, 2016, Clause 12.</b>
2380
- </p>
2381
- <p class='Note'>
2382
- <br clear='all' class='section'/>
2383
- </p>
2384
- </div>
2385
- </div>
2386
- </div>
2387
- <div class='WordSection3_2'>
2388
- <div align='center' class='table_container'>
2389
- <table class='MsoISOTable' style='mso-table-anchor-horizontal:column;mso-table-overlap:never;border-spacing:0;border-width:1px;'>
2390
- <a name='_c09a7e60-b0c7-4418-9bfc-2ef0bc09a249' id='_c09a7e60-b0c7-4418-9bfc-2ef0bc09a249'/>
2391
- <thead>
2392
- <tr>
2393
- <th align='left' style='font-weight:bold;border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>A</th>
2394
- <th align='left' style='font-weight:bold;border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>B</th>
2395
- </tr>
2396
- </thead>
2397
- <tbody>
2398
- <tr>
2399
- <td align='left' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>C</td>
2400
- <td align='left' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>D</td>
2401
- </tr>
2402
- </tbody>
2403
- <tfoot>
2404
- <tr>
2405
- <td colspan='2' style='border-top:0pt;mso-border-top-alt:0pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>
2406
- <div class='Note'>
2407
- <a name='_8fff1596-290e-4314-b03c-7a8aab97eebe' id='_8fff1596-290e-4314-b03c-7a8aab97eebe'/>
2408
- <p class='Note'>
2409
- <span class='note_label'/>
2410
- <span style='mso-tab-count:1'>&#xA0; </span>
2411
- B
2412
- </p>
2413
- </div>
2414
- </td>
2415
- </tr>
2416
- </tfoot>
2417
- </table>
2418
- </div>
2419
- <p class='Note'>
2420
- <br clear='all' class='section'/>
2421
- </p>
2422
- </div>
2423
- <div class='WordSection3_1'>
2424
- <p class='Note'>And up</p>
2425
- <p class='MsoNormal'>
2426
- <br clear='all' class='section'/>
2427
- </p>
2428
- </div>
2429
- <div class='WordSection3_0'>
2430
- <div class='Section3'>
2431
- <a name='_level_1' id='_level_1'/>
2432
- <h1 class='Annex'>Annex 1</h1>
2433
- </div>
2434
- </div>
2435
- <div style='mso-element:footnote-list'/>
2436
- </body>
2437
- OUTPUT
2438
- end
2439
-
2440
- it "expands out nested tables in Word" do
2441
- input = <<~INPUT
2442
- <html>
2443
- <head/>
2444
- <body>
2445
- <div class="main-section">
2446
- <table id="_7830dff8-419e-4b9e-85cf-a063689f44ca" class="recommend" style="border-collapse:collapse;border-spacing:0;"><thead><tr style="background:#A5A5A5;"><th style="vertical-align:top;" class="recommend" colspan="2"><p class="RecommendationTitle">Requirement 1:</p></th></tr></thead><tbody><tr><td style="vertical-align:top;" class="recommend" colspan="2"><p>requirement label</p></td></tr>
2447
- <table id="_a0f8c202-fd34-460c-bd5e-b2f4cc29210d" class="recommend" style="border-collapse:collapse;border-spacing:0;"><thead><tr style="background:#A5A5A5;"><th style="vertical-align:top;" class="recommend" colspan="2"><p class="RecommendationTitle">Requirement 1-1:</p></th></tr></thead><tbody><tr style="background:#C9C9C9;"><td style="vertical-align:top;" class="recommend" colspan="2">
2448
- <p id="_2e2c247b-ce4c-48c5-96dd-f3e090a5b4a7">Description text</p>
2449
- </td></tr></tbody></table>
2450
- </tbody></table>
2451
- </div>
2452
- <div id="_second_sample"><h2>1.2.<span style="mso-tab-count:1">&#xA0; </span>Second sample</h2>
2453
- <table id="_9846c486-14e5-4b1c-bb2f-55cc254dd309" class="recommend" style="border-collapse:collapse;border-spacing:0;"><thead><tr style="background:#A5A5A5;"><th style="vertical-align:top;" class="recommend" colspan="2"><p class="RecommendationTitle">Requirement 2:</p></th></tr></thead><tbody><tr><td style="vertical-align:top;" class="recommend" colspan="2"><p>requirement label</p></td></tr><table id="_62de974c-7128-44d6-ba86-99f818f1d467" class="recommend" style="border-collapse:collapse;border-spacing:0;"><thead><tr style="background:#A5A5A5;"><th style="vertical-align:top;" class="recommend" colspan="2"><p class="RecommendationTitle">Requirement 2-1:</p></th></tr></thead><tbody><tr style="background:#C9C9C9;"><td style="vertical-align:top;" class="recommend" colspan="2">
2454
- <p id="_30b90b08-bd71-4497-bbcc-8c61fbb9f772">Description text</p>
2455
- </td></tr></tbody></table>
2456
- <table id="_fede5681-71f6-47bb-bc65-7bd0b11acd01" class="recommend" style="border-collapse:collapse;border-spacing:0;"><thead><tr style="background:#A5A5A5;"><th style="vertical-align:top;" class="recommend" colspan="2"><p class="RecommendationTitle">Requirement 2-2:</p></th></tr></thead><tbody><tr><td style="vertical-align:top;" class="recommend" colspan="2">
2457
- <p id="_8daa3d74-90fd-4a57-9169-de457a68cfda">Description text</p>
2458
- </td></tr></tbody></table></tbody></table>
2459
- </div>
2460
- </body>
2461
- </html>
2462
- INPUT
2463
- output = <<~OUTPUT
2464
- <html>
2465
- <head/>
2466
- <body>
2467
- <div class='main-section'>
2468
- <table id='_7830dff8-419e-4b9e-85cf-a063689f44ca' class='recommend' style='border-collapse:collapse;border-spacing:0;'>
2469
- <thead>
2470
- <tr style='background:#A5A5A5;'>
2471
- <th style='vertical-align:top;' class='recommend' colspan='2'>
2472
- <p class='RecommendationTitle'>Requirement 1:</p>
2473
- </th>
2474
- </tr>
2475
- </thead>
2476
- <tbody>
2477
- <tr>
2478
- <td style='vertical-align:top;' class='recommend' colspan='2'>
2479
- <p>requirement label</p>
2480
- </td>
2481
- </tr>
2482
- </tbody>
2483
- </table>
2484
- <table id='_a0f8c202-fd34-460c-bd5e-b2f4cc29210d' class='recommend' style='border-collapse:collapse;border-spacing:0;'>
2485
- <thead>
2486
- <tr style='background:#A5A5A5;'>
2487
- <th style='vertical-align:top;' class='recommend' colspan='2'>
2488
- <p class='RecommendationTitle'>Requirement 1-1:</p>
2489
- </th>
2490
- </tr>
2491
- </thead>
2492
- <tbody>
2493
- <tr style='background:#C9C9C9;'>
2494
- <td style='vertical-align:top;' class='recommend' colspan='2'>
2495
- <p id='_2e2c247b-ce4c-48c5-96dd-f3e090a5b4a7'>Description text</p>
2496
- </td>
2497
- </tr>
2498
- </tbody>
2499
- </table>
2500
- </div>
2501
- <div id='_second_sample'>
2502
- <h2>
2503
- 1.2.
2504
- <span style='mso-tab-count:1'>&#xA0; </span>
2505
- Second sample
2506
- </h2>
2507
- <table id='_9846c486-14e5-4b1c-bb2f-55cc254dd309' class='recommend' style='border-collapse:collapse;border-spacing:0;'>
2508
- <thead>
2509
- <tr style='background:#A5A5A5;'>
2510
- <th style='vertical-align:top;' class='recommend' colspan='2'>
2511
- <p class='RecommendationTitle'>Requirement 2:</p>
2512
- </th>
2513
- </tr>
2514
- </thead>
2515
- <tbody>
2516
- <tr>
2517
- <td style='vertical-align:top;' class='recommend' colspan='2'>
2518
- <p>requirement label</p>
2519
- </td>
2520
- </tr>
2521
- </tbody>
2522
- </table>
2523
- <table id='_62de974c-7128-44d6-ba86-99f818f1d467' class='recommend' style='border-collapse:collapse;border-spacing:0;'>
2524
- <thead>
2525
- <tr style='background:#A5A5A5;'>
2526
- <th style='vertical-align:top;' class='recommend' colspan='2'>
2527
- <p class='RecommendationTitle'>Requirement 2-1:</p>
2528
- </th>
2529
- </tr>
2530
- </thead>
2531
- <tbody>
2532
- <tr style='background:#C9C9C9;'>
2533
- <td style='vertical-align:top;' class='recommend' colspan='2'>
2534
- <p id='_30b90b08-bd71-4497-bbcc-8c61fbb9f772'>Description text</p>
2535
- </td>
2536
- </tr>
2537
- </tbody>
2538
- </table>
2539
- <table id='_fede5681-71f6-47bb-bc65-7bd0b11acd01' class='recommend' style='border-collapse:collapse;border-spacing:0;'>
2540
- <thead>
2541
- <tr style='background:#A5A5A5;'>
2542
- <th style='vertical-align:top;' class='recommend' colspan='2'>
2543
- <p class='RecommendationTitle'>Requirement 2-2:</p>
2544
- </th>
2545
- </tr>
2546
- </thead>
2547
- <tbody>
2548
- <tr>
2549
- <td style='vertical-align:top;' class='recommend' colspan='2'>
2550
- <p id='_8daa3d74-90fd-4a57-9169-de457a68cfda'>Description text</p>
2551
- </td>
2552
- </tr>
2553
- </tbody>
2554
- </table>
2555
- </div>
2556
- </body>
2557
- </html>
2558
- OUTPUT
2559
- expect(xmlpp(IsoDoc::WordConvert
2560
- .new(wordstylesheet: "spec/assets/word.css",
2561
- htmlstylesheet: "spec/assets/html.scss", filename: "test")
2562
- .word_cleanup(Nokogiri::XML(input)).to_xml)
2563
- .sub(/^.*<main/m, "<main").sub(%r{</main>.*$}m, "</main>"))
2564
- .to be_equivalent_to xmlpp(output)
2565
- end
2566
-
2567
- it "allocate widths to tables (Word)" do
2568
- input = <<~INPUT
2569
- <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en">
2570
- <head><style/></head>
2571
- <body lang='EN-US' link='blue' vlink='#954F72'>
2572
- <div class='WordSection1'>
2573
- <p>&#160;</p>
2574
- </div>
2575
- <p>
2576
- <br clear='all' class='section'/>
2577
- </p>
2578
- <div class='WordSection2'>
2579
- <p>
2580
- <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
2581
- </p>
2582
- <div>
2583
- <h1 class='ForewordTitle'>Foreword</h1>
2584
- <p class='TableTitle' style='text-align:center;'>
2585
- Table 1&#160;&#8212; Repeatability and reproducibility of
2586
- <i>husked</i>
2587
- rice yield
2588
- <span style='mso-bookmark:_Ref'>
2589
- <a class='FootnoteRef' href='#ftn1' epub:type='footnote'>
2590
- <sup>1</sup>
2591
- </a>
2592
- </span>
2593
- </p>
2594
- <div align='center' class='table_container'>
2595
- <table id='tableD-1' class='MsoISOTable' style='mso-table-anchor-horizontal:column;mso-table-overlap:never;border-spacing:0;border-width:1px;page-break-after: avoid;page-break-inside: avoid;' title='tool tip' summary='long desc' width='70%'>
2596
- <colgroup>
2597
- <col width='30%'/>
2598
- <col width='20%'/>
2599
- <col width='20%'/>
2600
- <col width='20%'/>
2601
- <col width='10%'/>
2602
- </colgroup>
2603
- <thead>
2604
- <tr>
2605
- <td rowspan='2' align='left' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>Description</td>
2606
- <td colspan='4' align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;'>Rice sample</td>
2607
- </tr>
2608
- <tr>
2609
- <td align='left' valign="top" style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>Arborio</td>
2610
- <td align='center' valign="middle" style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>
2611
- Drago
2612
- <a href='#tableD-1a' class='TableFootnoteRef'>a</a>
2613
- <aside>
2614
- <div id='ftntableD-1a'>
2615
- <span>
2616
- <span id='tableD-1a' class='TableFootnoteRef'>a</span>
2617
- <span style='mso-tab-count:1'>&#160; </span>
2618
- </span>
2619
- <p id='_0fe65e9a-5531-408e-8295-eeff35f41a55'>Parboiled rice.</p>
2620
- </div>
2621
- </aside>
2622
- </td>
2623
- <td align='center' valign="bottom" style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>
2624
- Balilla
2625
- <a href='#tableD-1a' class='TableFootnoteRef'>a</a>
2626
- </td>
2627
- <td align='center' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>Thaibonnet</td>
2628
- </tr>
2629
- </thead>
2630
- <tbody>
2631
- <tr>
2632
- <th align='left' style='font-weight:bold;border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;'>Number of laboratories retained after eliminating outliers</th>
2633
- <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;'>13</td>
2634
- <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;'>11</td>
2635
- <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;'>13</td>
2636
- <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;'>13</td>
2637
- </tr>
2638
- <tr>
2639
- <td align='left' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>Mean value, g/100 g</td>
2640
- <td align='center' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>81,2</td>
2641
- <td align='center' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>82,0</td>
2642
- <td align='center' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>81,8</td>
2643
- <td align='center' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>77,7</td>
2644
- </tr>
2645
- </tbody>
2646
- <tfoot>
2647
- <tr>
2648
- <td align='left' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>
2649
- Reproducibility limit,
2650
- <span class='stem'>(#(R)#)</span>
2651
- (= 2,83
2652
- <span class='stem'>(#(s_R)#)</span>
2653
- )
2654
- </td>
2655
- <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>2,89</td>
2656
- <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>0,57</td>
2657
- <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>2,26</td>
2658
- <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>6,06</td>
2659
- </tr>
2660
- </tfoot>
2661
- <table class='dl'>
2662
- <tr>
2663
- <td valign='top' align='left'>
2664
- <p align='left' style='margin-left:0pt;text-align:left;'>Drago</p>
2665
- </td>
2666
- <td valign='top'>A type of rice</td>
2667
- </tr>
2668
- </table>
2669
- <div class='Note'>
2670
- <p class='Note'>
2671
- <span class='note_label'>NOTE</span>
2672
- <span style='mso-tab-count:1'>&#160; </span>
2673
- This is a table about rice
2674
- </p>
2675
- </div>
2676
- </table>
2677
- </div>
2678
- <div align='center' class='table_container'>
2679
- <table id='tableD-2' class='MsoISOTable' style='mso-table-anchor-horizontal:column;mso-table-overlap:never;border-spacing:0;border-width:1px;'>
2680
- <tbody>
2681
- <tr>
2682
- <td style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>A</td>
2683
- </tr>
2684
- </tbody>
2685
- </table>
2686
- </div>
2687
- </div>
2688
- <p>&#160;</p>
2689
- </div>
2690
- <p>
2691
- <br clear='all' class='section'/>
2692
- </p>
2693
- <div class='WordSection3'>
2694
- <p class='zzSTDTitle1'/>
2695
- <aside id='ftn1'>
2696
- <p>X</p>
2697
- </aside>
2698
- </div>
2699
- </body>
2700
- </html>
2701
- INPUT
2702
- output = <<~OUTPUT
2703
- <html xmlns:epub='http://www.idpf.org/2007/ops' lang='en'>
2704
- <head>
2705
- <style/>
2706
- </head>
2707
- <body lang='EN-US' link='blue' vlink='#954F72'>
2708
- <div class='WordSection1'>
2709
- <p>&#xA0;</p>
2710
- </div>
2711
- <p>
2712
- <br clear='all' class='section'/>
2713
- </p>
2714
- <div class='WordSection2'>
2715
- <p>
2716
- <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
2717
- </p>
2718
- <div>
2719
- <h1 class='ForewordTitle'>Foreword</h1>
2720
- <p class='TableTitle' style='text-align:center;'>
2721
- Table 1&#xA0;&#x2014; Repeatability and reproducibility of
2722
- <i>husked</i>
2723
- rice yield
2724
- <span style='mso-bookmark:_Ref'>
2725
- <a class='FootnoteRef' href='#ftn1' epub:type='footnote'>
2726
- <sup>1</sup>
2727
- </a>
2728
- </span>
2729
- </p>
2730
- <div align='center' class='table_container'>
2731
- <table id='tableD-1' class='MsoISOTable' style='mso-table-anchor-horizontal:column;mso-table-overlap:never;border-spacing:0;border-width:1px;page-break-after: avoid;page-break-inside: avoid;' title='tool tip' summary='long desc' width='70%'>
2732
- <colgroup>
2733
- <col width='30%'/>
2734
- <col width='20%'/>
2735
- <col width='20%'/>
2736
- <col width='20%'/>
2737
- <col width='10%'/>
2738
- </colgroup>
2739
- <thead>
2740
- <tr>
2741
- <td rowspan='2' align='left' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='30.0%'>Description</td>
2742
- <td colspan='4' align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;' width='70.0%'>Rice sample</td>
2743
- </tr>
2744
- <tr>
2745
- <td align='left' valign='top' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='20.0%'>Arborio</td>
2746
- <td align='center' valign='middle' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='20.0%'>
2747
- Drago
2748
- <a href='#tableD-1a' class='TableFootnoteRef'>a</a>
2749
- <aside>
2750
- <div id='ftntableD-1a'>
2751
- <span>
2752
- <span id='tableD-1a' class='TableFootnoteRef'>a</span>
2753
- <span style='mso-tab-count:1'>&#xA0; </span>
2754
- </span>
2755
- <p id='_0fe65e9a-5531-408e-8295-eeff35f41a55'>Parboiled rice.</p>
2756
- </div>
2757
- </aside>
2758
- </td>
2759
- <td align='center' valign='bottom' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='20.0%'>
2760
- Balilla
2761
- <a href='#tableD-1a' class='TableFootnoteRef'>a</a>
2762
- </td>
2763
- <td align='center' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='10.0%'>Thaibonnet</td>
2764
- </tr>
2765
- </thead>
2766
- <tbody>
2767
- <tr>
2768
- <th align='left' style='font-weight:bold;border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;' width='30.0%'>Number of laboratories retained after eliminating outliers</th>
2769
- <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;' width='20.0%'>13</td>
2770
- <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;' width='20.0%'>11</td>
2771
- <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;' width='20.0%'>13</td>
2772
- <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;' width='10.0%'>13</td>
2773
- </tr>
2774
- <tr>
2775
- <td align='left' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='30.0%'>Mean value, g/100 g</td>
2776
- <td align='center' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='20.0%'>81,2</td>
2777
- <td align='center' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='20.0%'>82,0</td>
2778
- <td align='center' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='20.0%'>81,8</td>
2779
- <td align='center' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='10.0%'>77,7</td>
2780
- </tr>
2781
- </tbody>
2782
- <tfoot>
2783
- <tr>
2784
- <td align='left' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='30.0%'>
2785
- Reproducibility limit,
2786
- <span class='stem'>(#(R)#)</span>
2787
- (= 2,83
2788
- <span class='stem'>(#(s_R)#)</span>
2789
- )
2790
- </td>
2791
- <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='20.0%'>2,89</td>
2792
- <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='20.0%'>0,57</td>
2793
- <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='20.0%'>2,26</td>
2794
- <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='10.0%'>6,06</td>
2795
- </tr>
2796
- </tfoot>
2797
- <div class='Note'>
2798
- <p class='Note'>
2799
- <span class='note_label'>NOTE</span>
2800
- <span style='mso-tab-count:1'>&#xA0; </span>
2801
- This is a table about rice
2802
- </p>
2803
- </div>
2804
- </table>
2805
- <table class='dl'>
2806
- <tr>
2807
- <td valign='top' align='left'>
2808
- <p align='left' style='margin-left:0pt;text-align:left;'>Drago</p>
2809
- </td>
2810
- <td valign='top'>A type of rice</td>
2811
- </tr>
2812
- </table>
2813
- </div>
2814
- <div align='center' class='table_container'>
2815
- <table id='tableD-2' class='MsoISOTable' style='mso-table-anchor-horizontal:column;mso-table-overlap:never;border-spacing:0;border-width:1px;'>
2816
- <tbody>
2817
- <tr>
2818
- <td style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>A</td>
2819
- </tr>
2820
- </tbody>
2821
- </table>
2822
- </div>
2823
- </div>
2824
- <p>&#xA0;</p>
2825
- </div>
2826
- <p>
2827
- <br clear='all' class='section'/>
2828
- </p>
2829
- <div class='WordSection3'>
2830
- <p class='zzSTDTitle1'/>
2831
- <aside id='ftn1'>
2832
- <p>X</p>
2833
- </aside>
2834
- </div>
2835
- </body>
2836
- </html>
2837
- OUTPUT
2838
- expect(xmlpp(IsoDoc::WordConvert
2839
- .new(wordstylesheet: "spec/assets/word.css",
2840
- htmlstylesheet: "spec/assets/html.scss", filename: "test")
2841
- .word_cleanup(Nokogiri::XML(input)).to_xml)
2842
- .sub(/^.*<main/m, "<main").sub(%r{</main>.*$}m, "</main>"))
2843
- .to be_equivalent_to xmlpp(output)
2844
- end
2845
-
2846
- it "generates bare HTML file" do
2847
- FileUtils.rm_f "test.html"
2848
- IsoDoc::HtmlConvert.new(
2849
- { bare: true,
2850
- htmlstylesheet: "spec/assets/html.scss",
2851
- filename: "test" },
2852
- ).convert("test", <<~"INPUT", false)
2853
- <iso-standard xmlns="http://riboseinc.com/isoxml">
2854
- <bibdata>
2855
- <title language="en">test</title>
2856
- </bibdata>
2857
- <boilerplate>
2858
- <feedback-statement>
2859
- <clause><title>I am boilerplate</title></clause>
2860
- </feedback-statement>
2861
- </boilerplate>
2862
- <preface><foreword>
2863
- <note>
2864
- <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
2865
- </note>
2866
- </foreword></preface>
2867
- </iso-standard>
2868
- INPUT
2869
- output = <<~OUTPUT
2870
- <body lang='en' xml:lang='en'>
2871
- <main class='main-section'>
2872
- <br/>
2873
- <div>
2874
- <h1 class='ForewordTitle'>Foreword</h1>
2875
- <div class='Note'>
2876
- <p>
2877
- &#xA0; These results are based on a study carried out on three
2878
- different types of kernel.
2879
- </p>
2880
- </div>
2881
- </div>
2882
- <p class='zzSTDTitle1'>test</p>
2883
- </main>
2884
- <script/>
2885
- </body>
2886
- OUTPUT
2887
- expect(File.exist?("test.html")).to be true
2888
- html = File.read("test.html")
2889
- .sub(%r{^.*<body}m, "<body")
2890
- .sub(%r{</body>.*$}m, "</body>")
2891
- .gsub(%r{<script.+?</script>}m, "<script/>")
2892
- .sub(%r{(<script/>\s+)+}m, "<script/>")
2893
- expect(xmlpp(html)).to be_equivalent_to xmlpp(output)
2894
- end
2895
-
2896
- it "cleans up lists (HTML)" do
2897
- input = <<~INPUT
2898
- <html xmlns:epub="http://www.idpf.org/2007/ops">
2899
- <head/>
2900
- <body>
2901
- <div class="main-section">
2902
- <ul>
2903
- <div>N1</div>
2904
- <li>A</li>
2905
- <li>B</li>
2906
- <div>N2</div>
2907
- <li>C</li>
2908
- <div>N3</div>
2909
- </div>
2910
- </body>
2911
- </html>
2912
- INPUT
2913
- output = <<~OUTPUT
2914
- <main class='main-section'>
2915
- <button onclick='topFunction()' id='myBtn' title='Go to top'>Top</button>
2916
- <ul>
2917
- <li>
2918
- A
2919
- <div>N1</div>
2920
- </li>
2921
- <li>
2922
- B
2923
- <div>N2</div>
2924
- </li>
2925
- <li>
2926
- C
2927
- <div>N3</div>
2928
- </li>
2929
- </ul>
2930
- </main>
2931
- OUTPUT
2932
- expect(xmlpp(IsoDoc::HtmlConvert
2933
- .new(htmlstylesheet: "spec/assets/html.scss", filename: "test")
2934
- .html_cleanup(Nokogiri::XML(input)).to_xml)
2935
- .sub(/^.*<main/m, "<main").sub(%r{</main>.*$}m, "</main>"))
2936
- .to be_equivalent_to xmlpp(output)
2937
- end
2938
- end