metanorma-un 0.3.8 → 0.3.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b8f80e35f48b43c5972281e3788e35ad0cbddbdd912d9650ca9c5631e1211c97
4
- data.tar.gz: 89ae1f2db1f552085072fd51440d7fd340df455aaaec770e939086e50da3fa17
3
+ metadata.gz: 165a43762ea2750902fa7087fef248e5afc750cf880d99d39e308126aa7803f1
4
+ data.tar.gz: bbd3152032b437081396591891a0c7ec467c665c7affd7cafacaa065c4477290
5
5
  SHA512:
6
- metadata.gz: 0b9189ae7cdccdc42245ea6a657126c3e547683caa43aea1ceb5796ced1375ba401f9167c36b8667a472dc96ed534201d380711b183a340e90b74322c59b853a
7
- data.tar.gz: 95849abe4398f3f91568bfdc1effc3d11ae2163bf313b4d5d22fee2439b6647869c7d39543d2bcee4347c9afbef535fd1bea0a261fe7eb60986d57175ea285bd
6
+ metadata.gz: 5c28260f9ba2ec03524ece04bfb721be2a8a4bad1818026f360ee7bd3c08c167cd672da66b6a2337fa4fbe3af79fbb8cd22585db93e0a60d84850c1d4dd42327
7
+ data.tar.gz: d4a0e0de49f6fec3b23a37fdd2abdffaff38cc3b247fad27fd036be4a2255faf3bc26ae03d9162c9474abfe7cbbfa8fa45665b5ca7412ea3cb28075d058420b0
@@ -6,15 +6,23 @@ on:
6
6
  push:
7
7
  branches: [ master ]
8
8
  pull_request:
9
+ paths-ignore:
10
+ - .github/workflows/ubuntu.yml
11
+ - .github/workflows/windows.yml
9
12
 
10
13
  jobs:
11
14
  test-macos:
12
15
  name: Test on Ruby ${{ matrix.ruby }} macOS
13
16
  runs-on: macos-latest
17
+ continue-on-error: ${{ matrix.experimental }}
14
18
  strategy:
15
19
  fail-fast: false
16
20
  matrix:
17
21
  ruby: [ '2.6', '2.5', '2.4' ]
22
+ experimental: [false]
23
+ include:
24
+ - ruby: '2.7'
25
+ experimental: true
18
26
  steps:
19
27
  - uses: actions/checkout@master
20
28
  - name: Use Ruby
@@ -5,16 +5,26 @@ name: ubuntu
5
5
  on:
6
6
  push:
7
7
  branches: [ master ]
8
+ tags:
9
+ - '*'
8
10
  pull_request:
11
+ paths-ignore:
12
+ - .github/workflows/macos.yml
13
+ - .github/workflows/windows.yml
9
14
 
10
15
  jobs:
11
16
  test-linux:
12
17
  name: Test on Ruby ${{ matrix.ruby }} Ubuntu
13
18
  runs-on: ubuntu-latest
19
+ continue-on-error: ${{ matrix.experimental }}
14
20
  strategy:
15
21
  fail-fast: false
16
22
  matrix:
17
23
  ruby: [ '2.6', '2.5', '2.4' ]
24
+ experimental: [false]
25
+ include:
26
+ - ruby: '2.7'
27
+ experimental: true
18
28
  steps:
19
29
  - uses: actions/checkout@master
20
30
  - name: Use Ruby
@@ -6,15 +6,23 @@ on:
6
6
  push:
7
7
  branches: [ master ]
8
8
  pull_request:
9
+ paths-ignore:
10
+ - .github/workflows/macos.yml
11
+ - .github/workflows/ubuntu.yml
9
12
 
10
13
  jobs:
11
14
  test-windows:
12
15
  name: Test on Ruby ${{ matrix.ruby }} Windows
13
16
  runs-on: windows-latest
17
+ continue-on-error: ${{ matrix.experimental }}
14
18
  strategy:
