metanorma-iso 1.8.4 → 1.9.0.1

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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +1 -1
  3. data/.rubocop.yml +1 -1
  4. data/lib/asciidoctor/iso/cleanup.rb +0 -1
  5. data/lib/asciidoctor/iso/isodoc.rng +50 -8
  6. data/lib/asciidoctor/iso/isostandard.rng +7 -3
  7. data/lib/asciidoctor/iso/section.rb +3 -0
  8. data/lib/asciidoctor/iso/validate.rb +4 -17
  9. data/lib/asciidoctor/iso/validate_section.rb +50 -34
  10. data/lib/asciidoctor/iso/validate_style.rb +3 -3
  11. data/lib/isodoc/iso/base_convert.rb +41 -16
  12. data/lib/isodoc/iso/html/isodoc.css +475 -20
  13. data/lib/isodoc/iso/html/isodoc.scss +456 -23
  14. data/lib/isodoc/iso/html/wordstyle.css +202 -31
  15. data/lib/isodoc/iso/html/wordstyle.scss +194 -32
  16. data/lib/isodoc/iso/iso.amendment.xsl +480 -388
  17. data/lib/isodoc/iso/iso.international-standard.xsl +480 -388
  18. data/lib/isodoc/iso/isosts_convert.rb +12 -13
  19. data/lib/isodoc/iso/metadata.rb +2 -2
  20. data/lib/isodoc/iso/presentation_xml_convert.rb +62 -9
  21. data/lib/isodoc/iso/sts_convert.rb +4 -5
  22. data/lib/isodoc/iso/word_convert.rb +153 -39
  23. data/lib/isodoc/iso/xref.rb +17 -1
  24. data/lib/metanorma/iso/version.rb +1 -1
  25. data/metanorma-iso.gemspec +4 -4
  26. data/spec/asciidoctor/section_spec.rb +128 -7
  27. data/spec/asciidoctor/validate_spec.rb +15 -15
  28. data/spec/isodoc/amd_spec.rb +193 -201
  29. data/spec/isodoc/blocks_spec.rb +100 -88
  30. data/spec/isodoc/i18n_spec.rb +36 -36
  31. data/spec/isodoc/inline_spec.rb +472 -2
  32. data/spec/isodoc/iso_spec.rb +86 -138
  33. data/spec/isodoc/postproc_spec.rb +19 -10
  34. data/spec/isodoc/ref_spec.rb +6 -6
  35. data/spec/isodoc/section_spec.rb +394 -276
  36. data/spec/isodoc/table_spec.rb +166 -231
  37. data/spec/isodoc/terms_spec.rb +11 -8
  38. data/spec/isodoc/xref_spec.rb +147 -118
  39. metadata +8 -8
@@ -1,160 +1,13 @@
1
1
  require "spec_helper"
