isodoc 1.6.3 → 1.6.4

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.
@@ -1,3 +1,3 @@
1
1
  module IsoDoc
2
- VERSION = "1.6.3".freeze
2
+ VERSION = "1.6.4".freeze
3
3
  end
@@ -1,17 +1,17 @@
1
1
  require "fileutils"
2
- require_relative "./postprocess_cover.rb"
2
+ require_relative "./postprocess_cover"
3
3
 
4
4
  module IsoDoc::WordFunction
5
5
  module Postprocess
6
6
  # add namespaces for Word fragments
7
7
  WORD_NOKOHEAD = <<~HERE.freeze
8
- <!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
9
- <html xmlns="http://www.w3.org/1999/xhtml"
10
- xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office"
11
- xmlns:w="urn:schemas-microsoft-com:office:word"
12
- xmlns:m="http://schemas.microsoft.com/office/2004/12/omml">
13
- <head> <title></title> <meta charset="UTF-8" /> </head>
14
- <body> </body> </html>
8
+ <!DOCTYPE html SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
9
+ <html xmlns="http://www.w3.org/1999/xhtml"
10
+ xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office"
11
+ xmlns:w="urn:schemas-microsoft-com:office:word"
12
+ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml">
13
+ <head> <title></title> <meta charset="UTF-8" /> </head>
14
+ <body> </body> </html>
15
15
  HERE
16
16
 
17
17
  def to_word_xhtml_fragment(xml)
@@ -22,7 +22,8 @@ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml">
22
22
  def table_note_cleanup(docxml)
23
23
  super
24
24
  # preempt html2doc putting MsoNormal there
25
- docxml.xpath("//p[not(self::*[@class])][ancestor::*[@class = 'Note']]").each do |p|
25
+ docxml.xpath("//p[not(self::*[@class])][ancestor::*[@class = 'Note']]")
26
+ .each do |p|
26
27
  p["class"] = "Note"
27
28
  end
28
29
  end
@@ -38,16 +39,21 @@ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml">
38
39
  def toWord(result, filename, dir, header)
39
40
  result = from_xhtml(word_cleanup(to_xhtml(result)))
40
41
  @wordstylesheet = wordstylesheet_update
41
- Html2Doc.process(result, filename: filename, stylesheet: @wordstylesheet&.path,
42
- header_file: header&.path, dir: dir,
43
- asciimathdelims: [@openmathdelim, @closemathdelim],
44
- liststyles: { ul: @ulstyle, ol: @olstyle })
42
+ Html2Doc.process(
43
+ result,
44
+ filename: filename,
45
+ stylesheet: @wordstylesheet&.path,
46
+ header_file: header&.path, dir: dir,
47
+ asciimathdelims: [@openmathdelim, @closemathdelim],
48
+ liststyles: { ul: @ulstyle, ol: @olstyle }
49
+ )
45
50
  header&.unlink
46
- @wordstylesheet&.unlink if @wordstylesheet&.is_a?(Tempfile)
51
+ @wordstylesheet.unlink if @wordstylesheet.is_a?(Tempfile)
47
52
  end
48
53
 
49
- def wordstylesheet_update()
54
+ def wordstylesheet_update
50
55
  return if @wordstylesheet.nil?
56
+
51
57
  f = File.open(@wordstylesheet.path, "a")
52
58
  @landscapestyle.empty? or f.write(@landscapestyle)
53
59
  if @wordstylesheet_override && @wordstylesheet
@@ -62,7 +68,8 @@ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml">
62
68
 
63
69
  def word_admonition_images(docxml)
64
70
  docxml.xpath("//div[@class = 'Admonition']//img").each do |i|
65
- i["width"], i["height"] = Html2Doc.image_resize(i, image_localfile(i), @maxheight, 300)
71
+ i["width"], i["height"] =
72
+ Html2Doc.image_resize(i, image_localfile(i), @maxheight, 300)
66
73
  end
67
74
  end
68
75
 
@@ -88,21 +95,23 @@ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml">
88
95
  cells2d = {}
89
96
  docxml.xpath("//table[colgroup]").each do |t|
90
97
  w = colgroup_widths(t)
91
- t.xpath(".//tr").each_with_index { |tr, r| cells2d[r] = {} }
98
+ t.xpath(".//tr").each_with_index { |_tr, r| cells2d[r] = {} }
92
99
  t.xpath(".//tr").each_with_index do |tr, r|
93
- tr.xpath("./td | ./th").each_with_index do |td, i|
100
+ tr.xpath("./td | ./th").each_with_index do |td, _i|
94
101
  x = 0
95
102
  rs = td&.attr("rowspan")&.to_i || 1
96
103
  cs = td&.attr("colspan")&.to_i || 1
97
- while cells2d[r][x] do
98
- x += 1
104
+ while cells2d[r][x]
105
+ x += 1
99
106
  end
100
- for y2 in r..(r + rs - 1)
101
- for x2 in x..(x + cs - 1)
107
+ (r..(r + rs - 1)).each do |y2|
108
+ (x..(x + cs - 1)).each do |x2|
102
109
  cells2d[y2][x2] = 1
103
110
  end
104
111
  end
105
- width = (x..(x+cs-1)).each_with_object({width: 0}) { |z, m| m[:width] += w[z] }
112
+ width = (x..(x + cs - 1)).each_with_object({ width: 0 }) do |z, m|
113
+ m[:width] += w[z]
114
+ end
106
115
  td["width"] = "#{width[:width]}%"
107
116
  x += cs
108
117
  end
@@ -111,8 +120,8 @@ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml">
111
120
  end
112
121
 
113
122
  # assume percentages
114
- def colgroup_widths(t)
115
- t.xpath("./colgroup/col").each_with_object([]) do |c, m|
123
+ def colgroup_widths(table)
124
+ table.xpath("./colgroup/col").each_with_object([]) do |c, m|
116
125
  m << c["width"].sub(/%$/, "").to_f
