metanorma-iso 1.5.10 → 1.6.0

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 +66 -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 +40 -0
  7. data/lib/asciidoctor/iso/boilerplate.xml +1 -0
  8. data/lib/asciidoctor/iso/cleanup.rb +38 -6
  9. data/lib/asciidoctor/iso/front.rb +5 -0
  10. data/lib/asciidoctor/iso/isodoc.rng +36 -43
  11. data/lib/asciidoctor/iso/isostandard.rng +11 -0
  12. data/lib/asciidoctor/iso/validate.rb +1 -1
  13. data/lib/asciidoctor/iso/validate_section.rb +9 -0
  14. data/lib/isodoc/iso/base_convert.rb +2 -1
  15. data/lib/isodoc/iso/html/header.html +12 -24
  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 +13 -9
  21. data/lib/isodoc/iso/html/style-human.scss +7 -7
  22. data/lib/isodoc/iso/html/style-iso.css +11 -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 +4 -0
  28. data/lib/isodoc/iso/i18n-fr.yaml +5 -0
  29. data/lib/isodoc/iso/i18n-zh-Hans.yaml +5 -0
  30. data/lib/isodoc/iso/i18n.rb +10 -11
  31. data/lib/isodoc/iso/iso.amendment.xsl +391 -88
  32. data/lib/isodoc/iso/iso.international-standard.xsl +391 -88
  33. data/lib/isodoc/iso/metadata.rb +20 -19
  34. data/lib/isodoc/iso/word_convert.rb +4 -0
  35. data/lib/isodoc/iso/xref.rb +10 -0
  36. data/lib/metanorma/iso/processor.rb +11 -9
  37. data/lib/metanorma/iso/version.rb +1 -1
  38. data/metanorma-iso.gemspec +2 -2
  39. data/spec/asciidoctor-iso/base_spec.rb +26 -14
  40. data/spec/asciidoctor-iso/blocks_spec.rb +1 -1
  41. data/spec/asciidoctor-iso/cleanup_spec.rb +11 -5
  42. data/spec/asciidoctor-iso/lists_spec.rb +6 -6
  43. data/spec/asciidoctor-iso/refs_spec.rb +174 -143
  44. data/spec/asciidoctor-iso/section_spec.rb +5 -0
  45. data/spec/asciidoctor-iso/validate_spec.rb +18 -1
  46. data/spec/isodoc/amd_spec.rb +187 -22
  47. data/spec/isodoc/blocks_spec.rb +1 -0
  48. data/spec/isodoc/i18n_spec.rb +9 -22
  49. data/spec/isodoc/inline_spec.rb +1 -1
  50. data/spec/isodoc/metadata_spec.rb +170 -3
  51. data/spec/isodoc/postproc_spec.rb +2 -5
  52. data/spec/isodoc/ref_spec.rb +4 -7
  53. data/spec/isodoc/section_spec.rb +20 -0
  54. data/spec/isodoc/xref_spec.rb +12 -0
  55. data/spec/spec_helper.rb +17 -1
  56. metadata +8 -12
  57. data/.github/workflows/macos.yml +0 -41
  58. data/.github/workflows/ubuntu.yml +0 -45
  59. data/.github/workflows/windows.yml +0 -43
  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
@@ -613,11 +613,8 @@ documentation.</p>
613
613
  presxml = <<~OUTPUT
614
614
  <iso-standard xmlns="http://riboseinc.com/isoxml" type="presentation">
615
615
  <bibdata type="standard">
616
- <status><stage>30</stage></status>
616
+ <status><stage language="">30</stage></status>
617
617
  </bibdata>
618
- <local_bibdata type="standard">
619
- <status><stage>30</stage></status>
620
- </local_bibdata>
621
618
  <boilerplate>
622
619
  <copyright-statement>
623
620
  <clause inline-header="true">
@@ -664,7 +661,7 @@ documentation.</p>
664
661
 
665
662
  FileUtils.rm_f "test.doc"
666
663
  FileUtils.rm_f "test.html"