15
19
  fail-fast: false
16
20
  matrix:
17
21
  ruby: [ '2.6', '2.5', '2.4' ]
22
+ experimental: [false]
23
+ include:
24
+ - ruby: '2.7'
25
+ experimental: true
18
26
  steps:
19
27
  - uses: actions/checkout@master
20
28
  - name: Use Ruby
@@ -88,7 +88,7 @@
88
88
  <text/>
89
89
  </element>
90
90
  </define>
91
- <define name="LocalizedString">
91
+ <define name="LocalizedString1">
92
92
  <optional>
93
93
  <!-- multiple languages and scripts possible: comma delimit them if so -->
94
94
  <attribute name="language"/>
@@ -98,6 +98,16 @@
98
98
  </optional>
99
99
  <text/>
100
100
  </define>
101
+ <define name="LocalizedString">
102
+ <choice>
103
+ <ref name="LocalizedString1"/>
104
+ <oneOrMore>
105
+ <element name="variant">
106
+ <ref name="LocalizedString1"/>
107
+ </element>
108
+ </oneOrMore>
109
+ </choice>
110
+ </define>
101
111
  <!--
102
112
  Unlike UML, change type to format: type is overloaded
103
113
  Would be need if plain were default value and could omit the attribute
@@ -121,7 +131,7 @@
121
131
  </optional>
122
132
  <ref name="LocalizedStringOrXsAny"/>
123
133
  </define>
124
- <define name="LocalizedStringOrXsAny">
134
+ <define name="LocalizedStringOrXsAny1">
125
135
  <optional>
126
136
  <!-- multiple languages and scripts possible: comma delimit them if so -->
127
137
  <attribute name="language"/>
@@ -136,6 +146,16 @@
136
146
  </choice>
137
147
  </oneOrMore>
138
148
  </define>
149
+ <define name="LocalizedStringOrXsAny">
150
+ <choice>
151
+ <ref name="LocalizedStringOrXsAny1"/>
152
+ <oneOrMore>
153
+ <element name="variant">
154
+ <ref name="LocalizedStringOrXsAny1"/>
155
+ </element>
156
+ </oneOrMore>
157
+ </choice>
158
+ </define>
139
159
  <define name="contributor">
140
160
  <element name="contributor">
141
161
  <zeroOrMore>
@@ -124,6 +124,7 @@ module Asciidoctor
124
124
 
125
125
  def makexml(node)
126
126
  @draft = node.attributes.has_key?("draft")
127
+ @no_number_subheadings = node.attributes.has_key?("do-not-number-subheadings")
127
128
  super
128
129
  end
129
130
 
@@ -187,12 +188,26 @@ module Asciidoctor
187
188
 
188
189
  def sections_cleanup(xmldoc)
189
190
  super
191
+ no_number_subheadings(xmldoc) if @no_number_subheadings
192
+ para_to_clause(xmldoc)
193
+ end
194
+
195
+ def no_number_subheadings(xmldoc)
196
+ xmldoc.xpath("//sections/clause | "\
197
+ "//sections/definitions | //annex").each do |s|
198
+ s.xpath(".//clause | .//definitions").each do |c|
199
+ c["unnumbered"] = true
200
+ end
201
+ end
202
+ end
203
+
204
+ def para_to_clause(xmldoc)
190
205
  doctype = xmldoc&.at("//bibdata/ext/doctype")&.text
191
206
  %w(plenary agenda budgetary).include?(doctype) or
192
- para_to_clause(xmldoc)
207
+ para_to_clause1(xmldoc)
193
208
  end
194
209
 
195
- def para_to_clause(xmldoc)
210
+ def para_to_clause1(xmldoc)
196
211
  xmldoc.xpath("//clause/p | //annex/p").each do |p|
197
212
  cl = Nokogiri::XML::Node.new("clause", xmldoc)
198
213
  cl["id"] = p["id"]
