isodoc 1.2.3 → 1.2.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/rake.yml +69 -0
- data/README.adoc +1 -3
- data/isodoc.gemspec +3 -1
- data/lib/isodoc-yaml/i18n-en.yaml +1 -0
- data/lib/isodoc-yaml/i18n-fr.yaml +9 -8
- data/lib/isodoc-yaml/i18n-zh-Hans.yaml +1 -0
- 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/inline.rb +0 -33
- data/lib/isodoc/function/references.rb +5 -3
- data/lib/isodoc/function/table.rb +1 -0
- data/lib/isodoc/function/to_word_html.rb +3 -2
- data/lib/isodoc/function/utils.rb +1 -1
- data/lib/isodoc/html_function/postprocess.rb +1 -0
- data/lib/isodoc/i18n.rb +23 -52
- 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 +28 -9
- data/lib/isodoc/presentation_function/inline.rb +149 -34
- data/lib/isodoc/presentation_xml_convert.rb +7 -0
- data/lib/isodoc/version.rb +1 -1
- data/lib/isodoc/word_function/body.rb +12 -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 +22 -5
- data/spec/isodoc/blocks_spec.rb +331 -215
- data/spec/isodoc/footnotes_spec.rb +4 -5
- data/spec/isodoc/i18n_spec.rb +89 -16
- data/spec/isodoc/inline_spec.rb +185 -163
- data/spec/isodoc/metadata_spec.rb +69 -19
- data/spec/isodoc/postproc_spec.rb +40 -3
- data/spec/isodoc/presentation_xml_spec.rb +584 -1
- data/spec/isodoc/ref_spec.rb +5 -5
- data/spec/isodoc/section_spec.rb +9 -9
- 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
@@ -1,16 +1,33 @@
|
|
1
|
-
foreword:
|
1
|
+
foreword: Antaŭparolo
|
2
2
|
introduction: Enkonduko
|
3
|
-
clause:
|
4
|
-
table:
|
3
|
+
clause: klaŭzo
|
4
|
+
table: tabelo
|
5
5
|
source: SOURCE
|
6
6
|
modified: modified
|
7
7
|
scope: Amplekso
|
8
8
|
symbols: Simboloj kai mallongigitaj terminoj
|
9
9
|
annex: Aldono
|
10
|
-
normref: Normaj
|
10
|
+
normref: Normaj citaĵoj
|
11
11
|
bibliography: Bibliografio
|
12
12
|
inform_annex: informa
|
13
|
-
all_parts:
|
13
|
+
all_parts: ĉiuj partoj
|
14
|
+
norm_annex: normative
|
15
|
+
note: NOTO
|
14
16
|
locality: {
|
15
17
|
table: Tabelo
|
16
18
|
}
|
19
|
+
doctype_dict: {
|
20
|
+
brochure: broŝuro,
|
21
|
+
conference proceedings: konferencaktoj
|
22
|
+
}
|
23
|
+
stage_dict: {
|
24
|
+
published: publikigita
|
25
|
+
}
|
26
|
+
substage_dict: {
|
27
|
+
withdrawn: fortirita
|
28
|
+
}
|
29
|
+
array:
|
30
|
+
- elem1
|
31
|
+
- elem2
|
32
|
+
- {elem3: elem4, elem5: elem6}
|
33
|
+
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'>
|
@@ -1218,6 +1455,7 @@ end
|
|
1218
1455
|
<div id='_be9158af-7e93-4ee2-90c5-26d31c181934' style='page-break-after: avoid;page-break-inside: avoid;'><div class='formula'>
|
1219
1456
|
<p>
|
1220
1457
|
<span class='stem'>(#(r = 1 %)#)</span>
|
1458
|
+
<span style='mso-tab-count:1'>  </span>
|
1221
1459
|
</p>
|
1222
1460
|
</div>
|
1223
1461
|
<p>where</p>
|
@@ -1346,7 +1584,7 @@ it "processes blockquotes (Presentation XML)" do
|
|
1346
1584
|
</iso-standard>
|
1347
1585
|
INPUT
|
1348
1586
|
<?xml version='1.0'?>
|
1349
|
-
<iso-standard xmlns='http://riboseinc.com/isoxml'>
|
1587
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
|
1350
1588
|
<preface>
|
1351
1589
|
<foreword>
|
1352
1590
|
<quote id='_044bd364-c832-4b78-8fea-92242402a1d1'>
|
@@ -1485,7 +1723,7 @@ it "processes blockquotes (Presentation XML)" do
|
|
1485
1723
|
</iso-standard>
|
1486
1724
|
INPUT
|
1487
1725
|
<?xml version='1.0'?>
|
1488
|
-
<iso-standard xmlns='http://riboseinc.com/isoxml'>
|
1726
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
|
1489
1727
|
<preface>
|
1490
1728
|
<foreword>
|
1491
1729
|
<permission id='_' keep-with-next='true' keep-lines-together='true'>
|
@@ -1845,7 +2083,7 @@ Inherits: <a href='#rfc2616'>RFC 2616 (HTTP/1.1)</a>
|
|
1845
2083
|
</iso-standard>
|
1846
2084
|
INPUT
|
1847
2085
|
<?xml version='1.0'?>
|
1848
|
-
<iso-standard xmlns='http://riboseinc.com/isoxml'>
|
2086
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
|
1849
2087
|
<preface>
|
1850
2088
|
<foreword>
|
1851
2089
|
<requirement id='A' unnumbered='true' keep-with-next='true' keep-lines-together='true'>
|
@@ -1989,8 +2227,8 @@ end
|
|
1989
2227
|
OUTPUT
|
1990
2228
|
end
|
1991
2229
|
|
1992
|
-
it "processes requirements in French
|
1993
|
-
|
2230
|
+
it "processes requirements in French" do
|
2231
|
+
input = <<~INPUT
|
1994
2232
|
<iso-standard xmlns="http://riboseinc.com/isoxml">
|
1995
2233
|
<bibdata>
|
1996
2234
|
<language>fr</language>
|
@@ -2044,125 +2282,63 @@ end
|
|
2044
2282
|
</foreword></preface>
|
2045
2283
|
</iso-standard>
|
2046
2284
|
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>
|
2285
|
+
|
2286
|
+
presxml = <<~OUTPUT
|
2287
|
+
<iso-standard xmlns="http://riboseinc.com/isoxml" type="presentation">
|
2288
|
+
<bibdata>
|
2289
|
+
<language current="true">fr</language>
|
2290
|
+
<script current="true">Latn</script>
|
2291
|
+
</bibdata>
|
2292
|
+
<preface><foreword>
|
2293
|
+
<requirement id="A" unnumbered="true"><name>Exigence</name>
|
2294
|
+
<title>A New Requirement</title>
|
2295
|
+
<label>/ogc/recommendation/wfs/2</label>
|
2296
|
+
<inherit>/ss/584/2015/level/1</inherit>
|
2297
|
+
<subject>user</subject>
|
2298
|
+
<description>
|
2299
|
+
<p id="_">I recommend <em>this</em>.</p>
|
2300
|
+
</description>
|
2301
|
+
<specification exclude="true" type="tabular">
|
2302
|
+
<p id="_">This is the object of the recommendation:</p>
|
2303
|
+
<table id="_">
|
2304
|
+
<tbody>
|
2305
|
+
<tr>
|
2306
|
+
<td style="text-align:left;">Object</td>
|
2307
|
+
<td style="text-align:left;">Value</td>
|
2308
|
+
</tr>
|
2309
|
+
<tr>
|
2310
|
+
<td style="text-align:left;">Mission</td>
|
2311
|
+
<td style="text-align:left;">Accomplished</td>
|
2312
|
+
</tr>
|
2313
|
+
</tbody>
|
2314
|
+
</table>
|
2315
|
+
</specification>
|
2316
|
+
<description>
|
2317
|
+
<p id="_">As for the measurement targets,</p>
|
2318
|
+
</description>
|
2319
|
+
<measurement-target exclude="false">
|
2320
|
+
<p id="_">The measurement target shall be measured as:</p>
|
2321
|
+
<formula id="B"><name>1</name>
|
2322
|
+
<stem type="AsciiMath">r/1 = 0</stem>
|
2323
|
+
</formula>
|
2324
|
+
</measurement-target>
|
2325
|
+
<verification exclude="false">
|
2326
|
+
<p id="_">The following code will be run for verification:</p>
|
2327
|
+
<sourcecode id="_">CoreRoot(success): HttpResponse
|
2328
|
+
if (success)
|
2329
|
+
recommendation(label: success-response)
|
2330
|
+
end
|
2331
|
+
</sourcecode>
|
2332
|
+
</verification>
|
2333
|
+
<import exclude="true">
|
2334
|
+
<sourcecode id="_">success-response()</sourcecode>
|
2335
|
+
</import>
|
2336
|
+
</requirement>
|
2337
|
+
</foreword></preface>
|
2338
|
+
</iso-standard>
|
2107
2339
|
OUTPUT
|
2108
|
-
end
|
2109
2340
|
|
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
|
2341
|
+
html = <<~OUTPUT
|
2166
2342
|
#{HTML_HDR.gsub(/"en"/, '"fr"')}
|
2167
2343
|
<br/>
|
2168
2344
|
<div>
|
@@ -2195,6 +2371,7 @@ end
|
|
2195
2371
|
<div id='B'><div class='formula'>
|
2196
2372
|
<p>
|
2197
2373
|
<span class='stem'>(#(r/1 = 0)#)</span>
|
2374
|
+
  (1)
|
2198
2375
|
</p>
|
2199
2376
|
</div>
|
2200
2377
|
</div>
|
@@ -2204,14 +2381,12 @@ end
|
|
2204
2381
|
<pre id='_' class='prettyprint '>
|
2205
2382
|
CoreRoot(success): HttpResponse
|
2206
2383
|
<br/>
|
2207
|
-
 
|
2384
|
+
  if (success)
|
2208
2385
|
<br/>
|
2209
|
-
 
|
2210
|
-
success-response)
|
2386
|
+
  recommendation(label: success-response)
|
2211
2387
|
<br/>
|
2212
|
-
 
|
2388
|
+
  end
|
2213
2389
|
<br/>
|
2214
|
-
   
|
2215
2390
|
</pre>
|
2216
2391
|
</div>
|
2217
2392
|
</div>
|
@@ -2221,6 +2396,8 @@ end
|
|
2221
2396
|
</body>
|
2222
2397
|
</html>
|
2223
2398
|
OUTPUT
|
2399
|
+
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", input, true)).sub(%r{<localized-strings>.*</localized-strings>}m, "")).to be_equivalent_to xmlpp(presxml)
|
2400
|
+
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
|
2224
2401
|
end
|
2225
2402
|
|
2226
2403
|
it "processes recommendation (Presentation XML)" do
|
@@ -2276,7 +2453,7 @@ end
|
|
2276
2453
|
</iso-standard>
|
2277
2454
|
INPUT
|
2278
2455
|
<?xml version='1.0'?>
|
2279
|
-
<iso-standard xmlns='http://riboseinc.com/isoxml'>
|
2456
|
+
<iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
|
2280
2457
|
<preface>
|
2281
2458
|
<foreword>
|
2282
2459
|
<recommendation id='_' obligation='shall,could' keep-with-next='true' keep-lines-together='true'>
|
@@ -2427,8 +2604,8 @@ end
|
|
2427
2604
|
OUTPUT
|
2428
2605
|
end
|
2429
2606
|
|
2430
|
-
it "processes pseudocode
|
2431
|
-
|
2607
|
+
it "processes pseudocode" do
|
2608
|
+
input = <<~INPUT
|
2432
2609
|
<itu-standard xmlns="http://riboseinc.com/isoxml">
|
2433
2610
|
<bibdata>
|
2434
2611
|
<language>en</language>
|
@@ -2439,59 +2616,22 @@ end
|
|
2439
2616
|
<p id="_"> <em>C</em></p></figure>
|
2440
2617
|
</preface></itu-standard>
|
2441
2618
|
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>
|
2619
|
+
|
2620
|
+
presxml = <<~OUTPUT
|
2621
|
+
<itu-standard xmlns="http://riboseinc.com/isoxml" type="presentation">
|
2622
|
+
<bibdata>
|
2623
|
+
<language current="true">en</language>
|
2624
|
+
</bibdata>
|
2625
|
+
<preface><foreword>
|
2626
|
+
<figure id="_" class="pseudocode" keep-with-next="true" keep-lines-together="true"><name>Figure 1 — Label</name><p id="_">  <strong>A</strong><br/>
|
2627
|
+
        <smallcap>B</smallcap></p>
|
2628
|
+
<p id="_">  <em>C</em></p></figure>
|
2629
|
+
</foreword></preface>
|
2630
|
+
</itu-standard>
|
2631
|
+
|
2466
2632
|
OUTPUT
|
2467
|
-
end
|
2468
2633
|
|
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
|
2634
|
+
html = <<~OUTPUT
|
2495
2635
|
#{HTML_HDR}
|
2496
2636
|
<br/>
|
2497
2637
|
<div>
|
@@ -2505,35 +2645,11 @@ INPUT
|
|
2505
2645
|
</body>
|
2506
2646
|
</html>
|
2507
2647
|
OUTPUT
|
2508
|
-
end
|
2509
2648
|
|
2510
|
-
it "processes pseudocode (Word)" do
|
2511
2649
|
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
|
2650
|
+
expect(xmlpp(IsoDoc::PresentationXMLConvert.new({}).convert("test", input, true)).sub(%r{<localized-strings>.*</localized-strings>}m, "")).to be_equivalent_to xmlpp(presxml)
|
2651
|
+
expect(xmlpp(IsoDoc::HtmlConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
|
2652
|
+
IsoDoc::WordConvert.new({}).convert("test", presxml, false)
|
2537
2653
|
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
2654
|
<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
2655
|
        <span style="font-variant:small-caps;">B</span></p>
|