isodoc 1.7.3.1 → 1.7.6.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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/isodoc.gemspec +7 -4
  3. data/lib/isodoc/class_utils.rb +2 -2
  4. data/lib/isodoc/convert.rb +2 -0
  5. data/lib/isodoc/function/blocks_example_note.rb +85 -79
  6. data/lib/isodoc/function/cleanup.rb +181 -175
  7. data/lib/isodoc/function/inline.rb +110 -108
  8. data/lib/isodoc/function/inline_simple.rb +55 -55
  9. data/lib/isodoc/function/lists.rb +75 -71
  10. data/lib/isodoc/function/references.rb +165 -160
  11. data/lib/isodoc/function/section.rb +140 -190
  12. data/lib/isodoc/function/section_titles.rb +82 -0
  13. data/lib/isodoc/function/table.rb +90 -87
  14. data/lib/isodoc/function/terms.rb +58 -56
  15. data/lib/isodoc/function/to_word_html.rb +3 -1
  16. data/lib/isodoc/function/utils.rb +34 -14
  17. data/lib/isodoc/html_function/comments.rb +107 -111
  18. data/lib/isodoc/html_function/footnotes.rb +68 -67
  19. data/lib/isodoc/html_function/html.rb +113 -103
  20. data/lib/isodoc/html_function/mathvariant_to_plain.rb +5 -3
  21. data/lib/isodoc/presentation_function/block.rb +73 -78
  22. data/lib/isodoc/presentation_function/concept.rb +68 -0
  23. data/lib/isodoc/presentation_function/image.rb +112 -0
  24. data/lib/isodoc/presentation_function/inline.rb +6 -39
  25. data/lib/isodoc/presentation_function/math.rb +9 -0
  26. data/lib/isodoc/presentation_function/section.rb +12 -1
  27. data/lib/isodoc/presentation_xml_convert.rb +3 -0
  28. data/lib/isodoc/version.rb +1 -1
  29. data/lib/isodoc/word_function/body.rb +176 -174
  30. data/lib/isodoc/word_function/comments.rb +117 -112
  31. data/lib/isodoc/word_function/footnotes.rb +88 -86
  32. data/lib/isodoc/word_function/inline.rb +42 -67
  33. data/lib/isodoc/word_function/postprocess_cover.rb +121 -110
  34. data/lib/isodoc/xref/xref_gen.rb +153 -150
  35. data/lib/isodoc/xslfo_convert.rb +2 -2
  36. data/spec/assets/odf.svg +1 -4
  37. data/spec/isodoc/blocks_spec.rb +187 -32
  38. data/spec/isodoc/inline_spec.rb +300 -116
  39. data/spec/isodoc/postproc_spec.rb +38 -0
  40. data/spec/isodoc/presentation_xml_spec.rb +144 -0
  41. data/spec/isodoc/section_spec.rb +764 -0
  42. data/spec/isodoc/terms_spec.rb +116 -0
  43. metadata +63 -18
@@ -209,8 +209,7 @@ RSpec.describe IsoDoc do
209
209
  <renderterm>word</renderterm>
210
210
  <termref base='IEV' target='135-13-13'>The IEV database</termref>
211
211
  </concept></li>
212
- <li><concept><refterm>term</refterm>
213
- <renderterm>word</renderterm>
212
+ <li><concept>
214
213
  <strong>error!</strong>
215
214
  </concept>
216
215
  </li>
@@ -295,7 +294,7 @@ RSpec.describe IsoDoc do
295
294
  <li>
296
295
  <em>word</em> [<termref base="IEV" target="135-13-13">The IEV database</termref>]
297
296
  </li>
298
- <li> <em>word</em> <strong>error!</strong> </li>
297
+ <li> <strong>error!</strong> </li>
299
298
  </ul>
300
299
  </p>
301
300
  </foreword></preface>
@@ -380,7 +379,7 @@ RSpec.describe IsoDoc do
380
379
  <i>word</i>
381
380
  [The IEV database]
382
381
  </li>
383
- <li> <i>word</i> <b>error!</b> </li>
382
+ <li> <b>error!</b> </li>
384
383
  </ul>
385
384
  </p>
386
385
  </div>
@@ -414,107 +413,129 @@ RSpec.describe IsoDoc do
414
413
 
415
414
  it "processes concept attributes" do
416
415
  input = <<~INPUT
