metanorma-standoc 1.9.4 → 1.10.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +1 -1
  3. data/.rubocop.yml +1 -1
  4. data/lib/asciidoctor/standoc/base.rb +0 -1
  5. data/lib/asciidoctor/standoc/blocks.rb +1 -1
  6. data/lib/asciidoctor/standoc/cleanup.rb +61 -2
  7. data/lib/asciidoctor/standoc/cleanup_block.rb +0 -1
  8. data/lib/asciidoctor/standoc/cleanup_boilerplate.rb +2 -2
  9. data/lib/asciidoctor/standoc/cleanup_footnotes.rb +0 -1
  10. data/lib/asciidoctor/standoc/cleanup_inline.rb +117 -77
  11. data/lib/asciidoctor/standoc/cleanup_maths.rb +0 -1
  12. data/lib/asciidoctor/standoc/cleanup_ref.rb +7 -0
  13. data/lib/asciidoctor/standoc/cleanup_section.rb +0 -1
  14. data/lib/asciidoctor/standoc/cleanup_terms.rb +19 -18
  15. data/lib/asciidoctor/standoc/converter.rb +3 -0
  16. data/lib/asciidoctor/standoc/datamodel/diagram_preprocessor.rb +22 -21
  17. data/lib/asciidoctor/standoc/front.rb +0 -1
  18. data/lib/asciidoctor/standoc/front_contributor.rb +0 -1
  19. data/lib/asciidoctor/standoc/inline.rb +20 -17
  20. data/lib/asciidoctor/standoc/isodoc.rng +56 -8
  21. data/lib/asciidoctor/standoc/macros.rb +25 -5
  22. data/lib/asciidoctor/standoc/macros_plantuml.rb +21 -23
  23. data/lib/asciidoctor/standoc/macros_terms.rb +60 -23
  24. data/lib/asciidoctor/standoc/ref.rb +60 -56
  25. data/lib/asciidoctor/standoc/section.rb +19 -12
  26. data/lib/asciidoctor/standoc/term_lookup_cleanup.rb +69 -30
  27. data/lib/asciidoctor/standoc/terms.rb +1 -1
  28. data/lib/asciidoctor/standoc/utils.rb +0 -1
  29. data/lib/asciidoctor/standoc/validate.rb +22 -8
  30. data/lib/isodoc/html/html_titlepage.html +81 -0
  31. data/lib/isodoc/html/htmlstyle.css +983 -0
  32. data/lib/isodoc/html/htmlstyle.scss +714 -0
  33. data/lib/isodoc/html/scripts.html +71 -0
  34. data/lib/metanorma/standoc/processor.rb +16 -7
  35. data/lib/metanorma/standoc/version.rb +1 -1
  36. data/metanorma-standoc.gemspec +3 -3
  37. data/spec/asciidoctor/blocks_spec.rb +8 -8
  38. data/spec/asciidoctor/cleanup_sections_spec.rb +899 -864
  39. data/spec/asciidoctor/cleanup_spec.rb +85 -20
  40. data/spec/asciidoctor/isobib_cache_spec.rb +4 -6
  41. data/spec/asciidoctor/lists_spec.rb +147 -135
  42. data/spec/asciidoctor/macros_json2text_spec.rb +1 -1
  43. data/spec/asciidoctor/macros_plantuml_spec.rb +165 -104
  44. data/spec/asciidoctor/macros_spec.rb +813 -168
  45. data/spec/asciidoctor/refs_spec.rb +12 -12
  46. data/spec/asciidoctor/validate_spec.rb +76 -20
  47. data/spec/support/shared_examples/structured_data_2_text_preprocessor.rb +34 -34
  48. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +50 -50
  49. data/spec/vcr_cassettes/isobib_get_123.yml +13 -13
  50. data/spec/vcr_cassettes/isobib_get_123_1.yml +26 -26
  51. data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +34 -34
  52. data/spec/vcr_cassettes/isobib_get_123_2001.yml +14 -14
  53. data/spec/vcr_cassettes/isobib_get_124.yml +11 -11
  54. data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +14 -14
  55. data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +51 -61
  56. metadata +11 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d42939fe573eddd8bd58ff20a2e3eaacd3eb9de328afccabba60453a8b94cd43
4
- data.tar.gz: e2d2e0f516b11587c5dcc6e8f87d39e4d63095b8e96014e7d1bfa610ceb6bae8
3
+ metadata.gz: a43a3db1e4ef2ae43a1b2c7ecd980384cac2ee645668e414c73fd8e53dee3859
4
+ data.tar.gz: 6f026c1bd2e1d0c5f2f327cdc345af6635ff1c1454479fd42709b9d18fda5e60
5
5
  SHA512:
