isodoc 1.2.7 → 1.4.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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +14 -9
  3. data/README.adoc +1 -3
  4. data/isodoc.gemspec +1 -1
  5. data/lib/isodoc-yaml/i18n-en.yaml +56 -0
  6. data/lib/isodoc-yaml/i18n-fr.yaml +64 -7
  7. data/lib/isodoc-yaml/i18n-zh-Hans.yaml +1 -0
  8. data/lib/isodoc/base_style/blocks.scss +2 -2
  9. data/lib/isodoc/base_style/typography.scss +1 -1
  10. data/lib/isodoc/convert.rb +13 -85
  11. data/lib/isodoc/css.rb +95 -0
  12. data/lib/isodoc/function/inline.rb +0 -33
  13. data/lib/isodoc/function/inline_simple.rb +10 -1
  14. data/lib/isodoc/function/lists.rb +2 -1
  15. data/lib/isodoc/function/references.rb +8 -13
  16. data/lib/isodoc/function/section.rb +1 -1
  17. data/lib/isodoc/function/table.rb +10 -0
  18. data/lib/isodoc/function/to_word_html.rb +2 -2
  19. data/lib/isodoc/gem_tasks.rb +4 -0
  20. data/lib/isodoc/html_function/html.rb +7 -0
  21. data/lib/isodoc/html_function/mathvariant_to_plain.rb +82 -0
  22. data/lib/isodoc/html_function/postprocess.rb +41 -20
  23. data/lib/isodoc/i18n.rb +15 -2
  24. data/lib/isodoc/metadata_contributor.rb +4 -3
  25. data/lib/isodoc/presentation_function/bibdata.rb +3 -3
  26. data/lib/isodoc/presentation_function/block.rb +14 -9
  27. data/lib/isodoc/presentation_function/inline.rb +126 -22
  28. data/lib/isodoc/presentation_function/section.rb +9 -0
  29. data/lib/isodoc/presentation_xml_convert.rb +5 -0
  30. data/lib/isodoc/version.rb +1 -1
  31. data/lib/isodoc/word_convert.rb +0 -20
  32. data/lib/isodoc/word_function/body.rb +12 -0
  33. data/lib/isodoc/word_function/postprocess.rb +38 -80
  34. data/lib/isodoc/word_function/postprocess_cover.rb +55 -0
  35. data/lib/isodoc/word_function/table.rb +10 -0
  36. data/lib/isodoc/xref.rb +1 -0
  37. data/lib/isodoc/xref/xref_counter.rb +20 -9
  38. data/lib/isodoc/xref/xref_gen.rb +20 -2
  39. data/lib/isodoc/xref/xref_sect_gen.rb +1 -1
  40. data/spec/assets/html.scss +14 -0
  41. data/spec/assets/i18n.yaml +7 -6
  42. data/spec/isodoc/blocks_spec.rb +2 -1
  43. data/spec/isodoc/cleanup_spec.rb +0 -1
  44. data/spec/isodoc/footnotes_spec.rb +4 -5
  45. data/spec/isodoc/i18n_spec.rb +23 -2
  46. data/spec/isodoc/inline_spec.rb +182 -202
  47. data/spec/isodoc/lists_spec.rb +1 -1
  48. data/spec/isodoc/metadata_spec.rb +3 -1
  49. data/spec/isodoc/postproc_spec.rb +472 -11
  50. data/spec/isodoc/presentation_xml_spec.rb +584 -1
  51. data/spec/isodoc/ref_spec.rb +325 -7
  52. data/spec/isodoc/table_spec.rb +28 -0
  53. data/spec/isodoc/xref_spec.rb +162 -17
  54. metadata +18 -16
@@ -203,7 +203,7 @@ RSpec.describe IsoDoc do
203
203
  <br/>
204
204
  <div>
205
205
  <h1 class="ForewordTitle">Foreword</h1>
206
- <ol type="a" id="_ae34a226-aab4-496d-987b-1aa7b6314026">
206
+ <ol type="I" id="_ae34a226-aab4-496d-987b-1aa7b6314026">
207
207
  <li id="_ae34a226-aab4-496d-987b-1aa7b6314027">
208
208
  <p id="_0091a277-fb0e-424a-aea8-f0001303fe78">all information necessary for the complete identification of the sample;</p>
209
209
  </li>
