metanorma-ribose 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/macos.yml +42 -0
  3. data/.github/workflows/ubuntu.yml +42 -0
  4. data/.github/workflows/windows.yml +44 -0
  5. data/.gitignore +1 -0
  6. data/.hound.yml +3 -0
  7. data/.rubocop.yml +10 -0
  8. data/CODE_OF_CONDUCT.md +74 -0
  9. data/Gemfile +11 -0
  10. data/LICENSE +25 -0
  11. data/README.adoc +70 -0
  12. data/Rakefile +6 -0
  13. data/bin/console +14 -0
  14. data/bin/rspec +18 -0
  15. data/bin/setup +8 -0
  16. data/lib/asciidoctor/ribose.rb +4 -0
  17. data/lib/asciidoctor/ribose/basicdoc.rng +1059 -0
  18. data/lib/asciidoctor/ribose/biblio.rng +1237 -0
  19. data/lib/asciidoctor/ribose/boilerplate.xml +47 -0
  20. data/lib/asciidoctor/ribose/converter.rb +76 -0
  21. data/lib/asciidoctor/ribose/isodoc.rng +1504 -0
  22. data/lib/asciidoctor/ribose/reqt.rng +194 -0
  23. data/lib/asciidoctor/ribose/rsd.rng +79 -0
  24. data/lib/isodoc/ribose/base_convert.rb +36 -0
  25. data/lib/isodoc/ribose/html/header.html +242 -0
  26. data/lib/isodoc/ribose/html/html_rsd_intro.html +8 -0
  27. data/lib/isodoc/ribose/html/html_rsd_titlepage.html +90 -0
  28. data/lib/isodoc/ribose/html/htmlstyle.scss +751 -0
  29. data/lib/isodoc/ribose/html/logo.png +0 -0
  30. data/lib/isodoc/ribose/html/logo.svg +1 -0
  31. data/lib/isodoc/ribose/html/rsd.scss +760 -0
  32. data/lib/isodoc/ribose/html/scripts.html +71 -0
  33. data/lib/isodoc/ribose/html/word_rsd_intro.html +8 -0
  34. data/lib/isodoc/ribose/html/word_rsd_titlepage.html +119 -0
  35. data/lib/isodoc/ribose/html/wordstyle.scss +1170 -0
  36. data/lib/isodoc/ribose/html_convert.rb +34 -0
  37. data/lib/isodoc/ribose/metadata.rb +18 -0
  38. data/lib/isodoc/ribose/pdf_convert.rb +20 -0
  39. data/lib/isodoc/ribose/presentation_xml_convert.rb +11 -0
  40. data/lib/isodoc/ribose/rsd.standard.xsl +7076 -0
  41. data/lib/isodoc/ribose/word_convert.rb +31 -0
  42. data/lib/isodoc/ribose/xref.rb +31 -0
  43. data/lib/metanorma-ribose.rb +14 -0
  44. data/lib/metanorma/ribose.rb +32 -0
  45. data/lib/metanorma/ribose/processor.rb +42 -0
  46. data/lib/metanorma/ribose/version.rb +5 -0
  47. data/metanorma-ribose.gemspec +46 -0
  48. data/metanorma.yml +36 -0
  49. metadata +277 -0
