isodoc 0.5.8 → 0.5.9

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 (41) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.tb.yml +20 -10
  3. data/lib/isodoc/blocks.rb +13 -13
  4. data/lib/isodoc/cleanup.rb +19 -3
  5. data/lib/isodoc/comments.rb +1 -1
  6. data/lib/isodoc/convert.rb +2 -0
  7. data/lib/isodoc/footnotes.rb +4 -2
  8. data/lib/isodoc/html.rb +28 -10
  9. data/lib/isodoc/i18n-en.yaml +9 -0
  10. data/lib/isodoc/i18n-fr.yaml +12 -3
  11. data/lib/isodoc/i18n-zh-Hans.yaml +10 -1
  12. data/lib/isodoc/i18n.rb +9 -2
  13. data/lib/isodoc/inline.rb +5 -6
  14. data/lib/isodoc/iso2wordhtml.rb +9 -6
  15. data/lib/isodoc/lists.rb +7 -5
  16. data/lib/isodoc/metadata.rb +27 -10
  17. data/lib/isodoc/references.rb +12 -6
  18. data/lib/isodoc/section.rb +17 -11
  19. data/lib/isodoc/table.rb +2 -4
  20. data/lib/isodoc/terms.rb +3 -3
  21. data/lib/isodoc/utils.rb +15 -14
  22. data/lib/isodoc/version.rb +1 -1
  23. data/lib/isodoc/wordconvert/comments.rb +1 -1
  24. data/lib/isodoc/wordconvert/wordconvertmodule.rb +51 -12
  25. data/lib/isodoc/xref_gen.rb +30 -26
  26. data/lib/isodoc/xref_sect_gen.rb +31 -13
  27. data/spec/assets/scripts.html +1 -0
  28. data/spec/isodoc/blocks_spec.rb +50 -49
  29. data/spec/isodoc/cleanup_spec.rb +6 -6
  30. data/spec/isodoc/footnotes_spec.rb +10 -2
  31. data/spec/isodoc/i18n_spec.rb +86 -54
  32. data/spec/isodoc/inline_spec.rb +22 -18
  33. data/spec/isodoc/lists_spec.rb +25 -11
  34. data/spec/isodoc/metadata_spec.rb +4 -3
  35. data/spec/isodoc/postproc_spec.rb +108 -42
  36. data/spec/isodoc/ref_spec.rb +9 -7
  37. data/spec/isodoc/section_spec.rb +162 -141
  38. data/spec/isodoc/table_spec.rb +18 -16
  39. data/spec/isodoc/terms_spec.rb +9 -9
  40. data/spec/isodoc/xref_spec.rb +153 -122
  41. metadata +3 -2
@@ -36,11 +36,12 @@ module IsoDoc
36
36
 
37
37
  SECTIONS_XPATH =
38
38
  "//foreword | //introduction | //sections/terms | //annex | "\
39
- "//sections/clause | //references[not(ancestor::clause)] | "\
40
- "//clause[descendant::references][not(ancestor::clause)]".freeze
39
+ "//sections/clause | //bibliography/references | "\
40
+ "//bibliography/clause".freeze
41
41
 
42
42
  CHILD_NOTES_XPATH =
43
- "./*[not(self::xmlns:subsection)]//xmlns:note | ./xmlns:note".freeze
43
+ "./*[not(self::xmlns:clause) and "\
44
+ "not(self::xmlns:appendix)]//xmlns:note | ./xmlns:note".freeze
44
45
 
45
46
  def note_anchor_names(sections)
46
47
  sections.each do |s|
@@ -51,13 +52,13 @@ module IsoDoc
51
52
  idx = notes.size == 1 ? "" : " #{i + 1}"
52
53
  @anchors[n["id"]] = anchor_struct(idx, s, @note_xref_lbl)
53
54
  end
54
- note_anchor_names(s.xpath(ns("./subsection")))
55
+ note_anchor_names(s.xpath(ns("./clause | ./appendix")))
55
56
  end
