html2doc 0.8.9 → 0.8.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 825c44453c97ff2f83cdd4099e293b8ce78642139a56bed33488e05dfaa22d5f
4
- data.tar.gz: e3643c17f4c31ad1b202df404e45c1b00f52591eefb52779369496bc573819ac
3
+ metadata.gz: d6f39dba753a7c5dd51015dae21f9ea71e236786c11bb0dd36b91e9865e0c312
4
+ data.tar.gz: 5cdaae58206a346c6d160fe881d1a9f8a2bb28f4c6e71d81570d5f4b90ab607b
5
5
  SHA512:
6
- metadata.gz: 6dff48ab65903fac3b334738bc340a044c0a16237aa1980b8151f8468796ed25222dd2f88259ce64cd604788a461f87f2425f2f0ef5e7b4d11e7c7b34be9b333
7
- data.tar.gz: d8fa57c7f1d34798bf2865a728a99df6634db4dd793bc4fae9feebcb13dab0a408b265bd73975043f02f6e0ba94e726aae259efe59eadc94d0a5ad699e0c12e5
6
+ metadata.gz: cc6685a80b9b18c21eaf3720e15dd31ce7e9395e4649238ea8b54c34949c95c9b204b6205bd8e33fae2439f847330442b37b2108401ddb35f18281f57cbb184d
7
+ data.tar.gz: 8c992042353b57b39b906a73a4a5af33965033a25b6e198a2eb96835683d0bc36791641006cd0119e8375ba36fde95a07261438fb2a01f0b1bff758f45045a51
data/.travis.yml CHANGED
@@ -1,16 +1,16 @@
1
- dist: trusty
2
1
  language: ruby
3
- sudo: false
4
-
5
- before_install:
6
- - gem install bundler -v 1.16.1
7
-
2
+ cache: bundler
3
+ os:
4
+ - linux
5
+ - osx
8
6
  rvm:
9
- - 2.5
10
- - 2.4
11
- - 2.3
12
- - ruby-head
13
-
7
+ - 2.5
8
+ - 2.4
9
+ - 2.3
10
+ - ruby-head
11
+ before_install:
12
+ - gem install bundler -v 2.0.1
13
+ - bundle update
14
14
  matrix:
15
15
  allow_failures:
16
- - rvm: ruby-head
16
+ - rvm: ruby-head
data/Gemfile.lock CHANGED
@@ -1,13 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- html2doc (0.8.9)
4
+ html2doc (0.8.10)
5
5
  asciimath (~> 1.0.7)
6
6
  htmlentities (~> 4.3.4)
7
7
  image_size
8
8
  mime-types
9
9
  nokogiri
10
- ruby-xslt
11
10
  thread_safe
12
11
  uuidtools
13
12
 
@@ -40,7 +39,7 @@ GEM
40
39
  rspec (>= 2.99.0, < 4.0)
41
40
  htmlentities (4.3.4)
42
41
  image_size (2.0.0)
43
- json (2.1.0)
42
+ json (2.2.0)
44
43
  listen (3.1.5)
45
44
  rb-fsevent (~> 0.9, >= 0.9.4)
46
45
  rb-inotify (~> 0.9, >= 0.9.7)
@@ -49,16 +48,16 @@ GEM
49
48
  method_source (0.9.2)
50
49
  mime-types (3.2.2)
51
50
  mime-types-data (~> 3.2015)
52
- mime-types-data (3.2018.0812)
51
+ mime-types-data (3.2019.0331)
53
52
  mini_portile2 (2.4.0)
54
53
  nenv (0.3.0)
55
- nokogiri (1.10.1)
54
+ nokogiri (1.10.2)
56
55
  mini_portile2 (~> 2.4.0)
57
56
  notiffany (0.1.1)
58
57
  nenv (~> 0.1)
59
58
  shellany (~> 0.0)
60
- parallel (1.13.0)
61
- parser (2.6.0.0)
59
+ parallel (1.17.0)
60
+ parser (2.6.2.1)
62
61
  ast (~> 2.4.0)
63
62
  powerpack (0.1.2)
64
63
  pry (0.12.2)
@@ -92,7 +91,6 @@ GEM
92
91
  ruby-progressbar (~> 1.7)
93
92
  unicode-display_width (~> 1.0, >= 1.0.1)
94
93
  ruby-progressbar (1.10.0)
95
- ruby-xslt (0.9.10)
96
94
  ruby_dep (1.5.0)
97
95
  shellany (0.0.1)
98
96
  simplecov (0.16.1)
@@ -103,7 +101,7 @@ GEM
103
101
  thor (0.20.3)
104
102
  thread_safe (0.3.6)
105
103
  timecop (0.9.1)
106
- unicode-display_width (1.4.1)
104
+ unicode-display_width (1.5.0)
107
105
  uuidtools (2.1.5)
108
106
 
109
107
  PLATFORMS
data/README.adoc CHANGED
@@ -1,8 +1,9 @@
1
1
  = Html2Doc
2
2
 
3
3
  image:https://img.shields.io/gem/v/html2doc.svg["Gem Version", link="https://rubygems.org/gems/html2doc"]
4
- image:https://img.shields.io/travis/riboseinc/html2doc/master.svg["Build Status", link="https://travis-ci.org/riboseinc/html2doc"]
5
- image:https://codeclimate.com/github/riboseinc/html2doc/badges/gpa.svg["Code Climate", link="https://codeclimate.com/github/riboseinc/html2doc"]
4
+ image:https://img.shields.io/travis/metanorma/html2doc/master.svg["Build Status", link="https://travis-ci.org/metanorma/html2doc"]
5
+ image:https://ci.appveyor.com/api/projects/status/reqae7y99cfd0yod?svg=true["Appveyor Build Status", link="https://ci.appveyor.com/project/ribose/html2doc"]
6
+ image:https://codeclimate.com/github/metanorma/html2doc/badges/gpa.svg["Code Climate", link="https://codeclimate.com/github/metanorma/html2doc"]
6
7
 
7
8
  == Purpose
8
9
 
@@ -10,9 +11,9 @@ Gem to convert an HTML document into a Word document (.doc) format. This is inte
10
11
 
11
12
  == Origin
12
13
 
13
- This gem originated out of https://github.com/riboseinc/asciidoctor-iso, which creates a Word document from a automatically generated HTML document (created in turn by processing Asciidoc).
14
+ This gem originated out of https://github.com/metanorma/metanorma-iso, which creates a Word document from a automatically generated HTML document (created in turn by processing Asciidoc).
14
15
 
15
- This work is driven by the Word document generation procedure documented in http://sebsauvage.net/wiki/doku.php?id=word_document_generation. For more on the approach taken, and on alternative approaches, see https://github.com/riboseinc/html2doc/wiki/Why-not-docx%3F
16
+ This work is driven by the Word document generation procedure documented in http://sebsauvage.net/wiki/doku.php?id=word_document_generation. For more on the approach taken, and on alternative approaches, see https://github.com/metanorma/html2doc/wiki/Why-not-docx%3F
16
17
 
17
18
  == Functions
18
19
 
@@ -30,7 +31,7 @@ The gem currently does the following:
30
31
  * Inject Microsoft Word-specific CSS into the HTML document. If a CSS file is not supplied, the CSS file used is at `lib/html2doc/wordstyle.css` is used by default. Microsoft Word HTML has particular requirements from its CSS, and you should review the sample CSS before replacing it with your own. (This generic CSS can be overridden by CSS already in the HTML document, since the generic CSS is injected at the top of the document.)
31
32
  * Bundle up the local images, the HTML file of the document proper, and the `header.html` file representing header/footer information, into a MIME file, and save that file to disk (so that Microsoft Word can deal with it as a Word file.)
32
33
 
33
- For a representative generator of HTML that uses this gem in postprocessing, see https://github.com/riboseinc/asciidoctor-iso
34
+ For a representative generator of HTML that uses this gem in postprocessing, see https://github.com/metanorma/metanorma-iso
34
35
 
35
36
  == Constraints
36
37
 
