isodoc 0.5.9 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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>