metanorma-bsi 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/.hound.yml +3 -0
  4. data/.rubocop.yml +14 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +7 -0
  7. data/LICENSE +25 -0
  8. data/README.adoc +199 -0
  9. data/Rakefile +8 -0
  10. data/bin/rspec +18 -0
  11. data/lib/asciidoctor/bsi/basicdoc.rng +1131 -0
  12. data/lib/asciidoctor/bsi/biblio.rng +1235 -0
  13. data/lib/asciidoctor/bsi/bsi.rng +120 -0
  14. data/lib/asciidoctor/bsi/bsi_intro_en.xml +105 -0
  15. data/lib/asciidoctor/bsi/cleanup.rb +78 -0
  16. data/lib/asciidoctor/bsi/cleanup_ref.rb +183 -0
  17. data/lib/asciidoctor/bsi/converter.rb +83 -0
  18. data/lib/asciidoctor/bsi/front.rb +67 -0
  19. data/lib/asciidoctor/bsi/isodoc.rng +1870 -0
  20. data/lib/asciidoctor/bsi/isostandard.rng +477 -0
  21. data/lib/asciidoctor/bsi/reqt.rng +194 -0
  22. data/lib/asciidoctor/bsi/validate.rb +224 -0
  23. data/lib/asciidoctor/bsi/validate_list.rb +72 -0
  24. data/lib/asciidoctor/bsi/validate_requirement.rb +163 -0
  25. data/lib/isodoc/bsi/base_convert.rb +91 -0
  26. data/lib/isodoc/bsi/bsi.international-standard.xsl +6540 -0
  27. data/lib/isodoc/bsi/html/html_bsi_intro.html +8 -0
  28. data/lib/isodoc/bsi/html/html_bsi_titlepage.html +50 -0
  29. data/lib/isodoc/bsi/html/htmlstyle.css +968 -0
  30. data/lib/isodoc/bsi/html/htmlstyle.scss +699 -0
  31. data/lib/isodoc/bsi/html_convert.rb +56 -0
  32. data/lib/isodoc/bsi/i18n-en.yaml +56 -0
  33. data/lib/isodoc/bsi/i18n.rb +15 -0
  34. data/lib/isodoc/bsi/init.rb +24 -0
  35. data/lib/isodoc/bsi/metadata.rb +33 -0
  36. data/lib/isodoc/bsi/pdf_convert.rb +17 -0
  37. data/lib/isodoc/bsi/presentation_xml_convert.rb +72 -0
  38. data/lib/isodoc/bsi/sts_convert.rb +30 -0
  39. data/lib/isodoc/bsi/xref.rb +134 -0
  40. data/lib/metanorma-bsi.rb +15 -0
  41. data/lib/metanorma/bsi.rb +6 -0
  42. data/lib/metanorma/bsi/processor.rb +51 -0
  43. data/lib/metanorma/bsi/version.rb +6 -0
  44. data/metanorma-bsi.gemspec +47 -0
  45. data/spec/asciidoctor/base_spec.rb +778 -0
  46. data/spec/asciidoctor/blocks_spec.rb +553 -0
  47. data/spec/asciidoctor/cleanup_spec.rb +547 -0
  48. data/spec/asciidoctor/inline_spec.rb +176 -0
  49. data/spec/asciidoctor/lists_spec.rb +194 -0
  50. data/spec/asciidoctor/refs_spec.rb +318 -0
  51. data/spec/asciidoctor/section_spec.rb +382 -0
  52. data/spec/asciidoctor/validate_spec.rb +858 -0
  53. data/spec/assets/header.html +7 -0
  54. data/spec/assets/html.css +2 -0
  55. data/spec/assets/iso.xml +71 -0
  56. data/spec/assets/rice_image1.png +0 -0
  57. data/spec/assets/word.css +2 -0
  58. data/spec/assets/wordintro.html +4 -0
  59. data/spec/assets/xref_error.adoc +7 -0
  60. data/spec/isodoc/blocks_spec.rb +259 -0
  61. data/spec/isodoc/i18n_spec.rb +442 -0
  62. data/spec/isodoc/inline_spec.rb +287 -0
  63. data/spec/isodoc/iso_spec.rb +116 -0
  64. data/spec/isodoc/metadata_spec.rb +262 -0
  65. data/spec/isodoc/postproc_spec.rb +137 -0
  66. data/spec/isodoc/ref_spec.rb +376 -0
  67. data/spec/isodoc/section_spec.rb +467 -0
  68. data/spec/isodoc/terms_spec.rb +246 -0
  69. data/spec/isodoc/xref_spec.rb +1730 -0
  70. data/spec/metanorma/processor_spec.rb +76 -0
  71. data/spec/spec_helper.rb +291 -0
  72. data/spec/vcr_cassettes/iso-639.yml +182 -0
  73. data/spec/vcr_cassettes/isobib_get_639_1967.yml +136 -0
  74. data/spec/vcr_cassettes/multistandard.yml +352 -0
  75. metadata +343 -0
