isodoc 0.5.5 → 0.5.7

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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/CODE_OF_CONDUCT.md +46 -0
  3. data/LICENSE +25 -0
  4. data/README.adoc +1 -1
  5. data/Rakefile +6 -0
  6. data/isodoc.gemspec +1 -0
  7. data/lib/isodoc.rb +4 -95
  8. data/lib/isodoc/cleanup.rb +14 -10
  9. data/lib/isodoc/{notes.rb → comments.rb} +0 -73
  10. data/lib/isodoc/convert.rb +97 -0
  11. data/lib/isodoc/footnotes.rb +74 -0
  12. data/lib/isodoc/html.rb +41 -4
  13. data/lib/isodoc/i18n-en.yaml +1 -0
  14. data/lib/isodoc/i18n-fr.yaml +1 -0
  15. data/lib/isodoc/i18n-zh-Hans.yaml +1 -0
  16. data/lib/isodoc/i18n.rb +1 -0
  17. data/lib/isodoc/inline.rb +4 -12
  18. data/lib/isodoc/iso2wordhtml.rb +26 -13
  19. data/lib/isodoc/metadata.rb +23 -10
  20. data/lib/isodoc/references.rb +20 -22
  21. data/lib/isodoc/section.rb +4 -3
  22. data/lib/isodoc/table.rb +0 -2
  23. data/lib/isodoc/terms.rb +2 -13
  24. data/lib/isodoc/utils.rb +24 -3
  25. data/lib/isodoc/version.rb +1 -1
  26. data/lib/isodoc/wordconvert/comments.rb +155 -0
  27. data/lib/isodoc/wordconvert/convert.rb +31 -0
  28. data/lib/isodoc/wordconvert/footnotes.rb +80 -0
  29. data/lib/isodoc/wordconvert/wordconvertmodule.rb +212 -0
  30. data/lib/isodoc/xref_gen.rb +50 -79
  31. data/lib/isodoc/xref_sect_gen.rb +82 -0
  32. data/spec/assets/header.html +7 -0
  33. data/spec/assets/html.css +2 -0
  34. data/spec/assets/htmlcover.html +4 -0
  35. data/spec/assets/htmlintro.html +5 -0
  36. data/spec/assets/i18n.yaml +2 -0
  37. data/spec/assets/iso.xml +8 -0
  38. data/spec/assets/rice_image1.png +0 -0
  39. data/spec/assets/std.css +2 -0
  40. data/spec/assets/word.css +2 -0
  41. data/spec/assets/wordcover.html +3 -0
  42. data/spec/assets/wordintro.html +4 -0
  43. data/spec/isodoc/blocks_spec.rb +130 -47
  44. data/spec/isodoc/cleanup_spec.rb +693 -0
  45. data/spec/isodoc/footnotes_spec.rb +282 -0
  46. data/spec/isodoc/i18n_spec.rb +662 -0
  47. data/spec/isodoc/inline_spec.rb +344 -0
  48. data/spec/isodoc/lists_spec.rb +81 -18
  49. data/spec/isodoc/metadata_spec.rb +141 -0
  50. data/spec/isodoc/postproc_spec.rb +444 -0
  51. data/spec/isodoc/ref_spec.rb +158 -0
  52. data/spec/isodoc/section_spec.rb +275 -112
  53. data/spec/isodoc/table_spec.rb +146 -8
  54. data/spec/isodoc/terms_spec.rb +118 -0
  55. data/spec/isodoc/xref_spec.rb +490 -114
  56. metadata +46 -4
  57. data/lib/isodoc/postprocessing.rb +0 -176
