metanorma-iso 1.5.11 → 1.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +83 -0
  3. data/README.adoc +5 -6
  4. data/lib/asciidoctor/iso/base.rb +5 -5
  5. data/lib/asciidoctor/iso/basicdoc.rng +50 -3
  6. data/lib/asciidoctor/iso/boilerplate-fr.xml +2 -2
  7. data/lib/asciidoctor/iso/cleanup.rb +33 -6
  8. data/lib/asciidoctor/iso/front.rb +5 -0
  9. data/lib/asciidoctor/iso/isodoc.rng +61 -3
  10. data/lib/asciidoctor/iso/isostandard-amd.rng +8 -4
  11. data/lib/asciidoctor/iso/isostandard.rng +27 -10
  12. data/lib/asciidoctor/iso/validate.rb +13 -1
  13. data/lib/asciidoctor/iso/validate_section.rb +21 -9
  14. data/lib/isodoc/iso/base_convert.rb +2 -1
  15. data/lib/isodoc/iso/html/header.html +4 -8
  16. data/lib/isodoc/iso/html/htmlstyle.css +1 -1
  17. data/lib/isodoc/iso/html/htmlstyle.scss +1 -1
  18. data/lib/isodoc/iso/html/isodoc.css +42 -42
  19. data/lib/isodoc/iso/html/isodoc.scss +42 -42
  20. data/lib/isodoc/iso/html/style-human.css +9 -9
  21. data/lib/isodoc/iso/html/style-human.scss +7 -7
  22. data/lib/isodoc/iso/html/style-iso.css +7 -7
  23. data/lib/isodoc/iso/html/style-iso.scss +5 -5
  24. data/lib/isodoc/iso/html/wordstyle.css +67 -67
  25. data/lib/isodoc/iso/html/wordstyle.scss +67 -67
  26. data/lib/isodoc/iso/html_convert.rb +4 -0
  27. data/lib/isodoc/iso/i18n-en.yaml +1 -0
  28. data/lib/isodoc/iso/i18n-fr.yaml +2 -0
  29. data/lib/isodoc/iso/i18n-zh-Hans.yaml +1 -0
  30. data/lib/isodoc/iso/i18n.rb +10 -11
  31. data/lib/isodoc/iso/iso.amendment.xsl +381 -86
  32. data/lib/isodoc/iso/iso.international-standard.xsl +381 -86
  33. data/lib/isodoc/iso/metadata.rb +1 -0
  34. data/lib/isodoc/iso/sections.rb +1 -1
  35. data/lib/isodoc/iso/word_convert.rb +4 -0
  36. data/lib/isodoc/iso/xref.rb +34 -8
  37. data/lib/metanorma/iso/processor.rb +11 -9
  38. data/lib/metanorma/iso/version.rb +1 -1
  39. data/metanorma-iso.gemspec +2 -2
  40. data/spec/asciidoctor-iso/amd_spec.rb +14 -14
  41. data/spec/asciidoctor-iso/base_spec.rb +20 -18
  42. data/spec/asciidoctor-iso/blocks_spec.rb +22 -22
  43. data/spec/asciidoctor-iso/cleanup_spec.rb +36 -30
  44. data/spec/asciidoctor-iso/inline_spec.rb +7 -7
  45. data/spec/asciidoctor-iso/lists_spec.rb +9 -9
  46. data/spec/asciidoctor-iso/refs_spec.rb +177 -146
  47. data/spec/asciidoctor-iso/section_spec.rb +12 -7
  48. data/spec/asciidoctor-iso/table_spec.rb +4 -4
  49. data/spec/asciidoctor-iso/validate_spec.rb +401 -85
  50. data/spec/isodoc/amd_spec.rb +13 -13
  51. data/spec/isodoc/blocks_spec.rb +1 -0
  52. data/spec/isodoc/metadata_spec.rb +2 -0
  53. data/spec/isodoc/ref_spec.rb +2 -2
  54. data/spec/isodoc/section_spec.rb +20 -0
  55. data/spec/isodoc/xref_spec.rb +12 -0
  56. metadata +7 -12
  57. data/.github/workflows/macos.yml +0 -49
  58. data/.github/workflows/ubuntu.yml +0 -53
  59. data/.github/workflows/windows.yml +0 -50
  60. data/lib/asciidoctor/iso/macros.rb +0 -21
  61. data/lib/asciidoctor/iso/term_lookup_cleanup.rb +0 -86
  62. data/spec/asciidoctor-iso/macros_spec.rb +0 -310
@@ -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,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