metanorma-itu 1.0.13 → 1.0.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/macos.yml +8 -7
  3. data/.github/workflows/ubuntu.yml +12 -9
  4. data/.github/workflows/windows.yml +8 -8
  5. data/lib/asciidoctor/itu/biblio.rng +89 -32
  6. data/lib/asciidoctor/itu/cleanup.rb +80 -71
  7. data/lib/asciidoctor/itu/converter.rb +7 -11
  8. data/lib/asciidoctor/itu/front.rb +47 -18
  9. data/lib/asciidoctor/itu/isodoc.rng +475 -2
  10. data/lib/asciidoctor/itu/reqt.rng +23 -0
  11. data/lib/isodoc/itu/base_convert.rb +66 -16
  12. data/lib/isodoc/itu/html/_coverpage.scss +7 -3
  13. data/lib/isodoc/itu/html/header.html +8 -8
  14. data/lib/isodoc/itu/html/html_itu_titlepage.html +6 -7
  15. data/lib/isodoc/itu/html/htmlstyle.scss +9 -5
  16. data/lib/isodoc/itu/html/itu.scss +28 -1
  17. data/lib/isodoc/itu/html/scripts.html +14 -27
  18. data/lib/isodoc/itu/html/word_itu_intro.html +11 -1
  19. data/lib/isodoc/itu/html/word_itu_titlepage.html +3 -6
  20. data/lib/isodoc/itu/html/wordstyle.scss +6 -5
  21. data/lib/isodoc/itu/html_convert.rb +3 -3
  22. data/lib/isodoc/itu/i18n-en.yaml +2 -1
  23. data/lib/isodoc/itu/itu.recommendation-annex.xsl +3903 -0
  24. data/lib/isodoc/itu/itu.recommendation.xsl +3903 -0
  25. data/lib/isodoc/itu/itu.resolution.xsl +3903 -0
  26. data/lib/isodoc/itu/metadata.rb +16 -6
  27. data/lib/isodoc/itu/pdf_convert.rb +17 -44
  28. data/lib/isodoc/itu/ref.rb +48 -21
  29. data/lib/isodoc/itu/terms.rb +5 -6
  30. data/lib/isodoc/itu/word_convert.rb +10 -8
  31. data/lib/isodoc/itu/xref.rb +27 -16
  32. data/lib/metanorma/itu/processor.rb +8 -0
  33. data/lib/metanorma/itu/version.rb +1 -1
  34. data/metanorma-itu.gemspec +1 -1
  35. metadata +7 -5
  36. data/lib/isodoc/itu/html/scripts.pdf.html +0 -72
@@ -30,9 +30,22 @@
30
30
  <data type="boolean"/>
31
31
  </attribute>
32
32
  </optional>
33
+ <optional>
34
+ <attribute name="number"/>
35
+ </optional>
33
36
  <optional>
34
37
  <attribute name="subsequence"/>
35
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>
36
49
  <attribute name="id">
37
50
  <data type="ID"/>
38
51
  </attribute>
@@ -141,6 +154,16 @@
141
154
  <data type="boolean"/>
142
155
  </attribute>
143
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>
144
167
  <oneOrMore>
145
168
  <ref name="BasicBlock"/>
146
169
  </oneOrMore>
@@ -37,13 +37,20 @@ module IsoDoc
37
37
  end
38
38
  end
39
39
 
40
+ def bracket_opt(b)
41
+ return b if b.nil?
42
+ return b if /^\[.+\]$/.match(b)
43
+ "[#{b}]"
44
+ end
45
+
40
46
  def clausedelim
41
47
  ""
42
48
  end
43
49
 
44
50
  def note_label(node)
45
51
  n = get_anchors[node["id"]]
46
- return "#{@note_lbl} &ndash; " if n.nil? || n[:label].nil? || n[:label].empty?
52
+ (n.nil? || n[:label].nil? || n[:label].empty?) and
53
+ return "#{@note_lbl} &ndash; "
47
54
  l10n("#{@note_lbl} #{n[:label]} &ndash; ")
48
55
  end
49
56
 
@@ -64,7 +71,8 @@ module IsoDoc
64
71
  end
65
72
 
66
73
  def annex_name(annex, name, div)
67
- div.h1 **{ class: "Annex" } do |t|
74
+ r_a = @meta.get[:doctype_original] == "recommendation-annex"
75
+ div.h1 **{ class: r_a ? "RecommendationAnnex" : "Annex" } do |t|
68
76
  t << "#{anchor(annex['id'], :label)} "