417
- <iso-standard xmlns="http://riboseinc.com/isoxml">
418
- <preface><foreword>
419
- <p>
420
- <ul>
421
- <li>
422
- <concept ital="true"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
423
- <li><concept ref="true"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
424
- <li><concept ital="true" ref="true"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
425
- <li><concept ital="false"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
426
- <li><concept ref="false"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
427
- <li><concept ital="false" ref="false"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
428
- </ul></p>
429
- </foreword></preface>
430
- <sections>
431
- <clause id="clause1"><title>Clause 1</title></clause>
432
- </sections>
433
- </iso-standard>
416
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
417
+ <preface><foreword>
418
+ <p>
419
+ <ul>
420
+ <li><concept ital="true"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
421
+ <li><concept ref="true"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
422
+ <li><concept ital="true" ref="true"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
423
+ <li><concept ital="false"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
424
+ <li><concept ref="false"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
425
+ <li><concept ital="false" ref="false"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
426
+ <li><concept ital="true" ref="true" linkmention="true" linkref="true"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
427
+ <li><concept ital="true" ref="true" linkmention="true" linkref="false"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
428
+ <li><concept ital="true" ref="true" linkmention="false" linkref="true"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
429
+ <li><concept ital="true" ref="true" linkmention="false" linkref="false"><refterm>term</refterm><renderterm>term</renderterm><xref target='clause1'/></concept>,</li>
430
+ <li><concept ital="true" ref="true" linkmention="true" linkref="true"><strong>error!</strong></concept></li>
431
+ <li><concept ital="false" ref="false" linkmention="true">
432
+ <refterm>CV_DiscreteCoverage</refterm>
433
+ <renderterm>CV_DiscreteCoverage</renderterm>
434
+ <xref target="term-cv_discretecoverage"/>
435
+ </concept></li>
436
+ </ul></p>
437
+ </foreword></preface>
438
+ <sections>
439
+ <clause id="clause1"><title>Clause 1</title></clause>
440
+ </sections>
441
+ </iso-standard>
434
442
  INPUT
435
443
  presxml = <<~OUTPUT
436
- <iso-standard xmlns="http://riboseinc.com/isoxml" type="presentation">
437
- <preface><foreword displayorder="1">
438
- <p>
439
- <ul>
440
- <li>
441
-
442
- <em>term</em>
443
- [term defined in <xref target="clause1">Clause 1</xref>],
444
- </li>
445
- <li>
446
- <em>term</em>
447
- [term defined in <xref target="clause1">Clause 1</xref>],
448
- </li>
449
- <li>
450
- <em>term</em>
451
- [term defined in <xref target="clause1">Clause 1</xref>],
452
- </li>
453
- <li>
454
- term
455
- [term defined in <xref target="clause1">Clause 1</xref>],
456
- </li>
457
- <li>
458
- <em>term</em>,
459
-
460
- </li>
461
- <li>
462
- term,
463
-
464
- </li>
465
- </ul></p>
466
- </foreword></preface>
467
- <sections>
468
- <clause id="clause1" displayorder="2"><title depth="1">1.<tab/>Clause 1</title></clause>
469
- </sections>
470
- </iso-standard>
444
+ <iso-standard xmlns="http://riboseinc.com/isoxml" type="presentation">
445
+ <preface><foreword displayorder="1">
446
+ <p>
447
+ <ul>
448
+ <li><em>term</em> [term defined in <xref target="clause1">Clause 1</xref>],</li>
449
+ <li><em>term</em> [term defined in <xref target="clause1">Clause 1</xref>],</li>
450
+ <li><em>term</em> [term defined in <xref target="clause1">Clause 1</xref>],</li>
451
+ <li>term [term defined in <xref target="clause1">Clause 1</xref>],</li>
452
+ <li><em>term</em>,</li>
453
+ <li>term,</li>
454
+ <li><xref target="clause1"><em>term</em></xref> [term defined in <xref target="clause1">Clause 1</xref>],</li>
455
+ <li><xref target="clause1"><em>term</em></xref> [term defined in Clause 1],</li>
456
+ <li><em>term</em> [term defined in <xref target="clause1">Clause 1</xref>],</li>
457
+ <li><em>term</em> [term defined in Clause 1],</li>
458
+ <li><strong>error!</strong></li>
459
+ <li><xref target='term-cv_discretecoverage'>CV_DiscreteCoverage</xref></li>
460
+ </ul></p>
461
+ </foreword></preface>
462
+ <sections>
463
+ <clause id="clause1" displayorder="2"><title depth="1">1.<tab/>Clause 1</title></clause>
464
+ </sections>
465
+ </iso-standard>
471
466
  OUTPUT
