metanorma-standoc 1.5.3 → 1.6.4

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 (61) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +66 -0
  3. data/README.adoc +1 -3
  4. data/lib/asciidoctor/standoc/base.rb +6 -1
  5. data/lib/asciidoctor/standoc/basicdoc.rng +4 -11
  6. data/lib/asciidoctor/standoc/cleanup.rb +78 -12
  7. data/lib/asciidoctor/standoc/cleanup_block.rb +41 -4
  8. data/lib/asciidoctor/standoc/cleanup_boilerplate.rb +14 -0
  9. data/lib/asciidoctor/standoc/cleanup_footnotes.rb +25 -0
  10. data/lib/asciidoctor/standoc/cleanup_inline.rb +6 -2
  11. data/lib/asciidoctor/standoc/cleanup_ref.rb +3 -4
  12. data/lib/asciidoctor/standoc/converter.rb +58 -3
  13. data/lib/asciidoctor/standoc/front.rb +9 -3
  14. data/lib/asciidoctor/standoc/front_contributor.rb +43 -11
  15. data/lib/asciidoctor/standoc/inline.rb +18 -40
  16. data/lib/asciidoctor/standoc/isodoc.rng +27 -50
  17. data/lib/asciidoctor/standoc/lists.rb +4 -2
  18. data/lib/asciidoctor/standoc/macros.rb +28 -2
  19. data/lib/asciidoctor/standoc/ref.rb +46 -48
  20. data/lib/asciidoctor/standoc/ref_sect.rb +16 -8
  21. data/lib/asciidoctor/standoc/section.rb +5 -9
  22. data/lib/liquid/custom_blocks/with_json_nested_context.rb +18 -0
  23. data/lib/liquid/custom_blocks/with_yaml_nested_context.rb +19 -0
  24. data/lib/metanorma/standoc.rb +0 -5
  25. data/lib/metanorma/standoc/version.rb +20 -1
  26. data/metanorma-standoc.gemspec +7 -3
  27. data/spec/asciidoctor-standoc/base_spec.rb +246 -9
  28. data/spec/asciidoctor-standoc/blocks_spec.rb +1 -1
  29. data/spec/asciidoctor-standoc/cleanup_sections_spec.rb +1514 -0
  30. data/spec/asciidoctor-standoc/cleanup_spec.rb +384 -1547
  31. data/spec/asciidoctor-standoc/inline_spec.rb +128 -4
  32. data/spec/asciidoctor-standoc/isobib_cache_spec.rb +15 -22
  33. data/spec/asciidoctor-standoc/lists_spec.rb +10 -1
  34. data/spec/asciidoctor-standoc/macros_json2text_spec.rb +1 -1
  35. data/spec/asciidoctor-standoc/macros_lutaml_spec.rb +80 -0
  36. data/spec/asciidoctor-standoc/macros_spec.rb +258 -0
  37. data/spec/asciidoctor-standoc/macros_yaml2text_spec.rb +1 -1
  38. data/spec/asciidoctor-standoc/refs_dl_spec.rb +8 -8
  39. data/spec/asciidoctor-standoc/refs_spec.rb +362 -104
  40. data/spec/asciidoctor-standoc/validate_spec.rb +26 -0
  41. data/spec/fixtures/diagram_definitions.lutaml +22 -0
  42. data/spec/fixtures/test.exp +121 -0
  43. data/spec/spec_helper.rb +34 -1
  44. data/spec/support/shared_examples/structured_data_2_text_preprocessor.rb +201 -3
  45. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +47 -231
  46. data/spec/vcr_cassettes/isobib_get_123.yml +14 -60
  47. data/spec/vcr_cassettes/isobib_get_123_1.yml +24 -116
  48. data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +361 -0
  49. data/spec/vcr_cassettes/isobib_get_123_2001.yml +14 -60
  50. data/spec/vcr_cassettes/isobib_get_124.yml +12 -58
  51. data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +8 -8
  52. data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +292 -162
  53. metadata +59 -17
  54. data/.github/workflows/macos.yml +0 -46
  55. data/.github/workflows/ubuntu.yml +0 -49
  56. data/.github/workflows/windows.yml +0 -53
  57. data/lib/asciidoctor/standoc/base_structured_text_preprocessor.rb +0 -123
  58. data/lib/asciidoctor/standoc/json2_text_preprocessor.rb +0 -43
  59. data/lib/asciidoctor/standoc/yaml2_text_preprocessor.rb +0 -43
  60. data/lib/metanorma/standoc/latexml_requirement.rb +0 -62
  61. data/lib/metanorma/standoc/requirement.rb +0 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7503bfc7dd68c2d6a6b2ded8f08611e92067a15aa4088c02f1e5408ff8e027e6
