isodoc 2.1.5 → 2.2.2.2
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/isodoc.gemspec +5 -5
- data/lib/isodoc/class_utils.rb +1 -4
- data/lib/isodoc/convert.rb +56 -42
- data/lib/isodoc/function/inline.rb +12 -7
- data/lib/isodoc/function/references.rb +1 -1
- data/lib/isodoc/function/reqt.rb +17 -88
- data/lib/isodoc/function/section_titles.rb +3 -3
- data/lib/isodoc/function/table.rb +1 -1
- data/lib/isodoc/function/to_word_html.rb +7 -6
- data/lib/isodoc/function/utils.rb +4 -0
- data/lib/isodoc/init.rb +20 -0
- data/lib/isodoc/presentation_function/block.rb +23 -6
- data/lib/isodoc/presentation_function/image.rb +68 -19
- data/lib/isodoc/presentation_function/refs.rb +102 -0
- data/lib/isodoc/presentation_function/section.rb +1 -80
- data/lib/isodoc/presentation_function/terms.rb +9 -13
- data/lib/isodoc/presentation_xml_convert.rb +1 -0
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/word_function/postprocess.rb +1 -1
- data/lib/isodoc/xref/xref_counter.rb +12 -0
- data/lib/isodoc/xref/xref_gen.rb +17 -5
- data/lib/isodoc/xref/xref_gen_seq.rb +106 -81
- data/lib/isodoc/xref.rb +6 -0
- data/lib/isodoc-yaml/i18n-ar.yaml +0 -2
- data/lib/isodoc-yaml/i18n-de.yaml +0 -2
- data/lib/isodoc-yaml/i18n-en.yaml +9 -2
- data/lib/isodoc-yaml/i18n-es.yaml +0 -2
- data/lib/isodoc-yaml/i18n-fr.yaml +0 -2
- data/lib/isodoc-yaml/i18n-ru.yaml +0 -2
- data/lib/isodoc-yaml/i18n-zh-Hans.yaml +0 -2
- data/lib/relaton/render/general.rb +1 -18
- metadata +34 -26
- data/lib/isodoc/base_style/all.css +0 -227
- data/lib/isodoc/base_style/blocks.css +0 -0
- data/lib/isodoc/base_style/coverpage.css +0 -0
- data/lib/isodoc/base_style/defaults.css +0 -0
- data/lib/isodoc/base_style/metanorma_word.css +0 -47
- data/lib/isodoc/base_style/nav.css +0 -0
- data/lib/isodoc/base_style/reset.css +0 -125
- data/lib/isodoc/base_style/typography.css +0 -0
@@ -11,7 +11,14 @@ module IsoDoc
|
|
11
11
|
else s.remove
|
12
12
|
end
|
13
13
|
end
|
14
|
-
docxml
|
14
|
+
imageconvert(docxml)
|
15
|
+
end
|
16
|
+
|
17
|
+
def imageconvert(docxml)
|
18
|
+
docxml.xpath(ns("//image")).each do |f|
|
19
|
+
eps2svg(f)
|
20
|
+
svg_emf_double(f)
|
21
|
+
end
|
15
22
|
end
|
16
23
|
|
17
24
|
def svg_extract(elem)
|
@@ -36,6 +43,16 @@ module IsoDoc
|
|
36
43
|
l10n("#{lower2cap @i18n.figure} #{lbl}"), "name")
|
37
44
|
end
|
38
45
|
|
46
|
+
def eps2svg(img)
|
47
|
+
return unless eps?(img["mimetype"])
|
48
|
+
|
49
|
+
img["mimetype"] = "image/svg+xml"
|
50
|
+
if src = eps_to_svg(img)
|
51
|
+
img["src"] = src
|
52
|
+
img.children = ""
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
39
56
|
def svg_emf_double(img)
|
40
57
|
if emf?(img["mimetype"])
|
41
58
|
img = emf_encode(img)
|
@@ -46,40 +63,59 @@ module IsoDoc
|
|
46
63
|
end
|
47
64
|
|
48
65
|
def emf_encode(img)
|
49
|
-
img
|
50
|
-
unless %r{^data:image}.match?(img["src"])
|
51
|
-
img["src"] = Metanorma::Utils::datauri(img["src"])
|
52
|
-
end
|
66
|
+
svg_prep(img)
|
53
67
|
img.children = "<emf src='#{img['src']}'/>"
|
54
68
|
img["src"] = ""
|
55
69
|
img
|
56
70
|
end
|
57
71
|
|
72
|
+
def svg_prep(img)
|
73
|
+
img["mimetype"] = "image/svg+xml"
|
74
|
+
%r{^data:image}.match?(img["src"]) or
|
75
|
+
img["src"] = Metanorma::Utils::datauri(img["src"])
|
76
|
+
end
|
77
|
+
|
58
78
|
def emf_to_svg(img)
|
59
79
|
emf = Metanorma::Utils::save_dataimage(img.at(ns("./emf/@src")).text)
|
60
80
|
Emf2svg.from_file(emf).sub(/<\?[^>]+>/, "")
|
61
81
|
end
|
62
82
|
|
83
|
+
def eps_to_svg(node)
|
84
|
+
uri = eps_to_svg_uri(node)
|
85
|
+
ret = imgfile_suffix(uri, "svg")
|
86
|
+
File.exist?(ret) and return ret
|
87
|
+
inkscape_convert(uri, ret, "--export-plain-svg")
|
88
|
+
end
|
89
|
+
|
63
90
|
def svg_to_emf(node)
|
64
91
|
uri = svg_to_emf_uri(node)
|
65
|
-
ret =
|
92
|
+
ret = imgfile_suffix(uri, "emf")
|
66
93
|
File.exist?(ret) and return ret
|
94
|
+
inkscape_convert(uri, ret, '--export-type="emf"')
|
95
|
+
end
|
96
|
+
|
97
|
+
def inkscape_convert(uri, file, option)
|
67
98
|
exe = inkscape_installed? or raise "Inkscape missing in PATH, unable" \
|
68
|
-
"to convert
|
99
|
+
"to convert image #{uri}. Aborting."
|
69
100
|
uri = Metanorma::Utils::external_path uri
|
70
101
|
exe = Metanorma::Utils::external_path exe
|
71
|
-
system(%(#{exe}
|
72
|
-
return Metanorma::Utils::datauri(
|
102
|
+
system(%(#{exe} #{option} #{uri})) and
|
103
|
+
return Metanorma::Utils::datauri(file)
|
73
104
|
|
74
|
-
raise %(Fail on #{exe}
|
105
|
+
raise %(Fail on #{exe} #{option} #{uri})
|
75
106
|
end
|
76
107
|
|
77
108
|
def svg_to_emf_uri(node)
|
78
|
-
uri =
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
109
|
+
uri = svg_to_emf_uri_convert(node)
|
110
|
+
cache_dataimage(uri)
|
111
|
+
end
|
112
|
+
|
113
|
+
def eps_to_svg_uri(node)
|
114
|
+
uri = eps_to_svg_uri_convert(node)
|
115
|
+
cache_dataimage(uri)
|
116
|
+
end
|
117
|
+
|
118
|
+
def cache_dataimage(uri)
|
83
119
|
if %r{^data:}.match?(uri)
|
84
120
|
uri = save_dataimage(uri)
|
85
121
|
@tempfile_cache << uri
|
@@ -87,12 +123,25 @@ module IsoDoc
|
|
87
123
|
uri
|
88
124
|
end
|
89
125
|
|
90
|
-
def
|
91
|
-
|
126
|
+
def svg_to_emf_uri_convert(node)
|
127
|
+
if node&.elements&.first&.name == "svg"
|
128
|
+
a = Base64.strict_encode64(node.children.to_xml)
|
129
|
+
"data:image/svg+xml;base64,#{a}"
|
130
|
+
else node["src"]
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def eps_to_svg_uri_convert(node)
|
135
|
+
if node.text.strip.empty?
|
136
|
+
node["src"]
|
137
|
+
else
|
138
|
+
a = Base64.strict_encode64(node.children.to_xml)
|
139
|
+
"data:application/postscript;base64,#{a}"
|
140
|
+
end
|
92
141
|
end
|
93
142
|
|
94
|
-
def
|
95
|
-
"#{File.join(File.dirname(uri), File.basename(uri, '.*'))}
|
143
|
+
def imgfile_suffix(uri, suffix)
|
144
|
+
"#{File.join(File.dirname(uri), File.basename(uri, '.*'))}.#{suffix}"
|
96
145
|
end
|
97
146
|
|
98
147
|
def inkscape_installed?
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require_relative "../../relaton/render/general"
|
2
|
+
|
3
|
+
module IsoDoc
|
4
|
+
class PresentationXMLConvert < ::IsoDoc::Convert
|
5
|
+
def references(docxml)
|
6
|
+
bibliography_bibitem_number(docxml)
|
7
|
+
renderings = references_render(docxml)
|
8
|
+
docxml.xpath(ns("//references/bibitem")).each do |x|
|
9
|
+
bibitem(x, renderings)
|
10
|
+
end
|
11
|
+
docxml.xpath(ns("//references[bibitem/@hidden = 'true']")).each do |x|
|
12
|
+
x.at(ns("./bibitem[not(@hidden = 'true')]")) and next
|
13
|
+
x["hidden"] = "true"
|
14
|
+
end
|
15
|
+
@xrefs.parse_inclusions(refs: true).parse(docxml)
|
16
|
+
end
|
17
|
+
|
18
|
+
def references_render(docxml)
|
19
|
+
d = docxml.clone
|
20
|
+
d.remove_namespaces!
|
21
|
+
refs = d.xpath("//references/bibitem").each_with_object([]) do |b, m|
|
22
|
+
prep_for_rendering(b)
|
23
|
+
m << b.to_xml
|
24
|
+
end.join
|
25
|
+
bibrenderer.render_all("<references>#{refs}</references>",
|
26
|
+
type: citestyle)
|
27
|
+
end
|
28
|
+
|
29
|
+
def prep_for_rendering(bib)
|
30
|
+
bib["suppress_identifier"] == true and
|
31
|
+
bib.xpath(ns("./docidentifier")).each(&:remove)
|
32
|
+
bib["type"] ||= "standard"
|
33
|
+
end
|
34
|
+
|
35
|
+
def bibitem(xml, renderings)
|
36
|
+
@xrefs.klass.implicit_reference(xml) and xml["hidden"] = "true"
|
37
|
+
bibrender(xml, renderings)
|
38
|
+
end
|
39
|
+
|
40
|
+
def bibrender(xml, renderings)
|
41
|
+
if f = xml.at(ns("./formattedref"))
|
42
|
+
bibrender_formattedref(f, xml)
|
43
|
+
else bibrender_relaton(xml, renderings)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def bibrender_formattedref(formattedref, xml)
|
48
|
+
code = render_identifier(bibitem_ref_code(xml))
|
49
|
+
(code[:sdo] && xml["suppress_identifier"] != "true") and
|
50
|
+
formattedref << " [#{code[:sdo]}] "
|
51
|
+
end
|
52
|
+
|
53
|
+
def bibrender_relaton(xml, renderings)
|
54
|
+
f = renderings[xml["id"]][:formattedref]
|
55
|
+
f &&= "<formattedref>#{f}</formattedref>"
|
56
|
+
xml.children =
|
57
|
+
"#{f}#{xml.xpath(ns('./docidentifier | ./uri | ./note')).to_xml}"
|
58
|
+
end
|
59
|
+
|
60
|
+
def bibrenderer
|
61
|
+
::Relaton::Render::IsoDoc::General.new(language: @lang)
|
62
|
+
end
|
63
|
+
|
64
|
+
def citestyle
|
65
|
+
nil
|
66
|
+
end
|
67
|
+
|
68
|
+
def bibliography_bibitem_number_skip(bibitem)
|
69
|
+
@xrefs.klass.implicit_reference(bibitem) ||
|
70
|
+
bibitem.at(ns(".//docidentifier[@type = 'metanorma']")) ||
|
71
|
+
bibitem.at(ns(".//docidentifier[@type = 'metanorma-ordinal']")) ||
|
72
|
+
bibitem["hidden"] == "true" || bibitem.parent["hidden"] == "true"
|
73
|
+
end
|
74
|
+
|
75
|
+
def bibliography_bibitem_number(docxml)
|
76
|
+
i = 0
|
77
|
+
docxml.xpath(ns("//references[@normative = 'false']/bibitem")).each do |b|
|
78
|
+
i = bibliography_bibitem_number1(b, i)
|
79
|
+
end
|
80
|
+
@xrefs.references docxml
|
81
|
+
end
|
82
|
+
|
83
|
+
def bibliography_bibitem_number1(bibitem, idx)
|
84
|
+
ins = bibitem.at(ns(".//docidentifier")).previous_element
|
85
|
+
mn = bibitem.at(ns(".//docidentifier[@type = 'metanorma']")) and
|
86
|
+
/^\[?\d+\]?$/.match?(mn.text) and
|
87
|
+
mn.remove # ignore numbers already inserted
|
88
|
+
unless bibliography_bibitem_number_skip(bibitem)
|
89
|
+
idx += 1
|
90
|
+
ins.next =
|
91
|
+
"<docidentifier type='metanorma-ordinal'>[#{idx}]</docidentifier>"
|
92
|
+
end
|
93
|
+
idx
|
94
|
+
end
|
95
|
+
|
96
|
+
def docid_prefixes(docxml)
|
97
|
+
docxml.xpath(ns("//references/bibitem/docidentifier")).each do |i|
|
98
|
+
i.children = @xrefs.klass.docid_prefix(i["type"], i.text)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require_relative "
|
1
|
+
require_relative "refs"
|
2
2
|
|
3
3
|
module IsoDoc
|
4
4
|
class PresentationXMLConvert < ::IsoDoc::Convert
|
@@ -76,85 +76,6 @@ module IsoDoc
|
|
76
76
|
prefix_name(elem, "", "#{lbl}#{clausedelim}", "name")
|
77
77
|
end
|
78
78
|
|
79
|
-
def references(docxml)
|
80
|
-
bibliography_bibitem_number(docxml)
|
81
|
-
docxml.xpath(ns("//references/bibitem")).each do |x|
|
82
|
-
bibitem(x)
|
83
|
-
end
|
84
|
-
docxml.xpath(ns("//references[bibitem/@hidden = 'true']")).each do |x|
|
85
|
-
x.at(ns("./bibitem[not(@hidden = 'true')]")) and next
|
86
|
-
x["hidden"] = "true"
|
87
|
-
end
|
88
|
-
@xrefs.parse_inclusions(refs: true).parse(docxml)
|
89
|
-
end
|
90
|
-
|
91
|
-
def bibitem(xml)
|
92
|
-
@xrefs.klass.implicit_reference(xml) and
|
93
|
-
xml["hidden"] = "true"
|
94
|
-
bibrender(xml)
|
95
|
-
end
|
96
|
-
|
97
|
-
def bibrender(xml)
|
98
|
-
if f = xml.at(ns("./formattedref"))
|
99
|
-
bibrender_formattedref(f, xml)
|
100
|
-
else bibrender_relaton(xml)
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
def bibrender_formattedref(formattedref, xml)
|
105
|
-
code = render_identifier(bibitem_ref_code(xml))
|
106
|
-
(code[:sdo] && xml["suppress_identifier"] != "true") and
|
107
|
-
formattedref << " [#{code[:sdo]}] "
|
108
|
-
end
|
109
|
-
|
110
|
-
def bibrender_relaton(xml)
|
111
|
-
bib = xml.dup
|
112
|
-
bib["suppress_identifier"] == true and
|
113
|
-
bib.xpath(ns("./docidentifier")).each(&:remove)
|
114
|
-
xml.children =
|
115
|
-
"#{bibrenderer.render(bib.to_xml)}"\
|
116
|
-
"#{xml.xpath(ns('./docidentifier | ./uri | ./note')).to_xml}"
|
117
|
-
end
|
118
|
-
|
119
|
-
def bibrenderer
|
120
|
-
::Relaton::Render::IsoDoc::General.new(language: @lang)
|
121
|
-
end
|
122
|
-
|
123
|
-
def bibliography_bibitem_number_skip(bibitem)
|
124
|
-
@xrefs.klass.implicit_reference(bibitem) ||
|
125
|
-
bibitem.at(ns(".//docidentifier[@type = 'metanorma']")) ||
|
126
|
-
bibitem.at(ns(".//docidentifier[@type = 'metanorma-ordinal']")) ||
|
127
|
-
bibitem["hidden"] == "true" || bibitem.parent["hidden"] == "true"
|
128
|
-
end
|
129
|
-
|
130
|
-
def bibliography_bibitem_number(docxml)
|
131
|
-
i = 0
|
132
|
-
docxml.xpath(ns("//references[@normative = 'false']/bibitem")).each do |b|
|
133
|
-
i = bibliography_bibitem_number1(b, i)
|
134
|
-
end
|
135
|
-
@xrefs.references docxml
|
136
|
-
end
|
137
|
-
|
138
|
-
def bibliography_bibitem_number1(bibitem, idx)
|
139
|
-
if mn = bibitem.at(ns(".//docidentifier[@type = 'metanorma']"))
|
140
|
-
/^\[?\d\]?$/.match?(mn&.text) and
|
141
|
-
idx = mn.text.sub(/^\[/, "").sub(/\]$/, "").to_i
|
142
|
-
end
|
143
|
-
unless bibliography_bibitem_number_skip(bibitem)
|
144
|
-
|
145
|
-
idx += 1
|
146
|
-
bibitem.at(ns(".//docidentifier")).previous =
|
147
|
-
"<docidentifier type='metanorma-ordinal'>[#{idx}]</docidentifier>"
|
148
|
-
end
|
149
|
-
idx
|
150
|
-
end
|
151
|
-
|
152
|
-
def docid_prefixes(docxml)
|
153
|
-
docxml.xpath(ns("//references/bibitem/docidentifier")).each do |i|
|
154
|
-
i.children = @xrefs.klass.docid_prefix(i["type"], i.text)
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
79
|
def index(docxml)
|
159
80
|
docxml.xpath(ns("//index | //index-xref | //indexsect")).each(&:remove)
|
160
81
|
end
|
@@ -28,10 +28,9 @@ module IsoDoc
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def concept1_nonital(node, opts)
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
end
|
31
|
+
opts[:ital] == "false" or return
|
32
|
+
r = node.at(ns(".//renderterm"))
|
33
|
+
r&.replace(r&.children)
|
35
34
|
end
|
36
35
|
|
37
36
|
def concept_render_init(node, defaults)
|
@@ -43,11 +42,11 @@ module IsoDoc
|
|
43
42
|
end
|
44
43
|
|
45
44
|
def concept1_linkmention(ref, renderterm, opts)
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
45
|
+
return unless opts[:linkmention] == "true" && !renderterm.nil? && !ref.nil?
|
46
|
+
|
47
|
+
ref2 = ref.clone
|
48
|
+
r2 = renderterm.clone
|
49
|
+
renderterm.replace(ref2).children = r2
|
51
50
|
end
|
52
51
|
|
53
52
|
def concept1_ref(_node, ref, opts)
|
@@ -92,9 +91,7 @@ module IsoDoc
|
|
92
91
|
end
|
93
92
|
|
94
93
|
def designation(docxml)
|
95
|
-
docxml.xpath(ns("//term")).each
|
96
|
-
merge_second_preferred(t)
|
97
|
-
end
|
94
|
+
docxml.xpath(ns("//term")).each { |t| merge_second_preferred(t) }
|
98
95
|
docxml.xpath(ns("//preferred | //admitted | //deprecates")).each do |p|
|
99
96
|
designation1(p)
|
100
97
|
end
|
@@ -194,7 +191,6 @@ module IsoDoc
|
|
194
191
|
end
|
195
192
|
end
|
196
193
|
|
197
|
-
# introduce name element
|
198
194
|
def termnote1(elem)
|
199
195
|
lbl = l10n(@xrefs.anchor(elem["id"], :label) || "???")
|
200
196
|
prefix_name(elem, "", lower2cap(lbl), "name")
|
data/lib/isodoc/version.rb
CHANGED
@@ -98,7 +98,7 @@ module IsoDoc
|
|
98
98
|
docxml.xpath("//p[@class='Biblio']//span[@style='mso-tab-count:1']")
|
99
99
|
.each do |s|
|
100
100
|
s.next.text? or next
|
101
|
-
s.next.replace(s.next.text.sub(/^\s+/, ""))
|
101
|
+
s.next.replace(@c.encode(s.next.text.sub(/^\s+/, ""), :hexadecimal))
|
102
102
|
end
|
103
103
|
end
|
104
104
|
|
@@ -2,6 +2,18 @@ require "roman-numerals"
|
|
2
2
|
|
3
3
|
module IsoDoc
|
4
4
|
module XrefGen
|
5
|
+
class ReqCounter
|
6
|
+
# one counter for each requirements label
|
7
|
+
def initialize
|
8
|
+
@counters = {}
|
9
|
+
end
|
10
|
+
|
11
|
+
def increment(label, node)
|
12
|
+
@counters[label] ||= Counter.new
|
13
|
+
@counters[label].increment(node)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
5
17
|
class Counter
|
6
18
|
def initialize(num = 0, opts = { numerals: :arabic })
|
7
19
|
@unnumbered = false
|
data/lib/isodoc/xref/xref_gen.rb
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
require_relative "xref_gen_seq"
|
2
2
|
|
3
|
+
module Enumerable
|
4
|
+
def noblank
|
5
|
+
reject do |n|
|
6
|
+
n["id"].nil? || n["id"].empty?
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
3
11
|
module IsoDoc
|
4
12
|
module XrefGen
|
5
13
|
module Blocks
|
@@ -11,6 +19,10 @@ module IsoDoc
|
|
11
19
|
text.nil? || text.empty?
|
12
20
|
end
|
13
21
|
|
22
|
+
def noblank(xpath)
|
23
|
+
xpath.reject { |n| blank?(n["id"]) }
|
24
|
+
end
|
25
|
+
|
14
26
|
def amend_preprocess(xmldoc)
|
15
27
|
xmldoc.xpath(ns("//amend[newcontent]")).each do |a|
|
16
28
|
autonum = amend_autonums(a)
|
@@ -45,7 +57,7 @@ module IsoDoc
|
|
45
57
|
def termnote_anchor_names(docxml)
|
46
58
|
docxml.xpath(ns("//*[termnote]")).each do |t|
|
47
59
|
c = Counter.new
|
48
|
-
t.xpath(ns("./termnote")).
|
60
|
+
t.xpath(ns("./termnote")).noblank.each do |n|
|
49
61
|
c.increment(n)
|
50
62
|
@anchors[n["id"]] =
|
51
63
|
{ label: termnote_label(c.print), type: "termnote",
|
@@ -60,7 +72,7 @@ module IsoDoc
|
|
60
72
|
docxml.xpath(ns("//*[termexample]")).each do |t|
|
61
73
|
examples = t.xpath(ns("./termexample"))
|
62
74
|
c = Counter.new
|
63
|
-
examples.
|
75
|
+
examples.noblank.each do |n|
|
64
76
|
c.increment(n)
|
65
77
|
idx = increment_label(examples, n, c, increment: false)
|
66
78
|
@anchors[n["id"]] = anchor_struct(idx, n, @labels["example_xref"],
|
@@ -135,7 +147,7 @@ module IsoDoc
|
|
135
147
|
notes = s.xpath(ns(".//ol")) - s.xpath(ns(".//clause//ol")) -
|
136
148
|
s.xpath(ns(".//appendix//ol")) - s.xpath(ns(".//ol//ol"))
|
137
149
|
c = Counter.new
|
138
|
-
notes.
|
150
|
+
notes.noblank.each do |n|
|
139
151
|
@anchors[n["id"]] = anchor_struct(increment_label(notes, n, c), n,
|
140
152
|
@labels["list"], "list", false)
|
141
153
|
list_item_anchor_names(n, @anchors[n["id"]], 1, "", notes.size != 1)
|
@@ -169,7 +181,7 @@ module IsoDoc
|
|
169
181
|
end
|
170
182
|
|
171
183
|
def deflist_anchor_names1(notes, counter)
|
172
|
-
notes.
|
184
|
+
notes.noblank.each do |n|
|
173
185
|
@anchors[n["id"]] =
|
174
186
|
anchor_struct(increment_label(notes, n, counter), n,
|
175
187
|
@labels["deflist"], "deflist", false)
|
@@ -197,7 +209,7 @@ module IsoDoc
|
|
197
209
|
end
|
198
210
|
|
199
211
|
def bookmark_anchor_names(xml)
|
200
|
-
xml.xpath(ns(".//bookmark")).
|
212
|
+
xml.xpath(ns(".//bookmark")).noblank.each do |n|
|
201
213
|
parent = nil
|
202
214
|
n.ancestors.each do |a|
|
203
215
|
next unless a["id"] && parent = @anchors.dig(a["id"], :xref)
|