metanorma-standoc 1.8.6 → 1.9.2

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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +5 -3
  4. data/Gemfile.devel +0 -0
  5. data/lib/asciidoctor/standoc/base.rb +41 -36
  6. data/lib/asciidoctor/standoc/biblio.rng +4 -6
  7. data/lib/asciidoctor/standoc/blocks.rb +44 -14
  8. data/lib/asciidoctor/standoc/blocks_notes.rb +41 -24
  9. data/lib/asciidoctor/standoc/cleanup.rb +33 -78
  10. data/lib/asciidoctor/standoc/cleanup_block.rb +77 -62
  11. data/lib/asciidoctor/standoc/cleanup_boilerplate.rb +51 -29
  12. data/lib/asciidoctor/standoc/cleanup_footnotes.rb +1 -0
  13. data/lib/asciidoctor/standoc/cleanup_image.rb +71 -0
  14. data/lib/asciidoctor/standoc/cleanup_maths.rb +37 -28
  15. data/lib/asciidoctor/standoc/cleanup_ref.rb +24 -15
  16. data/lib/asciidoctor/standoc/cleanup_ref_dl.rb +1 -1
  17. data/lib/asciidoctor/standoc/cleanup_reqt.rb +47 -0
  18. data/lib/asciidoctor/standoc/cleanup_section.rb +21 -15
  19. data/lib/asciidoctor/standoc/converter.rb +10 -3
  20. data/lib/asciidoctor/standoc/datamodel/plantuml_renderer.rb +67 -66
  21. data/lib/asciidoctor/standoc/front.rb +35 -18
  22. data/lib/asciidoctor/standoc/front_contributor.rb +5 -5
  23. data/lib/asciidoctor/standoc/inline.rb +1 -1
  24. data/lib/asciidoctor/standoc/isodoc.rng +304 -1
  25. data/lib/asciidoctor/standoc/lists.rb +4 -2
  26. data/lib/asciidoctor/standoc/macros.rb +50 -23
  27. data/lib/asciidoctor/standoc/macros_form.rb +63 -0
  28. data/lib/asciidoctor/standoc/ref.rb +87 -112
  29. data/lib/asciidoctor/standoc/ref_date_id.rb +62 -0
  30. data/lib/asciidoctor/standoc/ref_sect.rb +22 -19
  31. data/lib/asciidoctor/standoc/section.rb +3 -1
  32. data/lib/asciidoctor/standoc/terms.rb +27 -16
  33. data/lib/asciidoctor/standoc/utils.rb +35 -9
  34. data/lib/asciidoctor/standoc/validate.rb +30 -28
  35. data/lib/metanorma-standoc.rb +0 -1
  36. data/lib/metanorma/standoc/version.rb +5 -5
  37. data/metanorma-standoc.gemspec +11 -11
  38. data/spec/asciidoctor/base_spec.rb +78 -8
  39. data/spec/asciidoctor/blocks_spec.rb +832 -727
  40. data/spec/asciidoctor/cleanup_sections_spec.rb +52 -15
  41. data/spec/asciidoctor/cleanup_spec.rb +1860 -1874
  42. data/spec/asciidoctor/inline_spec.rb +272 -273
  43. data/spec/asciidoctor/isobib_cache_spec.rb +406 -358
  44. data/spec/asciidoctor/macros_spec.rb +539 -437
  45. data/spec/asciidoctor/macros_yaml2text_spec.rb +1 -1
  46. data/spec/asciidoctor/refs_spec.rb +135 -7
  47. data/spec/asciidoctor/section_spec.rb +743 -690
  48. data/spec/assets/html-override.css +1 -0
  49. data/spec/assets/word-override.css +1 -0
  50. data/spec/spec_helper.rb +11 -9
  51. data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +60 -60
  52. data/spec/vcr_cassettes/isobib_get_123.yml +14 -14
  53. data/spec/vcr_cassettes/isobib_get_123_1.yml +30 -30
  54. data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +42 -42
  55. data/spec/vcr_cassettes/isobib_get_123_2001.yml +15 -15
  56. data/spec/vcr_cassettes/isobib_get_124.yml +15 -15
  57. data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +14 -14
  58. data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +53 -49
  59. metadata +72 -68
  60. data/.rubocop.ribose.yml +0 -66
  61. data/.rubocop.tb.yml +0 -650
  62. data/spec/asciidoctor/macros_lutaml_spec.rb +0 -80
