isodoc 1.0.17 → 1.0.18

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 10a62178041dae35a25c840c632a5b2bc6dc60e16c30db960e6d6781fbb3e7a6
4
- data.tar.gz: 201fe7bf7a28f28e76115f8085f4bbce97e10d84395c46064a7e592776146bfa
3
+ metadata.gz: 9fa741392b5d89abbcf094f509b027de84b74d1bc543d8395a587b7a556db543
4
+ data.tar.gz: 4e9b4445b54e495a5cbfbecfa43ccde77b28923b5a569dc8ccbe464f672b05c0
5
5
  SHA512:
6
- metadata.gz: c5cd5437cdd28778c167fef661f99dbeb2f290ab767046c0e0ffb944c83e8aebde8e5e96920dd2f09b6240d9f727478292127ad9aac3c44b76c7a81eba0fee37
7
- data.tar.gz: 74105a704d901c656aa19b06718803bac9bd76bf5209277c96dfabbe7fed23ac561b0d938295a32f224b1ec25056cd3b6c88e568df4f98ed15739145f04173bd
6
+ metadata.gz: cb34c6d612f0a0b814df38a0851831fdfbaece00e05532af45445db8e07851aefff9e4cea8af3d7ebb0e48ae6d6a809b6a5c5f03571982e21099eb993ee3a7c1
7
+ data.tar.gz: 21b9ca3ed5740d82f8f41a26897ed76e5a7b6c6603c79c71db5467b2e9220315cd876b12b78709b9a2415357aa861399cd78000e4050d15fe5c736bd6d1de0a0
@@ -9,14 +9,13 @@ module IsoDoc::Function
9
9
  end
10
10
 
11
11
  def inline_header_title(out, node, c1)
12
- title = c1&.content || ""
13
12
  out.span **{ class: "zzMoveToFollowing" } do |s|
14
13
  s.b do |b|
15
14
  if anchor(node['id'], :label, false) && !@suppressheadingnumbers
16
15
  b << "#{anchor(node['id'], :label)}#{clausedelim}"
17
16
  clausedelimspace(out)
18
17
  end
19
- b << "#{title} "
18
+ c1&.children&.each { |c2| parse(c2, b) }
20
19
  end
21
20
  end
22
21
  end
@@ -50,7 +49,8 @@ module IsoDoc::Function
50
49
  h1 << "#{num}#{clausedelim}"
51
50
  clausedelimspace(h1)
52
51
  end
53
- h1 << title
52
+ title.is_a?(String) ? h1 << title :
53
+ title&.children&.each { |c2| parse(c2, h1) }
54
54
  end
55
55
  div.parent.at(".//h1")
56
56
  end
@@ -63,7 +63,7 @@ module IsoDoc::Function
63
63
  isoxml.xpath(ns(self.class::MIDDLE_CLAUSE)).each do |c|
64
64
  out.div **attr_code(id: c["id"]) do |s|
65
65
  clause_name(anchor(c['id'], :label),
66
- c&.at(ns("./title"))&.content, s, nil)
66
+ c&.at(ns("./title")), s, nil)
67
67
  c.elements.reject { |c1| c1.name == "title" }.each do |c1|
68
68
  parse(c1, s)
69
69
  end
@@ -136,7 +136,7 @@ module IsoDoc::Function
136
136
  f = isoxml.at(ns("//sections/definitions")) or return num
137
137
  out.div **attr_code(id: f["id"], class: "Symbols") do |div|
138
138
  num = num + 1
139
- clause_name(num, f&.at(ns("./title"))&.content || @symbols_lbl, div, nil)
139
+ clause_name(num, f&.at(ns("./title")) || @symbols_lbl, div, nil)
140
140
  f.elements.each do |e|
141
141
  parse(e, div) unless e.name == "title"
142
142
  end
@@ -172,6 +172,18 @@ module IsoDoc::Function
172
172
  end
173
173
  end
174
174
 
175
+ def acknowledgements(isoxml, out)
176
+ f = isoxml.at(ns("//acknowledgements")) || return
177
+ title_attr = { class: "IntroTitle" }
178
+ page_break(out)
179
+ out.div **{ class: "Section3", id: f["id"] } do |div|
180
+ clause_name(nil, f&.at(ns("./title")), div, title_attr)
181
+ f.elements.each do |e|
182
+ parse(e, div) unless e.name == "title"
183
+ end
184
+ end
185
+ end
186
+
175
187
  def abstract(isoxml, out)
