metanorma-iso 1.5.13 → 1.7.1

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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +17 -0
  3. data/lib/asciidoctor/iso/base.rb +1 -6
  4. data/lib/asciidoctor/iso/basicdoc.rng +52 -3
  5. data/lib/asciidoctor/iso/cleanup.rb +0 -6
  6. data/lib/asciidoctor/iso/front.rb +5 -5
  7. data/lib/asciidoctor/iso/isodoc.rng +114 -3
  8. data/lib/asciidoctor/iso/isostandard-amd.rng +8 -4
  9. data/lib/asciidoctor/iso/isostandard.rng +19 -10
  10. data/lib/asciidoctor/iso/validate.rb +78 -0
  11. data/lib/asciidoctor/iso/validate_section.rb +12 -9
  12. data/lib/isodoc/iso/html/header.html +12 -12
  13. data/lib/isodoc/iso/html/html_iso_intro.html +1 -1
  14. data/lib/isodoc/iso/html/html_iso_titlepage.html +1 -1
  15. data/lib/isodoc/iso/html/word_iso_intro.html +1 -1
  16. data/lib/isodoc/iso/html/word_iso_titlepage.html +1 -1
  17. data/lib/isodoc/iso/html_convert.rb +2 -2
  18. data/lib/isodoc/iso/i18n-en.yaml +2 -0
  19. data/lib/isodoc/iso/i18n-fr.yaml +1 -1
  20. data/lib/isodoc/iso/i18n-zh-Hans.yaml +1 -1
  21. data/lib/isodoc/iso/iso.amendment.xsl +486 -206
  22. data/lib/isodoc/iso/iso.international-standard.xsl +486 -206
  23. data/lib/isodoc/iso/sections.rb +1 -1
  24. data/lib/isodoc/iso/word_convert.rb +2 -2
  25. data/lib/isodoc/iso/xref.rb +28 -12
  26. data/lib/metanorma/iso/processor.rb +11 -0
  27. data/lib/metanorma/iso/version.rb +1 -1
  28. data/metanorma-iso.gemspec +2 -2
  29. data/spec/asciidoctor-iso/amd_spec.rb +14 -14
  30. data/spec/asciidoctor-iso/base_spec.rb +20 -20
  31. data/spec/asciidoctor-iso/blocks_spec.rb +21 -21
  32. data/spec/asciidoctor-iso/cleanup_spec.rb +32 -26
  33. data/spec/asciidoctor-iso/inline_spec.rb +7 -7
  34. data/spec/asciidoctor-iso/lists_spec.rb +3 -3
  35. data/spec/asciidoctor-iso/refs_spec.rb +4 -4
  36. data/spec/asciidoctor-iso/section_spec.rb +7 -7
  37. data/spec/asciidoctor-iso/table_spec.rb +4 -4
  38. data/spec/asciidoctor-iso/validate_spec.rb +457 -87
  39. data/spec/isodoc/amd_spec.rb +13 -13
  40. data/spec/isodoc/iso_spec.rb +2 -2
  41. data/spec/isodoc/postproc_spec.rb +1 -0
  42. data/spec/spec_helper.rb +12 -0
  43. metadata +7 -11
  44. data/lib/asciidoctor/iso/macros.rb +0 -21
  45. data/lib/asciidoctor/iso/term_lookup_cleanup.rb +0 -86
  46. data/lib/metanorma/iso/fonts_manifest.yaml +0 -6
  47. data/spec/asciidoctor-iso/macros_spec.rb +0 -310
@@ -66,9 +66,9 @@ RSpec.describe IsoDoc do
66
66
  <preface>
67
67
  <foreword>
68
68
  <p>
69
- <xref target='N'>[scope], Note</xref>
70
- <xref target='note1'>[widgets1], Note 1</xref>
71
- <xref target='note2'>[widgets1], Note 2</xref>
69
+ <xref target='N'>Scope, Note</xref>
70
+ <xref target='note1'>Widgets, 1, Note 1</xref>
71
+ <xref target='note2'>Widgets, 1, Note 2</xref>
72
72
  <xref target='AN'>A.1, Note</xref>