@@ -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",
@@ -139,7 +139,7 @@ expect(File.exist?("test.doc")).to be true
139
139
  it "generates HTML output docs with complete configuration" do
140
140
  FileUtils.rm_f "test.doc"
141
141
  FileUtils.rm_f "test.html"
142
- IsoDoc::HtmlConvert.new({bodyfont: "Zapf", htmlstylesheet: "spec/assets/html.scss", htmlcoverpage: "spec/assets/htmlcover.html", htmlintropage: "spec/assets/htmlintro.html", scripts: "spec/assets/scripts.html", i18nyaml: "spec/assets/i18n.yaml", ulstyle: "l1", olstyle: "l2"}).convert("test", <<~"INPUT", false)
142
+ IsoDoc::HtmlConvert.new({bodyfont: "Zapf", monospacefont: "Consolas", headerfont: "Comic Sans", normalfontsize: "30pt", monospacefontsize: "29pt", smallerfontsize: "28pt", footnotefontsize: "27pt", htmlstylesheet: "spec/assets/html.scss", htmlcoverpage: "spec/assets/htmlcover.html", htmlintropage: "spec/assets/htmlintro.html", scripts: "spec/assets/scripts.html", i18nyaml: "spec/assets/i18n.yaml", ulstyle: "l1", olstyle: "l2"}).convert("test", <<~"INPUT", false)
143
143
  <iso-standard xmlns="http://riboseinc.com/isoxml">
144
144
  <preface><foreword>
145
145
  <note>
@@ -150,7 +150,13 @@ expect(File.exist?("test.doc")).to be true
150
150
  INPUT
151
151
  html = File.read("test.html")
152
152
  expect(html).to match(/another empty stylesheet/)
153
- expect(html).to match(/font-family: Zapf/)
153
+ expect(html).to match(/p \{[^}]*?font-family: Zapf/m)
154
+ expect(html).to match(/code \{[^}]*?font-family: Consolas/m)
155
+ expect(html).to match(/h1 \{[^}]*?font-family: Comic Sans/m)
156
+ expect(html).to match(/p \{[^}]*?font-size: 30pt/m)
157
+ expect(html).to match(/code \{[^}]*?font-size: 29pt/m)
158
+ expect(html).to match(/p\.note \{[^}]*?font-size: 28pt/m)
159
+ expect(html).to match(/aside \{[^}]*?font-size: 27pt/m)
154
160
  expect(html).to match(/an empty html cover page/)
155
161
  expect(html).to match(/an empty html intro page/)
156
162
  expect(html).to match(/This is > a script/)
@@ -172,7 +178,13 @@ expect(File.exist?("test.doc")).to be true
172
178
  INPUT
173
179
  html = File.read("test.html")
174
180
  expect(html).to match(/another empty stylesheet/)
175
- expect(html).to match(/font-family: Arial/)
181
+ expect(html).to match(/p \{[^}]*?font-family: Arial/m)
182
+ expect(html).to match(/code \{[^}]*?font-family: Courier/m)
183
+ expect(html).to match(/h1 \{[^}]*?font-family: Arial/m)
184
+ expect(html).to match(/p \{[^}]*?font-size: 1em;/m)
185
+ expect(html).to match(/code \{[^}]*?font-size: 0.8em/m)
186
+ expect(html).to match(/p\.note \{[^}]*?font-size: 0.9em/m)
187
+ expect(html).to match(/aside \{[^}]*?font-size: 0.9em/m)
176
188
  expect(html).to match(/an empty html cover page/)
177
189
  expect(html).to match(/an empty html intro page/)
178
190
  expect(html).to match(/This is > a script/)
@@ -183,7 +195,7 @@ expect(File.exist?("test.doc")).to be true
183
195
  it "generates Word output docs with complete configuration" do
184
196
  FileUtils.rm_f "test.doc"
185
197
  FileUtils.rm_f "test.html"
