isodoc 0.5.9 → 0.6.0

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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/isodoc.gemspec +1 -0
  3. data/lib/isodoc.rb +2 -0
  4. data/lib/isodoc/convert.rb +17 -1
  5. data/lib/isodoc/footnotes.rb +8 -3
  6. data/lib/isodoc/html.rb +65 -27
  7. data/lib/isodoc/i18n-en.yaml +1 -1
  8. data/lib/isodoc/iso/convert.rb +46 -0
  9. data/lib/isodoc/iso/html/header.html +184 -0
  10. data/lib/isodoc/iso/html/html_iso_intro.html +34 -0
  11. data/lib/isodoc/iso/html/html_iso_titlepage.html +32 -0
  12. data/lib/isodoc/iso/html/htmlstyle.scss +46 -0
  13. data/lib/isodoc/iso/html/isodoc.scss +679 -0
  14. data/lib/isodoc/iso/html/scripts.html +174 -0
  15. data/lib/isodoc/iso/html/style-human.scss +1277 -0
  16. data/lib/isodoc/iso/html/style-iso.scss +1257 -0
  17. data/lib/isodoc/iso/html/word_iso_intro.html +72 -0
  18. data/lib/isodoc/iso/html/word_iso_titlepage.html +58 -0
  19. data/lib/isodoc/iso/html/wordstyle.scss +1135 -0
  20. data/lib/isodoc/iso/wordconvert.rb +34 -0
  21. data/lib/isodoc/iso2wordhtml.rb +17 -23
  22. data/lib/isodoc/section.rb +1 -1
  23. data/lib/isodoc/version.rb +1 -1
  24. data/lib/isodoc/wordconvert/comments.rb +0 -15
  25. data/lib/isodoc/wordconvert/convert.rb +1 -0
  26. data/lib/isodoc/wordconvert/footnotes.rb +0 -12
  27. data/lib/isodoc/wordconvert/postprocess.rb +110 -0
  28. data/lib/isodoc/wordconvert/wordconvertmodule.rb +18 -130
  29. data/lib/isodoc/xref_sect_gen.rb +7 -4
  30. data/spec/assets/scripts.html +3 -1
  31. data/spec/isodoc/blocks_spec.rb +97 -211
  32. data/spec/isodoc/cleanup_spec.rb +27 -0
  33. data/spec/isodoc/footnotes_spec.rb +40 -53
  34. data/spec/isodoc/i18n_spec.rb +4 -56
  35. data/spec/isodoc/inline_spec.rb +7 -98
  36. data/spec/isodoc/iso_spec.rb +89 -0
  37. data/spec/isodoc/lists_spec.rb +5 -57
  38. data/spec/isodoc/postproc_spec.rb +43 -79
  39. data/spec/isodoc/ref_spec.rb +4 -17
  40. data/spec/isodoc/section_spec.rb +11 -24
  41. data/spec/isodoc/table_spec.rb +61 -76
  42. data/spec/isodoc/terms_spec.rb +1 -13
  43. data/spec/isodoc/xref_spec.rb +21 -164
  44. data/spec/spec_helper.rb +21 -1
  45. metadata +31 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 90089f0b90f1392ef99b4d676db3215397bb70fc
4
- data.tar.gz: 5d82f8fb83a29877f878716df97dc6499a998834
3
+ metadata.gz: e18be494066e54a1661baf231c7f7636c2be91d9
4
+ data.tar.gz: 366c0b7966f513d9dca521cf3f93803b9a1f0adf
5
5
  SHA512:
6
- metadata.gz: eb49c04b480775ba01401325d448b9d03181c93f6f456525755ac7a704b8eae5b19a88afd3ac736ff234bb5fc4e7e3a2c0affa0555128efc1e89071eec14f10b
7
- data.tar.gz: 382f620801c7e6a447f00de270f2d372a81abbc6f7bb878760e7a000527e2c085389ae694483a426f76d3b75fdb48d93d1d40abcd0601d9db68dee5bc6fd3e95
6
+ metadata.gz: c4d115c0302d6db04d082e282209333ea47b84f3beca675714d3744ef96a4a0a06cd0bfbd8b5fb50b520ca58ba196e1f8916d211884d62961377437c28a8f6c2
7
+ data.tar.gz: 441a80cb9e5160483563c7563c839ec9b4630c447042d72a7bf078083dda8acfb53f5614c3bf5d6d79ea6470188efcbe49977bb690d07fa843cb3a83f01529a7
data/isodoc.gemspec CHANGED
@@ -39,6 +39,7 @@ Gem::Specification.new do |spec|
39
39
  spec.add_dependency "html2doc"
