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.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.rubocop.yml +5 -3
- data/Gemfile.devel +0 -0
- data/lib/asciidoctor/standoc/base.rb +41 -36
- data/lib/asciidoctor/standoc/biblio.rng +4 -6
- data/lib/asciidoctor/standoc/blocks.rb +44 -14
- data/lib/asciidoctor/standoc/blocks_notes.rb +41 -24
- data/lib/asciidoctor/standoc/cleanup.rb +33 -78
- data/lib/asciidoctor/standoc/cleanup_block.rb +77 -62
- data/lib/asciidoctor/standoc/cleanup_boilerplate.rb +51 -29
- data/lib/asciidoctor/standoc/cleanup_footnotes.rb +1 -0
- data/lib/asciidoctor/standoc/cleanup_image.rb +71 -0
- data/lib/asciidoctor/standoc/cleanup_maths.rb +37 -28
- data/lib/asciidoctor/standoc/cleanup_ref.rb +24 -15
- data/lib/asciidoctor/standoc/cleanup_ref_dl.rb +1 -1
- data/lib/asciidoctor/standoc/cleanup_reqt.rb +47 -0
- data/lib/asciidoctor/standoc/cleanup_section.rb +21 -15
- data/lib/asciidoctor/standoc/converter.rb +10 -3
- data/lib/asciidoctor/standoc/datamodel/plantuml_renderer.rb +67 -66
- data/lib/asciidoctor/standoc/front.rb +35 -18
- data/lib/asciidoctor/standoc/front_contributor.rb +5 -5
- data/lib/asciidoctor/standoc/inline.rb +1 -1
- data/lib/asciidoctor/standoc/isodoc.rng +304 -1
- data/lib/asciidoctor/standoc/lists.rb +4 -2
- data/lib/asciidoctor/standoc/macros.rb +50 -23
- data/lib/asciidoctor/standoc/macros_form.rb +63 -0
- data/lib/asciidoctor/standoc/ref.rb +87 -112
- data/lib/asciidoctor/standoc/ref_date_id.rb +62 -0
- data/lib/asciidoctor/standoc/ref_sect.rb +22 -19
- data/lib/asciidoctor/standoc/section.rb +3 -1
- data/lib/asciidoctor/standoc/terms.rb +27 -16
- data/lib/asciidoctor/standoc/utils.rb +35 -9
- data/lib/asciidoctor/standoc/validate.rb +30 -28
- data/lib/metanorma-standoc.rb +0 -1
- data/lib/metanorma/standoc/version.rb +5 -5
- data/metanorma-standoc.gemspec +11 -11
- data/spec/asciidoctor/base_spec.rb +78 -8
- data/spec/asciidoctor/blocks_spec.rb +832 -727
- data/spec/asciidoctor/cleanup_sections_spec.rb +52 -15
- data/spec/asciidoctor/cleanup_spec.rb +1860 -1874
- data/spec/asciidoctor/inline_spec.rb +272 -273
- data/spec/asciidoctor/isobib_cache_spec.rb +406 -358
- data/spec/asciidoctor/macros_spec.rb +539 -437
- data/spec/asciidoctor/macros_yaml2text_spec.rb +1 -1
- data/spec/asciidoctor/refs_spec.rb +135 -7
- data/spec/asciidoctor/section_spec.rb +743 -690
- data/spec/assets/html-override.css +1 -0
- data/spec/assets/word-override.css +1 -0
- data/spec/spec_helper.rb +11 -9
- data/spec/vcr_cassettes/dated_iso_ref_joint_iso_iec.yml +60 -60
- data/spec/vcr_cassettes/isobib_get_123.yml +14 -14
- data/spec/vcr_cassettes/isobib_get_123_1.yml +30 -30
- data/spec/vcr_cassettes/isobib_get_123_1_fr.yml +42 -42
- data/spec/vcr_cassettes/isobib_get_123_2001.yml +15 -15
- data/spec/vcr_cassettes/isobib_get_124.yml +15 -15
- data/spec/vcr_cassettes/rfcbib_get_rfc8341.yml +14 -14
- data/spec/vcr_cassettes/separates_iev_citations_by_top_level_clause.yml +53 -49
- metadata +72 -68
- data/.rubocop.ribose.yml +0 -66
- data/.rubocop.tb.yml +0 -650
- data/spec/asciidoctor/macros_lutaml_spec.rb +0 -80
@@ -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
|
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
|
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
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
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
|
-
|
35
|
-
|
35
|
+
|
36
|
+
math = x.text.gsub(/</, "<").gsub(/>/, ">")
|
37
|
+
.gsub(/"/, '"').gsub(/'/, "'").gsub(/&/, "&")
|
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
|
46
|
+
x.children = x.children.to_xml
|
47
|
+
.gsub(/^\s/, " ").gsub(/\s$/, " ")
|
44
48
|
end
|
45
49
|
end
|
46
50
|
|
47
51
|
def mathml_namespace(stem)
|
48
|
-
stem.xpath("./math"
|
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])]",
|
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
|
-
|
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 = "
|
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)
|
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.
|
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
|
17
|
+
refs.xpath("./bibitem").each(&:remove)
|
18
18
|
bib.reverse.each do |b|
|
19
|
-
insert and insert.next = b.to_xml or
|
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"
|
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 |
|
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
|
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
|
-
|
75
|
-
|
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(
|
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{^
|
120
|
-
|
121
|
-
|
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
|
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']]")
|
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.
|
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
|
-
|
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(
|
200
|
-
replace_title(
|
201
|
-
replace_title(
|
202
|
-
replace_title(
|
203
|
-
replace_title(
|
204
|
-
replace_title(
|
205
|
-
section_names_refs_cleanup(
|
206
|
-
section_names_terms_cleanup(
|
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(
|
210
|
-
replace_title(
|
214
|
+
def section_names_refs_cleanup(xml)
|
215
|
+
replace_title(xml, "//references[@normative = 'true']",
|
211
216
|
@i18n&.normref, true)
|
212
|
-
replace_title(
|
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']",
|
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)
|