117
126
  end
118
127
  end
@@ -127,12 +136,13 @@ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml">
127
136
 
128
137
  def style_update(node, css)
129
138
  return unless node
130
- node["style"] = node["style"] ? node["style"].sub(/;?$/, ";#{css}") : css
139
+
140
+ node["style"] = node["style"] ? node["style"].sub(/;?$/, ";#{css}") : css
131
141
  end
132
142
 
133
143
  def word_image_caption(docxml)
134
- docxml.xpath("//p[@class = 'FigureTitle' or @class = 'SourceTitle']").
135
- each do |t|
144
+ docxml.xpath("//p[@class = 'FigureTitle' or @class = 'SourceTitle']")
145
+ .each do |t|
136
146
  if t&.previous_element&.name == "img"
137
147
  img = t.previous_element
138
148
  t.previous_element.swap("<p class=\'figure\'>#{img.to_xml}</p>")
@@ -150,7 +160,8 @@ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml">
150
160
  xpath.each do |list|
151
161
  (list.xpath(".//li") - list.xpath(".//ol//li | .//ul//li")).each do |l|
152
162
  l.xpath("./p | ./div | ./table").each_with_index do |p, i|
153
- next if i == 0
163
+ next if i.zero?
164
+
154
165
  p.wrap(%{<div class="ListContLevel#{lvl}"/>})
155
166
  end
156
167
  list_add(l.xpath(".//ul") - l.xpath(".//ul//ul | .//ol//ul"), lvl + 1)
@@ -162,20 +173,21 @@ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml">
162
173
  def word_table_align(docxml)
163
174
  docxml.xpath("//td[@align]/p | //th[@align]/p").each do |p|
164
175
  next if p["align"]
165
- style_update(p, "text-align: #{p.parent["align"]}")
176
+
177
+ style_update(p, "text-align: #{p.parent['align']}")
166
178
  end
167
179
  end
168
180
 
169
181
  def word_table_separator(docxml)
170
182
  docxml.xpath("//p[@class = 'TableTitle']").each do |t|
171
183
  next unless t.children.empty?
184
+
172
185
  t["style"] = t["style"].sub(/;?$/, ";font-size:0pt;")
173
186
  t.children = "&nbsp;"
174
187
  end
175
188
  end
176
189
 
177
- def word_annex_cleanup(docxml)
178
- end
190
+ def word_annex_cleanup(docxml); end
179
191
 
180
192
  def word_example_cleanup(docxml)
181
193
  docxml.xpath("//div[@class = 'example']//p[not(@class)]").each do |p|
@@ -194,19 +206,21 @@ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml">
194
206
  docxml.xpath("//div[p/br]").each do |d|
195
207
  /^WordSection\d+_\d+$/.match(d["class"]) or next
196
208
  d.elements[0].name == "p" && !d.elements[0].elements.empty? or next
197
- d.elements[0].elements[0].name == "br" && d.elements[0].elements[0]["style"] ==
198
- "mso-special-character:line-break;page-break-before:always" or next
209
+ d.elements[0].elements[0].name == "br" &&
210
+ d.elements[0].elements[0]["style"] ==
211
+ "mso-special-character:line-break;page-break-before:always" or next
199
212
  d.elements[0].remove
200
213
  end
201
214
  end
202
215
 
203
216
  def word_footnote_format(docxml)
204
- # the content is in a[@epub:type = 'footnote']//sup, but in Word,
217
+ # the content is in a[@epub:type = 'footnote']//sup, but in Word,
205
218
  # we need to inject content around the autonumbered footnote reference
206
219
  docxml.xpath("//a[@epub:type = 'footnote']").each do |x|
207
220
  footnote_reference_format(x)
208
221
  end
209
- docxml.xpath("//a[@class = 'TableFootnoteRef'] | //span[@class = 'TableFootnoteRef']").each do |x|
222
+ docxml.xpath("//a[@class = 'TableFootnoteRef'] | "\
223
+ "//span[@class = 'TableFootnoteRef']").each do |x|
210
224
  table_footnote_reference_format(x)
211
225
  end
212
226
  docxml
@@ -8,25 +8,27 @@ module IsoDoc::XrefGen
8
8
  "-"
9
9
  end
10
10
 
11
- def subfigure_increment(j, c, t)
12
- if t.parent.name == "figure" then j += 1
11
+ def subfigure_increment(idx, counter, elem)
12
+ if elem.parent.name == "figure" then idx += 1
13
13
  else
14
- j = 0
15
- c.increment(t)
14
+ idx = 0
15
+ counter.increment(elem)
16
16
  end
17
- j
17
+ idx
18
18
  end
19
19
 
20
20
  def sequential_figure_names(clause)
21
21
  c = Counter.new
22
22
  j = 0
23
- clause.xpath(ns(".//figure | .//sourcecode[not(ancestor::example)]")).
24
- each do |t|
23
+ clause.xpath(ns(".//figure | .//sourcecode[not(ancestor::example)]"))
24
+ .each do |t|
25
25
  j = subfigure_increment(j, c, t)
26
26
  label = c.print + (j.zero? ? "" : "-#{j}")
27
27
  next if t["id"].nil? || t["id"].empty?
28
- @anchors[t["id"]] =
29
- anchor_struct(label, nil, @labels["figure"], "figure", t["unnumbered"])
28
+
29
+ @anchors[t["id"]] = anchor_struct(
30
+ label, nil, @labels["figure"], "figure", t["unnumbered"]
31
+ )
30
32
  end
31
33
  end
32
34
 
@@ -34,8 +36,11 @@ module IsoDoc::XrefGen
34
36
  c = Counter.new
