isodoc 1.2.2 → 1.2.7
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/.github/workflows/rake.yml +64 -0
- data/isodoc.gemspec +3 -1
- data/lib/isodoc-yaml/i18n-fr.yaml +1 -1
- data/lib/isodoc/base_style/all.css +5 -1
- data/lib/isodoc/base_style/metanorma_word.css +6 -0
- data/lib/isodoc/base_style/metanorma_word.scss +6 -0
- data/lib/isodoc/base_style/reset.css +5 -1
- data/lib/isodoc/base_style/reset.scss +6 -1
- data/lib/isodoc/convert.rb +1 -14
- data/lib/isodoc/function/blocks.rb +1 -0
- data/lib/isodoc/function/cleanup.rb +1 -1
- data/lib/isodoc/function/references.rb +4 -2
- data/lib/isodoc/function/section.rb +13 -1
- data/lib/isodoc/function/table.rb +1 -0
- data/lib/isodoc/function/to_word_html.rb +4 -0
- data/lib/isodoc/function/utils.rb +1 -1
- data/lib/isodoc/html_function/html.rb +1 -0
- data/lib/isodoc/i18n.rb +8 -50
- data/lib/isodoc/metadata.rb +44 -111
- data/lib/isodoc/metadata_contributor.rb +90 -0
- data/lib/isodoc/metadata_date.rb +11 -0
- data/lib/isodoc/presentation_function/bibdata.rb +96 -0
- data/lib/isodoc/presentation_function/block.rb +14 -0
- data/lib/isodoc/presentation_function/inline.rb +27 -14
- data/lib/isodoc/presentation_xml_convert.rb +4 -0
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/word_function/body.rb +1 -0
- data/lib/isodoc/word_function/postprocess.rb +2 -2
- data/lib/isodoc/word_function/table.rb +3 -2
- data/lib/isodoc/xref.rb +1 -0
- data/lib/isodoc/xref/xref_anchor.rb +8 -3
- data/lib/isodoc/xref/xref_counter.rb +21 -7
- data/lib/isodoc/xref/xref_gen.rb +29 -6
- data/lib/isodoc/xref/xref_sect_gen.rb +1 -1
- data/lib/isodoc/xslfo_convert.rb +6 -1
- data/spec/assets/i18n.yaml +16 -0
- data/spec/isodoc/blocks_spec.rb +330 -215
- data/spec/isodoc/cleanup_spec.rb +3 -1
- data/spec/isodoc/i18n_spec.rb +68 -16
- data/spec/isodoc/inline_spec.rb +47 -5
- data/spec/isodoc/metadata_spec.rb +69 -19
- data/spec/isodoc/postproc_spec.rb +39 -3
- data/spec/isodoc/ref_spec.rb +3 -3
- data/spec/isodoc/section_spec.rb +134 -10
- data/spec/isodoc/table_spec.rb +306 -207
- data/spec/isodoc/terms_spec.rb +1 -1
- data/spec/isodoc/xref_spec.rb +46 -18
- data/spec/spec_helper.rb +6 -0
- metadata +35 -7
- data/.github/workflows/macos.yml +0 -42
- data/.github/workflows/ubuntu.yml +0 -62
- data/.github/workflows/windows.yml +0 -44
data/lib/isodoc/xref/xref_gen.rb
CHANGED
@@ -2,6 +2,29 @@ require_relative "xref_gen_seq.rb"
|
|
2
2
|
|
3
3
|
module IsoDoc::XrefGen
|
4
4
|
module Blocks
|
5
|
+
NUMBERED_BLOCKS = %w(termnote termexample note example requirement
|
6
|
+
recommendation permission figure table formula admonition sourcecode).freeze
|
7
|
+
|
8
|
+
def amend_preprocess(xmldoc)
|
9
|
+
xmldoc.xpath(ns("//amend[newcontent]")).each do |a|
|
10
|
+
autonum = amend_autonums(a)
|
11
|
+
NUMBERED_BLOCKS.each do |b|
|
12
|
+
a.xpath(ns("./newcontent//#{b}")).each_with_index do |e, i|
|
13
|
+
autonum[b] and i == 0 and e["number"] = autonum[b]
|
14
|
+
!autonum[b] and e["unnumbered"] = "true"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def amend_autonums(a)
|
21
|
+
autonum = {}
|
22
|
+
a.xpath(ns("./autonumber")).each do |n|
|
23
|
+
autonum[n["type"]] = n.text
|
24
|
+
end
|
25
|
+
autonum
|
26
|
+
end
|
27
|
+
|
5
28
|
def termnote_label(n)
|
6
29
|
@labels["termnote"].gsub(/%/, n.to_s)
|
7
30
|
end
|
@@ -13,7 +36,7 @@ module IsoDoc::XrefGen
|
|
13
36
|
return if n["id"].nil? || n["id"].empty?
|
14
37
|
c.increment(n)
|
15
38
|
@anchors[n["id"]] =
|
16
|
-
{ label: termnote_label(c.print), type: "termnote",
|
39
|
+
{ label: termnote_label(c.print), type: "termnote", value: c.print,
|
17
40
|
xref: l10n("#{anchor(t['id'], :xref)}, "\
|
18
41
|
"#{@labels["note_xref"]} #{c.print}") }
|
19
42
|
end
|
@@ -27,9 +50,9 @@ module IsoDoc::XrefGen
|
|
27
50
|
examples.each do |n|
|
28
51
|
return if n["id"].nil? || n["id"].empty?
|
29
52
|
c.increment(n)
|
30
|
-
idx = examples.size == 1 ? "" : c.print
|
53
|
+
idx = examples.size == 1 && !n["number"] ? "" : c.print
|
31
54
|
@anchors[n["id"]] = {
|
32
|
-
type: "termexample", label: idx,
|
55
|
+
type: "termexample", label: idx, value: c.print,
|
33
56
|
xref: l10n("#{anchor(t['id'], :xref)}, "\
|
34
57
|
"#{@labels["example_xref"]} #{c.print}") }
|
35
58
|
end
|
@@ -54,7 +77,7 @@ module IsoDoc::XrefGen
|
|
54
77
|
c = Counter.new
|
55
78
|
notes.each do |n|
|
56
79
|
next if @anchors[n["id"]] || n["id"].nil? || n["id"].empty?
|
57
|
-
idx = notes.size == 1 ? "" : " #{c.increment(n).print}"
|
80
|
+
idx = notes.size == 1 && !n["number"] ? "" : " #{c.increment(n).print}"
|
58
81
|
@anchors[n["id"]] = anchor_struct(idx, n, @labels["note_xref"],
|
59
82
|
"note", false)
|
60
83
|
end
|
@@ -76,7 +99,7 @@ module IsoDoc::XrefGen
|
|
76
99
|
notes.each do |n|
|
77
100
|
next if @anchors[n["id"]]
|
78
101
|
next if n["id"].nil? || n["id"].empty?
|
79
|
-
idx = notes.size == 1 ? "" : " #{c.increment(n).print}"
|
102
|
+
idx = notes.size == 1 && !n["number"] ? "" : " #{c.increment(n).print}"
|
80
103
|
@anchors[n["id"]] = anchor_struct(idx, n, @labels["example_xref"],
|
81
104
|
"example", n["unnumbered"])
|
82
105
|
end
|
@@ -91,7 +114,7 @@ module IsoDoc::XrefGen
|
|
91
114
|
c = Counter.new
|
92
115
|
notes.each do |n|
|
93
116
|
next if n["id"].nil? || n["id"].empty?
|
94
|
-
idx = notes.size == 1 ? "" : " #{c.increment(n).print}"
|
117
|
+
idx = notes.size == 1 && !n["number"] ? "" : " #{c.increment(n).print}"
|
95
118
|
@anchors[n["id"]] = anchor_struct(idx, n, @labels["list"], "list", false)
|
96
119
|
list_item_anchor_names(n, @anchors[n["id"]], 1, "", notes.size != 1)
|
97
120
|
end
|
@@ -113,7 +113,7 @@ module IsoDoc::XrefGen
|
|
113
113
|
|
114
114
|
def annex_names(clause, num)
|
115
115
|
@anchors[clause["id"]] = { label: annex_name_lbl(clause, num),
|
116
|
-
type: "clause",
|
116
|
+
type: "clause", value: num.to_s,
|
117
117
|
xref: "#{@labels["annex"]} #{num}", level: 1 }
|
118
118
|
if a = single_annex_special_section(clause)
|
119
119
|
annex_names1(a, "#{num}", 1)
|
data/lib/isodoc/xslfo_convert.rb
CHANGED
@@ -23,6 +23,10 @@ module IsoDoc
|
|
23
23
|
nil
|
24
24
|
end
|
25
25
|
|
26
|
+
def pdf_options(docxml)
|
27
|
+
""
|
28
|
+
end
|
29
|
+
|
26
30
|
def convert(input_filename, file = nil, debug = false, output_filename = nil)
|
27
31
|
file = File.read(input_filename, encoding: "utf-8") if file.nil?
|
28
32
|
docxml, filename, dir = convert_init(file, input_filename, debug)
|
@@ -34,7 +38,8 @@ module IsoDoc
|
|
34
38
|
FileUtils.rm_rf dir
|
35
39
|
::Metanorma::Output::XslfoPdf.new.convert(input_filename,
|
36
40
|
output_filename || "#{filename}.#{@suffix}",
|
37
|
-
File.join(@libdir, pdf_stylesheet(docxml))
|
41
|
+
File.join(@libdir, pdf_stylesheet(docxml)),
|
42
|
+
pdf_options(docxml))
|
38
43
|
end
|
39
44
|
|
40
45
|
def xref_parse(node, out)
|
data/spec/assets/i18n.yaml
CHANGED
@@ -11,6 +11,22 @@ normref: Normaj citaĵoj
|
|
11
11
|
bibliography: Bibliografio
|
12
12
|
inform_annex: informa
|
13
13
|
all_parts: ĉiuj partoj
|
14
|
+
norm_annex: normative
|
14
15
|
locality: {
|
15
16
|
table: Tabelo
|
16
17
|
}
|
18
|
+
doctype_dict: {
|
19
|
+
brochure: broŝuro,
|
20
|
+
conference proceedings: konferencaktoj
|
21
|
+
}
|
22
|
+
stage_dict: {
|
23
|
+
published: publikigita
|
24
|
+
}
|
25
|
+
substage_dict: {
|
26
|
+
withdrawn: fortirita
|
27
|
+
}
|
28
|
+
array:
|
29
|
+
- elem1
|
30
|
+
- elem2
|
31
|
+
- {elem3: elem4, elem5: elem6}
|
32
|
+
void:
|
data/spec/isodoc/blocks_spec.rb
CHANGED
@@ -1,6 +1,243 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
RSpec.describe IsoDoc do
|
4
|
+
it "processes amend blocks" do
|
5
|
+
input = <<~INPUT
|
6
|
+
<standard-document xmlns='https://www.metanorma.org/ns/standoc'>
|
7
|
+
<bibdata type='standard'>
|
8
|
+
<title language='en' format='text/plain'>Document title</title>
|
9
|
+
<language>en</language>
|
10
|
+
<script>Latn</script>
|
11
|
+
<status>
|
12
|
+
<stage>published</stage>
|
13
|
+
</status>
|
14
|
+
<copyright>
|
15
|
+
<from>2020</from>
|
16
|
+
</copyright>
|
17
|
+
<ext>
|
18
|
+
<doctype>article</doctype>
|
19
|
+
</ext>
|
20
|
+
</bibdata>
|
21
|
+
<sections>
|
22
|
+
<clause id='A' inline-header='false' obligation='normative'>
|
23
|
+
<title>Change Clause</title>
|
24
|
+
<amend id='B' change='modify' path='//table[2]' path_end='//table[2]/following-sibling:example[1]' title='Change'>
|
25
|
+
<autonumber type='table'>2</autonumber>
|
26
|
+
<autonumber type='example'>7</autonumber>
|
27
|
+
<description>
|
28
|
+
<p id='C'>
|
29
|
+
<em>
|
30
|
+
This table contains information on polygon cells which are not
|
31
|
+
included in ISO 10303-52. Remove table 2 completely and replace
|
32
|
+
with:
|
33
|
+
</em>
|
34
|
+
</p>
|
35
|
+
</description>
|
36
|
+
<newcontent id='D'>
|
37
|
+
<table id='E'>
|
38
|
+
<name>Edges of triangle and quadrilateral cells</name>
|
39
|
+
<tbody>
|
40
|
+
<tr>
|
41
|
+
<th colspan='2' valign='middle' align='center'>triangle</th>
|
42
|
+
<th colspan='2' valign='middle' align='center'>quadrilateral</th>
|
43
|
+
</tr>
|
44
|
+
<tr>
|
45
|
+
<td valign='middle' align='center'>edge</td>
|
46
|
+
<td valign='middle' align='center'>vertices</td>
|
47
|
+
<td valign='middle' align='center'>edge</td>
|
48
|
+
<td valign='middle' align='center'>vertices</td>
|
49
|
+
</tr>
|
50
|
+
<tr>
|
51
|
+
<td valign='middle' align='center'>1</td>
|
52
|
+
<td valign='middle' align='center'>1, 2</td>
|
53
|
+
<td valign='middle' align='center'>1</td>
|
54
|
+
<td valign='middle' align='center'>1, 2</td>
|
55
|
+
</tr>
|
56
|
+
<tr>
|
57
|
+
<td valign='middle' align='center'>2</td>
|
58
|
+
<td valign='middle' align='center'>2, 3</td>
|
59
|
+
<td valign='middle' align='center'>2</td>
|
60
|
+
<td valign='middle' align='center'>2, 3</td>
|
61
|
+
</tr>
|
62
|
+
<tr>
|
63
|
+
<td valign='middle' align='center'>3</td>
|
64
|
+
<td valign='middle' align='center'>3, 1</td>
|
65
|
+
<td valign='middle' align='center'>3</td>
|
66
|
+
<td valign='middle' align='center'>3, 4</td>
|
67
|
+
</tr>
|
68
|
+
<tr>
|
69
|
+
<td valign='top' align='left'/>
|
70
|
+
<td valign='top' align='left'/>
|
71
|
+
<td valign='middle' align='center'>4</td>
|
72
|
+
<td valign='middle' align='center'>4, 1</td>
|
73
|
+
</tr>
|
74
|
+
</tbody>
|
75
|
+
</table>
|
76
|
+
<figure id="H"><name>Figure</name></figure>
|
77
|
+
<example id='F'>
|
78
|
+
<p id='G'>This is not generalised further.</p>
|
79
|
+
</example>
|
80
|
+
</newcontent>
|
81
|
+
</amend>
|
82
|
+
</clause>
|
83
|
+
</sections>
|
84
|
+
</standard-document>
|
85
|
+
INPUT
|
86
|
+
presxml = <<~OUTPUT
|
87
|
+
<standard-document xmlns="https://www.metanorma.org/ns/standoc" type="presentation">
|
88
|
+
<bibdata type="standard">
|
89
|
+
<title language="en" format="text/plain">Document title</title>
|
90
|
+
<language current="true">en</language>
|
91
|
+
<script current="true">Latn</script>
|
92
|
+
<status>
|
93
|
+
<stage language="">published</stage>
|
94
|
+
</status>
|
95
|
+
<copyright>
|
96
|
+
<from>2020</from>
|
97
|
+
</copyright>
|
98
|
+
<ext>
|
99
|
+
<doctype language="">article</doctype>
|
100
|
+
</ext>
|
101
|
+
</bibdata>
|
102
|
+
<sections>
|
103
|
+
<clause id="A" inline-header="false" obligation="normative">
|
104
|
+
<title depth="1">1.<tab/>Change Clause</title>
|
105
|
+
<p id="C">
|
106
|
+
<em>
|
107
|
+
This table contains information on polygon cells which are not
|
108
|
+
included in ISO 10303-52. Remove table 2 completely and replace
|
109
|
+
with:
|
110
|
+
</em>
|
111
|
+
</p>
|
112
|
+
<quote id="D">
|
113
|
+
<table id="E" number="2">
|
114
|
+
<name>Table 2 — Edges of triangle and quadrilateral cells</name>
|
115
|
+
<tbody>
|
116
|
+
<tr>
|
117
|
+
<th colspan="2" valign="middle" align="center">triangle</th>
|
118
|
+
<th colspan="2" valign="middle" align="center">quadrilateral</th>
|
119
|
+
</tr>
|
120
|
+
<tr>
|
121
|
+
<td valign="middle" align="center">edge</td>
|
122
|
+
<td valign="middle" align="center">vertices</td>
|
123
|
+
<td valign="middle" align="center">edge</td>
|
124
|
+
<td valign="middle" align="center">vertices</td>
|
125
|
+
</tr>
|
126
|
+
<tr>
|
127
|
+
<td valign="middle" align="center">1</td>
|
128
|
+
<td valign="middle" align="center">1, 2</td>
|
129
|
+
<td valign="middle" align="center">1</td>
|
130
|
+
<td valign="middle" align="center">1, 2</td>
|
131
|
+
</tr>
|
132
|
+
<tr>
|
133
|
+
<td valign="middle" align="center">2</td>
|
134
|
+
<td valign="middle" align="center">2, 3</td>
|
135
|
+
<td valign="middle" align="center">2</td>
|
136
|
+
<td valign="middle" align="center">2, 3</td>
|
137
|
+
</tr>
|
138
|
+
<tr>
|
139
|
+
<td valign="middle" align="center">3</td>
|
140
|
+
<td valign="middle" align="center">3, 1</td>
|
141
|
+
<td valign="middle" align="center">3</td>
|
142
|
+
<td valign="middle" align="center">3, 4</td>
|
143
|
+
</tr>
|
144
|
+
<tr>
|
145
|
+
<td valign="top" align="left"/>
|
146
|
+
<td valign="top" align="left"/>
|
147
|
+
<td valign="middle" align="center">4</td>
|
148
|
+
<td valign="middle" align="center">4, 1</td>
|
149
|
+
</tr>
|
150
|
+
</tbody>
|
151
|
+
</table>
|
152
|
+
<figure id="H" unnumbered="true"><name>Figure</name></figure>
|
153
|
+
<example id="F" number="7"><name>EXAMPLE 7</name>
|
154
|
+
<p id="G">This is not generalised further.</p>
|
155
|
+
</example>
|
156
|
+
</quote>
|
157
|
+
</clause>
|
158
|
+
</sections>
|
159
|
+
</standard-document>
|
160
|
+
OUTPUT
|
161
|
+
html = <<~OUTPUT
|
162
|
+
<html lang='en'>
|
163
|
+
<head/>
|
164
|
+
<body lang='en'>
|
165
|
+
<div class='title-section'>
|
166
|
+
<p> </p>
|
167
|
+
</div>
|
168
|
+
<br/>
|
169
|
+
<div class='prefatory-section'>
|
170
|
+
<p> </p>
|
171
|
+
</div>
|
172
|
+
<br/>
|
173
|
+
<div class='main-section'>
|
174
|
+
<p class='zzSTDTitle1'>Document title</p>
|
175
|
+
<div id='A'>
|
176
|
+
<h1>1.  Change Clause</h1>
|
177
|
+
<p id='C'>
|
178
|
+
<i>
|
179
|
+
This table contains information on polygon cells which are not
|
180
|
+
included in ISO 10303-52. Remove table 2 completely and replace
|
181
|
+
with:
|
182
|
+
</i>
|
183
|
+
</p>
|
184
|
+
<div class='Quote' id="D">
|
185
|
+
<p class='TableTitle' style='text-align:center;'>Table 2 — Edges of triangle and quadrilateral cells</p>
|
186
|
+
<table id='E' class='MsoISOTable' style='border-width:1px;border-spacing:0;'>
|
187
|
+
<tbody>
|
188
|
+
<tr>
|
189
|
+
<th colspan='2' style='font-weight:bold;text-align:center;vertical-align:middle;border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;' scope='row'>triangle</th>
|
190
|
+
<th colspan='2' style='font-weight:bold;text-align:center;vertical-align:middle;border-top:solid windowtext 1.5pt;border-bottom:solid windowtext 1.0pt;' scope='row'>quadrilateral</th>
|
191
|
+
</tr>
|
192
|
+
<tr>
|
193
|
+
<td style='text-align:center;vertical-align:middle;border-top:none;border-bottom:solid windowtext 1.0pt;'>edge</td>
|
194
|
+
<td style='text-align:center;vertical-align:middle;border-top:none;border-bottom:solid windowtext 1.0pt;'>vertices</td>
|
195
|
+
<td style='text-align:center;vertical-align:middle;border-top:none;border-bottom:solid windowtext 1.0pt;'>edge</td>
|
196
|
+
<td style='text-align:center;vertical-align:middle;border-top:none;border-bottom:solid windowtext 1.0pt;'>vertices</td>
|
197
|
+
</tr>
|
198
|
+
<tr>
|
199
|
+
<td style='text-align:center;vertical-align:middle;border-top:none;border-bottom:solid windowtext 1.0pt;'>1</td>
|
200
|
+
<td style='text-align:center;vertical-align:middle;border-top:none;border-bottom:solid windowtext 1.0pt;'>1, 2</td>
|
201
|
+
<td style='text-align:center;vertical-align:middle;border-top:none;border-bottom:solid windowtext 1.0pt;'>1</td>
|
202
|
+
<td style='text-align:center;vertical-align:middle;border-top:none;border-bottom:solid windowtext 1.0pt;'>1, 2</td>
|
203
|
+
</tr>
|
204
|
+
<tr>
|
205
|
+
<td style='text-align:center;vertical-align:middle;border-top:none;border-bottom:solid windowtext 1.0pt;'>2</td>
|
206
|
+
<td style='text-align:center;vertical-align:middle;border-top:none;border-bottom:solid windowtext 1.0pt;'>2, 3</td>
|
207
|
+
<td style='text-align:center;vertical-align:middle;border-top:none;border-bottom:solid windowtext 1.0pt;'>2</td>
|
208
|
+
<td style='text-align:center;vertical-align:middle;border-top:none;border-bottom:solid windowtext 1.0pt;'>2, 3</td>
|
209
|
+
</tr>
|
210
|
+
<tr>
|
211
|
+
<td style='text-align:center;vertical-align:middle;border-top:none;border-bottom:solid windowtext 1.0pt;'>3</td>
|
212
|
+
<td style='text-align:center;vertical-align:middle;border-top:none;border-bottom:solid windowtext 1.0pt;'>3, 1</td>
|
213
|
+
<td style='text-align:center;vertical-align:middle;border-top:none;border-bottom:solid windowtext 1.0pt;'>3</td>
|
214
|
+
<td style='text-align:center;vertical-align:middle;border-top:none;border-bottom:solid windowtext 1.0pt;'>3, 4</td>
|
215
|
+
</tr>
|
216
|
+
<tr>
|
217
|
+
<td style='text-align:left;vertical-align:top;border-top:none;border-bottom:solid windowtext 1.5pt;'/>
|
218
|
+
<td style='text-align:left;vertical-align:top;border-top:none;border-bottom:solid windowtext 1.5pt;'/>
|
219
|
+
<td style='text-align:center;vertical-align:middle;border-top:none;border-bottom:solid windowtext 1.5pt;'>4</td>
|
220
|
+
<td style='text-align:center;vertical-align:middle;border-top:none;border-bottom:solid windowtext 1.5pt;'>4, 1</td>
|
221
|
+
</tr>
|
222
|
+
</tbody>
|
223
|
+
</table>
|
224
|
+
<div id='H' class='figure'>
|
225
|
+
<p class='FigureTitle' style='text-align:center;'>Figure</p>
|
226
|
+
</div>
|
227
|
+
<div id='F' class='example'>
|
228
|
+
<p class='example-title'>EXAMPLE 7</p>
|
229
|
+
<p id='G'>This is not generalised further.</p>
|
230
|
+
</div>
|
231
|
+
</div>
|
232
|
+
</div>
|
233
|
+
</div>
|
234
|
+
</body>
|
235
|
+
</html>
|
236
|
+
OUTPUT
|
237
|
+
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", input, true)).sub(%r{<localized-strings>.*</localized-strings>}m, "")).to be_equivalent_to xmlpp(presxml)
|
238
|
+
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
|
239
|
+
end
|
240
|
+
|
4
241
|
it "processes unlabelled notes (Presentation XML)" do
|
5
242
|
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
6
243
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
@@ -12,7 +249,7 @@ RSpec.describe IsoDoc do
|
|
12
249
|
</iso-standard>
|
13
250
|
INPUT
|
14
251
|
<?xml version='1.0'?>
|
15
|
-
<iso-standard xmlns='http://riboseinc.com/isoxml'>
|
252
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
|
16
253
|
<preface>
|
17
254
|
<foreword>
|
18
255
|
<note id='A' keep-with-next='true' keep-lines-together='true'>
|
@@ -115,7 +352,7 @@ OUTPUT
|
|
115
352
|
</iso-standard>
|
116
353
|
INPUT
|
117
354
|
<?xml version='1.0'?>
|
118
|
-
<iso-standard xmlns='http://riboseinc.com/isoxml'>
|
355
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
|
119
356
|
<preface>
|
120
357
|
<foreword>
|
121
358
|
<note id='note1'>
|
@@ -403,7 +640,7 @@ B</pre>
|
|
403
640
|
</iso-standard>
|
404
641
|
INPUT
|
405
642
|
<?xml version='1.0'?>
|
406
|
-
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
643
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml" type="presentation">
|
407
644
|
<preface><foreword>
|
408
645
|
<figure id="figureA-1" keep-with-next="true" keep-lines-together="true">
|
409
646
|
<name>Figure 1 — Split-it-right <em>sample</em> divider<fn reference="1"><p>X</p></fn></name>
|
@@ -703,7 +940,7 @@ OUTPUT
|
|
703
940
|
</iso-standard>
|
704
941
|
INPUT
|
705
942
|
<?xml version='1.0'?>
|
706
|
-
<iso-standard xmlns='http://riboseinc.com/isoxml'>
|
943
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
|
707
944
|
<preface>
|
708
945
|
<foreword>
|
709
946
|
<example id='samplecode' keep-with-next='true' keep-lines-together='true'>
|
@@ -819,7 +1056,7 @@ OUTPUT
|
|
819
1056
|
</iso-standard>
|
820
1057
|
INPUT
|
821
1058
|
<?xml version='1.0'?>
|
822
|
-
<iso-standard xmlns='http://riboseinc.com/isoxml'>
|
1059
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
|
823
1060
|
<preface>
|
824
1061
|
<foreword>
|
825
1062
|
<example id='samplecode'>
|
@@ -855,7 +1092,7 @@ Que?
|
|
855
1092
|
</iso-standard>
|
856
1093
|
INPUT
|
857
1094
|
<?xml version='1.0'?>
|
858
|
-
<iso-standard xmlns='http://riboseinc.com/isoxml'>
|
1095
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
|
859
1096
|
<preface>
|
860
1097
|
<foreword>
|
861
1098
|
<sourcecode lang='ruby' id='samplecode'>
|
@@ -1093,7 +1330,7 @@ Que?
|
|
1093
1330
|
</iso-standard>
|
1094
1331
|
INPUT
|
1095
1332
|
<?xml version='1.0'?>
|
1096
|
-
<iso-standard xmlns='http://riboseinc.com/isoxml'>
|
1333
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
|
1097
1334
|
<preface>
|
1098
1335
|
<foreword>
|
1099
1336
|
<formula id='_be9158af-7e93-4ee2-90c5-26d31c181934' unnumbered='true' keep-with-next='true' keep-lines-together='true'>
|
@@ -1346,7 +1583,7 @@ it "processes blockquotes (Presentation XML)" do
|
|
1346
1583
|
</iso-standard>
|
1347
1584
|
INPUT
|
1348
1585
|
<?xml version='1.0'?>
|
1349
|
-
<iso-standard xmlns='http://riboseinc.com/isoxml'>
|
1586
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
|
1350
1587
|
<preface>
|
1351
1588
|
<foreword>
|
1352
1589
|
<quote id='_044bd364-c832-4b78-8fea-92242402a1d1'>
|
@@ -1485,7 +1722,7 @@ it "processes blockquotes (Presentation XML)" do
|
|
1485
1722
|
</iso-standard>
|
1486
1723
|
INPUT
|
1487
1724
|
<?xml version='1.0'?>
|
1488
|
-
<iso-standard xmlns='http://riboseinc.com/isoxml'>
|
1725
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
|
1489
1726
|
<preface>
|
1490
1727
|
<foreword>
|
1491
1728
|
<permission id='_' keep-with-next='true' keep-lines-together='true'>
|
@@ -1845,7 +2082,7 @@ Inherits: <a href='#rfc2616'>RFC 2616 (HTTP/1.1)</a>
|
|
1845
2082
|
</iso-standard>
|
1846
2083
|
INPUT
|
1847
2084
|
<?xml version='1.0'?>
|
1848
|
-
<iso-standard xmlns='http://riboseinc.com/isoxml'>
|
2085
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
|
1849
2086
|
<preface>
|
1850
2087
|
<foreword>
|
1851
2088
|
<requirement id='A' unnumbered='true' keep-with-next='true' keep-lines-together='true'>
|
@@ -1989,8 +2226,8 @@ end
|
|
1989
2226
|
OUTPUT
|
1990
2227
|
end
|
1991
2228
|
|
1992
|
-
it "processes requirements in French
|
1993
|
-
|
2229
|
+
it "processes requirements in French" do
|
2230
|
+
input = <<~INPUT
|
1994
2231
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
1995
2232
|
<bibdata>
|
1996
2233
|
<language>fr</language>
|
@@ -2044,125 +2281,63 @@ end
|
|
2044
2281
|
</foreword></preface>
|
2045
2282
|
</iso-standard>
|
2046
2283
|
INPUT
|
2047
|
-
|
2048
|
-
|
2049
|
-
|
2050
|
-
<
|
2051
|
-
<
|
2052
|
-
|
2053
|
-
|
2054
|
-
<foreword>
|
2055
|
-
|
2056
|
-
|
2057
|
-
|
2058
|
-
|
2059
|
-
|
2060
|
-
|
2061
|
-
|
2062
|
-
|
2063
|
-
|
2064
|
-
|
2065
|
-
|
2066
|
-
|
2067
|
-
|
2068
|
-
|
2069
|
-
<
|
2070
|
-
|
2071
|
-
|
2072
|
-
|
2073
|
-
|
2074
|
-
|
2075
|
-
|
2076
|
-
|
2077
|
-
|
2078
|
-
|
2079
|
-
|
2080
|
-
|
2081
|
-
|
2082
|
-
|
2083
|
-
|
2084
|
-
|
2085
|
-
|
2086
|
-
|
2087
|
-
|
2088
|
-
|
2089
|
-
|
2090
|
-
|
2091
|
-
|
2092
|
-
|
2093
|
-
|
2094
|
-
|
2095
|
-
|
2096
|
-
|
2097
|
-
|
2098
|
-
|
2099
|
-
|
2100
|
-
|
2101
|
-
<sourcecode id='_'>success-response()</sourcecode>
|
2102
|
-
</import>
|
2103
|
-
</requirement>
|
2104
|
-
</foreword>
|
2105
|
-
</preface>
|
2106
|
-
</iso-standard>
|
2284
|
+
|
2285
|
+
presxml = <<~OUTPUT
|
2286
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml" type="presentation">
|
2287
|
+
<bibdata>
|
2288
|
+
<language current="true">fr</language>
|
2289
|
+
<script current="true">Latn</script>
|
2290
|
+
</bibdata>
|
2291
|
+
<preface><foreword>
|
2292
|
+
<requirement id="A" unnumbered="true"><name>Exigence</name>
|
2293
|
+
<title>A New Requirement</title>
|
2294
|
+
<label>/ogc/recommendation/wfs/2</label>
|
2295
|
+
<inherit>/ss/584/2015/level/1</inherit>
|
2296
|
+
<subject>user</subject>
|
2297
|
+
<description>
|
2298
|
+
<p id="_">I recommend <em>this</em>.</p>
|
2299
|
+
</description>
|
2300
|
+
<specification exclude="true" type="tabular">
|
2301
|
+
<p id="_">This is the object of the recommendation:</p>
|
2302
|
+
<table id="_">
|
2303
|
+
<tbody>
|
2304
|
+
<tr>
|
2305
|
+
<td style="text-align:left;">Object</td>
|
2306
|
+
<td style="text-align:left;">Value</td>
|
2307
|
+
</tr>
|
2308
|
+
<tr>
|
2309
|
+
<td style="text-align:left;">Mission</td>
|
2310
|
+
<td style="text-align:left;">Accomplished</td>
|
2311
|
+
</tr>
|
2312
|
+
</tbody>
|
2313
|
+
</table>
|
2314
|
+
</specification>
|
2315
|
+
<description>
|
2316
|
+
<p id="_">As for the measurement targets,</p>
|
2317
|
+
</description>
|
2318
|
+
<measurement-target exclude="false">
|
2319
|
+
<p id="_">The measurement target shall be measured as:</p>
|
2320
|
+
<formula id="B"><name>1</name>
|
2321
|
+
<stem type="AsciiMath">r/1 = 0</stem>
|
2322
|
+
</formula>
|
2323
|
+
</measurement-target>
|
2324
|
+
<verification exclude="false">
|
2325
|
+
<p id="_">The following code will be run for verification:</p>
|
2326
|
+
<sourcecode id="_">CoreRoot(success): HttpResponse
|
2327
|
+
if (success)
|
2328
|
+
recommendation(label: success-response)
|
2329
|
+
end
|
2330
|
+
</sourcecode>
|
2331
|
+
</verification>
|
2332
|
+
<import exclude="true">
|
2333
|
+
<sourcecode id="_">success-response()</sourcecode>
|
2334
|
+
</import>
|
2335
|
+
</requirement>
|
2336
|
+
</foreword></preface>
|
2337
|
+
</iso-standard>
|
2107
2338
|
OUTPUT
|
2108
|
-
end
|
2109
2339
|
|
2110
|
-
|
2111
|
-
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
2112
|
-
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
2113
|
-
<bibdata>
|
2114
|
-
<language>fr</language>
|
2115
|
-
<script>Latn</script>
|
2116
|
-
</bibdata>
|
2117
|
-
<preface><foreword>
|
2118
|
-
<requirement id="A" unnumbered="true">
|
2119
|
-
<name>Exigence</name>
|
2120
|
-
<title>A New Requirement</title>
|
2121
|
-
<label>/ogc/recommendation/wfs/2</label>
|
2122
|
-
<inherit>/ss/584/2015/level/1</inherit>
|
2123
|
-
<subject>user</subject>
|
2124
|
-
<description>
|
2125
|
-
<p id="_">I recommend <em>this</em>.</p>
|
2126
|
-
</description>
|
2127
|
-
<specification exclude="true" type="tabular">
|
2128
|
-
<p id="_">This is the object of the recommendation:</p>
|
2129
|
-
<table id="_">
|
2130
|
-
<tbody>
|
2131
|
-
<tr>
|
2132
|
-
<td style="text-align:left;">Object</td>
|
2133
|
-
<td style="text-align:left;">Value</td>
|
2134
|
-
</tr>
|
2135
|
-
<tr>
|
2136
|
-
<td style="text-align:left;">Mission</td>
|
2137
|
-
<td style="text-align:left;">Accomplished</td>
|
2138
|
-
</tr>
|
2139
|
-
</tbody>
|
2140
|
-
</table>
|
2141
|
-
</specification>
|
2142
|
-
<description>
|
2143
|
-
<p id="_">As for the measurement targets,</p>
|
2144
|
-
</description>
|
2145
|
-
<measurement-target exclude="false">
|
2146
|
-
<p id="_">The measurement target shall be measured as:</p>
|
2147
|
-
<formula id="B">
|
2148
|
-
<stem type="AsciiMath">r/1 = 0</stem>
|
2149
|
-
</formula>
|
2150
|
-
</measurement-target>
|
2151
|
-
<verification exclude="false">
|
2152
|
-
<p id="_">The following code will be run for verification:</p>
|
2153
|
-
<sourcecode id="_">CoreRoot(success): HttpResponse
|
2154
|
-
if (success)
|
2155
|
-
recommendation(label: success-response)
|
2156
|
-
end
|
2157
|
-
</sourcecode>
|
2158
|
-
</verification>
|
2159
|
-
<import exclude="true">
|
2160
|
-
<sourcecode id="_">success-response()</sourcecode>
|
2161
|
-
</import>
|
2162
|
-
</requirement>
|
2163
|
-
</foreword></preface>
|
2164
|
-
</iso-standard>
|
2165
|
-
INPUT
|
2340
|
+
html = <<~OUTPUT
|
2166
2341
|
#{HTML_HDR.gsub(/"en"/, '"fr"')}
|
2167
2342
|
<br/>
|
2168
2343
|
<div>
|
@@ -2195,6 +2370,7 @@ end
|
|
2195
2370
|
<div id='B'><div class='formula'>
|
2196
2371
|
<p>
|
2197
2372
|
<span class='stem'>(#(r/1 = 0)#)</span>
|
2373
|
+
  (1)
|
2198
2374
|
</p>
|
2199
2375
|
</div>
|
2200
2376
|
</div>
|
@@ -2204,14 +2380,12 @@ end
|
|
2204
2380
|
<pre id='_' class='prettyprint '>
|
2205
2381
|
CoreRoot(success): HttpResponse
|
2206
2382
|
<br/>
|
2207
|
-
 
|
2383
|
+
  if (success)
|
2208
2384
|
<br/>
|
2209
|
-
 
|
2210
|
-
success-response)
|
2385
|
+
  recommendation(label: success-response)
|
2211
2386
|
<br/>
|
2212
|
-
 
|
2387
|
+
  end
|
2213
2388
|
<br/>
|
2214
|
-
   
|
2215
2389
|
</pre>
|
2216
2390
|
</div>
|
2217
2391
|
</div>
|
@@ -2221,6 +2395,8 @@ end
|
|
2221
2395
|
</body>
|
2222
2396
|
</html>
|
2223
2397
|
OUTPUT
|
2398
|
+
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", input, true)).sub(%r{<localized-strings>.*</localized-strings>}m, "")).to be_equivalent_to xmlpp(presxml)
|
2399
|
+
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
|
2224
2400
|
end
|
2225
2401
|
|
2226
2402
|
it "processes recommendation (Presentation XML)" do
|
@@ -2276,7 +2452,7 @@ end
|
|
2276
2452
|
</iso-standard>
|
2277
2453
|
INPUT
|
2278
2454
|
<?xml version='1.0'?>
|
2279
|
-
<iso-standard xmlns='http://riboseinc.com/isoxml'>
|
2455
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
|
2280
2456
|
<preface>
|
2281
2457
|
<foreword>
|
2282
2458
|
<recommendation id='_' obligation='shall,could' keep-with-next='true' keep-lines-together='true'>
|
@@ -2427,8 +2603,8 @@ end
|
|
2427
2603
|
OUTPUT
|
2428
2604
|
end
|
2429
2605
|
|
2430
|
-
it "processes pseudocode
|
2431
|
-
|
2606
|
+
it "processes pseudocode" do
|
2607
|
+
input = <<~INPUT
|
2432
2608
|
<itu-standard xmlns="http://riboseinc.com/isoxml">
|
2433
2609
|
<bibdata>
|
2434
2610
|
<language>en</language>
|
@@ -2439,59 +2615,22 @@ end
|
|
2439
2615
|
<p id="_"> <em>C</em></p></figure>
|
2440
2616
|
</preface></itu-standard>
|
2441
2617
|
INPUT
|
2442
|
-
|
2443
|
-
|
2444
|
-
|
2445
|
-
|
2446
|
-
|
2447
|
-
|
2448
|
-
|
2449
|
-
|
2450
|
-
|
2451
|
-
|
2452
|
-
|
2453
|
-
|
2454
|
-
|
2455
|
-
        
|
2456
|
-
<smallcap>B</smallcap>
|
2457
|
-
</p>
|
2458
|
-
<p id='_'>
|
2459
|
-
  
|
2460
|
-
<em>C</em>
|
2461
|
-
</p>
|
2462
|
-
</figure>
|
2463
|
-
</foreword>
|
2464
|
-
</preface>
|
2465
|
-
</itu-standard>
|
2618
|
+
|
2619
|
+
presxml = <<~OUTPUT
|
2620
|
+
<itu-standard xmlns="http://riboseinc.com/isoxml" type="presentation">
|
2621
|
+
<bibdata>
|
2622
|
+
<language current="true">en</language>
|
2623
|
+
</bibdata>
|
2624
|
+
<preface><foreword>
|
2625
|
+
<figure id="_" class="pseudocode" keep-with-next="true" keep-lines-together="true"><name>Figure 1 — Label</name><p id="_">  <strong>A</strong><br/>
|
2626
|
+
        <smallcap>B</smallcap></p>
|
2627
|
+
<p id="_">  <em>C</em></p></figure>
|
2628
|
+
</foreword></preface>
|
2629
|
+
</itu-standard>
|
2630
|
+
|
2466
2631
|
OUTPUT
|
2467
|
-
end
|
2468
2632
|
|
2469
|
-
|
2470
|
-
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", <<~"INPUT", true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
2471
|
-
<itu-standard xmlns='http://riboseinc.com/isoxml'>
|
2472
|
-
<bibdata>
|
2473
|
-
<language>en</language>
|
2474
|
-
</bibdata>
|
2475
|
-
<preface>
|
2476
|
-
<foreword>
|
2477
|
-
<figure id='_' class='pseudocode' keep-with-next='true' keep-lines-together='true'>
|
2478
|
-
<name>Figure 1 — Label</name>
|
2479
|
-
<p id='_'>
|
2480
|
-
  
|
2481
|
-
<strong>A</strong>
|
2482
|
-
<br/>
|
2483
|
-
        
|
2484
|
-
<smallcap>B</smallcap>
|
2485
|
-
</p>
|
2486
|
-
<p id='_'>
|
2487
|
-
  
|
2488
|
-
<em>C</em>
|
2489
|
-
</p>
|
2490
|
-
</figure>
|
2491
|
-
</foreword>
|
2492
|
-
</preface>
|
2493
|
-
</itu-standard>
|
2494
|
-
INPUT
|
2633
|
+
html = <<~OUTPUT
|
2495
2634
|
#{HTML_HDR}
|
2496
2635
|
<br/>
|
2497
2636
|
<div>
|
@@ -2505,35 +2644,11 @@ INPUT
|
|
2505
2644
|
</body>
|
2506
2645
|
</html>
|
2507
2646
|
OUTPUT
|
2508
|
-
end
|
2509
2647
|
|
2510
|
-
it "processes pseudocode (Word)" do
|
2511
2648
|
FileUtils.rm_f "test.doc"
|
2512
|
-
IsoDoc::
|
2513
|
-
|
2514
|
-
|
2515
|
-
<language>en</language>
|
2516
|
-
</bibdata>
|
2517
|
-
<preface>
|
2518
|
-
<foreword>
|
2519
|
-
<figure id='_' class='pseudocode' keep-with-next='true' keep-lines-together='true'>
|
2520
|
-
<name>Figure 1 — Label</name>
|
2521
|
-
<p id='_'>
|
2522
|
-
  
|
2523
|
-
<strong>A</strong>
|
2524
|
-
<br/>
|
2525
|
-
        
|
2526
|
-
<smallcap>B</smallcap>
|
2527
|
-
</p>
|
2528
|
-
<p id='_'>
|
2529
|
-
  
|
2530
|
-
<em>C</em>
|
2531
|
-
</p>
|
2532
|
-
</figure>
|
2533
|
-
</foreword>
|
2534
|
-
</preface>
|
2535
|
-
</itu-standard>
|
2536
|
-
INPUT
|
2649
|
+
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", input, true)).sub(%r{<localized-strings>.*</localized-strings>}m, "")).to be_equivalent_to xmlpp(presxml)
|
2650
|
+
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
|
2651
|
+
IsoDoc::WordConvert.new({}).convert("test", presxml, false)
|
2537
2652
|
expect(xmlpp( File.read("test.doc").gsub(%r{^.*<h1 class="ForewordTitle">Foreword</h1>}m, "").gsub(%r{</div>.*}m, "</div>"))).to be_equivalent_to xmlpp(<<~"OUTPUT")
|
2538
2653
|
<div class="pseudocode" style='page-break-after: avoid;page-break-inside: avoid;'><a name="_" id="_"></a><p class="pseudocode"><a name="_" id="_"></a>  <b>A</b><br/>
|
2539
2654
|
        <span style="font-variant:small-caps;">B</span></p>
|