56
57
  end
57
58
 
58
59
  CHILD_EXAMPLES_XPATH =
59
- "./*[not(self::xmlns:subsection)]//xmlns:example | "\
60
- "./xmlns:example".freeze
60
+ "./*[not(self::xmlns:clause) and not(self::xmlns:appendix)]//"\
61
+ "xmlns:example | ./xmlns:example".freeze
61
62
 
62
63
  def example_anchor_names(sections)
63
64
  sections.each do |s|
@@ -67,20 +68,20 @@ module IsoDoc
67
68
  idx = notes.size == 1 ? "" : " #{i + 1}"
68
69
  @anchors[n["id"]] = anchor_struct(idx, s, @example_xref_lbl)
69
70
  end
70
- example_anchor_names(s.xpath(ns("./subsection")))
71
+ example_anchor_names(s.xpath(ns("./clause | ./appendix")))
71
72
  end
72
73
  end
73
74
 
74
75
  def list_anchor_names(sections)
75
76
  sections.each do |s|
76
- notes = s.xpath(ns(".//ol")) - s.xpath(ns(".//subsection//ol")) -
77
- s.xpath(ns(".//ol//ol"))
77
+ notes = s.xpath(ns(".//ol")) - s.xpath(ns(".//clause//ol")) -
78
+ s.xpath(ns(".//appendix//ol")) - s.xpath(ns(".//ol//ol"))
78
79
  notes.each_with_index do |n, i|
79
80
  idx = notes.size == 1 ? "" : " #{i + 1}"
80
81
  @anchors[n["id"]] = anchor_struct(idx, s, @list_lbl)
81
82
  list_item_anchor_names(n, @anchors[n["id"]], 1, "", notes.size != 1)
82
83
  end
83
- list_anchor_names(s.xpath(ns("./subsection")))
84
+ list_anchor_names(s.xpath(ns("./clause | ./appendix")))
84
85
  end
85
86
  end
86
87
 
@@ -106,22 +107,9 @@ module IsoDoc
106
107
  end
107
108
  end
108
109
 
109
- def middle_anchor_names(docxml)
110
- symbols_abbrevs = docxml.at(ns("//sections/symbols-abbrevs"))
111
- sect_num = 4
112
- if symbols_abbrevs
113
- section_names(symbols_abbrevs, sect_num.to_s, 1)
114
- sect_num += 1
115
- end
116
- clause_names(docxml, sect_num)
117
- termnote_anchor_names(docxml)
118
- termexample_anchor_names(docxml)
119
- end
120
-
121
110
  # extract names for all anchors, xref and label
122
111
  def anchor_names(docxml)
123
112
  initial_anchor_names(docxml)
124
- middle_anchor_names(docxml)
125
113
  back_anchor_names(docxml)
126
114
  # preempt clause notes with all other types of note