176
188
  f = isoxml.at(ns("//preface/abstract")) || return
177
189
  page_break(out)
@@ -181,6 +193,19 @@ module IsoDoc::Function
181
193
  end
182
194
  end
183
195
 
196
+ def preface(isoxml, out)
197
+ title_attr = { class: "IntroTitle" }
198
+ isoxml.xpath(ns("//preface/clause")).each do |f|
199
+ page_break(out)
200
+ out.div **{ class: "Section3", id: f["id"] } do |div|
201
+ clause_name(nil, f&.at(ns("./title")), div, title_attr)
202
+ f.elements.each do |e|
203
+ parse(e, div) unless e.name == "title"
204
+ end
205
+ end
206
+ end
207
+ end
208
+
184
209
  def copyright_parse(node, out)
185
210
  out.div **{class: "boilerplate-copyright"} do |div|
186
211
  node.children.each { |n| parse(n, div) }
@@ -83,6 +83,7 @@ module IsoDoc::Function
83
83
  abstract docxml, div3
84
84
  foreword docxml, div3
85
85
  introduction docxml, div3
86
+ acknowledgements docxml, div3
86
87
  middle docxml, div3
87
88
  footnotes div3
88
89
  comments div3
@@ -64,6 +64,7 @@ module IsoDoc::Function
64
64
 
65
65
  CLAUSE_ANCESTOR =
66
66
  ".//ancestor::*[local-name() = 'annex' or "\
67
+ "local-name() = 'acknowledgements' or "\
67
68
  "local-name() = 'appendix' or local-name() = 'foreword' or "\
68
69
  "local-name() = 'introduction' or local-name() = 'terms' or "\
69
70
  "local-name() = 'clause' or local-name() = 'references']/@id".freeze
@@ -77,6 +78,7 @@ module IsoDoc::Function
77
78
  ".//ancestor::*[local-name() = 'annex' or "\
78
79
  "local-name() = 'foreword' or local-name() = 'appendix' or "\
79
80
  "local-name() = 'introduction' or local-name() = 'terms' or "\
81
+ "local-name() = 'acknowledgements' or "\
80
82
  "local-name() = 'clause' or local-name() = 'references' or "\
81
83
  "local-name() = 'figure' or local-name() = 'formula' or "\
82
84
  "local-name() = 'table' or local-name() = 'example']/@id".freeze
@@ -38,7 +38,8 @@ module IsoDoc::Function
38
38
  end
39
39
 
40
40
  SECTIONS_XPATH =
41
- "//foreword | //introduction | //sections/terms | //annex | "\
41
+ "//foreword | //introduction | //acknowledgements | //preface/clause | "\
42
+ "//sections/terms | //annex | "\
42
43
  "//sections/clause | //sections/definitions | "\
43
44
  "//bibliography/references | //bibliography/clause".freeze
44
45
 
@@ -4,8 +4,11 @@ module IsoDoc::Function
4
4
  docxml.xpath(ns("//annex")).each_with_index do |c, i|
5
5
  annex_names(c, (65 + i).chr.to_s)
6
6
  end
7
- docxml.xpath(ns("//bibliography/clause[not(xmlns:title = 'Normative References' or xmlns:title = 'Normative references')] |"\
8
- "//bibliography/references[not(xmlns:title = 'Normative References' or xmlns:title = 'Normative references')]")).each do |b|
7
+ docxml.xpath(
8
+ ns("//bibliography/clause[not(xmlns:title = 'Normative References' or "\
9
+ "xmlns:title = 'Normative references')] |"\
10
+ "//bibliography/references[not(xmlns:title = 'Normative References'"\
11
+ " or xmlns:title = 'Normative references')]")).each do |b|
9
12
  preface_names(b)
10
13
  end
11
14
  docxml.xpath(ns("//bibitem[not(ancestor::bibitem)]")).each do |ref|
@@ -17,11 +20,20 @@ module IsoDoc::Function
17
20
  preface_names(d.at(ns("//preface/abstract")))
18
21
  preface_names(d.at(ns("//foreword")))