69
77
  t.br
70
78
  t.br
@@ -76,14 +84,28 @@ module IsoDoc
76
84
  end
77
85
 
78
86
  def annex_obligation_subtitle(annex, div)
79
- type = annex&.document&.root&.at("//bibdata/ext/doctype")&.text ||
80
- "recommendation"
81
- type = type.split(" ").map {|w| w.capitalize }.join(" ")
82
87
  info = annex["obligation"] == "informative"
83
88
  div.p **{class: "annex_obligation" } do |p|
84
- p << (info ? @inform_annex_lbl : @norm_annex_lbl).sub(/%/, type)
89
+ p << (info ? @inform_annex_lbl : @norm_annex_lbl).
90
+ sub(/%/, @meta.get[:doctype] || "")
91
+ end
92
+ end
93
+
94
+ def annex(isoxml, out)
95
+ isoxml.xpath(ns("//annex")).each do |c|
96
+ @meta.get[:doctype_original] == "recommendation-annex" or
97
+ page_break(out)
98
+ out.div **attr_code(id: c["id"], class: "Section3") do |s|
99
+ annex_name(c, nil, s) unless c.at(ns("./title"))
100
+ c.elements.each do |c1|
101
+ if c1.name == "title" then annex_name(c, c1, s)
102
+ else
103
+ parse(c1, s)
104
+ end
105
+ end
85
106
  end
86
107
  end
108
+ end
87
109
 
88
110
  def i18n_init(lang, script)
89
111
  super
@@ -96,13 +118,24 @@ module IsoDoc
96
118
  def cleanup(docxml)
97
119
  super
98
120
  term_cleanup(docxml)
121
+ refs_cleanup(docxml)
122
+ title_cleanup(docxml)
123
+ end
124
+
125
+ def title_cleanup(docxml)
126
+ docxml.xpath("//h1[@class = 'RecommendationAnnex']").each do |h|
127
+ h.name = "p"
128
+ h["class"] = "h1Annex"
129
+ end
130
+ docxml
99
131
  end
100
132
 
101
133
  def term_cleanup(docxml)
102
134
  docxml.xpath("//p[@class = 'Terms']").each do |d|
103
135
  h2 = d.at("./preceding-sibling::*[@class = 'TermNum'][1]")
104
- h2.add_child("&nbsp;")
105
- h2.add_child(d.remove)
136
+ d.children.first.previous = "<b>#{h2.children.to_xml}</b>&nbsp;"
137
+ d["id"] = h2["id"]
138
+ h2.remove
106
139
  end
107
140
  docxml.xpath("//p[@class = 'TermNum']").each do |d|
108
141
  d1 = d.next_element and d1.name == "p" or next
@@ -112,36 +145,53 @@ module IsoDoc
112
145
  docxml
113
146
  end
114
147
 
148
+ def refs_cleanup(docxml)
149
+ docxml.xpath("//tx[following-sibling::tx]").each do |tx|
150
+ tx << tx.next_element.remove.children
151
+ end
152
+ docxml.xpath("//tx").each do |tx|
153
+ tx.name = "td"
154
+ tx["colspan"] = "2"
155
+ tx.wrap("<tr></tr>")
156
+ end
157
+ docxml
158
+ end
159
+
115
160
  def info(isoxml, out)
116
- @meta.keywords isoxml, out
117
161
  @meta.ip_notice_received isoxml, out
118
162
  super
119
163
  end
120
164
 
121
165
  def get_eref_linkend(node)
122
- link = "[#{anchor_linkend(node, docid_l10n(node["target"] || node["citeas"]))}]"
123
- link += eref_localities(node.xpath(ns("./locality | ./localityStack")), link)
124
- contents = node.children.select { |c| !%w{locality localityStack}.include? c.name }
125
- return link if contents.nil? || contents.empty?
166
+ l = anchor_linkend(node, docid_l10n(node["target"] || node["citeas"]))
167
+ l && !/^\[.*\]$/.match(l) and l = "[#{l}]"
168
+ l += eref_localities(node.xpath(ns("./locality | ./localityStack")), l)
169
+ contents = node.children.select do |c|
170
+ !%w{locality localityStack}.include? c.name
171
+ end
172
+ return l if contents.nil? || contents.empty?
126
173
  Nokogiri::XML::NodeSet.new(node.document, contents).to_xml