4
- data.tar.gz: 65cd5d4d3648788113fd30437fe8d649c6e498b9ebdab8d5b41d2fadb7439056
3
+ metadata.gz: e30bd97d527914e60d6dfcd537620ba7d2d5ae82d9d9c07e24d5a535dd9ec8ee
4
+ data.tar.gz: b8774965fcb7e698288f1793460fd67b982085e8d0951b35cfa6c4f102157e9a
5
5
  SHA512:
6
- metadata.gz: 73510f7d926c6acf395377794a753cef6bb0f0658fb66c606df07e23548c17f010c7120b77765b388fb363a4309051fcf03a601d6ea95cf20aca6e4645b1c674
7
- data.tar.gz: bae732755cc47dcae17e0d8ef01bcd35173c8941807b2d5844cf45f008f57c199977756d4fd15b0e3c8c558e73432dd9ba88be2b01f61b32cff180308adcd83d
6
+ metadata.gz: 74e250a48b25dd82c3174b78b515e57fe11bc3f4f8767d6942048bb3ef01ddf6937a6c2ff24ddb5e17d8f747eeb582b77248b28bdf50bc120a3fcfafd6f78221
7
+ data.tar.gz: a0fe35b39a730d18afe1cc7463b166377adb2137c4cfd9c650844e3a593e1a2312fa8242a8991a1508aaed44b7b7525a54cad7f747a177ea2848b27720cf644d
@@ -0,0 +1,66 @@
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
3
+ name: rake
4
+
5
+ on:
6
+ push:
7
+ branches: [ master, main ]
8
+ tags: [ v* ]
9
+ pull_request:
10
+
11
+ jobs:
12
+ rake:
13
+ name: Test on Ruby ${{ matrix.ruby }} ${{ matrix.os }}
14
+ runs-on: ${{ matrix.os }}
15
+ continue-on-error: ${{ matrix.experimental }}
16
+ strategy:
17
+ fail-fast: false
18
+ matrix:
19
+ ruby: [ '2.6', '2.5', '2.4' ]
20
+ os: [ ubuntu-latest, windows-latest, macos-latest ]
21
+ experimental: [ false ]
22
+ include:
23
+ - ruby: '2.7'
24
+ os: 'ubuntu-latest'
25
+ experimental: true
26
+ - ruby: '2.7'
27
+ os: 'windows-latest'
28
+ experimental: true
29
+ - ruby: '2.7'
30
+ os: 'macos-latest'
31
+ experimental: true
32
+ steps:
33
+ - uses: actions/checkout@master
34
+
35
+ - uses: ruby/setup-ruby@v1
36
+ with:
37
+ ruby-version: ${{ matrix.ruby }}
38
+
39
+ - uses: actions/cache@v2
40
+ with:
41
+ path: vendor/bundle
42
+ key: bundle-${{ matrix.os }}-${{ matrix.ruby }}-${{ hashFiles('**/*.gemspec') }}
43
+ restore-keys: bundle-${{ matrix.os }}-${{ matrix.ruby }}
44
+
45
+ - run: bundle config set path 'vendor/bundle'
46
+
47
+ - run: bundle install --jobs 4 --retry 3
48
+
49
+ - name: install plantuml ubuntu
50
+ if: matrix.os == 'ubuntu-latest'
51
+ uses: nick-invision/retry@v1
52
+ with:
53
+ polling_interval_seconds: 5
54
+ timeout_minutes: 5
55
+ max_attempts: 3
56
+ command: >
57
+ sudo apt-get update -y && sudo bash -c
58
+ "curl -L https://github.com/metanorma/plantuml-install/raw/master/ubuntu.sh | bash"
59
+
60
+ - if: matrix.os == 'macos-latest'
61
+ run: brew install plantuml
62
+
63
+ - if: matrix.os == 'windows-latest'
64
+ run: cinst -y plantuml
65
+
66
+ - run: bundle exec rake
@@ -1,9 +1,7 @@
1
1
  = Metanorma-standoc
2
2
 
3
3
  image:https://img.shields.io/gem/v/metanorma-standoc.svg["Gem Version", link="https://rubygems.org/gems/metanorma-standoc"]