35
37
  clause.xpath(ns(".//table")).each do |t|
36
38
  next if t["id"].nil? || t["id"].empty?
37
- @anchors[t["id"]] = anchor_struct(c.increment(t).print, nil,
38
- @labels["table"], "table", t["unnumbered"])
39
+
40
+ @anchors[t["id"]] = anchor_struct(
41
+ c.increment(t).print, nil,
42
+ @labels["table"], "table", t["unnumbered"]
43
+ )
39
44
  end
40
45
  end
41
46
 
@@ -43,10 +48,12 @@ module IsoDoc::XrefGen
43
48
  c = Counter.new
44
49
  clause.xpath(ns(".//formula")).each do |t|
45
50
  next if t["id"].nil? || t["id"].empty?
46
- @anchors[t["id"]] =
47
- anchor_struct(c.increment(t).print, t,
48
- t["inequality"] ? @labels["inequality"] : @labels["formula"],
49
- "formula", t["unnumbered"])
51
+
52
+ @anchors[t["id"]] = anchor_struct(
53
+ c.increment(t).print, t,
54
+ t["inequality"] ? @labels["inequality"] : @labels["formula"],
55
+ "formula", t["unnumbered"]
56
+ )
50
57
  end
51
58
  end
52
59
 
@@ -57,22 +64,27 @@ module IsoDoc::XrefGen
57
64
  c = Counter.new
58
65
  clause.xpath(ns(".//#{klass}#{FIRST_LVL_REQ}")).each do |t|
59
66
  next if t["id"].nil? || t["id"].empty?
67
+
60
68
  id = c.increment(t).print
61
69
  @anchors[t["id"]] = anchor_struct(id, t, label, klass, t["unnumbered"])
62
70
  sequential_permission_names2(t, id)
63
71
  end
64
72
  end
65
73
 
66
- def sequential_permission_names2(t, id)
67
- sequential_permission_names1(t, id, "permission", @labels["permission"])
68
- sequential_permission_names1(t, id, "requirement", @labels["requirement"])
69
- sequential_permission_names1(t, id, "recommendation", @labels["recommendation"])
74
+ def sequential_permission_names2(elem, ident)
75
+ sequential_permission_names1(elem, ident, "permission",
76
+ @labels["permission"])
77
+ sequential_permission_names1(elem, ident, "requirement",
78
+ @labels["requirement"])
79
+ sequential_permission_names1(elem, ident, "recommendation",
80
+ @labels["recommendation"])
70
81
  end
71
82
 
72
83
  def sequential_permission_names1(block, lbl, klass, label)
73
84
  c = Counter.new
74
85
  block.xpath(ns("./#{klass}")).each do |t|
75
86
  next if t["id"].nil? || t["id"].empty?
87
+
76
88
  id = "#{lbl}#{hierfigsep}#{c.increment(t).print}"
77
89
  @anchors[t["id"]] = anchor_struct(id, t, label, klass, t["unnumbered"])
78
90
  sequential_permission_names2(t, id)
@@ -85,20 +97,22 @@ module IsoDoc::XrefGen
85
97
  sequential_formula_names(clause)
86
98
  sequential_permission_names(clause, "permission", @labels["permission"])
87
99
  sequential_permission_names(clause, "requirement", @labels["requirement"])
88
- sequential_permission_names(clause, "recommendation", @labels["recommendation"])
100
+ sequential_permission_names(clause, "recommendation",
101
+ @labels["recommendation"])
89
102
  end
90
103
 
91
104
  def hierarchical_figure_names(clause, num)
92
105
  c = Counter.new
93
106
  j = 0
94
- clause.xpath(ns(".//figure | .//sourcecode[not(ancestor::example)]")).
95
- each do |t|
107
+ clause.xpath(ns(".//figure | .//sourcecode[not(ancestor::example)]"))
108
+ .each do |t|
96
109
  j = subfigure_increment(j, c, t)
97
110
  label = "#{num}#{hiersep}#{c.print}" +
98
111
  (j.zero? ? "" : "#{hierfigsep}#{j}")
99
112
  next if t["id"].nil? || t["id"].empty?
100
- @anchors[t["id"]] = anchor_struct(label, nil, @labels["figure"], "figure",
101
- t["unnumbered"])
113
+
114
+ @anchors[t["id"]] = anchor_struct(label, nil, @labels["figure"],
115
+ "figure", t["unnumbered"])
102
116
  end
103
117
  end
104
118
 
@@ -106,6 +120,7 @@ module IsoDoc::XrefGen
106
120
  c = Counter.new
107
121
  clause.xpath(ns(".//table")).each do |t|
108
122
  next if t["id"].nil? || t["id"].empty?
123
+
109
124
  @anchors[t["id"]] =
110
125
  anchor_struct("#{num}#{hiersep}#{c.increment(t).print}",
111
126
  nil, @labels["table"], "table", t["unnumbered"])
@@ -116,7 +131,8 @@ module IsoDoc::XrefGen
116
131
  hierarchical_table_names(clause, num)
117
132
  hierarchical_figure_names(clause, num)
118
133
  hierarchical_formula_names(clause, num)
119
- hierarchical_permission_names(clause, num, "permission", @labels["permission"])
134
+ hierarchical_permission_names(clause, num, "permission",
135
+ @labels["permission"])
120
136
  hierarchical_permission_names(clause, num, "requirement",
121
137
  @labels["requirement"])
