isodoc 1.3.0 → 1.5.0

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 (37) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +14 -0
  3. data/isodoc.gemspec +2 -2
  4. data/lib/isodoc-yaml/i18n-en.yaml +55 -0
  5. data/lib/isodoc-yaml/i18n-fr.yaml +56 -0
  6. data/lib/isodoc/convert.rb +2 -1
  7. data/lib/isodoc/function/inline_simple.rb +10 -1
  8. data/lib/isodoc/function/section.rb +1 -1
  9. data/lib/isodoc/function/table.rb +10 -0
  10. data/lib/isodoc/function/to_word_html.rb +4 -2
  11. data/lib/isodoc/function/utils.rb +4 -4
  12. data/lib/isodoc/gem_tasks.rb +4 -0
  13. data/lib/isodoc/html_function/html.rb +7 -0
  14. data/lib/isodoc/html_function/mathvariant_to_plain.rb +82 -0
  15. data/lib/isodoc/html_function/postprocess.rb +32 -19
  16. data/lib/isodoc/metadata_contributor.rb +4 -3
  17. data/lib/isodoc/presentation_function/inline.rb +5 -1
  18. data/lib/isodoc/presentation_function/section.rb +9 -0
  19. data/lib/isodoc/presentation_xml_convert.rb +2 -0
  20. data/lib/isodoc/version.rb +1 -1
  21. data/lib/isodoc/word_function/inline.rb +2 -2
  22. data/lib/isodoc/word_function/postprocess.rb +38 -80
  23. data/lib/isodoc/word_function/postprocess_cover.rb +55 -0
  24. data/lib/isodoc/word_function/table.rb +10 -0
  25. data/lib/isodoc/xref.rb +1 -0
  26. data/lib/isodoc/xref/xref_counter.rb +44 -12
  27. data/lib/isodoc/xref/xref_gen.rb +18 -0
  28. data/lib/isodoc/xref/xref_sect_gen.rb +34 -27
  29. data/spec/isodoc/blocks_spec.rb +26 -73
  30. data/spec/isodoc/cleanup_spec.rb +0 -1
  31. data/spec/isodoc/inline_spec.rb +14 -14
  32. data/spec/isodoc/metadata_spec.rb +3 -1
  33. data/spec/isodoc/postproc_spec.rb +441 -3
  34. data/spec/isodoc/presentation_xml_spec.rb +5 -5
  35. data/spec/isodoc/table_spec.rb +28 -0
  36. data/spec/isodoc/xref_spec.rb +455 -2
  37. metadata +9 -8
@@ -66,6 +66,10 @@ module IsoDoc::XrefGen
66
66
  "//sections/clause | //sections/definitions | "\
67
67
  "//bibliography/references | //bibliography/clause".freeze
68
68
 
69
+ def sections_xpath
70
+ SECTIONS_XPATH
71
+ end
72
+
69
73
  CHILD_NOTES_XPATH =
70
74
  "./*[not(self::xmlns:clause) and not(self::xmlns:appendix) and "\
71
75
  "not(self::xmlns:terms) and not(self::xmlns:definitions)]//xmlns:note | "\
@@ -136,5 +140,19 @@ module IsoDoc::XrefGen
136
140
  end
137
141
  end
138
142
  end
143
+
144
+ def bookmark_anchor_names(sections)
145
+ sections.each do |s|
146
+ notes = s.xpath(ns(".//bookmark")) - s.xpath(ns(".//clause//bookmark")) -
147
+ s.xpath(ns(".//appendix//bookmark"))
148
+ notes.each do |n|
149
+ next if n["id"].nil? || n["id"].empty?
150
+ @anchors[n["id"]] = {
151
+ type: "bookmark", label: nil, value: nil,
152
+ xref: @anchors[s["id"]][:xref] }
153
+ end
154
+ bookmark_anchor_names(s.xpath(ns(CHILD_SECTIONS)))
155
+ end
156
+ end
139
157
  end
140
158
  end
@@ -1,23 +1,25 @@
1
1
  module IsoDoc::XrefGen
2
2
  module Sections
3
3
  def back_anchor_names(docxml)
4
- docxml.xpath(ns("//annex")).each_with_index do |c, i|
5
- annex_names(c, (65 + i).chr.to_s)
4
+ i = Counter.new("@")
5
+ docxml.xpath(ns("//annex")).each do |c|
6
+ i.increment(c)
7
+ annex_names(c, i.print)
8
+ end
9
+ docxml.xpath(ns(@klass.bibliography_xpath)).each do |b|
10
+ preface_names(b)
11
+ end
12
+ docxml.xpath(ns("//bibitem[not(ancestor::bibitem)]")).each do |ref|
13
+ reference_names(ref)
6
14
  end
