asciidoctor-csd 0.1.0 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,174 @@
1
+ require "asciidoctor"
2
+ require "asciidoctor/csd/version"
3
+ require "asciidoctor/csd/csdconvert"
4
+ require "asciidoctor/iso/converter"
5
+
6
+ module Asciidoctor
7
+ module Csd
8
+ CSD_NAMESPACE = "https://www.calconnect.org/standards/csd"
9
+
10
+ # A {Converter} implementation that generates CSD output, and a document
11
+ # schema encapsulation of the document for validation
12
+ class Converter < ISO::Converter
13
+
14
+ register_for "csd"
15
+
16
+ def metadata_author(node, xml)
17
+ xml.contributor do |c|
18
+ c.role **{ type: "author" }
19
+ c.organization do |a|
20
+ a.name "CalConnect"
21
+ end
22
+ end
23
+ end
24
+
25
+ def metadata_publisher(node, xml)
26
+ xml.contributor do |c|
27
+ c.role **{ type: "publisher" }
28
+ c.organization do |a|
29
+ a.name "CalConnect"
30
+ end
31
+ end
32
+ end
33
+
34
+ def metadata_committee(node, xml)
35
+ xml.editorialgroup do |a|
36
+ a.technical_committee node.attr("technical-committee"),
37
+ **attr_code(type: node.attr("technical-committee-type"))
38
+ end
39
+ end
40
+
41
+ def title(node, xml)
42
+ ["en"].each do |lang|
43
+ xml.title **{ language: lang, format: "plain" } do |t|
44
+ t << node.attr("title")
45
+ end
46
+ end
47
+ end
48
+
49
+ def metadata_status(node, xml)
50
+ xml.status **{ format: "plain" } { |s| s << node.attr("status") }
51
+ end
52
+
53
+ def metadata_id(node, xml)
54
+ xml.docidentifier { |i| i << node.attr("docnumber") }
55
+ end
56
+
57
+ def metadata_copyright(node, xml)
58
+ from = node.attr("copyright-year") || Date.today.year
59
+ xml.copyright do |c|
60
+ c.from from
61
+ c.owner do |owner|
62
+ owner.organization do |o|
63
+ o.name "CalConnect"
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ def title_validate(root)
70
+ nil
71
+ end
72
+
73
+ def makexml(node)
74
+ result = ["<?xml version='1.0' encoding='UTF-8'?>\n<csd-standard>"]
75
+ @draft = node.attributes.has_key?("draft")
76
+ result << noko { |ixml| front node, ixml }
77
+ result << noko { |ixml| middle node, ixml }
78
+ result << "</csd-standard>"
79
+ result = textcleanup(result.flatten * "\n")
80
+ ret1 = cleanup(Nokogiri::XML(result))
81
+ validate(ret1)
82
+ ret1.root.add_namespace(nil, CSD_NAMESPACE)
83
+ ret1
84
+ end
85
+
86
+ def document(node)
87
+ init(node)
88
+ ret1 = makexml(node)
89
+ ret = ret1.to_xml(indent: 2)
90
+ filename = node.attr("docfile").gsub(/\.adoc/, ".xml").
91
+ gsub(%r{^.*/}, "")
92
+ File.open(filename, "w") { |f| f.write(ret) }
93
+ html_converter(node).convert filename unless node.attr("nodoc")
94
+ @files_to_delete.each { |f| system "rm #{f}" }
95
+ ret
96
+ end
97
+
98
+ def validate(doc)
99
+ content_validate(doc)
100
+ schema_validate(formattedstr_strip(doc.dup),
101
+ File.join(File.dirname(__FILE__), "csd.rng"))
102
+ end
103
+
104
+ def html_doc_path(file)
105
+ File.join(File.dirname(__FILE__), File.join("html", file))
106
+ end
107
+
108
+ def literal(node)
109
+ noko do |xml|
110
+ xml.figure **id_attr(node) do |f|
111
+ figure_title(node, f)
112
+ f.pre node.lines.join("\n")
113
+ end
114
+ end
115
+ end
116
+
117
+ def sections_cleanup(x)
118
+ super
119
+ x.xpath("//*[@inline-header]").each do |h|
120
+ h.delete("inline-header")
121
+ end
122
+ end
123
+
124
+ def style(n, t)
125
+ return
126
+ end
127
+
128
+ def html_converter(_node)
129
+ CsdConvert.new(
130
+ htmlstylesheet: generate_css(html_doc_path("htmlstyle.scss"), true),
131
+ standardstylesheet: generate_css(html_doc_path("csd.scss"), true),
132
+ htmlcoverpage: html_doc_path("html_csd_titlepage.html"),
133
+ htmlintropage: html_doc_path("html_csd_intro.html"),
134
+ scripts: html_doc_path("scripts.html"),
135
+ )
136
+ end
137
+
138
+ def default_fonts(node)
139
+ b = node.attr("body-font") ||
140
+ (node.attr("script") == "Hans" ? '"SimSun",serif' :
141
+ '"Overpass",sans-serif')
142
+ h = node.attr("header-font") ||
143
+ (node.attr("script") == "Hans" ? '"SimHei",sans-serif' :
144
+ '"Overpass",sans-serif')
145
+ m = node.attr("monospace-font") || '"Space Mono",monospace'
146
+ "$bodyfont: #{b};\n$headerfont: #{h};\n$monospacefont: #{m};\n"
147
+ end
148
+
149
+ def inline_quoted(node)
150
+ noko do |xml|
151
+ case node.type
152
+ when :emphasis then xml.em node.text
153
+ when :strong then xml.strong node.text
154
+ when :monospaced then xml.tt node.text
155
+ when :double then xml << "\"#{node.text}\""
156
+ when :single then xml << "'#{node.text}'"
157
+ when :superscript then xml.sup node.text
158
+ when :subscript then xml.sub node.text
159
+ when :asciimath then stem_parse(node.text, xml)
160
+ else
161
+ case node.role
162
+ when "strike" then xml.strike node.text
163
+ when "smallcap" then xml.smallcap node.text
164
+ when "keyword" then xml.keyword node.text
165
+ else
166
+ xml << node.text
167
+ end
168
+ end
169
+ end.join
170
+ end
171
+
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,134 @@
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
+ default namespace = "http://riboseinc.com/csd"
5
+ Currently we inherit from a namespaced grammar, isostandard. Until we inherit from isodoc,
6
+ we cannot have a new default namespace: we will end up with a grammar with two different
7
+ namespaces, one for isostandard and one for csd additions. And we do not want that.
8
+ -->
9
+ <include href="isostandard.rng">
10
+ <start>
11
+ <ref name="csd-standard"/>
12
+ </start>
13
+ <define name="language">
14
+ <element name="language">
15
+ <value>en</value>
16
+ </element>
17
+ </define>
18
+ <define name="docidentifier">
19
+ <element name="docidentifier">
20
+ <text/>
21
+ </element>
22
+ </define>
23
+ <define name="btitle">
24
+ <element name="title">
25
+ <ref name="FormattedString"/>
26
+ </element>
27
+ </define>
28
+ <define name="status">
29
+ <element name="status">
30
+ <choice>
31
+ <value>proposal</value>
32
+ <value>working-draft</value>
33
+ <value>committee-draft</value>
34
+ <value>draft-standard</value>
35
+ <value>final-draft</value>
36
+ <value>published</value>
37
+ <value>withdrawn</value>
38
+ </choice>
39
+ </element>
40
+ </define>
41
+ <define name="figure">
42
+ <element name="figure">
43
+ <attribute name="id">
44
+ <data type="ID"/>
45
+ </attribute>
46
+ <optional>
47
+ <ref name="source"/>
48
+ </optional>
49
+ <optional>
50
+ <ref name="tname"/>
51
+ </optional>
52
+ <choice>
53
+ <oneOrMore>
54
+ <ref name="figure"/>
55
+ </oneOrMore>
56
+ <group>
57
+ <choice>
58
+ <zeroOrMore>
59
+ <ref name="TextElement"/>
60
+ </zeroOrMore>
61
+ <ref name="pre"/>
62
+ </choice>
63
+ <zeroOrMore>
64
+ <ref name="note"/>
65
+ </zeroOrMore>
66
+ <optional>
67
+ <ref name="dl"/>
68
+ </optional>
69
+ </group>
70
+ </choice>
71
+ </element>
72
+ </define>
73
+ <!-- TextElement |= keyword -->
74
+ <define name="TextElement">
75
+ <choice>
76
+ <text/>
77
+ <ref name="em"/>
78
+ <ref name="eref"/>
79
+ <ref name="strong"/>
80
+ <ref name="stem"/>
81
+ <ref name="sub"/>
82
+ <ref name="sup"/>
83
+ <ref name="tt"/>
84
+ <ref name="strike"/>
85
+ <ref name="smallcap"/>
86
+ <ref name="xref"/>
87
+ <ref name="br"/>
88
+ <ref name="hyperlink"/>
89
+ <ref name="hr"/>
90
+ <ref name="pagebreak"/>
91
+ <ref name="bookmark"/>
92
+ <ref name="keyword"/>
93
+ </choice>
94
+ </define>
95
+ </include>
96
+ <define name="BibItemType" combine="choice">
97
+ <choice>
98
+ <value>code</value>
99
+ <value>presentation</value>
100
+ <value>proposal</value>
101
+ <value>standard</value>
102
+ <value>report</value>
103
+ </choice>
104
+ </define>
105
+ <define name="pre">
106
+ <element name="pre">
107
+ <text/>
108
+ </element>
109
+ </define>
110
+ <define name="keyword">
111
+ <element name="keyword">
112
+ <text/>
113
+ </element>
114
+ </define>
115
+ <define name="csd-standard">
116
+ <element name="csd-standard">
117
+ <ref name="bibdata"/>
118
+ <optional>
119
+ <ref name="version"/>
120
+ </optional>
121
+ <zeroOrMore>
122
+ <ref name="termdocsource"/>
123
+ </zeroOrMore>
124
+ <ref name="preface"/>
125
+ <oneOrMore>
126
+ <ref name="sections"/>
127
+ </oneOrMore>
128
+ <zeroOrMore>
129
+ <ref name="annex"/>
130
+ </zeroOrMore>
131
+ <ref name="bibliography"/>
132
+ </element>
133
+ </define>
134
+ </grammar>
@@ -0,0 +1,135 @@
1
+ require "isodoc"
2
+
3
+ module Asciidoctor
4
+ module Csd
5
+ # A {Converter} implementation that generates CSD output, and a document
6
+ # schema encapsulation of the document for validation
7
+ class CsdConvert < IsoDoc::Convert
8
+ def initialize(options)
9
+ super
10
+ set_metadata(:status, "XXX")
11
+ end
12
+
13
+ def init_metadata
14
+ super
15
+ end
16
+
17
+ def title(isoxml, _out)
18
+ main = isoxml&.at(ns("//title[@language='en']"))&.text
19
+ set_metadata(:doctitle, main)
20
+ end
21
+
22
+ def subtitle(_isoxml, _out)
23
+ nil
24
+ end
25
+
26
+ def author(isoxml, _out)
27
+ set_metadata(:tc, "XXXX")
28
+ tc = isoxml.at(ns("//editorialgroup/technical-committee"))
29
+ set_metadata(:tc, tc.text) if tc
30
+ end
31
+
32
+
33
+ def docid(isoxml, _out)
34
+ docnumber = isoxml.at(ns("//bibdata/docidentifier"))
35
+ docstatus = isoxml.at(ns("//bibdata/status"))
36
+ dn = docnumber&.text
37
+ if docstatus
38
+ set_metadata(:status, status_print(docstatus.text))
39
+ abbr = status_abbr(docstatus.text)
40
+ dn = "#{dn}(#{abbr})" unless abbr.empty?
41
+ end
42
+ set_metadata(:docnumber, dn)
43
+ end
44
+
45
+ def status_print(status)
46
+ status.split(/-/).map{ |w| w.capitalize }.join(" ")
47
+ end
48
+
49
+ def status_abbr(status)
50
+ case status
51
+ when "working-draft" then "wd"
52
+ when "committee-draft" then "cd"
53
+ when "draft-standard" then "d"
54
+ else
55
+ ""
56
+ end
57
+ end
58
+
59
+ def pre_parse(node, out)
60
+ out.pre node.text # content.gsub(/</, "&lt;").gsub(/>/, "&gt;")
61
+ end
62
+
63
+ def term_defs_boilerplate(div, source, term)
64
+ if source.empty? && term.nil?
65
+ div << @no_terms_boilerplate
66
+ else
67
+ div << term_defs_boilerplate_cont(source, term)
68
+ end
69
+ end
70
+
71
+ def i18n_init(lang, script)
72
+ super
73
+ @annex_lbl = "Appendix"
74
+ end
75
+
76
+ def error_parse(node, out)
77
+ # catch elements not defined in ISO
78
+ case node.name
79
+ when "pre"
80
+ pre_parse(node, out)
81
+ when "keyword"
82
+ out.span node.text, **{ class: "keyword" }
83
+ else
84
+ super
85
+ end
86
+ end
87
+
88
+ HEAD = <<~HEAD.freeze
89
+ <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
90
+
91
+ <!--TOC script import-->
92
+ <script type="text/javascript" src="https://cdn.rawgit.com/jgallen23/toc/0.3.2/dist/toc.min.js"></script>
93
+
94
+ <!--Google fonts-->
95
+ <link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,600,600i|Space+Mono:400,700" rel="stylesheet">
96
+ <link href="https://fonts.googleapis.com/css?family=Overpass:300,300i,600,900" rel="stylesheet">
97
+ <!--Font awesome import for the link icon-->
98
+ <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.8/css/solid.css" integrity="sha384-v2Tw72dyUXeU3y4aM2Y0tBJQkGfplr39mxZqlTBDUZAb9BGoC40+rdFCG0m10lXk" crossorigin="anonymous">
99
+ <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.8/css/fontawesome.css" integrity="sha384-q3jl8XQu1OpdLgGFvNRnPdj5VIlCvgsDQTQB6owSOHWlAurxul7f+JpUOVdAiJ5P" crossorigin="anonymous">
100
+ HEAD
101
+
102
+ BUTTON = '<button onclick="topFunction()" id="myBtn" '\
103
+ 'title="Go to top">Top</button>'.freeze
104
+
105
+
106
+ def html_main(docxml)
107
+ d = docxml.at('//div[@class="WordSection3"]')
108
+ s = d.replace("<main></main>")
109
+ s.first.children = d
110
+ s.first.children.first.previous = BUTTON
111
+ end
112
+
113
+ def html_preface(docxml)
114
+ super
115
+ docxml.at("//head").add_child(HEAD)
116
+ html_main(docxml)
117
+ docxml
118
+ end
119
+
120
+ def make_body(xml, docxml)
121
+ body_attr = { lang: "EN-US", link: "blue", vlink: "#954F72", "xml:lang": "EN-US", class: "container" }
122
+ xml.body **body_attr do |body|
123
+ make_body1(body, docxml)
124
+ make_body2(body, docxml)
125
+ make_body3(body, docxml)
126
+ end
127
+ end
128
+
129
+ def html_toc(docxml)
130
+ docxml
131
+ end
132
+ end
133
+ end
134
+ end
135
+
@@ -0,0 +1,541 @@
1
+ p.Sourcecode, li.Sourcecode, div.Sourcecode, pre.Sourcecode
2
+ {mso-style-unhide:no;
3
+ mso-style-qformat:yes;
4
+ mso-style-parent:"";
5
+ margin-top:0cm;
6
+ margin-right:0cm;
7
+ margin-bottom:12.0pt;
8
+ margin-left:0cm;
9
+ text-align:left;
10
+ line-height:12.0pt;
11
+ mso-pagination:widow-orphan;
12
+ tab-stops:20.15pt;
13
+ font-size:9.0pt;
14
+ font-family:$monospacefont;
15
+ mso-fareast-font-family:Calibri;
16
+ mso-bidi-font-family:"Courier New";
17
+ mso-ansi-language:EN-GB;}
18
+ p.Biblio, li.Biblio, div.Biblio
19
+ {mso-style-unhide:no;
20
+ mso-style-qformat:yes;
21
+ mso-style-parent:"";
22
+ margin-top:0cm;
23
+ margin-right:0cm;
24
+ margin-bottom:12.0pt;
25
+ margin-left:33.15pt;
26
+ text-indent:-33.15pt;
27
+ tab-stops: 33.15pt;
28
+ line-height:12.0pt;
29
+ mso-pagination:widow-orphan;
30
+ font-size:11.0pt;
31
+ font-weight:bold;
32
+ font-family:$bodyfont;
33
+ mso-fareast-font-family:$bodyfont;
34
+ mso-bidi-font-family:$bodyfont;
35
+ mso-ansi-language:EN-GB;}
36
+ p.FigureTitle
37
+ {mso-style-unhide:no;
38
+ mso-style-qformat:yes;
39
+ mso-style-parent:"";
40
+ margin-top:0cm;
41
+ margin-right:0cm;
42
+ margin-bottom:6.0pt;
43
+ margin-left:0cm;
44
+ text-align:center;
45
+ line-height:12.0pt;
46
+ page-break-before:avoid;
47
+ mso-pagination:widow-orphan;
48
+ tab-stops:20.15pt;
49
+ font-size:11.0pt;
50
+ font-weight:bold;
51
+ font-family:$bodyfont;
52
+ mso-fareast-font-family:$bodyfont;
53
+ mso-bidi-font-family:$bodyfont;
54
+ mso-ansi-language:EN-GB;}
55
+ p.TableTitle
56
+ {mso-style-unhide:no;
57
+ mso-style-qformat:yes;
58
+ mso-style-parent:"";
59
+ margin-top:0cm;
60
+ margin-right:0cm;
61
+ margin-bottom:6.0pt;
62
+ margin-left:0cm;
63
+ text-align:center;
64
+ page-break-after:avoid;
65
+ line-height:12.0pt;
66
+ mso-pagination:widow-orphan;
67
+ tab-stops:20.15pt;
68
+ font-size:11.0pt;
69
+ font-family:$bodyfont;
70
+ mso-fareast-font-family:$bodyfont;
71
+ mso-bidi-font-family:$bodyfont;
72
+ mso-ansi-language:EN-GB;}
73
+ p.Note, div.Note, li.Note, p.TableFootnote, div.TableFootnote, li.TableFootnote
74
+ {mso-style-unhide:no;
75
+ mso-style-qformat:yes;
76
+ mso-style-parent:"";
77
+ margin-top:0cm;
78
+ margin-right:0cm;
79
+ margin-bottom:12.0pt;
80
+ margin-left:0cm;
81
+ text-align:justify;
82
+ line-height:12.0pt;
83
+ mso-pagination:widow-orphan;
84
+ tab-stops:20.15pt;
85
+ font-size:10.0pt;
86
+ mso-bidi-font-size:11.0pt;
87
+ font-family:$bodyfont;
88
+ font-size:10.0pt;
89
+ mso-fareast-font-family:$bodyfont;
90
+ mso-bidi-font-family:$bodyfont;
91
+ mso-ansi-language:EN-GB;}
92
+ p.ANNEX, li.ANNEX, div.ANNEX
93
+ {mso-style-name:ANNEX;
94
+ mso-style-priority:10;
95
+ mso-style-unhide:no;
96
+ mso-style-next:Normal;
97
+ margin-top:0cm;
98
+ margin-right:0cm;
99
+ margin-bottom:24.0pt;
100
+ margin-left:0cm;
101
+ text-align:center;
102
+ text-indent:0cm;
103
+ line-height:15.5pt;
104
+ mso-line-height-rule:exactly;
105
+ page-break-before:always;
106
+ mso-pagination:widow-orphan;
107
+ page-break-after:avoid;
108
+ mso-outline-level:1;
109
+ mso-list:l0 level1 lfo12;
110
+ tab-stops:20.15pt;
111
+ font-size:14.0pt;
112
+ mso-bidi-font-size:11.0pt;
113
+ font-family:$headerfont;
114
+ mso-fareast-font-family:$headerfont;
115
+ mso-bidi-font-family:$headerfont;
116
+ mso-ansi-language:EN-GB;
117
+ mso-fareast-language:JA;
118
+ font-weight:bold;
119
+ mso-bidi-font-weight:normal;}
120
+ p.BiblioTitle, li.BiblioTitle, div.BiblioTitle
121
+ {mso-style-name:"Biblio Title";
122
+ mso-style-noshow:yes;
123
+ mso-style-unhide:no;
124
+ margin-top:0cm;
125
+ margin-right:0cm;
126
+ margin-bottom:15.5pt;
127
+ margin-left:0cm;
128
+ text-align:center;
129
+ line-height:15.5pt;
130
+ mso-pagination:widow-orphan;
131
+ mso-outline-level:1;
132
+ tab-stops:20.15pt;
133
+ font-size:14.0pt;
134
+ mso-bidi-font-size:11.0pt;
135
+ font-family:$headerfont;
136
+ mso-fareast-font-family:$headerfont;
137
+ mso-bidi-font-family:$headerfont;
138
+ mso-ansi-language:EN-GB;
139
+ font-weight:bold;
140
+ mso-bidi-font-weight:normal;}
141
+ p.Definition, li.Definition, div.Definition
142
+ {mso-style-name:Definition;
143
+ mso-style-priority:9;
144
+ mso-style-unhide:no;
145
+ margin-top:0cm;
146
+ margin-right:0cm;
147
+ margin-bottom:12.0pt;
148
+ margin-left:0cm;
149
+ text-align:justify;
150
+ line-height:12.0pt;
151
+ mso-pagination:widow-orphan;
152
+ tab-stops:20.15pt;
153
+ font-size:11.0pt;
154
+ font-family:$bodyfont;
155
+ mso-fareast-font-family:$bodyfont;
156
+ mso-bidi-font-family:$bodyfont;
157
+ mso-ansi-language:EN-GB;}
158
+ p.ForewordTitle, li.ForewordTitle, div.ForewordTitle
159
+ {mso-style-name:"Foreword Title";
160
+ mso-style-noshow:yes;
161
+ mso-style-unhide:no;
162
+ margin-top:0cm;
163
+ margin-right:0cm;
164
+ margin-bottom:15.5pt;
165
+ margin-left:0cm;
166
+ text-align:justify;
167
+ line-height:15.5pt;
168
+ page-break-before:always;
169
+ mso-pagination:widow-orphan;
170
+ page-break-after:avoid;
171
+ mso-outline-level:1;
172
+ mso-hyphenate:none;
173
+ tab-stops:20.15pt;
174
+ font-size:14.0pt;
175
+ mso-bidi-font-size:11.0pt;
176
+ font-family:$headerfont;
177
+ mso-fareast-font-family:$headerfont;
178
+ mso-bidi-font-family:$headerfont;
179
+ mso-ansi-language:EN-GB;
180
+ font-weight:bold;
181
+ mso-bidi-font-weight:normal;}
182
+ p.IntroTitle, li.IntroTitle, div.IntroTitle
183
+ {mso-style-name:"Intro Title";
184
+ mso-style-noshow:yes;
185
+ mso-style-unhide:no;
186
+ mso-style-parent:"Foreword Title";
187
+ margin-top:0cm;
188
+ margin-right:0cm;
189
+ margin-bottom:15.5pt;
190
+ margin-left:0cm;
191
+ text-align:justify;
192
+ line-height:15.5pt;
193
+ mso-pagination:widow-orphan;
194
+ page-break-after:avoid;
195
+ mso-outline-level:1;
196
+ mso-hyphenate:none;
197
+ tab-stops:20.15pt;
198
+ font-size:14.0pt;
199
+ mso-bidi-font-size:11.0pt;
200
+ page-break-before:always;
201
+ font-family:$headerfont;
202
+ mso-fareast-font-family:$headerfont;
203
+ mso-bidi-font-family:$headerfont;
204
+ mso-ansi-language:EN-GB;
205
+ font-weight:bold;
206
+ mso-bidi-font-weight:normal;}
207
+ p.zzContents, li.zzContents, div.zzContents
208
+ {mso-style-name:zzContents;
209
+ mso-style-noshow:yes;
210
+ mso-style-unhide:no;
211
+ mso-style-next:"TOC 1";
212
+ margin-top:48.0pt;
213
+ margin-right:0cm;
214
+ margin-bottom:15.5pt;
215
+ margin-left:0cm;
216
+ line-height:15.5pt;
217
+ mso-line-height-rule:exactly;
218
+ page-break-before:always;
219
+ mso-pagination:widow-orphan;
220
+ page-break-after:avoid;
221
+ mso-hyphenate:none;
222
+ tab-stops:20.15pt;
223
+ font-size:14.0pt;
224
+ mso-bidi-font-size:11.0pt;
225
+ font-family:$headerfont;
226
+ mso-fareast-font-family:$headerfont;
227
+ mso-bidi-font-family:$headerfont;
228
+ mso-ansi-language:EN-GB;
229
+ font-weight:bold;
230
+ mso-bidi-font-weight:normal;}
231
+ p.zzCopyright, li.zzCopyright
232
+ {mso-style-name:zzCopyright;
233
+ mso-style-noshow:yes;
234
+ mso-style-unhide:no;
235
+ mso-style-next:Normal;
236
+ margin-top:0cm;
237
+ margin-right:14.2pt;
238
+ margin-bottom:12.0pt;
239
+ margin-left:14.2pt;
240
+ text-align:justify;
241
+ line-height:12.0pt;
242
+ mso-pagination:widow-orphan;
243
+ tab-stops:20.15pt 25.7pt 481.15pt;
244
+ padding:0cm;
245
+ mso-padding-alt:1.0pt 4.0pt 1.0pt 4.0pt;
246
+ font-size:11.0pt;
247
+ font-family:$bodyfont;
248
+ mso-fareast-font-family:$bodyfont;
249
+ mso-bidi-font-family:$bodyfont;
250
+ mso-ansi-language:EN-GB;}
251
+ div.zzCopyright
252
+ {mso-element:para-border-div;
253
+ border:solid windowtext 1.0pt;
254
+ mso-border-top-alt:solid windowtext .5pt;
255
+ mso-border-left-alt:solid windowtext .5pt;
256
+ mso-border-right-alt:solid windowtext .5pt;
257
+ mso-border-bottom-alt:solid windowtext .5pt;
258
+ padding:1.0pt 4.0pt 0cm 4.0pt;
259
+ margin-left:5.1pt;
260
+ margin-right:5.1pt;}
261
+ p.zzCopyright_address
262
+ {margin-top:0cm;
263
+ margin-right:14.2pt;
264
+ margin-bottom:0.0pt;
265
+ margin-left:14.2pt;
266
+ mso-layout-grid-align:none;
267
+ text-autospace:none;
268
+ padding-left:20pt;
269
+ mso-padding-alt-left:20pt;
270
+ font-size:10.0pt;
271
+ text-align:left;
272
+ mso-bidi-font-size:11.0pt;}
273
+ p.zzSTDTitle, li.zzSTDTitle, div.zzSTDTitle
274
+ {mso-style-name:zzSTDTitle;
275
+ mso-style-noshow:yes;
276
+ mso-style-unhide:no;
277
+ mso-style-next:Normal;
278
+ margin-top:20.0pt;
279
+ margin-right:0cm;
280
+ margin-bottom:38.0pt;
281
+ margin-left:0cm;
282
+ line-height:17.5pt;
283
+ mso-line-height-rule:exactly;
284
+ mso-pagination:widow-orphan;
285
+ mso-hyphenate:none;
286
+ tab-stops:20.15pt;
287
+ font-size:16.0pt;
288
+ mso-bidi-font-size:11.0pt;
289
+ font-family:$headerfont;
290
+ mso-fareast-font-family:$headerfont;
291
+ mso-bidi-font-family:$headerfont;
292
+ mso-ansi-language:EN-GB;
293
+ font-weight:bold;
294
+ mso-bidi-font-weight:normal;}
295
+ p.zzSTDTitle1, li.zzSTDTitle1, div.zzSTDTitle1
296
+ {mso-style-name:zzSTDTitle;
297
+ mso-style-noshow:yes;
298
+ mso-style-unhide:no;
299
+ mso-style-next:Normal;
300
+ margin-top:0pt;
301
+ margin-right:0cm;
302
+ margin-bottom:18.0pt;
303
+ margin-left:0cm;
304
+ line-height:17.5pt;
305
+ mso-line-height-rule:exactly;
306
+ mso-pagination:widow-orphan;
307
+ mso-hyphenate:none;
308
+ tab-stops:20.15pt;
309
+ font-size:16.0pt;
310
+ mso-bidi-font-size:11.0pt;
311
+ font-family:$headerfont;
312
+ mso-fareast-font-family:$headerfont;
313
+ mso-bidi-font-family:$headerfont;
314
+ mso-ansi-language:EN-GB;
315
+ font-weight:bold;
316
+ mso-bidi-font-weight:normal;}
317
+ p.Quote, li.Quote, div.Quote
318
+ {mso-style-priority:99;
319
+ margin-top:0cm;
320
+ margin-right:36.0pt;
321
+ margin-bottom:0cm;
322
+ margin-left:36.0pt;
323
+ text-align:justify;
324
+ line-height:12.0pt;
325
+ mso-pagination:widow-orphan;
326
+ tab-stops:20.15pt;
327
+ font-size:11.0pt;
328
+ font-family:$bodyfont;
329
+ mso-fareast-font-family:$bodyfont;
330
+ mso-bidi-font-family:$bodyfont;
331
+ mso-ansi-language:EN-GB;}
332
+ p.QuoteAttribution
333
+ {text-align:right;}
334
+ p.Admonition, li.Admonition, div.Admonition
335
+ {mso-style-priority:99;
336
+ margin-top:0cm;
337
+ margin-right:57.6pt;
338
+ margin-bottom:0cm;
339
+ margin-left:57.6pt;
340
+ margin-bottom:.0001pt;
341
+ mso-pagination:widow-orphan;
342
+ border:none;
343
+ mso-border-alt:solid #4472C4 .25pt;
344
+ mso-border-themecolor:accent1;
345
+ padding:0cm;
346
+ mso-padding-alt:10.0pt 10.0pt 10.0pt 10.0pt;
347
+ font-size:12.0pt;
348
+ font-family:$bodyfont;
349
+ mso-ascii-font-family:$bodyfont;
350
+ mso-ascii-theme-font:minor-latin;
351
+ mso-fareast-font-family:$bodyfont;
352
+ mso-fareast-theme-font:minor-fareast;
353
+ mso-hansi-font-family:$bodyfont;
354
+ mso-hansi-theme-font:minor-latin;
355
+ mso-bidi-font-family:$bodyfont;
356
+ mso-bidi-theme-font:minor-bidi;
357
+ color:#4472C4;
358
+ mso-themecolor:accent1;
359
+ mso-ansi-language:EN-AU;
360
+ font-style:italic;}
361
+ p.Code, li.Code, div.Code
362
+ {mso-style-name:Code;
363
+ mso-style-priority:16;
364
+ mso-style-unhide:no;
365
+ mso-style-qformat:yes;
366
+ margin:0cm;
367
+ margin-bottom:.0001pt;
368
+ line-height:10.0pt;
369
+ mso-pagination:widow-orphan;
370
+ tab-stops:20.15pt;
371
+ font-size:9.0pt;
372
+ mso-bidi-font-size:11.0pt;
373
+ font-family:$monospacefont;
374
+ mso-fareast-font-family:Calibri;
375
+ mso-bidi-font-family:"Source Sans Pro";
376
+ mso-ansi-language:EN-GB;}
377
+ p.Formula, li.Formula, div.Formula
378
+ {mso-style-name:Formula;
379
+ mso-style-noshow:yes;
380
+ mso-style-unhide:no;
381
+ margin-top:0cm;
382
+ margin-right:0cm;
383
+ margin-bottom:11.0pt;
384
+ margin-left:20.15pt;
385
+ line-height:12.0pt;
386
+ mso-pagination:widow-orphan;
387
+ tab-stops:right 487.45pt;
388
+ font-size:11.0pt;
389
+ font-family:$bodyfont;
390
+ mso-fareast-font-family:$bodyfont;
391
+ mso-bidi-font-family:$bodyfont;
392
+ mso-ansi-language:EN-GB;}
393
+ @page WordSection1
394
+ {size:595.3pt 841.9pt;
395
+ margin:39.7pt 53.85pt 1.0cm 53.85pt;
396
+ mso-header-margin:35.45pt;
397
+ mso-footer-margin:14.2pt;
398
+ mso-even-header:url("file:///C:/Doc/FILENAME_files/header.html") eh1;
399
+ mso-header:url("file:///C:/Doc/FILENAME_files/header.html") h1;
400
+ mso-even-footer:url("file:///C:/Doc/FILENAME_files/header.html") ef1;
401
+ mso-paper-source:0;}
402
+ div.WordSection1
403
+ {page:WordSection1;}
404
+ @page WordSection2
405
+ {size:595.3pt 841.9pt;
406
+ margin:39.7pt 53.85pt 1.0cm 53.85pt;
407
+ mso-header-margin:35.45pt;
408
+ mso-footer-margin:14.2pt;
409
+ mso-page-numbers:roman-lower;
410
+ mso-even-header:url("file:///C:/Doc/FILENAME_files/header.html") eh2;
411
+ mso-header:url("file:///C:/Doc/FILENAME_files/header.html") h2;
412
+ mso-even-footer:url("file:///C:/Doc/FILENAME_files/header.html") ef2;
413
+ mso-footer:url("file:///C:/Doc/FILENAME_files/header.html") f2;
414
+ mso-paper-source:0;}
415
+ div.WordSection2
416
+ {page:WordSection2;}
417
+ @page WordSection3
418
+ {size:595.3pt 841.9pt;
419
+ margin:39.7pt 53.85pt 1.0cm 53.85pt;
420
+ mso-header-margin:35.45pt;
421
+ mso-footer-margin:14.2pt;
422
+ mso-page-numbers:1;
423
+ mso-even-header:url("file:///C:/Doc/FILENAME_files/header.html") eh2;
424
+ mso-header:url("file:///C:/Doc/FILENAME_files/header.html") h2;
425
+ mso-even-footer:url("file:///C:/Doc/FILENAME_files/header.html") ef3;
426
+ mso-footer:url("file:///C:/Doc/FILENAME_files/header.html") f3;
427
+ mso-paper-source:0;}
428
+ div.WordSection3
429
+ {page:WordSection3;}
430
+ ol
431
+ {margin-bottom:0cm;}
432
+ ul
433
+ {margin-bottom:0cm;}
434
+ table.MsoISOTable
435
+ {mso-style-name:"Table ISO";
436
+ mso-tstyle-rowband-size:0;
437
+ mso-tstyle-colband-size:0;
438
+ mso-style-noshow:yes;
439
+ mso-style-priority:99;
440
+ mso-style-parent:"";
441
+ mso-padding-alt:0cm 2.85pt 0cm 2.85pt;
442
+ mso-para-margin:0cm;
443
+ mso-para-margin-bottom:.0001pt;
444
+ mso-pagination:widow-orphan;
445
+ border-collapse:collapse;
446
+ mso-table-layout-alt:fixed;
447
+ border:solid windowtext 2pt;
448
+ mso-border-alt:solid windowtext 2pt;
449
+ mso-yfti-tbllook:480;
450
+ mso-border-insideh:.75pt solid windowtext;
451
+ mso-border-insidev:.75pt solid windowtext;
452
+ font-size:10.0pt;
453
+ font-family:$bodyfont;}
454
+ table.MsoISOTable tr
455
+ {page-break-inside:avoid;}
456
+ table.MsoISOTable th
457
+ {border:solid windowtext 1pt;
458
+ mso-border-alt:solid windowtext 1pt;
459
+ padding:0cm 2.85pt 0cm 2.85pt;}
460
+ table.MsoISOTable td
461
+ {border:solid windowtext 1pt;
462
+ mso-border-alt:solid windowtext 1pt;
463
+ padding:0cm 2.85pt 0cm 2.85pt;}
464
+ table.MsoTableGrid
465
+ {mso-style-name:"Table Grid";
466
+ mso-tstyle-rowband-size:0;
467
+ mso-tstyle-colband-size:0;
468
+ mso-style-priority:39;
469
+ mso-style-unhide:no;
470
+ border:solid windowtext 1.0pt;
471
+ mso-border-alt:solid windowtext .5pt;
472
+ mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
473
+ mso-border-insideh:.5pt solid windowtext;
474
+ mso-border-insidev:.5pt solid windowtext;
475
+ mso-para-margin:0cm;
476
+ mso-para-margin-bottom:.0001pt;
477
+ mso-pagination:widow-orphan;
478
+ font-size:10.0pt;
479
+ font-family:$bodyfont;}
480
+ td { page-break-inside:avoid; }
481
+ tr { page-break-after:avoid; }
482
+ span.stem
483
+ {font-family:"Cambria Math",serif;
484
+ mso-ascii-font-family:"Cambria Math";
485
+ font-style:
486
+ italic;}
487
+ div.formula
488
+ {tab-stops:right 487.45pt;}
489
+ body
490
+ {tab-interval:36.0pt;}
491
+ dt
492
+ {page-break-inside:avoid;
493
+ page-break-after:avoid}
494
+ .coverpage_docnumber
495
+ {text-align:center;
496
+ font-size:14.0pt;
497
+ font-weight:bold;}
498
+ .coverpage_techcommittee
499
+ {text-align:center;}
500
+ .coverpage_docstage
501
+ {text-align:center;
502
+ font-size:30.0pt;
503
+ color:#485094;}
504
+ div.coverpage_warning
505
+ {mso-element:para-border-div;
506
+ border:solid windowtext 1.0pt #485094;
507
+ mso-border-alt:solid windowtext .5pt;
508
+ padding:1.0pt 4.0pt 1.0pt 4.0pt #485094;
509
+ margin-left:4.25pt;
510
+ margin-right:4.25pt}
511
+ .coverpage_warning
512
+ {color:#485094;
513
+ font-size:10.0pt;}
514
+
515
+ a.TableFootnoteRef
516
+ {mso-style-priority:99;
517
+ vertical-align:super;}
518
+
519
+ aside {
520
+ font-size:10.0pt;
521
+ }
522
+ div.example {
523
+ border:solid black .25pt;
524
+ mso-border-alt:solid black .25pt;
525
+ padding:10pt;
526
+ mso-padding-alt:10.0pt 10.0pt 10.0pt 10.0pt;
527
+ margin:10pt;
528
+ mso-margin-alt:10.0pt 10.0pt 10.0pt 10.0pt;
529
+ }
530
+ table.dl
531
+ {margin-top:0cm;
532
+ margin-right:0cm;
533
+ margin-bottom:11.0pt;
534
+ margin-left:20.15pt;}
535
+ ol
536
+ {margin-bottom:0cm;
537
+ margin-left:0cm;}
538
+ ul
539
+ {margin-bottom:0cm;
540
+ margin-left:0cm;}
541
+