isodoc 1.0.28 → 1.0.29
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/macos.yml +4 -2
- data/.github/workflows/ubuntu.yml +6 -2
- data/.github/workflows/windows.yml +4 -2
- data/lib/isodoc/function/blocks.rb +39 -50
- data/lib/isodoc/function/{blocks_example.rb → blocks_example_note.rb} +57 -2
- data/lib/isodoc/function/i18n.rb +1 -0
- data/lib/isodoc/function/inline.rb +20 -3
- data/lib/isodoc/function/lists.rb +12 -6
- data/lib/isodoc/function/references.rb +2 -2
- data/lib/isodoc/function/reqt.rb +13 -4
- data/lib/isodoc/function/table.rb +3 -3
- data/lib/isodoc/function/terms.rb +1 -1
- data/lib/isodoc/function/utils.rb +2 -1
- data/lib/isodoc/function/xref_counter.rb +43 -9
- data/lib/isodoc/function/xref_gen_seq.rb +11 -10
- data/lib/isodoc/html_function/html.rb +1 -1
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/word_function/body.rb +13 -47
- data/lib/isodoc/word_function/inline.rb +75 -0
- data/lib/isodoc/word_function/table.rb +3 -3
- data/spec/assets/odf.emf +0 -0
- data/spec/assets/odf.svg +4 -0
- data/spec/assets/odf1.svg +4 -0
- data/spec/isodoc/blocks_spec.rb +216 -44
- data/spec/isodoc/inline_spec.rb +208 -1
- data/spec/isodoc/lists_spec.rb +8 -8
- data/spec/isodoc/metadata_spec.rb +107 -3
- data/spec/isodoc/postproc_spec.rb +5 -9
- data/spec/isodoc/ref_spec.rb +4 -4
- data/spec/isodoc/table_spec.rb +4 -4
- data/spec/isodoc/terms_spec.rb +7 -7
- data/spec/isodoc/xref_spec.rb +165 -45
- metadata +7 -3
@@ -44,12 +44,12 @@ module IsoDoc::Function
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
-
def
|
47
|
+
def table_attrs(node)
|
48
48
|
width = node["width"] ? "width:#{node['width']};" : nil
|
49
49
|
attr_code(
|
50
50
|
id: node["id"],
|
51
51
|
class: "MsoISOTable",
|
52
|
-
style: "border-width:1px;border-spacing:0;#{width}",
|
52
|
+
style: "border-width:1px;border-spacing:0;#{width}#{keep_style(node)}",
|
53
53
|
title: node["alt"]
|
54
54
|
)
|
55
55
|
end
|
@@ -66,7 +66,7 @@ module IsoDoc::Function
|
|
66
66
|
def table_parse(node, out)
|
67
67
|
@in_table = true
|
68
68
|
table_title_parse(node, out)
|
69
|
-
out.table **
|
69
|
+
out.table **table_attrs(node) do |t|
|
70
70
|
tcaption(node, t)
|
71
71
|
thead_parse(node, t)
|
72
72
|
tbody_parse(node, t)
|
@@ -147,7 +147,7 @@ module IsoDoc::Function
|
|
147
147
|
end
|
148
148
|
|
149
149
|
def populate_template(docxml, _format = nil)
|
150
|
-
meta = @meta.get.merge(@labels || {})
|
150
|
+
meta = @meta.get.merge(@labels || {}).merge(@meta.labels || {})
|
151
151
|
template = liquid(docxml)
|
152
152
|
template.render(meta.map { |k, v| [k.to_s, empty2nil(v)] }.to_h).
|
153
153
|
gsub('<', '<').gsub('>', '>').gsub('&', '&')
|
@@ -155,6 +155,7 @@ module IsoDoc::Function
|
|
155
155
|
|
156
156
|
def save_dataimage(uri, relative_dir = true)
|
157
157
|
%r{^data:image/(?<imgtype>[^;]+);base64,(?<imgdata>.+)$} =~ uri
|
158
|
+
imgtype.sub!(/\+[a-z0-9]+$/, "") # svg+xml
|
158
159
|
imgtype = "png" unless /^[a-z0-9]+$/.match imgtype
|
159
160
|
Tempfile.open(["image", ".#{imgtype}"]) do |f|
|
160
161
|
f.binmode
|
@@ -15,26 +15,60 @@ module IsoDoc::Function
|
|
15
15
|
@num = 0
|
16
16
|
@letter = ""
|
17
17
|
@subseq = ""
|
18
|
+
@letter_override = nil
|
19
|
+
@number_override = nil
|
20
|
+
end
|
21
|
+
|
22
|
+
def new_subseq_increment(node)
|
23
|
+
@subseq = node["subsequence"]
|
24
|
+
@num += 1
|
25
|
+
@letter = node["subsequence"] ? "a" : ""
|
26
|
+
if node["number"]
|
27
|
+
/^(?<n>\d*)(?<a>[a-z]*)$/ =~ node["number"]
|
28
|
+
if n || a
|
29
|
+
@letter_override = @letter = a if a
|
30
|
+
@number_override = @num = n.to_i if n
|
31
|
+
else
|
32
|
+
@letter_override = node["number"]
|
33
|
+
@letter = @letter_override if /^[a-z]$/.match(@letter_override)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def sequence_increment(node)
|
39
|
+
if node["number"]
|
40
|
+
@number_override = node["number"]
|
41
|
+
@num = @number_override.to_i if /^\d+$/.match(@number_override)
|
42
|
+
else
|
43
|
+
@num += 1
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def subsequence_increment(node)
|
48
|
+
if node["number"]
|
49
|
+
@letter_override = node["number"]
|
50
|
+
@letter = @letter_override if /^[a-z]$/.match(@letter_override)
|
51
|
+
else
|
52
|
+
@letter = (@letter.ord + 1).chr.to_s
|
53
|
+
end
|
18
54
|
end
|
19
55
|
|
20
56
|
def increment(node)
|
21
57
|
return self if node["unnumbered"]
|
58
|
+
@letter_override = nil
|
59
|
+
@number_override = nil
|
22
60
|
if node["subsequence"] != @subseq
|
23
|
-
|
24
|
-
|
25
|
-
|
61
|
+
new_subseq_increment(node)
|
62
|
+
elsif @letter.empty?
|
63
|
+
sequence_increment(node)
|
26
64
|
else
|
27
|
-
|
28
|
-
@num += 1
|
29
|
-
else
|
30
|
-
@letter = (@letter.ord + 1).chr.to_s
|
31
|
-
end
|
65
|
+
subsequence_increment(node)
|
32
66
|
end
|
33
67
|
self
|
34
68
|
end
|
35
69
|
|
36
70
|
def print
|
37
|
-
"#{@num}#{@letter}"
|
71
|
+
"#{@number_override || @num}#{@letter_override || @letter}"
|
38
72
|
end
|
39
73
|
|
40
74
|
def listlabel(depth)
|
@@ -1,15 +1,20 @@
|
|
1
1
|
module IsoDoc::Function
|
2
2
|
module XrefGen
|
3
|
+
def subfigure_increment(j, c, t)
|
4
|
+
if t.parent.name == "figure" then j += 1
|
5
|
+
else
|
6
|
+
j = 0
|
7
|
+
c.increment(t)
|
8
|
+
end
|
9
|
+
j
|
10
|
+
end
|
11
|
+
|
3
12
|
def sequential_figure_names(clause)
|
4
13
|
c = Counter.new
|
5
14
|
j = 0
|
6
15
|
clause.xpath(ns(".//figure | .//sourcecode[not(ancestor::example)]")).
|
7
16
|
each do |t|
|
8
|
-
|
9
|
-
else
|
10
|
-
j = 0
|
11
|
-
c.increment(t)
|
12
|
-
end
|
17
|
+
j = subfigure_increment(j, c, t)
|
13
18
|
label = c.print + (j.zero? ? "" : "-#{j}")
|
14
19
|
next if t["id"].nil? || t["id"].empty?
|
15
20
|
@anchors[t["id"]] =
|
@@ -80,11 +85,7 @@ module IsoDoc::Function
|
|
80
85
|
j = 0
|
81
86
|
clause.xpath(ns(".//figure | .//sourcecode[not(ancestor::example)]")).
|
82
87
|
each do |t|
|
83
|
-
|
84
|
-
else
|
85
|
-
j = 0
|
86
|
-
c.increment(t)
|
87
|
-
end
|
88
|
+
j = subfigure_increment(j, c, t)
|
88
89
|
label = "#{num}#{hiersep}#{c.print}" +
|
89
90
|
(j.zero? ? "" : "#{hierfigsep}#{j}")
|
90
91
|
next if t["id"].nil? || t["id"].empty?
|
@@ -102,7 +102,7 @@ module IsoDoc::HtmlFunction
|
|
102
102
|
def sourcecode_parse(node, out)
|
103
103
|
name = node.at(ns("./name"))
|
104
104
|
class1 = "prettyprint #{sourcecodelang(node&.at(ns('./@lang'))&.value)}"
|
105
|
-
out.pre **
|
105
|
+
out.pre **sourcecode_attrs(node).merge(class: class1) do |div|
|
106
106
|
@sourcecode = true
|
107
107
|
node.children.each { |n| parse(n, div) unless n.name == "name" }
|
108
108
|
@sourcecode = false
|
data/lib/isodoc/version.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative "./table.rb"
|
2
|
+
require_relative "./inline.rb"
|
2
3
|
|
3
4
|
module IsoDoc::WordFunction
|
4
5
|
module Body
|
@@ -69,28 +70,6 @@ module IsoDoc::WordFunction
|
|
69
70
|
node.xpath(ns("./note")).each { |n| parse(n, out) }
|
70
71
|
end
|
71
72
|
|
72
|
-
def section_break(body)
|
73
|
-
body.p do |p|
|
74
|
-
p.br **{ clear: "all", class: "section" }
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def page_break(out)
|
79
|
-
out.p do |p|
|
80
|
-
p.br **{ clear: "all",
|
81
|
-
style: "mso-special-character:line-break;"\
|
82
|
-
"page-break-before:always" }
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
def pagebreak_parse(node, out)
|
87
|
-
return page_break(out) if node["orientation"].nil?
|
88
|
-
out.p do |p|
|
89
|
-
p.br **{clear: "all", class: "section",
|
90
|
-
orientation: node["orientation"] }
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
73
|
WORD_DT_ATTRS = {class: @note ? "Note" : nil, align: "left",
|
95
74
|
style: "margin-left:0pt;text-align:left;"}.freeze
|
96
75
|
|
@@ -174,7 +153,7 @@ module IsoDoc::WordFunction
|
|
174
153
|
end
|
175
154
|
|
176
155
|
def termnote_parse(node, out)
|
177
|
-
out.div **
|
156
|
+
out.div **note_attrs(node) do |div|
|
178
157
|
first = node.first_element_child
|
179
158
|
div.p **{ class: "Note" } do |p|
|
180
159
|
anchor = get_anchors[node['id']]
|
@@ -185,41 +164,23 @@ module IsoDoc::WordFunction
|
|
185
164
|
end
|
186
165
|
|
187
166
|
def para_attrs(node)
|
188
|
-
attrs = { class: para_class(node), id: node["id"] }
|
167
|
+
attrs = { class: para_class(node), id: node["id"], style: "" }
|
189
168
|
unless node["align"].nil?
|
190
169
|
attrs[:align] = node["align"] unless node["align"] == "justify"
|
191
|
-
attrs[:style]
|
170
|
+
attrs[:style] += "text-align:#{node['align']};"
|
192
171
|
end
|
172
|
+
attrs[:style] += "#{keep_style(node)}"
|
173
|
+
attrs[:style] = nil if attrs[:style].empty?
|
193
174
|
attrs
|
194
175
|
end
|
195
176
|
|
196
|
-
def imgsrc(uri)
|
197
|
-
return uri unless %r{^data:image/}.match uri
|
198
|
-
save_dataimage(uri)
|
199
|
-
end
|
200
|
-
|
201
|
-
def image_parse(node, out, caption)
|
202
|
-
attrs = { src: imgsrc(node["src"]),
|
203
|
-
height: node["height"],
|
204
|
-
alt: node["alt"],
|
205
|
-
title: node["title"],
|
206
|
-
width: node["width"] }
|
207
|
-
out.img **attr_code(attrs)
|
208
|
-
image_title_parse(out, caption)
|
209
|
-
end
|
210
|
-
|
211
|
-
def xref_parse(node, out)
|
212
|
-
target = /#/.match(node["target"]) ? node["target"].sub(/#/, ".doc#") :
|
213
|
-
"##{node["target"]}"
|
214
|
-
out.a(**{ "href": target }) { |l| l << get_linkend(node) }
|
215
|
-
end
|
216
|
-
|
217
177
|
def example_table_attr(node)
|
218
178
|
super.merge({
|
219
179
|
style: "mso-table-lspace:15.0cm;margin-left:423.0pt;"\
|
220
180
|
"mso-table-rspace:15.0cm;margin-right:423.0pt;"\
|
221
181
|
"mso-table-anchor-horizontal:column;"\
|
222
|
-
"mso-table-overlap:never;border-collapse:collapse;"
|
182
|
+
"mso-table-overlap:never;border-collapse:collapse;"\
|
183
|
+
"#{keep_style(node)}"
|
223
184
|
})
|
224
185
|
end
|
225
186
|
|
@@ -240,5 +201,10 @@ module IsoDoc::WordFunction
|
|
240
201
|
node.children.each { |n| parse(n, li) }
|
241
202
|
end
|
242
203
|
end
|
204
|
+
|
205
|
+
def suffix_url(url)
|
206
|
+
return url if %r{^http[s]?://}.match(url)
|
207
|
+
url.sub(/#{File.extname(url)}$/, ".doc")
|
208
|
+
end
|
243
209
|
end
|
244
210
|
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module IsoDoc::WordFunction
|
2
|
+
module Body
|
3
|
+
def section_break(body)
|
4
|
+
body.p do |p|
|
5
|
+
p.br **{ clear: "all", class: "section" }
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def page_break(out)
|
10
|
+
out.p do |p|
|
11
|
+
p.br **{ clear: "all",
|
12
|
+
style: "mso-special-character:line-break;"\
|
13
|
+
"page-break-before:always" }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def pagebreak_parse(node, out)
|
18
|
+
return page_break(out) if node["orientation"].nil?
|
19
|
+
out.p do |p|
|
20
|
+
p.br **{clear: "all", class: "section",
|
21
|
+
orientation: node["orientation"] }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def imgsrc(node)
|
26
|
+
ret = svg_to_emf(node) and return ret
|
27
|
+
return node["src"] unless %r{^data:image/}.match node["src"]
|
28
|
+
save_dataimage(node["src"])
|
29
|
+
end
|
30
|
+
|
31
|
+
def image_parse(node, out, caption)
|
32
|
+
attrs = { src: imgsrc(node),
|
33
|
+
height: node["height"],
|
34
|
+
alt: node["alt"],
|
35
|
+
title: node["title"],
|
36
|
+
width: node["width"] }
|
37
|
+
out.img **attr_code(attrs)
|
38
|
+
image_title_parse(out, caption)
|
39
|
+
end
|
40
|
+
|
41
|
+
def svg_to_emf_filename(uri)
|
42
|
+
File.join(File.dirname(uri), File.basename(uri, ".*")) + ".emf"
|
43
|
+
end
|
44
|
+
|
45
|
+
def svg_to_emf(node)
|
46
|
+
return unless node["mimetype"] == "image/svg+xml"
|
47
|
+
uri = node["src"]
|
48
|
+
%r{^data:image/}.match(uri) and uri = save_dataimage(uri)
|
49
|
+
ret = svg_to_emf_filename(uri)
|
50
|
+
File.exists?(ret) and return ret
|
51
|
+
exe = inkscape_installed? or return nil
|
52
|
+
system %(#{exe} --export-type="emf" #{uri}) and
|
53
|
+
return ret
|
54
|
+
nil
|
55
|
+
end
|
56
|
+
|
57
|
+
def inkscape_installed?
|
58
|
+
cmd = "inkscape"
|
59
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
60
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
61
|
+
exts.each do |ext|
|
62
|
+
exe = File.join(path, "#{cmd}#{ext}")
|
63
|
+
return exe if File.executable?(exe) && !File.directory?(exe)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
nil
|
67
|
+
end
|
68
|
+
|
69
|
+
def xref_parse(node, out)
|
70
|
+
target = /#/.match(node["target"]) ? node["target"].sub(/#/, ".doc#") :
|
71
|
+
"##{node["target"]}"
|
72
|
+
out.a(**{ "href": target }) { |l| l << get_linkend(node) }
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -33,12 +33,12 @@ module IsoDoc::WordFunction
|
|
33
33
|
align: td["align"], style: style.gsub(/\n/, "") }
|
34
34
|
end
|
35
35
|
|
36
|
-
def
|
36
|
+
def table_attrs(node)
|
37
37
|
super.merge(attr_code({
|
38
38
|
summary: node["summary"],
|
39
39
|
width: node["width"],
|
40
40
|
style: "mso-table-anchor-horizontal:column;"\
|
41
|
-
"mso-table-overlap:never;border-spacing:0;border-width:1px
|
41
|
+
"mso-table-overlap:never;border-spacing:0;border-width:1px;#{keep_style(node)}"
|
42
42
|
}))
|
43
43
|
end
|
44
44
|
|
@@ -46,7 +46,7 @@ module IsoDoc::WordFunction
|
|
46
46
|
@in_table = true
|
47
47
|
table_title_parse(node, out)
|
48
48
|
out.div **{ align: "center", class: "table_container" } do |div|
|
49
|
-
div.table **
|
49
|
+
div.table **table_attrs(node) do |t|
|
50
50
|
thead_parse(node, t)
|
51
51
|
tbody_parse(node, t)
|
52
52
|
tfoot_parse(node, t)
|
data/spec/assets/odf.emf
ADDED
Binary file
|
data/spec/assets/odf.svg
ADDED
data/spec/isodoc/blocks_spec.rb
CHANGED
@@ -5,7 +5,7 @@ RSpec.describe IsoDoc do
|
|
5
5
|
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
6
6
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
7
7
|
<preface><foreword>
|
8
|
-
<note>
|
8
|
+
<note id="A" keep-with-next="true" keep-lines-together="true">
|
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
11
|
</foreword></preface>
|
@@ -15,7 +15,7 @@ RSpec.describe IsoDoc do
|
|
15
15
|
<br/>
|
16
16
|
<div>
|
17
17
|
<h1 class="ForewordTitle">Foreword</h1>
|
18
|
-
<div id="" class="Note">
|
18
|
+
<div id="A" class="Note" style="page-break-after: avoid;page-break-inside: avoid;">
|
19
19
|
<p><span class="note_label">NOTE</span>  These results are based on a study carried out on three different types of kernel.</p>
|
20
20
|
</div>
|
21
21
|
</div>
|
@@ -30,7 +30,7 @@ RSpec.describe IsoDoc do
|
|
30
30
|
expect(xmlpp(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
31
31
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
32
32
|
<preface><foreword>
|
33
|
-
<note>
|
33
|
+
<note id="A">
|
34
34
|
<p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f">These results are based on a study carried out on three different types of kernel.</p>
|
35
35
|
</note>
|
36
36
|
</foreword></preface>
|
@@ -47,7 +47,7 @@ RSpec.describe IsoDoc do
|
|
47
47
|
<p><br clear="all" style="mso-special-character:line-break;page-break-before:always"/></p>
|
48
48
|
<div>
|
49
49
|
<h1 class="ForewordTitle">Foreword</h1>
|
50
|
-
<div id="" class="Note">
|
50
|
+
<div id="A" class="Note">
|
51
51
|
<p class="Note"><span class="note_label">NOTE</span><span style="mso-tab-count:1">  </span>These results are based on a study carried out on three different types of kernel.</p>
|
52
52
|
</div>
|
53
53
|
</div>
|
@@ -134,7 +134,7 @@ INPUT
|
|
134
134
|
<br/>
|
135
135
|
<div>
|
136
136
|
<h1 class="ForewordTitle">Foreword</h1>
|
137
|
-
<div
|
137
|
+
<div class="Note">
|
138
138
|
<p><span class="note_label">NOTE</span>  These results are based on a study carried out on three different types of kernel.</p>
|
139
139
|
<p id="_f06fd0d1-a203-4f3d-a515-0bdba0f8d83a">These results are based on a study carried out on three different types of kernel.</p>
|
140
140
|
</div>
|
@@ -150,7 +150,7 @@ INPUT
|
|
150
150
|
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
151
151
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
152
152
|
<preface><foreword>
|
153
|
-
<note>
|
153
|
+
<note id="A">
|
154
154
|
<dl>
|
155
155
|
<dt>A</dt>
|
156
156
|
<dd><p>B</p></dd>
|
@@ -165,7 +165,7 @@ INPUT
|
|
165
165
|
<br/>
|
166
166
|
<div>
|
167
167
|
<h1 class="ForewordTitle">Foreword</h1>
|
168
|
-
<div id="" class="Note"><p><span class="note_label">NOTE</span>  </p>
|
168
|
+
<div id="A" class="Note"><p><span class="note_label">NOTE</span>  </p>
|
169
169
|
<dl><dt><p>A</p></dt><dd><p>B</p></dd></dl>
|
170
170
|
<ul>
|
171
171
|
<li>C</li></ul>
|
@@ -183,7 +183,7 @@ INPUT
|
|
183
183
|
expect(xmlpp(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
184
184
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
185
185
|
<preface><foreword>
|
186
|
-
<note>
|
186
|
+
<note id="A">
|
187
187
|
<dl>
|
188
188
|
<dt>A</dt>
|
189
189
|
<dd><p>B</p></dd>
|
@@ -205,7 +205,7 @@ INPUT
|
|
205
205
|
<p><br clear="all" style="mso-special-character:line-break;page-break-before:always"/></p>
|
206
206
|
<div>
|
207
207
|
<h1 class="ForewordTitle">Foreword</h1>
|
208
|
-
<div id="" class="Note"><p class="Note"><span class="note_label">NOTE</span><span style="mso-tab-count:1">  </span></p>
|
208
|
+
<div id="A" class="Note"><p class="Note"><span class="note_label">NOTE</span><span style="mso-tab-count:1">  </span></p>
|
209
209
|
<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 class="Note">B</p></td></tr></table>
|
210
210
|
<ul>
|
211
211
|
<li>C</li></ul>
|
@@ -317,7 +317,7 @@ OUTPUT
|
|
317
317
|
expect(xmlpp(strip_guid(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true)))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
318
318
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
319
319
|
<preface><foreword>
|
320
|
-
<figure id="figureA-1">
|
320
|
+
<figure id="figureA-1" keep-with-next="true" keep-lines-together="true">
|
321
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"/>
|
@@ -345,7 +345,7 @@ B
|
|
345
345
|
<br/>
|
346
346
|
<div>
|
347
347
|
<h1 class="ForewordTitle">Foreword</h1>
|
348
|
-
<div id="figureA-1" class="figure">
|
348
|
+
<div id="figureA-1" class="figure" style='page-break-after: avoid;page-break-inside: avoid;'>
|
349
349
|
|
350
350
|
<img src="rice_images/rice_image1.png" height="20" width="30" alt="alttext" title="titletxt"/>
|
351
351
|
<img src="rice_images/rice_image1.png" height="20" width="auto"/>
|
@@ -380,6 +380,7 @@ B
|
|
380
380
|
end
|
381
381
|
|
382
382
|
it "processes figures (Word)" do
|
383
|
+
FileUtils.rm_rf "spec/assets/odf1.emf"
|
383
384
|
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")
|
384
385
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
385
386
|
<preface><foreword>
|
@@ -452,11 +453,122 @@ B
|
|
452
453
|
OUTPUT
|
453
454
|
end
|
454
455
|
|
456
|
+
it "converts SVG (Word)" do
|
457
|
+
FileUtils.rm_rf "spec/assets/odf1.emf"
|
458
|
+
expect(xmlpp(strip_guid(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true).gsub(/['"][^'".]+(?<!odf1)(?<!odf)\.emf['"]/, "'_.emf'").gsub(/mso-bookmark:_Ref\d+/, "mso-bookmark:_Ref")))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
459
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
460
|
+
<preface><foreword>
|
461
|
+
<figure id="figureA-1">
|
462
|
+
<image src="spec/assets/odf.svg" mimetype="image/svg+xml"/>
|
463
|
+
<image src="spec/assets/odf1.svg" mimetype="image/svg+xml"/>
|
464
|
+
<image src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj4KICA8Y2lyY2xlIGZpbGw9IiMwMDkiIHI9IjQ1IiBjeD0iNTAiIGN5PSI1MCIvPgogIDxwYXRoIGQ9Ik0zMywyNkg3OEEzNywzNywwLDAsMSwzMyw4M1Y1N0g1OVY0M0gzM1oiIGZpbGw9IiNGRkYiLz4KPC9zdmc+Cg==" id="_d3731866-1a07-435a-a6c2-1acd41023a4e" mimetype="image/svg+xml" height="auto" width="auto"/>
|
465
|
+
</figure>
|
466
|
+
</foreword></preface>
|
467
|
+
</iso-standard>
|
468
|
+
INPUT
|
469
|
+
<html xmlns:epub='http://www.idpf.org/2007/ops' lang='en'>
|
470
|
+
<head>
|
471
|
+
<style>
|
472
|
+
</style>
|
473
|
+
</head>
|
474
|
+
<body lang='EN-US' link='blue' vlink='#954F72'>
|
475
|
+
<div class='WordSection1'>
|
476
|
+
<p> </p>
|
477
|
+
</div>
|
478
|
+
<p>
|
479
|
+
<br clear='all' class='section'/>
|
480
|
+
</p>
|
481
|
+
<div class='WordSection2'>
|
482
|
+
<p>
|
483
|
+
<br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
|
484
|
+
</p>
|
485
|
+
<div>
|
486
|
+
<h1 class='ForewordTitle'>Foreword</h1>
|
487
|
+
<div id='figureA-1' class='figure'>
|
488
|
+
<img src='spec/assets/odf.emf'/>
|
489
|
+
<img src='spec/assets/odf1.emf'/>
|
490
|
+
<img src='_.emf' height='auto' width='auto'/>
|
491
|
+
<p class='FigureTitle' style='text-align:center;'>Figure 1</p>
|
492
|
+
</div>
|
493
|
+
</div>
|
494
|
+
<p> </p>
|
495
|
+
</div>
|
496
|
+
<p>
|
497
|
+
<br clear='all' class='section'/>
|
498
|
+
</p>
|
499
|
+
<div class='WordSection3'>
|
500
|
+
<p class='zzSTDTitle1'/>
|
501
|
+
</div>
|
502
|
+
</body>
|
503
|
+
</html>
|
504
|
+
|
505
|
+
OUTPUT
|
506
|
+
end
|
507
|
+
|
508
|
+
context "disable inkscape" do
|
509
|
+
|
510
|
+
it "converts SVG (Word) with inkscape disabled" do
|
511
|
+
FileUtils.rm_rf "spec/assets/odf1.emf"
|
512
|
+
allow(IsoDoc::WordFunction::Body).to receive(:inkscape_installed?).and_return(nil)
|
513
|
+
allow_any_instance_of(IsoDoc::WordFunction::Body).to receive(:inkscape_installed?)
|
514
|
+
|
515
|
+
expect(xmlpp(strip_guid(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true).gsub(/['"][^'".]+(?<!odf1)(?<!odf)\.svg['"]/, "'_.svg'").gsub(/mso-bookmark:_Ref\d+/, "mso-bookmark:_Ref")))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
516
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
517
|
+
<preface><foreword>
|
518
|
+
<figure id="figureA-1">
|
519
|
+
<image src="spec/assets/odf.svg" mimetype="image/svg+xml"/>
|
520
|
+
<image src="spec/assets/odf1.svg" mimetype="image/svg+xml"/>
|
521
|
+
<image src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDAgMTAwIj4KICA8Y2lyY2xlIGZpbGw9IiMwMDkiIHI9IjQ1IiBjeD0iNTAiIGN5PSI1MCIvPgogIDxwYXRoIGQ9Ik0zMywyNkg3OEEzNywzNywwLDAsMSwzMyw4M1Y1N0g1OVY0M0gzM1oiIGZpbGw9IiNGRkYiLz4KPC9zdmc+Cg==" id="_d3731866-1a07-435a-a6c2-1acd41023a4e" mimetype="image/svg+xml" height="auto" width="auto"/>
|
522
|
+
</figure>
|
523
|
+
</foreword></preface>
|
524
|
+
</iso-standard>
|
525
|
+
INPUT
|
526
|
+
<html xmlns:epub='http://www.idpf.org/2007/ops' lang='en'>
|
527
|
+
<head>
|
528
|
+
<style>
|
529
|
+
</style>
|
530
|
+
</head>
|
531
|
+
<body lang='EN-US' link='blue' vlink='#954F72'>
|
532
|
+
<div class='WordSection1'>
|
533
|
+
<p> </p>
|
534
|
+
</div>
|
535
|
+
<p>
|
536
|
+
<br clear='all' class='section'/>
|
537
|
+
</p>
|
538
|
+
<div class='WordSection2'>
|
539
|
+
<p>
|
540
|
+
<br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
|
541
|
+
</p>
|
542
|
+
<div>
|
543
|
+
<h1 class='ForewordTitle'>Foreword</h1>
|
544
|
+
<div id='figureA-1' class='figure'>
|
545
|
+
<img src='spec/assets/odf.emf'/>
|
546
|
+
<img src='spec/assets/odf1.svg'/>
|
547
|
+
<img src='_.svg' height='auto' width='auto'/>
|
548
|
+
<p class='FigureTitle' style='text-align:center;'>Figure 1</p>
|
549
|
+
</div>
|
550
|
+
</div>
|
551
|
+
<p> </p>
|
552
|
+
</div>
|
553
|
+
<p>
|
554
|
+
<br clear='all' class='section'/>
|
555
|
+
</p>
|
556
|
+
<div class='WordSection3'>
|
557
|
+
<p class='zzSTDTitle1'/>
|
558
|
+
</div>
|
559
|
+
</body>
|
560
|
+
</html>
|
561
|
+
|
562
|
+
OUTPUT
|
563
|
+
end
|
564
|
+
end
|
565
|
+
|
566
|
+
|
455
567
|
it "processes examples" do
|
456
568
|
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
457
569
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
458
570
|
<preface><foreword>
|
459
|
-
<example id="samplecode">
|
571
|
+
<example id="samplecode" keep-with-next="true" keep-lines-together="true">
|
460
572
|
<name>Title</name>
|
461
573
|
<p>Hello</p>
|
462
574
|
<sourcecode id="X">
|
@@ -470,7 +582,7 @@ B
|
|
470
582
|
<br/>
|
471
583
|
<div>
|
472
584
|
<h1 class="ForewordTitle">Foreword</h1>
|
473
|
-
<div id="samplecode" class="example">
|
585
|
+
<div id="samplecode" class="example" style="page-break-after: avoid;page-break-inside: avoid;">
|
474
586
|
<p class="example-title">EXAMPLE — Title</p>
|
475
587
|
<p>Hello</p>
|
476
588
|
<pre id='X' class='prettyprint '>
|
@@ -489,6 +601,60 @@ B
|
|
489
601
|
OUTPUT
|
490
602
|
end
|
491
603
|
|
604
|
+
it "processes examples (Word)" do
|
605
|
+
expect(xmlpp(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
606
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
607
|
+
<preface><foreword>
|
608
|
+
<example id="samplecode" keep-with-next="true" keep-lines-together="true">
|
609
|
+
<name>Title</name>
|
610
|
+
<p>Hello</p>
|
611
|
+
<sourcecode id="X">
|
612
|
+
<name>Sample</name>
|
613
|
+
</sourcecode>
|
614
|
+
</example>
|
615
|
+
</foreword></preface>
|
616
|
+
</iso-standard>
|
617
|
+
INPUT
|
618
|
+
<html xmlns:epub='http://www.idpf.org/2007/ops' lang='en'><head><style>
|
619
|
+
</style>
|
620
|
+
</head>
|
621
|
+
<body lang='EN-US' link='blue' vlink='#954F72'>
|
622
|
+
<div class='WordSection1'>
|
623
|
+
<p> </p>
|
624
|
+
</div>
|
625
|
+
<p>
|
626
|
+
<br clear='all' class='section'/>
|
627
|
+
</p>
|
628
|
+
<div class='WordSection2'>
|
629
|
+
<p>
|
630
|
+
<br clear='all' style='mso-special-character:line-break;page-break-before:always'/>
|
631
|
+
</p>
|
632
|
+
<div>
|
633
|
+
<h1 class='ForewordTitle'>Foreword</h1>
|
634
|
+
<div id='samplecode' class='example' style='page-break-after: avoid;page-break-inside: avoid;'>
|
635
|
+
<p class='example-title'>EXAMPLE — Title</p>
|
636
|
+
<p>Hello</p>
|
637
|
+
<p id='X' class='Sourcecode'>
|
638
|
+
<br/>
|
639
|
+
 
|
640
|
+
<br/>
|
641
|
+
 
|
642
|
+
</p>
|
643
|
+
<p class='SourceTitle' style='text-align:center;'>Sample</p>
|
644
|
+
</div>
|
645
|
+
</div>
|
646
|
+
<p> </p>
|
647
|
+
</div>
|
648
|
+
<p>
|
649
|
+
<br clear='all' class='section'/>
|
650
|
+
</p>
|
651
|
+
<div class='WordSection3'>
|
652
|
+
<p class='zzSTDTitle1'/>
|
653
|
+
</div>
|
654
|
+
</body>
|
655
|
+
</html>
|
656
|
+
OUTPUT
|
657
|
+
end
|
492
658
|
|
493
659
|
it "processes sequences of examples" do
|
494
660
|
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
@@ -671,7 +837,7 @@ Que?
|
|
671
837
|
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
672
838
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
673
839
|
<preface><foreword>
|
674
|
-
<admonition id="_70234f78-64e5-4dfc-8b6f-f3f037348b6a" type="caution">
|
840
|
+
<admonition id="_70234f78-64e5-4dfc-8b6f-f3f037348b6a" type="caution" keep-with-next="true" keep-lines-together="true">
|
675
841
|
<p id="_e94663cc-2473-4ccc-9a72-983a74d989f2">Only use paddy or parboiled rice for the determination of husked rice yield.</p>
|
676
842
|
</admonition>
|
677
843
|
</foreword></preface>
|
@@ -681,7 +847,7 @@ Que?
|
|
681
847
|
<br/>
|
682
848
|
<div>
|
683
849
|
<h1 class="ForewordTitle">Foreword</h1>
|
684
|
-
<div class="Admonition" id='_70234f78-64e5-4dfc-8b6f-f3f037348b6a'><p class="AdmonitionTitle" style="text-align:center;">CAUTION</p>
|
850
|
+
<div class="Admonition" id='_70234f78-64e5-4dfc-8b6f-f3f037348b6a' style='page-break-after: avoid;page-break-inside: avoid;'><p class="AdmonitionTitle" style="text-align:center;">CAUTION</p>
|
685
851
|
<p id="_e94663cc-2473-4ccc-9a72-983a74d989f2">Only use paddy or parboiled rice for the determination of husked rice yield.</p>
|
686
852
|
</div>
|
687
853
|
</div>
|
@@ -723,7 +889,7 @@ Que?
|
|
723
889
|
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
724
890
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
725
891
|
<preface><foreword>
|
726
|
-
<formula id="_be9158af-7e93-4ee2-90c5-26d31c181934" unnumbered="true">
|
892
|
+
<formula id="_be9158af-7e93-4ee2-90c5-26d31c181934" unnumbered="true" keep-with-next="true" keep-lines-together="true">
|
727
893
|
<stem type="AsciiMath">r = 1 %</stem>
|
728
894
|
<dl id="_e4fe94fe-1cde-49d9-b1ad-743293b7e21d">
|
729
895
|
<dt>
|
@@ -747,16 +913,16 @@ Que?
|
|
747
913
|
<br/>
|
748
914
|
<div>
|
749
915
|
<h1 class="ForewordTitle">Foreword</h1>
|
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>
|
916
|
+
<div id="_be9158af-7e93-4ee2-90c5-26d31c181934" style='page-break-after: avoid;page-break-inside: avoid;'><div 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>
|
751
917
|
<span class="stem">(#(r)#)</span>
|
752
918
|
</dt><dd>
|
753
919
|
<p id="_1b99995d-ff03-40f5-8f2e-ab9665a69b77">is the repeatability limit.</p>
|
754
920
|
</dd></dl>
|
755
921
|
|
756
922
|
|
757
|
-
<div id="_83083c7a-6c85-43db-a9fa-4d8edd0c9fc0" class="Note"><p><span class="note_label">NOTE</span>  [durationUnits] is essentially a duration statement without the "P" prefix. "P" is unnecessary because between "G" and "U" duration is always expressed.</p></div>
|
923
|
+
<div id="_83083c7a-6c85-43db-a9fa-4d8edd0c9fc0" class="Note"><p><span class="note_label">NOTE</span>  [durationUnits] is essentially a duration statement without the "P" prefix. "P" is unnecessary because between "G" and "U" duration is always expressed.</p></div></div>
|
758
924
|
|
759
|
-
<div id="_be9158af-7e93-4ee2-90c5-26d31c181935" class="formula"><p><span class="stem">(#(r = 1 %)#)</span>  (1)</p></div>
|
925
|
+
<div id="_be9158af-7e93-4ee2-90c5-26d31c181935"><div class="formula"><p><span class="stem">(#(r = 1 %)#)</span>  (1)</p></div></div>
|
760
926
|
</div>
|
761
927
|
<p class="zzSTDTitle1"/>
|
762
928
|
</div>
|
@@ -769,7 +935,7 @@ Que?
|
|
769
935
|
expect(xmlpp(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
770
936
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
771
937
|
<preface><foreword>
|
772
|
-
<formula id="_be9158af-7e93-4ee2-90c5-26d31c181934" unnumbered="true">
|
938
|
+
<formula id="_be9158af-7e93-4ee2-90c5-26d31c181934" unnumbered="true" keep-with-next="true" keep-lines-together="true">
|
773
939
|
<stem type="AsciiMath">r = 1 %</stem>
|
774
940
|
<dl id="_e4fe94fe-1cde-49d9-b1ad-743293b7e21d">
|
775
941
|
<dt>
|
@@ -807,7 +973,7 @@ Que?
|
|
807
973
|
</p>
|
808
974
|
<div>
|
809
975
|
<h1 class='ForewordTitle'>Foreword</h1>
|
810
|
-
<div id='_be9158af-7e93-4ee2-90c5-26d31c181934' class='formula'>
|
976
|
+
<div id='_be9158af-7e93-4ee2-90c5-26d31c181934' style='page-break-after: avoid;page-break-inside: avoid;'><div class='formula'>
|
811
977
|
<p>
|
812
978
|
<span class='stem'>(#(r = 1 %)#)</span>
|
813
979
|
</p>
|
@@ -834,12 +1000,14 @@ Que?
|
|
834
1000
|
always expressed.
|
835
1001
|
</p>
|
836
1002
|
</div>
|
837
|
-
|
1003
|
+
</div>
|
1004
|
+
<div id='_be9158af-7e93-4ee2-90c5-26d31c181935'><div class='formula'>
|
838
1005
|
<p>
|
839
1006
|
<span class='stem'>(#(r = 1 %)#)</span>
|
840
1007
|
<span style='mso-tab-count:1'>  </span>
|
841
1008
|
(1)
|
842
1009
|
</p>
|
1010
|
+
</div>
|
843
1011
|
</div>
|
844
1012
|
</div>
|
845
1013
|
<p> </p>
|
@@ -855,14 +1023,14 @@ Que?
|
|
855
1023
|
OUTPUT
|
856
1024
|
end
|
857
1025
|
|
858
|
-
it "processes paragraph
|
1026
|
+
it "processes paragraph attributes" do
|
859
1027
|
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
860
1028
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
861
1029
|
<preface><foreword>
|
862
1030
|
<p align="left" id="_08bfe952-d57f-4150-9c95-5d52098cc2a8">Vache Equipment<br/>
|
863
1031
|
Fictitious<br/>
|
864
1032
|
World</p>
|
865
|
-
<p align="justify">Justify</p>
|
1033
|
+
<p align="justify" keep-with-next="true" keep-lines-together="true">Justify</p>
|
866
1034
|
</foreword></preface>
|
867
1035
|
</iso-standard>
|
868
1036
|
INPUT
|
@@ -874,7 +1042,7 @@ World
|
|
874
1042
|
Fictitious<br/>
|
875
1043
|
World
|
876
1044
|
</p>
|
877
|
-
<p style="text-align:justify;">Justify</p>
|
1045
|
+
<p style="text-align:justify;page-break-after: avoid;page-break-inside: avoid;">Justify</p>
|
878
1046
|
</div>
|
879
1047
|
<p class="zzSTDTitle1"/>
|
880
1048
|
</div>
|
@@ -883,14 +1051,14 @@ World
|
|
883
1051
|
OUTPUT
|
884
1052
|
end
|
885
1053
|
|
886
|
-
it "processes paragraph
|
1054
|
+
it "processes paragraph attributes (Word)" do
|
887
1055
|
expect(xmlpp(IsoDoc::WordConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
888
1056
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
889
1057
|
<preface><foreword>
|
890
1058
|
<p align="left" id="_08bfe952-d57f-4150-9c95-5d52098cc2a8">Vache Equipment<br/>
|
891
1059
|
Fictitious<br/>
|
892
1060
|
World</p>
|
893
|
-
<p align="justify">Justify</p>
|
1061
|
+
<p align="justify" keep-with-next="true" keep-lines-together="true">Justify</p>
|
894
1062
|
</foreword></preface>
|
895
1063
|
</iso-standard>
|
896
1064
|
INPUT
|
@@ -905,11 +1073,11 @@ World
|
|
905
1073
|
<p><br clear="all" style="mso-special-character:line-break;page-break-before:always"/></p>
|
906
1074
|
<div>
|
907
1075
|
<h1 class="ForewordTitle">Foreword</h1>
|
908
|
-
<p id="_08bfe952-d57f-4150-9c95-5d52098cc2a8" align="left" style="text-align:left">Vache Equipment<br/>
|
1076
|
+
<p id="_08bfe952-d57f-4150-9c95-5d52098cc2a8" align="left" style="text-align:left;">Vache Equipment<br/>
|
909
1077
|
Fictitious<br/>
|
910
1078
|
World
|
911
1079
|
</p>
|
912
|
-
<p style="text-align:justify">Justify</p>
|
1080
|
+
<p style="text-align:justify;page-break-after: avoid;page-break-inside: avoid;">Justify</p>
|
913
1081
|
</div>
|
914
1082
|
<p> </p>
|
915
1083
|
</div>
|
@@ -984,7 +1152,7 @@ World
|
|
984
1152
|
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
985
1153
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
986
1154
|
<preface><foreword>
|
987
|
-
<permission id="_">
|
1155
|
+
<permission id="_" keep-with-next="true" keep-lines-together="true">
|
988
1156
|
<label>/ogc/recommendation/wfs/2</label>
|
989
1157
|
<inherit>/ss/584/2015/level/1</inherit>
|
990
1158
|
<inherit><eref type="inline" bibitemid="rfc2616" citeas="RFC 2616">RFC 2616 (HTTP/1.1)</eref></inherit>
|
@@ -1042,7 +1210,8 @@ World
|
|
1042
1210
|
<br/>
|
1043
1211
|
<div>
|
1044
1212
|
<h1 class="ForewordTitle">Foreword</h1>
|
1045
|
-
<div class="permission"
|
1213
|
+
<div class="permission" id='_' style='page-break-after: avoid;page-break-inside: avoid;'>
|
1214
|
+
<p class="RecommendationTitle">Permission 1:<br/>/ogc/recommendation/wfs/2</p>
|
1046
1215
|
<p><i>Subject: user<br/>
|
1047
1216
|
Inherits: /ss/584/2015/level/1
|
1048
1217
|
<br/>
|
@@ -1058,7 +1227,7 @@ Inherits: RFC 2616 (HTTP/1.1)
|
|
1058
1227
|
</div>
|
1059
1228
|
<div class="requirement-measurement-target">
|
1060
1229
|
<p id="_">The measurement target shall be measured as:</p>
|
1061
|
-
<div id="_" class="formula"><p><span class="stem">(#(r/1 = 0)#)</span>  (1)</p></div>
|
1230
|
+
<div id="_"><div class="formula"><p><span class="stem">(#(r/1 = 0)#)</span>  (1)</p></div></div>
|
1062
1231
|
|
1063
1232
|
|
1064
1233
|
</div>
|
@@ -1088,7 +1257,7 @@ Inherits: RFC 2616 (HTTP/1.1)
|
|
1088
1257
|
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
1089
1258
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
1090
1259
|
<preface><foreword>
|
1091
|
-
<requirement id="A" unnumbered="true">
|
1260
|
+
<requirement id="A" unnumbered="true" keep-with-next="true" keep-lines-together="true">
|
1092
1261
|
<title>A New Requirement</title>
|
1093
1262
|
<label>/ogc/recommendation/wfs/2</label>
|
1094
1263
|
<inherit>/ss/584/2015/level/1</inherit>
|
@@ -1114,7 +1283,7 @@ Inherits: RFC 2616 (HTTP/1.1)
|
|
1114
1283
|
<description>
|
1115
1284
|
<p id="_">As for the measurement targets,</p>
|
1116
1285
|
</description>
|
1117
|
-
<measurement-target exclude="false">
|
1286
|
+
<measurement-target exclude="false" keep-with-next="true" keep-lines-together="true">
|
1118
1287
|
<p id="_">The measurement target shall be measured as:</p>
|
1119
1288
|
<formula id="B">
|
1120
1289
|
<stem type="AsciiMath">r/1 = 0</stem>
|
@@ -1139,7 +1308,8 @@ Inherits: RFC 2616 (HTTP/1.1)
|
|
1139
1308
|
<br/>
|
1140
1309
|
<div>
|
1141
1310
|
<h1 class="ForewordTitle">Foreword</h1>
|
1142
|
-
<div class="require"
|
1311
|
+
<div class="require" id='A' style='page-break-after: avoid;page-break-inside: avoid;'>
|
1312
|
+
<p class="RecommendationTitle">Requirement:<br/>/ogc/recommendation/wfs/2. A New Requirement</p><p><i>Subject: user<br/>Inherits: /ss/584/2015/level/1</i></p>
|
1143
1313
|
|
1144
1314
|
<div class="requirement-description">
|
1145
1315
|
<p id="_">I recommend <i>this</i>.</p>
|
@@ -1148,9 +1318,9 @@ Inherits: RFC 2616 (HTTP/1.1)
|
|
1148
1318
|
<div class="requirement-description">
|
1149
1319
|
<p id="_">As for the measurement targets,</p>
|
1150
1320
|
</div>
|
1151
|
-
<div class="requirement-measurement-target">
|
1321
|
+
<div class="requirement-measurement-target" style='page-break-after: avoid;page-break-inside: avoid;'>
|
1152
1322
|
<p id="_">The measurement target shall be measured as:</p>
|
1153
|
-
<div id="B" class="formula"><p><span class="stem">(#(r/1 = 0)#)</span>  (1)</p></div>
|
1323
|
+
<div id="B"><div class="formula"><p><span class="stem">(#(r/1 = 0)#)</span>  (1)</p></div></div>
|
1154
1324
|
|
1155
1325
|
|
1156
1326
|
</div>
|
@@ -1227,7 +1397,7 @@ Inherits: RFC 2616 (HTTP/1.1)
|
|
1227
1397
|
<br/>
|
1228
1398
|
<div>
|
1229
1399
|
<h1 class='ForewordTitle'>Avant-propos</h1>
|
1230
|
-
<div class='require'>
|
1400
|
+
<div class='require' id="A">
|
1231
1401
|
<p class='RecommendationTitle'>
|
1232
1402
|
Exigence:
|
1233
1403
|
<br/>
|
@@ -1252,11 +1422,12 @@ Inherits: RFC 2616 (HTTP/1.1)
|
|
1252
1422
|
</div>
|
1253
1423
|
<div class='requirement-measurement-target'>
|
1254
1424
|
<p id='_'>The measurement target shall be measured as:</p>
|
1255
|
-
<div id='B' class='formula'>
|
1425
|
+
<div id='B'><div class='formula'>
|
1256
1426
|
<p>
|
1257
1427
|
<span class='stem'>(#(r/1 = 0)#)</span>
|
1258
1428
|
  (1)
|
1259
1429
|
</p>
|
1430
|
+
</div>
|
1260
1431
|
</div>
|
1261
1432
|
</div>
|
1262
1433
|
<div class='requirement-verification'>
|
@@ -1287,7 +1458,7 @@ end
|
|
1287
1458
|
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
1288
1459
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
1289
1460
|
<preface><foreword>
|
1290
|
-
<recommendation id="_" obligation="shall,could">
|
1461
|
+
<recommendation id="_" obligation="shall,could" keep-with-next="true" keep-lines-together="true">
|
1291
1462
|
<label>/ogc/recommendation/wfs/2</label>
|
1292
1463
|
<inherit>/ss/584/2015/level/1</inherit>
|
1293
1464
|
<classification><tag>type</tag><value>text</value></classification>
|
@@ -1339,7 +1510,8 @@ end
|
|
1339
1510
|
<br/>
|
1340
1511
|
<div>
|
1341
1512
|
<h1 class="ForewordTitle">Foreword</h1>
|
1342
|
-
<div class="recommend"
|
1513
|
+
<div class="recommend" id='_' style='page-break-after: avoid;page-break-inside: avoid;'>
|
1514
|
+
<p class="RecommendationTitle">Recommendation 1:<br/>/ogc/recommendation/wfs/2</p><p><i>Obligation: shall,could<br/>Subject: user<br/>Inherits: /ss/584/2015/level/1<br/>Type: text<br/>Language: BASIC</i></p>
|
1343
1515
|
<div class="requirement-description">
|
1344
1516
|
<p id="_">I recommend <i>this</i>.</p>
|
1345
1517
|
</div>
|
@@ -1349,7 +1521,7 @@ end
|
|
1349
1521
|
</div>
|
1350
1522
|
<div class="requirement-measurement-target">
|
1351
1523
|
<p id="_">The measurement target shall be measured as:</p>
|
1352
|
-
<div id="_" class="formula"><p><span class="stem">(#(r/1 = 0)#)</span>  (1)</p></div>
|
1524
|
+
<div id="_"><div class="formula"><p><span class="stem">(#(r/1 = 0)#)</span>  (1)</p></div></div>
|
1353
1525
|
|
1354
1526
|
|
1355
1527
|
</div>
|
@@ -1374,7 +1546,7 @@ end
|
|
1374
1546
|
<language>en</language>
|
1375
1547
|
</bibdata>
|
1376
1548
|
<preface><foreword>
|
1377
|
-
<figure id="_" class="pseudocode"><name>Label</name><p id="_"> <strong>A</strong><br/>
|
1549
|
+
<figure id="_" class="pseudocode" keep-with-next="true" keep-lines-together="true"><name>Label</name><p id="_"> <strong>A</strong><br/>
|
1378
1550
|
<smallcap>B</smallcap></p>
|
1379
1551
|
<p id="_"> <em>C</em></p></figure>
|
1380
1552
|
</preface></itu-standard>
|
@@ -1383,7 +1555,7 @@ INPUT
|
|
1383
1555
|
<br/>
|
1384
1556
|
<div>
|
1385
1557
|
<h1 class="ForewordTitle">Foreword</h1>
|
1386
|
-
<div id="_" class="pseudocode"><p id="_">  <b>A</b><br/>
|
1558
|
+
<div id="_" class="pseudocode" style='page-break-after: avoid;page-break-inside: avoid;'><p id="_">  <b>A</b><br/>
|
1387
1559
|
        <span style="font-variant:small-caps;">B</span></p>
|
1388
1560
|
<p id="_">  <i>C</i></p><p class="SourceTitle" style="text-align:center;">Figure 1 — Label</p></div>
|
1389
1561
|
</div>
|