472
467
  output = <<~OUTPUT
473
- #{HTML_HDR}
474
- <br/>
475
- <div>
476
- <h1 class='ForewordTitle'>Foreword</h1>
477
- <p>
478
- <ul>
479
- <li>
480
- <i>term</i>
481
- [term defined in
482
- <a href='#clause1'>Clause 1</a>
483
- ],
484
- </li>
485
- <li>
486
- <i>term</i>
487
- [term defined in
488
- <a href='#clause1'>Clause 1</a>
489
- ],
490
- </li>
491
- <li>
492
- <i>term</i>
493
- [term defined in
494
- <a href='#clause1'>Clause 1</a>
495
- ],
496
- </li>
497
- <li>
498
- term [term defined in
499
- <a href='#clause1'>Clause 1</a>
500
- ],
501
- </li>
502
- <li>
503
- <i>term</i>,
504
- </li>
505
- <li>term,</li>
506
- </ul>
507
- </p>
508
- </div>
509
- <p class='zzSTDTitle1'/>
510
- <div id='clause1'>
511
- <h1>1.&#160; Clause 1</h1>
512
- </div>
513
- </div>
514
- </body>
515
- </html>
468
+ #{HTML_HDR}
469
+ <br/>
470
+ <div>
471
+ <h1 class='ForewordTitle'>Foreword</h1>
472
+ <p>
473
+ <ul>
474
+ <li>
475
+ <i>term</i>
476
+ [term defined in
477
+ <a href='#clause1'>Clause 1</a>
478
+ ],
479
+ </li>
480
+ <li>
481
+ <i>term</i>
482
+ [term defined in
483
+ <a href='#clause1'>Clause 1</a>
484
+ ],
485
+ </li>
486
+ <li>
487
+ <i>term</i>
488
+ [term defined in
489
+ <a href='#clause1'>Clause 1</a>
490
+ ],
491
+ </li>
492
+ <li>
493
+ term [term defined in
494
+ <a href='#clause1'>Clause 1</a>
495
+ ],
496
+ </li>
497
+ <li>
498
+ <i>term</i>,
499
+ </li>
500
+ <li>term,</li>
501
+ <li>
502
+ <a href='#clause1'>
503
+ <i>term</i>
504
+ </a>
505
+ [term defined in
506
+ <a href='#clause1'>Clause 1</a>
507
+ ],
508
+ </li>
509
+ <li>
510
+ <a href='#clause1'>
511
+ <i>term</i>
512
+ </a>
513
+ [term defined in Clause 1],
514
+ </li>
515
+ <li>
516
+ <i>term</i>
517
+ [term defined in
518
+ <a href='#clause1'>Clause 1</a>
519
+ ],
520
+ </li>
521
+ <li>
522
+ <i>term</i>
523
+ [term defined in Clause 1],
524
+ </li>
525
+ <li> <b>error!</b> </li>
526
+ <li> <a href='#term-cv_discretecoverage'>CV_DiscreteCoverage</a> </li>
527
+ </ul>
528
+ </p>
529
+ </div>
530
+ <p class='zzSTDTitle1'/>
531
+ <div id='clause1'>
532
+ <h1>1.&#160; Clause 1</h1>
533
+ </div>
534
+ </div>
535
+ </body>
536
+ </html>
516
537
  OUTPUT
517
- expect((IsoDoc::PresentationXMLConvert.new({})
538
+ expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
518
539
  .convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
519
540
  expect(xmlpp(IsoDoc::HtmlConvert.new({})
520
541
  .convert("test", presxml, true))).to be_equivalent_to xmlpp(output)
@@ -837,6 +858,102 @@ RSpec.describe IsoDoc do
837
858
  .convert("test", input, true))).to be_equivalent_to xmlpp(output)
838
859
  end
839
860
 