@@ -138,6 +138,109 @@
138
138
  <ref name="Basic-Section"/>
139
139
  </element>
140
140
  </define>
141
+ <define name="Clause-Section">
142
+ <optional>
143
+ <attribute name="id">
144
+ <data type="ID"/>
145
+ </attribute>
146
+ </optional>
147
+ <optional>
148
+ <attribute name="language"/>
149
+ </optional>
150
+ <optional>
151
+ <attribute name="script"/>
152
+ </optional>
153
+ <optional>
154
+ <attribute name="inline-header">
155
+ <data type="boolean"/>
156
+ </attribute>
157
+ </optional>
158
+ <optional>
159
+ <attribute name="obligation">
160
+ <choice>
161
+ <value>normative</value>
162
+ <value>informative</value>
163
+ </choice>
164
+ </attribute>
165
+ </optional>
166
+ <optional>
167
+ <attribute name="unnumbered">
168
+ <data type="boolean"/>
169
+ </attribute>
170
+ </optional>
171
+ <optional>
172
+ <ref name="section-title"/>
173
+ </optional>
174
+ <group>
175
+ <group>
176
+ <zeroOrMore>
177
+ <ref name="BasicBlock"/>
178
+ </zeroOrMore>
179
+ <zeroOrMore>
180
+ <ref name="note"/>
181
+ </zeroOrMore>
182
+ </group>
183
+ <zeroOrMore>
184
+ <choice>
185
+ <ref name="clause-subsection"/>
186
+ <ref name="terms"/>
187
+ <ref name="definitions"/>
188
+ </choice>
189
+ </zeroOrMore>
190
+ </group>
191
+ </define>
192
+ <define name="Annex-Section">
193
+ <optional>
194
+ <attribute name="id">
195
+ <data type="ID"/>
196
+ </attribute>
197
+ </optional>
198
+ <optional>
199
+ <attribute name="language"/>
200
+ </optional>
201
+ <optional>
202
+ <attribute name="script"/>
203
+ </optional>
204
+ <optional>
205
+ <attribute name="inline-header">
206
+ <data type="boolean"/>
207
+ </attribute>
208
+ </optional>
209
+ <optional>
210
+ <attribute name="obligation">
211
+ <choice>
212
+ <value>normative</value>
213
+ <value>informative</value>
214
+ </choice>
215
+ </attribute>
216
+ </optional>
217
+ <optional>
218
+ <attribute name="unnumbered">
219
+ <data type="boolean"/>
220
+ </attribute>
221
+ </optional>
222
+ <optional>
223
+ <ref name="section-title"/>
224
+ </optional>
225
+ <group>
226
+ <group>
227
+ <zeroOrMore>
228
+ <ref name="BasicBlock"/>
229
+ </zeroOrMore>
230
+ <zeroOrMore>
231
+ <ref name="note"/>
232
+ </zeroOrMore>
233
+ </group>
234
+ <zeroOrMore>
235
+ <choice>
236
+ <ref name="annex-subsection"/>
237
+ <ref name="terms"/>
238
+ <ref name="definitions"/>
239
+ <ref name="references"/>
240
+ </choice>
241
+ </zeroOrMore>
242
+ </group>
243
+ </define>
141
244
  </include>
142
245
  <define name="session">
143
246
  <element name="session">
@@ -1,6 +1,6 @@
1
1
  require_relative "metadata"
2
+ require_relative "xref"
2
3
  require "fileutils"
3
- require "roman-numerals"
4
4
 
5
5
  module IsoDoc
6
6
  module UN
@@ -30,183 +30,6 @@ module IsoDoc
30
30
  File.join(File.dirname(__FILE__), loc)
31
31
  end
32
32
 