186
- IsoDoc::WordConvert.new({bodyfont: "Zapf", wordstylesheet: "spec/assets/html.scss", standardstylesheet: "spec/assets/std.css", header: "spec/assets/header.html", wordcoverpage: "spec/assets/wordcover.html", wordintropage: "spec/assets/wordintro.html", i18nyaml: "spec/assets/i18n.yaml", ulstyle: "l1", olstyle: "l2"}).convert("test", <<~"INPUT", false)
198
+ IsoDoc::WordConvert.new({bodyfont: "Zapf", monospacefont: "Consolas", headerfont: "Comic Sans", normalfontsize: "30pt", monospacefontsize: "29pt", smallerfontsize: "28pt", footnotefontsize: "27pt", wordstylesheet: "spec/assets/html.scss", standardstylesheet: "spec/assets/std.css", header: "spec/assets/header.html", wordcoverpage: "spec/assets/wordcover.html", wordintropage: "spec/assets/wordintro.html", i18nyaml: "spec/assets/i18n.yaml", ulstyle: "l1", olstyle: "l2"}).convert("test", <<~"INPUT", false)
187
199
  <iso-standard xmlns="http://riboseinc.com/isoxml">
188
200
  <preface><foreword>
189
201
  <note>
@@ -194,7 +206,13 @@ expect(File.exist?("test.doc")).to be true
194
206
  INPUT
195
207
  word = File.read("test.doc")
196
208
  expect(word).to match(/another empty stylesheet/)
197
- expect(word).to match(/font-family: Zapf/)
209
+ expect(word).to match(/p \{[^}]*?font-family: Zapf/m)
210
+ expect(word).to match(/code \{[^}]*?font-family: Consolas/m)
211
+ expect(word).to match(/h1 \{[^}]*?font-family: Comic Sans/m)
212
+ expect(word).to match(/p \{[^}]*?font-size: 30pt/m)
213
+ expect(word).to match(/code \{[^}]*?font-size: 29pt/m)
214
+ expect(word).to match(/p\.note \{[^}]*?font-size: 28pt/m)
215
+ expect(word).to match(/aside \{[^}]*?font-size: 27pt/m)
198
216
  expect(word).to match(/a third empty stylesheet/)
199
217
  #expect(word).to match(/<title>test<\/title>/)
200
218
  expect(word).to match(/test_files\/header.html/)
@@ -217,7 +235,13 @@ expect(File.exist?("test.doc")).to be true
217
235
  INPUT
218
236
  word = File.read("test.doc")
219
237
  expect(word).to match(/another empty stylesheet/)
220
- expect(word).to match(/font-family: Arial/)
238
+ expect(word).to match(/p \{[^}]*?font-family: Arial/m)
239
+ expect(word).to match(/code \{[^}]*?font-family: Courier/m)
240
+ expect(word).to match(/h1 \{[^}]*?font-family: Arial/m)
241
+ expect(word).to match(/p \{[^}]*?font-size: 12pt/m)
242
+ expect(word).to match(/code \{[^}]*?font-size: 11pt/m)
243
+ expect(word).to match(/p\.note \{[^}]*?font-size: 10pt/m)
244
+ expect(word).to match(/aside \{[^}]*?font-size: 9pt/m)
221
245
  expect(word).to match(/a third empty stylesheet/)
222
246
  #expect(word).to match(/<title>test<\/title>/)
223
247
  expect(word).to match(/test_files\/header.html/)
@@ -512,7 +536,7 @@ TOCLEVEL
512
536
  <p id="_ff27c067-2785-4551-96cf-0a73530ff1e6">This is a footnote.</p>
513
537
  </fn><clause id="N" inline-header="false" obligation="normative">
514
538
  <title>Introduction to this<fn reference="2">
515
- <p id="_ff27c067-2785-4551-96cf-0a73530ff1e6">Formerly denoted as 15 % (m/m).</p>
539
+ Formerly denoted as 15 % (m/m).
516
540
  </fn></title>
517
541
  </clause>
518
542
  <clause id="O" inline-header="false" obligation="normative">
@@ -548,7 +572,7 @@ TOCLEVEL
548
572
  </a>This is a footnote.</p>
549
573
  <a href="#fnref:1">&#x21A9;</a></aside>
550
574
  <aside id="fn:2" class="footnote">
551
- <p id="_ff27c067-2785-4551-96cf-0a73530ff1e6"><a class='FootnoteRef' href='#fn:2'><sup>2</sup></a>Formerly denoted as 15 % (m/m).</p>
575
+ <a class='FootnoteRef' href='#fn:2'><sup>2</sup></a>Formerly denoted as 15 % (m/m).
552
576
  <a href="#fnref:2">&#x21A9;</a></aside>