7
- docxml.xpath(
8
- ns(@klass.bibliography_xpath)).each do |b|
9
- preface_names(b)
10
- end
11
- docxml.xpath(ns("//bibitem[not(ancestor::bibitem)]")).each do |ref|
12
- reference_names(ref)
13
- end
14
15
  end
15
16
 
16
17
  def initial_anchor_names(d)
17
18
  d.xpath(ns("//preface/*")).each { |c| c.element? and preface_names(c) }
18
19
  # potentially overridden in middle_section_asset_names()
19
20
  sequential_asset_names(d.xpath(ns("//preface/*")))
20
- n = section_names(d.at(ns("//clause[@type = 'scope']")), 0, 1)
21
+ n = Counter.new
22
+ n = section_names(d.at(ns("//clause[@type = 'scope']")), n, 1)
21
23
  n = section_names(d.at(ns(@klass.norm_ref_xpath)), n, 1)
22
24
  n = section_names(d.at(ns("//sections/terms | "\
23
25
  "//sections/clause[descendant::terms]")), n, 1)
@@ -52,8 +54,7 @@ module IsoDoc::XrefGen
52
54
  label = title || parent_title
53
55
  @anchors[clause["id"]] =
54
56
  { label: nil, level: level, xref: label, type: "clause" }
55
- clause.xpath(ns(SUBCLAUSES)).
56
- each_with_index do |c, i|
57
+ clause.xpath(ns(SUBCLAUSES)).each_with_index do |c, i|
57
58
  preface_names1(c, c.at(ns("./title"))&.text, "#{label} #{i+1}",
58
59
  level + 1)
59
60
  end
@@ -67,21 +68,22 @@ module IsoDoc::XrefGen
67
68
  sequential_asset_names(d.xpath(ns(middle_sections)))
68
69
  end
69
70
 
70
- def clause_names(docxml, sect_num)
71
- docxml.xpath(ns(@klass.middle_clause)).each_with_index do |c, i|
72
- section_names(c, (i + sect_num), 1)
71
+ def clause_names(docxml, n)
72
+ docxml.xpath(ns(@klass.middle_clause(docxml))).each_with_index do |c, i|
73
+ section_names(c, n, 1)
73
74
  end
74
75
  end
75
76
 
76
77
  def section_names(clause, num, lvl)
77
78
  return num if clause.nil?
78
- num = num + 1
79
+ num.increment(clause)
79
80
  @anchors[clause["id"]] =