@@ -0,0 +1,194 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
3
+ <!--
4
+ Presupposes isodoc.rnc, is included in it
5
+ include "isodoc.rnc" { }
6
+ -->
7
+ <define name="requirement">
8
+ <element name="requirement">
9
+ <ref name="RequirementType"/>
10
+ </element>
11
+ </define>
12
+ <define name="recommendation">
13
+ <element name="recommendation">
14
+ <ref name="RequirementType"/>
15
+ </element>
16
+ </define>
17
+ <define name="permission">
18
+ <element name="permission">
19
+ <ref name="RequirementType"/>
20
+ </element>
21
+ </define>
22
+ <define name="RequirementType">
23
+ <optional>
24
+ <attribute name="obligation">
25
+ <ref name="ObligationType"/>
26
+ </attribute>
27
+ </optional>
28
+ <optional>
29
+ <attribute name="unnumbered">
30
+ <data type="boolean"/>
31
+ </attribute>
32
+ </optional>
33
+ <optional>
34
+ <attribute name="number"/>
35
+ </optional>
36
+ <optional>
37
+ <attribute name="subsequence"/>
38
+ </optional>
39
+ <optional>
40
+ <attribute name="keep-with-next">
41
+ <data type="boolean"/>
42
+ </attribute>
43
+ </optional>
44
+ <optional>
45
+ <attribute name="keep-lines-together">
46
+ <data type="boolean"/>
47
+ </attribute>
48
+ </optional>
49
+ <attribute name="id">
50
+ <data type="ID"/>
51
+ </attribute>
52
+ <optional>
53
+ <attribute name="filename"/>
54
+ </optional>
55
+ <optional>
56
+ <attribute name="model"/>
57
+ </optional>
58
+ <optional>
59
+ <attribute name="type"/>
60
+ </optional>
61
+ <optional>
62
+ <ref name="reqtitle"/>
63
+ </optional>
64
+ <optional>
65
+ <ref name="label"/>
66
+ </optional>
67
+ <optional>
68
+ <ref name="subject"/>
69
+ </optional>
70
+ <zeroOrMore>
71
+ <ref name="reqinherit"/>
72
+ </zeroOrMore>
73
+ <zeroOrMore>
74
+ <ref name="classification"/>
75
+ </zeroOrMore>
76
+ <zeroOrMore>
77
+ <choice>
78
+ <ref name="measurementtarget"/>
79
+ <ref name="specification"/>
80
+ <ref name="verification"/>
81
+ <ref name="import"/>
82
+ <ref name="description"/>
83
+ </choice>
84
+ </zeroOrMore>
85
+ <optional>
86
+ <ref name="reqt_references"/>
87
+ </optional>
88
+ <zeroOrMore>
89
+ <choice>
90
+ <ref name="requirement"/>
91
+ <ref name="recommendation"/>
92
+ <ref name="permission"/>
93
+ </choice>
94
+ </zeroOrMore>
95
+ </define>
96
+ <define name="reqtitle">
97
+ <element name="title">
98
+ <ref name="FormattedString"/>
99
+ </element>
100
+ </define>
101
+ <define name="label">
102
+ <element name="label">
103
+ <text/>
104
+ </element>
105
+ </define>
106
+ <define name="subject">
107
+ <element name="subject">
108
+ <text/>
109
+ </element>
110
+ </define>
111
+ <define name="reqinherit">
112
+ <element name="inherit">
113
+ <text/>
114
+ </element>
115
+ </define>
116
+ <define name="measurementtarget">
117
+ <element name="measurement-target">
118
+ <ref name="RequirementSubpart"/>
119
+ </element>
120
+ </define>
121
+ <define name="specification">
122
+ <element name="specification">
123
+ <ref name="RequirementSubpart"/>
124
+ </element>
125
+ </define>
126
+ <define name="verification">
127
+ <element name="verification">
128
+ <ref name="RequirementSubpart"/>
129
+ </element>
130
+ </define>
131
+ <define name="import">
132
+ <element name="import">
133
+ <ref name="RequirementSubpart"/>
134
+ </element>
135
+ </define>
136
+ <define name="description">
137
+ <element name="description">
138
+ <ref name="RequirementSubpart"/>
139
+ </element>
140
+ </define>
141
+ <define name="reqt_references">
142
+ <element name="references">
143
+ <oneOrMore>
144
+ <ref name="bibitem"/>
145
+ </oneOrMore>
146
+ </element>
147
+ </define>
148
+ <define name="RequirementSubpart">
149
+ <optional>
150
+ <attribute name="type"/>
151
+ </optional>
152
+ <optional>
153
+ <attribute name="exclude">
154
+ <data type="boolean"/>
155
+ </attribute>
156
+ </optional>
157
+ <optional>
158
+ <attribute name="keep-with-next">
159
+ <data type="boolean"/>
160
+ </attribute>
161
+ </optional>
162
+ <optional>
163
+ <attribute name="keep-lines-together">
164
+ <data type="boolean"/>
165
+ </attribute>
166
+ </optional>
167
+ <oneOrMore>
168
+ <ref name="BasicBlock"/>
169
+ </oneOrMore>
170
+ </define>
171
+ <define name="ObligationType">
172
+ <choice>
173
+ <value>requirement</value>
174
+ <value>recommendation</value>
175
+ <value>permission</value>
176
+ </choice>
177
+ </define>
178
+ <define name="classification">
179
+ <element name="classification">
180
+ <ref name="classification_tag"/>
181
+ <ref name="classification_value"/>
182
+ </element>
183
+ </define>
184
+ <define name="classification_tag">
185
+ <element name="tag">
186
+ <text/>
187
+ </element>
188
+ </define>
189
+ <define name="classification_value">
190
+ <element name="value">
191
+ <text/>
192
+ </element>
193
+ </define>
194
+ </grammar>
@@ -0,0 +1,79 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <grammar ns="https://www.metanorma.org/ns/rsd" xmlns="http://relaxng.org/ns/structure/1.0">
3
+ <!--
4
+ Currently we inherit from a namespaced grammar, isostandard. Until we inherit from isodoc,
5
+ we cannot have a new default namespace: we will end up with a grammar with two different
6
+ namespaces, one for isostandard and one for csand additions. And we do not want that.
7
+ -->
8
+ <include href="isodoc.rng">
9
+ <start>
10
+ <ref name="rsd-standard"/>
11
+ </start>
12
+ <define name="DocumentType">
13
+ <choice>
14
+ <value>policy-and-procedures</value>
15
+ <value>best-practices</value>
16
+ <value>supporting-document</value>
17
+ <value>report</value>
18
+ <value>legal</value>
19
+ <value>directives</value>
20
+ <value>proposal</value>
21
+ <value>standard</value>
22
+ </choice>
23
+ </define>
24
+ <define name="editorialgroup">
25
+ <element name="editorialgroup">
26
+ <oneOrMore>
27
+ <ref name="committee"/>
28
+ </oneOrMore>
29
+ </element>
30
+ </define>
31
+ <define name="BibDataExtensionType">
32
+ <optional>
33
+ <ref name="doctype"/>
34
+ </optional>
35
+ <ref name="editorialgroup"/>
36
+ <zeroOrMore>
37
+ <ref name="ics"/>
38
+ </zeroOrMore>
39
+ <optional>
40
+ <ref name="security"/>
41
+ </optional>
42
+ </define>
43
+ </include>
44
+ <define name="committee">
45
+ <element name="committee">
46
+ <attribute name="type">
47
+ <choice>
48
+ <value>technical</value>
49
+ <value>provisional</value>
50
+ </choice>
51
+ </attribute>
52
+ <text/>
53
+ </element>
54
+ </define>
55
+ <define name="security">
56
+ <element name="security">
57
+ <text/>
58
+ </element>
59
+ </define>
60
+ <define name="rsd-standard">
61
+ <element name="rsd-standard">
62
+ <ref name="bibdata"/>
63
+ <zeroOrMore>
64
+ <ref name="termdocsource"/>
65
+ </zeroOrMore>
66
+ <optional>
67
+ <ref name="boilerplate"/>
68
+ </optional>
69
+ <ref name="preface"/>
70
+ <oneOrMore>
71
+ <ref name="sections"/>
72
+ </oneOrMore>
73
+ <zeroOrMore>
74
+ <ref name="annex"/>
75
+ </zeroOrMore>
76
+ <ref name="bibliography"/>
77
+ </element>
78
+ </define>
79
+ </grammar>
@@ -0,0 +1,36 @@
1
+ module IsoDoc
2
+ module Ribose
3
+ module BaseConvert
4
+ def metadata_init(lang, script, labels)
5
+ @meta = Metadata.new(lang, script, labels)
6
+ end
7
+
8
+ def xref_init(lang, script, klass, labels, options)
9
+ @xrefs = Xref.new(lang, script, klass, labels, options)
10
+ end
11
+
12
+ def annex_name(annex, name, div)
13
+ div.h1 **{ class: "Annex" } do |t|
14
+ t << "#{@xrefs.anchor(annex['id'], :label)}<br/><br/>"
15
+ name&.children&.each { |c2| parse(c2, t) }
16
+ end
17
+ end
18
+
19
+ def executivesummary docxml, out
20
+ f = docxml.at(ns("//executivesummary")) || return
21
+ title_attr = { class: "IntroTitle" }
22
+ page_break(out)
23
+ out.div **{ class: "Section3", id: f["id"] } do |div|
24
+ clause_name(nil, f&.at(ns("./title")), div, title_attr)
25
+ f.elements.each do |e|
26
+ parse(e, div) unless e.name == "title"
27
+ end
28
+ end
29
+ end
30
+
31
+ def clausedelim
32
+ ""
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,242 @@
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=eh1>
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>RR&nbsp;{{ docnumber }}:{{ docyear }}</span></p>
70
+
71
+ </div>
72
+
73
+ <div style='mso-element:header' id=h1>
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
+ Ribose Asia Limited&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=ef1>
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
+ Ribose Asia Limited&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
+ <p class=MsoHeader align=left style='text-align:left;line-height:12.0pt;
102
+ mso-line-height-rule:exactly'><span lang=EN-GB>RR&nbsp;{{ docnumber }}:{{ docyear }}</span></p>
103
+ </div>
104
+
105
+ <div style='mso-element:header' id=eh2l>
106
+ <p class=MsoHeaderLandscape align=left style='text-align:left;line-height:12.0pt;
107
+ mso-line-height-rule:exactly'><span lang=EN-GB>RR&nbsp;{{ docnumber }}:{{ docyear }}</span></p>
108
+ </div>
109
+
110
+ <div style='mso-element:header' id=h2>
111
+ <p class=MsoHeader align=right style='text-align:right;line-height:12.0pt;
112
+ mso-line-height-rule:exactly'><span lang=EN-GB>RR&nbsp;{{ docnumber }}:{{ docyear }}</span></p>
113
+ </div>
114
+
115
+ <div style='mso-element:header' id=h2l>
116
+ <p class=MsoHeaderLandscape align=right style='text-align:right;line-height:12.0pt;
117
+ mso-line-height-rule:exactly'><span lang=EN-GB>RR&nbsp;{{ docnumber }}:{{ docyear }}</span></p>
118
+ </div>
119
+
120
+ <div style='mso-element:footer' id=ef2>
121
+ <p class=MsoFooter style='line-height:12.0pt;mso-line-height-rule:exactly'><!--[if supportFields]><span
122
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
123
+ style='mso-element:field-begin'></span><span
124
+ style='mso-spacerun:yes'> </span>PAGE<span style='mso-spacerun:yes'>  
125
+ </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span><![endif]--><span
126
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
127
+ style='mso-no-proof:yes'>ii</span></span><!--[if supportFields]><span
128
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
129
+ style='mso-element:field-end'></span></span><![endif]--><span lang=EN-GB
130
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span style='mso-tab-count:
131
+ 1'>                                                                                                                                                                           </span>©
132
+ Ribose Asia Limited&nbsp;{{ docyear }}&nbsp;– All rights reserved<o:p></o:p></span></p>
133
+ </div>
134
+
135
+ <div style='mso-element:footer' id=ef2l>
136
+ <p class=MsoFooterLandscape style='line-height:12.0pt;mso-line-height-rule:exactly'><!--[if supportFields]><span
137
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
138
+ style='mso-element:field-begin'></span><span
139
+ style='mso-spacerun:yes'> </span>PAGE<span style='mso-spacerun:yes'>  
140
+ </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span><![endif]--><span
141
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
142
+ style='mso-no-proof:yes'>ii</span></span><!--[if supportFields]><span
143
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
144
+ style='mso-element:field-end'></span></span><![endif]--><span lang=EN-GB
145
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span style='mso-tab-count:
146
+ 1'>                                                                                                                                                                           </span>©
147
+ Ribose Asia Limited&nbsp;{{ docyear }}&nbsp;– All rights reserved<o:p></o:p></span></p>
148
+ </div>
149
+
150
+ <div style='mso-element:footer' id=f2>
151
+ <p class=MsoFooter style='line-height:12.0pt'><span lang=EN-GB
152
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'>© Ribose Asia Limited&nbsp;{{ docyear }}&nbsp;– All
153
+ rights reserved<span style='mso-tab-count:1'>                                                                                                                                                                          </span></span><!--[if supportFields]><span
154
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
155
+ style='mso-element:field-begin'></span> PAGE<span style='mso-spacerun:yes'>  
156
+ </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span><![endif]--><span
157
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
158
+ style='mso-no-proof:yes'>iii</span></span><!--[if supportFields]><span
159
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
160
+ style='mso-element:field-end'></span></span><![endif]--><span lang=EN-GB
161
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><o:p></o:p></span></p>
162
+ </div>
163
+
164
+ <div style='mso-element:footer' id=f2l>
165
+ <p class=MsoFooterLandscape style='line-height:12.0pt'><span lang=EN-GB
166
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'>© Ribose Asia Limited&nbsp;{{ docyear }}&nbsp;– All
167
+ rights reserved<span style='mso-tab-count:1'>                                                                                                                                                                          </span></span><!--[if supportFields]><span
168
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
169
+ style='mso-element:field-begin'></span> PAGE<span style='mso-spacerun:yes'>  
170
+ </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span><![endif]--><span
171
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
172
+ style='mso-no-proof:yes'>iii</span></span><!--[if supportFields]><span
173
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
174
+ style='mso-element:field-end'></span></span><![endif]--><span lang=EN-GB
175
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><o:p></o:p></span></p>
176
+ </div>
177
+
178
+ <div style='mso-element:footer' id=ef3>
179
+ <p class=MsoFooter style='margin-top:12.0pt;line-height:12.0pt;mso-line-height-rule:
180
+ exactly'><!--[if supportFields]><b style='mso-bidi-font-weight:normal'><span
181
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
182
+ style='mso-element:field-begin'></span><span
183
+ style='mso-spacerun:yes'> </span>PAGE<span style='mso-spacerun:yes'>  
184
+ </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span></b><![endif]--><b
185
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
186
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>2</span></span></b><!--[if supportFields]><b
187
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
188
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
189
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
190
+ style='mso-tab-count:1'>                                                                                                                                                                           </span>©
191
+ Ribose Asia Limited&nbsp;{{ docyear }}&nbsp;– All rights reserved<o:p></o:p></span></p>
192
+ </div>
193
+
194
+ <div style='mso-element:footer' id=ef3l>
195
+ <p class=MsoFooterLandscape style='margin-top:12.0pt;line-height:12.0pt;mso-line-height-rule:
196
+ exactly'><!--[if supportFields]><b style='mso-bidi-font-weight:normal'><span
197
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
198
+ style='mso-element:field-begin'></span><span
199
+ style='mso-spacerun:yes'> </span>PAGE<span style='mso-spacerun:yes'>  
200
+ </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span></b><![endif]--><b
201
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
202
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>2</span></span></b><!--[if supportFields]><b
203
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
204
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
205
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><span
206
+ style='mso-tab-count:1'>                                                                                                                                                                           </span>©
207
+ Ribose Asia Limited&nbsp;{{ docyear }}&nbsp;– All rights reserved<o:p></o:p></span></p>
208
+ </div>
209
+
210
+ <div style='mso-element:footer' id=f3>
211
+ <p class=MsoFooter style='line-height:12.0pt'><span lang=EN-GB
212
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'>© Ribose Asia Limited&nbsp;{{ docyear }}&nbsp;– All
213
+ rights reserved<span style='mso-tab-count:1'>                                                                                                                                                                           </span></span><!--[if supportFields]><b
214
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
215
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-begin'></span>
216
+ PAGE<span style='mso-spacerun:yes'>   </span>\* MERGEFORMAT <span
217
+ style='mso-element:field-separator'></span></span></b><![endif]--><b
218
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
219
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>3</span></span></b><!--[if supportFields]><b
220
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
221
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
222
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><o:p></o:p></span></p>
223
+ </div>
224
+
225
+ <div style='mso-element:footer' id=f3l>
226
+ <p class=MsoFooterLandscape style='line-height:12.0pt'><span lang=EN-GB
227
+ style='font-size:10.0pt;mso-bidi-font-size:11.0pt'>© Ribose Asia Limited&nbsp;{{ docyear }}&nbsp;– All
228
+ rights reserved<span style='mso-tab-count:1'>                                                                                                                                                                           </span></span><!--[if supportFields]><b
229
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
230
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-begin'></span>
231
+ PAGE<span style='mso-spacerun:yes'>   </span>\* MERGEFORMAT <span
232
+ style='mso-element:field-separator'></span></span></b><![endif]--><b
233
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
234
+ mso-bidi-font-size:11.0pt'><span style='mso-no-proof:yes'>3</span></span></b><!--[if supportFields]><b
235
+ style='mso-bidi-font-weight:normal'><span lang=EN-GB style='font-size:10.0pt;
236
+ mso-bidi-font-size:11.0pt'><span style='mso-element:field-end'></span></span></b><![endif]--><span
237
+ lang=EN-GB style='font-size:10.0pt;mso-bidi-font-size:11.0pt'><o:p></o:p></span></p>
238
+ </div>
239
+
240
+ </body>
241
+
242
+ </html>