6
- metadata.gz: 653295f7c1dbdb48a201f0784e6d123058a2ccd0abc018fe9ae68049b9c01f29d0120c3a3ec5a25b968e18fbbf4ca3c85c0da294985f2dcee42ea2d049cdb526
7
- data.tar.gz: d36fd8fa5b679f71c780bab99fe4c5a18d58c40e8995065975d87cbc0ce51f6459748c1c5310f3c4419d3058087a78d5e9d481839e4579c2d872d0359852ee28
6
+ metadata.gz: 7b20738029106d832a852db8eabf340058cdcbf75d8ce16def000478733c3633ad1144ac1aa2f736a637423c19f90491429fbec591987bc2f4af58bb3c8df087
7
+ data.tar.gz: 69f3e40acdca71435cda97dbcd33e862ffbacbb4eeaff97e543b971ec2744c72227115013ef2ac3ee88552c64bf413a36c060adf3af58e6ebb86c6b85997b070
@@ -16,7 +16,7 @@ jobs:
16
16
  strategy:
17
17
  fail-fast: false
18
18
  matrix:
19
- ruby: [ '3.0', '2.7', '2.6', '2.5', '2.4' ]
19
+ ruby: [ '3.0', '2.7', '2.6', '2.5' ]
20
20
  os: [ ubuntu-latest, windows-latest, macos-latest ]
21
21
  experimental: [ false ]
22
22
  steps:
data/.rubocop.yml CHANGED
@@ -7,4 +7,4 @@ inherit_from:
7
7
  # ...
8
8
 
9
9
  AllCops:
10
- TargetRubyVersion: 2.4
10
+ TargetRubyVersion: 2.5
@@ -3,7 +3,6 @@ require "nokogiri"
3
3
  require "htmlentities"
4
4
  require "json"
5
5
  require "pathname"
6
- require "open-uri"
7
6
  require "isodoc"
8
7
  require "relaton"
9
8
  require "fileutils"
@@ -41,7 +41,7 @@ module Asciidoctor
41
41
  def form(node)
42
42
  noko do |xml|
43
43
  xml.form **attr_code(
44
- id: Metanorma::Utils::anchor_or_uuid,
44
+ id: Metanorma::Utils::anchor_or_uuid, class: node.attr("class"),
45
45
  name: node.attr("name"), action: node.attr("action")
46
46
  ) do |f|
47
47
  f << node.content
@@ -1,6 +1,5 @@
1
1
  require "nokogiri"
2
2
  require "pathname"
3
- require "open-uri"
4
3
  require "html2doc"
5
4
  require_relative "./cleanup_block"
6
5
  require_relative "./cleanup_footnotes"
@@ -48,6 +47,7 @@ module Asciidoctor
48
47
  xref_cleanup(xmldoc)
49
48
  concept_cleanup(xmldoc)
50
49
  origin_cleanup(xmldoc)
50
+ bookmark_cleanup(xmldoc)
51
51
  termdef_cleanup(xmldoc)
52
52
  RelatonIev::iev_cleanup(xmldoc, @bibdb)
53
53
  element_name_cleanup(xmldoc)
@@ -58,11 +58,11 @@ module Asciidoctor
58
58
  mathml_cleanup(xmldoc)
59
59
  script_cleanup(xmldoc)
60
60
  docidentifier_cleanup(xmldoc)
61
- bookmark_cleanup(xmldoc)
62
61
  requirement_cleanup(xmldoc)
63
62
  bibdata_cleanup(xmldoc)
64
63
  svgmap_cleanup(xmldoc)
65
64
  boilerplate_cleanup(xmldoc)
65
+ toc_cleanup(xmldoc)
66
66
  smartquotes_cleanup(xmldoc)
67
67
  variant_cleanup(xmldoc)
68
68
  para_cleanup(xmldoc)
@@ -85,6 +85,29 @@ module Asciidoctor
85
85
  end
86
86
 
87
87
  def smartquotes_cleanup1(xmldoc)