@@ -57,7 +58,7 @@ Html2Doc.process(result, filename: filename, stylesheet: stylesheet, header_file
57
58
  result:: is the Html document to be converted into Word, as a string.
58
59
  filename:: is the name the document is to be saved as, without a file suffix
59
60
  stylesheet:: is the full path filename of the CSS stylesheet for Microsoft Word-specific styles. If this is not provided, the program will used the default stylesheet included in the gem, `lib/html2doc/wordstyle.css`. The stylsheet provided must match this stylesheet; you can obtain one by saving a Word document with your desired styles to HTML, and extracting the style definitions from the HTML document header.
60
- header_filename:: is the filename of the HTML document containing header and footer for the document, as well as footnote/endnote separators; if there is none, use nil. To generate your own such document, save a Word document with headers/footers and/or footnote/endnote separators as an HTML document; the `header.html` will be in the `{filename}.fld` folder generated along with the HTML. A sample file is available at https://github.com/riboseinc/asciidoctor-iso/blob/master/lib/asciidoctor/iso/word/header.html
61
+ header_filename:: is the filename of the HTML document containing header and footer for the document, as well as footnote/endnote separators; if there is none, use nil. To generate your own such document, save a Word document with headers/footers and/or footnote/endnote separators as an HTML document; the `header.html` will be in the `{filename}.fld` folder generated along with the HTML. A sample file is available at https://github.com/metanorma/metanorma-iso/blob/master/lib/asciidoctor/iso/word/header.html
61
62
  dir:: is the folder that any ancillary files (images, headers, filelist) are to be saved to. If not provided, it will be created as `{filename}_files`. Anything in the directory will be attached to the Word document; so this folder should only contain the images that accompany the document. (If the images are elsewhere on the local drive, the gem will move them into the folder. External URL images are left alone, and are not downloaded.)
62
63
  asciimathdelims:: are the AsciiMath delimiters used in the text (an array of an opening and a closing delimiter). If none are provided, no AsciiMath conversion is attempted.
63
64
  liststyles:: a hash of list style labels in Word CSS, which are used to define the behaviour of list item labels (e.g. _i)_ vs _i._). The gem recognises the hash keys `ul`, `ol`. So if the appearance of an ordered list's item labels in the supplied stylesheet is governed by style `@list l1` (e.g. `@list l1:level1 {mso-level-text:"%1\)";}` appears in the stylesheet), call the method with `liststyles:{ol: "l1"}`.
@@ -75,7 +76,7 @@ $ bin/html2doc --header header.html --stylesheet stylesheet.css filename.html
75
76
 
76
77
  === Converting document output to "`Native Word`" (`.docx`)
77
78
 