861
+ it "duplicates MathML with AsciiMath" do
862
+ input = <<~INPUT
863
+ <iso-standard xmlns="http://riboseinc.com/isoxml" xmlns:m='http://www.w3.org/1998/Math/MathML'>
864
+ <preface><foreword>
865
+ <p>
866
+ <stem type="MathML"><m:math>
867
+ <m:msup> <m:mrow> <m:mo>(</m:mo> <m:mrow> <m:mi>x</m:mi> <m:mo>+</m:mo> <m:mi>y</m:mi> </m:mrow> <m:mo>)</m:mo> </m:mrow> <m:mn>2</m:mn> </m:msup>
868
+ </m:math></stem>
869
+ </p>
870
+ </foreword></preface>
871
+ <sections>
872
+ </iso-standard>
873
+ INPUT
874
+ output = <<~OUTPUT
875
+ <iso-standard xmlns='http://riboseinc.com/isoxml' xmlns:m='http://www.w3.org/1998/Math/MathML' type='presentation'>
876
+ <preface>
877
+ <foreword displayorder='1'>
878
+ <p>
879
+ <stem type='MathML'>
880
+ <m:math>
881
+ <m:msup>
882
+ <m:mrow>
883
+ <m:mo>(</m:mo>
884
+ <m:mrow>
885
+ <m:mi>x</m:mi>
886
+ <m:mo>+</m:mo>
887
+ <m:mi>y</m:mi>
888
+ </m:mrow>
889
+ <m:mo>)</m:mo>
890
+ </m:mrow>
891
+ <m:mn>2</m:mn>
892
+ </m:msup>
893
+ </m:math>
894
+ <comment> ( x + y )^2 </comment>
895
+ </stem>
896
+ </p>
897
+ </foreword>
898
+ </preface>
899
+ <sections> </sections>
900
+ </iso-standard>
901
+ OUTPUT
902
+ expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
903
+ .convert("test", input, true)
904
+ .gsub("<!--", "<comment>")
905
+ .gsub("-->", "</comment>")))
906
+ .to be_equivalent_to xmlpp(output)
907
+ end
908
+
909
+ it "overrides duplication of MathML with AsciiMath" do
910
+ input = <<~INPUT
911
+ <iso-standard xmlns="http://riboseinc.com/isoxml" xmlns:m='http://www.w3.org/1998/Math/MathML'>
912
+ <preface><foreword>
913
+ <p>
914
+ <stem type="MathML"><m:math>
915
+ <m:msup> <m:mrow> <m:mo>(</m:mo> <m:mrow> <m:mi>x</m:mi> <m:mo>+</m:mo> <m:mi>y</m:mi> </m:mrow> <m:mo>)</m:mo> </m:mrow> <m:mn>2</m:mn> </m:msup>
916
+ </m:math></stem>
917
+ </p>
918
+ </foreword></preface>
919
+ <sections>
920
+ </iso-standard>
921
+ INPUT
922
+ output = <<~OUTPUT
923
+ <iso-standard xmlns='http://riboseinc.com/isoxml' xmlns:m='http://www.w3.org/1998/Math/MathML' type='presentation'>
924
+ <preface>
925
+ <foreword displayorder='1'>
926
+ <p>
927
+ <stem type='MathML'>
928
+ <m:math>
929
+ <m:msup>
930
+ <m:mrow>
931
+ <m:mo>(</m:mo>
932
+ <m:mrow>
933
+ <m:mi>x</m:mi>
934
+ <m:mo>+</m:mo>
935
+ <m:mi>y</m:mi>
936
+ </m:mrow>
937
+ <m:mo>)</m:mo>
938
+ </m:mrow>
939
+ <m:mn>2</m:mn>
940
+ </m:msup>
941
+ </m:math>
942
+ </stem>
943
+ </p>
944
+ </foreword>
945
+ </preface>
946
+ <sections> </sections>
947
+ </iso-standard>
948
+ OUTPUT
949
+ expect(xmlpp(IsoDoc::PresentationXMLConvert
950
+ .new({ suppressasciimathdup: "true" })
951
+ .convert("test", input, true)
952
+ .gsub("<!--", "<comment>")
953
+ .gsub("-->", "</comment>")))
954
+ .to be_equivalent_to xmlpp(output)
955
+ end
956
+
840
957
  it "processes eref types" do
841
958
  input = <<~INPUT
842
959
  <iso-standard xmlns="http://riboseinc.com/isoxml">
@@ -863,22 +980,27 @@ RSpec.describe IsoDoc do
863
980
  INPUT
864
981
  output = <<~OUTPUT
865
982
  #{HTML_HDR}