19
22
  preface_names(d.at(ns("//introduction")))
20
- sequential_asset_names(d.xpath(ns("//preface/abstract | //foreword | //introduction")))
23
+ d.xpath(ns("//preface/clause")).each do |c|
24
+ preface_names(c)
25
+ end
26
+ preface_names(d.at(ns("//acknowledgements")))
27
+ # potentially overridden in middle_section_asset_names()
28
+ sequential_asset_names(
29
+ d.xpath(ns("//preface/abstract | //foreword | //introduction | "\
30
+ "//preface/clause | //acknowledgements")))
21
31
  n = section_names(d.at(ns("//clause[title = 'Scope']")), 0, 1)
22
32
  n = section_names(d.at(ns(
23
- "//bibliography/clause[title = 'Normative References' or title = 'Normative references'] |"\
24
- "//bibliography/references[title = 'Normative References' or title = 'Normative references']")), n, 1)
33
+ "//bibliography/clause[title = 'Normative References' or "\
34
+ "title = 'Normative references'] |"\
35
+ "//bibliography/references[title = 'Normative References' or "\
36
+ "title = 'Normative references']")), n, 1)
25
37
  n = section_names(d.at(ns("//sections/terms | "\
26
38
  "//sections/clause[descendant::terms]")), n, 1)
27
39
  n = section_names(d.at(ns("//sections/definitions")), n, 1)
@@ -36,15 +48,18 @@ module IsoDoc::Function
36
48
  ret
37
49
  end
38
50
 
39
- SUBCLAUSES = "./clause | ./references | ./term | ./terms | ./definitions".freeze
51
+ SUBCLAUSES =
52
+ "./clause | ./references | ./term | ./terms | ./definitions".freeze
40
53
 
41
54
  # in StanDoc, prefaces have no numbering; they are referenced only by title
42
55
  def preface_names(clause)
43
56
  return if clause.nil?
44
57
  @anchors[clause["id"]] =
45
- { label: nil, level: 1, xref: preface_clause_name(clause), type: "clause" }
58
+ { label: nil, level: 1, xref: preface_clause_name(clause),
59
+ type: "clause" }
46
60
  clause.xpath(ns(SUBCLAUSES)).each_with_index do |c, i|
47
- preface_names1(c, c.at(ns("./title"))&.text, "#{preface_clause_name(clause)}, #{i+1}", 2)
61
+ preface_names1(c, c.at(ns("./title"))&.text,
62
+ "#{preface_clause_name(clause)}, #{i+1}", 2)
48
63
  end
49
64
  end
50
65
 
@@ -54,15 +69,17 @@ module IsoDoc::Function
54
69
  { label: nil, level: level, xref: label, type: "clause" }
55
70
  clause.xpath(ns(SUBCLAUSES)).
56
71
  each_with_index do |c, i|
57
- preface_names1(c, c.at(ns("./title"))&.text, "#{label} #{i+1}", level + 1)
72
+ preface_names1(c, c.at(ns("./title"))&.text, "#{label} #{i+1}",
73
+ level + 1)
58
74
  end
59
75
  end
60
76
 
61
77
  def middle_section_asset_names(d)
62
78
  middle_sections = "//clause[title = 'Scope'] | "\
63
- "//foreword | //introduction | "\
64
- "//references[title = 'Normative References' or title = 'Normative references'] | "\
65
- "//sections/terms | "\
79
+ "//references[title = 'Normative References' or title = "\
80
+ "'Normative references'] | "\
81
+ "//sections/terms | //preface/abstract | //foreword | "\
82
+ "//introduction | //preface/clause | //acknowledgements "\
66
83
  "//sections/definitions | //clause[parent::sections]"
67
84
  sequential_asset_names(d.xpath(ns(middle_sections)))
68
85
  end
@@ -78,7 +95,8 @@ module IsoDoc::Function
78
95
  return num if clause.nil?
79
96
  num = num + 1
80
97
  @anchors[clause["id"]] =
81
- { label: num.to_s, xref: l10n("#{@clause_lbl} #{num}"), level: lvl, type: "clause" }
98
+ { label: num.to_s, xref: l10n("#{@clause_lbl} #{num}"), level: lvl,
99
+ type: "clause" }
82
100
  clause.xpath(ns(SUBCLAUSES)).