@@ -0,0 +1,467 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe IsoDoc do
4
+ it "processes section names" do
5
+ input = <<~INPUT
6
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
7
+ <preface>
8
+ <foreword obligation="informative">
9
+ <title>Foreword</title>
10
+ <p id="A">This is a preamble</p>
11
+ </foreword>
12
+ <introduction id="B" obligation="informative"><title>Introduction</title><clause id="C" inline-header="false" obligation="informative">
13
+ <title>Introduction Subsection</title>
14
+ </clause>
15
+ <p>This is patent boilerplate</p>
16
+ </introduction></preface><sections>
17
+ <clause id="D" obligation="normative" type="scope">
18
+ <title>Scope</title>
19
+ <p id="E">Text</p>
20
+ </clause>
21
+
22
+ <clause id="H" obligation="normative"><title>Terms, definitions, symbols and abbreviated terms</title><terms id="I" obligation="normative">
23
+ <title>Normal Terms</title>
24
+ <term id="J">
25
+ <preferred>Term2</preferred>
26
+ </term>
27
+ </terms>
28
+ <definitions id="K">
29
+ <dl>
30
+ <dt>Symbol</dt>
31
+ <dd>Definition</dd>
32
+ </dl>
33
+ </definitions>
34
+ </clause>
35
+ <definitions id="L">
36
+ <dl>
37
+ <dt>Symbol</dt>
38
+ <dd>Definition</dd>
39
+ </dl>
40
+ </definitions>
41
+ <clause id="M" inline-header="false" obligation="normative"><title>Clause 4</title><clause id="N" inline-header="false" obligation="normative">
42
+ <title>Introduction</title>
43
+ </clause>
44
+ <clause id="O" inline-header="false" obligation="normative">
45
+ <title>Clause 4.2</title>
46
+ </clause></clause>
47
+
48
+ </sections><annex id="P" inline-header="false" obligation="normative">
49
+ <title>Annex</title>
50
+ <clause id="Q" inline-header="false" obligation="normative">
51
+ <title>Annex A.1</title>
52
+ <clause id="Q1" inline-header="false" obligation="normative">
53
+ <title>Annex A.1a</title>
54
+ </clause>
55
+ </clause>
56
+ <appendix id="Q2" inline-header="false" obligation="normative">
57
+ <title>An Appendix</title>
58
+ </appendix>
59
+ </annex><bibliography><references id="R" obligation="informative" normative="true">
60
+ <title>Normative References</title>
61
+ </references>
62
+ <clause id="S" obligation="informative">
63
+ <title>Bibliography</title>
64
+ <references id="T" obligation="informative" normative="false">
65
+ <title>Bibliography Subsection</title>
66
+ </references>
67
+ </clause>
68
+ </bibliography>
69
+ </iso-standard>
70
+ INPUT
71
+
72
+ presxml = <<~OUTPUT
73
+ <iso-standard xmlns="http://riboseinc.com/isoxml" type="presentation">
74
+ <preface>
75
+ <foreword obligation="informative">
76
+ <title>Foreword</title>
77
+ <p id="A">This is a preamble</p>
78
+ </foreword>
79
+ <introduction id="B" obligation="informative"><title depth="1">0<tab/>Introduction</title><clause id="C" inline-header="false" obligation="informative">
80
+ <title depth="2">0.1<tab/>Introduction Subsection</title>
81
+ </clause>
82
+ <p>This is patent boilerplate</p>
83
+ </introduction></preface><sections>
84
+ <clause id="D" obligation="normative" type="scope">
85
+ <title depth="1">1<tab/>Scope</title>
86
+ <p id="E">Text</p>
87
+ </clause>
88
+
89
+ <clause id="H" obligation="normative"><title depth="1">3<tab/>Terms, definitions, symbols and abbreviated terms</title><terms id="I" obligation="normative">
90
+ <title depth="2">3.1<tab/>Normal Terms</title>
91
+ <term id="J"><name>3.1.1</name>
92
+ <preferred>Term2</preferred>
93
+ </term>
94
+ </terms>
95
+ <definitions id="K" inline-header='true'><title>3.2</title>
96
+ <dl>
97
+ <dt>Symbol</dt>
98
+ <dd>Definition</dd>
99
+ </dl>
100
+ </definitions>
101
+ </clause>
102
+ <definitions id="L"><title>4</title>
103
+ <dl>
104
+ <dt>Symbol</dt>
105
+ <dd>Definition</dd>
106
+ </dl>
107
+ </definitions>
108
+ <clause id="M" inline-header="false" obligation="normative"><title depth="1">5<tab/>Clause 4</title><clause id="N" inline-header="false" obligation="normative">
109
+ <title depth="2">5.1<tab/>Introduction</title>
110
+ </clause>
111
+ <clause id="O" inline-header="false" obligation="normative">
112
+ <title depth="2">5.2<tab/>Clause 4.2</title>
113
+ </clause></clause>
114
+
115
+ </sections><annex id="P" inline-header="false" obligation="normative">
116
+ <title><strong>Annex A</strong><br/>(normative)<br/><br/><strong>Annex</strong></title>
117
+ <clause id="Q" inline-header="false" obligation="normative">
118
+ <title depth="2">A.1<tab/>Annex A.1</title>
119
+ <clause id="Q1" inline-header="false" obligation="normative">
120
+ <title depth="3">A.1.1<tab/>Annex A.1a</title>
121
+ </clause>
122
+ </clause>
123
+ <appendix id="Q2" inline-header="false" obligation="normative">
124
+ <title depth="2">Appendix 1<tab/>An Appendix</title>
125
+ </appendix>
126
+ </annex><bibliography><references id="R" obligation="informative" normative="true">
127
+ <title depth="1">2<tab/>Normative References</title>
128
+ </references><clause id="S" obligation="informative">
129
+ <title depth="1">Bibliography</title>
130
+ <references id="T" obligation="informative" normative="false">
131
+ <title depth="2">Bibliography Subsection</title>
132
+ </references>
133
+ </clause>
134
+ </bibliography>
135
+ </iso-standard>
136
+ OUTPUT
137
+
138
+ html = <<~OUTPUT
139
+ <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en">
140
+ <head/>
141
+ <body lang="en">
142
+ <div class="title-section">
143
+ <p>&#160;</p>
144
+ </div>
145
+ <br/>
146
+ <div class="prefatory-section">
147
+ <p>&#160;</p>
148
+ </div>
149
+ <br/>
150
+ <div class="main-section">
151
+ <br/>
152
+ #{IEC_TITLE}
153
+ <div>
154
+ <h1 class="ForewordTitle">FOREWORD</h1>
155
+ <div class="boilerplate_legal"/>
156
+ <p id="A">This is a preamble</p>
157
+ </div>
158
+ <br/>
159
+ <div class="Section3" id="B">
160
+ <h1 class="IntroTitle">0&#8195;Introduction</h1>
161
+ <div id="C">
162
+ <h2>0.1&#8195;Introduction Subsection</h2>
163
+ </div>
164
+ <p>This is patent boilerplate</p>
165
+ </div>
166
+ #{IEC_TITLE1}
167
+ <div id="D">
168
+ <h1>1&#8195;Scope</h1>
169
+ <p id="E">Text</p>
170
+ </div>
171
+ <div>
172
+ <h1>2&#8195;Normative References</h1>
173
+ </div>
174
+ <div id="H"><h1>3&#8195;Terms, definitions, symbols and abbreviated terms</h1>
175
+ <div id="I">
176
+ <h2>3.1&#8195;Normal Terms</h2>
177
+ <p class="TermNum" id="J">3.1.1</p>
178
+ <p class="Terms" style="text-align:left;">Term2</p>
179
+ </div><div id="K"><span class='zzMoveToFollowing'>
180
+ <b>3.2&#8195;</b>
181
+ </span>
182
+ <dl><dt><p>Symbol</p></dt><dd>Definition</dd></dl>
183
+ </div></div>
184
+ <div id="L" class="Symbols">
185
+ <h1>4</h1>
186
+ <dl>
187
+ <dt>
188
+ <p>Symbol</p>
189
+ </dt>
190
+ <dd>Definition</dd>
191
+ </dl>
192
+ </div>
193
+ <div id="M">
194
+ <h1>5&#8195;Clause 4</h1>
195
+ <div id="N">
196
+ <h2>5.1&#8195;Introduction</h2>
197
+ </div>
198
+ <div id="O">
199
+ <h2>5.2&#8195;Clause 4.2</h2>
200
+ </div>
201
+ </div>
202
+ <br/>
203
+ <div id="P" class="Section3">
204
+ <h1 class="Annex"><b>Annex A</b><br/>(normative)<br/><br/><b>Annex</b></h1>
205
+ <div id="Q">
206
+ <h2>A.1&#8195;Annex A.1</h2>
207
+ <div id="Q1">
208
+ <h3>A.1.1&#8195;Annex A.1a</h3>
209
+ </div>
210
+ </div>
211
+ <div id="Q2">
212
+ <h2>Appendix 1&#8195;An Appendix</h2>
213
+ </div>
214
+
215
+ </div>
216
+ <br/>
217
+ <div>
218
+ <h1 class="Section3">Bibliography</h1>
219
+ <div>
220
+ <h2 class="Section3">Bibliography Subsection</h2>
221
+ </div>
222
+ </div>
223
+ </div>
224
+ </body>
225
+ </html>
226
+ OUTPUT
227
+
228
+ expect(xmlpp(IsoDoc::BSI::PresentationXMLConvert.new({}).convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
229
+ expect(xmlpp(IsoDoc::BSI::HtmlConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
230
+ end
231
+
232
+ it "processes subclauses with and without titles" do
233
+ expect(xmlpp(IsoDoc::BSI::PresentationXMLConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
234
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
235
+ <sections>
236
+ <clause id="D" obligation="normative">
237
+ <title>Scope</title>
238
+ <clause id="D1" obligation="normative">
239
+ <title>Scope 1</title>
240
+ </clause>
241
+ <clause id="D2" obligation="normative">
242
+ </clause>
243
+ </clause>
244
+ </sections>
245
+ </iso-standard>
246
+ INPUT
247
+ <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
248
+ <sections>
249
+ <clause id='D' obligation='normative'>
250
+ <title depth='1'>
251
+ 1
252
+ <tab/>
253
+ Scope
254
+ </title>
255
+ <clause id='D1' obligation='normative'>
256
+ <title depth='2'>
257
+ 1.1
258
+ <tab/>
259
+ Scope 1
260
+ </title>
261
+ </clause>
262
+ <clause id='D2' obligation='normative' inline-header='true'>
263
+ <title>1.2</title>
264
+ </clause>
265
+ </clause>
266
+ </sections>
267
+ </iso-standard>
268
+ OUTPUT
269
+ end
270
+
271
+
272
+ it "processes simple terms & definitions" do
273
+ expect(xmlpp(IsoDoc::BSI::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
274
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
275
+ <sections>
276
+ <terms id="H" obligation="normative"><title>1<tab/>Terms, Definitions, Symbols and Abbreviated Terms</title>
277
+ <term id="J">
278
+ <name>1.1</name>
279
+ <preferred>Term2</preferred>
280
+ </term>
281
+ </terms>
282
+ </sections>
283
+ </iso-standard>
284
+ INPUT
285
+ #{HTML_HDR}
286
+ <div id="">
287
+ <h1 class="ForewordTitle">FOREWORD</h1>
288
+ <div class="boilerplate_legal"/>
289
+ </div>
290
+ #{IEC_TITLE1}
291
+ <div id="H"><h1>1&#8195;Terms, Definitions, Symbols and Abbreviated Terms</h1>
292
+ <p class="TermNum" id="J">1.1</p>
293
+ <p class="Terms" style="text-align:left;">Term2</p>
294
+ </div>
295
+ </div>
296
+ </body>
297
+ </html>
298
+ OUTPUT
299
+ end
300
+
301
+ it "processes inline section headers" do
302
+ expect(xmlpp(IsoDoc::BSI::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
303
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
304
+ <sections>
305
+ <clause id="M" inline-header="false" obligation="normative"><title>1<tab/>Clause 4</title>
306
+ <clause id="N" inline-header="false" obligation="normative">
307
+ <title>1.1<tab/>Introduction</title>
308
+ </clause>
309
+ <clause id="O" inline-header="true" obligation="normative">
310
+ <title>1.2<tab/>Clause 4.2</title>
311
+ </clause></clause>
312
+
313
+ </sections>
314
+ </iso-standard>
315
+ INPUT
316
+ #{HTML_HDR}
317
+ <div id="">
318
+ <h1 class="ForewordTitle">FOREWORD</h1>
319
+ <div class="boilerplate_legal"/>
320
+ </div>
321
+ #{IEC_TITLE1}
322
+ <div id="M">
323
+ <h1>1&#8195;Clause 4</h1>
324
+ <div id="N">
325
+ <h2>1.1&#8195;Introduction</h2>
326
+ </div>
327
+ <div id="O">
328
+ <span class="zzMoveToFollowing"><b>1.2&#8195;Clause 4.2&#8195;</b></span>
329
+ </div>
330
+ </div>
331
+ </div>
332
+ </body>
333
+ </html>
334
+ OUTPUT
335
+ end
336
+
337
+ it "adds boilerplate to foreword" do
338
+ expect(xmlpp(IsoDoc::BSI::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
339
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
340
+ <bibdata>
341
+ <ext><doctype>International Standard</doctype></ext>
342
+ </bibdata>
343
+ <boilerplate>
344
+ <legal-statement>
345
+ <p>Boilerplate</p>
346
+ </legal-statement>
347
+ </boilerplate>
348
+ <sections/>
349
+ </iso-standard>
350
+ INPUT
351
+ #{HTML_HDR}
352
+ <div id="">
353
+ <h1 class="ForewordTitle">FOREWORD</h1>
354
+ <div class="boilerplate_legal">
355
+ <p>Boilerplate</p>
356
+ </div>
357
+ </div>
358
+ #{IEC_TITLE1}
359
+ </div>
360
+ </body>
361
+ </html>
362
+ OUTPUT
363
+ end
364
+
365
+ it "does not add boilerplate to foreword in amendments" do
366
+ expect(xmlpp(IsoDoc::BSI::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
367
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
368
+ <bibdata>
369
+ <ext><doctype>Amendment</doctype></ext>
370
+ </bibdata>
371
+ <boilerplate>
372
+ <legal-statement>
373
+ <p>Boilerplate</p>
374
+ </legal-statement>
375
+ </boilerplate>
376
+ <sections/>
377
+ </iso-standard>
378
+ INPUT
379
+ #{HTML_HDR}
380
+ <div id="">
381
+ <h1 class="ForewordTitle">FOREWORD</h1>
382
+ </div>
383
+ #{IEC_TITLE1}
384
+ </div>
385
+ </body>
386
+ </html>
387
+ OUTPUT
388
+ end
389
+
390
+ it "deals with unnumbered normative reference subheadings" do
391
+ input = <<~INPUT
392
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
393
+ <sections>
394
+ <clause id="D" obligation="normative" type="scope">
395
+ <title>Scope</title>
396
+ <p id="E">Text</p>
397
+ </clause>
398
+ </sections>
399
+ <bibliography>
400
+ <clause id="S" obligation="normative">
401
+ <title>Bibliography</title>
402
+ <references id="T" obligation="informative" normative="true" unnumbered="true">
403
+ <title>Bibliography Subsection</title>
404
+ </references>
405
+ </clause>
406
+ </bibliography>
407
+ </iso-standard>
408
+ INPUT
409
+
410
+ presxml = <<~PRESXML
411
+ <iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
412
+ <sections>
413
+ <clause id='D' obligation='normative' type='scope'>
414
+ <title depth='1'>
415
+ 1
416
+ <tab/>
417
+ Scope
418
+ </title>
419
+ <p id='E'>Text</p>
420
+ </clause>
421
+ </sections>
422
+ <bibliography>
423
+ <clause id='S' obligation='normative'>
424
+ <title depth='1'>
425
+ 2
426
+ <tab/>
427
+ Bibliography
428
+ </title>
429
+ <references id='T' obligation='informative' normative='true' unnumbered='true'>
430
+ <title depth='2'>Bibliography Subsection</title>
431
+ </references>
432
+ </clause>
433
+ </bibliography>
434
+ </iso-standard>
435
+ PRESXML
436
+
437
+ html = <<~HTML
438
+ #{HTML_HDR}
439
+ <div id=''>
440
+ <h1 class='ForewordTitle'>FOREWORD</h1>
441
+ <div class='boilerplate_legal'/>
442
+ </div>
443
+ <p class='zzSTDTitle1'>
444
+ <b/>
445
+ </p>
446
+ <p class='zzSTDTitle1'>&#160;</p>
447
+ <div id='D'>
448
+ <h1> 1 &#8195; Scope </h1>
449
+ <p id='E'>Text</p>
450
+ </div>
451
+ <div>
452
+ <h1> 2 &#8195; Bibliography </h1>
453
+ <div>
454
+ <h2 class='Section3'>Bibliography Subsection</h2>
455
+ </div>
456
+ </div>
457
+ </div>
458
+ </body>
459
+ </html>
460
+ HTML
461
+
462
+ expect(xmlpp(IsoDoc::BSI::PresentationXMLConvert.new({})
463
+ .convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
464
+ expect(xmlpp(IsoDoc::BSI::HtmlConvert.new({})
465
+ .convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
466
+ end
467
+ end