isodoc 1.0.20 → 1.0.21
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 +4 -4
- data/lib/isodoc/base_style/reset.scss +3 -0
- data/lib/isodoc/function/blocks.rb +7 -52
- data/lib/isodoc/function/blocks_example.rb +53 -0
- data/lib/isodoc/function/cleanup.rb +29 -0
- data/lib/isodoc/function/lists.rb +5 -0
- data/lib/isodoc/function/references.rb +6 -15
- data/lib/isodoc/function/section.rb +3 -0
- data/lib/isodoc/function/table.rb +2 -1
- data/lib/isodoc/function/xref_gen.rb +1 -133
- data/lib/isodoc/function/xref_gen_seq.rb +154 -0
- data/lib/isodoc/html_function/footnotes.rb +2 -1
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/word_function/body.rb +18 -2
- data/lib/isodoc/word_function/footnotes.rb +2 -1
- data/lib/isodoc/word_function/postprocess.rb +9 -0
- data/lib/isodoc/word_function/table.rb +1 -0
- data/spec/isodoc/blocks_spec.rb +116 -8
- data/spec/isodoc/cleanup_spec.rb +178 -0
- data/spec/isodoc/lists_spec.rb +96 -0
- data/spec/isodoc/postproc_spec.rb +122 -0
- data/spec/isodoc/section_spec.rb +32 -2
- data/spec/isodoc/table_spec.rb +25 -9
- data/spec/isodoc/xref_spec.rb +105 -17
- metadata +4 -2
@@ -0,0 +1,154 @@
|
|
1
|
+
module IsoDoc::Function
|
2
|
+
module XrefGen
|
3
|
+
def sequential_figure_names(clause)
|
4
|
+
c = Counter.new
|
5
|
+
j = 0
|
6
|
+
clause.xpath(ns(".//figure | .//sourcecode[not(ancestor::example)]")).
|
7
|
+
each do |t|
|
8
|
+
if t.parent.name == "figure" then j += 1
|
9
|
+
else
|
10
|
+
j = 0
|
11
|
+
c.increment(t)
|
12
|
+
end
|
13
|
+
label = c.print + (j.zero? ? "" : "-#{j}")
|
14
|
+
next if t["id"].nil? || t["id"].empty?
|
15
|
+
@anchors[t["id"]] =
|
16
|
+
anchor_struct(label, nil, @figure_lbl, "figure", t["unnumbered"])
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def sequential_table_names(clause)
|
21
|
+
c = Counter.new
|
22
|
+
clause.xpath(ns(".//table")).each do |t|
|
23
|
+
next if t["id"].nil? || t["id"].empty?
|
24
|
+
@anchors[t["id"]] = anchor_struct(c.increment(t).print, nil,
|
25
|
+
@table_lbl, "table", t["unnumbered"])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def sequential_formula_names(clause)
|
30
|
+
c = Counter.new
|
31
|
+
clause.xpath(ns(".//formula")).each do |t|
|
32
|
+
next if t["id"].nil? || t["id"].empty?
|
33
|
+
@anchors[t["id"]] =
|
34
|
+
anchor_struct(c.increment(t).print, t,
|
35
|
+
t["inequality"] ? @inequality_lbl : @formula_lbl,
|
36
|
+
"formula", t["unnumbered"])
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
FIRST_LVL_REQ = "[not(ancestor::permission or ancestor::requirement or "\
|
41
|
+
"ancestor::recommendation)]".freeze
|
42
|
+
|
43
|
+
def sequential_permission_names(clause, klass, label)
|
44
|
+
c = Counter.new
|
45
|
+
clause.xpath(ns(".//#{klass}#{FIRST_LVL_REQ}")).each do |t|
|
46
|
+
next if t["id"].nil? || t["id"].empty?
|
47
|
+
id = c.increment(t).print
|
48
|
+
@anchors[t["id"]] = anchor_struct(id, t, label, klass, t["unnumbered"])
|
49
|
+
sequential_permission_names2(t, id)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def sequential_permission_names2(t, id)
|
54
|
+
sequential_permission_names1(t, id, "permission", @permission_lbl)
|
55
|
+
sequential_permission_names1(t, id, "requirement", @requirement_lbl)
|
56
|
+
sequential_permission_names1(t, id, "recommendation", @recommendation_lbl)
|
57
|
+
end
|
58
|
+
|
59
|
+
def sequential_permission_names1(block, lbl, klass, label)
|
60
|
+
c = Counter.new
|
61
|
+
block.xpath(ns("./#{klass}")).each do |t|
|
62
|
+
next if t["id"].nil? || t["id"].empty?
|
63
|
+
id = "#{lbl}#{hierfigsep}#{c.increment(t).print}"
|
64
|
+
@anchors[t["id"]] = anchor_struct(id, t, label, klass, t["unnumbered"])
|
65
|
+
sequential_permission_names2(t, id)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def sequential_asset_names(clause)
|
70
|
+
sequential_table_names(clause)
|
71
|
+
sequential_figure_names(clause)
|
72
|
+
sequential_formula_names(clause)
|
73
|
+
sequential_permission_names(clause, "permission", @permission_lbl)
|
74
|
+
sequential_permission_names(clause, "requirement", @requirement_lbl)
|
75
|
+
sequential_permission_names(clause, "recommendation", @recommendation_lbl)
|
76
|
+
end
|
77
|
+
|
78
|
+
def hierarchical_figure_names(clause, num)
|
79
|
+
c = Counter.new
|
80
|
+
j = 0
|
81
|
+
clause.xpath(ns(".//figure | .//sourcecode[not(ancestor::example)]")).
|
82
|
+
each do |t|
|
83
|
+
if t.parent.name == "figure" then j += 1
|
84
|
+
else
|
85
|
+
j = 0
|
86
|
+
c.increment(t)
|
87
|
+
end
|
88
|
+
label = "#{num}#{hiersep}#{c.print}" +
|
89
|
+
(j.zero? ? "" : "#{hierfigsep}#{j}")
|
90
|
+
next if t["id"].nil? || t["id"].empty?
|
91
|
+
@anchors[t["id"]] = anchor_struct(label, nil, @figure_lbl, "figure",
|
92
|
+
t["unnumbered"])
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def hierarchical_table_names(clause, num)
|
97
|
+
c = Counter.new
|
98
|
+
clause.xpath(ns(".//table")).each do |t|
|
99
|
+
next if t["id"].nil? || t["id"].empty?
|
100
|
+
@anchors[t["id"]] =
|
101
|
+
anchor_struct("#{num}#{hiersep}#{c.increment(t).print}",
|
102
|
+
nil, @table_lbl, "table", t["unnumbered"])
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def hierarchical_asset_names(clause, num)
|
107
|
+
hierarchical_table_names(clause, num)
|
108
|
+
hierarchical_figure_names(clause, num)
|
109
|
+
hierarchical_formula_names(clause, num)
|
110
|
+
hierarchical_permission_names(clause, num, "permission", @permission_lbl)
|
111
|
+
hierarchical_permission_names(clause, num, "requirement",
|
112
|
+
@requirement_lbl)
|
113
|
+
hierarchical_permission_names(clause, num, "recommendation",
|
114
|
+
@recommendation_lbl)
|
115
|
+
end
|
116
|
+
|
117
|
+
def hierarchical_formula_names(clause, num)
|
118
|
+
c = Counter.new
|
119
|
+
clause.xpath(ns(".//formula")).each do |t|
|
120
|
+
next if t["id"].nil? || t["id"].empty?
|
121
|
+
@anchors[t["id"]] =
|
122
|
+
anchor_struct("#{num}#{hiersep}#{c.increment(t).print}", nil,
|
123
|
+
t["inequality"] ? @inequality_lbl : @formula_lbl,
|
124
|
+
"formula", t["unnumbered"])
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
def hierarchical_permission_names(clause, num, klass, label)
|
129
|
+
c = Counter.new
|
130
|
+
clause.xpath(ns(".//#{klass}#{FIRST_LVL_REQ}")).each do |t|
|
131
|
+
next if t["id"].nil? || t["id"].empty?
|
132
|
+
id = "#{num}#{hiersep}#{c.increment(t).print}"
|
133
|
+
@anchors[t["id"]] = anchor_struct(id, nil, label, klass, t["unnumbered"])
|
134
|
+
hierarchical_permission_names2(t, id)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def hierarchical_permission_names2(t, id)
|
139
|
+
hierarchical_permission_names1(t, id, "permission", @permission_lbl)
|
140
|
+
hierarchical_permission_names1(t, id, "requirement", @requirement_lbl)
|
141
|
+
hierarchical_permission_names1(t, id, "recommendation", @recommendation_lbl)
|
142
|
+
end
|
143
|
+
|
144
|
+
def hierarchical_permission_names1(block, lbl, klass, label)
|
145
|
+
c = Counter.new
|
146
|
+
block.xpath(ns("./#{klass}")).each do |t|
|
147
|
+
next if t["id"].nil? || t["id"].empty?
|
148
|
+
id = "#{lbl}#{hierfigsep}#{c.increment(t).print}"
|
149
|
+
@anchors[t["id"]] = anchor_struct(id, nil, label, klass, t["unnumbered"])
|
150
|
+
hierarchical_permission_names2(t, id)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
@@ -62,7 +62,8 @@ module IsoDoc::HtmlFunction
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def footnote_parse(node, out)
|
65
|
-
|
65
|
+
return table_footnote_parse(node, out) if (@in_table || @in_figure) &&
|
66
|
+
!node.ancestors.map {|m| m.name }.include?("name")
|
66
67
|
fn = node["reference"]
|
67
68
|
attrs = { "epub:type": "footnote", rel: "footnote", href: "#fn:#{fn}" }
|
68
69
|
out.a **attrs do |a|
|
data/lib/isodoc/version.rb
CHANGED
@@ -17,8 +17,6 @@ module IsoDoc::WordFunction
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def make_body1(body, _docxml)
|
20
|
-
#FileUtils.rm_rf tmpimagedir
|
21
|
-
#FileUtils.mkdir tmpimagedir
|
22
20
|
body.div **{ class: "WordSection1" } do |div1|
|
23
21
|
div1.p { |p| p << " " } # placeholder
|
24
22
|
end
|
@@ -228,5 +226,23 @@ module IsoDoc::WordFunction
|
|
228
226
|
"mso-table-overlap:never;border-collapse:collapse;"
|
229
227
|
})
|
230
228
|
end
|
229
|
+
|
230
|
+
def formula_where(dl, out)
|
231
|
+
return unless dl
|
232
|
+
out.p { |p| p << @where_lbl }
|
233
|
+
parse(dl, out)
|
234
|
+
out.parent.at("./table")["class"] = "formula_dl"
|
235
|
+
end
|
236
|
+
|
237
|
+
def li_parse(node, out)
|
238
|
+
out.li **attr_code(id: node["id"]) do |li|
|
239
|
+
if node["uncheckedcheckbox"] == "true"
|
240
|
+
li << '<span class="zzMoveToFollowing">☐ </span>'
|
241
|
+
elsif node["checkedcheckbox"] == "true"
|
242
|
+
li << '<span class="zzMoveToFollowing">☑ </span>'
|
243
|
+
end
|
244
|
+
node.children.each { |n| parse(n, li) }
|
245
|
+
end
|
246
|
+
end
|
231
247
|
end
|
232
248
|
end
|
@@ -78,7 +78,8 @@ module IsoDoc::WordFunction
|
|
78
78
|
end
|
79
79
|
|
80
80
|
def footnote_parse(node, out)
|
81
|
-
return table_footnote_parse(node, out) if @in_table || @in_figure
|
81
|
+
return table_footnote_parse(node, out) if (@in_table || @in_figure) &&
|
82
|
+
!node.ancestors.map {|m| m.name }.include?("name")
|
82
83
|
fn = node["reference"]
|
83
84
|
return seen_footnote_parse(node, out, fn) if @seen_footnote.include?(fn)
|
84
85
|
@fn_bookmarks[fn] = bookmarkid
|
@@ -64,6 +64,7 @@ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml">
|
|
64
64
|
def word_cleanup(docxml)
|
65
65
|
word_annex_cleanup(docxml)
|
66
66
|
word_preface(docxml)
|
67
|
+
word_nested_tables(docxml)
|
67
68
|
word_table_align(docxml)
|
68
69
|
word_table_separator(docxml)
|
69
70
|
word_admonition_images(docxml)
|
@@ -77,6 +78,14 @@ xmlns:m="http://schemas.microsoft.com/office/2004/12/omml">
|
|
77
78
|
docxml
|
78
79
|
end
|
79
80
|
|
81
|
+
def word_nested_tables(docxml)
|
82
|
+
docxml.xpath("//table").each do |t|
|
83
|
+
t.xpath(".//table").reverse.each do |tt|
|
84
|
+
t.next = tt.remove
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
80
89
|
def authority_cleanup1(docxml, klass)
|
81
90
|
dest = docxml.at("//div[@id = 'boilerplate-#{klass}-destination']")
|
82
91
|
auth = docxml.at("//div[@id = 'boilerplate-#{klass}' or @class = 'boilerplate-#{klass}']")
|
@@ -36,6 +36,7 @@ module IsoDoc::WordFunction
|
|
36
36
|
def make_table_attr(node)
|
37
37
|
super.merge(attr_code({
|
38
38
|
summary: node["summary"],
|
39
|
+
width: node["width"],
|
39
40
|
style: "mso-table-lspace:15.0cm;margin-left:423.0pt;"\
|
40
41
|
"mso-table-rspace:15.0cm;margin-right:423.0pt;"\
|
41
42
|
"mso-table-anchor-horizontal:column;"\
|
data/spec/isodoc/blocks_spec.rb
CHANGED
@@ -318,7 +318,7 @@ OUTPUT
|
|
318
318
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
319
319
|
<preface><foreword>
|
320
320
|
<figure id="figureA-1">
|
321
|
-
<name>Split-it-right <em>sample</em> divider</name>
|
321
|
+
<name>Split-it-right <em>sample</em> divider<fn reference="1"><p>X</p></fn></name>
|
322
322
|
<image src="rice_images/rice_image1.png" height="20" width="30" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f0" mimetype="image/png" alt="alttext" title="titletxt"/>
|
323
323
|
<image src="rice_images/rice_image1.png" height="20" width="auto" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f1" mimetype="image/png"/>
|
324
324
|
<image src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7" height="20" width="auto" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f2" mimetype="image/png"/>
|
@@ -353,8 +353,12 @@ B</pre>
|
|
353
353
|
<a href="#_" class="TableFootnoteRef">a</a><aside class="footnote"><div id="fn:_"><span><span id="_" class="TableFootnoteRef">a</span>  </span>
|
354
354
|
<p id="_">The time <span class="stem">(#(t_90)#)</span> was estimated to be 18,2 min for this example.</p>
|
355
355
|
</div></aside>
|
356
|
-
<p><b>Key</b></p><dl><dt><p>A</p></dt><dd><p>B</p></dd></dl>
|
357
|
-
<p class="FigureTitle" style="text-align:center;">Figure 1 — Split-it-right <i>sample</i> divider
|
356
|
+
<p style='page-break-after:avoid;'><b>Key</b></p><dl><dt><p>A</p></dt><dd><p>B</p></dd></dl>
|
357
|
+
<p class="FigureTitle" style="text-align:center;">Figure 1 — Split-it-right <i>sample</i> divider
|
358
|
+
<a rel='footnote' href='#fn:1' epub:type='footnote'>
|
359
|
+
<sup>1</sup>
|
360
|
+
</a>
|
361
|
+
</p></div>
|
358
362
|
<div class="figure" id="figure-B">
|
359
363
|
<pre>A <
|
360
364
|
B</pre>
|
@@ -366,6 +370,9 @@ B</pre>
|
|
366
370
|
</div>
|
367
371
|
</div>
|
368
372
|
<p class="zzSTDTitle1"/>
|
373
|
+
<aside id='fn:1' class='footnote'>
|
374
|
+
<p>X</p>
|
375
|
+
</aside>
|
369
376
|
</div>
|
370
377
|
</body>
|
371
378
|
</html>
|
@@ -373,11 +380,11 @@ B</pre>
|
|
373
380
|
end
|
374
381
|
|
375
382
|
it "processes figures (Word)" do
|
376
|
-
expect(xmlpp(strip_guid(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true).sub(/['"][^'".]+\.gif['"]/, "'_.gif'")))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
383
|
+
expect(xmlpp(strip_guid(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true).sub(/['"][^'".]+\.gif['"]/, "'_.gif'").gsub(/mso-bookmark:_Ref\d+/, "mso-bookmark:_Ref")))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
377
384
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
378
385
|
<preface><foreword>
|
379
386
|
<figure id="figureA-1">
|
380
|
-
<name>Split-it-right sample divider</name>
|
387
|
+
<name>Split-it-right sample divider<fn reference="1"><p>X</p></fn></name>
|
381
388
|
<image src="rice_images/rice_image1.png" height="20" width="30" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f0" mimetype="image/png" alt="alttext" title="titletext"/>
|
382
389
|
<image src="rice_images/rice_image1.png" height="20" width="auto" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f0" mimetype="image/png"/>
|
383
390
|
<image src="data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7" height="20" width="auto" id="_8357ede4-6d44-4672-bac4-9a85e82ab7f0" mimetype="image/png"/>
|
@@ -415,8 +422,16 @@ B</pre>
|
|
415
422
|
<a href="#_" class="TableFootnoteRef">a</a><aside><div id="ftn_"><span><span id="_" class="TableFootnoteRef">a</span><span style="mso-tab-count:1">  </span></span>
|
416
423
|
<p id="_">The time <span class="stem">(#(t_90)#)</span> was estimated to be 18,2 min for this example.</p>
|
417
424
|
</div></aside>
|
418
|
-
<p><b>Key</b></p><table class="dl"><tr><td valign="top" align="left"><p align="left" style="margin-left:0pt;text-align:left;">A</p></td><td valign="top"><p>B</p></td></tr></table>
|
419
|
-
|
425
|
+
<p style='page-break-after:avoid;'><b>Key</b></p><table class="dl"><tr><td valign="top" align="left"><p align="left" style="margin-left:0pt;text-align:left;">A</p></td><td valign="top"><p>B</p></td></tr></table>
|
426
|
+
<p class='FigureTitle' style='text-align:center;'>
|
427
|
+
Figure 1 — Split-it-right sample divider
|
428
|
+
<span style='mso-bookmark:_Ref'>
|
429
|
+
<a href='#ftn1' epub:type='footnote'>
|
430
|
+
<sup>1</sup>
|
431
|
+
</a>
|
432
|
+
</span>
|
433
|
+
</p>
|
434
|
+
</div>
|
420
435
|
<div class="figure" id="figure-B">
|
421
436
|
<pre>A <
|
422
437
|
B</pre>
|
@@ -428,6 +443,9 @@ B</pre>
|
|
428
443
|
<p><br clear="all" class="section"/></p>
|
429
444
|
<div class="WordSection3">
|
430
445
|
<p class="zzSTDTitle1"/>
|
446
|
+
<aside id='ftn1'>
|
447
|
+
<p>X</p>
|
448
|
+
</aside>
|
431
449
|
</div>
|
432
450
|
</body>
|
433
451
|
</html>
|
@@ -729,7 +747,7 @@ Que?
|
|
729
747
|
<br/>
|
730
748
|
<div>
|
731
749
|
<h1 class="ForewordTitle">Foreword</h1>
|
732
|
-
<div id="_be9158af-7e93-4ee2-90c5-26d31c181934" class="formula"><p><span class="stem">(#(r = 1 %)#)</span></p></div><p>where</p><dl id="_e4fe94fe-1cde-49d9-b1ad-743293b7e21d"><dt>
|
750
|
+
<div id="_be9158af-7e93-4ee2-90c5-26d31c181934" class="formula"><p><span class="stem">(#(r = 1 %)#)</span></p></div><p style='page-break-after:avoid;'>where</p><dl id="_e4fe94fe-1cde-49d9-b1ad-743293b7e21d" class="formula_dl"><dt>
|
733
751
|
<span class="stem">(#(r)#)</span>
|
734
752
|
</dt><dd>
|
735
753
|
<p id="_1b99995d-ff03-40f5-8f2e-ab9665a69b77">is the repeatability limit.</p>
|
@@ -747,6 +765,96 @@ Que?
|
|
747
765
|
OUTPUT
|
748
766
|
end
|
749
767
|
|
768
|
+
it "processes formulae (Word)" do
|
769
|
+
expect(xmlpp(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
770
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
771
|
+
<preface><foreword>
|
772
|
+
<formula id="_be9158af-7e93-4ee2-90c5-26d31c181934" unnumbered="true">
|
773
|
+
<stem type="AsciiMath">r = 1 %</stem>
|
774
|
+
<dl id="_e4fe94fe-1cde-49d9-b1ad-743293b7e21d">
|
775
|
+
<dt>
|
776
|
+
<stem type="AsciiMath">r</stem>
|
777
|
+
</dt>
|
778
|
+
<dd>
|
779
|
+
<p id="_1b99995d-ff03-40f5-8f2e-ab9665a69b77">is the repeatability limit.</p>
|
780
|
+
</dd>
|
781
|
+
</dl>
|
782
|
+
<note id="_83083c7a-6c85-43db-a9fa-4d8edd0c9fc0">
|
783
|
+
<p id="_511aaa98-4116-42af-8e5b-c87cdf5bfdc8">[durationUnits] is essentially a duration statement without the "P" prefix. "P" is unnecessary because between "G" and "U" duration is always expressed.</p>
|
784
|
+
</note>
|
785
|
+
</formula>
|
786
|
+
<formula id="_be9158af-7e93-4ee2-90c5-26d31c181935">
|
787
|
+
<stem type="AsciiMath">r = 1 %</stem>
|
788
|
+
</formula>
|
789
|
+
</foreword></preface>
|
790
|
+
</iso-standard>
|
791
|
+
INPUT
|
792
|
+
<html xmlns:epub='http://www.idpf.org/2007/ops' lang='en'>
|
793
|
+
<head>
|
794
|
+
<style>
|
795
|
+
</style>
|
796
|
+
</head>
|
797
|
+
<body lang='EN-US' link='blue' vlink='#954F72'>
|
798
|
+
<div class='WordSection1'>
|
799
|
+
<p> </p>
|
800
|
+
</div>
|
801
|
+
<p>
|
802
|
+
<br clear='all' class='section'/>
|
803
|
+
</p>
|
804
|
+
<div class='WordSection2'>
|
805
|
+
<p>
|
806
|
+
<br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
|
807
|
+
</p>
|
808
|
+
<div>
|
809
|
+
<h1 class='ForewordTitle'>Foreword</h1>
|
810
|
+
<div id='_be9158af-7e93-4ee2-90c5-26d31c181934' class='formula'>
|
811
|
+
<p>
|
812
|
+
<span class='stem'>(#(r = 1 %)#)</span>
|
813
|
+
</p>
|
814
|
+
</div>
|
815
|
+
<p>where</p>
|
816
|
+
<table class='formula_dl'>
|
817
|
+
<tr>
|
818
|
+
<td valign='top' align='left'>
|
819
|
+
<p align='left' style='margin-left:0pt;text-align:left;'>
|
820
|
+
<span class='stem'>(#(r)#)</span>
|
821
|
+
</p>
|
822
|
+
</td>
|
823
|
+
<td valign='top'>
|
824
|
+
<p id='_1b99995d-ff03-40f5-8f2e-ab9665a69b77'>is the repeatability limit.</p>
|
825
|
+
</td>
|
826
|
+
</tr>
|
827
|
+
</table>
|
828
|
+
<div id='_83083c7a-6c85-43db-a9fa-4d8edd0c9fc0' class='Note'>
|
829
|
+
<p class='Note'>
|
830
|
+
<span class='note_label'>NOTE</span>
|
831
|
+
<span style='mso-tab-count:1'>  </span>
|
832
|
+
[durationUnits] is essentially a duration statement without the "P"
|
833
|
+
prefix. "P" is unnecessary because between "G" and "U" duration is
|
834
|
+
always expressed.
|
835
|
+
</p>
|
836
|
+
</div>
|
837
|
+
<div id='_be9158af-7e93-4ee2-90c5-26d31c181935' class='formula'>
|
838
|
+
<p>
|
839
|
+
<span class='stem'>(#(r = 1 %)#)</span>
|
840
|
+
<span style='mso-tab-count:1'>  </span>
|
841
|
+
(1)
|
842
|
+
</p>
|
843
|
+
</div>
|
844
|
+
</div>
|
845
|
+
<p> </p>
|
846
|
+
</div>
|
847
|
+
<p>
|
848
|
+
<br clear='all' class='section'/>
|
849
|
+
</p>
|
850
|
+
<div class='WordSection3'>
|
851
|
+
<p class='zzSTDTitle1'/>
|
852
|
+
</div>
|
853
|
+
</body>
|
854
|
+
</html>
|
855
|
+
OUTPUT
|
856
|
+
end
|
857
|
+
|
750
858
|
it "processes paragraph alignments" do
|
751
859
|
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
752
860
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
data/spec/isodoc/cleanup_spec.rb
CHANGED
@@ -715,4 +715,182 @@ INPUT
|
|
715
715
|
OUTPUT
|
716
716
|
end
|
717
717
|
|
718
|
+
it "breaks up very long strings in tables" do
|
719
|
+
expect(xmlpp(IsoDoc::HtmlConvert.new({}).cleanup(Nokogiri::XML(<<~"INPUT")).to_s)).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
720
|
+
<html xmlns:epub="http://www.idpf.org/2007/ops">
|
721
|
+
<head>
|
722
|
+
<title>test</title>
|
723
|
+
<body lang="EN-US" link="blue" vlink="#954F72">
|
724
|
+
<div class="WordSection1">
|
725
|
+
<p> </p>
|
726
|
+
</div>
|
727
|
+
<br clear="all" class="section"/>
|
728
|
+
<div class="WordSection2">
|
729
|
+
<br clear="all" style="mso-special-character:line-break;page-break-before:always"/>
|
730
|
+
<div>
|
731
|
+
<h1 class="ForewordTitle">Foreword</h1>
|
732
|
+
<p class="TableTitle" align="center">
|
733
|
+
<b>Table 1 — Repeatability and reproducibility of husked rice yield</b>
|
734
|
+
</p>
|
735
|
+
<table id="tableD-1" class="MsoISOTable" border="1" cellspacing="0" cellpadding="0">
|
736
|
+
<thead>
|
737
|
+
<tr>
|
738
|
+
<td align="left" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;">Description</td>
|
739
|
+
<td align="left" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;">Description</td>
|
740
|
+
<td align="center" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;">Rice sample</td>
|
741
|
+
</tr>
|
742
|
+
<tbody>
|
743
|
+
<tr>
|
744
|
+
<td align="left" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;">http://www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/BBBBBBBBBBBBBBBBBBBBBBBBBBBB</td>
|
745
|
+
<td align="left" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;">http://www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBB</td>
|
746
|
+
<td align="center" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;">www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBB</td>
|
747
|
+
</tr>
|
748
|
+
</tbody>
|
749
|
+
</table>
|
750
|
+
</div>
|
751
|
+
</div>
|
752
|
+
</body>
|
753
|
+
</html>
|
754
|
+
INPUT
|
755
|
+
<?xml version='1.0'?>
|
756
|
+
<html xmlns:epub='http://www.idpf.org/2007/ops'>
|
757
|
+
<head>
|
758
|
+
<title>test</title>
|
759
|
+
<body lang='EN-US' link='blue' vlink='#954F72'>
|
760
|
+
<div class='WordSection1'>
|
761
|
+
<p> </p>
|
762
|
+
</div>
|
763
|
+
<br clear='all' class='section'/>
|
764
|
+
<div class='WordSection2'>
|
765
|
+
<br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
|
766
|
+
<div>
|
767
|
+
<h1 class='ForewordTitle'>Foreword</h1>
|
768
|
+
<p class='TableTitle' align='center'>
|
769
|
+
<b>Table 1 — Repeatability and reproducibility of husked rice yield</b>
|
770
|
+
</p>
|
771
|
+
<table id='tableD-1' class='MsoISOTable' border='1' cellspacing='0' cellpadding='0'>
|
772
|
+
<thead>
|
773
|
+
<tr>
|
774
|
+
<td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>Description</td>
|
775
|
+
<td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>Description</td>
|
776
|
+
<td align='center' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;'>Rice sample</td>
|
777
|
+
</tr>
|
778
|
+
<tbody>
|
779
|
+
<tr>
|
780
|
+
<td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>
|
781
|
+
http://www.example.com/
|
782
|
+
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA/
|
783
|
+
BBBBBBBBBBBBBBBBBBBBBBBBBBBB
|
784
|
+
</td>
|
785
|
+
<td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>
|
786
|
+
http://www.example.com/
|
787
|
+
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
788
|
+
AAAAAAAABBBBBBBBBBBBBBBBBBBBBB BBBBBB
|
789
|
+
</td>
|
790
|
+
<td align='center' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;'>
|
791
|
+
www.example.com/
|
792
|
+
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
793
|
+
ABBBBBBBBBBBBBBBBBBBBBBBBBBBB
|
794
|
+
</td>
|
795
|
+
</tr>
|
796
|
+
</tbody>
|
797
|
+
</thead>
|
798
|
+
</table>
|
799
|
+
</div>
|
800
|
+
</div>
|
801
|
+
</body>
|
802
|
+
</head>
|
803
|
+
</html>
|
804
|
+
OUTPUT
|
805
|
+
end
|
806
|
+
|
807
|
+
it "breaks up very long strings in tables (Word)" do
|
808
|
+
expect(xmlpp(IsoDoc::WordConvert.new({}).cleanup(Nokogiri::XML(<<~"INPUT")).to_s)).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
809
|
+
<html xmlns:epub="http://www.idpf.org/2007/ops">
|
810
|
+
<head>
|
811
|
+
<title>test</title>
|
812
|
+
<body lang="EN-US" link="blue" vlink="#954F72">
|
813
|
+
<div class="WordSection1">
|
814
|
+
<p> </p>
|
815
|
+
</div>
|
816
|
+
<br clear="all" class="section"/>
|
817
|
+
<div class="WordSection2">
|
818
|
+
<br clear="all" style="mso-special-character:line-break;page-break-before:always"/>
|
819
|
+
<div>
|
820
|
+
<h1 class="ForewordTitle">Foreword</h1>
|
821
|
+
<p class="TableTitle" align="center">
|
822
|
+
<b>Table 1 — Repeatability and reproducibility of husked rice yield</b>
|
823
|
+
</p>
|
824
|
+
<table id="tableD-1" class="MsoISOTable" border="1" cellspacing="0" cellpadding="0">
|
825
|
+
<thead>
|
826
|
+
<tr>
|
827
|
+
<td align="left" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;">Description</td>
|
828
|
+
<td align="left" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;">Description</td>
|
829
|
+
<td align="center" style="border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;">Rice sample</td>
|
830
|
+
</tr>
|
831
|
+
<tbody>
|
832
|
+
<tr>
|
833
|
+
<td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>
|
834
|
+
http://www.example.com/ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA/ BBBBBBBBBBBBBBBBBBBBBBBBBBBB
|
835
|
+
</td>
|
836
|
+
<td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>
|
837
|
+
http://www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAABBBBBBBBBBBBBBBBBBBBBB BBBBBB
|
838
|
+
</td>
|
839
|
+
<td align='center' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;'>
|
840
|
+
www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ABBBBBBBBBBBBBBBBBBBBBBBBBBBB
|
841
|
+
</td>
|
842
|
+
</tr>
|
843
|
+
</tbody>
|
844
|
+
</table>
|
845
|
+
</div>
|
846
|
+
</div>
|
847
|
+
</body>
|
848
|
+
</html>
|
849
|
+
INPUT
|
850
|
+
<?xml version='1.0'?>
|
851
|
+
<html xmlns:epub='http://www.idpf.org/2007/ops'>
|
852
|
+
<head>
|
853
|
+
<title>test</title>
|
854
|
+
<body lang='EN-US' link='blue' vlink='#954F72'>
|
855
|
+
<div class='WordSection1'>
|
856
|
+
<p> </p>
|
857
|
+
</div>
|
858
|
+
<br clear='all' class='section'/>
|
859
|
+
<div class='WordSection2'>
|
860
|
+
<br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
|
861
|
+
<div>
|
862
|
+
<h1 class='ForewordTitle'>Foreword</h1>
|
863
|
+
<p class='TableTitle' align='center'>
|
864
|
+
<b>Table 1 — Repeatability and reproducibility of husked rice yield</b>
|
865
|
+
</p>
|
866
|
+
<table id='tableD-1' class='MsoISOTable' border='1' cellspacing='0' cellpadding='0'>
|
867
|
+
<thead>
|
868
|
+
<tr>
|
869
|
+
<td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>Description</td>
|
870
|
+
<td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>Description</td>
|
871
|
+
<td align='center' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;'>Rice sample</td>
|
872
|
+
</tr>
|
873
|
+
<tbody>
|
874
|
+
<tr>
|
875
|
+
<td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>
|
876
|
+
http://www.example.com/ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAA/ BBBBBBBBBBBBBBBBBBBBBBBBBBBB
|
877
|
+
</td>
|
878
|
+
<td align='left' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.5pt;'>
|
879
|
+
http://www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAABBBBBBBBBBBBBBBBBBBBBB BBBBBB
|
880
|
+
</td>
|
881
|
+
<td align='center' style='border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;'>
|
882
|
+
www.example.com/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ABBBBBBBBBBBBBBBBBBBBBBBBBBBB
|
883
|
+
</td>
|
884
|
+
</tr>
|
885
|
+
</tbody>
|
886
|
+
</thead>
|
887
|
+
</table>
|
888
|
+
</div>
|
889
|
+
</div>
|
890
|
+
</body>
|
891
|
+
</head>
|
892
|
+
</html>
|
893
|
+
OUTPUT
|
894
|
+
end
|
895
|
+
|
718
896
|
end
|