83
101
  each_with_index do |c, i|
84
102
  section_names1(c, "#{num}.#{i + 1}", lvl + 1)
@@ -88,7 +106,8 @@ module IsoDoc::Function
88
106
 
89
107
  def section_names1(clause, num, level)
90
108
  @anchors[clause["id"]] =
91
- { label: num, level: level, xref: l10n("#{@clause_lbl} #{num}"), type: "clause" }
109
+ { label: num, level: level, xref: l10n("#{@clause_lbl} #{num}"),
110
+ type: "clause" }
92
111
  clause.xpath(ns(SUBCLAUSES)).
93
112
  each_with_index do |c, i|
94
113
  section_names1(c, "#{num}.#{i + 1}", level + 1)
@@ -102,7 +121,8 @@ module IsoDoc::Function
102
121
  end
103
122
 
104
123
  def annex_names(clause, num)
105
- @anchors[clause["id"]] = { label: annex_name_lbl(clause, num), type: "clause",
124
+ @anchors[clause["id"]] = { label: annex_name_lbl(clause, num),
125
+ type: "clause",
106
126
  xref: "#{@annex_lbl} #{num}", level: 1 }
107
127
  clause.xpath(ns(SUBCLAUSES)).each_with_index do |c, i|
108
128
  annex_names1(c, "#{num}.#{i + 1}", 2)
@@ -23,6 +23,8 @@ module IsoDoc::HtmlFunction
23
23
  abstract docxml, div3
24
24
  foreword docxml, div3
25
25
  introduction docxml, div3
26
+ preface docxml, div3
27
+ acknowledgements docxml, div3
26
28
  middle docxml, div3
27
29
  footnotes div3
28
30
  comments div3
@@ -1,3 +1,3 @@
1
1
  module IsoDoc
2
- VERSION = "1.0.17".freeze
2
+ VERSION = "1.0.18".freeze
3
3
  end
@@ -31,6 +31,8 @@ module IsoDoc::WordFunction
31
31
  abstract docxml, div2
32
32
  foreword docxml, div2
33
33
  introduction docxml, div2
34
+ preface docxml, div2
35
+ acknowledgements docxml, div2
34
36
  div2.p { |p| p << "&nbsp;" } # placeholder
35
37
  end
36
38
  section_break(body)
@@ -58,6 +60,17 @@ module IsoDoc::WordFunction
58
60
  classtype
59
61
  end
60
62
 
63
+ def para_parse(node, out)
64
+ out.p **attr_code(para_attrs(node)) do |p|
65
+ unless @termdomain.empty?
66
+ p << "&lt;#{@termdomain}&gt; "
67
+ @termdomain = ""
68
+ end
69
+ node.children.each { |n| parse(n, p) unless n.name == "note" }
70
+ end
71
+ node.xpath(ns("./note")).each { |n| parse(n, out) }
72
+ end
73
+
61
74
  def section_break(body)
62
75
  body.p do |p|
63
76
  p.br **{ clear: "all", class: "section" }
@@ -222,6 +222,97 @@ INPUT
222
222
  OUTPUT
223
223
  end
224
224
 
225
+ it "processes paragraphs containing notes" do
226
+ expect(xmlpp(strip_guid(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
227
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
228
+ <preface><foreword>
229
+ <p id="A">ABC <note id="B"><p id="C">XYZ</p></note>
230
+ <note id="B1"><p id="C1">XYZ1</p></note></p>
231
+ </foreword></preface>
232
+ </iso-standard>
233
+ INPUT
234
+ #{HTML_HDR}
235
+ <br/>
236
+ <div>
237
+ <h1 class='ForewordTitle'>Foreword</h1>
238
+ <p id='A'>
239
+ ABC
240
+ <div id='B' class='Note'>
241
+ <p>
242
+ <span class='note_label'>NOTE 1</span>
243
+ &#160; XYZ
244
+ </p>
245
+ </div>
246
+ <div id='B1' class='Note'>
247
+ <p>
248
+ <span class='note_label'>NOTE 2</span>
249
+ &#160; XYZ1
250
+ </p>
251
+ </div>
252
+ </p>
253
+ </div>
254
+ <p class='zzSTDTitle1'/>
255
+ </div>
256
+ </body>
257
+ </html>
258
+ OUTPUT
259
+ end
260
+
261
+ it "processes paragraphs containing notes (Word)" do
262
+ expect(xmlpp(strip_guid(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
263
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
264
+ <preface><foreword>
265
+ <p id="A">ABC <note id="B"><p id="C">XYZ</p></note>
266
+ <note id="B1"><p id="C1">XYZ1</p></note></p>
267
+ </foreword></preface>
268
+ </iso-standard>
269
+ INPUT
270
+ <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en">
271
+ <head>
272
+ <style/>
273
+ </head>
274
+ <body lang='EN-US' link='blue' vlink='#954F72'>
275
+ <div class='WordSection1'>
276
+ <p>&#160;</p>
277
+ </div>
278
+ <p>
279
+ <br clear='all' class='section'/>
280
+ </p>
281
+ <div class='WordSection2'>
282
+ <p>
283
+ <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
284
+ </p>
285
+ <div>
286
+ <h1 class='ForewordTitle'>Foreword</h1>
287
+ <p id='A'>ABC </p>
288
+ <div id='B' class='Note'>
289
+ <p class='Note'>
290
+ <span class='note_label'>NOTE 1</span>
291
+ <span style='mso-tab-count:1'>&#160; </span>
292
+ XYZ
293
+ </p>
294
+ </div>
295
+ <div id='B1' class='Note'>
296
+ <p class='Note'>
297
+ <span class='note_label'>NOTE 2</span>
298
+ <span style='mso-tab-count:1'>&#160; </span>
299
+ XYZ1
300
+ </p>
301
+ </div>
302
+ </div>
303
+ <p>&#160;</p>
304
+ </div>
305
+ <p>
306
+ <br clear='all' class='section'/>
307
+ </p>
308
+ <div class='WordSection3'>
309
+ <p class='zzSTDTitle1'/>
310
+ </div>
311
+ </body>
312
+ </html>
313
+ OUTPUT
314
+ end
315
+
225
316
  it "processes figures" do
226
317
  expect(xmlpp(strip_guid(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
227
318
  <iso-standard xmlns="http://riboseinc.com/isoxml">
@@ -63,7 +63,13 @@ RSpec.describe IsoDoc do
63
63
  <introduction id="B" obligation="informative"><title>Introduction</title><clause id="C" inline-header="false" obligation="informative">
64
64
  <title>Introduction Subsection</title>
65
65
  </clause>
66
- </introduction></preface><sections>
66
+ </introduction>
67
+ <clause id="B1"><title>Dedication</title></clause>
68
+ <clause id="B2"><title>Note to reader</title></clause>
69
+ <acknowledgements obligation="informative">
70
+ <title>Acknowledgements</title>
71
+ </acknowledgements>
72
+ </preface><sections>
67
73
  <clause id="D" obligation="normative">
68
74
  <title>Scope</title>
69
75
  <p id="E">Text</p>
@@ -159,6 +165,18 @@ RSpec.describe IsoDoc do
159
165
  <h2>Introduction Subsection</h2>
160
166
  </div>
161
167
  </div>
168
+ <br/>
169
+ <div class='Section3' id='B1'>
170
+ <h1 class='IntroTitle'>Dedication</h1>
171
+ </div>
172
+ <br/>
173
+ <div class='Section3' id='B2'>
174
+ <h1 class='IntroTitle'>Note to reader</h1>
175
+ </div>
176
+ <br/>
177
+ <div class='Section3' id=''>
178
+ <h1 class='IntroTitle'>Acknowledgements</h1>
179
+ </div>
162
180
  <p class="zzSTDTitle1"/>
163
181
  <div id="D">
164
182
  <h1>1.&#160; Scope</h1>
@@ -258,7 +276,13 @@ OUTPUT
258
276
  <introduction id="B" obligation="informative"><title>Introduction</title><clause id="C" inline-header="false" obligation="informative">
259
277
  <title>Introduction Subsection</title>
260
278
  </clause>
261
- </introduction></preface><sections>
279
+ </introduction>
280
+ <clause id="B1"><title>Dedication</title></clause>
281
+ <clause id="B2"><title>Note to reader</title></clause>
282
+ <acknowledgements obligation="informative">
283
+ <title>Acknowledgements</title>
284
+ </acknowledgements>
285
+ </preface><sections>
262
286
  <clause id="D" obligation="normative">
263
287
  <title>Scope</title>
264
288
  <p id="E">Text</p>
@@ -358,6 +382,24 @@ OUTPUT
358
382
  <h2>Introduction Subsection</h2>
359
383
  </div>
360
384
  </div>
385
+ <p>
386
+ <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
387
+ </p>
388
+ <div class='Section3' id='B1'>
389
+ <h1 class='IntroTitle'>Dedication</h1>
390
+ </div>
391
+ <p>
392
+ <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
393
+ </p>
394
+ <div class='Section3' id='B2'>
395
+ <h1 class='IntroTitle'>Note to reader</h1>
396
+ </div>
397
+ <p>
398
+ <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
399
+ </p>
400
+ <div class='Section3' id=''>
401
+ <h1 class='IntroTitle'>Acknowledgements</h1>
402
+ </div>
361
403
  <p>&#160;</p>
362
404
  </div>
363
405
  <p><br clear="all" class="section"/></p>
@@ -425,6 +467,295 @@ OUTPUT
425
467
  OUTPUT
426
468
  end
427
469
 
470
+ it "processes footnotes in section names" do
471
+ expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true).gsub(%r{<aside .*</aside>}m, ""))).to be_equivalent_to xmlpp(<<~"OUTPUT")
472
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
473
+ <boilerplate>
474
+ <copyright-statement>
475
+ <clause>
476
+ <title>Copyright<fn reference="1"><p>A</p></fn></title>
477
+ </clause>
478
+ </copyright-statement>
479
+ <license-statement>
480
+ <clause>
481
+ <title>License<fn reference="2"><p>A</p></fn></title>
482
+ </clause>
483
+ </license-statement>
484
+ <legal-statement>
485
+ <clause>
486
+ <title>Legal<fn reference="3"><p>A</p></fn></title>
487
+ </clause>
488
+ </legal-statement>
489
+ <feedback-statement>
490
+ <clause>
491
+ <title>Feedback<fn reference="4"><p>A</p></fn></title>
492
+ </clause>
493
+ </feedback-statement>
494
+ </boilerplate>
495
+ <preface>
496
+ <abstract obligation="informative">
497
+ <title>Foreword<fn reference="5"><p>A</p></fn></title>
498
+ </abstract>
499
+ <foreword obligation="informative">
500
+ <title>Foreword<fn reference="6"><p>A</p></fn></title>
501
+ <p id="A">This is a preamble</p>
502
+ </foreword>
503
+ <introduction id="B" obligation="informative">
504
+ <title>Introduction<fn reference="7"><p>A</p></fn></title><clause id="C" inline-header="false" obligation="informative">
505
+ <title>Introduction Subsection<fn reference="8"><p>A</p></fn></title>
506
+ </clause>
507
+ </introduction></preface><sections>
508
+ <clause id="D" obligation="normative">
509
+ <title>Scope<fn reference="9"><p>A</p></fn></title>
510
+ <p id="E">Text</p>
511
+ </clause>
512
+
513
+ <clause id="H" obligation="normative">
514
+ <title>Terms, Definitions, Symbols and Abbreviated Terms<fn reference="10"><p>A</p></fn></title><terms id="I" obligation="normative">
515
+ <title>Normal Terms<fn reference="11"><p>A</p></fn></title>
516
+ <term id="J">
517
+ <preferred>Term2</preferred>
518
+ </term>
519
+ </terms>
520
+ <definitions id="K">
521
+ <title>Definitions<fn reference="12"><p>A</p></fn></title>
522
+ <dl>
523
+ <dt>Symbol</dt>
524
+ <dd>Definition</dd>
525
+ </dl>
526
+ </definitions>
527
+ </clause>
528
+ <definitions id="L">
529
+ <dl>
530
+ <dt>Symbol</dt>
531
+ <dd>Definition</dd>
532
+ </dl>
533
+ </definitions>
534
+ <clause id="M" inline-header="false" obligation="normative">
535
+ <title>Clause 4<fn reference="13"><p>A</p></fn></title><clause id="N" inline-header="false" obligation="normative">
536
+ <title>Introduction<fn reference="1"><p>A</p></fn></title>
537
+ </clause>
538
+ <clause id="O" inline-header="false" obligation="normative">
539
+ <title>Clause 4.2<fn reference="14"><p>A</p></fn></title>
540
+ </clause>
541
+ <clause id="O1" inline-header="false" obligation="normative">
542
+ </clause>
543
+ </clause>
544
+
545
+ </sections><annex id="P" inline-header="false" obligation="normative">
546
+ <title>Annex<fn reference="15"><p>A</p></fn></title>
547
+ <clause id="Q" inline-header="false" obligation="normative">
548
+ <title>Annex A.1<fn reference="16"><p>A</p></fn></title>
549
+ <clause id="Q1" inline-header="false" obligation="normative">
550
+ <title>Annex A.1a<fn reference="17"><p>A</p></fn></title>
551
+ </clause>
552
+ <references id="Q2"><title>Annex Bibliography<fn reference="18"><p>A</p></fn></title></references>
553
+ </clause>
554
+ </annex><bibliography><references id="R" obligation="informative">
555
+ <title>Normative References<fn reference="19"><p>A</p></fn></title>
556
+ </references><clause id="S" obligation="informative">
557
+ <title>Bibliography<fn reference="20"><p>A</p></fn></title>
558
+ <references id="T" obligation="informative">
559
+ <title>Bibliography Subsection<fn reference="21"><p>A</p></fn></title>
560
+ </references>
561
+ </clause>
562
+ </bibliography>
563
+ </iso-standard>
564
+ INPUT
565
+ <html xmlns:epub='http://www.idpf.org/2007/ops' lang='en'>
566
+ <head/>
567
+ <body lang='en'>
568
+ <div class='title-section'>
569
+ <p>&#160;</p>
570
+ </div>
571
+ <br/>
572
+ <div class='prefatory-section'>
573
+ <p>&#160;</p>
574
+ </div>
575
+ <br/>
576
+ <div class='main-section'>
577
+ <div class='authority'>
578
+ <div class='boilerplate-copyright'>
579
+ <div>
580
+ <h1>
581
+ Copyright
582
+ <a rel='footnote' href='#fn:1' epub:type='footnote'>
583
+ <sup>1</sup>
584
+ </a>
585
+ </h1>
586
+ </div>
587
+ </div>
588
+ <div class='boilerplate-license'>
589
+ <div>
590
+ <h1>
591
+ License
592
+ <a rel='footnote' href='#fn:2' epub:type='footnote'>
593
+ <sup>2</sup>
594
+ </a>
595
+ </h1>
596
+ </div>
597
+ </div>
598
+ <div class='boilerplate-legal'>
599
+ <div>
600
+ <h1>
601
+ Legal
602
+ <a rel='footnote' href='#fn:3' epub:type='footnote'>
603
+ <sup>3</sup>
604
+ </a>
605
+ </h1>
606
+ </div>
607
+ </div>
608
+ <div class='boilerplate-feedback'>
609
+ <div>
610
+ <h1>
611
+ Feedback
612
+ <a rel='footnote' href='#fn:4' epub:type='footnote'>
613
+ <sup>4</sup>
614
+ </a>
615
+ </h1>
616
+ </div>
617
+ </div>
618
+ </div>
619
+ <br/>
620
+ <div>
621
+ <h1 class='AbstractTitle'>Abstract</h1>
622
+ </div>
623
+ <br/>
624
+ <div>
625
+ <h1 class='ForewordTitle'>Foreword</h1>
626
+ <p id='A'>This is a preamble</p>
627
+ </div>
628
+ <br/>
629
+ <div class='Section3' id='B'>
630
+ <h1 class='IntroTitle'>Introduction</h1>
631
+ <div id='C'>
632
+ <h2>
633
+ Introduction Subsection
634
+ <a rel='footnote' href='#fn:8' epub:type='footnote'>
635
+ <sup>8</sup>
636
+ </a>
637
+ </h2>
638
+ </div>
639
+ </div>
640
+ <p class='zzSTDTitle1'/>
641
+ <div id='H'>
642
+ <h1>1.&#160; Terms, definitions, symbols and abbreviated terms</h1>
643
+ <div id='I'>
644
+ <h2>
645
+ 1.1.&#160; Normal Terms
646
+ <a rel='footnote' href='#fn:11' epub:type='footnote'>
647
+ <sup>11</sup>
648
+ </a>
649
+ </h2>
650
+ <p class='TermNum' id='J'>1.1.1.</p>
651
+ <p class='Terms' style='text-align:left;'>Term2</p>
652
+ </div>
653
+ <div id='K'>
654
+ <h2>
655
+ 1.2.&#160; Definitions
656
+ <a rel='footnote' href='#fn:12' epub:type='footnote'>
657
+ <sup>12</sup>
658
+ </a>
659
+ </h2>
660
+ <dl>
661
+ <dt>
662
+ <p>Symbol</p>
663
+ </dt>
664
+ <dd>Definition</dd>
665
+ </dl>
666
+ </div>
667
+ </div>
668
+ <div id='L' class='Symbols'>
669
+ <h1>2.&#160; Symbols and abbreviated terms</h1>
670
+ <dl>
671
+ <dt>
672
+ <p>Symbol</p>
673
+ </dt>
674
+ <dd>Definition</dd>
675
+ </dl>
676
+ </div>
677
+ <div id='D'>
678
+ <h1>
679
+ 3.&#160; Scope
680
+ <a rel='footnote' href='#fn:9' epub:type='footnote'>
681
+ <sup>9</sup>
682
+ </a>
683
+ </h1>
684
+ <p id='E'>Text</p>
685
+ </div>
686
+ <div id='M'>
687
+ <h1>
688
+ 4.&#160; Clause 4
689
+ <a rel='footnote' href='#fn:13' epub:type='footnote'>
690
+ <sup>13</sup>
691
+ </a>
692
+ </h1>
693
+ <div id='N'>
694
+ <h2>
695
+ 4.1.&#160; Introduction
696
+ <a rel='footnote' href='#fn:1' epub:type='footnote'>
697
+ <sup>1</sup>
698
+ </a>
699
+ </h2>
700
+ </div>
701
+ <div id='O'>
702
+ <h2>
703
+ 4.2.&#160; Clause 4.2
704
+ <a rel='footnote' href='#fn:14' epub:type='footnote'>
705
+ <sup>14</sup>
706
+ </a>
707
+ </h2>
708
+ </div>
709
+ <div id='O1'>
710
+ <h2>4.3.&#160; </h2>
711
+ </div>
712
+ </div>
713
+ <br/>
714
+ <div id='P' class='Section3'>
715
+ <h1 class='Annex'>
716
+ <b>Annex A</b>
717
+ <br/>
718
+ (normative)
719
+ <br/>
720
+ <br/>
721
+ <b>
722
+ Annex
723
+ <a rel='footnote' href='#fn:15' epub:type='footnote'>
724
+ <sup>15</sup>
725
+ </a>
726
+ </b>
727
+ </h1>
728
+ <div id='Q'>
729
+ <h2>
730
+ A.1.&#160; Annex A.1
731
+ <a rel='footnote' href='#fn:16' epub:type='footnote'>
732
+ <sup>16</sup>
733
+ </a>
734
+ </h2>
735
+ <div id='Q1'>
736
+ <h3>
737
+ A.1.1.&#160; Annex A.1a
738
+ <a rel='footnote' href='#fn:17' epub:type='footnote'>
739
+ <sup>17</sup>
740
+ </a>
741
+ </h3>
742
+ </div>
743
+ <div>
744
+ <h3>
745
+ A.1.2.&#160; Annex Bibliography
746
+ <a rel='footnote' href='#fn:18' epub:type='footnote'>
747
+ <sup>18</sup>
748
+ </a>
749
+ </h3>
750
+ </div>
751
+ </div>
752
+ </div>
753
+ </div>
754
+ </body>
755
+ </html>
756
+ OUTPUT
757
+ end
758
+
428
759
  it "processes section names suppressing section numbering" do
429
760
  expect(xmlpp(IsoDoc::HtmlConvert.new({suppressheadingnumbers: true}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
430
761
  <iso-standard xmlns="http://riboseinc.com/isoxml">
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isodoc
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.17
4
+ version: 1.0.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-17 00:00:00.000000000 Z
11
+ date: 2020-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: asciimath