553
577
  </main>
554
578
  OUTPUT
@@ -593,6 +617,169 @@ TOCLEVEL
593
617
 
594
618
  end
595
619
 
620
+ describe "mathvariant to plain" do
621
+ context "when `mathvariant` attr equal to `script`" do
622
+ it "converts mathvariant text chars into associated plain chars" do
623
+ FileUtils.rm_f "test.html"
624
+ FileUtils.rm_rf "test_htmlimages"
625
+ input = <<~INPUT
626
+ <?xml version="1.0" encoding="UTF-8"?>
627
+ <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="1.5.14">
628
+ <sections>
629
+ <clause id="_clause" inline-header="false" obligation="normative">
630
+ <title>Clause</title>
631
+ <p id="_20514f5a-9f86-454e-b6ce-927f65ba6441">
632
+ <stem type="MathML"><math xmlns="http://www.w3.org/1998/Math/MathML">
633
+ <mi>x</mi>
634
+ <mo>=</mo>
635
+ <mstyle mathvariant="script">
636
+ <mi>l</mi>
637
+ </mstyle>
638
+ <mo>+</mo>
639
+ <mn>1</mn>
640
+ </math></stem>
641
+ </p>
642
+ </clause>
643
+ </sections>
644
+ </iso-standard>
645
+ INPUT
646
+ output = <<~OUTPUT
647
+ <main class="main-section"><button onclick="topFunction()" id="myBtn" title="Go to top">Top</button>
648
+ <p class="zzSTDTitle1"></p>
649
+ <div id="_clause">
650
+ <h1>Clause</h1>
651
+ <p id="_20514f5a-9f86-454e-b6ce-927f65ba6441">
652
+ <span class="stem"><math xmlns="http://www.w3.org/1998/Math/MathML">
653
+ <mi>x</mi>
654
+ <mo>=</mo>
655
+ <mstyle mathvariant="script">
656
+ <mi>&#x1D4C1;</mi>
657
+ </mstyle>
658
+ <mo>+</mo>
659
+ <mn>1</mn>
660
+ </math></span>
661
+ </p>
662
+ </div>
663
+ </main>
664
+ OUTPUT
665
+ IsoDoc::HtmlConvert.new({}).convert("test", input, false)
666
+ html = File.read("test.html")
667
+ .sub(/^.*<main class="main-section">/m, '<main class="main-section">')
668
+ .sub(%r{</main>.*$}m, "</main>")
669
+ expect(html).to(be_equivalent_to(output))
670
+ end
671
+ end
672
+
673
+ context "when complex `mathvariant` combinations" do
674
+ it "converts mathvariant text chars into associated plain chars" do
675
+ FileUtils.rm_f "test.html"
676
+ FileUtils.rm_rf "test_htmlimages"
677
+ input = <<~INPUT
678
+ <?xml version="1.0" encoding="UTF-8"?>
679
+ <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="1.5.14">
680
+ <sections>
681
+ <clause id="_clause" inline-header="false" obligation="normative">
682
+ <title>Clause</title>
683
+ <p id="_20514f5a-9f86-454e-b6ce-927f65ba6441">
684
+ <stem type="MathML">
685
+ <math xmlns="http://www.w3.org/1998/Math/MathML">
686
+ <mstyle mathvariant="sans-serif">
687
+ <mfrac>
688
+ <mrow>
689
+ <mrow>
690
+ <mi>n</mi>
691
+ <mfenced open="(" close=")">
692
+ <mrow>
693
+ <mstyle mathvariant="bold">
694
+ <mrow>
695
+ <mi>n</mi>
696
+ <mo>+</mo>
697
+ <mn>1</mn>
698
+ <mo>+</mo>
699
+ <mstyle mathvariant="italic">
700
+ <mi>x</mi>
701
+ </mstyle>
702
+ </mrow>
703
+ </mstyle>
704
+ </mrow>
705
+ </mfenced>
706
+ </mrow>
707
+ </mrow>
708
+ <mrow>
709
+ <mstyle mathvariant="bold">
710
+ <mrow>
711
+ <mi>y</mi>
712
+ <mo>+</mo>
713
+ <mstyle mathvariant="fraktur">
714
+ <mi>z</mi>
715
+ </mstyle>
716
+ </mrow>
717
+ </mstyle>
718
+ </mrow>
719
+ </mfrac>
720
+ </mstyle>
721
+ </math>
722
+ </stem>
723
+ </p>
724
+ </clause>
725
+ </sections>
726
+ </iso-standard>
727
+ INPUT
728
+ output = <<~OUTPUT
729
+ <main class="main-section"><button onclick="topFunction()" id="myBtn" title="Go to top">Top</button>
730
+ <p class="zzSTDTitle1"></p>
731
+ <div id="_clause">
732
+ <h1>Clause</h1>
733
+ <p id="_20514f5a-9f86-454e-b6ce-927f65ba6441">
734
+ <span class="stem"><math xmlns="http://www.w3.org/1998/Math/MathML">
735
+ <mstyle mathvariant="sans-serif">
736
+ <mfrac>
737
+ <mrow>
738
+ <mrow>
739
+ <mi>&#x1D5C7;</mi>
740
+ <mfenced open="(" close=")">
741
+ <mrow>
742
+ <mstyle mathvariant="bold">
743
+ <mrow>
744
+ <mi>&#x1D5FB;</mi>
745
+ <mo>+</mo>
746
+ <mn>&#x1D7ED;</mn>
747
+ <mo>+</mo>
748
+ <mstyle mathvariant="italic">
749
+ <mi>&#x1D66D;</mi>
750
+ </mstyle>
751
+ </mrow>
752
+ </mstyle>
753
+ </mrow>
754
+ </mfenced>
755
+ </mrow>
756
+ </mrow>
757
+ <mrow>
758
+ <mstyle mathvariant="bold">
759
+ <mrow>
760
+ <mi>&#x1D606;</mi>
761
+ <mo>+</mo>
762
+ <mstyle mathvariant="fraktur">
763
+ <mi>&#x1D59F;</mi>
764
+ </mstyle>
765
+ </mrow>
766
+ </mstyle>
767
+ </mrow>
768
+ </mfrac>
769
+ </mstyle>
770
+ </math></span>
771
+ </p>
772
+ </div>
773
+ </main>
774
+ OUTPUT
775
+ IsoDoc::HtmlConvert.new({}).convert("test", input, false)
776
+ html = File.read("test.html")
777
+ .sub(/^.*<main class="main-section">/m, '<main class="main-section">')
778
+ .sub(%r{</main>.*$}m, "</main>")
779
+ expect(html).to(be_equivalent_to(output))
780
+ end
781
+ end
782
+ end
596
783
 
