metanorma-un 0.3.8 → 0.3.9

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