4
- image:https://github.com/metanorma/metanorma-standoc/workflows/macos/badge.svg["Build Status (macOS)", link="https://github.com/metanorma/metanorma-standoc/actions?workflow=macos"]
5
- image:https://github.com/metanorma/metanorma-standoc/workflows/ubuntu/badge.svg["Build Status (ubuntu)", link="https://github.com/metanorma/metanorma-standoc/actions?workflow=ubuntu"]
6
- image:https://github.com/metanorma/metanorma-standoc/workflows/windows/badge.svg["Build Status (Windows)", link="https://github.com/metanorma/metanorma-standoc/actions?workflow=windows"]
4
+ image:https://github.com/metanorma/metanorma-standoc/workflows/rake/badge.svg["Build Status", link="https://github.com/metanorma/metanorma-standoc/actions?workflow=rake"]
7
5
  image:https://codeclimate.com/github/metanorma/metanorma-standoc/badges/gpa.svg["Code Climate", link="https://codeclimate.com/github/metanorma/metanorma-standoc"]
8
6
  image:https://img.shields.io/github/issues-pr-raw/metanorma/metanorma-standoc.svg["Pull Requests", link="https://github.com/metanorma/metanorma-standoc/pulls"]
9
7
  image:https://img.shields.io/github/commits-since/metanorma/metanorma-standoc/latest.svg["Commits since latest",link="https://github.com/metanorma/metanorma-standoc/releases"]
@@ -143,6 +143,11 @@ module Asciidoctor
143
143
  ret
144
144
  end
145
145
 
146
+ def version
147
+ flavour = self.class.name.sub(/::Converter$/, "").sub(/^.+::/, "")
148
+ Metanorma.versioned(Metanorma, flavour)[-1]::VERSION
149
+ end
150
+
146
151
  def clean_exit
147
152
  @log.write(@output_dir + @filename + ".err") unless @novalid
148
153
  @files_to_delete.each { |f| FileUtils.rm f }
@@ -150,7 +155,7 @@ module Asciidoctor
150
155
 
151
156
  def makexml1(node)
152
157
  result = ["<?xml version='1.0' encoding='UTF-8'?>",
153
- "<#{xml_root_tag}>"]
158
+ "<#{xml_root_tag} type='semantic' version='#{version}'>"]
154
159
  result << noko { |ixml| front node, ixml }
155
160
  result << noko { |ixml| middle node, ixml }
156
161
  result << "</#{xml_root_tag}>"
@@ -158,17 +158,7 @@
158
158
  <data type="ID"/>
159
159
  </attribute>
160
160
  <oneOrMore>
161
- <choice>
162
- <ref name="formula"/>
163
- <ref name="ul"/>
164
- <ref name="ol"/>
165
- <ref name="dl"/>
166
- <ref name="quote"/>
167
- <ref name="sourcecode"/>
168
- <ref name="paragraph"/>
169
- <ref name="table"/>
170
- <ref name="figure"/>
171
- </choice>
161
+ <ref name="paragraph"/>
172
162
  </oneOrMore>
173
163
  </element>
174
164
  </define>
@@ -1028,6 +1018,9 @@
1028
1018
  <value>alphabet_upper</value>
1029
1019
  </choice>
1030
1020
  </attribute>
1021
+ <optional>
1022
+ <attribute name="start"/>
1023
+ </optional>
1031
1024
  <oneOrMore>
1032
1025
  <ref name="li"/>
1033
1026
  </oneOrMore>
@@ -69,6 +69,7 @@ module Asciidoctor
69
69
  bibdata_cleanup(xmldoc)
70
70
  boilerplate_cleanup(xmldoc)
71
71
  smartquotes_cleanup(xmldoc)
72
+ variant_cleanup(xmldoc)
72
73
  para_cleanup(xmldoc)
73
74
  empty_element_cleanup(xmldoc)
74
75
  img_cleanup(xmldoc)
@@ -81,12 +82,13 @@ module Asciidoctor
81
82
  xmldoc.traverse do |n|
82
83
  next unless n.text?
83
84
  if @smartquotes