127
115
  note_anchor_names(docxml.xpath(ns("//table | //example | //formula | "\
@@ -144,10 +132,26 @@ module IsoDoc
144
132
  end
145
133
  end
146
134
 
135
+ def anchor_struct_label(lbl, elem)
136
+ case elem
137
+ when @appendix_lbl then l10n("#{elem} #{lbl}")
138
+ else
139
+ lbl.to_s
140
+ end
141
+ end
142
+
143
+ def anchor_struct_xref(lbl, elem)
144
+ case elem
145
+ when @formula_lbl then l10n("#{elem} (#{lbl})")
146
+ else
147
+ l10n("#{elem} #{lbl}")
148
+ end
149
+ end
150
+
147
151
  def anchor_struct(lbl, container, elem)
148
- ret = { label: lbl.to_s }
149
- ret[:xref] =
150
- elem == "Formula" ? l10n("#{elem} (#{lbl})") : l10n("#{elem} #{lbl}")
152
+ ret = {}
153
+ ret[:label] = anchor_struct_label(lbl, elem)
154
+ ret[:xref] = anchor_struct_xref(lbl, elem)
151
155
  ret[:xref].gsub!(/ $/, "")
152
156
  ret[:container] = get_clause_id(container) unless container.nil?
153
157
  ret
@@ -11,11 +11,17 @@ module IsoDoc
11
11
 
12
12
  def initial_anchor_names(d)
13
13
  introduction_names(d.at(ns("//introduction")))
14
- section_names(d.at(ns("//clause[title = 'Scope']")), "1", 1)
15
- section_names(d.at(ns(
16
- "//references[title = 'Normative References']")), "2", 1)
17
- section_names(d.at(ns("//sections/terms | //sections/clause[descendant::terms]")), "3", 1)
14
+ n = 0
15
+ n = section_names(d.at(ns("//clause[title = 'Scope']")), n, 1)
16
+ n = section_names(d.at(ns(
17
+ "//references[title = 'Normative References']")), n, 1)
18
+ n = section_names(d.at(ns("//sections/terms | "\
19
+ "//sections/clause[descendant::terms]")), n, 1)
20
+ n = section_names(d.at(ns("//sections/symbols-abbrevs")), n, 1)
18
21
  middle_section_asset_names(d)
22
+ clause_names(d, n)
23
+ termnote_anchor_names(d)
24
+ termexample_anchor_names(d)
19
25
  end
20
26
 
21
27
  def middle_section_asset_names(d)
@@ -27,34 +33,37 @@ module IsoDoc
27
33
  end
28
34
 
29
35
  def clause_names(docxml, sect_num)
30
- q = "//clause[parent::sections][not(xmlns:title = 'Scope')][not(descendant::terms)]"
36
+ q = "//clause[parent::sections][not(xmlns:title = 'Scope')]"\
37
+ "[not(descendant::terms)]"
31
38
  docxml.xpath(ns(q)).each_with_index do |c, i|
32
- section_names(c, (i + sect_num).to_s, 1)
39
+ section_names(c, (i + sect_num), 1)
33
40
  end
34
41
  end
35
42
 
36
43
  def introduction_names(clause)
37
44
  return if clause.nil?
38
- clause.xpath(ns("./subsection")).each_with_index do |c, i|
45
+ clause.xpath(ns("./clause")).each_with_index do |c, i|
39
46
  section_names1(c, "0.#{i + 1}", 2)
40
47
  end
41
48
  end
42
49
 
43
50
  def section_names(clause, num, lvl)
44
- return if clause.nil?
51
+ return num if clause.nil?
52
+ num = num + 1
45
53
  @anchors[clause["id"]] =
46
- { label: num, xref: l10n("#{@clause_lbl} #{num}"), level: lvl }
47
- clause.xpath(ns("./subsection | ./term | ./terms | ./symbols-abbrevs")).
54
+ { label: num.to_s, xref: l10n("#{@clause_lbl} #{num}"), level: lvl }
55
+ clause.xpath(ns("./clause | ./term | ./terms | ./symbols-abbrevs")).
48
56
  each_with_index do |c, i|
49
57
  section_names1(c, "#{num}.#{i + 1}", lvl + 1)
50
58
  end
59
+ num
51
60
  end
52
61
 
53
62
  def section_names1(clause, num, level)
54
63
  @anchors[clause["id"]] =
55
64
  { label: num, level: level, xref: num }
56
65
  # subclauses are not prefixed with "Clause"
57
- clause.xpath(ns("./subsection | ./terms | ./term | ./symbols-abbrevs")).
66
+ clause.xpath(ns("./clause | ./terms | ./term | ./symbols-abbrevs")).
58
67
  each_with_index do |c, i|
59
68
  section_names1(c, "#{num}.#{i + 1}", level + 1)
60
69
  end
@@ -66,17 +75,26 @@ module IsoDoc
66
75
  label = l10n("<b>#{@annex_lbl} #{num}</b><br/>#{obl}")
67
76
  @anchors[clause["id"]] =
68
77
  { label: label, xref: "#{@annex_lbl} #{num}", level: 1 }
69
- clause.xpath(ns("./subsection")).each_with_index do |c, i|
78
+ clause.xpath(ns("./clause")).each_with_index do |c, i|
70
79
  annex_names1(c, "#{num}.#{i + 1}", 2)
71
80
  end
81
+ appendix_names(clause, num)
72
82
  hierarchical_asset_names(clause, num)
73
83
  end
74
84
 
75
85
  def annex_names1(clause, num, level)
76
86
  @anchors[clause["id"]] = { label: num, xref: num, level: level }
77
- clause.xpath(ns(".//subsection")).each_with_index do |c, i|
87
+ clause.xpath(ns(".//clause")).each_with_index do |c, i|
78
88
  annex_names1(c, "#{num}.#{i + 1}", level + 1)
79
89
  end
80
90
  end
91
+
92
+ def appendix_names(clause, num)
93
+ clause.xpath(ns("./appendix")).each_with_index do |c, i|
94
+ @anchors[c["id"]] = anchor_struct(i + 1, nil, @appendix_lbl)
95
+ @anchors[c["id"]][:level] = 2
96
+ @anchors[c["id"]][:container] = clause["id"]
97
+ end
98
+ end
81
99
  end
82
100
  end
@@ -0,0 +1 @@
1
+ This is a script
@@ -4,11 +4,11 @@ RSpec.describe IsoDoc do
4
4
  it "processes unlabelled notes" do
5
5
  expect(IsoDoc::Convert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
6
6
  <iso-standard xmlns="http://riboseinc.com/isoxml">
7
- <foreword>
7
+ <preface><foreword>
8
8
  <note>
9
9
  <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
10
10
  </note>
11
- </foreword>
11
+ </foreword></preface>
12
12
  </iso-standard>
13
13
  INPUT
14
14
  <html xmlns:epub="http://www.idpf.org/2007/ops">
@@ -24,7 +24,7 @@ RSpec.describe IsoDoc do
24
24
  <div>
25
25
  <h1 class="ForewordTitle">Foreword</h1>
26
26
  <div id="" class="Note">
27
- <p class="Note">NOTE&#160; These results are based on a study carried out on three different types of kernel.</p>
27
+ <p class="Note"><span class="note_label">NOTE</span>&#160; These results are based on a study carried out on three different types of kernel.</p>
28
28
  </div>
29
29
  </div>
30
30
  <p>&#160;</p>
@@ -42,11 +42,11 @@ RSpec.describe IsoDoc do
42
42
  it "processes labelled notes" do
43
43
  expect(IsoDoc::Convert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
44
44
  <iso-standard xmlns="http://riboseinc.com/isoxml">
45
- <foreword>
45
+ <preface><foreword>
46
46
  <note id="note1">
47
47
  <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
48
48
  </note>
49
- </foreword>
49
+ </foreword></preface>
50
50
  </iso-standard>
51
51
  INPUT
52
52
  <html xmlns:epub="http://www.idpf.org/2007/ops">
@@ -62,7 +62,7 @@ INPUT
62
62
  <div>
63
63
  <h1 class="ForewordTitle">Foreword</h1>
64
64
  <div id="note1" class="Note">
65
- <p class="Note">NOTE&#160; These results are based on a study carried out on three different types of kernel.</p>
65
+ <p class="Note"><span class="note_label">NOTE</span>&#160; These results are based on a study carried out on three different types of kernel.</p>
66
66
  </div>
67
67
  </div>
68
68
  <p>&#160;</p>
@@ -80,14 +80,14 @@ INPUT
80
80
  it "processes sequences of notes" do
81
81
  expect(IsoDoc::Convert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
82
82
  <iso-standard xmlns="http://riboseinc.com/isoxml">
83
- <foreword>
83
+ <preface><foreword>
84
84
  <note id="note1">
85
85
  <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
86
86
  </note>
87
87
  <note id="note2">
88
88
  <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83a">These results are based on a study carried out on three different types of kernel.</p>
89
89
  </note>
90
- </foreword>
90
+ </foreword></preface>
91
91
  </iso-standard>
92
92
  INPUT
93
93
  <html xmlns:epub="http://www.idpf.org/2007/ops">
@@ -103,10 +103,10 @@ INPUT
103
103
  <div>
104
104
  <h1 class="ForewordTitle">Foreword</h1>
105
105
  <div id="note1" class="Note">
106
- <p class="Note">NOTE 1&#160; These results are based on a study carried out on three different types of kernel.</p>
106
+ <p class="Note"><span class="note_label">NOTE 1</span>&#160; These results are based on a study carried out on three different types of kernel.</p>
107
107
  </div>
108
108
  <div id="note2" class="Note">
109
- <p class="Note">NOTE 2&#160; These results are based on a study carried out on three different types of kernel.</p>
109
+ <p class="Note"><span class="note_label">NOTE 2</span>&#160; These results are based on a study carried out on three different types of kernel.</p>
110
110
  </div>
111
111
  </div>
112
112
  <p>&#160;</p>
@@ -124,12 +124,12 @@ INPUT
124
124
  it "processes multi-para notes" do
125
125
  expect(IsoDoc::Convert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
126
126
  <iso-standard xmlns="http://riboseinc.com/isoxml">
127
- <foreword>
127
+ <preface><foreword>
128
128
  <note>
129
129
  <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
130
130
  <p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83a">These results are based on a study carried out on three different types of kernel.</p>
131
131
  </note>
132
- </foreword>
132
+ </foreword></preface>
133
133
  </iso-standard>
134
134
  INPUT
135
135
  <html xmlns:epub="http://www.idpf.org/2007/ops">
@@ -145,7 +145,7 @@ INPUT
145
145
  <div>
146
146
  <h1 class="ForewordTitle">Foreword</h1>
147
147
  <div id="" class="Note">
148
- <p class="Note">NOTE&#160; These results are based on a study carried out on three different types of kernel.</p>
148
+ <p class="Note"><span class="note_label">NOTE</span>&#160; These results are based on a study carried out on three different types of kernel.</p>
149
149
  <p class="Note" id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83a">These results are based on a study carried out on three different types of kernel.</p>
150
150
  </div>
151
151
  </div>
@@ -164,7 +164,7 @@ INPUT
164
164
  it "processes non-para notes" do
165
165
  expect(IsoDoc::Convert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
166
166
  <iso-standard xmlns="http://riboseinc.com/isoxml">
167
- <foreword>
167
+ <preface><foreword>
168
168
  <note>
169
169
  <dl>
170
170
  <dt>A</dt>
@@ -173,7 +173,7 @@ INPUT
173
173
  <ul>
174
174
  <li>C</li></ul>
175
175
  </note>
176
- </foreword>
176
+ </foreword></preface>
177
177
  </iso-standard>
178
178
  INPUT
179
179
  <html xmlns:epub="http://www.idpf.org/2007/ops">
@@ -188,7 +188,7 @@ INPUT
188
188
  <br/>
189
189
  <div>
190
190
  <h1 class="ForewordTitle">Foreword</h1>
191
- <div id="" class="Note"><p class="Note">NOTE&#160; </p>
191
+ <div id="" class="Note"><p class="Note"><span class="note_label">NOTE</span>&#160; </p>
192
192
  <dl><dt><p class="Note">A</p></dt><dd><p class="Note">B</p></dd></dl>
193
193
  <ul>
194
194
  <li>C</li></ul>
@@ -210,7 +210,7 @@ INPUT
210
210
  it "processes figures" do
211
211
  expect(IsoDoc::Convert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
212
212
  <iso-standard xmlns="http://riboseinc.com/isoxml">
213
- <foreword>
213
+ <preface><foreword>
214
214
  <figure id="figureA-1">
215
215
  <name>Split-it-right sample divider</name>
216
216
  <image src="rice_images/rice_image1.png" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f0" imagetype="PNG"/>
@@ -219,7 +219,7 @@ INPUT
219
219
  <dd><p>B</p></dd>
220
220
  </dl>
221
221
  </figure>
222
- </foreword>
222
+ </foreword></preface>
223
223
  </iso-standard>
224
224
  INPUT
225
225
  <html xmlns:epub="http://www.idpf.org/2007/ops">
@@ -238,7 +238,7 @@ INPUT
238
238
 
239
239
  <img src="rice_images/rice_image1.png"/>
240
240
  <p><b>Key</b></p><dl><dt><p>A</p></dt><dd><p>B</p></dd></dl>
241
- <p class="FigureTitle" align="center"><b>Figure 1&#160;&#8212; Split-it-right sample divider</b></p></div>
241
+ <p class="FigureTitle" align="center">Figure 1&#160;&#8212; Split-it-right sample divider</p></div>
242
242
  </div>
243
243
  <p>&#160;</p>
244
244
  </div>
@@ -255,11 +255,11 @@ INPUT
255
255
  it "processes examples" do
256
256
  expect(IsoDoc::Convert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
257
257
  <iso-standard xmlns="http://riboseinc.com/isoxml">
258
- <foreword>
258
+ <preface><foreword>
259
259
  <example id="samplecode">
260
260
  <p>Hello</p>
261
261
  </example>
262
- </foreword>
262
+ </foreword></preface>
263
263
  </iso-standard>
264
264
  INPUT
265
265
  <html xmlns:epub="http://www.idpf.org/2007/ops">
@@ -276,8 +276,8 @@ INPUT
276
276
  <h1 class="ForewordTitle">Foreword</h1>
277
277
  <table id="samplecode" class="example">
278
278
  <tr>
279
- <td width="110pt" valign="top" style="width:82.8pt;padding:.75pt .75pt .75pt .75pt">EXAMPLE</td>
280
- <td valign="top">
279
+ <td width="110pt" valign="top" class="example_label" style="width:82.8pt;padding:.75pt .75pt .75pt .75pt">EXAMPLE</td>
280
+ <td valign="top" class="example">
281
281
  <p>Hello</p>
282
282
  </td>
283
283
  </tr>
@@ -299,14 +299,14 @@ INPUT
299
299
  it "processes sequences of examples" do
300
300
  expect(IsoDoc::Convert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
301
301
  <iso-standard xmlns="http://riboseinc.com/isoxml">
302
- <foreword>
302
+ <preface><foreword>
303
303
  <example id="samplecode">
304
304
  <p>Hello</p>
305
305
  </example>
306
- <example id="samplecode2>
306
+ <example id="samplecode2">
307
307
  <p>Hello</p>
308
308
  </example>
309
- </foreword>
309
+ </foreword></preface>
310
310
  </iso-standard>
311
311
  INPUT
312
312
  <html xmlns:epub="http://www.idpf.org/2007/ops">
@@ -323,19 +323,20 @@ INPUT
323
323
  <h1 class="ForewordTitle">Foreword</h1>
324
324
  <table id="samplecode" class="example">
325
325
  <tr>
326
- <td width="110pt" valign="top" style="width:82.8pt;padding:.75pt .75pt .75pt .75pt">EXAMPLE 1</td>
327
- <td valign="top">
326
+ <td width="110pt" valign="top" class="example_label" style="width:82.8pt;padding:.75pt .75pt .75pt .75pt">EXAMPLE 1</td>
327
+ <td valign="top" class="example">
328
328
  <p>Hello</p>
329
329
  </td>
330
330
  </tr>
331
331
  </table>
332
- <table id="samplecode2&gt; " class="example">
332
+ <table id="samplecode2" class="example">
333
333
  <tr>
334
- <td width="110pt" valign="top" style="width:82.8pt;padding:.75pt .75pt .75pt .75pt">EXAMPLE 2</td>
335
- <td valign="top"/>
334
+ <td width="110pt" valign="top" class="example_label" style="width:82.8pt;padding:.75pt .75pt .75pt .75pt">EXAMPLE 2</td>
335
+ <td valign="top" class="example">
336
+ <p>Hello</p>
337
+ </td>
336
338
  </tr>
337
339
  </table>
338
- <p>Hello</p>
339
340
  </div>
340
341
  <p>&#160;</p>
341
342
  </div>
@@ -352,12 +353,12 @@ INPUT
352
353
  it "processes sourcecode" do
353
354
  expect(IsoDoc::Convert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
354
355
  <iso-standard xmlns="http://riboseinc.com/isoxml">
355
- <foreword>
356
+ <preface><foreword>
356
357
  <sourcecode id="samplecode">
357
358
  <name>Ruby code</name>
358
359
  puts x
359
360
  </sourcecode>
360
- </foreword>
361
+ </foreword></preface>
361
362
  </iso-standard>
362
363
  INPUT
363
364
  <html xmlns:epub="http://www.idpf.org/2007/ops">
@@ -372,7 +373,7 @@ INPUT
372
373
  <br/>
373
374
  <div>
374
375
  <h1 class="ForewordTitle">Foreword</h1>
375
- <p id="samplecode" class="Sourcecode"><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;puts&#160;x<br/><p class="FigureTitle" align="center"><b>Ruby code</b></p></p>
376
+ <p id="samplecode" class="Sourcecode"><br/>&#160;&#160;&#160;&#160;<br/>&#160;&#160;puts&#160;x<br/><p class="FigureTitle" align="center">Ruby code</p></p>
376
377
  </div>
377
378
  <p>&#160;</p>
378
379
  </div>
@@ -389,7 +390,7 @@ INPUT
389
390
  it "processes sourcecode with annotations" do
390
391
  expect(IsoDoc::Convert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
391
392
  <iso-standard xmlns="http://riboseinc.com/isoxml">
392
- <foreword>
393
+ <preface><foreword>
393
394
  <sourcecode id="_">puts "Hello, world." <callout target="A">1</callout>
394
395
  %w{a b c}.each do |x|
395
396
  puts x <callout target="B">2</callout>
@@ -398,7 +399,7 @@ INPUT
398
399
  </annotation><annotation id="B">
399
400
  <p id="_">This is another callout</p>
400
401
  </annotation></sourcecode>
401
- </foreword>
402
+ </foreword></preface>
402
403
  </iso-standard>
403
404
  INPUT
404
405
  <html xmlns:epub="http://www.idpf.org/2007/ops">
@@ -434,11 +435,11 @@ INPUT
434
435
  it "processes admonitions" do
435
436
  expect(IsoDoc::Convert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
436
437
  <iso-standard xmlns="http://riboseinc.com/isoxml">
437
- <foreword>
438
+ <preface><foreword>
438
439
  <admonition id="_70234f78-64e5-4dfc-8b6f-f3f037348b6a" type="caution">
439
440
  <p id="_e94663cc-2473-4ccc-9a72-983a74d989f2">Only use paddy or parboiled rice for the determination of husked rice yield.</p>
440
441
  </admonition>
441
- </foreword>
442
+ </foreword></preface>
442
443
  </iso-standard>
443
444
  INPUT
444
445
  <html xmlns:epub="http://www.idpf.org/2007/ops">
@@ -472,7 +473,7 @@ INPUT
472
473
  it "processes formulae" do
473
474
  expect(IsoDoc::Convert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
474
475
  <iso-standard xmlns="http://riboseinc.com/isoxml">
475
- <foreword>
476
+ <preface><foreword>
476
477
  <formula id="_be9158af-7e93-4ee2-90c5-26d31c181934">
477
478
  <stem type="AsciiMath">r = 1 %</stem>
478
479
  <dl id="_e4fe94fe-1cde-49d9-b1ad-743293b7e21d">
@@ -483,7 +484,7 @@ INPUT
483
484
  <p id="_1b99995d-ff03-40f5-8f2e-ab9665a69b77">is the repeatability limit.</p>
484
485
  </dd>
485
486
  </dl></formula>
486
- </foreword>
487
+ </foreword></preface>
487
488
  </iso-standard>
488
489
  INPUT
489
490
  <html xmlns:epub="http://www.idpf.org/2007/ops">
@@ -524,12 +525,12 @@ INPUT
524
525
  it "processes paragraph alignments" do
525
526
  expect(IsoDoc::Convert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
526
527
  <iso-standard xmlns="http://riboseinc.com/isoxml">
527
- <foreword>
528
+ <preface><foreword>
528
529
  <p align="left" id="_08bfe952-d57f-4150-9c95-5d52098cc2a8">Vache Equipment<br/>
529
530
  Fictitious<br/>
530
531
  World</p>
531
532
  <p align="justify">Justify</p>
532
- </foreword>
533
+ </foreword></preface>
533
534
  </iso-standard>
534
535
  INPUT
535
536
  <html xmlns:epub="http://www.idpf.org/2007/ops">
@@ -565,12 +566,12 @@ World</p>
565
566
  it "processes paragraph alignments (Word)" do
566
567
  expect(IsoDoc::WordConvert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
567
568
  <iso-standard xmlns="http://riboseinc.com/isoxml">
568
- <foreword>
569
+ <preface><foreword>
569
570
  <p align="left" id="_08bfe952-d57f-4150-9c95-5d52098cc2a8">Vache Equipment<br/>
570
571
  Fictitious<br/>
571
572
  World</p>
572
573
  <p align="justify">Justify</p>
573
- </foreword>
574
+ </foreword></preface>
574
575
  </iso-standard>
575
576
  INPUT
576
577
  <html xmlns:epub="http://www.idpf.org/2007/ops">
@@ -608,14 +609,14 @@ World</p>
608
609
  it "processes blockquotes" do
609
610
  expect(IsoDoc::Convert.new({}).convert_file(<<~"INPUT", "test", true)).to be_equivalent_to <<~"OUTPUT"
610
611
  <iso-standard xmlns="http://riboseinc.com/isoxml">
611
- <foreword>
612
+ <preface><foreword>
612
613
  <quote id="_044bd364-c832-4b78-8fea-92242402a1d1">
613
614
  <source type="inline" bibitemid="ISO7301" citeas="ISO 7301: 2011"><locality type="clause"><referenceFrom>1</referenceFrom></locality></source>
614
615
  <author>ISO</author>
615
616
  <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>
616
617
  </quote>
617
618
 
618
- </foreword>
619
+ </foreword></preface>
619
620
  </iso-standard>
620
621
  INPUT
621
622
  <html xmlns:epub="http://www.idpf.org/2007/ops">
@@ -675,7 +676,7 @@ World</p>
675
676
  <br/>
676
677
  <div class="WordSection3">
677
678
  <p class="zzSTDTitle1"/>
678
- <div><h1>3.&#160; Terms and Definitions</h1><p>For the purposes of this document,
679
+ <div><h1>1.&#160; Terms and Definitions</h1><p>For the purposes of this document,
679
680
  the following terms and definitions apply.</p>
680
681
  <p>ISO and IEC maintain terminological databases for use in
681
682
  standardization at the following addresses:</p>
@@ -686,7 +687,7 @@ World</p>
686
687
  <li> <p>IEC Electropedia: available at
687
688
  <a href="http://www.electropedia.org">http://www.electropedia.org</a>
688
689
  </p> </li> </ul>
689
- <p class="TermNum" id="_extraneous_matter">3.1</p><p class="Terms">extraneous matter</p><p class="AltTerms">EM</p>
690
+ <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>
690
691
 
691
692
  <p id="_318b3939-be09-46c4-a284-93f9826b981e">&lt;rice&gt; organic and inorganic components other than whole or broken kernels</p>
692
693
  </div>