667
- expect((IsoDoc::Iso::PresentationXMLConvert.new({wordstylesheet: "spec/assets/word.css", htmlstylesheet: "spec/assets/html.css"}).convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
664
+ expect(xmlpp(IsoDoc::Iso::PresentationXMLConvert.new({wordstylesheet: "spec/assets/word.css", htmlstylesheet: "spec/assets/html.css"}).convert("test", input, true)).sub(%r{<localized-strings>.*</localized-strings>}m, "")).to be_equivalent_to xmlpp(presxml)
668
665
  IsoDoc::Iso::HtmlConvert.new({wordstylesheet: "spec/assets/word.css", htmlstylesheet: "spec/assets/html.css"}).convert("test", presxml, false)
669
666
  word = File.read("test.html", encoding: "UTF-8")
670
667
  expect((word)).to include '<h1 class="IntroTitle">Warning for Stuff</h1>'
@@ -42,7 +42,7 @@ RSpec.describe IsoDoc do
42
42
  <abbreviation>ISO</abbreviation>
43
43
  </organization>
44
44
  </contributor>
45
- <note format="text/plain" reference="1" type="ISO DATE">Under preparation. (Stage at the time of publication ISO/DIS 16634)</note>
45
+ <note format="text/plain" reference="1" type="Unpublished-Status">Under preparation. (Stage at the time of publication ISO/DIS 16634)</note>
46
46
  <extent type="part">
47
47
  <referenceFrom>all</referenceFrom>
48
48
  </extent>
@@ -123,11 +123,8 @@ RSpec.describe IsoDoc do
123
123
  presxml = <<~OUTPUT
124
124
  <iso-standard xmlns='http://riboseinc.com/isoxml' type="presentation">
125
125
  <bibdata>
126
- <language>en</language>
126
+ <language current="true">en</language>
127
127
  </bibdata>
128
- <local_bibdata>
129
- <language>en</language>
130
- </local_bibdata>
131
128
  <preface>
132
129
  <foreword>
133
130
  <p id='_f06fd0d1-a203-4f3d-a515-0bdba0f8d83f'>
@@ -178,7 +175,7 @@ RSpec.describe IsoDoc do
178
175
  <abbreviation>ISO</abbreviation>
179
176
  </organization>
180
177
  </contributor>
181
- <note format='text/plain' reference='1' type='ISO DATE'>Under preparation. (Stage at the time of publication ISO/DIS 16634)</note>
178
+ <note format='text/plain' reference='1' type='Unpublished-Status'>Under preparation. (Stage at the time of publication ISO/DIS 16634)</note>
182
179
  <extent type='part'>
183
180
  <referenceFrom>all</referenceFrom>
184
181
  </extent>
@@ -342,7 +339,7 @@ html = <<~OUTPUT
342
339
  </body>
343
340
  </html>
344
341
  OUTPUT
345
- expect(xmlpp(IsoDoc::Iso::PresentationXMLConvert.new({}).convert("test", input, true))).to be_equivalent_to xmlpp(presxml)
342
+ expect(xmlpp(IsoDoc::Iso::PresentationXMLConvert.new({}).convert("test", input, true)).sub(%r{<localized-strings>.*</localized-strings>}m, "")).to be_equivalent_to xmlpp(presxml)
346
343
  expect(xmlpp(IsoDoc::Iso::HtmlConvert.new({}).convert("test", presxml, true))).to be_equivalent_to xmlpp(html)
347
344
  end
348
345
 
@@ -55,6 +55,9 @@ RSpec.describe IsoDoc do
55
55
  </clause>
56
56
  <appendix id="Q2" inline-header="false" obligation="normative">
57
57
  <title>An Appendix</title>
58
+ <clause id='Q2a' inline-header='false' obligation='normative'>
59
+ <title>Appendix subclause</title>
60
+ </clause>
58
61
  </appendix>
59
62
  <references id="Q3" normative="false"><title>Annex Bibliography</title></references>
60
63
  </annex><bibliography><references id="R" obligation="informative" normative="true">
@@ -140,6 +143,13 @@ RSpec.describe IsoDoc do
140
143
  </clause>
141
144
  <appendix id='Q2' inline-header='false' obligation='normative'>
142
145
  <title depth='2'>Appendix 1<tab/>An Appendix</title>
146
+ <clause id='Q2a' inline-header='false' obligation='normative'>
147
+ <title depth='3'>
148
+ Appendix 1.1
149
+ <tab/>
150
+ Appendix subclause
151
+ </title>
152
+ </clause>
143
153
  </appendix>
144
154
  <references id='Q3' normative='false'>
145
155
  <title depth='2'>A.2<tab/>Annex Bibliography</title>
@@ -222,6 +232,9 @@ RSpec.describe IsoDoc do
222
232
  </div>
223
233
  <div id="Q2">
224
234
  <h2>Appendix 1&#160; An Appendix</h2>
235
+ <div id='Q2a'>
236
+ <h3> Appendix 1.1 &#160; Appendix subclause </h3>
237
+ </div>
225
238
  </div>
226
239
  <div>
227
240
  <h2 class="Section3">A.2&#160; Annex Bibliography</h2>
@@ -318,6 +331,13 @@ OUTPUT
318
331
  </div>
319
332
  <div id="Q2">
320
333
  <h2>Appendix 1<span style="mso-tab-count:1">&#160; </span>An Appendix</h2>
334
+ <div id='Q2a'>
335
+ <h3>
336
+ Appendix 1.1
337
+ <span style='mso-tab-count:1'>&#160; </span>
338
+ Appendix subclause
339
+ </h3>
340
+ </div>
321
341
  </div>
322
342
  <div>
323
343
  <h2 class='Section3'>
@@ -936,6 +936,7 @@ RSpec.describe IsoDoc do
936
936
  <xref target="Q"/>
937
937
  <xref target="Q1"/>
938
938
  <xref target="Q2"/>
939
+ <xref target="Q3"/>
939
940
  <xref target="R"/>
940
941
  </p>
941
942
  </foreword>
@@ -985,6 +986,9 @@ RSpec.describe IsoDoc do
985
986
  </clause>
986
987
  <appendix id="Q2" inline-header="false" obligation="normative">
987
988
  <title>An Appendix</title>
989
+ <clause id='Q3' inline-header='false' obligation='normative'>
990
+ <title>Appendix subclause</title>
991
+ </clause>
988
992
  </appendix>
989
993
  </annex><bibliography><references id="R" obligation="informative" normative="true">
990
994
  <title>Normative References</title>
@@ -1019,6 +1023,7 @@ RSpec.describe IsoDoc do
1019
1023
  <xref target='Q'>A.1</xref>
1020
1024
  <xref target='Q1'>A.1.1</xref>
1021
1025
  <xref target='Q2'>Annex A, Appendix 1</xref>
1026
+ <xref target='Q3'>Annex A, Appendix 1.1</xref>
1022
1027
  <xref target='R'>Clause 2</xref>
1023
1028
  </p>
1024
1029
  </foreword>
@@ -1126,6 +1131,13 @@ RSpec.describe IsoDoc do
1126
1131
  <tab/>
1127
1132
  An Appendix
1128
1133
  </title>
1134
+ <clause id='Q3' inline-header='false' obligation='normative'>
1135
+ <title depth='3'>
1136
+ Appendix 1.1
1137
+ <tab/>
1138
+ Appendix subclause
1139
+ </title>
1140
+ </clause>
1129
1141
  </appendix>
1130
1142
  </annex>
1131
1143
  <bibliography>
@@ -118,8 +118,15 @@ BOILERPLATE =
118
118
  gsub(/(?<=\p{Alnum})'(?=\p{Alpha})/, "’")
119
119
  )
120
120
 
121
+ BOILERPLATE_FR =
122
+ HTMLEntities.new.decode(
123
+ File.read(File.join(File.dirname(__FILE__), "..", "lib", "asciidoctor", "iso", "boilerplate-fr.xml"), encoding: "utf-8").
124
+ gsub(/\{\{ agency \}\}/, "ISO").gsub(/\{\{ docyear \}\}/, Date.today.year.to_s).
125
+ gsub(/\{% if unpublished %\}.*\{% endif %\}/m, "").
126
+ gsub(/(?<=\p{Alnum})'(?=\p{Alpha})/, "’")
127
+ )
121
128
 
122
- BLANK_HDR = <<~"HDR"
129
+ BLANK_HDR1 = <<~"HDR"
123
130
  <?xml version="1.0" encoding="UTF-8"?>
124
131
  <iso-standard xmlns="https://www.metanorma.org/ns/iso" type="semantic" version="#{Metanorma::ISO::VERSION}">
125
132
  <bibdata type="standard">
@@ -162,9 +169,18 @@ BLANK_HDR = <<~"HDR"
162
169
  <stagename>International standard</stagename>
163
170
  </ext>
164
171
  </bibdata>
172
+ HDR
173
+
174
+ BLANK_HDR = <<~"HDR"
175
+ #{BLANK_HDR1}
165
176
  #{BOILERPLATE}
166
177
  HDR
167
178
 
179
+ BLANK_HDR_FR = <<~"HDR"
180
+ #{BLANK_HDR1.sub(%r{<language>en</language>}, "<language>fr</language>")}
181
+ #{BOILERPLATE_FR}
182
+ HDR
183
+
168
184
  TERM_BOILERPLATE = <<~END
169
185
  <p id="_">For the purposes of this document,
170
186
  the following terms and definitions apply.</p>
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.10
4
+ version: 1.6.0
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-10-11 00:00:00.000000000 Z
11
+ date: 2020-12-27 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.2.0
33
+ version: 1.4.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.2.0
40
+ version: 1.4.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.7.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.7.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: tokenizer
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -261,9 +261,7 @@ extensions: []
261
261
  extra_rdoc_files: []
262
262
  files:
263
263
  - ".gitattributes"
264
- - ".github/workflows/macos.yml"
265
- - ".github/workflows/ubuntu.yml"
266
- - ".github/workflows/windows.yml"
264
+ - ".github/workflows/rake.yml"
267
265
  - ".gitignore"
268
266
  - ".hound.yml"
269
267
  - ".oss-guides.rubocop.yml"
@@ -284,6 +282,7 @@ files:
284
282
  - lib/asciidoctor/iso/base.rb
285
283
  - lib/asciidoctor/iso/basicdoc.rng
286
284
  - lib/asciidoctor/iso/biblio.rng
285
+ - lib/asciidoctor/iso/boilerplate-fr.xml
287
286
  - lib/asciidoctor/iso/boilerplate.xml
288
287
  - lib/asciidoctor/iso/cleanup.rb
289
288
  - lib/asciidoctor/iso/converter.rb
@@ -293,10 +292,8 @@ files:
293
292
  - lib/asciidoctor/iso/isostandard-amd.rng
294
293
  - lib/asciidoctor/iso/isostandard.rnc
295
294
  - lib/asciidoctor/iso/isostandard.rng
296
- - lib/asciidoctor/iso/macros.rb
297
295
  - lib/asciidoctor/iso/reqt.rng
298
296
  - lib/asciidoctor/iso/section.rb
299
- - lib/asciidoctor/iso/term_lookup_cleanup.rb
300
297
  - lib/asciidoctor/iso/validate.rb
301
298
  - lib/asciidoctor/iso/validate_requirements.rb
302
299
  - lib/asciidoctor/iso/validate_section.rb
@@ -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
@@ -1,41 +0,0 @@
1
- # Auto-generated by Cimas: Do not edit it manually!
2
- # See https://github.com/metanorma/cimas
3
- name: macos
4
-
5
- on:
6
- push:
7
- branches: [ master ]
8
- pull_request:
9
- paths-ignore:
10
- - .github/workflows/ubuntu.yml
11
- - .github/workflows/windows.yml
12
-
13
- jobs:
14
- test-macos:
15
- name: Test on Ruby ${{ matrix.ruby }} macOS
16
- runs-on: macos-latest
17
- continue-on-error: ${{ matrix.experimental }}
18
- strategy:
19
- fail-fast: false
20
- matrix:
21
- ruby: [ '2.6', '2.5', '2.4' ]
22
- experimental: [false]
23
- include:
24
- - ruby: '2.7'
25
- experimental: true
26
- steps:
27
- - uses: actions/checkout@master
28
- - name: Use Ruby
29
- uses: actions/setup-ruby@v1
30
- with:
31
- ruby-version: ${{ matrix.ruby }}
32
- - name: Update gems
33
- run: |
34
- sudo gem install bundler --force
35
- bundle install --jobs 4 --retry 3
36
- - name: Install PlantUML
37
- run: |
38
- brew install plantuml
39
- - name: Run specs
40
- run: |
41
- bundle exec rake
@@ -1,45 +0,0 @@
1
- # Auto-generated by Cimas: Do not edit it manually!
2
- # See https://github.com/metanorma/cimas
3
- name: ubuntu
4
-
5
- on:
6
- push:
7
- branches: [ master ]
8
- pull_request:
9
- paths-ignore:
10
- - .github/workflows/macos.yml
11
- - .github/workflows/windows.yml
12
-
13
- jobs:
14
- test-linux:
15
- name: Test on Ruby ${{ matrix.ruby }} Ubuntu
16
- runs-on: ubuntu-latest
17
- continue-on-error: ${{ matrix.experimental }}
18
- strategy:
19
- fail-fast: false
20
- matrix:
21
- ruby: [ '2.6', '2.5', '2.4' ]
22
- experimental: [false]
23
- include:
24
- - ruby: '2.7'
25
- experimental: true
26
- steps:
27
- - uses: actions/checkout@master
28
- - name: Use Ruby
29
- uses: actions/setup-ruby@v1
30
- with:
31
- ruby-version: ${{ matrix.ruby }}
32
- - name: Update gems
33
- run: |
34
- gem install bundler
35
- bundle install --jobs 4 --retry 3
36
- - name: Install PlantUML
37
- uses: nick-invision/retry@v1
38
- with:
39
- polling_interval_seconds: 5
40
- timeout_minutes: 5
41
- max_attempts: 3
42
- command: sudo apt-get update -y && sudo bash -c "curl -L https://github.com/metanorma/plantuml-install/raw/master/ubuntu.sh | bash"
43
- - name: Run specs
44
- run: |
45
- bundle exec rake
@@ -1,43 +0,0 @@
1
- # Auto-generated by Cimas: Do not edit it manually!
2
- # See https://github.com/metanorma/cimas
3
- name: windows
4
-
5
- on:
6
- push:
7
- branches: [ master ]
8
- pull_request:
9
- paths-ignore:
10
- - .github/workflows/macos.yml
11
- - .github/workflows/ubuntu.yml
12
-
13
- jobs:
14
- test-windows:
15
- name: Test on Ruby ${{ matrix.ruby }} Windows
16
- runs-on: windows-latest
17
- continue-on-error: ${{ matrix.experimental }}
18
- strategy:
19
- fail-fast: false
20
- matrix:
21
- ruby: [ '2.6', '2.5', '2.4' ]
22
- experimental: [false]
23
- include:
24
- - ruby: '2.7'
25
- experimental: true
26
- steps:
27
- - uses: actions/checkout@master
28
- - name: Use Ruby
29
- uses: actions/setup-ruby@v1
30
- with:
31
- ruby-version: ${{ matrix.ruby }}
32
- - name: Update gems
33
- shell: pwsh
34
- run: |
35
- gem install bundler
36
- bundle config --local path vendor/bundle
37
- bundle install --jobs 4 --retry 3
38
- - name: Install PlantUML
39
- run: |
40
- cinst -y plantuml
41
- - name: Run specs
42
- run: |
43
- bundle exec rake
@@ -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