84
- next unless /[-'"(<>]|\.\.|\dx/.match(n)
85
- next unless n.ancestors("pre, tt, sourcecode, bibdata, on, "\
86
- "stem, figure[@class = 'pseudocode']").empty?
85
+ /[-'"(<>]|\.\.|\dx/.match(n) or next
86
+ n.ancestors("pre, tt, sourcecode, bibdata, on, "\
87
+ "stem, figure[@class = 'pseudocode']").empty? or next
87
88
  n.replace(Utils::smartformat(n.text))
88
89
  else
89
- n.replace(n.text.gsub(/(?<=\p{Alnum})\u2019(?=\p{Alpha})/, "'"))
90
+ n.replace(n.text.gsub(/(?<=\p{Alnum})\u2019(?=\p{Alpha})/, "'"))#.
91
+ #gsub(/</, "&lt;").gsub(/>/, "&gt;"))
90
92
  end
91
93
  end
92
94
  end
@@ -146,16 +148,59 @@ module Asciidoctor
146
148
  align_callouts_to_annotations(xmldoc)
147
149
  end
148
150
 
151
+ def xml_unescape_mathml(x)
152
+ return if x.children.any? { |y| y.element? }
153
+ math = x.text.gsub(/&lt;/, "<").gsub(/&gt;/, ">").gsub(/&quot;/, '"').
154
+ gsub(/&apos;/, "'").gsub(/&amp;/, "&").
155
+ gsub(/<[^: \r\n\t\/]+:/, "<").gsub(/<\/[^ \r\n\t:]+:/, "</")
156
+ x.children = math
157
+ end
158
+
159
+ MATHML_NS = "http://www.w3.org/1998/Math/MathML".freeze
160
+
161
+ def mathml_preserve_space(m)
162
+ m.xpath(".//m:mtext", "m" => MATHML_NS).each do |x|
163
+ x.children = x.children.to_xml.gsub(/^\s/, "&#xA0;").
164
+ gsub(/\s$/, "&#xA0;")
165
+ end
166
+ end
167
+
168
+ def mathml_namespace(stem)
169
+ stem.xpath("./math", ).each { |x| x.default_namespace = MATHML_NS }
170
+ end
171
+
172
+ def mathml_mi_italics
173
+ { uppergreek: true, upperroman: true,
174
+ lowergreek: true, lowerroman: true }
175
+ end
176
+
177
+ # presuppose multichar mi upright, singlechar mi MathML default italic
178
+ def mathml_italicise(x)
179
+ x.xpath(".//m:mi", "m" => MATHML_NS).each do |i|
180
+ char = HTMLEntities.new.decode(i.text)
181
+ i["mathvariant"] = "normal" if mi_italicise?(char)
182
+ end
183
+ end
184
+
185
+ def mi_italicise?(c)
186
+ return false if c.length > 1
187
+ if /\p{Greek}/.match(c)
188
+ /\p{Lower}/.match(c) && !mathml_mi_italics[:lowergreek] ||
189
+ /\p{Upper}/.match(c) && !mathml_mi_italics[:uppergreek]
190
+ elsif /\p{Latin}/.match(c)
191
+ /\p{Lower}/.match(c) && !mathml_mi_italics[:lowerroman] ||
192
+ /\p{Upper}/.match(c) && !mathml_mi_italics[:upperroman]
193
+ else
194
+ false
195
+ end
196
+ end
197
+
149
198
  def mathml_cleanup(xmldoc)
150
199
  xmldoc.xpath("//stem[@type = 'MathML']").each do |x|
151
- next if x.children.any? { |y| y.element? }
152
- math = x.text.gsub(/&lt;/, "<").gsub(/&gt;/, ">").gsub(/&quot;/, '"').
153
- gsub(/&apos;/, "'").gsub(/&amp;/, "&").
154
- gsub(/<[^: \r\n\t\/]+:/, "<").gsub(/<\/[^ \r\n\t:]+:/, "</").
155
- gsub(/ xmlns[^>"']+/, "").
156
- gsub(/<math /, '<math xmlns="http://www.w3.org/1998/Math/MathML" ').
157
- gsub(/<math>/, '<math xmlns="http://www.w3.org/1998/Math/MathML">')
158
- x.children = math
200
+ xml_unescape_mathml(x)
201
+ mathml_namespace(x)
202
+ mathml_preserve_space(x)
203
+ mathml_italicise(x)
159
204
  end
160
205
  end
161
206
 
@@ -174,6 +219,27 @@ module Asciidoctor
174
219
  i["src"] = datauri(i["src"])
175
220
  end
176
221
  end
222
+
223
+ def variant_cleanup(xmldoc)
224
+ xmldoc.xpath("//*[variant]").each do |c|
225
+ c&.next&.text? && c&.next&.next&.name == "variant" &&
226
+ c.next.text.gsub(/\s/, "").empty? and c.next.remove
227
+ end
228
+ xmldoc.xpath("//*[variant]").each do |c|
229
+ next unless c.children.any? do |n|
230
+ n.name != "variant" && (!n.text? || !n.text.gsub(/\s/, "").empty?)
231
+ end
232
+ c.xpath("./variant").each do |n|
233
+ if n.at_xpath('preceding-sibling::node()[not(self::text()'\
234
+ '[not(normalize-space())])][1][self::variantwrap]')
235
+ n.previous_element << n
236
+ else
237
+ n.replace('<variantwrap/>').first << n
238
+ end
239
+ end
240
+ end
241
+ xmldoc.xpath("//variantwrap").each { |n| n.name = "variant" }
242
+ end
177
243
  end
178
244
  end
179
245
  end
@@ -19,12 +19,22 @@ module Asciidoctor
19
19
  end
20
20
  end
21
21
 
22
+ def dl1_table_cleanup(xmldoc)
23
+ q = "//table/following-sibling::*[1][self::dl]"
24
+ xmldoc.xpath(q).each do |s|
25
+ if s["key"] == "true"
26
+ s.previous_element << s.remove
27
+ end
28
+ end
29
+ end
30
+
22
31
  # move Key dl after table footer
23
- def dl_table_cleanup(xmldoc)
32
+ def dl2_table_cleanup(xmldoc)
24
33
  q = "//table/following-sibling::*[1][self::p]"
25
34
  xmldoc.xpath(q).each do |s|
26
35
  if s.text =~ /^\s*key[^a-z]*$/i && !s.next_element.nil? &&
27
36
  s.next_element.name == "dl"
37
+ s.next_element["key"] = "true"
28
38
  s.previous_element << s.next_element.remove
29
39
  s.remove
30
40
  end
@@ -54,7 +64,8 @@ module Asciidoctor
54
64
  end
55
65
 
56
66
  def table_cleanup(xmldoc)
57
- dl_table_cleanup(xmldoc)
67
+ dl1_table_cleanup(xmldoc)
68
+ dl2_table_cleanup(xmldoc)
58
69
  notes_table_cleanup(xmldoc)
59
70
  header_rows_cleanup(xmldoc)
60
71
  end
@@ -74,22 +85,47 @@ module Asciidoctor
74
85
 
75
86
  # include where definition list inside stem block
76
87
  def formula_cleanup(x)
88
+ formula_cleanup_where1(x)
89
+ formula_cleanup_where2(x)
90
+ end
91
+
92
+ def formula_cleanup_where1(x)
93
+ q = "//formula/following-sibling::*[1][self::dl]"
94
+ x.xpath(q).each do |s|
95
+ if s["key"] == "true"
96
+ s.previous_element << s.remove
97
+ end
98
+ end
99
+ end
100
+
101
+ def formula_cleanup_where2(x)
77
102
  q = "//formula/following-sibling::*[1][self::p]"
78
103
  x.xpath(q).each do |s|
79
104
  if s.text =~ /^\s*where[^a-z]*$/i && !s.next_element.nil? &&
80
105
  s.next_element.name == "dl"
106
+ s.next_element["key"] = "true"
81
107
  s.previous_element << s.next_element.remove
82
108
  s.remove
83
109
  end
84
110
  end
85
111
  end
86
112
 
113
+ def figure_dl_cleanup1(xmldoc)
114
+ q = "//figure/following-sibling::*[self::dl]"
115
+ xmldoc.xpath(q).each do |s|
116
+ if s["key"] == "true"
117
+ s.previous_element << s.remove
118
+ end
119
+ end
120
+ end
121
+
87
122
  # include key definition list inside figure
88
- def figure_dl_cleanup(xmldoc)
123
+ def figure_dl_cleanup2(xmldoc)
89
124
  q = "//figure/following-sibling::*[self::p]"
90
125
  xmldoc.xpath(q).each do |s|
91
126
  if s.text =~ /^\s*key[^a-z]*$/i && !s.next_element.nil? &&
92
127
  s.next_element.name == "dl"
128
+ s.next_element["key"] = "true"
93
129
  s.previous_element << s.next_element.remove
94
130
  s.remove
95
131
  end
@@ -115,7 +151,8 @@ module Asciidoctor
115
151
 
116
152
  def figure_cleanup(xmldoc)
117
153
  figure_footnote_cleanup(xmldoc)
118
- figure_dl_cleanup(xmldoc)
154
+ figure_dl_cleanup1(xmldoc)
155
+ figure_dl_cleanup2(xmldoc)
119
156
  subfigure_cleanup(xmldoc)
120
157
  end
121
158
 
@@ -91,10 +91,24 @@ module Asciidoctor
91
91
  end
92
92
 
93
93
  def bibdata_cleanup(xmldoc)
94
+ bibdata_anchor_cleanup(xmldoc)
95
+ bibdata_docidentifier_cleanup(xmldoc)
96
+ end
97
+
98
+ def bibdata_anchor_cleanup(xmldoc)
94
99
  xmldoc.xpath("//bibdata//bibitem | //bibdata//note").each do |b|
95
100
  b.delete("id")
96
101
  end
97
102
  end
103
+
104
+ def bibdata_docidentifier_cleanup(xmldoc)
105
+ ins = xmldoc.at("//bibdata/docidentifier")
106
+ xmldoc.xpath("//bibdata/docidentifier").each_with_index do |b, i|
107
+ next if i == 0
108
+ ins.next = b.remove
109
+ ins = ins.next
110
+ end
111
+ end
98
112
  end
99
113
  end
100
114
  end
@@ -72,7 +72,32 @@ module Asciidoctor
72
72
  end
73
73
  end
74
74
 
75
+ def title_footnote_move(xmldoc)
76
+ ins = xmldoc.at("//bibdata/language")
77
+ xmldoc.xpath("//bibdata/title//fn").each do |f|
78
+ f.name = "note"
79
+ f["type"] = "title-footnote"
80
+ f.delete("reference")
81
+ ins.previous = f.remove
82
+ end
83
+ end
84
+
85
+ def footnote_block_cleanup(xmldoc)
86
+ xmldoc.xpath("//footnoteblock").each do |f|
87
+ f.name = 'fn'
88
+ if id = xmldoc.at("//*[@id = '#{f.text}']")
89
+ f.children = id.remove.children
90
+ else
91
+ @log.add("Crossreferences", f,
92
+ "Could not resolve footnoteblock:[#{f.text}]")
93
+ f.children = "[ERROR]"
94
+ end
95
+ end
96
+ end
97
+
75
98
  def footnote_cleanup(xmldoc)
99
+ footnote_block_cleanup(xmldoc)
100
+ title_footnote_move(xmldoc)
76
101
  table_footnote_renumber(xmldoc)
77
102
  other_footnote_renumber(xmldoc)
78
103
  xmldoc.xpath("//fn").each do |fn|
@@ -49,8 +49,12 @@ module Asciidoctor
49
49
  end
50
50
 
51
51
  def extract_localities(x)
52
- text = x&.children&.first&.remove&.text
53
- extract_localities1(x, text)
52
+ f = x&.children&.first or return
53
+ f.text? or return
54
+ head = f.remove.text
55
+ tail = x&.children&.remove
56
+ extract_localities1(x, head)
57
+ tail and x << tail
54
58
  end
55
59
 
56
60
  def extract_localities1(x, text)
@@ -49,9 +49,8 @@ module Asciidoctor
49
49
  # consecutively, but that standards codes are preserved as is:
50
50
  # only numeric references are renumbered
51
51
  def biblio_renumber(xmldoc)
52
- r = xmldoc.at("//references[@normative = 'false'] | "\
53
- "//clause[.//references[@normative = 'false']] | "\
54
- "//annex[.//references[@normative = 'false']]") or return
52
+ r = xmldoc.at("//references | //clause[.//references] | "\
53
+ "//annex[.//references]") or return
55
54
  r.xpath(".//bibitem[not(ancestor::bibitem)]").each_with_index do |b, i|
56
55
  next unless docid = b.at("./docidentifier[@type = 'metanorma']")
57
56
  next unless /^\[\d+\]$/.match(docid.text)
@@ -127,7 +126,7 @@ module Asciidoctor
127
126
  bibitemxml = RelatonBib::BibliographicItem.new(
128
127
  RelatonBib::HashConverter::hash_to_bib(bib)).to_xml or next
129
128
  bibitem = Nokogiri::XML(bibitemxml)
130
- bibitem["id"] = c["id"] if c["id"]
129
+ bibitem.root["id"] = c["id"] if c["id"] && !/^_/.match(c["id"])
131
130
  c.replace(bibitem.root)
132
131
  end
133
132
  end