@@ -20,6 +20,7 @@ module Asciidoctor
20
20
  nomatches = true
21
21
  xmldoc.xpath(q).each do |s|
22
22
  next if s.children.map { |c| c.text? && /[[:alpha:]]/.match(c.text) }.any?
23
+
23
24
  s.previous_element << s.first_element_child.remove
24
25
  s.remove
25
26
  nomatches = false
@@ -0,0 +1,71 @@
1
+ module Asciidoctor
2
+ module Standoc
3
+ module Cleanup
4
+ def svgmap_cleanup(xmldoc)
5
+ svgmap_moveattrs(xmldoc)
6
+ svgmap_populate(xmldoc)
7
+ Metanorma::Utils::svgmap_rewrite(xmldoc, @localdir)
8
+ end
9
+
10
+ def guid?(str)
11
+ /^_[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i
12
+ .match(str)
13
+ end
14
+
15
+ def svgmap_moveattrs(xmldoc)
16
+ xmldoc.xpath("//svgmap").each do |s|
17
+ f = s.at(".//figure") or next
18
+ if (t = s.at("./name")) && !f.at("./name")
19
+ f.children.first.previous = t.remove
20
+ end
21
+ if s["id"] && guid?(f["id"])
22
+ f["id"] = s["id"]
23
+ s.delete("id")
24
+ end
25
+ svgmap_moveattrs1(s, f)
26
+ end
27
+ end
28
+
29
+ def svgmap_moveattrs1(s, f)
30
+ %w(unnumbered number subsequence keep-with-next
31
+ keep-lines-together).each do |a|
32
+ next if f[a] || !s[a]
33
+
34
+ f[a] = s[a]
35
+ s.delete(a)
36
+ end
37
+ end
38
+
39
+ def svgmap_populate(xmldoc)
40
+ xmldoc.xpath("//svgmap").each do |s|
41
+ s1 = s.dup
42
+ s.children.remove
43
+ f = s1.at(".//figure") and s << f
44
+ s1.xpath(".//li").each do |li|
45
+ t = li&.at(".//eref | .//link | .//xref") or next
46
+ href = t.xpath("./following-sibling::node()")
47
+ href.empty? or
48
+ s << %[<target href="#{svgmap_target(href)}">#{t.to_xml}</target>]
49
+ end
50
+ end
51
+ end
52
+
53
+ def svgmap_target(nodeset)
54
+ nodeset.each do |n|
55
+ next unless n.name == "link"
56
+
57
+ n.children = n["target"]
58
+ end
59
+ nodeset.text.sub(/^[,; ]/, "").strip
60
+ end
61
+
62
+ def img_cleanup(xmldoc)
63
+ return xmldoc unless @datauriimage
64
+
65
+ xmldoc.xpath("//image").each do |i|
66
+ i["src"] = Metanorma::Utils::datauri(i["src"], @localdir)
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -3,36 +3,39 @@ require "pathname"
3
3
  require "open-uri"
4
4
  require "html2doc"
5
5
  require "asciimath2unitsml"
6
- require_relative "./cleanup_block.rb"
7
- require_relative "./cleanup_footnotes.rb"
8
- require_relative "./cleanup_ref.rb"
9
- require_relative "./cleanup_ref_dl.rb"
10
- require_relative "./cleanup_boilerplate.rb"
11
- require_relative "./cleanup_section.rb"
12
- require_relative "./cleanup_terms.rb"
13
- require_relative "./cleanup_inline.rb"
14
- require_relative "./cleanup_amend.rb"
6
+ require_relative "./cleanup_block"
7
+ require_relative "./cleanup_footnotes"
8
+ require_relative "./cleanup_ref"
9
+ require_relative "./cleanup_ref_dl"
10
+ require_relative "./cleanup_boilerplate"
11
+ require_relative "./cleanup_section"
12
+ require_relative "./cleanup_terms"
13
+ require_relative "./cleanup_inline"
14
+ require_relative "./cleanup_amend"
15
15
  require "relaton_iev"
16
16
 
17
17
  module Asciidoctor
18
18
  module Standoc
19
19
  module Cleanup
20
20
  def asciimath2mathml(text)
21
- text = text.gsub(%r{<stem type="AsciiMath">(.+?)</stem>}m) do |m|
22
- "<amathstem>#{HTMLEntities.new.decode($1)}</amathstem>"
23
- end
24
- text = Html2Doc.asciimath_to_mathml(text, ["<amathstem>", "</amathstem>"])
25
- x = Nokogiri::XML(text)
26
- x.xpath("//*[local-name() = 'math'][not(parent::stem)]").each do |y|
27
- y.wrap("<stem type='MathML'></stem>")
28
- end
29
- x.to_xml
21
+ text = text.gsub(%r{<stem type="AsciiMath">(.+?)</stem>}m) do
22
+ "<amathstem>#{HTMLEntities.new.decode($1)}</amathstem>"
23
+ end
24
+ text = Html2Doc.asciimath_to_mathml(text,
25
+ ["<amathstem>", "</amathstem>"])
26
+ x = Nokogiri::XML(text)
27
+ x.xpath("//*[local-name() = 'math'][not(parent::stem)]").each do |y|
28
+ y.wrap("<stem type='MathML'></stem>")
29
+ end
30
+ x.to_xml
30
31
  end
31
32
 
32
33
  def xml_unescape_mathml(x)
33
34
  return if x.children.any? { |y| y.element? }
34
- math = x.text.gsub(/&lt;/, "<").gsub(/&gt;/, ">").gsub(/&quot;/, '"').gsub(/&apos;/, "'").gsub(/&amp;/, "&").
35
- gsub(/<[^: \r\n\t\/]+:/, "<").gsub(/<\/[^ \r\n\t:]+:/, "</")
35
+
36
+ math = x.text.gsub(/&lt;/, "<").gsub(/&gt;/, ">")
37
+ .gsub(/&quot;/, '"').gsub(/&apos;/, "'").gsub(/&amp;/, "&")
38
+ .gsub(/<[^: \r\n\t\/]+:/, "<").gsub(/<\/[^ \r\n\t:]+:/, "</")
36
39
  x.children = math
37
40
  end
38
41
 
@@ -40,12 +43,13 @@ module Asciidoctor
40
43
 
41
44
  def mathml_preserve_space(m)
42
45
  m.xpath(".//m:mtext", "m" => MATHML_NS).each do |x|
43
- x.children = x.children.to_xml.gsub(/^\s/, "&#xA0;").gsub(/\s$/, "&#xA0;")
46
+ x.children = x.children.to_xml
47
+ .gsub(/^\s/, "&#xA0;").gsub(/\s$/, "&#xA0;")
44
48
  end
45
49
  end
46
50
 
47
51
  def mathml_namespace(stem)
48
- stem.xpath("./math", ).each { |x| x.default_namespace = MATHML_NS }
52
+ stem.xpath("./math").each { |x| x.default_namespace = MATHML_NS }
49
53
  end
50
54
 
51
55
  def mathml_mi_italics
@@ -55,7 +59,8 @@ module Asciidoctor
55
59
 
56
60
  # presuppose multichar mi upright, singlechar mi MathML default italic
57
61
  def mathml_italicise(x)
58
- x.xpath(".//m:mi[not(ancestor::*[@mathvariant])]", "m" => MATHML_NS).each do |i|
62
+ x.xpath(".//m:mi[not(ancestor::*[@mathvariant])]",
63
+ "m" => MATHML_NS).each do |i|
59
64
  char = HTMLEntities.new.decode(i.text)
60
65
  i["mathvariant"] = "normal" if mi_italicise?(char)
61
66
  end
@@ -63,10 +68,11 @@ module Asciidoctor
63
68
 
64
69
  def mi_italicise?(c)
65
70
  return false if c.length > 1
66
- if /\p{Greek}/.match(c)
71
+
72
+ if /\p{Greek}/.match?(c)
67
73
  /\p{Lower}/.match(c) && !mathml_mi_italics[:lowergreek] ||
68
74
  /\p{Upper}/.match(c) && !mathml_mi_italics[:uppergreek]
69
- elsif /\p{Latin}/.match(c)
75
+ elsif /\p{Latin}/.match?(c)
70
76
  /\p{Lower}/.match(c) && !mathml_mi_italics[:lowerroman] ||
71
77
  /\p{Upper}/.match(c) && !mathml_mi_italics[:upperroman]
72
78
  else
@@ -74,7 +80,7 @@ module Asciidoctor
74
80
  end
75
81
  end
76
82
 
77
- UNITSML_NS = "http://unitsml.nist.gov/2005".freeze
83
+ UNITSML_NS = "https://schema.unitsml.org/unitsml/1.0".freeze
78
84
 
79
85
  def add_misc_container(xmldoc)
80
86
  unless ins = xmldoc.at("//misc-container")
@@ -87,6 +93,7 @@ module Asciidoctor
87
93
 
88
94
  def mathml_unitsML(xmldoc)
89
95
  return unless xmldoc.at(".//m:*", "m" => UNITSML_NS)
96
+
90
97
  misc = add_misc_container(xmldoc)
91
98
  unitsml = misc.add_child("<UnitsML xmlns='#{UNITSML_NS}'/>").first
92
99
  %w(Unit CountedItem Quantity Dimension Prefix).each do |t|
@@ -95,12 +102,14 @@ module Asciidoctor
95
102
  end
96
103
 
97
104
  def gather_unitsml(unitsml, xmldoc, t)
98
- tags = xmldoc.xpath(".//m:#{t}", "m" => UNITSML_NS).each_with_object({}) do |x, m|
105
+ tags = xmldoc.xpath(".//m:#{t}", "m" => UNITSML_NS)
106
+ .each_with_object({}) do |x, m|
99
107
  m[x["id"]] = x.remove
100
108
  end
101
109
  return if tags.empty?
110
+
102
111
  set = unitsml.add_child("<#{t}Set/>").first
103
- tags.values.each { |v| set << v }
112
+ tags.each_value { |v| set << v }
104
113
  end
105
114
 
106
115
  def asciimath2unitsml_options
@@ -14,9 +14,10 @@ module Asciidoctor
14
14
  fold_notes_into_biblio(refs)
15
15
  bib = sort_biblio(refs.xpath("./bibitem"))
16
16
  insert = refs&.at("./bibitem")&.previous_element
17
- refs.xpath("./bibitem").each { |b| b.remove }
17
+ refs.xpath("./bibitem").each(&:remove)
18
18
  bib.reverse.each do |b|
19
- insert and insert.next = b.to_xml or refs.children.first.add_previous_sibling b.to_xml
19
+ insert and insert.next = b.to_xml or
20
+ refs.children.first.add_previous_sibling b.to_xml
20
21
  end
21
22
  extract_notes_from_biblio(refs)
22
23
  refs.xpath("./references").each { |r| biblio_reorder1(r) }
@@ -24,7 +25,7 @@ module Asciidoctor
24
25
 
25
26
  def fold_notes_into_biblio(refs)
26
27
  refs.xpath("./bibitem").each do |r|
27
- while r&.next_element&.name == "note" do
28
+ while r&.next_element&.name == "note"
28
29
  r.next_element["appended"] = true
29
30
  r << r.next_element.remove
30
31
  end
@@ -49,12 +50,15 @@ module Asciidoctor
49
50
  # only numeric references are renumbered
50
51
  def biblio_renumber(xmldoc)
51
52
  i = 0
52
- xmldoc.xpath("//bibliography//references | //clause//references | //annex//references").each do |r|
53
+ xmldoc.xpath("//bibliography//references | //clause//references | "\
54
+ "//annex//references").each do |r|
53
55
  next if r["normative"] == "true"
56
+
54
57
  r.xpath("./bibitem").each do |b|
55
58
  i += 1
56
59
  next unless docid = b.at("./docidentifier[@type = 'metanorma']")
57
- next unless /^\[\d+\]$/.match(docid.text)
60
+ next unless /^\[\d+\]$/.match?(docid.text)
61
+
58
62
  docid.children = "[#{i}]"
59
63
  end
60
64
  end
@@ -70,9 +74,10 @@ module Asciidoctor
70
74
 
71
75
  def normref_cleanup(xmldoc)
72
76
  r = xmldoc.at(self.class::NORM_REF) || return
73
- preface = r.xpath("./title/following-sibling::*") & # intersection
74
- r.xpath("./bibitem[1]/preceding-sibling::*")
75
- preface.each { |n| n.remove }
77
+ preface = ((r.xpath("./title/following-sibling::*") & # intersection
78
+ r.xpath("./bibitem[1]/preceding-sibling::*")) -
79
+ r.xpath("./note[@type = 'boilerplate']/descendant-or-self::*"))
80
+ preface.each(&:remove)
76
81
  end
77
82
 
78
83
  def biblio_cleanup(xmldoc)
@@ -92,6 +97,7 @@ module Asciidoctor
92
97
  def format_ref(ref, type)
93
98
  return @isodoc.docid_prefix(type, ref) if type != "metanorma"
94
99
  return "[#{ref}]" if /^\d+$/.match(ref) && !/^\[.*\]$/.match(ref)
100
+
95
101
  ref
96
102
  end
97
103
 
@@ -103,7 +109,7 @@ module Asciidoctor
103
109
 
104
110
  def reference_names(xmldoc)
105
111
  xmldoc.xpath("//bibitem[not(ancestor::bibitem)]").each do |ref|
106
- isopub = ref.at(ISO_PUBLISHER_XPATH)
112
+ # isopub = ref.at(ISO_PUBLISHER_XPATH)
107
113
  docid = ref.at("./docidentifier[@type = 'metanorma']") ||
108
114
  ref.at("./docidentifier[not(@type = 'DOI')]") or next
109
115
  reference = format_ref(docid.text, docid["type"])
@@ -111,18 +117,20 @@ module Asciidoctor
111
117
  end
112
118
  end
113
119
 
114
- def fetch_termbase(termbase, id)
120
+ def fetch_termbase(_termbase, _id)
115
121
  ""
116
122
  end
117
123
 
118
124
  def read_local_bibitem(uri)
119
- return nil if %r{^http[s]?://}.match(uri)
120
- file = @localdir + uri + ".rxl"
121
- File.file?(file) or file = @localdir + uri + ".xml"
125
+ return nil if %r{^https?://}.match?(uri)
126
+
127
+ file = "#{@localdir}#{uri}.rxl"
128
+ File.file?(file) or file = "#{@localdir}#{uri}.xml"
122
129
  File.file?(file) or return nil
123
130
  xml = Nokogiri::XML(File.read(file, encoding: "utf-8"))
124
131
  ret = xml.at("//*[local-name() = 'bibdata']") or return nil
125
- ret = Nokogiri::XML(ret.to_xml.sub(%r{(<bibdata[^>]*?) xmlns=("[^"]+"|'[^']+')}, "\\1")).root
132
+ ret = Nokogiri::XML(ret.to_xml
133
+ .sub(%r{(<bibdata[^>]*?) xmlns=("[^"]+"|'[^']+')}, "\\1")).root
126
134
  ret.name = "bibitem"
127
135
  ins = ret.at("./*[local-name() = 'docidentifier']") or return nil
128
136
  ins.previous = %{<uri type="citation">#{uri}</uri>}
@@ -132,7 +140,8 @@ module Asciidoctor
132
140
 
133
141
  # if citation uri points to local file, get bibitem from it
134
142
  def fetch_local_bibitem(xmldoc)
135
- xmldoc.xpath("//bibitem[formattedref][uri[@type = 'citation']]").each do |b|
143
+ xmldoc.xpath("//bibitem[formattedref][uri[@type = 'citation']]")
144
+ .each do |b|
136
145
  uri = b&.at("./uri[@type = 'citation']")&.text
137
146
  bibitem = read_local_bibitem(uri) or next
138
147
  bibitem["id"] = b["id"]
@@ -8,7 +8,7 @@ module Asciidoctor
8
8
  xmldoc.xpath("//clause[@bibitem = 'true']").each do |c|
9
9
  bib = dl_bib_extract(c) or next
10
10
  validate_ref_dl(bib, c)
11
- bibitemxml = RelatonBib::BibliographicItem.new(RelatonBib::HashConverter::hash_to_bib(bib)).to_xml or next
11
+ bibitemxml = RelatonBib::BibliographicItem.from_hash(bib).to_xml or next
12
12
  bibitem = Nokogiri::XML(bibitemxml)
13
13
  bibitem.root["id"] = c["id"] if c["id"] && !/^_/.match(c["id"])
14
14
  c.replace(bibitem.root)
@@ -0,0 +1,47 @@
1
+ module Asciidoctor
2
+ module Standoc
3
+ module Cleanup
4
+ def requirement_cleanup(reqt)
5
+ requirement_descriptions(reqt)
6
+ requirement_inherit(reqt)
7
+ end
8
+
9
+ def requirement_inherit(reqt)
10
+ reqt.xpath("//requirement | //recommendation | //permission")
11
+ .each do |r|
12
+ ins = r.at("./classification") ||
13
+ r.at("./description | ./measurementtarget | ./specification | "\
14
+ "./verification | ./import | ./description | ./requirement | "\
15
+ "./recommendation | ./permission")
16
+ r.xpath("./*//inherit").each { |i| ins.previous = i }
17
+ end
18
+ end
19
+
20
+ def requirement_descriptions(reqt)
21
+ reqt.xpath("//requirement | //recommendation | //permission")
22
+ .each do |r|
23
+ r.children.each do |e|
24
+ unless e.element? && (reqt_subpart(e.name) ||
25
+ %w(requirement recommendation permission).include?(e.name))
26
+ t = Nokogiri::XML::Element.new("description", reqt)
27
+ e.before(t)
28
+ t.children = e.remove
29
+ end
30
+ end
31
+ requirement_cleanup1(r)
32
+ end
33
+ end
34
+
35
+ def requirement_cleanup1(reqt)
36
+ while d = reqt.at("./description[following-sibling::*[1]"\
37
+ "[self::description]]")
38
+ n = d.next.remove
39
+ d << n.children
40
+ end
41
+ reqt.xpath("./description[normalize-space(.)='']").each do |r|
42
+ r.replace("\n")
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -43,7 +43,7 @@ module Asciidoctor
43
43
  end
44
44
 
45
45
  def bibabstract_location(x)
46
- bibabstract = x.at("//bibdata/script") || x.at("//bibdata/language") ||
46
+ x.at("//bibdata/script") || x.at("//bibdata/language") ||
47
47
  x.at("//bibdata/contributor[not(following-sibling::contributor)]") ||
48
48
  x.at("//bibdata/date[not(following-sibling::date)]") ||
49
49
  x.at("//docnumber") ||
@@ -74,11 +74,11 @@ module Asciidoctor
74
74
  make_bibliography(x, s)
75
75
  x.xpath("//sections/annex").reverse_each { |r| s.next = r.remove }
76
76
  end
77
-
78
77
  def make_annexes(x)
79
78
  x.xpath("//*[@annex]").each do |y|
80
79
  y.delete("annex")
81
80
  next if y.name == "annex" || !y.ancestors("annex").empty?
81
+
82
82
  y.wrap("<annex/>")
83
83
  y.parent["id"] = "_#{UUIDTools::UUID.random_create}"
84
84
  y.parent["obligation"] = y["obligation"]
@@ -98,6 +98,7 @@ module Asciidoctor
98
98
  def sections_level_cleanup(x)
99
99
  m = maxlevel(x)
100
100
  return if m < 6
101
+
101
102
  m.downto(6).each do |l|
102
103
  x.xpath("//clause[@level = '#{l}']").each do |c|
103
104
  c.delete("level")
@@ -151,6 +152,7 @@ module Asciidoctor
151
152
 
152
153
  def preface_clausebefore_cleanup(xmldoc)
153
154
  return unless xmldoc.at("//preface")
155
+
154
156
  unless ins = xmldoc.at("//preface").children.first
155
157
  xmldoc.at("//preface") << " "
156
158
  ins = xmldoc.at("//preface").children.first
@@ -163,6 +165,7 @@ module Asciidoctor
163
165
 
164
166
  def sections_clausebefore_cleanup(xmldoc)
165
167
  return unless xmldoc.at("//sections")
168
+
166
169
  unless ins = xmldoc.at("//sections").children.first
167
170
  xmldoc.at("//sections") << " "
168
171
  ins = xmldoc.at("//sections").children.first
@@ -186,8 +189,10 @@ module Asciidoctor
186
189
 
187
190
  def replace_title(doc, xpath, text, first = false)
188
191
  return unless text
192
+
189
193
  doc.xpath(xpath).each_with_index do |node, i|
190
194
  next if first && !i.zero?
195
+
191
196
  title = get_or_make_title(node)
192
197
  fn = title.xpath("./fn")
193
198
  fn.each { |n| n.remove }
@@ -196,24 +201,24 @@ module Asciidoctor
196
201
  end
197
202
  end
198
203
 
199
- def sections_names_cleanup(x)
200
- replace_title(x, "//clause[@type = 'scope']", @i18n&.scope)
201
- replace_title(x, "//preface//abstract", @i18n&.abstract)
202
- replace_title(x, "//foreword", @i18n&.foreword)
203
- replace_title(x, "//introduction", @i18n&.introduction)
204
- replace_title(x, "//acknowledgements", @i18n&.acknowledgements)
205
- section_names_refs_cleanup(x)
206
- section_names_terms_cleanup(x)
204
+ def sections_names_cleanup(xml)
205
+ replace_title(xml, "//clause[@type = 'scope']", @i18n&.scope)
206
+ replace_title(xml, "//preface//abstract", @i18n&.abstract)
207
+ replace_title(xml, "//foreword", @i18n&.foreword)
208
+ replace_title(xml, "//introduction", @i18n&.introduction)
209
+ replace_title(xml, "//acknowledgements", @i18n&.acknowledgements)
210
+ section_names_refs_cleanup(xml)
211
+ section_names_terms_cleanup(xml)
207
212
  end
208
213
 
209
- def section_names_refs_cleanup(x)
210
- replace_title(x, "//references[@normative = 'true']",
214
+ def section_names_refs_cleanup(xml)
215
+ replace_title(xml, "//references[@normative = 'true']",
211
216
  @i18n&.normref, true)
212
- replace_title(x, "//references[@normative = 'false']",
217
+ replace_title(xml, "//references[@normative = 'false']",
213
218
  @i18n&.bibliography, true)
214
219
  end
215
220
 
216
- NO_SYMABBR = "[.//definitions[not(@type)]]"
221
+ NO_SYMABBR = "[.//definitions[not(@type)]]".freeze
217
222
  SYMABBR = "[.//definitions[@type = 'symbols']"\
218
223
  "[@type = 'abbreviated_terms']]".freeze
219
224
  SYMnoABBR = "[.//definitions[@type = 'symbols']"\
@@ -223,7 +228,8 @@ module Asciidoctor
223
228
 
224
229
  def section_names_terms_cleanup(x)
225
230
  replace_title(x, "//definitions[@type = 'symbols']", @i18n&.symbols)
226
- replace_title(x, "//definitions[@type = 'abbreviated_terms']", @i18n&.abbrev)
231
+ replace_title(x, "//definitions[@type = 'abbreviated_terms']",
232
+ @i18n&.abbrev)
227
233
  replace_title(x, "//definitions[not(@type)]", @i18n&.symbolsabbrev)
228
234
  replace_title(x, "//terms#{SYMnoABBR} | //clause[.//terms]#{SYMnoABBR}",
229
235
  @i18n&.termsdefsymbols, true)