require "spec_helper" RSpec.describe IsoDoc do it "processes unlabelled notes" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <note> <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p> </note> </foreword></preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <div id="" class="Note"> <p><span class="note_label">NOTE</span>  These results are based on a study carried out on three different types of kernel.</p> </div> </div> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes unlabelled notes (Word)" do expect(xmlpp(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <note> <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p> </note> </foreword></preface> </iso-standard> INPUT <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en"> <head><style/></head> <body lang="EN-US" link="blue" vlink="#954F72"> <div class="WordSection1"> <p> </p> </div> <p><br clear="all" class="section"/></p> <div class="WordSection2"> <p><br clear="all" style="mso-special-character:line-break;page-break-before:always"/></p> <div> <h1 class="ForewordTitle">Foreword</h1> <div id="" class="Note"> <p class="Note"><span class="note_label">NOTE</span><span style="mso-tab-count:1">  </span>These results are based on a study carried out on three different types of kernel.</p> </div> </div> <p> </p> </div> <p><br clear="all" class="section"/></p> <div class="WordSection3"> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes labelled notes" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <note id="note1"> <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p> </note> </foreword></preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <div id="note1" class="Note"> <p><span class="note_label">NOTE</span>  These results are based on a study carried out on three different types of kernel.</p> </div> </div> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes sequences of notes" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <note id="note1"> <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p> </note> <note id="note2"> <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83a">These results are based on a study carried out on three different types of kernel.</p> </note> </foreword></preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <div id="note1" class="Note"> <p><span class="note_label">NOTE 1</span>  These results are based on a study carried out on three different types of kernel.</p> </div> <div id="note2" class="Note"> <p><span class="note_label">NOTE 2</span>  These results are based on a study carried out on three different types of kernel.</p> </div> </div> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes multi-para notes" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <note> <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p> <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83a">These results are based on a study carried out on three different types of kernel.</p> </note> </foreword></preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <div id="" class="Note"> <p><span class="note_label">NOTE</span>  These results are based on a study carried out on three different types of kernel.</p> <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83a">These results are based on a study carried out on three different types of kernel.</p> </div> </div> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes non-para notes" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <note> <dl> <dt>A</dt> <dd><p>B</p></dd> </dl> <ul> <li>C</li></ul> </note> </foreword></preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <div id="" class="Note"><p><span class="note_label">NOTE</span>  </p> <dl><dt><p>A</p></dt><dd><p>B</p></dd></dl> <ul> <li>C</li></ul> </div> </div> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes non-para notes (Word)" do expect(xmlpp(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <note> <dl> <dt>A</dt> <dd><p>B</p></dd> </dl> <ul> <li>C</li></ul> </note> </foreword></preface> </iso-standard> INPUT <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en"> <head><style/></head> <body lang="EN-US" link="blue" vlink="#954F72"> <div class="WordSection1"> <p> </p> </div> <p><br clear="all" class="section"/></p> <div class="WordSection2"> <p><br clear="all" style="mso-special-character:line-break;page-break-before:always"/></p> <div> <h1 class="ForewordTitle">Foreword</h1> <div id="" class="Note"><p class="Note"><span class="note_label">NOTE</span><span style="mso-tab-count:1">  </span></p> <table class="dl"><tr><td valign="top" align="left"><p align="left" style="margin-left:0pt;text-align:left;">A</p></td><td valign="top"><p class="Note">B</p></td></tr></table> <ul> <li>C</li></ul> </div> </div> <p> </p> </div> <p><br clear="all" class="section"/></p> <div class="WordSection3"> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes paragraphs containing notes" do expect(xmlpp(strip_guid(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <p id="A">ABC <note id="B"><p id="C">XYZ</p></note> <note id="B1"><p id="C1">XYZ1</p></note></p> </foreword></preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class='ForewordTitle'>Foreword</h1> <p id='A'> ABC <div id='B' class='Note'> <p> <span class='note_label'>NOTE 1</span>   XYZ </p> </div> <div id='B1' class='Note'> <p> <span class='note_label'>NOTE 2</span>   XYZ1 </p> </div> </p> </div> <p class='zzSTDTitle1'/> </div> </body> </html> OUTPUT end it "processes paragraphs containing notes (Word)" do expect(xmlpp(strip_guid(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <p id="A">ABC <note id="B"><p id="C">XYZ</p></note> <note id="B1"><p id="C1">XYZ1</p></note></p> </foreword></preface> </iso-standard> INPUT <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en"> <head> <style/> </head> <body lang='EN-US' link='blue' vlink='#954F72'> <div class='WordSection1'> <p> </p> </div> <p> <br clear='all' class='section'/> </p> <div class='WordSection2'> <p> <br clear='all' style='mso-special-character:line-break;page-break-before:always'/> </p> <div> <h1 class='ForewordTitle'>Foreword</h1> <p id='A'>ABC </p> <div id='B' class='Note'> <p class='Note'> <span class='note_label'>NOTE 1</span> <span style='mso-tab-count:1'>  </span> XYZ </p> </div> <div id='B1' class='Note'> <p class='Note'> <span class='note_label'>NOTE 2</span> <span style='mso-tab-count:1'>  </span> XYZ1 </p> </div> </div> <p> </p> </div> <p> <br clear='all' class='section'/> </p> <div class='WordSection3'> <p class='zzSTDTitle1'/> </div> </body> </html> OUTPUT end it "processes figures" do expect(xmlpp(strip_guid(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true)))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <figure id="figureA-1"> <name>Split-it-right <em>sample</em> divider</name> <image src="rice_images/rice_image1.png" height="20" width="30" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f0" mimetype="image/png" alt="alttext" title="titletxt"/> <image src="rice_images/rice_image1.png" height="20" width="auto" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f1" mimetype="image/png"/> <image src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7" height="20" width="auto" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f2" mimetype="image/png"/> <fn reference="a"> <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> </fn> <dl> <dt>A</dt> <dd><p>B</p></dd> </dl> </figure> <figure id="figure-B"> <pre alt="A B">A < B</pre> </figure> <figure id="figure-C" unnumbered="true"> <pre>A < B</pre> </figure> </foreword></preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <div id="figureA-1" class="figure"> <img src="rice_images/rice_image1.png" height="20" width="30" alt="alttext" title="titletxt"/> <img src="rice_images/rice_image1.png" height="20" width="auto"/> <img src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7" height="20" width="auto"/> <a href="#_" class="TableFootnoteRef">a</a><aside class="footnote"><div id="fn:_"><span><span id="_" class="TableFootnoteRef">a</span>  </span> <p id="_">The time <span class="stem">(#(t_90)#)</span> was estimated to be 18,2 min for this example.</p> </div></aside> <p><b>Key</b></p><dl><dt><p>A</p></dt><dd><p>B</p></dd></dl> <p class="FigureTitle" style="text-align:center;">Figure 1 — Split-it-right <i>sample</i> divider</p></div> <div class="figure" id="figure-B"> <pre>A < B</pre> <p class="FigureTitle" style="text-align:center;">Figure 2</p> </div> <div class="figure" id="figure-C"> <pre>A < B</pre> </div> </div> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes figures (Word)" do expect(xmlpp(strip_guid(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true).sub(/['"][^'".]+\.gif['"]/, "'_.gif'")))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <figure id="figureA-1"> <name>Split-it-right sample divider</name> <image src="rice_images/rice_image1.png" height="20" width="30" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f0" mimetype="image/png" alt="alttext" title="titletext"/> <image src="rice_images/rice_image1.png" height="20" width="auto" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f0" mimetype="image/png"/> <image src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7" height="20" width="auto" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f0" mimetype="image/png"/> <fn reference="a"> <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> </fn> <dl> <dt>A</dt> <dd><p>B</p></dd> </dl> </figure> <figure id="figure-B"> <pre>A < B</pre> </figure> </foreword></preface> </iso-standard> INPUT <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en"> <head><style/></head> <body lang="EN-US" link="blue" vlink="#954F72"> <div class="WordSection1"> <p> </p> </div> <p><br clear="all" class="section"/></p> <div class="WordSection2"> <p><br clear="all" style="mso-special-character:line-break;page-break-before:always"/></p> <div> <h1 class="ForewordTitle">Foreword</h1> <div id="figureA-1" class="figure"> <img src="rice_images/rice_image1.png" height="20" width="30" alt="alttext" title="titletext"/> <img src="rice_images/rice_image1.png"/> <img src="_.gif"/> <a href="#_" class="TableFootnoteRef">a</a><aside><div id="ftn_"><span><span id="_" class="TableFootnoteRef">a</span><span style="mso-tab-count:1">  </span></span> <p id="_">The time <span class="stem">(#(t_90)#)</span> was estimated to be 18,2 min for this example.</p> </div></aside> <p><b>Key</b></p><table class="dl"><tr><td valign="top" align="left"><p align="left" style="margin-left:0pt;text-align:left;">A</p></td><td valign="top"><p>B</p></td></tr></table> <p class="FigureTitle" style="text-align:center;">Figure 1 — Split-it-right sample divider</p></div> <div class="figure" id="figure-B"> <pre>A < B</pre> <p class="FigureTitle" style="text-align:center;">Figure 2</p> </div> </div> <p> </p> </div> <p><br clear="all" class="section"/></p> <div class="WordSection3"> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes examples" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <example id="samplecode"> <name>Title</name> <p>Hello</p> <sourcecode id="X"> <name>Sample</name> </sourcecode> </example> </foreword></preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <div id="samplecode" class="example"> <p class="example-title">EXAMPLE — Title</p> <p>Hello</p> <pre id='X' class='prettyprint '> <br/>   <br/>   </pre> <p class='SourceTitle' style='text-align:center;'>Sample</p> </div> </div> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes sequences of examples" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <example id="samplecode"> <p>Hello</p> </example> <example id="samplecode2"> <name>Title</name> <p>Hello</p> </example> <example id="samplecode3" unnumbered="true"> <p>Hello</p> </example> </foreword></preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <div id="samplecode" class="example"> <p class="example-title">EXAMPLE 1</p> <p>Hello</p> </div> <div id="samplecode2" class="example"> <p class="example-title">EXAMPLE 2 — Title</p> <p>Hello</p> </div> <div id="samplecode3" class="example"> <p class="example-title">EXAMPLE</p> <p>Hello</p> </div> </div> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes sourcecode" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <sourcecode lang="ruby" id="samplecode"> <name>Ruby <em>code</em></name> puts x </sourcecode> <sourcecode unnumbered="true"> Que? </sourcecode> </foreword></preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <pre id="samplecode" class="prettyprint lang-rb"><br/>    <br/>  puts x<br/></pre> <p class="SourceTitle" style="text-align:center;">Figure 1 — Ruby <i>code</i></p> <pre class='prettyprint '> <br/> Que? <br/> </pre> </div> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes sourcecode (Word)" do expect(xmlpp(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <sourcecode lang="ruby" id="samplecode"> <name>Ruby <em>code</em></name> puts x </sourcecode> <sourcecode unnumbered="true"> Que? </sourcecode> </foreword></preface> </iso-standard> INPUT <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en"> <head><style/></head> <body lang="EN-US" link="blue" vlink="#954F72"> <div class="WordSection1"> <p> </p> </div> <p> <br clear="all" class="section"/> </p> <div class="WordSection2"> <p> <br clear="all" style="mso-special-character:line-break;page-break-before:always"/> </p> <div> <h1 class="ForewordTitle">Foreword</h1> <p id="samplecode" class="Sourcecode"><br/>    <br/>  puts x<br/></p><p class="SourceTitle" style="text-align:center;">Figure 1 — Ruby <i>code</i></p> <p class='Sourcecode'> <br/> Que? <br/> </p> </div> <p> </p> </div> <p> <br clear="all" class="section"/> </p> <div class="WordSection3"> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes sourcecode with escapes preserved" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <sourcecode id="samplecode"> <name>XML code</name> <xml> </sourcecode> </foreword></preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <pre id="samplecode" class="prettyprint "><br/>    <br/>  <xml><br/></pre> <p class="SourceTitle" style="text-align:center;">Figure 1 — XML code</p> </div> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes sourcecode with annotations" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <sourcecode id="_">puts "Hello, world." <callout target="A">1</callout> %w{a b c}.each do |x| puts x <callout target="B">2</callout> end<annotation id="A"> <p id="_">This is <em>one</em> callout</p> </annotation><annotation id="B"> <p id="_">This is another callout</p> </annotation></sourcecode> </foreword></preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <pre id="_" class="prettyprint ">puts "Hello, world." <1><br/>   %w{a b c}.each do |x|<br/>     puts x <2><br/>   end<br/><br/><1> This is one callout<br/><2> This is another callout</pre> <p class='SourceTitle' style='text-align:center;'>Figure 1</p> </div> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes admonitions" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <admonition id="_70234f78-64e5-4dfc-8b6f-f3f037348b6a" type="caution"> <p id="_e94663cc-2473-4ccc-9a72-983a74d989f2">Only use paddy or parboiled rice for the determination of husked rice yield.</p> </admonition> </foreword></preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <div class="Admonition"><p class="AdmonitionTitle" style="text-align:center;">CAUTION</p> <p id="_e94663cc-2473-4ccc-9a72-983a74d989f2">Only use paddy or parboiled rice for the determination of husked rice yield.</p> </div> </div> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes admonitions with titles" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <admonition id="_70234f78-64e5-4dfc-8b6f-f3f037348b6a" type="caution"> <name>Title</name> <p id="_e94663cc-2473-4ccc-9a72-983a74d989f2">Only use paddy or parboiled rice for the determination of husked rice yield.</p> </admonition> </foreword></preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <div class="Admonition"><p class="AdmonitionTitle" style="text-align:center;">Title</p> <p id="_e94663cc-2473-4ccc-9a72-983a74d989f2">Only use paddy or parboiled rice for the determination of husked rice yield.</p> </div> </div> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes formulae" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <formula id="_be9158af-7e93-4ee2-90c5-26d31c181934" unnumbered="true"> <stem type="AsciiMath">r = 1 %</stem> <dl id="_e4fe94fe-1cde-49d9-b1ad-743293b7e21d"> <dt> <stem type="AsciiMath">r</stem> </dt> <dd> <p id="_1b99995d-ff03-40f5-8f2e-ab9665a69b77">is the repeatability limit.</p> </dd> </dl> <note id="_83083c7a-6c85-43db-a9fa-4d8edd0c9fc0"> <p id="_511aaa98-4116-42af-8e5b-c87cdf5bfdc8">[durationUnits] is essentially a duration statement without the "P" prefix. "P" is unnecessary because between "G" and "U" duration is always expressed.</p> </note> </formula> <formula id="_be9158af-7e93-4ee2-90c5-26d31c181935"> <stem type="AsciiMath">r = 1 %</stem> </formula> </foreword></preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <div id="_be9158af-7e93-4ee2-90c5-26d31c181934" class="formula"><p><span class="stem">(#(r = 1 %)#)</span></p></div><p>where</p><dl id="_e4fe94fe-1cde-49d9-b1ad-743293b7e21d"><dt> <span class="stem">(#(r)#)</span> </dt><dd> <p id="_1b99995d-ff03-40f5-8f2e-ab9665a69b77">is the repeatability limit.</p> </dd></dl> <div id="_83083c7a-6c85-43db-a9fa-4d8edd0c9fc0" class="Note"><p><span class="note_label">NOTE</span>  [durationUnits] is essentially a duration statement without the "P" prefix. "P" is unnecessary because between "G" and "U" duration is always expressed.</p></div> <div id="_be9158af-7e93-4ee2-90c5-26d31c181935" class="formula"><p><span class="stem">(#(r = 1 %)#)</span>  (1)</p></div> </div> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes paragraph alignments" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <p align="left" id="_08bfe952-d57f-4150-9c95-5d52098cc2a8">Vache Equipment<br/> Fictitious<br/> World</p> <p align="justify">Justify</p> </foreword></preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <p id="_08bfe952-d57f-4150-9c95-5d52098cc2a8" style="text-align:left;">Vache Equipment<br/> Fictitious<br/> World </p> <p style="text-align:justify;">Justify</p> </div> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes paragraph alignments (Word)" do expect(xmlpp(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <p align="left" id="_08bfe952-d57f-4150-9c95-5d52098cc2a8">Vache Equipment<br/> Fictitious<br/> World</p> <p align="justify">Justify</p> </foreword></preface> </iso-standard> INPUT <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en"> <head><style/></head> <body lang="EN-US" link="blue" vlink="#954F72"> <div class="WordSection1"> <p> </p> </div> <p><br clear="all" class="section"/></p> <div class="WordSection2"> <p><br clear="all" style="mso-special-character:line-break;page-break-before:always"/></p> <div> <h1 class="ForewordTitle">Foreword</h1> <p id="_08bfe952-d57f-4150-9c95-5d52098cc2a8" align="left" style="text-align:left">Vache Equipment<br/> Fictitious<br/> World </p> <p style="text-align:justify">Justify</p> </div> <p> </p> </div> <p><br clear="all" class="section"/></p> <div class="WordSection3"> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes blockquotes" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <quote id="_044bd364-c832-4b78-8fea-92242402a1d1"> <source type="inline" bibitemid="ISO7301" citeas="ISO 7301:2011"><locality type="clause"><referenceFrom>1</referenceFrom></locality></source> <author>ISO</author> <p id="_d4fd0a61-f300-4285-abe6-602707590e53">This International Standard gives the minimum specifications for rice (<em>Oryza sativa</em> L.) which is subject to international trade. It is applicable to the following types: husked rice and milled rice, parboiled or not, intended for direct human consumption. It is neither applicable to other products derived from rice, nor to waxy rice (glutinous rice).</p> </quote> </foreword></preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <div class="Quote" id="_044bd364-c832-4b78-8fea-92242402a1d1"> <p id="_d4fd0a61-f300-4285-abe6-602707590e53">This International Standard gives the minimum specifications for rice (<i>Oryza sativa</i> L.) which is subject to international trade. It is applicable to the following types: husked rice and milled rice, parboiled or not, intended for direct human consumption. It is neither applicable to other products derived from rice, nor to waxy rice (glutinous rice).</p> <p class="QuoteAttribution">— ISO, <a href="#ISO7301">ISO 7301:2011, Clause 1</a></p></div> </div> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes term domains" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <sections> <terms> <term id="_extraneous_matter"><preferred>extraneous matter</preferred><admitted>EM</admitted> <domain>rice</domain> <definition><p id="_318b3939-be09-46c4-a284-93f9826b981e">organic and inorganic components other than whole or broken kernels</p></definition> </term> </terms> </sections> </iso-standard> INPUT #{HTML_HDR} <p class="zzSTDTitle1"/> <div><h1>1.  Terms and definitions</h1> <p class="TermNum" id="_extraneous_matter">1.1.</p><p class="Terms" style="text-align:left;">extraneous matter</p><p class="AltTerms" style="text-align:left;">EM</p> <p id="_318b3939-be09-46c4-a284-93f9826b981e"><rice> organic and inorganic components other than whole or broken kernels</p> </div> </div> </body> </html> OUTPUT end it "processes permissions" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <permission id="_"> <label>/ogc/recommendation/wfs/2</label> <inherit>/ss/584/2015/level/1</inherit> <inherit>/ss/584/2015/level/2</inherit> <subject>user</subject> <classification> <tag>control-class</tag> <value>Technical</value> </classification><classification> <tag>priority</tag> <value>P0</value> </classification><classification> <tag>family</tag> <value>System and Communications Protection</value> </classification><classification> <tag>family</tag> <value>System and Communications Protocols</value> </classification> <description> <p id="_">I recommend <em>this</em>.</p> </description> <specification exclude="true" type="tabular"> <p id="_">This is the object of the recommendation:</p> <table id="_"> <tbody> <tr> <td style="text-align:left;">Object</td> <td style="text-align:left;">Value</td> </tr> <tr> <td style="text-align:left;">Mission</td> <td style="text-align:left;">Accomplished</td> </tr> </tbody> </table> </specification> <description> <p id="_">As for the measurement targets,</p> </description> <measurement-target exclude="false"> <p id="_">The measurement target shall be measured as:</p> <formula id="_"> <stem type="AsciiMath">r/1 = 0</stem> </formula> </measurement-target> <verification exclude="false"> <p id="_">The following code will be run for verification:</p> <sourcecode id="_">CoreRoot(success): HttpResponse if (success) recommendation(label: success-response) end </sourcecode> </verification> <import exclude="true"> <sourcecode id="_">success-response()</sourcecode> </import> </permission> </foreword></preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <div class="permission"><p class="RecommendationTitle">Permission 1:<br/>/ogc/recommendation/wfs/2</p> <p><i>Subject: user<br/> Inherit: /ss/584/2015/level/1 <br/> Inherit: /ss/584/2015/level/2 <br/>Control-class: Technical<br/>Priority: P0<br/>Family: System and Communications Protection<br/>Family: System and Communications Protocols</i></p> <div class="requirement-description"> <p id="_">I recommend <i>this</i>.</p> </div> <div class="requirement-description"> <p id="_">As for the measurement targets,</p> </div> <div class="requirement-measurement-target"> <p id="_">The measurement target shall be measured as:</p> <div id="_" class="formula"><p><span class="stem">(#(r/1 = 0)#)</span>  (1)</p></div> </div> <div class="requirement-verification"> <p id="_">The following code will be run for verification:</p> <pre id="_" class="prettyprint ">CoreRoot(success): HttpResponse<br/>      if (success)<br/>      recommendation(label: success-response)<br/>      end<br/>    </pre> </div> </div> </div> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes requirements" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <requirement id="A" unnumbered="true"> <title>A New Requirement</title> <label>/ogc/recommendation/wfs/2</label> <inherit>/ss/584/2015/level/1</inherit> <subject>user</subject> <description> <p id="_">I recommend <em>this</em>.</p> </description> <specification exclude="true" type="tabular"> <p id="_">This is the object of the recommendation:</p> <table id="_"> <tbody> <tr> <td style="text-align:left;">Object</td> <td style="text-align:left;">Value</td> </tr> <tr> <td style="text-align:left;">Mission</td> <td style="text-align:left;">Accomplished</td> </tr> </tbody> </table> </specification> <description> <p id="_">As for the measurement targets,</p> </description> <measurement-target exclude="false"> <p id="_">The measurement target shall be measured as:</p> <formula id="B"> <stem type="AsciiMath">r/1 = 0</stem> </formula> </measurement-target> <verification exclude="false"> <p id="_">The following code will be run for verification:</p> <sourcecode id="_">CoreRoot(success): HttpResponse if (success) recommendation(label: success-response) end </sourcecode> </verification> <import exclude="true"> <sourcecode id="_">success-response()</sourcecode> </import> </requirement> </foreword></preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <div class="require"><p class="RecommendationTitle">Requirement:<br/>/ogc/recommendation/wfs/2. A New Requirement</p><p><i>Subject: user<br/>Inherit: /ss/584/2015/level/1</i></p> <div class="requirement-description"> <p id="_">I recommend <i>this</i>.</p> </div> <div class="requirement-description"> <p id="_">As for the measurement targets,</p> </div> <div class="requirement-measurement-target"> <p id="_">The measurement target shall be measured as:</p> <div id="B" class="formula"><p><span class="stem">(#(r/1 = 0)#)</span>  (1)</p></div> </div> <div class="requirement-verification"> <p id="_">The following code will be run for verification:</p> <pre id="_" class="prettyprint ">CoreRoot(success): HttpResponse<br/>      if (success)<br/>      recommendation(label: success-response)<br/>      end<br/>    </pre> </div> </div> </div> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes recommendation" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface><foreword> <recommendation id="_" obligation="shall,could"> <label>/ogc/recommendation/wfs/2</label> <inherit>/ss/584/2015/level/1</inherit> <classification><tag>type</tag><value>text</value></classification> <classification><tag>language</tag><value>BASIC</value></classification> <subject>user</subject> <description> <p id="_">I recommend <em>this</em>.</p> </description> <specification exclude="true" type="tabular"> <p id="_">This is the object of the recommendation:</p> <table id="_"> <tbody> <tr> <td style="text-align:left;">Object</td> <td style="text-align:left;">Value</td> </tr> <tr> <td style="text-align:left;">Mission</td> <td style="text-align:left;">Accomplished</td> </tr> </tbody> </table> </specification> <description> <p id="_">As for the measurement targets,</p> </description> <measurement-target exclude="false"> <p id="_">The measurement target shall be measured as:</p> <formula id="_"> <stem type="AsciiMath">r/1 = 0</stem> </formula> </measurement-target> <verification exclude="false"> <p id="_">The following code will be run for verification:</p> <sourcecode id="_">CoreRoot(success): HttpResponse if (success) recommendation(label: success-response) end </sourcecode> </verification> <import exclude="true"> <sourcecode id="_">success-response()</sourcecode> </import> </recommendation> </foreword></preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <div class="recommend"><p class="RecommendationTitle">Recommendation 1:<br/>/ogc/recommendation/wfs/2</p><p><i>Obligation: shall,could<br/>Subject: user<br/>Inherit: /ss/584/2015/level/1<br/>Type: text<br/>Language: BASIC</i></p> <div class="requirement-description"> <p id="_">I recommend <i>this</i>.</p> </div> <div class="requirement-description"> <p id="_">As for the measurement targets,</p> </div> <div class="requirement-measurement-target"> <p id="_">The measurement target shall be measured as:</p> <div id="_" class="formula"><p><span class="stem">(#(r/1 = 0)#)</span>  (1)</p></div> </div> <div class="requirement-verification"> <p id="_">The following code will be run for verification:</p> <pre id="_" class="prettyprint ">CoreRoot(success): HttpResponse<br/>      if (success)<br/>      recommendation(label: success-response)<br/>      end<br/>    </pre> </div> </div> </div> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes pseudocode" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <itu-standard xmlns="http://riboseinc.com/isoxml"> <bibdata> <language>en</language> </bibdata> <preface><foreword> <figure id="_" class="pseudocode"><name>Label</name><p id="_"> <strong>A</strong><br/> <smallcap>B</smallcap></p> <p id="_"> <em>C</em></p></figure> </preface></itu-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <div id="_" class="pseudocode"><p id="_">  <b>A</b><br/>         <span style="font-variant:small-caps;">B</span></p> <p id="_">  <i>C</i></p><p class="SourceTitle" style="text-align:center;">Figure 1 — Label</p></div> </div> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes pseudocode (Word)" do FileUtils.rm_f "test.doc" IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", false) <itu-standard xmlns="http://riboseinc.com/isoxml"> <bibdata> <language>en</language> </bibdata> <preface><foreword> <figure id="_" class="pseudocode"><name>Label</name><p id="_"> <strong>A</strong><br/> <smallcap>B</smallcap></p> <p id="_"> <em>C</em></p></figure> </preface></itu-standard> INPUT expect(xmlpp( File.read("test.doc").gsub(%r{^.*<h1 class="ForewordTitle">Foreword</h1>}m, "").gsub(%r{</div>.*}m, "</div>"))).to be_equivalent_to xmlpp(<<~"OUTPUT") <div class="pseudocode"><a name="_" id="_"></a><p class="pseudocode"><a name="_" id="_"></a>  <b>A</b><br/>         <span style="font-variant:small-caps;">B</span></p> <p class="pseudocode" style="page-break-after:avoid;"><a name="_" id="_"></a>  <i>C</i></p><p class="SourceTitle" style="text-align:center;">Figure 1 — Label</p></div> OUTPUT end it "does not label embedded figures, sourcecode" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <itu-standard xmlns="http://riboseinc.com/isoxml"> <bibdata> <language>en</language> </bibdata> <preface><foreword> <example> <sourcecode id="B"><name>Label</name>A B C</sourcecode> <figure id="A" class="pseudocode"><name>Label</name><p id="_"> <strong>A</strong></p></figure> <sourcecode id="B1">A B C</sourcecode> <figure id="A1" class="pseudocode"><p id="_"> <strong>A</strong></p></figure> </example> </preface></itu-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class='ForewordTitle'>Foreword</h1> <div class='example'> <p class='example-title'>EXAMPLE</p> <pre id='B' class='prettyprint '> A B C </pre> <p class='SourceTitle' style='text-align:center;'>Label</p> <div id='A' class='pseudocode'> <p id='_'>    <b>A</b> </p> <p class='SourceTitle' style='text-align:center;'>Label</p> </div> <pre id='B1' class='prettyprint '>A B C</pre> <div id='A1' class='pseudocode'> <p id='_'>    <b>A</b> </p> </div> </div> </div> <p class='zzSTDTitle1'/> </div> </body> </html> OUTPUT end end