127
174
  end
128
175
 
129
176
  def eref_parse(node, out)
130
177
  linkend = get_eref_linkend(node)
178
+ href = eref_target(node)
131
179
  if node["type"] == "footnote"
132
180
  out.sup do |s|
133
- s.a(**{ "href": "#" + node["bibitemid"] }) { |l| l << linkend }
181
+ s.a(**{ "href": href }) { |l| l << linkend }
134
182
  end
135
183
  else
136
- out.a(**{ "href": "#" + node["bibitemid"] }) { |l| l << linkend }
184
+ out.a(**{ "href": href }) { |l| l << linkend }
137
185
  end
138
186
  end
139
187
 
140
188
  def middle_title(out)
141
189
  out.p(**{ class: "zzSTDTitle1" }) do |p|
142
- id = @meta.get[:docnumber] and p << "Recommendation #{id}"
190
+ id = @meta.get[:docnumber] and p << "#{@meta.get[:doctype]} #{id}"
143
191
  end
144
192
  out.p(**{ class: "zzSTDTitle2" }) { |p| p << @meta.get[:doctitle] }
193
+ s = @meta.get[:docsubtitle] and
194
+ out.p(**{ class: "zzSTDTitle3" }) { |p| p << s }
145
195
  end
146
196
 
147
197
  def add_parse(node, out)
@@ -62,14 +62,18 @@
62
62
  @include coverpageStageBlock();
63
63
  }
64
64
 
