isodoc 1.5.5 → 1.6.4
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 +4 -4
- data/.github/workflows/rake.yml +2 -12
- data/.hound.yml +3 -1
- data/.rubocop.yml +3 -7
- data/Gemfile +2 -2
- data/Rakefile +2 -2
- data/bin/rspec +1 -2
- data/isodoc.gemspec +11 -11
- data/lib/isodoc-yaml/i18n-ar.yaml +152 -0
- data/lib/isodoc-yaml/i18n-de.yaml +149 -0
- data/lib/isodoc-yaml/i18n-es.yaml +151 -0
- data/lib/isodoc-yaml/i18n-ru.yaml +154 -0
- data/lib/isodoc.rb +0 -2
- data/lib/isodoc/base_style/all.css +7 -0
- data/lib/isodoc/base_style/metanorma_word.css +7 -0
- data/lib/isodoc/base_style/metanorma_word.scss +8 -0
- data/lib/isodoc/base_style/reset.css +7 -0
- data/lib/isodoc/base_style/reset.scss +9 -0
- data/lib/isodoc/base_style/scripts.html +187 -0
- data/lib/isodoc/class_utils.rb +6 -5
- data/lib/isodoc/common.rb +2 -0
- data/lib/isodoc/convert.rb +30 -17
- data/lib/isodoc/css.rb +43 -34
- data/lib/isodoc/function/blocks.rb +21 -4
- data/lib/isodoc/function/blocks_example_note.rb +2 -2
- data/lib/isodoc/function/cleanup.rb +53 -45
- data/lib/isodoc/function/form.rb +51 -0
- data/lib/isodoc/function/inline.rb +37 -15
- data/lib/isodoc/function/references.rb +55 -42
- data/lib/isodoc/function/section.rb +29 -16
- data/lib/isodoc/function/table.rb +1 -0
- data/lib/isodoc/function/to_word_html.rb +33 -29
- data/lib/isodoc/function/utils.rb +180 -159
- data/lib/isodoc/gem_tasks.rb +30 -31
- data/lib/isodoc/headlesshtml_convert.rb +8 -7
- data/lib/isodoc/html_convert.rb +6 -4
- data/lib/isodoc/html_function/comments.rb +2 -0
- data/lib/isodoc/html_function/footnotes.rb +14 -7
- data/lib/isodoc/html_function/form.rb +62 -0
- data/lib/isodoc/html_function/html.rb +30 -26
- data/lib/isodoc/html_function/postprocess.rb +41 -82
- data/lib/isodoc/html_function/postprocess_footnotes.rb +59 -0
- data/lib/isodoc/i18n.rb +33 -31
- data/lib/isodoc/pdf_convert.rb +12 -16
- data/lib/isodoc/presentation_function/bibdata.rb +54 -30
- data/lib/isodoc/presentation_function/block.rb +17 -8
- data/lib/isodoc/presentation_function/inline.rb +84 -120
- data/lib/isodoc/presentation_function/math.rb +84 -0
- data/lib/isodoc/presentation_function/section.rb +20 -22
- data/lib/isodoc/presentation_xml_convert.rb +2 -1
- data/lib/isodoc/sassc_importer.rb +1 -1
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/word_function/body.rb +28 -24
- data/lib/isodoc/word_function/footnotes.rb +22 -15
- data/lib/isodoc/word_function/postprocess.rb +50 -36
- data/lib/isodoc/xref.rb +9 -10
- data/lib/isodoc/xref/xref_counter.rb +32 -17
- data/lib/isodoc/xref/xref_gen.rb +33 -21
- data/lib/isodoc/xref/xref_gen_seq.rb +60 -35
- data/lib/isodoc/xref/xref_sect_gen.rb +37 -35
- data/lib/isodoc/xslfo_convert.rb +36 -27
- data/spec/assets/scripts_override.html +3 -0
- data/spec/isodoc/blocks_spec.rb +2490 -2591
- data/spec/isodoc/cleanup_spec.rb +1107 -1109
- data/spec/isodoc/footnotes_spec.rb +1 -16
- data/spec/isodoc/form_spec.rb +156 -0
- data/spec/isodoc/i18n_spec.rb +984 -972
- data/spec/isodoc/inline_spec.rb +1129 -912
- data/spec/isodoc/lists_spec.rb +316 -315
- data/spec/isodoc/postproc_spec.rb +1751 -1540
- data/spec/isodoc/presentation_xml_spec.rb +403 -323
- data/spec/isodoc/ref_spec.rb +718 -723
- data/spec/isodoc/section_spec.rb +910 -902
- data/spec/isodoc/table_spec.rb +566 -556
- data/spec/isodoc/terms_spec.rb +251 -255
- data/spec/isodoc/xref_spec.rb +3041 -2992
- data/spec/isodoc/xslfo_convert_spec.rb +39 -0
- data/spec/spec_helper.rb +30 -29
- metadata +77 -65
@@ -2,16 +2,17 @@ require "roman-numerals"
|
|
2
2
|
|
3
3
|
module IsoDoc::XrefGen
|
4
4
|
class Counter
|
5
|
-
def initialize(num = 0, opts = {numerals: :arabic})
|
5
|
+
def initialize(num = 0, opts = { numerals: :arabic })
|
6
6
|
@num = num
|
7
7
|
@letter = ""
|
8
8
|
@subseq = ""
|
9
9
|
@letter_override = nil
|
10
10
|
@number_override = nil
|
11
11
|
@style = opts[:numerals]
|
12
|
+
@skip_i = opts[:skip_i]
|
12
13
|
@base = ""
|
13
14
|
if num.is_a? String
|
14
|
-
if /^\d+$/.match(num)
|
15
|
+
if /^\d+$/.match?(num)
|
15
16
|
@num = num.to_i
|
16
17
|
else
|
17
18
|
@num = nil
|
@@ -34,7 +35,7 @@ module IsoDoc::XrefGen
|
|
34
35
|
@base = b
|
35
36
|
else
|
36
37
|
@letter_override = node["number"]
|
37
|
-
@letter = @letter_override if /^[a-zA-Z]$/.match(@letter_override)
|
38
|
+
@letter = @letter_override if /^[a-zA-Z]$/.match?(@letter_override)
|
38
39
|
end
|
39
40
|
end
|
40
41
|
end
|
@@ -48,8 +49,7 @@ module IsoDoc::XrefGen
|
|
48
49
|
@base = node["number"][0..-2]
|
49
50
|
@letter = @letter_override = node["number"][-1]
|
50
51
|
else
|
51
|
-
@number_override =
|
52
|
-
@num = n.to_i
|
52
|
+
@number_override = @num = n.to_i
|
53
53
|
@base = b
|
54
54
|
@letter = ""
|
55
55
|
end
|
@@ -64,7 +64,7 @@ module IsoDoc::XrefGen
|
|
64
64
|
@letter_override = node["number"]
|
65
65
|
/^(?<b>.*?)(?<n>\d*)(?<a>[a-zA-Z])$/ =~ node["number"]
|
66
66
|
if blank?(a)
|
67
|
-
if /^\d+$/.match(node["number"])
|
67
|
+
if /^\d+$/.match?(node["number"])
|
68
68
|
@letter_override = @letter = ""
|
69
69
|
@number_override = @num = node["number"].to_i
|
70
70
|
else
|
@@ -80,32 +80,46 @@ module IsoDoc::XrefGen
|
|
80
80
|
@number_override = @num = n.to_i unless n.empty?
|
81
81
|
end
|
82
82
|
else
|
83
|
-
|
83
|
+
increment_letter
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def increment_letter
|
88
|
+
case @letter
|
89
|
+
when "Z"
|
90
|
+
@letter = "@"
|
91
|
+
@base = @base.empty? ? "A" : @base[0..-2] + (@base[-1].ord + 1).chr.to_s
|
92
|
+
when "z"
|
93
|
+
@letter = "`"
|
94
|
+
@base = @base.empty? ? "a" : @base[0..-2] + (@base[-1].ord + 1).chr.to_s
|
84
95
|
end
|
96
|
+
@letter = (@letter.ord + 1).chr.to_s
|
97
|
+
@skip_i && %w(i I).include?(@letter) and
|
98
|
+
@letter = (@letter.ord + 1).chr.to_s
|
85
99
|
end
|
86
100
|
|
87
|
-
def blank?(
|
88
|
-
|
101
|
+
def blank?(str)
|
102
|
+
str.nil? || str.empty?
|
89
103
|
end
|
90
104
|
|
91
105
|
def increment(node)
|
92
106
|
return self if node["unnumbered"]
|
107
|
+
|
93
108
|
@letter_override = nil
|
94
109
|
@number_override = nil
|
95
|
-
if node["subsequence"] != @subseq &&
|
110
|
+
if node["subsequence"] != @subseq &&
|
111
|
+
!(blank?(node["subsequence"]) && blank?(@subseq))
|
96
112
|
new_subseq_increment(node)
|
97
|
-
elsif @letter.empty?
|
98
|
-
|
99
|
-
else
|
100
|
-
subsequence_increment(node)
|
113
|
+
elsif @letter.empty? then sequence_increment(node)
|
114
|
+
else subsequence_increment(node)
|
101
115
|
end
|
102
116
|
self
|
103
117
|
end
|
104
118
|
|
105
119
|
def print
|
106
120
|
num = @number_override || @num
|
107
|
-
|
108
|
-
"#{@base}#{
|
121
|
+
out = @style == :roman && !num.nil? ? RomanNumerals.to_roman(num) : num
|
122
|
+
"#{@base}#{out}#{@letter_override || @letter}"
|
109
123
|
end
|
110
124
|
|
111
125
|
def ol_type(list, depth)
|
@@ -115,7 +129,8 @@ module IsoDoc::XrefGen
|
|
115
129
|
return :alphabet_upper if [4, 9].include? depth
|
116
130
|
return :roman if [3, 8].include? depth
|
117
131
|
return :roman_upper if [5, 10].include? depth
|
118
|
-
|
132
|
+
|
133
|
+
:arabic
|
119
134
|
end
|
120
135
|
|
121
136
|
def listlabel(list, depth)
|
data/lib/isodoc/xref/xref_gen.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require_relative "xref_gen_seq
|
1
|
+
require_relative "xref_gen_seq"
|
2
2
|
|
3
3
|
module IsoDoc::XrefGen
|
4
4
|
module Blocks
|
@@ -10,35 +10,43 @@ module IsoDoc::XrefGen
|
|
10
10
|
autonum = amend_autonums(a)
|
11
11
|
NUMBERED_BLOCKS.each do |b|
|
12
12
|
a.xpath(ns("./newcontent//#{b}")).each_with_index do |e, i|
|
13
|
-
autonum[b]
|
13
|
+
autonum[b] && i.zero? and e["number"] = autonum[b]
|
14
14
|
!autonum[b] and e["unnumbered"] = "true"
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
def amend_autonums(
|
20
|
+
def amend_autonums(amend)
|
21
21
|
autonum = {}
|
22
|
-
|
22
|
+
amend.xpath(ns("./autonumber")).each do |n|
|
23
23
|
autonum[n["type"]] = n.text
|
24
24
|
end
|
25
25
|
autonum
|
26
26
|
end
|
27
27
|
|
28
|
-
def termnote_label(
|
29
|
-
@labels["termnote"].gsub(/%/,
|
28
|
+
def termnote_label(note)
|
29
|
+
@labels["termnote"].gsub(/%/, note.to_s)
|
30
|
+
end
|
31
|
+
|
32
|
+
def increment_label(elems, node, counter, increment = true)
|
33
|
+
return "" if elems.size == 1 && !node["number"]
|
34
|
+
|
35
|
+
counter.increment(node) if increment
|
36
|
+
" #{counter.print}"
|
30
37
|
end
|
31
38
|
|
32
39
|
def termnote_anchor_names(docxml)
|
33
40
|
docxml.xpath(ns("//term[descendant::termnote]")).each do |t|
|
34
41
|
c = Counter.new
|
35
42
|
t.xpath(ns(".//termnote")).each do |n|
|
36
|
-
|
43
|
+
next if n["id"].nil? || n["id"].empty?
|
44
|
+
|
37
45
|
c.increment(n)
|
38
46
|
@anchors[n["id"]] =
|
39
47
|
{ label: termnote_label(c.print), type: "termnote", value: c.print,
|
40
48
|
xref: l10n("#{anchor(t['id'], :xref)}, "\
|
41
|
-
"#{@labels[
|
49
|
+
"#{@labels['note_xref']} #{c.print}") }
|
42
50
|
end
|
43
51
|
end
|
44
52
|
end
|
@@ -48,13 +56,14 @@ module IsoDoc::XrefGen
|
|
48
56
|
examples = t.xpath(ns(".//termexample"))
|
49
57
|
c = Counter.new
|
50
58
|
examples.each do |n|
|
51
|
-
|
59
|
+
next if n["id"].nil? || n["id"].empty?
|
60
|
+
|
52
61
|
c.increment(n)
|
53
|
-
idx = examples
|
62
|
+
idx = increment_label(examples, n, c, false)
|
54
63
|
@anchors[n["id"]] = {
|
55
64
|
type: "termexample", label: idx, value: c.print,
|
56
65
|
xref: l10n("#{anchor(t['id'], :xref)}, "\
|
57
|
-
"#{@labels[
|
66
|
+
"#{@labels['example_xref']} #{c.print}") }
|
58
67
|
end
|
59
68
|
end
|
60
69
|
end
|
@@ -81,9 +90,10 @@ module IsoDoc::XrefGen
|
|
81
90
|
c = Counter.new
|
82
91
|
notes.each do |n|
|
83
92
|
next if @anchors[n["id"]] || n["id"].nil? || n["id"].empty?
|
84
|
-
|
85
|
-
@anchors[n["id"]] =
|
86
|
-
|
93
|
+
|
94
|
+
@anchors[n["id"]] =
|
95
|
+
anchor_struct(increment_label(notes, n, c), n,
|
96
|
+
@labels["note_xref"], "note", false)
|
87
97
|
end
|
88
98
|
note_anchor_names(s.xpath(ns(CHILD_SECTIONS)))
|
89
99
|
end
|
@@ -103,10 +113,10 @@ module IsoDoc::XrefGen
|
|
103
113
|
c = Counter.new
|
104
114
|
notes.each do |n|
|
105
115
|
next if @anchors[n["id"]] || n["id"].nil? || n["id"].empty?
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
116
|
+
|
117
|
+
@anchors[n["id"]] =
|
118
|
+
anchor_struct(increment_label(notes, n, c), n,
|
119
|
+
@labels["example_xref"], "example", n["unnumbered"])
|
110
120
|
end
|
111
121
|
example_anchor_names(s.xpath(ns(CHILD_SECTIONS)))
|
112
122
|
end
|
@@ -119,9 +129,9 @@ module IsoDoc::XrefGen
|
|
119
129
|
c = Counter.new
|
120
130
|
notes.each do |n|
|
121
131
|
next if n["id"].nil? || n["id"].empty?
|
122
|
-
|
123
|
-
@anchors[n["id"]] = anchor_struct(
|
124
|
-
false)
|
132
|
+
|
133
|
+
@anchors[n["id"]] = anchor_struct(increment_label(notes, n, c), n,
|
134
|
+
@labels["list"], "list", false)
|
125
135
|
list_item_anchor_names(n, @anchors[n["id"]], 1, "", notes.size != 1)
|
126
136
|
end
|
127
137
|
list_anchor_names(s.xpath(ns(CHILD_SECTIONS)))
|
@@ -146,9 +156,11 @@ module IsoDoc::XrefGen
|
|
146
156
|
def bookmark_anchor_names(docxml)
|
147
157
|
docxml.xpath(ns(".//bookmark")).each do |n|
|
148
158
|
next if n["id"].nil? || n["id"].empty?
|
159
|
+
|
149
160
|
parent = nil
|
150
161
|
n.ancestors.each do |a|
|
151
162
|
next unless a["id"] && parent = @anchors.dig(a["id"], :xref)
|
163
|
+
|
152
164
|
break
|
153
165
|
end
|
154
166
|
@anchors[n["id"]] = { type: "bookmark", label: nil, value: nil,
|
@@ -8,25 +8,27 @@ module IsoDoc::XrefGen
|
|
8
8
|
"-"
|
9
9
|
end
|
10
10
|
|
11
|
-
def subfigure_increment(
|
12
|
-
if
|
11
|
+
def subfigure_increment(idx, counter, elem)
|
12
|
+
if elem.parent.name == "figure" then idx += 1
|
13
13
|
else
|
14
|
-
|
15
|
-
|
14
|
+
idx = 0
|
15
|
+
counter.increment(elem)
|
16
16
|
end
|
17
|
-
|
17
|
+
idx
|
18
18
|
end
|
19
19
|
|
20
20
|
def sequential_figure_names(clause)
|
21
21
|
c = Counter.new
|
22
22
|
j = 0
|
23
|
-
clause.xpath(ns(".//figure | .//sourcecode[not(ancestor::example)]"))
|
24
|
-
each do |t|
|
23
|
+
clause.xpath(ns(".//figure | .//sourcecode[not(ancestor::example)]"))
|
24
|
+
.each do |t|
|
25
25
|
j = subfigure_increment(j, c, t)
|
26
26
|
label = c.print + (j.zero? ? "" : "-#{j}")
|
27
27
|
next if t["id"].nil? || t["id"].empty?
|
28
|
-
|
29
|
-
|
28
|
+
|
29
|
+
@anchors[t["id"]] = anchor_struct(
|
30
|
+
label, nil, @labels["figure"], "figure", t["unnumbered"]
|
31
|
+
)
|
30
32
|
end
|
31
33
|
end
|
32
34
|
|
@@ -34,8 +36,11 @@ module IsoDoc::XrefGen
|
|
34
36
|
c = Counter.new
|
35
37
|
clause.xpath(ns(".//table")).each do |t|
|
36
38
|
next if t["id"].nil? || t["id"].empty?
|
37
|
-
|
38
|
-
|
39
|
+
|
40
|
+
@anchors[t["id"]] = anchor_struct(
|
41
|
+
c.increment(t).print, nil,
|
42
|
+
@labels["table"], "table", t["unnumbered"]
|
43
|
+
)
|
39
44
|
end
|
40
45
|
end
|
41
46
|
|
@@ -43,10 +48,12 @@ module IsoDoc::XrefGen
|
|
43
48
|
c = Counter.new
|
44
49
|
clause.xpath(ns(".//formula")).each do |t|
|
45
50
|
next if t["id"].nil? || t["id"].empty?
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
51
|
+
|
52
|
+
@anchors[t["id"]] = anchor_struct(
|
53
|
+
c.increment(t).print, t,
|
54
|
+
t["inequality"] ? @labels["inequality"] : @labels["formula"],
|
55
|
+
"formula", t["unnumbered"]
|
56
|
+
)
|
50
57
|
end
|
51
58
|
end
|
52
59
|
|
@@ -57,22 +64,27 @@ module IsoDoc::XrefGen
|
|
57
64
|
c = Counter.new
|
58
65
|
clause.xpath(ns(".//#{klass}#{FIRST_LVL_REQ}")).each do |t|
|
59
66
|
next if t["id"].nil? || t["id"].empty?
|
67
|
+
|
60
68
|
id = c.increment(t).print
|
61
69
|
@anchors[t["id"]] = anchor_struct(id, t, label, klass, t["unnumbered"])
|
62
70
|
sequential_permission_names2(t, id)
|
63
71
|
end
|
64
72
|
end
|
65
73
|
|
66
|
-
def sequential_permission_names2(
|
67
|
-
sequential_permission_names1(
|
68
|
-
|
69
|
-
sequential_permission_names1(
|
74
|
+
def sequential_permission_names2(elem, ident)
|
75
|
+
sequential_permission_names1(elem, ident, "permission",
|
76
|
+
@labels["permission"])
|
77
|
+
sequential_permission_names1(elem, ident, "requirement",
|
78
|
+
@labels["requirement"])
|
79
|
+
sequential_permission_names1(elem, ident, "recommendation",
|
80
|
+
@labels["recommendation"])
|
70
81
|
end
|
71
82
|
|
72
83
|
def sequential_permission_names1(block, lbl, klass, label)
|
73
84
|
c = Counter.new
|
74
85
|
block.xpath(ns("./#{klass}")).each do |t|
|
75
86
|
next if t["id"].nil? || t["id"].empty?
|
87
|
+
|
76
88
|
id = "#{lbl}#{hierfigsep}#{c.increment(t).print}"
|
77
89
|
@anchors[t["id"]] = anchor_struct(id, t, label, klass, t["unnumbered"])
|
78
90
|
sequential_permission_names2(t, id)
|
@@ -85,20 +97,22 @@ module IsoDoc::XrefGen
|
|
85
97
|
sequential_formula_names(clause)
|
86
98
|
sequential_permission_names(clause, "permission", @labels["permission"])
|
87
99
|
sequential_permission_names(clause, "requirement", @labels["requirement"])
|
88
|
-
sequential_permission_names(clause, "recommendation",
|
100
|
+
sequential_permission_names(clause, "recommendation",
|
101
|
+
@labels["recommendation"])
|
89
102
|
end
|
90
103
|
|
91
104
|
def hierarchical_figure_names(clause, num)
|
92
105
|
c = Counter.new
|
93
106
|
j = 0
|
94
|
-
clause.xpath(ns(".//figure | .//sourcecode[not(ancestor::example)]"))
|
95
|
-
each do |t|
|
107
|
+
clause.xpath(ns(".//figure | .//sourcecode[not(ancestor::example)]"))
|
108
|
+
.each do |t|
|
96
109
|
j = subfigure_increment(j, c, t)
|
97
110
|
label = "#{num}#{hiersep}#{c.print}" +
|
98
111
|
(j.zero? ? "" : "#{hierfigsep}#{j}")
|
99
112
|
next if t["id"].nil? || t["id"].empty?
|
100
|
-
|
101
|
-
|
113
|
+
|
114
|
+
@anchors[t["id"]] = anchor_struct(label, nil, @labels["figure"],
|
115
|
+
"figure", t["unnumbered"])
|
102
116
|
end
|
103
117
|
end
|
104
118
|
|
@@ -106,6 +120,7 @@ module IsoDoc::XrefGen
|
|
106
120
|
c = Counter.new
|
107
121
|
clause.xpath(ns(".//table")).each do |t|
|
108
122
|
next if t["id"].nil? || t["id"].empty?
|
123
|
+
|
109
124
|
@anchors[t["id"]] =
|
110
125
|
anchor_struct("#{num}#{hiersep}#{c.increment(t).print}",
|
111
126
|
nil, @labels["table"], "table", t["unnumbered"])
|
@@ -116,7 +131,8 @@ module IsoDoc::XrefGen
|
|
116
131
|
hierarchical_table_names(clause, num)
|
117
132
|
hierarchical_figure_names(clause, num)
|
118
133
|
hierarchical_formula_names(clause, num)
|
119
|
-
hierarchical_permission_names(clause, num, "permission",
|
134
|
+
hierarchical_permission_names(clause, num, "permission",
|
135
|
+
@labels["permission"])
|
120
136
|
hierarchical_permission_names(clause, num, "requirement",
|
121
137
|
@labels["requirement"])
|
122
138
|
hierarchical_permission_names(clause, num, "recommendation",
|
@@ -127,10 +143,12 @@ module IsoDoc::XrefGen
|
|
127
143
|
c = Counter.new
|
128
144
|
clause.xpath(ns(".//formula")).each do |t|
|
129
145
|
next if t["id"].nil? || t["id"].empty?
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
146
|
+
|
147
|
+
@anchors[t["id"]] = anchor_struct(
|
148
|
+
"#{num}#{hiersep}#{c.increment(t).print}", nil,
|
149
|
+
t["inequality"] ? @labels["inequality"] : @labels["formula"],
|
150
|
+
"formula", t["unnumbered"]
|
151
|
+
)
|
134
152
|
end
|
135
153
|
end
|
136
154
|
|
@@ -138,24 +156,31 @@ module IsoDoc::XrefGen
|
|
138
156
|
c = Counter.new
|
139
157
|
clause.xpath(ns(".//#{klass}#{FIRST_LVL_REQ}")).each do |t|
|
140
158
|
next if t["id"].nil? || t["id"].empty?
|
159
|
+
|
141
160
|
id = "#{num}#{hiersep}#{c.increment(t).print}"
|
142
|
-
@anchors[t["id"]] =
|
161
|
+
@anchors[t["id"]] =
|
162
|
+
anchor_struct(id, nil, label, klass, t["unnumbered"])
|
143
163
|
hierarchical_permission_names2(t, id)
|
144
164
|
end
|
145
165
|
end
|
146
166
|
|
147
|
-
def hierarchical_permission_names2(
|
148
|
-
hierarchical_permission_names1(
|
149
|
-
|
150
|
-
hierarchical_permission_names1(
|
167
|
+
def hierarchical_permission_names2(elem, ident)
|
168
|
+
hierarchical_permission_names1(elem, ident, "permission",
|
169
|
+
@labels["permission"])
|
170
|
+
hierarchical_permission_names1(elem, ident, "requirement",
|
171
|
+
@labels["requirement"])
|
172
|
+
hierarchical_permission_names1(elem, ident, "recommendation",
|
173
|
+
@labels["recommendation"])
|
151
174
|
end
|
152
175
|
|
153
176
|
def hierarchical_permission_names1(block, lbl, klass, label)
|
154
177
|
c = Counter.new
|
155
178
|
block.xpath(ns("./#{klass}")).each do |t|
|
156
179
|
next if t["id"].nil? || t["id"].empty?
|
180
|
+
|
157
181
|
id = "#{lbl}#{hierfigsep}#{c.increment(t).print}"
|
158
|
-
@anchors[t["id"]] =
|
182
|
+
@anchors[t["id"]] =
|
183
|
+
anchor_struct(id, nil, label, klass, t["unnumbered"])
|
159
184
|
hierarchical_permission_names2(t, id)
|
160
185
|
end
|
161
186
|
end
|
@@ -14,25 +14,24 @@ module IsoDoc::XrefGen
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
def initial_anchor_names(
|
18
|
-
|
17
|
+
def initial_anchor_names(doc)
|
18
|
+
doc.xpath(ns("//preface/*")).each { |c| c.element? and preface_names(c) }
|
19
19
|
# potentially overridden in middle_section_asset_names()
|
20
|
-
sequential_asset_names(
|
20
|
+
sequential_asset_names(doc.xpath(ns("//preface/*")))
|
21
21
|
n = Counter.new
|
22
|
-
n = section_names(
|
23
|
-
n = section_names(
|
24
|
-
n = section_names(
|
22
|
+
n = section_names(doc.at(ns("//clause[@type = 'scope']")), n, 1)
|
23
|
+
n = section_names(doc.at(ns(@klass.norm_ref_xpath)), n, 1)
|
24
|
+
n = section_names(doc.at(ns("//sections/terms | "\
|
25
25
|
"//sections/clause[descendant::terms]")), n, 1)
|
26
|
-
n = section_names(
|
27
|
-
clause_names(
|
28
|
-
middle_section_asset_names(
|
29
|
-
termnote_anchor_names(
|
30
|
-
termexample_anchor_names(
|
26
|
+
n = section_names(doc.at(ns("//sections/definitions")), n, 1)
|
27
|
+
clause_names(doc, n)
|
28
|
+
middle_section_asset_names(doc)
|
29
|
+
termnote_anchor_names(doc)
|
30
|
+
termexample_anchor_names(doc)
|
31
31
|
end
|
32
32
|
|
33
|
-
def preface_clause_name(
|
34
|
-
|
35
|
-
ret
|
33
|
+
def preface_clause_name(clause)
|
34
|
+
clause.at(ns("./title"))&.text || clause.name.capitalize
|
36
35
|
end
|
37
36
|
|
38
37
|
SUBCLAUSES =
|
@@ -41,12 +40,13 @@ module IsoDoc::XrefGen
|
|
41
40
|
# in StanDoc, prefaces have no numbering; they are referenced only by title
|
42
41
|
def preface_names(clause)
|
43
42
|
return if clause.nil?
|
43
|
+
|
44
44
|
@anchors[clause["id"]] =
|
45
45
|
{ label: nil, level: 1, xref: preface_clause_name(clause),
|
46
46
|
type: "clause" }
|
47
47
|
clause.xpath(ns(SUBCLAUSES)).each_with_index do |c, i|
|
48
48
|
preface_names1(c, c.at(ns("./title"))&.text,
|
49
|
-
"#{preface_clause_name(clause)}, #{i+1}", 2)
|
49
|
+
"#{preface_clause_name(clause)}, #{i + 1}", 2)
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -55,31 +55,32 @@ module IsoDoc::XrefGen
|
|
55
55
|
@anchors[clause["id"]] =
|
56
56
|
{ label: nil, level: level, xref: label, type: "clause" }
|
57
57
|
clause.xpath(ns(SUBCLAUSES)).each_with_index do |c, i|
|
58
|
-
preface_names1(c, c.at(ns("./title"))&.text, "#{label} #{i+1}",
|
58
|
+
preface_names1(c, c.at(ns("./title"))&.text, "#{label} #{i + 1}",
|
59
59
|
level + 1)
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
|
-
def middle_section_asset_names(
|
63
|
+
def middle_section_asset_names(doc)
|
64
64
|
middle_sections = "//clause[@type = 'scope'] | "\
|
65
65
|
"#{@klass.norm_ref_xpath} | "\
|
66
66
|
"//sections/terms | //preface/* | "\
|
67
67
|
"//sections/definitions | //clause[parent::sections]"
|
68
|
-
sequential_asset_names(
|
68
|
+
sequential_asset_names(doc.xpath(ns(middle_sections)))
|
69
69
|
end
|
70
70
|
|
71
|
-
def clause_names(docxml,
|
72
|
-
docxml.xpath(ns(@klass.middle_clause(docxml))).each_with_index do |c,
|
73
|
-
section_names(c,
|
71
|
+
def clause_names(docxml, num)
|
72
|
+
docxml.xpath(ns(@klass.middle_clause(docxml))).each_with_index do |c, _i|
|
73
|
+
section_names(c, num, 1)
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
77
|
def section_names(clause, num, lvl)
|
78
78
|
return num if clause.nil?
|
79
|
+
|
79
80
|
num.increment(clause)
|
80
81
|
@anchors[clause["id"]] =
|
81
|
-
{ label: num.print, xref: l10n("#{@labels[
|
82
|
-
type: "clause" }
|
82
|
+
{ label: num.print, xref: l10n("#{@labels['clause']} #{num.print}"),
|
83
|
+
level: lvl, type: "clause" }
|
83
84
|
i = Counter.new
|
84
85
|
clause.xpath(ns(SUBCLAUSES)).each do |c|
|
85
86
|
i.increment(c)
|
@@ -90,7 +91,7 @@ module IsoDoc::XrefGen
|
|
90
91
|
|
91
92
|
def section_names1(clause, num, level)
|
92
93
|
@anchors[clause["id"]] =
|
93
|
-
{ label: num, level: level, xref: l10n("#{@labels[
|
94
|
+
{ label: num, level: level, xref: l10n("#{@labels['clause']} #{num}"),
|
94
95
|
type: "clause" }
|
95
96
|
i = Counter.new
|
96
97
|
clause.xpath(ns(SUBCLAUSES)).each do |c|
|
@@ -100,26 +101,27 @@ module IsoDoc::XrefGen
|
|
100
101
|
end
|
101
102
|
|
102
103
|
def annex_name_lbl(clause, num)
|
103
|
-
obl = l10n("(#{@labels[
|
104
|
-
|
105
|
-
|
104
|
+
obl = l10n("(#{@labels['inform_annex']})")
|
105
|
+
clause["obligation"] == "normative" and
|
106
|
+
obl = l10n("(#{@labels['norm_annex']})")
|
107
|
+
l10n("<strong>#{@labels['annex']} #{num}</strong><br/>#{obl}")
|
106
108
|
end
|
107
109
|
|
108
110
|
def single_annex_special_section(clause)
|
109
111
|
a = clause.xpath(ns("./references | ./terms | ./definitions"))
|
110
112
|
a.size == 1 or return nil
|
111
113
|
clause.xpath(ns("./clause | ./p | ./table | ./ol | ./ul | ./dl | "\
|
112
|
-
"./note | ./admonition | ./figure")).
|
113
|
-
|
114
|
+
"./note | ./admonition | ./figure")).empty? or
|
115
|
+
return nil
|
114
116
|
a[0]
|
115
117
|
end
|
116
118
|
|
117
119
|
def annex_names(clause, num)
|
118
120
|
@anchors[clause["id"]] = { label: annex_name_lbl(clause, num),
|
119
121
|
type: "clause", value: num.to_s,
|
120
|
-
xref: "#{@labels[
|
122
|
+
xref: "#{@labels['annex']} #{num}", level: 1 }
|
121
123
|
if a = single_annex_special_section(clause)
|
122
|
-
annex_names1(a,
|
124
|
+
annex_names1(a, num.to_s, 1)
|
123
125
|
else
|
124
126
|
i = Counter.new
|
125
127
|
clause.xpath(ns(SUBCLAUSES)).each do |c|
|
@@ -131,10 +133,10 @@ module IsoDoc::XrefGen
|
|
131
133
|
end
|
132
134
|
|
133
135
|
def annex_names1(clause, num, level)
|
134
|
-
@anchors[clause["id"]] = { label: num, xref: "#{@labels[
|
136
|
+
@anchors[clause["id"]] = { label: num, xref: "#{@labels['annex']} #{num}",
|
135
137
|
level: level, type: "clause" }
|
136
138
|
i = Counter.new
|
137
|
-
clause.xpath(ns(SUBCLAUSES)).
|
139
|
+
clause.xpath(ns(SUBCLAUSES)).each do |c|
|
138
140
|
i.increment(c)
|
139
141
|
annex_names1(c, "#{num}.#{i.print}", level + 1)
|
140
142
|
end
|
@@ -147,10 +149,10 @@ module IsoDoc::XrefGen
|
|
147
149
|
"xmlns:name = 'International Electrotechnical Commission']".freeze
|
148
150
|
|
149
151
|
def reference_names(ref)
|
150
|
-
isopub = ref.at(ns(ISO_PUBLISHER_XPATH))
|
152
|
+
# isopub = ref.at(ns(ISO_PUBLISHER_XPATH))
|
151
153
|
ids = @klass.bibitem_ref_code(ref)
|
152
154
|
identifiers = @klass.render_identifier(ids)
|
153
|
-
date = ref.at(ns("./date[@type = 'published']"))
|
155
|
+
# date = ref.at(ns("./date[@type = 'published']"))
|
154
156
|
reference = @klass.docid_l10n(identifiers[0] || identifiers[1])
|
155
157
|
@anchors[ref["id"]] = { xref: reference }
|
156
158
|
end
|