isodoc 2.1.1 → 2.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) 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/class_utils.rb +16 -0
  5. data/lib/isodoc/function/inline.rb +2 -0
  6. data/lib/isodoc/function/lists.rb +24 -9
  7. data/lib/isodoc/function/to_word_html.rb +1 -0
  8. data/lib/isodoc/function/utils.rb +21 -7
  9. data/lib/isodoc/gem_tasks.rb +19 -10
  10. data/lib/isodoc/i18n.rb +19 -0
  11. data/lib/isodoc/metadata.rb +2 -2
  12. data/lib/isodoc/presentation_function/block.rb +7 -3
  13. data/lib/isodoc/presentation_function/image.rb +1 -1
  14. data/lib/isodoc/presentation_function/inline.rb +11 -12
  15. data/lib/isodoc/presentation_function/section.rb +1 -1
  16. data/lib/isodoc/presentation_function/xrefs.rb +23 -9
  17. data/lib/isodoc/presentation_xml_convert.rb +1 -0
  18. data/lib/isodoc/version.rb +1 -1
  19. data/lib/isodoc/word_function/body.rb +6 -3
  20. data/lib/isodoc/word_function/inline.rb +7 -2
  21. data/lib/isodoc/xref/xref_gen.rb +6 -6
  22. data/lib/isodoc/xref.rb +1 -1
  23. data/lib/isodoc-yaml/i18n-ar.yaml +1 -0
  24. data/lib/isodoc-yaml/i18n-de.yaml +1 -0
  25. data/lib/isodoc-yaml/i18n-en.yaml +1 -0
  26. data/lib/isodoc-yaml/i18n-es.yaml +1 -0
  27. data/lib/isodoc-yaml/i18n-fr.yaml +1 -0
  28. data/lib/isodoc-yaml/i18n-ru.yaml +1 -0
  29. data/lib/isodoc-yaml/i18n-zh-Hans.yaml +1 -0
  30. metadata +3 -50
  31. data/.github/workflows/rake.yml +0 -15
  32. data/.github/workflows/release.yml +0 -24
  33. data/.hound.yml +0 -5
  34. data/.oss-guides.rubocop.yml +0 -1077
  35. data/.rubocop.yml +0 -10
  36. data/Rakefile +0 -8
  37. data/bin/rspec +0 -17
  38. data/spec/assets/header.html +0 -7
  39. data/spec/assets/html.scss +0 -20
  40. data/spec/assets/html_override.css +0 -1
  41. data/spec/assets/htmlcover.html +0 -4
  42. data/spec/assets/htmlintro.html +0 -5
  43. data/spec/assets/i18n.yaml +0 -41
  44. data/spec/assets/iso.xml +0 -8
  45. data/spec/assets/odf.emf +0 -0
  46. data/spec/assets/odf.svg +0 -1
  47. data/spec/assets/odf1.svg +0 -4
  48. data/spec/assets/outputtest/a.xml +0 -66
  49. data/spec/assets/outputtest/iso.international-standard.xsl +0 -3011
  50. data/spec/assets/rice_image1 +0 -0
  51. data/spec/assets/rice_image1.png +0 -0
  52. data/spec/assets/scripts.html +0 -3
  53. data/spec/assets/scripts_override.html +0 -3
  54. data/spec/assets/std.css +0 -2
  55. data/spec/assets/word.css +0 -2
  56. data/spec/assets/word_override.css +0 -1
  57. data/spec/assets/wordcover.html +0 -3
  58. data/spec/assets/wordintro.html +0 -4
  59. data/spec/isodoc/blocks_spec.rb +0 -2934
  60. data/spec/isodoc/cleanup_spec.rb +0 -1056
  61. data/spec/isodoc/footnotes_spec.rb +0 -264
  62. data/spec/isodoc/form_spec.rb +0 -160
  63. data/spec/isodoc/i18n_spec.rb +0 -1201
  64. data/spec/isodoc/inline_spec.rb +0 -2301
  65. data/spec/isodoc/lists_spec.rb +0 -469
  66. data/spec/isodoc/metadata_spec.rb +0 -401
  67. data/spec/isodoc/postproc_spec.rb +0 -2938
  68. data/spec/isodoc/presentation_xml_spec.rb +0 -1476
  69. data/spec/isodoc/ref_spec.rb +0 -955
  70. data/spec/isodoc/section_spec.rb +0 -2123
  71. data/spec/isodoc/table_spec.rb +0 -588
  72. data/spec/isodoc/terms_spec.rb +0 -712
  73. data/spec/isodoc/utils_spec.rb +0 -57
  74. data/spec/isodoc/xref_numbering_spec.rb +0 -378
  75. data/spec/isodoc/xref_spec.rb +0 -1837
  76. data/spec/isodoc/xslfo_convert_spec.rb +0 -103
  77. 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