require "spec_helper" RSpec.describe IsoDoc do it "processes document with no content" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface/> <sections/> </iso-standard> INPUT <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en"> <head/> <body lang="en"> <div class="title-section"> <p> </p> </div> <br/> <div class="prefatory-section"> <p> </p> </div> <br/> <div class="main-section"> <p class="zzSTDTitle1"/> </div> </body> </html> OUTPUT end it "processes section names" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <boilerplate> <copyright-statement> <clause> <title>Copyright</title> </clause> </copyright-statement> <license-statement> <clause> <title>License</title> </clause> </license-statement> <legal-statement> <clause> <title>Legal</title> </clause> </legal-statement> <feedback-statement> <clause> <title>Feedback</title> </clause> </feedback-statement> </boilerplate> <preface> <abstract obligation="informative"> <title>Foreword</title> </abstract> <foreword obligation="informative"> <title>Foreword</title> <p id="A">This is a preamble</p> </foreword> <introduction id="B" obligation="informative"><title>Introduction</title><clause id="C" inline-header="false" obligation="informative"> <title>Introduction Subsection</title> </clause> </introduction> <clause id="B1"><title>Dedication</title></clause> <clause id="B2"><title>Note to reader</title></clause> <acknowledgements obligation="informative"> <title>Acknowledgements</title> </acknowledgements> </preface><sections> <clause id="D" obligation="normative"> <title>Scope</title> <p id="E">Text</p> </clause> <clause id="H" obligation="normative"><title>Terms, Definitions, Symbols and Abbreviated Terms</title><terms id="I" obligation="normative"> <title>Normal Terms</title> <term id="J"> <preferred>Term2</preferred> </term> </terms> <definitions id="K"> <title>Definitions</title> <dl> <dt>Symbol</dt> <dd>Definition</dd> </dl> </definitions> </clause> <definitions id="L"> <dl> <dt>Symbol</dt> <dd>Definition</dd> </dl> </definitions> <clause id="M" inline-header="false" obligation="normative"><title>Clause 4</title><clause id="N" inline-header="false" obligation="normative"> <title>Introduction</title> </clause> <clause id="O" inline-header="false" obligation="normative"> <title>Clause 4.2</title> </clause> <clause id="O1" inline-header="false" obligation="normative"> </clause> </clause> </sections><annex id="P" inline-header="false" obligation="normative"> <title>Annex</title> <clause id="Q" inline-header="false" obligation="normative"> <title>Annex A.1</title> <clause id="Q1" inline-header="false" obligation="normative"> <title>Annex A.1a</title> </clause> <references id="Q2" normative="false"><title>Annex Bibliography</title></references> </clause> </annex> <annex id="P1" inline-header="false" obligation="normative"> </annex> <bibliography><references id="R" obligation="informative" normative="true"> <title>Normative References</title> </references><clause id="S" obligation="informative"> <title>Bibliography</title> <references id="T" obligation="informative" normative="false"> <title>Bibliography Subsection</title> </references> </clause> </bibliography> </iso-standard> INPUT #{HTML_HDR} <div class='authority'> <div class='boilerplate-copyright'> <div> <h1>Copyright</h1> </div> </div> <div class='boilerplate-license'> <div> <h1>License</h1> </div> </div> <div class='boilerplate-legal'> <div> <h1>Legal</h1> </div> </div> <div class='boilerplate-feedback'> <div> <h1>Feedback</h1> </div> </div> </div> <br/> <div> <h1 class="AbstractTitle">Abstract</h1> </div> <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <p id="A">This is a preamble</p> </div> <br/> <div class="Section3" id="B"> <h1 class="IntroTitle">Introduction</h1> <div id="C"> <h2>Introduction Subsection</h2> </div> </div> <br/> <div class='Section3' id='B1'> <h1 class='IntroTitle'>Dedication</h1> </div> <br/> <div class='Section3' id='B2'> <h1 class='IntroTitle'>Note to reader</h1> </div> <br/> <div class='Section3' id=''> <h1 class='IntroTitle'>Acknowledgements</h1> </div> <p class="zzSTDTitle1"/> <div id="D"> <h1>1.  Scope</h1> <p id="E">Text</p> </div> <div> <h1>2.  Normative references</h1> </div> <div id="H"><h1>3.  Terms, Definitions, Symbols and Abbreviated Terms</h1> <div id="I"> <h2>3.1.  Normal Terms</h2> <p class="TermNum" id="J">3.1.1.</p> <p class="Terms" style="text-align:left;">Term2</p> </div><div id="K"><h2>3.2.  Definitions</h2> <dl><dt><p>Symbol</p></dt><dd>Definition</dd></dl> </div></div> <div id="L" class="Symbols"> <h1>4.  Symbols and abbreviated terms</h1> <dl> <dt> <p>Symbol</p> </dt> <dd>Definition</dd> </dl> </div> <div id="M"> <h1>5.  Clause 4</h1> <div id="N"> <h2>5.1.  Introduction</h2> </div> <div id="O"> <h2>5.2.  Clause 4.2</h2> </div> <div id="O1"> <h2>5.3.  </h2> </div> </div> <br/> <div id="P" class="Section3"> <h1 class="Annex"><b>Annex A</b><br/>(normative)<br/><br/><b>Annex</b></h1> <div id="Q"> <h2>A.1.  Annex A.1</h2> <div id="Q1"> <h3>A.1.1.  Annex A.1a</h3> </div> <div><h3>A.1.2.  Annex Bibliography</h3></div> </div> </div> <br/> <div id='P1' class='Section3'> <h1 class='Annex'> <b>Annex B</b> <br/> (normative) <br/> <br/> <b/> </h1> </div> <br/> <div> <h1 class="Section3">Bibliography</h1> <div> <h2 class="Section3">Bibliography Subsection</h2> </div> </div> </div> </body> </html> OUTPUT end it "processes section names (Word)" do expect(xmlpp(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <boilerplate> <copyright-statement> <clause> <title>Copyright</title> </clause> </copyright-statement> <license-statement> <clause> <title>License</title> </clause> </license-statement> <legal-statement> <clause> <title>Legal</title> </clause> </legal-statement> <feedback-statement> <clause> <title>Feedback</title> </clause> </feedback-statement> </boilerplate> <preface> <abstract obligation="informative"> <title>Foreword</title> </abstract> <foreword obligation="informative"> <title>Foreword</title> <p id="A">This is a preamble</p> </foreword> <introduction id="B" obligation="informative"><title>Introduction</title><clause id="C" inline-header="false" obligation="informative"> <title>Introduction Subsection</title> </clause> </introduction> <clause id="B1"><title>Dedication</title></clause> <clause id="B2"><title>Note to reader</title></clause> <acknowledgements obligation="informative"> <title>Acknowledgements</title> </acknowledgements> </preface><sections> <clause id="D" obligation="normative"> <title>Scope</title> <p id="E">Text</p> </clause> <clause id="H" obligation="normative"><title>Terms, Definitions, Symbols and Abbreviated Terms</title><terms id="I" obligation="normative"> <title>Normal Terms</title> <term id="J"> <preferred>Term2</preferred> </term> </terms> <definitions id="K"> <dl> <dt>Symbol</dt> <dd>Definition</dd> </dl> </definitions> </clause> <definitions id="L"> <dl> <dt>Symbol</dt> <dd>Definition</dd> </dl> </definitions> <clause id="M" inline-header="false" obligation="normative"><title>Clause 4</title><clause id="N" inline-header="false" obligation="normative"> <title>Introduction</title> </clause> <clause id="O" inline-header="false" obligation="normative"> <title>Clause 4.2</title> </clause> <clause id="O1" inline-header="false" obligation="normative"> </clause> </clause> </sections><annex id="P" inline-header="false" obligation="normative"> <title>Annex</title> <clause id="Q" inline-header="false" obligation="normative"> <title>Annex A.1</title> <clause id="Q1" inline-header="false" obligation="normative"> <title>Annex A.1a</title> </clause> </clause> </annex> <annex id="P1" inline-header="false" obligation="normative"> </annex> <bibliography><references id="R" obligation="informative" normative="true"> <title>Normative References</title> </references><clause id="S" obligation="informative"> <title>Bibliography</title> <references id="T" obligation="informative" normative="false"> <title>Bibliography Subsection</title> </references> </clause> </bibliography> </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"> <div class='authority'> <div class='boilerplate-copyright'> <div> <h1>Copyright</h1> </div> </div> <div class='boilerplate-license'> <div> <h1>License</h1> </div> </div> <div class='boilerplate-legal'> <div> <h1>Legal</h1> </div> </div> <div class='boilerplate-feedback'> <div> <h1>Feedback</h1> </div> </div> </div> <p><br clear="all" style="mso-special-character:line-break;page-break-before:always"/></p> <div> <h1 class="AbstractTitle">Abstract</h1> </div> <p><br clear="all" style="mso-special-character:line-break;page-break-before:always"/></p> <div> <h1 class="ForewordTitle">Foreword</h1> <p id="A">This is a preamble</p> </div> <p><br clear="all" style="mso-special-character:line-break;page-break-before:always"/></p> <div class="Section3" id="B"> <h1 class="IntroTitle">Introduction</h1> <div id="C"> <h2>Introduction Subsection</h2> </div> </div> <p> <br clear='all' style='mso-special-character:line-break;page-break-before:always'/> </p> <div class='Section3' id='B1'> <h1 class='IntroTitle'>Dedication</h1> </div> <p> <br clear='all' style='mso-special-character:line-break;page-break-before:always'/> </p> <div class='Section3' id='B2'> <h1 class='IntroTitle'>Note to reader</h1> </div> <p> <br clear='all' style='mso-special-character:line-break;page-break-before:always'/> </p> <div class='Section3' id=''> <h1 class='IntroTitle'>Acknowledgements</h1> </div> <p> </p> </div> <p><br clear="all" class="section"/></p> <div class="WordSection3"> <p class="zzSTDTitle1"/> <div id="D"> <h1>1.<span style="mso-tab-count:1">  </span>Scope</h1> <p id="E">Text</p> </div> <div> <h1>2.<span style="mso-tab-count:1">  </span>Normative references</h1> </div> <div id="H"><h1>3.<span style="mso-tab-count:1">  </span>Terms, Definitions, Symbols and Abbreviated Terms</h1> <div id="I"> <h2>3.1.<span style="mso-tab-count:1">  </span>Normal Terms</h2> <p class="TermNum" id="J">3.1.1.</p> <p class="Terms" style="text-align:left;">Term2</p> </div><div id="K"><h2>3.2.<span style="mso-tab-count:1">  </span>Symbols and abbreviated terms</h2> <table class="dl"><tr><td valign="top" align="left"><p align="left" style="margin-left:0pt;text-align:left;">Symbol</p></td><td valign="top">Definition</td></tr></table> </div></div> <div id="L" class="Symbols"> <h1>4.<span style="mso-tab-count:1">  </span>Symbols and abbreviated terms</h1> <table class="dl"> <tr> <td valign="top" align="left"> <p align="left" style="margin-left:0pt;text-align:left;">Symbol</p> </td> <td valign="top">Definition</td> </tr> </table> </div> <div id="M"> <h1>5.<span style="mso-tab-count:1">  </span>Clause 4</h1> <div id="N"> <h2>5.1.<span style="mso-tab-count:1">  </span>Introduction</h2> </div> <div id="O"> <h2>5.2.<span style="mso-tab-count:1">  </span>Clause 4.2</h2> </div> <div id="O1"> <h2>5.3.<span style="mso-tab-count:1">  </span></h2> </div> </div> <p><br clear="all" style="mso-special-character:line-break;page-break-before:always"/></p> <div id="P" class="Section3"> <h1 class="Annex"><b>Annex A</b><br/>(normative)<br/><br/><b>Annex</b></h1> <div id="Q"> <h2>A.1.<span style="mso-tab-count:1">  </span>Annex A.1</h2> <div id="Q1"> <h3>A.1.1.<span style="mso-tab-count:1">  </span>Annex A.1a</h3> </div> </div> </div> <p> <br clear='all' style='mso-special-character:line-break;page-break-before:always'/> </p> <div id='P1' class='Section3'> <h1 class='Annex'> <b>Annex B</b> <br/> (normative) <br/> <br/> <b/> </h1> </div> <p><br clear="all" style="mso-special-character:line-break;page-break-before:always"/></p> <div> <h1 class="Section3">Bibliography</h1> <div> <h2 class="Section3">Bibliography Subsection</h2> </div> </div> </div> </body> </html> OUTPUT end it "processes footnotes in section names" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true).gsub(%r{<aside .*</aside>}m, ""))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <boilerplate> <copyright-statement> <clause> <title>Copyright<fn reference="1"><p>A</p></fn></title> </clause> </copyright-statement> <license-statement> <clause> <title>License<fn reference="2"><p>A</p></fn></title> </clause> </license-statement> <legal-statement> <clause> <title>Legal<fn reference="3"><p>A</p></fn></title> </clause> </legal-statement> <feedback-statement> <clause> <title>Feedback<fn reference="4"><p>A</p></fn></title> </clause> </feedback-statement> </boilerplate> <preface> <abstract obligation="informative"> <title>Foreword<fn reference="5"><p>A</p></fn></title> </abstract> <foreword obligation="informative"> <title>Foreword<fn reference="6"><p>A</p></fn></title> <p id="A">This is a preamble</p> </foreword> <introduction id="B" obligation="informative"> <title>Introduction<fn reference="7"><p>A</p></fn></title><clause id="C" inline-header="false" obligation="informative"> <title>Introduction Subsection<fn reference="8"><p>A</p></fn></title> </clause> </introduction></preface><sections> <clause id="D" obligation="normative"> <title>Scope<fn reference="9"><p>A</p></fn></title> <p id="E">Text</p> </clause> <clause id="H" obligation="normative"> <title>Terms, Definitions, Symbols and Abbreviated Terms<fn reference="10"><p>A</p></fn></title><terms id="I" obligation="normative"> <title>Normal Terms<fn reference="11"><p>A</p></fn></title> <term id="J"> <preferred>Term2</preferred> </term> </terms> <definitions id="K"> <title>Definitions<fn reference="12"><p>A</p></fn></title> <dl> <dt>Symbol</dt> <dd>Definition</dd> </dl> </definitions> </clause> <definitions id="L"> <dl> <dt>Symbol</dt> <dd>Definition</dd> </dl> </definitions> <clause id="M" inline-header="false" obligation="normative"> <title>Clause 4<fn reference="13"><p>A</p></fn></title><clause id="N" inline-header="false" obligation="normative"> <title>Introduction<fn reference="1"><p>A</p></fn></title> </clause> <clause id="O" inline-header="false" obligation="normative"> <title>Clause 4.2<fn reference="14"><p>A</p></fn></title> </clause> <clause id="O1" inline-header="false" obligation="normative"> </clause> </clause> </sections><annex id="P" inline-header="false" obligation="normative"> <title>Annex<fn reference="15"><p>A</p></fn></title> <clause id="Q" inline-header="false" obligation="normative"> <title>Annex A.1<fn reference="16"><p>A</p></fn></title> <clause id="Q1" inline-header="false" obligation="normative"> <title>Annex A.1a<fn reference="17"><p>A</p></fn></title> </clause> <references id="Q2" normative="false"><title>Annex Bibliography<fn reference="18"><p>A</p></fn></title></references> </clause> </annex><bibliography><references id="R" obligation="informative" normative="true"> <title>Normative References<fn reference="19"><p>A</p></fn></title> </references><clause id="S" obligation="informative"> <title>Bibliography<fn reference="20"><p>A</p></fn></title> <references id="T" obligation="informative" normative="false"> <title>Bibliography Subsection<fn reference="21"><p>A</p></fn></title> </references> </clause> </bibliography> </iso-standard> INPUT <html xmlns:epub='http://www.idpf.org/2007/ops' lang='en'> <head/> <body lang='en'> <div class='title-section'> <p> </p> </div> <br/> <div class='prefatory-section'> <p> </p> </div> <br/> <div class='main-section'> <div class='authority'> <div class='boilerplate-copyright'> <div> <h1> Copyright <a rel='footnote' href='#fn:1' epub:type='footnote'> <sup>1</sup> </a> </h1> </div> </div> <div class='boilerplate-license'> <div> <h1> License <a rel='footnote' href='#fn:2' epub:type='footnote'> <sup>2</sup> </a> </h1> </div> </div> <div class='boilerplate-legal'> <div> <h1> Legal <a rel='footnote' href='#fn:3' epub:type='footnote'> <sup>3</sup> </a> </h1> </div> </div> <div class='boilerplate-feedback'> <div> <h1> Feedback <a rel='footnote' href='#fn:4' epub:type='footnote'> <sup>4</sup> </a> </h1> </div> </div> </div> <br/> <div> <h1 class='AbstractTitle'>Abstract</h1> </div> <br/> <div> <h1 class='ForewordTitle'>Foreword</h1> <p id='A'>This is a preamble</p> </div> <br/> <div class='Section3' id='B'> <h1 class='IntroTitle'>Introduction</h1> <div id='C'> <h2> Introduction Subsection <a rel='footnote' href='#fn:8' epub:type='footnote'> <sup>8</sup> </a> </h2> </div> </div> <p class='zzSTDTitle1'/> <div> <h1>1.  Normative references</h1> </div> <div id='H'> <h1> 2.  Terms, Definitions, Symbols and Abbreviated Terms <a rel='footnote' href='#fn:10' epub:type='footnote'> <sup>10</sup> </a> </h1> <div id='I'> <h2> 2.1.  Normal Terms <a rel='footnote' href='#fn:11' epub:type='footnote'> <sup>11</sup> </a> </h2> <p class='TermNum' id='J'>2.1.1.</p> <p class='Terms' style='text-align:left;'>Term2</p> </div> <div id='K'> <h2> 2.2.  Definitions <a rel='footnote' href='#fn:12' epub:type='footnote'> <sup>12</sup> </a> </h2> <dl> <dt> <p>Symbol</p> </dt> <dd>Definition</dd> </dl> </div> </div> <div id='L' class='Symbols'> <h1>3.  Symbols and abbreviated terms</h1> <dl> <dt> <p>Symbol</p> </dt> <dd>Definition</dd> </dl> </div> <div id='D'> <h1> 4.  Scope <a rel='footnote' href='#fn:9' epub:type='footnote'> <sup>9</sup> </a> </h1> <p id='E'>Text</p> </div> <div id='M'> <h1> 5.  Clause 4 <a rel='footnote' href='#fn:13' epub:type='footnote'> <sup>13</sup> </a> </h1> <div id='N'> <h2> 5.1.  Introduction <a rel='footnote' href='#fn:1' epub:type='footnote'> <sup>1</sup> </a> </h2> </div> <div id='O'> <h2> 5.2.  Clause 4.2 <a rel='footnote' href='#fn:14' epub:type='footnote'> <sup>14</sup> </a> </h2> </div> <div id='O1'> <h2>5.3.  </h2> </div> </div> <br/> <div id='P' class='Section3'> <h1 class='Annex'> <b>Annex A</b> <br/> (normative) <br/> <br/> <b> Annex <a rel='footnote' href='#fn:15' epub:type='footnote'> <sup>15</sup> </a> </b> </h1> <div id='Q'> <h2> A.1.  Annex A.1 <a rel='footnote' href='#fn:16' epub:type='footnote'> <sup>16</sup> </a> </h2> <div id='Q1'> <h3> A.1.1.  Annex A.1a <a rel='footnote' href='#fn:17' epub:type='footnote'> <sup>17</sup> </a> </h3> </div> <div> <h3> A.1.2.  Annex Bibliography <a rel='footnote' href='#fn:18' epub:type='footnote'> <sup>18</sup> </a> </h3> </div> </div> </div> <br/> <div> <h1 class='Section3'>Bibliography</h1> <div> <h2 class='Section3'>Bibliography SubsectionA</h2> </div> </div> </div> </body> </html> OUTPUT end it "processes section names suppressing section numbering" do expect(xmlpp(IsoDoc::HtmlConvert.new({suppressheadingnumbers: true}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface> <foreword obligation="informative"> <title>Foreword</title> <p id="A">This is a preamble</p> </foreword> <introduction id="B" obligation="informative"><title>Introduction</title><clause id="C" inline-header="false" obligation="informative"> <title>Introduction Subsection</title> </clause> </introduction></preface><sections> <clause id="D" obligation="normative"> <title>Scope</title> <p id="E">Text</p> </clause> <clause id="H" obligation="normative"><title>Terms, Definitions, Symbols and Abbreviated Terms</title><terms id="I" obligation="normative"> <title>Normal Terms</title> <term id="J"> <preferred>Term2</preferred> </term> </terms> <definitions id="K"> <dl> <dt>Symbol</dt> <dd>Definition</dd> </dl> </definitions> </clause> <definitions id="L"> <dl> <dt>Symbol</dt> <dd>Definition</dd> </dl> </definitions> <clause id="M" inline-header="false" obligation="normative"><title>Clause 4</title><clause id="N" inline-header="false" obligation="normative"> <title>Introduction</title> </clause> <clause id="O" inline-header="false" obligation="normative"> <title>Clause 4.2</title> </clause> <clause id="O1" inline-header="false" obligation="normative"> </clause> </clause> </sections><annex id="P" inline-header="false" obligation="normative"> <title>Annex</title> <clause id="Q" inline-header="false" obligation="normative"> <title>Annex A.1</title> <clause id="Q1" inline-header="false" obligation="normative"> <title>Annex A.1a</title> </clause> </clause> </annex><bibliography><references id="R" obligation="informative" normative="true"> <title>Normative References</title> </references><clause id="S" obligation="informative"> <title>Bibliography</title> <references id="T" obligation="informative" normative="false"> <title>Bibliography Subsection</title> </references> </clause> </bibliography> </iso-standard> INPUT #{HTML_HDR} <br/> <div> <h1 class="ForewordTitle">Foreword</h1> <p id="A">This is a preamble</p> </div> <br/> <div class="Section3" id="B"> <h1 class="IntroTitle">Introduction</h1> <div id="C"><h2>Introduction Subsection</h2> </div> </div> <p class="zzSTDTitle1"/> <div id="D"> <h1>Scope</h1> <p id="E">Text</p> </div> <div> <h1>Normative references</h1> </div> <div id="H"><h1>Terms, Definitions, Symbols and Abbreviated Terms</h1> <div id="I"><h2>Normal Terms</h2> <p class="TermNum" id="J">3.1.1.</p> <p class="Terms" style="text-align:left;">Term2</p> </div><div id="K"><h2>Symbols and abbreviated terms</h2> <dl><dt><p>Symbol</p></dt><dd>Definition</dd></dl> </div></div> <div id="L" class="Symbols"> <h1>Symbols and abbreviated terms</h1> <dl> <dt> <p>Symbol</p> </dt> <dd>Definition</dd> </dl> </div> <div id="M"> <h1>Clause 4</h1> <div id="N"><h2>Introduction</h2> </div> <div id="O"><h2>Clause 4.2</h2> </div> <div id="O1"><h2/> </div> </div> <br/> <div id="P" class="Section3"> <h1 class="Annex"><b>Annex A</b><br/>(normative)<br/><br/><b>Annex</b></h1> <div id="Q"><h2>Annex A.1</h2> <div id="Q1"><h3>Annex A.1a</h3> </div> </div> </div> <br/> <div> <h1 class="Section3">Bibliography</h1> <div> <h2 class="Section3">Bibliography Subsection</h2> </div> </div> </div> </body> </html> OUTPUT end it "processes section titles without ID" do expect(xmlpp(IsoDoc::HtmlConvert.new({suppressheadingnumbers: true}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <preface> <introduction id="B" obligation="informative"><title>Introduction</title><clause obligation="informative"> <title>Introduction Subsection</title> </clause> </introduction> </preface> </iso-standard> INPUT #{HTML_HDR} <br/> <div class='Section3' id='B'> <h1 class='IntroTitle'>Introduction</h1> <div> <h1>Introduction Subsection</h1> </div> </div> <p class='zzSTDTitle1'/> </div> </body> </html> OUTPUT end it "processes simple terms & definitions" 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 id="H" obligation="normative"><title>Terms, Definitions, Symbols and Abbreviated Terms</title> <term id="J"> <preferred>Term2</preferred> </term> </terms> </sections> </iso-standard> INPUT #{HTML_HDR} <p class="zzSTDTitle1"/> <div id="H"><h1>1.  Terms, Definitions, Symbols and Abbreviated Terms</h1> <p class="TermNum" id="J">1.1.</p> <p class="Terms" style="text-align:left;">Term2</p> </div> </div> </body> </html> OUTPUT end it "processes inline section headers" do expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <sections> <clause id="M" inline-header="false" obligation="normative"><title>Clause 4</title><clause id="N" inline-header="false" obligation="normative"> <title>Introduction</title> </clause> <clause id="O" inline-header="true" obligation="normative"> <title>Clause 4.2</title> </clause></clause> </sections> </iso-standard> INPUT #{HTML_HDR} <p class="zzSTDTitle1"/> <div id="M"> <h1>1.  Clause 4</h1> <div id="N"> <h2>1.1.  Introduction</h2> </div> <div id="O"> <span class="zzMoveToFollowing"><b>1.2.  Clause 4.2 </b></span> </div> </div> </div> </body> </html> OUTPUT end it "processes inline section headers with suppressed heading numbering" do expect(xmlpp(IsoDoc::HtmlConvert.new({suppressheadingnumbers: true}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT") <iso-standard xmlns="http://riboseinc.com/isoxml"> <sections> <clause id="M" inline-header="false" obligation="normative"><title>Clause 4</title><clause id="N" inline-header="false" obligation="normative"> <title>Introduction</title> </clause> <clause id="O" inline-header="true" obligation="normative"> <title>Clause 4.2</title> </clause></clause> </sections> </iso-standard> INPUT #{HTML_HDR} <p class="zzSTDTitle1"/> <div id="M"> <h1>Clause 4</h1> <div id="N"> <h2>Introduction</h2> </div> <div id="O"> <span class="zzMoveToFollowing"><b>Clause 4.2 </b></span> </div> </div> </div> </body> </html> OUTPUT end it "processes sections without 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> <introduction id="M" inline-header="false" obligation="normative"><clause id="N" inline-header="false" obligation="normative"> <title>Intro</title> </clause> <clause id="O" inline-header="true" obligation="normative"> </clause></clause> </preface> <sections> <clause id="M1" inline-header="false" obligation="normative"><clause id="N1" inline-header="false" obligation="normative"> </clause> <clause id="O1" inline-header="true" obligation="normative"> </clause></clause> </sections> </iso-standard> INPUT #{HTML_HDR} <br/> <div class="Section3" id="M"> <h1 class="IntroTitle">Introduction</h1> <div id="N"><h2>Intro</h2> </div> <div id="O"><span class="zzMoveToFollowing"><b> </b></span> </div> </div> <p class="zzSTDTitle1"/> <div id="M1"> <h1>1.  </h1> <div id="N1"><h2>1.1. </h2> </div> <div id="O1"><span class="zzMoveToFollowing"><b>1.2.  </b></span> </div> </div> </div> </body> </html> OUTPUT end end