40
40
  spec.add_dependency "liquid"
41
41
  spec.add_dependency "roman-numerals"
42
+ spec.add_dependency "sass"
42
43
 
43
44
  spec.add_development_dependency "bundler", "~> 1.15"
44
45
  spec.add_development_dependency "byebug", "~> 9.1"
data/lib/isodoc.rb CHANGED
@@ -13,4 +13,6 @@ require "set"
13
13
  require "pp"
14
14
  require "isodoc/convert"
15
15
  require "isodoc/wordconvert/convert"
16
+ require "isodoc/iso/convert"
17
+ require "isodoc/iso/wordconvert"
16
18
  end
@@ -15,6 +15,7 @@ require "isodoc/xref_gen"
15
15
  require "isodoc/xref_sect_gen"
16
16
  require "isodoc/html"
17
17
  require "isodoc/i18n"
18
+ require "sass"
18
19
 
19
20
  module IsoDoc
20
21
  class Convert
@@ -65,11 +66,26 @@ module IsoDoc
65
66
  @files_to_delete = []
66
67
  end
67
68
 
69
+ def html_doc_path(file)
70
+ File.join(File.dirname(__FILE__), File.join("html", file))
71
+ end
72
+
73
+ def generate_css(filename, stripwordcss, fontheader)
74
+ stylesheet = File.read(filename, encoding: "UTF-8")
75
+ stylesheet.gsub!(/(\s|\{)mso-[^:]+:[^;]+;/m, "\\1") if stripwordcss
76
+ engine = Sass::Engine.new(fontheader + stylesheet, syntax: :scss)
77
+ outname = File.basename(filename, ".*") + ".css"
78
+ File.open(outname, "w") { |f| f.write(engine.render) }
79
+ @files_to_delete << outname
80
+ outname
81
+ end
82
+
68
83
  def convert1(docxml, filename, dir)
84
+ anchor_names docxml
69
85
  noko do |xml|
70
86
  xml.html do |html|
71
87
  html.parent.add_namespace("epub", "http://www.idpf.org/2007/ops")
72
- html_header(html, docxml, filename, dir)
88
+ define_head html, filename, dir
73
89
  make_body(html, docxml)
74
90
  end
75
91
  end.join("\n")
@@ -23,7 +23,7 @@ module IsoDoc
23
23
  end
24
24
 
25
25
  def make_table_footnote_text(node, fnid, fnref)
26
- attrs = { id: "ftn#{fnid}" }
26
+ attrs = { id: "fn:#{fnid}" }
27
27
  noko do |xml|
28
28
  xml.div **attr_code(attrs) do |div|
29
29
  make_table_footnote_target(div, fnid, fnref)
@@ -34,7 +34,7 @@ module IsoDoc
34
34
 
35
35
  def make_generic_footnote_text(node, fnid)
36
36
  noko do |xml|
37
- xml.aside **{ id: "ftn#{fnid}", class: "footnote" } do |div|
37
+ xml.aside **{ id: "fn:#{fnid}", class: "footnote" } do |div|
38
38
  node.children.each { |n| parse(n, div) }
39
39
  end
40
40
  end.join("\n")
@@ -63,9 +63,14 @@ module IsoDoc
63
63
  def footnote_parse(node, out)
64
64
  return table_footnote_parse(node, out) if @in_table || @in_figure
65
65
  fn = node["reference"]
66
- out.a **{ "epub:type": "footnote", href: "#ftn#{fn}" } do |a|
66
+ attrs = { "epub:type": "footnote", rel: "footnote", href: "#fn:#{fn}" }
67
+ out.a **attrs do |a|
67
68
  a.sup { |sup| sup << fn }
68
69
  end
70
+ make_footnote(node, fn)
71
+ end
72
+
73
+ def make_footnote(node, fn)
69
74
  return if @seen_footnote.include?(fn)
70
75
  @in_footnote = true
71
76
  @footnotes << make_generic_footnote_text(node, fn)
data/lib/isodoc/html.rb CHANGED
@@ -6,10 +6,15 @@ module IsoDoc
6
6
  @files_to_delete.each { |f| system "rm #{f}" }
7
7
  end
8
8
 
9
+ def script_cdata(result)
10
+ result.gsub(%r{<script>\s*<!\[CDATA\[}m, "<script>").
11
+ gsub(%r{\]\]>\s*</script>}, "</script>").
12
+ gsub(%r{<!\[CDATA\[\s*<script>}m, "<script>").
13
+ gsub(%r{</script>\s*\]\]>}, "</script>")
14
+ end
15
+
9
16
  def toHTML(result, filename)
10
- result = from_xhtml(html_cleanup(to_xhtml(result))).
11
- gsub(%r{<script><!\[CDATA\[}, "<script>").
12
- gsub(%r{\]\]></script>}, "</script>")
17
+ result = script_cdata(from_xhtml(html_cleanup(to_xhtml(result))))
13
18
  result = populate_template(result, :html)
14
19
  File.open("#{filename}.html", "w") do |f|
15
20
  f.write(result)
@@ -48,14 +53,43 @@ module IsoDoc
48
53
  docxml
49
54
  end
50
55
 
56
+ def html_head()
57
+ <<~HEAD.freeze
58
+ <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
59
+
60
+ <!--TOC script import-->
61
+ <script type="text/javascript" src="https://cdn.rawgit.com/jgallen23/toc/0.3.2/dist/toc.min.js"></script>
62
+
63
+ <!--Google fonts-->
64
+ <link href="https://fonts.googleapis.com/css?family=Overpass:300,300i,600,900" rel="stylesheet">
65
+ <link href="https://fonts.googleapis.com/css?family=Lato:400,400i,700,900" rel="stylesheet">
66
+ <!--Font awesome import for the link icon-->
67
+ <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.8/css/solid.css" integrity="sha384-v2Tw72dyUXeU3y4aM2Y0tBJQkGfplr39mxZqlTBDUZAb9BGoC40+rdFCG0m10lXk" crossorigin="anonymous">
68
+ <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.8/css/fontawesome.css" integrity="sha384-q3jl8XQu1OpdLgGFvNRnPdj5VIlCvgsDQTQB6owSOHWlAurxul7f+JpUOVdAiJ5P" crossorigin="anonymous">
69
+ HEAD
70
+ end
71
+
72
+ def html_button()
73
+ '<button onclick="topFunction()" id="myBtn" '\
74
+ 'title="Go to top">Top</button>'.freeze
75
+ end
76
+
77
+ def html_main(docxml)
78
+ docxml.at("//head").add_child(html_head())
79
+ d = docxml.at('//div[@class="WordSection3"]')
80
+ d.name = "main"
81
+ d.children.first.previous = html_button()
82
+ end
83
+
51
84
  def html_preface(docxml)
52
85
  html_cover(docxml) if @htmlcoverpage
53
86
  html_intro(docxml) if @htmlintropage
54
87
  docxml.at("//body") << mathjax(@openmathdelim, @closemathdelim)
55
88
  if @scripts
56
89
  scripts = File.read(@scripts, encoding: "UTF-8")
57
- docxml.at("//body").add_child scripts #scripts.to_xml(encoding: "US-ASCII")
90
+ a = docxml.at("//body").add_child docxml.create_cdata(scripts) #scripts.to_xml(encoding: "US-ASCII")
58
91
  end
92
+ html_main(docxml)
59
93
  docxml
60
94
  end
61
95
 
@@ -120,9 +154,9 @@ module IsoDoc
120
154
  next if seen[x["href"]]
121
155
  seen[x["href"]] = true
122
156
  fn = docxml.at(%<//*[@id = '#{x['href'].sub(/^#/, '')}']>) || next
123
- x["id"] || x["id"] = "_footnote#{i + 1}"
124
- fn.elements.first.children.first.previous =
125
- "<a href='##{x['id']}'>#{x.at('./sup').text}) </a>"
157
+ x["id"] || x["id"] = "fnref:#{i + 1}"
158
+ fn.elements.first.children.first.previous = x.dup
159
+ fn.add_child "<a href='##{x['id']}'>&#x21A9;</a>"
126
160
  end
127
161
  docxml
128
162
  end
@@ -141,28 +175,32 @@ module IsoDoc
141
175
  docxml
142
176
  end
143
177
 
144
- def html_toc1(h, ret, prevname)
145
- h["id"] = UUIDTools::UUID.random_create.to_s unless h["id"]
146
- li = "<li><a href='##{h["id"]}'>#{header_strip(h)}</a></li>"
147
- if h.name == "h1"
148
- ret += "</ul>" if prevname == "h2"
149
- else
150
- ret += "<ul>" if prevname == "h1"
151
- end
152
- ret + li
153
- end
178
+ #def html_toc1(h, ret, prevname)
179
+ #h["id"] = UUIDTools::UUID.random_create.to_s unless h["id"]
180
+ #li = "<li><a href='##{h["id"]}'>#{header_strip(h)}</a></li>"
181
+ #if h.name == "h1"
182
+ #ret += "</ul>" if prevname == "h2"
183
+ #else
184
+ #ret += "<ul>" if prevname == "h1"
185
+ #end
186
+ #ret + li
187
+ #end
188
+ #
189
+ #def html_toc_obsolete(docxml)
190
+ #return docxml unless @htmlintropage
191
+ #ret = ""
192
+ #prevname = ""
193
+ #docxml.xpath("//h1 | //h2").each do |h|
194
+ #next if ["toc-contents", "TermNum"].include? h["class"]
195
+ #ret = html_toc1(h, ret, prevname)
196
+ #prevname = h.name
197
+ #end
198
+ #ret += "<ul>" if prevname == "h2"
199
+ #docxml.at("//*[@id='toc-list']").replace("<ul>#{ret}</ret>")
200
+ #docxml
201
+ #end
154
202
 
155
203
  def html_toc(docxml)
156
- return docxml unless @htmlintropage
157
- ret = ""
158
- prevname = ""
159
- docxml.xpath("//h1 | //h2").each do |h|
160
- next if ["toc-contents", "TermNum"].include? h["class"]
161
- ret = html_toc1(h, ret, prevname)
162
- prevname = h.name
163
- end
164
- ret += "<ul>" if prevname == "h2"
165
- docxml.at("//*[@id='toc-list']").replace("<ul>#{ret}</ret>")
166
204
  docxml
167
205
  end
168
206
  end
@@ -64,7 +64,7 @@ admonition: {
64
64
  warning: Warning,
65
65
  caution: Caution,
66
66
  important: Important,
67
- safety precautions: Safety Precautions,
67
+ safety precautions: Safety Precautions
68
68
  }
69
69
  locality: {
70
70
  section: Section,
@@ -0,0 +1,46 @@
1
+ module IsoDoc
2
+ module Iso
3
+ class Convert < IsoDoc::Convert
4
+
5
+ def default_fonts(options)
6
+ b = options[:bodyfont] ||
7
+ (options[:script] == "Hans" ? '"SimSun",serif' :
8
+ '"Cambria",serif')
9
+ h = options[:headerfont] ||
10
+ (options[:script] == "Hans" ? '"SimHei",sans-serif' :
11
+ '"Cambria",serif')
12
+ m = options[:monospacefont] || '"Courier New",monospace'
13
+ "$bodyfont: #{b};\n$headerfont: #{h};\n$monospacefont: #{m};\n"
14
+ end
15
+
16
+ def alt_fonts(options)
17
+ b = options[:bodyfont] ||
18
+ (options[:script] == "Hans" ? '"SimSun",serif' :
19
+ '"Lato",sans-serif')
20
+ h = options[:headerfont] ||
21
+ (options[:script] == "Hans" ? '"SimHei",sans-serif' :
22
+ '"Lato",sans-serif')
23
+ m = options[:monospacefont] || '"Space Mono",monospace'
24
+ "$bodyfont: #{b};\n$headerfont: #{h};\n$monospacefont: #{m};\n"
25
+ end
26
+
27
+ def html_doc_path(file)
28
+ File.join(File.dirname(__FILE__), File.join("html", file))
29
+ end
30
+
31
+ def initialize(options)
32
+ super
33
+ if options[:alt]
34
+ css = generate_css(html_doc_path("style-human.scss"), true, alt_fonts(options))
35
+ else
36
+ css = generate_css(html_doc_path("style-iso.scss"), true, default_fonts(options))
37
+ end
38
+ @htmlstylesheet = css
39
+ @htmlcoverpage = html_doc_path("html_iso_titlepage.html")
40
+ @htmlintropage = html_doc_path("html_iso_intro.html")
41
+ @scripts = html_doc_path("scripts.html")
42
+ end
43
+
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,184 @@
1
+ <html xmlns:v="urn:schemas-microsoft-com:vml"
2
+ xmlns:o="urn:schemas-microsoft-com:office:office"
3
+ xmlns:w="urn:schemas-microsoft-com:office:word"
4
+ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
5
+ xmlns:mv="http://macVmlSchemaUri" xmlns="http://www.w3.org/TR/REC-html40">
6
+
7
+ <head>
8
+ <meta name=Title content="">
9
+ <meta name=Keywords content="">
10
+ <meta http-equiv=Content-Type content="text/html; charset=utf-8">
11
+ <meta name=ProgId content=Word.Document>
12
+ <meta name=Generator content="Microsoft Word 15">
13
+ <meta name=Originator content="Microsoft Word 15">
14
+ <link id=Main-File rel=Main-File href="../{{ filename }}.html">
15
+ <!--[if gte mso 9]><xml>
16
+ <o:shapedefaults v:ext="edit" spidmax="2049"/>
17
+ </xml><![endif]-->
18
+ </head>
19
+
20
+ <body lang=EN link=blue vlink="#954F72">
21
+
22
+ <div style='mso-element:footnote-separator' id=fs>
23
+
24
+ <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
25
+ normal'><span lang=EN-GB><span style='mso-special-character:footnote-separator'><![if !supportFootnotes]>
26
+
27
+ <hr align=left size=1 width="33%">
28
+
29
+ <![endif]></span></span></p>
30
+
31
+ </div>
32
+
33
+ <div style='mso-element:footnote-continuation-separator' id=fcs>
34
+
35
+ <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
36
+ normal'><span lang=EN-GB><span style='mso-special-character:footnote-continuation-separator'><![if !supportFootnotes]>
37
+
38
+ <hr align=left size=1>
39
+
40
+ <![endif]></span></span></p>
41
+
42
+ </div>
43
+
44
+ <div style='mso-element:endnote-separator' id=es>
45
+
46
+ <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
47
+ normal'><span lang=EN-GB><span style='mso-special-character:footnote-separator'><![if !supportFootnotes]>
48
+
49
+ <hr align=left size=1 width="33%">
50
+
51
+ <![endif]></span></span></p>
52
+
53
+ </div>
54
+
55
+ <div style='mso-element:endnote-continuation-separator' id=ecs>
56
+
57
+ <p class=MsoNormal style='margin-bottom:0cm;margin-bottom:.0001pt;line-height:
58
+ normal'><span lang=EN-GB><span style='mso-special-character:footnote-continuation-separator'><![if !supportFootnotes]>
59
+
60
+ <hr align=left size=1>
61
+
62
+ <![endif]></span></span></p>
63
+
64
+ </div>
65
+
66
+ <div style='mso-element:header' id=eha>
67
+
68
+ <p class=MsoHeader align=left style='text-align:left;line-height:12.0pt;
69
+ mso-line-height-rule:exactly'><span lang=EN-GB>{{ agency }}&nbsp;{{ docnumber }}:{{ docyear }}(E){{ draftinfo }}</span></p>
70
+
71
+ </div>
72
+
73
+ <div style='mso-element:header' id=ha>
74
+
75
+ <p class=MsoHeader style='margin-bottom:18.0pt'><span lang=EN-GB
76
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt;font-weight:normal'>©
77
+ {{ agency }}&nbsp;{{ docyear }}&nbsp;– All rights reserved</span><span lang=EN-GB
78
+ style='font-weight:normal'><o:p></o:p></span></p>
79
+
80
+ </div>
81
+
82
+ <div style='mso-element:footer' id=efa>
83
+
84
+ <p class=MsoFooter style='margin-top:12.0pt;line-height:12.0pt;mso-line-height-rule:
85
+ exactly'><!--[if supportFields]><b style='mso-bidi-font-weight:normal'><span
86
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
87
+ style='mso-element:field-begin'></span><span
88
+ style='mso-spacerun:yes'> </span>PAGE<span style='mso-spacerun:yes'>  
89
+ </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span></b><![endif]--><b
90
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
91
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>2</span></span></b><!--[if supportFields]><b
92
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
93
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
94
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
95
+ style='mso-tab-count:1'>                                                                                                                                                                           </span>©
96
+ {{ agency }}&nbsp;{{ docyear }}&nbsp;– All rights reserved<o:p></o:p></span></p>
97
+
98
+ </div>
99
+
100
+ <div style='mso-element:header' id=eh2>
101
+
102
+ <p class=MsoHeader align=left style='text-align:left;line-height:12.0pt;
103
+ mso-line-height-rule:exactly'><span lang=EN-GB>{{ agency }}&nbsp;{{ docnumber }}:{{ docyear }}(E){{ draftinfo }}</span></p>
104
+
105
+ </div>
106
+
107
+ <div style='mso-element:header' id=h2>
108
+
109
+ <p class=MsoHeader align=right style='text-align:right;line-height:12.0pt;
110
+ mso-line-height-rule:exactly'><span lang=EN-GB>{{ agency }}&nbsp;{{ docnumber }}:{{ docyear }}(E){{ draftinfo }}</span></p>
111
+
112
+ </div>
113
+
114
+ <div style='mso-element:footer' id=ef2>
115
+
116
+ <p class=MsoFooter style='line-height:12.0pt;mso-line-height-rule:exactly'><!--[if supportFields]><span
117
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
118
+ style='mso-element:field-begin'></span><span
119
+ style='mso-spacerun:yes'> </span>PAGE<span style='mso-spacerun:yes'>  
120
+ </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span><![endif]--><span
121
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
122
+ style='mso-no-proof:yes'>ii</span></span><!--[if supportFields]><span
123
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
124
+ style='mso-element:field-end'></span></span><![endif]--><span lang=EN-GB
125
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span style='mso-tab-count:
126
+ 1'>                                                                                                                                                                           </span>©
127
+ {{ agency }}&nbsp;{{ docyear }}&nbsp;– All rights reserved<o:p></o:p></span></p>
128
+
129
+ </div>
130
+
131
+ <div style='mso-element:footer' id=f2>
132
+
133
+ <p class=MsoFooter style='line-height:12.0pt'><span lang=EN-GB
134
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'>© {{ agency }}&nbsp;{{ docyear }}&nbsp;– All
135
+ rights reserved<span style='mso-tab-count:1'>                                                                                                                                                                          </span></span><!--[if supportFields]><span
136
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
137
+ style='mso-element:field-begin'></span> PAGE<span style='mso-spacerun:yes'>  
138
+ </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span><![endif]--><span
139
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
140
+ style='mso-no-proof:yes'>iii</span></span><!--[if supportFields]><span
141
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
142
+ style='mso-element:field-end'></span></span><![endif]--><span lang=EN-GB
143
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><o:p></o:p></span></p>
144
+
145
+ </div>
146
+
147
+ <div style='mso-element:footer' id=ef3>
148
+
149
+ <p class=MsoFooter style='margin-top:12.0pt;line-height:12.0pt;mso-line-height-rule:
150
+ exactly'><!--[if supportFields]><b style='mso-bidi-font-weight:normal'><span
151
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
152
+ style='mso-element:field-begin'></span><span
153
+ style='mso-spacerun:yes'> </span>PAGE<span style='mso-spacerun:yes'>  
154
+ </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span></b><![endif]--><b
155
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
156
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>2</span></span></b><!--[if supportFields]><b
157
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
158
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
159
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
160
+ style='mso-tab-count:1'>                                                                                                                                                                           </span>©
161
+ {{ agency }}&nbsp;{{ docyear }}&nbsp;– All rights reserved<o:p></o:p></span></p>
162
+
163
+ </div>
164
+
165
+ <div style='mso-element:footer' id=f3>
166
+
167
+ <p class=MsoFooter style='line-height:12.0pt'><span lang=EN-GB
168
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'>© {{ agency }}&nbsp;{{ docyear }}&nbsp;– All
169
+ rights reserved<span style='mso-tab-count:1'>                                                                                                                                                                           </span></span><!--[if supportFields]><b
170
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
171
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-begin'></span>
172
+ PAGE<span style='mso-spacerun:yes'>   </span>\* MERGEFORMAT <span
173
+ style='mso-element:field-separator'></span></span></b><![endif]--><b
174
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
175
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>3</span></span></b><!--[if supportFields]><b
176
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
177
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
178
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><o:p></o:p></span></p>
179
+
180
+ </div>
181
+
182
+ </body>
183
+
184
+ </html>