88
+ uninterrupt_quotes_around_xml(xmldoc)
89
+ dumb2smart_quotes(xmldoc)
90
+ end
91
+
92
+ # "abc<tag/>", def => "abc",<tag/> def
93
+ def uninterrupt_quotes_around_xml(xmldoc)
94
+ xmldoc.xpath("//*[following::text()[1]"\
95
+ "[starts-with(., '\"') or starts-with(., \"'\")]]")
96
+ .each do |x|
97
+ uninterrupt_quotes_around_xml1(x)
98
+ end
99
+ end
100
+
101
+ def uninterrupt_quotes_around_xml1(elem)
102
+ prev = elem.at(".//preceding::text()[1]") or return
103
+ /\S$/.match?(prev.text) or return
104
+ foll = elem.at(".//following::text()[1]")
105
+ m = /^(["'][[:punct:]]*)(\s|$)/.match(foll&.text) or return
106
+ foll.content = foll.text.sub(/^(["'][[:punct:]]*)/, "")
107
+ prev.content = "#{prev.text}#{m[1]}"
108
+ end
109
+
110
+ def dumb2smart_quotes(xmldoc)
88
111
  (xmldoc.xpath("//*[child::text()]") - xmldoc.xpath(IGNORE_DUMBQUOTES))
89
112
  .each do |x|
90
113
  x.children.each do |n|
@@ -167,6 +190,42 @@ module Asciidoctor
167
190
  end
168
191
  end
169
192
  end
193
+
194
+ def toc_cleanup(xmldoc)
195
+ xmldoc.xpath("//p[toc]").each do |x|
196
+ x.xpath("./toc").reverse.each do |t|
197
+ x.next = t
198
+ end
199
+ x.remove if x.text.strip.empty?
200
+ end
201
+ xmldoc.xpath("//toc").each { |t| toc_cleanup1(t, xmldoc) }
202
+ end
203
+
204
+ def toc_index(toc, xmldoc)
205
+ depths = toc.xpath("./toc-xpath").each_with_object({}) do |x, m|
206
+ m[x.text] = x["depth"]
207
+ end
208
+ depths.keys.each_with_object([]) do |key, arr|
209
+ xmldoc.xpath(key).each do |x|
210
+ arr << { text: x.children.to_xml, depth: depths[key].to_i,
211
+ target: x.xpath("(./ancestor-or-self::*/@id)[last()]")[0].text,
212
+ line: x.line }
213
+ end
214
+ end.sort_by { |a| a[:line] }
215
+ end
216
+
217
+ def toc_cleanup1(toc, xmldoc)
218
+ depth = 1
219
+ ret = ""
220
+ toc_index(toc, xmldoc).each do |x|
221
+ if depth > x[:depth] then ret += "</ul></li>" * (depth - x[:depth])
222
+ elsif depth < x[:depth] then ret += "<li><ul>" * (x[:depth] - depth)
223
+ end
224
+ ret += "<li><xref target='#{x[:target]}'>#{x[:text]}</xref></li>"
225
+ depth = x[:depth]
226
+ end
227
+ toc.children = "<ul>#{ret}</ul>"
228
+ end
170
229
  end
171
230
  end
172
231
  end
@@ -1,6 +1,5 @@
1
1
  require "date"
2
2
  require "htmlentities"
3
- require "open-uri"
4
3
 
5
4
  module Asciidoctor
6
5
  module Standoc
@@ -158,11 +158,11 @@ module Asciidoctor
158
158
  xmldoc.root << "<bibliography/>" and ins = xmldoc.at("bibliography")
159
159
  ins = ins.add_child("<references hidden='true' normative='false'/>").first
160
160
  refs.each do |x|
161
- ins << <<~END
161
+ ins << <<~BIB
162
162
  <bibitem id="#{x}" type="internal">
163
163
  <docidentifier type="repository">#{x.sub(/^#{prefix}_/, "#{prefix}/")}</docidentifier>
164
164
  </bibitem>
165
- END
165
+ BIB
166
166
  end
167
167
  end
168
168
 
@@ -1,7 +1,6 @@
1
1
  require "date"
2
2
  require "htmlentities"
3
3
  require "json"
4
- require "open-uri"
5
4
 
6
5
  module Asciidoctor
7
6
  module Standoc
@@ -3,32 +3,54 @@ require "metanorma-utils"
3
3
  module Asciidoctor
4
4
  module Standoc
5
5
  module Cleanup
6
- def empty_text_before_first_element(x)
7
- x.children.each do |c|
8
- return false if c.text? and /\S/.match(c.text)
6
+ def empty_text_before_first_element(elem)
7
+ elem.children.each do |c|
8
+ return false if c.text? && /\S/.match(c.text)
9
9
  return true if c.element?
10
10
  end
11
11
  true
12
12
  end
13
13
 
14
- def strip_initial_space(x)
15
- if x.children[0].text?
16
- if !/\S/.match(x.children[0].text)
17
- x.children[0].remove
18
- else
19
- x.children[0].content = x.children[0].text.gsub(/^ /, "")
20
- end
14
+ def strip_initial_space(elem)
15
+ return unless elem.children[0].text?
16
+
17
+ if /\S/.match?(elem.children[0].text)
18
+ elem.children[0].content = elem.children[0].text.gsub(/^ /, "")
19
+ else
20
+ elem.children[0].remove
21
21
  end
22
22
  end
23
23
 
24
24
  def bookmark_cleanup(xmldoc)
25
+ li_bookmark_cleanup(xmldoc)
26
+ dt_bookmark_cleanup(xmldoc)
27
+ end
28
+
29
+ def bookmark_to_id(elem, bookmark)
30
+ parent = bookmark.parent
31
+ elem["id"] = bookmark.remove["id"]
32
+ strip_initial_space(parent)
33
+ end
34
+
35
+ def li_bookmark_cleanup(xmldoc)
25
36
  xmldoc.xpath("//li[descendant::bookmark]").each do |x|
26
- if x&.elements&.first&.name == "p" &&
27
- x&.elements&.first&.elements&.first&.name == "bookmark"
28
- if empty_text_before_first_element(x.elements[0])
29
- x["id"] = x.elements[0].elements[0].remove["id"]
30
- strip_initial_space(x.elements[0])
31
- end
37
+ if x.at("./*[1][local-name() = 'p']/"\
38
+ "*[1][local-name() = 'bookmark']") &&
39
+ empty_text_before_first_element(x.elements[0])
40
+ bookmark_to_id(x, x.elements[0].elements[0])
41
+ end
42
+ end
43
+ end
44
+
45
+ def dt_bookmark_cleanup(xmldoc)
46
+ xmldoc.xpath("//dt[descendant::bookmark]").each do |x|
47
+ if x.at("./*[1][local-name() = 'p']/"\
48
+ "*[1][local-name() = 'bookmark']") &&
49
+ empty_text_before_first_element(x.elements[0])
50
+ bookmark_to_id(x, x.elements[0].elements[0])
51
+ elsif x.at("./*[1][local-name() = 'bookmark']") &&
52
+ empty_text_before_first_element(x)
53
+ bookmark_to_id(x, x.elements[0])
32
54
  end
33
55
  end
34
56
  end
@@ -46,65 +68,67 @@ module Asciidoctor
46
68
  LOCALITY_RE = Regexp.new(LOCALITY_REGEX_STR.gsub(/\s/, ""),
47
69
  Regexp::IGNORECASE | Regexp::MULTILINE)
48
70
 
49
- def tq(x)
50
- x.sub(/^"/, "").sub(/"$/, "")
71
+ def tq(text)
72
+ text.sub(/^"/, "").sub(/"$/, "")
51
73
  end
52
74
 
53
- def extract_localities(x)
54
- f = x&.children&.first or return
75
+ def extract_localities(elem)
76
+ f = elem&.children&.first or return
55
77
  f.text? or return
56
78
  head = f.remove.text
57
- tail = x&.children&.remove
58
- extract_localities1(x, head)
59
- tail and x << tail
79
+ tail = elem&.children&.remove
80
+ extract_localities1(elem, head)
81
+ tail and elem << tail
60
82
  end
61
83
 
62
- def extract_localities1(x, text)
63
- b = x.add_child("<localityStack/>").first if LOCALITY_RE.match text
84
+ def extract_localities1(elem, text)
85
+ b = elem.add_child("<localityStack/>").first if LOCALITY_RE.match text
64
86
  while (m = LOCALITY_RE.match text)
65
87
  ref = m[:ref] ? "<referenceFrom>#{tq m[:ref]}</referenceFrom>" : ""
66
88
  refto = m[:to] ? "<referenceTo>#{tq m[:to]}</referenceTo>" : ""
67
89
  loc = m[:locality]&.downcase || m[:locality2]&.downcase
68
90
  b.add_child("<locality type='#{loc}'>#{ref}#{refto}</locality>")
69
91
  text = m[:text]
70
- b = x.add_child("<localityStack/>").first if m[:punct] == ";"
92
+ b = elem.add_child("<localityStack/>").first if m[:punct] == ";"
71
93
  end
72
- x.add_child(text) if text
94
+ elem.add_child(text) if text
73
95
  end
74
96
 
75
- def xref_to_eref(x)
76
- x["bibitemid"] = x["target"]
77
- unless x["citeas"] = @anchors&.dig(x["target"], :xref)
78
- @internal_eref_namespaces.include?(x["type"]) or
79
- @log.add("Crossreferences", x,
80
- "#{x['target']} does not have a corresponding anchor ID in the bibliography!")
97
+ def xref_to_eref(elem)
98
+ elem["bibitemid"] = elem["target"]
99
+ unless elem["citeas"] = @anchors&.dig(elem["target"], :xref)
100
+ @internal_eref_namespaces.include?(elem["type"]) or
101
+ @log.add("Crossreferences", elem,
102
+ "#{elem['target']} does not have a corresponding "\
103
+ "anchor ID in the bibliography!")
81
104
  end
82
- x.delete("target")
83
- extract_localities(x) unless x.children.empty?
105
+ elem.delete("target")
106
+ extract_localities(elem) unless elem.children.empty?
84
107
  end
85
108
 
86
109
  def xref_cleanup(xmldoc)
87
110
  xmldoc.xpath("//xref").each do |x|
88
111
  /:/.match(x["target"]) and xref_to_internal_eref(x)
89
112
  next unless x.name == "xref"
113
+
90
114
  if refid? x["target"]
91
115
  x.name = "eref"
92
116
  xref_to_eref(x)
93
- else
94
- x.delete("type")
117
+ else x.delete("type")
95
118
  end
96
119
  end
97
120
  end
98
121
 
99
- def xref_to_internal_eref(x)
100
- a = x["target"].split(":", 3)
101
- unless a.size < 2 || a[0].empty? || a[1].empty?
102
- x["target"] = "#{a[0]}_#{a[1]}"
103
- a.size > 2 and x.children = %{anchor="#{a[2..-1].join("")}",#{x&.children&.text}}
104
- x["type"] = a[0]
122
+ def xref_to_internal_eref(elem)
123
+ a = elem["target"].split(":", 3)
124
+ unless a.size < 2 || a[0].empty? || a[1].empty?
125
+ elem["target"] = "#{a[0]}_#{a[1]}"
126
+ a.size > 2 and
127
+ elem.children = %{anchor="#{a[2..-1].join}",#{elem&.children&.text}}
128
+ elem["type"] = a[0]
105
129
  @internal_eref_namespaces << a[0]
106
- x.name = "eref"
107
- xref_to_eref(x)
130
+ elem.name = "eref"
131
+ xref_to_eref(elem)
108
132
  end
109
133
  end
110
134
 
@@ -116,10 +140,11 @@ module Asciidoctor
116
140
 
117
141
  def origin_cleanup(xmldoc)
118
142
  xmldoc.xpath("//origin/concept[termref]").each do |x|
119
- x.replace(x.children)
143
+ t = x.at("./termref")
144
+ x.replace(t)
120
145
  end
121
146
  xmldoc.xpath("//origin").each do |x|
122
- x["citeas"] = @anchors&.dig(x["bibitemid"], :xref) ||
147
+ x["citeas"] = @anchors&.dig(x["bibitemid"], :xref) or
123
148
  @log.add("Crossreferences", x,
124
149
  "#{x['bibitemid']} does not have a corresponding anchor "\
125
150
  "ID in the bibliography!")
@@ -128,68 +153,83 @@ module Asciidoctor
128
153
  end
129
154
 
130
155
  def concept_cleanup(xmldoc)
131
- xmldoc.xpath("//concept").each do |x|
132
- x.delete("term") if x["term"].empty?
133
- if /:/.match(x["key"]) then concept_termbase_cleanup(x)
156
+ xmldoc.xpath("//concept[not(termxref)]").each do |x|
157
+ term = x.at("./refterm")
158
+ term&.remove if term&.text&.empty?
159
+ x.children.remove if x&.children&.text&.strip&.empty?
160
+ key_extract_locality(x)
161
+ if /:/.match?(x["key"]) then concept_termbase_cleanup(x)
134
162
  elsif refid? x["key"] then concept_eref_cleanup(x)
135
- else
136
- concept_xref_cleanup(x)
163
+ else concept_xref_cleanup(x)
137
164
  end
138
165
  x.delete("key")
139
166
  end
140
167
  end
141
168
 
142
- def concept_termbase_cleanup(x)
143
- text = x&.children&.first&.remove&.text
144
- termbase, key = x["key"].split(/:/, 2)
145
- x.add_child(%(<termref base="#{termbase}" target="#{key}">) +
146
- "#{text}</termref>")
169
+ def key_extract_locality(elem)
170
+ return unless /,/.match?(elem["key"])
171
+
172
+ elem.add_child("<locality>#{elem['key'].sub(/^[^,]+,/, '')}</locality>")
173
+ elem["key"] = elem["key"].sub(/,.*$/, "")
174
+ end
175
+
176
+ def concept_termbase_cleanup(elem)
177
+ t = elem&.at("./xrefrender")&.remove&.children
178
+ termbase, key = elem["key"].split(/:/, 2)
179
+ elem.add_child(%(<termref base="#{termbase}" target="#{key}">) +
180
+ "#{t&.to_xml}</termref>")
147
181
  end
148
182
 
149
- def concept_xref_cleanup(x)
150
- text = x&.children&.first&.remove&.text
151
- x.add_child(%(<xref target="#{x['key']}">#{text}</xref>))
183
+ def concept_xref_cleanup(elem)
184
+ t = elem&.at("./xrefrender")&.remove&.children
185
+ elem.add_child(%(<xref target="#{elem['key']}">#{t&.to_xml}</xref>))
152
186
  end
153
187
 
154
- def concept_eref_cleanup(x)
155
- x.children = "<eref>#{x.children.to_xml}</eref>"
156
- extract_localities(x.first_element_child)
188
+ def concept_eref_cleanup(elem)
189
+ t = elem&.at("./xrefrender")&.remove&.children&.to_xml
190
+ l = elem&.at("./locality")&.remove&.children&.to_xml
191
+ elem.add_child "<eref bibitemid='#{elem['key']}'>#{l}</eref>"
192
+ extract_localities(elem.elements[-1])
193
+ elem.elements[-1].add_child(t) if t
157
194
  end
158
195
 
159
- def to_xreftarget(s)
160
- return Metanorma::Utils::to_ncname(s) unless /^[^#]+#.+$/.match(s)
161
- /^(?<pref>[^#]+)#(?<suff>.+)$/ =~ s
162
- pref = pref.gsub(%r([#{Metanorma::Utils::NAMECHAR}]), "_")
163
- suff = suff.gsub(%r([#{Metanorma::Utils::NAMECHAR}]), "_")
196
+ def to_xreftarget(str)
197
+ return Metanorma::Utils::to_ncname(str) unless /^[^#]+#.+$/.match?(str)
198
+
199
+ /^(?<pref>[^#]+)#(?<suff>.+)$/ =~ str
200
+ pref = pref.gsub(%r([#{Metanorma::Utils::NAMECHAR}])o, "_")
201
+ suff = suff.gsub(%r([#{Metanorma::Utils::NAMECHAR}])o, "_")
164
202
  "#{pref}##{suff}"
165
203
  end
166
204
 
167
205
  IDREF = "//*/@id | //review/@from | //review/@to | "\
168
206
  "//callout/@target | //citation/@bibitemid | //eref/@bibitemid".freeze
169
207
 
170
- def anchor_cleanup(x)
171
- anchor_cleanup1(x)
172
- xreftarget_cleanup(x)
208
+ def anchor_cleanup(elem)
209
+ anchor_cleanup1(elem)
210
+ xreftarget_cleanup(elem)
173
211
  end
174
212
 
175
- def anchor_cleanup1(x)
176
- x.xpath(IDREF).each do |s|
213
+ def anchor_cleanup1(elem)
214
+ elem.xpath(IDREF).each do |s|
177
215
  if (ret = Metanorma::Utils::to_ncname(s.value)) != (orig = s.value)
178
216
  s.value = ret
179
217
  output = s.parent.dup
180
218
  output.children.remove
181
- @log.add("Anchors", s.parent, "normalised identifier in #{output} from #{orig}")
219
+ @log.add("Anchors", s.parent,
220
+ "normalised identifier in #{output} from #{orig}")
182
221
  end
183
222
  end
184
223
  end
185
224
 
186
- def xreftarget_cleanup(x)
187
- x.xpath("//xref/@target").each do |s|
225
+ def xreftarget_cleanup(elem)
226
+ elem.xpath("//xref/@target").each do |s|
188
227
  if (ret = to_xreftarget(s.value)) != (orig = s.value)
189
228
  s.value = ret
190
229
  output = s.parent.dup
191
230
  output.children.remove
192
- @log.add("Anchors", s.parent, "normalised identifier in #{output} from #{orig}")
231
+ @log.add("Anchors", s.parent,
232
+ "normalised identifier in #{output} from #{orig}")
193
233
  end
194
234
  end
195
235
  end