@@ -0,0 +1,282 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe IsoDoc do
4
+ it "processes IsoXML footnotes" do
5
+ expect(IsoDoc::Convert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
6
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
7
+ <foreword>
8
+ <p>A.<fn reference="2">
9
+ <p id="_1e228e29-baef-4f38-b048-b05a051747e4">Formerly denoted as 15 % (m/m).</p>
10
+ </fn></p>
11
+ <p>B.<fn reference="2">
12
+ <p id="_1e228e29-baef-4f38-b048-b05a051747e4">Formerly denoted as 15 % (m/m).</p>
13
+ </fn></p>
14
+ <p>C.<fn reference="1">
15
+ <p id="_1e228e29-baef-4f38-b048-b05a051747e4">Hello! denoted as 15 % (m/m).</p>
16
+ </fn></p>
17
+ </foreword>
18
+ </iso-standard>
19
+ INPUT
20
+ <html xmlns:epub="http://www.idpf.org/2007/ops">
21
+ <head>
22
+ <title>test</title>
23
+ <body lang="EN-US" link="blue" vlink="#954F72">
24
+ <div class="WordSection1">
25
+ <p>&#160;</p>
26
+ </div>
27
+ <br/>
28
+ <div class="WordSection2">
29
+ <br/>
30
+ <div>
31
+ <h1 class="ForewordTitle">Foreword</h1>
32
+ <p>A.<a href="#ftn2" epub:type="footnote"><sup>2</sup></a></p>
33
+ <p>B.<a href="#ftn2" epub:type="footnote"><sup>2</sup></a></p>
34
+ <p>C.<a href="#ftn1" epub:type="footnote"><sup>1</sup></a></p>
35
+ </div>
36
+ <p>&#160;</p>
37
+ </div>
38
+ <br/>
39
+ <div class="WordSection3">
40
+ <p class="zzSTDTitle1"/>
41
+ <aside id="ftn2">
42
+ <p id="_1e228e29-baef-4f38-b048-b05a051747e4">Formerly denoted as 15 % (m/m).</p>
43
+ </aside>
44
+ <aside id="ftn1">
45
+ <p id="_1e228e29-baef-4f38-b048-b05a051747e4">Hello! denoted as 15 % (m/m).</p>
46
+ </aside>
47
+ </div>
48
+ </body>
49
+ </head>
50
+ </html>
51
+ OUTPUT
52
+ end
53
+
54
+ it "processes IsoXML footnotes (Word)" do
55
+ expect(IsoDoc::WordConvert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
56
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
57
+ <foreword>
58
+ <p>A.<fn reference="2">
59
+ <p id="_1e228e29-baef-4f38-b048-b05a051747e4">Formerly denoted as 15 % (m/m).</p>
60
+ </fn></p>
61
+ <p>B.<fn reference="2">
62
+ <p id="_1e228e29-baef-4f38-b048-b05a051747e4">Formerly denoted as 15 % (m/m).</p>
63
+ </fn></p>
64
+ <p>C.<fn reference="1">
65
+ <p id="_1e228e29-baef-4f38-b048-b05a051747e4">Hello! denoted as 15 % (m/m).</p>
66
+ </fn></p>
67
+ </foreword>
68
+ </iso-standard>
69
+ INPUT
70
+ <html xmlns:epub="http://www.idpf.org/2007/ops">
71
+ <head>
72
+ <title>test</title>
73
+ <body lang="EN-US" link="blue" vlink="#954F72">
74
+ <div class="WordSection1">
75
+ <p>&#160;</p>
76
+ </div>
77
+ <br clear="all" class="section"/>
78
+ <div class="WordSection2">
79
+ <br clear="all" style="mso-special-character:line-break;page-break-before:always"/>
80
+ <div>
81
+ <h1 class="ForewordTitle">Foreword</h1>
82
+ <p>A.<a href="#ftn2" epub:type="footnote"><sup>2</sup></a></p>
83
+ <p>B.<a href="#ftn2" epub:type="footnote"><sup>2</sup></a></p>
84
+ <p>C.<a href="#ftn1" epub:type="footnote"><sup>1</sup></a></p>
85
+ </div>
86
+ <p>&#160;</p>
87
+ </div>
88
+ <br clear="all" class="section"/>
89
+ <div class="WordSection3">
90
+ <p class="zzSTDTitle1"/>
91
+ <aside id="ftn2">
92
+ <p id="_1e228e29-baef-4f38-b048-b05a051747e4">Formerly denoted as 15 % (m/m).</p>
93
+ </aside>
94
+ <aside id="ftn1">
95
+ <p id="_1e228e29-baef-4f38-b048-b05a051747e4">Hello! denoted as 15 % (m/m).</p>
96
+ </aside>
97
+ </div>
98
+ </body>
99
+ </head>
100
+ </html>
101
+ OUTPUT
102
+ end
103
+
104
+ it "processes IsoXML reviewer notes" do
105
+ system "rm -f test.html"
106
+ IsoDoc::Convert.new({wordstylesheet: "spec/assets/word.css", htmlstylesheet: "spec/assets/html.css"}).convert_file(<<~"INPUT", "test", false)
107
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
108
+ <foreword>
109
+ <p id="A">A.</p>
110
+ <p id="B">B.</p>
111
+ <review reviewer="ISO" id="_4f4dff63-23c1-4ecb-8ac6-d3ffba93c711" date="20170101T0000" from="A" to="B"><p id="_c54b9549-369f-4f85-b5b2-9db3fd3d4c07">A Foreword shall appear in each document. The generic text is shown here. It does not contain requirements, recommendations or permissions.</p>
112
+ <p id="_f1a8b9da-ca75-458b-96fa-d4af7328975e">For further information on the Foreword, see <strong>ISO/IEC Directives, Part 2, 2016, Clause 12.</strong></p></review>
113
+ <p id="C">C.</p>
114
+ <review reviewer="ISO" id="_4f4dff63-23c1-4ecb-8ac6-d3ffba93c712" date="20170108T0000" from="C" to="C"><p id="_c54b9549-369f-4f85-b5b2-9db3fd3d4c08">Second note.</p></review>
115
+ </foreword>
116
+ <introduction>
117
+ <review reviewer="ISO" id="_4f4dff63-23c1-4ecb-8ac6-d3ffba93c712" date="20170108T0000" from="A" to="C"><p id="_c54b9549-369f-4f85-b5b2-9db3fd3d4c08">Second note.</p></review>
118
+ </introduction>
119
+ </iso-standard>
120
+ INPUT
121
+ html = File.read("test.html").sub(/^.*<body/m, "<body").sub(%r{</body>.*$}m, "</body>")
122
+ expect(html).to be_equivalent_to <<~"OUTPUT"
123
+ <body lang="EN-US" link="blue" vlink="#954F72" xml:lang="EN-US">
124
+ <div class="WordSection1">
125
+ <p>&#xA0;</p>
126
+ </div>
127
+ <br />
128
+ <div class="WordSection2">
129
+ <br />
130
+ <div>
131
+ <h1 class="ForewordTitle">Foreword</h1>
132
+ <span style="MsoCommentReference" target="1" class="commentLink" from="A" to="B">
133
+ <span lang="EN-GB" style="font-size:9.0pt" xml:lang="EN-GB">
134
+ <a style="mso-comment-reference:SMC_1;mso-comment-date:20170101T0000"><span style="MsoCommentReference" target="3" class="commentLink" from="A" to="C">
135
+ <span lang="EN-GB" style="font-size:9.0pt" xml:lang="EN-GB">
136
+ <a style="mso-comment-reference:SMC_3;mso-comment-date:20170108T0000"><p id="A">A.</p></a>
137
+ <span style="mso-comment-continuation:3"><span style="mso-special-character:comment" target="3"></span></span>
138
+ </span>
139
+ </span></a>
140
+ <span style="mso-comment-continuation:3"><span style="mso-comment-continuation:1"><span style="mso-special-character:comment" target="1"></span></span></span>
141
+ </span>
142
+ </span>
143
+ <span style="mso-comment-continuation:3"><span style="mso-comment-continuation:1"><p id="B">B.</p></span></span>
144
+
145
+ <span style="MsoCommentReference" target="2" class="commentLink" from="C" to="C">
146
+ <span lang="EN-GB" style="font-size:9.0pt" xml:lang="EN-GB">
147
+ <a style="mso-comment-reference:SMC_2;mso-comment-date:20170108T0000"><span style="mso-comment-continuation:3"><p id="C">C.</p></span></a>
148
+ <span style="mso-special-character:comment" target="2"></span>
149
+ </span>
150
+ </span>
151
+
152
+ </div>
153
+ <br />
154
+ <div class="Section3" id="">
155
+ <h1 class="IntroTitle">Introduction</h1>
156
+
157
+ </div>
158
+ <p>&#xA0;</p>
159
+ </div>
160
+ <br />
161
+ <div class="WordSection3">
162
+ <p class="zzSTDTitle1"></p>
163
+ <div style="mso-element:comment-list"><div style="mso-element:comment" id="3">
164
+ <span style="mso-comment-author:&quot;ISO&quot;"></span>
165
+
166
+ <p class="MsoCommentText" id="_c54b9549-369f-4f85-b5b2-9db3fd3d4c08"><span style="MsoCommentReference">
167
+ <span lang="EN-GB" style="font-size:9.0pt" xml:lang="EN-GB">
168
+ <span style="mso-special-character:comment"></span>
169
+ </span>
170
+ </span>Second note.</p>
171
+ </div>
172
+ <div style="mso-element:comment" id="1"><span style="mso-comment-author:&quot;ISO&quot;"></span><p class="MsoCommentText" id="_c54b9549-369f-4f85-b5b2-9db3fd3d4c07"><span style="MsoCommentReference"><span lang="EN-GB" style="font-size:9.0pt" xml:lang="EN-GB"><span style="mso-special-character:comment"></span></span></span>A Foreword shall appear in each document. The generic text is shown here. It does not contain requirements, recommendations or permissions.</p>
173
+ <p class="MsoCommentText" id="_f1a8b9da-ca75-458b-96fa-d4af7328975e">For further information on the Foreword, see <b>ISO/IEC Directives, Part 2, 2016, Clause 12.</b></p></div>
174
+ <div style="mso-element:comment" id="2">
175
+ <span style="mso-comment-author:&quot;ISO&quot;"></span>
176
+
177
+ <p class="MsoCommentText" id="_c54b9549-369f-4f85-b5b2-9db3fd3d4c08"><span style="MsoCommentReference">
178
+ <span lang="EN-GB" style="font-size:9.0pt" xml:lang="EN-GB">
179
+ <span style="mso-special-character:comment"></span>
180
+ </span>
181
+ </span>Second note.</p>
182
+ </div></div>
183
+ </div>
184
+ <script type="text/x-mathjax-config">
185
+ MathJax.Hub.Config({
186
+ asciimath2jax: {
187
+ delimiters: [['(#(', ')#)']]
188
+ }
189
+ });
190
+ </script>
191
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=AM_HTMLorMML"></script>
192
+ </body>
193
+ </html>
194
+ OUTPUT
195
+ end
196
+
197
+ it "processes IsoXML reviewer notes (Word)" do
198
+ system "rm -f test.doc"
199
+ IsoDoc::WordConvert.new({wordstylesheet: "spec/assets/word.css", htmlstylesheet: "spec/assets/html.css"}).convert_file(<<~"INPUT", "test", false)
200
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
201
+ <foreword>
202
+ <p id="A">A.</p>
203
+ <p id="B">B.</p>
204
+ <review reviewer="ISO" id="_4f4dff63-23c1-4ecb-8ac6-d3ffba93c711" date="20170101T0000" from="A" to="B"><p id="_c54b9549-369f-4f85-b5b2-9db3fd3d4c07">A Foreword shall appear in each document. The generic text is shown here. It does not contain requirements, recommendations or permissions.</p>
205
+ <p id="_f1a8b9da-ca75-458b-96fa-d4af7328975e">For further information on the Foreword, see <strong>ISO/IEC Directives, Part 2, 2016, Clause 12.</strong></p></review>
206
+ <p id="C">C.</p>
207
+ <review reviewer="ISO" id="_4f4dff63-23c1-4ecb-8ac6-d3ffba93c712" date="20170108T0000" from="C" to="C"><p id="_c54b9549-369f-4f85-b5b2-9db3fd3d4c08">Second note.</p></review>
208
+ </foreword>
209
+ <introduction>
210
+ <review reviewer="ISO" id="_4f4dff63-23c1-4ecb-8ac6-d3ffba93c712" date="20170108T0000" from="A" to="C"><p id="_c54b9549-369f-4f85-b5b2-9db3fd3d4c08">Second note.</p></review>
211
+ </introduction>
212
+ </iso-standard>
213
+ INPUT
214
+ html = File.read("test.doc").sub(/^.*<body/m, "<body").sub(%r{</body>.*$}m, "</body>")
215
+ expect(html).to be_equivalent_to <<~"OUTPUT"
216
+ <body lang="EN-US" link="blue" vlink="#954F72" xml:lang="EN-US">
217
+ <div class="WordSection1">
218
+ <p class="MsoNormal">&#xA0;</p>
219
+ </div>
220
+ <br clear="all" class="section"/>
221
+ <div class="WordSection2">
222
+ <br clear="all" style="mso-special-character:line-break;page-break-before:always"/>
223
+ <div>
224
+ <h1 class="ForewordTitle">Foreword</h1>
225
+ <span style="MsoCommentReference" target="1" class="commentLink" from="A" to="B">
226
+ <span lang="EN-GB" style="font-size:9.0pt" xml:lang="EN-GB">
227
+ <a style="mso-comment-reference:SMC_1;mso-comment-date:20170101T0000"><span style="MsoCommentReference" target="3" class="commentLink" from="A" to="C">
228
+ <span lang="EN-GB" style="font-size:9.0pt" xml:lang="EN-GB">
229
+ <a style="mso-comment-reference:SMC_3;mso-comment-date:20170108T0000"><p class="MsoNormal"><a name="A" id="A"></a>A.</p></a>
230
+ <span style="mso-comment-continuation:3"><span style="mso-special-character:comment" target="3"></span></span>
231
+ </span>
232
+ </span></a>
233
+ <span style="mso-comment-continuation:3"><span style="mso-comment-continuation:1"><span style="mso-special-character:comment" target="1"></span></span></span>
234
+ </span>
235
+ </span>
236
+ <span style="mso-comment-continuation:3"><span style="mso-comment-continuation:1"><p class="MsoNormal"><a name="B" id="B"></a>B.</p></span></span>
237
+
238
+ <span style="MsoCommentReference" target="2" class="commentLink" from="C" to="C">
239
+ <span lang="EN-GB" style="font-size:9.0pt" xml:lang="EN-GB">
240
+ <a style="mso-comment-reference:SMC_2;mso-comment-date:20170108T0000"><span style="mso-comment-continuation:3"><p class="MsoNormal"><a name="C" id="C"></a>C.</p></span></a>
241
+ <span style="mso-special-character:comment" target="2"></span>
242
+ </span>
243
+ </span>
244
+
245
+ </div>
246
+ <br clear="all" style="mso-special-character:line-break;page-break-before:always"/>
247
+ <div class="Section3" id="">
248
+ <h1 class="IntroTitle">Introduction</h1>
249
+
250
+ </div>
251
+ <p class="MsoNormal">&#xA0;</p>
252
+ </div>
253
+ <br clear="all" class="section"/>
254
+ <div class="WordSection3">
255
+ <p class="zzSTDTitle1"></p>
256
+ <div style="mso-element:comment-list"><div style="mso-element:comment"><a name="3" id="3"></a>
257
+ <span style="mso-comment-author:&quot;ISO&quot;"></span>
258
+
259
+ <p class="MsoCommentText"><a name="_c54b9549-369f-4f85-b5b2-9db3fd3d4c08" id="_c54b9549-369f-4f85-b5b2-9db3fd3d4c08"></a><span style="MsoCommentReference">
260
+ <span lang="EN-GB" style="font-size:9.0pt" xml:lang="EN-GB">
261
+ <span style="mso-special-character:comment"></span>
262
+ </span>
263
+ </span>Second note.</p>
264
+ </div>
265
+ <div style="mso-element:comment"><a name="1" id="1"></a><span style="mso-comment-author:&quot;ISO&quot;"></span><p class="MsoCommentText"><a name="_c54b9549-369f-4f85-b5b2-9db3fd3d4c07" id="_c54b9549-369f-4f85-b5b2-9db3fd3d4c07"></a><span style="MsoCommentReference"><span lang="EN-GB" style="font-size:9.0pt" xml:lang="EN-GB"><span style="mso-special-character:comment"></span></span></span>A Foreword shall appear in each document. The generic text is shown here. It does not contain requirements, recommendations or permissions.</p>
266
+ <p class="MsoCommentText"><a name="_f1a8b9da-ca75-458b-96fa-d4af7328975e" id="_f1a8b9da-ca75-458b-96fa-d4af7328975e"></a>For further information on the Foreword, see <b>ISO/IEC Directives, Part 2, 2016, Clause 12.</b></p></div>
267
+ <div style="mso-element:comment"><a name="2" id="2"></a>
268
+ <span style="mso-comment-author:&quot;ISO&quot;"></span>
269
+
270
+ <p class="MsoCommentText"><a name="_c54b9549-369f-4f85-b5b2-9db3fd3d4c08" id="_c54b9549-369f-4f85-b5b2-9db3fd3d4c08"></a><span style="MsoCommentReference">
271
+ <span lang="EN-GB" style="font-size:9.0pt" xml:lang="EN-GB">
272
+ <span style="mso-special-character:comment"></span>
273
+ </span>
274
+ </span>Second note.</p>
275
+ </div></div>
276
+ </div>
277
+ <div style="mso-element:footnote-list"/></body>
278
+ OUTPUT
279
+ end
280
+
281
+
282
+ end
@@ -0,0 +1,662 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe IsoDoc do
4
+ it "processes English" do
5
+ expect(IsoDoc::Convert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
6
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
7
+ <bibdata>
8
+ <language>en</language>
9
+ </bibdata>
10
+ <foreword obligation="informative">
11
+ <title>Foreword</title>
12
+ <p id="A">This is a preamble</p>
13
+ </foreword>
14
+ <introduction id="B" obligation="informative"><title>Introduction</title><subsection id="C" inline-header="false" obligation="informative">
15
+ <title>Introduction Subsection</title>
16
+ </subsection>
17
+ <patent-notice>
18
+ <p>This is patent boilerplate</p>
19
+ </patent-notice>
20
+ </introduction><sections>
21
+ <clause id="D" obligation="normative">
22
+ <title>Scope</title>
23
+ <p id="E">Text</p>
24
+ </clause>
25
+
26
+ <terms id="H" obligation="normative"><title>Terms, Definitions, Symbols and Abbreviated Terms</title><terms id="I" obligation="normative">
27
+ <title>Normal Terms</title>
28
+ <term id="J">
29
+ <preferred>Term2</preferred>
30
+ </term>
31
+ </terms>
32
+ <symbols-abbrevs id="K">
33
+ <dl>
34
+ <dt>Symbol</dt>
35
+ <dd>Definition</dd>
36
+ </dl>
37
+ </symbols-abbrevs>
38
+ </terms>
39
+ <symbols-abbrevs id="L">
40
+ <dl>
41
+ <dt>Symbol</dt>
42
+ <dd>Definition</dd>
43
+ </dl>
44
+ </symbols-abbrevs>
45
+ <clause id="M" inline-header="false" obligation="normative"><title>Clause 4</title><subsection id="N" inline-header="false" obligation="normative">
46
+ <title>Introduction</title>
47
+ </subsection>
48
+ <subsection id="O" inline-header="false" obligation="normative">
49
+ <title>Clause 4.2</title>
50
+ </subsection></clause>
51
+
52
+ </sections><annex id="P" inline-header="false" obligation="normative">
53
+ <title>Annex</title>
54
+ <subsection id="Q" inline-header="false" obligation="normative">
55
+ <title>Annex A.1</title>
56
+ <subsection id="Q1" inline-header="false" obligation="normative">
57
+ <title>Annex A.1a</title>
58
+ </subsection>
59
+ </subsection>
60
+ </annex><references id="R" obligation="informative">
61
+ <title>Normative References</title>
62
+ </references><references id="S" obligation="informative">
63
+ <title>Bibliography</title>
64
+ <references id="T" obligation="informative">
65
+ <title>Bibliography Subsection</title>
66
+ </references>
67
+ </references>
68
+ </iso-standard>
69
+ INPUT
70
+ <html xmlns:epub="http://www.idpf.org/2007/ops">
71
+ <head>
72
+ <title>test</title>
73
+ <body lang="EN-US" link="blue" vlink="#954F72">
74
+ <div class="WordSection1">
75
+ <p>&#160;</p>
76
+ </div>
77
+ <br/>
78
+ <div class="WordSection2">
79
+ <br/>
80
+ <div>
81
+ <h1 class="ForewordTitle">Foreword</h1>
82
+ <p id="A">This is a preamble</p>
83
+ </div>
84
+ <br/>
85
+ <div class="Section3" id="B">
86
+ <h1 class="IntroTitle">0.&#160; Introduction</h1>
87
+ <div id="C">
88
+ <h2>0.1. Introduction Subsection</h2>
89
+ </div>
90
+ <p>This is patent boilerplate</p>
91
+ </div>
92
+ <p>&#160;</p>
93
+ </div>
94
+ <br/>
95
+ <div class="WordSection3">
96
+ <p class="zzSTDTitle1"/>
97
+ <div id="D">
98
+ <h1>1.&#160; Scope</h1>
99
+ <p id="E">Text</p>
100
+ </div>
101
+ <div>
102
+ <h1>2.&#160; Normative References</h1>
103
+ <p>There are no normative references in this document.</p>
104
+ </div>
105
+ <div id="H"><h1>3.&#160; Terms and Definitions</h1><p>For the purposes of this document,
106
+ the following terms and definitions apply.</p>
107
+ <p>ISO and IEC maintain terminological databases for use in
108
+ standardization at the following addresses:</p>
109
+
110
+ <ul>
111
+ <li> <p>ISO Online browsing platform: available at
112
+ <a href="http://www.iso.org/obp">http://www.iso.org/obp</a></p> </li>
113
+ <li> <p>IEC Electropedia: available at
114
+ <a href="http://www.electropedia.org">http://www.electropedia.org</a>
115
+ </p> </li> </ul>
116
+ <div id="I">
117
+ <h2>3.1. Normal Terms</h2>
118
+ <p class="TermNum" id="J">3.1.1</p>
119
+ <p class="Terms">Term2</p>
120
+
121
+ </div><div id="K"><h2>3.2. Symbols and Abbreviated Terms</h2>
122
+ <dl><dt><p>Symbol</p></dt><dd>Definition</dd></dl>
123
+ </div></div>
124
+ <div id="L" class="Symbols">
125
+ <h1>4.&#160; Symbols and Abbreviated Terms</h1>
126
+ <dl>
127
+ <dt>
128
+ <p>Symbol</p>
129
+ </dt>
130
+ <dd>Definition</dd>
131
+ </dl>
132
+ </div>
133
+ <div id="M">
134
+ <h1>5.&#160; Clause 4</h1>
135
+ <div id="N">
136
+ <h2>5.1. Introduction</h2>
137
+ </div>
138
+ <div id="O">
139
+ <h2>5.2. Clause 4.2</h2>
140
+ </div>
141
+ </div>
142
+ <br/>
143
+ <div id="P" class="Section3">
144
+ <h1 class="Annex"><b>Annex A</b><br/>(normative)<br/><br/><b>Annex</b></h1>
145
+ <div id="Q">
146
+ <h2>A.1. Annex A.1</h2>
147
+ <div id="Q1">
148
+ <h3>A.1.1. Annex A.1a</h3>
149
+ </div>
150
+ </div>
151
+ </div>
152
+ <br/>
153
+ <div>
154
+ <h1 class="Section3">Bibliography</h1>
155
+ <div>
156
+ <h2 class="Section3">Bibliography Subsection</h2>
157
+ </div>
158
+ </div>
159
+ </div>
160
+ </body>
161
+ </head>
162
+ </html>
163
+ OUTPUT
164
+ end
165
+
166
+ it "defaults to English" do
167
+ expect(IsoDoc::Convert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
168
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
169
+ <bibdata>
170
+ <language>tlh</language>
171
+ </bibdata>
172
+ <foreword obligation="informative">
173
+ <title>Foreword</title>
174
+ <p id="A">This is a preamble</p>
175
+ </foreword>
176
+ <introduction id="B" obligation="informative"><title>Introduction</title><subsection id="C" inline-header="false" obligation="informative">
177
+ <title>Introduction Subsection</title>
178
+ </subsection>
179
+ <patent-notice>
180
+ <p>This is patent boilerplate</p>
181
+ </patent-notice>
182
+ </introduction><sections>
183
+ <clause id="D" obligation="normative">
184
+ <title>Scope</title>
185
+ <p id="E">Text</p>
186
+ </clause>
187
+
188
+ <terms id="H" obligation="normative"><title>Terms, Definitions, Symbols and Abbreviated Terms</title><terms id="I" obligation="normative">
189
+ <title>Normal Terms</title>
190
+ <term id="J">
191
+ <preferred>Term2</preferred>
192
+ </term>
193
+ </terms>
194
+ <symbols-abbrevs id="K">
195
+ <dl>
196
+ <dt>Symbol</dt>
197
+ <dd>Definition</dd>
198
+ </dl>
199
+ </symbols-abbrevs>
200
+ </terms>
201
+ <symbols-abbrevs id="L">
202
+ <dl>
203
+ <dt>Symbol</dt>
204
+ <dd>Definition</dd>
205
+ </dl>
206
+ </symbols-abbrevs>
207
+ <clause id="M" inline-header="false" obligation="normative"><title>Clause 4</title><subsection id="N" inline-header="false" obligation="normative">
208
+ <title>Introduction</title>
209
+ </subsection>
210
+ <subsection id="O" inline-header="false" obligation="normative">
211
+ <title>Clause 4.2</title>
212
+ </subsection></clause>
213
+
214
+ </sections><annex id="P" inline-header="false" obligation="normative">
215
+ <title>Annex</title>
216
+ <subsection id="Q" inline-header="false" obligation="normative">
217
+ <title>Annex A.1</title>
218
+ <subsection id="Q1" inline-header="false" obligation="normative">
219
+ <title>Annex A.1a</title>
220
+ </subsection>
221
+ </subsection>
222
+ </annex><references id="R" obligation="informative">
223
+ <title>Normative References</title>
224
+ </references><references id="S" obligation="informative">
225
+ <title>Bibliography</title>
226
+ <references id="T" obligation="informative">
227
+ <title>Bibliography Subsection</title>
228
+ </references>
229
+ </references>
230
+ </iso-standard>
231
+ INPUT
232
+ <html xmlns:epub="http://www.idpf.org/2007/ops">
233
+ <head>
234
+ <title>test</title>
235
+ <body lang="EN-US" link="blue" vlink="#954F72">
236
+ <div class="WordSection1">
237
+ <p>&#160;</p>
238
+ </div>
239
+ <br/>
240
+ <div class="WordSection2">
241
+ <br/>
242
+ <div>
243
+ <h1 class="ForewordTitle">Foreword</h1>
244
+ <p id="A">This is a preamble</p>
245
+ </div>
246
+ <br/>
247
+ <div class="Section3" id="B">
248
+ <h1 class="IntroTitle">0.&#160; Introduction</h1>
249
+ <div id="C">
250
+ <h2>0.1. Introduction Subsection</h2>
251
+ </div>
252
+ <p>This is patent boilerplate</p>
253
+ </div>
254
+ <p>&#160;</p>
255
+ </div>
256
+ <br/>
257
+ <div class="WordSection3">
258
+ <p class="zzSTDTitle1"/>
259
+ <div id="D">
260
+ <h1>1.&#160; Scope</h1>
261
+ <p id="E">Text</p>
262
+ </div>
263
+ <div>
264
+ <h1>2.&#160; Normative References</h1>
265
+ <p>There are no normative references in this document.</p>
266
+ </div>
267
+ <div id="H"><h1>3.&#160; Terms and Definitions</h1><p>For the purposes of this document,
268
+ the following terms and definitions apply.</p>
269
+ <p>ISO and IEC maintain terminological databases for use in
270
+ standardization at the following addresses:</p>
271
+
272
+ <ul>
273
+ <li> <p>ISO Online browsing platform: available at
274
+ <a href="http://www.iso.org/obp">http://www.iso.org/obp</a></p> </li>
275
+ <li> <p>IEC Electropedia: available at
276
+ <a href="http://www.electropedia.org">http://www.electropedia.org</a>
277
+ </p> </li> </ul>
278
+ <div id="I">
279
+ <h2>3.1. Normal Terms</h2>
280
+ <p class="TermNum" id="J">3.1.1</p>
281
+ <p class="Terms">Term2</p>
282
+
283
+ </div><div id="K"><h2>3.2. Symbols and Abbreviated Terms</h2>
284
+ <dl><dt><p>Symbol</p></dt><dd>Definition</dd></dl>
285
+ </div></div>
286
+ <div id="L" class="Symbols">
287
+ <h1>4.&#160; Symbols and Abbreviated Terms</h1>
288
+ <dl>
289
+ <dt>
290
+ <p>Symbol</p>
291
+ </dt>
292
+ <dd>Definition</dd>
293
+ </dl>
294
+ </div>
295
+ <div id="M">
296
+ <h1>5.&#160; Clause 4</h1>
297
+ <div id="N">
298
+ <h2>5.1. Introduction</h2>
299
+ </div>
300
+ <div id="O">
301
+ <h2>5.2. Clause 4.2</h2>
302
+ </div>
303
+ </div>
304
+ <br/>
305
+ <div id="P" class="Section3">
306
+ <h1 class="Annex"><b>Annex A</b><br/>(normative)<br/><br/><b>Annex</b></h1>
307
+ <div id="Q">
308
+ <h2>A.1. Annex A.1</h2>
309
+ <div id="Q1">
310
+ <h3>A.1.1. Annex A.1a</h3>
311
+ </div>
312
+ </div>
313
+ </div>
314
+ <br/>
315
+ <div>
316
+ <h1 class="Section3">Bibliography</h1>
317
+ <div>
318
+ <h2 class="Section3">Bibliography Subsection</h2>
319
+ </div>
320
+ </div>
321
+ </div>
322
+ </body>
323
+ </head>
324
+ </html>
325
+ OUTPUT
326
+ end
327
+
328
+ it "processes French" do
329
+ expect(IsoDoc::Convert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
330
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
331
+ <bibdata>
332
+ <language>fr</language>
333
+ </bibdata>
334
+ <foreword obligation="informative">
335
+ <title>Foreword</title>
336
+ <p id="A">This is a preamble</p>
337
+ </foreword>
338
+ <introduction id="B" obligation="informative"><title>Introduction</title><subsection id="C" inline-header="false" obligation="informative">
339
+ <title>Introduction Subsection</title>
340
+ </subsection>
341
+ <patent-notice>
342
+ <p>This is patent boilerplate</p>
343
+ </patent-notice>
344
+ </introduction><sections>
345
+ <clause id="D" obligation="normative">
346
+ <title>Scope</title>
347
+ <p id="E">Text</p>
348
+ </clause>
349
+
350
+ <terms id="H" obligation="normative"><title>Terms, Definitions, Symbols and Abbreviated Terms</title><terms id="I" obligation="normative">
351
+ <title>Normal Terms</title>
352
+ <term id="J">
353
+ <preferred>Term2</preferred>
354
+ </term>
355
+ </terms>
356
+ <symbols-abbrevs id="K">
357
+ <dl>
358
+ <dt>Symbol</dt>
359
+ <dd>Definition</dd>
360
+ </dl>
361
+ </symbols-abbrevs>
362
+ </terms>
363
+ <symbols-abbrevs id="L">
364
+ <dl>
365
+ <dt>Symbol</dt>
366
+ <dd>Definition</dd>
367
+ </dl>
368
+ </symbols-abbrevs>
369
+ <clause id="M" inline-header="false" obligation="normative"><title>Clause 4</title><subsection id="N" inline-header="false" obligation="normative">
370
+ <title>Introduction</title>
371
+ </subsection>
372
+ <subsection id="O" inline-header="false" obligation="normative">
373
+ <title>Clause 4.2</title>
374
+ </subsection></clause>
375
+
376
+ </sections><annex id="P" inline-header="false" obligation="normative">
377
+ <title>Annex</title>
378
+ <subsection id="Q" inline-header="false" obligation="normative">
379
+ <title>Annex A.1</title>
380
+ <subsection id="Q1" inline-header="false" obligation="normative">
381
+ <title>Annex A.1a</title>
382
+ </subsection>
383
+ </subsection>
384
+ </annex><references id="R" obligation="informative">
385
+ <title>Normative References</title>
386
+ </references><references id="S" obligation="informative">
387
+ <title>Bibliography</title>
388
+ <references id="T" obligation="informative">
389
+ <title>Bibliography Subsection</title>
390
+ </references>
391
+ </references>
392
+ </iso-standard>
393
+ INPUT
394
+ <html xmlns:epub="http://www.idpf.org/2007/ops">
395
+ <head>
396
+ <title>test</title>
397
+ <body lang="EN-US" link="blue" vlink="#954F72">
398
+ <div class="WordSection1">
399
+ <p>&#160;</p>
400
+ </div>
401
+ <br/>
402
+ <div class="WordSection2">
403
+ <br/>
404
+ <div>
405
+ <h1 class="ForewordTitle">Avant-propos</h1>
406
+ <p id="A">This is a preamble</p>
407
+ </div>
408
+ <br/>
409
+ <div class="Section3" id="B">
410
+ <h1 class="IntroTitle">0.&#160; Introduction</h1>
411
+ <div id="C">
412
+ <h2>0.1. Introduction Subsection</h2>
413
+ </div>
414
+ <p>This is patent boilerplate</p>
415
+ </div>
416
+ <p>&#160;</p>
417
+ </div>
418
+ <br/>
419
+ <div class="WordSection3">
420
+ <p class="zzSTDTitle1"/>
421
+ <div id="D">
422
+ <h1>1.&#160; Domaine d'application</h1>
423
+ <p id="E">Text</p>
424
+ </div>
425
+ <div>
426
+ <h1>2.&#160; R&#233;f&#233;rences normatives</h1>
427
+ <p>Le pr&#233;sent document ne contient aucune r&#233;f&#233;rence normative.</p>
428
+ </div>
429
+ <div id="H"><h1>3.&#160; Terms et d&#233;finitions</h1><p>Pour les besoins du pr&#233;sent document, les termes et d&#233;finitions suivants s'appliquent.</p>
430
+ <p>L'ISO et l'IEC tiennent &#224; jour des bases de donn&#233;es terminologiques
431
+ destin&#233;es &#224; &#234;tre utilis&#233;es en normalisation, consultables aux adresses
432
+ suivantes:</p>
433
+ <ul>
434
+ <li> <p>ISO Online browsing platform: disponible &#224; l'adresse
435
+ <a href="http://www.iso.org/obp">http://www.iso.org/obp</a></p> </li>
436
+ <li> <p>IEC Electropedia: disponible &#224; l'adresse
437
+ <a href="http://www.electropedia.org">http://www.electropedia.org</a>
438
+ </p> </li> </ul>
439
+ <div id="I">
440
+ <h2>3.1. Normal Terms</h2>
441
+ <p class="TermNum" id="J">3.1.1</p>
442
+ <p class="Terms">Term2</p>
443
+
444
+ </div><div id="K"><h2>3.2. Symbols and Abbreviated Terms</h2>
445
+ <dl><dt><p>Symbol</p></dt><dd>Definition</dd></dl>
446
+ </div></div>
447
+ <div id="L" class="Symbols">
448
+ <h1>4.&#160; Symboles et termes abr&#233;g&#233;s</h1>
449
+ <dl>
450
+ <dt>
451
+ <p>Symbol</p>
452
+ </dt>
453
+ <dd>Definition</dd>
454
+ </dl>
455
+ </div>
456
+ <div id="M">
457
+ <h1>5.&#160; Clause 4</h1>
458
+ <div id="N">
459
+ <h2>5.1. Introduction</h2>
460
+ </div>
461
+ <div id="O">
462
+ <h2>5.2. Clause 4.2</h2>
463
+ </div>
464
+ </div>
465
+ <br/>
466
+ <div id="P" class="Section3">
467
+ <h1 class="Annex"><b>Annexe A</b><br/>(normative)<br/><br/><b>Annex</b></h1>
468
+ <div id="Q">
469
+ <h2>A.1. Annex A.1</h2>
470
+ <div id="Q1">
471
+ <h3>A.1.1. Annex A.1a</h3>
472
+ </div>
473
+ </div>
474
+ </div>
475
+ <br/>
476
+ <div>
477
+ <h1 class="Section3">then Bibliographie</h1>
478
+ <div>
479
+ <h2 class="Section3">Bibliography Subsection</h2>
480
+ </div>
481
+ </div>
482
+ </div>
483
+ </body>
484
+ </head>
485
+ </html>
486
+ OUTPUT
487
+ end
488
+
489
+ it "processes Simplified Chinese" do
490
+ expect(IsoDoc::Convert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
491
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
492
+ <bibdata>
493
+ <language>zh</language>
494
+ <script>Hans</script>
495
+ </bibdata>
496
+ <foreword obligation="informative">
497
+ <title>Foreword</title>
498
+ <p id="A">This is a preamble</p>
499
+ </foreword>
500
+ <introduction id="B" obligation="informative"><title>Introduction</title><subsection id="C" inline-header="false" obligation="informative">
501
+ <title>Introduction Subsection</title>
502
+ </subsection>
503
+ <patent-notice>
504
+ <p>This is patent boilerplate</p>
505
+ </patent-notice>
506
+ </introduction><sections>
507
+ <clause id="D" obligation="normative">
508
+ <title>Scope</title>
509
+ <p id="E"><eref type="inline" bibitemid="ISO712"><locality type="table"><referenceFrom>1</referenceFrom><referenceTo>1</referenceTo></locality></eref></p>
510
+ </clause>
511
+
512
+ <terms id="H" obligation="normative"><title>Terms, Definitions, Symbols and Abbreviated Terms</title><terms id="I" obligation="normative">
513
+ <title>Normal Terms</title>
514
+ <term id="J">
515
+ <preferred>Term2</preferred>
516
+ </term>
517
+ </terms>
518
+ <symbols-abbrevs id="K">
519
+ <dl>
520
+ <dt>Symbol</dt>
521
+ <dd>Definition</dd>
522
+ </dl>
523
+ </symbols-abbrevs>
524
+ </terms>
525
+ <symbols-abbrevs id="L">
526
+ <dl>
527
+ <dt>Symbol</dt>
528
+ <dd>Definition</dd>
529
+ </dl>
530
+ </symbols-abbrevs>
531
+ <clause id="M" inline-header="false" obligation="normative"><title>Clause 4</title><subsection id="N" inline-header="false" obligation="normative">
532
+ <title>Introduction</title>
533
+ </subsection>
534
+ <subsection id="O" inline-header="false" obligation="normative">
535
+ <title>Clause 4.2</title>
536
+ </subsection></clause>
537
+
538
+ </sections><annex id="P" inline-header="false" obligation="normative">
539
+ <title>Annex</title>
540
+ <subsection id="Q" inline-header="false" obligation="normative">
541
+ <title>Annex A.1</title>
542
+ <subsection id="Q1" inline-header="false" obligation="normative">
543
+ <title>Annex A.1a</title>
544
+ </subsection>
545
+ </subsection>
546
+ </annex><references id="R" obligation="informative">
547
+ <title>Normative References</title>
548
+ <bibitem id="ISO712" type="standard">
549
+ <title format="text/plain">Cereals and cereal products</title>
550
+ <docidentifier>ISO 712</docidentifier>
551
+ <contributor>
552
+ <role type="publisher"/>
553
+ <organization>
554
+ <abbreviation>ISO</abbreviation>
555
+ </organization>
556
+ </contributor>
557
+ </bibitem>
558
+ </references><references id="S" obligation="informative">
559
+ <title>Bibliography</title>
560
+ <references id="T" obligation="informative">
561
+ <title>Bibliography Subsection</title>
562
+ </references>
563
+ </references>
564
+ </iso-standard>
565
+ INPUT
566
+ <html xmlns:epub="http://www.idpf.org/2007/ops">
567
+ <head>
568
+ <title>test</title>
569
+ <body lang="EN-US" link="blue" vlink="#954F72">
570
+ <div class="WordSection1">
571
+ <p>&#160;</p>
572
+ </div>
573
+ <br/>
574
+ <div class="WordSection2">
575
+ <br/>
576
+ <div>
577
+ <h1 class="ForewordTitle">&#21069;&#35328;</h1>
578
+ <p id="A">This is a preamble</p>
579
+ </div>
580
+ <br/>
581
+ <div class="Section3" id="B">
582
+ <h1 class="IntroTitle">0.&#160; &#24341;&#35328;</h1>
583
+ <div id="C">
584
+ <h2>0.1. Introduction Subsection</h2>
585
+ </div>
586
+ <p>This is patent boilerplate</p>
587
+ </div>
588
+ <p>&#160;</p>
589
+ </div>
590
+ <br/>
591
+ <div class="WordSection3">
592
+ <p class="zzSTDTitle1"/>
593
+ <div id="D">
594
+ <h1>1.&#160; &#33539;&#22260;</h1>
595
+ <p id="E">
596
+ <a href="#ISO712">ISO 712&#12289;&#31532;1&#8211;<referenceto>1</referenceto>&#34920;</a>
597
+ </p>
598
+ </div>
599
+ <div>
600
+ <h1>2.&#160; &#35268;&#33539;&#24615;&#24341;&#29992;&#25991;&#20214;</h1>
601
+ <p>&#19979;&#21015;&#25991;&#20214;&#23545;&#20110;&#26412;&#25991;&#20214;&#30340;&#24212;&#29992;&#26159;&#24517;&#19981;&#21487;&#23569;&#30340;&#12290; &#20961;&#26159;&#27880;&#26085;&#26399;&#30340;&#24341;&#29992;&#25991;&#20214;&#65292;&#20165;&#27880;&#26085;&#26399;&#30340;&#29256;&#26412;&#36866;&#29992;&#20110;&#26412;&#25991;&#20214;&#12290; &#20961;&#26159;&#19981;&#27880;&#26085;&#26399;&#30340;&#24341;&#29992;&#25991;&#20214;&#65292;&#20854;&#26368;&#26032;&#29256;&#26412;&#65288;&#21253;&#25324;&#25152;&#26377;&#30340;&#20462;&#25913;&#21333;&#65289;&#36866;&#29992;&#20110;&#26412;&#25991;&#20214;&#12290;</p>
602
+ <p id="ISO712">ISO 712, <i> Cereals and cereal products</i></p>
603
+ </div>
604
+ <div id="H"><h1>3.&#160; &#26415;&#35821;&#21644;&#23450;&#20041;</h1><p>&#19979;&#21015;&#26415;&#35821;&#21644;&#23450;&#20041;&#36866;&#29992;&#20110;&#26412;&#25991;&#20214;&#12290;</p>
605
+ <p>ISO&#21644;IEC&#29992;&#20110;&#26631;&#20934;&#21270;&#30340;&#26415;&#35821;&#25968;&#25454;&#24211;&#22320;&#22336;&#22914;&#19979;&#65306;</p>
606
+ <ul>
607
+ <li> <p>ISO&#22312;&#32447;&#27983;&#35272;&#24179;&#21488;:
608
+ &#20301;&#20110;<a href="http://www.iso.org/obp">http://www.iso.org/obp</a></p> </li>
609
+ <li> <p>IEC Electropedia:
610
+ &#20301;&#20110;<a href="http://www.electropedia.org">http://www.electropedia.org</a>
611
+ </p> </li> </ul>
612
+ <div id="I">
613
+ <h2>3.1. Normal Terms</h2>
614
+ <p class="TermNum" id="J">3.1.1</p>
615
+ <p class="Terms">Term2</p>
616
+
617
+ </div><div id="K"><h2>3.2. Symbols and Abbreviated Terms</h2>
618
+ <dl><dt><p>Symbol</p></dt><dd>Definition</dd></dl>
619
+ </div></div>
620
+ <div id="L" class="Symbols">
621
+ <h1>4.&#160; &#31526;&#21495;&#12289;&#20195;&#21495;&#21644;&#32553;&#30053;&#35821;</h1>
622
+ <dl>
623
+ <dt>
624
+ <p>Symbol</p>
625
+ </dt>
626
+ <dd>Definition</dd>
627
+ </dl>
628
+ </div>
629
+ <div id="M">
630
+ <h1>5.&#160; Clause 4</h1>
631
+ <div id="N">
632
+ <h2>5.1. Introduction</h2>
633
+ </div>
634
+ <div id="O">
635
+ <h2>5.2. Clause 4.2</h2>
636
+ </div>
637
+ </div>
638
+ <br/>
639
+ <div id="P" class="Section3">
640
+ <h1 class="Annex">&#38468;&#24405;A<br/>&#65288;&#35268;&#33539;&#24615;&#38468;&#24405;&#65289;<br/><br/><b>Annex</b></h1>
641
+ <div id="Q">
642
+ <h2>A.1. Annex A.1</h2>
643
+ <div id="Q1">
644
+ <h3>A.1.1. Annex A.1a</h3>
645
+ </div>
646
+ </div>
647
+ </div>
648
+ <br/>
649
+ <div>
650
+ <h1 class="Section3">&#21442;&#32771;&#25991;&#29486;</h1>
651
+ <div>
652
+ <h2 class="Section3">Bibliography Subsection</h2>
653
+ </div>
654
+ </div>
655
+ </div>
656
+ </body>
657
+ </head>
658
+ </html>
659
+ OUTPUT
660
+ end
661
+
662
+ end