isodoc 1.7.3.1 → 1.7.6.1

Sign up to get free protection for your applications and to get access to all the features.
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