isodoc 1.7.4 → 1.7.5
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 +1 -0
- data/lib/isodoc/presentation_function/block.rb +80 -53
- data/lib/isodoc/presentation_function/inline.rb +48 -16
- data/lib/isodoc/presentation_xml_convert.rb +1 -0
- data/lib/isodoc/version.rb +1 -1
- data/spec/isodoc/inline_spec.rb +111 -87
- data/spec/isodoc/section_spec.rb +125 -0
- data/spec/isodoc/terms_spec.rb +116 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b42d786cf8fa0f78ac01afba8de3e886b35eddd191551b6ce20ec680d7441d39
|
4
|
+
data.tar.gz: 5db56071fb06162e738b7eff5c5726bf0eae2acc80dbcbfaf1c589ba04729a55
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 546f673176c4c6757567e43c3221c9e019d7f88f515636e9287e3e8016625a0741277b02d4b3de02cb09e301a76ac39dd8a7b7a62aa90a272c94b9f93529e84f
|
7
|
+
data.tar.gz: 6f1db97d1acb6c413bc84265e6e9182b46a645509780457074584d4d37bf1f958e2220eac71958f0167438ed99da7ff12029a1beeda010f23229c47ec5976b50
|
data/isodoc.gemspec
CHANGED
@@ -40,6 +40,7 @@ Gem::Specification.new do |spec|
|
|
40
40
|
spec.add_dependency "twitter_cldr", ">= 6.6.0"
|
41
41
|
spec.add_dependency "uuidtools"
|
42
42
|
spec.add_dependency "mathml2asciimath"
|
43
|
+
spec.add_dependency "metanorma-utils"
|
43
44
|
|
44
45
|
spec.add_development_dependency "byebug", "~> 9.1"
|
45
46
|
spec.add_development_dependency "equivalent-xml", "~> 0.6"
|
@@ -2,10 +2,10 @@ require "base64"
|
|
2
2
|
|
3
3
|
module IsoDoc
|
4
4
|
class PresentationXMLConvert < ::IsoDoc::Convert
|
5
|
-
def lower2cap(
|
6
|
-
return
|
5
|
+
def lower2cap(text)
|
6
|
+
return text if /^[[:upper:]][[:upper:]]/.match?(text)
|
7
7
|
|
8
|
-
|
8
|
+
text.capitalize
|
9
9
|
end
|
10
10
|
|
11
11
|
def figure(docxml)
|
@@ -13,8 +13,7 @@ module IsoDoc
|
|
13
13
|
docxml.xpath(ns("//figure")).each { |f| figure1(f) }
|
14
14
|
docxml.xpath(ns("//svgmap")).each do |s|
|
15
15
|
if f = s.at(ns("./figure")) then s.replace(f)
|
16
|
-
else
|
17
|
-
s.remove
|
16
|
+
else s.remove
|
18
17
|
end
|
19
18
|
end
|
20
19
|
end
|
@@ -30,26 +29,28 @@ module IsoDoc
|
|
30
29
|
elem.replace(x)
|
31
30
|
end
|
32
31
|
|
33
|
-
def figure1(
|
34
|
-
return sourcecode1(
|
35
|
-
|
36
|
-
return if
|
32
|
+
def figure1(elem)
|
33
|
+
return sourcecode1(elem) if elem["class"] == "pseudocode" ||
|
34
|
+
elem["type"] == "pseudocode"
|
35
|
+
return if labelled_ancestor(elem) && elem.ancestors("figure").empty? ||
|
36
|
+
elem.at(ns("./figure")) && !elem.at(ns("./name"))
|
37
37
|
|
38
|
-
lbl = @xrefs.anchor(
|
39
|
-
prefix_name(
|
38
|
+
lbl = @xrefs.anchor(elem["id"], :label, false) or return
|
39
|
+
prefix_name(elem, " — ",
|
40
40
|
l10n("#{lower2cap @i18n.figure} #{lbl}"), "name")
|
41
41
|
end
|
42
42
|
|
43
|
-
def prefix_name(
|
43
|
+
def prefix_name(node, delim, number, elem)
|
44
44
|
return if number.nil? || number.empty?
|
45
45
|
|
46
|
-
unless name =
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
unless name = node.at(ns("./#{elem}"))
|
47
|
+
node.children.empty? and node.add_child("<#{elem}></#{elem}>") or
|
48
|
+
node.children.first.previous = "<#{elem}></#{elem}>"
|
49
|
+
name = node.children.first
|
50
|
+
end
|
51
|
+
if name.children.empty? then name.add_child(number)
|
52
|
+
else (name.children.first.previous = "#{number}#{delim}")
|
50
53
|
end
|
51
|
-
name.children.empty? ? name.add_child(number) :
|
52
|
-
( name.children.first.previous = "#{number}#{delim}" )
|
53
54
|
end
|
54
55
|
|
55
56
|
def sourcecode(docxml)
|
@@ -58,12 +59,13 @@ module IsoDoc
|
|
58
59
|
end
|
59
60
|
end
|
60
61
|
|
61
|
-
def sourcecode1(
|
62
|
-
return if labelled_ancestor(
|
63
|
-
return unless
|
62
|
+
def sourcecode1(elem)
|
63
|
+
return if labelled_ancestor(elem)
|
64
|
+
return unless elem.ancestors("example").empty?
|
64
65
|
|
65
|
-
lbl = @xrefs.anchor(
|
66
|
-
prefix_name(
|
66
|
+
lbl = @xrefs.anchor(elem["id"], :label, false) or return
|
67
|
+
prefix_name(elem, " — ",
|
68
|
+
l10n("#{lower2cap @i18n.figure} #{lbl}"), "name")
|
67
69
|
end
|
68
70
|
|
69
71
|
def formula(docxml)
|
@@ -73,9 +75,9 @@ module IsoDoc
|
|
73
75
|
end
|
74
76
|
|
75
77
|
# introduce name element
|
76
|
-
def formula1(
|
77
|
-
lbl = @xrefs.anchor(
|
78
|
-
prefix_name(
|
78
|
+
def formula1(elem)
|
79
|
+
lbl = @xrefs.anchor(elem["id"], :label, false)
|
80
|
+
prefix_name(elem, "", lbl, "name")
|
79
81
|
end
|
80
82
|
|
81
83
|
def example(docxml)
|
@@ -90,11 +92,14 @@ module IsoDoc
|
|
90
92
|
end
|
91
93
|
end
|
92
94
|
|
93
|
-
def example1(
|
94
|
-
n = @xrefs.get[
|
95
|
-
lbl =
|
96
|
-
|
97
|
-
|
95
|
+
def example1(elem)
|
96
|
+
n = @xrefs.get[elem["id"]]
|
97
|
+
lbl = if n.nil? || n[:label].nil? || n[:label].empty?
|
98
|
+
@i18n.example
|
99
|
+
else
|
100
|
+
l10n("#{@i18n.example} #{n[:label]}")
|
101
|
+
end
|
102
|
+
prefix_name(elem, " — ", lbl, "name")
|
98
103
|
end
|
99
104
|
|
100
105
|
def note(docxml)
|
@@ -104,13 +109,16 @@ module IsoDoc
|
|
104
109
|
end
|
105
110
|
|
106
111
|
# introduce name element
|
107
|
-
def note1(
|
108
|
-
return if
|
112
|
+
def note1(elem)
|
113
|
+
return if elem.parent.name == "bibitem"
|
109
114
|
|
110
|
-
n = @xrefs.get[
|
111
|
-
lbl =
|
112
|
-
|
113
|
-
|
115
|
+
n = @xrefs.get[elem["id"]]
|
116
|
+
lbl = if n.nil? || n[:label].nil? || n[:label].empty?
|
117
|
+
@i18n.note
|
118
|
+
else
|
119
|
+
l10n("#{@i18n.note} #{n[:label]}")
|
120
|
+
end
|
121
|
+
prefix_name(elem, "", lbl, "name")
|
114
122
|
end
|
115
123
|
|
116
124
|
def termnote(docxml)
|
@@ -120,9 +128,27 @@ module IsoDoc
|
|
120
128
|
end
|
121
129
|
|
122
130
|
# introduce name element
|
123
|
-
def termnote1(
|
124
|
-
lbl = l10n(@xrefs.anchor(
|
125
|
-
prefix_name(
|
131
|
+
def termnote1(elem)
|
132
|
+
lbl = l10n(@xrefs.anchor(elem["id"], :label) || "???")
|
133
|
+
prefix_name(elem, "", lower2cap(lbl), "name")
|
134
|
+
end
|
135
|
+
|
136
|
+
def termdefinition(docxml)
|
137
|
+
docxml.xpath(ns("//term[definition]")).each do |f|
|
138
|
+
termdefinition1(f)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def termdefinition1(elem)
|
143
|
+
return unless elem.xpath(ns("./definition")).size > 1
|
144
|
+
|
145
|
+
d = elem.at(ns("./definition"))
|
146
|
+
d = d.replace("<ol><li>#{d.children.to_xml}</li></ol>").first
|
147
|
+
elem.xpath(ns("./definition")).each do |f|
|
148
|
+
f = f.replace("<li>#{f.children.to_xml}</li>").first
|
149
|
+
d << f
|
150
|
+
end
|
151
|
+
d.wrap("<definition></definition>")
|
126
152
|
end
|
127
153
|
|
128
154
|
def recommendation(docxml)
|
@@ -144,10 +170,10 @@ module IsoDoc
|
|
144
170
|
end
|
145
171
|
|
146
172
|
# introduce name element
|
147
|
-
def recommendation1(
|
148
|
-
n = @xrefs.anchor(
|
173
|
+
def recommendation1(elem, type)
|
174
|
+
n = @xrefs.anchor(elem["id"], :label, false)
|
149
175
|
lbl = (n.nil? ? type : l10n("#{type} #{n}"))
|
150
|
-
prefix_name(
|
176
|
+
prefix_name(elem, "", lbl, "name")
|
151
177
|
end
|
152
178
|
|
153
179
|
def table(docxml)
|
@@ -156,12 +182,13 @@ module IsoDoc
|
|
156
182
|
end
|
157
183
|
end
|
158
184
|
|
159
|
-
def table1(
|
160
|
-
return if labelled_ancestor(
|
161
|
-
return if
|
185
|
+
def table1(elem)
|
186
|
+
return if labelled_ancestor(elem)
|
187
|
+
return if elem["unnumbered"] && !elem.at(ns("./name"))
|
162
188
|
|
163
|
-
n = @xrefs.anchor(
|
164
|
-
prefix_name(
|
189
|
+
n = @xrefs.anchor(elem["id"], :label, false)
|
190
|
+
prefix_name(elem, " — ", l10n("#{lower2cap @i18n.table} #{n}"),
|
191
|
+
"name")
|
165
192
|
end
|
166
193
|
|
167
194
|
# we use this to eliminate the semantic amend blocks from rendering
|
@@ -171,11 +198,11 @@ module IsoDoc
|
|
171
198
|
end
|
172
199
|
end
|
173
200
|
|
174
|
-
def amend1(
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
201
|
+
def amend1(elem)
|
202
|
+
elem.xpath(ns("./autonumber")).each(&:remove)
|
203
|
+
elem.xpath(ns("./newcontent")).each { |a| a.name = "quote" }
|
204
|
+
elem.xpath(ns("./description")).each { |a| a.replace(a.children) }
|
205
|
+
elem.replace(elem.children)
|
179
206
|
end
|
180
207
|
end
|
181
208
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require "metanorma-utils"
|
2
|
+
|
1
3
|
module IsoDoc
|
2
4
|
class PresentationXMLConvert < ::IsoDoc::Convert
|
3
5
|
def prefix_container(container, linkend, _target)
|
@@ -130,7 +132,7 @@ module IsoDoc
|
|
130
132
|
loc = @i18n.locality[type] || type.sub(/^locality:/, "")
|
131
133
|
loc = case node["case"]
|
132
134
|
when "lowercase" then loc.downcase
|
133
|
-
else loc
|
135
|
+
else Metanorma::Utils.strict_capitalize_first(loc)
|
134
136
|
end
|
135
137
|
" #{loc}"
|
136
138
|
end
|
@@ -161,32 +163,62 @@ module IsoDoc
|
|
161
163
|
|
162
164
|
def concept1(node)
|
163
165
|
xref = node&.at(ns("./xref/@target"))&.text or
|
164
|
-
return concept_render(node, node["ital"] || "true",
|
165
|
-
|
166
|
+
return concept_render(node, ital: node["ital"] || "true",
|
167
|
+
ref: node["ref"] || "true",
|
168
|
+
linkref: node["linkref"] || "true",
|
169
|
+
linkmention: node["linkmention"] || "false")
|
166
170
|
if node.at(ns("//definitions//dt[@id = '#{xref}']"))
|
167
|
-
concept_render(node, node["ital"] || "false",
|
168
|
-
|
171
|
+
concept_render(node, ital: node["ital"] || "false",
|
172
|
+
ref: node["ref"] || "false",
|
173
|
+
linkref: node["linkref"] || "true",
|
174
|
+
linkmention: node["linkmention"] || "false")
|
175
|
+
else concept_render(node, ital: node["ital"] || "true",
|
176
|
+
ref: node["ref"] || "true",
|
177
|
+
linkref: node["linkref"] || "true",
|
178
|
+
linkmention: node["linkmention"] || "false")
|
169
179
|
end
|
170
180
|
end
|
171
181
|
|
172
|
-
def concept_render(node,
|
182
|
+
def concept_render(node, opts)
|
173
183
|
node&.at(ns("./refterm"))&.remove
|
174
184
|
r = node.at(ns("./renderterm"))
|
175
|
-
|
176
|
-
|
177
|
-
|
185
|
+
ref = node.at(ns("./xref | ./eref | ./termref"))
|
186
|
+
ref && opts[:ref] != "false" and r&.next = " "
|
187
|
+
opts[:ital] == "true" and r&.name = "em"
|
188
|
+
if opts[:linkmention] == "true" && !r.nil? && !ref.nil?
|
189
|
+
ref2 = ref.clone
|
190
|
+
r2 = r.clone
|
191
|
+
r.replace(ref2).children = r2
|
192
|
+
end
|
193
|
+
concept1_ref(node, ref, opts)
|
194
|
+
if opts[:ital] == "false"
|
195
|
+
r = node.at(ns(".//renderterm"))
|
196
|
+
r&.replace(r&.children)
|
178
197
|
end
|
179
|
-
concept1_ref(node, ref)
|
180
198
|
node.replace(node.children)
|
181
199
|
end
|
182
200
|
|
183
|
-
def concept1_ref(
|
184
|
-
|
185
|
-
return
|
201
|
+
def concept1_ref(_node, ref, opts)
|
202
|
+
ref.nil? and return
|
203
|
+
return ref.remove if opts[:ref] == "false"
|
204
|
+
|
205
|
+
r = concept1_ref_content(ref)
|
206
|
+
ref = r.at("./descendant-or-self::xmlns:xref | "\
|
207
|
+
"./descendant-or-self::xmlns:eref | "\
|
208
|
+
"./descendant-or-self::xmlns:termref")
|
209
|
+
%w(xref eref).include? ref&.name and get_linkend(ref)
|
210
|
+
if opts[:linkref] == "false" && %w(xref eref).include?(ref&.name)
|
211
|
+
ref.replace(ref.children)
|
212
|
+
end
|
213
|
+
end
|
186
214
|
|
187
|
-
|
188
|
-
|
189
|
-
|
215
|
+
def concept1_ref_content(ref)
|
216
|
+
if non_locality_elems(ref).select do |c|
|
217
|
+
!c.text? || /\S/.match(c)
|
218
|
+
end.empty?
|
219
|
+
ref.replace(@i18n.term_defined_in.sub(/%/,
|
220
|
+
ref.to_xml))
|
221
|
+
else ref.replace("[#{ref.to_xml}]")
|
190
222
|
end
|
191
223
|
end
|
192
224
|
|
data/lib/isodoc/version.rb
CHANGED
data/spec/isodoc/inline_spec.rb
CHANGED
@@ -209,8 +209,7 @@ RSpec.describe IsoDoc do
|
|
209
209
|
<renderterm>word</renderterm>
|
210
210
|
<termref base='IEV' target='135-13-13'>The IEV database</termref>
|
211
211
|
</concept></li>
|
212
|
-
<li><concept
|
213
|
-
<renderterm>word</renderterm>
|
212
|
+
<li><concept>
|
214
213
|
<strong>error!</strong>
|
215
214
|
</concept>
|
216
215
|
</li>
|
@@ -295,7 +294,7 @@ RSpec.describe IsoDoc do
|
|
295
294
|
<li>
|
296
295
|
<em>word</em> [<termref base="IEV" target="135-13-13">The IEV database</termref>]
|
297
296
|
</li>
|
298
|
-
<li> <
|
297
|
+
<li> <strong>error!</strong> </li>
|
299
298
|
</ul>
|
300
299
|
</p>
|
301
300
|
</foreword></preface>
|
@@ -380,7 +379,7 @@ RSpec.describe IsoDoc do
|
|
380
379
|
<i>word</i>
|
381
380
|
[The IEV database]
|
382
381
|
</li>
|
383
|
-
<li> <
|
382
|
+
<li> <b>error!</b> </li>
|
384
383
|
</ul>
|
385
384
|
</p>
|
386
385
|
</div>
|
@@ -418,13 +417,22 @@ RSpec.describe IsoDoc do
|
|
418
417
|
<preface><foreword>
|
419
418
|
<p>
|
420
419
|
<ul>
|
421
|
-
<li>
|
422
|
-
<concept
|
423
|
-
<li><concept ref="true"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
|
420
|
+
<li><concept ital="true"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
|
421
|
+
<li><concept ref="true"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
|
424
422
|
<li><concept ital="true" ref="true"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
|
425
|
-
|
426
|
-
|
423
|
+
<li><concept ital="false"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
|
424
|
+
<li><concept ref="false"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
|
427
425
|
<li><concept ital="false" ref="false"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
|
426
|
+
<li><concept ital="true" ref="true" linkmention="true" linkref="true"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
|
427
|
+
<li><concept ital="true" ref="true" linkmention="true" linkref="false"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
|
428
|
+
<li><concept ital="true" ref="true" linkmention="false" linkref="true"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
|
429
|
+
<li><concept ital="true" ref="true" linkmention="false" linkref="false"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
|
430
|
+
<li><concept ital="true" ref="true" linkmention="true" linkref="true"><strong>error!</strong></concept></li>
|
431
|
+
<li><concept ital="false" ref="false" linkmention="true">
|
432
|
+
<refterm>CV_DiscreteCoverage</refterm>
|
433
|
+
<renderterm>CV_DiscreteCoverage</renderterm>
|
434
|
+
<xref target="term-cv_discretecoverage"/>
|
435
|
+
</concept></li>
|
428
436
|
</ul></p>
|
429
437
|
</foreword></preface>
|
430
438
|
<sections>
|
@@ -433,88 +441,101 @@ RSpec.describe IsoDoc do
|
|
433
441
|
</iso-standard>
|
434
442
|
INPUT
|
435
443
|
presxml = <<~OUTPUT
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
<li>
|
458
|
-
<em>term</em>,
|
459
|
-
|
460
|
-
</li>
|
461
|
-
<li>
|
462
|
-
term,
|
463
|
-
|
464
|
-
</li>
|
465
|
-
</ul></p>
|
466
|
-
</foreword></preface>
|
467
|
-
<sections>
|
468
|
-
<clause id="clause1" displayorder="2"><title depth="1">1.<tab/>Clause 1</title></clause>
|
469
|
-
</sections>
|
444
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml" type="presentation">
|
445
|
+
<preface><foreword displayorder="1">
|
446
|
+
<p>
|
447
|
+
<ul>
|
448
|
+
<li><em>term</em> [term defined in <xref target="clause1">Clause 1</xref>],</li>
|
449
|
+
<li><em>term</em> [term defined in <xref target="clause1">Clause 1</xref>],</li>
|
450
|
+
<li><em>term</em> [term defined in <xref target="clause1">Clause 1</xref>],</li>
|
451
|
+
<li>term [term defined in <xref target="clause1">Clause 1</xref>],</li>
|
452
|
+
<li><em>term</em>,</li>
|
453
|
+
<li>term,</li>
|
454
|
+
<li><xref target="clause1"><em>term</em></xref> [term defined in <xref target="clause1">Clause 1</xref>],</li>
|
455
|
+
<li><xref target="clause1"><em>term</em></xref> [term defined in Clause 1],</li>
|
456
|
+
<li><em>term</em> [term defined in <xref target="clause1">Clause 1</xref>],</li>
|
457
|
+
<li><em>term</em> [term defined in Clause 1],</li>
|
458
|
+
<li><strong>error!</strong></li>
|
459
|
+
<li><xref target='term-cv_discretecoverage'>CV_DiscreteCoverage</xref></li>
|
460
|
+
</ul></p>
|
461
|
+
</foreword></preface>
|
462
|
+
<sections>
|
463
|
+
<clause id="clause1" displayorder="2"><title depth="1">1.<tab/>Clause 1</title></clause>
|
464
|
+
</sections>
|
470
465
|
</iso-standard>
|
471
466
|
OUTPUT
|
472
467
|
output = <<~OUTPUT
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
468
|
+
#{HTML_HDR}
|
469
|
+
<br/>
|
470
|
+
<div>
|
471
|
+
<h1 class='ForewordTitle'>Foreword</h1>
|
472
|
+
<p>
|
473
|
+
<ul>
|
474
|
+
<li>
|
475
|
+
<i>term</i>
|
476
|
+
[term defined in
|
477
|
+
<a href='#clause1'>Clause 1</a>
|
478
|
+
],
|
479
|
+
</li>
|
480
|
+
<li>
|
481
|
+
<i>term</i>
|
482
|
+
[term defined in
|
483
|
+
<a href='#clause1'>Clause 1</a>
|
484
|
+
],
|
485
|
+
</li>
|
486
|
+
<li>
|
487
|
+
<i>term</i>
|
488
|
+
[term defined in
|
489
|
+
<a href='#clause1'>Clause 1</a>
|
490
|
+
],
|
491
|
+
</li>
|
492
|
+
<li>
|
493
|
+
term [term defined in
|
494
|
+
<a href='#clause1'>Clause 1</a>
|
495
|
+
],
|
496
|
+
</li>
|
497
|
+
<li>
|
498
|
+
<i>term</i>,
|
499
|
+
</li>
|
500
|
+
<li>term,</li>
|
501
|
+
<li>
|
502
|
+
<a href='#clause1'>
|
503
|
+
<i>term</i>
|
504
|
+
</a>
|
505
|
+
[term defined in
|
506
|
+
<a href='#clause1'>Clause 1</a>
|
507
|
+
],
|
508
|
+
</li>
|
509
|
+
<li>
|
510
|
+
<a href='#clause1'>
|
511
|
+
<i>term</i>
|
512
|
+
</a>
|
513
|
+
[term defined in Clause 1],
|
514
|
+
</li>
|
515
|
+
<li>
|
516
|
+
<i>term</i>
|
517
|
+
[term defined in
|
518
|
+
<a href='#clause1'>Clause 1</a>
|
519
|
+
],
|
520
|
+
</li>
|
521
|
+
<li>
|
522
|
+
<i>term</i>
|
523
|
+
[term defined in Clause 1],
|
524
|
+
</li>
|
525
|
+
<li> <b>error!</b> </li>
|
526
|
+
<li> <a href='#term-cv_discretecoverage'>CV_DiscreteCoverage</a> </li>
|
527
|
+
</ul>
|
528
|
+
</p>
|
529
|
+
</div>
|
530
|
+
<p class='zzSTDTitle1'/>
|
531
|
+
<div id='clause1'>
|
532
|
+
<h1>1.  Clause 1</h1>
|
533
|
+
</div>
|
534
|
+
</div>
|
535
|
+
</body>
|
536
|
+
</html>
|
516
537
|
OUTPUT
|
517
|
-
expect((IsoDoc::PresentationXMLConvert.new({})
|
538
|
+
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
|
518
539
|
.convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
|
519
540
|
expect(xmlpp(IsoDoc::HtmlConvert.new({})
|
520
541
|
.convert("test", presxml, true))).to be_equivalent_to xmlpp(output)
|
@@ -1002,6 +1023,7 @@ RSpec.describe IsoDoc do
|
|
1002
1023
|
<eref type="inline" bibitemid="ISO712"><locality type="table"><referenceFrom>1</referenceFrom></locality>A</eref>
|
1003
1024
|
<eref type="inline" bibitemid="ISO712"><locality type="whole"></locality></eref>
|
1004
1025
|
<eref type="inline" bibitemid="ISO712"><locality type="locality:prelude"><referenceFrom>7</referenceFrom></locality></eref>
|
1026
|
+
<eref type="inline" bibitemid="ISO712"><locality type="locality:URI"><referenceFrom>7</referenceFrom></locality></eref>
|
1005
1027
|
<eref type="inline" bibitemid="ISO712" citeas="ISO 712">A</eref>
|
1006
1028
|
<eref type="inline" bibitemid="ISO712"><locality type="anchor"><referenceFrom>1</referenceFrom></locality></eref>
|
1007
1029
|
<eref type="inline" bibitemid="ISO712"><locality type="anchor"><referenceFrom>1</referenceFrom></locality><locality type="clause"><referenceFrom>1</referenceFrom></locality></eref>
|
@@ -1040,6 +1062,7 @@ RSpec.describe IsoDoc do
|
|
1040
1062
|
<eref type="inline" bibitemid="ISO712"><locality type="table"><referenceFrom>1</referenceFrom></locality>A</eref>
|
1041
1063
|
<eref type="inline" bibitemid="ISO712"><locality type="whole"/>ISO 712, Whole of text</eref>
|
1042
1064
|
<eref type="inline" bibitemid="ISO712"><locality type="locality:prelude"><referenceFrom>7</referenceFrom></locality>ISO 712, Prelude 7</eref>
|
1065
|
+
<eref type="inline" bibitemid="ISO712"><locality type="locality:URI"><referenceFrom>7</referenceFrom></locality>ISO 712, URI 7</eref>
|
1043
1066
|
<eref type="inline" bibitemid="ISO712" citeas="ISO 712">A</eref>
|
1044
1067
|
<eref type="inline" bibitemid="ISO712"><locality type="anchor"><referenceFrom>1</referenceFrom></locality>ISO 712</eref>
|
1045
1068
|
<eref type="inline" bibitemid="ISO712"><locality type="anchor"><referenceFrom>1</referenceFrom></locality><locality type="clause"><referenceFrom>1</referenceFrom></locality>ISO 712, Clause 1</eref>
|
@@ -1082,6 +1105,7 @@ RSpec.describe IsoDoc do
|
|
1082
1105
|
<a href="#ISO712">A</a>
|
1083
1106
|
<a href="#ISO712">ISO 712, Whole of text</a>
|
1084
1107
|
<a href="#ISO712">ISO 712, Prelude 7</a>
|
1108
|
+
<a href="#ISO712">ISO 712, URI 7</a>
|
1085
1109
|
<a href="#ISO712">A</a>
|
1086
1110
|
<a href='#ISO712'>ISO 712</a>
|
1087
1111
|
<a href='#ISO712'>ISO 712, Clause 1</a>
|
data/spec/isodoc/section_spec.rb
CHANGED
@@ -1778,4 +1778,129 @@ RSpec.describe IsoDoc do
|
|
1778
1778
|
expect(xmlpp(IsoDoc::HtmlConvert.new({})
|
1779
1779
|
.convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
|
1780
1780
|
end
|
1781
|
+
|
1782
|
+
it "processes annexes containing one, or more than one special sections" do
|
1783
|
+
input = <<~INPUT
|
1784
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
1785
|
+
<annex id='PP' obligation='normative'>
|
1786
|
+
<title>Glossary</title>
|
1787
|
+
<terms id='PP1' obligation='normative'>
|
1788
|
+
<term id='term-glossary'>
|
1789
|
+
<preferred>Glossary</preferred>
|
1790
|
+
</term>
|
1791
|
+
</terms>
|
1792
|
+
</annex>
|
1793
|
+
<annex id='QQ' obligation='normative'>
|
1794
|
+
<title>Glossary</title>
|
1795
|
+
<terms id='QQ1' obligation='normative'>
|
1796
|
+
<title>Term Collection</title>
|
1797
|
+
<term id='term-term-1'>
|
1798
|
+
<preferred>Term</preferred>
|
1799
|
+
</term>
|
1800
|
+
</terms>
|
1801
|
+
<terms id='QQ2' obligation='normative'>
|
1802
|
+
<title>Term Collection 2</title>
|
1803
|
+
<term id='term-term-2'>
|
1804
|
+
<preferred>Term</preferred>
|
1805
|
+
</term>
|
1806
|
+
</terms>
|
1807
|
+
</annex>
|
1808
|
+
<annex id='RR' obligation='normative'>
|
1809
|
+
<title>Glossary</title>
|
1810
|
+
<terms id='RR1' obligation='normative'>
|
1811
|
+
<title>Term Collection</title>
|
1812
|
+
<term id='term-term-3'>
|
1813
|
+
<preferred>Term</preferred>
|
1814
|
+
</term>
|
1815
|
+
</terms>
|
1816
|
+
<references id='RR2' obligation='normative'>
|
1817
|
+
<title>References</title>
|
1818
|
+
</terms>
|
1819
|
+
</annex>
|
1820
|
+
</iso-standard>
|
1821
|
+
INPUT
|
1822
|
+
presxml = <<~OUTPUT
|
1823
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
|
1824
|
+
<annex id='PP' obligation='normative' displayorder='1'>
|
1825
|
+
<title>
|
1826
|
+
<strong>Annex A</strong>
|
1827
|
+
<br/>
|
1828
|
+
(normative)
|
1829
|
+
<br/>
|
1830
|
+
<br/>
|
1831
|
+
<strong>Glossary</strong>
|
1832
|
+
</title>
|
1833
|
+
<terms id='PP1' obligation='normative'>
|
1834
|
+
<title>A.</title>
|
1835
|
+
<term id='term-glossary'>
|
1836
|
+
<name>A.1.</name>
|
1837
|
+
<preferred>Glossary</preferred>
|
1838
|
+
</term>
|
1839
|
+
</terms>
|
1840
|
+
</annex>
|
1841
|
+
<annex id='QQ' obligation='normative' displayorder='2'>
|
1842
|
+
<title>
|
1843
|
+
<strong>Annex B</strong>
|
1844
|
+
<br/>
|
1845
|
+
(normative)
|
1846
|
+
<br/>
|
1847
|
+
<br/>
|
1848
|
+
<strong>Glossary</strong>
|
1849
|
+
</title>
|
1850
|
+
<terms id='QQ1' obligation='normative'>
|
1851
|
+
<title depth='2'>
|
1852
|
+
B.1.
|
1853
|
+
<tab/>
|
1854
|
+
Term Collection
|
1855
|
+
</title>
|
1856
|
+
<term id='term-term-1'>
|
1857
|
+
<name>B.1.1.</name>
|
1858
|
+
<preferred>Term</preferred>
|
1859
|
+
</term>
|
1860
|
+
</terms>
|
1861
|
+
<terms id='QQ2' obligation='normative'>
|
1862
|
+
<title depth='2'>
|
1863
|
+
B.2.
|
1864
|
+
<tab/>
|
1865
|
+
Term Collection 2
|
1866
|
+
</title>
|
1867
|
+
<term id='term-term-2'>
|
1868
|
+
<name>B.2.1.</name>
|
1869
|
+
<preferred>Term</preferred>
|
1870
|
+
</term>
|
1871
|
+
</terms>
|
1872
|
+
</annex>
|
1873
|
+
<annex id='RR' obligation='normative' displayorder='3'>
|
1874
|
+
<title>
|
1875
|
+
<strong>Annex C</strong>
|
1876
|
+
<br/>
|
1877
|
+
(normative)
|
1878
|
+
<br/>
|
1879
|
+
<br/>
|
1880
|
+
<strong>Glossary</strong>
|
1881
|
+
</title>
|
1882
|
+
<terms id='RR1' obligation='normative'>
|
1883
|
+
<title depth='2'>
|
1884
|
+
C.1.
|
1885
|
+
<tab/>
|
1886
|
+
Term Collection
|
1887
|
+
</title>
|
1888
|
+
<term id='term-term-3'>
|
1889
|
+
<name>C.1.1.</name>
|
1890
|
+
<preferred>Term</preferred>
|
1891
|
+
</term>
|
1892
|
+
</terms>
|
1893
|
+
<references id='RR2' obligation='normative'>
|
1894
|
+
<title depth='2'>
|
1895
|
+
C.2.
|
1896
|
+
<tab/>
|
1897
|
+
References
|
1898
|
+
</title>
|
1899
|
+
</references>
|
1900
|
+
</annex>
|
1901
|
+
</iso-standard>
|
1902
|
+
OUTPUT
|
1903
|
+
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
|
1904
|
+
.convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
|
1905
|
+
end
|
1781
1906
|
end
|
data/spec/isodoc/terms_spec.rb
CHANGED
@@ -261,4 +261,120 @@ RSpec.describe IsoDoc do
|
|
261
261
|
expect(xmlpp(IsoDoc::WordConvert.new({})
|
262
262
|
.convert("test", presxml, true))).to be_equivalent_to xmlpp(word)
|
263
263
|
end
|
264
|
+
|
265
|
+
it "processes IsoXML term with multiple definitions" do
|
266
|
+
input = <<~"INPUT"
|
267
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
268
|
+
<sections>
|
269
|
+
<terms id="_terms_and_definitions" obligation="normative"><title>Terms and Definitions</title>
|
270
|
+
<p>For the purposes of this document, the following terms and definitions apply.</p>
|
271
|
+
<term id="paddy1"><preferred>paddy</preferred>
|
272
|
+
<domain>rice</domain>
|
273
|
+
<definition><p id="_eb29b35e-123e-4d1c-b50b-2714d41e747f">rice retaining its husk after threshing</p></definition>
|
274
|
+
<definition><p id="_eb29b35e-123e-4d1c-b50b-2714d41e747e">rice retaining its husk after threshing, mark 2</p>
|
275
|
+
<termsource status="modified">
|
276
|
+
<origin bibitemid="ISO7301" type="inline" citeas="ISO 7301:2011"><locality type="clause"><referenceFrom>3.1</referenceFrom></locality></origin>
|
277
|
+
<modification>
|
278
|
+
<p id="_e73a417d-ad39-417d-a4c8-20e4e2529489">The term "cargo rice" is shown as deprecated, and Note 1 to entry is not included here</p>
|
279
|
+
</modification>
|
280
|
+
</termsource>
|
281
|
+
</definition>
|
282
|
+
<termexample id="_bd57bbf1-f948-4bae-b0ce-73c00431f892" keep-with-next="true" keep-lines-together="true">
|
283
|
+
<p id="_65c9a509-9a89-4b54-a890-274126aeb55c">Foreign seeds, husks, bran, sand, dust.</p>
|
284
|
+
<ul>
|
285
|
+
<li>A</li>
|
286
|
+
</ul>
|
287
|
+
</termexample>
|
288
|
+
<termexample id="_bd57bbf1-f948-4bae-b0ce-73c00431f894">
|
289
|
+
<ul>
|
290
|
+
<li>A</li>
|
291
|
+
</ul>
|
292
|
+
</termexample>
|
293
|
+
<termsource status='identical'>
|
294
|
+
<origin citeas=''>
|
295
|
+
<termref base='IEV' target='xyz'>t1</termref>
|
296
|
+
</origin>
|
297
|
+
</termsource>
|
298
|
+
<termsource status='modified'>
|
299
|
+
<origin citeas=''>
|
300
|
+
<termref base='IEV' target='xyz'/>
|
301
|
+
</origin>
|
302
|
+
<modification>
|
303
|
+
<p id='_'>with adjustments</p>
|
304
|
+
</modification>
|
305
|
+
</termsource>
|
306
|
+
</term>
|
307
|
+
INPUT
|
308
|
+
presxml = <<~PRESXML
|
309
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
|
310
|
+
<sections>
|
311
|
+
<terms id='_terms_and_definitions' obligation='normative' displayorder='1'>
|
312
|
+
<title depth='1'>
|
313
|
+
1.
|
314
|
+
<tab/>
|
315
|
+
Terms and Definitions
|
316
|
+
</title>
|
317
|
+
<p>For the purposes of this document, the following terms and definitions apply.</p>
|
318
|
+
<term id='paddy1'>
|
319
|
+
<name>1.1.</name>
|
320
|
+
<preferred>paddy</preferred>
|
321
|
+
<domain>rice</domain>
|
322
|
+
<definition>
|
323
|
+
<ol>
|
324
|
+
<li>
|
325
|
+
<p id='_eb29b35e-123e-4d1c-b50b-2714d41e747f'>rice retaining its husk after threshing</p>
|
326
|
+
</li>
|
327
|
+
<li>
|
328
|
+
<p id='_eb29b35e-123e-4d1c-b50b-2714d41e747e'>rice retaining its husk after threshing, mark 2</p>
|
329
|
+
<termsource status='modified'>
|
330
|
+
<origin bibitemid='ISO7301' type='inline' citeas='ISO 7301:2011'>
|
331
|
+
<locality type='clause'>
|
332
|
+
<referenceFrom>3.1</referenceFrom>
|
333
|
+
</locality>
|
334
|
+
ISO 7301:2011, Clause 3.1
|
335
|
+
</origin>
|
336
|
+
<modification>
|
337
|
+
<p id='_e73a417d-ad39-417d-a4c8-20e4e2529489'>
|
338
|
+
The term "cargo rice" is shown as deprecated, and Note 1 to
|
339
|
+
entry is not included here
|
340
|
+
</p>
|
341
|
+
</modification>
|
342
|
+
</termsource>
|
343
|
+
</li>
|
344
|
+
</ol>
|
345
|
+
</definition>
|
346
|
+
<termexample id='_bd57bbf1-f948-4bae-b0ce-73c00431f892' keep-with-next='true' keep-lines-together='true'>
|
347
|
+
<name>EXAMPLE 1</name>
|
348
|
+
<p id='_65c9a509-9a89-4b54-a890-274126aeb55c'>Foreign seeds, husks, bran, sand, dust.</p>
|
349
|
+
<ul>
|
350
|
+
<li>A</li>
|
351
|
+
</ul>
|
352
|
+
</termexample>
|
353
|
+
<termexample id='_bd57bbf1-f948-4bae-b0ce-73c00431f894'>
|
354
|
+
<name>EXAMPLE 2</name>
|
355
|
+
<ul>
|
356
|
+
<li>A</li>
|
357
|
+
</ul>
|
358
|
+
</termexample>
|
359
|
+
<termsource status='identical'>
|
360
|
+
<origin citeas=''>
|
361
|
+
<termref base='IEV' target='xyz'>t1</termref>
|
362
|
+
</origin>
|
363
|
+
</termsource>
|
364
|
+
<termsource status='modified'>
|
365
|
+
<origin citeas=''>
|
366
|
+
<termref base='IEV' target='xyz'/>
|
367
|
+
</origin>
|
368
|
+
<modification>
|
369
|
+
<p id='_'>with adjustments</p>
|
370
|
+
</modification>
|
371
|
+
</termsource>
|
372
|
+
</term>
|
373
|
+
</terms>
|
374
|
+
</sections>
|
375
|
+
</iso-standard>
|
376
|
+
PRESXML
|
377
|
+
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
|
378
|
+
.convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
|
379
|
+
end
|
264
380
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: isodoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.7.
|
4
|
+
version: 1.7.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-09-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciimath
|
@@ -164,6 +164,20 @@ dependencies:
|
|
164
164
|
- - ">="
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: metanorma-utils
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
167
181
|
- !ruby/object:Gem::Dependency
|
168
182
|
name: byebug
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|