metanorma-iso 1.6.0 → 1.7.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.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +16 -29
  3. data/.rubocop.yml +0 -4
  4. data/lib/asciidoctor/iso/base.rb +13 -13
  5. data/lib/asciidoctor/iso/basicdoc.rng +5 -3
  6. data/lib/asciidoctor/iso/cleanup.rb +1 -1
  7. data/lib/asciidoctor/iso/front.rb +5 -5
  8. data/lib/asciidoctor/iso/isodoc.rng +134 -5
  9. data/lib/asciidoctor/iso/isostandard-amd.rng +11 -4
  10. data/lib/asciidoctor/iso/isostandard.rng +33 -107
  11. data/lib/asciidoctor/iso/validate.rb +79 -0
  12. data/lib/asciidoctor/iso/validate_section.rb +12 -9
  13. data/lib/isodoc/iso/base_convert.rb +11 -0
  14. data/lib/isodoc/iso/html/header.html +12 -12
  15. data/lib/isodoc/iso/html/html_iso_intro.html +1 -1
  16. data/lib/isodoc/iso/html/html_iso_titlepage.html +1 -1
  17. data/lib/isodoc/iso/html/word_iso_intro.html +1 -1
  18. data/lib/isodoc/iso/html/word_iso_titlepage.html +1 -1
  19. data/lib/isodoc/iso/html_convert.rb +2 -2
  20. data/lib/isodoc/iso/i18n-en.yaml +6 -0
  21. data/lib/isodoc/iso/i18n-fr.yaml +4 -0
  22. data/lib/isodoc/iso/i18n-zh-Hans.yaml +4 -0
  23. data/lib/isodoc/iso/index.rb +139 -0
  24. data/lib/isodoc/iso/iso.amendment.xsl +1006 -317
  25. data/lib/isodoc/iso/iso.international-standard.xsl +1006 -317
  26. data/lib/isodoc/iso/presentation_xml_convert.rb +1 -4
  27. data/lib/isodoc/iso/sections.rb +1 -1
  28. data/lib/isodoc/iso/word_convert.rb +2 -2
  29. data/lib/isodoc/iso/xref.rb +33 -12
  30. data/lib/metanorma/iso/version.rb +1 -1
  31. data/metanorma-iso.gemspec +3 -3
  32. data/spec/asciidoctor/amd_spec.rb +696 -0
  33. data/spec/asciidoctor/base_spec.rb +704 -0
  34. data/spec/asciidoctor/blocks_spec.rb +527 -0
  35. data/spec/asciidoctor/cleanup_spec.rb +1134 -0
  36. data/spec/asciidoctor/inline_spec.rb +195 -0
  37. data/spec/asciidoctor/lists_spec.rb +197 -0
  38. data/spec/asciidoctor/refs_spec.rb +375 -0
  39. data/spec/asciidoctor/section_spec.rb +393 -0
  40. data/spec/asciidoctor/table_spec.rb +329 -0
  41. data/spec/asciidoctor/validate_spec.rb +1555 -0
  42. data/spec/isodoc/amd_spec.rb +967 -946
  43. data/spec/isodoc/blocks_spec.rb +530 -507
  44. data/spec/isodoc/i18n_spec.rb +953 -911
  45. data/spec/isodoc/inline_spec.rb +355 -293
  46. data/spec/isodoc/iso_spec.rb +340 -316
  47. data/spec/isodoc/metadata_spec.rb +392 -382
  48. data/spec/isodoc/postproc_spec.rb +834 -656
  49. data/spec/isodoc/ref_spec.rb +374 -331
  50. data/spec/isodoc/section_spec.rb +821 -519
  51. data/spec/isodoc/table_spec.rb +472 -411
  52. data/spec/isodoc/terms_spec.rb +209 -185
  53. data/spec/isodoc/xref_spec.rb +1370 -1236
  54. data/spec/metanorma/processor_spec.rb +28 -26
  55. data/spec/spec_helper.rb +184 -189
  56. metadata +22 -23
  57. data/.rubocop.ribose.yml +0 -66
  58. data/spec/asciidoctor-iso/amd_spec.rb +0 -694
  59. data/spec/asciidoctor-iso/base_spec.rb +0 -713
  60. data/spec/asciidoctor-iso/blocks_spec.rb +0 -482
  61. data/spec/asciidoctor-iso/cleanup_spec.rb +0 -1025
  62. data/spec/asciidoctor-iso/inline_spec.rb +0 -170
  63. data/spec/asciidoctor-iso/lists_spec.rb +0 -190
  64. data/spec/asciidoctor-iso/refs_spec.rb +0 -317
  65. data/spec/asciidoctor-iso/section_spec.rb +0 -362
  66. data/spec/asciidoctor-iso/table_spec.rb +0 -313
  67. data/spec/asciidoctor-iso/validate_spec.rb +0 -1251
  68. data/spec/assets/xref_error.adoc +0 -7
