metanorma-standoc 1.9.4 → 1.10.3
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 +1 -1
- data/.rubocop.yml +1 -1
- data/lib/asciidoctor/standoc/base.rb +0 -1
- data/lib/asciidoctor/standoc/blocks.rb +1 -1
- data/lib/asciidoctor/standoc/cleanup.rb +61 -2
- data/lib/asciidoctor/standoc/cleanup_block.rb +0 -1
- data/lib/asciidoctor/standoc/cleanup_boilerplate.rb +2 -2
- data/lib/asciidoctor/standoc/cleanup_footnotes.rb +0 -1
- data/lib/asciidoctor/standoc/cleanup_inline.rb +117 -77
- data/lib/asciidoctor/standoc/cleanup_maths.rb +0 -1
- data/lib/asciidoctor/standoc/cleanup_ref.rb +7 -0
- data/lib/asciidoctor/standoc/cleanup_section.rb +0 -1
- data/lib/asciidoctor/standoc/cleanup_terms.rb +19 -18
- data/lib/asciidoctor/standoc/converter.rb +3 -0
- data/lib/asciidoctor/standoc/datamodel/diagram_preprocessor.rb +22 -21
- data/lib/asciidoctor/standoc/front.rb +0 -1
- data/lib/asciidoctor/standoc/front_contributor.rb +0 -1
- data/lib/asciidoctor/standoc/inline.rb +20 -17
- data/lib/asciidoctor/standoc/isodoc.rng +56 -8
- data/lib/asciidoctor/standoc/macros.rb +25 -5
- data/lib/asciidoctor/standoc/macros_plantuml.rb +21 -23
- data/lib/asciidoctor/standoc/macros_terms.rb +60 -23
- data/lib/asciidoctor/standoc/ref.rb +60 -56
- data/lib/asciidoctor/standoc/section.rb +19 -12
- data/lib/asciidoctor/standoc/term_lookup_cleanup.rb +69 -30
- data/lib/asciidoctor/standoc/terms.rb +1 -1
- data/lib/asciidoctor/standoc/utils.rb +0 -1
- data/lib/asciidoctor/standoc/validate.rb +22 -8
- data/lib/isodoc/html/html_titlepage.html +81 -0
- data/lib/isodoc/html/htmlstyle.css +983 -0
- data/lib/isodoc/html/htmlstyle.scss +714 -0
- data/lib/isodoc/html/scripts.html +71 -0
- data/lib/metanorma/standoc/processor.rb +16 -7
- data/lib/metanorma/standoc/version.rb +1 -1
- data/metanorma-standoc.gemspec +3 -3
- data/spec/asciidoctor/blocks_spec.rb +8 -8
- data/spec/asciidoctor/cleanup_sections_spec.rb +899 -864
- data/spec/asciidoctor/cleanup_spec.rb +85 -20
- data/spec/asciidoctor/isobib_cache_spec.rb +4 -6
- data/spec/asciidoctor/lists_spec.rb +147 -135
- data/spec/asciidoctor/macros_json2text_spec.rb +1 -1
- data/spec/asciidoctor/macros_plantuml_spec.rb +165 -104
- data/spec/asciidoctor/macros_spec.rb +813 -168
- data/spec/asciidoctor/refs_spec.rb +12 -12
- data/spec/asciidoctor/validate_spec.rb +76 -20
- data/spec/support/shared_examples/structured_data_2_text_preprocessor.rb +34 -34
- data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +50 -50
- data/spec/vcr_cassettes/isobib_get_123.yml +13 -13
- data/spec/vcr_cassettes/isobib_get_123_1.yml +26 -26
- data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +34 -34
- data/spec/vcr_cassettes/isobib_get_123_2001.yml +14 -14
- data/spec/vcr_cassettes/isobib_get_124.yml +11 -11
- data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +14 -14
- data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +51 -61
- metadata +11 -7
@@ -2,7 +2,7 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
RSpec.describe Asciidoctor::Standoc do
|
4
4
|
it "processes the PlantUML macro" do
|
5
|
-
|
5
|
+
input = <<~INPUT
|
6
6
|
#{ASCIIDOC_BLANK_HDR}
|
7
7
|
|
8
8
|
[plantuml]
|
@@ -36,24 +36,27 @@ RSpec.describe Asciidoctor::Standoc do
|
|
36
36
|
@enduml
|
37
37
|
....
|
38
38
|
INPUT
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
39
|
+
output = <<~OUTPUT
|
40
|
+
#{BLANK_HDR}
|
41
|
+
<sections><figure id="_">
|
42
|
+
<image src="plantuml/_.png" id="_" mimetype="image/png" height="auto" width="auto"/>
|
43
|
+
</figure>
|
44
|
+
<figure id="_">
|
45
|
+
<image src="plantuml/_.png" id="_" mimetype="image/png" height="auto" width="auto"/>
|
46
|
+
</figure>
|
47
|
+
<figure id="_">
|
48
|
+
<image src="plantuml/filename.png" id="_" mimetype="image/png" height="auto" width="auto"/>
|
49
|
+
</figure>
|
50
|
+
</sections>
|
51
|
+
</standard-document>
|
52
52
|
OUTPUT
|
53
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))
|
54
|
+
.gsub(%r{plantuml/plantuml[^./]+\.}, "plantuml/_.")))
|
55
|
+
.to be_equivalent_to xmlpp(output)
|
53
56
|
end
|
54
57
|
|
55
58
|
it "processes the PlantUML macro with imagesdir" do
|
56
|
-
|
59
|
+
input = <<~INPUT
|
57
60
|
= Document title
|
58
61
|
Author
|
59
62
|
:docfile: test.adoc
|
@@ -72,18 +75,22 @@ RSpec.describe Asciidoctor::Standoc do
|
|
72
75
|
Alice <-- Bob: another authentication Response
|
73
76
|
@enduml
|
74
77
|
....
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
</
|
82
|
-
</
|
83
|
-
|
84
|
-
|
78
|
+
INPUT
|
79
|
+
output = <<~OUTPUT
|
80
|
+
#{BLANK_HDR}
|
81
|
+
<sections>
|
82
|
+
<figure id="_">
|
83
|
+
<image src="spec/assets/_.png" id="_" mimetype="image/png" height="auto" width="auto"/>
|
84
|
+
</figure>
|
85
|
+
</sections>
|
86
|
+
</standard-document>
|
87
|
+
OUTPUT
|
88
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))
|
89
|
+
.gsub(%r{spec/assets/[^./]+\.}, "spec/assets/_.")))
|
90
|
+
.to be_equivalent_to xmlpp(output)
|
91
|
+
end
|
85
92
|
|
86
|
-
context
|
93
|
+
context "when lutaml_diagram" do
|
87
94
|
let(:input) do
|
88
95
|
<<~"OUTPUT"
|
89
96
|
= Document title
|
@@ -106,13 +113,13 @@ OUTPUT
|
|
106
113
|
end
|
107
114
|
let(:output) do
|
108
115
|
<<~"OUTPUT"
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
+
#{BLANK_HDR}
|
117
|
+
<sections>
|
118
|
+
<figure id="_">
|
119
|
+
<image src="spec/assets/_.png" id="_" mimetype="image/png" height="auto" width="auto"/>
|
120
|
+
</figure>
|
121
|
+
</sections>
|
122
|
+
</standard-document>
|
116
123
|
OUTPUT
|
117
124
|
end
|
118
125
|
|
@@ -120,12 +127,54 @@ OUTPUT
|
|
120
127
|
expect(
|
121
128
|
xmlpp(
|
122
129
|
strip_guid(Asciidoctor.convert(input, *OPTIONS))
|
123
|
-
.gsub(%r{".+spec
|
124
|
-
|
130
|
+
.gsub(%r{".+spec/assets/lutaml/[^./]+\.},
|
131
|
+
'"spec/assets/_.'),
|
132
|
+
),
|
133
|
+
)
|
134
|
+
.to(be_equivalent_to(xmlpp(output)))
|
135
|
+
end
|
136
|
+
|
137
|
+
context "when inline macro, path supplied as the second arg" do
|
138
|
+
let(:example_file) { fixtures_path('diagram_definitions.lutaml') }
|
139
|
+
let(:input) do
|
140
|
+
<<~TEXT
|
141
|
+
= Document title
|
142
|
+
Author
|
143
|
+
:docfile: test.adoc
|
144
|
+
:nodoc:
|
145
|
+
:novalid:
|
146
|
+
:no-isobib:
|
147
|
+
:imagesdir: spec/assets
|
148
|
+
|
149
|
+
lutaml_diagram::#{example_file}[]
|
150
|
+
|
151
|
+
TEXT
|
152
|
+
end
|
153
|
+
let(:output) do
|
154
|
+
<<~TEXT
|
155
|
+
#{BLANK_HDR}
|
156
|
+
<sections>
|
157
|
+
<figure id="_">
|
158
|
+
<image src="spec/assets/_.png" id="_" mimetype="image/png" height="auto" width="auto"/>
|
159
|
+
</figure>
|
160
|
+
</sections>
|
161
|
+
</standard-document>
|
162
|
+
TEXT
|
163
|
+
end
|
164
|
+
|
165
|
+
it "correctly renders input" do
|
166
|
+
expect(
|
167
|
+
xmlpp(
|
168
|
+
strip_guid(Asciidoctor.convert(input, *OPTIONS))
|
169
|
+
.gsub(%r{".+spec/assets/lutaml/[^./]+\.},
|
170
|
+
'"spec/assets/_.'),
|
171
|
+
),
|
172
|
+
).to(be_equivalent_to(xmlpp(output)))
|
173
|
+
end
|
125
174
|
end
|
126
175
|
end
|
127
176
|
|
128
|
-
context
|
177
|
+
context "when lutaml_uml_attributes_table" do
|
129
178
|
let(:example_file) { fixtures_path("diagram_definitions.lutaml") }
|
130
179
|
let(:input) do
|
131
180
|
<<~"OUTPUT"
|
@@ -142,59 +191,61 @@ OUTPUT
|
|
142
191
|
end
|
143
192
|
let(:output) do
|
144
193
|
<<~"OUTPUT"
|
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
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
194
|
+
#{BLANK_HDR}
|
195
|
+
<sections>
|
196
|
+
<clause id='_' inline-header='false' obligation='normative'>
|
197
|
+
<title>AttributeProfile</title>
|
198
|
+
<table id='_'>
|
199
|
+
<name>AttributeProfile attributes</name>
|
200
|
+
<thead>
|
201
|
+
<tr>
|
202
|
+
<th valign='top' align='left'>Name</th>
|
203
|
+
<th valign='top' align='left'>Definition</th>
|
204
|
+
<th valign='top' align='left'>Mandatory/ Optional/ Conditional</th>
|
205
|
+
<th valign='top' align='left'>Max Occur</th>
|
206
|
+
<th valign='top' align='left'>Data Type</th>
|
207
|
+
</tr>
|
208
|
+
</thead>
|
209
|
+
<tbody>
|
210
|
+
<tr>
|
211
|
+
<td valign='top' align='left'>addressClassProfile</td>
|
212
|
+
<td valign='top' align='left'></td>
|
213
|
+
<td valign='top' align='left'>O</td>
|
214
|
+
<td valign='top' align='left'>1</td>
|
215
|
+
<td valign='top' align='left'>
|
216
|
+
<tt>CharacterString</tt>
|
217
|
+
</td>
|
218
|
+
</tr>
|
219
|
+
<tr>
|
220
|
+
<td valign='top' align='left'>imlicistAttributeProfile</td>
|
221
|
+
<td valign='top' align='left'>this is attribute definition with multiply lines</td>
|
222
|
+
<td valign='top' align='left'>O</td>
|
223
|
+
<td valign='top' align='left'>1</td>
|
224
|
+
<td valign='top' align='left'>
|
225
|
+
<tt>CharacterString</tt>
|
226
|
+
</td>
|
227
|
+
</tr>
|
228
|
+
</tbody>
|
229
|
+
</table>
|
230
|
+
</clause>
|
231
|
+
</sections>
|
232
|
+
</standard-document>
|
184
233
|
OUTPUT
|
185
234
|
end
|
186
235
|
|
187
236
|
it "processes the lutaml_uml_attributes_table macro" do
|
188
237
|
expect(
|
189
238
|
xmlpp(
|
190
|
-
strip_guid(Asciidoctor.convert(input, *OPTIONS))
|
239
|
+
strip_guid(Asciidoctor.convert(input, *OPTIONS)),
|
240
|
+
),
|
241
|
+
)
|
191
242
|
.to(be_equivalent_to(xmlpp(output)))
|
192
243
|
end
|
193
244
|
end
|
194
245
|
|
195
246
|
it "processes the PlantUML macro with PlantUML disabled" do
|
196
247
|
mock_plantuml_disabled
|
197
|
-
|
248
|
+
input = <<~INPUT
|
198
249
|
#{ASCIIDOC_BLANK_HDR}
|
199
250
|
|
200
251
|
[plantuml]
|
@@ -208,9 +259,11 @@ OUTPUT
|
|
208
259
|
@enduml
|
209
260
|
....
|
210
261
|
INPUT
|
262
|
+
expect { Asciidoctor.convert(input, *OPTIONS) }
|
263
|
+
.to output(%r{PlantUML not installed}).to_stderr
|
211
264
|
|
212
265
|
mock_plantuml_disabled
|
213
|
-
|
266
|
+
input = <<~INPUT
|
214
267
|
#{ASCIIDOC_BLANK_HDR}
|
215
268
|
|
216
269
|
[plantuml]
|
@@ -224,23 +277,26 @@ OUTPUT
|
|
224
277
|
@enduml
|
225
278
|
....
|
226
279
|
INPUT
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
Alice
|
235
|
-
|
236
|
-
|
237
|
-
|
280
|
+
output = <<~OUTPUT
|
281
|
+
#{BLANK_HDR}
|
282
|
+
<sections>
|
283
|
+
<sourcecode id="_" lang="plantuml">@startuml
|
284
|
+
Alice -> Bob: Authentication Request
|
285
|
+
Bob --> Alice: Authentication Response
|
286
|
+
|
287
|
+
Alice -> Bob: Another authentication Request
|
288
|
+
Alice <-- Bob: another authentication Response
|
289
|
+
@enduml</sourcecode>
|
290
|
+
</sections>
|
291
|
+
</standard-document>
|
238
292
|
OUTPUT
|
293
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
294
|
+
.to be_equivalent_to xmlpp(output)
|
239
295
|
end
|
240
296
|
|
241
297
|
it "processes the PlantUML macro with localdir unwritable" do
|
242
298
|
mock_localdir_unwritable
|
243
|
-
|
299
|
+
input = <<~INPUT
|
244
300
|
#{ASCIIDOC_BLANK_HDR}
|
245
301
|
|
246
302
|
[plantuml]
|
@@ -254,9 +310,11 @@ Alice <-- Bob: another authentication Response
|
|
254
310
|
@enduml
|
255
311
|
....
|
256
312
|
INPUT
|
313
|
+
expect { Asciidoctor.convert(input, *OPTIONS) }
|
314
|
+
.to output(%r{not writable for PlantUML}).to_stderr
|
257
315
|
|
258
316
|
mock_localdir_unwritable
|
259
|
-
|
317
|
+
input = <<~INPUT
|
260
318
|
#{ASCIIDOC_BLANK_HDR}
|
261
319
|
|
262
320
|
[plantuml]
|
@@ -270,26 +328,29 @@ Alice <-- Bob: another authentication Response
|
|
270
328
|
@enduml
|
271
329
|
....
|
272
330
|
INPUT
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
Alice
|
281
|
-
|
282
|
-
|
283
|
-
|
331
|
+
output = <<~OUTPUT
|
332
|
+
#{BLANK_HDR}
|
333
|
+
<sections>
|
334
|
+
<sourcecode id="_" lang="plantuml">@startuml
|
335
|
+
Alice -> Bob: Authentication Request
|
336
|
+
Bob --> Alice: Authentication Response
|
337
|
+
|
338
|
+
Alice -> Bob: Another authentication Request
|
339
|
+
Alice <-- Bob: another authentication Response
|
340
|
+
@enduml</sourcecode>
|
341
|
+
</sections>
|
342
|
+
</standard-document>
|
284
343
|
OUTPUT
|
344
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
345
|
+
.to be_equivalent_to xmlpp(output)
|
285
346
|
end
|
286
347
|
|
287
348
|
private
|
288
349
|
|
289
350
|
def mock_plantuml_disabled
|
290
|
-
expect(Asciidoctor::Standoc::PlantUMLBlockMacroBackend)
|
351
|
+
expect(Asciidoctor::Standoc::PlantUMLBlockMacroBackend)
|
352
|
+
.to receive(:plantuml_installed?) do
|
291
353
|
raise "PlantUML not installed"
|
292
|
-
false
|
293
354
|
end
|
294
355
|
end
|
295
356
|
|
@@ -2,7 +2,7 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
RSpec.describe Asciidoctor::Standoc do
|
4
4
|
it "processes the Asciidoctor::Standoc inline macros" do
|
5
|
-
|
5
|
+
input = <<~INPUT
|
6
6
|
#{ASCIIDOC_BLANK_HDR}
|
7
7
|
alt:[term1]
|
8
8
|
deprecated:[term1]
|
@@ -15,6 +15,7 @@ RSpec.describe Asciidoctor::Standoc do
|
|
15
15
|
== Bibliography
|
16
16
|
* [[[ref1,XYZ 123]]] _Title_
|
17
17
|
INPUT
|
18
|
+
output = <<~OUTPUT
|
18
19
|
#{BLANK_HDR}
|
19
20
|
<preface>
|
20
21
|
<foreword id='_' obligation='informative'>
|
@@ -48,10 +49,12 @@ RSpec.describe Asciidoctor::Standoc do
|
|
48
49
|
</bibliography>
|
49
50
|
</standard-document>
|
50
51
|
OUTPUT
|
52
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
53
|
+
.to be_equivalent_to xmlpp(output)
|
51
54
|
end
|
52
55
|
|
53
56
|
it "processes the Asciidoctor::Standoc index macros" do
|
54
|
-
|
57
|
+
input = <<~INPUT
|
55
58
|
#{ASCIIDOC_BLANK_HDR}
|
56
59
|
index:also[]
|
57
60
|
index:see[A]
|
@@ -67,6 +70,7 @@ RSpec.describe Asciidoctor::Standoc do
|
|
67
70
|
|
68
71
|
Text [[id3]]
|
69
72
|
INPUT
|
73
|
+
output = <<~OUTPUT
|
70
74
|
#{BLANK_HDR}
|
71
75
|
<sections>
|
72
76
|
<p id='_'>
|
@@ -117,16 +121,19 @@ RSpec.describe Asciidoctor::Standoc do
|
|
117
121
|
</sections>
|
118
122
|
</standard-document>
|
119
123
|
OUTPUT
|
124
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
125
|
+
.to be_equivalent_to xmlpp(output)
|
120
126
|
end
|
121
127
|
|
122
128
|
it "processes the Asciidoctor::Standoc variant macros" do
|
123
|
-
|
129
|
+
input = <<~INPUT
|
124
130
|
#{ASCIIDOC_BLANK_HDR}
|
125
131
|
== lang:en[English] lang:fr-Latn[Français]
|
126
132
|
|
127
133
|
this lang:en[English] lang:fr-Latn[Français] section is lang:en[silly] lang:fr[fou]
|
128
134
|
|
129
135
|
INPUT
|
136
|
+
output = <<~OUTPUT
|
130
137
|
#{BLANK_HDR}
|
131
138
|
<sections>
|
132
139
|
<clause id='_' inline-header='false' obligation='normative'>
|
@@ -150,134 +157,142 @@ RSpec.describe Asciidoctor::Standoc do
|
|
150
157
|
</sections>
|
151
158
|
</standard-document>
|
152
159
|
OUTPUT
|
160
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
161
|
+
.to be_equivalent_to xmlpp(output)
|
153
162
|
end
|
154
163
|
|
155
164
|
it "processes the Asciidoctor::Standoc concept macros" do
|
156
|
-
|
165
|
+
input = <<~INPUT
|
157
166
|
#{ASCIIDOC_BLANK_HDR}
|
158
167
|
{{clause1}}
|
168
|
+
term:[clause1]
|
159
169
|
{{clause1,w\[o\]rd}}
|
170
|
+
term:[clause1,w[o]rd]
|
160
171
|
{{clause1,w\[o\]rd,term}}
|
161
172
|
{{blah}}
|
173
|
+
term:[blah]
|
162
174
|
{{blah,word}}
|
163
|
-
|
164
|
-
{{blah,
|
165
|
-
{{blah,
|
166
|
-
{{blah,
|
167
|
-
{{blah,clause=3.1,figure=a}}
|
168
|
-
{{blah,clause=3.1,figure=a,word}}
|
169
|
-
{{blah,clause=3.1,figure=a,word,term}}
|
170
|
-
{{IEV:135-13-13}}
|
171
|
-
{{IEV:135-13-13,word}}
|
172
|
-
{{IEV:135-13-13,word,term}}
|
175
|
+
term:[blah,word]
|
176
|
+
{{blah,term,word}}
|
177
|
+
{{blah,term,word,xref}}
|
178
|
+
{{blah,term,word,xref,option="noital,noref"}}
|
173
179
|
|
174
180
|
[[clause1]]
|
175
181
|
== Clause
|
176
182
|
Terms are defined here
|
177
|
-
|
178
|
-
[bibliography]
|
179
|
-
== Bibliography
|
180
|
-
* [[[blah,blah]]] _Blah_
|
181
183
|
INPUT
|
184
|
+
output = <<~OUTPUT
|
182
185
|
#{BLANK_HDR}
|
183
186
|
<preface>
|
184
187
|
<foreword id='_' obligation='informative'>
|
185
188
|
<title>Foreword</title>
|
186
189
|
<p id='_'>
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
<
|
236
|
-
|
237
|
-
|
238
|
-
<
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
<
|
251
|
-
</
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
<
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
<
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
190
|
+
<concept>
|
191
|
+
<strong>
|
192
|
+
term
|
193
|
+
<tt>clause1</tt>
|
194
|
+
not resolved via ID
|
195
|
+
<tt>clause1</tt>
|
196
|
+
</strong>
|
197
|
+
</concept>
|
198
|
+
<concept>
|
199
|
+
<strong>
|
200
|
+
term
|
201
|
+
<tt>clause1</tt>
|
202
|
+
not resolved via ID
|
203
|
+
<tt>clause1</tt>
|
204
|
+
</strong>
|
205
|
+
</concept>
|
206
|
+
<concept>
|
207
|
+
<strong>
|
208
|
+
term
|
209
|
+
<tt>clause1</tt>, display <tt>w[o]rd</tt>
|
210
|
+
not resolved via ID
|
211
|
+
<tt>clause1</tt>
|
212
|
+
</strong>
|
213
|
+
</concept>
|
214
|
+
<concept>
|
215
|
+
<strong>
|
216
|
+
term
|
217
|
+
<tt>clause1</tt>, display <tt>w[o]rd</tt>
|
218
|
+
not resolved via ID
|
219
|
+
<tt>clause1</tt>
|
220
|
+
</strong>
|
221
|
+
</concept>
|
222
|
+
<concept>
|
223
|
+
<strong>
|
224
|
+
term
|
225
|
+
<tt>clause1</tt>, display <tt>w[o]rd</tt>
|
226
|
+
not resolved via ID
|
227
|
+
<tt>clause1</tt>
|
228
|
+
</strong>
|
229
|
+
</concept>
|
230
|
+
<concept>
|
231
|
+
<strong>
|
232
|
+
term
|
233
|
+
<tt>blah</tt>
|
234
|
+
not resolved via ID
|
235
|
+
<tt>blah</tt>
|
236
|
+
</strong>
|
237
|
+
</concept>
|
238
|
+
<concept>
|
239
|
+
<strong>
|
240
|
+
term
|
241
|
+
<tt>blah</tt>
|
242
|
+
not resolved via ID
|
243
|
+
<tt>blah</tt>
|
244
|
+
</strong>
|
245
|
+
</concept>
|
246
|
+
<concept>
|
247
|
+
<strong>
|
248
|
+
term
|
249
|
+
<tt>blah</tt>
|
250
|
+
, display
|
251
|
+
<tt>word</tt>
|
252
|
+
not resolved via ID
|
253
|
+
<tt>blah</tt>
|
254
|
+
</strong>
|
255
|
+
</concept>
|
256
|
+
<concept>
|
257
|
+
<strong>
|
258
|
+
term
|
259
|
+
<tt>blah</tt>
|
260
|
+
, display
|
261
|
+
<tt>word</tt>
|
262
|
+
not resolved via ID
|
263
|
+
<tt>blah</tt>
|
264
|
+
</strong>
|
265
|
+
</concept>
|
266
|
+
<concept>
|
267
|
+
<strong>
|
268
|
+
term
|
269
|
+
<tt>blah</tt>
|
270
|
+
, display
|
271
|
+
<tt>term</tt>
|
272
|
+
not resolved via ID
|
273
|
+
<tt>blah</tt>
|
274
|
+
</strong>
|
275
|
+
</concept>
|
276
|
+
<concept>
|
277
|
+
<strong>
|
278
|
+
term
|
279
|
+
<tt>blah</tt>
|
280
|
+
, display
|
281
|
+
<tt>term</tt>
|
282
|
+
not resolved via ID
|
283
|
+
<tt>blah</tt>
|
284
|
+
</strong>
|
285
|
+
</concept>
|
286
|
+
<concept ital='false' ref='false'>
|
287
|
+
<strong>
|
288
|
+
term
|
289
|
+
<tt>blah</tt>
|
290
|
+
, display
|
291
|
+
<tt>term</tt>
|
292
|
+
not resolved via ID
|
293
|
+
<tt>blah</tt>
|
294
|
+
</strong>
|
295
|
+
</concept>
|
281
296
|
</p>
|
282
297
|
</foreword>
|
283
298
|
</preface>
|
@@ -287,23 +302,438 @@ RSpec.describe Asciidoctor::Standoc do
|
|
287
302
|
<p id='_'>Terms are defined here</p>
|
288
303
|
</clause>
|
289
304
|
</sections>
|
290
|
-
<bibliography>
|
291
|
-
<references id='_' obligation='informative' normative="false">
|
292
|
-
<title>Bibliography</title>
|
293
|
-
<bibitem id='blah'>
|
294
|
-
<formattedref format='application/x-isodoc+xml'>
|
295
|
-
<em>Blah</em>
|
296
|
-
</formattedref>
|
297
|
-
<docidentifier>blah</docidentifier>
|
298
|
-
</bibitem>
|
299
|
-
</references>
|
300
|
-
</bibliography>
|
301
305
|
</standard-document>
|
302
306
|
OUTPUT
|
307
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
308
|
+
.to be_equivalent_to xmlpp(output)
|
309
|
+
end
|
310
|
+
|
311
|
+
it "processes the Asciidoctor::Standoc concept macros for acronyms" do
|
312
|
+
input = <<~INPUT
|
313
|
+
#{ASCIIDOC_BLANK_HDR}
|
314
|
+
{{Clause1}}
|
315
|
+
{{Clause1,Clause 1}}
|
316
|
+
{{Clause 2}}
|
317
|
+
{{Clause 2,Clause 1}}
|
318
|
+
{{<<Clause2>>,Clause 2}}
|
319
|
+
symbol:[Clause1]
|
320
|
+
symbol:[Clause1,word]
|
321
|
+
symbol:[Clause 2]
|
322
|
+
symbol:[Clause 2,word]
|
323
|
+
{{<<Clause2>>,word}}
|
324
|
+
{{<<Clause2>>,word,term}}
|
325
|
+
{{<<Clause2>>,word,term,xref}}
|
326
|
+
{{<<Clause2>>,word,term,xref,option="noital,noref"}}
|
327
|
+
{{<<Clause2>>,word,term,xref,option="ital,ref"}}
|
328
|
+
|
329
|
+
== Terms and definitions
|
330
|
+
=== Clause1
|
331
|
+
== Symbols and Abbreviated Terms
|
332
|
+
Clause1:: A
|
333
|
+
[[Clause2]]Clause 2:: C
|
334
|
+
INPUT
|
335
|
+
output = <<~OUTPUT
|
336
|
+
#{BLANK_HDR}
|
337
|
+
<preface>
|
338
|
+
<foreword id='_' obligation='informative'>
|
339
|
+
<title>Foreword</title>
|
340
|
+
<p id='_'>
|
341
|
+
<concept>
|
342
|
+
<refterm>Clause1</refterm>
|
343
|
+
<renderterm>Clause1</renderterm>
|
344
|
+
<xref target='term-clause1'/>
|
345
|
+
</concept>
|
346
|
+
<concept>
|
347
|
+
<refterm>Clause1</refterm>
|
348
|
+
<renderterm>Clause 1</renderterm>
|
349
|
+
<xref target='term-clause1'/>
|
350
|
+
</concept>
|
351
|
+
<concept>
|
352
|
+
<refterm>Clause 2</refterm>
|
353
|
+
<renderterm>Clause 2</renderterm>
|
354
|
+
<xref target='Clause2'/>
|
355
|
+
</concept>
|
356
|
+
<concept>
|
357
|
+
<refterm>Clause 2</refterm>
|
358
|
+
<renderterm>Clause 1</renderterm>
|
359
|
+
<xref target='Clause2'/>
|
360
|
+
</concept>
|
361
|
+
<concept>
|
362
|
+
<refterm>Clause 2</refterm>
|
363
|
+
<renderterm>Clause 2</renderterm>
|
364
|
+
<xref target='Clause2'/>
|
365
|
+
</concept>
|
366
|
+
<concept>
|
367
|
+
<refterm>Clause1</refterm>
|
368
|
+
<renderterm>Clause1</renderterm>
|
369
|
+
<xref target='symbol-clause1'/>
|
370
|
+
</concept>
|
371
|
+
<concept>
|
372
|
+
<refterm>Clause1</refterm>
|
373
|
+
<renderterm>word</renderterm>
|
374
|
+
<xref target='symbol-clause1'/>
|
375
|
+
</concept>
|
376
|
+
<concept>
|
377
|
+
<refterm>Clause 2</refterm>
|
378
|
+
<renderterm>Clause 2</renderterm>
|
379
|
+
<xref target='Clause2'/>
|
380
|
+
</concept>
|
381
|
+
<concept>
|
382
|
+
<refterm>Clause 2</refterm>
|
383
|
+
<renderterm>word</renderterm>
|
384
|
+
<xref target='Clause2'/>
|
385
|
+
</concept>
|
386
|
+
<concept>
|
387
|
+
<refterm>word</refterm>
|
388
|
+
<renderterm>word</renderterm>
|
389
|
+
<xref target='Clause2'/>
|
390
|
+
</concept>
|
391
|
+
<concept>
|
392
|
+
<refterm>word</refterm>
|
393
|
+
<renderterm>term</renderterm>
|
394
|
+
<xref target='Clause2'/>
|
395
|
+
</concept>
|
396
|
+
<concept>
|
397
|
+
<refterm>word</refterm>
|
398
|
+
<renderterm>term</renderterm>
|
399
|
+
<xref target='Clause2'>xref</xref>
|
400
|
+
</concept>
|
401
|
+
<concept ital='false' ref='false'>
|
402
|
+
<refterm>word</refterm>
|
403
|
+
<renderterm>term</renderterm>
|
404
|
+
<xref target='Clause2'>xref</xref>
|
405
|
+
</concept>
|
406
|
+
<concept ital='true' ref='true'>
|
407
|
+
<refterm>word</refterm>
|
408
|
+
<renderterm>term</renderterm>
|
409
|
+
<xref target='Clause2'>xref</xref>
|
410
|
+
</concept>
|
411
|
+
</p>
|
412
|
+
</foreword>
|
413
|
+
</preface>
|
414
|
+
<sections>
|
415
|
+
<terms id='_' obligation='normative'>
|
416
|
+
<title>Terms and definitions</title>
|
417
|
+
<p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
|
418
|
+
<term id='term-clause1'>
|
419
|
+
<preferred>Clause1</preferred>
|
420
|
+
</term>
|
421
|
+
</terms>
|
422
|
+
<definitions id='_' obligation='normative'>
|
423
|
+
<title>Symbols and abbreviated terms</title>
|
424
|
+
<dl id='_'>
|
425
|
+
<dt id="symbol-clause1">Clause1</dt>
|
426
|
+
<dd>
|
427
|
+
<p id='_'>A</p>
|
428
|
+
</dd>
|
429
|
+
<dt id='Clause2'>Clause 2</dt>
|
430
|
+
<dd>
|
431
|
+
<p id='_'>C</p>
|
432
|
+
</dd>
|
433
|
+
</dl>
|
434
|
+
</definitions>
|
435
|
+
</sections>
|
436
|
+
</standard-document>
|
437
|
+
OUTPUT
|
438
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
439
|
+
.to be_equivalent_to xmlpp(output)
|
440
|
+
end
|
441
|
+
|
442
|
+
it "processes the concept macros with xrefs" do
|
443
|
+
input = <<~INPUT
|
444
|
+
#{ASCIIDOC_BLANK_HDR}
|
445
|
+
{{<<clause1>>}}
|
446
|
+
{{<<clause1>>,w\[o\]rd}}
|
447
|
+
{{<<clause1>>,term,w\[o\]rd}}
|
448
|
+
{{<<clause1>>,term,w\[o\]rd,Clause #1}}
|
449
|
+
|
450
|
+
[[clause1]]
|
451
|
+
== Clause
|
452
|
+
Terms are defined here
|
453
|
+
INPUT
|
454
|
+
output = <<~OUTPUT
|
455
|
+
#{BLANK_HDR}
|
456
|
+
<preface>
|
457
|
+
<foreword id='_' obligation='informative'>
|
458
|
+
<title>Foreword</title>
|
459
|
+
<p id='_'>
|
460
|
+
<concept>
|
461
|
+
<xref target='clause1'/>
|
462
|
+
</concept>
|
463
|
+
<concept>
|
464
|
+
<refterm>w[o]rd</refterm>
|
465
|
+
<renderterm>w[o]rd</renderterm>
|
466
|
+
<xref target='clause1'/>
|
467
|
+
</concept>
|
468
|
+
<concept>
|
469
|
+
<refterm>term</refterm>
|
470
|
+
<renderterm>w[o]rd</renderterm>
|
471
|
+
<xref target='clause1'/>
|
472
|
+
</concept>
|
473
|
+
<concept>
|
474
|
+
<refterm>term</refterm>
|
475
|
+
<renderterm>w[o]rd</renderterm>
|
476
|
+
<xref target='clause1'>Clause #1</xref>
|
477
|
+
</concept>
|
478
|
+
</p>
|
479
|
+
</foreword>
|
480
|
+
</preface>
|
481
|
+
<sections>
|
482
|
+
<clause id='clause1' inline-header='false' obligation='normative'>
|
483
|
+
<title>Clause</title>
|
484
|
+
<p id='_'>Terms are defined here</p>
|
485
|
+
</clause>
|
486
|
+
</sections>
|
487
|
+
</standard-document>
|
488
|
+
OUTPUT
|
489
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
490
|
+
.to be_equivalent_to xmlpp(output)
|
491
|
+
end
|
492
|
+
|
493
|
+
it "processes the concept macros with erefs" do
|
494
|
+
input = <<~INPUT
|
495
|
+
#{ASCIIDOC_BLANK_HDR}
|
496
|
+
{{<<blah>>}}
|
497
|
+
{{<<blah>>,word}}
|
498
|
+
{{<<blah>>,term,word}}
|
499
|
+
{{<<blah>>,term,word,Clause #1}}
|
500
|
+
{{<<blah,clause=3.1>>}}
|
501
|
+
{{<<blah,clause=3.1>>,word}}
|
502
|
+
{{<<blah,clause=3.1>>,term,word}}
|
503
|
+
{{<<blah,clause=3.1,figure=a>>}}
|
504
|
+
{{<<blah,clause=3.1,figure=a>>,word}}
|
505
|
+
{{<<blah,clause=3.1,figure=a>>,term,word,Clause #1}}
|
506
|
+
|
507
|
+
[bibliography]
|
508
|
+
== Bibliography
|
509
|
+
* [[[blah,blah]]] _Blah_
|
510
|
+
INPUT
|
511
|
+
output = <<~OUTPUT
|
512
|
+
#{BLANK_HDR}
|
513
|
+
<preface>
|
514
|
+
<foreword id='_' obligation='informative'>
|
515
|
+
<title>Foreword</title>
|
516
|
+
<p id='_'>
|
517
|
+
<concept>
|
518
|
+
<eref bibitemid='blah'/>
|
519
|
+
</concept>
|
520
|
+
<concept>
|
521
|
+
<refterm>word</refterm>
|
522
|
+
<renderterm>word</renderterm>
|
523
|
+
<eref bibitemid='blah'/>
|
524
|
+
</concept>
|
525
|
+
<concept>
|
526
|
+
<refterm>term</refterm>
|
527
|
+
<renderterm>word</renderterm>
|
528
|
+
<eref bibitemid='blah'/>
|
529
|
+
</concept>
|
530
|
+
<concept>
|
531
|
+
<refterm>term</refterm>
|
532
|
+
<renderterm>word</renderterm>
|
533
|
+
<eref bibitemid='blah'>Clause #1</eref>
|
534
|
+
</concept>
|
535
|
+
<concept>
|
536
|
+
<eref bibitemid='blah'>
|
537
|
+
<localityStack>
|
538
|
+
<locality type='clause'>
|
539
|
+
<referenceFrom>3.1</referenceFrom>
|
540
|
+
</locality>
|
541
|
+
</localityStack>
|
542
|
+
</eref>
|
543
|
+
</concept>
|
544
|
+
<concept>
|
545
|
+
<refterm>word</refterm>
|
546
|
+
<renderterm>word</renderterm>
|
547
|
+
<eref bibitemid='blah'>
|
548
|
+
<localityStack>
|
549
|
+
<locality type='clause'>
|
550
|
+
<referenceFrom>3.1</referenceFrom>
|
551
|
+
</locality>
|
552
|
+
</localityStack>
|
553
|
+
</eref>
|
554
|
+
</concept>
|
555
|
+
<concept>
|
556
|
+
<refterm>term</refterm>
|
557
|
+
<renderterm>word</renderterm>
|
558
|
+
<eref bibitemid='blah'>
|
559
|
+
<localityStack>
|
560
|
+
<locality type='clause'>
|
561
|
+
<referenceFrom>3.1</referenceFrom>
|
562
|
+
</locality>
|
563
|
+
</localityStack>
|
564
|
+
</eref>
|
565
|
+
</concept>
|
566
|
+
<concept>
|
567
|
+
<eref bibitemid='blah'>
|
568
|
+
<localityStack>
|
569
|
+
<locality type='clause'>
|
570
|
+
<referenceFrom>3.1</referenceFrom>
|
571
|
+
</locality>
|
572
|
+
<locality type='figure'>
|
573
|
+
<referenceFrom>a</referenceFrom>
|
574
|
+
</locality>
|
575
|
+
</localityStack>
|
576
|
+
</eref>
|
577
|
+
</concept>
|
578
|
+
<concept>
|
579
|
+
<refterm>word</refterm>
|
580
|
+
<renderterm>word</renderterm>
|
581
|
+
<eref bibitemid='blah'>
|
582
|
+
<localityStack>
|
583
|
+
<locality type='clause'>
|
584
|
+
<referenceFrom>3.1</referenceFrom>
|
585
|
+
</locality>
|
586
|
+
<locality type='figure'>
|
587
|
+
<referenceFrom>a</referenceFrom>
|
588
|
+
</locality>
|
589
|
+
</localityStack>
|
590
|
+
</eref>
|
591
|
+
</concept>
|
592
|
+
<concept>
|
593
|
+
<refterm>term</refterm>
|
594
|
+
<renderterm>word</renderterm>
|
595
|
+
<eref bibitemid='blah'>
|
596
|
+
<localityStack>
|
597
|
+
<locality type='clause'>
|
598
|
+
<referenceFrom>3.1</referenceFrom>
|
599
|
+
</locality>
|
600
|
+
<locality type='figure'>
|
601
|
+
<referenceFrom>a</referenceFrom>
|
602
|
+
</locality>
|
603
|
+
</localityStack>
|
604
|
+
Clause #1
|
605
|
+
</eref>
|
606
|
+
</concept>
|
607
|
+
</p>
|
608
|
+
</foreword>
|
609
|
+
</preface>
|
610
|
+
<sections> </sections>
|
611
|
+
<bibliography>
|
612
|
+
<references id='_' normative='false' obligation='informative'>
|
613
|
+
<title>Bibliography</title>
|
614
|
+
<bibitem id='blah'>
|
615
|
+
<formattedref format='application/x-isodoc+xml'>
|
616
|
+
<em>Blah</em>
|
617
|
+
</formattedref>
|
618
|
+
<docidentifier>blah</docidentifier>
|
619
|
+
</bibitem>
|
620
|
+
</references>
|
621
|
+
</bibliography>
|
622
|
+
</standard-document>
|
623
|
+
OUTPUT
|
624
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
625
|
+
.to be_equivalent_to xmlpp(output)
|
626
|
+
end
|
627
|
+
|
628
|
+
it "processes the concept macros with termbase" do
|
629
|
+
input = <<~INPUT
|
630
|
+
#{ASCIIDOC_BLANK_HDR}
|
631
|
+
{{<<IEV:135-13-13>>}}
|
632
|
+
{{<<IEV:135-13-13>>,word}}
|
633
|
+
{{<<IEV:135-13-13>>,term,word}}
|
634
|
+
{{<<IEV:135-13-13>>,term,word,Clause #1}}
|
635
|
+
INPUT
|
636
|
+
output = <<~OUTPUT
|
637
|
+
#{BLANK_HDR}
|
638
|
+
<sections>
|
639
|
+
<p id='_'>
|
640
|
+
<concept>
|
641
|
+
<termref base='IEV' target='135-13-13'/>
|
642
|
+
</concept>
|
643
|
+
<concept>
|
644
|
+
<refterm>word</refterm>
|
645
|
+
<renderterm>word</renderterm>
|
646
|
+
<termref base='IEV' target='135-13-13'/>
|
647
|
+
</concept>
|
648
|
+
<concept>
|
649
|
+
<refterm>term</refterm>
|
650
|
+
<renderterm>word</renderterm>
|
651
|
+
<termref base='IEV' target='135-13-13'/>
|
652
|
+
</concept>
|
653
|
+
<concept>
|
654
|
+
<refterm>term</refterm>
|
655
|
+
<renderterm>word</renderterm>
|
656
|
+
<termref base='IEV' target='135-13-13'>Clause #1</termref>
|
657
|
+
</concept>
|
658
|
+
</p>
|
659
|
+
</sections>
|
660
|
+
</standard-document>
|
661
|
+
OUTPUT
|
662
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
663
|
+
.to be_equivalent_to xmlpp(output)
|
664
|
+
end
|
665
|
+
|
666
|
+
it "processes the concept macros with disambiguation for math symbols" do
|
667
|
+
input = <<~INPUT
|
668
|
+
#{ASCIIDOC_BLANK_HDR}
|
669
|
+
[[clause1]]
|
670
|
+
|
671
|
+
== Symbols and Abbreviated Terms
|
672
|
+
stem:[|~ x ~|]:: A function that returns the smallest integer greater than or equal to stem:[x]; also known as the _ceiling_ function.
|
673
|
+
stem:[|__ x __|]:: A function that returns the largest integer less than or equal to stem:[x]; also known as the _floor_ function.
|
674
|
+
INPUT
|
675
|
+
output = <<~OUTPUT
|
676
|
+
#{BLANK_HDR}
|
677
|
+
<sections>
|
678
|
+
<definitions id='clause1' obligation='normative'>
|
679
|
+
<title>Symbols and abbreviated terms</title>
|
680
|
+
<dl id='_'>
|
681
|
+
<dt id='symbol-_-_x_-'>
|
682
|
+
<stem type='MathML'>
|
683
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
684
|
+
<mo>⌊</mo>
|
685
|
+
<mi>x</mi>
|
686
|
+
<mo>⌋</mo>
|
687
|
+
</math>
|
688
|
+
</stem>
|
689
|
+
</dt>
|
690
|
+
<dd>
|
691
|
+
<p id='_'>
|
692
|
+
A function that returns the largest integer less than or equal to
|
693
|
+
<stem type='MathML'>
|
694
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
695
|
+
<mi>x</mi>
|
696
|
+
</math>
|
697
|
+
</stem>
|
698
|
+
; also known as the
|
699
|
+
<em>floor</em>
|
700
|
+
function.
|
701
|
+
</p>
|
702
|
+
</dd>
|
703
|
+
<dt id='symbol-_-_x_--1'>
|
704
|
+
<stem type='MathML'>
|
705
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
706
|
+
<mo>⌈</mo>
|
707
|
+
<mi>x</mi>
|
708
|
+
<mo>⌉</mo>
|
709
|
+
</math>
|
710
|
+
</stem>
|
711
|
+
</dt>
|
712
|
+
<dd>
|
713
|
+
<p id='_'>
|
714
|
+
A function that returns the smallest integer greater than or equal
|
715
|
+
to
|
716
|
+
<stem type='MathML'>
|
717
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
718
|
+
<mi>x</mi>
|
719
|
+
</math>
|
720
|
+
</stem>
|
721
|
+
; also known as the
|
722
|
+
<em>ceiling</em>
|
723
|
+
function.
|
724
|
+
</p>
|
725
|
+
</dd>
|
726
|
+
</dl>
|
727
|
+
</definitions>
|
728
|
+
</sections>
|
729
|
+
</standard-document>
|
730
|
+
OUTPUT
|
731
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
732
|
+
.to be_equivalent_to xmlpp(output)
|
303
733
|
end
|
304
734
|
|
305
735
|
it "processes the TODO custom admonition" do
|
306
|
-
|
736
|
+
input = <<~INPUT
|
307
737
|
#{ASCIIDOC_BLANK_HDR}
|
308
738
|
TODO: Note1
|
309
739
|
|
@@ -315,6 +745,7 @@ RSpec.describe Asciidoctor::Standoc do
|
|
315
745
|
[TODO]
|
316
746
|
Note3
|
317
747
|
INPUT
|
748
|
+
output = <<~OUTPUT
|
318
749
|
#{BLANK_HDR}
|
319
750
|
<sections><review reviewer="(Unknown)" id="_" date="#{Date.today}T00:00:00Z">
|
320
751
|
<p id="_"/>
|
@@ -327,10 +758,12 @@ RSpec.describe Asciidoctor::Standoc do
|
|
327
758
|
</review></sections>
|
328
759
|
</standard-document>
|
329
760
|
OUTPUT
|
761
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
762
|
+
.to be_equivalent_to xmlpp(output)
|
330
763
|
end
|
331
764
|
|
332
765
|
it "generates pseudocode examples, with formatting and initial indentation" do
|
333
|
-
|
766
|
+
input = <<~INPUT
|
334
767
|
#{ASCIIDOC_BLANK_HDR}
|
335
768
|
|
336
769
|
[pseudocode,subsequence="A",number="3",keep-with-next=true,keep-lines-together=true]
|
@@ -342,6 +775,7 @@ RSpec.describe Asciidoctor::Standoc do
|
|
342
775
|
_C_
|
343
776
|
====
|
344
777
|
INPUT
|
778
|
+
output = <<~OUTPUT
|
345
779
|
#{BLANK_HDR}
|
346
780
|
<sections>
|
347
781
|
<figure id="_" subsequence='A' class="pseudocode" unnumbered="true" number="3" keep-with-next="true" keep-lines-together="true">
|
@@ -351,10 +785,12 @@ RSpec.describe Asciidoctor::Standoc do
|
|
351
785
|
</sections>
|
352
786
|
</standard-document>
|
353
787
|
OUTPUT
|
788
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
789
|
+
.to be_equivalent_to xmlpp(output)
|
354
790
|
end
|
355
791
|
|
356
792
|
it "supplies line breaks in pseudocode" do
|
357
|
-
|
793
|
+
input = <<~INPUT
|
358
794
|
#{ASCIIDOC_BLANK_HDR}
|
359
795
|
|
360
796
|
[pseudocode]
|
@@ -366,6 +802,7 @@ RSpec.describe Asciidoctor::Standoc do
|
|
366
802
|
E
|
367
803
|
====
|
368
804
|
INPUT
|
805
|
+
output = <<~OUTPUT
|
369
806
|
#{BLANK_HDR}
|
370
807
|
<sections>
|
371
808
|
<figure id='_' class='pseudocode'>
|
@@ -383,10 +820,12 @@ RSpec.describe Asciidoctor::Standoc do
|
|
383
820
|
</sections>
|
384
821
|
</standard-document>
|
385
822
|
OUTPUT
|
823
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
824
|
+
.to be_equivalent_to xmlpp(output)
|
386
825
|
end
|
387
826
|
|
388
827
|
it "skips embedded blocks when supplying line breaks in pseudocode" do
|
389
|
-
|
828
|
+
input = <<~INPUT
|
390
829
|
#{ASCIIDOC_BLANK_HDR}
|
391
830
|
|
392
831
|
[pseudocode]
|
@@ -397,6 +836,7 @@ RSpec.describe Asciidoctor::Standoc do
|
|
397
836
|
++++
|
398
837
|
====
|
399
838
|
INPUT
|
839
|
+
output = <<~OUTPUT
|
400
840
|
#{BLANK_HDR}
|
401
841
|
<sections>
|
402
842
|
<figure id='_' class='pseudocode'>
|
@@ -449,14 +889,17 @@ RSpec.describe Asciidoctor::Standoc do
|
|
449
889
|
</sections>
|
450
890
|
</standard-document>
|
451
891
|
OUTPUT
|
892
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
893
|
+
.to be_equivalent_to xmlpp(output)
|
452
894
|
end
|
453
895
|
|
454
896
|
it "processes the Ruby markups" do
|
455
|
-
|
897
|
+
input = <<~INPUT
|
456
898
|
#{ASCIIDOC_BLANK_HDR}
|
457
899
|
|
458
900
|
ruby:楽聖少女[がくせいしょうじょ]
|
459
901
|
INPUT
|
902
|
+
output = <<~OUTPUT
|
460
903
|
#{BLANK_HDR}
|
461
904
|
<sections>
|
462
905
|
<p id="_">
|
@@ -465,10 +908,12 @@ RSpec.describe Asciidoctor::Standoc do
|
|
465
908
|
</sections>
|
466
909
|
</standard-document>
|
467
910
|
OUTPUT
|
911
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
912
|
+
.to be_equivalent_to xmlpp(output)
|
468
913
|
end
|
469
914
|
|
470
915
|
it "processes the footnoteblock macro" do
|
471
|
-
|
916
|
+
input = <<~INPUT
|
472
917
|
#{ASCIIDOC_BLANK_HDR}
|
473
918
|
|
474
919
|
footnoteblock:[id1]
|
@@ -487,6 +932,7 @@ RSpec.describe Asciidoctor::Standoc do
|
|
487
932
|
* C
|
488
933
|
--
|
489
934
|
INPUT
|
935
|
+
output = <<~OUTPUT
|
490
936
|
#{BLANK_HDR}
|
491
937
|
<sections>
|
492
938
|
<p id="_">
|
@@ -521,10 +967,12 @@ RSpec.describe Asciidoctor::Standoc do
|
|
521
967
|
</sections>
|
522
968
|
</standard-document>
|
523
969
|
OUTPUT
|
970
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
971
|
+
.to be_equivalent_to xmlpp(output)
|
524
972
|
end
|
525
973
|
|
526
974
|
it "processes the footnoteblock macro with failed reference" do
|
527
|
-
|
975
|
+
input = <<~INPUT
|
528
976
|
#{ASCIIDOC_BLANK_HDR}
|
529
977
|
|
530
978
|
footnoteblock:[id1]
|
@@ -543,6 +991,7 @@ RSpec.describe Asciidoctor::Standoc do
|
|
543
991
|
* C
|
544
992
|
--
|
545
993
|
INPUT
|
994
|
+
output = <<~OUTPUT
|
546
995
|
#{BLANK_HDR}
|
547
996
|
<sections>
|
548
997
|
<p id='_'>
|
@@ -578,13 +1027,15 @@ RSpec.describe Asciidoctor::Standoc do
|
|
578
1027
|
</sections>
|
579
1028
|
</standard-document>
|
580
1029
|
OUTPUT
|
1030
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
1031
|
+
.to be_equivalent_to xmlpp(output)
|
581
1032
|
end
|
582
1033
|
|
583
1034
|
it "processes input form macros" do
|
584
|
-
|
1035
|
+
input = <<~INPUT
|
585
1036
|
#{ASCIIDOC_BLANK_HDR}
|
586
1037
|
|
587
|
-
[form,id=N0,name=N1,action="/action_page.php"]
|
1038
|
+
[form,id=N0,name=N1,action="/action_page.php",class="checkboxes"]
|
588
1039
|
--
|
589
1040
|
label:fname[First name:] +
|
590
1041
|
input:text[id=fname,name=fname] +
|
@@ -619,9 +1070,10 @@ RSpec.describe Asciidoctor::Standoc do
|
|
619
1070
|
input:submit[value="Submit"]
|
620
1071
|
--
|
621
1072
|
INPUT
|
1073
|
+
output = <<~OUTPUT
|
622
1074
|
#{BLANK_HDR}
|
623
1075
|
<sections>
|
624
|
-
<form id='_' name='N1' action='/action_page.php'>
|
1076
|
+
<form id='_' name='N1' action='/action_page.php' class="checkboxes">
|
625
1077
|
<p id='_'>
|
626
1078
|
<label for='fname'>First name:</label>
|
627
1079
|
<br/>
|
@@ -675,6 +1127,107 @@ RSpec.describe Asciidoctor::Standoc do
|
|
675
1127
|
</sections>
|
676
1128
|
</standard-document>
|
677
1129
|
OUTPUT
|
1130
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
1131
|
+
.to be_equivalent_to xmlpp(output)
|
1132
|
+
end
|
1133
|
+
|
1134
|
+
it "processes ToC form macros" do
|
1135
|
+
input = <<~INPUT
|
1136
|
+
#{ASCIIDOC_BLANK_HDR}
|
1137
|
+
|
1138
|
+
[[clause1]]
|
1139
|
+
== Clause 1
|
1140
|
+
|
1141
|
+
[[clause1A]]
|
1142
|
+
=== Clause 1A
|
1143
|
+
|
1144
|
+
[[clause1Aa]]
|
1145
|
+
==== Clause 1Aa
|
1146
|
+
|
1147
|
+
[[clause1Ab]]
|
1148
|
+
==== Clause 1Ab
|
1149
|
+
|
1150
|
+
[[clause1B]]
|
1151
|
+
=== Clause 1B
|
1152
|
+
|
1153
|
+
[[clause1Ba]]
|
1154
|
+
==== Clause 1Ba
|
1155
|
+
|
1156
|
+
[[clause2]]
|
1157
|
+
== Clause 2
|
1158
|
+
|
1159
|
+
And introducing:
|
1160
|
+
toc:["//clause[@id = 'clause1'\\]/clause/title","//clause[@id = 'clause1'\\]/clause/clause/title:2"]
|
1161
|
+
|
1162
|
+
toc:["//clause[@id = 'clause1'\\]/clause/title"]
|
1163
|
+
INPUT
|
1164
|
+
output = <<~OUTPUT
|
1165
|
+
#{BLANK_HDR}
|
1166
|
+
<sections>
|
1167
|
+
<clause id='clause1' inline-header='false' obligation='normative'>
|
1168
|
+
<title>Clause 1</title>
|
1169
|
+
<clause id='clause1A' inline-header='false' obligation='normative'>
|
1170
|
+
<title>Clause 1A</title>
|
1171
|
+
<clause id='clause1Aa' inline-header='false' obligation='normative'>
|
1172
|
+
<title>Clause 1Aa</title>
|
1173
|
+
</clause>
|
1174
|
+
<clause id='clause1Ab' inline-header='false' obligation='normative'>
|
1175
|
+
<title>Clause 1Ab</title>
|
1176
|
+
</clause>
|
1177
|
+
</clause>
|
1178
|
+
<clause id='clause1B' inline-header='false' obligation='normative'>
|
1179
|
+
<title>Clause 1B</title>
|
1180
|
+
<clause id='clause1Ba' inline-header='false' obligation='normative'>
|
1181
|
+
<title>Clause 1Ba</title>
|
1182
|
+
</clause>
|
1183
|
+
</clause>
|
1184
|
+
</clause>
|
1185
|
+
<clause id='clause2' inline-header='false' obligation='normative'>
|
1186
|
+
<title>Clause 2</title>
|
1187
|
+
<p id='_'>And introducing: </p>
|
1188
|
+
<toc>
|
1189
|
+
<ul id='_'>
|
1190
|
+
<li>
|
1191
|
+
<xref target='clause1A'>Clause 1A</xref>
|
1192
|
+
</li>
|
1193
|
+
<li>
|
1194
|
+
<ul id='_'>
|
1195
|
+
<li>
|
1196
|
+
<xref target='clause1Aa'>Clause 1Aa</xref>
|
1197
|
+
</li>
|
1198
|
+
<li>
|
1199
|
+
<xref target='clause1Ab'>Clause 1Ab</xref>
|
1200
|
+
</li>
|
1201
|
+
</ul>
|
1202
|
+
</li>
|
1203
|
+
<li>
|
1204
|
+
<xref target='clause1B'>Clause 1B</xref>
|
1205
|
+
</li>
|
1206
|
+
<li>
|
1207
|
+
<ul id='_'>
|
1208
|
+
<li>
|
1209
|
+
<xref target='clause1Ba'>Clause 1Ba</xref>
|
1210
|
+
</li>
|
1211
|
+
</ul>
|
1212
|
+
</li>
|
1213
|
+
</ul>
|
1214
|
+
</toc>
|
1215
|
+
<toc>
|
1216
|
+
<ul id='_'>
|
1217
|
+
<li>
|
1218
|
+
<xref target='clause1A'>Clause 1A</xref>
|
1219
|
+
</li>
|
1220
|
+
<li>
|
1221
|
+
<xref target='clause1B'>Clause 1B</xref>
|
1222
|
+
</li>
|
1223
|
+
</ul>
|
1224
|
+
</toc>
|
1225
|
+
</clause>
|
1226
|
+
</sections>
|
1227
|
+
</standard-document>
|
1228
|
+
OUTPUT
|
1229
|
+
expect(xmlpp(strip_guid(Asciidoctor.convert(input, *OPTIONS))))
|
1230
|
+
.to be_equivalent_to xmlpp(output)
|
678
1231
|
end
|
679
1232
|
|
680
1233
|
describe "term inline macros" do
|
@@ -683,8 +1236,8 @@ RSpec.describe Asciidoctor::Standoc do
|
|
683
1236
|
strip_guid(
|
684
1237
|
Asciidoctor.convert(
|
685
1238
|
input, *OPTIONS
|
686
|
-
)
|
687
|
-
)
|
1239
|
+
),
|
1240
|
+
),
|
688
1241
|
)
|
689
1242
|
end
|
690
1243
|
let(:input) do
|
@@ -692,11 +1245,13 @@ RSpec.describe Asciidoctor::Standoc do
|
|
692
1245
|
#{ASCIIDOC_BLANK_HDR}
|
693
1246
|
== Terms and Definitions
|
694
1247
|
|
695
|
-
===
|
1248
|
+
=== name
|
696
1249
|
|
697
1250
|
== Main
|
698
1251
|
|
699
1252
|
term:[name,name2] is a term
|
1253
|
+
|
1254
|
+
{{name,name2}} is a term
|
700
1255
|
XML
|
701
1256
|
end
|
702
1257
|
let(:output) do
|
@@ -706,17 +1261,27 @@ RSpec.describe Asciidoctor::Standoc do
|
|
706
1261
|
<terms id='_' obligation='normative'>
|
707
1262
|
<title>Terms and definitions</title>
|
708
1263
|
<p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
|
709
|
-
<term id='term-
|
710
|
-
<preferred>
|
1264
|
+
<term id='term-name'>
|
1265
|
+
<preferred>name</preferred>
|
711
1266
|
</term>
|
712
1267
|
</terms>
|
713
1268
|
<clause id='_' inline-header='false' obligation='normative'>
|
714
1269
|
<title>Main</title>
|
715
1270
|
<p id='_'>
|
716
|
-
|
717
|
-
|
718
|
-
<
|
719
|
-
|
1271
|
+
<concept>
|
1272
|
+
<refterm>name</refterm>
|
1273
|
+
<renderterm>name2</renderterm>
|
1274
|
+
<xref target='term-name'/>
|
1275
|
+
</concept>
|
1276
|
+
is a term
|
1277
|
+
</p>
|
1278
|
+
<p id='_'>
|
1279
|
+
<concept>
|
1280
|
+
<refterm>name</refterm>
|
1281
|
+
<renderterm>name2</renderterm>
|
1282
|
+
<xref target='term-name'/>
|
1283
|
+
</concept>
|
1284
|
+
is a term
|
720
1285
|
</p>
|
721
1286
|
</clause>
|
722
1287
|
</sections>
|
@@ -740,6 +1305,8 @@ RSpec.describe Asciidoctor::Standoc do
|
|
740
1305
|
== Main
|
741
1306
|
|
742
1307
|
term:[name] is a term
|
1308
|
+
|
1309
|
+
{{name}} is a term
|
743
1310
|
XML
|
744
1311
|
end
|
745
1312
|
let(:output) do
|
@@ -756,10 +1323,20 @@ RSpec.describe Asciidoctor::Standoc do
|
|
756
1323
|
<clause id='_' inline-header='false' obligation='normative'>
|
757
1324
|
<title>Main</title>
|
758
1325
|
<p id='_'>
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
|
1326
|
+
<concept>
|
1327
|
+
<refterm>name</refterm>
|
1328
|
+
<renderterm>name</renderterm>
|
1329
|
+
<xref target='term-name'/>
|
1330
|
+
</concept>
|
1331
|
+
is a term
|
1332
|
+
</p>
|
1333
|
+
<p id='_'>
|
1334
|
+
<concept>
|
1335
|
+
<refterm>name</refterm>
|
1336
|
+
<renderterm>name</renderterm>
|
1337
|
+
<xref target='term-name'/>
|
1338
|
+
</concept>
|
1339
|
+
is a term
|
763
1340
|
</p>
|
764
1341
|
</clause>
|
765
1342
|
</sections>
|
@@ -792,6 +1369,8 @@ RSpec.describe Asciidoctor::Standoc do
|
|
792
1369
|
|
793
1370
|
term:[name] is a term
|
794
1371
|
term:[name2] is a term
|
1372
|
+
{{name}} is a term
|
1373
|
+
{{name2}} is a term
|
795
1374
|
XML
|
796
1375
|
end
|
797
1376
|
let(:output) do
|
@@ -815,14 +1394,30 @@ RSpec.describe Asciidoctor::Standoc do
|
|
815
1394
|
<clause id='term-name2' inline-header='false' obligation='normative'>
|
816
1395
|
<title>Second</title>
|
817
1396
|
<p id='_'>
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
1397
|
+
<concept>
|
1398
|
+
<refterm>name</refterm>
|
1399
|
+
<renderterm>name</renderterm>
|
1400
|
+
<xref target='term-name-1'/>
|
1401
|
+
</concept>
|
1402
|
+
is a term
|
1403
|
+
<concept>
|
1404
|
+
<refterm>name2</refterm>
|
1405
|
+
<renderterm>name2</renderterm>
|
1406
|
+
<xref target='term-name2-1'/>
|
1407
|
+
</concept>
|
1408
|
+
is a term
|
1409
|
+
<concept>
|
1410
|
+
<refterm>name</refterm>
|
1411
|
+
<renderterm>name</renderterm>
|
1412
|
+
<xref target='term-name-1'/>
|
1413
|
+
</concept>
|
1414
|
+
is a term
|
1415
|
+
<concept>
|
1416
|
+
<refterm>name2</refterm>
|
1417
|
+
<renderterm>name2</renderterm>
|
1418
|
+
<xref target='term-name2-1'/>
|
1419
|
+
</concept>
|
1420
|
+
is a term
|
826
1421
|
</p>
|
827
1422
|
</clause>
|
828
1423
|
</sections>
|
@@ -854,12 +1449,19 @@ RSpec.describe Asciidoctor::Standoc do
|
|
854
1449
|
term:[name identity] is a term
|
855
1450
|
|
856
1451
|
Moreover, term:[missing] is a term
|
1452
|
+
|
1453
|
+
|
1454
|
+
{{name check}} is a term
|
1455
|
+
|
1456
|
+
{{name identity}} is a term
|
1457
|
+
|
1458
|
+
Moreover, {{missing}} is a term
|
857
1459
|
XML
|
858
1460
|
end
|
859
1461
|
let(:output) do
|
860
1462
|
<<~XML
|
861
|
-
|
862
|
-
|
1463
|
+
#{BLANK_HDR}
|
1464
|
+
<sections>
|
863
1465
|
<terms id='_' obligation='normative'>
|
864
1466
|
<title>Terms and definitions</title>
|
865
1467
|
<p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
|
@@ -871,18 +1473,61 @@ RSpec.describe Asciidoctor::Standoc do
|
|
871
1473
|
<definition>
|
872
1474
|
<p id='_'>paragraph</p>
|
873
1475
|
<p id='_'>
|
874
|
-
<
|
875
|
-
|
876
|
-
|
877
|
-
|
878
|
-
</
|
879
|
-
|
880
|
-
|
881
|
-
|
882
|
-
<
|
883
|
-
|
884
|
-
|
885
|
-
|
1476
|
+
<concept>
|
1477
|
+
<refterm>name check</refterm>
|
1478
|
+
<renderterm>name check</renderterm>
|
1479
|
+
<xref target='name-check'/>
|
1480
|
+
</concept>
|
1481
|
+
is a term
|
1482
|
+
</p>
|
1483
|
+
<p id='_'>
|
1484
|
+
<concept>
|
1485
|
+
<refterm>name identity</refterm>
|
1486
|
+
<renderterm>name identity</renderterm>
|
1487
|
+
<xref target='term-name-identity'/>
|
1488
|
+
</concept>
|
1489
|
+
is a term
|
1490
|
+
</p>
|
1491
|
+
<p id='_'>
|
1492
|
+
Moreover,
|
1493
|
+
<concept>
|
1494
|
+
<strong>
|
1495
|
+
term
|
1496
|
+
<tt>missing</tt>
|
1497
|
+
not resolved via ID
|
1498
|
+
<tt>missing</tt>
|
1499
|
+
</strong>
|
1500
|
+
</concept>
|
1501
|
+
is a term
|
1502
|
+
</p>
|
1503
|
+
<p id='_'>
|
1504
|
+
<concept>
|
1505
|
+
<refterm>name check</refterm>
|
1506
|
+
<renderterm>name check</renderterm>
|
1507
|
+
<xref target='name-check'/>
|
1508
|
+
</concept>
|
1509
|
+
is a term
|
1510
|
+
</p>
|
1511
|
+
<p id='_'>
|
1512
|
+
<concept>
|
1513
|
+
<refterm>name identity</refterm>
|
1514
|
+
<renderterm>name identity</renderterm>
|
1515
|
+
<xref target='term-name-identity'/>
|
1516
|
+
</concept>
|
1517
|
+
is a term
|
1518
|
+
</p>
|
1519
|
+
<p id='_'>
|
1520
|
+
Moreover,
|
1521
|
+
<concept>
|
1522
|
+
<strong>
|
1523
|
+
term
|
1524
|
+
<tt>missing</tt>
|
1525
|
+
not resolved via ID
|
1526
|
+
<tt>missing</tt>
|
1527
|
+
</strong>
|
1528
|
+
</concept>
|
1529
|
+
is a term
|
1530
|
+
</p>
|
886
1531
|
</definition>
|
887
1532
|
</term>
|
888
1533
|
</terms>
|