73
73
  <xref target='Anote1'>A.2, Note 1</xref>
74
74
  <xref target='Anote2'>A.2, Note 2</xref>
@@ -231,15 +231,15 @@ RSpec.describe IsoDoc do
231
231
  This is a preamble
232
232
  <xref target='C'>0.1</xref>
233
233
  <xref target='C1'>0.2</xref>
234
- <xref target='D'>[D]</xref>
234
+ <xref target='D'>Scope</xref>
235
235
  <xref target='H'>[H]</xref>
236
236
  <xref target='I'>[I]</xref>
237
237
  <xref target='J'>[J]</xref>
238
238
  <xref target='K'>[K]</xref>
239
239
  <xref target='L'>[L]</xref>
240
- <xref target='M'>[M]</xref>
241
- <xref target='N'>[N]</xref>
242
- <xref target='O'>[O]</xref>
240
+ <xref target='M'>Clause 4</xref>
241
+ <xref target='N'>Introduction</xref>
242
+ <xref target='O'>Clause 4.2</xref>
243
243
  <xref target='P'>Annex A</xref>
244
244
  <xref target='Q'>A.1</xref>
245
245
  <xref target='Q1'>A.1.1</xref>
@@ -263,10 +263,10 @@ RSpec.describe IsoDoc do
263
263
  <clause id='M' inline-header='false' obligation='normative'>
264
264
  <title depth="1">Clause 4</title>
265
265
  <clause id='N' inline-header='false' obligation='normative'>
266
- <title depth="1">Introduction</title>
266
+ <title depth="2">Introduction</title>
267
267
  </clause>
268
268
  <clause id='O' inline-header='false' obligation='normative'>
269
- <title depth="1">Clause 4.2</title>
269
+ <title depth="2">Clause 4.2</title>
270
270
  </clause>
271
271
  </clause>
272
272
  </sections>
@@ -452,10 +452,10 @@ RSpec.describe IsoDoc do
452
452
  <clause id='M' inline-header='false' obligation='normative'>
453
453
  <title depth='1'>Clause 4</title>
454
454
  <clause id='N' inline-header='false' obligation='normative'>
455
- <title depth='1'>Introduction</title>
455
+ <title depth='2'>Introduction</title>
456
456
  </clause>
457
457
  <clause id='O' inline-header='false' obligation='normative'>
458
- <title depth='1'>Clause 4.2</title>
458
+ <title depth='2'>Clause 4.2</title>
459
459
  </clause>
460
460
  <clause id='O1' inline-header='true' obligation='normative'> </clause>
461
461
  </clause>
@@ -570,10 +570,10 @@ RSpec.describe IsoDoc do
570
570
  <div id='M'>
571
571
  <h1>Clause 4</h1>
572
572
  <div id='N'>
573
- <h1>Introduction</h1>
573
+ <h2>Introduction</h2>
574
574
  </div>
575
575
  <div id='O'>
576
- <h1>Clause 4.2</h1>
576
+ <h2>Clause 4.2</h2>
577
577
  </div>
578
578
  <div id='O1'>
579
579
  </div>
@@ -49,8 +49,8 @@ RSpec.describe IsoDoc::Iso do
49
49
  INPUT
50
50
  html = File.read("test.html", encoding: "utf-8")
