isodoc 1.7.1 → 1.7.4
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.
- checksums.yaml +4 -4
- data/isodoc.gemspec +2 -1
- data/lib/isodoc/convert.rb +1 -0
- data/lib/isodoc/css.rb +3 -3
- data/lib/isodoc/function/blocks.rb +180 -168
- data/lib/isodoc/function/blocks_example_note.rb +85 -79
- data/lib/isodoc/function/cleanup.rb +181 -175
- data/lib/isodoc/function/inline.rb +110 -108
- data/lib/isodoc/function/inline_simple.rb +55 -55
- data/lib/isodoc/function/lists.rb +75 -71
- data/lib/isodoc/function/references.rb +165 -160
- data/lib/isodoc/function/reqt.rb +91 -85
- data/lib/isodoc/function/section.rb +140 -190
- data/lib/isodoc/function/section_titles.rb +82 -0
- data/lib/isodoc/function/table.rb +90 -87
- data/lib/isodoc/function/terms.rb +58 -56
- data/lib/isodoc/function/to_word_html.rb +208 -204
- data/lib/isodoc/html_convert.rb +0 -4
- data/lib/isodoc/html_function/mathvariant_to_plain.rb +5 -3
- data/lib/isodoc/presentation_function/inline.rb +1 -1
- data/lib/isodoc/presentation_function/math.rb +9 -0
- data/lib/isodoc/presentation_function/section.rb +12 -1
- data/lib/isodoc/presentation_xml_convert.rb +2 -0
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/word_function/body.rb +5 -5
- data/lib/isodoc/xslfo_convert.rb +2 -2
- data/lib/isodoc.rb +2 -1
- data/lib/metanorma/output/base.rb +13 -0
- data/lib/metanorma/output/utils.rb +17 -0
- data/lib/metanorma/output/xslfo.rb +21 -0
- data/lib/metanorma/output.rb +7 -0
- data/spec/assets/outputtest/a.xml +66 -0
- data/spec/assets/outputtest/iso.international-standard.xsl +3011 -0
- data/spec/isodoc/blocks_spec.rb +441 -243
- data/spec/isodoc/inline_spec.rb +197 -114
- data/spec/isodoc/postproc_spec.rb +2 -2
- data/spec/isodoc/presentation_xml_spec.rb +84 -0
- data/spec/isodoc/section_spec.rb +639 -0
- metadata +23 -18
- data/lib/isodoc/html_function/sectionsplit.rb +0 -244
- data/spec/isodoc/sectionsplit_spec.rb +0 -190
data/spec/isodoc/inline_spec.rb
CHANGED
@@ -419,30 +419,12 @@ RSpec.describe IsoDoc do
|
|
419
419
|
<p>
|
420
420
|
<ul>
|
421
421
|
<li>
|
422
|
-
<concept ital="true"><refterm>term</refterm>
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
<li><concept ref="
|
427
|
-
|
428
|
-
<xref target='clause1'/>
|
429
|
-
</concept></li>
|
430
|
-
<li><concept ital="true" ref="true"><refterm>term</refterm>
|
431
|
-
<renderterm>term</renderterm>
|
432
|
-
<xref target='clause1'/>
|
433
|
-
</concept></li>
|
434
|
-
<li><concept ital="false"><refterm>term</refterm>
|
435
|
-
<renderterm>term</renderterm>
|
436
|
-
<xref target='clause1'/>
|
437
|
-
</concept></li>
|
438
|
-
<li><concept ref="false"><refterm>term</refterm>
|
439
|
-
<renderterm>term</renderterm>
|
440
|
-
<xref target='clause1'/>
|
441
|
-
</concept></li>
|
442
|
-
<li><concept ital="false" ref="false"><refterm>term</refterm>
|
443
|
-
<renderterm>term</renderterm>
|
444
|
-
<xref target='clause1'/>
|
445
|
-
</concept></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>
|
446
428
|
</ul></p>
|
447
429
|
</foreword></preface>
|
448
430
|
<sections>
|
@@ -451,88 +433,88 @@ RSpec.describe IsoDoc do
|
|
451
433
|
</iso-standard>
|
452
434
|
INPUT
|
453
435
|
presxml = <<~OUTPUT
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
436
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml" type="presentation">
|
437
|
+
<preface><foreword displayorder="1">
|
438
|
+
<p>
|
439
|
+
<ul>
|
440
|
+
<li>
|
459
441
|
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
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>
|
467
453
|
<li>
|
468
|
-
|
469
|
-
|
470
|
-
|
454
|
+
term
|
455
|
+
[term defined in <xref target="clause1">Clause 1</xref>],
|
456
|
+
</li>
|
471
457
|
<li>
|
472
|
-
|
473
|
-
[term defined in <xref target="clause1">Clause 1</xref>]
|
474
|
-
</li>
|
475
|
-
<li>
|
476
|
-
<em>term</em>
|
458
|
+
<em>term</em>,
|
477
459
|
|
478
|
-
|
479
|
-
|
480
|
-
|
460
|
+
</li>
|
461
|
+
<li>
|
462
|
+
term,
|
481
463
|
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
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>
|
489
471
|
OUTPUT
|
490
472
|
output = <<~OUTPUT
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
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.  Clause 1</h1>
|
512
|
+
</div>
|
513
|
+
</div>
|
514
|
+
</body>
|
515
|
+
</html>
|
534
516
|
OUTPUT
|
535
|
-
expect(
|
517
|
+
expect((IsoDoc::PresentationXMLConvert.new({})
|
536
518
|
.convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
|
537
519
|
expect(xmlpp(IsoDoc::HtmlConvert.new({})
|
538
520
|
.convert("test", presxml, true))).to be_equivalent_to xmlpp(output)
|
@@ -855,6 +837,102 @@ RSpec.describe IsoDoc do
|
|
855
837
|
.convert("test", input, true))).to be_equivalent_to xmlpp(output)
|
856
838
|
end
|
857
839
|
|
840
|
+
it "duplicates MathML with AsciiMath" do
|
841
|
+
input = <<~INPUT
|
842
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml" xmlns:m='http://www.w3.org/1998/Math/MathML'>
|
843
|
+
<preface><foreword>
|
844
|
+
<p>
|
845
|
+
<stem type="MathML"><m:math>
|
846
|
+
<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>
|
847
|
+
</m:math></stem>
|
848
|
+
</p>
|
849
|
+
</foreword></preface>
|
850
|
+
<sections>
|
851
|
+
</iso-standard>
|
852
|
+
INPUT
|
853
|
+
output = <<~OUTPUT
|
854
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' xmlns:m='http://www.w3.org/1998/Math/MathML' type='presentation'>
|
855
|
+
<preface>
|
856
|
+
<foreword displayorder='1'>
|
857
|
+
<p>
|
858
|
+
<stem type='MathML'>
|
859
|
+
<m:math>
|
860
|
+
<m:msup>
|
861
|
+
<m:mrow>
|
862
|
+
<m:mo>(</m:mo>
|
863
|
+
<m:mrow>
|
864
|
+
<m:mi>x</m:mi>
|
865
|
+
<m:mo>+</m:mo>
|
866
|
+
<m:mi>y</m:mi>
|
867
|
+
</m:mrow>
|
868
|
+
<m:mo>)</m:mo>
|
869
|
+
</m:mrow>
|
870
|
+
<m:mn>2</m:mn>
|
871
|
+
</m:msup>
|
872
|
+
</m:math>
|
873
|
+
<comment> ( x + y )^2 </comment>
|
874
|
+
</stem>
|
875
|
+
</p>
|
876
|
+
</foreword>
|
877
|
+
</preface>
|
878
|
+
<sections> </sections>
|
879
|
+
</iso-standard>
|
880
|
+
OUTPUT
|
881
|
+
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
|
882
|
+
.convert("test", input, true)
|
883
|
+
.gsub("<!--", "<comment>")
|
884
|
+
.gsub("-->", "</comment>")))
|
885
|
+
.to be_equivalent_to xmlpp(output)
|
886
|
+
end
|
887
|
+
|
888
|
+
it "overrides duplication of MathML with AsciiMath" do
|
889
|
+
input = <<~INPUT
|
890
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml" xmlns:m='http://www.w3.org/1998/Math/MathML'>
|
891
|
+
<preface><foreword>
|
892
|
+
<p>
|
893
|
+
<stem type="MathML"><m:math>
|
894
|
+
<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>
|
895
|
+
</m:math></stem>
|
896
|
+
</p>
|
897
|
+
</foreword></preface>
|
898
|
+
<sections>
|
899
|
+
</iso-standard>
|
900
|
+
INPUT
|
901
|
+
output = <<~OUTPUT
|
902
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' xmlns:m='http://www.w3.org/1998/Math/MathML' type='presentation'>
|
903
|
+
<preface>
|
904
|
+
<foreword displayorder='1'>
|
905
|
+
<p>
|
906
|
+
<stem type='MathML'>
|
907
|
+
<m:math>
|
908
|
+
<m:msup>
|
909
|
+
<m:mrow>
|
910
|
+
<m:mo>(</m:mo>
|
911
|
+
<m:mrow>
|
912
|
+
<m:mi>x</m:mi>
|
913
|
+
<m:mo>+</m:mo>
|
914
|
+
<m:mi>y</m:mi>
|
915
|
+
</m:mrow>
|
916
|
+
<m:mo>)</m:mo>
|
917
|
+
</m:mrow>
|
918
|
+
<m:mn>2</m:mn>
|
919
|
+
</m:msup>
|
920
|
+
</m:math>
|
921
|
+
</stem>
|
922
|
+
</p>
|
923
|
+
</foreword>
|
924
|
+
</preface>
|
925
|
+
<sections> </sections>
|
926
|
+
</iso-standard>
|
927
|
+
OUTPUT
|
928
|
+
expect(xmlpp(IsoDoc::PresentationXMLConvert
|
929
|
+
.new({ suppressasciimathdup: "true" })
|
930
|
+
.convert("test", input, true)
|
931
|
+
.gsub("<!--", "<comment>")
|
932
|
+
.gsub("-->", "</comment>")))
|
933
|
+
.to be_equivalent_to xmlpp(output)
|
934
|
+
end
|
935
|
+
|
858
936
|
it "processes eref types" do
|
859
937
|
input = <<~INPUT
|
860
938
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
@@ -881,22 +959,27 @@ RSpec.describe IsoDoc do
|
|
881
959
|
INPUT
|
882
960
|
output = <<~OUTPUT
|
883
961
|
#{HTML_HDR}
|
884
|
-
|
885
|
-
|
886
|
-
|
887
|
-
|
888
|
-
|
889
|
-
|
890
|
-
|
891
|
-
</
|
892
|
-
|
893
|
-
|
894
|
-
|
895
|
-
|
896
|
-
|
897
|
-
|
898
|
-
|
899
|
-
|
962
|
+
<br/>
|
963
|
+
<div>
|
964
|
+
<h1 class='ForewordTitle'>Foreword</h1>
|
965
|
+
<p>
|
966
|
+
<sup>
|
967
|
+
<a href='#ISO712'>A</a>
|
968
|
+
</sup>
|
969
|
+
<a href='#ISO712'>A</a>
|
970
|
+
</p>
|
971
|
+
</div>
|
972
|
+
<p class='zzSTDTitle1'/>
|
973
|
+
<div>
|
974
|
+
<h1>Normative References</h1>
|
975
|
+
<p id='ISO712' class='NormRef'>
|
976
|
+
ISO 712,
|
977
|
+
<i>Cereals and cereal products</i>
|
978
|
+
</p>
|
979
|
+
</div>
|
980
|
+
</div>
|
981
|
+
</body>
|
982
|
+
</html>
|
900
983
|
OUTPUT
|
901
984
|
expect(xmlpp(IsoDoc::HtmlConvert.new({})
|
902
985
|
.convert("test", input, true))).to be_equivalent_to xmlpp(output)
|
@@ -245,7 +245,7 @@ RSpec.describe IsoDoc do
|
|
245
245
|
html = File.read("test.html")
|
246
246
|
expect(html).to match(/another empty stylesheet/)
|
247
247
|
expect(html).to match(/p \{[^}]*?font-family: Arial/m)
|
248
|
-
expect(html).to match(/code \{[^}]*?font-family: Courier/m)
|
248
|
+
expect(html).to match(/code \{[^}]*?font-family: Courier New/m)
|
249
249
|
expect(html).to match(/h1 \{[^}]*?font-family: Arial/m)
|
250
250
|
expect(html).to match(/p \{[^}]*?font-size: 1em;/m)
|
251
251
|
expect(html).to match(/code \{[^}]*?font-size: 0.8em/m)
|
@@ -329,7 +329,7 @@ RSpec.describe IsoDoc do
|
|
329
329
|
word = File.read("test.doc")
|
330
330
|
expect(word).to match(/another empty stylesheet/)
|
331
331
|
expect(word).to match(/p \{[^}]*?font-family: Arial/m)
|
332
|
-
expect(word).to match(/code \{[^}]*?font-family: Courier/m)
|
332
|
+
expect(word).to match(/code \{[^}]*?font-family: Courier New/m)
|
333
333
|
expect(word).to match(/h1 \{[^}]*?font-family: Arial/m)
|
334
334
|
expect(word).to match(/p \{[^}]*?font-size: 12pt/m)
|
335
335
|
expect(word).to match(/code \{[^}]*?font-size: 11pt/m)
|
@@ -678,6 +678,90 @@ RSpec.describe IsoDoc do
|
|
678
678
|
.to be_equivalent_to xmlpp(output)
|
679
679
|
end
|
680
680
|
|
681
|
+
it "strips variant-title" do
|
682
|
+
input = <<~INPUT
|
683
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
684
|
+
<bibdata/>
|
685
|
+
<sections>
|
686
|
+
<clause id='_' inline-header='false' obligation='normative'>
|
687
|
+
<title>Clause</title>
|
688
|
+
<p id='_'>Text</p>
|
689
|
+
<clause id='_' inline-header='false' obligation='normative'>
|
690
|
+
<title>Subclause</title>
|
691
|
+
<variant-title variant_title='true' type='sub' id='_'>“A” ‘B’</variant-title>
|
692
|
+
<variant-title variant_title='true' type='toc' id='_'>
|
693
|
+
Clause
|
694
|
+
<em>A</em>
|
695
|
+
<stem type='MathML'>
|
696
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
697
|
+
<mi>x</mi>
|
698
|
+
</math>
|
699
|
+
</stem>
|
700
|
+
</variant-title>
|
701
|
+
<p id='_'>Text</p>
|
702
|
+
</clause>
|
703
|
+
</clause>
|
704
|
+
</sections>
|
705
|
+
<annex id='_' inline-header='false' obligation='normative'>
|
706
|
+
<title>Clause</title>
|
707
|
+
<variant-title variant_title='true' type='toc' id='_'>
|
708
|
+
Clause
|
709
|
+
<em>A</em>
|
710
|
+
<stem type='MathML'>
|
711
|
+
<math xmlns='http://www.w3.org/1998/Math/MathML'>
|
712
|
+
<mi>x</mi>
|
713
|
+
</math>
|
714
|
+
</stem>
|
715
|
+
</variant-title>
|
716
|
+
<p id='_'>Text</p>
|
717
|
+
</annex>
|
718
|
+
</iso-standard>
|
719
|
+
INPUT
|
720
|
+
output = <<~OUTPUT
|
721
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
|
722
|
+
<bibdata/>
|
723
|
+
<sections>
|
724
|
+
<clause id='_' inline-header='false' obligation='normative' displayorder='1'>
|
725
|
+
<title depth='1'>
|
726
|
+
<strong>Annex A</strong>
|
727
|
+
<br/>
|
728
|
+
(normative).
|
729
|
+
<tab/>
|
730
|
+
Clause
|
731
|
+
</title>
|
732
|
+
<p id='_'>Text</p>
|
733
|
+
<clause id='_' inline-header='false' obligation='normative'>
|
734
|
+
<title depth='1'>
|
735
|
+
<strong>Annex A</strong>
|
736
|
+
<br/>
|
737
|
+
(normative).
|
738
|
+
<tab/>
|
739
|
+
Subclause
|
740
|
+
</title>
|
741
|
+
<variant-title variant_title='true' type='sub' id='_'>“A” ‘B’</variant-title>
|
742
|
+
<p id='_'>Text</p>
|
743
|
+
</clause>
|
744
|
+
</clause>
|
745
|
+
</sections>
|
746
|
+
<annex id='_' inline-header='false' obligation='normative' displayorder='2'>
|
747
|
+
<title>
|
748
|
+
<strong>Annex A</strong>
|
749
|
+
<br/>
|
750
|
+
(normative)
|
751
|
+
<br/>
|
752
|
+
<br/>
|
753
|
+
<strong>Clause</strong>
|
754
|
+
</title>
|
755
|
+
<p id='_'>Text</p>
|
756
|
+
</annex>
|
757
|
+
</iso-standard>
|
758
|
+
OUTPUT
|
759
|
+
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({})
|
760
|
+
.convert("test", input, true))
|
761
|
+
.sub(%r{<localized-strings>.*</localized-strings>}m, ""))
|
762
|
+
.to be_equivalent_to xmlpp(output)
|
763
|
+
end
|
764
|
+
|
681
765
|
private
|
682
766
|
|
683
767
|
def mock_symbols
|