122
138
  hierarchical_permission_names(clause, num, "recommendation",
@@ -127,10 +143,12 @@ module IsoDoc::XrefGen
127
143
  c = Counter.new
128
144
  clause.xpath(ns(".//formula")).each do |t|
129
145
  next if t["id"].nil? || t["id"].empty?
130
- @anchors[t["id"]] =
131
- anchor_struct("#{num}#{hiersep}#{c.increment(t).print}", nil,
132
- t["inequality"] ? @labels["inequality"] : @labels["formula"],
133
- "formula", t["unnumbered"])
146
+
147
+ @anchors[t["id"]] = anchor_struct(
148
+ "#{num}#{hiersep}#{c.increment(t).print}", nil,
149
+ t["inequality"] ? @labels["inequality"] : @labels["formula"],
150
+ "formula", t["unnumbered"]
151
+ )
134
152
  end
135
153
  end
136
154
 
@@ -138,24 +156,31 @@ module IsoDoc::XrefGen
138
156
  c = Counter.new
139
157
  clause.xpath(ns(".//#{klass}#{FIRST_LVL_REQ}")).each do |t|
140
158
  next if t["id"].nil? || t["id"].empty?
159
+
141
160
  id = "#{num}#{hiersep}#{c.increment(t).print}"
142
- @anchors[t["id"]] = anchor_struct(id, nil, label, klass, t["unnumbered"])
161
+ @anchors[t["id"]] =
162
+ anchor_struct(id, nil, label, klass, t["unnumbered"])
143
163
  hierarchical_permission_names2(t, id)
144
164
  end
145
165
  end
146
166
 
147
- def hierarchical_permission_names2(t, id)
148
- hierarchical_permission_names1(t, id, "permission", @labels["permission"])
149
- hierarchical_permission_names1(t, id, "requirement", @labels["requirement"])
150
- hierarchical_permission_names1(t, id, "recommendation", @labels["recommendation"])
167
+ def hierarchical_permission_names2(elem, ident)
168
+ hierarchical_permission_names1(elem, ident, "permission",
169
+ @labels["permission"])
170
+ hierarchical_permission_names1(elem, ident, "requirement",
171
+ @labels["requirement"])
172
+ hierarchical_permission_names1(elem, ident, "recommendation",
173
+ @labels["recommendation"])
151
174
  end
152
175
 
153
176
  def hierarchical_permission_names1(block, lbl, klass, label)
154
177
  c = Counter.new
155
178
  block.xpath(ns("./#{klass}")).each do |t|
156
179
  next if t["id"].nil? || t["id"].empty?
180
+
157
181
  id = "#{lbl}#{hierfigsep}#{c.increment(t).print}"
158
- @anchors[t["id"]] = anchor_struct(id, nil, label, klass, t["unnumbered"])
182
+ @anchors[t["id"]] =
183
+ anchor_struct(id, nil, label, klass, t["unnumbered"])
159
184
  hierarchical_permission_names2(t, id)
160
185
  end
161
186
  end
@@ -60,17 +60,17 @@ module IsoDoc::XrefGen
60
60
  end
61
61
  end
62
62
 
63
- def middle_section_asset_names(d)
63
+ def middle_section_asset_names(doc)
64
64
  middle_sections = "//clause[@type = 'scope'] | "\
65
65
  "#{@klass.norm_ref_xpath} | "\
66
66
  "//sections/terms | //preface/* | "\
67
67
  "//sections/definitions | //clause[parent::sections]"
68
- sequential_asset_names(d.xpath(ns(middle_sections)))
68
+ sequential_asset_names(doc.xpath(ns(middle_sections)))
69
69
  end
70
70
 
71
- def clause_names(docxml, n)
71
+ def clause_names(docxml, num)
72
72
  docxml.xpath(ns(@klass.middle_clause(docxml))).each_with_index do |c, _i|
73
- section_names(c, n, 1)
73
+ section_names(c, num, 1)
74
74
  end
75
75
  end
76
76
 
@@ -0,0 +1,3 @@
1
+ <script>
2
+ This is > also a script
3
+ </script>
@@ -472,96 +472,90 @@ RSpec.describe IsoDoc do
472
472
  end
473
473
 
474
474
  it "processes paragraphs containing notes" do
475
- expect(xmlpp(strip_guid(IsoDoc::HtmlConvert.new({})
476
- .convert("test", <<~"INPUT", true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
477
- <iso-standard xmlns="http://riboseinc.com/isoxml">
478
- <preface><foreword>
479
- <p id="A">ABC <note id="B"><name>NOTE 1</name><p id="C">XYZ</p></note>
480
- <note id="B1"><name>NOTE 2</name><p id="C1">XYZ1</p></note></p>
481
- </foreword></preface>
482
- </iso-standard>
483
- INPUT
484
- #{HTML_HDR}
485
- <br/>
486
- <div>
487
- <h1 class='ForewordTitle'>Foreword</h1>
488
- <p id='A'>
489
- ABC
490
- <div id='B' class='Note'>
491
- <p>
492
- <span class='note_label'>NOTE 1</span>
493
- &#160; XYZ
494
- </p>
495
- </div>
496
- <div id='B1' class='Note'>
497
- <p>
498
- <span class='note_label'>NOTE 2</span>
499
- &#160; XYZ1
500
- </p>
501
- </div>
502
- </p>
503
- </div>
504
- <p class='zzSTDTitle1'/>
505
- </div>
506
- </body>
507
- </html>
508
- OUTPUT
509
- end
510
-
511
- it "processes paragraphs containing notes (Word)" do
512
- expect(xmlpp(strip_guid(IsoDoc::WordConvert.new({})
513
- .convert("test", <<~"INPUT", true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
514
- <iso-standard xmlns="http://riboseinc.com/isoxml">
515
- <preface><foreword>
516
- <p id="A">ABC <note id="B"><name>NOTE 1</name><p id="C">XYZ</p></note>
517
- <note id="B1"><name>NOTE 2</name><p id="C1">XYZ1</p></note></p>
518
- </foreword></preface>
519
- </iso-standard>
520
- INPUT
521
- <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en">
522
- <head>
523
- <style/>
524
- </head>
525
- <body lang='EN-US' link='blue' vlink='#954F72'>
526
- <div class='WordSection1'>
527
- <p>&#160;</p>
528
- </div>
529
- <p>
530
- <br clear='all' class='section'/>
531
- </p>
532
- <div class='WordSection2'>
533
- <p>
534
- <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
535
- </p>
536
- <div>
537
- <h1 class='ForewordTitle'>Foreword</h1>
538
- <p id='A'>ABC </p>
539
- <div id='B' class='Note'>
540
- <p class='Note'>
541
- <span class='note_label'>NOTE 1</span>
542
- <span style='mso-tab-count:1'>&#160; </span>
543
- XYZ
544
- </p>
545
- </div>
546
- <div id='B1' class='Note'>
547
- <p class='Note'>
548
- <span class='note_label'>NOTE 2</span>
549
- <span style='mso-tab-count:1'>&#160; </span>
550
- XYZ1
475
+ input = <<~INPUT
476
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
477
+ <preface><foreword>
478
+ <p id="A">ABC <note id="B"><name>NOTE 1</name><p id="C">XYZ</p></note>
479
+ <note id="B1"><name>NOTE 2</name><p id="C1">XYZ1</p></note></p>
480
+ </foreword></preface>
481
+ </iso-standard>
482
+ INPUT
483
+ html = <<~OUTPUT
484
+ #{HTML_HDR}
485
+ <br/>
486
+ <div>
487
+ <h1 class='ForewordTitle'>Foreword</h1>
488
+ <p id='A'>
489
+ ABC
490
+ <div id='B' class='Note'>
491
+ <p>
492
+ <span class='note_label'>NOTE 1</span>
493
+ &#160; XYZ
494
+ </p>
495
+ </div>
496
+ <div id='B1' class='Note'>
497
+ <p>
498
+ <span class='note_label'>NOTE 2</span>
499
+ &#160; XYZ1
500
+ </p>
501
+ </div>
551
502
  </p>
552
503
  </div>
504
+ <p class='zzSTDTitle1'/>
553
505
  </div>
554
- <p>&#160;</p>
555
- </div>
506
+ </body>
507
+ </html>
508
+ OUTPUT
509
+
510
+ doc = <<~OUTPUT
511
+ <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en">
512
+ <head>
513
+ <style/>
514
+ </head>
515
+ <body lang='EN-US' link='blue' vlink='#954F72'>
516
+ <div class='WordSection1'>
517
+ <p>&#160;</p>
518
+ </div>
519
+ <p>
520
+ <br clear='all' class='section'/>
521
+ </p>
522
+ <div class='WordSection2'>
556
523
  <p>
557
- <br clear='all' class='section'/>
524
+ <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
558
525
  </p>
559
- <div class='WordSection3'>
560
- <p class='zzSTDTitle1'/>
526
+ <div>
527
+ <h1 class='ForewordTitle'>Foreword</h1>
528
+ <p id='A'>ABC </p>
529
+ <div id='B' class='Note'>
530
+ <p class='Note'>
531
+ <span class='note_label'>NOTE 1</span>
532
+ <span style='mso-tab-count:1'>&#160; </span>
533
+ XYZ
534
+ </p>
535
+ </div>
536
+ <div id='B1' class='Note'>
537
+ <p class='Note'>
538
+ <span class='note_label'>NOTE 2</span>
539
+ <span style='mso-tab-count:1'>&#160; </span>
540
+ XYZ1
541
+ </p>
542
+ </div>
561
543
  </div>
562
- </body>
563
- </html>
564
- OUTPUT
544
+ <p>&#160;</p>
545
+ </div>
546
+ <p>
547
+ <br clear='all' class='section'/>
548
+ </p>
549
+ <div class='WordSection3'>
550
+ <p class='zzSTDTitle1'/>
551
+ </div>
552
+ </body>
553
+ </html>
554
+ OUTPUT
555
+ expect(xmlpp(strip_guid(IsoDoc::HtmlConvert.new({})
556
+ .convert("test", input, true)))).to be_equivalent_to xmlpp(html)
557
+ expect(xmlpp(strip_guid(IsoDoc::WordConvert.new({})
558
+ .convert("test", input, true)))).to be_equivalent_to xmlpp(doc)
565
559
  end
566
560
 
567
561
  it "processes figures" do
@@ -823,7 +817,7 @@ RSpec.describe IsoDoc do
823
817
 
824
818
  it "converts SVG (Word)" do
825
819
  FileUtils.rm_rf "spec/assets/odf1.emf"
826
- expect(xmlpp(strip_guid(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true).gsub(/['"][^'".]+(?<!odf1)(?<!odf)\.emf['"]/, "'_.emf'").gsub(/['"][^'".]+\.(gif|xml)['"]/, "'_.\\1'").gsub(/mso-bookmark:_Ref\d+/, "mso-bookmark:_Ref")))).to be_equivalent_to xmlpp(<<~"OUTPUT")
820
+ input = <<~INPUT
827
821
  <iso-standard xmlns="http://riboseinc.com/isoxml">
828
822
  <preface><foreword>
829
823
  <figure id="figureA-1">
@@ -835,6 +829,7 @@ RSpec.describe IsoDoc do
835
829
  </foreword></preface>
836
830
  </iso-standard>
837
831
  INPUT
832
+ output = <<~OUTPUT
838
833
  <html xmlns:epub='http://www.idpf.org/2007/ops' lang='en'>
839
834
  <head>
840
835
  <style>
@@ -871,6 +866,12 @@ RSpec.describe IsoDoc do
871
866
  </body>
872
867
  </html>
873
868
  OUTPUT
869
+ expect(xmlpp(strip_guid(IsoDoc::WordConvert.new({})
870
+ .convert("test", input, true)
871
+ .gsub(/['"][^'".]+(?<!odf1)(?<!odf)\.emf['"]/, "'_.emf'")
872
+ .gsub(/['"][^'".]+\.(gif|xml)['"]/, "'_.\\1'")
873
+ .gsub(/mso-bookmark:_Ref\d+/, "mso-bookmark:_Ref"))))
874
+ .to be_equivalent_to xmlpp(output)
874
875
  end
875
876
 
876
877
  context "disable inkscape" do
@@ -881,58 +882,63 @@ RSpec.describe IsoDoc do
881
882
  allow_any_instance_of(IsoDoc::WordFunction::Body)
882
883
  .to receive(:inkscape_installed?)
883
884
 
884
- expect(xmlpp(strip_guid(IsoDoc::WordConvert.new({})
885
- .convert("test", <<~"INPUT", true).gsub(/['"][^'".]+(?<!odf1)(?<!odf)\.svg['"]/, "'_.svg'").gsub(/mso-bookmark:_Ref\d+/, "mso-bookmark:_Ref")))).to be_equivalent_to xmlpp(<<~"OUTPUT")
886
- <iso-standard xmlns="http://riboseinc.com/isoxml">
887
- <preface><foreword>
888
- <figure id="figureA-1">
889
- <image src="spec/assets/odf.svg" mimetype="image/svg+xml"/>
890
- <image src="spec/assets/odf1.svg" mimetype="image/svg+xml"/>
891
- <image src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj4KICA8Y2lyY2xlIGZpbGw9IiMwMDkiIHI9IjQ1IiBjeD0iNTAiIGN5PSI1MCIvPgogIDxwYXRoIGQ9Ik0zMywyNkg3OEEzNywzNywwLDAsMSwzMyw4M1Y1N0g1OVY0M0gzM1oiIGZpbGw9IiNGRkYiLz4KPC9zdmc+Cg==" id="_d3731866-1a07-435a-a6c2-1acd41023a4e" mimetype="image/svg+xml" height="auto" width="auto"/>
892
- </figure>
893
- </foreword></preface>
894
- </iso-standard>
885
+ input = <<~INPUT
886
+ <iso-standard xmlns="http://riboseinc.com/isoxml">
887
+ <preface><foreword>
888
+ <figure id="figureA-1">
889
+ <image src="spec/assets/odf.svg" mimetype="image/svg+xml"/>
890
+ <image src="spec/assets/odf1.svg" mimetype="image/svg+xml"/>
891
+ <image src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj4KICA8Y2lyY2xlIGZpbGw9IiMwMDkiIHI9IjQ1IiBjeD0iNTAiIGN5PSI1MCIvPgogIDxwYXRoIGQ9Ik0zMywyNkg3OEEzNywzNywwLDAsMSwzMyw4M1Y1N0g1OVY0M0gzM1oiIGZpbGw9IiNGRkYiLz4KPC9zdmc+Cg==" id="_d3731866-1a07-435a-a6c2-1acd41023a4e" mimetype="image/svg+xml" height="auto" width="auto"/>
892
+ </figure>
893
+ </foreword></preface>
894
+ </iso-standard>
895
895
  INPUT
896
- <html xmlns:epub='http://www.idpf.org/2007/ops' lang='en'>
897
- <head>
898
- <style>
899
- </style>
900
- </head>
901
- <body lang='EN-US' link='blue' vlink='#954F72'>
902
- <div class='WordSection1'>
903
- <p>&#160;</p>
904
- </div>
905
- <p>
906
- <br clear='all' class='section'/>
907
- </p>
908
- <div class='WordSection2'>
909
- <p>
910
- <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
911
- </p>
912
- <div>
913
- <h1 class='ForewordTitle'>Foreword</h1>
914
- <div id='figureA-1' class='figure'>
915
- <img src='spec/assets/odf.emf'/>
916
- <img src='spec/assets/odf1.svg'/>
917
- <img src='_.svg' height='auto' width='auto'/>
918
- </div>
919
- </div>
920
- <p>&#160;</p>
921
- </div>
922
- <p>
923
- <br clear='all' class='section'/>
924
- </p>
925
- <div class='WordSection3'>
926
- <p class='zzSTDTitle1'/>
927
- </div>
928
- </body>
929
- </html>
896
+ output = <<~OUTPUT
897
+ <html xmlns:epub='http://www.idpf.org/2007/ops' lang='en'>
898
+ <head>
899
+ <style>
900
+ </style>
901
+ </head>
902
+ <body lang='EN-US' link='blue' vlink='#954F72'>
903
+ <div class='WordSection1'>
904
+ <p>&#160;</p>
905
+ </div>
906
+ <p>
907
+ <br clear='all' class='section'/>
908
+ </p>
909
+ <div class='WordSection2'>
910
+ <p>
911
+ <br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
912
+ </p>
913
+ <div>
914
+ <h1 class='ForewordTitle'>Foreword</h1>
915
+ <div id='figureA-1' class='figure'>
916
+ <img src='spec/assets/odf.emf'/>
917
+ <img src='spec/assets/odf1.svg'/>
918
+ <img src='_.svg' height='auto' width='auto'/>
919
+ </div>
920
+ </div>
921
+ <p>&#160;</p>
922
+ </div>
923
+ <p>
924
+ <br clear='all' class='section'/>
925
+ </p>
926
+ <div class='WordSection3'>
927
+ <p class='zzSTDTitle1'/>
928
+ </div>
929
+ </body>
930
+ </html>
930
931
  OUTPUT
932
+ expect(xmlpp(strip_guid(IsoDoc::WordConvert.new({})
933
+ .convert("test", input, true)
934
+ .gsub(/['"][^'".]+(?<!odf1)(?<!odf)\.svg['"]/, "'_.svg'")
935
+ .gsub(/mso-bookmark:_Ref\d+/, "mso-bookmark:_Ref"))))
936
+ .to be_equivalent_to xmlpp(output)
931
937
  end
932
938
  end
933
939
 
934
- it "processes examples (Presentation XML)" do
935
- expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
940
+ it "processes examples" do
941
+ input = <<~INPUT
936
942
  <iso-standard xmlns="http://riboseinc.com/isoxml">
937
943
  <preface><foreword>
938
944
  <example id="samplecode" keep-with-next="true" keep-lines-together="true">
@@ -945,6 +951,7 @@ RSpec.describe IsoDoc do
945
951
  </foreword></preface>
946
952
  </iso-standard>
947
953
  INPUT
954
+ presxml = <<~OUTPUT
948
955
  <?xml version='1.0'?>
949
956
  <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
950
957
  <preface>
@@ -960,22 +967,8 @@ RSpec.describe IsoDoc do
960
967
  </preface>
961
968
  </iso-standard>
962
969
  OUTPUT
963
- end
964
970
 
965
- it "processes examples (HTML)" do
966
- expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
967
- <iso-standard xmlns='http://riboseinc.com/isoxml'>
968
- <preface>
969
- <foreword>
970
- <example id='samplecode' keep-with-next='true' keep-lines-together='true'>
971
- <name>EXAMPLE&#xA0;&#x2014; Title</name>
972
- <p>Hello</p>
973
- <sourcecode id='X'><name>Sample</name></sourcecode>
974
- </example>
975
- </foreword>
976
- </preface>
977
- </iso-standard>
978
- INPUT
971
+ html = <<~OUTPUT
979
972
  #{HTML_HDR}
980
973
  <br/>
981
974
  <div>
@@ -983,7 +976,12 @@ RSpec.describe IsoDoc do
983
976
  <div id="samplecode" class="example" style="page-break-after: avoid;page-break-inside: avoid;">
984
977
  <p class="example-title">EXAMPLE&#160;&#8212; Title</p>
985
978
  <p>Hello</p>
986
- <pre id='X' class='prettyprint '/>
979
+ <pre id='X' class='prettyprint '>
980
+ <br/>
981
+ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
982
+ <br/>
983
+ &#160;&#160;&#160;&#160;&#160;&#160;&#160;
984
+ </pre>
987
985
  <p class='SourceTitle' style='text-align:center;'>Sample</p>
988
986
  </div>
989
987
  </div>
@@ -992,22 +990,7 @@ RSpec.describe IsoDoc do
992
990
  </body>
993
991
  </html>
994
992
  OUTPUT
995
- end
996
-
997
- it "processes examples (Word)" do
998
- expect(xmlpp(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
999
- <iso-standard xmlns='http://riboseinc.com/isoxml'>
1000
- <preface>
1001
- <foreword>
1002
- <example id='samplecode' keep-with-next='true' keep-lines-together='true'>
1003
- <name>EXAMPLE&#xA0;&#x2014; Title</name>
1004
- <p>Hello</p>
1005
- <sourcecode id='X'><name>Sample</name></sourcecode>
1006
- </example>
1007
- </foreword>
1008
- </preface>
1009
- </iso-standard>
1010
- INPUT
993
+ doc = <<~OUTPUT
1011
994
  <html xmlns:epub='http://www.idpf.org/2007/ops' lang='en'><head><style>
1012
995
  </style>
1013
996
  </head>
@@ -1027,7 +1010,12 @@ RSpec.describe IsoDoc do
1027
1010
  <div id='samplecode' class='example' style='page-break-after: avoid;page-break-inside: avoid;'>
1028
1011
  <p class='example-title'>EXAMPLE&#160;&#8212; Title</p>
1029
1012
  <p>Hello</p>
1030
- <p id='X' class='Sourcecode'/>
1013
+ <p id='X' class='Sourcecode'>
1014
+ <br/>
1015
+ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
1016
+ <br/>
1017
+ &#160;&#160;&#160;&#160;&#160;&#160;&#160;
1018
+ </p>
1031
1019
  <p class='SourceTitle' style='text-align:center;'>Sample</p>
1032
1020
  </div>
1033
1021
  </div>
@@ -1042,10 +1030,13 @@ RSpec.describe IsoDoc do
1042
1030
  </body>
1043
1031
  </html>
1044
1032
  OUTPUT
1033
+ expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
1034
+ expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
1035
+ expect(xmlpp(IsoDoc::WordConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(doc)
1045
1036
  end
1046
1037
 
1047
1038
  it "processes sequences of examples" do
1048
- expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1039
+ input = <<~INPUT
1049
1040
  <iso-standard xmlns="http://riboseinc.com/isoxml">
1050
1041
  <preface><foreword>
1051
1042
  <example id="samplecode">
@@ -1061,6 +1052,7 @@ RSpec.describe IsoDoc do
1061
1052
  </foreword></preface>
1062
1053
  </iso-standard>
1063
1054
  INPUT
1055
+ output = <<~OUTPUT
1064
1056
  <?xml version='1.0'?>
1065
1057
  <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
1066
1058
  <preface>
@@ -1081,10 +1073,11 @@ RSpec.describe IsoDoc do
1081
1073
  </preface>
1082
1074
  </iso-standard>
1083
1075
  OUTPUT
1076
+ expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", input, true))).to be_equivalent_to xmlpp(output)
1084
1077
  end
1085
1078
 
1086
- it "processes sourcecode (Presentation XML)" do
1087
- expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1079
+ it "processes sourcecode" do
1080
+ input = <<~INPUT
1088
1081
  <iso-standard xmlns="http://riboseinc.com/isoxml">
1089
1082
  <preface><foreword>
1090
1083
  <sourcecode lang="ruby" id="samplecode">
@@ -1097,6 +1090,7 @@ RSpec.describe IsoDoc do
1097
1090
  </foreword></preface>
1098
1091
  </iso-standard>
1099
1092
  INPUT
1093
+ presxml = <<~OUTPUT
1100
1094
  <?xml version='1.0'?>
1101
1095
  <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
1102
1096
  <preface>
@@ -1113,98 +1107,55 @@ RSpec.describe IsoDoc do
1113
1107
  </preface>
1114
1108
  </iso-standard>
1115
1109
  OUTPUT
1116
- end
1117
1110
 
1118
- it "processes sourcecode (HTML)" do
1119
- expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1120
- <iso-standard xmlns='http://riboseinc.com/isoxml'>
1121
- <preface>
1122
- <foreword>
1123
- <sourcecode lang='ruby' id='samplecode'>
1124
- <name>
1125
- Figure 1&#xA0;&#x2014; Ruby
1126
- <em>code</em>
1127
- </name>
1128
- puts x
1129
- </sourcecode>
1130
- <sourcecode unnumbered='true'>
1131
- Que?
1132
- </sourcecode>
1133
- </foreword>
1134
- </preface>
1135
- </iso-standard>
1136
- INPUT
1111
+ html = <<~OUTPUT
1137
1112
  #{HTML_HDR}
1138
1113
  <br/>
1139
1114
  <div>
1140
1115
  <h1 class="ForewordTitle">Foreword</h1>
1141
- <pre id="samplecode" class="prettyprint lang-rb"><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br/>&#160; puts x<br/></pre>
1116
+ <pre id="samplecode" class="prettyprint lang-rb"><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; puts x<br/>&#160;&#160;&#160;&#160;&#160;</pre>
1142
1117
  <p class="SourceTitle" style="text-align:center;">Figure 1&#160;&#8212; Ruby <i>code</i></p>
1143
- <pre class='prettyprint '>
1144
- <br/>
1145
- Que?
1146
- <br/>
1147
- </pre>
1118
+ <pre class='prettyprint '> Que? </pre>
1148
1119
  </div>
1149
1120
  <p class="zzSTDTitle1"/>
1150
1121
  </div>
1151
1122
  </body>
1152
1123
  </html>
1153
1124
  OUTPUT
1154
- end
1155
1125
 
1156
- it "processes sourcecode (Word)" do
1157
- expect(xmlpp(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
1158
- <iso-standard xmlns='http://riboseinc.com/isoxml'>
1159
- <preface>
1160
- <foreword>
1161
- <sourcecode lang='ruby' id='samplecode'>
1162
- <name>
1163
- Figure 1&#xA0;&#x2014; Ruby
1164
- <em>code</em>
1165
- </name>
1166
- puts x
1167
- </sourcecode>
1168
- <sourcecode unnumbered='true'>
1169
- Que?
1170
- </sourcecode>
1171
- </foreword>
1172
- </preface>
1173
- </iso-standard>
1174
- INPUT
1175
- <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en">
1176
- <head><style/></head>
1177
- <body lang="EN-US" link="blue" vlink="#954F72">
1178
- <div class="WordSection1">
1179
- <p>&#160;</p>
1180
- </div>
1181
- <p>
1182
- <br clear="all" class="section"/>
1183
- </p>
1184
- <div class="WordSection2">
1185
- <p>
1186
- <br clear="all" style="mso-special-character:line-break;page-break-before:always"/>
1187
- </p>
1188
- <div>
1189
- <h1 class="ForewordTitle">Foreword</h1>
1190
- <p id="samplecode" class="Sourcecode"><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br/>&#160; puts x<br/></p><p class="SourceTitle" style="text-align:center;">Figure 1&#160;&#8212; Ruby <i>code</i></p>
1191
- <p class='Sourcecode'>
1192
- <br/>
1193
- Que?
1194
- <br/>
1126
+ doc = <<~OUTPUT
1127
+ <html xmlns:epub="http://www.idpf.org/2007/ops" lang="en">
1128
+ <head><style/></head>
1129
+ <body lang="EN-US" link="blue" vlink="#954F72">
1130
+ <div class="WordSection1">
1131
+ <p>&#160;</p>
1132
+ </div>
1133
+ <p>
1134
+ <br clear="all" class="section"/>
1135
+ </p>
1136
+ <div class="WordSection2">
1137
+ <p>
1138
+ <br clear="all" style="mso-special-character:line-break;page-break-before:always"/>
1139
+ </p>
1140
+ <div>
1141
+ <h1 class="ForewordTitle">Foreword</h1>
1142
+ <p id="samplecode" class="Sourcecode"><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; puts x<br/>&#160;&#160;&#160;&#160;&#160; </p><p class="SourceTitle" style="text-align:center;">Figure 1&#160;&#8212; Ruby <i>code</i></p>
1143
+ <p class='Sourcecode'> Que? </p>
1144
+ </div>
1145
+ <p>&#160;</p>
1146
+ </div>
1147
+ <p>
1148
+ <br clear="all" class="section"/>
1195
1149
  </p>
1196
- </div>
1197
- <p>&#160;</p>
1198
- </div>
1199
- <p>
1200
- <br clear="all" class="section"/>
1201
- </p>
1202
- <div class="WordSection3">
1203
- <p class="zzSTDTitle1"/>
1204
- </div>
1205
- </body>
1206
- </html>
1150
+ <div class="WordSection3">
1151
+ <p class="zzSTDTitle1"/>
1152
+ </div>
1153
+ </body>
1154
+ </html>
1207
1155
  OUTPUT
1156
+ expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
1157
+ expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
1158
+ expect(xmlpp(IsoDoc::WordConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(doc)
1208
1159
  end
1209
1160
 
1210
1161
  it "processes sourcecode with escapes preserved" do