51
51
  expect(html).to match(%r[\bpre[^{]+\{[^{]+font-family: "Courier New", monospace;]m)
52
- expect(html).to match(%r[blockquote[^{]+\{[^{]+font-family: "SimSun", serif;]m)
53
- expect(html).to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "SimHei", sans-serif;]m)
52
+ expect(html).to match(%r[blockquote[^{]+\{[^{]+font-family: "Source Han Sans", serif;]m)
53
+ expect(html).to match(%r[\.h2Annex[^{]+\{[^{]+font-family: "Source Han Sans", sans-serif;]m)
54
54
  end
55
55
 
56
56
  it "processes isodoc as ISO: user nominated fonts" do
@@ -94,6 +94,7 @@ RSpec.describe IsoDoc do
94
94
 
95
95
  it "generates Pdf output docs with null configuration from file" do
96
96
  FileUtils.rm_f "spec/assets/iso.pdf"
97
+ mock_pdf
97
98
  IsoDoc::Iso::PdfConvert.new({wordstylesheet: "spec/assets/word.css", htmlstylesheet: "spec/assets/html.css"}).convert("spec/assets/iso.xml", nil, false)
98
99
  expect(File.exist?("spec/assets/iso.pdf")).to be true
99
100
  end
data/spec/spec_helper.rb CHANGED
@@ -259,6 +259,18 @@ def stub_fetch_ref(**opts)
259
259
  end.at_least :once
260
260
  end
261
261
 
262
+ def mock_pdf
263
+ allow(::Mn2pdf).to receive(:convert) do |url, output, c, d|
264
+ FileUtils.cp(url.gsub(/"/, ""), output.gsub(/"/, ""))
265
+ end
266
+ end
267
+
268
+ def mock_sts
269
+ allow(::Mn2sts).to receive(:convert) do |url, output, c, d|
270
+ FileUtils.cp(url.gsub(/"/, ""), output.gsub(/"/, ""))
271
+ end
272
+ end
273
+
262
274
  private
263
275
 
264
276
  def get_xml(search, code, opts)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metanorma-iso
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.13
4
+ version: 1.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-30 00:00:00.000000000 Z
11
+ date: 2021-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-jing
@@ -30,28 +30,28 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.3.0
33
+ version: 1.5.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.3.0
40
+ version: 1.5.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: metanorma-standoc
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.6.0
47
+ version: 1.8.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.6.0
54
+ version: 1.8.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: tokenizer
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -292,10 +292,8 @@ files:
292
292
  - lib/asciidoctor/iso/isostandard-amd.rng
293
293
  - lib/asciidoctor/iso/isostandard.rnc
294
294
  - lib/asciidoctor/iso/isostandard.rng
295
- - lib/asciidoctor/iso/macros.rb
296
295
  - lib/asciidoctor/iso/reqt.rng
297
296
  - lib/asciidoctor/iso/section.rb
298
- - lib/asciidoctor/iso/term_lookup_cleanup.rb
299
297
  - lib/asciidoctor/iso/validate.rb
300
298
  - lib/asciidoctor/iso/validate_requirements.rb
301
299
  - lib/asciidoctor/iso/validate_section.rb
@@ -336,7 +334,6 @@ files:
336
334
  - lib/isodoc/iso/xref.rb
337
335
  - lib/metanorma-iso.rb
338
336
  - lib/metanorma/iso.rb
339
- - lib/metanorma/iso/fonts_manifest.yaml
340
337
  - lib/metanorma/iso/processor.rb
341
338
  - lib/metanorma/iso/version.rb
342
339
  - metanorma-iso.gemspec
@@ -346,7 +343,6 @@ files:
346
343
  - spec/asciidoctor-iso/cleanup_spec.rb
347
344
  - spec/asciidoctor-iso/inline_spec.rb
348
345
  - spec/asciidoctor-iso/lists_spec.rb
349
- - spec/asciidoctor-iso/macros_spec.rb
350
346
  - spec/asciidoctor-iso/refs_spec.rb
351
347
  - spec/asciidoctor-iso/section_spec.rb
352
348
  - spec/asciidoctor-iso/table_spec.rb
@@ -414,7 +410,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
414
410
  - !ruby/object:Gem::Version
415
411
  version: '0'
416
412
  requirements: []
417
- rubygems_version: 3.0.3
413
+ rubygems_version: 3.1.4
418
414
  signing_key:
419
415
  specification_version: 4
420
416
  summary: metanorma-iso lets you write ISO standards in AsciiDoc.
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'asciidoctor/extensions'
4
-
5
- module Asciidoctor
6
- module Iso
7
- # Macro to transform `term[X,Y]` into em, termxref xml
8
- class TermRefInlineMacro < Asciidoctor::Extensions::InlineMacroProcessor
9
- use_dsl
10
-
11
- named :term
12
- name_positional_attributes 'name', 'termxref'
13
- using_format :short
14
-
15
- def process(_parent, _target, attrs)
16
- termref = attrs['termxref'] || attrs['name']
17
- "<em>#{attrs['name']}</em> (<termxref>#{termref}</termxref>)"
18
- end
19
- end
20
- end
21
- end
@@ -1,86 +0,0 @@
1
- # frozen_string_literal: true.
2
-
3
- module Asciidoctor
4
- module ISO
5
- # Intelligent term lookup xml modifier
6
- # Lookup all `term` and `calause` tags and replace `termxref` tags with
7
- # `xref`:target tag
8
- class TermLookupCleanup
9
- AUTOMATIC_GENERATED_ID_REGEXP = /\A_/
10
- EXISTING_TERM_REGEXP = /\Aterm-/
11
-
12
- attr_reader :xmldoc, :termlookup, :log
13
-
14
- def initialize(xmldoc, log)
15
- @xmldoc = xmldoc
16
- @log = log
17
- @termlookup = {}
18
- end
19
-
20
- def call
21
- @termlookup = replace_automatic_generated_ids_terms
22
- set_termxref_tags_target
23
- end
24
-
25
- private
26
-
27
- def set_termxref_tags_target
28
- xmldoc.xpath('//termxref').each do |node|
29
- target = normalize_ref_id(node.text)
30
- if termlookup[target].nil?
31
- remove_missing_ref(node, target)
32
- next
33
- end
34
- modify_ref_node(node, target)
35
- end
36
- end
37
-
38
- def remove_missing_ref(node, target)
39
- log.add('AsciiDoc Input', node,
40
- %(Error: Term reference in `term[#{target}]` missing: \
41
- "#{target}" is not defined in document))
42
- term_name_node = node.previous.previous
43
- term_name_node.remove
44
- term_name_node.name = "strong"
45
- term_name_node.children.first.content =
46
- %(term "#{term_name_node.text}" not resolved)
47
- node.add_previous_sibling(term_name_node)
48
- node.remove
49
- end
50
-
51
- def modify_ref_node(node, target)
52
- node.name = 'xref'
53
- node['target'] = termlookup[target]
54
- node.children.remove
55
- node.remove_attribute('defaultref')
56
- end
57
-
58
- def replace_automatic_generated_ids_terms
59
- xmldoc.xpath('//term').each.with_object({}) do |term_node, res|
60
- normalize_id_and_memorize(term_node, res, './preferred')
61
- end
62
- end
63
-
64
- def normalize_id_and_memorize(term_node, res_table, text_selector)
65
- term_text = normalize_ref_id(term_node.at(text_selector).text)
66
- unless AUTOMATIC_GENERATED_ID_REGEXP.match(term_node['id']).nil?
67
- term_node['id'] = unique_text_id(term_text)
68
- end
69
- res_table[term_text] = term_node['id']
70
- end
71
-
72
- def normalize_ref_id(text)
73
- text.downcase.gsub(/[[:space:]]/, '-')
74
- end
75
-
76
- def unique_text_id(text)
77
- return "term-#{text}" if xmldoc.at("//*[@id = 'term-#{text}']").nil?
78
- (1..Float::INFINITY).lazy.each do |index|
79
- if xmldoc.at("//*[@id = 'term-#{text}-#{index}']").nil?
80
- break("term-#{text}-#{index}")
81
- end
82
- end
83
- end
84
- end
85
- end
86
- end
@@ -1,6 +0,0 @@
1
- ---
2
- Cambria:
3
- Cambria Math:
4
- Times New Roman:
5
- Source Han Sans:
6
- Courier New:
@@ -1,310 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe Asciidoctor::ISO do
4
- it "processes the Asciidoctor::ISO inline macros" do
5
- expect(xmlpp(Asciidoctor.convert(<<~"INPUT", backend: :iso, header_footer: true))).to be_equivalent_to xmlpp(<<~"OUTPUT")
6
- #{ASCIIDOC_BLANK_HDR}
7
- alt:[term1]
8
- deprecated:[term1]
9
- domain:[term1]
10
- INPUT
11
- #{BLANK_HDR}
12
- <sections>
13
- <admitted>term1</admitted>
14
- <deprecates>term1</deprecates>
15
- <domain>term1</domain>
16
- </sections>
17
- </iso-standard>
18
- OUTPUT
19
- end
20
-
21
- describe 'term inline macros' do
22
- subject(:convert) do
23
- xmlpp(
24
- strip_guid(
25
- Asciidoctor.convert(
26
- input, backend: :iso, header_footer: true)))
27
- end
28
- let(:input) do
29
- <<~XML
30
- #{ASCIIDOC_BLANK_HDR}
31
- == Terms and Definitions
32
-
33
- === name2
34
-
35
- == Main
36
-
37
- term:[name,name2] is a term
38
- XML
39
- end
40
- let(:output) do
41
- <<~XML
42
- #{BLANK_HDR}
43
- <sections>
44
- <terms id='_' obligation='normative'>
45
- <title>Terms and definitions</title>
46
- <p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
47
- <p id='_'>
48
- ISO and IEC maintain terminological databases for use in standardization
49
- at the following addresses:
50
- </p>
51
- <ul id='_'>
52
- <li>
53
- <p id='_'>
54
- ISO Online browsing platform: available at
55
- <link target='http://www.iso.org/obp'/>
56
- </p>
57
- </li>
58
- <li>
59
- <p id='_'>
60
- IEC Electropedia: available at
61
- <link target='http://www.electropedia.org'/>
62
- </p>
63
- </li>
64
- </ul>
65
- <term id='term-name2'>
66
- <preferred>name2</preferred>
67
- </term>
68
- </terms>
69
- <clause id='_' inline-header='false' obligation='normative'>
70
- <title>Main</title>
71
- <p id='_'>
72
- <em>name</em>
73
- (
74
- <xref target='term-name2'/>
75
- ) is a term
76
- </p>
77
- </clause>
78
- </sections>
79
- </iso-standard>
80
- XML
81
- end
82
-
83
- it 'converts macro into the correct xml' do
84
- expect(convert).to(be_equivalent_to(xmlpp(output)))
85
- end
86
-
87
- context 'default params' do
88
- let(:input) do
89
- <<~XML
90
- #{ASCIIDOC_BLANK_HDR}
91
-
92
- == Terms and Definitions
93
-
94
- === name
95
-
96
- == Main
97
-
98
- term:[name] is a term
99
- XML
100
- end
101
- let(:output) do
102
- <<~XML
103
- #{BLANK_HDR}
104
- <sections>
105
- <terms id='_' obligation='normative'>
106
- <title>Terms and definitions</title>
107
- <p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
108
- <p id='_'>
109
- ISO and IEC maintain terminological databases for use in standardization
110
- at the following addresses:
111
- </p>
112
- <ul id='_'>
113
- <li>
114
- <p id='_'>
115
- ISO Online browsing platform: available at
116
- <link target='http://www.iso.org/obp' />
117
- </p>
118
- </li>
119
- <li>
120
- <p id='_'>
121
- IEC Electropedia: available at
122
- <link target='http://www.electropedia.org' />
123
- </p>
124
- </li>
125
- </ul>
126
- <term id='term-name'>
127
- <preferred>name</preferred>
128
- </term>
129
- </terms>
130
- <clause id='_' inline-header='false' obligation='normative'>
131
- <title>Main</title>
132
- <p id='_'>
133
- <em>name</em>
134
- (
135
- <xref target='term-name' />
136
- ) is a term
137
- </p>
138
- </clause>
139
- </sections>
140
- </iso-standard>
141
- XML
142
- end
143
-
144
- it 'uses `name` as termref name' do
145
- expect(convert).to(be_equivalent_to(xmlpp(output)))
146
- end
147
- end
148
-
149
- context 'multiply exising ids in document' do
150
- let(:input) do
151
- <<~XML
152
- #{ASCIIDOC_BLANK_HDR}
153
-
154
- == Terms and Definitions
155
-
156
- === name
157
- === name2
158
-
159
- [[term-name]]
160
- == Main
161
-
162
- paragraph
163
-
164
- [[term-name2]]
165
- == Second
166
-
167
- term:[name] is a term
168
- term:[name2] is a term
169
- XML
170
- end
171
- let(:output) do
172
- <<~XML
173
- #{BLANK_HDR}
174
- <sections>
175
- <terms id='_' obligation='normative'>
176
- <title>Terms and definitions</title>
177
- <p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
178
- <p id='_'>
179
- ISO and IEC maintain terminological databases for use in standardization
180
- at the following addresses:
181
- </p>
182
- <ul id='_'>
183
- <li>
184
- <p id='_'>
185
- ISO Online browsing platform: available at
186
- <link target='http://www.iso.org/obp' />
187
- </p>
188
- </li>
189
- <li>
190
- <p id='_'>
191
- IEC Electropedia: available at
192
- <link target='http://www.electropedia.org' />
193
- </p>
194
- </li>
195
- </ul>
196
- <term id='term-name-1'>
197
- <preferred>name</preferred>
198
- </term>
199
- <term id='term-name2-1'>
200
- <preferred>name2</preferred>
201
- </term>
202
- </terms>
203
- <clause id='term-name' inline-header='false' obligation='normative'>
204
- <title>Main</title>
205
- <p id='_'>paragraph</p>
206
- </clause>
207
- <clause id='term-name2' inline-header='false' obligation='normative'>
208
- <title>Second</title>
209
- <p id='_'>
210
- <em>name</em>
211
- (
212
- <xref target='term-name-1' />
213
- ) is a term
214
- <em>name2</em>
215
- (
216
- <xref target='term-name2-1' />
217
- ) is a term
218
- </p>
219
- </clause>
220
- </sections>
221
- </iso-standard>
222
- XML
223
- end
224
-
225
- it 'generates unique ids which dont match existing ids' do
226
- expect(convert).to(be_equivalent_to(xmlpp(output)))
227
- end
228
- end
229
-
230
- context 'when missing actual ref' do
231
- let(:input) do
232
- <<~XML
233
- #{ASCIIDOC_BLANK_HDR}
234
-
235
- == Terms and Definitions
236
-
237
- === name identity
238
-
239
- [[name-check]]
240
- === name check
241
-
242
- paragraph
243
-
244
- term:[name check] is a term
245
-
246
- term:[name identity] is a term
247
-
248
- Moreover, term:[missing] is a term
249
- XML
250
- end
251
- let(:output) do
252
- <<~XML
253
- #{BLANK_HDR}
254
- <sections>
255
- <terms id='_' obligation='normative'>
256
- <title>Terms and definitions</title>
257
- <p id='_'>For the purposes of this document, the following terms and definitions apply.</p>
258
- <p id='_'>
259
- ISO and IEC maintain terminological databases for use in standardization
260
- at the following addresses:
261
- </p>
262
- <ul id='_'>
263
- <li>
264
- <p id='_'>
265
- ISO Online browsing platform: available at
266
- <link target='http://www.iso.org/obp'/>
267
- </p>
268
- </li>
269
- <li>
270
- <p id='_'>
271
- IEC Electropedia: available at
272
- <link target='http://www.electropedia.org'/>
273
- </p>
274
- </li>
275
- </ul>
276
- <term id='term-name-identity'>
277
- <preferred>name identity</preferred>
278
- </term>
279
- <term id='name-check'>
280
- <preferred>name check</preferred>
281
- <definition>
282
- <p id='_'>paragraph</p>
283
- <p id='_'>
284
- <em>name check</em>
285
- (
286
- <xref target='name-check'/>
287
- ) is a term
288
- </p>
289
- <p id='_'>
290
- <em>name identity</em>
291
- (
292
- <xref target='term-name-identity'/>
293
- ) is a term
294
- </p>
295
- <p id="_">Moreover, (<strong>term “missing” not resolved</strong>) is a term
296
- </p>
297
- </definition>
298
- </term>
299
- </terms>
300
- </sections>
301
- </iso-standard>
302
- XML
303
- end
304
-
305
- it 'generates unique ids which dont match existing ids' do
306
- expect(convert).to(be_equivalent_to(xmlpp(output)))
307
- end
308
- end
309
- end
310
- end