866
- <br/>
867
- <div>
868
- <h1 class="ForewordTitle">Foreword</h1>
869
- <p>
870
- <sup><a href="#ISO712">A</a></sup>
871
- <a href="#ISO712">A</a>
872
- </p>
873
- </div>
874
- <p class="zzSTDTitle1"/>
875
- <div>
876
- <h1>Normative References</h1>
877
- <p id="ISO712" class="NormRef">ISO 712, <i>Cereals and cereal products</i></p>
878
- </div>
879
- </div>
880
- </body>
881
- </html>
983
+ <br/>
984
+ <div>
985
+ <h1 class='ForewordTitle'>Foreword</h1>
986
+ <p>
987
+ <sup>
988
+ <a href='#ISO712'>A</a>
989
+ </sup>
990
+ <a href='#ISO712'>A</a>
991
+ </p>
992
+ </div>
993
+ <p class='zzSTDTitle1'/>
994
+ <div>
995
+ <h1>Normative References</h1>
996
+ <p id='ISO712' class='NormRef'>
997
+ ISO 712,
998
+ <i>Cereals and cereal products</i>
999
+ </p>
1000
+ </div>
1001
+ </div>
1002
+ </body>
1003
+ </html>
882
1004
  OUTPUT
883
1005
  expect(xmlpp(IsoDoc::HtmlConvert.new({})
884
1006
  .convert("test", input, true))).to be_equivalent_to xmlpp(output)
@@ -901,6 +1023,7 @@ RSpec.describe IsoDoc do
901
1023
  <eref type="inline" bibitemid="ISO712"><locality type="table"><referenceFrom>1</referenceFrom></locality>A</eref>
902
1024
  <eref type="inline" bibitemid="ISO712"><locality type="whole"></locality></eref>
903
1025
  <eref type="inline" bibitemid="ISO712"><locality type="locality:prelude"><referenceFrom>7</referenceFrom></locality></eref>
1026
+ <eref type="inline" bibitemid="ISO712"><locality type="locality:URI"><referenceFrom>7</referenceFrom></locality></eref>
904
1027
  <eref type="inline" bibitemid="ISO712" citeas="ISO 712">A</eref>
905
1028
  <eref type="inline" bibitemid="ISO712"><locality type="anchor"><referenceFrom>1</referenceFrom></locality></eref>
906
1029
  <eref type="inline" bibitemid="ISO712"><locality type="anchor"><referenceFrom>1</referenceFrom></locality><locality type="clause"><referenceFrom>1</referenceFrom></locality></eref>
@@ -939,6 +1062,7 @@ RSpec.describe IsoDoc do
939
1062
  <eref type="inline" bibitemid="ISO712"><locality type="table"><referenceFrom>1</referenceFrom></locality>A</eref>
940
1063
  <eref type="inline" bibitemid="ISO712"><locality type="whole"/>ISO 712, Whole of text</eref>
941
1064
  <eref type="inline" bibitemid="ISO712"><locality type="locality:prelude"><referenceFrom>7</referenceFrom></locality>ISO 712, Prelude 7</eref>
1065
+ <eref type="inline" bibitemid="ISO712"><locality type="locality:URI"><referenceFrom>7</referenceFrom></locality>ISO 712, URI 7</eref>
942
1066
  <eref type="inline" bibitemid="ISO712" citeas="ISO 712">A</eref>
943
1067
  <eref type="inline" bibitemid="ISO712"><locality type="anchor"><referenceFrom>1</referenceFrom></locality>ISO 712</eref>
944
1068
  <eref type="inline" bibitemid="ISO712"><locality type="anchor"><referenceFrom>1</referenceFrom></locality><locality type="clause"><referenceFrom>1</referenceFrom></locality>ISO 712, Clause 1</eref>
@@ -981,6 +1105,7 @@ RSpec.describe IsoDoc do
981
1105
  <a href="#ISO712">A</a>
982
1106
  <a href="#ISO712">ISO 712, Whole of text</a>
983
1107
  <a href="#ISO712">ISO 712, Prelude 7</a>
1108
+ <a href="#ISO712">ISO 712, URI 7</a>
984
1109
  <a href="#ISO712">A</a>
985
1110
  <a href='#ISO712'>ISO 712</a>
986
1111
  <a href='#ISO712'>ISO 712, Clause 1</a>
@@ -1263,6 +1388,65 @@ RSpec.describe IsoDoc do
1263
1388
  .convert("test", presxml, true))).to be_equivalent_to xmlpp(word)
1264
1389
  end
1265
1390
 