65
- span.doc-title {
65
+ span.doc-title, span.doc-annextitle {
66
66
  font-size: 26px;
67
67
  font-weight: 800;
68
68
  margin-top: 20px;
69
- border-top: 2px solid #DA1D52;
70
69
  margin-right: 42px;
71
70
  }
72
71
 
72
+ span.doc-title {
73
+ border-top: 2px solid #DA1D52;
74
+ }
75
+
76
+
73
77
  .doc-footer {
74
78
  margin-top: 100px;
75
79
 
@@ -107,7 +111,7 @@ span.doc-title {
107
111
  padding: 0 3em 0 6em;
108
112
  }
109
113
 
110
- .zzSTDTitle1, .zzSTDTitle2, .MsoCommentText {
114
+ .zzSTDTitle1, .zzSTDTitle2, .zzSTDTitle3, .MsoCommentText {
111
115
  display: none;
112
116
  }
113
117
 
@@ -116,7 +116,7 @@ style='mso-element:field-separator'>
116
116
  style='mso-ansi-language:FR-CH;font-weight:normal;mso-no-proof:yes'>ii</span><!--[if supportFields]><span
117
117
  lang=EN-GB style='font-weight:normal'><span style='mso-element:field-end'></span></span><![endif]--><span
118
118
  lang=FR-CH style='mso-ansi-language:FR-CH'><span style='mso-tab-count:1'>              </span>Rec.
119
- ITU‑{{ bureau }} {{ docnumber }} ({{ pubdate_monthyear }})<o:p></o:p></span></p>
119
+ ITU‑{{ bureau }} {{ docnumeric }} ({{ pubdate_monthyear }})<o:p></o:p></span></p>
120
120
  </div>
121
121
 
122
122
  <div style='mso-element:footer' id=ef2l>
@@ -129,12 +129,12 @@ style='mso-element:field-separator'>
129
129
  style='mso-ansi-language:FR-CH;font-weight:normal;mso-no-proof:yes'>ii</span><!--[if supportFields]><span
130
130
  lang=EN-GB style='font-weight:normal'><span style='mso-element:field-end'></span></span><![endif]--><span
131
131
  lang=FR-CH style='mso-ansi-language:FR-CH'><span style='mso-tab-count:1'>              </span>Rec.
132
- ITU‑{{ bureau }} {{ docnumber }} ({{ pubdate_monthyear }})<o:p></o:p></span></p>
132
+ ITU‑{{ bureau }} {{ docnumeric }} ({{ pubdate_monthyear }})<o:p></o:p></span></p>
133
133
  </div>
134
134
 
135
135
  <div style='mso-element:footer' id=f2>
136
136
  <p class=FooterQP style='line-height:12.0pt'><span lang=EN-GB><span style='mso-tab-count:2'>                                                                                                       </span>Rec.
137
- ITU‑{{ bureau }} {{docnumber}} ({{ pubdate_monthyear }})<span style='mso-tab-count:1'>             </span></span><!--[if supportFields]><span
137
+ ITU‑{{ bureau }} {{docnumeric}} ({{ pubdate_monthyear }})<span style='mso-tab-count:1'>             </span></span><!--[if supportFields]><span
138
138
  lang=EN-GB style='font-weight:normal'><span style='mso-element:field-begin'></span>
139
139
  PAGE<span style='mso-spacerun:yes'>  </span>\* MERGEFORMAT <span
140
140
  style='mso-element:field-separator'></span></span><![endif]--><span lang=EN-GB
@@ -145,7 +145,7 @@ lang=EN-GB style='font-weight:normal'>

145
145
 
146
146
  <div style='mso-element:footer' id=f2l>
147
147
  <p class=FooterQPLandscape style='line-height:12.0pt'><span lang=EN-GB><span style='mso-tab-count:2'>                                                                                                       </span>Rec.
148
- ITU‑{{ bureau }} {{docnumber}} ({{ pubdate_monthyear }})<span style='mso-tab-count:1'>             </span></span><!--[if supportFields]><span
148
+ ITU‑{{ bureau }} {{docnumeric}} ({{ pubdate_monthyear }})<span style='mso-tab-count:1'>             </span></span><!--[if supportFields]><span
149
149
  lang=EN-GB style='font-weight:normal'><span style='mso-element:field-begin'></span>
150
150
  PAGE<span style='mso-spacerun:yes'>  </span>\* MERGEFORMAT <span
151
151
  style='mso-element:field-separator'></span></span><![endif]--><span lang=EN-GB
@@ -164,7 +164,7 @@ style='mso-element:field-separator'>
164
164
  style='mso-ansi-language:FR-CH;font-weight:normal;mso-no-proof:yes'>ii</span><!--[if supportFields]><span
165
165
  lang=EN-GB style='font-weight:normal'><span style='mso-element:field-end'></span></span><![endif]--><span
166
166
  lang=FR-CH style='mso-ansi-language:FR-CH'><span style='mso-tab-count:1'>              </span>Rec.
167
- ITU‑{{ bureau }} {{ docnumber }} ({{ pubdate_monthyear }})<o:p></o:p></span></p>
167
+ ITU‑{{ bureau }} {{ docnumeric }} ({{ pubdate_monthyear }})<o:p></o:p></span></p>
168
168
  </div>
169
169
 
170
170
  <div style='mso-element:footer' id=ef3l>
@@ -177,12 +177,12 @@ style='mso-element:field-separator'>
177
177
  style='mso-ansi-language:FR-CH;font-weight:normal;mso-no-proof:yes'>ii</span><!--[if supportFields]><span
178
178
  lang=EN-GB style='font-weight:normal'><span style='mso-element:field-end'></span></span><![endif]--><span
179
179
  lang=FR-CH style='mso-ansi-language:FR-CH'><span style='mso-tab-count:1'>              </span>Rec.
180
- ITU‑{{ bureau }} {{ docnumber }} ({{ pubdate_monthyear }})<o:p></o:p></span></p>
180
+ ITU‑{{ bureau }} {{ docnumeric }} ({{ pubdate_monthyear }})<o:p></o:p></span></p>
181
181
  </div>
182
182
 
183
183
  <div style='mso-element:footer' id=f3>
184
184
  <p class=FooterQP style='line-height:12.0pt'><span lang=EN-GB><span style='mso-tab-count:2'>                                                                                                       </span>Rec.
185
- ITU‑{{ bureau }} {{docnumber}} ({{ pubdate_monthyear }})<span style='mso-tab-count:1'>             </span></span><!--[if supportFields]><span
185
+ ITU‑{{ bureau }} {{docnumeric}} ({{ pubdate_monthyear }})<span style='mso-tab-count:1'>             </span></span><!--[if supportFields]><span
186
186
  lang=EN-GB style='font-weight:normal'><span style='mso-element:field-begin'></span>
187
187
  PAGE<span style='mso-spacerun:yes'>  </span>\* MERGEFORMAT <span
188
188
  style='mso-element:field-separator'></span></span><![endif]--><span lang=EN-GB
@@ -193,7 +193,7 @@ lang=EN-GB style='font-weight:normal'>

193
193
 
194
194
  <div style='mso-element:footer' id=f3l>
195
195
  <p class=FooterQPLandscape style='line-height:12.0pt'><span lang=EN-GB><span style='mso-tab-count:2'>                                                                                                       </span>Rec.
196
- ITU‑{{ bureau }} {{docnumber}} ({{ pubdate_monthyear }})<span style='mso-tab-count:1'>             </span></span><!--[if supportFields]><span
196
+ ITU‑{{ bureau }} {{docnumeric}} ({{ pubdate_monthyear }})<span style='mso-tab-count:1'>             </span></span><!--[if supportFields]><span
197
197
  lang=EN-GB style='font-weight:normal'><span style='mso-element:field-begin'></span>
198
198
  PAGE<span style='mso-spacerun:yes'>  </span>\* MERGEFORMAT <span
199
199
  style='mso-element:field-separator'></span></span><![endif]--><span lang=EN-GB
@@ -26,13 +26,10 @@
26
26
 
27
27
  <div class="doc-info-left">
28
28
  <div class="doc-identifier">
29
- {{ docnumber }}
29
+ {{ docnumeric }}
30
30
  {% if edition %} <div> Revision {{ edition }}</div> {% endif %}
31
31
  <div> {{ draftinfo }}</div>
32
32
  </div>
33
- {% if annexid %}
34
- <div class="doc-identifier">{{annexid}}</div>
35
- {% endif %}
36
33
  <div class="publication-month">
37
34
  ({{ pubdate_monthyear }})
38
35
  </div>
@@ -53,9 +50,9 @@
53
50
  <span class="doc-title">{{ doctitle }}</span>
54
51
  {% if docsubtitle %}
55
52
  <br/><span class="doc-subtitle">{{ docsubtitle }}</span>
56
- {% if annextitle %}
57
- <br/><span class="doctitle">{{ annextitle }}</span>
58
53
  {% endif %}
54
+ {% if annextitle %}
55
+ <br/><span class="doc-annextitle">{{ annexid }}{% if annexid and annextitle %}: {% endif %}{{ annextitle }}</span>
59
56
  {% endif %}
60
57
  </div>
61
58
 
@@ -73,7 +70,7 @@
73
70
  <div>
74
71
  <span class="doc-type">{% if stage == "Draft" %}Draft {% endif %}{{ doctype }}</span>
75
72
  <span class="ITU-sector">ITU-{{ bureau }}</span>
76
- <span class="doc-identifier">{{ docnumber }}</span>
73
+ <span class="doc-identifier">{{ docnumeric }}</span>
77
74
  </div>
78
75
 
79
76
  </div>
@@ -98,9 +95,11 @@
98
95
  </div>
99
96
  -->
100
97
 
98
+ {% if unpublished %}
101
99
  <div class="coverpage-warning">
102
100
  <div id="draft-warning-destination"/>
103
101
  </div>
102
+ {% endif %}
104
103
 
105
104
  <div class="info-section">
106
105
  <div id="boilerplate-copyright-destination"/>
@@ -185,7 +185,7 @@ pre {
185
185
  }
186
186
 
187
187
  #ITU-logo {
188
- width: 200px;
188
+ width: 150px;
189
189
  height: auto;
190
190
  margin-left: auto;
191
191
  }
@@ -209,20 +209,20 @@ svg {
209
209
 
210
210
  /* Headings */
211
211
 
212
- h1, h2, h3, h4, h5, h6 {
212
+ h1, h2, h3, h4, h5, h6, .h1Annex {
213
213
  font-weight: 400;
214
214
  margin-top: 1.6em;
215
215
  margin-bottom: 0.3em;
216
216
  }
217
217
 
218
- h1, h2, h3, h4 {
218
+ h1, h2, h3, h4, .h1Annex {
219
219
  @media print {
220
220
  page-break-after: avoid;
221
221
  margin-top: 1.2em;
222
222
  }
223
223
  }
224
224
 
225
- h1 {
225
+ h1, .h1Annex {
226
226
  font-size: 1.4em;
227
227
  text-transform: uppercase;
228
228
  margin-top: 2em;
@@ -419,7 +419,11 @@ p.Biblio, p.NormRef {
419
419
 
420
420
  /* Tables */
421
421
 
422
- table {
422
+ table.biblio td {
423
+ padding-right: 0.5em;
424
+ }
425
+
426
+ table:not(.biblio) {
423
427
  @include table($border: none);
424
428
 
425
429
  &, th, td {
@@ -620,6 +620,29 @@ p.zzSTDTitle2, li.zzSTDTitle2, div.zzSTDTitle2
620
620
  font-weight:bold;
621
621
  text-align:center;
622
622
  mso-bidi-font-weight:normal;}
623
+ p.zzSTDTitle3, li.zzSTDTitle3, div.zzSTDTitle3
624
+ {mso-style-name:zzSTDTitle;
625
+ mso-style-noshow:yes;
626
+ mso-style-unhide:no;
627
+ mso-style-next:Normal;
628
+ margin-top:0pt;
629
+ margin-right:0cm;
630
+ margin-bottom:18.0pt;
631
+ margin-left:0cm;
632
+ line-height:17.5pt;
633
+ mso-line-height-rule:exactly;
634
+ mso-pagination:widow-orphan;
635
+ mso-hyphenate:none;
636
+ tab-stops:20.15pt;
637
+ font-size:14.0pt;
638
+ mso-bidi-font-size:11.0pt;
639
+ font-family:$headerfont;
640
+ mso-fareast-font-family:$headerfont;
641
+ mso-bidi-font-family:$headerfont;
642
+ mso-ansi-language:EN-GB;
643
+ font-style:italic;
644
+ text-align:center;
645
+ mso-bidi-font-weight:normal;}
623
646
  p.Quote, li.Quote, div.Quote
624
647
  {mso-style-priority:99;
625
648
  margin-top:0cm;
@@ -986,7 +1009,7 @@ table.MsoTableGrid
986
1009
  font-size:10.0pt;
987
1010
  font-family:$bodyfont;}
988
1011
  div.formula, div.formula p
989
- {tab-stops:39.7pt center 241.0pt right 17.0cm;}
1012
+ {tab-stops:center 241.0pt right 17.0cm;}
990
1013
  body
991
1014
  {tab-interval:36.0pt;}
992
1015
  .coverpage_docnumber
@@ -1069,3 +1092,7 @@ table.dl
1069
1092
  margin-bottom:11.0pt;
1070
1093
  margin-left:0cm;}
1071
1094
 
1095
+ table.biblio td {
1096
+ margin-bottom: 6pt;
1097
+ }
1098
+
@@ -1,24 +1,8 @@
1
1
  <script>
2
- //TOC generation
3
- $('#toc').toc({
4
- 'selectors': toclevel(), //elements to use as headings
5
- 'container': 'main', //element to find all selectors in
6
- 'smoothScrolling': true, //enable or disable smooth scrolling on click
7
- 'prefix': 'toc', //prefix for anchor tags and class names
8
- 'onHighlight': function(el) {}, //called when a new section is highlighted
9
- 'highlightOnScroll': true, //add class to heading that is currently in focus
10
- 'highlightOffset': 100, //offset to trigger the next headline
11
- 'anchorName': function(i, heading, prefix) { //custom function for anchor name
12
- return prefix+i;
13
- },
14
- 'headerText': function(i, heading, $heading) { //custom function building the header-item text
15
- return $heading.text();
16
- },
17
- 'itemClass': function(i, heading, $heading, prefix) { // custom function for item class
18
- return $heading[0].tagName.toLowerCase();
19
- }
20
- });
21
-
2
+ $("#toc").on('click', 'li', function(e) {
3
+ $(this).parent().find('li.toc-active').removeClass('toc-active');
4
+ $(this).addClass('toc-active');
5
+ });
22
6
  </script>
23
7
 
24
8
  <script>
@@ -58,13 +42,16 @@ $('#toggle').on('click', function(){
58
42
  </script>
59
43
 
60
44
  <script>
61
- /**
62
- * AnchorJS - v4.1.0 - 2017-09-20
63
- * https://github.com/bryanbraun/anchorjs
64
- * Copyright (c) 2017 Bryan Braun; Licensed MIT
65
- */
66
- !function(A,e){"use strict";"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():(A.AnchorJS=e(),A.anchors=new A.AnchorJS)}(this,function(){"use strict";return function(A){function e(A){A.icon=A.hasOwnProperty("icon")?A.icon:"",A.visible=A.hasOwnProperty("visible")?A.visible:"hover",A.placement=A.hasOwnProperty("placement")?A.placement:"right",A.ariaLabel=A.hasOwnProperty("ariaLabel")?A.ariaLabel:"Anchor",A.class=A.hasOwnProperty("class")?A.class:"",A.truncate=A.hasOwnProperty("truncate")?Math.floor(A.truncate):64}function t(A){var e;if("string"==typeof A||A instanceof String)e=[].slice.call(document.querySelectorAll(A));else{if(!(Array.isArray(A)||A instanceof NodeList))throw new Error("The selector provided to AnchorJS was invalid.");e=[].slice.call(A)}return e}function i(){if(null===document.head.querySelector("style.anchorjs")){var A,e=document.createElement("style");e.className="anchorjs",e.appendChild(document.createTextNode("")),void 0===(A=document.head.querySelector('[rel="stylesheet"], style'))?document.head.appendChild(e):document.head.insertBefore(e,A),e.sheet.insertRule(" .anchorjs-link { opacity: 0; text-decoration: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }",e.sheet.cssRules.length),e.sheet.insertRule(" *:hover > .anchorjs-link, .anchorjs-link:focus { opacity: 1; }",e.sheet.cssRules.length),e.sheet.insertRule(" [data-anchorjs-icon]::after { content: attr(data-anchorjs-icon); }",e.sheet.cssRules.length),e.sheet.insertRule(' @font-face { font-family: "anchorjs-icons"; src: url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype"); }',e.sheet.cssRules.length)}}this.options=A||{},this.elements=[],e(this.options),this.isTouchDevice=function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)},this.add=function(A){var n,o,s,a,r,c,h,l,u,d,f,p=[];if(e(this.options),"touch"===(f=this.options.visible)&&(f=this.isTouchDevice()?"always":"hover"),A||(A="h2, h3, h4, h5, h6"),0===(n=t(A)).length)return this;for(i(),o=document.querySelectorAll("[id]"),s=[].map.call(o,function(A){return A.id}),r=0;r<n.length;r++)if(this.hasAnchorJSLink(n[r]))p.push(r);else{if(n[r].hasAttribute("id"))a=n[r].getAttribute("id");else if(n[r].hasAttribute("data-anchor-id"))a=n[r].getAttribute("data-anchor-id");else{u=l=this.urlify(n[r].textContent),h=0;do{void 0!==c&&(u=l+"-"+h),c=s.indexOf(u),h+=1}while(-1!==c);c=void 0,s.push(u),n[r].setAttribute("id",u),a=u}a.replace(/-/g," "),(d=document.createElement("a")).className="anchorjs-link "+this.options.class,d.href="#"+a,d.setAttribute("aria-label",this.options.ariaLabel),d.setAttribute("data-anchorjs-icon",this.options.icon),"always"===f&&(d.style.opacity="1"),""===this.options.icon&&(d.style.font="1em/1 anchorjs-icons","left"===this.options.placement&&(d.style.lineHeight="inherit")),"left"===this.options.placement?(d.style.position="absolute",d.style.marginLeft="-1em",d.style.paddingRight="0.5em",n[r].insertBefore(d,n[r].firstChild)):(d.style.paddingLeft="0.375em",n[r].appendChild(d))}for(r=0;r<p.length;r++)n.splice(p[r]-r,1);return this.elements=this.elements.concat(n),this},this.remove=function(A){for(var e,i,n=t(A),o=0;o<n.length;o++)(i=n[o].querySelector(".anchorjs-link"))&&(-1!==(e=this.elements.indexOf(n[o]))&&this.elements.splice(e,1),n[o].removeChild(i));return this},this.removeAll=function(){this.remove(this.elements)},this.urlify=function(A){var t=/[& +$,:;=?@"#{}|^~[`%!'<>\]\.\/\(\)\*\\]/g;return this.options.truncate||e(this.options),A.trim().replace(/\'/gi,"").replace(t,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&(" "+A.firstChild.className+" ").indexOf(" anchorjs-link ")>-1,t=A.lastChild&&(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ")>-1;return e||t||!1}}}); </script>
67
-
45
+ // @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat
46
+ //
47
+ // AnchorJS - v4.2.2 - 2020-04-20
48
+ // https://www.bryanbraun.com/anchorjs/
49
+ // Copyright (c) 2020 Bryan Braun; Licensed MIT
50
+ //
51
+ // @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat
52
+ !function(A,e){"use strict";"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():(A.AnchorJS=e(),A.anchors=new A.AnchorJS)}(this,function(){"use strict";return function(A){function f(A){A.icon=A.hasOwnProperty("icon")?A.icon:"",A.visible=A.hasOwnProperty("visible")?A.visible:"hover",A.placement=A.hasOwnProperty("placement")?A.placement:"right",A.ariaLabel=A.hasOwnProperty("ariaLabel")?A.ariaLabel:"Anchor",A.class=A.hasOwnProperty("class")?A.class:"",A.base=A.hasOwnProperty("base")?A.base:"",A.truncate=A.hasOwnProperty("truncate")?Math.floor(A.truncate):64,A.titleText=A.hasOwnProperty("titleText")?A.titleText:""}function p(A){var e;if("string"==typeof A||A instanceof String)e=[].slice.call(document.querySelectorAll(A));else{if(!(Array.isArray(A)||A instanceof NodeList))throw new Error("The selector provided to AnchorJS was invalid.");e=[].slice.call(A)}return e}this.options=A||{},this.elements=[],f(this.options),this.isTouchDevice=function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)},this.add=function(A){var e,t,i,n,o,s,a,r,c,h,l,u,d=[];if(f(this.options),"touch"===(l=this.options.visible)&&(l=this.isTouchDevice()?"always":"hover"),0===(e=p(A=A||"h2, h3, h4, h5, h6")).length)return this;for(!function(){if(null!==document.head.querySelector("style.anchorjs"))return;var A,e=document.createElement("style");e.className="anchorjs",e.appendChild(document.createTextNode("")),void 0===(A=document.head.querySelector('[rel="stylesheet"],style'))?document.head.appendChild(e):document.head.insertBefore(e,A);e.sheet.insertRule(".anchorjs-link{opacity:0;text-decoration:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}",e.sheet.cssRules.length),e.sheet.insertRule(":hover>.anchorjs-link,.anchorjs-link:focus{opacity:1}",e.sheet.cssRules.length),e.sheet.insertRule("[data-anchorjs-icon]::after{content:attr(data-anchorjs-icon)}",e.sheet.cssRules.length),e.sheet.insertRule('@font-face{font-family:anchorjs-icons;src:url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype")}',e.sheet.cssRules.length)}(),t=document.querySelectorAll("[id]"),i=[].map.call(t,function(A){return A.id}),o=0;o<e.length;o++)if(this.hasAnchorJSLink(e[o]))d.push(o);else{if(e[o].hasAttribute("id"))n=e[o].getAttribute("id");else if(e[o].hasAttribute("data-anchor-id"))n=e[o].getAttribute("data-anchor-id");else{for(c=r=this.urlify(e[o].textContent),a=0;void 0!==s&&(c=r+"-"+a),a+=1,-1!==(s=i.indexOf(c)););s=void 0,i.push(c),e[o].setAttribute("id",c),n=c}(h=document.createElement("a")).className="anchorjs-link "+this.options.class,h.setAttribute("aria-label",this.options.ariaLabel),h.setAttribute("data-anchorjs-icon",this.options.icon),this.options.titleText&&(h.title=this.options.titleText),u=document.querySelector("base")?window.location.pathname+window.location.search:"",u=this.options.base||u,h.href=u+"#"+n,"always"===l&&(h.style.opacity="1"),""===this.options.icon&&(h.style.font="1em/1 anchorjs-icons","left"===this.options.placement&&(h.style.lineHeight="inherit")),"left"===this.options.placement?(h.style.position="absolute",h.style.marginLeft="-1em",h.style.paddingRight="0.5em",e[o].insertBefore(h,e[o].firstChild)):(h.style.paddingLeft="0.375em",e[o].appendChild(h))}for(o=0;o<d.length;o++)e.splice(d[o]-o,1);return this.elements=this.elements.concat(e),this},this.remove=function(A){for(var e,t,i=p(A),n=0;n<i.length;n++)(t=i[n].querySelector(".anchorjs-link"))&&(-1!==(e=this.elements.indexOf(i[n]))&&this.elements.splice(e,1),i[n].removeChild(t));return this},this.removeAll=function(){this.remove(this.elements)},this.urlify=function(A){return this.options.truncate||f(this.options),A.trim().replace(/\'/gi,"").replace(/[& +$,:;=?@"#{}|^~[`%!'<>\]\.\/\(\)\*\\\n\t\b\v]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&-1<(" "+A.firstChild.className+" ").indexOf(" anchorjs-link "),t=A.lastChild&&-1<(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ");return e||t||!1}}});
53
+ // @license-end
54
+ </script>
68
55
  <script>
69
56
  /*
70
57
  $(document).ready(function() {