33
- MIDDLE_CLAUSE = "//clause[parent::sections]".freeze
34
-
35
- def initial_anchor_names(d)
36
- preface_names(d.at(ns("//preface/abstract")))
37
- preface_names(d.at(ns("//foreword")))
38
- preface_names(d.at(ns("//introduction")))
39
- d.xpath(ns("//preface/clause")).each do |c|
40
- preface_names(c)
41
- end
42
- preface_names(d.at(ns("//acknowledgements")))
43
- sequential_asset_names(
44
- d.xpath(ns("//preface/abstract | //foreword | //introduction | "\
45
- "//preface/clause | //acknowledgements")))
46
- middle_section_asset_names(d)
47
- clause_names(d, 0)
48
- termnote_anchor_names(d)
49
- termexample_anchor_names(d)
50
- end
51
-
52
- def clause_names(docxml, sect_num)
53
- q = "//clause[parent::sections]"
54
- @paranumber = 0
55
- docxml.xpath(ns(q)).each_with_index do |c, i|
56
- section_names(c, (i + sect_num), 1)
57
- end
58
- end
59
-
60
- def levelnumber(num, lvl)
61
- case lvl % 3
62
- when 1 then RomanNumerals.to_roman(num)
63
- when 2 then ("A".ord + num - 1).chr
64
- when 0 then num.to_s
65
- end
66
- end
67
-
68
- def annex_levelnum(num, lvl)
69
- case lvl % 3
70
- when 0 then RomanNumerals.to_roman(num)
71
- when 1 then ("A".ord + num - 1).chr
72
- when 2 then num.to_s
73
- end
74
- end
75
-
76
- NONTERMINAL =
77
- "./clause | ./term | ./terms | ./definitions | ./references".freeze
78
-
79
- def leaf_section?(clause)
80
- !clause.at(ns(NONTERMINAL)) &&
81
- !%w(definitions annex terms).include?(clause.name) &&
82
- clause.at(ns("./p | ./bibitem"))
83
- end
84
-
85
- def label_leaf_section(clause, lvl)
86
- @paranumber += 1
87
- @anchors[clause["id"]] = {label: @paranumber.to_s,
88
- xref: "paragraph #{@paranumber}",
89
- level: lvl, type: "paragraph" }
90
- end
91
-
92
- def label_annex_leaf_section(clause, num, lvl)
93
- @paranumber += 1
94
- @anchors[clause["id"]] = {label: @paranumber.to_s,
95
- xref: "paragraph #{num}.#{@paranumber}",
96
- level: lvl, type: "paragraph" }
97
- end
98
-
99
- def section_names(clause, num, lvl)
100
- return num if clause.nil?
101
- leaf_section?(clause) and label_leaf_section(clause, lvl) and return
102
- num = num + 1
103
- lbl = levelnumber(num, 1)
104
- @anchors[clause["id"]] = { label: lbl, level: lvl, type: "clause",
105
- xref: l10n("#{@clause_lbl} #{lbl}") }
106
- i = 1
107
- clause.xpath(ns(NONTERMINAL)).each do |c|
108
- section_names1(c, "#{lbl}.#{levelnumber(i, lvl + 1)}", lvl + 1)
109
- i += 1 if !leaf_section?(c)
110
- end
111
- num
112
- end
113
-
114
- def section_names1(clause, num, level)
115
- leaf_section?(clause) and label_leaf_section(clause, level) and return
116
- /\.(?<leafnum>[^.]+$)/ =~ num
117
- @anchors[clause["id"]] = { label: leafnum, level: level, type: "clause",
118
- xref: l10n("#{@clause_lbl} #{num}") }
119
- i = 1
120
- clause.xpath(ns(NONTERMINAL)).each do |c|
121
- section_names1(c, "#{num}.#{levelnumber(i, level + 1)}", level + 1)
122
- i += 1 if !leaf_section?(c)
123
- end
124
- end
125
-
126
- def annex_name_lbl(clause, num)
127
- l10n("<b>#{@annex_lbl} #{num}</b>")
128
- end
129
-
130
- SUBCLAUSES =
131
- "./clause | ./references | ./term | ./terms | ./definitions".freeze
132
-
133
-
134
- def annex_names(clause, num)
135
- hierarchical_asset_names(clause, num)
136
- leaf_section?(clause) and
137
- label_annex_leaf_section(clause, num, 1) and return
138
- @anchors[clause["id"]] = { label: annex_name_lbl(clause, num),
139
- type: "clause",
140
- xref: "#{@annex_lbl} #{num}", level: 1 }
141
- if a = single_annex_special_section(clause)
142
- annex_names1(a, "#{num}", 1)
143
- else
144
- i = 1
145
- clause.xpath(ns(SUBCLAUSES)).each do |c|
146
- annex_names1(c, "#{num}.#{annex_levelnum(i, 2)}", 2)
147
- i += 1 if !leaf_section?(c)
148
- end
149
- end
150
- end
151
-
152
- def annex_names1(clause, num, level)
153
- leaf_section?(clause) and
154
- label_annex_leaf_section(clause, num, level) and return
155
- /\.(?<leafnum>[^.]+$)/ =~ num
156
- @anchors[clause["id"]] = { label: leafnum, xref: "#{@annex_lbl} #{num}",
157
- level: level, type: "clause" }
158
- i = 1
159
- clause.xpath(ns("./clause | ./references")).each do |c|
160
- annex_names1(c, "#{num}.#{annex_levelnum(i, level + 1)}", level + 1)
161
- i += 1 if !leaf_section?(c)
162
- end
163
- end
164
-
165
- def back_anchor_names(docxml)
166
- docxml.xpath(ns("//annex")).each_with_index do |c, i|
167
- @paranumber = 0
168
- annex_names(c, RomanNumerals.to_roman(i + 1))
169
- end
170
- docxml.xpath(ns("//bibliography/clause |"\
171
- "//bibliography/references")).each do |b|
172
- preface_names(b)
173
- end
174
- docxml.xpath(ns("//bibitem[not(ancestor::bibitem)]")).each do |ref|
175
- reference_names(ref)
176
- end
177
- end
178
-
179
- def sequential_admonition_names(clause)
180
- i = 0
181
- clause.xpath(ns(".//admonition")).each do |t|
182
- i += 1 unless t["unnumbered"]
183
- next if t["id"].nil? || t["id"].empty?
184
- @anchors[t["id"]] = anchor_struct(i.to_s, nil, @admonition_lbl,
185
- "box", t["unnumbered"])
186
- end
187
- end
188
-
189
- def hierarchical_admonition_names(clause, num)
190
- i = 0
191
- clause.xpath(ns(".//admonition")).each do |t|
192
- i += 1 unless t["unnumbered"]
193
- next if t["id"].nil? || t["id"].empty?
194
- @anchors[t["id"]] =
195
- anchor_struct("#{num}.#{i}", nil, @admonition_lbl, "box",
196
- t["unnumbered"])
197
- end
198
- end
199
-
200
- def sequential_asset_names(clause)
201
- super
202
- sequential_admonition_names(clause)
203
- end
204
-
205
- def hierarchical_asset_names(clause, num)
206
- super
207
- hierarchical_admonition_names(clause, num)
208
- end
209
-
210
33
  def admonition_name_parse(node, div, name)