597
784
  it "moves images in HTML with no file suffix" do
598
785
  FileUtils.rm_f "test.html"
@@ -905,6 +1092,7 @@ TOCLEVEL
905
1092
  </m:r>
906
1093
  </m:oMath>
907
1094
  </span>
1095
+ <span style='mso-tab-count:1'>&#xA0; </span>
908
1096
  </p>
909
1097
  </div>
910
1098
  </div>
@@ -1022,7 +1210,7 @@ TOCLEVEL
1022
1210
  OUTPUT
1023
1211
  end
1024
1212
 
1025
- it "deals with image captions (Word)" do
1213
+ it "deals with image captions (Word)" do
1026
1214
  FileUtils.rm_f "test.doc"
1027
1215
  FileUtils.rm_f "test.html"
1028
1216
  IsoDoc::WordConvert.new({wordstylesheet: "spec/assets/word.css", htmlstylesheet: "spec/assets/html.scss"}).convert("test", <<~"INPUT", false)
@@ -1341,7 +1529,7 @@ expect(xmlpp(html.sub(/^.*<body /m, "<body ").sub(%r{</body>.*$}m, "</body>"))).
1341
1529
  <div class='Section3' id=''>
1342
1530
  <h1 class='IntroTitle'>Preface 1</h1>
1343
1531
  <p align='center' style='text-align:center;' class='MsoNormal'>
1344
- This is a
1532
+ This is a
1345
1533
  <p class='MsoNormal'>
1346
1534
  <br clear='all' class='section'/>
1347
1535
  </p>
@@ -1387,7 +1575,7 @@ expect(xmlpp(html.sub(/^.*<body /m, "<body ").sub(%r{</body>.*$}m, "</body>"))).
1387
1575
  <p class='Note'>
1388
1576
  <span class='note_label'/>