1391
+ it "processes eref content with Unicode characters" do
1392
+ input = <<~INPUT
1393
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
1394
+ <preface><foreword>
1395
+ <p>
1396
+ <eref type="inline" bibitemid="ISO712" citeas="BSI BS EN ISO 19011:2018&#8201;&#8212;&#8201;TC"/>
1397
+ </foreword></preface>
1398
+ <bibliography>
1399
+ <references id='_normative_references' obligation='informative' normative='true' displayorder="2">
1400
+ <title>Normative References</title>
1401
+ <bibitem id='ISO712' type='standard'>
1402
+ <title format='text/plain'>Cereals and cereal products</title>
1403
+ <uri type='citation'>http://www.example.com</uri>
1404
+ <docidentifier>ISO 712</docidentifier>
1405
+ <contributor>
1406
+ <role type='publisher'/>
1407
+ <organization>
1408
+ <abbreviation>ISO</abbreviation>
1409
+ </organization>
1410
+ </contributor>
1411
+ </bibitem>
1412
+ </references></bibliography>
1413
+ </iso-standard>
1414
+ INPUT
1415
+ presxml = <<~OUTPUT
1416
+ <iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
1417
+ <preface>
1418
+ <foreword displayorder='1'>
1419
+ <p>
1420
+ <eref type='inline' bibitemid='ISO712' citeas='BSI BS EN ISO 19011:2018&#x2009;&#x2014;&#x2009;TC'>BSI BS EN ISO 19011:2018&#x2009;&#x2014;&#x2009;TC</eref>
1421
+ </p>
1422
+ </foreword>
1423
+ <bibliography displayorder='2'>
1424
+ <references id='_normative_references' obligation='informative' normative='true' displayorder='3'>
1425
+ <title depth='1'>
1426
+ 1.
1427
+ <tab/>
1428
+ Normative References
1429
+ </title>
1430
+ <bibitem id='ISO712' type='standard'>
1431
+ <title format='text/plain'>Cereals and cereal products</title>
1432
+ <uri type='citation'>http://www.example.com</uri>
1433
+ <docidentifier>ISO 712</docidentifier>
1434
+ <contributor>
1435
+ <role type='publisher'/>
1436
+ <organization>
1437
+ <abbreviation>ISO</abbreviation>
1438
+ </organization>
1439
+ </contributor>
1440
+ </bibitem>
1441
+ </references>
1442
+ </bibliography>
1443
+ </preface>
1444
+ </iso-standard>
1445
+ OUTPUT
1446
+ expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
1447
+ .convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
1448
+ end
1449
+
1266
1450
  it "processes variant" do
1267
1451
  input = <<~INPUT
1268
1452
  <iso-standard xmlns="http://riboseinc.com/isoxml">
@@ -807,6 +807,44 @@ RSpec.describe IsoDoc do
807
807
  OUTPUT
808
808
  end
809
809
 
810
+ it "moves images in HTML" do
811
+ FileUtils.rm_f "test.html"
812
+ FileUtils.rm_rf "test_htmlimages"
813
+ IsoDoc::HtmlConvert.new(
814
+ { baseassetpath: "spec/assets",
815
+ wordstylesheet: "word.css",
816
+ htmlstylesheet: "html.scss" },
817
+ ).convert("test", <<~"INPUT", false)
818
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
819
+ <preface><foreword>
820
+ <figure id="_">
821
+ <name>Split-it-right sample divider</name>
822
+ <image src="rice_image1.png" id="_" mimetype="image/png"/>
823
+ </figure>
824
+ </foreword></preface>
825
+ </iso-standard>
826
+ INPUT
827
+ html = File.read("test.html")
828
+ .sub(/^.*<main class="main-section">/m, '<main class="main-section">')
829
+ .sub(%r{</main>.*$}m, "</main>")
830
+ expect(`ls test_htmlimages`).to match(/\.png$/)
831
+ expect(xmlpp(html.gsub(/\/[0-9a-f-]+\.png/, "/_.png")))
832
+ .to be_equivalent_to xmlpp(<<~"OUTPUT")
833
+ <main class='main-section'>
834
+ <button onclick='topFunction()' id='myBtn' title='Go to top'>Top</button>
835
+ <br/>
836
+ <div>
837
+ <h1 class='ForewordTitle'>Foreword</h1>
838
+ <div id='_' class='figure'>
839
+ <img src='test_htmlimages/_.png' height='776' width='922'/>
840
+ <p class='FigureTitle' style='text-align:center;'>Split-it-right sample divider</p>
841
+ </div>
842
+ </div>
843
+ <p class='zzSTDTitle1'/>
844
+ </main>
845
+ OUTPUT
846
+ end
847
+
810
848
  describe "mathvariant to plain" do
811
849
  context "when `mathvariant` attr equal to `script`" do
812
850
  it "converts mathvariant text chars into associated plain chars" do