80
- { label: num.to_s, xref: l10n("#{@labels["clause"]} #{num}"), level: lvl,
81
+ { label: num.print, xref: l10n("#{@labels["clause"]} #{num.print}"), level: lvl,
81
82
  type: "clause" }
82
- clause.xpath(ns(SUBCLAUSES)).
83
- each_with_index do |c, i|
84
- section_names1(c, "#{num}.#{i + 1}", lvl + 1)
83
+ i = Counter.new
84
+ clause.xpath(ns(SUBCLAUSES)).each do |c|
85
+ i.increment(c)
86
+ section_names1(c, "#{num.print}.#{i.print}", lvl + 1)
85
87
  end
86
88
  num
87
89
  end
@@ -90,9 +92,10 @@ module IsoDoc::XrefGen
90
92
  @anchors[clause["id"]] =
91
93
  { label: num, level: level, xref: l10n("#{@labels["clause"]} #{num}"),
92
94
  type: "clause" }
93
- clause.xpath(ns(SUBCLAUSES)).
94
- each_with_index do |c, i|
95
- section_names1(c, "#{num}.#{i + 1}", level + 1)
95
+ i = Counter.new
96
+ clause.xpath(ns(SUBCLAUSES)).each do |c|
97
+ i.increment(c)
98
+ section_names1(c, "#{num}.#{i.print}", level + 1)
96
99
  end
97
100
  end
98
101
 
@@ -118,8 +121,10 @@ module IsoDoc::XrefGen
118
121
  if a = single_annex_special_section(clause)
119
122
  annex_names1(a, "#{num}", 1)
120
123
  else
121
- clause.xpath(ns(SUBCLAUSES)).each_with_index do |c, i|
122
- annex_names1(c, "#{num}.#{i + 1}", 2)
124
+ i = Counter.new
125
+ clause.xpath(ns(SUBCLAUSES)).each do |c|
126
+ i.increment(c)
127
+ annex_names1(c, "#{num}.#{i.print}", 2)
123
128
  end
124
129
  end
125
130
  hierarchical_asset_names(clause, num)
@@ -128,8 +133,10 @@ module IsoDoc::XrefGen
128
133
  def annex_names1(clause, num, level)
129
134
  @anchors[clause["id"]] = { label: num, xref: "#{@labels["annex"]} #{num}",
130
135
  level: level, type: "clause" }
131
- clause.xpath(ns(SUBCLAUSES)).each_with_index do |c, i|
132
- annex_names1(c, "#{num}.#{i + 1}", level + 1)
136
+ i = Counter.new
137
+ clause.xpath(ns(SUBCLAUSES)).each_with_index do |c|
138
+ i.increment(c)
139
+ annex_names1(c, "#{num}.#{i.print}", level + 1)
133
140
  end
134
141
  end
135
142
 
@@ -534,7 +534,7 @@ INPUT
534
534
  <div>
535
535
  <h1 class='ForewordTitle'>Foreword</h1>
536
536
  <p id='A'>
537
- ABC
537
+ ABC
538
538
  <div id='B' class='Note'>
539
539
  <p>
540
540
  <span class='note_label'>NOTE 1</span>
@@ -611,8 +611,8 @@ INPUT
611
611
  OUTPUT
612
612
  end
613
613
 
614
- it "processes figures (Presentation XML)" do
615
- expect(xmlpp((IsoDoc::PresentationXMLConvert.new({}).convert("test", <<~"INPUT", true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
614
+ it "processes figures" do
615
+ input = <<~INPUT
616
616
  <iso-standard xmlns="http://riboseinc.com/isoxml">
617
617
  <preface><foreword>
618
618
  <figure id="figureA-1" keep-with-next="true" keep-lines-together="true">
@@ -620,6 +620,7 @@ OUTPUT
620
620
  <image src="rice_images/rice_image1.png" height="20" width="30" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f0" mimetype="image/png" alt="alttext" title="titletxt"/>
621
621
  <image src="rice_images/rice_image1.png" height="20" width="auto" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f1" mimetype="image/png"/>
622
622
  <image src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7" height="20" width="auto" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f2" mimetype="image/png"/>
623
+ <image src="data:application/xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjw/eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC94c2wiIGhyZWY9Ii4uLy4uLy4uL3hzbC9yZXNfZG9jL2ltZ2ZpbGUueHNsIj8+CjwhRE9DVFlQRSBpbWdmaWxlLmNvbnRlbnQgU1lTVEVNICIuLi8uLi8uLi9kdGQvdGV4dC5lbnQiPgo8aW1nZmlsZS5jb250ZW50IG1vZHVsZT0iZnVuZGFtZW50YWxzX29mX3Byb2R1Y3RfZGVzY3JpcHRpb25fYW5kX3N1cHBvcnQiIGZpbGU9ImFjdGlvbl9zY2hlbWFleHBnMS54bWwiPgo8aW1nIHNyYz0iYWN0aW9uX3NjaGVtYWV4cGcxLmdpZiI+CjxpbWcuYXJlYSBzaGFwZT0icmVjdCIgY29vcmRzPSIyMTAsMTg2LDM0MywyMjciIGhyZWY9Ii4uLy4uL3Jlc291cmNlcy9iYXNpY19hdHRyaWJ1dGVfc2NoZW1hL2Jhc2ljX2F0dHJpYnV0ZV9zY2hlbWEueG1sIiAvPgo8aW1nLmFyZWEgc2hhcGU9InJlY3QiIGNvb3Jkcz0iMTAsMTAsOTYsNTEiIGhyZWY9Ii4uLy4uL3Jlc291cmNlcy9hY3Rpb25fc2NoZW1hL2FjdGlvbl9zY2hlbWEueG1sIiAvPgo8aW1nLmFyZWEgc2hhcGU9InJlY3QiIGNvb3Jkcz0iMjEwLDI2NCwzNTgsMzA1IiBocmVmPSIuLi8uLi9yZXNvdXJjZXMvc3VwcG9ydF9yZXNvdXJjZV9zY2hlbWEvc3VwcG9ydF9yZXNvdXJjZV9zY2hlbWEueG1sIiAvPgo8L2ltZz4KPC9pbWdmaWxlLmNvbnRlbnQ+Cg==" height="20" width="auto" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f2" mimetype="application/xml"/>
623
624
  <fn reference="a">
624
625
  <p id="_ef2c85b8-5a5a-4ecd-a1e6-92acefaaa852">The time <stem type="AsciiMath">t_90</stem> was estimated to be 18,2 min for this example.</p>
625
626
  </fn>
@@ -629,16 +630,18 @@ OUTPUT
629
630
  </dl>
630
631
  </figure>
631
632
  <figure id="figure-B">
632
- <pre alt="A B">A &lt;
633
+ <pre alt="A B">A &#x3c;
633
634
  B</pre>
634
635
  </figure>
635
636
  <figure id="figure-C" unnumbered="true">
636
- <pre>A &lt;
637
+ <pre>A &#x3c;
637
638
  B</pre>
638
639
  </figure>
639
640
  </foreword></preface>
640
641
  </iso-standard>
641
642
  INPUT
643
+
644
+ presxml = <<~OUTPUT
642
645
  <?xml version='1.0'?>
643
646
  <iso-standard xmlns="http://riboseinc.com/isoxml" type="presentation">
644
647
  <preface><foreword>
@@ -647,6 +650,7 @@ B</pre>
647
650
  <image src="rice_images/rice_image1.png" height="20" width="30" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f0" mimetype="image/png" alt="alttext" title="titletxt"/>
648
651
  <image src="rice_images/rice_image1.png" height="20" width="auto" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f1" mimetype="image/png"/>
649
652
  <image src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7" height="20" width="auto" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f2" mimetype="image/png"/>
653
+ <image src='data:application/xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjw/eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC94c2wiIGhyZWY9Ii4uLy4uLy4uL3hzbC9yZXNfZG9jL2ltZ2ZpbGUueHNsIj8+CjwhRE9DVFlQRSBpbWdmaWxlLmNvbnRlbnQgU1lTVEVNICIuLi8uLi8uLi9kdGQvdGV4dC5lbnQiPgo8aW1nZmlsZS5jb250ZW50IG1vZHVsZT0iZnVuZGFtZW50YWxzX29mX3Byb2R1Y3RfZGVzY3JpcHRpb25fYW5kX3N1cHBvcnQiIGZpbGU9ImFjdGlvbl9zY2hlbWFleHBnMS54bWwiPgo8aW1nIHNyYz0iYWN0aW9uX3NjaGVtYWV4cGcxLmdpZiI+CjxpbWcuYXJlYSBzaGFwZT0icmVjdCIgY29vcmRzPSIyMTAsMTg2LDM0MywyMjciIGhyZWY9Ii4uLy4uL3Jlc291cmNlcy9iYXNpY19hdHRyaWJ1dGVfc2NoZW1hL2Jhc2ljX2F0dHJpYnV0ZV9zY2hlbWEueG1sIiAvPgo8aW1nLmFyZWEgc2hhcGU9InJlY3QiIGNvb3Jkcz0iMTAsMTAsOTYsNTEiIGhyZWY9Ii4uLy4uL3Jlc291cmNlcy9hY3Rpb25fc2NoZW1hL2FjdGlvbl9zY2hlbWEueG1sIiAvPgo8aW1nLmFyZWEgc2hhcGU9InJlY3QiIGNvb3Jkcz0iMjEwLDI2NCwzNTgsMzA1IiBocmVmPSIuLi8uLi9yZXNvdXJjZXMvc3VwcG9ydF9yZXNvdXJjZV9zY2hlbWEvc3VwcG9ydF9yZXNvdXJjZV9zY2hlbWEueG1sIiAvPgo8L2ltZz4KPC9pbWdmaWxlLmNvbnRlbnQ+Cg==' height='20' width='auto' id='_8357ede4-6d44-4672-bac4-9a85e82ab7f2' mimetype='application/xml'/>
650
654
  <fn reference="a">
651
655
  <p id="_ef2c85b8-5a5a-4ecd-a1e6-92acefaaa852">The time <stem type="AsciiMath">t_90</stem> was estimated to be 18,2 min for this example.</p>
652
656
  </fn>
@@ -657,47 +661,18 @@ B</pre>
657
661
  </figure>
658
662
  <figure id="figure-B">
659
663
  <name>Figure 2</name>
660
- <pre alt="A B">A &lt;
664
+ <pre alt="A B">A &#x3c;
661
665
  B</pre>
662
666
  </figure>
663
667
  <figure id="figure-C" unnumbered="true">
664
- <pre>A &lt;
668
+ <pre>A &#x3c;
665
669
  B</pre>
666
670
  </figure>
667
671
  </foreword></preface>
668
672
  </iso-standard>
669
673
  OUTPUT
670
- end
671
674
 
672
- it "processes figures (HTML)" do
673
- expect(xmlpp(strip_guid(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
674
- <iso-standard xmlns="http://riboseinc.com/isoxml">
675
- <preface><foreword>
676
- <figure id="figureA-1" keep-with-next="true" keep-lines-together="true">
677
- <name>Figure 1&#xA0;&#x2014; Split-it-right <em>sample</em> divider<fn reference="1"><p>X</p></fn></name>
678
- <image src="rice_images/rice_image1.png" height="20" width="30" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f0" mimetype="image/png" alt="alttext" title="titletxt"/>
679
- <image src="rice_images/rice_image1.png" height="20" width="auto" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f1" mimetype="image/png"/>
680
- <image src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7" height="20" width="auto" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f2" mimetype="image/png"/>
681
- <fn reference="a">
682
- <p id="_ef2c85b8-5a5a-4ecd-a1e6-92acefaaa852">The time <stem type="AsciiMath">t_90</stem> was estimated to be 18,2 min for this example.</p>
683
- </fn>
684
- <dl>
685
- <dt>A</dt>
686
- <dd><p>B</p></dd>
687
- </dl>
688
- </figure>
689
- <figure id="figure-B">
690
- <name>Figure 2</name>
691
- <pre alt="A B">A &lt;
692
- B</pre>
693
- </figure>
694
- <figure id="figure-C" unnumbered="true">
695
- <pre>A &lt;
696
- B</pre>
697
- </figure>
698
- </foreword></preface>
699
- </iso-standard>
700
- INPUT
675
+ html = <<~OUTPUT
701
676
  #{HTML_HDR}
702
677
  <br/>
703
678
  <div>
@@ -707,6 +682,7 @@ B</pre>
707
682
  <img src="rice_images/rice_image1.png" height="20" width="30" alt="alttext" title="titletxt"/>
708
683
  <img src="rice_images/rice_image1.png" height="20" width="auto"/>
709
684
  <img src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7" height="20" width="auto"/>
685
+ <img src='data:application/xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjw/eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC94c2wiIGhyZWY9Ii4uLy4uLy4uL3hzbC9yZXNfZG9jL2ltZ2ZpbGUueHNsIj8+CjwhRE9DVFlQRSBpbWdmaWxlLmNvbnRlbnQgU1lTVEVNICIuLi8uLi8uLi9kdGQvdGV4dC5lbnQiPgo8aW1nZmlsZS5jb250ZW50IG1vZHVsZT0iZnVuZGFtZW50YWxzX29mX3Byb2R1Y3RfZGVzY3JpcHRpb25fYW5kX3N1cHBvcnQiIGZpbGU9ImFjdGlvbl9zY2hlbWFleHBnMS54bWwiPgo8aW1nIHNyYz0iYWN0aW9uX3NjaGVtYWV4cGcxLmdpZiI+CjxpbWcuYXJlYSBzaGFwZT0icmVjdCIgY29vcmRzPSIyMTAsMTg2LDM0MywyMjciIGhyZWY9Ii4uLy4uL3Jlc291cmNlcy9iYXNpY19hdHRyaWJ1dGVfc2NoZW1hL2Jhc2ljX2F0dHJpYnV0ZV9zY2hlbWEueG1sIiAvPgo8aW1nLmFyZWEgc2hhcGU9InJlY3QiIGNvb3Jkcz0iMTAsMTAsOTYsNTEiIGhyZWY9Ii4uLy4uL3Jlc291cmNlcy9hY3Rpb25fc2NoZW1hL2FjdGlvbl9zY2hlbWEueG1sIiAvPgo8aW1nLmFyZWEgc2hhcGU9InJlY3QiIGNvb3Jkcz0iMjEwLDI2NCwzNTgsMzA1IiBocmVmPSIuLi8uLi9yZXNvdXJjZXMvc3VwcG9ydF9yZXNvdXJjZV9zY2hlbWEvc3VwcG9ydF9yZXNvdXJjZV9zY2hlbWEueG1sIiAvPgo8L2ltZz4KPC9pbWdmaWxlLmNvbnRlbnQ+Cg==' height='20' width='auto'/>
710
686
  <a href="#_" class="TableFootnoteRef">a</a><aside class="footnote"><div id="fn:_"><span><span id="_" class="TableFootnoteRef">a</span>&#160; </span>
711
687
  <p id="_">The time <span class="stem">(#(t_90)#)</span> was estimated to be 18,2 min for this example.</p>
712
688
  </div></aside>
@@ -717,12 +693,12 @@ B</pre>
717
693
  </a>
718
694
  </p></div>
719
695
  <div class="figure" id="figure-B">
720
- <pre>A &lt;
696
+ <pre>A &#x3c;
721
697
  B</pre>
722
698
  <p class="FigureTitle" style="text-align:center;">Figure 2</p>
723
699
  </div>
724
700
  <div class="figure" id="figure-C">
725
- <pre>A &lt;
701
+ <pre>A &#x3c;
726
702
  B</pre>
727
703
  </div>
728
704
  </div>
@@ -734,38 +710,8 @@ B</pre>
734
710
  </body>
735
711
  </html>
736
712
  OUTPUT
737
- end
738
713
 
739
- it "processes figures (Word)" do
740
- FileUtils.rm_rf "spec/assets/odf1.emf"
741
- expect(xmlpp(strip_guid(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true).sub(/['"][^'".]+\.gif['"]/, "'_.gif'").gsub(/mso-bookmark:_Ref\d+/, "mso-bookmark:_Ref")))).to be_equivalent_to xmlpp(<<~"OUTPUT")
742
- <iso-standard xmlns="http://riboseinc.com/isoxml">
743
- <preface><foreword>
744
- <figure id="figureA-1" keep-with-next="true" keep-lines-together="true">
745
- <name>Figure 1&#xA0;&#x2014; Split-it-right <em>sample</em> divider<fn reference="1"><p>X</p></fn></name>
746
- <image src="rice_images/rice_image1.png" height="20" width="30" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f0" mimetype="image/png" alt="alttext" title="titletxt"/>
747
- <image src="rice_images/rice_image1.png" height="20" width="auto" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f1" mimetype="image/png"/>
748
- <image src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7" height="20" width="auto" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f2" mimetype="image/png"/>
749
- <fn reference="a">
750
- <p id="_ef2c85b8-5a5a-4ecd-a1e6-92acefaaa852">The time <stem type="AsciiMath">t_90</stem> was estimated to be 18,2 min for this example.</p>
751
- </fn>
752
- <dl>
753
- <dt>A</dt>
754
- <dd><p>B</p></dd>
755
- </dl>
756
- </figure>
757
- <figure id="figure-B">
758
- <name>Figure 2</name>
759
- <pre alt="A B">A &lt;
760
- B</pre>
761
- </figure>
762
- <figure id="figure-C" unnumbered="true">
763
- <pre>A &lt;
764
- B</pre>
765
- </figure>
766
- </foreword></preface>
767
- </iso-standard>
768
- INPUT
714
+ word = <<~OUTPUT
769
715
  <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en">
770
716
  <head><style/></head>
771
717
  <body lang="EN-US" link="blue" vlink="#954F72">
@@ -781,6 +727,7 @@ B</pre>
781
727
  <img src="rice_images/rice_image1.png" height="20" width="30" alt="alttext" title="titletxt"/>
782
728
  <img src="rice_images/rice_image1.png" height='20' width='auto'/>
783
729
  <img src='_.gif' height='20' width='auto'/>
730
+ <img src='_.xml' height='20' width='auto'/>
784
731
  <a href="#_" class="TableFootnoteRef">a</a><aside><div id="ftn_"><span><span id="_" class="TableFootnoteRef">a</span><span style="mso-tab-count:1">&#160; </span></span>
785
732
  <p id="_">The time <span class="stem">(#(t_90)#)</span> was estimated to be 18,2 min for this example.</p>
786
733
  </div></aside>
@@ -795,12 +742,12 @@ B</pre>
795
742
  </p>
796
743
  </div>
797
744
  <div class="figure" id="figure-B">
798
- <pre>A &lt;
745
+ <pre>A &#x3c;
799
746
  B</pre>
800
747
  <p class="FigureTitle" style="text-align:center;">Figure 2</p>
801
748
  </div>
802
749
  <div id='figure-C' class='figure'>
803
- <pre>A &lt; B</pre>
750
+ <pre>A &#x3c; B</pre>
804
751
  </div>
805
752
  </div>
806
753
  <p>&#160;</p>
@@ -815,17 +762,22 @@ B</pre>
815
762
  </body>
816
763
  </html>
817
764
  OUTPUT
765
+ expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", input, true).gsub(/\&lt;/, "&#x3c;"))).to be_equivalent_to xmlpp(presxml)
766
+ expect(xmlpp(strip_guid(IsoDoc::HtmlConvert.new({}).convert("test", presxml, true)))).to be_equivalent_to xmlpp(html)
767
+ FileUtils.rm_rf "spec/assets/odf1.emf"
768
+ expect(xmlpp(strip_guid(IsoDoc::WordConvert.new({}).convert("test", presxml, true).gsub(/['"][^'".]+\.(gif|xml)['"]/, "'_.\\1'").gsub(/mso-bookmark:_Ref\d+/, "mso-bookmark:_Ref")))).to be_equivalent_to xmlpp(word)
818
769
  end
819
770
 
820
771
  it "converts SVG (Word)" do
821
772
  FileUtils.rm_rf "spec/assets/odf1.emf"
822
- expect(xmlpp(strip_guid(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true).gsub(/['"][^'".]+(?<!odf1)(?<!odf)\.emf['"]/, "'_.emf'").gsub(/mso-bookmark:_Ref\d+/, "mso-bookmark:_Ref")))).to be_equivalent_to xmlpp(<<~"OUTPUT")
773
+ expect(xmlpp(strip_guid(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true).gsub(/['"][^'".]+(?<!odf1)(?<!odf)\.emf['"]/, "'_.emf'").gsub(/['"][^'".]+\.(gif|xml)['"]/, "'_.\\1'").gsub(/mso-bookmark:_Ref\d+/, "mso-bookmark:_Ref")))).to be_equivalent_to xmlpp(<<~"OUTPUT")
823
774
  <iso-standard xmlns="http://riboseinc.com/isoxml">
824
775
  <preface><foreword>
825
776
  <figure id="figureA-1">
826
777
  <image src="spec/assets/odf.svg" mimetype="image/svg+xml"/>
827
778
  <image src="spec/assets/odf1.svg" mimetype="image/svg+xml"/>
828
779
  <image src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj4KICA8Y2lyY2xlIGZpbGw9IiMwMDkiIHI9IjQ1IiBjeD0iNTAiIGN5PSI1MCIvPgogIDxwYXRoIGQ9Ik0zMywyNkg3OEEzNywzNywwLDAsMSwzMyw4M1Y1N0g1OVY0M0gzM1oiIGZpbGw9IiNGRkYiLz4KPC9zdmc+Cg==" id="_d3731866-1a07-435a-a6c2-1acd41023a4e" mimetype="image/svg+xml" height="auto" width="auto"/>
780
+ <image src="data:application/xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cjw/eG1sLXN0eWxlc2hlZXQgdHlwZT0idGV4dC94c2wiIGhyZWY9Ii4uLy4uLy4uL3hzbC9yZXNfZG9jL2ltZ2ZpbGUueHNsIj8+CjwhRE9DVFlQRSBpbWdmaWxlLmNvbnRlbnQgU1lTVEVNICIuLi8uLi8uLi9kdGQvdGV4dC5lbnQiPgo8aW1nZmlsZS5jb250ZW50IG1vZHVsZT0iZnVuZGFtZW50YWxzX29mX3Byb2R1Y3RfZGVzY3JpcHRpb25fYW5kX3N1cHBvcnQiIGZpbGU9ImFjdGlvbl9zY2hlbWFleHBnMS54bWwiPgo8aW1nIHNyYz0iYWN0aW9uX3NjaGVtYWV4cGcxLmdpZiI+CjxpbWcuYXJlYSBzaGFwZT0icmVjdCIgY29vcmRzPSIyMTAsMTg2LDM0MywyMjciIGhyZWY9Ii4uLy4uL3Jlc291cmNlcy9iYXNpY19hdHRyaWJ1dGVfc2NoZW1hL2Jhc2ljX2F0dHJpYnV0ZV9zY2hlbWEueG1sIiAvPgo8aW1nLmFyZWEgc2hhcGU9InJlY3QiIGNvb3Jkcz0iMTAsMTAsOTYsNTEiIGhyZWY9Ii4uLy4uL3Jlc291cmNlcy9hY3Rpb25fc2NoZW1hL2FjdGlvbl9zY2hlbWEueG1sIiAvPgo8aW1nLmFyZWEgc2hhcGU9InJlY3QiIGNvb3Jkcz0iMjEwLDI2NCwzNTgsMzA1IiBocmVmPSIuLi8uLi9yZXNvdXJjZXMvc3VwcG9ydF9yZXNvdXJjZV9zY2hlbWEvc3VwcG9ydF9yZXNvdXJjZV9zY2hlbWEueG1sIiAvPgo8L2ltZz4KPC9pbWdmaWxlLmNvbnRlbnQ+Cg==" height="20" width="auto" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f2" mimetype="application/xml"/>
829
781
  </figure>
830
782
  </foreword></preface>
831
783
  </iso-standard>
@@ -852,6 +804,7 @@ B</pre>
852
804
  <img src='spec/assets/odf.emf'/>
853
805
  <img src='spec/assets/odf1.emf'/>
854
806
  <img src='_.emf' height='auto' width='auto'/>
807
+ <img src='_.xml' height='20' width='auto'/>
855
808
  </div>
856
809
  </div>
857
810
  <p>&#160;</p>
@@ -1186,5 +1186,4 @@ modified &mdash; with adjustments]
1186
1186
  </html>
1187
1187
  OUTPUT
1188
1188
  end
1189
-
1190
1189
  end
@@ -43,14 +43,14 @@ INPUT
43
43
  OUTPUT
44
44
  end
45
45
 
46
- it "processes inline formatting" do
46
+ it "processes inline formatting (HTML)" do
47
47
  expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
48
48
  <iso-standard xmlns="http://riboseinc.com/isoxml">
49
49
  <preface><foreword>
50
50
  <p>
51
51
  <em>A</em> <strong>B</strong> <sup>C</sup> <sub>D</sub> <tt>E</tt>
52
52
  <strike>F</strike> <smallcap>G</smallcap> <keyword>I</keyword> <br/> <hr/>
53
- <bookmark id="H"/> <pagebreak/> <pagebreak orientation="landscape"/>
53
+ <bookmark id="H"/> <pagebreak/> <pagebreak orientation="landscape"/> <underline>J</underline>
54
54
  </p>
55
55
  </foreword></preface>
56
56
  <sections>
@@ -64,6 +64,7 @@ OUTPUT
64
64
  <i>A</i> <b>B</b> <sup>C</sup> <sub>D</sub> <tt>E</tt>
65
65
  <s>F</s> <span style="font-variant:small-caps;">G</span> <span class="keyword">I</span> <br/> <hr/>
66
66
  <a id="H"/> <br/> <br/>
67
+ <span style='text-decoration: underline;'>J</span>
67
68
  </p>
68
69
  </div>
69
70
  <p class="zzSTDTitle1"/>
@@ -80,7 +81,7 @@ OUTPUT
80
81
  <p>
81
82
  <em>A</em> <strong>B</strong> <sup>C</sup> <sub>D</sub> <tt>E</tt>
82
83
  <strike>F</strike> <smallcap>G</smallcap> <keyword>I</keyword> <br/> <hr/>
83
- <bookmark id="H"/> <pagebreak/> <pagebreak orientation="landscape"/>
84
+ <bookmark id="H"/> <pagebreak/> <pagebreak orientation="landscape"/> <underline>J</underline>
84
85
  </p>
85
86
  </clause></sections>
86
87
  </iso-standard>
@@ -107,6 +108,7 @@ OUTPUT
107
108
  <p>
108
109
  <br clear='all' class='section' orientation='landscape'/>
109
110
  </p>
111
+ <u>J</u>
110
112
  </p>
111
113
  </div>
112
114
  </div>
@@ -117,7 +119,7 @@ OUTPUT
117
119
  end
118
120
 
119
121
  it "ignores index entries" do
120
- expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
122
+ expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
121
123
  <iso-standard xmlns="http://riboseinc.com/isoxml">
122
124
  <preface><foreword>
123
125
  <p><index primary="A" secondary="B" tertiary="C"/></p>
@@ -125,16 +127,14 @@ OUTPUT
125
127
  <sections>
126
128
  </iso-standard>
127
129
  INPUT
128
- #{HTML_HDR}
129
- <br/>
130
- <div>
131
- <h1 class='ForewordTitle'>Foreword</h1>
132
- <p/>
133
- </div>
134
- <p class='zzSTDTitle1'/>
135
- </div>
136
- </body>
137
- </html>
130
+ <iso-standard xmlns='http://riboseinc.com/isoxml' type='presentation'>
131
+ <preface>
132
+ <foreword>
133
+ <p/>
134
+ </foreword>
135
+ </preface>
136
+ <sections> </sections>
137
+ </iso-standard>
138
138
  OUTPUT
139
139
  end
140
140
 
@@ -60,6 +60,8 @@ RSpec.describe IsoDoc do
60
60
  </name>
61
61
  <affiliation>
62
62
  <organization><name>Slate Inc.</name>
63
+ <subdivision>Hermeneutics Unit</subdivision>
64
+ <subdivision>Exegesis Subunit</subdivision>
63
65
  <address>
64
66
  <formattedAddress>Bedrock</formattedAddress>
65
67
  </address>
@@ -106,7 +108,7 @@ INPUT
106
108
  :activateddate=>"2013",
107
109
  :agency=>"ISO",
108
110
  :authors=>["Barney Rubble", "Fred Flintstone"],
109
- :authors_affiliations=>{"Slate Inc., Bedrock"=>["Barney Rubble"], ""=>["Fred Flintstone"]},
111
+ :authors_affiliations=>{"Slate Inc., Hermeneutics Unit, Exegesis Subunit, Bedrock"=>["Barney Rubble"], ""=>["Fred Flintstone"]},
110
112
  :circulateddate=>"2015",
111
113
  :confirmeddate=>"2017",
112
114
  :copieddate=>"2016",