isodoc 1.0.22 → 1.0.27
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/macos.yml +12 -5
- data/.github/workflows/ubuntu.yml +27 -6
- data/.github/workflows/windows.yml +13 -7
- data/README.adoc +3 -2
- data/lib/isodoc-yaml/i18n-en.yaml +18 -1
- data/lib/isodoc-yaml/i18n-fr.yaml +18 -1
- data/lib/isodoc-yaml/i18n-zh-Hans.yaml +18 -1
- data/lib/isodoc/base_style/bands.scss +6 -3
- data/lib/isodoc/base_style/reset.scss +1 -1
- data/lib/isodoc/convert.rb +1 -0
- data/lib/isodoc/function/blocks.rb +5 -0
- data/lib/isodoc/function/cleanup.rb +12 -1
- data/lib/isodoc/function/i18n.rb +5 -5
- data/lib/isodoc/function/inline.rb +47 -12
- data/lib/isodoc/function/references.rb +47 -33
- data/lib/isodoc/function/reqt.rb +21 -6
- data/lib/isodoc/function/section.rb +18 -8
- data/lib/isodoc/function/table.rb +0 -1
- data/lib/isodoc/function/to_word_html.rb +4 -2
- data/lib/isodoc/function/utils.rb +10 -4
- data/lib/isodoc/function/xref_gen.rb +2 -1
- data/lib/isodoc/function/xref_sect_gen.rb +24 -24
- data/lib/isodoc/headlesshtml_convert.rb +5 -0
- data/lib/isodoc/html_convert.rb +5 -0
- data/lib/isodoc/html_function/footnotes.rb +2 -2
- data/lib/isodoc/html_function/html.rb +3 -0
- data/lib/isodoc/html_function/postprocess.rb +3 -2
- data/lib/isodoc/metadata.rb +30 -7
- data/lib/isodoc/metadata_date.rb +39 -0
- data/lib/isodoc/pdf_convert.rb +5 -0
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/word_convert.rb +5 -0
- data/lib/isodoc/word_function/body.rb +0 -4
- data/lib/isodoc/word_function/footnotes.rb +2 -2
- data/lib/isodoc/word_function/postprocess.rb +13 -2
- data/lib/isodoc/word_function/table.rb +1 -3
- data/lib/isodoc/xslfo_convert.rb +5 -0
- data/spec/isodoc/blocks_spec.rb +188 -8
- data/spec/isodoc/cleanup_spec.rb +181 -18
- data/spec/isodoc/i18n_spec.rb +12 -12
- data/spec/isodoc/inline_spec.rb +65 -5
- data/spec/isodoc/metadata_spec.rb +77 -2
- data/spec/isodoc/postproc_spec.rb +33 -11
- data/spec/isodoc/ref_spec.rb +12 -6
- data/spec/isodoc/section_spec.rb +220 -205
- data/spec/isodoc/table_spec.rb +24 -24
- data/spec/isodoc/terms_spec.rb +50 -6
- data/spec/isodoc/xref_spec.rb +64 -26
- metadata +3 -2
@@ -9,24 +9,26 @@ module IsoDoc::Function
|
|
9
9
|
end
|
10
10
|
|
11
11
|
# TODO generate formatted ref if not present
|
12
|
-
def nonstd_bibitem(list, b, ordinal,
|
13
|
-
list.p **attr_code(iso_bibitem_entry_attrs(b,
|
14
|
-
|
15
|
-
|
16
|
-
if
|
12
|
+
def nonstd_bibitem(list, b, ordinal, biblio)
|
13
|
+
list.p **attr_code(iso_bibitem_entry_attrs(b, biblio)) do |ref|
|
14
|
+
ids = bibitem_ref_code(b)
|
15
|
+
identifiers = render_identifier(ids)
|
16
|
+
if biblio then ref_entry_code(ref, ordinal, identifiers, ids)
|
17
17
|
else
|
18
|
-
|
18
|
+
ref << "#{identifiers[0] || identifiers[1]}, "
|
19
|
+
ref << "#{identifiers[1]}, " if identifiers[0] && identifiers[1]
|
19
20
|
end
|
20
|
-
reference_format(b,
|
21
|
+
reference_format(b, ref)
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
24
25
|
def std_bibitem_entry(list, b, ordinal, biblio)
|
25
26
|
list.p **attr_code(iso_bibitem_entry_attrs(b, biblio)) do |ref|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
ref <<
|
27
|
+
ids = bibitem_ref_code(b)
|
28
|
+
identifiers = render_identifier(ids)
|
29
|
+
prefix_bracketed_ref(ref, "[#{ordinal}]") if biblio
|
30
|
+
ref << "#{identifiers[0] || identifiers[1]}"
|
31
|
+
ref << ", #{identifiers[1]}" if identifiers[0] && identifiers[1]
|
30
32
|
date_note_process(b, ref)
|
31
33
|
ref << ", "
|
32
34
|
reference_format(b, ref)
|
@@ -36,29 +38,43 @@ module IsoDoc::Function
|
|
36
38
|
# if t is just a number, only use that ([1] Non-Standard)
|
37
39
|
# else, use both ordinal, as prefix, and t
|
38
40
|
def ref_entry_code(r, ordinal, t, id)
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
prefix_bracketed_ref(r, ordinal)
|
43
|
-
if !t.empty? && !%w(DOI ISSN ISBN).include?(id["type"])
|
44
|
-
r << "#{t}, "
|
45
|
-
end
|
41
|
+
prefix_bracketed_ref(r, t[0] || "[#{ordinal}]")
|
42
|
+
if t[1]
|
43
|
+
r << "#{t[1]}, "
|
46
44
|
end
|
47
45
|
end
|
48
46
|
|
47
|
+
def pref_ref_code(b)
|
48
|
+
b.at(ns("./docidentifier[not(@type = 'DOI' or @type = 'metanorma' "\
|
49
|
+
"or @type = 'ISSN' or @type = 'ISBN' or @type = 'rfc-anchor')]"))
|
50
|
+
end
|
51
|
+
|
52
|
+
# returns [metanorma, non-metanorma, DOI/ISSN/ISBN] identifiers
|
49
53
|
def bibitem_ref_code(b)
|
50
54
|
id = b.at(ns("./docidentifier[@type = 'metanorma']"))
|
51
|
-
|
52
|
-
|
53
|
-
id
|
54
|
-
return id if id
|
55
|
+
id1 = pref_ref_code(b)
|
56
|
+
id2 = b.at(ns("./docidentifier[@type = 'DOI' or @type = 'ISSN' or @type = 'ISBN']"))
|
57
|
+
return [id, id1, id2] if id || id1 || id2
|
55
58
|
id = Nokogiri::XML::Node.new("docidentifier", b.document)
|
56
59
|
id << "(NO ID)"
|
57
|
-
id
|
60
|
+
[nil, id, nil]
|
61
|
+
end
|
62
|
+
|
63
|
+
def bracket_if_num(x)
|
64
|
+
return nil if x.nil?
|
65
|
+
x = x.text.sub(/^\[/, "").sub(/\]$/, "")
|
66
|
+
return "[#{x}]" if /^\d+$/.match(x)
|
67
|
+
x
|
58
68
|
end
|
59
69
|
|
60
70
|
def render_identifier(id)
|
61
|
-
|
71
|
+
[
|
72
|
+
bracket_if_num(id[0]),
|
73
|
+
id[1].nil? ? nil :
|
74
|
+
docid_prefix(id[1]["type"], id[1].text.sub(/^\[/, "").sub(/\]$/, "")),
|
75
|
+
id[2].nil? ? nil :
|
76
|
+
docid_prefix(id[2]["type"], id[2].text.sub(/^\[/, "").sub(/\]$/, "")),
|
77
|
+
]
|
62
78
|
end
|
63
79
|
|
64
80
|
def docid_prefix(prefix, docid)
|
@@ -98,7 +114,7 @@ module IsoDoc::Function
|
|
98
114
|
end
|
99
115
|
|
100
116
|
def prefix_bracketed_ref(ref, text)
|
101
|
-
ref <<
|
117
|
+
ref << text.to_s
|
102
118
|
insert_tab(ref, 1)
|
103
119
|
end
|
104
120
|
|
@@ -144,8 +160,7 @@ module IsoDoc::Function
|
|
144
160
|
end
|
145
161
|
|
146
162
|
def norm_ref(isoxml, out, num)
|
147
|
-
q = "//bibliography/references[
|
148
|
-
"title = 'Normative references']"
|
163
|
+
q = "//bibliography/references[@normative = 'true']"
|
149
164
|
f = isoxml.at(ns(q)) or return num
|
150
165
|
out.div do |div|
|
151
166
|
num = num + 1
|
@@ -155,8 +170,8 @@ module IsoDoc::Function
|
|
155
170
|
num
|
156
171
|
end
|
157
172
|
|
158
|
-
BIBLIOGRAPHY_XPATH = "//bibliography/clause[
|
159
|
-
"//bibliography/references[
|
173
|
+
BIBLIOGRAPHY_XPATH = "//bibliography/clause[.//references[@normative = 'false']] | "\
|
174
|
+
"//bibliography/references[@normative = 'false']".freeze
|
160
175
|
|
161
176
|
def bibliography(isoxml, out)
|
162
177
|
f = isoxml.at(ns(BIBLIOGRAPHY_XPATH)) || return
|
@@ -186,12 +201,11 @@ module IsoDoc::Function
|
|
186
201
|
|
187
202
|
def reference_names(ref)
|
188
203
|
isopub = ref.at(ns(ISO_PUBLISHER_XPATH))
|
189
|
-
|
190
|
-
|
204
|
+
ids = bibitem_ref_code(ref)
|
205
|
+
identifiers = render_identifier(ids)
|
191
206
|
date = ref.at(ns("./date[@type = 'published']"))
|
192
207
|
allparts = ref.at(ns("./extent[@type='part'][referenceFrom='all']"))
|
193
|
-
reference =
|
194
|
-
allparts)
|
208
|
+
reference = docid_l10n(identifiers[0] || identifiers[1])
|
195
209
|
@anchors[ref["id"]] = { xref: reference }
|
196
210
|
end
|
197
211
|
|
data/lib/isodoc/function/reqt.rb
CHANGED
@@ -20,17 +20,32 @@ module IsoDoc::Function
|
|
20
20
|
|
21
21
|
def recommendation_attributes1(node)
|
22
22
|
out = []
|
23
|
-
oblig = node["obligation"] and
|
24
|
-
|
25
|
-
node
|
23
|
+
oblig = node["obligation"] and
|
24
|
+
out << l10n("#{@labels['obligation']}: #{oblig}")
|
25
|
+
subj = node&.at(ns("./subject"))&.text and
|
26
|
+
out << l10n("#{@labels['subject']}: #{subj}")
|
27
|
+
node.xpath(ns("./inherit")).each do |i|
|
28
|
+
out << recommendation_attr_parse(i, @labels["inherits"])
|
29
|
+
end
|
26
30
|
node.xpath(ns("./classification")).each do |c|
|
27
|
-
|
28
|
-
value = c.at(ns("./value")) or next
|
29
|
-
out << "#{tag.text.capitalize}: #{value.text}"
|
31
|
+
line = recommendation_attr_keyvalue(c, "tag", "value") and out << line
|
30
32
|
end
|
31
33
|
out
|
32
34
|
end
|
33
35
|
|
36
|
+
def recommendation_attr_parse(node, label)
|
37
|
+
noko do |xml|
|
38
|
+
xml << "#{label}: "
|
39
|
+
node.children.each { |n| parse(n, xml) }
|
40
|
+
end.join
|
41
|
+
end
|
42
|
+
|
43
|
+
def recommendation_attr_keyvalue(node, key, value)
|
44
|
+
tag = node.at(ns("./#{key}")) or return nil
|
45
|
+
value = node.at(ns("./#{value}")) or return nil
|
46
|
+
"#{tag.text.capitalize}: #{value.text}"
|
47
|
+
end
|
48
|
+
|
34
49
|
def recommendation_attributes(node, out)
|
35
50
|
ret = recommendation_attributes1(node)
|
36
51
|
return if ret.empty?
|
@@ -109,20 +109,29 @@ module IsoDoc::Function
|
|
109
109
|
num
|
110
110
|
end
|
111
111
|
|
112
|
-
def terms_defs_title(f)
|
113
|
-
symbols = f.at(ns(".//definitions"))
|
114
|
-
return @termsdefsymbols_lbl if symbols
|
115
|
-
@termsdef_lbl
|
116
|
-
end
|
117
|
-
|
118
112
|
TERM_CLAUSE = "//sections/terms | "\
|
119
113
|
"//sections/clause[descendant::terms]".freeze
|
120
114
|
|
115
|
+
def term_def_title(title)
|
116
|
+
case title&.text
|
117
|
+
when "Terms, definitions, symbols and abbreviated terms"
|
118
|
+
@labels["termsdefsymbolsabbrev"]
|
119
|
+
when "Terms, definitions and symbols"
|
120
|
+
@labels["termsdefsymbols"]
|
121
|
+
when "Terms, definitions and abbreviated terms"
|
122
|
+
@labels["termsdefabbrev"]
|
123
|
+
when "Terms and definitions"
|
124
|
+
@labels["termsdef"]
|
125
|
+
else
|
126
|
+
title
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
121
130
|
def terms_defs(isoxml, out, num)
|
122
131
|
f = isoxml.at(ns(TERM_CLAUSE)) or return num
|
123
132
|
out.div **attr_code(id: f["id"]) do |div|
|
124
133
|
num = num + 1
|
125
|
-
clause_name(num,
|
134
|
+
clause_name(num, term_def_title(f&.at(ns("./title"))), div, nil)
|
126
135
|
f.elements.each do |e|
|
127
136
|
parse(e, div) unless %w{title source}.include? e.name
|
128
137
|
end
|
@@ -198,7 +207,8 @@ module IsoDoc::Function
|
|
198
207
|
|
199
208
|
def preface(isoxml, out)
|
200
209
|
title_attr = { class: "IntroTitle" }
|
201
|
-
isoxml.xpath(ns("//preface/clause
|
210
|
+
isoxml.xpath(ns("//preface/clause | //preface/terms | //preface/definitions | "\
|
211
|
+
"//preface/references")).each do |f|
|
202
212
|
page_break(out)
|
203
213
|
out.div **{ class: "Section3", id: f["id"] } do |div|
|
204
214
|
clause_name(nil, f&.at(ns("./title")), div, title_attr)
|
@@ -91,7 +91,6 @@ module IsoDoc::Function
|
|
91
91
|
style += <<~STYLE
|
92
92
|
border-top:#{row.zero? ? "#{SW} 1.5pt;" : 'none;'}
|
93
93
|
border-bottom:#{SW} #{rowmax == totalrows ? '1.5' : '1.0'}pt;
|
94
|
-
padding:0;
|
95
94
|
STYLE
|
96
95
|
header and scope = (td["colspan"] ? "colgroup" : "col")
|
97
96
|
!header and td.name == "th" and scope =
|
@@ -21,7 +21,7 @@ module IsoDoc::Function
|
|
21
21
|
filename = filepath.sub_ext('').to_s
|
22
22
|
dir = "#{filename}_files"
|
23
23
|
unless debug
|
24
|
-
Dir.mkdir(dir) unless File.exists?(dir)
|
24
|
+
Dir.mkdir(dir, 0777) unless File.exists?(dir)
|
25
25
|
FileUtils.rm_rf "#{dir}/*"
|
26
26
|
end
|
27
27
|
@filename = filename
|
@@ -157,7 +157,7 @@ module IsoDoc::Function
|
|
157
157
|
when "clause" then clause_parse(node, out)
|
158
158
|
when "xref" then xref_parse(node, out)
|
159
159
|
when "eref" then eref_parse(node, out)
|
160
|
-
when "origin" then
|
160
|
+
when "origin" then origin_parse(node, out)
|
161
161
|
when "link" then link_parse(node, out)
|
162
162
|
when "ul" then ul_parse(node, out)
|
163
163
|
when "ol" then ol_parse(node, out)
|
@@ -210,6 +210,8 @@ module IsoDoc::Function
|
|
210
210
|
when "license-statement" then license_parse(node, out)
|
211
211
|
when "legal-statement" then legal_parse(node, out)
|
212
212
|
when "feedback-statement" then feedback_parse(node, out)
|
213
|
+
when "passthrough" then passthrough_parse(node, out)
|
214
|
+
when "variant" then variant_parse(node, out)
|
213
215
|
else
|
214
216
|
error_parse(node, out)
|
215
217
|
end
|
@@ -49,7 +49,12 @@ module IsoDoc::Function
|
|
49
49
|
/^(\&[^ \t\r\n#;]+;)/.match(t) ?
|
50
50
|
HTMLEntities.new.encode(HTMLEntities.new.decode(t), :hexadecimal) : t
|
51
51
|
end.join("")
|
52
|
-
|
52
|
+
begin
|
53
|
+
Nokogiri::XML.parse(xml) { |config| config.strict }
|
54
|
+
rescue Nokogiri::XML::SyntaxError => e
|
55
|
+
File.open("#{@filename}.#{@format}.err", "w:UTF-8") { |f| f.write xml }
|
56
|
+
abort "Malformed Output XML for #{@format}: #{e} (see #{@filename}.#{@format}.err)"
|
57
|
+
end
|
53
58
|
end
|
54
59
|
|
55
60
|
def to_xhtml_fragment(xml)
|
@@ -64,7 +69,7 @@ module IsoDoc::Function
|
|
64
69
|
|
65
70
|
CLAUSE_ANCESTOR =
|
66
71
|
".//ancestor::*[local-name() = 'annex' or "\
|
67
|
-
"local-name() = 'acknowledgements' or "\
|
72
|
+
"local-name() = 'acknowledgements' or local-name() = 'term' or "\
|
68
73
|
"local-name() = 'appendix' or local-name() = 'foreword' or "\
|
69
74
|
"local-name() = 'introduction' or local-name() = 'terms' or "\
|
70
75
|
"local-name() = 'clause' or local-name() = 'references']/@id".freeze
|
@@ -78,7 +83,7 @@ module IsoDoc::Function
|
|
78
83
|
".//ancestor::*[local-name() = 'annex' or "\
|
79
84
|
"local-name() = 'foreword' or local-name() = 'appendix' or "\
|
80
85
|
"local-name() = 'introduction' or local-name() = 'terms' or "\
|
81
|
-
"local-name() = 'acknowledgements' or "\
|
86
|
+
"local-name() = 'acknowledgements' or local-name() = 'term' or "\
|
82
87
|
"local-name() = 'clause' or local-name() = 'references' or "\
|
83
88
|
"local-name() = 'figure' or local-name() = 'formula' or "\
|
84
89
|
"local-name() = 'table' or local-name() = 'example']/@id".freeze
|
@@ -110,7 +115,8 @@ module IsoDoc::Function
|
|
110
115
|
end
|
111
116
|
|
112
117
|
def header_strip(h)
|
113
|
-
h = h.to_s.gsub(%r{<br
|
118
|
+
h = h.to_s.gsub(%r{<br\s*/>}, " ").gsub(/<\/?h[123456][^>]*>/, "").
|
119
|
+
gsub(/<\/?b[^>]*>/, "")
|
114
120
|
h1 = to_xhtml_fragment(h.dup)
|
115
121
|
h1.traverse do |x|
|
116
122
|
x.replace(" ") if x.name == "span" && /mso-tab-count/.match(x["style"])
|
@@ -40,6 +40,7 @@ module IsoDoc::Function
|
|
40
40
|
|
41
41
|
SECTIONS_XPATH =
|
42
42
|
"//foreword | //introduction | //acknowledgements | //preface/clause | "\
|
43
|
+
"//preface/terms | preface/definitions | preface/references | "\
|
43
44
|
"//sections/terms | //annex | "\
|
44
45
|
"//sections/clause | //sections/definitions | "\
|
45
46
|
"//bibliography/references | //bibliography/clause".freeze
|
@@ -68,7 +69,7 @@ module IsoDoc::Function
|
|
68
69
|
"not(self::xmlns:terms) and not(self::xmlns:definitions)]//"\
|
69
70
|
"xmlns:example | ./xmlns:example".freeze
|
70
71
|
|
71
|
-
CHILD_SECTIONS = "./clause | ./appendix | ./terms | ./definitions"
|
72
|
+
CHILD_SECTIONS = "./clause | ./appendix | ./terms | ./definitions | ./references"
|
72
73
|
|
73
74
|
def example_anchor_names(sections)
|
74
75
|
sections.each do |s|
|
@@ -5,10 +5,9 @@ module IsoDoc::Function
|
|
5
5
|
annex_names(c, (65 + i).chr.to_s)
|
6
6
|
end
|
7
7
|
docxml.xpath(
|
8
|
-
|
9
|
-
"
|
10
|
-
|
11
|
-
" or xmlns:title = 'Normative references')]")).each do |b|
|
8
|
+
ns("//bibliography/clause[.//references[@normative = 'false']] | "\
|
9
|
+
"//bibliography/references[@normative = 'false']"
|
10
|
+
)).each do |b|
|
12
11
|
preface_names(b)
|
13
12
|
end
|
14
13
|
docxml.xpath(ns("//bibitem[not(ancestor::bibitem)]")).each do |ref|
|
@@ -17,23 +16,13 @@ module IsoDoc::Function
|
|
17
16
|
end
|
18
17
|
|
19
18
|
def initial_anchor_names(d)
|
20
|
-
|
21
|
-
preface_names(d.at(ns("//foreword")))
|
22
|
-
preface_names(d.at(ns("//introduction")))
|
23
|
-
d.xpath(ns("//preface/clause")).each do |c|
|
24
|
-
preface_names(c)
|
25
|
-
end
|
26
|
-
preface_names(d.at(ns("//acknowledgements")))
|
19
|
+
d.xpath(ns("//preface/*")).each { |c| c.element? and preface_names(c) }
|
27
20
|
# potentially overridden in middle_section_asset_names()
|
28
|
-
sequential_asset_names(
|
29
|
-
d.xpath(ns("//preface/abstract | //foreword | //introduction | "\
|
30
|
-
"//preface/clause | //acknowledgements")))
|
21
|
+
sequential_asset_names(d.xpath(ns("//preface/*")))
|
31
22
|
n = section_names(d.at(ns("//clause[title = 'Scope']")), 0, 1)
|
32
23
|
n = section_names(d.at(ns(
|
33
|
-
"//bibliography/clause[
|
34
|
-
"
|
35
|
-
"//bibliography/references[title = 'Normative References' or "\
|
36
|
-
"title = 'Normative references']")), n, 1)
|
24
|
+
"//bibliography/clause[.//references[@normative = 'true']] | "\
|
25
|
+
"//bibliography/references[@normative = 'true']")), n, 1)
|
37
26
|
n = section_names(d.at(ns("//sections/terms | "\
|
38
27
|
"//sections/clause[descendant::terms]")), n, 1)
|
39
28
|
n = section_names(d.at(ns("//sections/definitions")), n, 1)
|
@@ -76,10 +65,8 @@ module IsoDoc::Function
|
|
76
65
|
|
77
66
|
def middle_section_asset_names(d)
|
78
67
|
middle_sections = "//clause[title = 'Scope'] | "\
|
79
|
-
"//references[
|
80
|
-
"
|
81
|
-
"//sections/terms | //preface/abstract | //foreword | "\
|
82
|
-
"//introduction | //preface/clause | //acknowledgements "\
|
68
|
+
"//references[@normative = 'true'] | "\
|
69
|
+
"//sections/terms | //preface/* | "\
|
83
70
|
"//sections/definitions | //clause[parent::sections]"
|
84
71
|
sequential_asset_names(d.xpath(ns(middle_sections)))
|
85
72
|
end
|
@@ -120,12 +107,25 @@ module IsoDoc::Function
|
|
120
107
|
l10n("<b>#{@annex_lbl} #{num}</b><br/>#{obl}")
|
121
108
|
end
|
122
109
|
|
110
|
+
def single_annex_special_section(clause)
|
111
|
+
a = clause.xpath(ns("./references | ./terms | ./definitions"))
|
112
|
+
a.size == 1 or return nil
|
113
|
+
clause.xpath(ns("./clause | ./p | ./table | ./ol | ./ul | ./dl | "\
|
114
|
+
"./note | ./admonition | ./figure")).size == 0 or
|
115
|
+
return nil
|
116
|
+
a[0]
|
117
|
+
end
|
118
|
+
|
123
119
|
def annex_names(clause, num)
|
124
120
|
@anchors[clause["id"]] = { label: annex_name_lbl(clause, num),
|
125
121
|
type: "clause",
|
126
122
|
xref: "#{@annex_lbl} #{num}", level: 1 }
|
127
|
-
|
128
|
-
annex_names1(
|
123
|
+
if a = single_annex_special_section(clause)
|
124
|
+
annex_names1(a, "#{num}", 1)
|
125
|
+
else
|
126
|
+
clause.xpath(ns(SUBCLAUSES)).each_with_index do |c, i|
|
127
|
+
annex_names1(c, "#{num}.#{i + 1}", 2)
|
128
|
+
end
|
129
129
|
end
|
130
130
|
hierarchical_asset_names(clause, num)
|
131
131
|
end
|
@@ -14,6 +14,11 @@ module IsoDoc
|
|
14
14
|
"_headlessimages"
|
15
15
|
end
|
16
16
|
|
17
|
+
def initialize(options)
|
18
|
+
@format = :html
|
19
|
+
super
|
20
|
+
end
|
21
|
+
|
17
22
|
def convert(filename, file = nil, debug = false)
|
18
23
|
file = File.read(filename, encoding: "utf-8") if file.nil?
|
19
24
|
@openmathdelim, @closemathdelim = extract_delims(file)
|
data/lib/isodoc/html_convert.rb
CHANGED
@@ -48,7 +48,7 @@ module IsoDoc::HtmlFunction
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def table_footnote_parse(node, out)
|
51
|
-
fn = node["reference"]
|
51
|
+
fn = node["reference"] || UUIDTools::UUID.random_create.to_s
|
52
52
|
tid = get_table_ancestor_id(node)
|
53
53
|
make_table_footnote_link(out, tid + fn, fn)
|
54
54
|
# do not output footnote text if we have already seen it for this table
|
@@ -64,7 +64,7 @@ module IsoDoc::HtmlFunction
|
|
64
64
|
def footnote_parse(node, out)
|
65
65
|
return table_footnote_parse(node, out) if (@in_table || @in_figure) &&
|
66
66
|
!node.ancestors.map {|m| m.name }.include?("name")
|
67
|
-
fn = node["reference"]
|
67
|
+
fn = node["reference"] || UUIDTools::UUID.random_create.to_s
|
68
68
|
attrs = { "epub:type": "footnote", rel: "footnote", href: "#fn:#{fn}" }
|
69
69
|
out.a **attrs do |a|
|
70
70
|
a.sup { |sup| sup << fn }
|