metanorma-standoc 2.0.3 → 2.0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/metanorma/standoc/base.rb +73 -23
- data/lib/metanorma/standoc/blocks.rb +1 -1
- data/lib/metanorma/standoc/blocks_notes.rb +2 -2
- data/lib/metanorma/standoc/cleanup_amend.rb +33 -30
- data/lib/metanorma/standoc/cleanup_boilerplate.rb +29 -5
- data/lib/metanorma/standoc/cleanup_ref.rb +31 -2
- data/lib/metanorma/standoc/cleanup_ref_dl.rb +25 -16
- data/lib/metanorma/standoc/cleanup_section.rb +1 -1
- data/lib/metanorma/standoc/cleanup_terms_designations.rb +4 -2
- data/lib/metanorma/standoc/cleanup_text.rb +39 -17
- data/lib/metanorma/standoc/cleanup_xref.rb +70 -8
- data/lib/metanorma/standoc/converter.rb +2 -1
- data/lib/metanorma/standoc/inline.rb +21 -12
- data/lib/metanorma/standoc/isodoc.rng +63 -3
- data/lib/metanorma/standoc/macros.rb +14 -2
- data/lib/metanorma/standoc/macros_embed.rb +35 -14
- data/lib/metanorma/standoc/macros_note.rb +4 -3
- data/lib/metanorma/standoc/processor.rb +6 -1
- data/lib/metanorma/standoc/ref.rb +14 -15
- data/lib/metanorma/standoc/ref_utility.rb +6 -5
- data/lib/metanorma/standoc/render.rb +7 -3
- data/lib/metanorma/standoc/table.rb +8 -10
- data/lib/metanorma/standoc/term_lookup_cleanup.rb +10 -6
- data/lib/metanorma/standoc/utils.rb +3 -1
- data/lib/metanorma/standoc/validate.rb +79 -10
- data/lib/metanorma/standoc/version.rb +1 -1
- data/metanorma-standoc.gemspec +2 -2
- data/spec/assets/a2.adoc +4 -2
- data/spec/assets/a3.adoc +2 -2
- data/spec/assets/a3a.adoc +7 -0
- data/spec/metanorma/base_spec.rb +1 -1
- data/spec/metanorma/cleanup_spec.rb +31 -20
- data/spec/metanorma/cleanup_terms_spec.rb +16 -4
- data/spec/metanorma/inline_spec.rb +31 -0
- data/spec/metanorma/macros_plantuml_spec.rb +41 -42
- data/spec/metanorma/macros_spec.rb +206 -4
- data/spec/metanorma/processor_spec.rb +17 -13
- data/spec/metanorma/refs_spec.rb +129 -2
- data/spec/metanorma/validate_spec.rb +108 -0
- data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +45 -45
- data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec1.yml +10 -10
- data/spec/vcr_cassettes/hide_refs.yml +39 -39
- data/spec/vcr_cassettes/isobib_get_123.yml +12 -12
- data/spec/vcr_cassettes/isobib_get_123_1.yml +23 -23
- data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +28 -28
- data/spec/vcr_cassettes/isobib_get_123_2001.yml +11 -11
- data/spec/vcr_cassettes/isobib_get_124.yml +12 -12
- data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +18 -18
- data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +75 -65
- metadata +10 -9
@@ -49,9 +49,79 @@ module Metanorma
|
|
49
49
|
iev_validate(doc.root)
|
50
50
|
concept_validate(doc, "concept", "refterm")
|
51
51
|
concept_validate(doc, "related", "preferred//name")
|
52
|
+
table_validate(doc)
|
52
53
|
@fatalerror.empty? or clean_abort(@fatalerror.join("\n"), doc.to_xml)
|
53
54
|
end
|
54
55
|
|
56
|
+
def table_validate(doc)
|
57
|
+
doc.xpath("//table[colgroup]").each do |t|
|
58
|
+
maxrowcols_validate(t, t.xpath("./colgroup/col").size)
|
59
|
+
end
|
60
|
+
doc.xpath("//table[.//*[@colspan] | .//*[@rowspan]]").each do |t|
|
61
|
+
maxrowcols_validate(t, max_td_count(t))
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def max_td_count(table)
|
66
|
+
max = 0
|
67
|
+
table.xpath(".//tr").each do |tr|
|
68
|
+
n = tr.xpath("./td | ./th").size
|
69
|
+
max < n and max = n
|
70
|
+
end
|
71
|
+
max
|
72
|
+
end
|
73
|
+
|
74
|
+
def maxrowcols_validate(table, maxcols)
|
75
|
+
cells2d = table.xpath(".//tr").each_with_object([]) { |_r, m| m << {} }
|
76
|
+
table.xpath(".//tr").each_with_index do |tr, r|
|
77
|
+
curr = 0
|
78
|
+
tr.xpath("./td | ./th").each do |td|
|
79
|
+
curr = maxcols_validate1(td, r, curr, cells2d, maxcols)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
maxrows_validate(table, cells2d)
|
83
|
+
end
|
84
|
+
|
85
|
+
# code doesn't actually do anything, since Asciidoctor refuses to generate
|
86
|
+
# table with inconsistent column count
|
87
|
+
def maxcols_validate1(tcell, row, curr, cells2d, maxcols)
|
88
|
+
rs = tcell&.attr("rowspan")&.to_i || 1
|
89
|
+
cs = tcell&.attr("colspan")&.to_i || 1
|
90
|
+
curr = table_tracker_update(cells2d, row, curr, rs, cs)
|
91
|
+
maxcols_check(curr + cs - 1, maxcols, tcell)
|
92
|
+
curr + cs
|
93
|
+
end
|
94
|
+
|
95
|
+
def table_tracker_update(cells2d, row, curr, rowspan, colspan)
|
96
|
+
cells2d[row] ||= {}
|
97
|
+
while cells2d[row][curr]
|
98
|
+
curr += 1
|
99
|
+
end
|
100
|
+
(row..(row + rowspan - 1)).each do |y2|
|
101
|
+
cells2d[y2] ||= {}
|
102
|
+
(curr..(curr + colspan - 1)).each { |x2| cells2d[y2][x2] = 1 }
|
103
|
+
end
|
104
|
+
curr
|
105
|
+
end
|
106
|
+
|
107
|
+
def maxrows_validate(table, cells2d)
|
108
|
+
if cells2d.any? { |x| x.size != cells2d.first.size }
|
109
|
+
@log.add("Table", table,
|
110
|
+
"Table rows in table are inconsistent: check rowspan")
|
111
|
+
@fatalerror << "Table rows in table are inconsistent: check rowspan"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
# if maxcols or maxrows negative, do not check them
|
116
|
+
def maxcols_check(col, maxcols, tcell)
|
117
|
+
if maxcols.positive? && col > maxcols
|
118
|
+
@log.add("Table", tcell, "Table exceeds maximum number of columns "\
|
119
|
+
"defined (#{maxcols})")
|
120
|
+
@fatalerror << "Table exceeds maximum number of columns defined "\
|
121
|
+
"(#{maxcols})"
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
55
125
|
def norm_ref_validate(doc)
|
56
126
|
found = false
|
57
127
|
doc.xpath("//references[@normative = 'true']/bibitem").each do |b|
|
@@ -71,10 +141,9 @@ module Metanorma
|
|
71
141
|
next if doc.at("//term[@id = '#{x['target']}']")
|
72
142
|
next if doc.at("//definitions//dt[@id = '#{x['target']}']")
|
73
143
|
|
74
|
-
ref = x&.at("../#{refterm}")&.text
|
75
144
|
@log.add("Anchors", x,
|
76
|
-
"#{tag.capitalize} #{
|
77
|
-
"#{x['target']}, which is not a term or symbol")
|
145
|
+
"#{tag.capitalize} #{x&.at("../#{refterm}")&.text} is "\
|
146
|
+
"pointing to #{x['target']}, which is not a term or symbol")
|
78
147
|
found = true
|
79
148
|
end
|
80
149
|
found and
|
@@ -122,23 +191,23 @@ module Metanorma
|
|
122
191
|
|
123
192
|
SVG_NS = "http://www.w3.org/2000/svg".freeze
|
124
193
|
|
194
|
+
WILDCARD_ATTRS =
|
195
|
+
"//*[@format] | //stem | //bibdata//description | "\
|
196
|
+
"//formattedref | //bibdata//note | //bibdata/abstract | "\
|
197
|
+
"//bibitem/abstract | //bibitem/note | //misc-container".freeze
|
198
|
+
|
125
199
|
# RelaxNG cannot cope well with wildcard attributes. So we strip
|
126
200
|
# any attributes from FormattedString instances (which can contain
|
127
201
|
# xs:any markup, and are signalled with @format) before validation.
|
128
202
|
def formattedstr_strip(doc)
|
129
|
-
doc.xpath("
|
130
|
-
"//formattedref | //bibdata//note | //bibdata/abstract | "\
|
131
|
-
"//bibitem/abstract | //bibitem/note | //misc-container",
|
132
|
-
"m" => SVG_NS).each do |n|
|
203
|
+
doc.xpath(WILDCARD_ATTRS, "m" => SVG_NS).each do |n|
|
133
204
|
n.elements.each do |e|
|
134
205
|
e.traverse do |e1|
|
135
206
|
e1.element? and e1.each { |k, _v| e1.delete(k) }
|
136
207
|
end
|
137
208
|
end
|
138
209
|
end
|
139
|
-
doc.xpath("//m:svg", "m" => SVG_NS).each
|
140
|
-
n.replace("<svg/>")
|
141
|
-
end
|
210
|
+
doc.xpath("//m:svg", "m" => SVG_NS).each { |n| n.replace("<svg/>") }
|
142
211
|
doc
|
143
212
|
end
|
144
213
|
|
data/metanorma-standoc.gemspec
CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.add_dependency "asciidoctor", "~> 2.0.0"
|
30
30
|
spec.add_dependency "iev", "~> 0.3.0"
|
31
31
|
spec.add_dependency "isodoc", "~> 2.0.0"
|
32
|
-
spec.add_dependency "metanorma-plugin-datastruct"
|
32
|
+
spec.add_dependency "metanorma-plugin-datastruct", "~> 0.2.0"
|
33
33
|
spec.add_dependency "metanorma-plugin-lutaml"
|
34
34
|
spec.add_dependency "ruby-jing"
|
35
35
|
# relaton-cli not just relaton, to avoid circular reference in metanorma
|
@@ -52,6 +52,6 @@ Gem::Specification.new do |spec|
|
|
52
52
|
spec.add_development_dependency "sassc", "2.4.0"
|
53
53
|
spec.add_development_dependency "simplecov", "~> 0.15"
|
54
54
|
spec.add_development_dependency "timecop", "~> 0.9"
|
55
|
-
spec.add_development_dependency "vcr", "~>
|
55
|
+
spec.add_development_dependency "vcr", "~> 6.1.0"
|
56
56
|
spec.add_development_dependency "webmock"
|
57
57
|
end
|
data/spec/assets/a2.adoc
CHANGED
data/spec/assets/a3.adoc
CHANGED
data/spec/metanorma/base_spec.rb
CHANGED
@@ -1051,7 +1051,7 @@ QU1FOiB0ZXN0Cgo=
|
|
1051
1051
|
.new(:standoc, header_footer: true)
|
1052
1052
|
.doc_extract_attributes(node)
|
1053
1053
|
|
1054
|
-
expect(options
|
1054
|
+
expect(options[:font_manifest])
|
1055
1055
|
.to eq(node[Metanorma::Standoc::Base::FONTS_MANIFEST])
|
1056
1056
|
end
|
1057
1057
|
|
@@ -9,13 +9,21 @@ RSpec.describe Metanorma::Standoc do
|
|
9
9
|
== "Quotation" A's
|
10
10
|
|
11
11
|
'24:00:00'.
|
12
|
+
|
13
|
+
_emphasis_ *strong* `monospace` "double quote" 'single quote'
|
12
14
|
INPUT
|
13
15
|
output = <<~OUTPUT
|
14
|
-
|
16
|
+
#{BLANK_HDR}
|
15
17
|
<sections>
|
16
18
|
<clause id="_" inline-header="false" obligation="normative">
|
17
19
|
<title>“Quotation” A’s</title>
|
18
20
|
<p id='_'>‘24:00:00’.</p>
|
21
|
+
<p id='_'>
|
22
|
+
<em>emphasis</em>
|
23
|
+
<strong>strong</strong>
|
24
|
+
<tt>monospace</tt>
|
25
|
+
“double quote” ‘single quote’
|
26
|
+
</p>
|
19
27
|
</clause>
|
20
28
|
</sections>
|
21
29
|
</standard-document>
|
@@ -149,6 +157,10 @@ RSpec.describe Metanorma::Standoc do
|
|
149
157
|
input = <<~INPUT
|
150
158
|
#{ASCIIDOC_BLANK_HDR}
|
151
159
|
|
160
|
+
"*word*",
|
161
|
+
|
162
|
+
"link:http://example.com[]",
|
163
|
+
|
152
164
|
"((ppt))",
|
153
165
|
|
154
166
|
"((ppm))", "((ppt))"
|
@@ -160,16 +172,16 @@ RSpec.describe Metanorma::Standoc do
|
|
160
172
|
....
|
161
173
|
INPUT
|
162
174
|
output = <<~OUTPUT
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
175
|
+
#{BLANK_HDR}
|
176
|
+
<sections>
|
177
|
+
<p id='_'>“<strong>word</strong>”,</p>
|
178
|
+
<p id='_'>“<link target='http://example.com'/>”,</p>
|
179
|
+
<p id='_'>“ppt”,
|
167
180
|
<index>
|
168
181
|
<primary>ppt</primary>
|
169
182
|
</index>
|
170
183
|
</p>
|
171
|
-
|
172
|
-
“ppm”,
|
184
|
+
<p id='_'>“ppm”,
|
173
185
|
<index>
|
174
186
|
<primary>ppm</primary>
|
175
187
|
</index>
|
@@ -178,12 +190,11 @@ RSpec.describe Metanorma::Standoc do
|
|
178
190
|
<primary>ppt</primary>
|
179
191
|
</index>
|
180
192
|
</p>
|
181
|
-
|
182
|
-
“ppm
|
193
|
+
<p id='_'>“ppm
|
183
194
|
<index>
|
184
195
|
<primary>ppm</primary>
|
185
196
|
</index>
|
186
|
-
&#
|
197
|
+
” 
|
187
198
|
</p>
|
188
199
|
<figure id='_'>
|
189
200
|
<pre id='_'>((ppm))",</pre>
|
@@ -282,7 +293,7 @@ RSpec.describe Metanorma::Standoc do
|
|
282
293
|
</localityStack>
|
283
294
|
the reference,xyz</eref>
|
284
295
|
<eref type='inline' bibitemid='iso216' citeas='ISO 216'>
|
285
|
-
<localityStack>
|
296
|
+
<localityStack connective="and">
|
286
297
|
<locality type='whole'/>
|
287
298
|
<locality type='clause'>
|
288
299
|
<referenceFrom>3</referenceFrom>
|
@@ -298,7 +309,7 @@ RSpec.describe Metanorma::Standoc do
|
|
298
309
|
<referenceFrom>the reference</referenceFrom>
|
299
310
|
</locality>
|
300
311
|
</localityStack>
|
301
|
-
<localityStack>
|
312
|
+
<localityStack connective="and">
|
302
313
|
<locality type='whole'/>
|
303
314
|
<locality type='clause'>
|
304
315
|
<referenceFrom>3</referenceFrom>
|
@@ -1116,7 +1127,7 @@ RSpec.describe Metanorma::Standoc do
|
|
1116
1127
|
<dd>
|
1117
1128
|
<p id='_'>Definition 7</p>
|
1118
1129
|
</dd>
|
1119
|
-
<dt id="symbol-
|
1130
|
+
<dt id="symbol-n">
|
1120
1131
|
<stem type='MathML'>
|
1121
1132
|
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
1122
1133
|
<mi>n</mi>
|
@@ -1178,7 +1189,7 @@ RSpec.describe Metanorma::Standoc do
|
|
1178
1189
|
<dd>
|
1179
1190
|
<p id='_'>Definition 5</p>
|
1180
1191
|
</dd>
|
1181
|
-
<dt id='symbol-
|
1192
|
+
<dt id='symbol-x-m'><stem type='MathML'>
|
1182
1193
|
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
1183
1194
|
<msub>
|
1184
1195
|
<mrow>
|
@@ -1193,7 +1204,7 @@ RSpec.describe Metanorma::Standoc do
|
|
1193
1204
|
<dd>
|
1194
1205
|
<p id='_'>Definition 4</p>
|
1195
1206
|
</dd>
|
1196
|
-
<dt id='symbol-
|
1207
|
+
<dt id='symbol-x-1'><stem type='MathML'>
|
1197
1208
|
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
1198
1209
|
<msub>
|
1199
1210
|
<mrow>
|
@@ -1212,7 +1223,7 @@ RSpec.describe Metanorma::Standoc do
|
|
1212
1223
|
<dd>
|
1213
1224
|
<p id='_'>Definition 2</p>
|
1214
1225
|
</dd>
|
1215
|
-
<dt id='symbol-
|
1226
|
+
<dt id='symbol-__x3b1_'>
|
1216
1227
|
<stem type='MathML'>
|
1217
1228
|
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
1218
1229
|
<mi>α</mi>
|
@@ -1829,13 +1840,13 @@ RSpec.describe Metanorma::Standoc do
|
|
1829
1840
|
</ext>
|
1830
1841
|
</bibdata>
|
1831
1842
|
<preface>
|
1832
|
-
<note id='
|
1843
|
+
<note id='_2cfe95f6-7ad6-aa57-8207-6f7d7928aa8e'>
|
1833
1844
|
<p id='_76d95913-a379-c60f-5144-1f09655cafa6'>
|
1834
1845
|
Note which is very important
|
1835
1846
|
<xref target='_76d95913-a379-c60f-5144-1f09655cafa6'/>
|
1836
1847
|
</p>
|
1837
1848
|
</note>
|
1838
|
-
<foreword id='
|
1849
|
+
<foreword id='_96b556cb-657c-985b-351b-ed70d8bd6fdd' obligation='informative'>
|
1839
1850
|
<title>Foreword</title>
|
1840
1851
|
<p id='_d2f825bf-3e18-6143-8777-34e59928d48c'>Foreword</p>
|
1841
1852
|
</foreword>
|
@@ -1845,7 +1856,7 @@ RSpec.describe Metanorma::Standoc do
|
|
1845
1856
|
</introduction>
|
1846
1857
|
</preface>
|
1847
1858
|
<sections>
|
1848
|
-
<admonition id='
|
1859
|
+
<admonition id='_6abb9105-854c-e79c-c351-73a56d6ca81f' type='important'>
|
1849
1860
|
<p id='_69ec375e-c992-5be3-76dd-a2311f9bb6cc'>Notice which is very important</p>
|
1850
1861
|
</admonition>
|
1851
1862
|
<clause id='_scope' type='scope' inline-header='false' obligation='normative'>
|
@@ -1858,7 +1869,7 @@ RSpec.describe Metanorma::Standoc do
|
|
1858
1869
|
input1 = xmlpp(Asciidoctor.convert(input, *OPTIONS))
|
1859
1870
|
.sub(/<p id='([^']+)'>(\s+)Note which is very important(\s+)<xref target='a'/,
|
1860
1871
|
"<p id='\\1'>\\2Note which is very important\\3<xref target='\\1'")
|
1861
|
-
expect(input1)
|
1872
|
+
expect(xmlpp(input1))
|
1862
1873
|
.to be_equivalent_to xmlpp(output)
|
1863
1874
|
end
|
1864
1875
|
|
@@ -3,6 +3,7 @@ require "relaton_iec"
|
|
3
3
|
require "fileutils"
|
4
4
|
|
5
5
|
RSpec.describe Metanorma::Standoc do
|
6
|
+
=begin
|
6
7
|
it "processes term and designation metadata and term sources" do
|
7
8
|
input = <<~INPUT
|
8
9
|
#{ASCIIDOC_BLANK_HDR}
|
@@ -180,8 +181,9 @@ RSpec.describe Metanorma::Standoc do
|
|
180
181
|
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
181
182
|
.to be_equivalent_to xmlpp(output)
|
182
183
|
end
|
183
|
-
|
184
|
-
it "permits multiple preferred terms
|
184
|
+
=end
|
185
|
+
it "permits multiple preferred terms and admitted terms, "\
|
186
|
+
"and treats them as synonyms in concepts" do
|
185
187
|
input = <<~INPUT
|
186
188
|
#{ASCIIDOC_BLANK_HDR}
|
187
189
|
== Terms and Definitions
|
@@ -209,6 +211,9 @@ RSpec.describe Metanorma::Standoc do
|
|
209
211
|
{{First Designation}}
|
210
212
|
|
211
213
|
{{Second Designation}}
|
214
|
+
|
215
|
+
{{Third Designation}}
|
216
|
+
|
212
217
|
INPUT
|
213
218
|
output = <<~OUTPUT
|
214
219
|
#{BLANK_HDR}
|
@@ -279,11 +284,18 @@ RSpec.describe Metanorma::Standoc do
|
|
279
284
|
</p>
|
280
285
|
<p id='_'>
|
281
286
|
<concept>
|
282
|
-
<refterm>
|
287
|
+
<refterm>First Designation</refterm>
|
283
288
|
<renderterm>Second Designation</renderterm>
|
284
289
|
<xref target='term-first-designation'/>
|
285
290
|
</concept>
|
286
291
|
</p>
|
292
|
+
<p id='_'>
|
293
|
+
<concept>
|
294
|
+
<refterm>First Designation</refterm>
|
295
|
+
<renderterm>Third Designation</renderterm>
|
296
|
+
<xref target='term-first-designation'/>
|
297
|
+
</concept>
|
298
|
+
</p>
|
287
299
|
</clause>
|
288
300
|
</sections>
|
289
301
|
</standard-document>
|
@@ -728,7 +740,7 @@ RSpec.describe Metanorma::Standoc do
|
|
728
740
|
<terms id='_' obligation='normative'>
|
729
741
|
<title>Terms and definitions</title>
|
730
742
|
<p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
|
731
|
-
<term id='term-
|
743
|
+
<term id='term-t90'>
|
732
744
|
<preferred>
|
733
745
|
<letter-symbol>
|
734
746
|
<name>
|
@@ -444,6 +444,37 @@ RSpec.describe Metanorma::Standoc do
|
|
444
444
|
.to be_equivalent_to(output)
|
445
445
|
end
|
446
446
|
|
447
|
+
it "processes combinations of crossreferences" do
|
448
|
+
input = <<~INPUT
|
449
|
+
#{ASCIIDOC_BLANK_HDR}
|
450
|
+
== Section
|
451
|
+
|
452
|
+
<<ref1;to!ref2>>
|
453
|
+
<<from!ref1;to!ref2,text>>
|
454
|
+
<<ref1;ref2>>
|
455
|
+
<<ref1;and!ref2>>
|
456
|
+
<<ref1;or!ref2,text>>
|
457
|
+
<<from!ref1;to!ref2;and!ref3;to!ref4>>
|
458
|
+
INPUT
|
459
|
+
output = <<~OUTPUT
|
460
|
+
#{BLANK_HDR}
|
461
|
+
<sections>
|
462
|
+
<clause id="_" inline-header="false" obligation="normative">
|
463
|
+
<title>Section</title>
|
464
|
+
<p id="_"><xref target="ref1"><location target="ref1" connective="from"/><location target="ref2" connective="to"/></xref>
|
465
|
+
<xref target="ref1"><location target="ref1" connective="from"/><location target="ref2" connective="to"/>text</xref>
|
466
|
+
<xref target="ref1"><location target="ref1" connective="and"/><location target="ref2" connective="and"/></xref>
|
467
|
+
<xref target="ref1"><location target="ref1" connective="and"/><location target="ref2" connective="and"/></xref>
|
468
|
+
<xref target="ref1"><location target="ref1" connective="and"/><location target="ref2" connective="or"/>text</xref>
|
469
|
+
<xref target="ref1"><location target="ref1" connective="from"/><location target="ref2" connective="to"/><location target="ref3" connective="and"/><location target="ref4" connective="to"/></xref></p>
|
470
|
+
</clause>
|
471
|
+
</sections>
|
472
|
+
</standard-document>
|
473
|
+
OUTPUT
|
474
|
+
expect((strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
475
|
+
.to be_equivalent_to(output)
|
476
|
+
end
|
477
|
+
|
447
478
|
it "processes bibliographic anchors" do
|
448
479
|
input = <<~INPUT
|
449
480
|
#{ASCIIDOC_BLANK_HDR}
|
@@ -129,51 +129,50 @@ RSpec.describe Metanorma::Standoc do
|
|
129
129
|
expect(
|
130
130
|
xmlpp(
|
131
131
|
strip_guid(Asciidoctor.convert(input, *OPTIONS))
|
132
|
-
.gsub(%r{"
|
133
|
-
'"spec/assets/_.'),
|
132
|
+
.gsub(%r{"[^".]+spec/assets/lutaml/[^./"]+\.png},
|
133
|
+
'"spec/assets/_.png'),
|
134
134
|
),
|
135
|
-
)
|
136
|
-
.to(be_equivalent_to(xmlpp(output)))
|
135
|
+
).to(be_equivalent_to(xmlpp(output)))
|
137
136
|
end
|
137
|
+
end
|
138
138
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
end
|
139
|
+
context "when inline macro, path supplied as the second arg" do
|
140
|
+
let(:example_file) { fixtures_path("diagram_definitions.lutaml") }
|
141
|
+
let(:input) do
|
142
|
+
<<~TEXT
|
143
|
+
= Document title
|
144
|
+
Author
|
145
|
+
:docfile: test.adoc
|
146
|
+
:nodoc:
|
147
|
+
:novalid:
|
148
|
+
:no-isobib:
|
149
|
+
:imagesdir: spec/assets
|
150
|
+
:data-uri-image: false
|
151
|
+
|
152
|
+
lutaml_diagram::#{example_file}[]
|
153
|
+
|
154
|
+
TEXT
|
155
|
+
end
|
156
|
+
let(:output) do
|
157
|
+
<<~TEXT
|
158
|
+
#{BLANK_HDR}
|
159
|
+
<sections>
|
160
|
+
<figure id="_">
|
161
|
+
<image src="spec/assets/_.png" id="_" mimetype="image/png" height="auto" width="auto"/>
|
162
|
+
</figure>
|
163
|
+
</sections>
|
164
|
+
</standard-document>
|
165
|
+
TEXT
|
166
|
+
end
|
167
|
+
|
168
|
+
it "correctly renders input" do
|
169
|
+
expect(
|
170
|
+
xmlpp(
|
171
|
+
strip_guid(Asciidoctor.convert(input, *OPTIONS))
|
172
|
+
.gsub(%r{"[^".]+spec/assets/lutaml/[^./"]+\.png},
|
173
|
+
'"spec/assets/_.png'),
|
174
|
+
),
|
175
|
+
).to(be_equivalent_to(xmlpp(output)))
|
177
176
|
end
|
178
177
|
end
|
179
178
|
|