2
-
3
- RSpec.describe IsoDoc do
4
- it "processes IsoXML tables (Presentation XML)" do
5
- expect(xmlpp(IsoDoc::Iso::PresentationXMLConvert.new({})
6
- .convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
7
- <iso-standard xmlns="http://riboseinc.com/isoxml">
8
- <preface>
9
- <foreword>
10
- <table alt="tool tip" id="tableD-1" summary="long desc">
11
- <name>Repeatability and reproducibility of
12
- <em>husked</em>
13
- rice yield</name>
14
- <thead>
15
- <tr>
16
- <td align="left" rowspan="2">Description</td>
17
- <td align="center" colspan="4">Rice sample</td>
18
- </tr>
19
- <tr>
20
- <td align="left">Arborio</td>
21
- <td align="center">Drago
22
- <fn reference="a">
23
- <p id="_0fe65e9a-5531-408e-8295-eeff35f41a55">Parboiled rice.</p></fn>
24
- </td>
25
- <td align="center">Balilla
26
- <fn reference="a">
27
- <p id="_0fe65e9a-5531-408e-8295-eeff35f41a55">Parboiled rice.</p></fn>
28
- </td>
29
- <td align="center">Thaibonnet</td>
30
- </tr>
31
- </thead>
32
- <tbody>
33
- <tr>
34
- <th align="left">Number of laboratories retained after eliminating outliers</th>
35
- <td align="center">13</td>
36
- <td align="center">11</td>
37
- <td align="center">13</td>
38
- <td align="center">13</td>
39
- </tr>
40
- <tr>
41
- <td align="left">Mean value, g/100 g</td>
42
- <td align="center">81,2</td>
43
- <td align="center">82,0</td>
44
- <td align="center">81,8</td>
45
- <td align="center">77,7</td>
46
- </tr>
47
- </tbody>
48
- <tfoot>
49
- <tr>
50
- <td align="left">Reproducibility limit,
51
- <stem type="AsciiMath">R</stem>
52
- (= 2,83
53
- <stem type="AsciiMath">s_R</stem>
54
- )</td>
55
- <td align="center">2,89</td>
56
- <td align="center">0,57</td>
57
- <td align="center">2,26</td>
58
- <td align="center">6,06</td>
59
- </tr>
60
- </tfoot>
61
- <dl>
62
- <dt>Drago</dt>
63
- <dd>A type of rice</dd>
64
- </dl>
65
- <note>
66
- <p>This is a table about rice</p>
67
- </note>
68
- </table>
69
- </foreword>
70
- </preface>
71
- </iso-standard>
72
- INPUT
73
- <?xml version='1.0'?>
74
- <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
75
- <preface>
76
- <foreword>
77
- <table id='tableD-1' alt='tool tip' summary='long desc'>
78
- <name>
79
- Table 1&#xA0;&#x2014; Repeatability and reproducibility of
80
- <em>husked</em>
81
- rice yield
82
- </name>
83
- <thead>
84
- <tr>
85
- <td rowspan='2' align='left'>Description</td>
86
- <td colspan='4' align='center'>Rice sample</td>
87
- </tr>
88
- <tr>
89
- <td align='left'>Arborio</td>
90
- <td align='center'>
91
- Drago
92
- <fn reference='a'>
93
- <p id='_0fe65e9a-5531-408e-8295-eeff35f41a55'>Parboiled rice.</p>
94
- </fn>
95
- </td>
96
- <td align='center'>
97
- Balilla
98
- <fn reference='a'>
99
- <p id='_0fe65e9a-5531-408e-8295-eeff35f41a55'>Parboiled rice.</p>
100
- </fn>
101
- </td>
102
- <td align='center'>Thaibonnet</td>
103
- </tr>
104
- </thead>
105
- <tbody>
106
- <tr>
107
- <th align='left'>Number of laboratories retained after eliminating outliers</th>
108
- <td align='center'>13</td>
109
- <td align='center'>11</td>
110
- <td align='center'>13</td>
111
- <td align='center'>13</td>
112
- </tr>
113
- <tr>
114
- <td align='left'>Mean value, g/100 g</td>
115
- <td align='center'>81,2</td>
116
- <td align='center'>82,0</td>
117
- <td align='center'>81,8</td>
118
- <td align='center'>77,7</td>
119
- </tr>
120
- </tbody>
121
- <tfoot>
122
- <tr>
123
- <td align='left'>
124
- Reproducibility limit,
125
- <stem type='AsciiMath'>R</stem>
126
- (= 2,83
127
- <stem type='AsciiMath'>s_R</stem>
128
- )
129
- </td>
130
- <td align='center'>2,89</td>
131
- <td align='center'>0,57</td>
132
- <td align='center'>2,26</td>
133
- <td align='center'>6,06</td>
134
- </tr>
135
- </tfoot>
136
- <dl>
137
- <dt>Drago</dt>
138
- <dd>A type of rice</dd>
139
- </dl>
140
- <note>
141
- <name>NOTE</name>
142
- <p>This is a table about rice</p>
143
- </note>
144
- </table>
145
- </foreword>
146
- </preface>
147
- </iso-standard>
148
- OUTPUT
149
- end
150
2
 
151
- it "processes IsoXML tables (HTML)" do
152
- IsoDoc::Iso::HtmlConvert.new({}).convert("test", <<~"INPUT", false)
3
+ RSpec.describe IsoDoc do
4
+ it "processes IsoXML tables" do
5
+ input = <<~INPUT
153
6
  <iso-standard xmlns="http://riboseinc.com/isoxml">
154
7
  <preface>
155
8
  <foreword>
156
9
  <table alt="tool tip" id="tableD-1" summary="long desc">
157
- <name>Table 1 — Repeatability and reproducibility of
10
+ <name>Repeatability and reproducibility of
158
11
  <em>husked</em>
159
12
  rice yield</name>
160
13
  <thead>
@@ -193,9 +46,9 @@ RSpec.describe IsoDoc do
193
46
  </tbody>
194
47
  <tfoot>
195
48
  <tr>
196
- <td align="left">Reproducibility limit,
49
+ <td align="left">Reproducibility limit,
197
50
  <stem type="AsciiMath">R</stem>
198
- (= 2,83
51
+ (= 2,83
199
52
  <stem type="AsciiMath">s_R</stem>
200
53
  )</td>
201
54
  <td align="center">2,89</td>
@@ -209,17 +62,114 @@ RSpec.describe IsoDoc do
209
62
  <dd>A type of rice</dd>
210
63
  </dl>
211
64
  <note>
212
- <name>NOTE</name>
213
65
  <p>This is a table about rice</p>
214
66
  </note>
215
67
  </table>
216
68
  </foreword>
217
69
  </preface>
70
+ <annex id="Annex"><title>Annex</title>
71
+ <table id="AnnexTable">
72
+ <name>Another table</name>
73
+ <tbody><td>?</td></tbody>
74
+ </table>
75
+ </annex>
218
76
  </iso-standard>
219
77
  INPUT
220
- expect(File.exist?("test.html")).to be true
221
- html = File.read("test.html").sub(/^.*<main /m, '<main ').sub(%r{</main>.*$}m, "</main>")
222
- expect(xmlpp(html)).to be_equivalent_to xmlpp(<<~"OUTPUT")
78
+ presxml = <<~OUTPUT
79
+ <?xml version='1.0'?>
80
+ <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
81
+ <preface>
82
+ <foreword displayorder='1'>
83
+ <table id='tableD-1' alt='tool tip' summary='long desc'>
84
+ <name>
85
+ Table 1&#xA0;&#x2014; Repeatability and reproducibility of
86
+ <em>husked</em>
87
+ rice yield
88
+ </name>
89
+ <thead>
90
+ <tr>
91
+ <td rowspan='2' align='left'>Description</td>
92
+ <td colspan='4' align='center'>Rice sample</td>
93
+ </tr>
94
+ <tr>
95
+ <td align='left'>Arborio</td>
96
+ <td align='center'>
97
+ Drago
98
+ <fn reference='a'>
99
+ <p id='_0fe65e9a-5531-408e-8295-eeff35f41a55'>Parboiled rice.</p>
100
+ </fn>
101
+ </td>
102
+ <td align='center'>
103
+ Balilla
104
+ <fn reference='a'>
105
+ <p id='_0fe65e9a-5531-408e-8295-eeff35f41a55'>Parboiled rice.</p>
106
+ </fn>
107
+ </td>
108
+ <td align='center'>Thaibonnet</td>
109
+ </tr>
110
+ </thead>
111
+ <tbody>
112
+ <tr>
113
+ <th align='left'>Number of laboratories retained after eliminating outliers</th>
114
+ <td align='center'>13</td>
115
+ <td align='center'>11</td>
116
+ <td align='center'>13</td>
117
+ <td align='center'>13</td>
118
+ </tr>
119
+ <tr>
120
+ <td align='left'>Mean value, g/100 g</td>
121
+ <td align='center'>81,2</td>
122
+ <td align='center'>82,0</td>
123
+ <td align='center'>81,8</td>
124
+ <td align='center'>77,7</td>
125
+ </tr>
126
+ </tbody>
127
+ <tfoot>
128
+ <tr>
129
+ <td align='left'>
130
+ Reproducibility limit,
131
+ <stem type='AsciiMath'>R</stem>
132
+ (= 2,83
133
+ <stem type='AsciiMath'>s_R</stem>
134
+ )
135
+ </td>
136
+ <td align='center'>2,89</td>
137
+ <td align='center'>0,57</td>
138
+ <td align='center'>2,26</td>
139
+ <td align='center'>6,06</td>
140
+ </tr>
141
+ </tfoot>
142
+ <dl>
143
+ <dt>Drago</dt>
144
+ <dd>A type of rice</dd>
145
+ </dl>
146
+ <note>
147
+ <name>NOTE</name>
148
+ <p>This is a table about rice</p>
149
+ </note>
150
+ </table>
151
+ </foreword>
152
+ </preface>
153
+ <annex id='Annex' displayorder='2'>
154
+ <title>
155
+ <strong>Annex A</strong>
156
+ <br/>
157
+ (informative)
158
+ <br/>
159
+ <br/>
160
+ <strong>Annex</strong>
161
+ </title>
162
+ <table id='AnnexTable'>
163
+ <name>Table A.1&#xA0;&#x2014; Another table</name>
164
+ <tbody>
165
+ <td>?</td>
166
+ </tbody>
167
+ </table>
168
+ </annex>
169
+ </iso-standard>
170
+ OUTPUT
171
+
172
+ html = <<~OUTPUT
223
173
  <main class='main-section'>
224
174
  <button onclick='topFunction()' id='myBtn' title='Go to top'>Top</button>
225
175
  <br/>
@@ -313,81 +263,27 @@ RSpec.describe IsoDoc do
313
263
  </table>
314
264
  </div>
315
265
  <p class='zzSTDTitle1'/>
266
+ <br/>
267
+ <div id='Annex' class='Section3'>
268
+ <h1 class='Annex' id='toc1'>
269
+ <b>Annex A</b>
270
+ <br/>
271
+ (informative)
272
+ <br/>
273
+ <br/>
274
+ <b>Annex</b>
275
+ </h1>
276
+ <p class='TableTitle' style='text-align:center;'>Table A.1&#xA0;&#x2014; Another table</p>
277
+ <table id='AnnexTable' class='MsoISOTable' style='border-width:1px;border-spacing:0;'>
278
+ <tbody>
279
+ <tr/>
280
+ </tbody>
281
+ </table>
282
+ </div>
316
283
  </main>
317
284
  OUTPUT
318
- end
319
-
320
- it "processes IsoXML tables (Word)" do
321
- IsoDoc::Iso::WordConvert.new({}).convert("test", <<~"INPUT", false)
322
- <iso-standard xmlns="http://riboseinc.com/isoxml">
323
- <preface>
324
- <foreword>
325
- <table alt="tool tip" id="tableD-1" summary="long desc">
326
- <name>Table 1&#xA0;&#x2014; Repeatability and reproducibility of <em>husked</em> rice yield</name>
327
- <thead>
328
- <tr>
329
- <td align="left" rowspan="2">Description</td>
330
- <td align="center" colspan="4">Rice sample</td>
331
- </tr>
332
- <tr>
333
- <td align="left">Arborio</td>
334
- <td align="center">Drago
335
- <fn reference="a">
336
- <p id="_0fe65e9a-5531-408e-8295-eeff35f41a55">Parboiled rice.</p></fn>
337
- </td>
338
- <td align="center">Balilla
339
- <fn reference="a">
340
- <p id="_0fe65e9a-5531-408e-8295-eeff35f41a55">Parboiled rice.</p></fn>
341
- </td>
342
- <td align="center">Thaibonnet</td>
343
- </tr>
344
- </thead>
345
- <tbody>
346
- <tr>
347
- <th align="left">Number of laboratories retained after eliminating outliers</th>
348
- <td align="center">13</td>
349
- <td align="center">11</td>
350
- <td align="center">13</td>
351
- <td align="center">13</td>
352
- </tr>
353
- <tr>
354
- <td align="left">Mean value, g/100 g</td>
355
- <td align="center">81,2</td>
356
- <td align="center">82,0</td>
357
- <td align="center">81,8</td>
358
- <td align="center">77,7</td>
359
- </tr>
360
- </tbody>
361
- <tfoot>
362
- <tr>
363
- <td align="left">Reproducibility limit,
364
- <stem type="AsciiMath">R</stem>
365
- (= 2,83
366
- <stem type="AsciiMath">s_R</stem>
367
- )</td>
368
- <td align="center">2,89</td>
369
- <td align="center">0,57</td>
370
- <td align="center">2,26</td>
371
- <td align="center">6,06</td>
372
- </tr>
373
- </tfoot>
374
- <dl>
375
- <dt>Drago</dt>
376
- <dd>A type of rice</dd>
377
- </dl>
378
- <note>
379
- <name>NOTE</name>
380
- <p>This is a table about rice</p>
381
- </note>
382
- </table>
383
- </foreword>
384
- </preface>
385
- </iso-standard>
386
- INPUT
387
285
 
388
- expect(File.exist?("test.doc")).to be true
389
- html = File.read("test.doc").sub(/^.+?<table /m, '<table xmlns:m="m" ').sub(%r{</div>\s*<p class="MsoNormal">.*$}m, "")
390
- expect(xmlpp("<div>#{html}")).to be_equivalent_to xmlpp(<<~"OUTPUT")
286
+ doc = <<~OUTPUT
391
287
  <div>
392
288
  <table class="MsoISOTable" style="mso-table-anchor-horizontal:column;mso-table-overlap:never;border-spacing:0;border-width:1px;" summary="long desc" title="tool tip" xmlns:m="m">
393
289
  <a id="tableD-1" name="tableD-1"/>
@@ -423,13 +319,13 @@ RSpec.describe IsoDoc do
423
319
  </tbody>
424
320
  <tfoot>
425
321
  <tr>
426
- <td align="left" style="border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:0pt;mso-border-bottom-alt:0pt;">Reproducibility limit,
322
+ <td align="left" style="border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:0pt;mso-border-bottom-alt:0pt;">Reproducibility limit,
427
323
  <span class="stem">
428
324
  <m:oMath>
429
325
  <m:r>
430
326
  <m:t>R</m:t></m:r>
431
327
  </m:oMath>
432
- </span>(= 2,83
328
+ </span>(= 2,83
433
329
  <span class="stem">
434
330
  <m:oMath>
435
331
  <m:sSub>
@@ -483,5 +379,44 @@ RSpec.describe IsoDoc do
483
379
  </table>
484
380
  </div>
485
381
  OUTPUT
382
+ doc2 = <<~OUTPUT
383
+ <div class='Section3'>
384
+ <a name='Annex' id='Annex'/>
385
+ <p class='ANNEX'>
386
+ <br/>
387
+ (informative)
388
+ <br/>
389
+ <br/>
390
+ <b>Annex</b>
391
+ </p>
392
+ <p class='AnnexTableTitle' style='text-align:center;'>Table A.1&#xA0;&#x2014; Another table</p>
393
+ <div align='center' class='table_container'>
394
+ <table class='MsoISOTable' style='mso-table-anchor-horizontal:column;mso-table-overlap:never;border-spacing:0;border-width:1px;'>
395
+ <a name='AnnexTable' id='AnnexTable'/>
396
+ <tbody>
397
+ <tr/>
398
+ </tbody>
399
+ </table>
400
+ </div>
401
+ </div>
402
+ OUTPUT
403
+ expect(xmlpp(IsoDoc::Iso::PresentationXMLConvert.new({})
404
+ .convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
405
+ IsoDoc::Iso::HtmlConvert.new({}).convert("test", presxml, false)
406
+ expect(File.exist?("test.html")).to be true
407
+ out = File.read("test.html")
408
+ .sub(/^.*<main /m, "<main ")
409
+ .sub(%r{</main>.*$}m, "</main>")
410
+ expect(xmlpp(out)).to be_equivalent_to xmlpp(html)
411
+ IsoDoc::Iso::WordConvert.new({}).convert("test", presxml, false)
412
+ expect(File.exist?("test.doc")).to be true
413
+ out = File.read("test.doc")
414
+ .sub(/^.+?<table /m, '<table xmlns:m="m" ')
415
+ .sub(%r{</div>\s*<p class="MsoNormal">.*$}m, "")
416
+ expect(xmlpp("<div>#{out}")).to be_equivalent_to xmlpp(doc)
417
+ out = File.read("test.doc")
418
+ .sub(/^.+?<div class="Section3"/m, '<div class="Section3"')
419
+ .sub(%r{</div>\s*<br[^>]+>\s*<div class="colophon".*$}m, "")
420
+ expect(xmlpp(out)).to be_equivalent_to xmlpp(doc2)
486
421
  end
487
422
  end