78
- The generated Word document is not quite in the most "`native`" format used by Word, `.docx`: it outputs the older `.doc` format. (See https://github.com/riboseinc/html2doc/wiki/Why-not-docx%3F for the reasons why.)
79
+ The generated Word document is not quite in the most "`native`" format used by Word, `.docx`: it outputs the older `.doc` format. (See https://github.com/metanorma/html2doc/wiki/Why-not-docx%3F for the reasons why.)
79
80
 
80
81
  Here are the steps to convert our output into native-`docx`.
81
82
 
@@ -126,4 +127,4 @@ By default, mathematical formulas that are the only content of their paragraph a
126
127
 
127
128
  == Example
128
129
 
129
- The `spec/examples` directory includes `rice.doc` and its source files: this Word document has been generated from `rice.html` through a call to html2doc from https://github.com/riboseinc/asciidoctor-iso. (The source document `rice.html` was itself generated from Asciidoc, rather than being hand-crafted.)
130
+ The `spec/examples` directory includes `rice.doc` and its source files: this Word document has been generated from `rice.html` through a call to html2doc from https://github.com/metanorma/metanorma-iso. (The source document `rice.html` was itself generated from Asciidoc, rather than being hand-crafted.)
data/appveyor.yml ADDED
@@ -0,0 +1,30 @@
1
+ version: '{build}'
2
+
3
+ environment:
4
+ matrix:
5
+ - RUBY_VERSION: 25
6
+ - RUBY_VERSION: 24
7
+ - RUBY_VERSION: 23
8
+ - RUBY_VERSION: _trunk
9
+
10
+ matrix:
11
+ allow_failures:
12
+ - RUBY_VERSION: _trunk
13
+
14
+ install:
15
+ - ps: . { iwr -useb https://raw.githubusercontent.com/metanorma/metanorma-build-scripts/master/appveyor.ps1 } | iex
16
+ - refreshenv
17
+
18
+ build_script:
19
+ - set PATH=C:\Ruby%RUBY_VERSION%\bin;%PATH%
20
+ - bundle update
21
+ - bundle install
22
+
23
+ before_test:
24
+ - ruby -v
25
+ - gem -v
26
+ - bundle -v
27
+
28
+ test_script:
29
+ - bundle exec rake
30
+
data/html2doc.gemspec CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |spec|
16
16
  This gem is in active development.
17
17
  DESCRIPTION
18
18
 
19
- spec.homepage = "https://github.com/riboseinc/html2doc"
19
+ spec.homepage = "https://github.com/metanorma/html2doc"
20
20
  spec.licenses = ["CC-BY-SA-3.0", "BSD-2-Clause"]
21
21
 
22
22
  spec.bindir = "bin"
@@ -31,7 +31,6 @@ Gem::Specification.new do |spec|
31
31
  spec.add_dependency "nokogiri"
32
32
  spec.add_dependency "thread_safe"
33
33
  spec.add_dependency "uuidtools"
34
- spec.add_dependency "ruby-xslt"
35
34
  spec.add_dependency "asciimath", "~> 1.0.7"
36
35
 
37
36
  spec.add_development_dependency "bundler", "~> 2.0.1"
data/lib/html2doc/math.rb CHANGED
@@ -2,12 +2,8 @@ require "uuidtools"
2
2
  require "asciimath"
3
3
  require "htmlentities"
4
4
  require "nokogiri"
5
- require "xml/xslt"
6
5
 
7
6
  module Html2Doc
8
- @xslt = XML::XSLT.new
9
- @xslt.xsl = File.read(File.join(File.dirname(__FILE__), "mathml2omml.xsl"))
10
- @xslt.xsl = File.read(File.join(File.dirname(__FILE__), "mml2omml.xsl"), encoding: "utf-8")
11
7
  @xsltemplate = Nokogiri::XSLT(File.read(File.join(File.dirname(__FILE__), "mml2omml.xsl"), encoding: "utf-8"))
12
8
 
13
9
  def self.asciimath_to_mathml1(x)
@@ -33,7 +29,7 @@ module Html2Doc
33
29
  x1.children = x
34
30
  end
35
31
  m.add_namespace(nil, "http://www.w3.org/1998/Math/MathML")
36
- m.to_s
32
+ m
37
33
  end
38
34
 
39
35
  def self.mathml_to_ooml(docxml)
@@ -41,8 +37,13 @@ module Html2Doc
41
37
  m = docxml.xpath("//*[local-name() = 'math']")
42
38
  m.each_with_index do |x, i|
43
39
  warn "Math OOXML #{i} of #{m.size}" if i % 100 == 0 && m.size > 500 && i > 0
44
- @xslt.xml = ooxml_cleanup(x, docnamespaces)
45
- ooxml = @xslt.serve.gsub(/<\?[^>]+>\s*/, "").
40
+ element = ooxml_cleanup(x, docnamespaces)
41
+
42
+ doc = Nokogiri::XML::Document::new()
43
+ doc.root = element
44
+
45
+ ooxml = @xsltemplate.transform(doc).to_s.
46
+ gsub(/<\?[^>]+>\s*/, "").
46
47
  gsub(/ xmlns(:[^=]+)?="[^"]+"/, "").
47
48
  gsub(%r{<(/)?([a-z])}, "<\\1m:\\2")
48
49
  ooxml = uncenter(x, ooxml)
@@ -1,3 +1,3 @@
1
1
  module Html2Doc
2
- VERSION = "0.8.9".freeze
2
+ VERSION = "0.8.10".freeze
3
3
  end
@@ -1,10 +1,12 @@
1
+ require "base64"
2
+
1
3
  def html_input(x)
2
4
  <<~HTML
3
5
  <html><head><title>blank</title>
4
6
  <meta name="Originator" content="Me"/>
5
7
  </head>
6
8
  <body>
7
- #{x}
9
+ #{x}
8
10
  </body></html>
9
11
  HTML
10
12
  end
@@ -15,7 +17,7 @@ def html_input_no_title(x)
15
17
  <meta name="Originator" content="Me"/>
16
18
  </head>
17
19
  <body>
18
- #{x}
20
+ #{x}
19
21
  </body></html>
20
22
  HTML
21
23
  end
@@ -24,7 +26,7 @@ def html_input_empty_head(x)
24
26
  <<~HTML
25
27
  <html><head></head>
26
28
  <body>
27
- #{x}
29
+ #{x}
28
30
  </body></html>
29
31
  HTML
30
32
  end
@@ -65,7 +67,7 @@ def word_body(x, fn)
65
67
  <<~BODY
66
68
  <body>
67
69
  #{x}
68
- #{fn}</body></html>
70
+ #{fn}</body></html>
69
71
  BODY
70
72
  end
71
73
 
@@ -73,7 +75,7 @@ WORD_FTR1 = <<~FTR
73
75
  ------=_NextPart_
74
76
  Content-Location: file:///C:/Doc/test_files/filelist.xml
75
77
  Content-Transfer-Encoding: base64
76
- Content-Type: application/xml
78
+ Content-Type: #{Html2Doc::mime_type('filelist.xml')}
77
79
 
78
80
  PHhtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiPgog
79
81
  ICAgICAgIDxvOk1haW5GaWxlIEhSZWY9Ii4uL3Rlc3QuaHRtIi8+ICA8bzpGaWxlIEhSZWY9ImZp
@@ -86,194 +88,18 @@ WORD_FTR2 = <<~FTR
86
88
  ------=_NextPart_
87
89
  Content-Location: file:///C:/Doc/test_files/filelist.xml
88
90
  Content-Transfer-Encoding: base64
89
- Content-Type: application/xml
91
+ Content-Type: #{Html2Doc::mime_type('filelist.xml')}
90
92
  PHhtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiPgog
91
93
  ICAgICAgIDxvOk1haW5GaWxlIEhSZWY9Ii4uL3Rlc3QuaHRtIi8+ICA8bzpGaWxlIEhSZWY9ImZp
92
94
  bGVsaXN0LnhtbCIvPgogIDxvOkZpbGUgSFJlZj0iaGVhZGVyLmh0bWwiLz4KPC94bWw+Cg==
93
95
  ------=_NextPart_
94
- Content-Location: file:///C:/Doc/test_files/header.html
95
- Content-Transfer-Encoding: base64
96
- Content-Type: text/html charset="utf-8"
97
- PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiDQp4bWxuczpvPSJ1
98
- cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiDQp4bWxuczp3PSJ1cm46c2No
99
- ZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIg0KeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMu
100
- bWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNC8xMi9vbW1sIg0KeG1sbnM6bXY9Imh0dHA6Ly9tYWNW
101
- bWxTY2hlbWFVcmkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4NCg0K
102
- PGhlYWQ+DQo8bWV0YSBuYW1lPVRpdGxlIGNvbnRlbnQ9IiI+DQo8bWV0YSBuYW1lPUtleXdvcmRz
103
- IGNvbnRlbnQ9IiI+DQo8bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0
104
- L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPg0KPG1ldGEgbmFtZT1Qcm9nSWQgY29udGVudD1Xb3JkLkRv
105
- Y3VtZW50Pg0KPG1ldGEgbmFtZT1HZW5lcmF0b3IgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUi
106
- Pg0KPG1ldGEgbmFtZT1PcmlnaW5hdG9yIGNvbnRlbnQ9Ik1pY3Jvc29mdCBXb3JkIDE1Ij4NCjxs
107
- aW5rIGlkPU1haW4tRmlsZSByZWw9TWFpbi1GaWxlIGhyZWY9IkZJTEVOQU1FLmh0bWwiPg0KPCEt
108
- LVtpZiBndGUgbXNvIDldPjx4bWw+DQogPG86c2hhcGVkZWZhdWx0cyB2OmV4dD0iZWRpdCIgc3Bp
109
- ZG1heD0iMjA0OSIvPg0KPC94bWw+PCFbZW5kaWZdLS0+DQo8L2hlYWQ+DQoNCjxib2R5IGxhbmc9
110
- RU4gbGluaz1ibHVlIHZsaW5rPSIjOTU0RjcyIj4NCg0KPGRpdiBzdHlsZT0nbXNvLWVsZW1lbnQ6
111
- Zm9vdG5vdGUtc2VwYXJhdG9yJyBpZD1mcz4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdt
112
- YXJnaW4tYm90dG9tOjBjbTttYXJnaW4tYm90dG9tOi4wMDAxcHQ7bGluZS1oZWlnaHQ6DQpub3Jt
113
- YWwnPjxzcGFuIGxhbmc9RU4tR0I+PHNwYW4gc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3Rlcjpm
114
- b290bm90ZS1zZXBhcmF0b3InPjwhW2lmICFzdXBwb3J0Rm9vdG5vdGVzXT4NCg0KPGhyIGFsaWdu
115
- PWxlZnQgc2l6ZT0xIHdpZHRoPSIzMyUiPg0KDQo8IVtlbmRpZl0+PC9zcGFuPjwvc3Bhbj48L3A+
116
- DQoNCjwvZGl2Pg0KDQo8ZGl2IHN0eWxlPSdtc28tZWxlbWVudDpmb290bm90ZS1jb250aW51YXRp
117
- b24tc2VwYXJhdG9yJyBpZD1mY3M+DQoNCjxwIGNsYXNzPU1zb05vcm1hbCBzdHlsZT0nbWFyZ2lu
118
- LWJvdHRvbTowY207bWFyZ2luLWJvdHRvbTouMDAwMXB0O2xpbmUtaGVpZ2h0Og0Kbm9ybWFsJz48
119
- c3BhbiBsYW5nPUVOLUdCPjxzcGFuIHN0eWxlPSdtc28tc3BlY2lhbC1jaGFyYWN0ZXI6Zm9vdG5v
120
- dGUtY29udGludWF0aW9uLXNlcGFyYXRvcic+PCFbaWYgIXN1cHBvcnRGb290bm90ZXNdPg0KDQo8
121
- aHIgYWxpZ249bGVmdCBzaXplPTE+DQoNCjwhW2VuZGlmXT48L3NwYW4+PC9zcGFuPjwvcD4NCg0K
122
- PC9kaXY+DQoNCjxkaXYgc3R5bGU9J21zby1lbGVtZW50OmVuZG5vdGUtc2VwYXJhdG9yJyBpZD1l
123
- cz4NCg0KPHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tYm90dG9tOjBjbTttYXJnaW4t
124
- Ym90dG9tOi4wMDAxcHQ7bGluZS1oZWlnaHQ6DQpub3JtYWwnPjxzcGFuIGxhbmc9RU4tR0I+PHNw
125
- YW4gc3R5bGU9J21zby1zcGVjaWFsLWNoYXJhY3Rlcjpmb290bm90ZS1zZXBhcmF0b3InPjwhW2lm
126
- ICFzdXBwb3J0Rm9vdG5vdGVzXT4NCg0KPGhyIGFsaWduPWxlZnQgc2l6ZT0xIHdpZHRoPSIzMyUi
127
- Pg0KDQo8IVtlbmRpZl0+PC9zcGFuPjwvc3Bhbj48L3A+DQoNCjwvZGl2Pg0KDQo8ZGl2IHN0eWxl
128
- PSdtc28tZWxlbWVudDplbmRub3RlLWNvbnRpbnVhdGlvbi1zZXBhcmF0b3InIGlkPWVjcz4NCg0K
129
- PHAgY2xhc3M9TXNvTm9ybWFsIHN0eWxlPSdtYXJnaW4tYm90dG9tOjBjbTttYXJnaW4tYm90dG9t
130
- Oi4wMDAxcHQ7bGluZS1oZWlnaHQ6DQpub3JtYWwnPjxzcGFuIGxhbmc9RU4tR0I+PHNwYW4gc3R5
131
- bGU9J21zby1zcGVjaWFsLWNoYXJhY3Rlcjpmb290bm90ZS1jb250aW51YXRpb24tc2VwYXJhdG9y
132
- Jz48IVtpZiAhc3VwcG9ydEZvb3Rub3Rlc10+DQoNCjxociBhbGlnbj1sZWZ0IHNpemU9MT4NCg0K
133
- PCFbZW5kaWZdPjwvc3Bhbj48L3NwYW4+PC9wPg0KDQo8L2Rpdj4NCg0KPGRpdiBzdHlsZT0nbXNv
134
- LWVsZW1lbnQ6aGVhZGVyJyBpZD1laDE+DQoNCjxwIGNsYXNzPU1zb0hlYWRlciBhbGlnbj1sZWZ0
135
- IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQ7bGluZS1oZWlnaHQ6MTIuMHB0Ow0KbXNvLWxpbmUtaGVp
136
- Z2h0LXJ1bGU6ZXhhY3RseSc+PHNwYW4gbGFuZz1FTi1HQj5JU08vSUVDJm5ic3A7Q0QgMTczMDEt
137
- MToyMDE2KEUpPC9zcGFuPjwvcD4NCg0KPC9kaXY+DQoNCjxkaXYgc3R5bGU9J21zby1lbGVtZW50
138
- OmhlYWRlcicgaWQ9aDE+DQoNCjxwIGNsYXNzPU1zb0hlYWRlciBzdHlsZT0nbWFyZ2luLWJvdHRv
139
- bToxOC4wcHQnPjxzcGFuIGxhbmc9RU4tR0INCnN0eWxlPSdmb250LXNpemU6MTAuMHB0O21zby1i
140
- aWRpLWZvbnQtc2l6ZToxMS4wcHQ7Zm9udC13ZWlnaHQ6bm9ybWFsJz7CqQ0KSVNPL0lFQyZuYnNw
141
- OzIwMTYmbmJzcDvigJMgQWxsIHJpZ2h0cyByZXNlcnZlZDwvc3Bhbj48c3BhbiBsYW5nPUVOLUdC
142
- DQpzdHlsZT0nZm9udC13ZWlnaHQ6bm9ybWFsJz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQoNCjwv
143
- ZGl2Pg0KDQo8ZGl2IHN0eWxlPSdtc28tZWxlbWVudDpmb290ZXInIGlkPWVmMT4NCg0KPHAgY2xh
144
- c3M9TXNvRm9vdGVyIHN0eWxlPSdtYXJnaW4tdG9wOjEyLjBwdDtsaW5lLWhlaWdodDoxMi4wcHQ7
145
- bXNvLWxpbmUtaGVpZ2h0LXJ1bGU6DQpleGFjdGx5Jz48IS0tW2lmIHN1cHBvcnRGaWVsZHNdPjxi
146
- IHN0eWxlPSdtc28tYmlkaS1mb250LXdlaWdodDpub3JtYWwnPjxzcGFuDQpsYW5nPUVOLUdCIHN0
147
- eWxlPSdmb250LXNpemU6MTAuMHB0O21zby1iaWRpLWZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQpz
148
- dHlsZT0nbXNvLWVsZW1lbnQ6ZmllbGQtYmVnaW4nPjwvc3Bhbj48c3Bhbg0Kc3R5bGU9J21zby1z
149
- cGFjZXJ1bjp5ZXMnPsKgPC9zcGFuPlBBR0U8c3BhbiBzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+
150
- wqDCoA0KPC9zcGFuPlwqIE1FUkdFRk9STUFUIDxzcGFuIHN0eWxlPSdtc28tZWxlbWVudDpmaWVs
151
- ZC1zZXBhcmF0b3InPjwvc3Bhbj48L3NwYW4+PC9iPjwhW2VuZGlmXS0tPjxiDQpzdHlsZT0nbXNv
152
- LWJpZGktZm9udC13ZWlnaHQ6bm9ybWFsJz48c3BhbiBsYW5nPUVOLUdCIHN0eWxlPSdmb250LXNp
153
- emU6MTAuMHB0Ow0KbXNvLWJpZGktZm9udC1zaXplOjExLjBwdCc+PHNwYW4gc3R5bGU9J21zby1u
154
- by1wcm9vZjp5ZXMnPjI8L3NwYW4+PC9zcGFuPjwvYj48IS0tW2lmIHN1cHBvcnRGaWVsZHNdPjxi
155
- DQpzdHlsZT0nbXNvLWJpZGktZm9udC13ZWlnaHQ6bm9ybWFsJz48c3BhbiBsYW5nPUVOLUdCIHN0
156
- eWxlPSdmb250LXNpemU6MTAuMHB0Ow0KbXNvLWJpZGktZm9udC1zaXplOjExLjBwdCc+PHNwYW4g
157
- c3R5bGU9J21zby1lbGVtZW50OmZpZWxkLWVuZCc+PC9zcGFuPjwvc3Bhbj48L2I+PCFbZW5kaWZd
158
- LS0+PHNwYW4NCmxhbmc9RU4tR0Igc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQ7bXNvLWJpZGktZm9u
159
- dC1zaXplOjExLjBwdCc+PHNwYW4NCnN0eWxlPSdtc28tdGFiLWNvdW50OjEnPsKgwqDCoMKgwqDC
160
- oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
161
- wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
162
- oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
163
- wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
164
- oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
165
- wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPC9zcGFuPsKpDQpJ
166
- U08vSUVDJm5ic3A7MjAxNiZuYnNwO+KAkyBBbGwgcmlnaHRzIHJlc2VydmVkPG86cD48L286cD48
167
- L3NwYW4+PC9wPg0KDQo8L2Rpdj4NCg0KPGRpdiBzdHlsZT0nbXNvLWVsZW1lbnQ6aGVhZGVyJyBp
168
- ZD1laDI+DQoNCjxwIGNsYXNzPU1zb0hlYWRlciBhbGlnbj1sZWZ0IHN0eWxlPSd0ZXh0LWFsaWdu
169
- OmxlZnQ7bGluZS1oZWlnaHQ6MTIuMHB0Ow0KbXNvLWxpbmUtaGVpZ2h0LXJ1bGU6ZXhhY3RseSc+
170
- PHNwYW4gbGFuZz1FTi1HQj5JU08vSUVDJm5ic3A7Q0QgMTczMDEtMToyMDE2KEUpPC9zcGFuPjwv
171
- cD4NCg0KPC9kaXY+DQoNCjxkaXYgc3R5bGU9J21zby1lbGVtZW50OmhlYWRlcicgaWQ9aDI+DQoN
172
- CjxwIGNsYXNzPU1zb0hlYWRlciBhbGlnbj1yaWdodCBzdHlsZT0ndGV4dC1hbGlnbjpyaWdodDts
173
- aW5lLWhlaWdodDoxMi4wcHQ7DQptc28tbGluZS1oZWlnaHQtcnVsZTpleGFjdGx5Jz48c3BhbiBs
174
- YW5nPUVOLUdCPklTTy9JRUMmbmJzcDtDRCAxNzMwMS0xOjIwMTYoRSk8L3NwYW4+PC9wPg0KDQo8
175
- L2Rpdj4NCg0KPGRpdiBzdHlsZT0nbXNvLWVsZW1lbnQ6Zm9vdGVyJyBpZD1lZjI+DQoNCjxwIGNs
176
- YXNzPU1zb0Zvb3RlciBzdHlsZT0nbGluZS1oZWlnaHQ6MTIuMHB0O21zby1saW5lLWhlaWdodC1y
177
- dWxlOmV4YWN0bHknPjwhLS1baWYgc3VwcG9ydEZpZWxkc10+PHNwYW4NCmxhbmc9RU4tR0Igc3R5
178
- bGU9J2ZvbnQtc2l6ZToxMC4wcHQ7bXNvLWJpZGktZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCnN0
179
- eWxlPSdtc28tZWxlbWVudDpmaWVsZC1iZWdpbic+PC9zcGFuPjxzcGFuDQpzdHlsZT0nbXNvLXNw
180
- YWNlcnVuOnllcyc+wqA8L3NwYW4+UEFHRTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz7C
181
- oMKgDQo8L3NwYW4+XCogTUVSR0VGT1JNQVQgPHNwYW4gc3R5bGU9J21zby1lbGVtZW50OmZpZWxk
182
- LXNlcGFyYXRvcic+PC9zcGFuPjwvc3Bhbj48IVtlbmRpZl0tLT48c3Bhbg0KbGFuZz1FTi1HQiBz
183
- dHlsZT0nZm9udC1zaXplOjEwLjBwdDttc28tYmlkaS1mb250LXNpemU6MTEuMHB0Jz48c3Bhbg0K
184
- c3R5bGU9J21zby1uby1wcm9vZjp5ZXMnPmlpPC9zcGFuPjwvc3Bhbj48IS0tW2lmIHN1cHBvcnRG
185
- aWVsZHNdPjxzcGFuDQpsYW5nPUVOLUdCIHN0eWxlPSdmb250LXNpemU6MTAuMHB0O21zby1iaWRp
186
- LWZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQpzdHlsZT0nbXNvLWVsZW1lbnQ6ZmllbGQtZW5kJz48
187
- L3NwYW4+PC9zcGFuPjwhW2VuZGlmXS0tPjxzcGFuIGxhbmc9RU4tR0INCnN0eWxlPSdmb250LXNp
188
- emU6MTAuMHB0O21zby1iaWRpLWZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuIHN0eWxlPSdtc28tdGFi
189
- LWNvdW50Og0KMSc+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
190
- oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
191
- wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
192
- oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
193
- wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
194
- oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
195
- wqDCoMKgwqDCoCA8L3NwYW4+wqkNCklTTy9JRUMmbmJzcDsyMDE2Jm5ic3A74oCTIEFsbCByaWdo
196
- dHMgcmVzZXJ2ZWQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQoNCjwvZGl2Pg0KDQo8ZGl2IHN0eWxl
197
- PSdtc28tZWxlbWVudDpmb290ZXInIGlkPWYyPg0KDQo8cCBjbGFzcz1Nc29Gb290ZXIgc3R5bGU9
198
- J2xpbmUtaGVpZ2h0OjEyLjBwdCc+PHNwYW4gbGFuZz1FTi1HQg0Kc3R5bGU9J2ZvbnQtc2l6ZTox
199
- MC4wcHQ7bXNvLWJpZGktZm9udC1zaXplOjExLjBwdCc+wqkgSVNPL0lFQyZuYnNwOzIwMTYmbmJz
200
- cDvigJMgQWxsDQpyaWdodHMgcmVzZXJ2ZWQ8c3BhbiBzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz7C
201
- oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
202
- wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
203
- oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
204
- wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
205
- oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
206
- wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA8L3Nw
207
- YW4+PC9zcGFuPjwhLS1baWYgc3VwcG9ydEZpZWxkc10+PHNwYW4NCmxhbmc9RU4tR0Igc3R5bGU9
208
- J2ZvbnQtc2l6ZToxMC4wcHQ7bXNvLWJpZGktZm9udC1zaXplOjExLjBwdCc+PHNwYW4NCnN0eWxl
209
- PSdtc28tZWxlbWVudDpmaWVsZC1iZWdpbic+PC9zcGFuPiBQQUdFPHNwYW4gc3R5bGU9J21zby1z
210
- cGFjZXJ1bjp5ZXMnPsKgwqANCjwvc3Bhbj5cKiBNRVJHRUZPUk1BVCA8c3BhbiBzdHlsZT0nbXNv
211
- LWVsZW1lbnQ6ZmllbGQtc2VwYXJhdG9yJz48L3NwYW4+PC9zcGFuPjwhW2VuZGlmXS0tPjxzcGFu
212
- DQpsYW5nPUVOLUdCIHN0eWxlPSdmb250LXNpemU6MTAuMHB0O21zby1iaWRpLWZvbnQtc2l6ZTox
213
- MS4wcHQnPjxzcGFuDQpzdHlsZT0nbXNvLW5vLXByb29mOnllcyc+aWlpPC9zcGFuPjwvc3Bhbj48
214
- IS0tW2lmIHN1cHBvcnRGaWVsZHNdPjxzcGFuDQpsYW5nPUVOLUdCIHN0eWxlPSdmb250LXNpemU6
215
- MTAuMHB0O21zby1iaWRpLWZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuDQpzdHlsZT0nbXNvLWVsZW1l
216
- bnQ6ZmllbGQtZW5kJz48L3NwYW4+PC9zcGFuPjwhW2VuZGlmXS0tPjxzcGFuIGxhbmc9RU4tR0IN
217
- CnN0eWxlPSdmb250LXNpemU6MTAuMHB0O21zby1iaWRpLWZvbnQtc2l6ZToxMS4wcHQnPjxvOnA+
218
- PC9vOnA+PC9zcGFuPjwvcD4NCg0KPC9kaXY+DQoNCjxkaXYgc3R5bGU9J21zby1lbGVtZW50OmZv
219
- b3RlcicgaWQ9ZWYzPg0KDQo8cCBjbGFzcz1Nc29Gb290ZXIgc3R5bGU9J21hcmdpbi10b3A6MTIu
220
- MHB0O2xpbmUtaGVpZ2h0OjEyLjBwdDttc28tbGluZS1oZWlnaHQtcnVsZToNCmV4YWN0bHknPjwh
221
- LS1baWYgc3VwcG9ydEZpZWxkc10+PGIgc3R5bGU9J21zby1iaWRpLWZvbnQtd2VpZ2h0Om5vcm1h
222
- bCc+PHNwYW4NCmxhbmc9RU4tR0Igc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQ7bXNvLWJpZGktZm9u
223
- dC1zaXplOjExLjBwdCc+PHNwYW4NCnN0eWxlPSdtc28tZWxlbWVudDpmaWVsZC1iZWdpbic+PC9z
224
- cGFuPjxzcGFuDQpzdHlsZT0nbXNvLXNwYWNlcnVuOnllcyc+wqA8L3NwYW4+UEFHRTxzcGFuIHN0
225
- eWxlPSdtc28tc3BhY2VydW46eWVzJz7CoMKgDQo8L3NwYW4+XCogTUVSR0VGT1JNQVQgPHNwYW4g
226
- c3R5bGU9J21zby1lbGVtZW50OmZpZWxkLXNlcGFyYXRvcic+PC9zcGFuPjwvc3Bhbj48L2I+PCFb
227
- ZW5kaWZdLS0+PGINCnN0eWxlPSdtc28tYmlkaS1mb250LXdlaWdodDpub3JtYWwnPjxzcGFuIGxh
228
- bmc9RU4tR0Igc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQ7DQptc28tYmlkaS1mb250LXNpemU6MTEu
229
- MHB0Jz48c3BhbiBzdHlsZT0nbXNvLW5vLXByb29mOnllcyc+Mjwvc3Bhbj48L3NwYW4+PC9iPjwh
230
- LS1baWYgc3VwcG9ydEZpZWxkc10+PGINCnN0eWxlPSdtc28tYmlkaS1mb250LXdlaWdodDpub3Jt
231
- YWwnPjxzcGFuIGxhbmc9RU4tR0Igc3R5bGU9J2ZvbnQtc2l6ZToxMC4wcHQ7DQptc28tYmlkaS1m
232
- b250LXNpemU6MTEuMHB0Jz48c3BhbiBzdHlsZT0nbXNvLWVsZW1lbnQ6ZmllbGQtZW5kJz48L3Nw
233
- YW4+PC9zcGFuPjwvYj48IVtlbmRpZl0tLT48c3Bhbg0KbGFuZz1FTi1HQiBzdHlsZT0nZm9udC1z
234
- aXplOjEwLjBwdDttc28tYmlkaS1mb250LXNpemU6MTEuMHB0Jz48c3Bhbg0Kc3R5bGU9J21zby10
235
- YWItY291bnQ6MSc+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
236
- oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
237
- wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
238
- oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
239
- wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
240
- oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
241
- wqDCoMKgwqDCoCA8L3NwYW4+wqkNCklTTy9JRUMmbmJzcDsyMDE2Jm5ic3A74oCTIEFsbCByaWdo
242
- dHMgcmVzZXJ2ZWQ8bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQoNCjwvZGl2Pg0KDQo8ZGl2IHN0eWxl
243
- PSdtc28tZWxlbWVudDpmb290ZXInIGlkPWYzPg0KDQo8cCBjbGFzcz1Nc29Gb290ZXIgc3R5bGU9
244
- J2xpbmUtaGVpZ2h0OjEyLjBwdCc+PHNwYW4gbGFuZz1FTi1HQg0Kc3R5bGU9J2ZvbnQtc2l6ZTox
245
- MC4wcHQ7bXNvLWJpZGktZm9udC1zaXplOjExLjBwdCc+wqkgSVNPL0lFQyZuYnNwOzIwMTYmbmJz
246
- cDvigJMgQWxsDQpyaWdodHMgcmVzZXJ2ZWQ8c3BhbiBzdHlsZT0nbXNvLXRhYi1jb3VudDoxJz7C
247
- oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
248
- wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
249
- oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
250
- wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
251
- oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
252
- wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDwv
253
- c3Bhbj48L3NwYW4+PCEtLVtpZiBzdXBwb3J0RmllbGRzXT48Yg0Kc3R5bGU9J21zby1iaWRpLWZv
254
- bnQtd2VpZ2h0Om5vcm1hbCc+PHNwYW4gbGFuZz1FTi1HQiBzdHlsZT0nZm9udC1zaXplOjEwLjBw
255
- dDsNCm1zby1iaWRpLWZvbnQtc2l6ZToxMS4wcHQnPjxzcGFuIHN0eWxlPSdtc28tZWxlbWVudDpm
256
- aWVsZC1iZWdpbic+PC9zcGFuPg0KUEFHRTxzcGFuIHN0eWxlPSdtc28tc3BhY2VydW46eWVzJz7C
257
- oMKgIDwvc3Bhbj5cKiBNRVJHRUZPUk1BVCA8c3Bhbg0Kc3R5bGU9J21zby1lbGVtZW50OmZpZWxk
258
- LXNlcGFyYXRvcic+PC9zcGFuPjwvc3Bhbj48L2I+PCFbZW5kaWZdLS0+PGINCnN0eWxlPSdtc28t
259
- YmlkaS1mb250LXdlaWdodDpub3JtYWwnPjxzcGFuIGxhbmc9RU4tR0Igc3R5bGU9J2ZvbnQtc2l6
260
- ZToxMC4wcHQ7DQptc28tYmlkaS1mb250LXNpemU6MTEuMHB0Jz48c3BhbiBzdHlsZT0nbXNvLW5v
261
- LXByb29mOnllcyc+Mzwvc3Bhbj48L3NwYW4+PC9iPjwhLS1baWYgc3VwcG9ydEZpZWxkc10+PGIN
262
- CnN0eWxlPSdtc28tYmlkaS1mb250LXdlaWdodDpub3JtYWwnPjxzcGFuIGxhbmc9RU4tR0Igc3R5
263
- bGU9J2ZvbnQtc2l6ZToxMC4wcHQ7DQptc28tYmlkaS1mb250LXNpemU6MTEuMHB0Jz48c3BhbiBz
264
- dHlsZT0nbXNvLWVsZW1lbnQ6ZmllbGQtZW5kJz48L3NwYW4+PC9zcGFuPjwvYj48IVtlbmRpZl0t
265
- LT48c3Bhbg0KbGFuZz1FTi1HQiBzdHlsZT0nZm9udC1zaXplOjEwLjBwdDttc28tYmlkaS1mb250
266
- LXNpemU6MTEuMHB0Jz48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQoNCjwvZGl2Pg0KDQo8L2JvZHk+
267
- DQoNCjwvaHRtbD4NCg==
268
-
269
- ------=_NextPart_--
270
96
  FTR
271
97
 
272
98
  WORD_FTR3 = <<~FTR
273
99
  ------=_NextPart_
274
100
  Content-Location: file:///C:/Doc/test_files/filelist.xml
275
101
  Content-Transfer-Encoding: base64
276
- Content-Type: application/xml
102
+ Content-Type: #{Html2Doc::mime_type('filelist.xml')}
277
103
 
278
104
  PHhtbCB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiPgog
279
105
  ICAgICAgIDxvOk1haW5GaWxlIEhSZWY9Ii4uL3Rlc3QuaHRtIi8+ICA8bzpGaWxlIEhSZWY9IjFh
@@ -286,6 +112,214 @@ Content-Type: image/png
286
112
  ------=_NextPart_--
287
113
  FTR
288
114
 
115
+ HEADERHTML = <<~FTR
116
+ <html xmlns:v="urn:schemas-microsoft-com:vml"
117
+ xmlns:o="urn:schemas-microsoft-com:office:office"
118
+ xmlns:w="urn:schemas-microsoft-com:office:word"
119
+ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
120
+ xmlns:mv="http://macVmlSchemaUri" xmlns="http://www.w3.org/TR/REC-html40">
121
+ <head>
122
+ <meta name=Title content="">
123
+ <meta name=Keywords content="">
124
+ <meta http-equiv=Content-Type content="text/html; charset=utf-8">
125
+ <meta name=ProgId content=Word.Document>
126
+ <meta name=Generator content="Microsoft Word 15">
127
+ <meta name=Originator content="Microsoft Word 15">
128
+ <link id=Main-File rel=Main-File href="FILENAME.html">
129
+ <!--[if gte mso 9]><xml>
130
+ <o:shapedefaults v:ext="edit" spidmax="2049"/>
131
+ </xml><![endif]-->
132
+ </head>
133
+ <body lang=EN link=blue vlink="#954F72">
134
+ <div style='mso-element:footnote-separator' id=fs>
135
+ <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
136
+ normal'><span lang=EN-GB><span style='mso-special-character:footnote-separator'><![if !supportFootnotes]>
137
+ <hr align=left size=1 width="33%">
138
+ <![endif]></span></span></p>
139
+ </div>
140
+ <div style='mso-element:footnote-continuation-separator' id=fcs>
141
+ <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
142
+ normal'><span lang=EN-GB><span style='mso-special-character:footnote-continuation-separator'><![if !supportFootnotes]>
143
+ <hr align=left size=1>
144
+ <![endif]></span></span></p>
145
+ </div>
146
+ <div style='mso-element:endnote-separator' id=es>
147
+ <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
148
+ normal'><span lang=EN-GB><span style='mso-special-character:footnote-separator'><![if !supportFootnotes]>
149
+ <hr align=left size=1 width="33%">
150
+ <![endif]></span></span></p>
151
+ </div>
152
+ <div style='mso-element:endnote-continuation-separator' id=ecs>
153
+ <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
154
+ normal'><span lang=EN-GB><span style='mso-special-character:footnote-continuation-separator'><![if !supportFootnotes]>
155
+ <hr align=left size=1>
156
+ <![endif]></span></span></p>
157
+ </div>
158
+ <div style='mso-element:header' id=eh1>
159
+ <p class=MsoHeader align=left style='text-align:left;line-height:12.0pt;
160
+ mso-line-height-rule:exactly'><span lang=EN-GB>ISO/IEC&#x26;nbsp;CD 17301-1:2016(E)</span></p>
161
+ </div>
162
+ <div style='mso-element:header' id=h1>
163
+ <p class=MsoHeader style='margin-bottom:18.0pt'><span lang=EN-GB
164
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt;font-weight:normal'>&#xa9;
165
+ ISO/IEC&#x26;nbsp;2016&#x26;nbsp;&#x2013; All rights reserved</span><span lang=EN-GB
166
+ style='font-weight:normal'><o:p></o:p></span></p>
167
+ </div>
168
+ <div style='mso-element:footer' id=ef1>
169
+ <p class=MsoFooter style='margin-top:12.0pt;line-height:12.0pt;mso-line-height-rule:
170
+ exactly'><!--[if supportFields]><b style='mso-bidi-font-weight:normal'><span
171
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
172
+ style='mso-element:field-begin'></span><span
173
+ style='mso-spacerun:yes'>&#xa0;</span>PAGE<span style='mso-spacerun:yes'>&#xa0;&#xa0;
174
+ </span>\\* MERGEFORMAT <span style='mso-element:field-separator'></span></span></b><![endif]--><b
175
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
176
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>2</span></span></b><!--[if supportFields]><b
177
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
178
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
179
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
180
+ style='mso-tab-count:1'>&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0; </span>&#xa9;
181
+ ISO/IEC&#x26;nbsp;2016&#x26;nbsp;&#x2013; All rights reserved<o:p></o:p></span></p>
182
+ </div>
183
+ <div style='mso-element:header' id=eh2>
184
+ <p class=MsoHeader align=left style='text-align:left;line-height:12.0pt;
185
+ mso-line-height-rule:exactly'><span lang=EN-GB>ISO/IEC&#x26;nbsp;CD 17301-1:2016(E)</span></p>
186
+ </div>
187
+ <div style='mso-element:header' id=h2>
188
+ <p class=MsoHeader align=right style='text-align:right;line-height:12.0pt;
189
+ mso-line-height-rule:exactly'><span lang=EN-GB>ISO/IEC&#x26;nbsp;CD 17301-1:2016(E)</span></p>
190
+ </div>
191
+ <div style='mso-element:footer' id=ef2>
192
+ <p class=MsoFooter style='line-height:12.0pt;mso-line-height-rule:exactly'><!--[if supportFields]><span
193
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
194
+ style='mso-element:field-begin'></span><span
195
+ style='mso-spacerun:yes'>&#xa0;</span>PAGE<span style='mso-spacerun:yes'>&#xa0;&#xa0;
196
+ </span>\\* MERGEFORMAT <span style='mso-element:field-separator'></span></span><![endif]--><span
197
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
198
+ style='mso-no-proof:yes'>ii</span></span><!--[if supportFields]><span
199
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
200
+ style='mso-element:field-end'></span></span><![endif]--><span lang=EN-GB
201
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span style='mso-tab-count:
202
+ 1'>&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0; </span>&#xa9;
203
+ ISO/IEC&#x26;nbsp;2016&#x26;nbsp;&#x2013; All rights reserved<o:p></o:p></span></p>
204
+ </div>
205
+ <div style='mso-element:footer' id=f2>
206
+ <p class=MsoFooter style='line-height:12.0pt'><span lang=EN-GB
207
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'>&#xa9; ISO/IEC&#x26;nbsp;2016&#x26;nbsp;&#x2013; All
208
+ rights reserved<span style='mso-tab-count:1'>&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0; </span></span><!--[if supportFields]><span
209
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
210
+ style='mso-element:field-begin'></span> PAGE<span style='mso-spacerun:yes'>&#xa0;&#xa0;
211
+ </span>\\* MERGEFORMAT <span style='mso-element:field-separator'></span></span><![endif]--><span
212
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
213
+ style='mso-no-proof:yes'>iii</span></span><!--[if supportFields]><span
214
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
215
+ style='mso-element:field-end'></span></span><![endif]--><span lang=EN-GB
216
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><o:p></o:p></span></p>
217
+ </div>
218
+ <div style='mso-element:footer' id=ef3>
219
+ <p class=MsoFooter style='margin-top:12.0pt;line-height:12.0pt;mso-line-height-rule:
220
+ exactly'><!--[if supportFields]><b style='mso-bidi-font-weight:normal'><span
221
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
222
+ style='mso-element:field-begin'></span><span
223
+ style='mso-spacerun:yes'>&#xa0;</span>PAGE<span style='mso-spacerun:yes'>&#xa0;&#xa0;
224
+ </span>\\* MERGEFORMAT <span style='mso-element:field-separator'></span></span></b><![endif]--><b
225
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
226
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>2</span></span></b><!--[if supportFields]><b
227
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
228
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
229
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
230
+ style='mso-tab-count:1'>&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0; </span>&#xa9;
231
+ ISO/IEC&#x26;nbsp;2016&#x26;nbsp;&#x2013; All rights reserved<o:p></o:p></span></p>
232
+ </div>
233
+ <div style='mso-element:footer' id=f3>
234
+ <p class=MsoFooter style='line-height:12.0pt'><span lang=EN-GB
235
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'>&#xa9; ISO/IEC&#x26;nbsp;2016&#x26;nbsp;&#x2013; All
236
+ rights reserved<span style='mso-tab-count:1'>&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0;&#xa0; </span></span><!--[if supportFields]><b
237
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
238
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-begin'></span>
239
+ PAGE<span style='mso-spacerun:yes'>&#xa0;&#xa0; </span>\\* MERGEFORMAT <span
240
+ style='mso-element:field-separator'></span></span></b><![endif]--><b
241
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
242
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>3</span></span></b><!--[if supportFields]><b
243
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
244
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
245
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><o:p></o:p></span></p>
246
+ </div>
247
+ </body>
248
+ </html>
249
+ FTR
250
+
251
+ ASCII_MATH=<<~FTR
252
+ <m:nary>
253
+ <m:naryPr>
254
+ <m:chr m:val="&#x2211;"></m:chr>
255
+ <m:limLoc m:val="undOvr"></m:limLoc>
256
+ <m:grow m:val="on"></m:grow>
257
+ <m:subHide m:val="off"></m:subHide>
258
+ <m:supHide m:val="off"></m:supHide>
259
+ </m:naryPr>
260
+ <m:sub>
261
+ <m:r>
262
+ <m:t>i=1</m:t>
263
+ </m:r>
264
+ </m:sub>
265
+ <m:sup>
266
+ <m:r>
267
+ <m:t>n</m:t>
268
+ </m:r>
269
+ </m:sup>
270
+ <m:e>
271
+ <m:sSup>
272
+ <m:e>
273
+ <m:r>
274
+ <m:t>i</m:t>
275
+ </m:r>
276
+ </m:e>
277
+ <m:sup>
278
+ <m:r>
279
+ <m:t>3</m:t>
280
+ </m:r>
281
+ </m:sup>
282
+ </m:sSup>
283
+ </m:e>
284
+ </m:nary>
285
+ <m:r>
286
+ <m:t>=</m:t>
287
+ </m:r>
288
+ <m:sSup>
289
+ <m:e>
290
+ <m:r>
291
+ <m:t>(</m:t>
292
+ </m:r>
293
+ <m:f>
294
+ <m:fPr>
295
+ <m:type m:val="bar"></m:type>
296
+ </m:fPr>
297
+ <m:num>
298
+ <m:r>
299
+ <m:t>n</m:t>
300
+ </m:r>
301
+ <m:r>
302
+ <m:t>(n+1)</m:t>
303
+ </m:r>
304
+ </m:num>
305
+ <m:den>
306
+ <m:r>
307
+ <m:t>2</m:t>
308
+ </m:r>
309
+ </m:den>
310
+ </m:f>
311
+ <m:r>
312
+ <m:t>)</m:t>
313
+ </m:r>
314
+ </m:e>
315
+ <m:sup>
316
+ <m:r>
317
+ <m:t>2</m:t>
318
+ </m:r>
319
+ </m:sup>
320
+ </m:sSup>
321
+ FTR
322
+
289
323
  DEFAULT_STYLESHEET = File.read("lib/html2doc/wordstyle.css", encoding: "utf-8").freeze
290
324
 
291
325
  def guid_clean(x)
@@ -357,8 +391,16 @@ RSpec.describe Html2Doc do
357
391
 
358
392
  it "processes a header" do
359
393
  Html2Doc.process(html_input(""), filename: "test", header_file: "spec/header.html")
360
- expect(guid_clean(File.read("test.doc", encoding: "utf-8"))).
361
- to match_fuzzy(<<~OUTPUT)
394
+ html = guid_clean(File.read("test.doc", encoding: "utf-8"))
395
+ hdr = Base64.decode64(html.sub(%r{^.*Content-Location: file:///C:/Doc/test_files/header.html}, "").
396
+ sub(%r{^.*Content-Type: text/html charset="utf-8"}m, "").
397
+ sub(%r{------=_NextPart_--.*$}m, "")).force_encoding("UTF-8")
398
+ #expect(hdr.gsub(/\xa0/, " ")).to match_fuzzy(HEADERHTML)
399
+ expect(HTMLEntities.new.encode(hdr, :hexadecimal).
400
+ gsub(/\&#x3c;/, "<").gsub(/\&#x3e;/, ">").gsub(/\&#x27;/, "'").gsub(/\&#x22;/, '"').
401
+ gsub(/\&#xd;/, "&#xa;").gsub(/\&#xa;/, "\n")).to match_fuzzy(HEADERHTML)
402
+ expect(html.sub(%r{Content-Location: file:///C:/Doc/test_files/header.html.*$}m, "")).
403
+ to match_fuzzy(<<~OUTPUT)
362
404
  #{WORD_HDR} #{DEFAULT_STYLESHEET.gsub(/FILENAME/, "test")}
363
405
  #{WORD_HDR_END} #{word_body("", '<div style="mso-element:footnote-list"/>')} #{WORD_FTR2}
364
406
  OUTPUT
@@ -387,23 +429,17 @@ RSpec.describe Html2Doc do
387
429
  expect(guid_clean(File.read("test.doc", encoding: "utf-8"))).
388
430
  to match_fuzzy(<<~OUTPUT)
389
431
  #{WORD_HDR} #{DEFAULT_STYLESHEET} #{WORD_HDR_END}
390
- #{word_body('
432
+ #{word_body("
391
433
  <div><m:oMath>
392
- <m:nary><m:naryPr><m:chr m:val="&#x2211;"></m:chr><m:limLoc m:val="undOvr"></m:limLoc><m:grow m:val="on"></m:grow><m:subHide m:val="off"></m:subHide><m:supHide m:val="off"></m:supHide></m:naryPr><m:sub>
393
- <m:r><m:t>i=1</m:t></m:r>
394
- </m:sub><m:sup><m:r><m:t>n</m:t></m:r></m:sup><m:e><m:sSup><m:e><m:r><m:t>i</m:t></m:r></m:e><m:sup><m:r><m:t>3</m:t></m:r></m:sup></m:sSup></m:e></m:nary>
395
- <m:r><m:t>=</m:t></m:r>
396
- <m:sSup><m:e>
397
- <m:r><m:t>(</m:t></m:r>
398
- <m:f><m:fPr><m:type m:val="bar"></m:type></m:fPr><m:num>
399
- <m:r><m:t>n</m:t></m:r>
400
- <m:r><m:t>(n+1)</m:t></m:r>
401
- </m:num><m:den><m:r><m:t>2</m:t></m:r></m:den></m:f>
402
- <m:r><m:t>)</m:t></m:r>
403
- </m:e><m:sup><m:r><m:t>2</m:t></m:r></m:sup></m:sSup>
404
- <m:r><m:rPr><m:nor></m:nor></m:rPr><m:t>"integer"</m:t></m:r>
434
+ #{ASCII_MATH}
435
+ <m:r>
436
+ <m:rPr>
437
+ <m:nor></m:nor>
438
+ </m:rPr>
439
+ <m:t>\"integer\"</m:t>
440
+ </m:r>
405
441
  </m:oMath>
406
- </div>', '<div style="mso-element:footnote-list"/>')}
442
+ </div>", '<div style="mso-element:footnote-list"/>')}
407
443
  #{WORD_FTR1}
408
444
  OUTPUT
409
445
  end
@@ -413,22 +449,11 @@ RSpec.describe Html2Doc do
413
449
  expect(guid_clean(File.read("test.doc", encoding: "utf-8"))).
414
450
  to match_fuzzy(<<~OUTPUT)
415
451
  #{WORD_HDR} #{DEFAULT_STYLESHEET} #{WORD_HDR_END}
416
- #{word_body('
417
- <div style="text-align:left;"><m:oMathPara><m:oMathParaPr><m:jc m:val="left"/></m:oMathParaPr><m:oMath>
418
- <m:nary><m:naryPr><m:chr m:val="&#x2211;"></m:chr><m:limLoc m:val="undOvr"></m:limLoc><m:grow m:val="on"></m:grow><m:subHide m:val="off"></m:subHide><m:supHide m:val="off"></m:supHide></m:naryPr><m:sub>
419
- <m:r><m:t>i=1</m:t></m:r>
420
- </m:sub><m:sup><m:r><m:t>n</m:t></m:r></m:sup><m:e><m:sSup><m:e><m:r><m:t>i</m:t></m:r></m:e><m:sup><m:r><m:t>3</m:t></m:r></m:sup></m:sSup></m:e></m:nary>
421
- <m:r><m:t>=</m:t></m:r>
422
- <m:sSup><m:e>
423
- <m:r><m:t>(</m:t></m:r>
424
- <m:f><m:fPr><m:type m:val="bar"></m:type></m:fPr><m:num>
425
- <m:r><m:t>n</m:t></m:r>
426
- <m:r><m:t>(n+1)</m:t></m:r>
427
- </m:num><m:den><m:r><m:t>2</m:t></m:r></m:den></m:f>
428
- <m:r><m:t>)</m:t></m:r>
429
- </m:e><m:sup><m:r><m:t>2</m:t></m:r></m:sup></m:sSup>
452
+ #{word_body("
453
+ <div style=\"text-align:left;\"><m:oMathPara><m:oMathParaPr><m:jc m:val=\"left\"/></m:oMathParaPr><m:oMath>
454
+ #{ASCII_MATH}
430
455
  </m:oMath>
431
- </m:oMathPara></div>', '<div style="mso-element:footnote-list"/>')}
456
+ </m:oMathPara></div>", '<div style="mso-element:footnote-list"/>')}
432
457
  #{WORD_FTR1}
433
458
  OUTPUT
434
459
  end
@@ -438,22 +463,11 @@ RSpec.describe Html2Doc do
438
463
  expect(guid_clean(File.read("test.doc", encoding: "utf-8"))).
439
464
  to match_fuzzy(<<~OUTPUT)
440
465
  #{WORD_HDR} #{DEFAULT_STYLESHEET} #{WORD_HDR_END}
441
- #{word_body('
442
- <div style="text-align:right;"><m:oMathPara><m:oMathParaPr><m:jc m:val="right"/></m:oMathParaPr><m:oMath>
443
- <m:nary><m:naryPr><m:chr m:val="&#x2211;"></m:chr><m:limLoc m:val="undOvr"></m:limLoc><m:grow m:val="on"></m:grow><m:subHide m:val="off"></m:subHide><m:supHide m:val="off"></m:supHide></m:naryPr><m:sub>
444
- <m:r><m:t>i=1</m:t></m:r>
445
- </m:sub><m:sup><m:r><m:t>n</m:t></m:r></m:sup><m:e><m:sSup><m:e><m:r><m:t>i</m:t></m:r></m:e><m:sup><m:r><m:t>3</m:t></m:r></m:sup></m:sSup></m:e></m:nary>
446
- <m:r><m:t>=</m:t></m:r>
447
- <m:sSup><m:e>
448
- <m:r><m:t>(</m:t></m:r>
449
- <m:f><m:fPr><m:type m:val="bar"></m:type></m:fPr><m:num>
450
- <m:r><m:t>n</m:t></m:r>
451
- <m:r><m:t>(n+1)</m:t></m:r>
452
- </m:num><m:den><m:r><m:t>2</m:t></m:r></m:den></m:f>
453
- <m:r><m:t>)</m:t></m:r>
454
- </m:e><m:sup><m:r><m:t>2</m:t></m:r></m:sup></m:sSup>
466
+ #{word_body("
467
+ <div style=\"text-align:right;\"><m:oMathPara><m:oMathParaPr><m:jc m:val=\"right\"/></m:oMathParaPr><m:oMath>
468
+ #{ASCII_MATH}
455
469
  </m:oMath>
456
- </m:oMathPara></div>', '<div style="mso-element:footnote-list"/>')}
470
+ </m:oMathPara></div>", '<div style="mso-element:footnote-list"/>')}
457
471
  #{WORD_FTR1}
458
472
  OUTPUT
459
473
  end