@@ -0,0 +1,527 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Asciidoctor::ISO do
4
+ it "processes open blocks" do
5
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
6
+ #{ASCIIDOC_BLANK_HDR}
7
+ --
8
+ x
9
+
10
+ y
11
+
12
+ z
13
+ --
14
+ INPUT
15
+ #{BLANK_HDR}
16
+ <sections>
17
+ <p id="_">x</p>
18
+ <p id="_">y</p>
19
+ <p id="_">z</p>
20
+ </sections>
21
+ </iso-standard>
22
+ OUTPUT
23
+ end
24
+
25
+ it "processes stem blocks" do
26
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
27
+ #{ASCIIDOC_BLANK_HDR}
28
+ [stem]
29
+ ++++
30
+ r = 1 %
31
+ r = 1 %
32
+ ++++
33
+
34
+ [stem]
35
+ ++++
36
+ <mml:math><mml:msub xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math"> <mml:mrow> <mml:mrow> <mml:mi mathvariant="bold-italic">F</mml:mi> </mml:mrow> </mml:mrow> <mml:mrow> <mml:mrow> <mml:mi mathvariant="bold-italic">&#x0391;</mml:mi> </mml:mrow> </mml:mrow> </mml:msub> </mml:math>
37
+ ++++
38
+ INPUT
39
+ #{BLANK_HDR}
40
+ <sections>
41
+ <formula id="_">
42
+ <stem type="MathML">
43
+ <math xmlns="http://www.w3.org/1998/Math/MathML">
44
+ <mi>r</mi>
45
+ <mo>=</mo>
46
+ <mn>1</mn>
47
+ <mi>%</mi>
48
+ <mi>r</mi>
49
+ <mo>=</mo>
50
+ <mn>1</mn>
51
+ <mi>%</mi>
52
+ </math>
53
+ </stem>
54
+ </formula>
55
+ <formula id="_">
56
+ <stem type="MathML">
57
+ <math xmlns="http://www.w3.org/1998/Math/MathML">
58
+ <msub>
59
+ <mrow>
60
+ <mrow>
61
+ <mi mathvariant="bold-italic">F</mi>
62
+ </mrow>
63
+ </mrow>
64
+ <mrow>
65
+ <mrow>
66
+ <mi mathvariant="bold-italic">Α</mi>
67
+ </mrow>
68
+ </mrow>
69
+ </msub>
70
+ </math>
71
+ </stem>
72
+ </formula>
73
+ </sections>
74
+ </iso-standard>
75
+ OUTPUT
76
+ end
77
+
78
+ it "ignores review blocks unless document is in draft mode" do
79
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
80
+ #{ASCIIDOC_BLANK_HDR}
81
+ [[foreword]]
82
+ .Foreword
83
+ Foreword
84
+
85
+ [reviewer=ISO,date=20170101,from=foreword,to=foreword]
86
+ ****
87
+ A Foreword shall appear in each document. The generic text is shown here. It does not contain requirements, recommendations or permissions.
88
+
89
+ For further information on the Foreword, see *ISO/IEC Directives, Part 2, 2016, Clause 12.*
90
+ ****
91
+ INPUT
92
+ #{BLANK_HDR}
93
+ <sections>
94
+ <p id="foreword">Foreword</p>
95
+ </sections>
96
+ </iso-standard>
97
+ OUTPUT
98
+ end
99
+
100
+ it "processes review blocks if document is in draft mode" do
101
+ output = Asciidoctor.convert(<<~"INPUT", *OPTIONS)
102
+ = Document title
103
+ Author
104
+ :docfile: test.adoc
105
+ :nodoc:
106
+ :novalid:
107
+ :draft: 1.2
108
+ :no-isobib:
109
+
110
+ [[foreword]]
111
+ .Foreword
112
+ Foreword
113
+
114
+ [reviewer=ISO,date=20170101,from=foreword,to=foreword]
115
+ ****
116
+ A Foreword shall appear in each document. The generic text is shown here. It does not contain requirements, recommendations or permissions.
117
+
118
+ For further information on the Foreword, see *ISO/IEC Directives, Part 2, 2016, Clause 12.*
119
+ ****
120
+ INPUT
121
+ expect(xmlpp(strip_guid(output).sub(/^.+<sections>/m, "<iso-standard><sections>")))
122
+ .to be_equivalent_to xmlpp(<<~"OUTPUT")
123
+ <iso-standard>
124
+ <sections>
125
+ <p id="foreword">Foreword</p>
126
+ <review date="20170101T00:00:00Z" from="foreword" id="_" reviewer="ISO" to="foreword">
127
+ <p id="_">A Foreword shall appear in each document. The generic text is shown here. It does not contain requirements, recommendations or permissions.</p>
128
+ <p id="_">For further information on the Foreword, see#{' '}
129
+ <strong>ISO/IEC Directives, Part 2, 2016, Clause 12.</strong></p>
130
+ </review>
131
+ </sections>
132
+ </iso-standard>
133
+ OUTPUT
134
+ end
135
+
136
+ it "processes term notes" do
137
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
138
+ #{ASCIIDOC_BLANK_HDR}
139
+ == Terms and Definitions
140
+
141
+ === Term1
142
+
143
+ NOTE: This is a note
144
+ INPUT
145
+ #{BLANK_HDR}
146
+ <sections>
147
+ <terms id="_" obligation="normative">
148
+ <title>Terms and definitions</title>
149
+ #{TERM_BOILERPLATE}#{' '}
150
+ <term id="term-term1">
151
+ <preferred>Term1</preferred>
152
+ <termnote id="_">
153
+ <p id="_">This is a note</p></termnote>
154
+ </term>
155
+ </terms>
156
+ </sections>
157
+ </iso-standard>
158
+ OUTPUT
159
+ end
160
+
161
+ it "processes notes" do
162
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
163
+ #{ASCIIDOC_BLANK_HDR}
164
+ NOTE: This is a note
165
+ INPUT
166
+ #{BLANK_HDR}
167
+ <sections>
168
+ <note id="_">
169
+ <p id="_">This is a note</p>
170
+ </note>
171
+ </sections>
172
+ </iso-standard>
173
+ OUTPUT
174
+ end
175
+
176
+ it "processes literals" do
177
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
178
+ #{ASCIIDOC_BLANK_HDR}
179
+ ....
180
+ LITERAL
181
+ ....
182
+ INPUT
183
+ #{BLANK_HDR}
184
+ <sections>
185
+ <figure id="_">
186
+ <pre id="_">LITERAL</pre>
187
+ </figure>
188
+ </sections>
189
+ </iso-standard>
190
+ OUTPUT
191
+ end
192
+
193
+ it "processes simple admonitions with Asciidoc names" do
194
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
195
+ #{ASCIIDOC_BLANK_HDR}
196
+ CAUTION: Only use paddy or parboiled rice for the determination of husked rice yield.
197
+ INPUT
198
+ #{BLANK_HDR}
199
+ <sections>
200
+ <admonition id="_" type="caution">
201
+ <p id="_">Only use paddy or parboiled rice for the determination of husked rice yield.</p>
202
+ </admonition>
203
+ </sections>
204
+ </iso-standard>
205
+ OUTPUT
206
+ end
207
+
208
+ it "processes complex admonitions with non-Asciidoc names" do
209
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
210
+ #{ASCIIDOC_BLANK_HDR}
211
+ [CAUTION,type=Safety Precautions]
212
+ .Safety Precautions
213
+ ====
214
+ While werewolves are hardy community members, keep in mind the following dietary concerns:
215
+
216
+ . They are allergic to cinnamon.
217
+ . More than two glasses of orange juice in 24 hours makes them howl in harmony with alarms and sirens.
218
+ . Celery makes them sad.
219
+ ====
220
+ INPUT
221
+ #{BLANK_HDR}
222
+ <sections>
223
+ <admonition id="_" type="safety precautions">
224
+ <name>Safety Precautions</name>
225
+ <p id="_">While werewolves are hardy community members, keep in mind the following dietary concerns:</p>
226
+ <ol id="_">
227
+ <li>
228
+ <p id="_">They are allergic to cinnamon.</p>
229
+ </li>
230
+ <li>
231
+ <p id="_">More than two glasses of orange juice in 24 hours makes them howl in harmony with alarms and sirens.</p>
232
+ </li>
233
+ <li>
234
+ <p id="_">Celery makes them sad.</p>
235
+ </li>
236
+ </ol>
237
+ </admonition>
238
+ </sections>
239
+ </iso-standard>
240
+ OUTPUT
241
+ end
242
+
243
+ it "processes term examples" do
244
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
245
+ #{ASCIIDOC_BLANK_HDR}
246
+ == Terms and Definitions
247
+
248
+ === Term1
249
+
250
+ [example]
251
+ This is an example
252
+ INPUT
253
+ #{BLANK_HDR}
254
+ <sections>
255
+ <terms id="_" obligation="normative">
256
+ <title>Terms and definitions</title>
257
+ #{TERM_BOILERPLATE}
258
+ <term id="term-term1">
259
+ <preferred>Term1</preferred>
260
+ <termexample id="_">
261
+ <p id="_">This is an example</p></termexample>
262
+ </term>
263
+ </terms>
264
+ </sections>
265
+ </iso-standard>
266
+ OUTPUT
267
+ end
268
+
269
+ it "processes examples" do
270
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
271
+ #{ASCIIDOC_BLANK_HDR}
272
+ [example]
273
+ ====
274
+ This is an example
275
+
276
+ Amen
277
+ ====
278
+ INPUT
279
+ #{BLANK_HDR}
280
+ <sections>
281
+ <example id="_">
282
+ <p id="_">This is an example</p>
283
+ <p id="_">Amen</p>
284
+ </example>
285
+ </sections>
286
+ </iso-standard>
287
+ OUTPUT
288
+ end
289
+
290
+ it "processes preambles" do
291
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
292
+ #{ASCIIDOC_BLANK_HDR}
293
+ This is a preamble
294
+
295
+ == Section 1
296
+ INPUT
297
+ #{BLANK_HDR}
298
+ <preface>
299
+ <foreword id="_" obligation="informative">
300
+ <title>Foreword</title>
301
+ <p id="_">This is a preamble</p>
302
+ </foreword>
303
+ </preface>
304
+ <sections>
305
+ <clause id="_" inline-header="false" obligation="normative">
306
+ <title>Section 1</title>
307
+ </clause>
308
+ </sections>
309
+ </iso-standard>
310
+ OUTPUT
311
+ end
312
+
313
+ it "processes images" do
314
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
315
+ #{ASCIIDOC_BLANK_HDR}
316
+ .Split-it-right sample divider
317
+ image::spec/examples/rice_images/rice_image1.png[]
318
+
319
+ INPUT
320
+ #{BLANK_HDR}
321
+ <sections>
322
+ <figure id="_">
323
+ <name>Split-it-right sample divider</name>
324
+ <image height="auto" id="_" mimetype="image/png" src="spec/examples/rice_images/rice_image1.png" width="auto"/>
325
+ </figure>
326
+ </sections>
327
+ </iso-standard>
328
+ OUTPUT
329
+ end
330
+
331
+ it "accepts width and height attributes on images" do
332
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
333
+ #{ASCIIDOC_BLANK_HDR}
334
+ [height=4,width=3]
335
+ image::spec/examples/rice_images/rice_image1.png[]
336
+
337
+ INPUT
338
+ #{BLANK_HDR}
339
+ <sections>
340
+ <figure id="_">
341
+ <image height="4" id="_" mimetype="image/png" src="spec/examples/rice_images/rice_image1.png" width="3"/>
342
+ </figure>
343
+ </sections>
344
+ </iso-standard>
345
+ OUTPUT
346
+ end
347
+
348
+ it "accepts auto for width and height attributes on images" do
349
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
350
+ #{ASCIIDOC_BLANK_HDR}
351
+ [height=4,width=auto]
352
+ image::spec/examples/rice_images/rice_image1.png[]
353
+
354
+ INPUT
355
+ #{BLANK_HDR}
356
+ <sections>
357
+ <figure id="_">
358
+ <image height="4" id="_" mimetype="image/png" src="spec/examples/rice_images/rice_image1.png" width="auto"/>
359
+ </figure>
360
+ </sections>
361
+ </iso-standard>
362
+ OUTPUT
363
+ end
364
+
365
+ it "accepts alignment attribute on paragraphs" do
366
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
367
+ #{ASCIIDOC_BLANK_HDR}
368
+ [align=right]
369
+ This para is right-aligned.
370
+ INPUT
371
+ #{BLANK_HDR}
372
+ <sections>
373
+ <p align="right" id="_">This para is right-aligned.</p>
374
+ </sections>
375
+ </iso-standard>
376
+ OUTPUT
377
+ end
378
+
379
+ it "processes blockquotes" do
380
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
381
+ #{ASCIIDOC_BLANK_HDR}
382
+ [quote, ISO, "ISO7301,section 1"]
383
+ ____
384
+ Block quotation
385
+ ____
386
+ INPUT
387
+ #{BLANK_HDR}
388
+ <sections>
389
+ <quote id="_">
390
+ <source bibitemid="ISO7301" citeas="" type="inline">
391
+ <localityStack>
392
+ <locality type="section">
393
+ <referenceFrom>1</referenceFrom>
394
+ </locality>
395
+ </localityStack>
396
+ </source>
397
+ <author>ISO</author>
398
+ <p id="_">Block quotation</p>
399
+ </quote>
400
+ </sections>
401
+ </iso-standard>
402
+ OUTPUT
403
+ end
404
+
405
+ it "processes source code" do
406
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
407
+ #{ASCIIDOC_BLANK_HDR}
408
+ [source,ruby]
409
+ --
410
+ puts "Hello, world."
411
+ %w{a b c}.each do |x|
412
+ puts x
413
+ end
414
+ --
415
+ INPUT
416
+ #{BLANK_HDR}
417
+ <sections>
418
+ <sourcecode id="_" lang="ruby">
419
+ puts "Hello, world."
420
+ %w{a b c}.each do |x|
421
+ puts x
422
+ end
423
+ </sourcecode>
424
+ </sections>
425
+ </iso-standard>
426
+ OUTPUT
427
+ end
428
+
429
+ it "processes callouts" do
430
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
431
+ #{ASCIIDOC_BLANK_HDR}
432
+ [source,ruby]
433
+ --
434
+ puts "Hello, world." <1>
435
+ %w{a b c}.each do |x|
436
+ puts x <2>
437
+ end
438
+ --
439
+ <1> This is one callout
440
+ <2> This is another callout
441
+ INPUT
442
+ #{BLANK_HDR}
443
+ <sections>
444
+ <sourcecode id="_" lang="ruby">
445
+ puts "Hello, world." <callout target="_">1</callout>
446
+ %w{a b c}.each do |x|
447
+ puts x <callout target="_">2</callout>
448
+ end
449
+ <annotation id="_">
450
+ <p id="_">This is one callout</p>
451
+ </annotation>
452
+ <annotation id="_">
453
+ <p id="_">This is another callout</p>
454
+ </annotation>
455
+ </sourcecode>
456
+ </sections>
457
+ </iso-standard>
458
+ OUTPUT
459
+ end
460
+
461
+ it "processes unmodified term sources" do
462
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
463
+ #{ASCIIDOC_BLANK_HDR}
464
+ == Terms and Definitions
465
+
466
+ === Term1
467
+
468
+ [.source]
469
+ <<ISO2191,section=1>>
470
+ INPUT
471
+ #{BLANK_HDR}
472
+ <sections>
473
+ <terms id="_" obligation="normative">
474
+ <title>Terms and definitions</title>
475
+ #{TERM_BOILERPLATE}
476
+ <term id="term-term1">
477
+ <preferred>Term1</preferred>
478
+ <termsource status="identical">
479
+ <origin bibitemid="ISO2191" citeas="" type="inline">
480
+ <localityStack>
481
+ <locality type="section">
482
+ <referenceFrom>1</referenceFrom></locality>
483
+ </localityStack>
484
+ </origin>
485
+ </termsource>
486
+ </term>
487
+ </terms>
488
+ </sections>
489
+ </iso-standard>
490
+ OUTPUT
491
+ end
492
+
493
+ it "processes modified term sources" do
494
+ expect(xmlpp(strip_guid(Asciidoctor.convert(<<~"INPUT", *OPTIONS)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
495
+ #{ASCIIDOC_BLANK_HDR}
496
+ == Terms and Definitions
497
+
498
+ === Term1
499
+
500
+ [.source]
501
+ <<ISO2191,section=1>>, with adjustments
502
+ INPUT
503
+ #{BLANK_HDR}
504
+ <sections>
505
+ <terms id="_" obligation="normative">
506
+ <title>Terms and definitions</title>
507
+ #{TERM_BOILERPLATE}
508
+ <term id="term-term1">
509
+ <preferred>Term1</preferred>
510
+ <termsource status="modified">
511
+ <origin bibitemid="ISO2191" citeas="" type="inline">
512
+ <localityStack>
513
+ <locality type="section">
514
+ <referenceFrom>1</referenceFrom></locality>
515
+ </localityStack>
516
+ </origin>
517
+ <modification>
518
+ <p id="_">with adjustments</p>
519
+ </modification>
520
+ </termsource>
521
+ </term>
522
+ </terms>
523
+ </sections>
524
+ </iso-standard>
525
+ OUTPUT
526
+ end
527
+ end