1389
1577
  <span style='mso-tab-count:1'>&#xA0; </span>
1390
- For further information on the Foreword, see
1578
+ For further information on the Foreword, see
1391
1579
  <b>ISO/IEC Directives, Part 2, 2016, Clause 12.</b>
1392
1580
  </p>
1393
1581
  <p class='Note'>
@@ -1569,4 +1757,277 @@ OUTPUT
1569
1757
  OUTPUT
1570
1758
  end
1571
1759
 
1760
+
1761
+ it "allocate widths to tables (Word)" do
1762
+ expect(xmlpp(IsoDoc::WordConvert.new({wordstylesheet: "spec/assets/word.css", htmlstylesheet: "spec/assets/html.scss", filename: "test"}).word_cleanup(Nokogiri::XML(<<~INPUT)).to_xml).sub(/^.*<main/m, "<main").sub(%r{</main>.*$}m, "</main>")).to be_equivalent_to xmlpp(<<~"OUTPUT")
1763
+ <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en">
1764
+ <head><style/></head>
1765
+ <body lang='EN-US' link='blue' vlink='#954F72'>
1766
+ <div class='WordSection1'>
1767
+ <p>&#160;</p>
1768
+ </div>
1769
+ <p>
1770
+ <br clear='all' class='section'/>
1771
+ </p>
1772
+ <div class='WordSection2'>
1773
+ <p>
1774
+ <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
1775
+ </p>
1776
+ <div>
1777
+ <h1 class='ForewordTitle'>Foreword</h1>
1778
+ <p class='TableTitle' style='text-align:center;'>
1779
+ Table 1&#160;&#8212; Repeatability and reproducibility of
1780
+ <i>husked</i>
1781
+ rice yield
1782
+ <span style='mso-bookmark:_Ref'>
1783
+ <a class='FootnoteRef' href='#ftn1' epub:type='footnote'>
1784
+ <sup>1</sup>
1785
+ </a>
1786
+ </span>
1787
+ </p>
1788
+ <div align='center' class='table_container'>
1789
+ <table id='tableD-1' class='MsoISOTable' style='mso-table-anchor-horizontal:column;mso-table-overlap:never;border-spacing:0;border-width:1px;page-break-after: avoid;page-break-inside: avoid;' title='tool tip' summary='long desc' width='70%'>
1790
+ <colgroup>
1791
+ <col width='30%'/>
1792
+ <col width='20%'/>
1793
+ <col width='20%'/>
1794
+ <col width='20%'/>
1795
+ <col width='10%'/>
1796
+ </colgroup>
1797
+ <thead>
1798
+ <tr>
1799
+ <td rowspan='2' align='left' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>Description</td>
1800
+ <td colspan='4' align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;'>Rice sample</td>
1801
+ </tr>
1802
+ <tr>
1803
+ <td align='left' valign="top" style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>Arborio</td>
1804
+ <td align='center' valign="middle" style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>
1805
+ Drago
1806
+ <a href='#tableD-1a' class='TableFootnoteRef'>a</a>
1807
+ <aside>
1808
+ <div id='ftntableD-1a'>
1809
+ <span>
1810
+ <span id='tableD-1a' class='TableFootnoteRef'>a</span>
1811
+ <span style='mso-tab-count:1'>&#160; </span>
1812
+ </span>
1813
+ <p id='_0fe65e9a-5531-408e-8295-eeff35f41a55'>Parboiled rice.</p>
1814
+ </div>
1815
+ </aside>
1816
+ </td>
1817
+ <td align='center' valign="bottom" style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>
1818
+ Balilla
1819
+ <a href='#tableD-1a' class='TableFootnoteRef'>a</a>
1820
+ </td>
1821
+ <td align='center' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>Thaibonnet</td>
1822
+ </tr>
1823
+ </thead>
1824
+ <tbody>
1825
+ <tr>
1826
+ <th align='left' style='font-weight:bold;border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;'>Number of laboratories retained after eliminating outliers</th>
1827
+ <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;'>13</td>
1828
+ <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;'>11</td>
1829
+ <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;'>13</td>
1830
+ <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;'>13</td>
1831
+ </tr>
1832
+ <tr>
1833
+ <td align='left' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>Mean value, g/100 g</td>
1834
+ <td align='center' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>81,2</td>
1835
+ <td align='center' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>82,0</td>
1836
+ <td align='center' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>81,8</td>
1837
+ <td align='center' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>77,7</td>
1838
+ </tr>
1839
+ </tbody>
1840
+ <tfoot>
1841
+ <tr>
1842
+ <td align='left' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>
1843
+ Reproducibility limit,
1844
+ <span class='stem'>(#(R)#)</span>
1845
+ (= 2,83
1846
+ <span class='stem'>(#(s_R)#)</span>
1847
+ )
1848
+ </td>
1849
+ <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>2,89</td>
1850
+ <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>0,57</td>
1851
+ <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>2,26</td>
1852
+ <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>6,06</td>
1853
+ </tr>
1854
+ </tfoot>
1855
+ <table class='dl'>
1856
+ <tr>
1857
+ <td valign='top' align='left'>
1858
+ <p align='left' style='margin-left:0pt;text-align:left;'>Drago</p>
1859
+ </td>
1860
+ <td valign='top'>A type of rice</td>
1861
+ </tr>
1862
+ </table>
1863
+ <div class='Note'>
1864
+ <p class='Note'>
1865
+ <span class='note_label'>NOTE</span>
1866
+ <span style='mso-tab-count:1'>&#160; </span>
1867
+ This is a table about rice
1868
+ </p>
1869
+ </div>
1870
+ </table>
1871
+ </div>
1872
+ <div align='center' class='table_container'>
1873
+ <table id='tableD-2' class='MsoISOTable' style='mso-table-anchor-horizontal:column;mso-table-overlap:never;border-spacing:0;border-width:1px;'>
1874
+ <tbody>
1875
+ <tr>
1876
+ <td style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>A</td>
1877
+ </tr>
1878
+ </tbody>
1879
+ </table>
1880
+ </div>
1881
+ </div>
1882
+ <p>&#160;</p>
1883
+ </div>
1884
+ <p>
1885
+ <br clear='all' class='section'/>
1886
+ </p>
1887
+ <div class='WordSection3'>
1888
+ <p class='zzSTDTitle1'/>
1889
+ <aside id='ftn1'>
1890
+ <p>X</p>
1891
+ </aside>
1892
+ </div>
1893
+ </body>
1894
+ </html>
1895
+ INPUT
1896
+ <html xmlns:epub='http://www.idpf.org/2007/ops' lang='en'>
1897
+ <head>
1898
+ <style/>
1899
+ </head>
1900
+ <body lang='EN-US' link='blue' vlink='#954F72'>
1901
+ <div class='WordSection1'>
1902
+ <p>&#xA0;</p>
1903
+ </div>
1904
+ <p>
1905
+ <br clear='all' class='section'/>
1906
+ </p>
1907
+ <div class='WordSection2'>
1908
+ <p>
1909
+ <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
1910
+ </p>
1911
+ <div>
1912
+ <h1 class='ForewordTitle'>Foreword</h1>
1913
+ <p class='TableTitle' style='text-align:center;'>
1914
+ Table 1&#xA0;&#x2014; Repeatability and reproducibility of
1915
+ <i>husked</i>
1916
+ rice yield
1917
+ <span style='mso-bookmark:_Ref'>
1918
+ <a class='FootnoteRef' href='#ftn1' epub:type='footnote'>
1919
+ <sup>1</sup>
1920
+ </a>
1921
+ </span>
1922
+ </p>
1923
+ <div align='center' class='table_container'>
1924
+ <table id='tableD-1' class='MsoISOTable' style='mso-table-anchor-horizontal:column;mso-table-overlap:never;border-spacing:0;border-width:1px;page-break-after: avoid;page-break-inside: avoid;' title='tool tip' summary='long desc' width='70%'>
1925
+ <colgroup>
1926
+ <col width='30%'/>
1927
+ <col width='20%'/>
1928
+ <col width='20%'/>
1929
+ <col width='20%'/>
1930
+ <col width='10%'/>
1931
+ </colgroup>
1932
+ <thead>
1933
+ <tr>
1934
+ <td rowspan='2' align='left' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='30.0%'>Description</td>
1935
+ <td colspan='4' align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;' width='70.0%'>Rice sample</td>
1936
+ </tr>
1937
+ <tr>
1938
+ <td align='left' valign='top' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='20.0%'>Arborio</td>
1939
+ <td align='center' valign='middle' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='20.0%'>
1940
+ Drago
1941
+ <a href='#tableD-1a' class='TableFootnoteRef'>a</a>
1942
+ <aside>
1943
+ <div id='ftntableD-1a'>
1944
+ <span>
1945
+ <span id='tableD-1a' class='TableFootnoteRef'>a</span>
1946
+ <span style='mso-tab-count:1'>&#xA0; </span>
1947
+ </span>
1948
+ <p id='_0fe65e9a-5531-408e-8295-eeff35f41a55'>Parboiled rice.</p>
1949
+ </div>
1950
+ </aside>
1951
+ </td>
1952
+ <td align='center' valign='bottom' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='20.0%'>
1953
+ Balilla
1954
+ <a href='#tableD-1a' class='TableFootnoteRef'>a</a>
1955
+ </td>
1956
+ <td align='center' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='10.0%'>Thaibonnet</td>
1957
+ </tr>
1958
+ </thead>
1959
+ <tbody>
1960
+ <tr>
1961
+ <th align='left' style='font-weight:bold;border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;' width='30.0%'>Number of laboratories retained after eliminating outliers</th>
1962
+ <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;' width='20.0%'>13</td>
1963
+ <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;' width='20.0%'>11</td>
1964
+ <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;' width='20.0%'>13</td>
1965
+ <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;mso-border-bottom-alt:solid windowtext 1.0pt;' width='10.0%'>13</td>
1966
+ </tr>
1967
+ <tr>
1968
+ <td align='left' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='30.0%'>Mean value, g/100 g</td>
1969
+ <td align='center' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='20.0%'>81,2</td>
1970
+ <td align='center' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='20.0%'>82,0</td>
1971
+ <td align='center' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='20.0%'>81,8</td>
1972
+ <td align='center' style='border-top:none;mso-border-top-alt:none;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='10.0%'>77,7</td>
1973
+ </tr>
1974
+ </tbody>
1975
+ <tfoot>
1976
+ <tr>
1977
+ <td align='left' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='30.0%'>
1978
+ Reproducibility limit,
1979
+ <span class='stem'>(#(R)#)</span>
1980
+ (= 2,83
1981
+ <span class='stem'>(#(s_R)#)</span>
1982
+ )
1983
+ </td>
1984
+ <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='20.0%'>2,89</td>
1985
+ <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='20.0%'>0,57</td>
1986
+ <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='20.0%'>2,26</td>
1987
+ <td align='center' style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;' width='10.0%'>6,06</td>
1988
+ </tr>
1989
+ </tfoot>
1990
+ <div class='Note'>
1991
+ <p class='Note'>
1992
+ <span class='note_label'>NOTE</span>
1993
+ <span style='mso-tab-count:1'>&#xA0; </span>
1994
+ This is a table about rice
1995
+ </p>
1996
+ </div>
1997
+ </table>
1998
+ <table class='dl'>
1999
+ <tr>
2000
+ <td valign='top' align='left'>
2001
+ <p align='left' style='margin-left:0pt;text-align:left;'>Drago</p>
2002
+ </td>
2003
+ <td valign='top'>A type of rice</td>
2004
+ </tr>
2005
+ </table>
2006
+ </div>
2007
+ <div align='center' class='table_container'>
2008
+ <table id='tableD-2' class='MsoISOTable' style='mso-table-anchor-horizontal:column;mso-table-overlap:never;border-spacing:0;border-width:1px;'>
2009
+ <tbody>
2010
+ <tr>
2011
+ <td style='border-top:solid windowtext 1.5pt;mso-border-top-alt:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;mso-border-bottom-alt:solid windowtext 1.5pt;'>A</td>
2012
+ </tr>
2013
+ </tbody>
2014
+ </table>
2015
+ </div>
2016
+ </div>
2017
+ <p>&#xA0;</p>
2018
+ </div>
2019
+ <p>
2020
+ <br clear='all' class='section'/>
2021
+ </p>
2022
+ <div class='WordSection3'>
2023
+ <p class='zzSTDTitle1'/>
2024
+ <aside id='ftn1'>
2025
+ <p>X</p>
2026
+ </aside>
2027
+ </div>
2028
+ </body>
2029
+ </html>
2030
+ OUTPUT
2031
+ end
2032
+
1572
2033
  end