211
34
  div.p **{ class: "AdmonitionTitle", style: "text-align:center;" } do |p|
212
35
  lbl = anchor(node['id'], :label)
@@ -42,13 +42,16 @@ $('#toggle').on('click', function(){
42
42
  </script>
43
43
 
44
44
  <script>
45
- /**
46
- * AnchorJS - v4.1.0 - 2017-09-20
47
- * https://github.com/bryanbraun/anchorjs
48
- * Copyright (c) 2017 Bryan Braun; Licensed MIT
49
- */
50
- !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>
51
-
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>
52
55
  <script>
53
56
  /*
54
57
  $('document').ready(function() {
@@ -0,0 +1,188 @@
1
+ require "roman-numerals"
2
+
3
+ module IsoDoc
4
+ module UN
5
+ module BaseConvert
6
+ MIDDLE_CLAUSE = "//clause[parent::sections]".freeze
7
+
8
+ def initial_anchor_names(d)
9
+ preface_names(d.at(ns("//preface/abstract")))
10
+ preface_names(d.at(ns("//foreword")))
11
+ preface_names(d.at(ns("//introduction")))
12
+ d.xpath(ns("//preface/clause")).each do |c|
13
+ preface_names(c)
14
+ end
15
+ preface_names(d.at(ns("//acknowledgements")))
16
+ sequential_asset_names(
17
+ d.xpath(ns("//preface/abstract | //foreword | //introduction | "\
18
+ "//preface/clause | //acknowledgements")))
19
+ middle_section_asset_names(d)
20
+ clause_names(d, 0)
21
+ termnote_anchor_names(d)
22
+ termexample_anchor_names(d)
23
+ end
24
+
25
+ def clause_names(docxml, sect_num)
26
+ q = "//clause[parent::sections]"
27
+ @paranumber = 0
28
+ docxml.xpath(ns(q)).each_with_index do |c, i|
29
+ section_names(c, (i + sect_num), 1)
30
+ end
31
+ end
32
+
33
+ def levelnumber(num, lvl)
34
+ case lvl % 3
35
+ when 1 then RomanNumerals.to_roman(num)
36
+ when 2 then ("A".ord + num - 1).chr
37
+ when 0 then num.to_s
38
+ end
39
+ end
40
+
41
+ def annex_levelnum(num, lvl)
42
+ case lvl % 3
43
+ when 0 then RomanNumerals.to_roman(num)
44
+ when 1 then ("A".ord + num - 1).chr
45
+ when 2 then num.to_s
46
+ end
47
+ end
48
+
49
+ NONTERMINAL =
50
+ "./clause | ./term | ./terms | ./definitions | ./references".freeze
51
+
52
+ def leaf_section?(clause)
53
+ !clause.at(ns(NONTERMINAL)) &&
54
+ !%w(definitions annex terms).include?(clause.name) &&
55
+ clause.at(ns("./p | ./bibitem"))
56
+ end
57
+
58
+ def label_leaf_section(clause, lvl)
59
+ @paranumber += 1
60
+ @anchors[clause["id"]] = {label: @paranumber.to_s,
61
+ xref: "paragraph #{@paranumber}",
62
+ level: lvl, type: "paragraph" }
63
+ end
64
+
65
+ def label_annex_leaf_section(clause, num, lvl)
66
+ @paranumber += 1
67
+ @anchors[clause["id"]] = {label: @paranumber.to_s,
68
+ xref: "paragraph #{num}.#{@paranumber}",
69
+ level: lvl, type: "paragraph" }
70
+ end
71
+
72
+ def section_names(clause, num, lvl)
73
+ return num if clause.nil?
74
+ leaf_section?(clause) and label_leaf_section(clause, lvl) and return
75
+ num = num + 1
76
+ lbl = levelnumber(num, 1)
77
+ @anchors[clause["id"]] = { label: lbl, level: lvl, type: "clause",
78
+ xref: l10n("#{@clause_lbl} #{lbl}") }
79
+ i = 1
80
+ clause.xpath(ns(NONTERMINAL)).each do |c|
81
+ next if c["unnumbered"] == "true"
82
+ section_names1(c, "#{lbl}.#{levelnumber(i, lvl + 1)}", lvl + 1)
83
+ i += 1 if !leaf_section?(c)
84
+ end
85
+ num
86
+ end
87
+
88
+ def section_names1(clause, num, level)
89
+ leaf_section?(clause) and label_leaf_section(clause, level) and return
90
+ /\.(?<leafnum>[^.]+$)/ =~ num
91
+ @anchors[clause["id"]] = { label: leafnum, level: level, type: "clause",
92
+ xref: l10n("#{@clause_lbl} #{num}") }
93
+ i = 1
94
+ clause.xpath(ns(NONTERMINAL)).each do |c|
95
+ next if c["unnumbered"] == "true"
96
+ section_names1(c, "#{num}.#{levelnumber(i, level + 1)}", level + 1)
97
+ i += 1 if !leaf_section?(c)
98
+ end
99
+ end
100
+
101
+ def annex_name_lbl(clause, num)
102
+ l10n("<b>#{@annex_lbl} #{num}</b>")
103
+ end
104
+
105
+ SUBCLAUSES =
106
+ "./clause | ./references | ./term | ./terms | ./definitions".freeze
107
+
108
+
109
+ def annex_names(clause, num)
110
+ hierarchical_asset_names(clause, num)
111
+ leaf_section?(clause) and
112
+ label_annex_leaf_section(clause, num, 1) and return
113
+ @anchors[clause["id"]] = { label: annex_name_lbl(clause, num),
114
+ type: "clause",
115
+ xref: "#{@annex_lbl} #{num}", level: 1 }
116
+ if a = single_annex_special_section(clause)
117
+ annex_names1(a, "#{num}", 1)
118
+ else
119
+ i = 1
120
+ clause.xpath(ns(SUBCLAUSES)).each do |c|
121
+ next if c["unnumbered"] == "true"
122
+ annex_names1(c, "#{num}.#{annex_levelnum(i, 2)}", 2)
123
+ i += 1 if !leaf_section?(c)
124
+ end
125
+ end
126
+ end
127
+
128
+ def annex_names1(clause, num, level)
129
+ leaf_section?(clause) and
130
+ label_annex_leaf_section(clause, num, level) and return
131
+ /\.(?<leafnum>[^.]+$)/ =~ num
132
+ @anchors[clause["id"]] = { label: leafnum, xref: "#{@annex_lbl} #{num}",
133
+ level: level, type: "clause" }
134
+ i = 1
135
+ clause.xpath(ns("./clause | ./references")).each do |c|
136
+ next if c["unnumbered"] == "true"
137
+ annex_names1(c, "#{num}.#{annex_levelnum(i, level + 1)}", level + 1)
138
+ i += 1 if !leaf_section?(c)
139
+ end
140
+ end
141
+
142
+ def back_anchor_names(docxml)
143
+ docxml.xpath(ns("//annex")).each_with_index do |c, i|
144
+ @paranumber = 0
145
+ annex_names(c, RomanNumerals.to_roman(i + 1))
146
+ end
147
+ docxml.xpath(ns("//bibliography/clause |"\
148
+ "//bibliography/references")).each do |b|
149
+ preface_names(b)
150
+ end
151
+ docxml.xpath(ns("//bibitem[not(ancestor::bibitem)]")).each do |ref|
152
+ reference_names(ref)
153
+ end
154
+ end
155
+
156
+ def sequential_admonition_names(clause)
157
+ i = 0
158
+ clause.xpath(ns(".//admonition")).each do |t|
159
+ next if t["id"].nil? || t["id"].empty?
160
+ i += 1 unless t["unnumbered"] == "true"
161
+ @anchors[t["id"]] = anchor_struct(i.to_s, nil, @admonition_lbl,
162
+ "box", t["unnumbered"])
163
+ end
164
+ end
165
+
166
+ def hierarchical_admonition_names(clause, num)
167
+ i = 0
168
+ clause.xpath(ns(".//admonition")).each do |t|
169
+ next if t["id"].nil? || t["id"].empty?
170
+ i += 1 unless t["unnumbered"] == "true"
171
+ @anchors[t["id"]] =
172
+ anchor_struct("#{num}.#{i}", nil, @admonition_lbl, "box",
173
+ t["unnumbered"])
174
+ end
175
+ end
176
+
177
+ def sequential_asset_names(clause)
178
+ super
179
+ sequential_admonition_names(clause)
180
+ end
181
+
182
+ def hierarchical_asset_names(clause, num)
183
+ super
184
+ hierarchical_admonition_names(clause, num)
185
+ end
186
+ end
187
+ end
188
+ end
@@ -3,7 +3,11 @@ require "metanorma/processor"
3
3
  module Metanorma
4
4
  module UN
5
5
  def self.fonts_used
6
- ["Arial", "Arial Black", "Courier", "Times New Roman", "HanSans"]
6
+ {
7
+ html: ["Arial", "Arial Black", "Courier", "Times New Roman", "HanSans"],
8
+ doc: ["Arial", "Arial Black", "Courier", "Times New Roman", "HanSans"],
9
+ pdf: ["Arial", "Arial Black", "Courier", "Times New Roman", "HanSans"],
10
+ }
7
11
  end
8
12
 
9
13
  class Processor < Metanorma::Processor
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module UN
3
- VERSION = "0.3.8"
3
+ VERSION = "0.3.9"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-un
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.8
4
+ version: 0.3.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-05-13 00:00:00.000000000 Z
11
+ date: 2020-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: htmlentities
@@ -276,7 +276,6 @@ files:
276
276
  - lib/isodoc/un/html/htmlstyle.scss
277
277
  - lib/isodoc/un/html/logo.jpg
278
278
  - lib/isodoc/un/html/scripts.html
279
- - lib/isodoc/un/html/scripts.pdf.html
280
279
  - lib/isodoc/un/html/unece.scss
281
280
  - lib/isodoc/un/html/word_unece_intro.html
282
281
  - lib/isodoc/un/html/word_unece_plenary_titlepage.html
@@ -288,6 +287,7 @@ files:
288
287
  - lib/isodoc/un/un.plenary.xsl
289
288
  - lib/isodoc/un/un.recommendation.xsl
290
289
  - lib/isodoc/un/word_convert.rb
290
+ - lib/isodoc/un/xref.rb
291
291
  - lib/metanorma-un.rb
292
292
  - lib/metanorma/un.rb
293
293
  - lib/metanorma/un/UN_emblem_blue.svg
@@ -1,72 +0,0 @@
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': false, //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
-
22
- </script>
23
-
24
- <script>
25
- //TOC toggle animation
26
- $('#toggle').on('click', function(){
27
- if( $('nav').is(':visible') ) {
28
- $('nav').animate({ 'left': '-353px' }, 'slow', function(){
29
- $('nav').hide();
30
- });
31
- $('.container').animate({ 'padding-left': '31px' }, 'slow');
32
- }
33
- else {
34
- $('nav').show();
35
- $('nav').animate({ 'left': '0px' }, 'slow');
36
- $('.container').animate({ 'padding-left': '360px' }, 'slow');
37
- }
38
- });
39
- </script>
40
-
41
- <script>
42
- // Scroll to top button
43
- window.onscroll = function() {scrollFunction()};
44
-
45
- function scrollFunction() {
46
- if (document.body.scrollTop > 100 || document.documentElement.scrollTop > 100) {
47
- document.getElementById("myBtn").style.display = "block";
48
- } else {
49
- document.getElementById("myBtn").style.display = "none";
50
- }
51
- }
52
-
53
- // When the user clicks on the button, scroll to the top of the document
54
- function topFunction() {
55
- document.body.scrollTop = 0;
56
- document.documentElement.scrollTop = 0;
57
- }
58
- </script>
59
-
60
- <script>
61
- /*
62
- $(document).ready(function() {
63
- $('[id^=toc]').each(function ()
64
- {
65
- var currentToc = $(this);
66
- var url = window.location.href;
67
- currentToc.wrap("<a href='" + url + "#" + currentToc.attr("id") + "' </a>");
68
- });
69
- });
70
- */
71
- </script>
72
-